diff --git a/backend/experiment/actions/score.py b/backend/experiment/actions/score.py index 9f0f47c0f..9d6cc7a4e 100644 --- a/backend/experiment/actions/score.py +++ b/backend/experiment/actions/score.py @@ -2,37 +2,51 @@ from django.utils.translation import gettext as _ +from result.models import Result +from session.models import Session from .base_action import BaseAction -class Score(BaseAction): # pylint: disable=too-few-public-methods +class Score(BaseAction): """ - Provide data for an intermediate score view + Provide data for a score view, presenting feedback to a participant after a Trial + Relates to client component: Score.ts - Relates to client component: Score.js + Args: + session: a Session object + title: the title of the score page + result: the result for which section and/or score should be reported + score: the score to report, will override result.score + score_message: a function which constructs feedback text based on the score + config: a dict with the following settings: + - show_section: whether metadata of the previous section should be shown + - show_total_score: whether the total score should be shown + icon: the name of a themify-icon shown with the view or None + timer: int or None. If int, wait for as many seconds until showing the next view + feedback: An additional feedback text """ ID = 'SCORE' - def __init__(self, session, title: str = None, score=None, score_message=None, config=None, icon=None, timer=None, feedback=None): - """ Score presents feedback to a participant after a Trial - - session: a Session object - - title: the title of the score page - - score_message: a function which constructs feedback text based on the score - - config: a dict with the following settings: - - show_section: whether metadata of the previous section should be shown - - show_total_score: whether the total score should be shown - - icon: the name of a themify-icon shown with the view or None - - timer: int or None. If int, wait for as many seconds until showing the next view - - feedback: An additional feedback text - """ - self.session = session + def __init__( + self, + session: Session, + title: str = '', + result: Result = None, + score: float = None, + score_message: str = '', + config: dict = {}, + icon: str = None, + timer: int = None, + feedback: str = None, + ): self.title = title or _('Round {get_rounds_passed} / {total_rounds}').format( get_rounds_passed=session.get_rounds_passed(), - total_rounds=self.session.block.rounds + total_rounds=session.block.rounds, ) - self.score = score or session.last_score() - self.score_message = score_message or self.default_score_message + self.session = session + self.score = self.get_score(score, result) + self.score_message = score_message or self.default_score_message(self.score) self.feedback = feedback self.config = { 'show_section': False, @@ -46,30 +60,48 @@ def __init__(self, session, title: str = None, score=None, score_message=None, c 'next': _('Next'), 'listen_explainer': _('You listened to:') } + self.last_song = result.section.song_label() if result else session.last_song() self.timer = timer - def action(self): - """Serialize score data""" + def action(self) -> dict: + """Serialize score data + + Returns: + dictionary with the relevant data for the Score.ts view + """ # Create action action = { 'view': self.ID, 'title': self.title, 'score': self.score, - 'score_message': self.score_message(self.score), + 'score_message': self.score_message, 'texts': self.texts, 'feedback': self.feedback, 'icon': self.icon, - 'timer': self.timer + 'timer': self.timer, } if self.config['show_section']: - action['last_song'] = self.session.last_song() + action['last_song'] = self.last_song if self.config['show_total_score']: action['total_score'] = self.session.total_score() return action + def get_score(self, score: float = None, result: Result = None) -> float: + """Retrieve the last relevant score, fall back to session.last_score() if neither score nor result are defined + + Args: + score: the score passed from the rules file (optional) + result: a Result object passed from the rules file (opional) + """ + if score: + return score + elif result: + return result.score + else: + return self.session.last_score() + def default_score_message(self, score): """Fallback to generate a message for the given score""" - # None if score is None: score = 0 diff --git a/backend/experiment/actions/tests/test_actions_score.py b/backend/experiment/actions/tests/test_actions_score.py index c2835ca3f..270111af6 100644 --- a/backend/experiment/actions/tests/test_actions_score.py +++ b/backend/experiment/actions/tests/test_actions_score.py @@ -19,15 +19,15 @@ def test_initialization_full_parameters(self): session=self.mock_session, title="Test Title", score=100, - score_message=lambda x: f"Score is {x}", + score_message="Score is 100", config={'show_section': True, 'show_total_score': True}, icon="icon-test", timer=5, - feedback="Test Feedback" + feedback="Test Feedback", ) self.assertEqual(score.title, "Test Title") self.assertEqual(score.score, 100) - self.assertEqual(score.score_message(score.score), "Score is 100") + self.assertEqual(score.score_message, "Score is 100") self.assertEqual(score.feedback, "Test Feedback") self.assertEqual( score.config, {'show_section': True, 'show_total_score': True}) @@ -43,7 +43,7 @@ def test_initialization_minimal_parameters(self): score = Score(session=self.mock_session) self.assertIn('Round', score.title) self.assertEqual(score.score, 10) - self.assertEqual(score.score_message, score.default_score_message) + self.assertEqual(score.score_message, score.default_score_message(score.score)) self.assertIsNone(score.feedback) self.assertEqual( score.config, {'show_section': False, 'show_total_score': False}) diff --git a/backend/experiment/admin.py b/backend/experiment/admin.py index f91ba9d82..9c97f95a3 100644 --- a/backend/experiment/admin.py +++ b/backend/experiment/admin.py @@ -44,14 +44,6 @@ from question.models import QuestionSeries, QuestionInSeries -class FeedbackInline(admin.TabularInline): - """Inline to show results linked to given participant""" - - model = Feedback - fields = ["text"] - extra = 0 - - class BlockTranslatedContentInline(NestedTabularInline): model = BlockTranslatedContent @@ -92,7 +84,7 @@ class BlockAdmin(InlineActionsModelAdminMixin, admin.ModelAdmin): "bonus_points", "playlists", ] - inlines = [QuestionSeriesInline, FeedbackInline, BlockTranslatedContentInline] + inlines = [QuestionSeriesInline, BlockTranslatedContentInline] form = BlockForm # make playlists fields a list of checkboxes @@ -156,7 +148,6 @@ def export(self, request, obj, parent_obj=None): data=str(serializers.serialize("json", all_feedback.order_by("pk"))), ) - # create forced download response response = HttpResponse(zip_buffer.getbuffer()) response["Content-Type"] = "application/x-zip-compressed" @@ -295,7 +286,7 @@ def name(self, obj): content = obj.get_fallback_content() return content.name if content else "No name" - + def redirect_to_overview(self): return redirect(reverse("admin:experiment_experiment_changelist")) @@ -321,25 +312,33 @@ def duplicate(self, request, obj, parent_obj=None): # Validate slug if not extension.isalnum(): - messages.add_message(request, - messages.ERROR, - f"{extension} is nog a valid slug extension. Only alphanumeric characters are allowed.") + messages.add_message( + request, + messages.ERROR, + f"{extension} is nog a valid slug extension. Only alphanumeric characters are allowed.", + ) if extension.lower() != extension: - messages.add_message(request, - messages.ERROR, - f"{extension} is nog a valid slug extension. Only lowercase characters are allowed.") + messages.add_message( + request, + messages.ERROR, + f"{extension} is nog a valid slug extension. Only lowercase characters are allowed.", + ) # Check for duplicate slugs for exp in Experiment.objects.all(): if exp.slug == f"{obj.slug}{slug_extension}": - messages.add_message(request, - messages.ERROR, - f"An experiment with slug: {obj.slug}{slug_extension} already exists. Please choose a different slug extension.") + messages.add_message( + request, + messages.ERROR, + f"An experiment with slug: {obj.slug}{slug_extension} already exists. Please choose a different slug extension.", + ) for as_block in obj.associated_blocks(): for block in Block.objects.all(): if f"{as_block.slug}{slug_extension}" == block.slug: - messages.add_message(request, - messages.ERROR, - f"A block with slug: {block.slug}{slug_extension} already exists. Please choose a different slug extension.") + messages.add_message( + request, + messages.ERROR, + f"A block with slug: {block.slug}{slug_extension} already exists. Please choose a different slug extension.", + ) # Return to form with error messages if len(messages.get_messages(request)) != 0: return render( @@ -349,9 +348,9 @@ def duplicate(self, request, obj, parent_obj=None): ) # order_by is inserted here to prevent a query error - exp_contents = obj.translated_content.order_by('name').all() + exp_contents = obj.translated_content.order_by("name").all() # order_by is inserted here to prevent a query error - exp_phases = obj.phases.order_by('index').all() + exp_phases = obj.phases.order_by("index").all() # Duplicate Experiment object exp_copy = obj @@ -380,7 +379,7 @@ def duplicate(self, request, obj, parent_obj=None): # Duplicate blocks in this phase for block in these_blocks: # order_by is inserted here to prevent a query error - block_contents = block.translated_contents.order_by('name').all() + block_contents = block.translated_contents.order_by("name").all() these_playlists = block.playlists.all() question_series = QuestionSeries.objects.filter(block=block) @@ -393,7 +392,7 @@ def duplicate(self, request, obj, parent_obj=None): block_copy.playlists.set(these_playlists) # Duplicate Block translated content objects - for content in block_contents: + for content in block_contents: block_content_copy = content block_content_copy.pk = None block_content_copy._state.adding = True @@ -421,7 +420,7 @@ def duplicate(self, request, obj, parent_obj=None): series_copy.questions.set(these_questions) return self.redirect_to_overview() - + # Go back to experiment overview if "_back" in request.POST: return self.redirect_to_overview() @@ -438,15 +437,18 @@ def experimenter_dashboard(self, request, obj, parent_obj=None): all_blocks = obj.associated_blocks() all_participants = obj.current_participants() all_sessions = obj.export_sessions() + all_feedback = obj.export_feedback() collect_data = { "participant_count": len(all_participants), "session_count": len(all_sessions), + "feedback_count": len(all_feedback), } blocks = [ { "id": block.id, "slug": block.slug, + "name": block, "started": len(all_sessions.filter(block=block)), "finished": len( all_sessions.filter( @@ -468,6 +470,7 @@ def experimenter_dashboard(self, request, obj, parent_obj=None): "blocks": blocks, "sessions": all_sessions, "participants": all_participants, + "feedback": all_feedback, "collect_data": collect_data, }, ) @@ -545,6 +548,7 @@ def save_model(self, request, obj, form, change): level=messages.WARNING, ) + class PhaseAdmin(InlineActionsModelAdminMixin, admin.ModelAdmin): list_display = ( "name_link", @@ -576,6 +580,7 @@ def blocks(self, obj): return format_html(", ".join([block.slug for block in blocks])) + class BlockTranslatedContentAdmin(admin.ModelAdmin): list_display = ["name", "block", "language"] list_filter = ["language"] @@ -595,5 +600,6 @@ def blocks(self, obj): ", ".join([f'{block.name}' for block in blocks]) ) + admin.site.register(Block, BlockAdmin) admin.site.register(Experiment, ExperimentAdmin) diff --git a/backend/experiment/forms.py b/backend/experiment/forms.py index d1ab871ac..ce3d59c8b 100644 --- a/backend/experiment/forms.py +++ b/backend/experiment/forms.py @@ -280,8 +280,8 @@ class Meta: } class Media: - js = ["block_admin.js"] - css = {"all": ["block_admin.css"]} + js = ["block_admin.js", "collapsible_blocks.js"] + css = {"all": ["block_admin.css", "collapsible_blocks.css"]} class ExportForm(Form): diff --git a/backend/experiment/models.py b/backend/experiment/models.py index 6657720a1..2acb7aeb2 100644 --- a/backend/experiment/models.py +++ b/backend/experiment/models.py @@ -46,6 +46,11 @@ def __str__(self): translated_content = self.get_fallback_content() return translated_content.name if translated_content else self.slug + @property + def name(self): + content = self.get_fallback_content() + return content.name if content and content.name else "" + class Meta: verbose_name_plural = "Experiments" @@ -83,6 +88,18 @@ def current_participants(self) -> list["Participant"]: participants[session.participant.id] = session.participant return participants.values() + def export_feedback(self) -> QuerySet[Session]: + """export feedback for the blocks in this experiment + + Returns: + Associated block feedback + """ + + all_feedback = Feedback.objects.none() + for block in self.associated_blocks(): + all_feedback |= Feedback.objects.filter(block=block) + return all_feedback + def get_fallback_content(self) -> "ExperimentTranslatedContent": """Get fallback content for the experiment diff --git a/backend/experiment/rules/base.py b/backend/experiment/rules/base.py index b56347e01..9b2aad013 100644 --- a/backend/experiment/rules/base.py +++ b/backend/experiment/rules/base.py @@ -54,7 +54,7 @@ def get_play_again_url(self, session: Session): if session.participant.participant_id_url else "" ) - return f"/{session.block.slug}{participant_id_url_param}" + return f"/block/{session.block.slug}{participant_id_url_param}" def calculate_intermediate_score(self, session, result): """process result data during a trial (i.e., between next_round calls) diff --git a/backend/experiment/rules/hooked.py b/backend/experiment/rules/hooked.py index 7a6238ace..2c7aee2e4 100644 --- a/backend/experiment/rules/hooked.py +++ b/backend/experiment/rules/hooked.py @@ -330,5 +330,5 @@ def next_heard_before_action(self, session: Session, round_number: int) -> Trial def get_score(self, session: Session, round_number: int) -> Score: config = {"show_section": True, "show_total_score": True} title = self.get_trial_title(session, round_number) - previous_score = session.last_result(self.counted_result_keys).score - return Score(session, config=config, title=title, score=previous_score) + previous_result = session.last_result(self.counted_result_keys) + return Score(session, config=config, title=title, result=previous_result) diff --git a/backend/experiment/rules/tests/test_base.py b/backend/experiment/rules/tests/test_base.py index 10a4b19b0..e7bc7a1ae 100644 --- a/backend/experiment/rules/tests/test_base.py +++ b/backend/experiment/rules/tests/test_base.py @@ -1,6 +1,5 @@ from django.test import TestCase -from django.conf import settings -from experiment.models import Experiment, Phase, Block, ExperimentTranslatedContent, SocialMediaConfig +from experiment.models import Block from session.models import Session from participant.models import Participant from section.models import Playlist @@ -8,7 +7,6 @@ class BaseTest(TestCase): - def test_get_play_again_url(self): block = Block.objects.create( slug="music-lab", @@ -19,7 +17,7 @@ def test_get_play_again_url(self): ) base = Base() play_again_url = base.get_play_again_url(session) - self.assertEqual(play_again_url, "/music-lab") + self.assertEqual(play_again_url, "/block/music-lab") def test_get_play_again_url_with_participant_id(self): block = Block.objects.create( @@ -34,7 +32,7 @@ def test_get_play_again_url_with_participant_id(self): ) base = Base() play_again_url = base.get_play_again_url(session) - self.assertEqual(play_again_url, "/music-lab?participant_id=42") + self.assertEqual(play_again_url, "/block/music-lab?participant_id=42") def test_validate_playlist(self): base = Base() diff --git a/backend/experiment/rules/tests/test_hooked.py b/backend/experiment/rules/tests/test_hooked.py index 514f86b40..ff9bfd9d3 100644 --- a/backend/experiment/rules/tests/test_hooked.py +++ b/backend/experiment/rules/tests/test_hooked.py @@ -103,7 +103,11 @@ def test_hooked(self): self.assertEqual(session.result_set.filter(question_key="correct_place").count(), 1) elif i == 1: self.assertEqual(len(actions), 4) - self.assertEqual(type(actions[0]), Score) + score_action = actions[0] + self.assertEqual(type(score_action), Score) + self.assertIsNotNone(score_action.last_song) + # the session.last_song method returns the song related to the most recent result, without filtering + self.assertNotEqual(score_action.last_song, session.last_song()) self.assertEqual(session.result_set.filter(question_key="recognize").count(), 2) self.assertEqual(session.result_set.filter(question_key="correct_place").count(), 2) elif i == rules.question_offset: diff --git a/backend/experiment/rules/toontjehogerkids_3_plink.py b/backend/experiment/rules/toontjehogerkids_3_plink.py index 0578c1a7e..a132c0620 100644 --- a/backend/experiment/rules/toontjehogerkids_3_plink.py +++ b/backend/experiment/rules/toontjehogerkids_3_plink.py @@ -56,7 +56,6 @@ def get_last_result(self, session): def get_score_view(self, session): last_result = self.get_last_result(session) section = last_result.section - score = last_result.score if last_result.expected_response == last_result.given_response: feedback = "Goedzo! Je hoorde inderdaad {} van {}.".format( @@ -72,7 +71,13 @@ def get_score_view(self, session): config = {"show_total_score": True} round_number = session.get_rounds_passed() score_title = "Ronde %(number)d / %(total)d" % {"number": round_number, "total": session.block.rounds} - return Score(session, config=config, feedback=feedback, score=score, title=score_title) + return Score( + session, + config=config, + feedback=feedback, + result=last_result, + title=score_title, + ) def get_plink_trials(self, session: Session, section: Section, choices: dict, expected_response: str) -> list: next_round = [] diff --git a/backend/experiment/static/collapsible_blocks.css b/backend/experiment/static/collapsible_blocks.css new file mode 100644 index 000000000..97e4c0bc7 --- /dev/null +++ b/backend/experiment/static/collapsible_blocks.css @@ -0,0 +1,80 @@ +/* collapsible_blocks.css */ + +.djn-group-nested .djn-inline-form[data-inline-model="experiment-block"] { + border: none; + border-radius: 0px; + margin-top: 10px; + margin-bottom: 10px; +} + +.djn-group-nested .djn-inline-form[data-inline-model="experiment-block"]>h3 { + cursor: pointer; + user-select: none; + padding: 10px; + margin: 0; + border-radius: 0; + background: #f8f9fa; + transition: background-color 0.2s; + color: #495057; +} + +.djn-group-nested .djn-inline-form[data-inline-model="experiment-block"]>h3:hover { + background: #e9ecef; +} + +.djn-group-nested .djn-inline-form[data-inline-model="experiment-block"].collapsed { + border: none; +} + +.djn-group-nested .djn-inline-form[data-inline-model="experiment-block"]>h3>b { + display: none; +} + +.djn-group-nested .djn-inline-form[data-inline-model="experiment-block"] .collapse-toggle { + transition: transform 0.2s; + font-size: .75rem; + color: #495057; +} + +.djn-group-nested .djn-inline-form[data-inline-model="experiment-block"]>h3 .inline_label { + font-weight: bold; + font-size: .75rem; +} + +/* Style adjustments for the block form when collapsed */ +.djn-group-nested .djn-inline-form[data-inline-model="experiment-block"].collapsed>h3 {} + +.djn-group-nested .djn-inline-form[data-inline-model="experiment-block"].collapsed .inline_label { + font-weight: normal; +} + +/* Style for expand/collapse all buttons */ +.collapse-buttons-container { + display: inline-block; + margin-top: 0rem; + margin-bottom: 0rem; + margin-left: auto; + align-self: flex-end; +} + +.collapse-buttons-container button { + margin-left: .5rem; + padding: .25rem; + border-radius: 4px; + background: #fff; + cursor: pointer; + font-size: .75rem; + border: 0px solid #ccc; +} + +.collapse-buttons-container button:hover { + background: #f8f9fa; +} + +.expand-all-btn { + color: #28a745; +} + +.collapse-all-btn { + color: #dc3545; +} diff --git a/backend/experiment/static/collapsible_blocks.js b/backend/experiment/static/collapsible_blocks.js new file mode 100644 index 000000000..01918c92c --- /dev/null +++ b/backend/experiment/static/collapsible_blocks.js @@ -0,0 +1,156 @@ +/** + * Initializes an (inline) block form by adding a collapsible toggle button to the header + * and setting up the initial collapsed state of the form. + * + * @param {HTMLElement} blockForm - The block form element to initialize. + */ +function initializeBlockForm(blockForm) { + + console.log('initializeBlockForm'); + + let header = blockForm.querySelector('h3'); + + // Only add toggle button if it doesn't exist + if (header && !header.querySelector('.collapse-toggle')) { + const toggleBtn = document.createElement('span'); + toggleBtn.className = 'collapse-toggle'; + toggleBtn.innerHTML = '▼'; + toggleBtn.style.marginLeft = '10px'; + toggleBtn.style.cursor = 'pointer'; + header.appendChild(toggleBtn); + } + + header = blockForm.querySelector('h3'); + + const hasClickEventListener = header.getAttribute('data-initialized') === 'true'; + + if (!hasClickEventListener) { + // Add click handler to header + header.addEventListener('click', toggleVisibilityClickHandler); + } + + header.setAttribute('data-initialized', 'true'); + + function toggleVisibilityClickHandler(e) { + toggleBlockVisibility(blockForm); + } + + // Initialize as collapsed by default + const contentSections = [ + blockForm.querySelector('fieldset'), // Main block form + blockForm.querySelector('.djn-group-nested[data-inline-model="experiment-blocktranslatedcontent"]') // Translated content form + ]; + + contentSections.forEach(section => { + if (section) { + section.style.display = 'none'; + } + }); + + blockForm.classList.add('collapsed'); +} + +function toggleBlockVisibility(blockForm) { + + console.log('toggleBlockVisibility'); + + const contentSections = [ + blockForm.querySelector('fieldset'), // Main block form + blockForm.querySelector('.djn-group-nested[data-inline-model="experiment-blocktranslatedcontent"]') // Translated content form + ]; + + const toggleBtn = blockForm.querySelector('.collapse-toggle'); + const isCollapsed = blockForm.classList.contains('collapsed'); + + contentSections.forEach(section => { + if (section) { + section.style.display = isCollapsed ? 'block' : 'none'; + } + }); + + if (isCollapsed) { + toggleBtn.innerHTML = '▲'; + blockForm.classList.remove('collapsed'); + } else { + toggleBtn.innerHTML = '▼'; + blockForm.classList.add('collapsed'); + } +} + +document.addEventListener('DOMContentLoaded', function () { + // Initialize all existing blocks + document.querySelectorAll('.djn-inline-form[data-inline-model="experiment-block"]').forEach(blockForm => { + initializeBlockForm(blockForm); + + // Expand block form if there are errors in it (i.e. .errors or .errorlist) + if (blockForm.querySelector('.errors, .errorlist')) { + toggleBlockVisibility(blockForm); + } + }); + + // Add expand/collapse all buttons at the top + const firstBlock = document.querySelector('.djn-inline-form[data-inline-model="experiment-block"]'); + + if (firstBlock) { + const buttonsContainer = document.createElement('div'); + buttonsContainer.className = 'collapse-buttons-container'; + + const expandAllBtn = document.createElement('button'); + expandAllBtn.type = 'button'; + expandAllBtn.innerText = 'Expand All Blocks'; + expandAllBtn.className = 'expand-all-btn'; + + // Add click handler to expand all blocks + expandAllBtn.addEventListener('click', function (e) { + e.stopPropagation(); + + document.querySelectorAll('.djn-inline-form[data-inline-model="experiment-block"]').forEach(blockForm => { + if (blockForm.classList.contains('collapsed')) { + toggleBlockVisibility(blockForm); + } + }); + }); + + const collapseAllBtn = document.createElement('button'); + collapseAllBtn.type = 'button'; + collapseAllBtn.innerText = 'Collapse All Blocks'; + collapseAllBtn.className = 'collapse-all-btn'; + + collapseAllBtn.addEventListener('click', function (e) { + e.stopPropagation(); + + document.querySelectorAll('.djn-inline-form[data-inline-model="experiment-block"]').forEach(blockForm => { + if (!blockForm.classList.contains('collapsed')) { + toggleBlockVisibility(blockForm); + } + }); + }); + + buttonsContainer.appendChild(expandAllBtn); + buttonsContainer.appendChild(collapseAllBtn); + firstBlock.parentNode.insertBefore(buttonsContainer, firstBlock); + firstBlock.parentNode.parentNode.querySelector('h2').appendChild(buttonsContainer); + } + + // Add observer for dynamically added blocks (e.g. when adding a new block) + const observer = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + mutation.addedNodes.forEach(function (node) { + if (node.nodeType === 1 && node.matches('.djn-inline-form[data-inline-model="experiment-block"]')) { + + // Initialize newly added block by adding toggle button, etc. + initializeBlockForm(node); + + // Expand every newly added inline block form + toggleBlockVisibility(node); + } + }); + }); + }); + + observer.observe(document.body, { + childList: true, + subtree: true + }); + +}); diff --git a/backend/experiment/static/experiment_dashboard.js b/backend/experiment/static/experiment_dashboard.js index ecda73a18..ca044dad8 100644 --- a/backend/experiment/static/experiment_dashboard.js +++ b/backend/experiment/static/experiment_dashboard.js @@ -6,6 +6,14 @@ const closeSessions = () => { }) } +// Hide all feedback +const closeFeedback = () => { + document.getElementById("all-feedback").close(); + document.querySelectorAll(".feedback-row").forEach(function (element) { + element.classList.add("hide"); + }) +} + // Hide all participants const closeParticipants = () => { document.getElementById("all-participants").close(); @@ -44,3 +52,11 @@ document.getElementById("show-sessions").addEventListener("click", () => { element.classList.remove("hide"); }) }) + +// Attach event to show all feedback button +document.getElementById("show-feedback").addEventListener("click", () => { + document.getElementById("all-feedback").showModal(); + document.querySelectorAll(".feedback-row").forEach(function (element) { + element.classList.remove("hide"); + }) +}) diff --git a/backend/experiment/static/experiment_dashboard_feedback.js b/backend/experiment/static/experiment_dashboard_feedback.js new file mode 100644 index 000000000..991c23ac0 --- /dev/null +++ b/backend/experiment/static/experiment_dashboard_feedback.js @@ -0,0 +1,9 @@ +// Show feedback for a specific experiment +const showBlockFeedback = (id) => { + document.getElementById(`show-feedback-${id}`).addEventListener("click", function () { + document.querySelectorAll(`.block-${id}`).forEach(function (element) { + element.classList.remove("hide"); + }) + document.getElementById("all-feedback").showModal(); + }) +} diff --git a/backend/experiment/static/experiment_dashboard_sessions.js b/backend/experiment/static/experiment_dashboard_sessions.js index 030c93872..ed056c6f5 100644 --- a/backend/experiment/static/experiment_dashboard_sessions.js +++ b/backend/experiment/static/experiment_dashboard_sessions.js @@ -1,7 +1,7 @@ -// Show sessions for a specific experiment +// Show sessions for a specific block const showBlockSessions = (id) => { document.getElementById(`show-sessions-${id}`).addEventListener("click", function () { - document.querySelectorAll(`.experiment-${id}`).forEach(function (element) { + document.querySelectorAll(`.block-${id}`).forEach(function (element) { element.classList.remove("hide"); }) document.getElementById("all-sessions").showModal(); diff --git a/backend/experiment/static/experiment_form.css b/backend/experiment/static/experiment_form.css index 6bf581bf4..3a9323afd 100644 --- a/backend/experiment/static/experiment_form.css +++ b/backend/experiment/static/experiment_form.css @@ -1,5 +1,8 @@ /* Add cursor pointer to inline group headings as they are clickable to toggle the form underneath */ .inline-group .inline-heading { + display: flex; + align-items: center; + gap: 0.5rem; cursor: pointer; } diff --git a/backend/experiment/templates/experiment-dashboard-feedback.html b/backend/experiment/templates/experiment-dashboard-feedback.html new file mode 100644 index 000000000..f850de445 --- /dev/null +++ b/backend/experiment/templates/experiment-dashboard-feedback.html @@ -0,0 +1,24 @@ + + +

+ Feedback for Experiment: {{ experiment }} +

+ + + +
+ + {% for item in feedback %} + + + + {% endfor %} +
+ +
diff --git a/backend/experiment/templates/experiment-dashboard-participants.html b/backend/experiment/templates/experiment-dashboard-participants.html index 44ba88bbd..40aa79e5d 100644 --- a/backend/experiment/templates/experiment-dashboard-participants.html +++ b/backend/experiment/templates/experiment-dashboard-participants.html @@ -1,8 +1,11 @@ -

All Participants in experiment: {{ experiment.name }}

+

+ All participants in Experiment: {{ experiment }} +

+ diff --git a/backend/experiment/templates/experiment-dashboard-sessions.html b/backend/experiment/templates/experiment-dashboard-sessions.html index 75b97bcce..6ddbf03a7 100644 --- a/backend/experiment/templates/experiment-dashboard-sessions.html +++ b/backend/experiment/templates/experiment-dashboard-sessions.html @@ -1,5 +1,8 @@ +

+ Sessions in experiment: {{ experiment }} +

Participants
Participant URL id *
@@ -19,18 +22,19 @@ {% for session in sessions %} - + @@ -94,7 +98,7 @@

Result : Session: {{ session.id }}
Participant: {{ session.participant.participant_id_url }}
- Block: {{ session.block.slug }} + Block: {{ session.block }}

diff --git a/backend/experiment/templates/experiment-dashboard.html b/backend/experiment/templates/experiment-dashboard.html
index 4e32c9306..45a41bb66 100644
--- a/backend/experiment/templates/experiment-dashboard.html
+++ b/backend/experiment/templates/experiment-dashboard.html
@@ -1,5 +1,6 @@
 {% extends "admin/base_site.html" %} {% block content %}{% load static %}
 
+
 
 
-

Blocks in Experiment: {{ experiment.name }}

+

+ Blocks in Experiment: {{ experiment }} +

+

@@ -111,6 +138,7 @@

Blocks in Experiment: {{ experiment.name }}

+ @@ -120,7 +148,9 @@

Blocks in Experiment: {{ experiment.name }}

@@ -163,6 +193,14 @@

Blocks in Experiment: {{ experiment.name }}

+ + {% endfor %} @@ -173,5 +211,7 @@

Blocks in Experiment: {{ experiment.name }}

{% include "experiment-dashboard-participants.html" %} +{% include "experiment-dashboard-feedback.html" %} + {% endblock %} diff --git a/backend/requirements/dev.txt b/backend/requirements/dev.txt index ca8c02ed6..716ad9e74 100644 --- a/backend/requirements/dev.txt +++ b/backend/requirements/dev.txt @@ -38,7 +38,7 @@ defusedxml==0.7.1 # via genbadge dill==0.3.8 # via pylint -django==4.2.16 +django==4.2.17 # via # -r requirements.in/base.txt # django-appconf diff --git a/backend/requirements/prod.txt b/backend/requirements/prod.txt index 7df28b18d..5914ff1ea 100644 --- a/backend/requirements/prod.txt +++ b/backend/requirements/prod.txt @@ -31,7 +31,7 @@ coverage==7.3.2 # via -r requirements.in/base.txt defusedxml==0.7.1 # via genbadge -django==4.2.16 +django==4.2.17 # via # -r requirements.in/base.txt # django-appconf diff --git a/frontend/.pnp.cjs b/frontend/.pnp.cjs index c4685df7a..f06084f5d 100755 --- a/frontend/.pnp.cjs +++ b/frontend/.pnp.cjs @@ -28,14 +28,14 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@chromatic-com/storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:3.2.2"],\ ["@sentry/react", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.40.0"],\ - ["@storybook/addon-essentials", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/addon-interactions", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/addon-links", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/addon-onboarding", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/blocks", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/react", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/react-vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/test", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["@storybook/addon-essentials", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/addon-interactions", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/addon-links", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/addon-onboarding", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/blocks", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/react", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/react-vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/test", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["@testing-library/dom", "npm:10.2.0"],\ ["@testing-library/react", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:16.0.0"],\ ["@testing-library/user-event", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:14.5.1"],\ @@ -54,7 +54,7 @@ const RAW_RUNTIME_STATE = ["eslint", "npm:8.54.0"],\ ["eslint-config-react-app", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:7.0.1"],\ ["eslint-plugin-chai-friendly", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:0.7.2"],\ - ["eslint-plugin-storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:0.11.0"],\ + ["eslint-plugin-storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:0.11.1"],\ ["file-saver", "npm:2.0.5"],\ ["happy-dom", "npm:15.10.2"],\ ["history", "npm:5.3.0"],\ @@ -70,7 +70,7 @@ const RAW_RUNTIME_STATE = ["react-share", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:5.1.1"],\ ["react-transition-group", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:4.4.5"],\ ["sass", "npm:1.69.5"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7"],\ ["vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:5.4.6"],\ ["vite-tsconfig-paths", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:4.3.2"],\ @@ -3486,7 +3486,7 @@ const RAW_RUNTIME_STATE = ["filesize", "npm:10.1.1"],\ ["jsonfile", "npm:6.1.0"],\ ["react-confetti", "virtual:0a3554b0e83b18369ad4b2b9363ca467dfa1cd92a8c5c1491064e6a944d9bb8629f863c96218106ff1f9c1a49ec9de501829e301cd92a66e34b526cb683aad97#npm:6.1.0"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["strip-ansi", "npm:7.1.0"]\ ],\ "packagePeers": [\ @@ -4042,10 +4042,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:7879a4e2bc77a9f9c77b3e4714bf962cea8f106388c22980732dc43dd4fef6c02e34189720324fb47cd1f48d6289ad520edde6afda0aa737653af22ab94f75a7#npm:4.4.1", {\ - "packageLocation": "./.yarn/__virtual__/@eslint-community-eslint-utils-virtual-b814c911e9/4/.yarn/berry/cache/@eslint-community-eslint-utils-npm-4.4.1-c83a271e90-10c0.zip/node_modules/@eslint-community/eslint-utils/",\ + ["virtual:8736507c17e995ef31571b70811862f4d0b0261c8e94b60764869da821bcd488d5a9c38f10ad1282a1f94cf8d70730f7b7b56d0a6f4e334235a8869b3b4c6516#npm:4.4.0", {\ + "packageLocation": "./.yarn/__virtual__/@eslint-community-eslint-utils-virtual-9d6b4945e8/4/.yarn/berry/cache/@eslint-community-eslint-utils-npm-4.4.0-d1791bd5a3-10c0.zip/node_modules/@eslint-community/eslint-utils/",\ "packageDependencies": [\ - ["@eslint-community/eslint-utils", "virtual:7879a4e2bc77a9f9c77b3e4714bf962cea8f106388c22980732dc43dd4fef6c02e34189720324fb47cd1f48d6289ad520edde6afda0aa737653af22ab94f75a7#npm:4.4.1"],\ + ["@eslint-community/eslint-utils", "virtual:8736507c17e995ef31571b70811862f4d0b0261c8e94b60764869da821bcd488d5a9c38f10ad1282a1f94cf8d70730f7b7b56d0a6f4e334235a8869b3b4c6516#npm:4.4.0"],\ ["@types/eslint", null],\ ["eslint", "npm:8.54.0"],\ ["eslint-visitor-keys", "npm:3.4.3"]\ @@ -4056,10 +4056,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:8736507c17e995ef31571b70811862f4d0b0261c8e94b60764869da821bcd488d5a9c38f10ad1282a1f94cf8d70730f7b7b56d0a6f4e334235a8869b3b4c6516#npm:4.4.0", {\ - "packageLocation": "./.yarn/__virtual__/@eslint-community-eslint-utils-virtual-9d6b4945e8/4/.yarn/berry/cache/@eslint-community-eslint-utils-npm-4.4.0-d1791bd5a3-10c0.zip/node_modules/@eslint-community/eslint-utils/",\ + ["virtual:ce57a89e52eb93e7c8729a670659395a9d0087a597d3a7e2d70d8c696699b28b00507f045d21a4b803cea6ca29084d06ddb60f526b6d08bd51610ddfce50a956#npm:4.4.1", {\ + "packageLocation": "./.yarn/__virtual__/@eslint-community-eslint-utils-virtual-dfe451dd9c/4/.yarn/berry/cache/@eslint-community-eslint-utils-npm-4.4.1-c83a271e90-10c0.zip/node_modules/@eslint-community/eslint-utils/",\ "packageDependencies": [\ - ["@eslint-community/eslint-utils", "virtual:8736507c17e995ef31571b70811862f4d0b0261c8e94b60764869da821bcd488d5a9c38f10ad1282a1f94cf8d70730f7b7b56d0a6f4e334235a8869b3b4c6516#npm:4.4.0"],\ + ["@eslint-community/eslint-utils", "virtual:ce57a89e52eb93e7c8729a670659395a9d0087a597d3a7e2d70d8c696699b28b00507f045d21a4b803cea6ca29084d06ddb60f526b6d08bd51610ddfce50a956#npm:4.4.1"],\ ["@types/eslint", null],\ ["eslint", "npm:8.54.0"],\ ["eslint-visitor-keys", "npm:3.4.3"]\ @@ -4201,23 +4201,21 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@joshwooding/vite-plugin-react-docgen-typescript", [\ - ["npm:0.3.0", {\ - "packageLocation": "../../../.yarn/berry/cache/@joshwooding-vite-plugin-react-docgen-typescript-npm-0.3.0-e20c4a4bd6-10c0.zip/node_modules/@joshwooding/vite-plugin-react-docgen-typescript/",\ + ["npm:0.4.2", {\ + "packageLocation": "../../../.yarn/berry/cache/@joshwooding-vite-plugin-react-docgen-typescript-npm-0.4.2-8a1c49033c-10c0.zip/node_modules/@joshwooding/vite-plugin-react-docgen-typescript/",\ "packageDependencies": [\ - ["@joshwooding/vite-plugin-react-docgen-typescript", "npm:0.3.0"]\ + ["@joshwooding/vite-plugin-react-docgen-typescript", "npm:0.4.2"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:0.3.0", {\ - "packageLocation": "./.yarn/__virtual__/@joshwooding-vite-plugin-react-docgen-typescript-virtual-faa02851bd/4/.yarn/berry/cache/@joshwooding-vite-plugin-react-docgen-typescript-npm-0.3.0-e20c4a4bd6-10c0.zip/node_modules/@joshwooding/vite-plugin-react-docgen-typescript/",\ + ["virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:0.4.2", {\ + "packageLocation": "./.yarn/__virtual__/@joshwooding-vite-plugin-react-docgen-typescript-virtual-d62e68294e/4/.yarn/berry/cache/@joshwooding-vite-plugin-react-docgen-typescript-npm-0.4.2-8a1c49033c-10c0.zip/node_modules/@joshwooding/vite-plugin-react-docgen-typescript/",\ "packageDependencies": [\ - ["@joshwooding/vite-plugin-react-docgen-typescript", "virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:0.3.0"],\ + ["@joshwooding/vite-plugin-react-docgen-typescript", "virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:0.4.2"],\ ["@types/typescript", null],\ ["@types/vite", null],\ - ["glob", "npm:7.2.3"],\ - ["glob-promise", "virtual:faa02851bd80500ce439c2c537b10b1dc388f1381cdd90892d057d16bb6ba2aa1c5df7e420b9acd9ed27df5c74237fa1659ad08d957a809ff3f20a4283da3b63#npm:4.2.2"],\ ["magic-string", "npm:0.27.0"],\ - ["react-docgen-typescript", "virtual:faa02851bd80500ce439c2c537b10b1dc388f1381cdd90892d057d16bb6ba2aa1c5df7e420b9acd9ed27df5c74237fa1659ad08d957a809ff3f20a4283da3b63#npm:2.2.2"],\ + ["react-docgen-typescript", "virtual:d62e68294e7f9b419cfb8581b9643f91d3bc279cbc6e7546bf2d328ad15c227a9edf083447acf7a81a7df0dd254b6c112c583574911851c75b828747b447e0f9#npm:2.2.2"],\ ["typescript", null],\ ["vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:5.4.6"]\ ],\ @@ -4321,10 +4319,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:3.0.1", {\ - "packageLocation": "./.yarn/__virtual__/@mdx-js-react-virtual-4339a964e0/4/.yarn/berry/cache/@mdx-js-react-npm-3.0.1-1ce14f6273-10c0.zip/node_modules/@mdx-js/react/",\ + ["virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:3.0.1", {\ + "packageLocation": "./.yarn/__virtual__/@mdx-js-react-virtual-4aa1dbe7c4/4/.yarn/berry/cache/@mdx-js-react-npm-3.0.1-1ce14f6273-10c0.zip/node_modules/@mdx-js/react/",\ "packageDependencies": [\ - ["@mdx-js/react", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:3.0.1"],\ + ["@mdx-js/react", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:3.0.1"],\ ["@types/mdx", "npm:2.0.10"],\ ["@types/react", null],\ ["react", "npm:18.2.0"]\ @@ -4427,10 +4425,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:5.1.0", {\ - "packageLocation": "./.yarn/__virtual__/@rollup-pluginutils-virtual-2a4d7f1da7/4/.yarn/berry/cache/@rollup-pluginutils-npm-5.1.0-6939820ef8-10c0.zip/node_modules/@rollup/pluginutils/",\ + ["virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:5.1.0", {\ + "packageLocation": "./.yarn/__virtual__/@rollup-pluginutils-virtual-d396a5520d/4/.yarn/berry/cache/@rollup-pluginutils-npm-5.1.0-6939820ef8-10c0.zip/node_modules/@rollup/pluginutils/",\ "packageDependencies": [\ - ["@rollup/pluginutils", "virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:5.1.0"],\ + ["@rollup/pluginutils", "virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:5.1.0"],\ ["@types/estree", "npm:1.0.5"],\ ["@types/rollup", null],\ ["estree-walker", "npm:2.0.2"],\ @@ -4704,23 +4702,23 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-actions", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-actions-npm-8.4.2-7f5aebdbc5-10c0.zip/node_modules/@storybook/addon-actions/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-actions-npm-8.4.6-d616ff76f2-10c0.zip/node_modules/@storybook/addon-actions/",\ "packageDependencies": [\ - ["@storybook/addon-actions", "npm:8.4.2"]\ + ["@storybook/addon-actions", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-actions-virtual-23f617bcbb/4/.yarn/berry/cache/@storybook-addon-actions-npm-8.4.2-7f5aebdbc5-10c0.zip/node_modules/@storybook/addon-actions/",\ + ["virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-actions-virtual-3d61d1ee0f/4/.yarn/berry/cache/@storybook-addon-actions-npm-8.4.6-d616ff76f2-10c0.zip/node_modules/@storybook/addon-actions/",\ "packageDependencies": [\ - ["@storybook/addon-actions", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ + ["@storybook/addon-actions", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ ["@types/uuid", "npm:9.0.7"],\ ["dequal", "npm:2.0.3"],\ ["polished", "npm:4.2.2"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["uuid", "npm:9.0.1"]\ ],\ "packagePeers": [\ @@ -4731,21 +4729,21 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-backgrounds", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-backgrounds-npm-8.4.2-94e512029b-10c0.zip/node_modules/@storybook/addon-backgrounds/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-backgrounds-npm-8.4.6-5a366ea6fc-10c0.zip/node_modules/@storybook/addon-backgrounds/",\ "packageDependencies": [\ - ["@storybook/addon-backgrounds", "npm:8.4.2"]\ + ["@storybook/addon-backgrounds", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-backgrounds-virtual-36d8dd2551/4/.yarn/berry/cache/@storybook-addon-backgrounds-npm-8.4.2-94e512029b-10c0.zip/node_modules/@storybook/addon-backgrounds/",\ + ["virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-backgrounds-virtual-41848dd751/4/.yarn/berry/cache/@storybook-addon-backgrounds-npm-8.4.6-5a366ea6fc-10c0.zip/node_modules/@storybook/addon-backgrounds/",\ "packageDependencies": [\ - ["@storybook/addon-backgrounds", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ + ["@storybook/addon-backgrounds", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ ["memoizerific", "npm:1.11.3"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -4756,21 +4754,21 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-controls", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-controls-npm-8.4.2-3ed1797687-10c0.zip/node_modules/@storybook/addon-controls/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-controls-npm-8.4.6-35605d9b80-10c0.zip/node_modules/@storybook/addon-controls/",\ "packageDependencies": [\ - ["@storybook/addon-controls", "npm:8.4.2"]\ + ["@storybook/addon-controls", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-controls-virtual-b2444b0162/4/.yarn/berry/cache/@storybook-addon-controls-npm-8.4.2-3ed1797687-10c0.zip/node_modules/@storybook/addon-controls/",\ + ["virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-controls-virtual-091ca910d4/4/.yarn/berry/cache/@storybook-addon-controls-npm-8.4.6-35605d9b80-10c0.zip/node_modules/@storybook/addon-controls/",\ "packageDependencies": [\ - ["@storybook/addon-controls", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ + ["@storybook/addon-controls", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ ["dequal", "npm:2.0.3"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -4781,25 +4779,25 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-docs", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-docs-npm-8.4.2-fd78532ce5-10c0.zip/node_modules/@storybook/addon-docs/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-docs-npm-8.4.6-1f35a8148b-10c0.zip/node_modules/@storybook/addon-docs/",\ "packageDependencies": [\ - ["@storybook/addon-docs", "npm:8.4.2"]\ + ["@storybook/addon-docs", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-docs-virtual-36f59012b9/4/.yarn/berry/cache/@storybook-addon-docs-npm-8.4.2-fd78532ce5-10c0.zip/node_modules/@storybook/addon-docs/",\ + ["virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-docs-virtual-e96d0359be/4/.yarn/berry/cache/@storybook-addon-docs-npm-8.4.6-1f35a8148b-10c0.zip/node_modules/@storybook/addon-docs/",\ "packageDependencies": [\ - ["@storybook/addon-docs", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ - ["@mdx-js/react", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:3.0.1"],\ - ["@storybook/blocks", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:8.4.2"],\ - ["@storybook/csf-plugin", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:8.4.2"],\ - ["@storybook/react-dom-shim", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:8.4.2"],\ + ["@storybook/addon-docs", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ + ["@mdx-js/react", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:3.0.1"],\ + ["@storybook/blocks", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:8.4.6"],\ + ["@storybook/csf-plugin", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:8.4.6"],\ + ["@storybook/react-dom-shim", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:8.4.6"],\ ["@types/storybook", null],\ ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:18.2.0"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["react-dom", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:18.2.0"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -4810,28 +4808,28 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-essentials", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-essentials-npm-8.4.2-28750efbb9-10c0.zip/node_modules/@storybook/addon-essentials/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-essentials-npm-8.4.6-9878dabb61-10c0.zip/node_modules/@storybook/addon-essentials/",\ "packageDependencies": [\ - ["@storybook/addon-essentials", "npm:8.4.2"]\ + ["@storybook/addon-essentials", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-essentials-virtual-b47e0f14fa/4/.yarn/berry/cache/@storybook-addon-essentials-npm-8.4.2-28750efbb9-10c0.zip/node_modules/@storybook/addon-essentials/",\ - "packageDependencies": [\ - ["@storybook/addon-essentials", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/addon-actions", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ - ["@storybook/addon-backgrounds", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ - ["@storybook/addon-controls", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ - ["@storybook/addon-docs", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ - ["@storybook/addon-highlight", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ - ["@storybook/addon-measure", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ - ["@storybook/addon-outline", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ - ["@storybook/addon-toolbars", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ - ["@storybook/addon-viewport", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-essentials-virtual-508c548741/4/.yarn/berry/cache/@storybook-addon-essentials-npm-8.4.6-9878dabb61-10c0.zip/node_modules/@storybook/addon-essentials/",\ + "packageDependencies": [\ + ["@storybook/addon-essentials", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/addon-actions", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ + ["@storybook/addon-backgrounds", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ + ["@storybook/addon-controls", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ + ["@storybook/addon-docs", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ + ["@storybook/addon-highlight", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ + ["@storybook/addon-measure", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ + ["@storybook/addon-outline", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ + ["@storybook/addon-toolbars", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ + ["@storybook/addon-viewport", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ ["@types/storybook", null],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -4842,20 +4840,20 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-highlight", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-highlight-npm-8.4.2-c2acc28753-10c0.zip/node_modules/@storybook/addon-highlight/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-highlight-npm-8.4.6-81d4fcc9c5-10c0.zip/node_modules/@storybook/addon-highlight/",\ "packageDependencies": [\ - ["@storybook/addon-highlight", "npm:8.4.2"]\ + ["@storybook/addon-highlight", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-highlight-virtual-96a6f9aca4/4/.yarn/berry/cache/@storybook-addon-highlight-npm-8.4.2-c2acc28753-10c0.zip/node_modules/@storybook/addon-highlight/",\ + ["virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-highlight-virtual-cc2ebd39a4/4/.yarn/berry/cache/@storybook-addon-highlight-npm-8.4.6-81d4fcc9c5-10c0.zip/node_modules/@storybook/addon-highlight/",\ "packageDependencies": [\ - ["@storybook/addon-highlight", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ + ["@storybook/addon-highlight", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -4865,23 +4863,23 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-interactions", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-interactions-npm-8.4.2-2fb1460bb7-10c0.zip/node_modules/@storybook/addon-interactions/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-interactions-npm-8.4.6-9f8fc097cc-10c0.zip/node_modules/@storybook/addon-interactions/",\ "packageDependencies": [\ - ["@storybook/addon-interactions", "npm:8.4.2"]\ + ["@storybook/addon-interactions", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-interactions-virtual-ec732ff5c6/4/.yarn/berry/cache/@storybook-addon-interactions-npm-8.4.2-2fb1460bb7-10c0.zip/node_modules/@storybook/addon-interactions/",\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-interactions-virtual-0c92df0ce5/4/.yarn/berry/cache/@storybook-addon-interactions-npm-8.4.6-9f8fc097cc-10c0.zip/node_modules/@storybook/addon-interactions/",\ "packageDependencies": [\ - ["@storybook/addon-interactions", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["@storybook/addon-interactions", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["@storybook/global", "npm:5.0.0"],\ - ["@storybook/instrumenter", "virtual:ec732ff5c6bfc54ab2c1fde0a70266bb8f662aa308301c461be259e61522a7fe89dc2f4f5900257794343f0cd8016bf2ddd330bb62d3c77c7255a3e1d1037d86#npm:8.4.2"],\ - ["@storybook/test", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["@storybook/instrumenter", "virtual:0c92df0ce53e3b6242ba1b91dac113a19abd27ce8ead10a528fb3b29567769cb7edd34ac9601ee27ab707b01ff8d947550dfc175f1c4424e06bf88114ccfd0e5#npm:8.4.6"],\ + ["@storybook/test", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["@types/storybook", null],\ ["polished", "npm:4.2.2"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -4892,23 +4890,23 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-links", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-links-npm-8.4.2-88757ae45c-10c0.zip/node_modules/@storybook/addon-links/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-links-npm-8.4.6-ee01f02283-10c0.zip/node_modules/@storybook/addon-links/",\ "packageDependencies": [\ - ["@storybook/addon-links", "npm:8.4.2"]\ + ["@storybook/addon-links", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-links-virtual-d3cb0c6cf5/4/.yarn/berry/cache/@storybook-addon-links-npm-8.4.2-88757ae45c-10c0.zip/node_modules/@storybook/addon-links/",\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-links-virtual-cec6fe25dc/4/.yarn/berry/cache/@storybook-addon-links-npm-8.4.6-ee01f02283-10c0.zip/node_modules/@storybook/addon-links/",\ "packageDependencies": [\ - ["@storybook/addon-links", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["@storybook/addon-links", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["@storybook/csf", "npm:0.1.11"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/react", "npm:18.3.3"],\ ["@types/storybook", null],\ ["react", "npm:18.3.1"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -4921,20 +4919,20 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-measure", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-measure-npm-8.4.2-f01208506c-10c0.zip/node_modules/@storybook/addon-measure/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-measure-npm-8.4.6-03dc024240-10c0.zip/node_modules/@storybook/addon-measure/",\ "packageDependencies": [\ - ["@storybook/addon-measure", "npm:8.4.2"]\ + ["@storybook/addon-measure", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-measure-virtual-126236972f/4/.yarn/berry/cache/@storybook-addon-measure-npm-8.4.2-f01208506c-10c0.zip/node_modules/@storybook/addon-measure/",\ + ["virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-measure-virtual-6dd76d278b/4/.yarn/berry/cache/@storybook-addon-measure-npm-8.4.6-03dc024240-10c0.zip/node_modules/@storybook/addon-measure/",\ "packageDependencies": [\ - ["@storybook/addon-measure", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ + ["@storybook/addon-measure", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["tiny-invariant", "npm:1.3.1"]\ ],\ "packagePeers": [\ @@ -4945,20 +4943,20 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-onboarding", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-onboarding-npm-8.4.2-8b9e406290-10c0.zip/node_modules/@storybook/addon-onboarding/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-onboarding-npm-8.4.6-a56b60ef0f-10c0.zip/node_modules/@storybook/addon-onboarding/",\ "packageDependencies": [\ - ["@storybook/addon-onboarding", "npm:8.4.2"]\ + ["@storybook/addon-onboarding", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-onboarding-virtual-48c9f19c48/4/.yarn/berry/cache/@storybook-addon-onboarding-npm-8.4.2-8b9e406290-10c0.zip/node_modules/@storybook/addon-onboarding/",\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-onboarding-virtual-b462cd39c0/4/.yarn/berry/cache/@storybook-addon-onboarding-npm-8.4.6-a56b60ef0f-10c0.zip/node_modules/@storybook/addon-onboarding/",\ "packageDependencies": [\ - ["@storybook/addon-onboarding", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["@storybook/addon-onboarding", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["@types/storybook", null],\ ["react-confetti", "virtual:0a3554b0e83b18369ad4b2b9363ca467dfa1cd92a8c5c1491064e6a944d9bb8629f863c96218106ff1f9c1a49ec9de501829e301cd92a66e34b526cb683aad97#npm:6.1.0"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -4968,20 +4966,20 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-outline", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-outline-npm-8.4.2-ec23bf5906-10c0.zip/node_modules/@storybook/addon-outline/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-outline-npm-8.4.6-297859a84c-10c0.zip/node_modules/@storybook/addon-outline/",\ "packageDependencies": [\ - ["@storybook/addon-outline", "npm:8.4.2"]\ + ["@storybook/addon-outline", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-outline-virtual-e5f2de321e/4/.yarn/berry/cache/@storybook-addon-outline-npm-8.4.2-ec23bf5906-10c0.zip/node_modules/@storybook/addon-outline/",\ + ["virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-outline-virtual-e49252f627/4/.yarn/berry/cache/@storybook-addon-outline-npm-8.4.6-297859a84c-10c0.zip/node_modules/@storybook/addon-outline/",\ "packageDependencies": [\ - ["@storybook/addon-outline", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ + ["@storybook/addon-outline", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -4992,19 +4990,19 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-toolbars", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-toolbars-npm-8.4.2-f445d558c7-10c0.zip/node_modules/@storybook/addon-toolbars/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-toolbars-npm-8.4.6-03389542d2-10c0.zip/node_modules/@storybook/addon-toolbars/",\ "packageDependencies": [\ - ["@storybook/addon-toolbars", "npm:8.4.2"]\ + ["@storybook/addon-toolbars", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-toolbars-virtual-7bdd31a921/4/.yarn/berry/cache/@storybook-addon-toolbars-npm-8.4.2-f445d558c7-10c0.zip/node_modules/@storybook/addon-toolbars/",\ + ["virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-toolbars-virtual-1107dde0e6/4/.yarn/berry/cache/@storybook-addon-toolbars-npm-8.4.6-03389542d2-10c0.zip/node_modules/@storybook/addon-toolbars/",\ "packageDependencies": [\ - ["@storybook/addon-toolbars", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ + ["@storybook/addon-toolbars", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ ["@types/storybook", null],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -5014,20 +5012,20 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/addon-viewport", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-viewport-npm-8.4.2-5ce476afc4-10c0.zip/node_modules/@storybook/addon-viewport/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-addon-viewport-npm-8.4.6-eba91cf3c5-10c0.zip/node_modules/@storybook/addon-viewport/",\ "packageDependencies": [\ - ["@storybook/addon-viewport", "npm:8.4.2"]\ + ["@storybook/addon-viewport", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-addon-viewport-virtual-809448db24/4/.yarn/berry/cache/@storybook-addon-viewport-npm-8.4.2-5ce476afc4-10c0.zip/node_modules/@storybook/addon-viewport/",\ + ["virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-addon-viewport-virtual-e80dfe65d4/4/.yarn/berry/cache/@storybook-addon-viewport-npm-8.4.6-eba91cf3c5-10c0.zip/node_modules/@storybook/addon-viewport/",\ "packageDependencies": [\ - ["@storybook/addon-viewport", "virtual:b47e0f14faf6ee4c393018f9842568ec479f2234dba5dda2a79b4e9ee4acb2f0801d7c9b18a70b63618747226b0b95c74648b635235d7ee4ae0672f320867c14#npm:8.4.2"],\ + ["@storybook/addon-viewport", "virtual:508c54874192b546f6a97a3cdcb7bd234c521209c53618a249b4b9bf35ab6f07d15b80cf5a8dc35e036d20824acd3dabc15f738cbd69601d8a4df769d9f9c538#npm:8.4.6"],\ ["@types/storybook", null],\ ["memoizerific", "npm:1.11.3"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -5037,25 +5035,25 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/blocks", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-blocks-npm-8.4.2-ac02fd994d-10c0.zip/node_modules/@storybook/blocks/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-blocks-npm-8.4.6-f6088bb923-10c0.zip/node_modules/@storybook/blocks/",\ "packageDependencies": [\ - ["@storybook/blocks", "npm:8.4.2"]\ + ["@storybook/blocks", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-blocks-virtual-5b2a96de8b/4/.yarn/berry/cache/@storybook-blocks-npm-8.4.2-ac02fd994d-10c0.zip/node_modules/@storybook/blocks/",\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-blocks-virtual-f992d2b149/4/.yarn/berry/cache/@storybook-blocks-npm-8.4.6-f6088bb923-10c0.zip/node_modules/@storybook/blocks/",\ "packageDependencies": [\ - ["@storybook/blocks", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:8.4.2"],\ + ["@storybook/blocks", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["@storybook/csf", "npm:0.1.11"],\ - ["@storybook/icons", "virtual:5b2a96de8b28357bb8c948543eee2a3211e3d1aefb9a55ad0897f7000aa86d655103d57bd321dbeda2f4ff2273dc1f967e74ed750ddff71f07866f5daac52c78#npm:1.2.12"],\ - ["@types/react", null],\ - ["@types/react-dom", null],\ + ["@storybook/icons", "virtual:f992d2b149e1e3224d19139fc5665ca661aa7632884666d6dbbea35ed606dd480ef6c5590dbbeae78fefb78a5d83ed2bfb8ec36b6fa7e71092e05791df4363c2#npm:1.2.12"],\ + ["@types/react", "npm:18.3.3"],\ + ["@types/react-dom", "npm:18.3.0"],\ ["@types/storybook", null],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:18.2.0"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["react", "npm:18.3.1"],\ + ["react-dom", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -5068,18 +5066,18 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-blocks-virtual-7553d61443/4/.yarn/berry/cache/@storybook-blocks-npm-8.4.2-ac02fd994d-10c0.zip/node_modules/@storybook/blocks/",\ + ["virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-blocks-virtual-af38b9f968/4/.yarn/berry/cache/@storybook-blocks-npm-8.4.6-f6088bb923-10c0.zip/node_modules/@storybook/blocks/",\ "packageDependencies": [\ - ["@storybook/blocks", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["@storybook/blocks", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:8.4.6"],\ ["@storybook/csf", "npm:0.1.11"],\ - ["@storybook/icons", "virtual:7553d6144374dfab8bb7def4f25e94e5bf3e25e5a328cf5451e00a3a5b5822bf96f4e5ef700723ed582617e5fee3f8a1e434c106378d225219ca4d382d42fb68#npm:1.2.12"],\ - ["@types/react", "npm:18.3.3"],\ - ["@types/react-dom", "npm:18.3.0"],\ + ["@storybook/icons", "virtual:af38b9f968b60d2c6b589ac233b19406a051d635d50efff50b366a03a89f8fb9efb56a5ed42528f431a3535a43dbc1f7c8075760a7d6254f5ee4e2e465709f4e#npm:1.2.12"],\ + ["@types/react", null],\ + ["@types/react-dom", null],\ ["@types/storybook", null],\ - ["react", "npm:18.3.1"],\ - ["react-dom", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["react", "npm:18.2.0"],\ + ["react-dom", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:18.2.0"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -5094,22 +5092,22 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/builder-vite", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-builder-vite-npm-8.4.2-93e86c956f-10c0.zip/node_modules/@storybook/builder-vite/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-builder-vite-npm-8.4.6-eb3e092fca-10c0.zip/node_modules/@storybook/builder-vite/",\ "packageDependencies": [\ - ["@storybook/builder-vite", "npm:8.4.2"]\ + ["@storybook/builder-vite", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-builder-vite-virtual-6269bee0dd/4/.yarn/berry/cache/@storybook-builder-vite-npm-8.4.2-93e86c956f-10c0.zip/node_modules/@storybook/builder-vite/",\ + ["virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-builder-vite-virtual-0f042da641/4/.yarn/berry/cache/@storybook-builder-vite-npm-8.4.6-eb3e092fca-10c0.zip/node_modules/@storybook/builder-vite/",\ "packageDependencies": [\ - ["@storybook/builder-vite", "virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:8.4.2"],\ - ["@storybook/csf-plugin", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:8.4.2"],\ + ["@storybook/builder-vite", "virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:8.4.6"],\ + ["@storybook/csf-plugin", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:8.4.6"],\ ["@types/storybook", null],\ ["@types/vite", null],\ ["browser-assert", "npm:1.2.1"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["ts-dedent", "npm:2.2.0"],\ ["vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:5.4.6"]\ ],\ @@ -5123,19 +5121,19 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/components", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-components-npm-8.4.2-191ecdacf6-10c0.zip/node_modules/@storybook/components/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-components-npm-8.4.6-409f61a1d0-10c0.zip/node_modules/@storybook/components/",\ "packageDependencies": [\ - ["@storybook/components", "npm:8.4.2"]\ + ["@storybook/components", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-components-virtual-67c2c0ecd1/4/.yarn/berry/cache/@storybook-components-npm-8.4.2-191ecdacf6-10c0.zip/node_modules/@storybook/components/",\ + ["virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-components-virtual-e99a3f0ec1/4/.yarn/berry/cache/@storybook-components-npm-8.4.6-409f61a1d0-10c0.zip/node_modules/@storybook/components/",\ "packageDependencies": [\ - ["@storybook/components", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ + ["@storybook/components", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ ["@types/storybook", null],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -5145,30 +5143,30 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/core", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-core-npm-8.4.2-ce8ec351ea-10c0.zip/node_modules/@storybook/core/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-core-npm-8.4.6-52d8f9c954-10c0.zip/node_modules/@storybook/core/",\ "packageDependencies": [\ - ["@storybook/core", "npm:8.4.2"]\ + ["@storybook/core", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:d38d8cdde572737efa1d73e536897b0c95a07cad3f28d469e449ca48ecf3e79feba852f7e4fd9f61d1c49f7c811ec3445a36c0b99acb53cf1595657afdff257c#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-core-virtual-886b5b98a2/4/.yarn/berry/cache/@storybook-core-npm-8.4.2-ce8ec351ea-10c0.zip/node_modules/@storybook/core/",\ + ["virtual:f843247db9afd0ef1f2c4331b7dcd79c2df2a37492b44618b26d51b4b13e1dd18f686db30666d488a9cffb7dd53c79cdda5614b65704a9e580ed511d292a9f10#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-core-virtual-85b85f6840/4/.yarn/berry/cache/@storybook-core-npm-8.4.6-52d8f9c954-10c0.zip/node_modules/@storybook/core/",\ "packageDependencies": [\ - ["@storybook/core", "virtual:d38d8cdde572737efa1d73e536897b0c95a07cad3f28d469e449ca48ecf3e79feba852f7e4fd9f61d1c49f7c811ec3445a36c0b99acb53cf1595657afdff257c#npm:8.4.2"],\ + ["@storybook/core", "virtual:f843247db9afd0ef1f2c4331b7dcd79c2df2a37492b44618b26d51b4b13e1dd18f686db30666d488a9cffb7dd53c79cdda5614b65704a9e580ed511d292a9f10#npm:8.4.6"],\ ["@storybook/csf", "npm:0.1.11"],\ ["@types/prettier", null],\ ["better-opn", "npm:3.0.2"],\ ["browser-assert", "npm:1.2.1"],\ ["esbuild", "npm:0.24.0"],\ - ["esbuild-register", "virtual:886b5b98a21c583e0788482b5fe2582a4c05ca2c2092273521029a1673d8eebba4f8c4bb7cc4eefa14fca9f8d259966acdf4f5c14a6bf668781c02a672bdbcf5#npm:3.5.0"],\ + ["esbuild-register", "virtual:85b85f68406b7e920d37bc25079b96add8f18473ddebbcba00a31699430bd46d663bc0e24ef910e129e96b7ee5e2ff9d1d0e21ae9de175c80eb6668e1a81b9bf#npm:3.5.0"],\ ["jsdoc-type-pratt-parser", "npm:4.1.0"],\ ["prettier", null],\ ["process", "npm:0.11.10"],\ ["recast", "npm:0.23.6"],\ ["semver", "npm:7.6.3"],\ ["util", "npm:0.12.5"],\ - ["ws", "virtual:886b5b98a21c583e0788482b5fe2582a4c05ca2c2092273521029a1673d8eebba4f8c4bb7cc4eefa14fca9f8d259966acdf4f5c14a6bf668781c02a672bdbcf5#npm:8.17.1"]\ + ["ws", "virtual:85b85f68406b7e920d37bc25079b96add8f18473ddebbcba00a31699430bd46d663bc0e24ef910e129e96b7ee5e2ff9d1d0e21ae9de175c80eb6668e1a81b9bf#npm:8.17.1"]\ ],\ "packagePeers": [\ "@types/prettier",\ @@ -5188,19 +5186,19 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/csf-plugin", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-csf-plugin-npm-8.4.2-2461191c8a-10c0.zip/node_modules/@storybook/csf-plugin/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-csf-plugin-npm-8.4.6-c42fe2a019-10c0.zip/node_modules/@storybook/csf-plugin/",\ "packageDependencies": [\ - ["@storybook/csf-plugin", "npm:8.4.2"]\ + ["@storybook/csf-plugin", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-csf-plugin-virtual-80801ac169/4/.yarn/berry/cache/@storybook-csf-plugin-npm-8.4.2-2461191c8a-10c0.zip/node_modules/@storybook/csf-plugin/",\ + ["virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-csf-plugin-virtual-b035df59cc/4/.yarn/berry/cache/@storybook-csf-plugin-npm-8.4.6-c42fe2a019-10c0.zip/node_modules/@storybook/csf-plugin/",\ "packageDependencies": [\ - ["@storybook/csf-plugin", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:8.4.2"],\ + ["@storybook/csf-plugin", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:8.4.6"],\ ["@types/storybook", null],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["unplugin", "npm:1.5.0"]\ ],\ "packagePeers": [\ @@ -5227,14 +5225,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:5b2a96de8b28357bb8c948543eee2a3211e3d1aefb9a55ad0897f7000aa86d655103d57bd321dbeda2f4ff2273dc1f967e74ed750ddff71f07866f5daac52c78#npm:1.2.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-icons-virtual-727d68f7d1/4/.yarn/berry/cache/@storybook-icons-npm-1.2.12-a51912a659-10c0.zip/node_modules/@storybook/icons/",\ + ["virtual:af38b9f968b60d2c6b589ac233b19406a051d635d50efff50b366a03a89f8fb9efb56a5ed42528f431a3535a43dbc1f7c8075760a7d6254f5ee4e2e465709f4e#npm:1.2.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-icons-virtual-50a2557960/4/.yarn/berry/cache/@storybook-icons-npm-1.2.12-a51912a659-10c0.zip/node_modules/@storybook/icons/",\ "packageDependencies": [\ - ["@storybook/icons", "virtual:5b2a96de8b28357bb8c948543eee2a3211e3d1aefb9a55ad0897f7000aa86d655103d57bd321dbeda2f4ff2273dc1f967e74ed750ddff71f07866f5daac52c78#npm:1.2.12"],\ + ["@storybook/icons", "virtual:af38b9f968b60d2c6b589ac233b19406a051d635d50efff50b366a03a89f8fb9efb56a5ed42528f431a3535a43dbc1f7c8075760a7d6254f5ee4e2e465709f4e#npm:1.2.12"],\ ["@types/react", null],\ ["@types/react-dom", null],\ ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:18.2.0"]\ + ["react-dom", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:18.2.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -5244,10 +5242,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:7553d6144374dfab8bb7def4f25e94e5bf3e25e5a328cf5451e00a3a5b5822bf96f4e5ef700723ed582617e5fee3f8a1e434c106378d225219ca4d382d42fb68#npm:1.2.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-icons-virtual-9fa4d25c38/4/.yarn/berry/cache/@storybook-icons-npm-1.2.12-a51912a659-10c0.zip/node_modules/@storybook/icons/",\ + ["virtual:f992d2b149e1e3224d19139fc5665ca661aa7632884666d6dbbea35ed606dd480ef6c5590dbbeae78fefb78a5d83ed2bfb8ec36b6fa7e71092e05791df4363c2#npm:1.2.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-icons-virtual-3909f4ecf9/4/.yarn/berry/cache/@storybook-icons-npm-1.2.12-a51912a659-10c0.zip/node_modules/@storybook/icons/",\ "packageDependencies": [\ - ["@storybook/icons", "virtual:7553d6144374dfab8bb7def4f25e94e5bf3e25e5a328cf5451e00a3a5b5822bf96f4e5ef700723ed582617e5fee3f8a1e434c106378d225219ca4d382d42fb68#npm:1.2.12"],\ + ["@storybook/icons", "virtual:f992d2b149e1e3224d19139fc5665ca661aa7632884666d6dbbea35ed606dd480ef6c5590dbbeae78fefb78a5d83ed2bfb8ec36b6fa7e71092e05791df4363c2#npm:1.2.12"],\ ["@types/react", "npm:18.3.3"],\ ["@types/react-dom", "npm:18.3.0"],\ ["react", "npm:18.3.1"],\ @@ -5263,21 +5261,21 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/instrumenter", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-instrumenter-npm-8.4.2-808ef896f4-10c0.zip/node_modules/@storybook/instrumenter/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-instrumenter-npm-8.4.6-956290c801-10c0.zip/node_modules/@storybook/instrumenter/",\ "packageDependencies": [\ - ["@storybook/instrumenter", "npm:8.4.2"]\ + ["@storybook/instrumenter", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:ec732ff5c6bfc54ab2c1fde0a70266bb8f662aa308301c461be259e61522a7fe89dc2f4f5900257794343f0cd8016bf2ddd330bb62d3c77c7255a3e1d1037d86#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-instrumenter-virtual-dc7545cf2a/4/.yarn/berry/cache/@storybook-instrumenter-npm-8.4.2-808ef896f4-10c0.zip/node_modules/@storybook/instrumenter/",\ + ["virtual:0c92df0ce53e3b6242ba1b91dac113a19abd27ce8ead10a528fb3b29567769cb7edd34ac9601ee27ab707b01ff8d947550dfc175f1c4424e06bf88114ccfd0e5#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-instrumenter-virtual-c01e910838/4/.yarn/berry/cache/@storybook-instrumenter-npm-8.4.6-956290c801-10c0.zip/node_modules/@storybook/instrumenter/",\ "packageDependencies": [\ - ["@storybook/instrumenter", "virtual:ec732ff5c6bfc54ab2c1fde0a70266bb8f662aa308301c461be259e61522a7fe89dc2f4f5900257794343f0cd8016bf2ddd330bb62d3c77c7255a3e1d1037d86#npm:8.4.2"],\ + ["@storybook/instrumenter", "virtual:0c92df0ce53e3b6242ba1b91dac113a19abd27ce8ead10a528fb3b29567769cb7edd34ac9601ee27ab707b01ff8d947550dfc175f1c4424e06bf88114ccfd0e5#npm:8.4.6"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ ["@vitest/utils", "npm:2.1.4"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -5287,19 +5285,19 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/manager-api", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-manager-api-npm-8.4.2-c2613d76f6-10c0.zip/node_modules/@storybook/manager-api/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-manager-api-npm-8.4.6-f38fdbea9a-10c0.zip/node_modules/@storybook/manager-api/",\ "packageDependencies": [\ - ["@storybook/manager-api", "npm:8.4.2"]\ + ["@storybook/manager-api", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-manager-api-virtual-2b0de86adc/4/.yarn/berry/cache/@storybook-manager-api-npm-8.4.2-c2613d76f6-10c0.zip/node_modules/@storybook/manager-api/",\ + ["virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-manager-api-virtual-f3ab90220a/4/.yarn/berry/cache/@storybook-manager-api-npm-8.4.6-f38fdbea9a-10c0.zip/node_modules/@storybook/manager-api/",\ "packageDependencies": [\ - ["@storybook/manager-api", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ + ["@storybook/manager-api", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ ["@types/storybook", null],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -5309,19 +5307,19 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/preview-api", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-preview-api-npm-8.4.2-dcd803891c-10c0.zip/node_modules/@storybook/preview-api/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-preview-api-npm-8.4.6-d67f560a61-10c0.zip/node_modules/@storybook/preview-api/",\ "packageDependencies": [\ - ["@storybook/preview-api", "npm:8.4.2"]\ + ["@storybook/preview-api", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-preview-api-virtual-2c43bb0229/4/.yarn/berry/cache/@storybook-preview-api-npm-8.4.2-dcd803891c-10c0.zip/node_modules/@storybook/preview-api/",\ + ["virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-preview-api-virtual-8d2ad89777/4/.yarn/berry/cache/@storybook-preview-api-npm-8.4.6-d67f560a61-10c0.zip/node_modules/@storybook/preview-api/",\ "packageDependencies": [\ - ["@storybook/preview-api", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ + ["@storybook/preview-api", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ ["@types/storybook", null],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -5331,24 +5329,24 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/react", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-react-npm-8.4.2-6fc2a9772e-10c0.zip/node_modules/@storybook/react/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-react-npm-8.4.6-aefb2c6993-10c0.zip/node_modules/@storybook/react/",\ "packageDependencies": [\ - ["@storybook/react", "npm:8.4.2"]\ + ["@storybook/react", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-react-virtual-1eeff227e9/4/.yarn/berry/cache/@storybook-react-npm-8.4.2-6fc2a9772e-10c0.zip/node_modules/@storybook/react/",\ + ["virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-react-virtual-ef6d2c2fa9/4/.yarn/berry/cache/@storybook-react-npm-8.4.6-aefb2c6993-10c0.zip/node_modules/@storybook/react/",\ "packageDependencies": [\ - ["@storybook/react", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/components", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ + ["@storybook/react", "virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:8.4.6"],\ + ["@storybook/components", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ ["@storybook/global", "npm:5.0.0"],\ - ["@storybook/manager-api", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ - ["@storybook/preview-api", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ - ["@storybook/react-dom-shim", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ - ["@storybook/test", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/theming", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ + ["@storybook/manager-api", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ + ["@storybook/preview-api", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ + ["@storybook/react-dom-shim", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ + ["@storybook/test", null],\ + ["@storybook/theming", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ ["@types/react", "npm:18.3.3"],\ ["@types/react-dom", "npm:18.3.0"],\ ["@types/storybook", null],\ @@ -5356,8 +5354,8 @@ const RAW_RUNTIME_STATE = ["@types/typescript", null],\ ["react", "npm:18.3.1"],\ ["react-dom", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["typescript", null]\ ],\ "packagePeers": [\ "@storybook/test",\ @@ -5373,17 +5371,17 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-react-virtual-1eac475b89/4/.yarn/berry/cache/@storybook-react-npm-8.4.2-6fc2a9772e-10c0.zip/node_modules/@storybook/react/",\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-react-virtual-16bf93503a/4/.yarn/berry/cache/@storybook-react-npm-8.4.6-aefb2c6993-10c0.zip/node_modules/@storybook/react/",\ "packageDependencies": [\ - ["@storybook/react", "virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:8.4.2"],\ - ["@storybook/components", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ + ["@storybook/react", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/components", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ ["@storybook/global", "npm:5.0.0"],\ - ["@storybook/manager-api", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ - ["@storybook/preview-api", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ - ["@storybook/react-dom-shim", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ - ["@storybook/test", null],\ - ["@storybook/theming", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ + ["@storybook/manager-api", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ + ["@storybook/preview-api", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ + ["@storybook/react-dom-shim", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ + ["@storybook/test", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/theming", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ ["@types/react", "npm:18.3.3"],\ ["@types/react-dom", "npm:18.3.0"],\ ["@types/storybook", null],\ @@ -5391,8 +5389,8 @@ const RAW_RUNTIME_STATE = ["@types/typescript", null],\ ["react", "npm:18.3.1"],\ ["react-dom", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["typescript", null]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7"]\ ],\ "packagePeers": [\ "@storybook/test",\ @@ -5410,23 +5408,23 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/react-dom-shim", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-react-dom-shim-npm-8.4.2-6ff3edd111-10c0.zip/node_modules/@storybook/react-dom-shim/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-react-dom-shim-npm-8.4.6-045c488240-10c0.zip/node_modules/@storybook/react-dom-shim/",\ "packageDependencies": [\ - ["@storybook/react-dom-shim", "npm:8.4.2"]\ + ["@storybook/react-dom-shim", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-react-dom-shim-virtual-a170358b1f/4/.yarn/berry/cache/@storybook-react-dom-shim-npm-8.4.2-6ff3edd111-10c0.zip/node_modules/@storybook/react-dom-shim/",\ + ["virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-react-dom-shim-virtual-303b7faf54/4/.yarn/berry/cache/@storybook-react-dom-shim-npm-8.4.6-045c488240-10c0.zip/node_modules/@storybook/react-dom-shim/",\ "packageDependencies": [\ - ["@storybook/react-dom-shim", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ - ["@types/react", "npm:18.3.3"],\ - ["@types/react-dom", "npm:18.3.0"],\ + ["@storybook/react-dom-shim", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:8.4.6"],\ + ["@types/react", null],\ + ["@types/react-dom", null],\ ["@types/storybook", null],\ - ["react", "npm:18.3.1"],\ - ["react-dom", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["react", "npm:18.2.0"],\ + ["react-dom", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:18.2.0"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -5438,16 +5436,16 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-react-dom-shim-virtual-c097617a5e/4/.yarn/berry/cache/@storybook-react-dom-shim-npm-8.4.2-6ff3edd111-10c0.zip/node_modules/@storybook/react-dom-shim/",\ + ["virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-react-dom-shim-virtual-10ab279a43/4/.yarn/berry/cache/@storybook-react-dom-shim-npm-8.4.6-045c488240-10c0.zip/node_modules/@storybook/react-dom-shim/",\ "packageDependencies": [\ - ["@storybook/react-dom-shim", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:8.4.2"],\ - ["@types/react", null],\ - ["@types/react-dom", null],\ + ["@storybook/react-dom-shim", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ + ["@types/react", "npm:18.3.3"],\ + ["@types/react-dom", "npm:18.3.0"],\ ["@types/storybook", null],\ - ["react", "npm:18.2.0"],\ - ["react-dom", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:18.2.0"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["react", "npm:18.3.1"],\ + ["react-dom", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -5461,21 +5459,21 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/react-vite", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-react-vite-npm-8.4.2-1b5961346e-10c0.zip/node_modules/@storybook/react-vite/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-react-vite-npm-8.4.6-98a57bc1d4-10c0.zip/node_modules/@storybook/react-vite/",\ "packageDependencies": [\ - ["@storybook/react-vite", "npm:8.4.2"]\ + ["@storybook/react-vite", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-react-vite-virtual-d04eea83b7/4/.yarn/berry/cache/@storybook-react-vite-npm-8.4.2-1b5961346e-10c0.zip/node_modules/@storybook/react-vite/",\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-react-vite-virtual-309c2569af/4/.yarn/berry/cache/@storybook-react-vite-npm-8.4.6-98a57bc1d4-10c0.zip/node_modules/@storybook/react-vite/",\ "packageDependencies": [\ - ["@storybook/react-vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@joshwooding/vite-plugin-react-docgen-typescript", "virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:0.3.0"],\ - ["@rollup/pluginutils", "virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:5.1.0"],\ - ["@storybook/builder-vite", "virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:8.4.2"],\ - ["@storybook/react", "virtual:d04eea83b7b3b779146c7ba3180fd663dc56bd99381ef9b0ab9a8e125844fe7aeca05e2412e165fd5c2503f7e96e689854170797d49c086aa2d8cb5b5603e057#npm:8.4.2"],\ + ["@storybook/react-vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@joshwooding/vite-plugin-react-docgen-typescript", "virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:0.4.2"],\ + ["@rollup/pluginutils", "virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:5.1.0"],\ + ["@storybook/builder-vite", "virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:8.4.6"],\ + ["@storybook/react", "virtual:309c2569afe8bc7ebd1dfa0fed4fc06d16e07fa6ce5d62f463f1d0c5a80e9be3267971a91076f8b1f961ae181b21a794c8f033c8d0e537014e1886f6d47ae911#npm:8.4.6"],\ ["@types/react", "npm:18.3.3"],\ ["@types/react-dom", "npm:18.3.0"],\ ["@types/storybook", null],\ @@ -5486,7 +5484,7 @@ const RAW_RUNTIME_STATE = ["react-docgen", "npm:7.0.3"],\ ["react-dom", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1"],\ ["resolve", "patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["tsconfig-paths", "npm:4.2.0"],\ ["vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:5.4.6"]\ ],\ @@ -5504,27 +5502,27 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/test", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-test-npm-8.4.2-393c525b4a-10c0.zip/node_modules/@storybook/test/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-test-npm-8.4.6-930ccb5b1e-10c0.zip/node_modules/@storybook/test/",\ "packageDependencies": [\ - ["@storybook/test", "npm:8.4.2"]\ + ["@storybook/test", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-test-virtual-0b53bbebfa/4/.yarn/berry/cache/@storybook-test-npm-8.4.2-393c525b4a-10c0.zip/node_modules/@storybook/test/",\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-test-virtual-408d79dc59/4/.yarn/berry/cache/@storybook-test-npm-8.4.6-930ccb5b1e-10c0.zip/node_modules/@storybook/test/",\ "packageDependencies": [\ - ["@storybook/test", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["@storybook/test", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["@storybook/csf", "npm:0.1.11"],\ ["@storybook/global", "npm:5.0.0"],\ - ["@storybook/instrumenter", "virtual:ec732ff5c6bfc54ab2c1fde0a70266bb8f662aa308301c461be259e61522a7fe89dc2f4f5900257794343f0cd8016bf2ddd330bb62d3c77c7255a3e1d1037d86#npm:8.4.2"],\ + ["@storybook/instrumenter", "virtual:0c92df0ce53e3b6242ba1b91dac113a19abd27ce8ead10a528fb3b29567769cb7edd34ac9601ee27ab707b01ff8d947550dfc175f1c4424e06bf88114ccfd0e5#npm:8.4.6"],\ ["@testing-library/dom", "npm:10.4.0"],\ ["@testing-library/jest-dom", "npm:6.5.0"],\ - ["@testing-library/user-event", "virtual:0b53bbebface1ffbac28ad9893c17ff0b27e9242bcc9728f883591606301c98042678027ee3f03f690c6a5ca703cf816d223352a2def17606a371f72cff86e4d#npm:14.5.2"],\ + ["@testing-library/user-event", "virtual:408d79dc599bc30beadd43a6f0170aecf3223676a755420f119efd3525bee9418f7f4b3bbad9d4cdc2419900a08aeaaffbc30bacf6754bd5270dfc54f6c9e348#npm:14.5.2"],\ ["@types/storybook", null],\ ["@vitest/expect", "npm:2.0.5"],\ ["@vitest/spy", "npm:2.0.5"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -5534,19 +5532,19 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@storybook/theming", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@storybook-theming-npm-8.4.2-b6af5362d7-10c0.zip/node_modules/@storybook/theming/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/@storybook-theming-npm-8.4.6-7de3132efc-10c0.zip/node_modules/@storybook/theming/",\ "packageDependencies": [\ - ["@storybook/theming", "npm:8.4.2"]\ + ["@storybook/theming", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-theming-virtual-04237ee7cf/4/.yarn/berry/cache/@storybook-theming-npm-8.4.2-b6af5362d7-10c0.zip/node_modules/@storybook/theming/",\ + ["virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-theming-virtual-ebf6a14f4f/4/.yarn/berry/cache/@storybook-theming-npm-8.4.6-7de3132efc-10c0.zip/node_modules/@storybook/theming/",\ "packageDependencies": [\ - ["@storybook/theming", "virtual:1eac475b89d3ea52cb4ca168e7ba8a317231318767414feca08cc5ae13c2583391467941f41e875d6c0d92a70e8a387c7cfe3f0e4d54cee9a6f2d22f8c2ac776#npm:8.4.2"],\ + ["@storybook/theming", "virtual:ef6d2c2fa92c5320e0c34ef6a9ea2637a567cd7f04b4fa6163067a53e7fb9b0aad9efc03013dce4b7ed1e93218fe2df3036a44c2142ce302ba12497bd21b041a#npm:8.4.6"],\ ["@types/storybook", null],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"]\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -5649,10 +5647,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:0b53bbebface1ffbac28ad9893c17ff0b27e9242bcc9728f883591606301c98042678027ee3f03f690c6a5ca703cf816d223352a2def17606a371f72cff86e4d#npm:14.5.2", {\ - "packageLocation": "./.yarn/__virtual__/@testing-library-user-event-virtual-508a53e4cf/4/.yarn/berry/cache/@testing-library-user-event-npm-14.5.2-ec9587901c-10c0.zip/node_modules/@testing-library/user-event/",\ + ["virtual:408d79dc599bc30beadd43a6f0170aecf3223676a755420f119efd3525bee9418f7f4b3bbad9d4cdc2419900a08aeaaffbc30bacf6754bd5270dfc54f6c9e348#npm:14.5.2", {\ + "packageLocation": "./.yarn/__virtual__/@testing-library-user-event-virtual-cea76f9ad4/4/.yarn/berry/cache/@testing-library-user-event-npm-14.5.2-ec9587901c-10c0.zip/node_modules/@testing-library/user-event/",\ "packageDependencies": [\ - ["@testing-library/user-event", "virtual:0b53bbebface1ffbac28ad9893c17ff0b27e9242bcc9728f883591606301c98042678027ee3f03f690c6a5ca703cf816d223352a2def17606a371f72cff86e4d#npm:14.5.2"],\ + ["@testing-library/user-event", "virtual:408d79dc599bc30beadd43a6f0170aecf3223676a755420f119efd3525bee9418f7f4b3bbad9d4cdc2419900a08aeaaffbc30bacf6754bd5270dfc54f6c9e348#npm:14.5.2"],\ ["@testing-library/dom", "npm:10.4.0"],\ ["@types/testing-library__dom", null]\ ],\ @@ -5774,17 +5772,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["@types/glob", [\ - ["npm:7.2.0", {\ - "packageLocation": "../../../.yarn/berry/cache/@types-glob-npm-7.2.0-772334bf9a-10c0.zip/node_modules/@types/glob/",\ - "packageDependencies": [\ - ["@types/glob", "npm:7.2.0"],\ - ["@types/minimatch", "npm:5.1.2"],\ - ["@types/node", "npm:20.5.7"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["@types/history", [\ ["npm:4.7.11", {\ "packageLocation": "../../../.yarn/berry/cache/@types-history-npm-4.7.11-fe05d7b2e1-10c0.zip/node_modules/@types/history/",\ @@ -5831,15 +5818,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["@types/minimatch", [\ - ["npm:5.1.2", {\ - "packageLocation": "../../../.yarn/berry/cache/@types-minimatch-npm-5.1.2-aab9c394d3-10c0.zip/node_modules/@types/minimatch/",\ - "packageDependencies": [\ - ["@types/minimatch", "npm:5.1.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["@types/minimist", [\ ["npm:1.2.5", {\ "packageLocation": "../../../.yarn/berry/cache/@types-minimist-npm-1.2.5-c85664a9d8-10c0.zip/node_modules/@types/minimist/",\ @@ -6200,10 +6178,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:7879a4e2bc77a9f9c77b3e4714bf962cea8f106388c22980732dc43dd4fef6c02e34189720324fb47cd1f48d6289ad520edde6afda0aa737653af22ab94f75a7#npm:8.13.0", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-typescript-estree-virtual-a7853a294c/4/.yarn/berry/cache/@typescript-eslint-typescript-estree-npm-8.13.0-59e9fc52dc-10c0.zip/node_modules/@typescript-eslint/typescript-estree/",\ + ["virtual:ce57a89e52eb93e7c8729a670659395a9d0087a597d3a7e2d70d8c696699b28b00507f045d21a4b803cea6ca29084d06ddb60f526b6d08bd51610ddfce50a956#npm:8.13.0", {\ + "packageLocation": "./.yarn/__virtual__/@typescript-eslint-typescript-estree-virtual-019785b574/4/.yarn/berry/cache/@typescript-eslint-typescript-estree-npm-8.13.0-59e9fc52dc-10c0.zip/node_modules/@typescript-eslint/typescript-estree/",\ "packageDependencies": [\ - ["@typescript-eslint/typescript-estree", "virtual:7879a4e2bc77a9f9c77b3e4714bf962cea8f106388c22980732dc43dd4fef6c02e34189720324fb47cd1f48d6289ad520edde6afda0aa737653af22ab94f75a7#npm:8.13.0"],\ + ["@typescript-eslint/typescript-estree", "virtual:ce57a89e52eb93e7c8729a670659395a9d0087a597d3a7e2d70d8c696699b28b00507f045d21a4b803cea6ca29084d06ddb60f526b6d08bd51610ddfce50a956#npm:8.13.0"],\ ["@types/typescript", null],\ ["@typescript-eslint/types", "npm:8.13.0"],\ ["@typescript-eslint/visitor-keys", "npm:8.13.0"],\ @@ -6212,7 +6190,7 @@ const RAW_RUNTIME_STATE = ["is-glob", "npm:4.0.3"],\ ["minimatch", "npm:9.0.5"],\ ["semver", "npm:7.6.3"],\ - ["ts-api-utils", "virtual:a7853a294cb56695575d556832755aa7b4e3d8a33e19394623f7718e588e821eec841f425955375f97941577777b7db399199b3007ce11899b4f8a72ba63116e#npm:1.4.0"],\ + ["ts-api-utils", "virtual:019785b57463e339d3430452f3dc91a9fab51fecefe0e94f18b6f503a7f67c2f29947b42a4ea8628f5fef6519bb0ed989ed036df34f6a151e671180040789781#npm:1.4.0"],\ ["typescript", null]\ ],\ "packagePeers": [\ @@ -6237,15 +6215,15 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:153b5d4e88d96d364cb1b7f198d50fbff388e05b6fee129966c5e9b0ae1e77f87f8466e8881aad33c1264cffa8fd8f438ac63a3089aaf61516f3311f433ce5ff#npm:8.13.0", {\ - "packageLocation": "./.yarn/__virtual__/@typescript-eslint-utils-virtual-7879a4e2bc/4/.yarn/berry/cache/@typescript-eslint-utils-npm-8.13.0-033f0cf809-10c0.zip/node_modules/@typescript-eslint/utils/",\ + ["virtual:0d8d29e993a40889726b23e952b28e90ac686c08158232b7be7e9d5f0de6fccbc0cdec1c7705ccb6045d56b3b04e7b3745a6a0d2b84c3616f66730ece3255acc#npm:8.13.0", {\ + "packageLocation": "./.yarn/__virtual__/@typescript-eslint-utils-virtual-ce57a89e52/4/.yarn/berry/cache/@typescript-eslint-utils-npm-8.13.0-033f0cf809-10c0.zip/node_modules/@typescript-eslint/utils/",\ "packageDependencies": [\ - ["@typescript-eslint/utils", "virtual:153b5d4e88d96d364cb1b7f198d50fbff388e05b6fee129966c5e9b0ae1e77f87f8466e8881aad33c1264cffa8fd8f438ac63a3089aaf61516f3311f433ce5ff#npm:8.13.0"],\ - ["@eslint-community/eslint-utils", "virtual:7879a4e2bc77a9f9c77b3e4714bf962cea8f106388c22980732dc43dd4fef6c02e34189720324fb47cd1f48d6289ad520edde6afda0aa737653af22ab94f75a7#npm:4.4.1"],\ + ["@typescript-eslint/utils", "virtual:0d8d29e993a40889726b23e952b28e90ac686c08158232b7be7e9d5f0de6fccbc0cdec1c7705ccb6045d56b3b04e7b3745a6a0d2b84c3616f66730ece3255acc#npm:8.13.0"],\ + ["@eslint-community/eslint-utils", "virtual:ce57a89e52eb93e7c8729a670659395a9d0087a597d3a7e2d70d8c696699b28b00507f045d21a4b803cea6ca29084d06ddb60f526b6d08bd51610ddfce50a956#npm:4.4.1"],\ ["@types/eslint", null],\ ["@typescript-eslint/scope-manager", "npm:8.13.0"],\ ["@typescript-eslint/types", "npm:8.13.0"],\ - ["@typescript-eslint/typescript-estree", "virtual:7879a4e2bc77a9f9c77b3e4714bf962cea8f106388c22980732dc43dd4fef6c02e34189720324fb47cd1f48d6289ad520edde6afda0aa737653af22ab94f75a7#npm:8.13.0"],\ + ["@typescript-eslint/typescript-estree", "virtual:ce57a89e52eb93e7c8729a670659395a9d0087a597d3a7e2d70d8c696699b28b00507f045d21a4b803cea6ca29084d06ddb60f526b6d08bd51610ddfce50a956#npm:8.13.0"],\ ["eslint", "npm:8.54.0"]\ ],\ "packagePeers": [\ @@ -6625,14 +6603,14 @@ const RAW_RUNTIME_STATE = ["aml-frontend", "workspace:."],\ ["@chromatic-com/storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:3.2.2"],\ ["@sentry/react", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.40.0"],\ - ["@storybook/addon-essentials", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/addon-interactions", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/addon-links", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/addon-onboarding", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/blocks", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/react", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/react-vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/test", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["@storybook/addon-essentials", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/addon-interactions", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/addon-links", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/addon-onboarding", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/blocks", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/react", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/react-vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/test", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["@testing-library/dom", "npm:10.2.0"],\ ["@testing-library/react", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:16.0.0"],\ ["@testing-library/user-event", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:14.5.1"],\ @@ -6651,7 +6629,7 @@ const RAW_RUNTIME_STATE = ["eslint", "npm:8.54.0"],\ ["eslint-config-react-app", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:7.0.1"],\ ["eslint-plugin-chai-friendly", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:0.7.2"],\ - ["eslint-plugin-storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:0.11.0"],\ + ["eslint-plugin-storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:0.11.1"],\ ["file-saver", "npm:2.0.5"],\ ["happy-dom", "npm:15.10.2"],\ ["history", "npm:5.3.0"],\ @@ -6667,7 +6645,7 @@ const RAW_RUNTIME_STATE = ["react-share", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:5.1.1"],\ ["react-transition-group", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:4.4.5"],\ ["sass", "npm:1.69.5"],\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ ["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7"],\ ["vite", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:5.4.6"],\ ["vite-tsconfig-paths", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:4.3.2"],\ @@ -8032,10 +8010,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:886b5b98a21c583e0788482b5fe2582a4c05ca2c2092273521029a1673d8eebba4f8c4bb7cc4eefa14fca9f8d259966acdf4f5c14a6bf668781c02a672bdbcf5#npm:3.5.0", {\ - "packageLocation": "./.yarn/__virtual__/esbuild-register-virtual-722bb59812/4/.yarn/berry/cache/esbuild-register-npm-3.5.0-d823f64ce0-10c0.zip/node_modules/esbuild-register/",\ + ["virtual:85b85f68406b7e920d37bc25079b96add8f18473ddebbcba00a31699430bd46d663bc0e24ef910e129e96b7ee5e2ff9d1d0e21ae9de175c80eb6668e1a81b9bf#npm:3.5.0", {\ + "packageLocation": "./.yarn/__virtual__/esbuild-register-virtual-0bfd183b88/4/.yarn/berry/cache/esbuild-register-npm-3.5.0-d823f64ce0-10c0.zip/node_modules/esbuild-register/",\ "packageDependencies": [\ - ["esbuild-register", "virtual:886b5b98a21c583e0788482b5fe2582a4c05ca2c2092273521029a1673d8eebba4f8c4bb7cc4eefa14fca9f8d259966acdf4f5c14a6bf668781c02a672bdbcf5#npm:3.5.0"],\ + ["esbuild-register", "virtual:85b85f68406b7e920d37bc25079b96add8f18473ddebbcba00a31699430bd46d663bc0e24ef910e129e96b7ee5e2ff9d1d0e21ae9de175c80eb6668e1a81b9bf#npm:3.5.0"],\ ["@types/esbuild", null],\ ["debug", "virtual:088d1bae551712e30edb3cb49147628c22e7097f1d212dd42d93076023bf76fad49f4808cd2b0d50ae3644e85dcbdd3c0d141e9646770b84a91d8637667dcadd#npm:4.3.4"],\ ["esbuild", "npm:0.24.0"]\ @@ -8437,20 +8415,20 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["eslint-plugin-storybook", [\ - ["npm:0.11.0", {\ - "packageLocation": "../../../.yarn/berry/cache/eslint-plugin-storybook-npm-0.11.0-f630c2b4d8-10c0.zip/node_modules/eslint-plugin-storybook/",\ + ["npm:0.11.1", {\ + "packageLocation": "../../../.yarn/berry/cache/eslint-plugin-storybook-npm-0.11.1-cbb24222b7-10c0.zip/node_modules/eslint-plugin-storybook/",\ "packageDependencies": [\ - ["eslint-plugin-storybook", "npm:0.11.0"]\ + ["eslint-plugin-storybook", "npm:0.11.1"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:0.11.0", {\ - "packageLocation": "./.yarn/__virtual__/eslint-plugin-storybook-virtual-153b5d4e88/4/.yarn/berry/cache/eslint-plugin-storybook-npm-0.11.0-f630c2b4d8-10c0.zip/node_modules/eslint-plugin-storybook/",\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:0.11.1", {\ + "packageLocation": "./.yarn/__virtual__/eslint-plugin-storybook-virtual-0d8d29e993/4/.yarn/berry/cache/eslint-plugin-storybook-npm-0.11.1-cbb24222b7-10c0.zip/node_modules/eslint-plugin-storybook/",\ "packageDependencies": [\ - ["eslint-plugin-storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:0.11.0"],\ + ["eslint-plugin-storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:0.11.1"],\ ["@storybook/csf", "npm:0.1.11"],\ ["@types/eslint", null],\ - ["@typescript-eslint/utils", "virtual:153b5d4e88d96d364cb1b7f198d50fbff388e05b6fee129966c5e9b0ae1e77f87f8466e8881aad33c1264cffa8fd8f438ac63a3089aaf61516f3311f433ce5ff#npm:8.13.0"],\ + ["@typescript-eslint/utils", "virtual:0d8d29e993a40889726b23e952b28e90ac686c08158232b7be7e9d5f0de6fccbc0cdec1c7705ccb6045d56b3b04e7b3745a6a0d2b84c3616f66730ece3255acc#npm:8.13.0"],\ ["eslint", "npm:8.54.0"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ @@ -8996,27 +8974,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["glob-promise", [\ - ["npm:4.2.2", {\ - "packageLocation": "../../../.yarn/berry/cache/glob-promise-npm-4.2.2-30777327f7-10c0.zip/node_modules/glob-promise/",\ - "packageDependencies": [\ - ["glob-promise", "npm:4.2.2"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:faa02851bd80500ce439c2c537b10b1dc388f1381cdd90892d057d16bb6ba2aa1c5df7e420b9acd9ed27df5c74237fa1659ad08d957a809ff3f20a4283da3b63#npm:4.2.2", {\ - "packageLocation": "./.yarn/__virtual__/glob-promise-virtual-32a4940a75/4/.yarn/berry/cache/glob-promise-npm-4.2.2-30777327f7-10c0.zip/node_modules/glob-promise/",\ - "packageDependencies": [\ - ["glob-promise", "virtual:faa02851bd80500ce439c2c537b10b1dc388f1381cdd90892d057d16bb6ba2aa1c5df7e420b9acd9ed27df5c74237fa1659ad08d957a809ff3f20a4283da3b63#npm:4.2.2"],\ - ["@types/glob", "npm:7.2.0"],\ - ["glob", "npm:7.2.3"]\ - ],\ - "packagePeers": [\ - "glob"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["globals", [\ ["npm:11.12.0", {\ "packageLocation": "../../../.yarn/berry/cache/globals-npm-11.12.0-1fa7f41a6c-10c0.zip/node_modules/globals/",\ @@ -10967,10 +10924,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:faa02851bd80500ce439c2c537b10b1dc388f1381cdd90892d057d16bb6ba2aa1c5df7e420b9acd9ed27df5c74237fa1659ad08d957a809ff3f20a4283da3b63#npm:2.2.2", {\ - "packageLocation": "./.yarn/__virtual__/react-docgen-typescript-virtual-79ec314f04/4/.yarn/berry/cache/react-docgen-typescript-npm-2.2.2-afb9698a32-10c0.zip/node_modules/react-docgen-typescript/",\ + ["virtual:d62e68294e7f9b419cfb8581b9643f91d3bc279cbc6e7546bf2d328ad15c227a9edf083447acf7a81a7df0dd254b6c112c583574911851c75b828747b447e0f9#npm:2.2.2", {\ + "packageLocation": "./.yarn/__virtual__/react-docgen-typescript-virtual-748811bb84/4/.yarn/berry/cache/react-docgen-typescript-npm-2.2.2-afb9698a32-10c0.zip/node_modules/react-docgen-typescript/",\ "packageDependencies": [\ - ["react-docgen-typescript", "virtual:faa02851bd80500ce439c2c537b10b1dc388f1381cdd90892d057d16bb6ba2aa1c5df7e420b9acd9ed27df5c74237fa1659ad08d957a809ff3f20a4283da3b63#npm:2.2.2"],\ + ["react-docgen-typescript", "virtual:d62e68294e7f9b419cfb8581b9643f91d3bc279cbc6e7546bf2d328ad15c227a9edf083447acf7a81a7df0dd254b6c112c583574911851c75b828747b447e0f9#npm:2.2.2"],\ ["@types/typescript", null],\ ["typescript", null]\ ],\ @@ -10996,14 +10953,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:18.2.0", {\ - "packageLocation": "./.yarn/__virtual__/react-dom-virtual-a0bc61b94a/4/.yarn/berry/cache/react-dom-npm-18.2.0-dd675bca1c-10c0.zip/node_modules/react-dom/",\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1", {\ + "packageLocation": "./.yarn/__virtual__/react-dom-virtual-85dd56c28d/4/.yarn/berry/cache/react-dom-npm-18.3.1-a805663f38-10c0.zip/node_modules/react-dom/",\ "packageDependencies": [\ - ["react-dom", "virtual:36f59012b9e3110a5f9b22eef931c423dec508b21049b108709eed620fc2a3043d6d27aa1fb8a331013a4466d0d86823994db77b87addd1e44a0fb0b6b568552#npm:18.2.0"],\ - ["@types/react", null],\ + ["react-dom", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1"],\ + ["@types/react", "npm:18.3.3"],\ ["loose-envify", "npm:1.4.0"],\ - ["react", "npm:18.2.0"],\ - ["scheduler", "npm:0.23.0"]\ + ["react", "npm:18.3.1"],\ + ["scheduler", "npm:0.23.2"]\ ],\ "packagePeers": [\ "@types/react",\ @@ -11011,14 +10968,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1", {\ - "packageLocation": "./.yarn/__virtual__/react-dom-virtual-85dd56c28d/4/.yarn/berry/cache/react-dom-npm-18.3.1-a805663f38-10c0.zip/node_modules/react-dom/",\ + ["virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:18.2.0", {\ + "packageLocation": "./.yarn/__virtual__/react-dom-virtual-a02a6b1599/4/.yarn/berry/cache/react-dom-npm-18.2.0-dd675bca1c-10c0.zip/node_modules/react-dom/",\ "packageDependencies": [\ - ["react-dom", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:18.3.1"],\ - ["@types/react", "npm:18.3.3"],\ + ["react-dom", "virtual:e96d0359be872779765ea7edb6892367205c145cc1ddc67912f48d23b775a74e65411c44f5715007457b857b68849d9dba17dfe74db579cb42fcb31c7e659d7f#npm:18.2.0"],\ + ["@types/react", null],\ ["loose-envify", "npm:1.4.0"],\ - ["react", "npm:18.3.1"],\ - ["scheduler", "npm:0.23.2"]\ + ["react", "npm:18.2.0"],\ + ["scheduler", "npm:0.23.0"]\ ],\ "packagePeers": [\ "@types/react",\ @@ -11773,18 +11730,18 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["storybook", [\ - ["npm:8.4.2", {\ - "packageLocation": "../../../.yarn/berry/cache/storybook-npm-8.4.2-cc4df569ff-10c0.zip/node_modules/storybook/",\ + ["npm:8.4.6", {\ + "packageLocation": "../../../.yarn/berry/cache/storybook-npm-8.4.6-b05a141f69-10c0.zip/node_modules/storybook/",\ "packageDependencies": [\ - ["storybook", "npm:8.4.2"]\ + ["storybook", "npm:8.4.6"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2", {\ - "packageLocation": "./.yarn/__virtual__/storybook-virtual-d38d8cdde5/4/.yarn/berry/cache/storybook-npm-8.4.2-cc4df569ff-10c0.zip/node_modules/storybook/",\ + ["virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6", {\ + "packageLocation": "./.yarn/__virtual__/storybook-virtual-f843247db9/4/.yarn/berry/cache/storybook-npm-8.4.6-b05a141f69-10c0.zip/node_modules/storybook/",\ "packageDependencies": [\ - ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.2"],\ - ["@storybook/core", "virtual:d38d8cdde572737efa1d73e536897b0c95a07cad3f28d469e449ca48ecf3e79feba852f7e4fd9f61d1c49f7c811ec3445a36c0b99acb53cf1595657afdff257c#npm:8.4.2"],\ + ["storybook", "virtual:74792effab46f58ba1849ed2d34bd613b5659d762979dea959819ade1937f6e3f71378429c07ee0ed12a2f529924b755998205bbacdbe5f616b371b307f52d67#npm:8.4.6"],\ + ["@storybook/core", "virtual:f843247db9afd0ef1f2c4331b7dcd79c2df2a37492b44618b26d51b4b13e1dd18f686db30666d488a9cffb7dd53c79cdda5614b65704a9e580ed511d292a9f10#npm:8.4.6"],\ ["@types/prettier", null],\ ["prettier", null]\ ],\ @@ -12093,10 +12050,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:a7853a294cb56695575d556832755aa7b4e3d8a33e19394623f7718e588e821eec841f425955375f97941577777b7db399199b3007ce11899b4f8a72ba63116e#npm:1.4.0", {\ - "packageLocation": "./.yarn/__virtual__/ts-api-utils-virtual-50820b8d1f/4/.yarn/berry/cache/ts-api-utils-npm-1.4.0-b091964d6e-10c0.zip/node_modules/ts-api-utils/",\ + ["virtual:019785b57463e339d3430452f3dc91a9fab51fecefe0e94f18b6f503a7f67c2f29947b42a4ea8628f5fef6519bb0ed989ed036df34f6a151e671180040789781#npm:1.4.0", {\ + "packageLocation": "./.yarn/__virtual__/ts-api-utils-virtual-bb9b8f7bad/4/.yarn/berry/cache/ts-api-utils-npm-1.4.0-b091964d6e-10c0.zip/node_modules/ts-api-utils/",\ "packageDependencies": [\ - ["ts-api-utils", "virtual:a7853a294cb56695575d556832755aa7b4e3d8a33e19394623f7718e588e821eec841f425955375f97941577777b7db399199b3007ce11899b4f8a72ba63116e#npm:1.4.0"],\ + ["ts-api-utils", "virtual:019785b57463e339d3430452f3dc91a9fab51fecefe0e94f18b6f503a7f67c2f29947b42a4ea8628f5fef6519bb0ed989ed036df34f6a151e671180040789781#npm:1.4.0"],\ ["@types/typescript", null],\ ["typescript", null]\ ],\ @@ -12896,10 +12853,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:886b5b98a21c583e0788482b5fe2582a4c05ca2c2092273521029a1673d8eebba4f8c4bb7cc4eefa14fca9f8d259966acdf4f5c14a6bf668781c02a672bdbcf5#npm:8.17.1", {\ - "packageLocation": "./.yarn/__virtual__/ws-virtual-c2d98ce10b/4/.yarn/berry/cache/ws-npm-8.17.1-f57fb24a2c-10c0.zip/node_modules/ws/",\ + ["virtual:85b85f68406b7e920d37bc25079b96add8f18473ddebbcba00a31699430bd46d663bc0e24ef910e129e96b7ee5e2ff9d1d0e21ae9de175c80eb6668e1a81b9bf#npm:8.17.1", {\ + "packageLocation": "./.yarn/__virtual__/ws-virtual-82586ec101/4/.yarn/berry/cache/ws-npm-8.17.1-f57fb24a2c-10c0.zip/node_modules/ws/",\ "packageDependencies": [\ - ["ws", "virtual:886b5b98a21c583e0788482b5fe2582a4c05ca2c2092273521029a1673d8eebba4f8c4bb7cc4eefa14fca9f8d259966acdf4f5c14a6bf668781c02a672bdbcf5#npm:8.17.1"],\ + ["ws", "virtual:85b85f68406b7e920d37bc25079b96add8f18473ddebbcba00a31699430bd46d663bc0e24ef910e129e96b7ee5e2ff9d1d0e21ae9de175c80eb6668e1a81b9bf#npm:8.17.1"],\ ["@types/bufferutil", null],\ ["@types/utf-8-validate", null],\ ["bufferutil", null],\ diff --git a/frontend/package.json b/frontend/package.json index 6dff1e633..ead449e27 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -36,7 +36,7 @@ "storybook": "storybook dev -p 6006 --no-open", "storybook:build": "storybook build", "lint": "eslint src/**/*.{js,jsx,ts,tsx}", - "lint:fix": "eslint --fix src/**/*.js", + "lint:fix": "eslint --fix src/**/*.{js,jsx,ts,tsx}", "build-storybook": "storybook build" }, "eslintConfig": { @@ -71,14 +71,14 @@ }, "devDependencies": { "@chromatic-com/storybook": "^3.2.2", - "@storybook/addon-essentials": "^8.4.2", - "@storybook/addon-interactions": "^8.4.2", - "@storybook/addon-links": "^8.4.2", - "@storybook/addon-onboarding": "^8.4.2", - "@storybook/blocks": "^8.4.2", - "@storybook/react": "^8.4.2", - "@storybook/react-vite": "^8.4.2", - "@storybook/test": "^8.4.2", + "@storybook/addon-essentials": "^8.4.6", + "@storybook/addon-interactions": "^8.4.6", + "@storybook/addon-links": "^8.4.6", + "@storybook/addon-onboarding": "^8.4.6", + "@storybook/blocks": "^8.4.6", + "@storybook/react": "^8.4.6", + "@storybook/react-vite": "^8.4.6", + "@storybook/test": "^8.4.6", "@testing-library/dom": "^10.2.0", "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.1", @@ -93,11 +93,11 @@ "eslint": "^8.54.0", "eslint-config-react-app": "^7.0.1", "eslint-plugin-chai-friendly": "^0.7.2", - "eslint-plugin-storybook": "^0.11.0", + "eslint-plugin-storybook": "^0.11.1", "happy-dom": "^15.10.2", "history": "^5.3.0", "prop-types": "15.8.1", - "storybook": "^8.4.2", + "storybook": "^8.4.6", "vitest": "^2.1.4" } } diff --git a/frontend/src/API.ts b/frontend/src/API.ts index 05eb160e3..e6a88ee28 100644 --- a/frontend/src/API.ts +++ b/frontend/src/API.ts @@ -7,6 +7,7 @@ import IExperiment from "@/types/Experiment"; import Participant, { ParticipantLink } from "./types/Participant"; import Session from "./types/Session"; import Experiment from "@/types/Experiment"; +import { RoundResponse } from "./types/Round"; // API handles the calls to the Hooked-server api @@ -173,7 +174,7 @@ interface GetNextRoundParams { // Get next_round from server -export const getNextRound = async ({ session }: GetNextRoundParams) => { +export const getNextRound = async ({ session }: GetNextRoundParams): Promise => { const sessionId = session.id.toString(); diff --git a/frontend/src/components/AppBar/AppBar.test.tsx b/frontend/src/components/AppBar/AppBar.test.tsx index 4b4e71ce8..7b96355d1 100644 --- a/frontend/src/components/AppBar/AppBar.test.tsx +++ b/frontend/src/components/AppBar/AppBar.test.tsx @@ -1,4 +1,4 @@ -import { render, fireEvent } from '@testing-library/react'; +import { render } from '@testing-library/react'; import AppBar from './AppBar'; import { BrowserRouter as Router } from 'react-router-dom'; import { vi, describe, beforeEach, it, expect } from 'vitest'; diff --git a/frontend/src/components/Block/Block.test.tsx b/frontend/src/components/Block/Block.test.tsx index 7f5a2081a..b36d2e501 100644 --- a/frontend/src/components/Block/Block.test.tsx +++ b/frontend/src/components/Block/Block.test.tsx @@ -42,7 +42,7 @@ vi.mock('../../API', () => ({ vi.mock('../../util/stores', () => ({ __esModule: true, - default: (fn) => { + default: (fn: any) => { const state = { session: mockSessionStore, participant: mockParticipantStore, @@ -51,6 +51,7 @@ vi.mock('../../util/stores', () => ({ setHeadData: vi.fn(), resetHeadData: vi.fn(), setBlock: vi.fn(), + setCurrentAction: vi.fn(), }; return fn(state); diff --git a/frontend/src/components/Block/Block.tsx b/frontend/src/components/Block/Block.tsx index 5707ffb38..43dea159b 100644 --- a/frontend/src/components/Block/Block.tsx +++ b/frontend/src/components/Block/Block.tsx @@ -6,37 +6,20 @@ import classNames from "classnames"; import useBoundStore from "@/util/stores"; import { getNextRound, useBlock } from "@/API"; import DefaultPage from "@/components/Page/DefaultPage"; -import Explainer, { ExplainerProps } from "@/components/Explainer/Explainer"; -import Final, { FinalProps } from "@/components/Final/Final"; -import Loading, { LoadingProps } from "@/components/Loading/Loading"; -import Playlist, { PlaylistProps } from "@/components/Playlist/Playlist"; -import Score, { ScoreProps } from "@/components/Score/Score"; -import Trial, { TrialProps } from "@/components/Trial/Trial"; -import Info, { InfoProps } from "@/components/Info/Info"; +import Explainer from "@/components/Explainer/Explainer"; +import Final from "@/components/Final/Final"; +import Loading from "@/components/Loading/Loading"; +import Playlist from "@/components/Playlist/Playlist"; +import Score from "@/components/Score/Score"; +import Trial from "@/components/Trial/Trial"; +import Info from "@/components/Info/Info"; import FloatingActionButton from "@/components/FloatingActionButton/FloatingActionButton"; import UserFeedback from "@/components/UserFeedback/UserFeedback"; import FontLoader from "@/components/FontLoader/FontLoader"; import useResultHandler from "@/hooks/useResultHandler"; import Session from "@/types/Session"; -import { RedirectProps } from "../Redirect/Redirect"; - -interface SharedActionProps { - title?: string; - config?: object; - style?: object; -} - -type ActionProps = SharedActionProps & - ( - | { view: "EXPLAINER" } & ExplainerProps - | { view: "INFO" } & InfoProps - | { view: "TRIAL_VIEW" } & TrialProps - | { view: 'SCORE' } & ScoreProps - | { view: 'FINAL' } & FinalProps - | { view: 'PLAYLIST' } & PlaylistProps - | { view: 'REDIRECT' } & RedirectProps - | { view: "LOADING" } & LoadingProps - ) +import { Action } from "@/types/Action"; +import { Round } from "@/types/Round"; // Block handles the main (experiment) block flow: // - Loads the block and participant @@ -46,7 +29,7 @@ type ActionProps = SharedActionProps & // Empty URL parameter "participant_id" is the same as no URL parameter at all const Block = () => { const { slug } = useParams(); - const startState = { view: "LOADING" } as ActionProps; + const startState = { view: "LOADING" } as Action; // Stores const setError = useBoundStore(state => state.setError); const participant = useBoundStore((state) => state.participant); @@ -56,36 +39,39 @@ const Block = () => { const setTheme = useBoundStore((state) => state.setTheme); const resetTheme = useBoundStore((state) => state.resetTheme); const setBlock = useBoundStore((state) => state.setBlock); + const setCurrentAction = useBoundStore((state) => state.setCurrentAction); const setHeadData = useBoundStore((state) => state.setHeadData); const resetHeadData = useBoundStore((state) => state.resetHeadData); // Current block state - const [actions, setActions] = useState([]); - const [state, setState] = useState(startState); + const [actions, setActions] = useState([]); + const [state, setState] = useState(startState); const [key, setKey] = useState(Math.random()); const playlist = useRef(null); // API hooks - const [block, loadingBlock] = useBlock(slug); + const [block, loadingBlock] = useBlock(slug!); const loadingText = block ? block.loading_text : ""; const className = block ? block.class_name : ""; /** Set new state as spread of current state to force re-render */ - const updateState = useCallback((state: ActionProps) => { + const updateState = useCallback((state: Action) => { if (!state) return; setState({ ...state }); setKey(Math.random()); }, []); - const updateActions = useCallback((currentActions: []) => { + const updateActions = useCallback((currentActions: Round) => { const newActions = currentActions; setActions(newActions); const newState = newActions.shift(); + const currentAction = newState ? newState : null; + setCurrentAction({ ...currentAction }); updateState(newState); - }, [updateState]); + }, [updateState, setCurrentAction]); const continueToNextRound = async (activeSession: Session) => { // Try to get next_round data from server @@ -98,6 +84,7 @@ const Block = () => { setError( "An error occured while loading the data, please try to reload the page. (Error: next_round data unavailable)" ); + setCurrentAction(null); setState(null); } }; diff --git a/frontend/src/components/Experiment/Header/Header.tsx b/frontend/src/components/Experiment/Header/Header.tsx index 2e6be4dae..afbd7d51c 100644 --- a/frontend/src/components/Experiment/Header/Header.tsx +++ b/frontend/src/components/Experiment/Header/Header.tsx @@ -30,9 +30,6 @@ export const Header: React.FC = ({ socialMediaConfig }) => { - // Get current URL minus the query string - const currentUrl = window.location.href.split('?')[0]; - return (
diff --git a/frontend/src/components/Explainer/Explainer.tsx b/frontend/src/components/Explainer/Explainer.tsx index d5fc42245..b5ca016c4 100644 --- a/frontend/src/components/Explainer/Explainer.tsx +++ b/frontend/src/components/Explainer/Explainer.tsx @@ -1,16 +1,8 @@ import { useEffect } from "react"; import Button from "../Button/Button"; +import { Explainer as ExplainerAction } from "@/types/Action"; -interface ExplainerStep { - number: number; - description: string; -} - -export interface ExplainerProps { - instruction: string; - button_label: string; - steps?: Array; - timer: number | null; +export interface ExplainerProps extends ExplainerAction { onNext: () => void; } diff --git a/frontend/src/components/Final/Final.tsx b/frontend/src/components/Final/Final.tsx index 25d94d738..324a6fb23 100644 --- a/frontend/src/components/Final/Final.tsx +++ b/frontend/src/components/Final/Final.tsx @@ -10,39 +10,10 @@ import useBoundStore from "../../util/stores"; import ParticipantLink from "../ParticipantLink/ParticipantLink"; import UserFeedback from "../UserFeedback/UserFeedback"; import FinalButton from "./FinalButton"; -import ISocial from "@/types/Social"; -import Block, { FeedbackInfo } from "@/types/Block"; -import Participant from "@/types/Participant"; +import { Final as FinalAction } from "@/types/Action"; -export interface FinalProps { - block: Block; - participant: Participant; - score: number; - final_text: string | TrustedHTML; - action_texts: { - all_experiments: string; - profile: string; - play_again: string; - } - button: { - text: string; - link: string; - }; +export interface FinalProps extends FinalAction { onNext: () => void; - show_participant_link: boolean; - participant_id_only: boolean; - show_profile_link: boolean; - social: ISocial; - feedback_info?: FeedbackInfo; - points: string; - rank: { - class: string; - text: string; - } - logo: { - image: string; - link: string; - }; } /** diff --git a/frontend/src/components/Histogram/Histogram.test.tsx b/frontend/src/components/Histogram/Histogram.test.tsx index 7ccd40456..9912326db 100644 --- a/frontend/src/components/Histogram/Histogram.test.tsx +++ b/frontend/src/components/Histogram/Histogram.test.tsx @@ -1,5 +1,5 @@ -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; -import { render, act, waitFor } from '@testing-library/react'; +import { describe, it, expect, vi, beforeEach, afterEach, Mock, } from 'vitest'; +import { render, act } from '@testing-library/react'; import Histogram from './Histogram'; // Mock requestAnimationFrame and cancelAnimationFrame @@ -14,9 +14,21 @@ vi.stubGlobal('cancelAnimationFrame', (handle: number): void => { // Mock setInterval and clearInterval vi.useFakeTimers(); +vi.mock('../../util/stores', () => ({ + __esModule: true, + default: (fn: any) => { + const state = { + currentAction: { playback: { play_method: 'BUFFER' } }, + }; + + return fn(state); + }, + useBoundStore: vi.fn() +})); + describe('Histogram', () => { let mockAnalyser: { - getByteFrequencyData: vi.Mock; + getByteFrequencyData: Mock }; beforeEach(() => { @@ -154,11 +166,8 @@ describe('Histogram', () => { it('updates bar heights based on random data when random is true and running is true', async () => { const bars = 5; - // Ensure the analyser does not provide data - mockAnalyser.getByteFrequencyData.mockImplementation(() => { }); - const { container, rerender } = render( - + ); const getHeights = () => @@ -168,9 +177,9 @@ describe('Histogram', () => { const initialHeights = getHeights(); - // Advance timers and trigger animation frame + // Advance timers by at least one interval await act(async () => { - vi.advanceTimersByTime(100); + vi.advanceTimersByTime(200); }); rerender(); @@ -178,7 +187,6 @@ describe('Histogram', () => { const updatedHeights = getHeights(); expect(initialHeights).not.to.deep.equal(updatedHeights); - expect(mockAnalyser.getByteFrequencyData).not.toHaveBeenCalled(); }); it('does not call getByteFrequencyData when random is true', async () => { @@ -225,6 +233,7 @@ describe('Histogram', () => { it('updates bar heights based on frequency data using requestAnimationFrame', async () => { const bars = 5; + mockAnalyser.getByteFrequencyData.mockImplementation((array) => { for (let i = 0; i < array.length; i++) { array[i] = Math.floor(Math.random() * 256); diff --git a/frontend/src/components/Histogram/Histogram.tsx b/frontend/src/components/Histogram/Histogram.tsx index e3055199a..519180887 100644 --- a/frontend/src/components/Histogram/Histogram.tsx +++ b/frontend/src/components/Histogram/Histogram.tsx @@ -1,5 +1,6 @@ import React, { useEffect, useRef, useState } from 'react'; import classNames from 'classnames'; +import useBoundStore from '@/util/stores'; interface HistogramProps { bars?: number; @@ -27,10 +28,15 @@ const Histogram: React.FC = ({ backgroundColor = undefined, borderRadius = '0.15rem', random = false, - interval = 100, + interval = 200, }) => { const [frequencyData, setFrequencyData] = useState(new Uint8Array(bars)); + const currentAction = useBoundStore((state) => state.currentAction); + const isBuffer = currentAction?.playback?.play_method === 'BUFFER'; + + const shouldRandomize = random || !isBuffer; + const animationFrameRef = useRef(); const intervalRef = useRef(); @@ -50,7 +56,7 @@ const Histogram: React.FC = ({ const updateFrequencyData = () => { let dataWithoutExtremes: Uint8Array; - if (random) { + if (shouldRandomize) { // Generate random frequency data dataWithoutExtremes = new Uint8Array(bars); for (let i = 0; i < bars; i++) { @@ -71,14 +77,14 @@ const Histogram: React.FC = ({ } }; - if (random) { - // Use setInterval when random is true + if (shouldRandomize) { + // Use setInterval when shouldRandomize is true if (intervalRef.current) { clearInterval(intervalRef.current); } intervalRef.current = window.setInterval(updateFrequencyData, interval); } else { - // Use requestAnimationFrame when random is false + // Use requestAnimationFrame when shouldRandomize is false if (animationFrameRef.current) { cancelAnimationFrame(animationFrameRef.current); } @@ -93,7 +99,7 @@ const Histogram: React.FC = ({ clearInterval(intervalRef.current); } }; - }, [running, bars, random, interval]); + }, [running, bars, shouldRandomize, interval]); const barWidth = `calc((100% - ${(bars - 1) * spacing}px) / ${bars})`; @@ -120,7 +126,7 @@ const Histogram: React.FC = ({ height: `${(frequencyData[index] / 255) * 100}%`, backgroundColor: 'currentColor', marginRight: index < bars - 1 ? spacing : 0, - transition: random + transition: shouldRandomize ? `height ${interval / 1000}s ease` : 'height 0.05s ease', }} diff --git a/frontend/src/components/Info/Info.tsx b/frontend/src/components/Info/Info.tsx index f9f682f54..b187b96dc 100644 --- a/frontend/src/components/Info/Info.tsx +++ b/frontend/src/components/Info/Info.tsx @@ -1,12 +1,9 @@ import { useEffect, useState } from "react"; import Button from "../Button/Button"; +import { Info as InfoAction } from "@/types/Action"; -export interface InfoProps { - heading?: string; - body: string | TrustedHTML; - button_label?: string; - button_link?: string; +export interface InfoProps extends InfoAction { onNext?: () => void; } diff --git a/frontend/src/components/ListenCircle/ListenCircle.tsx b/frontend/src/components/ListenCircle/ListenCircle.tsx index b3af4cc3e..e2d098030 100644 --- a/frontend/src/components/ListenCircle/ListenCircle.tsx +++ b/frontend/src/components/ListenCircle/ListenCircle.tsx @@ -16,15 +16,7 @@ const ListenCircle = ({ <>
- +
); diff --git a/frontend/src/components/MatchingPairs/MatchingPairs.test.tsx b/frontend/src/components/MatchingPairs/MatchingPairs.test.tsx index 181d4d035..115a96d7c 100644 --- a/frontend/src/components/MatchingPairs/MatchingPairs.test.tsx +++ b/frontend/src/components/MatchingPairs/MatchingPairs.test.tsx @@ -10,17 +10,18 @@ import MatchingPairs, { SCORE_FEEDBACK_DISPLAY } from './MatchingPairs'; let mock: MockAdapter; vi.mock("@/components/PlayButton/PlayCard", () => ({ - default: props =>
+ default: (props: any) =>
})); vi.mock("../../util/stores", () => ({ __esModule: true, - default: (fn) => { + default: (fn: any) => { const state = { participant: 1, session: 1, setError: vi.fn(), - block: { bonus_points: 42 } + block: { bonus_points: 42 }, + currentAction: () => ({ view: 'TRIAL_VIEW' }), }; return fn(state); }, diff --git a/frontend/src/components/Playlist/Playlist.tsx b/frontend/src/components/Playlist/Playlist.tsx index f6161bf2d..089bef978 100644 --- a/frontend/src/components/Playlist/Playlist.tsx +++ b/frontend/src/components/Playlist/Playlist.tsx @@ -1,11 +1,10 @@ +import { Playlist as PlaylistAction } from "@/types/Action"; import Block from "@/types/Block"; -import { MutableRefObject, useEffect } from "react"; +import { useEffect } from "react"; -export interface PlaylistProps { +export interface PlaylistProps extends PlaylistAction { block: Block; - instruction: string; onNext: () => void; - playlist: MutableRefObject; } /** diff --git a/frontend/src/components/Score/Score.tsx b/frontend/src/components/Score/Score.tsx index 49467b0ad..191e1fe0a 100644 --- a/frontend/src/components/Score/Score.tsx +++ b/frontend/src/components/Score/Score.tsx @@ -2,20 +2,9 @@ import { useState, useEffect, useRef } from "react"; import classNames from "classnames"; import Circle from "../Circle/Circle"; import Button from "../Button/Button"; +import { Score as ScoreAction } from "@/types/Action"; -export interface ScoreProps { - last_song?: string; - score: number; - score_message: string; - total_score?: number; - texts: { - score: string; - next: string; - listen_explainer: string; - }; - icon?: string; - feedback?: string; - timer?: number; +export interface ScoreProps extends ScoreAction { onNext: () => void; } diff --git a/frontend/src/components/Trial/Trial.test.tsx b/frontend/src/components/Trial/Trial.test.tsx index fe3efa9c3..29c8c8110 100644 --- a/frontend/src/components/Trial/Trial.test.tsx +++ b/frontend/src/components/Trial/Trial.test.tsx @@ -43,7 +43,6 @@ const defaultConfig = { describe('Trial', () => { const mockOnNext = vi.fn(); const mockOnResult = vi.fn(); - const mockMakeResult = vi.fn(); beforeEach(() => { vi.clearAllMocks(); diff --git a/frontend/src/components/Trial/Trial.tsx b/frontend/src/components/Trial/Trial.tsx index 76e19a7d5..48db9b826 100644 --- a/frontend/src/components/Trial/Trial.tsx +++ b/frontend/src/components/Trial/Trial.tsx @@ -6,23 +6,11 @@ import FeedbackForm from "../FeedbackForm/FeedbackForm"; import HTML from "../HTML/HTML"; import Playback from "../Playback/Playback"; import Button from "../Button/Button"; -import Question from "@/types/Question"; import { OnResultType } from "@/hooks/useResultHandler"; import { TrialConfig } from "@/types/Trial"; -import { PlaybackArgs } from "@/types/Playback"; +import { Trial as TrialAction } from "@/types/Action"; -export interface IFeedbackForm { - form: Question[]; - submit_label: string; - skip_label: string; - is_skippable: boolean; -} - -export interface TrialProps { - playback: PlaybackArgs; - html: { body: string | TrustedHTML }; - feedback_form: IFeedbackForm; - config: TrialConfig; +export interface TrialProps extends TrialAction { onNext: (breakRound?: boolean) => void; onResult: OnResultType; } diff --git a/frontend/src/stories/Histogram.stories.tsx b/frontend/src/stories/Histogram.stories.tsx index cc9e2b767..906be212e 100644 --- a/frontend/src/stories/Histogram.stories.tsx +++ b/frontend/src/stories/Histogram.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta } from '@storybook/react'; +import type { Meta, StoryFn } from '@storybook/react'; import Histogram from "../components/Histogram/Histogram"; const meta: Meta = { @@ -22,7 +22,7 @@ export const Default = { borderRadius: "0.15rem", }, decorators: [ - (Story) => ( + (Story: any) => (
( + (Story: StoryFn) => (
(Story: StoryFn) => { + const [initialized, setInitialized] = useState(false); + + const setCurrentAction = useBoundStore((state) => state.setCurrentAction); + setCurrentAction({ + view: "TRIAL_VIEW", + playback: { view: AUTOPLAY, - play_method: "BUFFER", + play_method, show_animation: true, preload_message: "Loading audio...", instruction: "Click the button to play the audio.", - sections: [ - { - id: 0, - url: audio, - } - ], + sections: [{ id: 0, url: audio }], play_from: 0.0, resume_play: false, - }, - onPreloadReady: () => { }, - autoAdvance: false, - responseTime: 10, - submitResult: () => { }, - finishedPlaying: () => { }, - } as PlaybackProps, - decorators: [ - (Story) => { + } + }); - const [initialized, setInitialized] = useState(false); + if (!initialized) { + return ( + <> + + + ); + } + return ( +
+ +
+ ); +}; - if (!initialized) { - return ( - <> - - - ) +// Create playback arguments dynamically +const createPlaybackArgs = (play_method: "BUFFER" | "EXTERNAL"): PlaybackProps => ({ + playbackArgs: { + view: AUTOPLAY, + play_method, + show_animation: true, + preload_message: "Loading audio...", + instruction: "Click the button to play the audio.", + sections: [ + { + id: 0, + url: audio, } + ], + play_from: 0.0, + resume_play: false, + }, + onPreloadReady: () => { }, + autoAdvance: false, + responseTime: 10, + submitResult: () => { }, + finishedPlaying: () => { }, +}); - return ( -
- -
- ) - } - ], +export const PlaybackAutoplayBuffer = { + args: createPlaybackArgs("BUFFER"), + decorators: [createCommonDecorator("BUFFER")], +}; + +export const PlaybackAutoplayExternal = { + args: createPlaybackArgs("EXTERNAL"), + decorators: [createCommonDecorator("EXTERNAL")], }; diff --git a/frontend/src/types/Action.ts b/frontend/src/types/Action.ts new file mode 100644 index 000000000..1d937353f --- /dev/null +++ b/frontend/src/types/Action.ts @@ -0,0 +1,119 @@ +import Social from "@/types/Social"; +import Block, { FeedbackInfo } from "@/types/Block"; +import Participant from "@/types/Participant"; +import { PlaybackArgs } from "./Playback"; +import Question from "./Question"; +import { TrialConfig } from "./Trial"; +import { MutableRefObject } from "react"; + +interface SharedActionProps { + title?: string; + config?: object; + style?: object; +} + +interface ExplainerStep { + number: number; + description: string; +} + +export interface Explainer { + instruction: string; + button_label: string; + steps?: Array; + timer: number | null; +} + +export interface Info { + heading?: string; + body: string | TrustedHTML; + button_label?: string; + button_link?: string; +} + +export interface IFeedbackForm { + form: Question[]; + submit_label: string; + skip_label: string; + is_skippable: boolean; +} + +export interface Trial { + playback: PlaybackArgs; + html: { body: string | TrustedHTML }; + feedback_form: IFeedbackForm; + config: TrialConfig; +} + +export interface Score { + last_song?: string; + score: number; + score_message: string; + total_score?: number; + texts: { + score: string; + next: string; + listen_explainer: string; + }; + icon?: string; + feedback?: string; + timer?: number; +} + +export interface Final { + block: Block; + participant: Participant; + score: number; + final_text: string | TrustedHTML; + action_texts: { + all_experiments: string; + profile: string; + play_again: string; + } + button: { + text: string; + link: string; + }; + show_participant_link: boolean; + participant_id_only: boolean; + show_profile_link: boolean; + social: Social; + feedback_info?: FeedbackInfo; + points: string; + rank: { + class: string; + text: string; + } + logo: { + image: string; + link: string; + }; +} + +export interface Playlist { + instruction: string; + playlist: MutableRefObject; +} + +export interface Redirect { + url: string; +} + +export interface Loading { + duration?: number; + loadingText?: string; +} + +export type Action = SharedActionProps & + ( + | { view: "EXPLAINER" } & Explainer + | { view: "INFO" } & Info + | { view: "TRIAL_VIEW" } & Trial + | { view: 'SCORE' } & Score + | { view: 'FINAL' } & Final + | { view: 'PLAYLIST' } & Playlist + | { view: 'REDIRECT' } & Redirect + | { view: "LOADING" } & Loading + ) + +export default Action; diff --git a/frontend/src/types/Round.ts b/frontend/src/types/Round.ts new file mode 100644 index 000000000..fc5e3676f --- /dev/null +++ b/frontend/src/types/Round.ts @@ -0,0 +1,7 @@ +import { Action } from "./Action"; + +export type Round = Action[]; + +export interface RoundResponse { + next_round: Round; +} diff --git a/frontend/src/util/stores.ts b/frontend/src/util/stores.ts index aa4258b6b..4289ef2e6 100644 --- a/frontend/src/util/stores.ts +++ b/frontend/src/util/stores.ts @@ -5,6 +5,7 @@ import IParticipant from "@/types/Participant"; import ISession from "@/types/Session"; import ITheme from "@/types/Theme"; import IBlock from "@/types/Block"; +import { Action } from '@/types/Action'; interface BlockSlice { block?: IBlock; @@ -96,6 +97,16 @@ const createParticipantSlice: StateCreator = (set) => ({ setParticipantLoading: (participantLoading: boolean) => set(() => ({ participantLoading })) }); +interface ActionSlice { + currentAction: Action | null; + setCurrentAction: (action: Action) => void; +} + +const createActionSlice: StateCreator = (set) => ({ + setCurrentAction: (action: Action) => set(() => ({ currentAction: action })), + currentAction: null, +}); + interface SessionSlice { session: ISession | null; setSession: (session: ISession) => void; @@ -118,11 +129,12 @@ const createThemeSlice: StateCreator = (set) => ({ resetTheme: () => set(() => ({ theme: null })), }); -export const useBoundStore = create((...args) => ({ +export const useBoundStore = create((...args) => ({ ...createBlockSlice(...args), ...createDocumentHeadSlice(...args), ...createErrorSlice(...args), ...createParticipantSlice(...args), + ...createActionSlice(...args), ...createSessionSlice(...args), ...createThemeSlice(...args), })); diff --git a/frontend/src/util/webAudio.ts b/frontend/src/util/webAudio.ts index 02d519ae7..59cd68478 100644 --- a/frontend/src/util/webAudio.ts +++ b/frontend/src/util/webAudio.ts @@ -4,7 +4,6 @@ let track: MediaElementAudioSourceNode; let source: AudioBufferSourceNode; let buffers: { [key: string]: AudioBuffer } = {}; let audioContext: AudioContext; -let previousSource: string; let analyzer: AnalyserNode; export let audioInitialized = false; @@ -97,7 +96,6 @@ export const loadBuffer = async (id: number, src: string, canPlay: () => void) = // store buffer in buffers object .then(decodedData => { buffers[id] = decodedData; - previousSource = src; canPlay(); }); }; diff --git a/frontend/vitest.config.ts b/frontend/vitest.config.ts index e218d6f7a..27de7b68d 100644 --- a/frontend/vitest.config.ts +++ b/frontend/vitest.config.ts @@ -7,6 +7,7 @@ export default defineConfig({ include: ['**/*.test.js', '**/*.test.jsx', '**/*.test.ts', '**/*.test.tsx'], globals: true, environment: 'happy-dom', + allowOnly: true, coverage: { reportsDirectory: 'public/coverage', provider: 'v8', diff --git a/frontend/yarn.lock b/frontend/yarn.lock index f4ca5648d..bf5b4dc7d 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -2716,21 +2716,19 @@ __metadata: languageName: node linkType: hard -"@joshwooding/vite-plugin-react-docgen-typescript@npm:0.3.0": - version: 0.3.0 - resolution: "@joshwooding/vite-plugin-react-docgen-typescript@npm:0.3.0" +"@joshwooding/vite-plugin-react-docgen-typescript@npm:0.4.2": + version: 0.4.2 + resolution: "@joshwooding/vite-plugin-react-docgen-typescript@npm:0.4.2" dependencies: - glob: "npm:^7.2.0" - glob-promise: "npm:^4.2.0" magic-string: "npm:^0.27.0" react-docgen-typescript: "npm:^2.2.2" peerDependencies: typescript: ">= 4.3.x" - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/31098ad8fcc2440437534599c111d9f2951dd74821e8ba46c521b969bae4c918d830b7bb0484efbad29a51711bb62d3bc623d5a1ed5b1695b5b5594ea9dd4ca0 + checksum: 10c0/355d13ad92a9da786b561a25250e6c94a8e51d235ced345e54ebfe709abc45ab60c2a8d06599df6ec0441fba01720f189883429943cb62dff9a4c31b59f0939c languageName: node linkType: hard @@ -3116,9 +3114,9 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-actions@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-actions@npm:8.4.2" +"@storybook/addon-actions@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-actions@npm:8.4.6" dependencies: "@storybook/global": "npm:^5.0.0" "@types/uuid": "npm:^9.0.1" @@ -3126,175 +3124,175 @@ __metadata: polished: "npm:^4.2.2" uuid: "npm:^9.0.0" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/ac89e6e0517efa2f8d6442f8fc0b1c3912bfc1ad50e03cccd06721d3bb52d11f472126a590c746cd565875d8ac11c63457de94e7c1ff6a3f8151b3c6488802d6 + storybook: ^8.4.6 + checksum: 10c0/80b2feceacb4ebe7f2be06b2fe3f49ded5ee08ca8bd036ff47a65d45d8796d29081ccadd0526984c8022bcfa24348e0ad4ce3f37cee4a60a928bae372bfc8afe languageName: node linkType: hard -"@storybook/addon-backgrounds@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-backgrounds@npm:8.4.2" +"@storybook/addon-backgrounds@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-backgrounds@npm:8.4.6" dependencies: "@storybook/global": "npm:^5.0.0" memoizerific: "npm:^1.11.3" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/8fac73fafe7974c1710b0565e0fab56b9a3ee35190a06b63e9ae996c5f5a0d214ec755f7e88de8fb8d7493eb022ad820952dffbfc417f2949c07750faea18e46 + storybook: ^8.4.6 + checksum: 10c0/2125d6905bf44194adf79e92698753d5e4ff75fac1ffbba1fc95ae705ba9ac8dc6ca9249c9a862aa05ea207d916d23142faefa759bb9ce21c6e16f0e329d28d2 languageName: node linkType: hard -"@storybook/addon-controls@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-controls@npm:8.4.2" +"@storybook/addon-controls@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-controls@npm:8.4.6" dependencies: "@storybook/global": "npm:^5.0.0" dequal: "npm:^2.0.2" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/8de00a60c34de7972efc3c882912c1b135d4867045783742515741380750a58f4ce0e98139328804adcf1c2926110ca88e2df1135c3b1b03a05b20c97494ef7a + storybook: ^8.4.6 + checksum: 10c0/f5f0ab2de8de80c8c3726de81802042cc29a6f2ec50de3b8bd463286c9056e87800e4ea9b350c6a41ce4c4175a11cb7d3d490da5cfc20bbf2a2e3549f77a82a7 languageName: node linkType: hard -"@storybook/addon-docs@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-docs@npm:8.4.2" +"@storybook/addon-docs@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-docs@npm:8.4.6" dependencies: "@mdx-js/react": "npm:^3.0.0" - "@storybook/blocks": "npm:8.4.2" - "@storybook/csf-plugin": "npm:8.4.2" - "@storybook/react-dom-shim": "npm:8.4.2" + "@storybook/blocks": "npm:8.4.6" + "@storybook/csf-plugin": "npm:8.4.6" + "@storybook/react-dom-shim": "npm:8.4.6" react: "npm:^16.8.0 || ^17.0.0 || ^18.0.0" react-dom: "npm:^16.8.0 || ^17.0.0 || ^18.0.0" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/ba8046898006b7e0c088ee26e378eff7e9aa315eb0c7ddf6b6d15ad6eea0d544d39674868b2b5ef5c89e64e1dee5501ceceaf2a3854636e88b99f5eaafe4b239 + storybook: ^8.4.6 + checksum: 10c0/ae53bf71048fe7476862ae733f0f765a22d0d1da32457f7ca7e3bdd23bb1cd452c56bc4e1f586cf978599c3f5acb835caeb569ff394eaec09d3259382f4954be languageName: node linkType: hard -"@storybook/addon-essentials@npm:^8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-essentials@npm:8.4.2" - dependencies: - "@storybook/addon-actions": "npm:8.4.2" - "@storybook/addon-backgrounds": "npm:8.4.2" - "@storybook/addon-controls": "npm:8.4.2" - "@storybook/addon-docs": "npm:8.4.2" - "@storybook/addon-highlight": "npm:8.4.2" - "@storybook/addon-measure": "npm:8.4.2" - "@storybook/addon-outline": "npm:8.4.2" - "@storybook/addon-toolbars": "npm:8.4.2" - "@storybook/addon-viewport": "npm:8.4.2" +"@storybook/addon-essentials@npm:^8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-essentials@npm:8.4.6" + dependencies: + "@storybook/addon-actions": "npm:8.4.6" + "@storybook/addon-backgrounds": "npm:8.4.6" + "@storybook/addon-controls": "npm:8.4.6" + "@storybook/addon-docs": "npm:8.4.6" + "@storybook/addon-highlight": "npm:8.4.6" + "@storybook/addon-measure": "npm:8.4.6" + "@storybook/addon-outline": "npm:8.4.6" + "@storybook/addon-toolbars": "npm:8.4.6" + "@storybook/addon-viewport": "npm:8.4.6" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/746470edd1f9ebbb9bd4f48461bc24141c215fe146b335efe14fbb289d381faf3935d55e4e25c251777b940caf827c06574062bb18bb1b95e2c9c85b89c8635a + storybook: ^8.4.6 + checksum: 10c0/b8fb83e018fcb1e8cad04b371af5f8ce9933e3a500a78a889715ecfe4efd9faa52acce2d0f97fb04fe9ae0898e661112816c052bfe9b5f01189938b122055a44 languageName: node linkType: hard -"@storybook/addon-highlight@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-highlight@npm:8.4.2" +"@storybook/addon-highlight@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-highlight@npm:8.4.6" dependencies: "@storybook/global": "npm:^5.0.0" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/6838bab4434da65e85de70908f0ca09e9aa93facdb8fa6799100d711a55cbc69744c131f8994e910efd6bf74507bcc035f7ca4f3367c3003fc5799212160fc65 + storybook: ^8.4.6 + checksum: 10c0/67a23a5e3b8f7740c7101e8fa886f3f9c6c61b6db3cb3430d2c805231f7ad170d2d926c12e7c9bfc4af327c5abac5b4155f4c0d70ea423b04704fe3def845acc languageName: node linkType: hard -"@storybook/addon-interactions@npm:^8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-interactions@npm:8.4.2" +"@storybook/addon-interactions@npm:^8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-interactions@npm:8.4.6" dependencies: "@storybook/global": "npm:^5.0.0" - "@storybook/instrumenter": "npm:8.4.2" - "@storybook/test": "npm:8.4.2" + "@storybook/instrumenter": "npm:8.4.6" + "@storybook/test": "npm:8.4.6" polished: "npm:^4.2.2" ts-dedent: "npm:^2.2.0" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/01e24d66cb925990d4313893e8c8fa1f7a1dac2aab80ae11d2093028fb607313905e6142d5ade8006f9bbe657e350693df32841dfe2a9c8df42f829de6e14826 + storybook: ^8.4.6 + checksum: 10c0/42e4bc2df354dba10217385687ac20fb355f4e1a2a7390812081d6b387151b67bca868211794e531c1e112dc4ce50c70dffa55c8f4338b0bd860d59363d58d5b languageName: node linkType: hard -"@storybook/addon-links@npm:^8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-links@npm:8.4.2" +"@storybook/addon-links@npm:^8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-links@npm:8.4.6" dependencies: "@storybook/csf": "npm:^0.1.11" "@storybook/global": "npm:^5.0.0" ts-dedent: "npm:^2.0.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.2 + storybook: ^8.4.6 peerDependenciesMeta: react: optional: true - checksum: 10c0/cf49c0f67344ae9c2c5fd9e66f4edb1fc9d57f5e50db1ac5640a4fb8f5f73e52a5bcbe196c1669bbfc98ca6d65471097ea19e7024808c94be758a7b4e6000ea9 + checksum: 10c0/9360122d9c5370706a583526fb72efd0901d7e64c7467bfb4d832712cc41928d4fcfa397a53cfa17a1ae3875b8ef92ce6a10fb0bf0ce00149dc0d0eb1d66e27b languageName: node linkType: hard -"@storybook/addon-measure@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-measure@npm:8.4.2" +"@storybook/addon-measure@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-measure@npm:8.4.6" dependencies: "@storybook/global": "npm:^5.0.0" tiny-invariant: "npm:^1.3.1" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/3458cce88b41bb54f74f5affc610b07f486db07709ac13a1b84b7b17fb0d9c2b3fce9325b69a9f60a8d446ae0befc530a4de7d5dc133f4d818d438ff4378cf61 + storybook: ^8.4.6 + checksum: 10c0/fd05b49fdb102a991fc696a0f75fde08d372b692778340ab2abc2c73fbd31a07dfa27a7a9d775dda7baaa9bd8a18972ed0bd86e9ce27948afb0305778f7b5a95 languageName: node linkType: hard -"@storybook/addon-onboarding@npm:^8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-onboarding@npm:8.4.2" +"@storybook/addon-onboarding@npm:^8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-onboarding@npm:8.4.6" dependencies: react-confetti: "npm:^6.1.0" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/0c4606212d18c30366b735bc1e95fd3d9c8bfe491534b2a5840d392f6b7a5e30cd7a60944a2622e94f189f6e83ccbbf717c411da7464d16ec0fc3f8e044ac89c + storybook: ^8.4.6 + checksum: 10c0/dcdb34a13da2f6e7e1f23ea17be814cc4cdfa1c0958061bacf82270c06b556a795f9ec80c7e008a6672f0de3f533f1415d6817f7ffd06049952cfda28ff8f492 languageName: node linkType: hard -"@storybook/addon-outline@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-outline@npm:8.4.2" +"@storybook/addon-outline@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-outline@npm:8.4.6" dependencies: "@storybook/global": "npm:^5.0.0" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/042693756b2d00e9454f544d35d1e6a638e7adc7e165c92a4a0c99578a0ff001357c54826fa0e8fe7dbedcd10e62b60045fd30e1cd2b4e3dff4521aece9e6426 + storybook: ^8.4.6 + checksum: 10c0/62600a9f4164a8d91118d37cd7be4f4dd871e849a156ba7728f463bc2cfc5a8a233df09055dd5e5733a042fde7a63b08616cb3c61b26c363c1e2d4ce20d92584 languageName: node linkType: hard -"@storybook/addon-toolbars@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-toolbars@npm:8.4.2" +"@storybook/addon-toolbars@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-toolbars@npm:8.4.6" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/f5808d3863867295475295423a397108d41b01ac6564b0a18241c2f1e3ecf9e67c4326c663917c72315f6c60f203dc0d0e93b4778af4e7071a047a6001e1eef5 + storybook: ^8.4.6 + checksum: 10c0/6525e71aaa3870ae97d407b662323022ade98859f89975110f5fb4a1d3f34b6c918d47fcc8a6a271f4a77acfcaadc963a846a83ebc6c748b37df50422ad60e7e languageName: node linkType: hard -"@storybook/addon-viewport@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/addon-viewport@npm:8.4.2" +"@storybook/addon-viewport@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/addon-viewport@npm:8.4.6" dependencies: memoizerific: "npm:^1.11.3" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/676dc421781afcb50598172d9a1391604e73b9d35989b23e33674ec81b16c5dbd123a6a43098134927e1d2ffb3353fd32231261025cfc5e50ebb1259329f8ec1 + storybook: ^8.4.6 + checksum: 10c0/824438cc44a45f90748ac5f20ac148a36d975a94fa89504a583e0e1188de8c574e042ad3cd537bc16ddb30d4e44e90f5a63263239b13419aec5334e2ece18cd0 languageName: node linkType: hard -"@storybook/blocks@npm:8.4.2, @storybook/blocks@npm:^8.4.2": - version: 8.4.2 - resolution: "@storybook/blocks@npm:8.4.2" +"@storybook/blocks@npm:8.4.6, @storybook/blocks@npm:^8.4.6": + version: 8.4.6 + resolution: "@storybook/blocks@npm:8.4.6" dependencies: "@storybook/csf": "npm:^0.1.11" "@storybook/icons": "npm:^1.2.12" @@ -3302,42 +3300,42 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.2 + storybook: ^8.4.6 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: 10c0/63cb3ed08742409041dca7fea3b476fb16675ddcc11b602ba4b20f61ab92993e15bc020e14e92398d4e2ea3bf62186274f5737c1c88ae26f9e717168f71441d5 + checksum: 10c0/36d79c3aeb3d27f4ba966d62302e13fc17fd7b450dbfbcf538adfc6df3cfecb13c92f9d2542871fa747a77d7c770e413b358623049135355fb01454d6eb52d9a languageName: node linkType: hard -"@storybook/builder-vite@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/builder-vite@npm:8.4.2" +"@storybook/builder-vite@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/builder-vite@npm:8.4.6" dependencies: - "@storybook/csf-plugin": "npm:8.4.2" + "@storybook/csf-plugin": "npm:8.4.6" browser-assert: "npm:^1.2.1" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.4.2 - vite: ^4.0.0 || ^5.0.0 - checksum: 10c0/646f7cfbc77e7aaced8d2f0922e1b54662f6cb3c7602c5db97a419fd724033f8d68a332ebad9bf14641f7e7edec42797685bdfa24c666475f3bbeb23fe20f941 + storybook: ^8.4.6 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + checksum: 10c0/36998ffea04023a9f634ebbafe0d1ab3bd3e7c7fec8e8e6c4caef3ce0c94ce01fa44f332f40d0053edb788548f95096baf8561cd35c23fe3c9bcfd872f74f631 languageName: node linkType: hard -"@storybook/components@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/components@npm:8.4.2" +"@storybook/components@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/components@npm:8.4.6" peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - checksum: 10c0/36ffb5f73dceb481e76fa6e006118f382c23c8081cf47500f0eea8566e902a11d3fd219b599a9f622358f17652c445f71bc8d7a80e0d43f28cd85d60f7b4a15f + checksum: 10c0/1622b2f12b6d18e5c495a623deb2930888b3e8b173a271cbe42a7cbd6e14e80b736c57792ea97d5269dff0e6c0db40385d3ea80ab6e46d4cb6e104aee6cac6bc languageName: node linkType: hard -"@storybook/core@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/core@npm:8.4.2" +"@storybook/core@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/core@npm:8.4.6" dependencies: "@storybook/csf": "npm:^0.1.11" better-opn: "npm:^3.0.2" @@ -3355,18 +3353,18 @@ __metadata: peerDependenciesMeta: prettier: optional: true - checksum: 10c0/75a9a9e00d98bb77d171a2738fdc0e9ab1cfbd760410b95c286368c7f25bbb756b61bd23b89d512707a02e450b81ecbdc72bf05e63fb18ea35509a2a806b0e21 + checksum: 10c0/1e30268eec18458dd78ed4b97fb12ac47b2c3cb41ffcbe9e9f5934b3f0c83b0bfcb0c0d508926344779383cc5260f992dcd534ffffab3f05425c7cee8c90687c languageName: node linkType: hard -"@storybook/csf-plugin@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/csf-plugin@npm:8.4.2" +"@storybook/csf-plugin@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/csf-plugin@npm:8.4.6" dependencies: unplugin: "npm:^1.3.1" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/8fc0db319b8ebe6a445989cc0c5576c7186da086f84d5fad30615e1e527f31bcf562e12b4f31ec85e3fd188aa676116d4023232dcca4441c7c517cda0ac23bf0 + storybook: ^8.4.6 + checksum: 10c0/d771f36ee768c6ff62ecd930c6ff64a4ba45bdbb7f7fb41e5f4ffd02204e3f54b17ed091049b265a6d371922bf599bfe749eb9deabfcd7e2b4fb5a5444655241 languageName: node linkType: hard @@ -3396,55 +3394,55 @@ __metadata: languageName: node linkType: hard -"@storybook/instrumenter@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/instrumenter@npm:8.4.2" +"@storybook/instrumenter@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/instrumenter@npm:8.4.6" dependencies: "@storybook/global": "npm:^5.0.0" "@vitest/utils": "npm:^2.1.1" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/465686b1688d1058e71d1dc32217472832ee4ec46661d7cba8eb17828e678bd8ff96992c8ffbac3fc67767d786a7a35d3ec94adf3886905b65ba1c5f1423f9de + storybook: ^8.4.6 + checksum: 10c0/602017872236124dc9dfa77d6bc2c5987d540063f15c7ace83bf91060d9343fdbe113a61cba44e17cae2247aeeb69875ebf45ff66ce9c28d364d2d3638eb3ec8 languageName: node linkType: hard -"@storybook/manager-api@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/manager-api@npm:8.4.2" +"@storybook/manager-api@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/manager-api@npm:8.4.6" peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - checksum: 10c0/306e16af4a4babf18d7b32335f974ac969a3f9139534f37e3ce238462f69f1ad52e3091a45bf76b1cbdd8f3cf989836c8433cad6cbb2c3eb4dcbc7ccb0f8ae82 + checksum: 10c0/5921ec72df0be765bd398aa906186c9b121a8b3415a7e1a10014a8d17c44aec386b59de3d240017bfc925be00c40a4da8d26991b5fa39023f23ba8efe1b0d58e languageName: node linkType: hard -"@storybook/preview-api@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/preview-api@npm:8.4.2" +"@storybook/preview-api@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/preview-api@npm:8.4.6" peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - checksum: 10c0/7b54c1962d27d32f29a3839660098ad8995cfcf31d4bde3662cff69d7a06cc4d315dad92f565901e3b0ebd7bf12fa8995cc625a71f13c34d82a4529412d8f83c + checksum: 10c0/63967f4813c75e410634bff20189b5a670a061cfeeaa601ec07f0de82e2b4955af292836030d5a8432c3c7e48968285e121ed2bb55d2b5c70d17dbb4ada3c051 languageName: node linkType: hard -"@storybook/react-dom-shim@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/react-dom-shim@npm:8.4.2" +"@storybook/react-dom-shim@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/react-dom-shim@npm:8.4.6" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.2 - checksum: 10c0/f4cc8d3cb557c8e84f62047680af926570f170a87aec7775830b91c4793c7afee84092ef6cd9c518dbd0ab9311139a4698f1477f35d21bc4d1462c6bd54105c5 + storybook: ^8.4.6 + checksum: 10c0/b97c6faa3adc3efe1b7b6f5e38476e040c0a988b14db68e368d704c68f3f4d4bf7866b36607c118a0483242921b34944b5f5f72614d9852476476f6ead462e5c languageName: node linkType: hard -"@storybook/react-vite@npm:^8.4.2": - version: 8.4.2 - resolution: "@storybook/react-vite@npm:8.4.2" +"@storybook/react-vite@npm:^8.4.6": + version: 8.4.6 + resolution: "@storybook/react-vite@npm:8.4.6" dependencies: - "@joshwooding/vite-plugin-react-docgen-typescript": "npm:0.3.0" + "@joshwooding/vite-plugin-react-docgen-typescript": "npm:0.4.2" "@rollup/pluginutils": "npm:^5.0.2" - "@storybook/builder-vite": "npm:8.4.2" - "@storybook/react": "npm:8.4.2" + "@storybook/builder-vite": "npm:8.4.6" + "@storybook/react": "npm:8.4.6" find-up: "npm:^5.0.0" magic-string: "npm:^0.30.0" react-docgen: "npm:^7.0.0" @@ -3453,61 +3451,61 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.2 - vite: ^4.0.0 || ^5.0.0 - checksum: 10c0/7e04112b0678a2bfd9fb913eb9161055fdb30d6ee34983294632eaae72067a16727e84801bede7b76cd7f7e0c6005021011432ea394c1a82fd73de5c6fb7b567 + storybook: ^8.4.6 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + checksum: 10c0/9f81a19461dbbf11932a13f8fb611dbcd95fbfa695ee5536daf7e078bf0feb5ddda2738606073826131e3fee710e230dce9042e3f7f985203392376aa8407643 languageName: node linkType: hard -"@storybook/react@npm:8.4.2, @storybook/react@npm:^8.4.2": - version: 8.4.2 - resolution: "@storybook/react@npm:8.4.2" +"@storybook/react@npm:8.4.6, @storybook/react@npm:^8.4.6": + version: 8.4.6 + resolution: "@storybook/react@npm:8.4.6" dependencies: - "@storybook/components": "npm:8.4.2" + "@storybook/components": "npm:8.4.6" "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:8.4.2" - "@storybook/preview-api": "npm:8.4.2" - "@storybook/react-dom-shim": "npm:8.4.2" - "@storybook/theming": "npm:8.4.2" + "@storybook/manager-api": "npm:8.4.6" + "@storybook/preview-api": "npm:8.4.6" + "@storybook/react-dom-shim": "npm:8.4.6" + "@storybook/theming": "npm:8.4.6" peerDependencies: - "@storybook/test": 8.4.2 + "@storybook/test": 8.4.6 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.2 + storybook: ^8.4.6 typescript: ">= 4.2.x" peerDependenciesMeta: "@storybook/test": optional: true typescript: optional: true - checksum: 10c0/a5ce045dae71c2a039c1ac4411c07b4a51574a6f607c6c6f105e87147410b32e7d882b3f225d6fa78ddc29423881aee76727826d2b960a61f913f7d849fdcc1f + checksum: 10c0/1441f8ab3be91757647c6b1a05eb1ef0d78a454ffd14b01a14fdde00e92a8be8fc7c8408c4670b46bc20a5a04995514f0890e98ed6ee35c362ff36141da02f02 languageName: node linkType: hard -"@storybook/test@npm:8.4.2, @storybook/test@npm:^8.4.2": - version: 8.4.2 - resolution: "@storybook/test@npm:8.4.2" +"@storybook/test@npm:8.4.6, @storybook/test@npm:^8.4.6": + version: 8.4.6 + resolution: "@storybook/test@npm:8.4.6" dependencies: "@storybook/csf": "npm:^0.1.11" "@storybook/global": "npm:^5.0.0" - "@storybook/instrumenter": "npm:8.4.2" + "@storybook/instrumenter": "npm:8.4.6" "@testing-library/dom": "npm:10.4.0" "@testing-library/jest-dom": "npm:6.5.0" "@testing-library/user-event": "npm:14.5.2" "@vitest/expect": "npm:2.0.5" "@vitest/spy": "npm:2.0.5" peerDependencies: - storybook: ^8.4.2 - checksum: 10c0/6431020dd98ae2eaea70ced1e1ae2c8d3bf006b0d7607d7020fe226f9971983b8ec91e1dc360624560e1517764a40d78a23a231d889faf000bdfbd5f66fb268f + storybook: ^8.4.6 + checksum: 10c0/fbf7c2ac7773a7fe18145876eb67491ce90b000ba5f8e364a319569e56d56e706fdd1c7ef24d3ab2ffa3dfcdb92377d8050c8ffbd457d2d8b613aba2a4845a04 languageName: node linkType: hard -"@storybook/theming@npm:8.4.2": - version: 8.4.2 - resolution: "@storybook/theming@npm:8.4.2" +"@storybook/theming@npm:8.4.6": + version: 8.4.6 + resolution: "@storybook/theming@npm:8.4.6" peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - checksum: 10c0/8765a25952273f87f65018159228fa448a0bb6fa38486650344ddc076cd895546ab3b88d35a6e7f80d3223635e28d59f82510922c589a36a7c6afc33c5bcc0d7 + checksum: 10c0/7d9c8e5ef2c1d974cd5258301350a2345890326e7be7a5ed6bdd0db70fd1648c0bbb8ee1d905f8e66fa57b75c47aefe7ec9772ec0bfb9691d127dcc19286e4c9 languageName: node linkType: hard @@ -3684,16 +3682,6 @@ __metadata: languageName: node linkType: hard -"@types/glob@npm:^7.1.3": - version: 7.2.0 - resolution: "@types/glob@npm:7.2.0" - dependencies: - "@types/minimatch": "npm:*" - "@types/node": "npm:*" - checksum: 10c0/a8eb5d5cb5c48fc58c7ca3ff1e1ddf771ee07ca5043da6e4871e6757b4472e2e73b4cfef2644c38983174a4bc728c73f8da02845c28a1212f98cabd293ecae98 - languageName: node - linkType: hard - "@types/history@npm:^4.7.11": version: 4.7.11 resolution: "@types/history@npm:4.7.11" @@ -3731,13 +3719,6 @@ __metadata: languageName: node linkType: hard -"@types/minimatch@npm:*": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 10c0/83cf1c11748891b714e129de0585af4c55dd4c2cafb1f1d5233d79246e5e1e19d1b5ad9e8db449667b3ffa2b6c80125c429dbee1054e9efb45758dbc4e118562 - languageName: node - linkType: hard - "@types/minimist@npm:~1.2.2": version: 1.2.5 resolution: "@types/minimist@npm:1.2.5" @@ -4317,14 +4298,14 @@ __metadata: dependencies: "@chromatic-com/storybook": "npm:^3.2.2" "@sentry/react": "npm:^8.40.0" - "@storybook/addon-essentials": "npm:^8.4.2" - "@storybook/addon-interactions": "npm:^8.4.2" - "@storybook/addon-links": "npm:^8.4.2" - "@storybook/addon-onboarding": "npm:^8.4.2" - "@storybook/blocks": "npm:^8.4.2" - "@storybook/react": "npm:^8.4.2" - "@storybook/react-vite": "npm:^8.4.2" - "@storybook/test": "npm:^8.4.2" + "@storybook/addon-essentials": "npm:^8.4.6" + "@storybook/addon-interactions": "npm:^8.4.6" + "@storybook/addon-links": "npm:^8.4.6" + "@storybook/addon-onboarding": "npm:^8.4.6" + "@storybook/blocks": "npm:^8.4.6" + "@storybook/react": "npm:^8.4.6" + "@storybook/react-vite": "npm:^8.4.6" + "@storybook/test": "npm:^8.4.6" "@testing-library/dom": "npm:^10.2.0" "@testing-library/react": "npm:^16.0.0" "@testing-library/user-event": "npm:^14.5.1" @@ -4343,7 +4324,7 @@ __metadata: eslint: "npm:^8.54.0" eslint-config-react-app: "npm:^7.0.1" eslint-plugin-chai-friendly: "npm:^0.7.2" - eslint-plugin-storybook: "npm:^0.11.0" + eslint-plugin-storybook: "npm:^0.11.1" file-saver: "npm:^2.0.5" happy-dom: "npm:^15.10.2" history: "npm:^5.3.0" @@ -4359,7 +4340,7 @@ __metadata: react-share: "npm:^5.1.1" react-transition-group: "npm:^4.4.5" sass: "npm:^1.69.5" - storybook: "npm:^8.4.2" + storybook: "npm:^8.4.6" typescript: "npm:^5.3.3" vite: "npm:^5.2.14" vite-tsconfig-paths: "npm:^4.3.2" @@ -5817,16 +5798,16 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-storybook@npm:^0.11.0": - version: 0.11.0 - resolution: "eslint-plugin-storybook@npm:0.11.0" +"eslint-plugin-storybook@npm:^0.11.1": + version: 0.11.1 + resolution: "eslint-plugin-storybook@npm:0.11.1" dependencies: "@storybook/csf": "npm:^0.1.11" "@typescript-eslint/utils": "npm:^8.8.1" ts-dedent: "npm:^2.2.0" peerDependencies: eslint: ">=6" - checksum: 10c0/e132d67942fe9f826dbeda5023f8483a71d59dea135d53196dc20132c405aba0155f7dca51f443ed05097287864294f7c9b332771d123e7f6609a0571440b61e + checksum: 10c0/0520018311c6da25fe2d0db24a59e99ecefe74c4cadd4eba42ce3b1b0ce2c3cc6f88d48680389374f99e10151a7ef3da52386853d9d5a4058c41ae72e2184549 languageName: node linkType: hard @@ -6311,17 +6292,6 @@ __metadata: languageName: node linkType: hard -"glob-promise@npm:^4.2.0": - version: 4.2.2 - resolution: "glob-promise@npm:4.2.2" - dependencies: - "@types/glob": "npm:^7.1.3" - peerDependencies: - glob: ^7.1.6 - checksum: 10c0/3eb01bed2901539365df6a4d27800afb8788840647d01f9bf3500b3de756597f2ff4b8c823971ace34db228c83159beca459dc42a70968d4e9c8200ed2cc96bd - languageName: node - linkType: hard - "glob@npm:^10.2.2, glob@npm:^10.3.10": version: 10.3.10 resolution: "glob@npm:10.3.10" @@ -6353,7 +6323,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.2.0": +"glob@npm:^7.1.3": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -8801,11 +8771,11 @@ __metadata: languageName: node linkType: hard -"storybook@npm:^8.4.2": - version: 8.4.2 - resolution: "storybook@npm:8.4.2" +"storybook@npm:^8.4.6": + version: 8.4.6 + resolution: "storybook@npm:8.4.6" dependencies: - "@storybook/core": "npm:8.4.2" + "@storybook/core": "npm:8.4.6" peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: @@ -8815,7 +8785,7 @@ __metadata: getstorybook: ./bin/index.cjs sb: ./bin/index.cjs storybook: ./bin/index.cjs - checksum: 10c0/54791f44de53d465a74c44ec16255ebe5248156eee54b768fdcc12a7556e1b6e2a23c9c5c5eec0c3fcc71c3820398999ede5042f711a851b0ca9c71e65c8ab19 + checksum: 10c0/e15249718c1efab3d3d05f3152df28fc8f7e2e988bf7414cd4abf2adfb5d6c3b802f05dad5be0521c30d0ba43e55abf516e6f874b0671e0d1e84a7096cb47d3d languageName: node linkType: hard diff --git a/package.json b/package.json index 90ed222c4..d26b33cc4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "muscle", - "version": "3.0.0", + "version": "3.1.0", "private": false, "description": "The MUSCLE platform is an application that provides an easy way to implement and run online listening experiments for music research.", "license": "MIT",
Sessions

- {{ session.id }} + {{ session.id }} +

- {{ session.block.slug }} + {{ session.block }}

Participant count Participants * SessionsFeedback

- {{ block.slug }} + + {{ block.name }} +

+ + +