@wwtdev/bsds-components-vue3 2.40.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bsds-components.js","sources":["../src/components/selectors.js","../src/components/accordion/defs-accordion.js","../src/components/alert/defs-alert.js","../src/components/badge/defs-badge.js","../src/components/banner/defs-banner.js","../src/components/button/defs-button.js","../src/components/calendar/defs-calendar.js","../src/components/circle-button/defs-circle-button.js","../src/components/dropdown-option-builder/defs-dropdown-option-builder.js","../src/components/empty-state/defs-empty-state.js","../src/components/form-container/defs-form-container.js","../src/components/navigation/defs-horizontal-navigation.js","../src/components/inline-tabs/defs-inline-tab.js","../src/components/inline-tabs/defs-inline-tab-group.js","../src/components/modal/defs-modal.js","../src/components/profile/defs-profile.js","../src/components/navigation/defs-vertical-navigation.js","../src/composables/genId.js","../src/composables/deprecated.js","../src/components/accordion/BsAccordion.vue","../src/composables/buttonOrLink.js","../src/composables/clientRouter.js","../src/components/circle-button/BsCircleButton.vue","../src/components/alert/BsAlert.vue","../src/components/badge/BsBadge.vue","../src/components/banner/BsBanner.vue","../src/components/button/BsButton.vue","../src/components/field-details/BsFieldDetails.vue","../src/components/input/BsInput.vue","../src/utils/debounce.js","../src/components/calendar/internal/BsInputDateRange.vue","../src/composables/calendarWorkaround.js","../src/composables/matchMedia.js","../src/composables/filterAttrs.js","../src/components/calendar/BsCalendar.vue","../src/components/chart-table/BsChartTable.vue","../src/composables/keydown.js","../src/composables/chart.js","../src/components/chart-bar/BsChartBar.vue","../src/components/checkbox/BsCheckbox.vue","../src/components/dropdown/BsDropdownContainer.vue","../src/components/transition/BsEnhancedTransition.vue","../src/composables/breakout.js","../src/composables/clickAway.js","../src/components/dropdown/BsDropdownNew.vue","../src/components/dropdown/BsDropdown.vue","../src/components/dropdown-combobox/internal/BsInputCombobox.vue","../src/components/filter-button/BsFilterButton.vue","../src/utils/dropdown.js","../src/components/dropdown-option/BsDropdownOption.vue","../src/components/profile-img/BsProfileImg.vue","../src/components/dropdown-option-builder/BsDropdownOptionBuilder.vue","../src/components/input-search/BsInputSearch.vue","../src/composables/mutationObserver.js","../src/components/dropdown-option-list/BsDropdownOptionList.vue","../src/components/dropdown-multiselect/BsDropdownMultiselect.vue","../src/components/dropdown-with-toggle/BsDropdownWithToggle.vue","../src/components/dropdown-combobox/BsDropdownCombobox.vue","../src/components/dropdown-combobox-field/BsDropdownComboboxField.vue","../src/components/dropdown-with-options/BsDropdownWithOptionsNew.vue","../src/components/dropdown-with-options/BsDropdownWithOptions.vue","../src/components/empty-state/BsEmptyState.vue","../src/components/flyout/BsFlyout.vue","../src/components/focus-guard/BsFocusGuard.vue","../src/composables/navigationUtils.js","../src/components/navigation/NavigationLink.vue","../src/components/navigation/BsHorizontalNavigation.vue","../src/components/icon-gradient-wrapper/BsIconGradientWrapper.vue","../src/components/inline-tabs/provider-key-inline-tabs.js","../src/components/inline-tabs/BsInlineTab.vue","../src/components/inline-tabs/BsInlineTabGroup.vue","../src/components/input-field/BsInputField.vue","../src/components/input-phone/countryUtils.js","../src/components/input-phone/BsInputPhone.vue","../src/components/input-typeahead/BsInputTypeahead.vue","../src/components/overlay/BsOverlay.vue","../src/components/modal/BsModal.vue","../src/components/pagination/BsPagination.vue","../src/components/pill/BsPill.vue","../src/components/profile-details/BsProfileDetails.vue","../src/components/profile/BsProfile.vue","../src/composables/steps.js","../src/components/progress-bar/BsProgressBar.vue","../src/components/radio/BsRadio.vue","../src/components/select/BsSelect.vue","../src/components/select-field/BsSelectField.vue","../src/components/select-with-dropdown/BsSelectWithDropdown.vue","../src/components/switch/BsSwitch.vue","../src/components/tab/BsTab.vue","../src/components/tab-list/BsTabList.vue","../src/components/tab-panel/BsTabPanel.vue","../src/components/table/TableCol.vue","../src/components/table/provider-keys-table.js","../src/components/table/TableRowGroup.vue","../src/components/table/FrozenCols.vue","../src/components/table/TableRow.vue","../src/components/table/HeadCell.vue","../src/components/table/Cell.vue","../src/components/table/TableHeader.vue","../src/components/table/TableFooter.vue","../src/components/table/SortToggle.vue","../src/components/table/TableColResizer.vue","../src/components/table/Table.vue","../src/components/textarea/BsTextarea.vue","../src/components/textarea-field/BsTextareaField.vue","../src/utils/fmtTime.js","../src/components/time-picker/BsTimePicker.vue","../src/components/time-picker-field/BsTimePickerField.vue","../src/components/timeline/BsTimeline.vue","../src/components/toast/BsToast.vue","../src/components/toast-actions/BsToastActions.vue","../src/components/toast-body/BsToastBody.vue","../src/components/toast-header/BsToastHeader.vue","../src/components/toaster/BsToaster.vue","../src/components/tooltip/BsTooltip.vue","../src/components/navigation/BsVerticalNavigation.vue"],"sourcesContent":["/* This file is used to share selectors with automated tests.\n* commented out selectors are ones we may or may not want to add in the future\n*/\nconst bsSelectors = {\n accordion:'[data-component=bs-accordion]',\n badge:'[data-component=bs-badge]',\n banner:'[data-component=bs-banner]',\n button:'[data-component=bs-button]',\n calendar:'[data-component=bs-calendar]',\n chartBar:'[data-component=bs-chart-bar]',\n chartLine:'[data-component=bs-chart-line]',\n chartTable:'[data-component=bs-chart-table]',\n checkbox:'[data-component=bs-checkbox]',\n circleButton:'[data-component=bs-circle-button]',\n dropdownComboboxField:'[data-component=bs-dropdown-combobox-field]',\n dropdownMultiselect:'[data-component=bs-dropdown-multiselect]',\n dropdownOption:'[data-component=bs-dropdown-option]',\n dropdownOptionList:'[data-component=bs-dropdown-option-list]',\n emptyState:'[data-component=bs-empty-state]',\n fieldDetails:'[data-component=bs-field-details]',\n filterButton:'[data-component=bs-filter-button]',\n flyout:'[data-component=bs-flyout]',\n input:'[data-component=bs-input]',\n inputAddon:'[data-component=bs-input-addon]',\n inputField:'[data-component=bs-input-field]',\n inputPhone:'[data-component=bs-input-phone]',\n inputSearch:'[data-component=bs-input-search]',\n label:'[data-component=bs-label]',\n modal:'[data-component=bs-modal]',\n pagination: {\n component: '[data-component=bs-pagination]',\n pageNumbers: '.bs-pagination-page-numbers',\n first: '[aria-label=\"First Page\"]',\n previous: '[aria-label=\"Previous Page\"]',\n next: '[aria-label=\"Next Page\"]',\n last: '[aria-label=\"Last Page\"]',\n },\n pill:'[data-component=bs-pill]',\n profile:'[data-component=bs-profile]',\n profileDetails:'[data-component=bs-profile-details]',\n profileImg:'[data-component=bs-profile-img]',\n progressBar:'[data-component=bs-progress-bar]',\n radio:'[data-component=bs-radio]',\n select:'[data-component=bs-select]',\n selectField:'[data-component=bs-select-field]',\n spinner:'[data-component=bs-spinner]',\n switch:'[data-component=bs-switch]',\n tab:'[data-component=bs-tab]',\n tabList:'[data-component=bs-tab-list]',\n tabPanel:'[data-component=bs-tab-panel]',\n textarea:'[data-component=bs-textarea]',\n textareaField:'[data-component=bs-textarea-field]',\n timePickerField:'[data-component=bs-time-picker-field]',\n timeline:'[data-component=bs-timeline]',\n toast:'[data-component=bs-toast]',\n toastActions:'[data-component=bs-toast-actions]',\n toastBody:'[data-component=bs-toast-body]',\n toastHeader:'[data-component=bs-toast-header]',\n toaster:'[data-component=bs-toaster]',\n tooltip:'[data-component=bs-tooltip]',\n}\n\n\nexport default {\n\tbsSelectors\n};","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n controlled: {\n default: false,\n description: `Use with \\`openItem\\` prop. Set to \\`true\\` when several\n accordions are grouped together and only one accordion should be open at a\n time.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n headerText: {\n default: '',\n description: `Panel title text. When using the \\`header\\` slot alternative,\n do not use this prop as it will be overwritten.`,\n type: String,\n typeDef: 'string',\n },\n icon: {\n default: '',\n description: `Icon to display on the left. This can be the string name\n (dynamic load) or an actual IconComponent. Not used if the \\`icon\\` slot\n is provided.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n openItem: {\n default: false,\n description: `Use with \\`controlled\\` prop. Pass in \\`true\\` when this\n accordion should open. When using this prop, do not use\n \\`openItemId\\`.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n openItemId: {\n default: '',\n description: `Use with \\`controlled\\` prop. Pass in the id of the accordion\n that should be open. When using this prop, do not use\n \\`openItem\\`.`,\n type: String,\n typeDef: 'string',\n },\n stacked: {\n default: false,\n description: `Set to \\`true\\` when used in a stack of accordions\n bordering one another.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n // DEPRECATED\n headingLevel: {\n default: undefined,\n deprecated: true,\n },\n}\n\nexport const emitDefinitions = {\n toggled: {\n description: `Emits the ID of the accordion when the accordion is toggled.`,\n payloadType: 'string',\n },\n}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the accordion.`\n },\n header: {\n description: `Custom header content. Alternative to the \\`headerText\\`\n prop.`,\n },\n icon: {\n description: `Custom icon to display on the left. Alternative to the\n \\`icon\\` prop.`,\n },\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n actionLabel: {\n default: '',\n description: `The label for the action button. If not provided, no action\n button will be displayed.`,\n type: String,\n typeDef: 'string',\n },\n actionLinkTo: {\n default: '',\n description: `Optionally pass in a url or router object to convert the\n action button to an anchor link.`,\n type: [String, Object],\n typeDef: 'string | object',\n },\n actionRouter: {\n default: undefined,\n description: `Pass in the Vue router instance to enable client-side routing\n (applicable only when \\`actionLinkTo\\` is provided).`,\n type: Object,\n typeDef: 'object',\n },\n description: {\n default: undefined,\n description: `The description text of the alert. If this prop and the\n \\`description\\` slot are both not provided, no description will be\n displayed.`,\n type: String,\n typeDef: 'string',\n },\n hideDismiss: {\n default: false,\n description: `Set to \\`true\\` to hide the dismiss button.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n horizontal: {\n default: false,\n description: `Set to \\`true\\` to display the alert in a horizontal\n orientation.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n icon: {\n default: '',\n description: `Icon to display on the alert. This can be the string name\n (dynamic load) or an actual IconComponent. Not used if the \\`icon\\` slot\n is provided. If no icon is provided, a default icon will be displayed.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n title: {\n default: '',\n description: `The title of the alert. If this prop and the \\`title\\` slot\n are both not provided, no title will be displayed.`,\n type: String,\n typeDef: 'string',\n },\n variant: {\n default: '',\n description: `Sets the visual style of the alert.`,\n type: String,\n typeDef: `'success' | 'warning' | 'negative'`,\n typeOptions: ['', 'success', 'warning', 'negative'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n },\n },\n}\n\nexport const emitDefinitions = {\n 'action-click': {\n description: `Event emitted when the action button is clicked.`,\n },\n 'close': {\n description: `Event emitted when the close button is clicked.`,\n },\n}\n\nexport const slotDefinitions = {\n description: {\n description: `The description of the alert. Overrides the \\`description\\`\n prop.`,\n },\n icon: {\n description: `The icon to be displayed in the alert. Overrides the \\`icon\\`\n prop.`,\n },\n title: {\n description: `The title of the alert. Overrides the \\`title\\` prop.`,\n },\n}","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n color: {\n default: '',\n description: `Sets the color of the badge.`,\n type: String,\n typeDef: `'red' | 'blue' | 'white'`,\n typeOptions: ['', 'red', 'blue', 'white'],\n validator: val => ['', 'red', 'blue', 'white'].includes(val)\n },\n count: {\n default: 0,\n description: `Sets the count of items. Not applicable when using the \\`dot\\`\n prop.`,\n type: Number,\n typeDef: 'number',\n },\n countMax: {\n default: 99,\n description: `Sets the count limit after which the displayed count will stop\n incrementing and a \"+\" will be appended.`,\n type: Number,\n typeDef: 'number',\n },\n dot: {\n default: false,\n description: `Pass \\`true\\` to show a simple dot indicator. Not applicable\n when using the \\`count\\` prop.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n label: {\n default: 'item',\n description: `Pass the singular name of the items that are being counted.\n e.g. if counting unread notifications, pass \\`\"unread notification\\`\";\n or if counting new messages, pass \\`\"new message\\`\". This is required\n to ensure accessibility.`,\n type: String,\n typeDef: 'string',\n },\n position: {\n default: 'right',\n description: `Sets the position of the badge in relation to the slotted\n content.`,\n type: String,\n typeDef: `'left' | 'right'`,\n typeOptions: ['', 'left', 'right'],\n validator: val => ['left', 'right'].includes(val),\n },\n showZero: {\n default: false,\n description: `Pass \\`true\\` to show the badge even when the \\`count\\` value\n is zero.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n variant: {\n default: '',\n description: `Sets the variant of the badge. Use \\`notext\\` variant when\n the badge is used as a standalone element.`,\n type: String,\n typeDef: `'notext'`,\n typeOptions: ['', 'notext'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `The text for the badge. Not applicable when variant is set to\n \\`notext\\`.`,\n },\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n icon: {\n default: '',\n description: `Icon to display in the banner. This can be the string name\n (dynamic load) or an actual IconComponent. Not used if the \\`icon\\` slot\n is provided. If no icon is provided, a default icon will be displayed.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n variant: {\n default: '',\n description: `Sets the color variant of the banner.`,\n type: String,\n typeDef: `'negative'`,\n typeOptions: ['', 'negative'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n },\n}\n\nexport const emitDefinitions = {\n dismiss: {\n description: `Event emitted when the banner is dismissed.`,\n },\n}\n\nexport const slotDefinitions = {\n default: {\n description: `The main content of the banner.`,\n },\n icon: {\n description: `The icon to be displayed in the banner. Overrides the \\`icon\\`\n prop.`,\n },\n}","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n disabled: {\n default: false,\n description: `Sets the disabled state of the button.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n ghostBtn: {\n default: false,\n description: `Apply the ghost button style.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n linkTo: {\n default: undefined,\n description: `Pass in a url or router object to convert a button to an\n anchor tag (to enable client-side routing, pass the vue router instance\n into \\`router\\` prop).`,\n type: [String, Object],\n typeDef: 'string | object',\n },\n router: {\n default: undefined,\n description: `Pass in the Vue router instance to enable client-side routing\n (applicable only when \\`linkTo\\` is used).`,\n type: Object,\n typeDef: 'object',\n },\n size: {\n default: '',\n description: `Sets the size of the button. Note that the \\`xs\\` size is only\n supported for text buttons.`,\n type: String,\n typeDef: `'sm' | 'xs' | 'xxs'`,\n typeOptions: ['', 'sm', 'xs', 'xxs'],\n validator: (val) => ['', 'sm', 'xs', 'xxs'].includes(val)\n },\n textBtn: {\n default: false,\n description: `Apply the text button style.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n variant: {\n default: undefined,\n description: `Changes the variant of the button. \\'white\\' should only be\n used with ghost buttons or text buttons, on dark backgrounds. \\`negative\\`\n and \\`white\\` are the only available variants for text buttons.`,\n type: String,\n typeDef: `'primary' | 'secondary' | 'positive' | 'negative' | 'warning' | 'pink' | 'royal' | 'white'`,\n typeOptions: ['primary', 'secondary', 'positive', 'negative', 'warning', 'pink', 'royal', 'white'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n },\n // DEPRECATED\n href: {\n default: undefined,\n deprecated: true,\n },\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `Button label content.`\n }\n}\n","export const propDefinitions = {\n disabled: {\n default: false,\n description: `Set to \\`true\\` to disable the calendar input.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n disabledDates: {\n default: [],\n description: `Array of dates to disable.`,\n type: Array,\n typeDef: 'Date[]',\n },\n error: {\n default: false,\n description: `Set to \\`true\\` to display an error state.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n errorMsg: {\n default: '',\n description: `Error message to display.`,\n type: String,\n typeDef: 'string',\n },\n exclusiveDates: {\n default: [],\n description: `Array of dates to exclusively enable. This prop supersedes\n \\`disabledDates\\`, \\`minDate\\`, and \\`maxDate\\`.`,\n type: Array,\n typeDef: 'Date[]',\n },\n hint: {\n default: '',\n description: `Hint text to display.`,\n type: String,\n typeDef: 'string',\n },\n inputId: {\n default: '',\n description: `Unique id for the input. Autogenerated if not passed.`,\n type: String,\n typeDef: 'string',\n },\n inputMode: {\n default: true,\n description: `Set to \\`false\\` to hide the input. Useful for using just the\n calendar as the date picker.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n isRange: {\n default: false,\n description: `Set to \\`true\\` to enable range selection. When enabled, the\n \\`modelValue\\` prop must be an object with \\`start\\` and \\`end\\`\n properties.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n label: {\n default: '',\n description: `Label text for the input. Alternatively, use the label slot.`,\n type: String,\n typeDef: 'string',\n },\n maxDate: {\n default: null,\n description: `Max date for the calendar.`,\n type: Date,\n typeDef: 'Date',\n },\n minDate: {\n default: null,\n description: `Min date for the calendar.`,\n type: Date,\n typeDef: 'Date',\n },\n /** Date | { start: Date, end: Date } */\n modelValue: {\n default: null,\n description: `Date value. Use v-model to bind to a date value. When\n \\`isRange: true\\`, use an object with \\`start\\` and \\`end\\`\n properties.`,\n type: [Date, Object],\n typeDef: `Date | { start: Date, end: Date }`,\n },\n placeholder: {\n default: 'Choose a date',\n description: `Placeholder text for the input.`,\n type: String,\n typeDef: 'string',\n },\n required: {\n default: false,\n description: `Set to \\`true\\` to mark the input as required.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n showClear: {\n default: false,\n description: `Set to \\`true\\` to show a clear button.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n step: {\n default: 1,\n description: `Step for the calendar month navigation. Will force to \\`1\\` in\n mobile view or single-column view.`,\n type: Number,\n typeDef: '1 | 2',\n typeOptions: [1, 2],\n validator(value) {\n return propDefinitions.step.typeOptions.includes(value)\n }\n },\n variant: {\n default: '',\n description: `Sets the visual style of the calendar. When set to \\`2-col\\`,\n the calendar will display in a two-column layout.`,\n type: String,\n typeDef: `'2-col'`,\n typeOptions: ['', '2-col'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n }\n}\n\nexport const emitDefinitions = {\n 'clear': {\n description: `Emits \\`clear\\` event when the clear button is clicked.`,\n },\n 'update:model-value': {\n description: `Emits \\`update:modelValue\\` event when the date is selected.`,\n },\n}\nexport const slotDefinitions = {\n label: {\n description: `The label for the input. Overrides the \\`label\\` prop.`,\n },\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n disabled: {\n default: false,\n description: `Sets the disabled state on the button.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n ghostBtn: {\n default: false,\n description: `Apply the ghost button style.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n hoverEffect: {\n default: false,\n description: `Set to \\`true\\` to apply hover transition effect (icon\n translates left or right).`,\n type: Boolean,\n typeDef: 'boolean',\n },\n icon: {\n default: '',\n description: `Icon to display. This can be the string name (dynamic load) or\n an actual IconComponent. Not used if the \\`icon\\` slot is provided. If\n no icon provided at all, will use a default caret icon.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n iconPosition: {\n default: 'right',\n description: `Set the position of the icon in relation to button text.`,\n type: String,\n typeDef: `''|'left'|'right'`,\n typeOptions: ['', 'left', 'right'],\n validator(value) {\n return propDefinitions.iconPosition.typeOptions.includes(value)\n }\n },\n label: {\n default: undefined,\n description: `Text to be used as \\`aria-label\\` or \\`title\\` for non-text\n buttons or links, respectively, or as the button text for text buttons.`,\n type: String,\n typeDef: 'string',\n },\n linkTo: {\n default: '',\n description: `Pass in a url or router object to convert a button to an\n anchor tag (to enable client-side routing, pass the Vue router instance\n into \\`router\\` prop).`,\n type: [String, Object],\n typeDef: 'string|Object',\n },\n router: {\n default: undefined,\n description: `Pass in the Vue router instance to enable client-side routing\n (applicable only when \\`linkTo\\` is provided).`,\n type: Object,\n typeDef: 'Router',\n },\n size: {\n default: '',\n description: `Sets the size of the button. Note that the \\`'xs'\\` size is\n only applicable when \\`textBtn=true\\`, and \\`'xxs'\\` is only applicable\n for color variants.`,\n type: String,\n typeDef: `''|'sm'|'xs'|'xxs'`,\n typeOptions: ['', 'sm', 'xs', 'xxs'],\n validator(value) {\n return propDefinitions.size.typeOptions.includes(value)\n }\n },\n textBtn: {\n default: false,\n description: `Set to \\`true\\` to display the label as text alongside the\n circle icon.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n variant: {\n default: '',\n description: `Color variant for the button. Note that when a variant is\n selected, \\`textBtn\\` is effectively set to \\`true\\` and \\`ghostBtn\\` is\n ignored.`,\n type: String,\n typedef: `''|'blue'|'pink'|'purple'|'orange'|'red'|'royal'|'white'`,\n typeOptions: ['', 'blue', 'pink', 'purple', 'orange', 'red', 'royal', 'white'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n },\n // DEPRECATED\n href: {\n default: undefined,\n deprecated: true,\n },\n}\n\nexport const emitDefinitions = { }\n\nexport const slotDefinitions = {\n icon: {\n description: `Custom icon to be used in place of the default icon or\n \\`icon\\` prop value.`,\n }\n}\n","export const propDefinitions = {\n // REQUIRED\n options: {\n description: `Array of objects to build out options.`,\n required: true,\n type: Array,\n typeDef: `{\n value: string | number | object,\n label?: string,\n labelHtml?: string,\n description?: string,\n negative?: boolean,\n icon?: string | IconComponent,\n profileImg?: {\n initials: string,\n src?: string,\n profileName?: string\n }\n checkbox?: {\n inputId: string,\n checked: boolean\n }\n }`\n },\n // OPTIONAL\n valueIdKey: {\n default: 'id',\n description: `For option values that are objects, pass the key to look for\n on the option's object value. Also to be used as the Option El's id\n attribute for accessibility.`,\n type: String,\n typeDef: 'string',\n },\n showNoOptions: {\n default: true,\n description: `Whether to show the 'No options' message when the options\n array is empty.`,\n type: Boolean,\n typeDef: 'boolean',\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {}\n","export const propDefinitions = {\n // REQUIRED\n title: {\n description: `Heading for the empty state.`,\n type: String,\n typeDef: 'string',\n required: true\n },\n // OPTIONAL\n description: {\n default: '',\n description: `Description can be added via prop or by using the\n \\`description\\` slot.`,\n type: String,\n typeDef: 'string'\n },\n icon: {\n default: '',\n description: `Icon to display. This can be the string name (dynamic load) or\n an actual IconComponent. Not used if the \\`icon\\` slot is provided.`,\n type: [String, Object],\n typeDef: 'string|IconComponent'\n },\n size: {\n default: 'md',\n description: 'Size variant of the empty state.',\n type: String,\n typeDef: \"'xs' | 'sm' | 'md' | 'lg'\",\n typeOptions: ['xs', 'sm', 'md', 'lg'],\n validator(value) {\n return propDefinitions.size.typeOptions.includes(value)\n }\n },\n // DEPRECATED\n iconName: {\n default: '',\n description: `**DEPRECATED** - use \\`icon\\` prop instead.`,\n type: String,\n typeDef: 'string'\n },\n}\n\nexport const emitDefinitions = { }\n\nexport const slotDefinitions = {\n 'call-to-action': {\n description: `Custom call-to-action content, typically a button or link.`,\n },\n description: {\n description: `Custom description to be used in place of the \\`description\\`\n prop.`\n },\n icon: {\n description: `Custom icon to be used in place of the \\`iconName\\` prop\n value.`,\n }\n}\n","export const propDefinitions = {\n // REQUIRED\n title: {\n required: true,\n description: `The title of the form container. This prop is required.`,\n type: String,\n typeDef: 'string',\n },\n \n // OPTIONAL\n inactive: {\n default: false,\n description: `Set to \\`true\\` to mute the form container background, \n title and subTitle.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n expanded: {\n default: true,\n description: `Set to \\`false\\` to hide the form container content.\n This can be used to create an expandable form container.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n icon: {\n default: '',\n description: `Icon prepended to the header title. This can be the string \n name (dynamic load) or an actual IconComponent. Not used if the \\`icon\\`\n slot is provided.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n required: {\n default: false,\n description: `Set to \\`true\\` will add a red asterisk to the title`,\n type: Boolean,\n typeDef: 'boolean',\n },\n subTitle: {\n default: '',\n description: `The subTitle of the form container. This will be displayed\n below the title.`,\n type: String,\n typeDef: 'string',\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the form container.`\n },\n 'header-actions': {\n description: `Custom actions to display on the right. This slot can be used\n to add buttons, links, etc. to the form container's header.`,\n },\n icon: {\n description: `The icon prepended to the header title. Overrides the \\`icon\\`\n prop. Slot to be used when advanced functionality is required, such as \n adding a click handler on the icon.`,\n },\n 'title-addon': {\n description: `Custom content appended to the title. This can be used\n to add additional information or controls related to the title.`,\n },\n}","export const propDefinitions = {\n hideMobileToggle: {\n default: false,\n description: `If \\`true\\`, the mobile toggle button will be hidden. Use\n the \\`mobile-open\\` prop to control the mobile navigation open state\n instead.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n mobileOpen: {\n default: false,\n description: `If \\`true\\`, the mobile navigation is open. This is only\n applicable on tablet or mobile page widths.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n mobileToggleText: {\n default: 'Menu',\n description: `The text to be displayed on the mobile toggle button.`,\n type: String,\n typeDef: 'string',\n },\n navData: {\n default: () => [],\n description: `The navigation data to be displayed.`,\n type: Array,\n typeDef: `\n Simple Structure:\n {\n // If true, positions the nav item at the end (right for horizontal, bottom for vertical) and treats as an external link\n external?: boolean,\n // Name of the icon (dynamically loaded) or IconComponent itself\n icon?: string | IconComponent,\n // Unique ID for the nav item\n id: string,\n // Nested nav items. Only one level deep is supported\n navItems?: NavItem[],\n // Text to display for the nav item\n text: string,\n // Router path, Router object, or absolute URL. When navItems are present, this is ignored.\n to?: string | object,\n // Set the desired behavior of a link. _self, _blank, _parent, _top can be used.\n target?: string\n }\n\n -- or --\n\n Admin Menu Builder Structure:\n {\n // Name of the icon (dynamically loaded) or IconComponent itself\n icon?: string | IconComponent,\n // Unique ID for the nav item\n id: string,\n metaData?: {\n // If true, positions the nav item at the end (right for horizontal, bottom for vertical) and treats as an external link\n external?: boolean,\n },\n // Nested nav items. Only one level deep is supported\n navItems?: NavItem[],\n resource?: {\n // Router path, Router object, or absolute URL. When navItems are present, this is ignored.\n url: string\n },\n // Text to display for the nav item\n text: string,\n // Set the desired behavior of a link. _self, _blank, _parent, _top can be used.\n target?: string\n }`,\n },\n router: {\n default: null,\n description: `Vue Router instance. This is used to highlight the active\n navigation item.`,\n type: Object,\n typeDef: `Router`,\n },\n title: {\n default: undefined,\n description: `The title to display on the desktop navigation.`,\n type: String,\n typeDef: 'string',\n },\n titleIcon: {\n default: undefined,\n description: `Icon to be display on the desktop navigation if \\`title\\` is\n not provided, or as the toggle icon for mobile navigation. This can be the\n string name (dynamically loaded) or an actual IconComponent.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n titleUrl: {\n default: undefined,\n description: `When provided, turns the desktop title into a link to the\n provided URL.`,\n type: String,\n typeDef: 'string',\n },\n}\n\nexport const emitDefinitions = {\n 'mobile-toggle': {\n description: `Emitted when the mobile toggle button is clicked. This\n should be used to control the mobile navigation open state.`\n },\n 'nav-link-clicked': {\n description: `Emitted when a navigation item is clicked. Emits the event\n (\\`ev\\`) and the navigation item (\\`payload\\`). Actual navigation is\n already done by the component, but this can be used to perform any\n additional actions on navigation.`,\n payloadType: `{ ev, payload }`,\n }\n}\n\nexport const slotDefinitions = {\n 'additional-nav-option': {\n description: `The additional navigation option to be displayed at the right\n (for desktop version) or bottom (for mobile version) of the navigation.`\n }\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n disabled: {\n default: false,\n description: 'Disables the BsInlineTab.',\n type: Boolean,\n typeDef: 'boolean',\n },\n linkTo: {\n default: undefined,\n description: 'Pass in a url to convert a BsInlineTab into an anchor tag.',\n type: String,\n typeDef: 'string',\n },\n selected: {\n default: false,\n description: 'Selects the BsInlineTab manually. Only required when manually \\\n handling selection state, as opposed to using v-model on BsInlineTabs.',\n type: Boolean,\n typeDef: 'boolean',\n },\n type: {\n default: 'button',\n description: 'The button type attribute.',\n type: String,\n typeDef: `'button' | 'submit' | 'reset'`,\n typeOptions: ['button', 'submit', 'reset'],\n validator(val) {\n return propDefinitions.type.typeOptions.includes(val)\n }\n },\n value: {\n default: undefined,\n description: 'Required when using v-model on BsInlineTabs. The value of this \\\n BsInlineTab.',\n type: [String, Object, Number],\n typeDef: 'string | object | number',\n },\n variant: {\n default: undefined,\n description: 'Use variant=\"white\" to render the BsInlineTab with a white \\\n background. Alternatively, you can set this once at the BsInlineTabs level.',\n type: String,\n typeDef: `'' | 'white'`,\n typeOptions: ['', 'white'],\n validator(val) {\n return propDefinitions.variant.typeOptions.includes(val)\n }\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: 'Content of the tab.',\n slotProps: {\n isSelected: {\n description: 'Whether the current BsInlineTab is selected.',\n typeDef: 'boolean',\n }\n }\n }\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n as: {\n default: 'div',\n description: 'Renders the BsInlineTabs root element as the given html tag, e.g. ul.',\n type: String,\n typeDef: 'string',\n },\n disabled: {\n default: false,\n description: 'Disables every BsInlineTab in the group.',\n type: Boolean,\n typeDef: 'boolean',\n },\n matcher: {\n default: 'id',\n description: 'Only needed when your model is an object, and that object has \\\n no \\'id\\' key (or the id key is not unique). Used to derive selection \\\n state, based on object equality. Provide either: A) the unique object key \\\n that should be used or, B) a function that receives the object and returns \\\n a value that should be used for the equality check.',\n type: [String, Function],\n typeDef: 'string | function',\n },\n multiple: {\n default: false,\n description: 'Allows multiple selections.',\n type: Boolean,\n typeDef: 'boolean',\n },\n variant: {\n default: undefined,\n description: 'Use variant=\"white\" to render every child BsInlineTab with a \\\n white background. Alternatively, you can set this on each child BsInlineTab.',\n type: String,\n typeDef: `'' | 'white'`,\n typeOptions: ['', 'white'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n },\n },\n}\n\nexport const emitDefinitions = {\n 'update:model-value': {\n description: 'Fires when v-model has been updated. Emits the current \\\n BsInlineTab selections.'\n }\n}\n\nexport const slotDefinitions = {\n default: {\n description: 'Slot in any BsInlineTab children.'\n }\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n alert: {\n default: false,\n description: `Whether or not this is an \"alert\" type modal. Adds\n \\`role=\"alertdialog\"\\` instead of just \\`\"dialog\"\\``,\n type: Boolean,\n typeDef: 'boolean',\n },\n bodyBackgroundContrast: {\n default: false,\n description: `Whether or not to add a background to the body.\n Should only be used when also using a header and/or footer.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n closeButton: {\n default: true,\n description: `Whether or not to include a \"close\" button at the top of\n modal content.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n footerBorder: {\n default: false,\n description: `Whether or not to add a border to the footer.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n fullHeight: {\n default: false,\n description: `Removes the vertical padding from the modal content and\n removes header/footer. Essentially makes the body full-height.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n fullWidth: {\n default: false,\n description: `Removes the horizontal padding from the modal content.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n headerBorder: {\n default: false,\n description: `Whether or not to add a border to the header.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n modalId: {\n default: undefined,\n description: `Sets the \\`id\\` attribute of the modal element and this\n value is emitted when closing the modal.`,\n type: String,\n typeDef: 'string',\n },\n preloaded: {\n default: false,\n description: `If \\`true\\`, the content will always be rendered via\n \\`v-show\\` rather than \\`v-if\\`.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n shown: {\n default: true,\n description: `Whether or not the element should be visible. Acts as a\n \\`v-if\\` over the content (unless \\`preloaded\\`). Defaults to \\`true\\`\n so the transition would play on mount if desired.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n size: {\n default: 'base',\n description: `Sets the initial size and style of the modal.`,\n type: String,\n typeDef: `'' | 'base' | 'sm' | 'lg'`,\n typeOptions: ['', 'base', 'sm', 'lg'],\n validator: (value) => {\n return ['', 'base', 'sm', 'lg'].includes(value)\n },\n },\n subtitle: {\n default: undefined,\n description: `The subtitle of the modal. This will be rendered in a\n heading tag at the top of the modal below the title.`,\n type: String,\n typeDef: 'string',\n },\n title: {\n default: undefined,\n description: `The title of the modal. This will be rendered in a heading\n tag at the top of the modal. If the 'title' slot alternative is being\n used, this prop will be overwritten. **Note:** If no title is set,\n \\`aria-label\\` must be added on this component to satisfy accessibility\n requirements.`,\n type: String,\n typeDef: 'string',\n },\n // DEPRECATED\n enterControlled: {\n default: undefined,\n deprecated: true,\n },\n enterTrigger: {\n default: undefined,\n deprecated: true,\n },\n leaveTrigger: {\n default: undefined,\n deprecated: true,\n },\n}\n\nexport const emitDefinitions = {\n 'close': {\n description: `Emits when the user clicks the \"close\" button, clicks the\n backdrop or presses the \"Escape\" key. The \\`modalId\\` prop is emitted\n along with this event.`,\n payloadType: 'string',\n },\n 'x-clicked-close': {\n description: `Emits when the user clicks the \"close\" button. The \\`modalId\\`\n prop is emitted along with this event.`,\n payloadType: 'string',\n },\n 'escape-pressed-close': {\n description: `Emits when the user presses the \"Escape\" key. The \\`modalId\\`\n prop is emitted along with this event.`,\n payloadType: 'string',\n },\n 'backdrop-clicked-close': {\n description: `Emits when the user clicks the backdrop outside the modal. The\n \\`modalId\\` prop is emitted along with this event.`,\n payloadType: 'string',\n },\n 'after-enter': {\n description: `Vue Transition hook. Called when the enter transition has\n finished. The element should be fully rendered by now and may be\n manipulated (e.g. setting focus). Emits the element.`,\n },\n 'after-leave': {\n description: `Vue Transition hook. Called when the leave transition has\n finished. Emits the element.`\n },\n}\n\nexport const slotDefinitions = {\n 'default': {\n description: `The default slot is used to provide the body content of the\n modal.`\n },\n 'title': {\n description: `The named slot 'title' is used to provide a custom title\n beyond just text (e.g. including an icon). Alternative to the \\`title\\`\n prop.`\n },\n 'subtitle': {\n description: `The named slot 'subtitle' is used to provide a custom subtitle\n beyond just text (e.g. including an icon). Alternative to the \\`subtitle\\`\n prop.`\n },\n 'footer': {\n description: `Provide a custom footer.`\n }\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n action: {\n default: '',\n description: `Action section text. Not used if the \\`action\\` slot is\n provided.`,\n type: String,\n typeDef: 'string'\n },\n actionIcon: {\n default: '',\n description: `Icon to show with the action text. This can be the string name\n (dynamic load) or an actual IconComponent. Not used if the \\`action\\` slot\n is provided.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n company: {\n default: '',\n description: `Company name.`,\n type: String,\n typeDef: 'string'\n },\n email: {\n default: '',\n description: `Email address.`,\n type: String,\n typeDef: 'string'\n },\n imageSize: {\n default: 'lg',\n description: `Profile image size.`,\n type: String,\n typeDef: 'xs|sm|md|lg|xl',\n typeOptions: ['xs', 'sm', 'md', 'lg', 'xl'],\n validator(value) {\n return propDefinitions.imageSize.typeOptions.includes(value)\n }\n },\n imageSrc: {\n default: '',\n description: `Profile image url.`,\n type: String,\n typeDef: 'string'\n },\n initials: {\n default: '',\n description: `Initials to display if no image is provided.`,\n type: String,\n typeDef: 'string'\n },\n jobTitle: {\n default: '',\n description: `Job title.`,\n type: String,\n typeDef: 'string'\n },\n layout: {\n default: 'vertical',\n description: `Profile card layout`,\n type: String,\n typeDef: 'horizontal|vertical',\n typeOptions: ['horizontal', 'vertical'],\n validator(value) {\n return propDefinitions.layout.typeOptions.includes(value)\n }\n },\n linkTo: {\n default: '',\n description: `Pass in the profile URL (to enable client-side routing, pass\n the Vue router instance into \\`router\\` prop).`,\n type: String,\n typeDef: 'string'\n },\n miscMeta: {\n default: '',\n description: `Miscellaneous text which appears last. Not used if the\n \\`misc\\` slot is provided.`,\n type: String,\n typeDef: 'string'\n },\n miscMetaIcon: {\n default: '',\n description: `Icon to show with the misc text. This can be the string name\n (dynamic load) or an actual IconComponent. Not used if the \\`misc\\` slot\n is provided.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n profileName: {\n default: '',\n description: `Profile subject's name.`,\n type: String,\n typeDef: 'string'\n },\n router: {\n default: undefined,\n description: `Pass in the Vue router instance to enable client-side routing\n (applicable only when \\`linkTo\\` is provided).`,\n type: Object,\n typeDef: 'Router'\n },\n // DEPRECATED\n /** @DEPRECATED in favor of linkTo */\n href: {\n default: undefined,\n deprecated: true,\n }\n}\n\nexport const emitDefinitions = {\n 'action-toggled': {\n description: `Emitted when the optional action button is clicked.`\n }\n}\n\nexport const slotDefinitions = {\n action: {\n description: `Custom action section of the profile. Will replace the\n \\`actionIcon\\` and \\`action\\` props.`\n },\n misc: {\n description: `Custom misc section of the profile. Will replace the\n \\`miscMetaIcon\\` and \\`misc\\` props.`\n }\n}\n","export const propDefinitions = {\n collapsed: {\n default: false,\n description: `If \\`true\\`, the navigation is collapsed to show only icons.\n This prop can be used with v-model:collapsed for two-way binding.\n Note: This only works when variant is set to 'collapsible'.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n mobileOpen: {\n default: false,\n description: `If \\`true\\`, the mobile navigation is open. This is only\n applicable on tablet or mobile page widths.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n navData: {\n default: () => [],\n description: `The navigation data to be displayed.`,\n type: Array,\n typeDef: `\n Simple Structure:\n {\n // If true, creates a divider-only section without toggle button or title (only when navItems present)\n dividerOnly?: boolean,\n // If true, styles the nav item as app links (used on digital transformation project)\n appLinks?: boolean,\n // If true, positions the nav item at the end (right for horizontal, bottom for vertical) and treats as an external link\n external?: boolean,\n // Name of the icon (dynamically loaded) or IconComponent itself\n icon?: string | IconComponent,\n // Unique ID for the nav item\n id: string,\n // Nested nav items. Only one level deep is supported\n navItems?: NavItem[],\n // Text to display for the nav item (not shown when dividerOnly is true)\n text: string,\n // Router path, Router object, or absolute URL. When navItems are present, this is ignored.\n to?: string | object,\n // Set the desired behavior of a link. _self, _blank, _parent, _top can be used.\n target?: string\n }\n\n -- or --\n\n Admin Menu Builder Structure:\n {\n // Name of the icon (dynamically loaded) or IconComponent itself\n icon?: string | IconComponent,\n // Unique ID for the nav item\n id: string,\n metaData?: {\n // If true, positions the nav item at the end (right for horizontal, bottom for vertical) and treats as an external link\n external?: boolean,\n },\n // Nested nav items. Only one level deep is supported\n navItems?: NavItem[],\n resource?: {\n // Router path, Router object, or absolute URL. When navItems are present, this is ignored.\n url: string\n },\n // Text to display for the nav item\n text: string,\n // Set the desired behavior of a link. _self, _blank, _parent, _top can be used.\n target?: string\n }`,\n },\n router: {\n default: null,\n description: `Vue Router instance. This is used to highlight the active\n navigation item.`,\n type: Object,\n typeDef: `Router`,\n },\n variant: {\n default: 'wide',\n description: `The variant of the vertical navigation to be displayed.\n Note that when using \\`'narrow\\`' variant, the external links and slotted\n items will not be displayed. The \\`'collapsible'\\` variant enables the collapse\n feature with a toggle button.`,\n type: String,\n typeDef: `'wide'|'narrow'|'collapsible'`,\n validator: (value) => {\n return ['wide', 'narrow', 'collapsible'].includes(value)\n }\n },\n bgVariant: {\n default: '',\n description: `The background color variant of the vertical navigation.\n When set to \\`'bg-base'\\`, the background color will use \\`bg-base\\` instead\n of the default \\`bg-navy-base\\`. Leave empty or omit for default styling.`,\n type: String,\n typeDef: `''|'bg-base'`,\n validator: (value) => {\n return ['', 'bg-base'].includes(value)\n }\n },\n width: {\n default: '',\n description: `Custom width of the vertical navigation. This will override\n the \\`variant\\` prop.`,\n type: String,\n typeDef: 'string',\n },\n sticky: {\n default: false,\n description: `If \\`true\\`, the navigation will use sticky positioning instead\n of fixed positioning on desktop viewports (min-width: 1166px). This is primarily\n used in combination with the App Header component.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n}\n\nexport const emitDefinitions = {\n 'nav-link-clicked': {\n description: `Emitted when a navigation item is clicked. Emits the event\n (\\`ev\\`) and the navigation item (\\`payload\\`). Actual navigation is\n already done by the component, but this can be used to perform any\n additional actions on navigation.`,\n payloadType: `{ ev, payload }`,\n },\n 'update:collapsed': {\n description: `Emitted when the collapsed state changes. Used for v-model:collapsed binding.`,\n payloadType: `boolean`,\n }\n}\n\nexport const slotDefinitions = {\n 'top-content': {\n description: `Content to be displayed at the very top of the navigation list.\n Useful for adding components like inputs, selects, or other custom elements.`\n },\n 'end-items': {\n description: `Additional navigation items to be displayed at the bottom\n of the navigation.`\n }\n}","import { onMounted, ref, useId } from 'vue'\n\n/**\n * Generates unique ids for use in component markup.\n * Refs are initialized with empty strings and populated with uuids on mount to avoid SSR / hydration mismatch issues.\n *\n * @param {number} quantity how many ids to generate - defaults to 1\n * @returns {Array} array of refs with generated ids\n */\nexport function useGenIdAttrs(quantity = 1) {\n const ids = []\n for (let i = 0; i < quantity; i++) {\n ids.push(ref(useId()))\n }\n\n return ids\n}\n","import { ref, onMounted, watch, computed } from 'vue'\n\n/**\n * Notifies about the usage of a deprecated prop.\n *\n * @param {object} props Props object.\n * @param {string} propName Deprecated prop name.\n * @param {string} [newPropName] Replacement prop name. If not provided, the\n * warning will not include a suggestion for a new prop.\n * @param {string} [customMessage] Custom message to display in the warning.\n */\nexport function useDeprecatedProp(props, propName, newPropName, customMessage) {\n if (props[propName] !== undefined) {\n let warning = `[Deprecated] The prop \"${propName}\" is deprecated and will be removed in future versions.`\n if (newPropName) {\n warning += ` Please use \"${newPropName}\" instead.`\n }\n if (customMessage) {\n warning += ` ${customMessage}`\n }\n console.warn(warning)\n }\n}\n\n/**\n * Returns a computed property which returns the new or deprecated prop value.\n *\n * @param {object} props Props object.\n * @param {string} propName Deprecated prop name.\n * @param {string} newPropName Replacement prop name.\n * @returns {computed} Computed property that returns the value of the\n * deprecated prop or the new prop.\n */\nexport function useDeprecatedPropActual(props, propName, newPropName) {\n return computed(() => props[propName] || props[newPropName])\n}\n\n/**\n * Helps handle deprecated transition props.\n *\n * @param {object} props Props object.\n * @returns {ref} transition Ref that indicates the transition state.\n */\nexport function useDeprecatedTransition(props) {\n const transition = ref(false)\n\n onMounted(() => {\n // @Deprecated - Remove 'enterControlled' and 'enterTrigger' in future release\n if (props.enterControlled) {\n transition.value = props.enterTrigger\n } else {\n transition.value = props.shown\n }\n })\n\n watch(() => props.shown, (value) => {\n transition.value = value\n })\n\n // @Deprecated - Remove in future release\n watch(() => props.enterTrigger, (value) => {\n transition.value = value\n })\n\n // @Deprecated - Remove in future release\n watch(() => props.leaveTrigger, (value) => {\n // Nothing happened in previous version if 'leaveTrigger' is false\n if (value) {\n transition.value = false\n }\n })\n\n return { transition }\n}\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-accordion.js'\nimport { computed, ref } from 'vue'\nimport { useGenIdAttrs } from '../../composables/genId.js'\nimport { BsIconCaretDown, BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport { useDeprecatedProp } from '../../composables/deprecated.js'\n\nconst props = defineProps(propDefinitions)\nuseDeprecatedProp(props, 'headingLevel', undefined, '\\'aria-level\\' and \\'role=heading\\' are no longer set on the header text.')\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst containerRef = ref(null)\nconst isOpen = ref(false)\n\nconst [ containerId ] = useGenIdAttrs()\n\nconst contentId = computed(() => containerId.value + '-content')\nconst headingId = computed(() => containerId.value + '-title')\n\nconst openItemMatch = computed(() => {\n return (props.openItemId && props.openItemId === containerId.value) || props.openItem === true\n})\nconst showContent = computed(() => {\n return props.controlled ? openItemMatch.value : isOpen.value\n})\n\nfunction handleToggled() {\n emit('toggled', containerId.value)\n if (!props.controlled) isOpen.value = !isOpen.value\n}\n</script>\n\n<template>\n<div :id=\"containerId\" ref=\"containerRef\" class=\"bs-accordion\" data-component=\"bs-accordion\" :data-stacked=\"stacked\">\n <header part=\"header\" :data-open=\"showContent\">\n <button\n :aria-controls=\"contentId\"\n :aria-expanded=\"showContent\"\n class=\"bs-accordion-toggle\"\n type=\"button\"\n @click=\"handleToggled\"\n >\n <span v-if=\"icon || $slots.icon\" data-position=\"start\" style=\"display: inline-flex;\">\n <slot name=\"icon\">\n <BsIcon v-if=\"typeof icon === 'string'\" :name=\"icon\" />\n <component v-else :is=\"icon\" />\n </slot>\n </span>\n <span :id=\"headingId\">\n <slot name=\"header\">\n {{ headerText }}\n </slot>\n </span>\n <BsIconCaretDown size=\"md\" data-position=\"end\" />\n </button>\n </header>\n <div\n :aria-labelledby=\"headingId\"\n class=\"bs-accordion-content\"\n :data-open=\"showContent\"\n :id=\"contentId\"\n part=\"content\"\n role=\"region\"\n >\n <div>\n <slot />\n </div>\n </div>\n</div>\n</template>\n","import { ref, computed, watch, unref } from 'vue'\n\nconst TAG_BY_PROP = {\n href: 'a',\n linkTo: 'a',\n onclick: 'button',\n onClick: 'button',\n type: 'button'\n}\n\n/**\n * Determines correct tag and attrs for components that can be rendered\n * as `<button>` OR `<a>` (OR another specified default) tag\n * (e.g. BsButton, BsCircleButton, BsPill)\n * @param {object} props - Component props - return val of `defineProps`\n * @param {object} attrs - Component attrs - return val of `useAttrs`\n * @param {string} defaultTag - Tag to use if no other tag is determined. Defaults to 'button'.\n * @returns { rootTag: import('vue').Ref<string>, attrsToBind: object, btnRef: import('vue').Ref<HTMLElement> }\n*/\nexport function useButtonOrLink(props, attrs, defaultTag = 'button') {\n const rootTag = getTag(unref(props), attrs, defaultTag)\n const btnRef = ref()\n\n const additionalAttrs = computed(() => {\n const safeProps = unref(props)\n const isButton = rootTag.value === 'button'\n const attrsRet = {}\n if (isButton) {\n attrsRet.type = attrs.type || 'button'\n attrsRet.autocomplete = \"off\"\n if (safeProps.disabled) attrsRet.disabled = true\n } else if (safeProps.disabled) {\n attrsRet['aria-disabled'] = 'true'\n attrsRet.tabindex = \"-1\"\n }\n return attrsRet\n })\n\n const attrsToBind = computed(() => {\n const toBind = { ...attrs, ...additionalAttrs.value }\n toBind.href = hrefUrl.value\n return toBind\n })\n\n const hrefUrl = computed(() => {\n const safeProps = unref(props)\n if (safeProps.linkTo && typeof safeProps.linkTo === 'object') {\n return safeProps.router?.resolve(safeProps.linkTo)?.path || ''\n }\n return safeProps.linkTo || safeProps.href\n })\n\n watch(\n hrefUrl,\n newVal => {\n btnRef.value?.setAttribute('href', newVal)\n }\n )\n\n return { rootTag, attrsToBind, btnRef }\n}\n\nfunction getTag(props, attrs, defaultTag) {\n const foundProp = Object.keys(TAG_BY_PROP).find(key => getProp(props, attrs, key))\n return ref(TAG_BY_PROP[foundProp] || defaultTag)\n}\n\nfunction getProp(props, attrs, key) {\n return props[key] || attrs[key]\n}\n","import { computed, unref } from 'vue'\n\nexport function useClientRouter(props) {\n\n const propUrl = computed(() => {\n const safeProps = unref(props)\n if (safeProps.linkTo && typeof safeProps.linkTo === 'object') {\n return safeProps.router?.resolve(safeProps.linkTo)?.path || ''\n }\n return safeProps.linkTo || safeProps.href || ''\n })\n\n const hrefIsRelative = computed(() => propUrl.value?.startsWith?.('/') || false)\n\n const routeTo = computed(() => {\n const safeProps = unref(props)\n return hrefIsRelative.value && safeProps.router?.navigateTo || safeProps.router?.push || null\n })\n\n\n function onLinkClick(e) {\n const safeProps = unref(props)\n\n if (safeProps.disabled) {\n e.preventDefault()\n e.stopImmediatePropagation()\n return\n }\n if (!propUrl.value || !routeTo.value) return\n\n const anchorEl = e.target.closest('a')\n if (anchorEl.href === `${window.location.origin}${propUrl.value}`) {\n e.preventDefault()\n routeTo.value(propUrl.value)\n }\n }\n return { onLinkClick }\n}\n","<script setup>\nimport { computed, useAttrs, useSlots, unref } from 'vue'\nimport { useButtonOrLink } from '../../composables/buttonOrLink.js'\nimport { useClientRouter } from '../../composables/clientRouter.js'\nimport { BsIcon, BsIconCaretLeft, BsIconCaretRight, BsIconSmallCaretLeft, BsIconSmallCaretRight } from '@wwtdev/bsds-icons-vue3'\nimport { useDeprecatedProp } from '../../composables/deprecated.js'\nimport { propDefinitions } from './defs-circle-button.js'\n\n// Props\nconst props = defineProps(propDefinitions)\nuseDeprecatedProp(props, 'href', 'linkTo')\n\ndefineOptions({ inheritAttrs: false })\nconst $attrs = useAttrs()\nconst $slots = useSlots()\nconst { rootTag, attrsToBind, btnRef } = useButtonOrLink(props, $attrs)\nconst { onLinkClick } = useClientRouter(props)\n\n// Computed Properties\nconst accessibleLabelAttr = computed(() => {\n if (isTextBtn.value) return {};\n if (props.href) return { title: props.label }\n return { \"aria-label\": props.label }\n})\n\nconst hoverDirection = computed(() => {\n if (!props.hoverEffect) return undefined;\n return props.iconPosition\n})\n\nconst iconComputed = computed(() => {\n if (props.icon) {\n return props.icon\n }\n\n if (props.iconPosition === 'left') {\n if (props.textBtn || props.size === 'sm') {\n return BsIconSmallCaretLeft\n } else {\n return BsIconCaretLeft\n }\n } else {\n if (props.textBtn || props.size === 'sm') {\n return BsIconSmallCaretRight\n } else {\n return BsIconCaretRight\n }\n }\n})\n\nconst isTextBtn = computed(() => props.textBtn || !!$slots?.default)\n\nconst textLeft = computed(() => isTextBtn.value && props.iconPosition !== \"left\")\n\nconst textRight = computed(() => isTextBtn.value && props.iconPosition === \"left\")\n\nconst variantPrefixed = computed(() => props.variant ? `color-${props.variant}` : undefined)\n</script>\n\n<template>\n <component\n ref=\"btnRef\"\n :is=\"rootTag\"\n class=\"bs-circle-button\"\n :data-disabled=\"disabled\"\n :data-direction=\"hoverDirection\"\n :data-ghost=\"ghostBtn\"\n :data-size=\"size\"\n :data-text=\"isTextBtn\"\n :data-variant=\"variantPrefixed\"\n data-component=\"bs-circle-button\"\n v-bind=\"{ ...attrsToBind, ...accessibleLabelAttr }\"\n @click=\"onLinkClick\"\n >\n <span v-if=\"textLeft\">\n <slot>\n {{ label }}\n </slot>\n </span>\n <span class=\"bs-circle-button-icon\" role=\"presentation\">\n <slot name=\"icon\">\n <BsIcon v-if=\"typeof iconComputed === 'string'\" :name=\"iconComputed\" />\n <component v-else :is=\"iconComputed\" />\n </slot>\n </span>\n <span v-if=\"textRight\">\n <slot>\n {{ label }}\n </slot>\n </span>\n </component>\n</template>\n\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-alert.js'\nimport { BsIconCircleExclamation, BsIconClose, BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport BsCaretTextButton from '../caret-text-button/BsCaretTextButton.vue'\nimport { computed } from 'vue'\n\nconst props = defineProps(propDefinitions)\n\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst buttonVariant = computed(() => {\n switch (props.variant) {\n case 'success':\n return 'purple'\n case 'warning':\n return 'orange'\n case 'negative':\n return 'red'\n default:\n return 'blue'\n }\n})\n</script>\n\n<template>\n<div\n class=\"bs-alert\"\n :data-horizontal=\"horizontal ? 'true' : undefined\"\n :data-variant=\"variant\"\n role=\"alert\"\n>\n <div class=\"bs-alert-icon\">\n <slot name=\"icon\">\n <template v-if=\"icon\">\n <BsIcon v-if=\"typeof icon === 'string'\" :name=\"icon\" size=\"auto\" />\n <component v-else :is=\"icon\" size=\"auto\" />\n </template>\n <BsIconCircleExclamation v-else size=\"auto\" />\n </slot>\n </div>\n\n <div class=\"bs-alert-title\">\n <slot name=\"title\">\n {{ title }}\n </slot>\n </div>\n\n <div v-if=\"description || $slots.description\" class=\"bs-alert-description\">\n <slot name=\"description\">\n {{ description }}\n </slot>\n </div>\n\n <button\n v-if=\"!hideDismiss\"\n class=\"bs-alert-close\"\n aria-label=\"Close alert\"\n title=\"Close alert\"\n type=\"button\"\n @click=\"emit('close')\"\n >\n <BsIconClose />\n </button>\n\n <BsCaretTextButton\n v-if=\"actionLabel\"\n class=\"bs-alert-action\"\n :label=\"actionLabel\"\n :link-to=\"actionLinkTo\"\n :router=\"actionRouter\"\n size=\"sm\"\n :variant=\"buttonVariant\"\n @click=\"emit('action-click')\"\n />\n</div>\n</template>\n","<script setup>\nimport { propDefinitions } from './defs-badge.js'\nimport { ref, computed } from 'vue'\n\n// Props\nconst props = defineProps(propDefinitions)\n\n// Element Ref\nconst hostRef= ref(null)\n\n// Computed Properties\nconst countFmt = computed(() => {\n if (props.count === 0) return \"0\";\n if (!props.count || props.dot) return null;\n return props.count > props.countMax ? props.countMax + \"+\" : props.count.toString();\n})\n\nconst labelFmt = computed(() => {\n const base = hostRef.value?.textContent?.trim() || \"\";\n const ct = countFmt.value ? countFmt.value + \" \" : \"\";\n if (!ct && !props.dot) return base;\n const sfx = props.count !== 1 ? \"s\" : \"\";\n return `${base ? `${base}, ` : ''}${ct}${props.label}${sfx}`;\n})\n\n</script>\n\n<template>\n <span\n ref=\"hostRef\"\n :aria-label=\"labelFmt\"\n :class=\"{ 'bs-badge': dot || countFmt }\"\n :data-badge-color=\"color\"\n data-component=\"bs-badge\"\n :data-count=\"countFmt\"\n :data-position=\"position\"\n :data-show-zero=\"showZero\"\n :data-variant=\"variant\"\n role=\"status\"\n >\n <slot v-if=\"variant !== 'notext'\"/>\n </span>\n</template>\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-banner.js'\nimport { ref } from 'vue'\nimport { BsIconWarning, BsIconClose, BsIcon } from '@wwtdev/bsds-icons-vue3'\n\nconst props = defineProps(propDefinitions)\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst isDismissed = ref(false)\n\nfunction handleDismiss() {\n isDismissed.value = true\n emit('dismiss')\n}\n</script>\n\n<template>\n <div\n v-if=\"!isDismissed\"\n role=\"alert\"\n class=\"bs-banner\"\n data-component=\"bs-banner\"\n :data-variant=\"variant\"\n >\n <div class=\"bs-banner-content\">\n <div class=\"bs-banner-warning-icon\">\n <slot name=\"icon\">\n <template v-if=\"icon\">\n <BsIcon v-if=\"typeof icon === 'string'\" :name=\"icon\" size=\"md\" />\n <component v-else :is=\"icon\" size=\"md\" />\n </template>\n <BsIconWarning v-else size=\"md\" />\n </slot>\n </div>\n <p>\n <slot />\n </p>\n <button type=\"button\" title=\"Close Banner\" @click=\"handleDismiss\">\n <BsIconClose />\n </button>\n </div>\n </div>\n</template>\n","<script setup>\nimport { propDefinitions } from './defs-button.js'\nimport { useAttrs } from 'vue'\nimport { useButtonOrLink } from '../../composables/buttonOrLink.js'\nimport { useClientRouter } from '../../composables/clientRouter.js'\nimport { useDeprecatedProp } from '../../composables/deprecated.js'\n\nconst props = defineProps(propDefinitions)\nuseDeprecatedProp(props, 'href', 'linkTo')\n\ndefineOptions({ inheritAttrs: false })\nconst $attrs = useAttrs()\nconst { rootTag, attrsToBind, btnRef } = useButtonOrLink(props, $attrs)\nconst { onLinkClick } = useClientRouter(props)\n</script>\n\n<template>\n <component\n ref=\"btnRef\"\n :is=\"rootTag\"\n class=\"bs-button\"\n data-component=\"bs-button\"\n :data-ghost=\"ghostBtn\"\n :data-size=\"size\"\n :data-text=\"textBtn\"\n :data-variant=\"variant\"\n v-bind=\"attrsToBind\"\n @click=\"onLinkClick\"\n >\n <slot></slot>\n </component>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue'\n\n// Props\nconst props = defineProps({\n /** The number of characters that have been entered by the user. */\n charCount: Number,\n /** Pass value to show character count and set the maximum number of characters that are allowed to be submitted by the user. */\n charMax: Number,\n /** Applies error styles to the helper text. */\n error: {\n type: Boolean,\n default: false\n },\n /** Pass error text. Will be shown if `error` is `true`. */\n errorMsg: String,\n /** Pass single helper text. */\n hint: String,\n /** Adds an id to associate a hint to an input. */\n hintId: String\n})\n\n// Computed Properties\nconst hintMsg = computed(() => {\n return props.error ? (props.errorMsg || props.hint) : props.hint\n})\n\n</script>\n\n<template>\n<div class=\"bs-field-details\" data-component=\"bs-field-details\">\n <span v-if=\"hintMsg\"\n :id=\"hintId\"\n class=\"bs-hint\"\n :data-error=\"error\"\n >\n {{ hintMsg }}\n </span>\n\n <span v-if=\"charMax\"\n aria-description=\"character count over character limit for the preceding text field\"\n class=\"bs-character-count\"\n :data-error=\"props.charCount > props.charMax\"\n >\n {{ props.charCount || '0' }} / {{ props.charMax }}\n </span>\n</div>\n</template>\n","<script setup>\nimport { computed, useAttrs } from 'vue'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n error: {\n type: Boolean,\n default: false\n },\n hintId: String,\n modelValue: [String, Number],\n value: [String, Number],\n // DEPRECATED\n inputId: { default: undefined }\n})\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\nconst emit = defineEmits(['update:modelValue'])\nconst attrs = useAttrs()\n\nconst aria = computed(() => (\n { [props.error ? \"aria-errormessage\" : \"aria-describedby\"]: props.hintId }\n))\n\nfunction handleInput(e) {\n const val = attrs.type === 'number' ? parseInt(e.target['value']) : e.target['value']\n emit('update:modelValue', val)\n}\n</script>\n\n<template>\n<input\n class=\"bs-input\"\n data-component=\"bs-input\"\n :data-error=\"error\"\n :id=\"$attrs.id || inputId\"\n :value=\"value ?? modelValue\"\n @input=\"handleInput\"\n v-bind=\"aria\"\n/>\n</template>\n","/**\n * @typedef {(...args: any[]) => any} Func\n*/\n/**\n * @param {Func} func - function to debounce\n * @param {number} wait - milliseconds\n * @param {boolean} [immediate] - whether to run immediately\n * @returns {Func} debounced function\n */\nexport function debounce(func, wait, immediate) {\n let timeout;\n return function() {\n \tlet context = this, args = arguments;\n \tclearTimeout(timeout);\n \tif (immediate && !timeout) func.apply(context, args);\n \ttimeout = setTimeout(function() {\n \t\ttimeout = null;\n \t\tif (!immediate) func.apply(context, args);\n \t}, wait);\n };\n}\n// https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_debounce\n// this is a basic debounce function, it is not the same as lodash debounce but it should work for our use cases\n","<script setup>\nimport { ref, computed } from 'vue'\nimport { BsIconCalendar, BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport BsInput from '@components/input/BsInput.vue'\nimport BsInputAddon from '@components/input-addon/BsInputAddon.vue'\nimport { debounce } from '@/utils/debounce.js'\n\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false,\n },\n error: {\n type: Boolean,\n default: false,\n },\n inputId: {\n type: String,\n required: true\n },\n inputValue: {\n type: Object,\n default: null\n },\n inputValueFmt: {\n type: String,\n },\n listeners: {\n type: Object,\n default: () => ({})\n },\n placeholder: {\n type: String,\n default: 'Choose your date'\n },\n required: {\n type: Boolean,\n default: false,\n },\n showClear: {\n type: Boolean,\n default: false\n }\n})\n\nconst emit = defineEmits(['ui-focusin', 'ui-input', 'clear'])\n\nconst hiddenStart = ref(null)\nconst hiddenEnd = ref(null)\n\nfunction dispatchRangeChange(el) {\n const ev = new Event('change', { bubbles: true, cancelable: true })\n el.dispatchEvent(ev)\n}\n\nfunction handleRangeChange(e) {\n const { value } = e.target\n const [ start, end ] = value.split(/ to | - /)\n\n hiddenStart.value.value = start || ''\n hiddenEnd.value.value = end || ''\n dispatchRangeChange(hiddenStart.value)\n dispatchRangeChange(hiddenEnd.value)\n}\n\nconst handleRangeChangeDebounced = debounce(handleRangeChange, 1000)\n\nfunction handleRangeInput(e) {\n emit('ui-input')\n handleRangeChangeDebounced(e)\n}\n\nconst startListener = computed(() => {\n if (props.listeners.start) {\n return props.listeners.start\n }\n return {}\n})\n\nconst endListener = computed(() => {\n if (props.listeners.end) {\n return props.listeners.end\n }\n return {}\n})\n</script>\n\n<template>\n <BsInputAddon\n :disabled=\"disabled\"\n :error=\"error\"\n >\n <BsIconCalendar />\n <BsInput\n data-autowidth\n :disabled=\"disabled\"\n :id=\"inputId\"\n :model-value=\"inputValueFmt\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n @focusin=\"$emit('ui-focusin')\"\n @input=\"handleRangeInput\"\n @change=\"handleRangeChange\"\n />\n <input\n ref=\"hiddenStart\"\n type=\"hidden\"\n :disabled=\"disabled\"\n :id=\"`${inputId}-start`\"\n :model-value=\"inputValue.start\"\n v-on=\"startListener\"\n />\n <input\n ref=\"hiddenEnd\"\n type=\"hidden\"\n :disabled=\"disabled\"\n :id=\"`${inputId}-end`\"\n :model-value=\"inputValue.end\"\n v-on=\"endListener\"\n />\n <button\n v-show=\"showClear\"\n aria-label=\"Clear\"\n type=\"button\"\n class=\"bs-calendar-clear-btn\"\n @click=\"$emit('clear')\"\n >\n <BsIconClose size=\"sm\" class=\"bs-text-black\" />\n </button>\n </BsInputAddon>\n</template>","import { onBeforeUnmount, onMounted } from 'vue'\n\n/** @param {import('vue').Ref<HTMLElement>} containerRef template ref on el wrapping VDatePicker */\nexport function useCalendarWorkaround(containerRef) {\n /**\n * @param {HTMLElement} el\n * @returns {boolean}\n */\n function isNavBtn(el) {\n return (\n el?.classList?.contains?.('vc-arrow') &&\n (el.classList.contains('vc-prev') || el.classList.contains('vc-next'))\n )\n }\n\n /**\n * @param {KeyboardEvent[\"key\"]} key\n * @returns {boolean}\n */\n function isSpaceOrEnter(key) {\n return key === ' ' || key === 'Spacebar' || key === 'Enter'\n }\n\n /** @param {KeyboardEvent} e */\n function keydownWorkaround(e) {\n if (isNavBtn(e?.target) && isSpaceOrEnter(e?.key)) {\n e.preventDefault()\n }\n }\n\n onMounted(() => {\n containerRef.value?.addEventListener?.('keydown', keydownWorkaround)\n })\n\n onBeforeUnmount(() => {\n containerRef.value?.removeEventListener?.('keydown', keydownWorkaround)\n })\n}\n","import { onBeforeMount, onBeforeUnmount, watch } from 'vue'\n\nexport function useMatchMedia(query, handlerFn, watchList = []) {\n let mediaQuery\n\n onBeforeMount(() => {\n mediaQuery = window.matchMedia(query)\n mediaQuery.addEventListener('change', handlerFn)\n handlerFn(mediaQuery)\n })\n\n onBeforeUnmount(() => {\n mediaQuery.removeEventListener('change', handlerFn)\n mediaQuery = null\n })\n\n if (watchList.length) {\n watch(watchList, () => handlerFn(mediaQuery))\n }\n}\n","import { useAttrs, computed, unref } from 'vue'\n\nexport function useFilterAttrs(keysToFilter = []) {\n\n const attrs = useAttrs()\n\n const isFilterKey = key => unref(keysToFilter).includes(key)\n\n const attrEntries = computed(() => Object.entries(attrs))\n\n const filtered = computed(() => {\n return Object.fromEntries(\n attrEntries.value.filter(([key]) => isFilterKey(key))\n )\n })\n\n const remaining = computed(() => {\n return Object.fromEntries(\n attrEntries.value.filter(([key]) => !isFilterKey(key))\n )\n })\n\n return { filtered, remaining }\n}","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-calendar.js'\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { DatePicker as VDatePicker } from 'v-calendar'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsLabel from '../label/BsLabel.vue'\nimport BsInputDateSingle from './internal/BsInputDateSingle.vue'\nimport BsInputDateRange from './internal/BsInputDateRange.vue'\nimport { useCalendarWorkaround } from '@composables/calendarWorkaround.js'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useMatchMedia } from '@composables/matchMedia.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport 'v-calendar/style.css'\n\nconst MQ = '(min-width: 752px)'\n\nconst props = defineProps(propDefinitions)\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst calendar = ref(null)\nconst columns = ref(1)\nconst container = ref(null)\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\nconst steps = ref(1)\n\n// These fall outside the scope of this component's API but\n// can be passed through to v-calendar if needed... Do we need this? Not sure.\ndefineOptions({ inheritAttrs: false })\nconst { filtered: toChild, remaining: toRoot } = useFilterAttrs([\n 'attributes',\n 'data-cy',\n 'expanded',\n 'first-day-of-week',\n 'locale',\n 'masks',\n 'rows',\n 'trim-weeks',\n])\n\nconst disabledDatesComputed = computed(() =>\n props.exclusiveDates?.length\n ? getBlackoutDates(props.exclusiveDates)\n : props.disabledDates\n)\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst modifiers = computed(() => ({ range: props.isRange }))\nconst showClearBtn = computed(() => props.showClear && props.modelValue && !props.disabled)\nconst showFieldDetails = computed(() => Boolean(props.error && props.errorMsg || props.hint))\nconst stepRef = computed(() => props.step)\nconst variantRef = computed(() => props.variant)\n\nuseCalendarWorkaround(container) // Workaround for v-calendar bug - remove when fixed\nuseMatchMedia(\n MQ,\n (e) => columns.value = e?.matches && variantRef.value == '2-col' ? 2 : 1,\n [ variantRef ]\n)\nuseMatchMedia(\n MQ,\n (e) => steps.value = e?.matches && variantRef.value == '2-col' ? stepRef.value : 1,\n [ stepRef, variantRef ]\n)\n\nonMounted(() => {\n if (!props.inputMode) setTimeout(setNavButtonLabels, 100)\n})\n\nwatch(() => calendar.value?.popoverRef?.isVisible, (visible) => {\n if (visible) setTimeout(setNavButtonLabels, 100)\n})\n\nfunction formatInput(inputValue) {\n if (props.isRange && inputValue.start && inputValue.end) {\n return `${inputValue.start} to ${inputValue.end}`\n } else if (!props.isRange && inputValue) {\n return inputValue\n } else {\n return ''\n }\n}\n\nfunction getBlackoutDates(exclusiveDates) {\n const toDisable = []\n const ONE_DAY = 24 * 60 * 60 * 1000\n for (let i = 0; i < exclusiveDates.length; i++) {\n const date = exclusiveDates[i]\n if (i === 0) {\n toDisable.push({ start: null, end: new Date(date.getTime() - ONE_DAY) })\n }\n if (i > 0 && date.getTime() - exclusiveDates[i - 1].getTime() > ONE_DAY) {\n toDisable.push({\n start: new Date(exclusiveDates[i - 1].getTime() + ONE_DAY),\n end: new Date(date.getTime() - ONE_DAY),\n })\n }\n if (i === exclusiveDates.length - 1) {\n toDisable.push({ start: new Date(date.getTime() + ONE_DAY), end: null })\n }\n }\n return toDisable\n}\n\nfunction handleRangeBlur(e) {\n if (!props.isRange || container.value.contains(e.relatedTarget)) return\n calendar.value.hidePopover()\n}\n\nfunction setNavButtonLabels() {\n const prev = container.value.querySelector('button.vc-prev')\n const next = container.value.querySelector('button.vc-next')\n if (prev) prev.setAttribute('aria-label', 'Previous month')\n if (next) next.setAttribute('aria-label', 'Next month')\n}\n</script>\n<template>\n <div ref=\"container\"\n class=\"bs-calendar\"\n data-component=\"bs-calendar\"\n :data-range=\"isRange\"\n @focusout=\"handleRangeBlur\"\n v-bind=\"toRoot\"\n >\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <VDatePicker\n ref=\"calendar\"\n :columns=\"columns\"\n :disabled-dates=\"disabledDatesComputed\"\n :max-date=\"maxDate\"\n :min-date=\"minDate\"\n mode=\"date\"\n :model-value=\"modelValue\"\n :model-modifiers=\"modifiers\"\n :popover=\"{ visibility: 'focus'}\"\n :rows=\"1\"\n :step=\"steps\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n v-bind=\"toChild\"\n >\n <template #default=\"{ inputValue, inputEvents, showPopover }\" v-if=\"inputMode\">\n\n <BsInputDateSingle v-if=\"!isRange\"\n :disabled=\"disabled\"\n :error=\"error\"\n :input-id=\"inputIdAttr\"\n :listeners=\"inputEvents\"\n :model-value=\"formatInput(inputValue)\"\n :placeholder=\"placeholder\"\n :show-clear=\"showClearBtn\"\n :required=\"required\"\n @clear=\"$emit('clear')\"\n />\n\n <BsInputDateRange v-else\n :disabled=\"disabled\"\n :error=\"error\"\n :input-id=\"inputIdAttr\"\n :input-value=\"inputValue\"\n :input-value-fmt=\"formatInput(inputValue)\"\n :listeners=\"inputEvents\"\n :placeholder=\"placeholder\"\n :show-clear=\"showClearBtn\"\n :required=\"required\"\n @ui-focusin=\"showPopover\"\n @ui-input=\"showPopover\"\n @clear=\"$emit('clear')\"\n />\n\n </template>\n </VDatePicker>\n <BsFieldDetails v-if=\"showFieldDetails\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint\"\n :hint-id=\"hintId\"\n />\n </div>\n</template>\n\n<style>\n/* ------------- Input/Toggle ------------- */\n\n.bs-calendar :where(.bs-input-addon .bs-icon) {\n padding-inline: .75rem .5rem;\n width: 2.25rem;\n}\n\n.bs-calendar :where(.bs-input-addon input) {\n padding-inline-start: 0;\n}\n\n/* ------------- Calendar Base + Container ------------- */\n\n.bs-calendar {\n --bs-cal-color: var(--bs-ink-base);\n --bs-cal-focus-ring-color: var(--bs-blue-400);\n --bs-cal-highlight-content-hover-color: var(--bs-gray-500);\n --bs-cal-radius: 0px;\n --bs-cal-text-sm: 0.875rem;\n --bs-cal-weekday-color: var(--bs-ink-light);\n --bs-cal-width-day: auto;\n --bs-cal-width: 100%;\n\n --bs-cal-day-padding: 0;\n --bs-cal-day-bg-selected: var(--bs-blue-400);\n --bs-cal-day-bg-betweens: var(--bs-blue-100);\n --bs-cal-day-bg-tentative-start: var(--bs-blue-400);\n --bs-cal-day-hover-bg: var(--bs-blue-100);\n --bs-cal-day-hover-bg-betweens: var(--bs-blue-200);\n --bs-cal-day-hover-bg-selected: var(--bs-blue-300);\n}\n\n.bs-calendar :is(.vc-popover-content-wrapper, .vc-light, .vc-dark),\n.bs-calendar :is(.vc-popover-content-wrapper, .vc-light, .vc-dark) * {\n --vc-bg: var(--bs-bg-base-to-light);\n --vc-color: var(--bs-cal-color); /* Text color */\n --vc-day-content-disabled-color: var(--bs-ink-disabled); /* Disabled date text color */\n --vc-day-content-hover-bg: var(--bs-cal-day-hover-bg); /* Day hover bg color */\n --vc-focus-ring: 0 0 0 2px var(--bs-cal-focus-ring-color); /* Focus ring box shadow */\n --vc-font-family: 'Roobert', sans-serif;\n --vc-font-medium: var(--vc-font-normal);\n --vc-header-arrow-color: var(--bs-ink-base); /* Nav Arrow color */\n --vc-header-arrow-hover-bg: var(--bs-bg-medium); /* Nav Arrow hover bg color */\n --vc-header-title-color: var(--bs-ink-base);\n --vc-highlight-light-bg: var(--bs-cal-day-bg-betweens); /* Bg Color for dates between start and end date */\n --vc-highlight-light-content-color: var(--bs-ink-base); /* Text color for dates between start and end date */\n --vc-highlight-outline-bg: var(--bs-cal-day-bg-tentative-start); /* Bg color for Start and End UNCONFIRMED dates */\n --vc-highlight-outline-border: transparent ;\n --vc-highlight-outline-color: var(--bs-ink-blue);\n --vc-highlight-outline-content-color: var(--bs-ink-white);\n --vc-highlight-solid-bg: var(--bs-cal-day-bg-selected); /* Bg Color for SELECTED day */\n --vc-popover-content-border: transparent;\n --vc-rounded-lg: var(--bs-cal-radius);\n --vc-shadow-lg: var(--bs-shadow-contentMedium);\n --vc-text-sm: var(--bs-cal-text-sm);\n --vc-weekday-color: var(--bs-cal-weekday-color);\n}\n\n.bs-calendar :where(.vc-popover-content-wrapper, .vc-container, .vc-pane-layout) {\n width: var(--bs-cal-width);\n}\n\n/* Override focus ring and implement our own -- needed to accommodate the offset */\n\n.bs-calendar :where(.vc-day-content):is(:focus-visible, :focus-within, :focus) {\n box-shadow: none;\n}\n\n.bs-calendar :where(.vc-day-content):is(:focus-visible, :focus-within, :focus)::after {\n border-radius: 50%;\n border: 2px solid var(--bs-cal-focus-ring-color);\n bottom: auto;\n content: '';\n height: 2.375rem;\n left: auto;\n position: absolute;\n right: auto;\n top: auto;\n width: 2.375rem;\n z-index: 9999;\n}\n\n\n/* ------------- Calendar Header Row ------------- */\n\n.bs-calendar :where(.vc-header) {\n margin-block-start: 1.5rem;\n padding-inline: 1.5rem;\n}\n\n.bs-calendar :where(.vc-title) {\n font-size: inherit;\n}\n\n/* ------------- Calendar Rows ------------- */\n\n.bs-calendar :where(.vc-weeks) {\n padding-block: 1rem 1.5rem;\n padding-inline: 1rem;\n}\n\n/* ------------- Calendar Cells (Days, Weekday Letters) ------------- */\n\n.bs-calendar :where(.vc-weekday, .vc-day) {\n height: 2rem;\n padding-inline: var(--bs-cal-day-padding);\n width: var(--bs-cal-width-day);\n}\n\n.bs-calendar :where(.vc-highlight-content-light) {\n font-weight: var(--vc-font-medium);\n}\n\n.bs-calendar :where(.vc-highlight-content-light:hover) {\n color: var(--bs-cal-highlight-content-hover-color);\n}\n\n.bs-calendar :where(.vc-day:focus-within) {\n z-index: 10;\n}\n\n/* ------------- Calendar Day Content Circle (appears on hover, selected, focus, etc) ------------- */\n.bs-calendar :where(.vc-day-content, .vc-highlight) {\n height: 2rem;\n line-height: 2rem;\n width: 2rem;\n}\n\n/* Hover bg color on SELECTED date */\n.bs-calendar .vc-highlights ~ :where(.vc-day-content) {\n --vc-day-content-hover-bg: var(--bs-cal-day-hover-bg-selected);\n}\n\n/* Hover bg color on dates between start and end date */\n.bs-calendar .vc-highlights:where(:has(.vc-highlight-base-middle)) ~ :where(.vc-day-content) {\n --vc-day-content-hover-bg: var(--bs-cal-day-hover-bg-betweens);\n}\n\n/* ------------- Disabled dates ------------- */\n.bs-calendar :where(.vc-disabled, [aria-disabled=\"true\"]) {\n --bs-cal-day-hover-bg: transparent;\n --bs-cal-focus-ring-color: var(--bs-ink-disabled); /* Maybe - clear this w/ design */\n}\n\n\n/* ------------- Dark mode ------------- */\n\n:where(.dark) .bs-calendar {\n --bs-cal-color: var(--bs-white);\n --bs-cal-day-bg-betweens: var(--bs-royal-200);\n --bs-cal-day-bg-selected: var(--bs-royal-400);\n --bs-cal-day-bg-tentative-start: var(--bs-royal-400);\n --bs-cal-day-hover-bg-betweens: var(--bs-royal-300);\n --bs-cal-day-hover-bg-selected: var(--bs-plum-400);\n --bs-cal-day-hover-bg: var(--bs-royal-300);\n --bs-cal-highlight-content-hover-color: var(--bs-ink-base);\n --bs-cal-weekday-color: var(--bs-white);\n}\n\n/* ------------- Clear button ------------- */\n\n.bs-calendar-clear-btn {\n cursor: pointer;\n height: 100%;\n}\n.bs-calendar-clear-btn:focus {\n border-radius: .25rem;\n box-shadow: var(--focus-border) 0px 0px 0px 1px inset;\n z-index: 1;\n}\n\n/* ------------- Tablet/Destkop styles ------------- */\n@media (min-width: 752px) {\n .bs-calendar {\n --bs-cal-day-padding: 0.5rem;\n --bs-cal-radius: 0.25rem;\n --bs-cal-text-sm: 1.125rem;\n --bs-cal-width: max-content;\n --bs-cal-width-day: 3rem;\n }\n}\n</style>\n","<script setup>\n/**\n * @typedef {import('../Types.vue').Chart.Dataset} ChartDataset\n *\n * @typedef {Object} ChartTableRow\n * @property {string} rowLabel\n * @property {string} [rowLabelFmt]\n * @property {ChartTableCell[]} dataCells\n *\n * @typedef {Object} ChartTableCell\n * @property {string} datasetLabel\n * @property {number | string | null} value\n */\n\nimport { computed, onMounted, ref } from 'vue'\n\nconst props = defineProps({\n chartType: {\n type: String,\n required: true\n },\n data: {\n type: Array,\n required: true,\n },\n dataIdxLabels: {\n type: Array,\n default: () => []\n },\n tableTitle: {\n type: String,\n default: '',\n },\n xAxisType: {\n type: String,\n default: 'category',\n validator: (value) => ['category', 'linear', 'time'].includes(value),\n },\n xLabel: {\n type: String,\n default: 'X'\n },\n yLabel: {\n type: String,\n default: 'Y'\n },\n})\n\nconst mounted = ref(false)\n\nconst formatTimeVal = (timeVal) => {\n const date = new Date(timeVal)\n const timeStr = date.toTimeString().split(' ')[0]\n const dateStr = date.toDateString().split(' ').slice(1, 3).join(' ')\n return `${timeStr} (${dateStr})`\n}\n\nconst altLayout = computed(() => !props.dataIdxLabels?.length)\n\n/**\n * @param {ChartDataset[]} datasets\n * @returns {ChartTableRow[]}\n */\nfunction getBasicRows(datasets) {\n try {\n return datasets.map(ds => {\n const rowLabel = ds.label\n let dataCells = []\n // e.g., { x: 'Jan', y: 140 } - not guaranteed to have 1 data pt for every x tick\n if (ds.data.some(it => it?.x && it?.y)) {\n const xTickToYValue = ds.data.reduce((acc, d) => {\n acc[d.x] = d.y\n return acc\n }, {})\n dataCells = props.dataIdxLabels.map((tickPtLabel) => {\n const yValue = xTickToYValue[tickPtLabel] ?? null\n return { value: yValue }\n })\n } else {\n // e.g. just a number - should be 1 data pt for every x tick\n dataCells = ds.data.map((d) => ({ value: d }))\n }\n return { rowLabel, dataCells }\n })\n } catch(err) {\n return []\n }\n}\n\n/**\n * @param {ChartDataset[]} datasets\n * @returns {ChartTableRow[]}\n */\nfunction getAltRows(datasets) {\n try {\n const consolidatedIndices = datasets.reduce((acc, ds) => {\n const toAdd = ds.data.map(d => d?.x)\n return [ ...acc, ...toAdd ]\n }, [])\n\n const uniqueIndices = Array.from(new Set(consolidatedIndices))\n if (props.xAxisType === 'time' || props.xAxisType === 'linear') {\n uniqueIndices.sort((a,b) => {\n if (typeof a === 'string' && typeof b === 'string') {\n a = a.toLowerCase()\n b = b.toLowerCase()\n }\n if (a < b) return -1\n if (a > b) return 1\n return 0\n })\n }\n\n const rows = uniqueIndices.map((idx) => {\n const row = { rowLabel: idx }\n const rowData = []\n datasets.forEach((ds) => {\n const cell = { datasetLabel: ds.label }\n const dataPt = ds.data.find((d) => d.x === idx)\n cell.value = dataPt ? dataPt.y : null\n rowData.push(cell)\n })\n row.dataCells = rowData\n if (props.xAxisType === 'time') {\n row.rowLabelFmt = formatTimeVal(idx)\n }\n return row\n })\n\n return rows\n } catch(err) {\n return []\n }\n}\n\nconst tableRows = computed(() => altLayout.value ? getAltRows(props.data) : getBasicRows(props.data))\nconst table = computed(() => ({\n colspan: altLayout.value ? props.data.length + 1 : props.dataIdxLabels.length + 1,\n title: props.tableTitle,\n colHeadingFirst: altLayout.value ? props.xLabel : 'Dataset',\n colHeadings: altLayout.value ? props.data.map((ds) => ds.label) : props.dataIdxLabels,\n rows: tableRows.value\n}))\nconst tableReady = computed(() => mounted.value && !!tableRows.value?.length)\n\nonMounted(() => {\n mounted.value = true\n})\n</script>\n\n<template>\n<div class=\"bs-chart-table\" data-component=\"bs-chart-table\">\n <table :summary=\"table.title\" v-if=\"tableReady\">\n <thead>\n <tr>\n <th :colspan=\"table.colspan\">\n {{ table.title }}\n </th>\n </tr>\n <tr>\n <th scope=\"col\">\n {{ table.colHeadingFirst }}\n </th>\n <th v-for=\"colHeading in table.colHeadings\"\n :key=\"colHeading\"\n scope=\"col\"\n >\n {{ colHeading }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"row in table.rows\" :key=\"row.rowLabelFmt || row.rowLabel\">\n <th scope=\"row\">\n {{ row.rowLabelFmt || row.rowLabel }}\n </th>\n <td v-for=\"(c) in row.dataCells\"\n :key=\"`${row.rowLabelFmt || row.rowLabel}${c.datasetLabel}${c.value}`\"\n >\n {{ c.value }}\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n</template>\n","import { onMounted, onUnmounted } from 'vue'\n\n/**\n * Listens for keydown and calls the given function. Attaches the listener to\n * `document` by default unless `elRef` is given.\n *\n * @param {string[] | RegExp[]} keys Keys to listen for. This is the `key` property of the\n * KeyboardEvent (https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\n * @param {function} onKeydown Callback when keys are pressed.\n * @param {Ref} elRef Optional target ref where the listener will be\n * attached. If not given, will use `document`.\n */\nconst useKeydown = (keys, onKeydown, elRef = undefined) => {\n const handler = (ev) => {\n if (keys?.includes?.(ev.key) || keys?.some?.(k => k?.test?.(ev.key))) {\n onKeydown(ev)\n }\n }\n\n onMounted(() => {\n const element = elRef?.value ?? document\n element.addEventListener('keydown', handler)\n })\n\n onUnmounted(() => {\n const element = elRef?.value ?? document\n element.removeEventListener('keydown', handler)\n })\n}\nexport default useKeydown\n","import { onMounted, onBeforeUnmount, ref, watch } from 'vue'\nimport { Chart, Filler } from 'chart.js'\nimport 'chartjs-adapter-date-fns'\nimport _merge from 'lodash.merge'\nimport useKeydown from '../composables/keydown.js'\nimport { useMatchMedia } from '../composables/matchMedia.js'\nimport { debounce } from '@utils/debounce.js';\n\n/**\n * @typedef {import('../components/Types.vue').Chart.ChartType} ChartType\n * @typedef {import('../components/Types.vue').Chart.Config} ChartConfiguration\n * @typedef {import('../components/Types.vue').Chart.ConfigOptions} ChartConfigOptions\n * @typedef {import('../components/Types.vue').Chart.ConfigPlugins} ChartConfigPlugins\n * @typedef {import('../components/Types.vue').Chart.ConfigData} ChartConfigData\n * @typedef {import('../components/Types.vue').Chart.Dataset} ChartDataset\n * @typedef {import('../components/Types.vue').Chart.Color} Color\n * @typedef {import('../components/Types.vue').Chart.LegendOptions} LegendOptions\n * @typedef {import('../components/Types.vue').Chart.Plugin} Plugin\n * @typedef {import('../components/Types.vue').Chart.ComponentProps} BsChartProps\n */\n\nconst TICK_SIZE = 16\nconst TICK_SIZE_LG = 20\n\n/**\n *\n * @param {ChartType} type\n * @param {BsChartProps} props\n * @returns {Object}\n * @property {Ref<null>} canvasRef - Place this ref on the canvas element.\n * @property {Ref<null>} legendListRef - Place this ref on the ul element.\n *\n */\nexport function useChart(type, props) {\n const canvasRef = ref(null)\n const isDesktop = ref(false)\n const legendListRef = ref(null)\n const BREAKPOINT_QUERY = '(min-width: 1166px)'\n const MOBILE_TICK_SIZES = { tickSize: TICK_SIZE }\n const DESKTOP_TICK_SIZES = { tickSize: TICK_SIZE_LG }\n let chart\n let chartConfig\n\n function createChartConfig(type, props) {\n let chartSpecificMethod\n switch (type) {\n case 'bar':\n chartSpecificMethod = 'setBarChartConfigs'\n break;\n case 'line':\n chartSpecificMethod = 'setLineChartConfigs'\n break;\n // TODO:\n // case 'pie':\n // case 'donut':\n default:\n throw new Error(`Unsupported chart type: ${type}`)\n }\n\n return new BsChartConfigBuilder()\n .setCommonConfigs(props)\n .setCustomOptions(props)\n [chartSpecificMethod](props)\n .setPlugins([getHtmlLegendPlugin(legendListRef), Filler])\n .build()\n }\n\n function handleLegendItemToggle(e) {\n e.preventDefault()\n e.stopImmediatePropagation()\n const li = e.target.closest('li')\n if (li && chart) {\n const { labelIndex, datasetIndex } = li.dataset\n type === 'pie' || type === 'doughnut' ?\n chart.toggleDataVisibility(labelIndex) :\n chart.setDatasetVisibility(datasetIndex, !chart.isDatasetVisible(datasetIndex))\n chart.update()\n e.preventDefault()\n e.stopImmediatePropagation()\n refocusLegendItem(datasetIndex, labelIndex)\n }\n }\n\n function refocusLegendItem(datasetIndex, labelIndex) {\n // must query again bc list items are destroyed/recreated on update\n const sel = `[data-dataset-index=\"${datasetIndex}\"][data-label-index=\"${labelIndex}\"]`\n const item = legendListRef.value.querySelector(sel)\n item?.focus?.()\n }\n\n function registerChart(...chartElements) {\n if (!chartConfig || !canvasRef.value) return\n Chart.register(...chartElements)\n Chart.defaults.font.family = \"'Roobert', sans-serif\"\n chart = new Chart(canvasRef.value, chartConfig)\n }\n\n const updateConfigOpts = debounce(function (props) {\n if (!chartConfig) return\n chartConfig.updateOptions(props)\n chart.options = chartConfig.options\n chart.update()\n }, 100)\n\n const updateConfigData = debounce(function (props) {\n if (!chartConfig) return\n chartConfig.updateData(props)\n chart.data = chartConfig.data\n chart.update()\n }, 100)\n\n useMatchMedia(\n BREAKPOINT_QUERY,\n (e) => isDesktop.value = e?.matches,\n [ isDesktop ]\n )\n\n onMounted(() => {\n try {\n chartConfig = createChartConfig(type, props)\n legendListRef.value?.addEventListener('click', handleLegendItemToggle)\n } catch(err) {\n console.error('Error creating chart config', err)\n chartConfig = null\n }\n })\n\n useKeydown([' ', 'Enter'], handleLegendItemToggle, legendListRef)\n\n onBeforeUnmount(() => {\n legendListRef.value?.removeEventListener('click', handleLegendItemToggle)\n chart?.destroy()\n })\n\n watch([\n () => props.customOptions,\n () => props.showTooltips,\n () => props.showXGrid,\n () => props.showYGrid,\n () => props.stacked,\n () => props.xLabel,\n () => props.yLabel,\n () => props.yMin,\n () => props.yMax\n ], () => updateConfigOpts(props))\n\n watch(\n isDesktop,\n (isDesktopMatched) => updateConfigOpts(_merge(\n {},\n props,\n isDesktopMatched ? DESKTOP_TICK_SIZES : MOBILE_TICK_SIZES\n ))\n )\n\n watch(\n [\n () => props.data,\n () => props.dataIdxLabels,\n ],\n () => updateConfigData(props),\n { deep: true }\n )\n\n return {\n canvasRef,\n legendListRef,\n registerChart,\n }\n}\n\n/**\n * @param {HTMLUListElement} legendList\n * @returns {Plugin}\n */\nconst getHtmlLegendPlugin = (legendListRef) => ({\n id: 'htmlLegend',\n afterUpdate(chart) {\n // Remove old legend items\n legendListRef.value.innerHTML = ''\n legendListRef.value.style.setProperty('--cjs-legend-padding-inline', `${chart.scales.x.left}px`)\n\n // Reuse the built-in legendItems generator\n const legendItems = chart.options.plugins.legend.labels.generateLabels(chart);\n\n legendItems.forEach(it => {\n const li = document.createElement('li');\n li.setAttribute('tabindex', '0')\n li.dataset.datasetIndex = it.datasetIndex\n li.dataset.labelIndex = it.index\n\n // Color box\n const boxSpan = document.createElement('span');\n boxSpan.style.setProperty('--legend-item-box-fill', it.fillStyle)\n boxSpan.style.setProperty('--legend-item-box-stroke', it.strokeStyle)\n\n // Text\n const text = document.createTextNode(it.text);\n const textContainer = document.createElement('p');\n textContainer.style.setProperty('--legend-item-text-color', 'var(--bs-ink-base)')\n textContainer.style.setProperty('--legend-item-text-decoration', it.hidden ? 'line-through' : 'none')\n textContainer.appendChild(text);\n\n li.appendChild(boxSpan);\n li.appendChild(textContainer);\n legendListRef.value.appendChild(li);\n });\n }\n});\n\n\n/**\n * @param {number} i\n * @returns {Color}\n *\n * @description per last design discussion, we do not want to allow custom colors.\n * That was a while back though - if changes, we can add a prop to allow custom colors and handle here.\n */\nfunction getBackgroundColor(i, initialDivider = 1) {\n const DEFAULT_COLORS = [\n [0, 134, 234], // 0086ea\n [227, 28, 121], // e31c79\n [130, 18, 196], // 8212c4\n [153, 207, 247], // 99cfff\n [243, 196, 168], // f3c4a8\n [238, 40, 42], // ee282a\n [22, 47, 180], // 162fb4\n [197, 204, 235], // c5cceb\n [28, 0, 135], // 1c0087\n [251, 85, 14], // fb550e\n [203, 192, 218], // cbc0da\n [29, 30, 72], // 1d1e48\n [248, 169, 170], // f8a9aa\n [164, 153, 207], // a499cf\n [99, 66, 145], // 634291\n [224, 197, 239], // e0c5ef\n [228, 94, 155] , // e45e9b\n [83, 101, 196], // 5365c4\n [246, 203, 224], // f6cbe0\n [161, 84, 208], // a154d0\n [241, 83, 85], // f15355\n [10, 11, 25], // 0a0b19\n [201, 202, 217], // c9cad9\n [85, 87, 117], // 555775\n ]\n\n const color = DEFAULT_COLORS[i % DEFAULT_COLORS.length]\n const divider = Math.floor(i / DEFAULT_COLORS.length) + initialDivider\n return `rgba(${color.toString()}, ${1 / divider})`\n}\n\n/**\n * @param {number} i\n * @returns {Color}\n */\nfunction getBorderColor(i) {\n // So far this is same as bg color across chart type designs. Subject to change.\n return getBackgroundColor(i)\n}\n\nfunction getCommonOptionsPermissive(chartProps) {\n return {\n maintainAspectRatio: false,\n plugins: {\n tooltip: {\n enabled: chartProps.tooltipsEnabled\n }\n },\n }\n}\n\nfunction getCommonOptionsStrict() {\n return {\n plugins: {\n legend: {\n display: false, // we use a custom, non-canvas legend\n },\n },\n responsive: true,\n }\n}\n\n/**\n *\n * @param {Object} propsPlus\n * @param {boolean} propsPlus.showXGrid\n * @param {boolean} propsPlus.showYGrid\n * @param {boolean} propsPlus.stacked\n * @param {string} propsPlus.xAxisType\n * @param {string} propsPlus.xLabel\n * @param {string} propsPlus.yLabel\n * @param {number} propsPlus.yMax\n * @param {number} propsPlus.yMin\n * @param {ChartConfigOptions} propsPlus.customOptions\n * @param {number} propsPlus.tickSize\n *\n * @returns\n */\nfunction getCartesianScaleOptions(propsPlus) {\n const {\n dataIdxLabels,\n showXGrid,\n showYGrid,\n stacked,\n xAxisType,\n xLabel,\n yLabel,\n yMax,\n yMin,\n customOptions,\n tickSize\n } = propsPlus\n const scaleOptions = {\n x: {\n grid: {\n display: showXGrid\n },\n offset: true,\n stacked,\n ticks: {\n font: {\n size: tickSize || TICK_SIZE\n }\n },\n title: {\n display: !!xLabel,\n text: xLabel,\n },\n type: xAxisType || 'category',\n },\n y: {\n beginAtZero: true,\n //grace: \"10%\", //TODO: maybe apply this, or take as prop\n grid: {\n display: showYGrid\n },\n stacked,\n suggestedMax: yMax,\n suggestedMin: yMin,\n ticks: {\n font: {\n size: tickSize || TICK_SIZE\n }\n },\n title: {\n display: !!yLabel,\n text: yLabel,\n },\n }\n }\n\n if (xAxisType === 'time' || customOptions?.scales?.x?.type === 'time') {\n // there's a third option, 'data', but it likely won't be used\n scaleOptions.x.ticks.source = dataIdxLabels?.length ? 'labels' : 'auto'\n scaleOptions.x.time = {\n tooltipFormat: 'dd MMM yyyy : h:mm bbb'\n }\n }\n\n return scaleOptions\n}\n\n\nclass BsChartConfig {\n/**\n * @param {Object} options\n * @param {ChartType} options.type\n * @param {ChartConfigData} options.data - datasets and labels.\n * @param {ChartConfigOptions} options.options\n * @param {ChartConfigPlugins} options.plugins\n */\n constructor({\n type,\n data,\n options,\n plugins\n }) {\n this.type = type\n this.data = {\n ...data,\n datasets: this.fmtDatasets(data.datasets)\n }\n this.options = options\n this.plugins = plugins\n }\n\n updateOptions(props) {\n const { showTooltips } = props\n this.options.plugins.tooltip.enabled = showTooltips\n }\n\n updateData(props) {\n this.data.datasets = this.fmtDatasets(props.data)\n this.data.labels = props.dataIdxLabels\n }\n\n fmtDatasets(datasets) {\n return datasets\n }\n}\n\nclass BsChartBarConfig extends BsChartConfig {\n constructor({ data, options, plugins }) {\n super({ type: 'bar', data, options, plugins })\n }\n\n fmtDatasets(datasets) {\n return datasets.map((dataset, i) => ({\n ...dataset,\n backgroundColor: getBackgroundColor(i),\n categoryPercentage: datasets.length > 1 ? .5 : .33\n }))\n }\n\n updateOptions(props) {\n super.updateOptions(props)\n const scaleOpts = getCartesianScaleOptions(props)\n const tickFontOpts = { x: { ticks: { font: scaleOpts.x.ticks.font }}, y: { ticks: { font: scaleOpts.y.ticks.font }} }\n const updatedOpts = _merge(\n {},\n this.options,\n { scales: scaleOpts },\n props.customOptions,\n getCommonOptionsStrict(),\n { scales: tickFontOpts }\n )\n this.options = updatedOpts\n }\n}\n\nclass BsChartLineConfig extends BsChartConfig {\n constructor({ data, options, plugins }) {\n super({ type: 'line', data, options, plugins })\n }\n\n fmtDatasets(datasets) {\n return datasets.map((dataset, i) => ({\n ...dataset,\n backgroundColor: getBackgroundColor(i, 2),\n borderColor: getBorderColor(i),\n borderWidth: 4\n }))\n }\n\n updateOptions(props) {\n super.updateOptions(props)\n const scaleOpts = getCartesianScaleOptions(props)\n const tickFontOpts = { x: { ticks: { font: scaleOpts.x.ticks.font }}, y: { ticks: { font: scaleOpts.y.ticks.font }} }\n const updatedOpts = _merge(\n {},\n this.options,\n { scales: scaleOpts },\n props.customOptions,\n getCommonOptionsStrict(),\n { scales: tickFontOpts }\n )\n this.options = updatedOpts\n }\n}\n\nexport class BsChartConfigBuilder {\n constructor() {\n return this\n }\n\n /**\n * @param {BsChartProps} chartProps\n * @returns {BsChartConfigBuilder}\n */\n setBarChartConfigs(chartProps) {\n this.type = 'bar'\n this.setCartesianAxesOpts(chartProps)\n return this\n }\n\n /**\n * @param {BsChartProps} chartProps\n * @returns {BsChartConfigBuilder}\n */\n setCommonConfigs(chartProps) {\n const { data } = chartProps\n this.commonOptionsBasic = getCommonOptionsPermissive(chartProps)\n this.commonOptionsStrict = getCommonOptionsStrict()\n this.datasets = data\n return this\n }\n\n setCustomOptions(chartProps) {\n this.customOptions = chartProps.customOptions\n return this\n }\n\n /**\n * @param {BsChartProps} chartProps\n * @returns {BsChartConfigBuilder}\n */\n setLineChartConfigs(chartProps) {\n this.type = 'line'\n this.setCartesianAxesOpts(chartProps)\n return this\n }\n\n /**\n * @param {Plugin[]} plugins\n * @returns {BsChartConfigBuilder}\n */\n setPlugins(plugins = []) {\n this.plugins = plugins\n return this\n }\n\n /**\n * @param {BsChartProps} chartProps\n * @returns {BsChartConfigBuilder}\n */\n setCartesianAxesOpts(chartProps) {\n const { dataIdxLabels } = chartProps\n this.dataIdxLabels = dataIdxLabels\n this.scalesOptions = getCartesianScaleOptions(chartProps)\n\n // always enforced\n this.commonOptionsStrict.scales = {\n x: { ticks: { font: { size: TICK_SIZE } } },\n y: { ticks: { font: { size: TICK_SIZE } } }\n }\n return this\n }\n\n build() {\n const optionsArg = {\n data: {\n datasets: this.datasets,\n labels: this.dataIdxLabels // TODO: || this.pieSliceLabels (or something)\n },\n options: _merge(\n {},\n this.commonOptionsBasic,\n {\n scales: this.scalesOptions\n },\n this.customOptions,\n this.commonOptionsStrict, // enforce a limited, opinionated base set for design system consistency\n ),\n plugins: this.plugins,\n type: this.type\n }\n\n switch (this.type) {\n case 'bar':\n return new BsChartBarConfig(optionsArg)\n case 'line':\n return new BsChartLineConfig(optionsArg)\n default:\n throw new Error(`Unsupported chart type: ${this.type}`)\n }\n }\n}\n","<script setup>\nimport { computed, onMounted } from 'vue'\nimport BsChartTable from '../chart-table/BsChartTable.vue'\nimport {\n BarController,\n BarElement,\n CategoryScale,\n Legend,\n LinearScale,\n TimeScale,\n Tooltip\n} from 'chart.js'\nimport { useChart } from '../../composables/chart.js'\n\n// Props\n/** Provide a title for the accessible text table representation of this chart. */\nconst props = defineProps({\n chartTitle: {\n type: String,\n default: '',\n },\n customOptions: {\n type: Object,\n default: () => ({}),\n },\n /** Array of datasets. */\n data: {\n type: Array,\n required: true,\n },\n /** Array of labels for each point along the X-Axis. */\n dataIdxLabels: {\n type: Array,\n default: () => [],\n },\n /** Pass `true` to show legend. */\n showLegend: {\n type: Boolean,\n default: true,\n },\n /** Pass `true` to show tooltips on hover. */\n showTooltips: {\n type: Boolean,\n default: true,\n },\n /** Pass `true` to show vertical gridlines. */\n showXGrid: {\n type: Boolean,\n default: false,\n },\n /** Pass `true` to show horizontal gridlines. */\n showYGrid: {\n type: Boolean,\n default: false,\n },\n /** Pass `true` to stack each dataset's data at a given index into a single column. */\n stacked: {\n type: Boolean,\n default: false,\n },\n xAxisType: {\n type: String,\n default: 'category',\n validator: (value) => ['category', 'linear'].includes(value),\n },\n /** Label for the X-Axis. */\n xLabel: {\n type: String,\n default: '',\n },\n /** Label for the Y-Axis. */\n yLabel: {\n type: String,\n default: '',\n },\n yMax: {\n type: Number,\n default: 0,\n },\n yMin: {\n type: Number,\n default: 0,\n },\n})\n\nconst { canvasRef, legendListRef, registerChart } = useChart('bar', props)\n\nconst title = computed(() => props.chartTitle || `${props.yLabel} / ${props.xLabel}`)\n\n// Lifecycle Hooks - Init Chart; Watchers\nonMounted(() => registerChart(\n BarController,\n BarElement,\n CategoryScale,\n LinearScale,\n Legend,\n TimeScale,\n Tooltip\n))\n</script>\n\n<template>\n<div class=\"bs-chart bs-chart-bar\" data-component=\"bs-chart-bar\">\n <figure>\n <div>\n <canvas\n :aria-label=\"title\"\n ref=\"canvasRef\"\n role=\"img\"\n ></canvas>\n </div>\n <div>\n <BsChartTable\n chart-type=\"bar\"\n :data=\"data\"\n :data-idx-labels=\"dataIdxLabels\"\n :table-title=\"title\"\n :x-axis-type=\"xAxisType\"\n :x-label=\"xLabel\"\n :y-label=\"yLabel\"\n ></BsChartTable>\n <figcaption\n :data-hidden=\"!showLegend\"\n >\n <ul ref=\"legendListRef\"></ul>\n </figcaption>\n </div>\n </figure>\n</div>\n</template>\n","<script setup>\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport BsLabel from '../label/BsLabel.vue'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n /** Sets the label. */\n /** @ex Task Completed */\n label: {\n type: String,\n },\n /** Sets the checked state. */\n checked: {\n type: Boolean,\n default: false\n },\n /** Sets the disabled state on the input. */\n disabled: {\n type: Boolean,\n default: false\n },\n /** Applies error styles to the input. */\n error: {\n type: Boolean,\n default: false\n },\n /** Sets the indeterminate state; i.e. partially checked. */\n indeterminate: {\n type: Boolean,\n default: false\n },\n /** Pass id for the input element. Will also be applied to label attribute. */\n inputId: {\n type: String,\n default: ''\n },\n /** Sets the required state on the input. */\n required: {\n type: Boolean,\n default: false\n },\n /** Sets the size of the input. */\n size: {\n type: String,\n validator: (value) => value === 'sm',\n },\n value: {\n type: [ String, Number, Object ]\n },\n /** Sets the `checked` state - `v-model` directive will use this; do not set explicitly. */\n modelValue: {\n type: [ Boolean, Array ]\n },\n // DEPRECATED\n checkedPartially: { default: undefined },\n passAttrs: { default: undefined },\n})\nuseDeprecatedProp(props, 'checkedPartially', 'indeterminate')\nuseDeprecatedProp(props, 'passAttrs', undefined, 'Use Vue\\'s native fallthrough attributes instead.')\nconst emit = defineEmits(['update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen ] = useGenIdAttrs()\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Refs & Computed Properties\nconst inputEl = ref(null)\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst isChecked = computed(() => props.checked || isModelValueChecked.value)\nconst isIndeterminate = computed(() => props.indeterminate || props.checkedPartially)\nconst isVModelArray = computed(() => Array.isArray(props.modelValue) && props.value)\nconst isModelValueChecked = computed(() => (\n ( isVModelArray.value && props.modelValue.includes(props.value) ) ||\n ( typeof props.modelValue === 'boolean' && props.modelValue )\n))\n\nfunction setIndeterminate() {\n if (inputEl.value) inputEl.value.indeterminate = isIndeterminate.value && !isChecked.value\n}\n\nfunction doVModelSimple(checked) {\n emit('update:modelValue', checked)\n}\n\nfunction doVModelComplex(checked) {\n const newValue = [ ...props.modelValue ]\n checked ? newValue.push(props.value) : newValue.splice(newValue.indexOf(props.value), 1)\n emit('update:modelValue', newValue)\n}\n\nfunction onChange(e) {\n const { checked } = e.target\n isVModelArray.value ? doVModelComplex(checked) : doVModelSimple(checked)\n}\n\nwatch(isChecked, setIndeterminate)\nwatch(isIndeterminate, setIndeterminate)\n\nonMounted(setIndeterminate)\n\n</script>\n<template>\n <div class=\"bs-boolean\"\n data-component=\"bs-checkbox\"\n :data-disabled=\"disabled\"\n :data-error=\"error\"\n :data-size=\"size\"\n v-bind=\"filtered\"\n >\n <input\n ref=\"inputEl\"\n :checked=\"isChecked\"\n :data-error=\"error\"\n :disabled=\"disabled\"\n :id=\"$attrs.id || inputIdAttr\"\n :required=\"required\"\n :value=\"value || 'on'\"\n type=\"checkbox\"\n @change=\"onChange\"\n v-bind=\"remaining\"\n />\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n </div>\n</template>\n","<!-- Internal component for setting a dropdown's container -->\n<script setup>\nimport { ref } from 'vue'\n\nconst props = defineProps({\n breakout: {\n type: Boolean,\n default: false\n },\n breakoutMounted: {\n type: Boolean,\n default: false\n },\n breakoutStub: {\n type: Object,\n default: null\n },\n containerId: {\n type: String,\n default: undefined\n }\n})\n\nconst internalContainerRef = ref(null)\n\ndefineExpose({ internalContainerRef })\n</script>\n\n<template>\n<!-- Teleport when breaking out -->\n<template v-if=\"breakout && breakoutMounted\">\n <Teleport :to=\"breakoutStub\">\n <slot />\n </Teleport>\n</template>\n\n<template v-if=\"!breakout\">\n <!-- External container -->\n <template v-if=\"containerId\">\n <slot />\n </template>\n\n <!-- Internal container -->\n <div\n v-else\n ref=\"internalContainerRef\"\n style=\"position: relative\"\n >\n <slot />\n </div>\n</template>\n</template>\n","<!--\nEnhances the built-in Vue Transition with the option to render the content with\n`v-if` (default) or `v-show` when `preloaded` is `true`.\n-->\n<script setup>\ndefineProps({\n // Transition Name\n name: {\n type: String,\n required: true\n },\n // When true, the content is displayed with v-show\n // When false, the content is displayed with v-if\n preloaded: {\n type: Boolean,\n default: false\n },\n // When true, the content is shown\n shown: {\n type: Boolean,\n default: true\n },\n})\n\n// Just emit all the standard Transition events\nconst emit = defineEmits([\n 'before-enter',\n 'enter',\n 'after-enter',\n 'enter-cancelled',\n 'before-leave',\n 'leave',\n 'after-leave',\n 'leave-cancelled',\n])\n</script>\n\n<template>\n <template v-if=\"preloaded\">\n <Transition\n v-show=\"shown\"\n :name=\"name\"\n @before-enter=\"emit('before-enter')\"\n @enter=\"emit('enter')\"\n @after-enter=\"emit('after-enter')\"\n @enter-cancelled=\"emit('enter-cancelled')\"\n @before-leave=\"emit('before-leave')\"\n @leave=\"emit('leave')\"\n @after-leave=\"emit('after-leave')\"\n @leave-cancelled=\"emit('leave-cancelled')\"\n >\n <slot />\n </Transition>\n </template>\n\n <template v-else>\n <Transition\n :name=\"name\"\n @before-enter=\"emit('before-enter')\"\n @enter=\"emit('enter')\"\n @after-enter=\"emit('after-enter')\"\n @enter-cancelled=\"emit('enter-cancelled')\"\n @before-leave=\"emit('before-leave')\"\n @leave=\"emit('leave')\"\n @after-leave=\"emit('after-leave')\"\n @leave-cancelled=\"emit('leave-cancelled')\"\n >\n <slot v-if=\"shown\" />\n </Transition>\n </template>\n</template>\n","import { onMounted, onUnmounted, ref, useId } from 'vue'\n\nconst useBreakout = (createBreakout, id = undefined, position = 'relative') => {\n const breakoutId = ref(null)\n const breakoutStub = ref(null)\n const breakoutMounted = ref(false)\n let isPreExisting = false\n\n onMounted(() => {\n if (createBreakout) {\n breakoutId.value = id || useId()\n // Don't recreate the breakout if it already exists\n if (document.getElementById(breakoutId.value)) {\n breakoutStub.value = document.getElementById(breakoutId.value)\n isPreExisting = true\n } else {\n breakoutStub.value = document.createElement('div')\n breakoutStub.value.id = breakoutId.value\n breakoutStub.value.style.position = position\n document.body.insertAdjacentElement('afterbegin', breakoutStub.value)\n }\n breakoutMounted.value = true\n }\n })\n\n onUnmounted(() => {\n // Don't remove the breakout if it existed before\n if (createBreakout && !isPreExisting) {\n document.getElementById(breakoutId.value)?.remove()\n }\n })\n\n return { breakoutId, breakoutStub, breakoutMounted }\n}\nexport default useBreakout\n","import { onMounted, onUnmounted } from 'vue'\n\n/**\n * Listens for clicks outside of the given elements and calls the given\n * function.\n *\n * @param {(Ref|Computed)[]} elRefs Target refs considered as \"inside\" the click area.\n * @param {function} onClickAway Callback when a click happens outside of the\n * target ref.\n */\nconst useClickAway = (elRefs, onClickAway) => {\n const handler = (ev) => {\n if (!elRefs.some((elRef) => elRef.value?.contains(ev.target))) {\n onClickAway(ev)\n }\n }\n\n onMounted(() => {\n document.addEventListener('mouseup', handler)\n })\n\n onUnmounted(() => {\n document.removeEventListener('mouseup', handler)\n })\n}\nexport default useClickAway\n","<script setup>\nimport { ref, computed, provide } from 'vue'\nimport { BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport BsDropdownContainer from './BsDropdownContainer.vue'\nimport BsEnhancedTransition from '../transition/BsEnhancedTransition.vue'\nimport useBreakout from '../../composables/breakout'\nimport useClickAway from '../../composables/clickAway'\nimport useKeydown from '../../composables/keydown'\n\ndefineOptions({ inheritAttrs: false })\n\n// PROPS\nconst props = defineProps({\n anchorId: {\n type: String,\n required: true\n },\n breakout: {\n type: Boolean,\n default: false\n },\n containerId: {\n type: String,\n default: undefined\n },\n helperDescription: {\n type: String,\n default: undefined\n },\n helperText: {\n type: String,\n default: undefined\n },\n position: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n shown: {\n type: Boolean,\n default: true\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n width: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n }\n})\n\n// EMITS\nconst emit = defineEmits([\n 'close',\n 'enter',\n 'after-enter',\n 'after-leave'\n])\n\n// REFS\nconst dropdownContainerRef = ref(null)\nconst dropdownRef = ref(null)\n\n// STATE\n// Provide these transition states to BsDropdownOptionList.vue for various\n// delayed effects such as focus management.\nconst dropdownEnter = ref(false)\nconst dropdownAfterEnter = ref(false)\nconst anchorEl = ref(null)\n\n// COMPUTED\nconst containerEl = computed(() => {\n if (props.breakout) {\n return breakoutStub.value\n } else if (props.containerId) {\n return document.getElementById(props.containerId)\n } else {\n return dropdownContainerRef.value.internalContainerRef\n }\n})\n\n// Don't set data-width in the special 'anchor' width case\nconst widthActual = computed(() => {\n return props.width === 'anchor' ? undefined : props.width\n})\n\n// COMPOSABLES\nuseClickAway([dropdownRef, anchorEl], () => {\n if (dropdownAfterEnter.value) {\n emit('close')\n }\n})\n\nuseKeydown(['Escape'], () => {\n if (dropdownAfterEnter.value) {\n emit('close')\n }\n})\n\nconst { breakoutStub, breakoutMounted } = useBreakout(props.breakout, props.containerId)\n\n// PROVIDE\n// Currently used by BsDropdownOptionList.vue\nprovide('dropdownEnter', dropdownEnter)\nprovide('dropdownAfterEnter', dropdownAfterEnter)\nprovide('dropdownShown', computed(() => props.shown))\n\n// METHODS\nconst setDropdownProperty = (property, value) => {\n dropdownRef.value.style.setProperty(property, value)\n}\n\n/**\n * Dynamically set position based on anchor element. Doing this rather than\n * relying on CSS since the dropdown's container could live anywhere on the\n * DOM (in the case of teleporting when breakout=true).\n *\n * Use custom properties rather than explicit properties to allow for\n * us to ignore them on mobile.\n */\nfunction setPosition() {\n const containerRect = containerEl.value.getBoundingClientRect()\n const anchorRect = anchorEl.value.getBoundingClientRect()\n const dropdownRect = dropdownRef.value.getBoundingClientRect()\n\n positionTopBottom(containerRect, anchorRect)\n positionLeftRight(containerRect, anchorRect, dropdownRect)\n}\n\nfunction positionTopBottom(containerRect, anchorRect) {\n // Calculate top/bottom position relative to target container\n if (props.position === 'top') {\n const bottom = containerRect.bottom - anchorRect.bottom\n setDropdownProperty('--dropdown-wscreen-top', 'auto')\n setDropdownProperty('--dropdown-wscreen-bottom', `${bottom + anchorRect.height + 8}px`)\n } else {\n const top = anchorRect.top - containerRect.top\n setDropdownProperty('--dropdown-wscreen-top', `${top + anchorRect.height + 8}px`)\n setDropdownProperty('--dropdown-wscreen-bottom', 'auto')\n }\n}\n\nfunction positionLeftRight(containerRect, anchorRect, dropdownRect) {\n // Calculate left position relative to target container\n const left = anchorRect.left - containerRect.left\n if (props.position === 'center') {\n const offset = (anchorRect.width - dropdownRect.width) / 2\n setDropdownProperty('--dropdown-wscreen-left', `${left + offset}px`)\n setDropdownProperty('--dropdown-wscreen-right', 'auto')\n } else if (props.position === 'right') {\n const right = containerRect.right - anchorRect.right\n setDropdownProperty('--dropdown-wscreen-left', `auto`)\n setDropdownProperty('--dropdown-wscreen-right', `${right}px`)\n } else {\n setDropdownProperty('--dropdown-wscreen-left', `${left}px`)\n setDropdownProperty('--dropdown-wscreen-right', 'auto')\n }\n}\n\n/**\n * Special case when width is \"anchor\". Dynamically set width based on anchor\n * element. Doing this rather than relying on CSS since the dropdown's\n * container could live anywhere on the DOM (in the case of teleporting when\n * breakout=true).\n */\nfunction setWidth() {\n if (props.width === 'anchor') {\n const anchorRect = anchorEl.value.getBoundingClientRect()\n setDropdownProperty('--dropdown-wscreen-width', `${anchorRect.width}px`)\n } else {\n setDropdownProperty('--dropdown-wscreen-width', '')\n }\n}\n\nfunction handleEnter() {\n dropdownEnter.value = true\n // Grab the anchor element every time the dropdown enters just in case it\n // has moved (e.g. button appearing/disappearing based on loading state)\n anchorEl.value = document.getElementById(props.anchorId)\n setPosition()\n setWidth()\n emit('enter')\n}\n\nfunction handleAfterEnter() {\n dropdownAfterEnter.value = true\n emit('after-enter')\n}\n\nfunction handleAfterLeave() {\n dropdownEnter.value = false\n dropdownAfterEnter.value = false\n emit('after-leave')\n}\n</script>\n\n<template>\n<div v-if=\"useMobileStyle && shown\" class=\"bs-dropdown-backdrop\" />\n\n<BsDropdownContainer\n ref=\"dropdownContainerRef\"\n :breakout=\"breakout\"\n :breakoutMounted=\"breakoutMounted\"\n :breakoutStub=\"breakoutStub\"\n :containerId=\"containerId\"\n>\n <BsEnhancedTransition\n name=\"bs-dropdown\"\n :preloaded=\"preloaded\"\n :shown=\"shown\"\n @after-enter=\"handleAfterEnter\"\n @enter=\"handleEnter\"\n @after-leave=\"handleAfterLeave\"\n >\n <div\n ref=\"dropdownRef\"\n class=\"bs-dropdown\"\n :data-width=\"widthActual\"\n :data-shown=\"shown\"\n :data-no-mobile=\"!useMobileStyle\"\n v-bind=\"$attrs\"\n >\n <header v-if=\"helperText\">\n <div>\n <h3>{{ helperText }}</h3>\n <p v-if=\"helperDescription\">{{ helperDescription }}</p>\n </div>\n <button type=\"button\" title=\"close\" @click=\"() => emit('close')\">\n <BsIconClose />\n </button>\n </header>\n\n <slot />\n </div>\n </BsEnhancedTransition>\n</BsDropdownContainer>\n</template>\n","<!-- Handles backwards compatibility with deprecated props -->\n<!-- Replace with BsDropdownNew when retiring these props -->\n<script setup>\nimport { computed } from 'vue'\nimport BsDropdownNew from './BsDropdownNew.vue'\nimport { useDeprecatedProp, useDeprecatedTransition } from '@composables/deprecated.js'\n\n// PROPS\nconst props = defineProps({\n anchorId: {\n type: String,\n default: undefined\n },\n shown: {\n type: Boolean,\n default: true\n },\n breakout: {\n type: Boolean,\n default: false\n },\n containerId: {\n type: String,\n default: undefined\n },\n helperDescription: {\n type: String,\n default: undefined\n },\n helperText: {\n type: String,\n default: undefined\n },\n position: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n width: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n // DEPRECATED\n center: {\n default: undefined\n },\n enterControlled: {\n default: undefined\n },\n enterTrigger: {\n default: undefined\n },\n leaveTrigger: {\n default: undefined\n },\n right: {\n default: undefined\n },\n toggleId: {\n default: undefined\n },\n top: {\n default: undefined\n }\n})\nuseDeprecatedProp(props, 'center', 'position')\nuseDeprecatedProp(props, 'enterControlled', 'preloaded')\nuseDeprecatedProp(props, 'enterTrigger', 'shown')\nuseDeprecatedProp(props, 'leaveTrigger', 'shown')\nuseDeprecatedProp(props, 'right', 'position')\nuseDeprecatedProp(props, 'toggleId', 'anchorId')\nuseDeprecatedProp(props, 'top', 'position')\n\nconst emit = defineEmits([\n 'close',\n 'enter',\n 'after-enter',\n 'after-leave'\n])\n\n// Handles enterControlled/enterTrigger/leaveTrigger backwards compatibility\nconst { transition: shownActual } = useDeprecatedTransition(props)\n\n// Handles width backwards compatibility\nconst widthActual = computed(() => {\n return props.width === 'toggle' ? 'anchor' : props.width\n})\n\n// Handles top/center/right backwards compatibility\nconst positionActual = computed(() => {\n if (props.top) {\n return 'top'\n }\n if (props.center) {\n return 'center'\n }\n if (props.right) {\n return 'right'\n }\n return props.position\n})\n\n// Handles toggleId backwards compatibility\nconst anchorIdActual = computed(()=> {\n if (props.toggleId) {\n return props.toggleId\n }\n return props.anchorId\n})\n</script>\n\n<template>\n<BsDropdownNew\n :anchor-id=\"anchorIdActual\"\n :breakout=\"breakout\"\n :container-id=\"containerId\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :position=\"positionActual\"\n :preloaded=\"preloaded\"\n :shown=\"shownActual\"\n :use-mobile-style=\"useMobileStyle\"\n :width=\"widthActual\"\n @close=\"() => emit('close')\"\n @enter=\"() => emit('enter')\"\n @after-enter=\"() => emit('after-enter')\"\n @after-leave=\"() => emit('after-leave')\"\n>\n <slot />\n</BsDropdownNew>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue'\nimport { BsIconCaretDown, BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport BsInput from '@components/input/BsInput.vue'\nimport BsInputAddon from '@components/input-addon/BsInputAddon.vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\n\nconst props = defineProps({\n containerId: {\n type: String,\n required: true\n },\n disabled: {\n type: Boolean,\n default: false\n },\n error: {\n type: Boolean,\n default: false\n },\n hintId: {\n type: String\n },\n modelValue: {\n type: String,\n default: ''\n },\n open: {\n type: Boolean,\n default: false\n },\n optionsId: {\n type: String\n },\n placeholder: {\n type: String,\n default: ''\n },\n required: {\n type: Boolean,\n default: false\n },\n})\nconst emit = defineEmits([\n 'clear',\n 'input-focus',\n 'input-mousedown',\n 'input-mouseup',\n 'input-shift-tab',\n 'input-tab',\n 'toggled',\n 'update:modelValue',\n])\n\nconst inputRef = ref(null)\nconst [ toggleId ] = useGenIdAttrs(1)\n\nconst btnProperties = computed(() => ({\n icon: props.modelValue ? 'close' : (props.optionsId ? 'caret-down' : ''),\n show: Boolean(props.modelValue || props.optionsId),\n text: props.modelValue ? 'Clear this field' : (props.optionsId ? 'Toggle options dropdown' : ''),\n}))\n\nconst showCloseButton = computed(() => btnProperties.value.icon === 'close')\n\nfunction handleBtnClick() {\n if (showCloseButton.value) {\n emit('clear')\n } else {\n emit('toggled')\n }\n}\n\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n<BsInputAddon\n aria-live=\"polite\"\n :disabled=\"disabled\"\n :error=\"error\"\n :id=\"containerId\"\n :multifocus=\"false\"\n variant=\"combobox\"\n>\n <BsInput\n ref=\"inputRef\"\n :aria-controls=\"optionsId\"\n :aria-describedby=\"hintId\"\n :aria-expanded=\"optionsId ? open : undefined\"\n :aria-haspopup=\"optionsId ? 'listbox' : undefined\"\n :aria-invalid=\"error\"\n data-part=\"main\"\n :data-error=\"error\"\n :disabled=\"disabled\"\n :model-value=\"modelValue\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :role=\"optionsId ? 'combobox' : undefined\"\n @focus=\"$emit('input-focus')\"\n @input=\"$emit('update:modelValue', $event.target.value)\"\n @keydown.shift.tab=\"$emit('input-shift-tab')\"\n @keydown.tab.exact=\"$emit('input-tab')\"\n @mousedown=\"$emit('input-mousedown')\"\n @mouseup=\"$emit('input-mouseup')\"\n v-bind=\"$attrs\"\n />\n <button v-show=\"btnProperties.show\"\n :aria-controls=\"!showCloseButton && optionsId ? optionsId : undefined\"\n :aria-expanded=\"!showCloseButton && optionsId ? open : undefined\"\n :data-open=\"showCloseButton ? undefined : open\"\n data-part=\"right\"\n :disabled=\"disabled\"\n :id=\"toggleId\"\n style=\"cursor: pointer;\"\n type=\"button\"\n @click=\"handleBtnClick\"\n >\n <span class=\"visually-hidden\">\n {{ btnProperties.text }}\n </span>\n <BsIconClose\n v-if=\"showCloseButton\"\n role=\"presentation\"\n size=\"md\"\n />\n <BsIconCaretDown\n v-else\n role=\"presentation\"\n size=\"md\"\n />\n </button>\n</BsInputAddon>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport BsBadge from '../badge/BsBadge.vue'\nimport { BsIconCaretDown } from '@wwtdev/bsds-icons-vue3'\n\nconst props = defineProps({\n badgeCount: {\n type: Number,\n default: 0\n },\n disabled: {\n type: Boolean,\n default: false\n },\n label: {\n type: String,\n default: 'Filter'\n },\n open: {\n type: Boolean,\n default: false\n },\n optionsId: {\n type: String,\n required: true\n },\n size: {\n type: String,\n validator: val => ['', 'sm', 'xs'].includes(val)\n }\n})\n\nconst showBadge = computed(() => props.badgeCount > 0)\n</script>\n\n<template>\n <button class=\"bs-filter-button\"\n :aria-controls=\"optionsId\"\n :aria-expanded=\"open\"\n aria-haspopup=\"listbox\"\n data-component=\"bs-filter-button\"\n :data-open=\"open\"\n :data-size=\"size\"\n :disabled=\"disabled\"\n type=\"button\"\n >\n <BsBadge v-if=\"showBadge\"\n color=\"blue\"\n :count=\"badgeCount\"\n label=\"active filter\"\n position=\"left\"\n variant=\"notext\"\n />\n <slot name=\"label\">\n {{ label }}\n </slot>\n <BsIconCaretDown />\n </button>\n</template>\n","/**\n * @param {string} listId\n * @param {unknown} optionVal\n * @param {string} valueIdKey\n * @returns {string} id attribute for the option element\n */\nexport const optionIdFromVal = (listId, optionVal, valueIdKey = 'id') => {\n const suffix =\n typeof optionVal == 'object'\n ? optionVal?.[valueIdKey]?.toString().replace(/\\s/g, '-')\n : optionVal?.toString().replace(/\\s/g, '-')\n return `${listId}-option-${suffix}`\n}\n","<script setup>\nimport { inject, ref, computed, onMounted } from 'vue'\nimport { optionIdFromVal } from '../../utils/dropdown.js'\n\n// PROPS\nconst props = defineProps({\n valueIdKey: {\n type: [String, Number],\n default: 'id',\n },\n value: {\n type: [String, Number, Object],\n required: true,\n },\n variant: {\n type: String,\n default: undefined,\n },\n})\n\nconst optionRef = ref(null)\n\n// Provided from BsDropdownOptionList\nconst optionsId = inject('optionsId', ref(''))\nconst handleOptionSelect = inject('handleOptionSelect', () => {})\nconst registerOption = inject('registerOptionById', () => {})\n\nconst idKey = computed(() => {\n if (typeof props.value != 'object') return '' // many wrapper components depend on this type check\n return props.valueIdKey\n})\n\n/** Create an ID. */\nconst id = computed(() => optionIdFromVal(optionsId.value, props.value, idKey.value))\n\nfunction handleOptionClick(ev) {\n handleOptionSelect(optionRef.value)\n ev.stopPropagation()\n}\n\nonMounted(() => {\n registerOption({ id: id.value, val: props.value })\n})\n</script>\n\n<template>\n <li\n ref=\"optionRef\"\n data-component=\"bs-dropdown-option\"\n :data-value=\"idKey ? undefined : props.value\"\n :data-value-id-key=\"idKey\"\n :data-value-type=\"typeof props.value\"\n :data-variant=\"variant || undefined\"\n :id=\"id\"\n role=\"option\"\n @click=\"handleOptionClick\"\n >\n <slot></slot>\n </li>\n</template>\n","<script setup>\nimport { onMounted, ref } from 'vue'\n\nconst props = defineProps({\n src: String,\n size: String,\n initials: {\n type: String,\n required: true\n },\n profileName: {\n type: String,\n required: true\n },\n useAltText: {\n type: Boolean,\n default: true\n }\n})\nconst isMounted = ref(false)\nconst showImage = ref(!!props.src)\n\nonMounted(() => isMounted.value = true)\n</script>\n\n<template>\n<div\n class=\"bs-profile-img\"\n data-component=\"bs-profile-img\"\n :data-img-size=\"size\"\n :data-initials=\"initials\"\n :data-no-img=\"!showImage\"\n>\n <img v-if=\"showImage && isMounted\"\n :src=\"src\"\n :alt=\"useAltText ? profileName : ''\"\n @error=\"showImage = false\"\n />\n</div>\n</template>\n","<script setup>\nimport { propDefinitions } from './defs-dropdown-option-builder.js'\nimport BsDropdownOption from '../dropdown-option/BsDropdownOption.vue'\nimport BsProfileImg from '../profile-img/BsProfileImg.vue'\nimport { BsIcon } from '@wwtdev/bsds-icons-vue3'\n\n// PROPS\nconst props = defineProps(propDefinitions)\n\n// METHODS\nfunction getVariant(option) {\n let variant = ''\n\n let columns = 1\n columns += option.checkbox ? 1 : 0\n columns += option.icon ? 1 : 0\n columns += option.profileImg ? 1 : 0\n\n if (columns > 1) {\n variant += ` ${columns}-col`\n }\n\n if (option.checkbox) {\n variant += ' checkbox'\n }\n\n if (option.description) {\n variant += ' description'\n }\n\n if (option.negative) {\n variant += ' negative'\n }\n\n return variant\n}\n\nfunction useAltText(profileName, label) {\n return !!profileName && profileName !== label\n}\n</script>\n\n<template>\n<BsDropdownOption\n v-for=\"option in options\"\n :aria-checked=\"option.checkbox ? option.checkbox.checked : undefined\"\n :key=\"option.value\"\n :value-id-key=\"valueIdKey\"\n :value=\"option.value\"\n :variant=\"getVariant(option)\"\n>\n <!-- Checkbox -->\n <span\n v-if=\"option.checkbox\"\n :id=\"option.checkbox.inputId\"\n aria-hidden=\"true\"\n class=\"bs-checkbox\"\n :data-checked=\"option.checkbox.checked\"\n />\n\n <!-- Icon -->\n <span v-if=\"option.icon\">\n <BsIcon v-if=\"typeof option.icon === 'string'\" :name=\"option.icon\" />\n <component v-else :is=\"option.icon\" />\n </span>\n\n <!-- Profile Img -->\n <BsProfileImg\n v-if=\"option.profileImg\"\n :src=\"option.profileImg.src\"\n size=\"xs\"\n :initials=\"option.profileImg.initials\"\n :profile-name=\"option.profileImg.profileName\"\n :use-alt-text=\"useAltText(option.profileImg.profileName, option.label)\"\n />\n\n <!-- Label -->\n <span v-if=\"option.labelHtml\" v-html=\"option.labelHtml\" />\n <span v-else>{{ option.label }}</span>\n\n <!-- Description -->\n <span v-if=\"option.description\">{{ option.description }}</span>\n</BsDropdownOption>\n\n<li role=\"option\" data-no-hover v-if=\"showNoOptions && options.length === 0\">\n <slot name=\"no-options\">No options</slot>\n</li>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport BsInput from '../input/BsInput.vue'\nimport BsInputAddon from '../input-addon/BsInputAddon.vue'\nimport { BsIconSearch, BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n /** Sets the disabled state on input, disabled styles on label. */\n disabled: {\n type: Boolean,\n default: false\n },\n hideClear: {\n type: Boolean,\n default: false\n },\n hideSearchIcon: {\n type: Boolean,\n default: false\n },\n inputId: {\n type: String,\n default: undefined\n },\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: 'Search Items'\n },\n /** Sets the input value - do not use if using `v-model`. */\n value: {\n type: String,\n default: ''\n },\n variant: {\n type: String,\n // we may be getting at least one more variant so we'll validate against arr\n validator: val => ['filter', ''].includes(val)\n },\n // DEPRECATED\n passAttrs: { default: undefined },\n})\nuseDeprecatedProp(props, 'passAttrs', undefined, 'Use Vue\\'s native fallthrough attributes instead.')\nconst emit = defineEmits(['clear','update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\nconst showClear = computed(() => (\n !props.disabled &&\n !props.hideClear &&\n props.variant !== 'filter'\n))\n</script>\n\n<template>\n<BsInputAddon\n class=\"bs-input-search\"\n data-component=\"bs-input-search\"\n :data-variant=\"variant\"\n :disabled=\"disabled\"\n v-bind=\"filtered\"\n>\n <BsIconSearch v-if=\"!hideSearchIcon\" />\n <BsInput\n data-autowidth\n :disabled=\"disabled\"\n :id=\"$attrs.id || inputId\"\n :placeholder=\"placeholder\"\n :value=\"value || modelValue\"\n v-bind=\"remaining\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n />\n <button\n v-show=\"showClear\"\n title=\"Clear\"\n type=\"button\"\n @click=\"$emit('clear')\"\n >\n <BsIconClose size=\"sm\" />\n </button>\n</BsInputAddon>\n</template>\n","import { onMounted, onUnmounted } from 'vue'\n\n/**\n * Creates a mutation observer for the target element.\n *\n * @param {Ref} targetRef Vue ref of the target element.\n * @param {function} callback The callback function to be called when a mutation\n * occurs.\n * @param {{}} options The MutationObserver options. See https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/observe#options\n * for a list of these options.\n */\nconst useMutationObserver = (targetRef, callback, options) => {\n let observer = null\n\n onMounted(() => {\n observer = new MutationObserver(callback)\n observer.observe(targetRef.value, options)\n })\n\n onUnmounted(() => {\n observer?.disconnect()\n })\n}\nexport default useMutationObserver\n","<script setup>\nimport { ref, onMounted, onUnmounted, provide, watch, computed, inject } from 'vue'\nimport useMutationObserver from '../../composables/mutationObserver'\nimport useKeydown from '../../composables/keydown'\nimport { optionIdFromVal } from '@utils/dropdown'\nimport { useDeprecatedProp, useDeprecatedPropActual } from '@composables/deprecated.js'\n\n// PROPS\nconst props = defineProps({\n optionsId: {\n type: String,\n required: true\n },\n label: {\n type: String,\n default: \"Select an option\"\n },\n modelValue: {\n type: [ String, Number, Object ],\n default: undefined\n },\n /* Internal use only - no need to document */\n multiselect: {\n type: Boolean,\n default: false\n },\n preventTab: {\n type: Boolean,\n default: true\n },\n // DEPRECATED\n selectedValue: {\n default: undefined\n },\n})\nuseDeprecatedProp(props, 'selectedValue', undefined, 'Use \\'modelValue\\' (or \\'v-model\\') instead')\nconst selectedValueActual = useDeprecatedPropActual(props, 'selectedValue', 'modelValue')\n\n// EMITS\nconst emit = defineEmits([\n 'close',\n 'options-list-shift-tab',\n 'options-list-tab',\n 'update:modelValue',\n])\n\n\n// REFS\nconst optionsRef = ref(null)\n\n\n// STATE\nconst activeDescendantId = ref(null)\nconst activeIndex = ref(-1)\nconst selectedIndex = ref(-1)\nconst optionEls = ref(null)\nconst hasOverflow = ref(false)\nlet registeredOptionsById = {}\n\n// State provided from BsDropdown parent\nconst dropdownEnter = inject('dropdownEnter', ref(false))\nconst dropdownAfterEnter = inject('dropdownAfterEnter', ref(false))\nconst dropdownShown = inject('dropdownShown', ref(false))\n\n\n// PROVIDE (to slotted BsDropdownOptions)\nprovide('optionsId', computed(() => props.optionsId))\nprovide('handleOptionSelect', handleOptionSelect)\nprovide('registerOptionById', ({ id, val }) => {\n registeredOptionsById[id] = val\n})\n\n\n// COMPOSABLES\nuseMutationObserver(optionsRef, refreshOptions, { childList: true })\n\nconst selectKeys = [' ', 'Enter', 'NumpadEnter']\nuseKeydown(selectKeys, handleKeyboardSelect, optionsRef)\n\nconst traverseKeys = ['ArrowDown', 'ArrowUp', 'Home', 'End']\nuseKeydown(traverseKeys, handleKeyDown)\n\nconst typeToFocusKeys = [/^[a-zA-Z0-9]{1}$/]\nconst typeToFocusData = {\n keys: '',\n lastTyped: 0\n}\nuseKeydown(typeToFocusKeys, e => typeToFocus(e, typeToFocusData))\n\n// LIFECYCLE\nonMounted(() => {\n refreshOptions()\n handleShownChange(dropdownShown.value)\n})\n\nonUnmounted(() => {\n registeredOptionsById = null\n})\n\n// Needed for fixing a long-standing firefox bug with scrollbars and content-width\n// https://bugzilla.mozilla.org/show_bug.cgi?id=764076\nwatch(\n [ dropdownEnter, () => optionEls.value?.length ],\n ([ entered, optionsLen ]) => {\n if (entered && optionsLen > 0) {\n hasOverflow.value = optionsRef.value.scrollHeight > optionsRef.value.clientHeight\n }\n }\n)\n\nwatch(dropdownAfterEnter, (newVal) => {\n // Scroll into view once the dropdown is fully done with transitions\n if (newVal) {\n scrollOptionsListIntoView()\n scrollCurrentActiveIntoView()\n }\n})\n\nwatch(dropdownShown, (newVal) => handleShownChange(newVal))\n\n// METHODS\nfunction refreshOptions() {\n optionEls.value = Array.from(\n optionsRef.value.querySelectorAll('[data-component=\"bs-dropdown-option\"]')\n )\n}\n\nfunction scrollOptionsListIntoView() {\n if (optionsRef.value.getBoundingClientRect().bottom > window.innerHeight) {\n optionsRef.value.scrollIntoView({ block: 'nearest' })\n }\n}\n\nfunction scrollCurrentActiveIntoView() {\n if (activeIndex.value > -1) {\n // Always make sure the container is fully scrolled into view otherwise\n // the browser may not scroll the active item into view\n scrollOptionsListIntoView()\n optionEls.value[activeIndex.value]?.scrollIntoView({ block: 'nearest' })\n }\n}\n\nfunction setCurrentActive() {\n if (activeIndex.value > -1) {\n optionEls.value[activeIndex.value]?.setAttribute('data-active', '')\n activeDescendantId.value = optionEls.value[activeIndex.value]?.id\n scrollCurrentActiveIntoView()\n }\n}\n\nfunction removeCurrentActive() {\n if (activeIndex.value > -1) {\n optionEls.value[activeIndex.value]?.removeAttribute('data-active')\n }\n}\n\nfunction handleOptionsFocus() {\n if (activeIndex.value < 0) {\n activeIndex.value = 0\n activeDescendantId.value = optionEls.value[0]?.id\n }\n setCurrentActive()\n}\n\nfunction handleShownChange(newVal) {\n if (newVal) {\n handleShown()\n } else {\n handleNotShown()\n }\n}\n\nfunction handleShown() {\n // Note that multiselect handles its own selection state\n if (!props.multiselect) {\n // Find selected index\n selectedIndex.value = optionEls.value.findIndex(\n // valueIdKey will only be present if value is an object\n el => el.dataset.valueIdKey\n ? el.id === optionIdFromVal(props.optionsId, selectedValueActual.value, el.dataset.valueIdKey)\n : el.dataset.value === String(selectedValueActual.value)\n )\n\n // Set selected when applicable\n if (!props.multiselect && selectedIndex.value > -1) {\n optionEls.value[selectedIndex.value]?.setAttribute('data-selected', '')\n optionEls.value[selectedIndex.value]?.setAttribute('aria-selected', 'true')\n }\n\n // Set active index\n activeIndex.value = selectedIndex.value\n }\n}\n\nfunction handleNotShown() {\n // Reset selected option\n optionEls.value.forEach((option) => {\n option.removeAttribute('data-selected')\n // aria-selected should always be either true or false - https://w3c.github.io/aria/#aria-selected\n option.setAttribute('aria-selected', 'false')\n })\n // Reset active option\n removeCurrentActive()\n // Reset state\n selectedIndex.value = -1\n activeIndex.value = -1\n activeDescendantId.value = null\n}\n\nfunction handleOptionSelect(option) {\n // If the option has a link, click it\n option.querySelector('a')?.click()\n\n // Retrieve option value\n let value = option.dataset.valueIdKey\n ? registeredOptionsById[option.id]\n : option.dataset.value\n if (option.dataset.valueType == 'number') {\n value = Number(value)\n }\n // Emit events\n activeDescendantId.value = option.id\n removeCurrentActive()\n emit('update:modelValue', value)\n emit('close')\n}\n\nfunction handleKeyboardSelect(ev) {\n handleOptionSelect(optionEls.value[activeIndex.value])\n ev.preventDefault()\n}\n\nfunction handleKeyDown(ev) {\n if (dropdownShown.value) {\n switch (ev.key) {\n case 'ArrowDown':\n traverse('down')\n ev.preventDefault()\n break\n case 'ArrowUp':\n traverse('up')\n ev.preventDefault()\n break\n case 'Home':\n traverse('home')\n ev.preventDefault()\n break\n case 'End':\n traverse('end')\n ev.preventDefault()\n break\n }\n }\n}\n\n/** Traverses the option list via keyboard navigation */\nfunction traverse(direction) {\n let newIndex\n switch (direction) {\n case 'up':\n newIndex = (activeIndex.value - 1 < 0) ?\n optionEls.value.length - 1 :\n activeIndex.value - 1\n break\n case 'down':\n newIndex = (activeIndex.value + 1) % optionEls.value.length\n break\n case 'home':\n newIndex = 0\n break\n case 'end':\n newIndex = optionEls.value.length - 1\n break\n }\n updateCurrentActive(newIndex)\n}\n\nfunction typeToFocus(ev, ttfState) {\n if (!dropdownShown.value) return\n\n ttfState.keys = (ev.timeStamp - ttfState.lastTyped > 500) ? ev.key : ttfState.keys + ev.key\n ttfState.lastTyped = ev.timeStamp\n\n const matchIdx = optionEls.value.findIndex((el) => {\n return el.textContent\n .replaceAll(/[^a-zA-Z0-9]/g, '')\n .toLowerCase()\n .startsWith(ttfState.keys)\n })\n\n if (matchIdx > -1) updateCurrentActive(matchIdx, false)\n}\n\nfunction updateCurrentActive(activeIdx, withFocus = true) {\n removeCurrentActive()\n activeIndex.value = activeIdx\n if (document.activeElement !== optionsRef.value && withFocus) {\n // Focusing the options list actually triggers setCurrentActive\n optionsRef.value.focus()\n } else {\n setCurrentActive()\n }\n}\n\n// We're exposing these refs/vars/funcs to parent component(s) (e.g. BsDropdownMultiselect),\n// so we'll want to treat them as part of the public interface\n// for this component in terms of preserving compatibility.\ndefineExpose({\n activeIndex,\n optionEls,\n optionsRef,\n refreshOptions,\n setCurrentActive\n})\n</script>\n\n<template>\n\n<ul\n ref=\"optionsRef\"\n :aria-activedescendant=\"activeDescendantId || undefined\"\n :aria-label=\"label\"\n aria-live=\"polite\"\n class=\"bs-dropdown-options\"\n data-component=\"bs-dropdown-option-list\"\n :data-overflow=\"hasOverflow\"\n :id=\"optionsId\"\n role=\"listbox\"\n :tabindex=\"dropdownShown ? 0 : undefined\"\n @blur=\"removeCurrentActive\"\n @focus=\"handleOptionsFocus\"\n @keydown.shift.tab=\"emit('options-list-shift-tab')\"\n @keydown.tab.exact=\"emit('options-list-tab')\"\n @mousedown.prevent\n>\n <slot></slot>\n</ul>\n\n</template>\n","<script setup>\nimport { computed, nextTick, ref, watch } from 'vue'\nimport BsDropdownOptionList from '../dropdown-option-list/BsDropdownOptionList.vue'\nimport BsDropdownOptionBuilder from '../dropdown-option-builder/BsDropdownOptionBuilder.vue'\n\nconst props = defineProps({\n focusOnOpen: {\n type: Boolean,\n default: true\n },\n label: {\n type: String,\n default: \"Select an option\"\n },\n options: {\n type: Array,\n default: () => []\n },\n optionsId: {\n type: String,\n required: true\n },\n selectedOptions: {\n type: Array,\n default: () => []\n },\n shown: {\n type: Boolean,\n default: false\n },\n valueIdKey: {\n type: String,\n default: \"id\"\n }\n})\n\nconst emit = defineEmits([\n 'check-option',\n 'options-list-shift-tab',\n 'options-list-tab',\n 'uncheck-option',\n 'update:selectedOptions',\n])\n\nconst optlist = ref(null)\nconst selectedLocalOptions = ref([])\nconst unselectedLocalOptions = ref([])\n\nconst showDivider = computed(() => selectedLocalOptions.value?.length && unselectedLocalOptions.value?.length)\nconst hasSomeOptions = computed(() => selectedLocalOptions.value?.length || unselectedLocalOptions.value?.length)\n\nlet refocusPending = false\n\nwatch(() => props.options, () => {\n sortSelectedUnselected(props.selectedOptions)\n})\n\nwatch(() => props.selectedOptions,\n sortSelectedUnselected,\n { immediate: true }\n)\n\nwatch(() => props.shown, (val) => {\n if (val && props.focusOnOpen) nextTick(focusFirstOption)\n})\n\nfunction focusFirstOption() {\n if (optlist.value) {\n optlist.value.refreshOptions()\n optlist.value.optionsRef.focus()\n }\n}\n\n// When an opt is (un)selected, that opt moves (down) up, so we need to set active\n// on the opt that now takes the position of the previously active opt\nfunction refocusOnOption() {\n if (optlist.value) {\n optlist.value.refreshOptions()\n optlist.value.setCurrentActive()\n }\n}\n\nfunction sortSelectedUnselected(updatedSelectedOptions = []) {\n const byId = updatedSelectedOptions[0]?.[props.valueIdKey] !== undefined\n if (byId) updatedSelectedOptions = updatedSelectedOptions.map(opt => opt[props.valueIdKey])\n const valuesOrIds = new Set(updatedSelectedOptions)\n const selected = []\n const unselected = []\n props.options.forEach((option) => {\n const newOption = { ...option }\n const inputIdMiddle = byId ? option.value[props.valueIdKey] : option.value\n const inputId = `${props.optionsId}-${inputIdMiddle}-cb`\n if (valuesOrIds.has(byId ? option.value[props.valueIdKey] : option.value)) {\n newOption.checkbox = { inputId, checked: true }\n selected.push(newOption)\n } else {\n newOption.checkbox = { inputId, checked: false }\n unselected.push(newOption)\n }\n })\n\n selectedLocalOptions.value = selected\n nextTick(() => {\n unselectedLocalOptions.value = unselected\n nextTick(() => {\n // we need to this additional check to avoid the `immediate` watcher on\n // `props.selectedOptions` from causing a refocus when the dropdown is closed\n if (refocusPending) refocusOnOption()\n refocusPending = false\n })\n })\n}\n\nfunction preorderPayload(unsortedPayload = []) {\n const values = new Set(unsortedPayload)\n const sorted = []\n // Maintain the order of the options as they were passed in\n props.options.forEach(f => {\n if (values.has(f.value)) sorted.push(f.value)\n })\n return sorted\n}\n\nfunction handleOptionSelect(value) {\n let payload = []\n if (props.selectedOptions.includes(value)) {\n payload = props.selectedOptions.filter(f => f !== value)\n emit('uncheck-option', value)\n } else {\n payload = preorderPayload([...props.selectedOptions, value])\n emit('check-option', value)\n }\n refocusPending = true\n emit('update:selectedOptions', payload)\n}\n</script>\n\n<template>\n<BsDropdownOptionList\n ref=\"optlist\"\n aria-multiselectable=\"true\"\n data-component=\"bs-dropdown-multiselect\"\n :label=\"label\"\n multiselect\n :options-id=\"optionsId\"\n :shown=\"shown\"\n @options-list-shift-tab=\"emit('options-list-shift-tab')\"\n @options-list-tab=\"emit('options-list-tab')\"\n @update:modelValue=\"handleOptionSelect\"\n>\n <template v-if=\"hasSomeOptions\">\n <BsDropdownOptionBuilder\n :options=\"selectedLocalOptions\"\n :show-no-options=\"false\"\n :value-id-key=\"valueIdKey\"\n />\n <li aria-label=\"separator\" role=\"option\" v-show=\"showDivider\"><hr /></li>\n <BsDropdownOptionBuilder\n :options=\"unselectedLocalOptions\"\n :show-no-options=\"false\"\n :value-id-key=\"valueIdKey\"\n />\n </template>\n\n <li\n v-else\n role=\"option\"\n data-no-hover=\"true\"\n >\n <slot name=\"no-options\">No options</slot>\n </li>\n</BsDropdownOptionList>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue'\nimport { useGenIdAttrs } from '../../composables/genId'\nimport BsFilterButton from '../filter-button/BsFilterButton.vue'\nimport BsDropdown from '../dropdown/BsDropdown.vue'\nimport BsDropdownOptionBuilder from '../dropdown-option-builder/BsDropdownOptionBuilder.vue'\nimport BsInputSearch from '../input-search/BsInputSearch.vue'\nimport BsButton from '@components/button/BsButton.vue'\nimport BsDropdownMultiselect from '../dropdown-multiselect/BsDropdownMultiselect.vue'\nimport BsDropdownOptionList from '../dropdown-option-list/BsDropdownOptionList.vue'\n\n// PROPS\nconst props = defineProps({\n anchorId: {\n type: String,\n default: '',\n },\n breakout: {\n type: Boolean,\n default: false,\n },\n containerId: {\n type: String,\n default: '',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n dropdownLabel: {\n type: String,\n default: 'Select an option',\n },\n dropdownPosition: {\n type: String,\n validator: value => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n default: '',\n },\n dropdownWidth: {\n type: String,\n validator: value => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor', 'toggle'].includes(value)\n },\n default: 'md',\n },\n filter: {\n type: Boolean,\n default: false,\n },\n filterButtonText: {\n type: String,\n default: 'Select',\n },\n filterLabel: {\n type: String,\n default: '',\n },\n filterPlaceholder: {\n type: String,\n default: 'Search...',\n },\n helperText: {\n type: String,\n default: '',\n },\n helperDescription: {\n type: String,\n default: '',\n },\n multiselect: {\n type: Boolean,\n default: false,\n },\n open: {\n type: Boolean,\n default: true,\n },\n options: {\n type: Array,\n default: () => [],\n },\n optionsId: {\n type: String,\n default: '',\n },\n selectedOption: {\n type: [String, Number, Object],\n default: '',\n },\n selectedOptions: {\n type: Array,\n default: () => [],\n },\n showBadgeCount: {\n type: Boolean,\n default: false,\n },\n toggleId: {\n type: String,\n default: '',\n },\n toggleLabel: {\n type: String,\n default: 'Filter',\n },\n toggleSize: {\n type: String,\n validator: val => ['', 'sm', 'xs'].includes(val),\n default: '',\n },\n useMobileStyle: {\n type: Boolean,\n default: true,\n },\n valueIdKey: {\n type: String,\n default: 'id',\n },\n})\n\n// EMITS\nconst emit = defineEmits([\n 'check-option',\n 'close',\n 'options-list-shift-tab',\n 'options-list-tab',\n 'toggled',\n 'uncheck-option',\n 'update:selectedOption',\n 'update:selectedOptions',\n])\n\n// VARIABLES\nlet toggleEl = null\n\n// COMPOSABLES\nconst [autoToggleId, autoOptionsId] = useGenIdAttrs(2)\n\n// REFS\nconst isShown = ref(false)\nconst filterTerm = ref('')\n\n// COMPUTED\nconst badgeCount = computed(() => {\n return props.selectedOptions.length\n})\n\nconst OptionList = computed(() =>\n props.multiselect ? BsDropdownMultiselect : BsDropdownOptionList,\n)\n\nconst optionsIdActual = computed(() => props.optionsId || autoOptionsId.value)\n\nconst toggleIdActual = computed(() => props.toggleId || autoToggleId.value)\n\nconst filteredOptions = computed(() => {\n if (filterTerm.value) {\n return props.options.filter(option =>\n option.label.toLowerCase().startsWith(filterTerm.value.toLowerCase()),\n )\n }\n return props.options\n})\n\nconst optionsComputed = computed(() => {\n return props.filter ? filteredOptions.value : props.options\n})\n\n// METHODS\nconst getToggleEl = () =>\n toggleEl ? toggleEl : (toggleEl = document.getElementById(toggleIdActual.value))\n\nfunction checkShouldRestoreFocus() {\n const activeEl = document.activeElement\n return !activeEl || activeEl.tagName === 'BODY' || activeEl.id === optionsIdActual.value\n}\n\nfunction closeAndRestoreFocus() {\n isShown.value = false\n emit('close')\n\n if (checkShouldRestoreFocus()) {\n getToggleEl()?.focus?.()\n }\n}\n\nfunction handleClose() {\n if (isShown.value) {\n closeAndRestoreFocus()\n }\n}\n\n/** When enter has started, this means the element is mounted. */\nfunction handleEnterStart() {\n isShown.value = true\n}\n\nfunction handleUncheckOption(value) {\n const newOptionsValue = props.selectedOptions.filter(opt => opt !== value)\n emit('update:selectedOptions', newOptionsValue)\n emit('uncheck-option', value)\n}\n\nfunction handleCheckOption(value) {\n const newOptionsValue = [...props.selectedOptions, value]\n emit('update:selectedOptions', newOptionsValue)\n emit('check-option', value)\n}\n\nfunction handleSingleSelect(val) {\n if (!props.multiselect) {\n emit('update:selectedOption', val)\n closeAndRestoreFocus()\n }\n}\n\nfunction handleSearchClear() {\n filterTerm.value = ''\n}\n\nfunction handleSearchUpdate(val) {\n filterTerm.value = val\n}\n</script>\n\n<template>\n <div class=\"bs-dropdown-with-toggle\" :id=\"$attrs.id\">\n <slot\n name=\"toggle\"\n :anchor-id=\"anchorId\"\n :options-id=\"optionsIdActual\"\n :toggle-id=\"toggleIdActual\"\n >\n <BsFilterButton\n :aria-controls=\"optionsIdActual\"\n :aria-expanded=\"open\"\n :disabled=\"disabled\"\n :id=\"toggleIdActual\"\n :open=\"open\"\n :options-id=\"optionsIdActual\"\n :size=\"toggleSize\"\n :badge-count=\"showBadgeCount && multiselect ? badgeCount : undefined\"\n @click=\"$emit('toggled')\"\n >\n <template #label>\n <slot name=\"toggle-label\">\n {{ toggleLabel }}\n </slot>\n </template>\n </BsFilterButton>\n </slot>\n <BsDropdown\n :anchor-id=\"anchorId || toggleIdActual\"\n :breakout=\"breakout\"\n :container-id=\"containerId\"\n :helper-text=\"helperText\"\n :helper-description=\"helperDescription\"\n :position=\"dropdownPosition\"\n preloaded\n :shown=\"open\"\n :use-mobile-style=\"useMobileStyle\"\n :width=\"dropdownWidth\"\n @close=\"handleClose\"\n @enter=\"handleEnterStart\"\n @after-leave=\"handleSearchClear\"\n >\n <div v-if=\"filter\" class=\"filter-input-container\">\n <BsInputSearch\n :aria-label=\"filterLabel\"\n :model-value=\"filterTerm\"\n :placeholder=\"filterPlaceholder\"\n @update:modelValue=\"handleSearchUpdate\"\n @clear=\"handleSearchClear\"\n />\n </div>\n\n <!--\n model-value / update:modelValue - for BsDropdownOptionList\n selected-options / check-option / uncheck-option - for BsDropdownMultiselect\n -->\n <OptionList\n :class=\"{ 'filterable-options': filter }\"\n :label=\"dropdownLabel\"\n :model-value=\"selectedOption\"\n :options=\"multiselect ? optionsComputed : undefined\"\n :options-id=\"optionsIdActual\"\n :selected-options=\"selectedOptions\"\n :shown=\"open\"\n :value-id-key=\"valueIdKey\"\n @check-option=\"handleCheckOption\"\n @close=\"multiselect ? undefined : handleClose()\"\n @options-list-shift-tab=\"$emit('options-list-shift-tab')\"\n @options-list-tab=\"$emit('options-list-tab')\"\n @uncheck-option=\"handleUncheckOption\"\n @update:modelValue=\"handleSingleSelect\"\n >\n <template v-if=\"!multiselect\">\n <BsDropdownOptionBuilder :options=\"optionsComputed\" :value-id-key=\"valueIdKey\" />\n </template>\n </OptionList>\n <div v-if=\"multiselect\" class=\"mobile-select-button-container\">\n <BsButton\n :title=\"filterButtonText\"\n class=\"mobile-select-button\"\n @click=\"() => emit('close')\"\n >{{ filterButtonText }}</BsButton\n >\n </div>\n </BsDropdown>\n </div>\n</template>\n\n<style>\ndiv:where(.bs-dropdown-with-toggle) {\n position: relative;\n}\n\n:where(.bs-label + .bs-dropdown-with-toggle) {\n margin-top: 0.25rem;\n}\n\n.filter-input-container {\n padding: 0.75rem;\n}\n\n.filterable-options {\n padding-top: 0;\n}\n</style>\n","<script setup>\nimport { computed, ref } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport BsInputCombobox from './internal/BsInputCombobox.vue'\nimport BsDropdownWithToggle from '@components/dropdown-with-toggle/BsDropdownWithToggle.vue'\n\n// PROPS\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false\n },\n displayValue: {\n type: String,\n default: ''\n },\n dropdownPosition: {\n type: String,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n dropdownWidth: {\n type: String,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n error: {\n type: Boolean,\n default: false\n },\n helperText: {\n type: String,\n default: ''\n },\n helperDescription: {\n type: String,\n default: ''\n },\n hintId: {\n type: String,\n },\n inputId: {\n type: String,\n },\n modelValue: {\n type: String,\n default: ''\n },\n options: {\n type: Array,\n default: () => []\n },\n placeholder: {\n type: String,\n },\n required: {\n type: Boolean,\n default: false\n },\n updateOnInput: {\n type: Boolean,\n default: false\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n valueIdKey: {\n type: String,\n default: 'id'\n },\n})\n\n// EMITS\nconst emit = defineEmits(['update:modelValue', 'combobox:change', 'combobox:input'])\n\n// STATE\nconst [ inputIdGen, inputWrapperId, optionsId ] = useGenIdAttrs(3)\nconst open = ref(false)\nconst preventFocusOpen = ref(false)\n\n// REFS\nconst inputComboboxRef = ref(null)\n\n// COMPUTED\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\n\n// VARIABLES\nlet inputEl = null\n\n// METHODS\nfunction getInputEl() {\n if (!inputEl) {\n inputEl = inputComboboxRef.value.$el.querySelector('input')\n }\n return inputEl\n}\n\nfunction handleChange(e) {\n emit('combobox:change', e.target.value)\n emit('update:modelValue', e.target.value)\n}\n\nfunction handleClear() {\n getInputEl().focus()\n emit('combobox:change', '')\n emit('update:modelValue', '')\n}\n\nfunction handleInput(e) {\n emit('combobox:input', e.target.value)\n if (props.updateOnInput) {\n emit('update:modelValue', e.target.value)\n }\n}\n\nfunction handleDropdownClose() {\n open.value = false\n // Input is re-focused after the dropdown closes, so we need to prevent\n // re-opening the dropdown immediately in this case\n if (document.activeElement !== getInputEl()) {\n preventFocusOpen.value = true\n }\n}\n\n// \"focus\" event happens between \"mousedown\" and \"mouseup\", so we need to\n// prevent opening the dropdown on focus if the input was clicked (note that\n// \"click\" event is the same as \"mousedown\" >> \"mouseup\")\nfunction handleInputMousedown() {\n preventFocusOpen.value = true\n}\n\nfunction handleInputMouseup() {\n open.value = true\n preventFocusOpen.value = false\n}\n\nfunction handleFocus() {\n if (preventFocusOpen.value) {\n // Preventing opening the dropdown only once. This is essentially only\n // for the case where the dropdown is closed and the input is focused\n preventFocusOpen.value = false\n } else {\n open.value = true\n }\n}\n\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n<BsDropdownWithToggle\n :anchor-id=\"inputWrapperId\"\n :disabled=\"disabled\"\n :dropdown-position=\"dropdownPosition\"\n :dropdown-width=\"dropdownWidth\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :multiselect=\"false\"\n :open=\"open\"\n :options=\"options\"\n :options-id=\"optionsId\"\n :selected-option=\"modelValue\"\n :toggle-id=\"$attrs.id || inputIdAttr\"\n :use-mobile-style=\"useMobileStyle\"\n :value-id-key=\"valueIdKey\"\n @close=\"handleDropdownClose\"\n @options-list-tab=\"open = false\"\n @update:selectedOption=\"$emit('update:modelValue', $event)\"\n>\n <template #toggle>\n <BsInputCombobox\n ref=\"inputComboboxRef\"\n :id=\"$attrs.id || inputIdAttr\"\n :container-id=\"inputWrapperId\"\n :disabled=\"disabled\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :model-value=\"displayValue || modelValue\"\n :open=\"open\"\n :options-id=\"optionsId\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n @change=\"handleChange\"\n @clear=\"handleClear\"\n @input=\"handleInput\"\n @input-focus=\"handleFocus\"\n @input-mousedown=\"handleInputMousedown\"\n @input-mouseup=\"handleInputMouseup\"\n @input-shift-tab=\"open = false\"\n @toggled=\"open = !open\"\n v-bind=\"$attrs\"\n />\n </template>\n</BsDropdownWithToggle>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport BsDropdownCombobox from '../dropdown-combobox/BsDropdownCombobox.vue'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsLabel from '../label/BsLabel.vue'\n\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false\n },\n displayValue: {\n type: String,\n default: ''\n },\n dropdownPosition: {\n type: String,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n dropdownWidth: {\n type: String,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n error: {\n type: Boolean,\n default: false\n },\n errorMsg: {\n type: String,\n },\n helperText: {\n type: String,\n default: ''\n },\n helperDescription: {\n type: String,\n default: ''\n },\n hint: {\n type: String,\n },\n hintId: {\n type: String,\n },\n inputId: {\n type: String,\n },\n label: {\n type: String,\n },\n modelValue: {\n type: String,\n default: ''\n },\n options: {\n type: Array,\n default: () => []\n },\n placeholder: {\n type: String,\n },\n required: {\n type: Boolean,\n default: false\n },\n updateOnInput: {\n type: Boolean,\n default: false\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n valueIdKey: {\n type: String,\n default: 'id'\n },\n})\nconst emit = defineEmits(['update:modelValue', 'combobox:change', 'combobox:input'])\n\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed properties\nconst hintMsg = computed(() => (\n (props.error && props.errorMsg) || props.hint || undefined\n))\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\n\n</script>\n\n<template>\n<div data-component=\"bs-dropdown-combobox-field\" v-bind=\"filtered\">\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <BsDropdownCombobox\n :disabled=\"disabled\"\n :display-value=\"displayValue\"\n :dropdown-position=\"dropdownPosition\"\n :dropdown-width=\"dropdownWidth\"\n :error=\"error\"\n :helper-text=\"helperText\"\n :helper-description=\"helperDescription\"\n :hint-id=\"hintId\"\n :input-id=\"$attrs.id || inputIdAttr\"\n :model-value=\"modelValue\"\n :options=\"options\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :update-on-input=\"updateOnInput\"\n :use-mobile-style=\"useMobileStyle\"\n :value-id-key=\"valueIdKey\"\n @combobox:change=\"$event => $emit('combobox:change', $event)\"\n @combobox:input=\"$event => $emit('combobox:input', $event)\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n />\n <BsFieldDetails v-if=\"hintMsg\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint\"\n :hint-id=\"hintId\"\n />\n</div>\n</template>\n","<script setup>\nimport { ref } from 'vue'\nimport BsDropdown from '../dropdown/BsDropdown'\nimport BsDropdownOptionList from '../dropdown-option-list/BsDropdownOptionList'\n\n// PROPS\nconst props = defineProps({\n // DROPDOWN PROPS\n anchorId: {\n type: String,\n default: undefined\n },\n breakout: {\n type: Boolean,\n default: false\n },\n containerId: {\n type: String,\n default: undefined\n },\n helperDescription: {\n type: String,\n default: undefined\n },\n helperText: {\n type: String,\n default: undefined\n },\n position: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n shown: {\n type: Boolean,\n default: true\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n width: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n\n // OPTION LIST PROPS\n label: {\n type: String,\n default: \"Select an option\"\n },\n modelValue: {\n type: [ String, Number ],\n default: undefined\n },\n optionsId: {\n type: String,\n required: true\n },\n preventTab: {\n type: Boolean,\n default: true\n },\n typeToFocus: {\n type: Boolean,\n default: false\n },\n})\n\n// EMITS\nconst emit = defineEmits([\n 'update:modelValue',\n 'close',\n 'after-enter',\n 'after-leave'\n])\n\n// STATE\nconst isShown = ref(false)\n\n// METHODS\n/** When enter has started, this means the element is mounted. */\nfunction handleEnter() {\n isShown.value = true\n}\n\nfunction handleSelect(ev) {\n isShown.value = false\n emit('update:modelValue', ev)\n emit('close')\n}\n\nfunction handleClose() {\n if (isShown.value) {\n isShown.value = false\n emit('close')\n }\n}\n</script>\n\n<template>\n<BsDropdown\n :anchor-id=\"anchorId\"\n :breakout=\"breakout\"\n :container-id=\"containerId\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :position=\"position\"\n :preloaded=\"preloaded\"\n :shown=\"shown\"\n :use-mobile-style=\"useMobileStyle\"\n :width=\"width\"\n @close=\"handleClose\"\n @after-enter=\"emit('after-enter')\"\n @enter=\"handleEnter\"\n @after-leave=\"emit('after-leave')\"\n>\n <BsDropdownOptionList\n :label=\"label\"\n :model-value=\"modelValue\"\n :options-id=\"optionsId\"\n :prevent-tab=\"preventTab\"\n :type-to-focus=\"typeToFocus\"\n @update:model-value=\"handleSelect\"\n @close=\"handleClose\"\n >\n <slot />\n </BsDropdownOptionList>\n</BsDropdown>\n</template>\n","<!-- Handles backwards compatibility with deprecated props -->\n<!-- Replace with BsDropdownWithOptionsNew when retiring these props -->\n<script setup>\nimport { computed } from 'vue'\nimport BsDropdownWithOptionsNew from './BsDropdownWithOptionsNew.vue'\nimport { useDeprecatedTransition, useDeprecatedProp } from '@composables/deprecated.js'\n\n// PROPS\nconst props = defineProps({\n anchorId: {\n type: String,\n default: undefined\n },\n shown: {\n type: Boolean,\n default: true\n },\n breakout: {\n type: Boolean,\n default: false\n },\n containerId: {\n type: String,\n default: undefined\n },\n helperDescription: {\n type: String,\n default: undefined\n },\n helperText: {\n type: String,\n default: undefined\n },\n position: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n width: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n\n // OPTION LIST PROPS\n label: {\n type: String,\n default: \"Select an option\"\n },\n modelValue: {\n type: [ String, Number ],\n default: undefined\n },\n optionsId: {\n type: String,\n required: true\n },\n preventTab: {\n type: Boolean,\n default: true\n },\n\n // DEPRECATED\n center: {\n default: undefined\n },\n enterControlled: {\n default: undefined\n },\n enterTrigger: {\n default: undefined\n },\n leaveTrigger: {\n default: undefined\n },\n right: {\n default: undefined\n },\n selectedValue: {\n default: undefined\n },\n toggleId: {\n default: undefined\n },\n top: {\n default: undefined\n },\n})\nuseDeprecatedProp(props, 'center', 'position')\nuseDeprecatedProp(props, 'enterControlled', 'preloaded')\nuseDeprecatedProp(props, 'enterTrigger', 'shown')\nuseDeprecatedProp(props, 'leaveTrigger', 'shown')\nuseDeprecatedProp(props, 'right', 'position')\nuseDeprecatedProp(props, 'selectedValue', undefined, 'Use \\'modelValue\\' (or \\'v-model\\') instead')\nuseDeprecatedProp(props, 'toggleId', 'anchorId')\nuseDeprecatedProp(props, 'top', 'position')\n\nconst emit = defineEmits([\n 'update:modelValue',\n 'close',\n 'after-enter',\n 'after-leave'\n])\n\n// Handles enterControlled/enterTrigger/leaveTrigger backwards compatibility\nconst { transition: shownActual } = useDeprecatedTransition(props)\n\n// Handles width backwards compatibility\nconst widthActual = computed(() => {\n return props.width === 'toggle' ? 'anchor' : props.width\n})\n\n// Handles top/center/right backwards compatibility\nconst positionActual = computed(() => {\n if (props.top) {\n return 'top'\n }\n if (props.center) {\n return 'center'\n }\n if (props.right) {\n return 'right'\n }\n return props.position\n})\n\n// Handles toggleId backwards compatibility\nconst anchorIdActual = computed(()=> {\n if (props.toggleId) {\n return props.toggleId\n }\n return props.anchorId\n})\n\n// Handles selectedValue backwards compatibility\nconst modelValueActual = computed(() => {\n return props.selectedValue || props.modelValue\n})\n\nfunction handleSelect(ev) {\n emit('update:modelValue', ev)\n}\n</script>\n\n<template>\n<BsDropdownWithOptionsNew\n :anchor-id=\"anchorIdActual\"\n :breakout=\"breakout\"\n :container-id=\"containerId\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :label=\"label\"\n :model-value=\"modelValueActual\"\n :options-id=\"optionsId\"\n :position=\"positionActual\"\n :preloaded=\"preloaded\"\n :prevent-tab=\"preventTab\"\n :shown=\"shownActual\"\n :use-mobile-style=\"useMobileStyle\"\n :width=\"widthActual\"\n @close=\"emit('close')\"\n @after-enter=\"emit('after-enter')\"\n @after-leave=\"emit('after-leave')\"\n @update:model-value=\"handleSelect\"\n>\n <slot />\n</BsDropdownWithOptionsNew>\n</template>\n","<script setup>\nimport { ref, computed, useSlots } from 'vue'\nimport { BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport { propDefinitions } from './defs-empty-state.js'\n\nconst props = defineProps(propDefinitions)\n\nconst slots = useSlots()\n\nconst loaded = ref(false)\n\n// Handles deprecated prop\nconst iconActual = computed(() => {\n return props.iconName || props.icon\n})\nconst shouldDisplay = computed(() => {\n if (!!!slots['icon'] && typeof iconActual.value === 'string') {\n return loaded.value\n }\n\n return true\n})\n</script>\n\n<template>\n<div\n v-show=\"shouldDisplay\"\n class=\"bs-empty-state\"\n data-component=\"bs-empty-state\"\n :data-size=\"size\"\n>\n <div class=\"bs-empty-state-icon\">\n <slot name=\"icon\">\n <BsIcon\n v-if=\"typeof iconActual === 'string'\"\n :name=\"iconActual\"\n size=\"auto\"\n @loading=\"loaded = false\"\n @loaded=\"loaded = true\"\n />\n <component v-else :is=\"iconActual\" size=\"auto\" />\n </slot>\n </div>\n <div>\n <p class=\"bs-empty-state-title\">{{ title }}</p>\n <p class=\"bs-empty-state-description\" v-if=\"size !== 'xs'\">\n <slot name=\"description\">{{ description }}</slot>\n </p>\n <slot name=\"call-to-action\"></slot>\n </div>\n</div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue'\nimport useClickAway from '../../composables/clickAway'\nimport useKeydown from '../../composables/keydown'\nimport BsEnhancedTransition from '../transition/BsEnhancedTransition.vue'\nimport { BsIconClose } from '@wwtdev/bsds-icons-vue3'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = defineProps({\n absolute: {\n type: Boolean,\n default: false\n },\n position: {\n type: String,\n default: undefined,\n validator (value) {\n return ['', 'right',].includes(value)\n }\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n shown: {\n type: Boolean,\n default: true\n },\n size: {\n type: String,\n default: undefined,\n validator (value) {\n return ['', 'lg'].includes(value)\n }\n },\n toggleId: {\n type: String,\n required: true\n }\n})\n\nconst emit = defineEmits([ 'close' ])\n\nconst flyoutRef = ref(null)\n\nconst toggleEl = computed(() => {\n return document.getElementById(props.toggleId)\n})\n\nuseClickAway([ flyoutRef, toggleEl ], closeFlyout)\nuseKeydown([ 'Escape' ], closeFlyout)\n\nfunction closeFlyout() {\n const hasShownChild = flyoutRef.value?.querySelector('[data-shown=\"true\"]') !== null\n if (props.shown && !hasShownChild) {\n emit('close')\n }\n}\n</script>\n\n<template>\n<BsEnhancedTransition\n name=\"bs-flyout\"\n :preloaded=\"preloaded\"\n :shown=\"shown\"\n>\n <div\n ref=\"flyoutRef\"\n class=\"bs-flyout\"\n :data-absolute=\"absolute\"\n data-component=\"bs-flyout\"\n :data-position=\"position\"\n :data-shown=\"shown\"\n :data-size=\"size\"\n v-bind=\"$attrs\"\n >\n <div class=\"bs-flyout-close-container\">\n <button\n type=\"button\"\n title=\"Close\"\n aria-label=\"Close\"\n @click=\"closeFlyout\"\n >\n <BsIconClose />\n </button>\n </div>\n <slot></slot>\n </div>\n</BsEnhancedTransition>\n</template>\n","<script setup>\nimport { ref, onMounted, onBeforeUnmount, watch, computed } from 'vue'\n\n// PROPS\nconst props = defineProps({\n active: {\n type: Boolean,\n default: true,\n },\n preventFirstShiftTab: {\n type: Boolean,\n default: false,\n },\n preventLastTab: {\n type: Boolean,\n default: false,\n },\n selectorPrefix: {\n type: String,\n default: '',\n },\n})\n\n// EMITS\nconst emit = defineEmits(['first-shift-tab', 'last-tab' ])\n\n// REFS\nconst focusGuard = ref(null)\n\n// VARIABLES / STATE\nconst FOCUSABLE_ELEMENT_TAGS = [\n 'a[href]',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'area[href]',\n 'details',\n 'summary',\n '[tabindex]',\n '[contenteditable=\"true\"]',\n]\n\n// COMPUTED\nconst selector = computed(() => {\n // Build selector\n let selector = ''\n FOCUSABLE_ELEMENT_TAGS.forEach((tag) => {\n selector += `${props.selectorPrefix}${tag}:not([disabled]):not([tabindex=\"-1\"]),`\n })\n\n // Remove trailing comma\n selector = selector.slice(0, -1)\n return selector\n})\n\n// LIFE CYCLE HOOKS\nonMounted(() => {\n if (props.active) {\n window.addEventListener('keydown', handleKeydown)\n }\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKeydown)\n})\n\n// WATCHERS\nwatch(() => props.active, (newValue) => {\n if (newValue) {\n window.addEventListener('keydown', handleKeydown)\n } else {\n window.removeEventListener('keydown', handleKeydown)\n }\n})\n\n// METHODS\nfunction handleKeydown(ev) {\n if (ev.key === 'Tab') {\n // Find all focusable elements\n // Grabbing these every time since the DOM could change\n const focusableElements = focusGuard.value.querySelectorAll(selector.value)\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n // Handle actual tabbing\n if (document.activeElement === firstElement && ev.shiftKey) {\n handleFirstShiftTab(ev, lastElement)\n } else if (document.activeElement === lastElement && !ev.shiftKey) {\n handleLastTab(ev, firstElement)\n } else if (!focusGuard.value.contains(document.activeElement)) {\n handleOutsideTab(ev, firstElement)\n }\n }\n}\n\nfunction handleFirstShiftTab(ev, lastElement) {\n ev.preventDefault()\n if (!props.preventFirstShiftTab) {\n // Wrap around to the last element\n lastElement.focus()\n }\n emit('first-shift-tab', ev)\n}\n\nfunction handleLastTab(ev, firstElement) {\n ev.preventDefault()\n if (!props.preventLastTab) {\n // Wrap around to the first element\n firstElement.focus()\n }\n emit('last-tab', ev)\n}\n\nfunction handleOutsideTab(ev, firstElement) {\n ev.preventDefault()\n // Current focus is outside the guard, so bring it in\n firstElement.focus()\n}\n</script>\n\n<template>\n<div ref=\"focusGuard\">\n <slot></slot>\n</div>\n</template>\n","import { ref, computed, toRaw } from 'vue'\n\nexport default function useNavigationUtils(props) {\n // STATE\n const collapsedSections = ref({})\n\n // COMPUTED\n const rawNavData = computed(() => toRaw(props.navData))\n\n // METHODS\n function initializeSections(initialValue) {\n rawNavData.value.forEach((item) => {\n if (item.navItems?.length > 0 && !item.dividerOnly) {\n // Only initialize collapse state for non-divider sections\n collapsedSections.value[item.id] = initialValue\n }\n })\n }\n\n function isAbsoluteTo(item) {\n const to = getTo(item)\n return typeof to === 'string' && to.startsWith('http')\n }\n\n function isActivePath(item) {\n const to = getTo(item)\n if (isAbsoluteTo(item)) {\n return window.location.href.startsWith(to)\n }\n\n if (props.router) {\n return to && props.router.resolve(to).path === props.router.currentRoute.value.path\n }\n\n return false\n }\n\n function isExpanded(item) {\n // Divider-only sections are always expanded\n if (item.dividerOnly) return true\n return !collapsedSections.value[item.id]\n }\n\n function getExpandButtonTitle(item) {\n return isExpanded(item) ? `Collapse ${item.text} Section` : `Expand ${item.text} Section`\n }\n\n function getTo(item) {\n if (item.to) {\n return item.to\n } else if (item.resource?.url) {\n return item.resource.url\n } else {\n return null\n }\n }\n\n function getTarget(item) {\n if (item.target) {\n return item.target\n } else {\n return '_self'\n }\n }\n\n return {\n collapsedSections,\n getExpandButtonTitle,\n getTarget,\n getTo,\n initializeSections,\n isAbsoluteTo,\n isActivePath,\n isExpanded,\n rawNavData,\n }\n}\n","<script setup>\nimport useNavigationUtils from '@composables/navigationUtils'\n\nconst props = defineProps({\n item: {\n type: Object,\n required: true\n },\n router: {\n type: Object,\n default: null\n }\n})\n\nconst emit = defineEmits(['nav-link-clicked'])\n\nconst { isAbsoluteTo, isActivePath, getTo, getTarget } = useNavigationUtils(props)\n</script>\n\n<template>\n<a\n v-if=\"isAbsoluteTo(item)\"\n :aria-current=\"isActivePath(item) || undefined\"\n :data-active=\"isActivePath(item)\"\n :href=\"getTo(item)\"\n :target=\"getTarget(item)\"\n @click=\"(ev) => emit('nav-link-clicked', ev)\"\n>\n <slot />\n</a>\n\n<router-link\n v-else\n :aria-current=\"isActivePath(item) || undefined\"\n :data-active=\"isActivePath(item)\"\n :to=\"getTo(item)\"\n :target=\"getTarget(item)\"\n @click=\"(ev) => emit('nav-link-clicked', ev)\"\n>\n <slot />\n</router-link>\n</template>\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-horizontal-navigation.js'\nimport { BsIconCaretDown, BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport { ref, onBeforeMount, watch, onMounted, useId } from 'vue'\nimport useNavigationUtils from '../../composables/navigationUtils'\nimport BsDropdown from '../dropdown/BsDropdown.vue'\nimport { useMatchMedia } from '@composables/matchMedia.js'\nimport NavigationLink from './NavigationLink.vue'\n\n// PROPS\nconst props = defineProps(propDefinitions)\n\n// EMIT\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\n// COMPOSABLES\nconst {\n collapsedSections,\n getExpandButtonTitle,\n initializeSections,\n isActivePath,\n isExpanded,\n rawNavData,\n} = useNavigationUtils(props)\nconst mobileId = useId()\nuseMatchMedia('(max-width: 1165px)', (ev) => {\n isTablet.value = ev.matches\n})\n\n// STATE\nconst isTablet = ref(false)\nconst mobileOpenState = ref(false)\n\n// LIFE CYCLE HOOKS\nonBeforeMount(() => {\n initializeSections(true)\n})\n\nonMounted(() => {\n mobileOpenState.value = props.mobileOpen\n})\n\n// WATCHERS\nwatch(() => props.navData, () => {\n initializeSections(true)\n})\n\nwatch(() => props.mobileOpen, (newVal) => {\n mobileOpenState.value = newVal\n})\n\nwatch(mobileOpenState, (newVal) => {\n if (newVal) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n emit('mobile-toggle', newVal)\n})\n\nwatch(isTablet, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n mobileOpenState.value = false\n resetSections()\n }\n})\n\n// METHODS\nfunction toggleSection(sectionId) {\n collapsedSections.value[sectionId] = !collapsedSections.value[sectionId]\n // Close all other sections\n Object.keys(collapsedSections.value).forEach((key) => {\n if (key !== sectionId) {\n collapsedSections.value[key] = true\n }\n })\n}\n\nfunction getMobileToggleTitle() {\n return mobileOpenState.value ? 'Close Menu' : 'Open Menu'\n}\n\nfunction isNestedActive(item) {\n return item.navItems.some((navItem) => isActivePath(navItem))\n}\n\nfunction resetSections() {\n Object.keys(collapsedSections.value).forEach((key) => {\n collapsedSections.value[key] = true\n })\n}\n\nfunction handleNestedClick(ev, item) {\n const modifierKeyPressed = ev.ctrlKey || ev.metaKey\n if (!modifierKeyPressed) {\n toggleSection(item.id)\n }\n emit('nav-link-clicked', { ev, payload: item })\n}\n</script>\n\n<template>\n<!-- Mobile Menu -->\n<nav\n v-if=\"isTablet\"\n class=\"bs-horizontal-nav-mobile\"\n :data-shown=\"mobileOpenState\"\n :data-hide-toggle=\"hideMobileToggle\"\n>\n <button\n v-if=\"!hideMobileToggle\"\n type=\"button\"\n class=\"bs-horizontal-nav-mobile-toggle\"\n :aria-expanded=\"mobileOpen\"\n :aria-controls=\"`horizontal-nav-mobile-${mobileId}`\"\n :title=\"getMobileToggleTitle()\"\n @click=\"mobileOpenState = !mobileOpenState\"\n >\n <div class=\"bs-horizontal-nav-mobile-toggle-title\">\n <BsIcon\n v-if=\"typeof titleIcon === 'string'\"\n class=\"bs-horizontal-nav-mobile-toggle-title-icon\"\n :name=\"titleIcon\"\n />\n <component\n v-else\n :is=\"titleIcon\"\n class=\"bs-horizontal-nav-mobile-toggle-title-icon\"\n />\n <span>{{ mobileToggleText }}</span>\n </div>\n <BsIconCaretDown class=\"bs-horizontal-nav-mobile-toggle-caret\" />\n </button>\n <Transition name=\"bs-horizontal-nav-mobile\">\n <div\n v-show=\"mobileOpen\"\n class=\"bs-horizontal-nav-mobile-menu\"\n :id=\"`horizontal-nav-mobile-${mobileId}`\"\n >\n <!-- Main Links Menu -->\n <ul>\n <template v-for=\"item in rawNavData\" :key=\"item.id\">\n <!-- Nested Items -->\n <li v-if=\"item.navItems?.length > 0\" :data-expanded=\"isExpanded(item)\">\n <button\n type=\"button\"\n class=\"bs-horizontal-nav-mobile-nested-toggle\"\n :aria-expanded=\"isExpanded(item)\"\n :aria-controls=\"`${item.id}-nested-menu`\"\n :data-active=\"isNestedActive(item)\"\n :title=\"getExpandButtonTitle(item)\"\n @click=\"toggleSection(item.id)\"\n >\n <span>{{ item.text }}</span>\n <BsIconCaretDown class=\"bs-horizontal-nav-mobile-nested-toggle-caret\" />\n </button>\n <ul class=\"bs-horizontal-nav-mobile-nested-menu\">\n <li v-for=\"nestedItem in item.navItems\">\n <NavigationLink\n :item=\"nestedItem\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => emit('nav-link-clicked', { ev, payload: nestedItem })\"\n >\n {{ nestedItem.text }}\n </NavigationLink>\n </li>\n </ul>\n </li>\n\n <!-- Single Item -->\n <li v-else>\n <NavigationLink\n :item=\"item\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => emit('nav-link-clicked', { ev, payload: item })\"\n >\n {{ item.text }}\n </NavigationLink>\n </li>\n </template>\n </ul>\n\n <!-- End Nav Items -->\n <div v-if=\"$slots['end-items']\" class=\"bs-horizontal-nav-mobile-end-items\">\n <slot name=\"end-items\" />\n </div>\n </div>\n </Transition>\n</nav>\n\n<!-- Desktop Menu -->\n<div v-else class=\"bs-horizontal-nav\">\n <nav>\n <!-- Title Icon -->\n <template v-if=\"!title && titleIcon\">\n <BsIcon\n v-if=\"typeof titleIcon === 'string'\"\n class=\"bs-horizontal-nav-title-icon\"\n :name=\"titleIcon\"\n />\n <component\n v-else\n :is=\"titleIcon\"\n class=\"bs-horizontal-nav-title-icon\"\n />\n </template>\n\n <ul>\n <!-- Title Item -->\n <li v-if=\"title\" class=\"bs-horizontal-nav-title\">\n <router-link\n v-if=\"titleUrl\"\n :aria-current=\"isActivePath({ to: titleUrl }) || undefined\"\n :to=\"titleUrl\"\n :data-active=\"isActivePath({ to: titleUrl })\"\n @click=\"(ev) => emit('nav-link-clicked', { ev, payload: { resource: { url: titleUrl }, text: title } })\"\n >\n <span>{{ title }}</span>\n </router-link>\n\n <span v-else>{{ title }}</span>\n </li>\n\n <template v-for=\"(item, index) in rawNavData\" :key=\"item.id\">\n <!-- Nested Items -->\n <li v-if=\"item.navItems?.length > 0\">\n <!-- Nested Toggle -->\n <button\n :id=\"`${item.id}-toggle`\"\n type=\"button\"\n class=\"bs-horizontal-nav-nested-toggle\"\n :aria-expanded=\"isExpanded(item)\"\n :aria-controls=\"`${item.id}-nested-section`\"\n :data-active=\"isNestedActive(item)\"\n :data-expanded=\"isExpanded(item)\"\n :title=\"getExpandButtonTitle(item)\"\n @click=\"toggleSection(item.id)\"\n >\n <span>{{ item.text }}</span>\n <BsIconCaretDown class=\"bs-horizontal-nav-nested-toggle-caret\" />\n </button>\n <!-- Nested Menu -->\n <BsDropdown\n :id=\"`${item.id}-nested-section`\"\n class=\"bs-horizontal-nav-nested-menu\"\n :anchor-id=\"`${item.id}-toggle`\"\n position=\"right\"\n :shown=\"isExpanded(item)\"\n :use-mobile-style=\"false\"\n width=\"content\"\n @close=\"collapsedSections[item.id] = true\"\n >\n <ul>\n <li v-for=\"nestedItem in item.navItems\" :key=\"nestedItem.id\">\n <NavigationLink\n :item=\"nestedItem\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => handleNestedClick(ev, nestedItem)\"\n >\n {{ nestedItem.text }}\n </NavigationLink>\n </li>\n </ul>\n </BsDropdown>\n </li>\n\n <!-- Single Item -->\n <li v-else>\n <NavigationLink\n :item=\"item\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => emit('nav-link-clicked', { ev, payload: item })\"\n >\n <span>{{ item.text }}</span>\n </NavigationLink>\n </li>\n </template>\n </ul>\n\n <!-- End Nav Items -->\n <div v-if=\"$slots['end-items']\" class=\"bs-horizontal-nav-end-items\">\n <slot name=\"end-items\" />\n </div>\n </nav>\n</div>\n</template>\n","<script setup>\nimport { ref, onMounted } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\n\ndefineOptions({ inheritAttrs: false })\n\n// REFS\nconst svgWrapperRef = ref(null)\n\n// STATE\nconst viewBox = ref(null)\n\n// VARS\nconst stops = [\n { offset: 0.1326, color: '#EE282A' },\n { offset: 0.5466, color: '#1C0087' },\n { offset: 0.9715, color: '#0086EA' }\n]\nconst [ uniqueId ] = useGenIdAttrs()\n\nonMounted(() => {\n viewBox.value = svgWrapperRef.value\n .querySelector('svg')\n .getAttribute('viewBox')\n || '0 0 0 0'\n})\n</script>\n\n<template>\n <span\n ref=\"svgWrapperRef\"\n class=\"bs-icon-gradient-wrapper\"\n :style=\"`fill: url(#${uniqueId});`\"\n v-bind=\"$attrs\"\n >\n <slot />\n </span>\n\n <!-- Build the fill gradient for the input SVG here -->\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n :view-box=\"viewBox\"\n width=\"0\"\n height=\"0\"\n >\n <linearGradient\n :id=\"uniqueId\"\n x1=\"0\"\n y1=\"0\"\n x2=\"100%\"\n y2=\"100%\"\n gradient-units=\"userSpaceOnUse\"\n >\n <stop\n v-for=\"stop in stops\"\n :key=\"stop.offset\"\n :offset=\"stop.offset\"\n :stop-color=\"stop.color\"\n />\n </linearGradient>\n </svg>\n</template>\n\n<style>\n .bs-icon-gradient-wrapper {\n display: inline-block;\n }\n\n .bs-icon-gradient-wrapper * {\n fill: inherit;\n }\n</style>\n","export const InlineTabsProvider = Symbol('InlineTabs')","<template>\n <component\n :is=\"rootTag\"\n ref=\"btnRef\"\n class=\"bs-inline-tab\"\n :data-variant=\"variant\"\n :data-selected=\"isSelected || undefined\"\n :aria-pressed=\"rootTag === 'button' ? isSelected : undefined\"\n v-bind=\"attrsToBind\"\n @click=\"onClick\">\n <slot :is-selected />\n </component>\n</template>\n\n<script setup>\nimport { computed, inject, useAttrs } from 'vue'\nimport { useButtonOrLink } from '../../composables/buttonOrLink.js'\nimport { InlineTabsProvider } from './provider-key-inline-tabs'\nimport { propDefinitions } from './defs-inline-tab.js'\n\nconst props = defineProps(propDefinitions)\n\n// BsInlineTabs usage is optional...inject will return null if BsInlineTab is not a child of BsInlineTabs\nconst group = inject(InlineTabsProvider, null)\n\nconst isSelected = computed(() => {\n return group?.isSelected(props.value) || props.selected\n})\n\nconst isDisabled = computed(() => {\n return group?.props.disabled || props.disabled\n})\n\nconst variant = computed(() => {\n return group?.props.variant || props.variant\n})\n\nconst modifiedProps = computed(() => ({\n ...props,\n disabled: isDisabled.value\n}))\n\nconst { rootTag, attrsToBind, btnRef } = useButtonOrLink(modifiedProps, useAttrs(), 'button')\n\n// - - - - - - - - - - - -\n\nfunction onClick(event) {\n setGroupModel()\n}\n\nfunction setGroupModel() {\n if (!group) return\n\n // don't update the model if no new selection was made (so group's @update:model-value won't fire)\n if (isSelected.value && !group.props.multiple) return\n\n group.setModel(props.value)\n}\n</script>\n","<template>\n <component\n :is=\"as\"\n class=\"bs-inline-tab-group\">\n <slot />\n </component>\n</template>\n\n<script setup>\nimport { provide } from 'vue'\nimport { InlineTabsProvider } from './provider-key-inline-tabs.js'\nimport { propDefinitions, emitDefinitions } from './defs-inline-tab-group.js'\n\nconst props = defineProps(propDefinitions)\ndefineEmits(Object.keys(emitDefinitions))\n\nconst model = defineModel({\n type: [String, Object, Number, Array],\n default: undefined,\n required: false\n})\n\nprovide(InlineTabsProvider, {\n props,\n model,\n setModel,\n isSelected\n})\n\n// - - - - - - - - - - - - - -\n\nfunction isSelected(val) {\n if (!model.value) return false\n\n // single model\n if (!props.multiple) return isMatch(model.value, val)\n\n // a little DX for multiple model, just in case...\n if (!Array.isArray(model.value)) {\n throw new Error(`[BsInlineTabs] When \"multiple\" prop is used, v-model must be an Array. Your model: ${model.value}`)\n }\n\n // multiple model\n return model.value.some(it => isMatch(it, val))\n}\n\nfunction isMatch(a, b) {\n const { matcher } = props\n\n if (isObject(a) && isObject(b)) {\n return typeof matcher === 'function'\n ? matcher(a) === matcher(b)\n : a[matcher] === b[matcher]\n }\n\n return a === b\n}\n\nfunction isObject(val) {\n return typeof val === 'object' && val !== null && !Array.isArray(val)\n}\n\nfunction setModel(val) {\n model.value = props.multiple\n ? getArrayModel(val)\n : val\n}\n\nfunction getArrayModel(val) {\n if (!model.value) return [val]\n\n return isSelected(val)\n ? model.value.filter(it => !isMatch(it, val))\n : [ ...model.value, val ]\n}\n</script>\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsInput from '../input/BsInput.vue'\nimport BsLabel from '../label/BsLabel.vue'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\n// Props\nconst props = defineProps({\n /** Sets the disabled state on input, disabled styles on label. */\n disabled: {\n type: Boolean,\n default: false,\n },\n /** Applies error styles to the input. */\n error: {\n type: Boolean,\n default: false,\n },\n /** Pass error text. */\n errorMsg: String,\n /** Pass helper text. */\n hint: String,\n /** Pass id for the input element. Will also be applied to label attribute. */\n inputId: String,\n /** Pass label text. */\n label: { type: String },\n /** Placeholder attribute for `<input>`. */\n placeholder: String,\n /** Sets the required state on the input, append required* indicator to label. */\n required: {\n type: Boolean,\n default: false,\n },\n /** Sets the native input type attribute. */\n type: {\n type: String,\n default: 'text',\n },\n /** Sets the input value - do not use if using `v-model`. */\n value: [ String, Number ],\n /** Sets the input value - `v-model` directive will use this; do not set explicitly. */\n modelValue: [ String, Number ],\n // DEPRECATED\n hints: { default: undefined },\n passAttrs: { default: undefined },\n})\nuseDeprecatedProp(props, 'hints', undefined, 'Use \\'hint\\' and/or \\'errorMsg\\. instead.')\nuseDeprecatedProp(props, 'passAttrs', undefined, 'Use Vue\\'s native fallthrough attributes instead.')\n\nconst emit = defineEmits(['update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed Properties\nconst hintDeprecated = computed(() => props.hints?.join?.(\"\\n\") || props.hints)\nconst hintMsg = computed(() => (\n (props.error && props.errorMsg) || props.hint || hintDeprecated.value || undefined\n))\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\n</script>\n\n<template>\n<div data-component=\"bs-input-field\" v-bind=\"filtered\">\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <BsInput\n :disabled=\"disabled\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :id=\"$attrs.id || inputIdAttr\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :type=\"type\"\n :value=\"value || modelValue\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n />\n <BsFieldDetails v-if=\"hintMsg\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint || hintDeprecated\"\n :hint-id=\"hintId\"\n />\n</div>\n</template>\n\n<style>\n:where([data-component=\"bs-input-field\"]) {\n display: block;\n width: 100%;\n}\n</style>\n","import { getSupportedCallingCodes, getRegionCodeForCountryCode } from \"awesome-phonenumber\";\n\n/**\n * @typedef {Object} Country\n * @property {string} label – the country code (aka dial code) w/ '+' prefix\n * @property {string} flag – the country flag emoji\n * @property {string} value – the country code (aka dial code)\n * @property {string} regionCode – the ISO 3166-1 alpha-2 region code (e.g. 'US' for United States)\n *\n */\n\nconst SYMBOLS = {\n 'A': '🇦',\n 'B': '🇧',\n 'C': '🇨',\n 'D': '🇩',\n 'E': '🇪',\n 'F': '🇫',\n 'G': '🇬',\n 'H': '🇭',\n 'I': '🇮',\n 'J': '🇯',\n 'K': '🇰',\n 'L': '🇱',\n 'M': '🇲',\n 'N': '🇳',\n 'O': '🇴',\n 'P': '🇵',\n 'Q': '🇶',\n 'R': '🇷',\n 'S': '🇸',\n 'T': '🇹',\n 'U': '🇺',\n 'V': '🇻',\n 'W': '🇼',\n 'X': '🇽',\n 'Y': '🇾',\n 'Z': '🇿'\n}\n\n/**\n * Call `initSourceData` first to load the country data.\n */\nexport const CountryUtils = {\n data: {\n allCountries: null,\n byCountryCode: null,\n byRegionCode: null,\n },\n\n/**\n * @param {string|number} countryCode the country code (aka dial code) for the country\n * @returns {Country} the country object\n */\n getCountryByCountryCode(countryCode) {\n this.initMap('byCountryCode', 'value')\n return this.data.byCountryCode?.[countryCode]\n },\n\n /**\n * @param {string|number} regionCode the ISO 3166-1 alpha-2 region code\n * @returns {Country} the country object\n */\n getCountryByRegionCode(regionCode) {\n this.initMap('byRegionCode', 'regionCode')\n return this.data.byRegionCode?.[regionCode]\n },\n\n /**\n * @returns {Country[]} an array of country objects\n */\n initSourceData() {\n if (!this.data.allCountries) {\n this.data.allCountries = getSupportedCallingCodes().map((c) => {\n const regionCode = getRegionCodeForCountryCode(c)\n const flag = SYMBOLS[regionCode[0]] + SYMBOLS[regionCode[1]] ||''\n return {\n label: `+${c}`,\n flag,\n value: c,\n regionCode\n }\n }).filter(it => it.regionCode !== '001')\n }\n return this.data.allCountries\n },\n\n initMap(mapName, libKey) {\n if (!this.data[mapName] && this.data.allCountries) {\n this.data[mapName] = {}\n\n this.data.allCountries.forEach(country => {\n this.data[mapName][country[libKey]] = country\n })\n }\n }\n\n}\n\n\n","<script setup>\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { parsePhoneNumber } from \"awesome-phonenumber\";\nimport { BsIconCaretSort } from '@wwtdev/bsds-icons-vue3'\nimport BsDropdownOption from '../dropdown-option/BsDropdownOption.vue'\nimport BsDropdownWithOptions from '../dropdown-with-options/BsDropdownWithOptions.vue'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsInput from '../input/BsInput.vue'\nimport BsInputAddon from '../input-addon/BsInputAddon.vue'\nimport BsLabel from '../label/BsLabel.vue'\nimport { useGenIdAttrs } from '../../composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { CountryUtils } from './countryUtils.js'\n\nconst props = defineProps({\n deferValidation: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n error: {\n type: Boolean,\n default: false\n },\n errorMsg: {\n type: String,\n default: ''\n },\n hideLabel: {\n type: Boolean,\n default: false\n },\n hint: {\n type: String,\n default: ''\n },\n inputId: {\n type: String\n },\n label: {\n type: String,\n default: 'Phone Number'\n },\n /** Auto-set w/ v-model. */\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: 'Phone Number'\n },\n required: {\n type: Boolean,\n default: false\n }\n})\n\nconst emit = defineEmits(['update:modelValue', 'input-blur'])\n\ndefineOptions({ inheritAttrs: false })\n\nconst VALID_OTHER_KEYS = [\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'Backspace',\n 'Delete',\n 'End',\n 'Enter',\n 'Escape',\n 'Home',\n 'Tab',\n]\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n/* ------- Refs ------- */\nconst countryCodesToggle = ref(null)\nconst countryCode = ref(1)\nconst countryCodes = ref([])\nconst currentCountry = ref(null)\nconst [\n countryToggleId,\n countryCodesId,\n hintId,\n inputIdGen\n] = useGenIdAttrs(4)\nconst isMounted = ref(false)\nconst phoneNumber = ref('')\nconst phoneNumberError = ref('')\nconst phoneNumberHasError = ref(false)\nconst showCountryCodes = ref(false)\nconst showValidationResult = ref(true)\ndefineExpose({\n validationErr: phoneNumberHasError,\n validationErrMsg: phoneNumberError,\n})\n\n/* ------- Computed & Watchers ------- */\nconst computedPhoneNumber = computed(() => phoneNumber.value ? `+${countryCode.value}${phoneNumber.value}` : '')\nconst countryToggleLabel = computed(() => `Country code: ${countryCode.value}. Click to change.`)\nconst errorMsgComputed = computed(() => showValidationResult.value ? props.errorMsg || phoneNumberError.value : '')\nconst hasError = computed(() => props.error || phoneNumberHasError.value)\nconst showDetails = computed(() => props.hint || (hasError.value && errorMsgComputed.value))\nconst showErrorState = computed(() => showValidationResult.value && hasError.value)\n\nwatch(computedPhoneNumber, (newVal) => {\n emit('update:modelValue', newVal)\n validate(newVal)\n})\n\nwatch(() => props.modelValue, clearPhoneNumberIfReset)\n\n/* ------- Client-side init ------- */\ninit()\n\nonMounted(() => isMounted.value = true)\n/* ------- Funcs ------- */\n\nfunction clearPhoneNumberIfReset(newVal, oldVal) {\n if (newVal === '' && newVal !== oldVal) {\n phoneNumber.value = ''\n }\n}\n\nfunction handleCountryCodeClose() {\n if (showCountryCodes.value) {\n showCountryCodes.value = false\n countryCodesToggle.value?.focus()\n }\n}\n\nfunction handleCountryCodeInput(selectedVal) {\n countryCode.value = selectedVal\n showCountryCodes.value = false\n countryCodesToggle.value?.focus()\n updateCurrentCountry(selectedVal)\n}\n\nfunction handlePhoneBlur() {\n if (props.deferValidation) showValidationResult.value = true\n emit('input-blur')\n}\n\nfunction handlePhoneInput(e) {\n phoneNumber.value = e.target.value\n if (props.deferValidation) showValidationResult.value = false\n}\n\nfunction ignoreInvalidChars(e) {\n if (!e.key?.match?.(/[0-9]/) && !VALID_OTHER_KEYS.includes(e.key) && !e.ctrlKey && !e.metaKey) {\n e.preventDefault()\n }\n}\n\nfunction init() {\n CountryUtils.initSourceData()\n initParse()\n updateCurrentCountry(countryCode.value)\n validate(computedPhoneNumber.value)\n}\n\nfunction initParse() {\n // try to parse the phone number value and if it's valid or at least has a parsaable country code,\n // set both the country code and phone number\n // otherwise, just set phoneNumber to value (the previous behavior)\n let parsedNum = parsePhoneNumber(props.modelValue)\n if (parsedNum.valid || (parsedNum.countryCode && props.modelValue?.startsWith?.('+'))) {\n countryCode.value = parsedNum.countryCode\n phoneNumber.value = parsedNum.number.significant\n } else {\n phoneNumber.value = props.modelValue\n }\n // set the country code dropdown value\n countryCodes.value = CountryUtils.data.allCountries.map(c => {\n return {\n ...c,\n isSelected: countryCode.value === c\n }\n })\n}\n\nfunction updateCurrentCountry(code) {\n currentCountry.value = CountryUtils.getCountryByCountryCode(code)\n}\n\nfunction validate(pncc) {\n phoneNumberHasError.value = pncc ? !parsePhoneNumber(pncc).valid : false\n phoneNumberError.value = phoneNumberHasError.value ? 'Invalid phone number' : ''\n}\n</script>\n\n<template>\n <div class=\"bs-input-phone\"\n data-component=\"bs-input-phone\"\n v-bind=\"filtered\"\n >\n <BsLabel :for=\"$attrs.id || inputId || inputIdGen\"\n :required=\"required\"\n :disabled=\"disabled\"\n :class=\"{ 'visually-hidden': hideLabel }\"\n >\n {{ label }}\n </BsLabel>\n <BsInputAddon\n :disabled=\"disabled\"\n :error=\"showErrorState\"\n :multifocus=\"true\"\n variant=\"inner-bordered\"\n >\n <button\n :id=\"countryToggleId\"\n ref=\"countryCodesToggle\"\n :aria-controls=\"countryCodesId\"\n :aria-expanded=\"showCountryCodes\"\n aria-haspopup=\"listbox\"\n :aria-label=\"countryToggleLabel\"\n :disabled=\"disabled\"\n type=\"button\"\n @click=\"showCountryCodes = !showCountryCodes\"\n >\n <span>{{ currentCountry?.flag }}</span>\n <span>+{{ countryCode }}</span>\n <BsIconCaretSort v-if=\"!disabled\" size=\"sm\" />\n </button>\n\n <BsInput\n :id=\"$attrs.id || inputId || inputIdGen\"\n :disabled=\"disabled\"\n :hint-id=\"hintId\"\n :placeholder=\"placeholder\"\n :value=\"phoneNumber\"\n data-autowidth\n type=\"tel\"\n v-bind=\"remaining\"\n @input=\"handlePhoneInput\"\n @focusout=\"handlePhoneBlur\"\n @keydown=\"ignoreInvalidChars\"\n />\n </BsInputAddon>\n <BsFieldDetails\n :error=\"hasError\"\n :error-msg=\"errorMsgComputed\"\n :hint=\"hint\"\n :hint-id=\"hintId\"\n v-show=\"showDetails\"\n />\n <template v-if=\"isMounted\">\n <div>\n <BsDropdownWithOptions\n :anchor-id=\"countryToggleId\"\n helper-text=\"Country Code\"\n label=\"Country Code\"\n :model-value=\"countryCode\"\n :options-id=\"countryCodesId\"\n preloaded\n :shown=\"showCountryCodes\"\n width=\"content\"\n @close=\"handleCountryCodeClose\"\n @update:model-value=\"handleCountryCodeInput\"\n >\n <template v-if=\"isMounted\">\n <BsDropdownOption v-for=\"c of countryCodes\"\n :aria-label=\"c.value\"\n :key=\"c.value\"\n :value=\"`${c.value}`\"\n variant=\"2-col\"\n >\n <span aria-hidden=\"true\" style=\"width: 1.25rem;\">\n {{ c?.flag }}\n </span>\n <span aria-hidden=\"true\">\n {{ c.label }}\n </span>\n </BsDropdownOption>\n </template>\n </BsDropdownWithOptions>\n </div>\n </template>\n </div>\n</template>\n","<script setup>\nimport { ref, watch, computed } from 'vue'\nimport BsInputSearch from '../input-search/BsInputSearch.vue'\nimport BsDropdownOptionList from '../dropdown-option-list/BsDropdownOptionList.vue'\nimport BsDropdownOptionBuilder from '../dropdown-option-builder/BsDropdownOptionBuilder.vue'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsLabel from '../label/BsLabel.vue'\nimport BsSpinner from '../spinner/BsSpinner.vue'\nimport BsDropdownMultiselect from '../dropdown-multiselect/BsDropdownMultiselect.vue'\nimport BsDropdown from '../dropdown/BsDropdown.vue'\nimport { useGenIdAttrs } from '../../composables/genId.js'\n\n// PROPS\nconst props = defineProps({\n characterThreshold: {\n type: Number,\n default: 1\n },\n breakout: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n error: {\n type: Boolean,\n default: false\n },\n errorMsg: {\n type: String,\n default: ''\n },\n filterType: {\n type: String,\n default: 'starts-with',\n validator: (value) => ['includes', 'starts-with'].includes(value)\n },\n hideSearchIcon: {\n type: Boolean,\n default: false\n },\n hint: {\n type: String,\n default: ''\n },\n inputValue: {\n type: String,\n default: ''\n },\n internalFiltering: {\n type: Boolean,\n default: true\n },\n label: {\n type: String,\n default: ''\n },\n loading: {\n type: Boolean,\n default: false\n },\n maxOptions: {\n type: Number,\n default: undefined\n },\n multiselect: {\n type: Boolean,\n default: false\n },\n // [{ label: String, value: String, description: String, icon: String }] }\n options: {\n type: Array,\n required: true,\n },\n optionsValue: {\n type: [ String, Number, Array ],\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n },\n required: {\n type: Boolean,\n default: false\n },\n showDropdownOnFocus: {\n type: Boolean,\n default: false\n },\n typeaheadId: {\n type: String,\n default: undefined\n },\n valueIdKey: {\n type: String,\n default: 'id'\n },\n})\n\n// EMITS\nconst emit = defineEmits(['close', 'open', 'update:inputValue', 'update:optionsValue'])\n\n// REFS\nconst optionsShown = ref(false)\nconst optionSelected = ref(false)\n\n// VARS\nconst [ generatedId, generatedHintId ] = useGenIdAttrs(2)\nlet prevOptions = []\n\n// LIFECYCLE\nwatch(() => props.inputValue, () => {\n // After an option is selected, an input change occurs. This will prevent\n // the dropdown from showing again immediately after an option is selected.\n if (optionSelected.value) {\n optionSelected.value = false\n } else {\n showDropdownIfValue()\n }\n})\n\nwatch(optionsShown, () => {\n optionsShown.value\n ? emit('open')\n : emit('close')\n})\n\n// COMPUTED\nconst typeaheadIdActual = computed(() => props.typeaheadId || generatedId.value)\nconst hintMsg = computed(() => (props.error && props.errorMsg) || props.hint || undefined)\nconst inputContainerId = computed(() => `${typeaheadIdActual.value}-input-container`)\nconst inputId = computed(() => `${typeaheadIdActual.value}-input`)\nconst optionsId = computed(() => `${typeaheadIdActual.value}-options`)\nconst optionsValueActual = computed(() => {\n if (props.multiselect) {\n // Make sure optionsValue is an array for multiselect\n return Array.isArray(props.optionsValue)\n ? props.optionsValue\n : [ props.optionsValue ]\n }\n return props.optionsValue\n})\n\n// Build out / filter / highlight options\nconst modifiedOptions = computed(() => {\n if (optionsShown.value) {\n let newOptions = props.options\n const filterValue = props.inputValue.toLowerCase()\n const filterFunc = props.filterType === 'includes' ? 'includes' : 'startsWith'\n\n if (props.inputValue.length >= props.characterThreshold) {\n // Filter\n newOptions = filterOptions(newOptions, filterValue, filterFunc)\n // Limit max options\n newOptions = newOptions.slice(0, props.maxOptions)\n // Highlight\n newOptions = highlightOptions(newOptions, filterValue, filterFunc)\n\n prevOptions = newOptions\n }\n return newOptions\n } else {\n // Not showing, so return the last filtered options to prevent flicker of\n // different options while the dropdown is closing\n return prevOptions\n }\n})\n\n// METHODS\nfunction filterOptions(options, filterValue, filterFunc) {\n if (props.internalFiltering) {\n return options.filter((option) => (\n option.label.toLowerCase()[filterFunc](filterValue)\n ))\n } else {\n return options\n }\n}\n\nfunction highlightOptions(options, filterValue, filterFunc) {\n return options.map((option) => {\n let labelHtml = option.label\n if (filterValue !== '') {\n const replaceHtml = `<span style=\"color: var(--bs-blue-base)\">${filterValue}</span>`\n if (filterFunc === 'includes') {\n labelHtml = option.label.replaceAll(filterValue, replaceHtml)\n } else {\n labelHtml = option.label.replace(filterValue, replaceHtml)\n }\n }\n return { ...option, labelHtml }\n })\n}\n\n/** Show the typeahead dropdown with show on focus prop or the character threshold is met. */\nfunction showDropdownIfValue() {\n if (props.showDropdownOnFocus) {\n optionsShown.value = true\n } else if (props.inputValue.length >= props.characterThreshold) {\n optionsShown.value = true\n } else {\n optionsShown.value = false\n }\n}\n\nfunction handleClear() {\n emit('update:inputValue', '')\n if (!props.multiselect) {\n emit('update:optionsValue', '')\n }\n document.getElementById(inputId.value).focus()\n}\n\nfunction handleSelect(ev) {\n optionSelected.value = true\n const selectedOption = modifiedOptions.value.find((option) => option.value === ev)\n emit('update:inputValue', selectedOption.label)\n emit('update:optionsValue', ev)\n}\n\nfunction handleCheck(ev) {\n const newOptionsValue = [ ...optionsValueActual.value, ev ]\n emit('update:optionsValue', newOptionsValue)\n}\n\nfunction handleUncheck(ev) {\n const newOptionsValue = optionsValueActual.value.filter((opt) => opt !== ev)\n emit('update:optionsValue', newOptionsValue)\n}\n</script>\n\n<template>\n<BsLabel\n v-if=\"label || $slots.label\"\n :for=\"inputId\"\n :disabled=\"disabled\"\n :required=\"required\"\n>\n <slot name=\"label\">\n {{ label }}\n </slot>\n</BsLabel>\n<div :id=\"inputContainerId\" class=\"typeahead-search-wrapper\">\n <BsInputSearch\n :aria-controls=\"optionsId\"\n :aria-describedby=\"hintMsg ? generatedHintId : undefined\"\n :aria-expanded=\"optionsShown\"\n aria-haspopup=\"listbox\"\n autocomplete=\"off\"\n :disabled=\"disabled\"\n :error=\"error\"\n :hide-clear=\"inputValue === ''\"\n :hide-search-icon=\"hideSearchIcon\"\n :input-id=\"inputId\"\n :placeholder=\"placeholder\"\n role=\"combobox\"\n :value=\"inputValue\"\n v-bind=\"$attrs\"\n @clear=\"handleClear\"\n @focusin=\"showDropdownIfValue\"\n @update:model-value=\"(ev) => emit('update:inputValue', ev)\"\n />\n</div>\n<BsDropdown\n :anchor-id=\"inputContainerId\"\n :breakout=\"breakout\"\n :preloaded=\"true\"\n :shown=\"optionsShown\"\n :use-mobile-style=\"false\"\n width=\"anchor\"\n @close=\"optionsShown = false\"\n>\n <BsDropdownMultiselect\n v-if=\"multiselect\"\n :focus-on-open=\"false\"\n :label=\"label\"\n :options=\"modifiedOptions\"\n :options-id=\"optionsId\"\n :selected-options=\"optionsValueActual\"\n :shown=\"optionsShown\"\n :value-id-key=\"valueIdKey\"\n @check-option=\"handleCheck\"\n @uncheck-option=\"handleUncheck\"\n >\n <template v-if=\"loading\" #no-options>\n <span style=\"display: flex; justify-content: center;\">\n <BsSpinner size=\"sm\" />\n </span>\n </template>\n <template v-else #no-options>No results found</template>\n </BsDropdownMultiselect>\n\n <BsDropdownOptionList\n v-else\n :label=\"label\"\n :model-value=\"optionsValueActual\"\n :options-id=\"optionsId\"\n :shown=\"optionsShown\"\n @update:model-value=\"handleSelect\"\n @close=\"optionsShown = false\"\n >\n <BsDropdownOptionBuilder :options=\"modifiedOptions\" :value-id-key=\"valueIdKey\">\n <template v-if=\"loading\" #no-options>\n <span style=\"display: flex; justify-content: center;\">\n <BsSpinner size=\"sm\" />\n </span>\n </template>\n <template v-else #no-options>No results found</template>\n </BsDropdownOptionBuilder>\n </BsDropdownOptionList>\n</BsDropdown>\n<div aria-live=\"polite\">\n <BsFieldDetails v-if=\"hintMsg\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint\"\n :hint-id=\"generatedHintId\"\n />\n</div>\n</template>\n\n<style>\n:where(.bs-label + .typeahead-search-wrapper) {\n margin-top: 0.25rem;\n}\n</style>\n","<script setup>\nimport { watch, onMounted, onUnmounted } from 'vue'\nimport BsEnhancedTransition from '../transition/BsEnhancedTransition.vue'\nimport { useDeprecatedTransition, useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n shown: {\n type: Boolean,\n default: true,\n },\n preloaded: {\n type: Boolean,\n default: false,\n },\n // DEPRECATED\n enterControlled: {\n default: undefined,\n },\n enterTrigger: {\n default: undefined,\n },\n leaveTrigger: {\n default: undefined,\n },\n})\nuseDeprecatedProp(props, 'enterControlled', 'preloaded')\nuseDeprecatedProp(props, 'enterTrigger', 'shown')\nuseDeprecatedProp(props, 'leaveTrigger', 'shown')\n\nconst emit = defineEmits(['after-enter', 'after-leave'])\n\nconst { transition } = useDeprecatedTransition(props)\n\nonMounted(() => {\n setBodyScroll()\n})\n\n// Ensure there's no side effect when the component is unmounted before the transition ends\nonUnmounted(() => {\n document.body.removeAttribute('data-scroll')\n})\n\nwatch(transition, () => {\n setBodyScroll()\n})\n\nfunction setBodyScroll() {\n if (transition.value) {\n document.body.setAttribute('data-scroll', 'false')\n } else {\n document.body.removeAttribute('data-scroll')\n }\n}\n</script>\n\n<template>\n <BsEnhancedTransition\n name=\"bs-overlay\"\n :shown=\"transition\"\n :preloaded=\"preloaded\"\n @after-enter=\"emit('after-enter')\"\n @after-leave=\"emit('after-leave')\"\n >\n <div class=\"bs-overlay\" :data-shown=\"transition\" />\n </BsEnhancedTransition>\n</template>\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-modal.js'\nimport { ref, computed, useSlots } from 'vue'\nimport { BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport useKeydown from '../../composables/keydown'\nimport BsEnhancedTransition from '../transition/BsEnhancedTransition.vue'\nimport BsOverlay from '../overlay/BsOverlay.vue'\nimport { useDeprecatedTransition, useDeprecatedProp } from '@composables/deprecated.js'\nimport { useGenIdAttrs } from '@composables/genId'\nimport useClickAway from '../../composables/clickAway'\nimport BsFocusGuard from '../focus-guard/BsFocusGuard.vue'\n\n// PROPS\nconst props = defineProps(propDefinitions)\nuseDeprecatedProp(props, 'enterControlled', 'preloaded')\nuseDeprecatedProp(props, 'enterTrigger', 'shown')\nuseDeprecatedProp(props, 'leaveTrigger', 'shown')\n\n// EMITS\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\n// REFS / VARIABLES\nconst modalRef = ref(null)\nlet isVisible = false\n\n// COMPOSABLES\nconst { transition } = useDeprecatedTransition(props)\nconst [ titleId ] = useGenIdAttrs()\nconst [ subtitleId ] = useGenIdAttrs()\nconst slots = useSlots()\nuseClickAway([modalRef], () => closeModal('backdrop-clicked-close'))\nuseKeydown(['Escape'], () => closeModal('escape-pressed-close'))\n\n// COMPUTED\nconst hasTitle = computed(() => {\n return !!(props.title || slots.title)\n})\nconst hasSubtitle = computed(() => {\n return !!(props.subtitle || slots.subtitle)\n})\nconst hasProgress = computed(() => {\n return !!slots.progress\n})\nconst hasHeader = computed(() => {\n return !props.fullHeight && hasTitle.value\n})\nconst hasFooter = computed(() => {\n return !props.fullHeight && !!slots.footer\n})\n\n// METHODS\nfunction closeModal(customEventName, checkForShownChild = true) {\n const hasShownChild = checkForShownChild && modalRef.value?.querySelector('[data-shown=\"true\"]') !== null\n if (isVisible && !hasShownChild) {\n emit('close', props.modalId)\n emit(customEventName, props.modalId)\n }\n}\n\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n<BsOverlay\n :enter-controlled=\"enterControlled\"\n :enter-trigger=\"enterTrigger\"\n :leave-trigger=\"leaveTrigger\"\n :preloaded=\"preloaded\"\n :shown=\"transition\"\n/>\n<BsEnhancedTransition\n name=\"bs-modal\"\n :preloaded=\"preloaded\"\n :shown=\"transition\"\n @after-enter=\"emit('after-enter')\"\n @after-leave=\"emit('after-leave')\"\n @enter=\"isVisible = true\"\n>\n <div\n class=\"bs-modal\"\n :id=\"modalId\"\n ref=\"modalRef\"\n :aria-labelledby=\"title && !$attrs['aria-label'] ? titleId : undefined\"\n aria-modal=\"true\"\n :data-body-background-contrast=\"bodyBackgroundContrast\"\n data-component=\"bs-modal\"\n :data-footer-border=\"footerBorder\"\n :data-full-height=\"fullHeight\"\n :data-full-width=\"fullWidth\"\n :data-header-border=\"headerBorder\"\n :data-shown=\"transition\"\n :data-size=\"size\"\n :role=\"alert ? 'alertdialog' : 'dialog'\"\n v-bind=\"$attrs\"\n >\n <BsFocusGuard :active=\"transition\">\n <header v-if=\"hasHeader\" class=\"bs-modal-header-container\">\n <!-- HEADER ROW -->\n <div class=\"bs-modal-header\">\n <!-- TITLE -->\n <template v-if=\"hasTitle\">\n <slot name=\"title\">\n <span\n v-if=\"title\"\n class=\"bs-modal-title\"\n :id=\"titleId\"\n >\n {{ title }}\n </span>\n </slot>\n </template>\n\n <!-- CLOSE BUTTON (HEADER) -->\n <button\n v-if=\"closeButton\"\n class=\"bs-modal-close-button\"\n aria-label=\"Close Modal\"\n title=\"Close Modal\"\n type=\"button\"\n @click=\"closeModal('x-clicked-close', false)\"\n >\n <BsIconClose></BsIconClose>\n </button>\n </div>\n\n <!-- SUBTITLE ROW -->\n <div v-if=\"hasSubtitle\" class=\"bs-modal-subtitle\">\n <slot name=\"subtitle\">\n <span :id=\"subtitleId\">{{ subtitle }}</span>\n </slot>\n </div>\n\n <!-- PROGRESS ROW -->\n <div v-if=\"hasProgress\" class=\"bs-modal-progress\">\n <slot name=\"progress\"></slot>\n </div>\n </header>\n\n <!-- CLOSE BUTTON (FULL-HEIGHT) -->\n <button\n v-if=\"closeButton && !hasHeader\"\n class=\"bs-modal-close-button\"\n aria-label=\"Close Modal\"\n title=\"Close Modal\"\n type=\"button\"\n @click=\"closeModal('x-clicked-close', false)\"\n >\n <BsIconClose></BsIconClose>\n </button>\n\n <!-- BODY -->\n <div class=\"bs-modal-body\">\n <slot></slot>\n </div>\n\n <!-- FOOTER -->\n <footer v-if=\"hasFooter\" class=\"bs-modal-footer\">\n <slot name=\"footer\"></slot>\n </footer>\n </BsFocusGuard>\n </div>\n</BsEnhancedTransition>\n</template>\n","<script setup>\n import { computed, ref, onMounted, watch } from 'vue'\n import {\n BsIconCaretLeftDouble,\n BsIconCaretLeft,\n BsIconCaretRightDouble,\n BsIconCaretRight\n } from '@wwtdev/bsds-icons-vue3'\n import { useDeprecatedProp, useDeprecatedPropActual } from '@composables/deprecated.js'\n\n // PROPS\n const props = defineProps({\n // Used for all\n showFirstLastButtons: {\n type: Boolean,\n default: false\n },\n prevPageText: {\n type: String,\n default: undefined\n },\n firstPageText: {\n type: String,\n default: undefined\n },\n nextPageText: {\n type: String,\n default: undefined\n },\n lastPageText: {\n type: String,\n default: undefined\n },\n fixed: {\n type: Boolean,\n default: false\n },\n variant: {\n type: String,\n default: 'base',\n validator: (value) => {\n return ['base', 'group', 'results'].includes(value)\n }\n },\n modelValue: {\n type: Number,\n default: undefined\n },\n // Used for variant=\"base\"\n centerDisplay: {\n type: String,\n default: 'numbers',\n validator: (value) => {\n return ['numbers', 'text'].includes(value)\n }\n },\n // Used for variant=\"base\", centerDisplay=\"numbers\"\n breakText: {\n type: String,\n default: '…'\n },\n // Used for variant=\"base\", centerDisplay=\"numbers\"\n pageRange: {\n type: Number,\n default: 3\n },\n // Used for variant=\"base\"\n pageCount: {\n type: Number,\n default: undefined\n },\n // Used for variant=\"base\", centerDisplay=\"text\" and variant=\"group\"\n centerLabel: {\n type: String,\n default: undefined\n },\n // Used for variant=\"group\"\n itemsPerGroup: {\n type: Number,\n default: 25\n },\n // Used for variant=\"group\"\n itemsCount: {\n type: Number,\n default: undefined\n },\n // Used for variant=\"results\"\n resultsIncrements: {\n type: String,\n default: undefined\n },\n // DEPRECATED\n selection: {\n default: undefined\n },\n })\n useDeprecatedProp(props, 'selection', undefined, 'Use \\'modelValue\\' (or \\'v-model\\') instead')\n const value = useDeprecatedPropActual(props, 'selection', 'modelValue')\n\n // EMITS\n const emit = defineEmits(['update:modelValue'])\n\n // STATE\n const valueState = ref(null)\n\n onMounted(() => {\n if (value.value) {\n // Set internal value to the prop value\n valueState.value = value.value\n } else {\n if (props.variant === 'results') {\n valueState.value = resultsNumbers.value[0]\n } else {\n valueState.value = 1\n }\n }\n })\n\n /** @Deprecated - Remove when `selection` prop is removed */\n watch(() => props.selection, (newVal) => {\n valueState.value = newVal\n })\n\n // Keep internal value in sync with prop\n watch(() => props.modelValue, (newVal) => {\n valueState.value = newVal\n })\n\n // Emit change when internal value changes\n watch(valueState, (newVal, oldVal) => {\n // Don't emit on initial value set\n if (oldVal !== null) {\n emit('update:modelValue', newVal)\n }\n })\n\n // Actual page count varies based on variant\n const actualPageCount = computed(() => {\n if (props.variant === 'group') {\n return Math.ceil(props.itemsCount / props.itemsPerGroup)\n } else if (props.variant === 'base') {\n return props.pageCount\n }\n })\n\n // Helps with a special case where `variant=\"base\"` + `centerDisplay=\"text\"`\n // uses the same style as `variant=\"group\"`, so just use that variant\n const computedVariant = computed(() => {\n if (props.variant === 'base') {\n if (props.centerDisplay === 'text') {\n return 'group'\n } else {\n return undefined\n }\n }\n return props.variant\n })\n\n function handleFirstNav() {\n valueState.value = 1\n }\n\n function handlePrevNav() {\n // Use Math.max to never go below the first page\n valueState.value = Math.max(valueState.value - 1, 1)\n }\n\n function handleNextNav() {\n // Use Math.min to never go over the pageCount\n valueState.value = Math.min(\n valueState.value + 1,\n actualPageCount.value\n )\n }\n\n function handleLastNav() {\n valueState.value = actualPageCount.value\n }\n\n const pages = computed(() => {\n // Show all pages\n if (props.pageCount <= props.pageRange) {\n return [...Array(props.pageCount + 1).keys()].slice(1)\n }\n\n // Always show first page\n const pages = [1]\n\n const offset = (props.pageRange - 1) / 2\n let left = valueState.value - offset\n let right = valueState.value + offset\n\n // Check if left goes under lower bounds\n if (left < 1) {\n // Move right by the left underflow\n right += 1 - left\n // Set left to lower bounds\n left = 1\n }\n\n // Check if right goes over upper bounds\n if (right > props.pageCount) {\n // Move left by the right overflow\n left -= right - props.pageCount\n // Set right to upper bounds\n right = props.pageCount\n }\n\n // Remove first / last page duplicates\n left = Math.max(left, 2)\n right = Math.min(right, props.pageCount - 1)\n\n // Add left ellipsis\n if (left > 2) {\n pages.push(props.breakText)\n }\n\n // Add page numbers\n for (let i = left; i <= right; i++) {\n pages.push(i)\n }\n\n // Add right ellipsis\n if (right < props.pageCount - 1) {\n pages.push(props.breakText)\n }\n\n // Always show last page\n pages.push(props.pageCount)\n\n return pages\n })\n\n const pageTextDisplay = computed(() => {\n return `${props.centerLabel ?? 'Page'} ${valueState.value} of ${actualPageCount.value}`\n })\n\n const groupTextDisplay = computed(() => {\n // valueState starts at 1 rather than 0\n const first = ((valueState.value - 1) * props.itemsPerGroup) + 1\n // Use Math.min to never go over the totalCounts\n const last = Math.min((first - 1) + props.itemsPerGroup, props.itemsCount)\n return `${props.centerLabel ?? 'Results'} ${first} - ${last} of ${props.itemsCount}`\n })\n\n const resultsNumbers = computed(() => {\n return props.resultsIncrements\n .split(',')\n .map((increment) => parseInt(increment))\n })\n</script>\n\n<template>\n <div\n class=\"bs-pagination\"\n data-component=\"bs-pagination\"\n :data-variant=\"computedVariant\"\n :data-fixed=\"props.fixed\"\n >\n <!-- Left Carets -->\n <div\n v-if=\"variant === 'base' || variant === 'group'\"\n class=\"bs-pagination-carets\"\n >\n <!-- First Button -->\n <button\n v-if=\"showFirstLastButtons\"\n type=\"button\"\n :class=\"firstPageText ? 'bs-pagination-word-caret' : undefined\"\n :aria-label=\"firstPageText ? undefined : 'First Page'\"\n :title=\"firstPageText\"\n :disabled=\"valueState === 1\"\n @click=\"handleFirstNav\"\n >\n <BsIconCaretLeftDouble />\n <span v-if=\"firstPageText\">{{ firstPageText }}</span>\n </button>\n\n <!-- Prev Button -->\n <button\n type=\"button\"\n :class=\"prevPageText ? 'bs-pagination-word-caret' : undefined\"\n :aria-label=\"prevPageText ? undefined : 'Previous Page'\"\n :title=\"prevPageText\"\n :disabled=\"valueState === 1\"\n @click=\"handlePrevNav\"\n >\n <BsIconCaretLeft />\n <span v-if=\"prevPageText\">{{ prevPageText }}</span>\n </button>\n </div>\n\n <!-- Page Numbers Display -->\n <div\n v-if=\"variant === 'base' && centerDisplay === 'numbers'\"\n class=\"bs-pagination-page-numbers\"\n >\n <button\n v-for=\"page in pages\"\n :key=\"`page-${page}-button`\"\n type=\"button\"\n :title=\"`Page ${page}`\"\n :disabled=\"valueState === page || breakText === page\"\n :data-selected=\"page === valueState\"\n @click=\"valueState = page\"\n >\n {{ page }}\n </button>\n </div>\n\n <!-- Page Text Display -->\n <span v-if=\"props.variant === 'base' && props.centerDisplay === 'text'\">\n {{ pageTextDisplay }}\n </span>\n\n <!-- Group Text Display -->\n <span v-if=\"props.variant === 'group'\">\n {{ groupTextDisplay }}\n </span>\n\n <!-- Results Display -->\n <template v-if=\"props.variant === 'results'\">\n <span>Results Per Page:</span>\n <div class=\"bs-pagination-results-numbers\">\n <button\n v-for=\"resultsNum in resultsNumbers\"\n type=\"button\"\n :key=\"`results-${resultsNum}`\"\n :data-selected=\"resultsNum === valueState\"\n :disabled=\"valueState === resultsNum || breakText === resultsNum\"\n @click=\"valueState = resultsNum\"\n >\n {{ resultsNum }}\n </button>\n </div>\n </template>\n\n <!-- Right Carets -->\n <div\n v-if=\"variant === 'base' || variant === 'group'\"\n class=\"bs-pagination-carets\"\n >\n <!-- Next Button -->\n <button\n type=\"button\"\n :class=\"nextPageText ? 'bs-pagination-word-caret' : undefined\"\n :aria-label=\"nextPageText ? undefined : 'Next Page'\"\n :title=\"nextPageText\"\n :disabled=\"valueState === actualPageCount\"\n @click=\"handleNextNav\"\n >\n <span v-if=\"nextPageText\">{{ nextPageText }}</span>\n <BsIconCaretRight />\n </button>\n\n <!-- Last Button -->\n <button\n v-if=\"showFirstLastButtons\"\n type=\"button\"\n :class=\"lastPageText ? 'bs-pagination-word-caret' : undefined\"\n :aria-label=\"lastPageText ? undefined : 'Last Page'\"\n :title=\"lastPageText\"\n :disabled=\"valueState === actualPageCount\"\n @click=\"handleLastNav\"\n >\n <span v-if=\"lastPageText\">{{ lastPageText }}</span>\n <BsIconCaretRightDouble />\n </button>\n </div>\n </div>\n</template>\n","<template>\n<component\n ref=\"btnRef\"\n :is=\"rootTag\"\n class=\"bs-pill\"\n :data-active=\"active\"\n data-component=\"bs-pill\"\n :data-status=\"status || undefined\"\n :data-variant=\"variant || undefined\"\n :disabled=\"disabled\"\n v-bind=\"attrsToBind\"\n @click=\"onLinkClick\"\n>\n <span :data-truncate=\"truncate\">\n <slot />\n </span>\n</component>\n</template>\n\n<script setup>\nimport { computed, useAttrs } from 'vue'\nimport { useButtonOrLink } from '../../composables/buttonOrLink.js'\nimport { useClientRouter } from '../../composables/clientRouter.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n active: { type : Boolean, default: false },\n disabled: { type: Boolean, default: false },\n linkTo: { type: [String, Object] },\n router: {},\n status: {\n type: String,\n validator: val => ['active', 'complete', 'disabled', 'error', 'warning', 'positive'].includes(val)\n },\n truncate: {\n type: Boolean,\n default: true\n },\n variant: {\n type: String,\n validator: val => ['filter','filter-add','filter-remove','inactive','live'].includes(val)\n },\n // DEPRECATED\n href: { default: undefined },\n})\nuseDeprecatedProp(props, 'href', 'linkTo')\n\ndefineOptions({ inheritAttrs: false })\n\nconst { onLinkClick } = useClientRouter(props)\n\nconst $attrs = useAttrs()\n\nconst { rootTag, attrsToBind, btnRef } = useButtonOrLink(props, $attrs, 'span')\n\n</script>\n<style>\n:where([data-component=\"bs-pill\"]) {\n display: inline-block;\n max-width: 100%;\n}\n</style>\n","<script setup>\nimport { BsIcon } from '@wwtdev/bsds-icons-vue3'\n\nconst props = defineProps({\n profileName: {\n type: String,\n required: true\n },\n company: String,\n jobTitle: String,\n email: String,\n action: String,\n actionIcon: [String, Object],\n miscMeta: String,\n miscMetaIcon: [String, Object]\n})\nconst emit = defineEmits(['action-toggled'])\n\nfunction handleActionToggle(e) {\n if (e.target.tagName !== 'BUTTON') return\n e.preventDefault()\n e.stopImmediatePropagation()\n emit('action-toggled')\n}\n</script>\n\n<template>\n<div class=\"bs-profile-details\" data-component=\"bs-profile-details\">\n <!-- optional action button (e.g. follow) -->\n <button v-if=\"action || $slots.action\"\n data-icon=\"true\"\n @click=\"handleActionToggle\"\n >\n <slot name=\"action\">\n <template v-if=\"actionIcon\">\n <BsIcon\n v-if=\"typeof actionIcon === 'string'\"\n :name=\"actionIcon\"\n class=\"bs-icon\"\n />\n <component v-else :is=\"actionIcon\" class=\"bs-icon\" />\n </template>\n {{ action }}\n </slot>\n </button>\n\n <!-- standard details -->\n <span class=\"bs-profile-name\" data-size=\"sm\" data-weight=\"bold\">\n {{ profileName }}\n </span>\n <span data-weight=\"bold\" v-if=\"company\">{{ company }}</span>\n <span v-if=\"jobTitle\">{{ jobTitle }}</span>\n <span v-if=\"email\">{{ email }}</span>\n\n <!-- optional misc/meta (e.g. event attendee type) -->\n <span data-icon=\"true\" v-if=\"miscMeta || $slots.misc\">\n <slot name=\"misc\">\n <template v-if=\"miscMetaIcon\">\n <BsIcon\n v-if=\"typeof miscMetaIcon === 'string'\"\n :name=\"miscMetaIcon\"\n class=\"bs-icon\"\n />\n <component v-else :is=\"miscMetaIcon\" class=\"bs-icon\" />\n </template>\n {{ miscMeta }}\n </slot>\n </span>\n</div>\n</template>\n","<script setup>\nimport { useAttrs } from 'vue'\nimport { useButtonOrLink } from '../../composables/buttonOrLink.js'\nimport { useClientRouter } from '../../composables/clientRouter.js'\nimport BsProfileDetails from '../profile-details/BsProfileDetails.vue'\nimport BsProfileImg from '../profile-img/BsProfileImg.vue'\nimport { propDefinitions, emitDefinitions } from './defs-profile.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps(propDefinitions)\nuseDeprecatedProp(props, 'href', 'linkTo')\n\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\ndefineOptions({ inheritAttrs: false })\nconst $attrs = useAttrs()\n\nconst { onLinkClick } = useClientRouter(props)\nconst { rootTag, attrsToBind, btnRef } = useButtonOrLink(props, $attrs, 'div')\n// const rootTag = computed(() => linkUrl.value ? 'a' : 'div')\n\n// TODO: Refactor. This is not strictly valid HTML since we're\n// potentially nesting a button inside an anchor tag (in profile details).\n// But fixing it now would require a styles overhaul; keeping as is for now\n// in the interest of a quick conversion to vue.\n</script>\n\n<template>\n<component\n ref=\"btnRef\"\n :is=\"rootTag\"\n class=\"bs-profile\"\n data-component=\"bs-profile\"\n :data-layout=\"layout\"\n v-bind=\"attrsToBind\"\n @click=\"onLinkClick\"\n>\n <BsProfileImg\n :src=\"imageSrc\"\n :size=\"imageSize\"\n :initials=\"initials\"\n :profile-name=\"profileName\"\n :use-alt-text=\"false\"\n />\n <BsProfileDetails\n :profile-name=\"profileName\"\n :company=\"company\"\n :job-title=\"jobTitle\"\n :email=\"email\"\n :action=\"action\"\n :action-icon=\"actionIcon\"\n :misc-meta=\"miscMeta\"\n :misc-meta-icon=\"miscMetaIcon\"\n @action-toggled=\"emit('action-toggled')\"\n >\n <template #action>\n <slot name=\"action\" />\n </template>\n <template #misc>\n <slot name=\"misc\" />\n </template>\n </BsProfileDetails>\n</component>\n</template>\n","import { computed } from 'vue'\n\n// this is shared by timeline, progress bar\n\n/**\n * @typedef {import('../components/Types.vue').Progress.Status} Status\n * @typedef {import('../components/Types.vue').Progress.Step} Step\n */\n// JSDoc why - can import the types from sfc into here but not vice versa\n\n/**\n * @param {Object} props\n * @param {Array<Step|string>} props.steps\n * @param {Number} props.currentStep\n * @param {String} props.currentStatus\n */\nexport function useSteps(props) {\n const progressStep = computed(() => {\n switch(props.currentStatus) {\n case undefined:\n case null:\n case '':\n return props.steps.filter(step => step.status === 'complete')?.length\n case 'complete':\n return props.steps.length\n case 'in-progress':\n return props.currentStep\n default:\n return props.currentStep\n }\n })\n\n const progressText = computed(() => {\n return `${progressStep.value} of ${props.steps.length} completed.`\n })\n\n\n function getStatus(status, idx) {\n if (status) return status\n\n if (props.currentStatus) {\n if (idx < props.currentStep) {\n return 'complete'\n } else if (idx === props.currentStep) {\n return props.currentStatus\n } else {\n return 'not-started'\n }\n }\n\n return 'not-started'\n }\n\n return {\n progressStep,\n progressText,\n getStatus\n }\n}\n","<script setup>\nimport { useSteps } from '@composables/steps'\n\n/**\n * @typedef {import('../Types.vue').Progress.Status} Status\n * @typedef {import('../Types.vue').Progress.Step} Step\n */\n\nconst props = defineProps({\n /** @type {Status} */\n currentStatus: {\n type: String,\n validator: (value) => {\n return [\n 'cancelled',\n 'complete',\n 'error',\n 'in-progress',\n 'not-started',\n 'ongoing',\n 'paused',\n 'warning',\n ].includes(value)\n }\n },\n currentStep: {\n type: Number,\n default: 0\n },\n /** @type {Array<Step|string>} */\n steps: {\n type: Array,\n required: true\n },\n})\n\nconst { progressStep, progressText, getStatus } = useSteps(props)\n\n</script>\n<template>\n<div\n :aria-valuemax=\"steps.length\"\n :aria-valuenow=\"progressStep\"\n :aria-valuetext=\"progressText\"\n class=\"bs-progress-bar\"\n data-component=\"bs-progress-bar\"\n role=\"progressbar\"\n>\n <div v-for=\"(step, idx) in steps\"\n class=\"bs-step-item\"\n :data-status=\"getStatus(step.status, idx)\"\n data-variant=\"progress\"\n :key=\"step.id || step.label\"\n role=\"status\"\n >\n <span>\n {{ step.label || step }} : {{ getStatus(step.status, idx) || 'not started' }}\n </span>\n </div>\n</div>\n</template>\n\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport BsLabel from '../label/BsLabel.vue'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n label: {\n type: String,\n },\n checked: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n error: {\n type: Boolean,\n default: false,\n },\n inputId: {\n type: String,\n default: '',\n },\n required: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String,\n validator: (value) => value === 'sm',\n },\n value: {\n type: String,\n required: true\n },\n modelValue: {\n type: String\n },\n // DEPRECATED\n passAttrs: { default: undefined },\n})\nuseDeprecatedProp(props, 'passAttrs', undefined, 'Use Vue\\'s native fallthrough attributes instead.')\n\nconst emit = defineEmits(['update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen ] = useGenIdAttrs()\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed Properties\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst isChecked = computed(() => props.checked || (props.modelValue && props.modelValue === props.value))\n\n</script>\n\n<template>\n <div class=\"bs-boolean\"\n data-component=\"bs-radio\"\n :data-disabled=\"disabled\"\n :data-error=\"error\"\n :data-size=\"size\"\n v-bind=\"filtered\"\n >\n <input\n :checked=\"isChecked\"\n :disabled=\"disabled\"\n :id=\"$attrs.id || inputIdAttr\"\n :required=\"required\"\n type=\"radio\"\n :value=\"value\"\n :data-error=\"error\"\n v-bind=\"remaining\"\n @change=\"(e) => $emit('update:modelValue', e.target['value'])\"\n />\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n disabled: {type: Boolean, default: false},\n error: { type: Boolean, default: false },\n hintId: { type: String },\n inputId: { type: String },\n modelValue: [ String, Number ],\n required: { type: Boolean, default: false },\n value: [ String, Number ]\n})\nconst emit = defineEmits(['update:modelValue'])\n\nconst aria = computed(() => {\n return {[ props.error ? 'aria-errormessage' : 'aria-describedby'] : props.hintId }\n})\n</script>\n<template>\n <select\n :id=\"$attrs.id || inputId\"\n class=\"bs-select\"\n data-component=\"bs-select\"\n :disabled=\"disabled\"\n :required=\"required\"\n :data-error=\"error\"\n :value=\"value || modelValue\"\n v-bind=\"aria\"\n @change=\"(e) => $emit('update:modelValue', e.target.value)\"\n >\n <slot />\n </select>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsLabel from '../label/BsLabel.vue'\nimport BsSelect from '../select/BsSelect.vue'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\n// Props\nconst props = defineProps({\n data: {\n type: Array,\n default: () => [],\n },\n /** Sets the disabled state on input, disabled styles on label. */\n disabled: {\n type: Boolean,\n default: false,\n },\n /** Applies error styles to the input. */\n error: {\n type: Boolean,\n default: false,\n },\n /** Pass error text. */\n errorMsg: String,\n /** Pass helper text. */\n hint: String,\n /** Pass id for the input element. Will also be applied to label attribute. */\n inputId: String,\n /** Pass label text. */\n label: { type: String },\n /** Placeholder attribute for `<input>`. */\n placeholder: String,\n /** Sets the required state on the input, append required* indicator to label. */\n required: {\n type: Boolean,\n default: false,\n },\n /** Sets the select value - do not use if using `v-model`. */\n value: [ String, Number ],\n /** Sets the select value - `v-model` directive will use this; do not set explicitly. */\n modelValue: [ String, Number ],\n // DEPRECATED\n hints: { default: undefined },\n passAttrs: { default: undefined },\n})\nuseDeprecatedProp(props, 'hints', undefined, 'Use \\'hint\\' and/or \\'errorMsg\\. instead.')\nuseDeprecatedProp(props, 'passAttrs', undefined, 'Use Vue\\'s native fallthrough attributes instead.')\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed Properties\nconst hintDeprecated = computed(() => props.hints?.join?.(\"\\n\") || props.hints)\nconst hintMsg = computed(() => (\n (props.error && props.errorMsg) || props.hint || hintDeprecated.value || undefined\n))\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst selectedVal = computed(() => props.value || props.modelValue)\n</script>\n\n<template>\n<div data-component=\"bs-select-field\" v-bind=\"filtered\">\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n\n <BsSelect\n :disabled=\"disabled\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :input-id=\"$attrs.id || inputIdAttr\"\n :required=\"required\"\n :value=\"selectedVal\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n >\n <option :selected=\"!selectedVal\" value=\"\" :disabled=\"!!selectedVal\">\n {{ disabled ? '' : placeholder }}\n </option>\n <option v-for=\"option in data\"\n :key=\"option.value\"\n :disabled=\"option.disabled\"\n :selected=\"selectedVal === option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </option>\n </BsSelect>\n\n <BsFieldDetails v-if=\"hintMsg\"\n :data-disabled=\"disabled\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint || hintDeprecated\"\n :hint-id=\"hintId\"\n />\n</div>\n</template>\n<style>\n:where([data-component=\"bs-select-field\"]) {\n display: block;\n width: 100%;\n}\n</style>\n","<script setup>\nimport { computed, ref, toValue, useAttrs } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport BsDropdownWithToggle from '@components/dropdown-with-toggle/BsDropdownWithToggle.vue'\nimport BsLabel from '@components/label/BsLabel.vue'\nimport { BsIconCaretDown } from '@wwtdev/bsds-icons-vue3'\n\n// PROPS\nconst props = defineProps({\n breakout: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n dropdownPosition: {\n type: String,\n default: '',\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n dropdownWidth: {\n type: String,\n default: 'anchor',\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n error: {\n type: Boolean,\n default: false\n },\n helperDescription: {\n type: String,\n default: undefined\n },\n helperText: {\n type: String,\n default: undefined\n },\n hintId: {\n type: String,\n default: undefined\n },\n inputId: {\n type: String,\n default: undefined\n },\n inputName: {\n type: String,\n default: undefined\n },\n label: {\n type: String,\n default: undefined\n },\n modelValue: {\n type: [ String, Number, Object ],\n default: undefined\n },\n options: {\n type: Array,\n required: true\n },\n optionsId: {\n type: String,\n default: undefined\n },\n placeholder: {\n type: String,\n default: 'Select an option'\n },\n required: {\n type: Boolean,\n default: false\n },\n selectId: {\n type: String,\n default: undefined\n },\n valueIdKey: {\n type: String,\n default: 'id'\n },\n})\n\n// EMITS\nconst emit = defineEmits(['update:model-value'])\n\n// COMPOSABLES\nconst [ selectIdGen, optionsIdGen ] = useGenIdAttrs(2)\nconst attrs = useAttrs()\n\n// STATE\nconst isOpen = ref(false)\n\n// COMPUTED\nconst selectIdComp = computed(() => {\n return props.selectId || attrs.id || selectIdGen.value\n})\nconst optionsIdComp = computed(() => props.optionsId || optionsIdGen.value)\nconst buttonText = computed(() => {\n if (props.modelValue) {\n const matchedOption = props.options.find((option) => {\n // Object options, find a match by id\n if (option.value?.[props.valueIdKey]) {\n return option.value[props.valueIdKey] === props.modelValue?.[props.valueIdKey]\n }\n // String or Number options, find a match by value\n return option.value === props.modelValue\n })\n\n if (matchedOption) {\n return matchedOption.label\n }\n }\n\n // Default to placeholder if no match or no selected value\n return props.placeholder\n})\nconst placeholderShown = computed(() => {\n return buttonText.value === props.placeholder\n})\n\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n<div>\n <BsLabel\n v-if=\"label || $slots.label\"\n :disabled=\"disabled\"\n :for=\"selectIdComp\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n\n <input\n v-if=\"inputName || inputId\"\n :id=\"inputId\"\n :name=\"inputName\"\n type=\"hidden\"\n :value=\"modelValue\"\n />\n\n <BsDropdownWithToggle\n :anchor-id=\"selectIdComp\"\n :breakout=\"breakout\"\n :dropdown-position=\"dropdownPosition\"\n :dropdown-width=\"dropdownWidth\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :multiselect=\"false\"\n :open=\"isOpen\"\n :options-id=\"optionsIdComp\"\n :options=\"options\"\n :selected-option=\"modelValue\"\n :toggle-id=\"selectIdComp\"\n :value-id-key=\"valueIdKey\"\n @close=\"isOpen = false\"\n @update:selected-option=\"(ev) => emit('update:model-value', ev)\"\n >\n <template #toggle>\n <button\n :aria-controls=\"optionsIdComp\"\n :aria-describedby=\"hintId\"\n :aria-expanded=\"isOpen\"\n aria-haspopup=\"listbox\"\n :aria-invalid=\"error\"\n :aria-label=\"`${isOpen ? 'Close' : 'Open'} Combobox`\"\n class=\"bs-select\"\n :data-cy=\"placeholderShown ? 'ignore' : undefined\"\n :data-disabled=\"disabled\"\n :data-error=\"error\"\n :data-open=\"isOpen\"\n :data-placeholder=\"placeholderShown\"\n :data-required=\"required\"\n :disabled=\"disabled\"\n :id=\"selectIdComp\"\n role=\"combobox\"\n v-bind=\"$attrs\"\n @click.prevent=\"isOpen = !isOpen\"\n >\n <span>{{ buttonText }}</span>\n <BsIconCaretDown v-if=\"!disabled\" size=\"md\" />\n </button>\n </template>\n </BsDropdownWithToggle>\n</div>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '../../composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport BsLabel from '../label/BsLabel.vue'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n checked: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n hideLabel: {\n type: Boolean,\n default: false,\n },\n inputId: {\n type: String,\n default: ''\n },\n innerOnLabel: {\n type: String\n },\n innerOffLabel: {\n type: String\n },\n label: {\n type: String\n },\n size: {\n type: String,\n validator: (value) => value === 'sm',\n },\n modelValue: {\n type: Boolean\n },\n // DEPRECATED\n passAttrs: { default: undefined },\n})\nuseDeprecatedProp(props, 'passAttrs', undefined, 'Use Vue\\'s native fallthrough attributes instead.')\n\nconst emit = defineEmits(['update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen ] = useGenIdAttrs()\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed Properties\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst isChecked = computed(() => props.checked || props.modelValue)\n\n</script>\n\n<template>\n<div class=\"bs-boolean\"\n data-component=\"bs-switch\"\n :data-disabled=\"disabled\"\n :data-size=\"size\"\n v-bind=\"filtered\"\n>\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :hide=\"hideLabel\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <div class=\"bs-switch\"\n :data-disabled=\"disabled\"\n :data-size=\"size\"\n >\n <input\n :checked=\"isChecked\"\n :disabled=\"disabled\"\n :id=\"$attrs.id || inputIdAttr\"\n type=\"checkbox\"\n v-bind=\"remaining\"\n @change=\"(e) => emit('update:modelValue', e.target['checked'])\"\n />\n <span\n aria-hidden=\"true\"\n :data-inner-on-label=\"innerOnLabel\"\n :data-inner-off-label=\"innerOffLabel\"\n ></span>\n </div>\n</div>\n</template>\n","<template>\n <div\n :aria-controls=\"panelIdComputed\"\n :aria-selected=\"isActive ? 'true' : 'false'\"\n :data-hidden=\"hidden || undefined\"\n data-component=\"bs-tab\"\n role=\"tab\"\n tabindex=\"0\"\n ref=\"hostEl\"\n @click=\"handleTabSelection\"\n @keydown=\"handleKeydown\"\n >\n <slot />\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, useAttrs } from \"vue\"\n\nconst props = defineProps({\n activeTabId: {\n type: String,\n required: true,\n },\n hidden: {\n type: Boolean,\n default: false,\n },\n panelId: {\n type: String\n },\n})\nconst emit = defineEmits([\"tabClick\"])\n\nconst attrs = useAttrs()\n\nconst hostEl = ref()\nconst isActive = computed(() => props.activeTabId === attrs.id)\nconst panelIdComputed = computed(() => props.panelId || `${attrs.id}-panel`)\n\nfunction handleKeydown(e) {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n e.stopPropagation()\n handleTabSelection()\n }\n}\nfunction handleTabSelection() {\n if (props.activeTabId !== attrs.id) {\n const ev = new CustomEvent(\"tabClick\", { detail: attrs.id, bubbles: true })\n hostEl.value.dispatchEvent(ev)\n }\n}\n</script>\n","<script setup>\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport BsDropdownOption from '../dropdown-option/BsDropdownOption.vue'\nimport BsDropdownWithOptions from '../dropdown-with-options/BsDropdownWithOptions.vue'\nimport { BsIconActionEllipsis } from '@wwtdev/bsds-icons-vue3'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { debounce } from '@utils/debounce.js'\n\nconst props = defineProps({\n activeTabId: { type: String, required: true },\n helperText: {type: String, default: 'Select a tab'},\n helperDescription: { type: String },\n modelValue: { type: String },\n withBsTabs: { type: Boolean, default: true },\n})\nconst emit = defineEmits(['tabChange','update:modelValue'])\n\nconst DEFAULT_TOGGLE_WIDTH = 73\nconst ELLIPSIS_WIDTH = 20\nconst TAB_GAP = 16\n\n// state\nconst adaptedToWidth = ref(false)\nconst dropdownMounted = ref(false)\nconst hiddenTabs = ref([])\nconst showDropdown = ref(false)\nconst showDropdownToggle = ref(false)\nconst hostEl = ref()\nconst tablistEl = ref()\n\nconst accumulatedWidths = ref([]) //number[] = []\nconst activeLineInitialized = ref(false)\nconst allTabs = ref([]) //HTMLElement[]\n\nconst dropdownToggle = ref() // HTMLButtonElement\nconst navigableTabs = ref([])\nconst resizeObserver = ref() // ResizeObserver\nconst totalWidth = ref() // number\nconst [ tabListAutoId, dropdownId ] = useGenIdAttrs(2)\nlet adaptToWidthTimeoutId\n\n// computed\nconst activeTabIdx = computed(() => {\n if (props.activeTabId) return allTabs.value.findIndex(t => t.id === props.activeTabId)\n return 0\n})\n\nconst activeTabIsHidden = computed(() => {\n return hiddenTabs.value.some(t => t.id === props.activeTabId)\n})\n\nconst dropdownOptionsId = computed(() => {\n return `${dropdownId.value}-options`\n})\nconst dropdownToggleId = computed(() => {\n return `${dropdownId.value}-toggle`\n})\n\nconst dropdownToggleText = computed(() => {\n return activeTabIsHidden.value ? allTabs.value[activeTabIdx.value]?.textContent : 'More'\n})\n\nconst dropdownToggleWidth = computed(() => {\n if (activeTabIsHidden.value) return (\n accumulatedWidths.value[activeTabIdx.value] -\n accumulatedWidths.value[activeTabIdx.value - 1] +\n ELLIPSIS_WIDTH +\n TAB_GAP\n )\n return DEFAULT_TOGGLE_WIDTH + TAB_GAP\n})\n\nfunction adaptToWidth() {\n let showToggle = false\n let tab // HTMLElement\n let thresholdWidth = 0\n let thresholdReached = false\n let tabsToHide = []\n if (!allTabs.value?.length) return\n\n for (let i = 0; i < allTabs.value.length; i++) {\n tab = allTabs.value[i]\n tab.setAttribute('tabindex', '-1')\n if (thresholdReached && i !== activeTabIdx.value) {\n tab.dataset.hidden = 'true'\n tabsToHide.push(tab)\n continue\n }\n thresholdWidth = i < allTabs.value.length - 1 ? totalWidth.value - dropdownToggleWidth.value : totalWidth.value\n\n if (accumulatedWidths.value[i] > thresholdWidth) {\n tab.dataset.hidden = 'true'\n tabsToHide.push(tab)\n showToggle = true\n thresholdReached = true\n continue\n }\n tab.dataset.hidden = 'false'\n tab.setAttribute('tabindex', '0')\n }\n\n showDropdownToggle.value = showToggle\n hiddenTabs.value = tabsToHide\n if (!adaptedToWidth.value) nextTick(() => adaptedToWidth.value = true)\n adaptToWidthTimeoutId = setTimeout(() => {\n if (!hostEl.value) return\n setNavigableTabs()\n moveActiveLine()\n activeLineInitialized.value = true\n }, activeLineInitialized.value ? 25 : 1000)\n}\n\nfunction adaptToWidthCleanup() {\n clearTimeout(adaptToWidthTimeoutId)\n}\n\nfunction cleanup() {\n adaptToWidthCleanup()\n observerCleanup()\n}\n\nfunction fireTabChange(tabId) {\n emit('tabChange', tabId)\n emit('update:modelValue', tabId)\n}\n\nfunction getTabWidth(tabIdx) {\n const actualWidth = allTabs.value[tabIdx]?.getBoundingClientRect?.()?.width\n if (actualWidth) return actualWidth\n const approxWidth = (tabIdx === 0) ? accumulatedWidths.value[0] : accumulatedWidths.value[tabIdx] - accumulatedWidths.value[tabIdx - 1]\n return approxWidth || 0\n}\n\nfunction handleActiveTabIdChange() {\n allTabs.value[activeTabIdx.value]?.setAttribute('aria-selected', 'true')\n adaptToWidth()\n}\n\nfunction handleDropdownClose() {\n dropdownToggle.value?.focus()\n showDropdown.value = false\n}\n\nfunction handleDropdownToggleClick() {\n showDropdown.value = !showDropdown.value\n if (!dropdownMounted.value) dropdownMounted.value = true\n}\n\nfunction handleDropdownOptionSelect(tabId) {\n showDropdown.value = false\n dropdownToggle.value?.focus()\n fireTabChange(tabId)\n}\n\nfunction handleTabClick(event) {\n if (props.withBsTabs) return\n\n const tab = event.target.closest('[role=\"tab\"]')\n if (!tab || tab.getAttribute('aria-selected') === 'true') return\n const tabId = tab.getAttribute('id')\n fireTabChange(tabId)\n}\n\nfunction handleTabNav(e) {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n const tabIdx = navigableTabs.value.findIndex(t => t.id === e.target.id)\n if (tabIdx === -1) return\n e.preventDefault()\n e.stopPropagation()\n e.key === 'ArrowLeft' ? handleTabPrevious(tabIdx) : handleTabNext(tabIdx)\n }\n}\n\nfunction handleTabNext(tabIdx) {\n const nextIdx = (tabIdx + 1) % navigableTabs.value.length\n navigableTabs.value[nextIdx]?.focus()\n}\n\nfunction handleTabPrevious(tabIdx) {\n const prevIdx = tabIdx === 0 ? navigableTabs.value.length - 1 : tabIdx - 1\n navigableTabs.value[prevIdx]?.focus()\n}\n\n/** This controls the underline (active tab indicator) */\nfunction moveActiveLine() {\n const prevOffset = parseInt(hostEl.value.style.getPropertyValue('--active-line-offset')) || 0\n const max = totalWidth.value\n let duration = 300\n let offsetPx = navigableTabs.value?.[activeTabIdx.value]?.offsetLeft || 0\n let scaleNum = getTabWidth(activeTabIdx.value)\n if (showDropdownToggle.value && activeTabIsHidden.value) {\n offsetPx = dropdownToggle.value?.offsetLeft\n scaleNum = dropdownToggle.value?.offsetWidth\n }\n duration = Math.max(Math.abs((offsetPx - prevOffset) / max * 300), 100)\n hostEl.value.style.setProperty('--active-line-max-width', `${max}px`)\n hostEl.value.style.setProperty('--active-line-scale', `${scaleNum / max}`)\n hostEl.value.style.setProperty('--active-line-offset', `${offsetPx}px`)\n hostEl.value.style.setProperty('--active-line-transition-duration', `${duration}ms`)\n}\n\nfunction observerCleanup() {\n resizeObserver.value?.disconnect?.()\n resizeObserver.value = null\n}\n\nfunction resizeObserverSetup() {\n const cb = debounce(() => {\n totalWidth.value = hostEl?.value?.clientWidth\n adaptToWidth()\n }, 25)\n resizeObserver.value = new ResizeObserver(cb)\n resizeObserver.value.observe(document.body)\n if (hostEl.value) {\n resizeObserver.value.observe(hostEl.value)\n }\n}\n\nfunction setAllTabs() {\n allTabs.value = Array.from(tablistEl.value.children).filter(c => c.role === 'tab')\n}\n\nfunction setAccumlulatedWidths() {\n let tabWidth\n let maxTabWidth = 0\n allTabs.value.forEach((t, i) => {\n tabWidth = t.getBoundingClientRect().width + TAB_GAP\n maxTabWidth = Math.max(maxTabWidth, tabWidth)\n accumulatedWidths.value.push(i ? tabWidth + accumulatedWidths.value[i - 1] : tabWidth)\n })\n}\n\nfunction setNavigableTabs() {\n let tabs = []\n if (typeof window === 'undefined') return tabs\n for (let tab of allTabs.value) {\n if (tab.dataset?.hidden === 'true' || tab.dataset?.hidden === '' || tab.getAttribute('tabindex') === '-1') break\n tabs.push(tab)\n }\n if (showDropdownToggle.value) tabs.push(hostEl.value.querySelector('.bs-tab-list-toggle'))\n navigableTabs.value = tabs\n}\n\nwatch(() => props.activeTabId, handleActiveTabIdChange)\n\nonMounted(() => {\n try {\n setAllTabs()\n setAccumlulatedWidths()\n resizeObserverSetup()\n totalWidth.value = hostEl.value.getBoundingClientRect().width\n adaptToWidth()\n if (!props.withBsTabs) {\n allTabs.value[activeTabIdx.value]?.setAttribute('aria-selected', 'true')\n }\n } catch(err) {\n console.log('tab error', err)\n }\n})\n\nonUnmounted(cleanup)\n</script>\n\n<template>\n<div\n class=\"bs-tab-list\"\n ref=\"hostEl\"\n :id=\"$attrs.id || tabListAutoId\"\n data-component=\"bs-tab-list\"\n :data-resizing=\"!adaptedToWidth || undefined\"\n>\n <div\n class=\"bs-tab-list-tabs\"\n ref=\"tablistEl\"\n role=\"tablist\"\n @click=\"handleTabClick\"\n @tabClick=\"e => fireTabChange(e.detail)\"\n @keydown=\"handleTabNav\"\n >\n <slot />\n </div>\n\n <!-- \"More...\" button -->\n <button\n :aria-controls=\"dropdownId\"\n :aria-expanded=\"showDropdown\"\n class=\"bs-tab-list-toggle\"\n :data-active=\"activeTabIsHidden || undefined\"\n :data-hidden=\"!showDropdownToggle\"\n :id=\"dropdownToggleId\"\n ref=\"dropdownToggle\"\n @click=\"handleDropdownToggleClick\"\n >\n <BsIconActionEllipsis size=\"sm\" />\n {{ dropdownToggleText }}\n </button>\n\n <!-- Hidden tabs dropdown -->\n <BsDropdownWithOptions\n :anchor-id=\"dropdownToggleId\"\n :container-id=\"$attrs.id || tabListAutoId\"\n :helper-description=\"helperDescription || undefined\"\n :helper-text=\"helperText\"\n :id=\"dropdownId\"\n :options-id=\"dropdownOptionsId\"\n position=\"right\"\n preloaded\n :shown=\"showDropdown\"\n width=\"content\"\n @close=\"handleDropdownClose\"\n @update:model-value=\"handleDropdownOptionSelect\"\n >\n <BsDropdownOption v-for=\"t of hiddenTabs\" :key=\"t.id\"\n :value=\"t.id\"\n :options-id=\"dropdownOptionsId\"\n >\n {{ t.textContent }}\n </BsDropdownOption>\n </BsDropdownWithOptions>\n</div>\n</template>\n","<script setup>\nimport { computed, useAttrs } from 'vue'\n\n// Props\nconst props = defineProps({\n activeTabId: {\n type: String,\n required: true\n },\n tabId: {\n type: String,\n required: true\n },\n})\n\nconst $attrs = useAttrs()\n\n// Computed Properties\nconst isActive = computed(() => props.activeTabId && props.activeTabId === props.tabId)\nconst panelId = computed(() => $attrs.id || `${props.tabId}-panel`)\n</script>\n\n<template>\n <section\n :aria-labelledby=\"tabId\"\n :data-active=\"isActive\"\n data-component=\"bs-tab-panel\"\n :id=\"panelId\"\n role=\"tabpanel\"\n >\n <slot />\n </section>\n</template>\n","<script>\nfunction TableCol() {\n return null\n}\n\nTableCol.props = {\n id: {\n // TODO: Change to \"required\", use as cell loop key, and update all docs after getting resizing working ORCA app okay\n type: String,\n default: undefined\n },\n name: {\n type: [String, Number],\n default: ''\n },\n resize: {\n type: [Boolean, Number, String], // String could be \"left\" or \"right\"\n default: false\n },\n // named as resizeId instead of resizeKey, to help indicate it should ideally be a unique id per column\n resizeId: {\n type: String,\n default: undefined\n },\n resizeMin: {\n type: [String, Number],\n default: undefined // undefined so this can override Table-level setting when defined,\n },\n resizeMax: {\n type: [String, Number],\n default: undefined // undefined so this can override Table-level setting when defined\n },\n rowKey: {\n type: [String, Number],\n default: ''\n },\n sort: {\n type: [Boolean, String, Number],\n default: false\n },\n sortKey: {\n type: String,\n default: ''\n },\n truncate: {\n type: [Boolean, String, Number],\n default: undefined // undefined so this can override Table-level setting when defined\n },\n width: {\n type: String,\n default: '' // default width is set in Table.vue\n }\n}\n\nexport default TableCol\n</script>\n","export const TableHeaderProvider = Symbol('TableHeaderProvider')\nexport const TableBodyProvider = Symbol('TableBodyProvider')\nexport const TableFooterProvider = Symbol('TableFooterProvider')\n","<template>\n <div\n :class=\"`bs-table-${kind}-rowgroup`\"\n role=\"rowgroup\"\n :style=\"`--bs-table-${kind}-row-count: ${rowCount}`\">\n <slot />\n </div>\n</template>\n\n<script setup>\nimport { ref, provide } from 'vue'\nimport { TableHeaderProvider, TableBodyProvider, TableFooterProvider } from './provider-keys-table'\n\n// Why this Provide/Inject approach?\n// For css grid implicit rows subgrid layout reasons, we need to count rows rendered into the header/body/footer respectively\n// Checking the TableRow's parent instance isn't necessarily reliable or efficient\n// Instead we are using provide/inject to figure out if the TableRow is a descendant of the header/body/footer (see TableRow for that part of it)\n// (TODO: tweak to work with nested Tables scenario? low priority, thinking can factor in a table id)\n\nconst props = defineProps({\n kind: {\n type: String,\n required: true,\n validate: val => ['header', 'body', 'footer'].includes(val)\n }\n})\n\nconst providerByKind = {\n header: TableHeaderProvider,\n body: TableBodyProvider,\n footer: TableFooterProvider\n}\n\nconst rowCount = ref(0)\n\nprovide(providerByKind[props.kind], { incrementRowCount, decrementRowCount })\n\nfunction incrementRowCount() {\n rowCount.value++\n}\n\nfunction decrementRowCount() {\n rowCount.value--\n}\n</script>","<script>\nfunction FrozenCols() {\n return null\n}\n\nFrozenCols.props = {\n place: {\n type: String,\n default: 'left',\n validator: val => ['left', 'right'].includes(val)\n }\n}\n\nexport default FrozenCols\n</script>\n","<template>\n <div class=\"bs-table-row\" role=\"row\">\n <slot />\n </div>\n</template>\n\n<script setup>\nimport { onMounted, onUnmounted, inject } from 'vue'\nimport { TableHeaderProvider, TableBodyProvider, TableFooterProvider } from './provider-keys-table'\n\n// Detect if this row is a child of the Table body, header, or footer (body first since it will be the majority)\nconst rowgroup = inject(TableBodyProvider, null) || inject(TableHeaderProvider, null) || inject(TableFooterProvider)\n\n// keeping track of the rendered rows count is unfortunately necessary for the css grid implicit rows subgrid layout\nonMounted(() => rowgroup.incrementRowCount())\nonUnmounted(() => rowgroup.decrementRowCount())\n</script>\n","<script>\nimport { h } from 'vue'\n\nfunction HeadCell(props, { slots }) {\n return h('div', {\n class: 'bs-table-head-cell',\n role: 'columnheader'\n }, slots)\n}\n\n// defined so fall-through attributes work correctly without effort\nHeadCell.props = {}\n\nexport default HeadCell\n</script>\n","<script>\nimport { h } from 'vue'\n\nfunction Cell(props, { slots }) {\n return h('div', {\n class: 'bs-table-cell',\n role: 'cell'\n }, slots)\n}\n\n// defined so fall-through attributes work correctly without effort\nCell.props = {}\n\nexport default Cell\n</script>","<template>\n <div class=\"bs-table-wrap-header\">\n <slot />\n </div>\n</template>\n","<template>\n <div class=\"bs-table-wrap-footer\">\n <slot />\n </div>\n</template>","<template>\n <button\n class=\"bs-sort-toggle\"\n type=\"button\"\n @click=\"onToggle\">\n <slot>\n <span class=\"visually-hidden\">sort toggle</span>\n </slot>\n <component\n :is=\"iconsByOrder[props.order] || BsIconCaretSort\"\n :size=\"size\"\n aria-hidden=\"true\" />\n </button>\n</template>\n\n<script setup>\nimport { BsIconCaretSort, BsIconCaretSortUp, BsIconCaretSortDown } from '@wwtdev/bsds-icons-vue3'\n\nconst emit = defineEmits(['toggle'])\n\nconst props = defineProps({\n order: {\n type: String,\n default: '',\n validate: val => ['asc', 'desc'].includes(val)\n },\n size: {\n type: String,\n default: 'md',\n // these should be same as values allowed for BsIcons size prop\n validate: val => ['sm', 'md', 'lg', 'xl', '2xl', '3xl', 'auto'].includes(val)\n }\n})\n\nconst iconsByOrder = {\n asc: BsIconCaretSortUp,\n desc: BsIconCaretSortDown\n}\n\nfunction onToggle(event) {\n const nextStates = {\n asc: 'desc',\n desc: 'asc'\n }\n emit('toggle', nextStates[props.order] || 'asc', event)\n}\n</script>\n","<template>\n <div\n v-show=\"isResizerVisible\"\n ref=\"resizer\"\n class=\"bs-table-col-resizer\"\n :class=\"isResizing && 'bs-table-col-resizer-active'\"\n @dragstart.prevent\n @pointerdown.prevent.stop=\"onPointerDown\"\n @dblclick.prevent.stop=\"onDoubleClick\" />\n</template>\n\n<script setup>\nimport { useTemplateRef, shallowRef, ref, onMounted, onUnmounted, nextTick } from 'vue'\n\nconst emit = defineEmits(['resize'])\n\nconst resizerEl = useTemplateRef('resizer')\n\nconst resizerExtraHoverTarget = 5\n\nlet xStart = null\nlet xPos = null\nlet animationFrame = null\n\nconst target = shallowRef({ el: null, rect: null })\nconst isResizerVisible = ref(false)\nconst isResizing = ref(false)\n\nonMounted(() => {\n // had to listen on document instead of table header rowgroup or table, due to issue\n // with resizer staying visible when mouse leaves header vertically, very fast\n document.addEventListener('pointermove', showHideResizer)\n})\n\nonUnmounted(() => {\n document.removeEventListener('pointermove', showHideResizer)\n})\n\n// - - - - - - - - - - - -\n\nfunction showHideResizer(event) {\n if (isResizing.value) return\n\n if (isResizerVisible.value) {\n return (event.target === resizerEl.value) || hideResizer()\n }\n\n setTarget(event.target.closest('[data-bs-table-col-resize-id]'))\n\n if (!target.value.el) return\n\n const isOnLeftBorder = event.clientX <= (target.value.rect.left + resizerExtraHoverTarget)\n const isOnRightBorder = event.clientX >= (target.value.rect.right - resizerExtraHoverTarget)\n\n // TODO: Also handle left-only resize\n if (isOnLeftBorder && event.target.dataset.bsTableColResize === 'right') return\n\n if (isOnLeftBorder || isOnRightBorder) {\n xPos = isOnLeftBorder ? target.value.rect.left : target.value.rect.right\n if (isOnLeftBorder) setTarget(getTargetsPreviousSibling())\n if (!target.value.el) return\n showResizer()\n }\n}\n\n// TODO: Handle frozen cols right case\nfunction getTargetsPreviousSibling() {\n const prevSibling = target.value.el.previousElementSibling\n\n if (!prevSibling) return\n\n const prevCell = prevSibling.classList.contains('bs-table-cols-frozen-left')\n ? target.value.el.previousElementSibling.lastElementChild\n : target.value.el.previousElementSibling\n\n return prevCell.dataset.bsTableColResizeId ? prevCell : null\n}\n\nfunction setTarget(el) {\n // TODO: Handle resize max, coming back to do this after getting ORCA app resize working\n target.value = el\n ? { el, rect: el.getBoundingClientRect(), minWidth: getResizeMin(el) }\n : { el: null, rect: null }\n}\n\nfunction getResizeMin(el) {\n const width = el.dataset.bsTableColResizeMin?.replace('px', '')\n if (!width) return undefined\n return parseInt(width, 10)\n}\n\nfunction showResizer() {\n moveResizerToXpos()\n resizerEl.value.style.setProperty('--bs-table-col-resizer-y', `${target.value.rect.top}px`)\n resizerEl.value.style.setProperty('--bs-table-col-resizer-handle-height', `${target.value.rect.height}px`)\n isResizerVisible.value = true\n}\n\nfunction hideResizer() {\n isResizerVisible.value = false\n}\n\nfunction onPointerDown(event) {\n event.target.setPointerCapture(event.pointerId)\n const scrollWrap = resizerEl.value.closest('.bs-table-scroll-wrap')\n resizerEl.value.style.setProperty('--bs-table-col-resizer-tail-height', `${scrollWrap.offsetHeight}px`)\n isResizing.value = true\n xStart = xPos\n resizerEl.value.addEventListener('pointermove', onPointerMove)\n resizerEl.value.addEventListener('pointerup', onPointerUp, { once: true })\n}\n\nfunction onPointerMove(event) {\n xPos = isMinColWidth(event)\n ? target.value.rect.left + target.value.minWidth\n : event.clientX\n\n if (animationFrame) return\n\n animationFrame = requestAnimationFrame(() => {\n animationFrame = null\n moveResizerToXpos()\n })\n}\n\nfunction isMinColWidth(event) {\n return (event.clientX - target.value.rect.left) <= target.value.minWidth\n}\n\nfunction moveResizerToXpos() {\n resizerEl.value.style.setProperty('--bs-table-col-resizer-x', `${xPos}px`)\n}\n\nfunction onPointerUp() {\n resizerEl.value.removeEventListener('pointermove', onPointerMove)\n // timeout fixes a weird issue in Firefox (as of 11/2024) where dblclick event won't fire when also removing a class\n setTimeout(() => isResizing.value = false)\n const xDiff = xPos - xStart\n if (xDiff === 0) return\n emitResize(Math.round(target.value.rect.width + xDiff))\n}\n\nasync function emitResize(width) {\n emit('resize', {\n el: target.value.el,\n id: target.value.el.dataset.bsTableColResizeId,\n width\n })\n // handles case where user does not mouse-off/hide resizer before resizing again,\n // by getting latest boundingClientRect() info after the column has been resized\n await nextTick(() => setTarget(target.value.el))\n}\n\n// TODO: Come back to think about this after working in ORCA app. This gets weird if the default col width is not in pixels.\nfunction onDoubleClick() {\n emitResize() // no width given, resets col back to orig width\n hideResizer()\n}\n</script>\n","<!-- uses local css only (no blue steel css, except vars), due to structure differences from Blue Steel table css -->\n\n<!--\n TODO:\n * Resize Cols\n * Finalize loop keys approach, using rowIdKey (not sure if this is needed, no issues so far with our huge, complex table)\n-->\n<script>\nimport { h, readonly, shallowRef, cloneVNode, computed, ref } from 'vue'\nimport TableCol from './TableCol.vue'\nimport TableRowGroup from './TableRowGroup.vue'\nimport FrozenCols from './FrozenCols.vue'\nimport TableRow from './TableRow.vue'\nimport HeadCell from './HeadCell.vue'\nimport Cell from './Cell.vue'\nimport TableHeader from './TableHeader.vue'\nimport TableFooter from './TableFooter.vue'\nimport SortToggle from './SortToggle.vue'\nimport TableColResizer from './TableColResizer.vue'\n\nexport default {\n\n props: {\n rows: {\n type: Array,\n required: true\n },\n ariaDescribedby: {\n type: String,\n default: undefined\n },\n ariaLabel: {\n type: String,\n default: undefined\n },\n borders: {\n type: String,\n default: 'rows',\n validate: val => ['rows', 'cols', 'grid', 'none', 'frozen'].includes(val)\n },\n cellPadding: {\n type: String,\n default: 'md'\n },\n // can also be set or overridden at the individual col level, via TableCol's \"width\" prop\n colWidth: {\n type: String,\n default: '1fr'\n },\n freezeHeader: {\n type: [Boolean, String, Number],\n default: false\n },\n freezeFooter: {\n type: [Boolean, String, Number],\n default: false\n },\n // can also be set or overridden at the individual col level, via TableCol's \"resize-min\" prop\n resizeColsMin: {\n type: [String, Number],\n default: '40px'\n },\n // can also be set or overridden at the individual col level, via TableCol's \"resize-max\" prop\n resizeColsMax: {\n type: [String, Number],\n default: undefined\n },\n role: {\n type: String,\n default: 'table'\n },\n rowHover: {\n type: [Boolean, String, Number],\n default: false\n },\n // NOTE: This prop is not used in the code yet. Waiting to see if any issues arise IRL usage, none so far.\n // The row data's unique id key to be used for the table rows v-for :key\n // rowIdKey: {\n // type: String,\n // default: 'id'\n // },\n sortKey: {\n type: String,\n default: undefined\n },\n sortOrder: {\n type: String,\n default: undefined,\n validator: val => ['asc', 'desc'].includes(val)\n },\n striped: {\n type: [Boolean, String, Number],\n default: false\n },\n // can also be set or overridden at the individual col level, via TableCol's \"truncate\" prop\n truncate: {\n type: [Boolean, String, Number],\n default: false\n }\n },\n\n emits: ['sort', 'resize-col'],\n\n setup(props, { slots: tableSlots, emit }) {\n\n const cols = shallowRef({\n left: [],\n center: [],\n right: []\n })\n\n const resizedColWidthsById = ref({})\n\n const colWidths = computed(() => {\n return Object.values(cols.value).flat().map(col => {\n const resizeId = getResizeId(col)\n return resizedColWidthsById.value[resizeId] ?? getInitialColWidth(col)\n }).join(' ')\n })\n\n // consumer can use a size option or provide any valid css padding value\n const cellPaddingCssVar = computed(() => {\n const value = ['xs', 'sm', 'md', 'lg', 'xl', 'none'].includes(props.cellPadding)\n ? `var(--bs-table-cell-padding-${props.cellPadding})`\n : props.cellPadding\n return `--bs-table-cell-padding: ${value}`\n })\n\n // consumer can use boolean flag, or provide any valid css color value\n const rowHoverCssVar = computed(() => {\n if (typeof props.rowHover !== 'string' || props.rowHover === 'true') return ''\n return `--bs-table-row-hover: ${ props.rowHover }`\n })\n\n const canResizeCols = computed(() => {\n return Object.values(cols.value).flat().some(getResizeId)\n })\n\n\n // ----- WRAPPER -----\n\n function wrapper(content = []) {\n const css = [\n 'bs-table-wrap',\n `bs-table-border-${props.borders}`,\n props.striped && 'bs-table-striped',\n props.rowHover && 'bs-table-row-hover'\n ]\n\n return h('div', {\n class: css,\n style: [cellPaddingCssVar.value, rowHoverCssVar.value]\n }, content)\n }\n\n\n // ----- TABLE -----\n\n function table(content = []) {\n const style = [\n `--bs-table-col-widths: ${colWidths.value}`,\n `--bs-table-frozen-left-count: ${cols.value.left.length}`,\n `--bs-table-frozen-right-count: ${cols.value.right.length}`\n ]\n\n return h('div', {\n class: 'bs-table',\n style,\n role: props.role,\n ariaLabel: props.ariaLabel,\n ariaDescribedby: props.ariaDescribedby\n }, content)\n }\n\n // is needed to ensure cases where a consumer may flex-1 the <Table>, work nicely automatically\n function tableScrollWrapper(content = []) {\n return h('div', { class: 'bs-table-scroll-wrap'}, content)\n }\n\n\n // ----- HEADER ROWGROUP -----\n\n function headerRowgroup(rows = []) {\n return h(TableRowGroup, {\n kind: 'header',\n class: props.freezeHeader && 'bs-table-header-rowgroup-freeze'\n }, () => rows)\n }\n\n function headerRowgroupDefault() {\n return headerRowgroup(\n row(\n cells(headCell)\n )\n )\n }\n\n function headerRowgroupSlot() {\n const slotContent = tableSlots.header({ cols: readonly(cols.value) })\n return headerRowgroup(\n slotRows(slotContent, headCell)\n )\n }\n\n\n // ----- BODY ROWGROUP -----\n\n function bodyRowgroup(rows = []) {\n return h(TableRowGroup, { kind: 'body' }, () => rows)\n }\n\n function bodyRowgroupDefault() {\n const rows = props.rows.map((rowData, rowIndex) => {\n return row(\n cells(bodyCell, { row: rowData, rowIndex })\n )\n })\n return bodyRowgroup(rows)\n }\n\n function bodyRowgroupSlot() {\n const rows = props.rows.map((rowData, rowIndex) => {\n const slotContent = tableSlots.body({ row: rowData, rowIndex })\n return slotRows(slotContent, bodyCell, { row: rowData, rowIndex })\n })\n return bodyRowgroup(rows)\n }\n\n\n // ----- FOOTER ROWGROUP -----\n\n function footerRowgroup(rows = []) {\n return h(TableRowGroup, {\n kind: 'footer',\n class: props.freezeFooter && 'bs-table-footer-rowgroup-freeze'\n }, () => rows)\n }\n\n function footerRowgroupSlot() {\n const slotContent = tableSlots.footer({ cols: readonly(cols.value) })\n return footerRowgroup(\n slotRows(slotContent, headCell)\n )\n }\n\n\n // ----- ROWS -----\n\n function row(cells = []) {\n return h(TableRow, null, () => cells)\n }\n\n function slotRows(slotContent = [], cellFn, slotProps = {}) {\n const rows = findNodesByType(slotContent, [TableRow])\n return rows.map(node => isDefaultRowPlaceholder(node)\n ? h(node, null, () => cells(cellFn, slotProps))\n : h(node)\n )\n }\n\n\n // ----- CELLS -----\n\n function headCell(col = {}) {\n const slotContent = col.slots?.default({}).find(node => node.type === HeadCell)\n const sortKey = getSortKey(col)\n\n const attrs = {\n class: props.truncate && truncateCss(col),\n ['data-bs-table-col-id']: col.props.id, // TODO: only added here for col resize reasons, could be on all cells\n ...getResizeAttrs(col),\n ...(sortKey && (sortKey === props.sortKey) && { 'aria-sort': `${props.sortOrder}ending` })\n }\n\n // if HeadCell contains SortToggle, automatically hook it up\n if (sortKey && slotContent?.children) {\n const newKids = slotContent.children.default().map(node => {\n return node.type === SortToggle\n ? cloneVNode(node, { ...getSortToggleProps(col) })\n : h(node)\n })\n return h(slotContent, attrs, () => newKids)\n }\n\n return slotContent\n ? h(slotContent, attrs)\n : h(HeadCell, attrs, () => sortToggle(col) || col.props?.name)\n }\n\n function getResizeAttrs(col) {\n const resizeId = getResizeId(col)\n\n if (!resizeId) return {}\n\n const colMin = col.props['resize-min'] || col.props.resizeMin\n const colMax = col.props['resize-max'] || col.props.resizeMax\n\n return {\n ['data-bs-table-col-resize-id']: resizeId,\n ['data-bs-table-col-resize']: ['right', 'left'].includes(col.props.resize) ? col.props.resize : undefined,\n ['data-bs-table-col-resize-min']: colMin === undefined ? props.resizeColsMin : colMin,\n ['data-bs-table-col-resize-max']: colMax === undefined ? props.resizeColsMax : colMax\n }\n }\n\n function getResizeId(col) {\n const resizeId = col.props['resize-id'] || col.props.resizeId\n if (resizeId) return resizeId\n\n const resizeKey = col.props['resize-key'] || col.props.resizeKey\n if (resizeKey) {\n throw new Error(`[BsTable] BsTableCol does not have a \"resize-key\" prop. Instead, use: resize-id=\"${resizeKey}\".`)\n }\n\n if (!isColPropTruthy(col, 'resize')) return\n if (!col.props.id) throw new Error('[BsTable] BsTableCol \"resize\" prop is missing identifier. Must use either approach...single prop: \\'resize-id=\"myUniqueResizeId\"\\', or both props: \\'resize id=\"myTableColId\"\\'')\n return col.props.id\n }\n\n function getSortToggleProps(col = {}) {\n const sortKey = getSortKey(col)\n return {\n order: props.sortKey === sortKey ? props.sortOrder : null,\n onToggle: sortOrder => emit('sort', { sortKey, sortOrder })\n }\n }\n\n function sortToggle(col = {}) {\n const sortKey = getSortKey(col)\n if (!sortKey) return\n return h(SortToggle, { ...getSortToggleProps(col) }, () => col.props?.name)\n }\n\n function getSortKey(col) {\n const sortKey = col.props['sort-key'] || col.props.sortKey\n if (sortKey) return sortKey\n if (!isColPropTruthy(col, 'sort')) return\n if (!col.props.id) throw new Error('[BsTable] BsTableCol \"sort\" prop is missing key identifier. Must use either approach...single prop: \\'sort-key=\"mySortKey\"\\', or both props: \\'sort id=\"myTableColId\"\\'')\n return col.props.id\n }\n\n function bodyCell(col = {}, slotProps = {}) {\n const slotContent = col.slots?.default(slotProps).find(node => node.type === Cell)\n const attrs = { class: props.truncate && truncateCss(col) }\n return slotContent\n ? h(slotContent, attrs)\n : h(Cell, attrs, () => getRowKeyProp(slotProps.row, col))\n }\n\n // TODO (HJ): Update this to use isColPropTruthy() approach and fix issue where TableCol only\n // overrides Table setting, instead of being allowed to just set it on a TableCol alone\n function truncateCss(col) {\n // the checks are a little weird here, to allow for a better consumer experience,\n // e.g. can override Table level setting at TableCol level, without a binding for false\n const isTruncate = col.props.truncate === undefined\n ? props.truncate\n : col.props.truncate === '' || col.props.truncate\n\n return col.props.truncate !== 'false' && isTruncate && 'bs-table-truncate'\n }\n\n function frozenCells(side, cellFn, slotProps) {\n if (!cols.value[side].length) return\n const theCells = cols.value[side].map(col => cellFn(col, slotProps))\n return h('div', { class: `bs-table-cols-frozen-${side}`}, theCells)\n }\n\n function cells(cellFn, slotProps = {}) {\n return [\n frozenCells('left', cellFn, slotProps),\n cols.value.center.map(col => cellFn(col, slotProps)),\n frozenCells('right', cellFn, slotProps)\n ]\n }\n\n\n // ----- TABLE COL RESIZER -----\n\n function tableColResizer() {\n return h(TableColResizer, { onResize: onResizeCol })\n }\n\n // TODO: This is disgusting. Clean it up. See if can move into TableColResizer w/TableProvider.\n function onResizeCol({ el, id, width }) {\n const colsToUpdate = Object.values(cols.value).flat().reduce((acc, col) => {\n // TODO: Bullet-proof this id check, after getting resizing up and running in ORCA app\n const key = getResizeId(col) || col.props.id\n if (key === id || resizedColWidthsById.value[key] || getInitialColWidth(col).endsWith('px')) return acc\n acc.push({ id: key, width: null })\n return acc\n }, [])\n\n if (colsToUpdate.length) {\n const row = el.closest('.bs-table-row')\n colsToUpdate.forEach(col => {\n const headCell = row.querySelector(`:where([data-bs-table-col-resize-id=\"${col.id}\"], [data-bs-table-col-id=\"${col.id}\"])`)\n if (!headCell) return\n col.width = `${headCell.offsetWidth}px`\n })\n }\n\n const updates = [{ id, width: width ? `${width}px` : undefined }, ...colsToUpdate]\n updates.forEach(col => resizedColWidthsById.value[col.id] = col.width)\n emit('resize-col', { target: updates[0], updated: [...updates] })\n }\n\n\n // ----- HELPERS -----\n\n // In header/body/footer slots, an empty <TableRow /> should be used to represent where the consumer\n // wants the standard, default row content to appear, in relation to their other custom rows in the slot\n // E.g. a custom conditional group header row, then the default/real row appears below that\n function isDefaultRowPlaceholder(node) {\n return node.type === TableRow && !node.children\n }\n\n // allows for 'a.b.c' paths too, but for anything more complex, consumer should use a <Cell> in the TableCol slot instead\n function getRowKeyProp(row, col) {\n const key = col.props['row-key'] || col.props.rowKey || col.props.id\n const path = (key || '').split('.')\n return path.reduce((obj, key) => obj && obj[key], row)\n }\n\n // making this a bit harder on myself, but it's for DX reasons. Want to allow Boolean, String, Number to be used on some TableCol props\n function isColPropTruthy(col, prop) {\n const val = col.props[prop]\n return val === '' || (val && val !== 'false')\n }\n\n function getInitialColWidth(col) {\n return col.props?.width ?? props.colWidth\n }\n\n\n // ----- VNODE PROCESSING -----\n\n function findNodesByType(nodes, types = []) {\n return nodes.reduce((acc, node) => {\n if (types.includes(node.type)) return [ ...acc, node ]\n if (Array.isArray(node.children)) return [ ...acc, ...findNodesByType(node.children, types) ]\n return acc\n }, [])\n }\n\n function processFrozenTableCols(node) {\n const place = node.props?.place || node.type.props.place.default\n if (!node.type.props.place.validator(place)) {\n // eslint-disable-next-line no-console\n console.warn(`[BsTable warn] Invalid prop: BsFrozenCols prop \"place\" must be set to \"left\" or \"right\". Yours: \"${place}\".`)\n }\n return {\n place,\n frozenCols: findNodesByType(node.children.default(), [TableCol])\n }\n }\n\n function processTableCols(nodes = []) {\n const format = col => ({\n props: col.props || { name: '' },\n slots: col.children\n })\n return nodes.reduce((acc, node) => {\n if (node.type === FrozenCols) {\n const { place, frozenCols } = processFrozenTableCols(node)\n acc[place] = acc[place].concat(frozenCols.map(format))\n return acc\n }\n acc.center.push(format(node))\n return acc\n }, { left: [], center: [], right: [] })\n }\n\n function processDefaultSlot(nodes) {\n return nodes.reduce((acc, node) => {\n\n if (node.type === TableHeader) {\n acc.header = node\n return acc\n }\n\n if (node.type === TableFooter) {\n acc.footer = node\n return acc\n }\n\n if ([FrozenCols, TableCol].includes(node.type)) {\n acc.columns.push(node)\n return acc\n }\n\n // covers v-for usage case\n const nested = findNodesByType([node], [FrozenCols, TableCol])\n\n nested?.length\n ? acc.columns = [...acc.columns, ...nested]\n : acc.other.push(node)\n\n return acc\n\n }, { columns: [], header: null, footer: null, other: [] })\n }\n\n\n // ----- RENDER FUNCTION -----\n // Did not use a provide/inject approach to register TableCols on mount/unmount,\n // because we want to render columns in the order TableCols are placed in the DOM (which\n // would fail in a v-if'd TableCol scenario...registered order wouldn't be reliable)\n\n return () => {\n const { columns, header, footer, other } = processDefaultSlot(tableSlots.default())\n\n cols.value = processTableCols(columns)\n\n return wrapper([\n header,\n tableScrollWrapper([\n table([\n tableSlots.header ? headerRowgroupSlot() : headerRowgroupDefault(),\n tableSlots.body ? bodyRowgroupSlot() : bodyRowgroupDefault(),\n tableSlots.footer && footerRowgroupSlot()\n ]),\n other, // non-Table related slot content, e.g. consumers could add a loading spinner or empty state message\n canResizeCols.value && tableColResizer()\n ]),\n footer\n ])\n }\n }\n}\n</script>\n","<script setup>\nimport { computed } from 'vue'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n error: {\n type: Boolean,\n default: false\n },\n hintId: String,\n value: String,\n modelValue: String,\n // DEPECATED\n inputId: { default: undefined }\n})\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\nconst emit = defineEmits(['update:modelValue'])\n\nconst aria = computed(() => (\n { [props.error ? \"aria-errormessage\" : \"aria-describedby\"]: props.hintId }\n))\n\n</script>\n\n<template>\n<textarea\n class=\"bs-textarea\"\n data-component=\"bs-textarea\"\n :data-error=\"error\"\n :id=\"$attrs.id || inputId\"\n :rows=\"$attrs.rows || 6\"\n :value=\"value || modelValue\"\n @input=\"e => $emit('update:modelValue', e.target.value)\"\n v-bind=\"aria\"\n/>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsLabel from '../label/BsLabel.vue'\nimport BsTextarea from '../textarea/BsTextarea.vue'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n /** Sets the maximum value this textarea will allow. Will also display character count if present. This does not set maxlength, so users are able to enter text that is longer and edit it down. Enforcement of length must be by the developer. */\n charMax: Number,\n /** Sets the disabled state on input, disabled styles on label. */\n disabled: {\n type: Boolean,\n default: false,\n },\n /** Applies error styles to the input. */\n error: {\n type: Boolean,\n default: false,\n },\n /** Pass error text. */\n errorMsg: String,\n /** Pass helper text. */\n hint: String,\n /** @Deprecated Use `hint` and/or `errorMsg`. */\n hints: [ String, Array ],\n /** Pass id for the input element. Will also be applied to label attribute. */\n inputId: String,\n /** Pass label text. */\n label: { type: String },\n /** Placeholder attribute for `<textarea>`. */\n placeholder: String,\n /** Sets the required state on the textarea, append required* indicator to label. */\n required: {\n type: Boolean,\n default: false,\n },\n /** Sets the number of rows for the textarea. Defaults to `6`. */\n rows: {\n type: [Number, String],\n default: 6\n },\n /** Sets the textarea value - do not use if using `v-model`. */\n value: String,\n /** Sets the textarea value - `v-model` directive will use this; do not set explicitly. */\n modelValue: String,\n // DEPRECATED\n passAttrs: { default: undefined },\n})\nuseDeprecatedProp(props, 'passAttrs', undefined, 'Use Vue\\'s native fallthrough attributes instead.')\nconst emit = defineEmits(['update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed Properties\nconst charCount = computed(() => (props.value || props.modelValue)?.length || 0)\nconst hintDeprecated = computed(() => props.hints?.join?.(\"\\n\") || props.hints)\nconst hintMsg = computed(() => (\n (props.error && props.errorMsg) || props.hint || hintDeprecated.value || undefined\n))\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\n\n</script>\n\n<template>\n<div data-component=\"bs-textarea-field\" v-bind=\"filtered\">\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <BsTextarea\n :disabled=\"disabled\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :id=\"$attrs.id || inputIdAttr\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :rows=\"rows\"\n :value=\"value || modelValue\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n />\n <BsFieldDetails v-if=\"hintMsg || charMax\"\n :char-count=\"charCount\"\n :char-max=\"charMax\"\n :data-disabled=\"disabled\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint || hintDeprecated\"\n :hint-id=\"hintId\"\n />\n</div>\n</template>\n<style>\n:where([data-component=\"bs-textarea-field\"]) {\n display: block;\n width: 100%;\n}\n</style>\n","/**\n * @typedef {Object} TimeObj\n * @property {number} hours - number of hours\n * @property {number} minutes - number of minutes\n */\n\n/**\n * @param {string} val - potential time string\n * @returns {\"\"|\"uFmt\"|\"uFmtNoColon\"|\"amPm\"|\"amPmNoColon\"} matched pattern or empty string\n * @description Takes a potential time string, `val`, and returns a matched pattern. If the input string does not match any known time patterns, an empty string is returned.\n * @example\n * checkTimePattern('1234') // 'uFmtNoColon'\n * checkTimePattern('12:34') // 'uFmt'\n * checkTimePattern('12:34pm') // 'amPm'\n * checkTimePattern('12:34 pm') // 'amPm'\n * checkTimePattern('12:34 am') // 'amPm'\n * checkTimePattern('12:34am') // 'amPm'\n * checkTimePattern('5') // '' (invalid)\n * checkTimePattern('5 pm') // '' (invalid)\n */\nfunction checkTimePattern(val) {\n const uFmt = /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/.test(val) // 24h fmt\n const uFmtNoColon = /^([01]?[0-9]|2[0-3])[0-5][0-9]$/.test(val) // 24h fmt without colon\n const amPm = /^([0]?[0-9]|1[0-2]):[0-5][0-9] ?(a|p|am|pm)$/i.test(val) // am pm fmt\n const amPmNoColon = /^([0]?[0-9]|1[0-2])[0-5][0-9] ?(a|p|am|pm)$/i.test(val) // am pm fmt without colon\n\n if (uFmt) return 'uFmt'\n if (uFmtNoColon) return 'uFmtNoColon'\n if (amPm) return 'amPm'\n if (amPmNoColon) return 'amPmNoColon'\n return ''\n}\n\nconst parseIntTen = (val) => parseInt(val, 10)\n\n/**\n * @param {string} val - raw string to attempt to parse into hours and minutes\n * @returns {TimeObj} object with `hours` and `minutes` fields\n * @description Takes a raw string, `val`, and attempts to parse it into hours and minutes. If the input string is not a valid time or parsing otherwise fails, the `hours` and `minutes` fields are undefined.\n * @example\n * parseRaw('1234') // { hours: 12, minutes: 34 }\n * parseRaw('12:34') // { hours: 12, minutes: 34 }\n * parseRaw('12:34pm') // { hours: 12, minutes: 34 }\n * parseRaw('12:34 pm') // { hours: 12, minutes: 34 }\n * parseRaw('00:34') // { hours: 0, minutes: 34 }\n * parseRaw('12:34am') // { hours: 0, minutes: 34 }\n * // invalid\n * parseRaw('5pm') // { hours: undefined, minutes: undefined }\n */\nfunction parseRaw(val = '') {\n const STRIP_PATTERN = /[^0-9:apmAPM]/g\n let hours\n let minutes\n val = val.replaceAll(STRIP_PATTERN, '').toLowerCase()\n\n const matchedPattern = checkTimePattern(val)\n switch (matchedPattern) {\n case 'uFmt':\n case 'uFmtNoColon':\n minutes = parseIntTen(val.slice(-2))\n hours = parseIntTen(val.slice(0, -2))\n break\n case 'amPm':\n case 'amPmNoColon':\n const parts = val.split(/(a|p|am|pm)/)\n const pm = val.includes('p')\n minutes = parseIntTen(parts[0].slice(-2))\n hours = parseIntTen(parts[0].slice(0, -2))\n if (hours < 12 && pm) hours += 12\n if (hours === 12 && !pm) hours = 0\n if (hours === 24) hours = 0\n break\n }\n\n return {\n hours,\n minutes,\n }\n}\n\n/**\n *\n * @param {string} val - time string in the format `HH:mm`\n * @returns {string} am/pm formatted time string\n *\n * @description Takes a time string, `val`, in the format `HH:mm` and returns a formatted time string in the format `H:mm AM/PM. This will strip out all characters except for numeric characters and colon.`\n */\nexport function fmtTimeValToDisplay(val = '') {\n const STRIP_PATTERN = /[^0-9:]/g\n val = val.replaceAll(STRIP_PATTERN, '')\n if (!val) return ''\n\n const [ hours, minutes ] = val.split(':')\n const hoursInt = parseIntTen(hours)\n const minutesInt = parseIntTen(minutes)\n const ampm = hoursInt < 12 ? 'AM' : 'PM'\n if (isNaN(hoursInt) || isNaN(minutesInt) || hoursInt > 23 || minutesInt > 59) return ''\n return `${hoursInt % 12 || 12}:${minutes} ${ampm}`\n}\n\n/**\n * @param {string} val - time string with or without colon, am/pm, or spaces\n * @returns {string} formatted time string in the format `HH:mm`\n * @description Takes an unformatted time string, `val`, and returns a formatted time string in the format `HH:mm`. If the input string is not a valid time or parsing otherwise fails, an empty string is returned.\n * @example\n * fmtInputToTimeVal('1234') // '12:34'\n * fmtInputToTimeVal('12:34') // '12:34'\n * fmtInputToTimeVal('12:34pm') // '12:34'\n * fmtInputToTimeVal('12:34 pm') // '12:34'\n * fmtInputToTimeVal('12:34am') // '00:34'\n * fmtInputToTimeVal('12:34 am') // '00:34'\n * fmtInputToTimeVal('500') // '05:00'\n * fmtInputToTimeVal('5:00') // '05:00'\n * fmtInputToTimeVal('500p') // '17:00'\n * fmtInputToTimeVal('5:00pm') // '17:00'\n * fmtInputToTimeVal('5:00 pm') // '17:00'\n * fmtInputToTimeVal('5pm') // '' (invalid)\n */\nexport function fmtInputToTimeVal(val = '') {\n const { hours, minutes } = parseRaw(val)\n if (isNaN(hours) || isNaN(minutes)) return ''\n\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`\n}\n\n\n","<script setup>\nimport { onMounted, ref, watch } from 'vue'\nimport BsDropdownCombobox from '@components/dropdown-combobox/BsDropdownCombobox.vue'\nimport { fmtTimeValToDisplay, fmtInputToTimeVal } from '@utils/fmtTime.js'\n\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false\n },\n disabledTimes: {\n type: Array,\n default: () => []\n },\n dropdownPosition: {\n type: String,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n dropdownWidth: {\n type: String,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n error: {\n type: Boolean,\n default: false\n },\n helperText: {\n type: String,\n default: ''\n },\n helperDescription: {\n type: String,\n default: ''\n },\n hintId: {\n type: String,\n },\n inputId: {\n type: String,\n },\n maxTime: {\n type: String,\n default: '23:59'\n },\n minTime: {\n type: String,\n default: '00:00'\n },\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: 'hh:mm am'\n },\n required: {\n type: Boolean,\n default: false\n },\n step: {\n type: Number,\n default: 30,\n validator: (value) => {\n return [5, 10, 15, 30, 60].includes(value)\n },\n },\n})\nconst emit = defineEmits(['update:modelValue'])\n\nconst EXCLUDED = 'excluded'\nconst OVER = 'over'\nconst SKIP = 'skip'\nconst STOP = 'stop'\nconst UNDER = 'under'\n\nconst displayValue = ref(fmtTimeValToDisplay(props.modelValue))\nconst options = ref([])\nconst timeError = ref('')\nconst timeHasError = ref(false)\n\nfunction createOptions() {\n const options = []\n let stopAll = false\n for (let i = 0; i < 24; i++) {\n if (stopAll) break\n for (let j = 0; j < 60; j += props.step) {\n const timeVal = getTimeString(i, j)\n const skipOrStop = getSkipOrStop(timeVal)\n if (skipOrStop === SKIP) continue\n if (skipOrStop === STOP) {\n stopAll = true\n break\n }\n options.push({\n label: fmtTimeValToDisplay(timeVal),\n value: timeVal,\n })\n }\n }\n return options\n}\n\nfunction checkConstraints(timeVal) {\n if (!timeVal) return ''\n if (props.minTime && timeVal < props.minTime) return UNDER\n if (props.maxTime && timeVal > props.maxTime) return OVER\n if (props.disabledTimes.includes(timeVal)) return EXCLUDED\n return ''\n}\n\nfunction getSkipOrStop(timeVal) {\n switch (checkConstraints(timeVal)) {\n case OVER:\n return STOP\n case UNDER:\n case EXCLUDED:\n return SKIP\n default:\n return ''\n }\n}\n\nfunction getTimeString(hour, minute) {\n hour = hour.toString().padStart(2, '0')\n minute = minute.toString().padStart(2, '0')\n return `${hour}:${minute}`\n}\n\nfunction handleComboboxChange(val) {\n const formattedValue = fmtInputToTimeVal(val)\n if (formattedValue === props.modelValue) {\n displayValue.value = fmtTimeValToDisplay(props.modelValue)\n }\n updateWithValidation(formattedValue)\n}\n\nfunction setOptions() {\n options.value = createOptions()\n}\n\nfunction updateWithValidation(value) {\n validate(value)\n emit('update:modelValue', value)\n}\n\nfunction validate(value) {\n const check = checkConstraints(value)\n switch(check) {\n case OVER:\n timeError.value = `Time must be before ${fmtTimeValToDisplay(props.maxTime)}`\n timeHasError.value = true\n break\n case UNDER:\n timeError.value = `Time must be after ${fmtTimeValToDisplay(props.minTime)}`\n timeHasError.value = true\n break\n case EXCLUDED:\n timeError.value = `The following times are disabled: ${props.disabledTimes.map(t => fmtTimeValToDisplay(t)).join(', ')}`\n timeHasError.value = true\n break\n default:\n timeError.value = ''\n timeHasError.value = false\n }\n}\n\nonMounted(setOptions)\n\nwatch([\n () => props.disabledTimes,\n () => props.maxTime,\n () => props.minTime,\n () => props.step,\n], setOptions)\n\nwatch([\n () => props.disabledTimes,\n () => props.maxTime,\n () => props.minTime,\n () => props.modelValue,\n], () => validate(props.modelValue))\n\nwatch(() => props.modelValue, (val) => {\n displayValue.value = props.modelValue ? fmtTimeValToDisplay(val) : ''\n})\n\ndefineExpose({\n validationErr: timeHasError,\n validationErrMsg: timeError,\n})\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n <BsDropdownCombobox\n :disabled=\"disabled\"\n :display-value=\"displayValue\"\n :dropdown-position=\"dropdownPosition\"\n :dropdown-width=\"dropdownWidth\"\n :error=\"error || timeHasError\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :hint-id=\"hintId\"\n :input-id=\"inputId\"\n :model-value=\"modelValue\"\n :options=\"options\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :update-on-input=\"false\"\n @update:modelValue=\"handleComboboxChange\"\n />\n</template>\n","<script setup>\nimport { computed, ref, watch } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsTimePicker from '../time-picker/BsTimePicker.vue'\nimport BsLabel from '../label/BsLabel.vue'\n\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false\n },\n disabledTimes: {\n type: Array,\n default: () => []\n },\n dropdownPosition: {\n type: String,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n dropdownWidth: {\n type: String,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n error: {\n type: Boolean,\n default: false\n },\n errorMsg: {\n type: String,\n },\n helperText: {\n type: String,\n default: ''\n },\n helperDescription: {\n type: String,\n default: ''\n },\n hint: {\n type: String,\n },\n inputId: {\n type: String,\n },\n label: {\n type: String,\n },\n maxTime: {\n type: String,\n },\n minTime: {\n type: String,\n },\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: 'hh:mm am'\n },\n required: {\n type: Boolean,\n default: false\n },\n step: {\n type: Number,\n default: 30,\n validator: (value) => {\n return [5, 10, 15, 30, 60].includes(value)\n },\n },\n})\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\nconst timePicker = ref(null)\n\nconst errorMsgComputed = computed(() => props.errorMsg || timeError.value)\nconst hasError = computed(() => props.error || timeHasError.value)\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst showDetails = computed(() => props.hint || (hasError.value && errorMsgComputed.value))\nconst timeError = computed(() => timePicker.value?.validationErrMsg)\nconst timeHasError = computed(() => timePicker.value?.validationErr)\n\ndefineExpose({\n validationErr: timeHasError,\n validationErrMsg: timeError,\n})\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n<div\n aria-live=\"polite\"\n data-component=\"bs-time-picker-field\"\n v-bind=\"filtered\"\n>\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <BsTimePicker\n ref=\"timePicker\"\n :disabled=\"disabled\"\n :disabled-times=\"disabledTimes\"\n :dropdown-position=\"dropdownPosition\"\n :dropdown-width=\"dropdownWidth\"\n :error=\"hasError\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :hint-id=\"hintId\"\n :input-id=\"$attrs.id || inputIdAttr\"\n :max-time=\"maxTime\"\n :min-time=\"minTime\"\n :model-value=\"modelValue\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :step=\"step\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n />\n <BsFieldDetails v-show=\"showDetails\"\n :error=\"hasError\"\n :error-msg=\"errorMsgComputed\"\n :hint=\"hint\"\n :hint-id=\"hintId\"\n />\n</div>\n</template>\n","<script setup>\nimport {\n BsIconCircleCheck,\n BsIconCircleEllipsis,\n BsIconCircleExclamation,\n BsIconCirclePause,\n BsIconCirclePlay,\n BsIconCircleStop,\n BsIconCircleX,\n BsIconGraphPieEmpty,\n} from '@wwtdev/bsds-icons-vue3'\nimport { useSteps } from '@composables/steps'\n\n/**\n * @typedef {import('../Types.vue').Progress.Status} Status\n * @typedef {import('../Types.vue').Progress.Step} Step\n */\n\nconst props = defineProps({\n /** @type {Status} */\n currentStatus: {\n type: String,\n validator: (value) => {\n return [\n 'cancelled',\n 'complete',\n 'error',\n 'in-progress',\n 'not-started',\n 'ongoing',\n 'paused',\n 'warning'\n ].includes(value)\n }\n },\n currentStep: {\n type: Number,\n default: 0\n },\n /** @type {Array<Step|string>} */\n steps: {\n type: Array,\n required: true\n },\n})\n\nconst STATUSES_ICONS = {\n cancelled: BsIconCircleStop,\n complete: BsIconCircleCheck,\n error: BsIconCircleX,\n \"in-progress\": BsIconCircleEllipsis,\n \"not-started\": BsIconGraphPieEmpty,\n ongoing: BsIconCirclePlay,\n paused: BsIconCirclePause,\n warning: BsIconCircleExclamation,\n}\n\nconst { progressStep, progressText, getStatus } = useSteps(props)\n\nfunction getIcon(status, idx) {\n status = getStatus(status, idx)\n return STATUSES_ICONS[status] || BsIconGraphPieEmpty\n}\n\n</script>\n<template>\n<div\n :aria-valuemax=\"steps.length\"\n :aria-valuenow=\"progressStep\"\n :aria-valuetext=\"progressText\"\n class=\"bs-timeline\"\n data-component=\"bs-timeline\"\n role=\"progressbar\"\n>\n <div v-for=\"(step, idx) in steps\"\n class=\"bs-step-item\"\n :data-status=\"getStatus(step.status, idx)\"\n :key=\"step.id || step.label\"\n role=\"status\"\n >\n <Component :is=\"getIcon(step.status, idx)\"\n class=\"bs-step-icon\"\n role=\"presentation\"\n />\n <p>\n {{ step.label || step }}\n <span class=\"visually-hidden\">\n : {{ getStatus(step.status, idx) || 'not started' }}\n </span>\n </p>\n </div>\n</div>\n</template>\n\n","<script setup>\nimport { provide, inject } from 'vue'\nimport BsEnhancedTransition from '../transition/BsEnhancedTransition.vue'\nimport { useDeprecatedTransition, useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n shown: {\n type: Boolean,\n default: true\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n toastId: {\n type: String,\n required: true\n },\n variant: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['warning', 'positive', 'negative'].includes(value)\n }\n },\n stacked: {\n type: Boolean,\n default: false\n },\n duration: {\n type: Number,\n default: 10000\n },\n // DEPRECATED\n enterControlled: {\n default: undefined\n },\n enterTrigger: {\n default: undefined\n },\n leaveTrigger: {\n default: undefined\n }\n})\nuseDeprecatedProp(props, 'enterControlled', 'preloaded')\nuseDeprecatedProp(props, 'enterTrigger', 'shown')\nuseDeprecatedProp(props, 'leaveTrigger', 'shown')\n\nconst emit = defineEmits(['dismiss', 'after-enter', 'after-leave'])\n\ndefineOptions({ inheritAttrs: false })\n\nconst { transition } = useDeprecatedTransition(props)\n\nlet autoDismissTimer = null\n\n// Send down to slotted children\nprovide('variant', props.variant)\nprovide('handleDismiss', handleDismiss)\n\n// Sent down from BsToaster, or use props\nconst stacked = inject('stacked', props.stacked)\n\nfunction handleDismiss() {\n if (autoDismissTimer) {\n clearTimeout(autoDismissTimer)\n autoDismissTimer = null\n }\n emit('dismiss', props.toastId)\n}\n\nfunction handleEnterEnd() {\n if (props.duration > 0) {\n autoDismissTimer = setTimeout(() => {\n handleDismiss()\n }, props.duration)\n }\n\n emit('after-enter')\n}\n</script>\n\n<template>\n <BsEnhancedTransition\n name=\"bs-toast\"\n :shown=\"transition\"\n :preloaded=\"preloaded\"\n @after-enter=\"handleEnterEnd\"\n @after-leave=\"emit('after-leave')\"\n >\n <div\n class=\"bs-toast\"\n data-component=\"bs-toast\"\n :data-variant=\"variant\"\n :data-shown=\"transition\"\n :data-stacked=\"stacked || undefined\"\n role=\"alert\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n </BsEnhancedTransition>\n</template>\n","<script setup>\n import { ref, useSlots, onMounted, inject } from 'vue'\n import BsButton from '../button/BsButton.vue'\n\n // Provided from BsToast\n const handleDismiss = inject('handleDismiss', () => {})\n\n function isStacked() {\n return useSlots().default?.().length > 2 || undefined\n }\n</script>\n\n<template>\n <div\n class=\"bs-toast-actions\"\n data-component=\"bs-toast-actions\"\n :data-stacked=\"isStacked()\"\n >\n <slot>\n <BsButton\n size=\"sm\"\n text-btn\n @click=\"handleDismiss\"\n >\n Dismiss\n </BsButton>\n </slot>\n </div>\n</template>\n","<template>\n <div class=\"bs-toast-body\" data-component=\"bs-toast-body\">\n <slot></slot>\n </div>\n</template>\n","<script setup>\n import { inject, computed } from 'vue'\n import {\n BsIconWarning,\n BsIconThumbsUpStroke,\n BsIconCircleExclamation\n } from '@wwtdev/bsds-icons-vue3'\n\n // Provided from BsToast\n const variant = inject('variant', undefined)\n\n const icon = computed(() => {\n switch(variant) {\n case 'warning':\n return BsIconWarning\n case 'positive':\n return BsIconThumbsUpStroke\n case 'negative':\n return BsIconWarning\n default:\n return BsIconCircleExclamation\n }\n })\n</script>\n\n<template>\n <div class=\"bs-toast-header\" data-component=\"bs-toast-header\" :data-variant=\"variant\">\n <component :is=\"icon\" class=\"bs-toast-header-icon\" />\n <h5><slot/></h5>\n </div>\n</template>\n","<script setup>\n import { provide } from 'vue'\n\n // Send down to slotted BsToast components\n provide('stacked', true)\n</script>\n\n<template>\n <div class=\"bs-toaster\" data-component=\"bs-toaster\">\n <slot />\n </div>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue'\nimport useKeydown from '../../composables/keydown'\n\n// PROPS\nconst props = defineProps({\n tooltipId: {\n type: String,\n required: true\n },\n content: {\n type: String,\n default: ''\n },\n position: {\n type: String,\n default: 'top',\n validator: (value) => {\n return [\n 'top',\n 'top-left',\n 'top-right',\n 'right',\n 'bottom',\n 'bottom-left',\n 'bottom-right',\n 'left'\n ].includes(value)\n }\n }\n})\n\n// STATE\nconst isHoverOrFocused = ref(false)\nconst isEscaped = ref(false)\n\nconst getTooltipTextClass = computed(() => {\n let cssClass = 'bs-tooltip-text'\n if (isEscaped.value) {\n // Different positions have different translateX/Y style\n if (props.position === 'top' || props.position === 'bottom') {\n cssClass += ' escaped-x'\n } else if (props.position === 'left' || props.position === 'right') {\n cssClass += ' escaped-y'\n } else {\n cssClass += ' escaped'\n }\n }\n return cssClass;\n})\n\n// Handle escape key closing the tooltip\nuseKeydown(['Escape'], () => {\n if (isHoverOrFocused.value) {\n isHoverOrFocused.value = false\n isEscaped.value = true\n }\n})\n\nfunction handleEnterOrFocus() {\n isHoverOrFocused.value = true\n}\n\nfunction handleLeaveOrFocusOut() {\n isHoverOrFocused.value = false\n // Also reset escaped so it shows again on hover/focus\n isEscaped.value = false\n}\n</script>\n\n<template>\n<div\n class=\"bs-tooltip\"\n :data-position=\"position\"\n data-component=\"bs-tooltip\"\n @mouseenter=\"handleEnterOrFocus\"\n @focusin=\"handleEnterOrFocus\"\n @mouseleave=\"handleLeaveOrFocusOut\"\n @focusout=\"handleLeaveOrFocusOut\"\n>\n <slot />\n <div\n :class=\"getTooltipTextClass\"\n :id=\"tooltipId\"\n role=\"tooltip\"\n >\n <slot name=\"content\">\n {{ content }}\n </slot>\n </div>\n</div>\n</template>\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-vertical-navigation.js'\nimport { BsIconCaretUp, BsIconCaretLeft, BsIconCaretRight, BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport { ref, watch, onMounted, computed } from 'vue'\nimport useNavigationUtils from '../../composables/navigationUtils'\nimport { useMatchMedia } from '@composables/matchMedia.js'\nimport NavigationLink from './NavigationLink.vue'\n\n// PROPS\nconst props = defineProps(propDefinitions)\n\n// EMITS\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\n// COMPOSABLES\nconst {\n collapsedSections,\n getExpandButtonTitle,\n initializeSections,\n isExpanded,\n rawNavData,\n} = useNavigationUtils(props)\nuseMatchMedia('(max-width: 1165px)', (ev) => {\n isTablet.value = ev.matches\n})\n\n// REFS\nconst verticalNav = ref(null)\nconst toggleButton = ref(null)\n\n// STATE\nconst isTablet = ref(false)\nconst internalCollapsed = ref(props.collapsed)\n\n// COMPUTED\nconst isNarrow = computed(() => {\n return !props.width && props.variant === 'narrow'\n})\n\nconst isCollapsible = computed(() => {\n return props.variant === 'collapsible'\n})\n\nconst isEffectivelyCollapsed = computed(() => {\n if (!isCollapsible.value || isTablet.value) return false\n return internalCollapsed.value\n})\n\n// LIFE CYCLE HOOKS\nonMounted(() => {\n initializeSections(false)\n})\n\n// WATCHERS\nwatch(() => props.navData, () => {\n initializeSections(false)\n})\n\n// Watch for button ref changes (when it mounts/unmounts due to v-if)\nwatch(toggleButton, (button) => {\n if (button && props.width) {\n button.style.setProperty('--bs-vertical-nav-width', props.width)\n }\n})\n\nwatch(() => props.collapsed, (newVal) => {\n internalCollapsed.value = newVal\n})\n\n// Set CSS variables on document body for page layout (CSS-only approach)\n// This allows page content to respond to navigation width changes without JavaScript\n// IMPORTANT: We use internalCollapsed directly (not isEffectivelyCollapsed) so hover doesn't shift layout\nwatch([() => internalCollapsed.value, isNarrow, () => props.width, isCollapsible, isTablet], \n ([collapsed, narrow, customWidth, collapsible, tablet]) => {\n // Calculate the actual width for page layout (ignoring hover state)\n let layoutWidth = '0px'\n \n // Only check collapsible state and collapsed state, ignore hover\n const isActuallyCollapsed = collapsible && !tablet && collapsed\n \n if (isActuallyCollapsed) {\n layoutWidth = '4rem' // 64px collapsed\n } else if (customWidth) {\n layoutWidth = customWidth // Use custom width as-is\n } else if (narrow) {\n layoutWidth = '4.5rem' // 72px narrow\n } else {\n layoutWidth = '9.875rem' // 158px wide\n }\n \n // Set CSS variable on body that page layout can use\n document.body.style.setProperty('--bs-page-nav-width', layoutWidth)\n}, { immediate: true })\n\nwatch(() => props.width, (newValue) => {\n if (newValue) {\n verticalNav.value.style.setProperty('--bs-vertical-nav-width', newValue)\n // Also update toggle button if it exists\n if (toggleButton.value) {\n toggleButton.value.style.setProperty('--bs-vertical-nav-width', newValue)\n }\n } else {\n verticalNav.value.style.removeProperty('--bs-vertical-nav-width')\n // Also remove from toggle button if it exists\n if (toggleButton.value) {\n toggleButton.value.style.removeProperty('--bs-vertical-nav-width')\n }\n }\n})\n\nwatch(() => props.mobileOpen, (newVal) => {\n if (newVal) {\n document.body.style.overflow = 'hidden'\n verticalNav.value.style.setProperty('visibility', 'visible')\n verticalNav.value.style.setProperty('pointer-events', 'auto')\n setTimeout(() => {\n verticalNav.value.style.setProperty('opacity', '1')\n }, 0)\n } else {\n document.body.style.overflow = ''\n verticalNav.value.style.removeProperty('opacity')\n verticalNav.value.style.setProperty('pointer-events', 'none')\n setTimeout(() => {\n verticalNav.value.style.removeProperty('visibility')\n }, 200)\n }\n})\n\n// METHODS\nfunction toggleSection(sectionId) {\n collapsedSections.value[sectionId] = !collapsedSections.value[sectionId]\n}\n\nfunction toggleCollapsed() {\n internalCollapsed.value = !internalCollapsed.value\n emit('update:collapsed', internalCollapsed.value)\n}\n</script>\n\n<template>\n <div class=\"bs-vertical-nav-wrapper\" :data-bg-variant=\"props.bgVariant || undefined\">\n <!-- Collapse Toggle Button -->\n <button\n v-if=\"isCollapsible && !isTablet\"\n ref=\"toggleButton\"\n class=\"bs-vertical-nav-toggle\"\n type=\"button\"\n :aria-expanded=\"!internalCollapsed\"\n :title=\"internalCollapsed ? 'Expand navigation' : 'Collapse navigation'\"\n :data-collapsed=\"isEffectivelyCollapsed\"\n :data-narrow=\"isNarrow\"\n @click=\"toggleCollapsed\"\n >\n <BsIconCaretRight v-if=\"internalCollapsed\" class=\"bs-vertical-nav-toggle-icon\" />\n <BsIconCaretLeft v-else class=\"bs-vertical-nav-toggle-icon\" />\n </button>\n\n <nav\n class=\"bs-vertical-nav\"\n ref=\"verticalNav\"\n :data-narrow=\"isNarrow\"\n :data-collapsed=\"isEffectivelyCollapsed\"\n :data-collapsible=\"isCollapsible\"\n :data-sticky=\"props.sticky || undefined\"\n :style=\"props.width && !isEffectivelyCollapsed ? { width: props.width } : undefined\"\n >\n <!-- Upper / Main Secondary Nav Options -->\n <ul>\n <!-- Top Content Slot -->\n <li v-if=\"$slots['top-content']\" class=\"bs-vertical-nav-top-content\">\n <slot name=\"top-content\" />\n </li>\n\n <template v-for=\"item in rawNavData\" :key=\"item.id\">\n <!-- Section (Collapsible or Divider-Only) -->\n <li\n v-if=\"item.navItems?.length > 0\"\n class=\"bs-vertical-nav-section\"\n :data-collapsed=\"!item.dividerOnly && !isExpanded(item)\"\n :data-divider-only=\"item.dividerOnly\"\n :data-app-links=\"item.appLinks\"\n >\n <!-- Toggle button (only shown if not divider-only) -->\n <button\n v-if=\"!item.dividerOnly && !isNarrow && !isEffectivelyCollapsed\"\n class=\"bs-vertical-nav-section-toggle\"\n :aria-expanded=\"isExpanded(item)\"\n :aria-controls=\"`${item.id}-nested-section`\"\n :title=\"getExpandButtonTitle(item)\"\n type=\"button\"\n @click=\"toggleSection(item.id)\"\n >\n <span v-if=\"!isEffectivelyCollapsed\">{{ item.text }}</span>\n <BsIconCaretUp class=\"bs-vertical-nav-section-toggle-caret\" />\n </button>\n\n <!-- Nested Items (always visible for divider-only sections) -->\n <ul v-show=\"item.dividerOnly || isExpanded(item) || isEffectivelyCollapsed\" :id=\"`${item.id}-nested-section`\">\n <li v-for=\"nestedItem in item.navItems\" :key=\"nestedItem.id\">\n <NavigationLink\n :item=\"nestedItem\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => emit('nav-link-clicked', { ev, payload: nestedItem })\"\n :aria-label=\"nestedItem.text\"\n >\n <BsIcon\n v-if=\"typeof nestedItem.icon === 'string'\"\n class=\"bs-vertical-nav-link-icon\"\n :name=\"nestedItem.icon\"\n />\n <component\n v-else\n :is=\"nestedItem.icon\"\n class=\"bs-vertical-nav-link-icon\"\n />\n <span>{{ nestedItem.text }}</span>\n </NavigationLink>\n </li>\n </ul>\n </li>\n\n <!-- Single Item -->\n <li v-else>\n <NavigationLink\n :item=\"item\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => emit('nav-link-clicked', { ev, payload: item })\"\n :aria-label=\"item.text\"\n >\n <BsIcon\n v-if=\"typeof item.icon === 'string'\"\n class=\"bs-vertical-nav-link-icon\"\n :name=\"item.icon\"\n />\n <component\n v-else\n :is=\"item.icon\"\n class=\"bs-vertical-nav-link-icon\"\n />\n <span>{{ item.text }}</span>\n </NavigationLink>\n </li>\n </template>\n </ul>\n\n <!-- End Items -->\n <div v-if=\"$slots['end-items']\" class=\"bs-vertical-nav-end-items\">\n <slot name=\"end-items\" />\n </div>\n </nav>\n </div>\n</template>\n"],"names":["bsSelectors","selectors","propDefinitions","emitDefinitions","slotDefinitions","value","val","useGenIdAttrs","quantity","ids","i","ref","useId","useDeprecatedProp","props","propName","newPropName","customMessage","warning","useDeprecatedPropActual","computed","useDeprecatedTransition","transition","onMounted","watch","__props","emit","__emit","containerRef","isOpen","containerId","contentId","headingId","openItemMatch","showContent","handleToggled","TAG_BY_PROP","useButtonOrLink","attrs","defaultTag","rootTag","getTag","unref","btnRef","additionalAttrs","safeProps","isButton","attrsRet","attrsToBind","toBind","hrefUrl","_b","_a","newVal","foundProp","key","getProp","useClientRouter","propUrl","hrefIsRelative","routeTo","onLinkClick","e","$attrs","useAttrs","$slots","useSlots","accessibleLabelAttr","isTextBtn","hoverDirection","iconComputed","BsIconSmallCaretLeft","BsIconCaretLeft","BsIconSmallCaretRight","BsIconCaretRight","textLeft","textRight","variantPrefixed","buttonVariant","hostRef","countFmt","labelFmt","base","ct","sfx","isDismissed","handleDismiss","hintMsg","aria","handleInput","debounce","func","wait","immediate","timeout","context","args","hiddenStart","hiddenEnd","dispatchRangeChange","el","ev","handleRangeChange","start","end","handleRangeChangeDebounced","handleRangeInput","startListener","endListener","useCalendarWorkaround","isNavBtn","isSpaceOrEnter","keydownWorkaround","onBeforeUnmount","useMatchMedia","query","handlerFn","watchList","mediaQuery","onBeforeMount","useFilterAttrs","keysToFilter","isFilterKey","attrEntries","filtered","remaining","MQ","calendar","columns","container","inputIdGen","hintId","steps","toChild","toRoot","disabledDatesComputed","getBlackoutDates","inputIdAttr","modifiers","showClearBtn","showFieldDetails","stepRef","variantRef","setNavButtonLabels","visible","formatInput","inputValue","exclusiveDates","toDisable","date","handleRangeBlur","prev","next","mounted","formatTimeVal","timeVal","timeStr","dateStr","altLayout","getBasicRows","datasets","ds","rowLabel","dataCells","it","xTickToYValue","acc","d","tickPtLabel","getAltRows","consolidatedIndices","toAdd","uniqueIndices","a","b","idx","row","rowData","cell","dataPt","tableRows","table","tableReady","useKeydown","keys","onKeydown","elRef","handler","k","onUnmounted","TICK_SIZE","TICK_SIZE_LG","useChart","type","canvasRef","isDesktop","legendListRef","BREAKPOINT_QUERY","MOBILE_TICK_SIZES","DESKTOP_TICK_SIZES","chart","chartConfig","createChartConfig","chartSpecificMethod","BsChartConfigBuilder","getHtmlLegendPlugin","Filler","handleLegendItemToggle","li","labelIndex","datasetIndex","refocusLegendItem","sel","item","registerChart","chartElements","Chart","updateConfigOpts","updateConfigData","err","isDesktopMatched","_merge","boxSpan","text","textContainer","getBackgroundColor","initialDivider","DEFAULT_COLORS","color","divider","getBorderColor","getCommonOptionsPermissive","chartProps","getCommonOptionsStrict","getCartesianScaleOptions","propsPlus","dataIdxLabels","showXGrid","showYGrid","stacked","xAxisType","xLabel","yLabel","yMax","yMin","customOptions","tickSize","scaleOptions","BsChartConfig","data","options","plugins","showTooltips","BsChartBarConfig","dataset","scaleOpts","tickFontOpts","updatedOpts","BsChartLineConfig","optionsArg","title","BarController","BarElement","CategoryScale","LinearScale","Legend","TimeScale","Tooltip","inputEl","isChecked","isModelValueChecked","isIndeterminate","isVModelArray","setIndeterminate","doVModelSimple","checked","doVModelComplex","newValue","onChange","internalContainerRef","__expose","useBreakout","createBreakout","id","position","breakoutId","breakoutStub","breakoutMounted","isPreExisting","useClickAway","elRefs","onClickAway","dropdownContainerRef","dropdownRef","dropdownEnter","dropdownAfterEnter","anchorEl","containerEl","widthActual","provide","setDropdownProperty","property","setPosition","containerRect","anchorRect","dropdownRect","positionTopBottom","positionLeftRight","bottom","top","left","offset","right","setWidth","handleEnter","handleAfterEnter","handleAfterLeave","shownActual","positionActual","anchorIdActual","inputRef","toggleId","btnProperties","showCloseButton","handleBtnClick","showBadge","optionIdFromVal","listId","optionVal","valueIdKey","suffix","optionRef","optionsId","inject","handleOptionSelect","registerOption","idKey","handleOptionClick","isMounted","showImage","getVariant","option","variant","useAltText","profileName","label","showClear","useMutationObserver","targetRef","callback","observer","selectedValueActual","optionsRef","activeDescendantId","activeIndex","selectedIndex","optionEls","hasOverflow","registeredOptionsById","dropdownShown","refreshOptions","handleKeyboardSelect","handleKeyDown","typeToFocusKeys","typeToFocusData","typeToFocus","handleShownChange","entered","optionsLen","scrollOptionsListIntoView","scrollCurrentActiveIntoView","setCurrentActive","removeCurrentActive","handleOptionsFocus","handleShown","handleNotShown","traverse","direction","newIndex","updateCurrentActive","ttfState","matchIdx","activeIdx","withFocus","optlist","selectedLocalOptions","unselectedLocalOptions","showDivider","hasSomeOptions","refocusPending","sortSelectedUnselected","nextTick","focusFirstOption","refocusOnOption","updatedSelectedOptions","byId","opt","valuesOrIds","selected","unselected","newOption","inputIdMiddle","inputId","preorderPayload","unsortedPayload","values","sorted","f","payload","toggleEl","autoToggleId","autoOptionsId","isShown","filterTerm","badgeCount","OptionList","BsDropdownMultiselect","BsDropdownOptionList","optionsIdActual","toggleIdActual","filteredOptions","optionsComputed","getToggleEl","checkShouldRestoreFocus","activeEl","closeAndRestoreFocus","handleClose","handleEnterStart","handleUncheckOption","newOptionsValue","handleCheckOption","handleSingleSelect","handleSearchClear","handleSearchUpdate","inputWrapperId","open","preventFocusOpen","inputComboboxRef","getInputEl","handleChange","handleClear","handleDropdownClose","handleInputMousedown","handleInputMouseup","handleFocus","handleSelect","modelValueActual","slots","loaded","iconActual","shouldDisplay","flyoutRef","closeFlyout","hasShownChild","focusGuard","FOCUSABLE_ELEMENT_TAGS","selector","tag","handleKeydown","focusableElements","firstElement","lastElement","handleFirstShiftTab","handleLastTab","handleOutsideTab","useNavigationUtils","collapsedSections","rawNavData","toRaw","initializeSections","initialValue","isAbsoluteTo","to","getTo","isActivePath","isExpanded","getExpandButtonTitle","getTarget","mobileId","isTablet","mobileOpenState","oldValue","resetSections","toggleSection","sectionId","getMobileToggleTitle","isNestedActive","navItem","handleNestedClick","svgWrapperRef","viewBox","stops","uniqueId","InlineTabsProvider","group","isSelected","isDisabled","modifiedProps","onClick","event","setGroupModel","model","_useModel","setModel","isMatch","matcher","isObject","getArrayModel","hintDeprecated","SYMBOLS","CountryUtils","countryCode","regionCode","getSupportedCallingCodes","c","getRegionCodeForCountryCode","flag","mapName","libKey","country","VALID_OTHER_KEYS","countryCodesToggle","countryCodes","currentCountry","countryToggleId","countryCodesId","phoneNumber","phoneNumberError","phoneNumberHasError","showCountryCodes","showValidationResult","computedPhoneNumber","countryToggleLabel","errorMsgComputed","hasError","showDetails","showErrorState","validate","clearPhoneNumberIfReset","init","oldVal","handleCountryCodeClose","handleCountryCodeInput","selectedVal","updateCurrentCountry","handlePhoneBlur","handlePhoneInput","ignoreInvalidChars","initParse","parsedNum","parsePhoneNumber","code","pncc","optionsShown","optionSelected","generatedId","generatedHintId","prevOptions","showDropdownIfValue","typeaheadIdActual","inputContainerId","optionsValueActual","modifiedOptions","newOptions","filterValue","filterFunc","filterOptions","highlightOptions","labelHtml","replaceHtml","selectedOption","handleCheck","handleUncheck","setBodyScroll","modalRef","isVisible","titleId","subtitleId","closeModal","hasTitle","hasSubtitle","hasProgress","hasHeader","hasFooter","customEventName","checkForShownChild","valueState","resultsNumbers","actualPageCount","computedVariant","handleFirstNav","handlePrevNav","handleNextNav","handleLastNav","pages","pageTextDisplay","groupTextDisplay","first","last","increment","handleActionToggle","useSteps","progressStep","step","progressText","getStatus","status","selectIdGen","optionsIdGen","selectIdComp","optionsIdComp","buttonText","matchedOption","placeholderShown","hostEl","isActive","panelIdComputed","handleTabSelection","DEFAULT_TOGGLE_WIDTH","ELLIPSIS_WIDTH","TAB_GAP","adaptedToWidth","dropdownMounted","hiddenTabs","showDropdown","showDropdownToggle","tablistEl","accumulatedWidths","activeLineInitialized","allTabs","dropdownToggle","navigableTabs","resizeObserver","totalWidth","tabListAutoId","dropdownId","adaptToWidthTimeoutId","activeTabIdx","t","activeTabIsHidden","dropdownOptionsId","dropdownToggleId","dropdownToggleText","dropdownToggleWidth","adaptToWidth","showToggle","tab","thresholdWidth","thresholdReached","tabsToHide","setNavigableTabs","moveActiveLine","adaptToWidthCleanup","cleanup","observerCleanup","fireTabChange","tabId","getTabWidth","tabIdx","actualWidth","_c","handleActiveTabIdChange","handleDropdownToggleClick","handleDropdownOptionSelect","handleTabClick","handleTabNav","handleTabPrevious","handleTabNext","nextIdx","prevIdx","prevOffset","max","duration","offsetPx","scaleNum","_d","resizeObserverSetup","cb","setAllTabs","setAccumlulatedWidths","tabWidth","tabs","panelId","TableCol","_sfc_main","TableHeaderProvider","TableBodyProvider","TableFooterProvider","providerByKind","rowCount","incrementRowCount","decrementRowCount","FrozenCols","rowgroup","HeadCell","h","Cell","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_hoisted_1","iconsByOrder","BsIconCaretSortUp","BsIconCaretSortDown","onToggle","resizerExtraHoverTarget","resizerEl","useTemplateRef","xStart","xPos","animationFrame","target","shallowRef","isResizerVisible","isResizing","showHideResizer","hideResizer","setTarget","isOnLeftBorder","isOnRightBorder","getTargetsPreviousSibling","showResizer","prevSibling","prevCell","getResizeMin","width","moveResizerToXpos","onPointerDown","scrollWrap","onPointerMove","onPointerUp","isMinColWidth","xDiff","emitResize","onDoubleClick","tableSlots","cols","resizedColWidthsById","colWidths","col","resizeId","getResizeId","getInitialColWidth","cellPaddingCssVar","rowHoverCssVar","canResizeCols","wrapper","content","css","style","tableScrollWrapper","headerRowgroup","rows","TableRowGroup","headerRowgroupDefault","cells","headCell","headerRowgroupSlot","slotContent","readonly","slotRows","bodyRowgroup","bodyRowgroupDefault","rowIndex","bodyCell","bodyRowgroupSlot","footerRowgroup","footerRowgroupSlot","TableRow","cellFn","slotProps","findNodesByType","node","isDefaultRowPlaceholder","sortKey","getSortKey","truncateCss","getResizeAttrs","newKids","SortToggle","cloneVNode","getSortToggleProps","sortToggle","colMin","colMax","resizeKey","isColPropTruthy","sortOrder","getRowKeyProp","isTruncate","frozenCells","side","theCells","tableColResizer","TableColResizer","onResizeCol","colsToUpdate","updates","obj","prop","nodes","types","processFrozenTableCols","place","processTableCols","format","frozenCols","processDefaultSlot","TableHeader","TableFooter","nested","header","footer","other","charCount","checkTimePattern","uFmt","uFmtNoColon","amPm","amPmNoColon","parseIntTen","parseRaw","STRIP_PATTERN","hours","minutes","parts","pm","fmtTimeValToDisplay","hoursInt","minutesInt","ampm","fmtInputToTimeVal","EXCLUDED","OVER","SKIP","STOP","UNDER","displayValue","timeError","timeHasError","createOptions","stopAll","j","getTimeString","skipOrStop","getSkipOrStop","checkConstraints","hour","minute","handleComboboxChange","formattedValue","updateWithValidation","setOptions","timePicker","STATUSES_ICONS","BsIconCircleStop","BsIconCircleCheck","BsIconCircleX","BsIconCircleEllipsis","BsIconGraphPieEmpty","BsIconCirclePlay","BsIconCirclePause","BsIconCircleExclamation","getIcon","autoDismissTimer","handleEnterEnd","isStacked","icon","BsIconWarning","BsIconThumbsUpStroke","isHoverOrFocused","isEscaped","getTooltipTextClass","cssClass","handleEnterOrFocus","handleLeaveOrFocusOut","verticalNav","toggleButton","internalCollapsed","isNarrow","isCollapsible","isEffectivelyCollapsed","button","collapsed","narrow","customWidth","collapsible","tablet","layoutWidth","toggleCollapsed"],"mappings":"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"}
1
+ {"version":3,"file":"bsds-components.js","sources":["../src/components/_selectors.js","../src/components/accordion/defs-accordion.js","../src/components/alert/defs-alert.js","../src/components/badge/defs-badge.js","../src/components/banner/defs-banner.js","../src/components/popover/provider-key-popover.js","../src/utils/textSelection.js","../src/composables/pop.js","../src/composables/popTriggers.js","../src/components/button/defs-button.js","../src/components/calendar/defs-calendar.js","../src/components/circle-button/defs-circle-button.js","../src/components/popover/defs-popover-component.js","../src/components/popover/defs-popover-helpers.js","../src/components/popover/defs-popover-docsite.js","../src/components/dropdown/defs-dropdown-filter.js","../src/components/dropdown/defs-dropdown-component.js","../src/components/dropdown/defs-dropdown-docsite.js","../src/components/_deprecated/dropdown-option-builder/defs-dropdown-option-builder.js","../src/components/empty-state/defs-empty-state.js","../src/components/flyout/defs-flyout-component.js","../src/components/flyout/defs-flyout-docsite.js","../src/components/form-container/defs-form-container.js","../src/components/navigation/defs-horizontal-navigation.js","../src/components/inline-tabs/defs-inline-tab.js","../src/components/inline-tabs/defs-inline-tab-group.js","../src/components/input-search/defs-input-search.js","../src/components/modal/defs-modal-component.js","../src/components/modal/defs-modal-docsite.js","../src/components/_deprecated/modal/defs-modal-deprecated.js","../src/components/option/defs-option-component.js","../src/components/option/defs-option-docsite.js","../src/components/option-group/defs-option-group-component.js","../src/components/option-group/defs-option-group-docsite.js","../src/components/pop-body/defs-pop-body.js","../src/components/pop-footer/defs-pop-footer.js","../src/components/pop-header/defs-pop-header.js","../src/components/pill/defs-pill.js","../src/components/pop-subtitle/defs-pop-subtitle.js","../src/components/pop-title/defs-pop-title.js","../src/components/profile/defs-profile.js","../src/components/select/defs-select-component.js","../src/components/select/defs-select-docsite.js","../src/components/select-field/defs-select-field-component.js","../src/components/select-field/defs-select-field-docsite.js","../src/components/text-button/defs-text-button.js","../src/components/toast/defs-toast-component.js","../src/components/toast/defs-toast-docsite.js","../src/components/tooltip/defs-tooltip-component.js","../src/components/tooltip/defs-tooltip-docsite.js","../src/components/typeahead/defs-typeahead-component.js","../src/components/typeahead/defs-typeahead-docsite.js","../src/components/typeahead-field/defs-typeahead-field-component.js","../src/components/typeahead-field/defs-typeahead-field-docsite.js","../src/components/navigation/defs-vertical-navigation.js","../src/composables/genId.js","../src/components/accordion/BsAccordion.vue","../src/composables/buttonOrLink.js","../src/composables/clientRouter.js","../src/composables/deprecated.js","../src/components/circle-button/BsCircleButton.vue","../src/components/caret-text-button/BsCaretTextButton.vue","../src/components/alert/BsAlert.vue","../src/components/backdrop/defs-backdrop.js","../src/components/backdrop/BsBackdrop.vue","../src/components/badge/BsBadge.vue","../src/components/banner/BsBanner.vue","../src/components/button/BsButton.vue","../src/components/field-details/BsFieldDetails.vue","../src/components/label/BsLabel.vue","../src/components/input/BsInput.vue","../src/components/input-addon/BsInputAddon.vue","../src/components/calendar/internal/BsInputDateSingle.vue","../src/components/calendar/internal/BsInputDateRange.vue","../src/composables/calendarWorkaround.js","../src/composables/matchMedia.js","../src/composables/filterAttrs.js","../src/components/calendar/BsCalendar.vue","../src/components/caret-button/BsCaretButton.vue","../src/components/chart-table/BsChartTable.vue","../src/composables/keydown.js","../src/composables/chart.js","../src/components/chart-bar/BsChartBar.vue","../src/components/checkbox/BsCheckbox.vue","../src/components/pop-x-button/BsPopXButton.vue","../src/composables/createTeleportTarget.js","../src/directives/vFocusTrap.js","../src/composables/popHoverEvents.js","../src/components/popover/BsPopover.vue","../src/components/dropdown/provider-key-dropdown.js","../src/directives/vFocus.js","../src/composables/abortController.js","../src/components/dropdown/BsDropdownFilter.vue","../src/composables/dropdownKbAccess.js","../src/components/dropdown/BsDropdown.vue","../src/components/_deprecated/dropdown-combobox/internal/BsInputComboboxDeprecated.vue","../src/composables/normalizeOptionsArray.js","../src/components/filter-button/BsFilterButton.vue","../src/components/_deprecated/dropdown/BsDropdownContainer.vue","../src/components/transition/BsEnhancedTransition.vue","../src/composables/breakout.js","../src/composables/clickAway.js","../src/components/_deprecated/dropdown/BsDropdownNew.vue","../src/components/_deprecated/dropdown/BsDropdownDeprecated.vue","../src/utils/dropdown.js","../src/components/_deprecated/dropdown-option/BsDropdownOptionDeprecated.vue","../src/components/profile-img/BsProfileImg.vue","../src/components/_deprecated/dropdown-option-builder/BsDropdownOptionBuilderDeprecated.vue","../src/components/input-search/BsInputSearch.vue","../src/composables/mutationObserver.js","../src/components/_deprecated/dropdown-option-list/BsDropdownOptionListDeprecated.vue","../src/components/_deprecated/dropdown-multiselect/BsDropdownMultiselectDeprecated.vue","../src/components/_deprecated/dropdown-with-toggle/BsDropdownWithToggleDeprecated.vue","../src/components/_deprecated/dropdown-combobox/BsDropdownComboboxDeprecated.vue","../src/components/_deprecated/dropdown-combobox-field/BsDropdownComboboxFieldDeprecated.vue","../src/components/_deprecated/dropdown-with-options/BsDropdownWithOptionsNew.vue","../src/components/_deprecated/dropdown-with-options/BsDropdownWithOptionsDeprecated.vue","../src/components/empty-state/BsEmptyState.vue","../src/components/flyout/BsFlyout.vue","../src/components/_deprecated/flyout/BsFlyoutDeprecated.vue","../src/components/_deprecated/focus-guard/BsFocusGuardDeprecated.vue","../src/components/form-container/BsFormContainer.vue","../src/composables/navigationUtils.js","../src/components/navigation/NavigationLink.vue","../src/components/navigation/BsHorizontalNavigation.vue","../src/components/icon-gradient-wrapper/BsIconGradientWrapper.vue","../src/components/inline-tabs/provider-key-inline-tabs.js","../src/components/inline-tabs/BsInlineTab.vue","../src/components/inline-tabs/BsInlineTabGroup.vue","../src/components/input-field/BsInputField.vue","../src/components/input-phone/countryUtils.js","../src/components/input-phone/BsInputPhone.vue","../src/components/spinner/BsSpinner.vue","../src/components/_deprecated/input-typeahead/BsInputTypeaheadDeprecated.vue","../src/components/_deprecated/loader/BsLoaderDeprecated.vue","../src/components/modal/BsModal.vue","../src/components/overlay/BsOverlay.vue","../src/components/_deprecated/modal/BsModalDeprecated.vue","../src/components/option-group/provider-key-option-group.js","../src/components/option/BsOption.vue","../src/components/option-group/BsOptionGroup.vue","../src/components/pagination/BsPagination.vue","../src/components/pill/BsPill.vue","../src/components/pop-body/BsPopBody.vue","../src/components/toast/provider-key-toast.js","../src/components/text-button/BsTextButton.vue","../src/components/pop-footer/BsPopFooter.vue","../src/components/pop-title/BsPopTitle.vue","../src/components/pop-subtitle/BsPopSubtitle.vue","../src/components/pop-header/BsPopHeader.vue","../src/components/profile-details/BsProfileDetails.vue","../src/components/profile/BsProfile.vue","../src/composables/steps.js","../src/components/progress-bar/BsProgressBar.vue","../src/components/radio/BsRadio.vue","../src/components/input-button/defs-input-button.js","../src/components/input-button/BsInputButton.vue","../src/components/select/BsSelect.vue","../src/components/_deprecated/select/BsSelectDeprecated.vue","../src/components/select-field/BsSelectField.vue","../src/components/_deprecated/select-field/BsSelectFieldDeprecated.vue","../src/components/_deprecated/select-with-dropdown/BsSelectWithDropdownDeprecated.vue","../src/components/switch/BsSwitch.vue","../src/components/tab/BsTab.vue","../src/components/table/TableCol.vue","../src/components/table/provider-keys-table.js","../src/components/table/TableRowGroup.vue","../src/components/table/FrozenCols.vue","../src/components/table/TableRow.vue","../src/components/table/HeadCell.vue","../src/components/table/Cell.vue","../src/components/table/TableHeader.vue","../src/components/table/TableFooter.vue","../src/components/table/SortToggle.vue","../src/components/table/TableColResizer.vue","../src/components/table/Table.vue","../src/components/tab-list/BsTabList.vue","../src/components/tab-panel/BsTabPanel.vue","../src/components/textarea/BsTextarea.vue","../src/components/textarea-field/BsTextareaField.vue","../src/components/timeline/BsTimeline.vue","../src/utils/fmtTime.js","../src/components/time-picker/BsTimePicker.vue","../src/components/time-picker-field/BsTimePickerField.vue","../src/composables/toast.js","../src/components/toast/BsToast.vue","../src/components/_deprecated/toast/BsToastActionsDeprecated.vue","../src/components/_deprecated/toast/BsToastBodyDeprecated.vue","../src/components/_deprecated/toast/BsToastDeprecated.vue","../src/components/_deprecated/toaster/BsToasterDeprecated.vue","../src/components/_deprecated/toast/BsToastHeaderDeprecated.vue","../src/components/tooltip/BsTooltip.vue","../src/components/_deprecated/tooltip/BsTooltipDeprecated.vue","../src/components/typeahead/BsTypeahead.vue","../src/components/typeahead-field/BsTypeaheadField.vue","../src/components/navigation/BsVerticalNavigation.vue"],"sourcesContent":["/* This file is used to share selectors with automated tests.\n* commented out selectors are ones we may or may not want to add in the future\n*/\nconst bsSelectors = {\n accordion:'[data-component=bs-accordion]',\n badge:'[data-component=bs-badge]',\n banner:'[data-component=bs-banner]',\n button:'[data-component=bs-button]',\n calendar:'[data-component=bs-calendar]',\n chartBar:'[data-component=bs-chart-bar]',\n chartLine:'[data-component=bs-chart-line]',\n chartTable:'[data-component=bs-chart-table]',\n checkbox:'[data-component=bs-checkbox]',\n circleButton:'[data-component=bs-circle-button]',\n dropdownComboboxField:'[data-component=bs-dropdown-combobox-field]',\n dropdownMultiselect:'[data-component=bs-dropdown-multiselect]',\n dropdownOption:'[data-component=bs-dropdown-option]',\n dropdownOptionList:'[data-component=bs-dropdown-option-list]',\n emptyState:'[data-component=bs-empty-state]',\n fieldDetails:'[data-component=bs-field-details]',\n filterButton:'[data-component=bs-filter-button]',\n flyout:'[data-component=bs-flyout]',\n flyoutDeprecated:'[data-component=bs-flyout-deprecated]',\n input:'[data-component=bs-input]',\n inputAddon:'[data-component=bs-input-addon]',\n inputField:'[data-component=bs-input-field]',\n inputPhone:'[data-component=bs-input-phone]',\n inputSearch:'[data-component=bs-input-search]',\n label:'[data-component=bs-label]',\n modal:'[data-component=bs-modal]',\n modalDeprecated:'[data-component=bs-modal-deprecated]',\n pagination: {\n component: '[data-component=bs-pagination]',\n pageNumbers: '.bs-pagination-page-numbers',\n first: '[aria-label=\"First Page\"]',\n previous: '[aria-label=\"Previous Page\"]',\n next: '[aria-label=\"Next Page\"]',\n last: '[aria-label=\"Last Page\"]',\n },\n pill:'[data-component=bs-pill]',\n profile:'[data-component=bs-profile]',\n profileDetails:'[data-component=bs-profile-details]',\n profileImg:'[data-component=bs-profile-img]',\n progressBar:'[data-component=bs-progress-bar]',\n radio:'[data-component=bs-radio]',\n select:'[data-component=bs-select]',\n selectDeprecated:'[data-component=bs-select-deprecated]',\n selectField:'[data-component=bs-select-field]',\n selectFieldDeprecated:'[data-component=bs-select-field-deprecated]',\n spinner:'[data-component=bs-spinner]',\n switch:'[data-component=bs-switch]',\n tab:'[data-component=bs-tab]',\n tabList:'[data-component=bs-tab-list]',\n tabPanel:'[data-component=bs-tab-panel]',\n textarea:'[data-component=bs-textarea]',\n textareaField:'[data-component=bs-textarea-field]',\n timePickerField:'[data-component=bs-time-picker-field]',\n timeline:'[data-component=bs-timeline]',\n toast:'[data-component=bs-toast]',\n toastActionsDeprecated:'[data-component=bs-toast-actions-deprecated]',\n toastBodyDeprecated:'[data-component=bs-toast-body-deprecated]',\n toastHeaderDeprecated:'[data-component=bs-toast-header-deprecated]',\n toasterDeprecated:'[data-component=bs-toaster-deprecated]',\n tooltip:'[data-component=bs-tooltip]',\n tooltipDeprecated:'[data-component=bs-tooltip-deprecated]',\n}\n\n\nexport default {\n\tbsSelectors\n};","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n controlled: {\n default: false,\n description: `Use with \\`openItem\\` prop. Set to \\`true\\` when several\n accordions are grouped together and only one accordion should be open at a\n time.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n headerText: {\n default: '',\n description: `Panel title text. When using the \\`header\\` slot alternative,\n do not use this prop as it will be overwritten.`,\n type: String,\n typeDef: 'string',\n },\n icon: {\n default: '',\n description: `Icon to display on the left. This can be the string name\n (dynamic load) or an actual IconComponent. Not used if the \\`icon\\` slot\n is provided.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n openItem: {\n default: false,\n description: `Use with \\`controlled\\` prop. Pass in \\`true\\` when this\n accordion should open. When using this prop, do not use\n \\`openItemId\\`.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n openItemId: {\n default: '',\n description: `Use with \\`controlled\\` prop. Pass in the id of the accordion\n that should be open. When using this prop, do not use\n \\`openItem\\`.`,\n type: String,\n typeDef: 'string',\n },\n stacked: {\n default: false,\n description: `Set to \\`true\\` when used in a stack of accordions\n bordering one another.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n}\n\nexport const emitDefinitions = {\n toggled: {\n description: `Emits the ID of the accordion when the accordion is toggled.`,\n payloadType: 'string',\n },\n}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the accordion.`\n },\n header: {\n description: `Custom header content. Alternative to the \\`headerText\\`\n prop.`,\n },\n icon: {\n description: `Custom icon to display on the left. Alternative to the\n \\`icon\\` prop.`,\n },\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n actionLabel: {\n default: '',\n description: `The label for the action button. If not provided, no action\n button will be displayed.`,\n type: String,\n typeDef: 'string',\n },\n actionLinkTo: {\n default: '',\n description: `Optionally pass in a url or router object to convert the\n action button to an anchor link.`,\n type: [String, Object],\n typeDef: 'string | object',\n },\n description: {\n default: undefined,\n description: `The description text of the alert. If this prop and the\n \\`description\\` slot are both not provided, no description will be\n displayed.`,\n type: String,\n typeDef: 'string',\n },\n hideDismiss: {\n default: false,\n description: `Set to \\`true\\` to hide the dismiss button.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n horizontal: {\n default: false,\n description: `Set to \\`true\\` to display the alert in a horizontal\n orientation.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n icon: {\n default: '',\n description: `Icon to display on the alert. This can be the string name\n (dynamic load) or an actual IconComponent. Not used if the \\`icon\\` slot\n is provided. If no icon is provided, a default icon will be displayed.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n title: {\n default: '',\n description: `The title of the alert. If this prop and the \\`title\\` slot\n are both not provided, no title will be displayed.`,\n type: String,\n typeDef: 'string',\n },\n variant: {\n default: '',\n description: `Sets the visual style of the alert.`,\n type: String,\n typeDef: `'success' | 'warning' | 'negative'`,\n typeOptions: ['', 'success', 'warning', 'negative'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n },\n },\n // DEPRECATED\n actionRouter: {\n default: undefined,\n deprecated: true,\n description: 'If client-side rendering is desired, use \\'RouterLink\\' or \\'NuxtLink\\' instead.',\n }\n}\n\nexport const emitDefinitions = {\n 'action-click': {\n description: `Event emitted when the action button is clicked.`,\n },\n 'close': {\n description: `Event emitted when the close button is clicked.`,\n },\n}\n\nexport const slotDefinitions = {\n description: {\n description: `The description of the alert. Overrides the \\`description\\`\n prop.`,\n },\n icon: {\n description: `The icon to be displayed in the alert. Overrides the \\`icon\\`\n prop.`,\n },\n title: {\n description: `The title of the alert. Overrides the \\`title\\` prop.`,\n },\n}","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n color: {\n default: '',\n description: `Sets the color of the badge.`,\n type: String,\n typeDef: `'red' | 'blue' | 'white'`,\n typeOptions: ['', 'red', 'blue', 'white'],\n validator: val => ['', 'red', 'blue', 'white'].includes(val)\n },\n count: {\n default: 0,\n description: `Sets the count of items. Not applicable when using the \\`dot\\`\n prop.`,\n type: Number,\n typeDef: 'number',\n },\n countMax: {\n default: 99,\n description: `Sets the count limit after which the displayed count will stop\n incrementing and a \"+\" will be appended.`,\n type: Number,\n typeDef: 'number',\n },\n dot: {\n default: false,\n description: `Pass \\`true\\` to show a simple dot indicator. Not applicable\n when using the \\`count\\` prop.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n label: {\n default: 'item',\n description: `Pass the singular name of the items that are being counted.\n e.g. if counting unread notifications, pass \\`\"unread notification\\`\";\n or if counting new messages, pass \\`\"new message\\`\". This is required\n to ensure accessibility.`,\n type: String,\n typeDef: 'string',\n },\n position: {\n default: 'right',\n description: `Sets the position of the badge in relation to the slotted\n content.`,\n type: String,\n typeDef: `'left' | 'right'`,\n typeOptions: ['', 'left', 'right'],\n validator: val => ['left', 'right'].includes(val),\n },\n showZero: {\n default: false,\n description: `Pass \\`true\\` to show the badge even when the \\`count\\` value\n is zero.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n variant: {\n default: '',\n description: `Sets the variant of the badge. Use \\`notext\\` variant when\n the badge is used as a standalone element.`,\n type: String,\n typeDef: `'notext'`,\n typeOptions: ['', 'notext'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `The text for the badge. Not applicable when variant is set to\n \\`notext\\`.`,\n },\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n icon: {\n default: '',\n description: `Icon to display in the banner. This can be the string name\n (dynamic load) or an actual IconComponent. Not used if the \\`icon\\` slot\n is provided. If no icon is provided, a default icon will be displayed.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n variant: {\n default: '',\n description: `Sets the color variant of the banner.`,\n type: String,\n typeDef: `'negative'`,\n typeOptions: ['', 'negative'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n },\n}\n\nexport const emitDefinitions = {\n dismiss: {\n description: `Event emitted when the banner is dismissed.`,\n },\n}\n\nexport const slotDefinitions = {\n default: {\n description: `The main content of the banner.`,\n },\n icon: {\n description: `The icon to be displayed in the banner. Overrides the \\`icon\\`\n prop.`,\n },\n}","export const BsPopoverProvider = Symbol('BsPopoverProvider')","\n// can be helpful to prevent a click from firing if user is actually just trying to select text\nexport function isTextSelection() {\n return window.getSelection && window.getSelection().toString().length > 0\n}","import { shallowRef, ref, shallowReadonly, readonly, computed } from 'vue'\nimport { isTextSelection } from '@utils/textSelection.js'\n\nlet isListening = false\nlet lastOpenedTime = null\n\n\n// -- STATE --\n\nconst popsById = shallowRef({}) // registered popovers\n\nconst popIdsByTrigger = ref({}) // map of popTrigger type to array of ids using it\n\nconst anchorsByPopId = ref({}) // map of pop id to its anchor id\n\nconst openIds = ref([])\n\nconst escIds = ref([]) // will be closed when user hits esc\n\nconst outsideClickIds = ref([]) // will be closed when user does outside click\n\nconst autoCloseIds = ref([]) // will be closed when another opens\n\nconst ancestorIds = ref([]) // has a child popover, so will not auto-close when child opens\n\nconst lastCancelledId = ref(null)\nconst lastConfirmedId = ref(null)\nconst wasOutsideClick = ref(false)\n\n// -- GETTERS --\n\nfunction isOpen(id) {\n return openIds.value.includes(id)\n}\n\nfunction isType(id, type) {\n return popsById.value[id]?.props?.type === type\n}\n\nconst openDropdownIds = computed(() => {\n return openIds.value.filter(id => isType(id, 'dropdown'))\n})\n\nconst openFlyoutIds = computed(() => {\n return openIds.value.filter(id => isType(id, 'flyout'))\n})\n\nconst openModalIds = computed(() => {\n return openIds.value.filter(id => isType(id, 'modal'))\n})\n\nconst openPopoverIds = computed(() => {\n return openIds.value.filter(id => isType(id, 'popover'))\n})\n\nconst openToastIds = computed(() => {\n return openIds.value.filter(id => isType(id, 'toast'))\n})\n\nconst openTooltipIds = computed(() => {\n return openIds.value.filter(id => isType(id, 'tooltip'))\n})\n\n\n// -- ACTIONS --\n\nfunction register(id, data = {}) {\n popsById.value = {\n ...popsById.value,\n [id]: { id, ...data }\n }\n}\n\nfunction unregister(id) {\n close(id)\n removeEsc(id)\n removeOutsideClick(id)\n removeAutoClose(id)\n removeAncestor(id)\n const { [id]:remove, ...onesToKeep } = popsById.value\n popsById.value = onesToKeep\n}\n\nfunction registerPopTrigger(type, id) {\n // allow dupe ids in array, many triggers can be tied to the same pop id, e.g. a table case\n const existing = popIdsByTrigger.value[type] || []\n popIdsByTrigger.value[type] = [...existing, id]\n}\n\nfunction unregisterPopTrigger(type, id) {\n // only remove one instance of id, since other triggers tied to same id may still exist on the page\n const index = popIdsByTrigger.value[type].indexOf(id)\n if (index === -1) return\n popIdsByTrigger.value[type].splice(index, 1)\n}\n\nfunction addEsc(id) {\n escIds.value = [...escIds.value, id]\n}\n\nfunction removeEsc(id) {\n escIds.value = escIds.value.filter(x => x !== id)\n}\n\nfunction addOutsideClick(id) {\n outsideClickIds.value = [...outsideClickIds.value, id]\n}\n\nfunction removeOutsideClick(id) {\n outsideClickIds.value = outsideClickIds.value.filter(x => x !== id)\n}\n\nfunction addAutoClose(id) {\n autoCloseIds.value = [...autoCloseIds.value, id]\n}\n\nfunction removeAutoClose(id) {\n autoCloseIds.value = autoCloseIds.value.filter(x => x !== id)\n}\n\nfunction addAncestor(id) {\n ancestorIds.value = [...ancestorIds.value, id]\n}\n\nfunction removeAncestor(id) {\n ancestorIds.value = ancestorIds.value.filter(x => x !== id)\n}\n\nfunction setAnchorId(popId, anchorId) {\n anchorsByPopId.value[popId] = anchorId\n}\n\nfunction toggle(id, options = {}) {\n isOpen(id) ? close(id) : open(id, options)\n}\n\nasync function beforeOpen(id) {\n const fn = popsById.value[id]?.props.onBeforeOpen\n const canOpen = fn ? await fn({id}) : true\n // consumer can explicitly return false to prevent the popover from opening\n return canOpen === false ? false : true\n}\n\nasync function open(id, options = {}) {\n // Don't throw error if id doesn't exist, in case consumers have their <Popover> intentionally v-if'd\n if (isOpen(id)) return\n\n const canOpen = await beforeOpen(id)\n if (!canOpen) return\n\n // this works, but we don't promote its usage today...instead use a \"pop\" prop (does auto-anchoring)\n // or for custom cases, you can manually set the \"anchor\" prop on the BsPopover\n if (options.anchor) setAnchorId(id, options.anchor)\n\n // for nested popover cases, prevent the ancestor from auto closing\n // when the child opens, e.g. a dropdown inside of a modal\n const ancestorEl = document.getElementById(anchorsByPopId.value[id])?.closest('.bs-popover')\n if (ancestorEl) addAncestor(ancestorEl.id)\n\n const idsToKeepOpen = openIds.value.filter(x => {\n return !autoCloseIds.value.includes(x) || ancestorIds.value.includes(x)\n })\n\n openIds.value = [...idsToKeepOpen, id]\n lastOpenedTime = new Date()\n wasOutsideClick.value = false\n maybeStartListening()\n if (ancestorEl) removeAncestor(ancestorEl.id)\n}\n\nasync function beforeCancel(id) {\n const fn = popsById.value[id]?.props.onBeforeCancel\n const canCancel = fn ? await fn({id}) : true\n // consumer can explicitly return false to prevent the popover from closing\n return canCancel === false ? false : true\n}\n\nasync function cancel(id) {\n if (!isOpen(id)) return\n\n const canCancel = await beforeCancel(id)\n if (!canCancel) return\n\n close(id, { emit: 'cancel' })\n}\n\nfunction triggerCancelEmit(id) {\n // Popover watches this, in order to fire @cancel\n lastCancelledId.value = id\n setTimeout(() => lastCancelledId.value = null, 100)\n}\n\nasync function beforeConfirm(id) {\n const fn = popsById.value[id]?.props.onBeforeConfirm\n const canConfirm = fn ? await fn({id}) : true\n // consumer can explicitly return false to prevent the popover from closing\n return canConfirm === false ? false : true\n}\n\nasync function confirm(id) {\n if (!isOpen(id)) return\n\n const canConfirm = await beforeConfirm(id)\n if (!canConfirm) return\n\n close(id, { emit: 'confirm' })\n}\n\nfunction triggerConfirmEmit(id) {\n // Popover watches this, in order to fire @confirm\n lastConfirmedId.value = id\n setTimeout(() => lastConfirmedId.value = null, 100)\n}\n\nasync function beforeClose(id) {\n const fn = popsById.value[id]?.props.onBeforeClose\n const canClose = fn ? await fn({id}) : true\n // consumer can explicitly return false to prevent the popover from closing\n return canClose === false ? false : true\n}\n\nasync function close(id, { emit } = {}) {\n if (!isOpen(id)) return\n\n const canClose = await beforeClose(id)\n if (!canClose) return\n\n // handled in this function to ensure correct emit order\n if (emit === 'cancel') triggerCancelEmit(id)\n if (emit === 'confirm') triggerConfirmEmit(id)\n\n openIds.value = openIds.value.filter(x => x !== id)\n delete anchorsByPopId.value[id]\n maybeStopListening()\n}\n\nfunction closeAll({ force } = {}) {\n if (force) {\n // by-passes any @before events that could guard the close\n openIds.value = []\n anchorsByPopId.value = {}\n maybeStopListening()\n } else {\n openIds.value.forEach(close)\n }\n}\n\nfunction maybeStartListening() {\n if (isListening || !openIds.value.length) return\n document.addEventListener('click', onOutsideClick)\n document.addEventListener('keydown', onEsc)\n isListening = true\n}\n\nfunction maybeStopListening() {\n if (!isListening || openIds.value.length) return\n document.removeEventListener('click', onOutsideClick)\n document.removeEventListener('keydown', onEsc)\n isListening = false\n}\n\nfunction onEsc(event) {\n if (event.key !== 'Escape') return\n const lastOpenedEscId = [...openIds.value].reverse().find(id => escIds.value.includes(id))\n if (lastOpenedEscId) cancel(lastOpenedEscId)\n}\n\nfunction onOutsideClick(event) {\n // doing this time check for cases where consumer uses @click=\"pop.open('my-id')\" instead of pop=\"my-id\",\n // so they don't have to remember to use @click.stop (i.e. prevent confusion about popover closing as soon it opens)\n if ((new Date).getTime() - lastOpenedTime.getTime() < 100) return\n\n // handles case where user starts click inside popover, yet ends click outside of popover\n if (isTextSelection()) return\n\n const lastOpenedId = openIds.value.at(-1)\n if (!lastOpenedId) return\n\n // do nothing if popover is not allowed to close on outside click\n if (!outsideClickIds.value.includes(lastOpenedId)) return\n\n const anchorId = anchorsByPopId.value[lastOpenedId] || popsById.value[lastOpenedId]?.props.anchor\n\n // do nothing if the click comes from the anchor or the popover\n if (anchorId && event.target.closest(`#${anchorId}`)) return\n if (event.target.closest(`#${lastOpenedId}`)) return\n\n wasOutsideClick.value = true\n cancel(lastOpenedId)\n}\n\n// Reset is mainly useful as a cleanup function in a test file.\n// In a live app, a consumer should just use closeAll() function.\nfunction reset() {\n closeAll({ force: true })\n Object.keys(popsById.value).forEach(unregister)\n isListening = false\n lastOpenedTime = null\n openIds.value = []\n popIdsByTrigger.value = {}\n anchorsByPopId.value = {}\n escIds.value = []\n outsideClickIds.value = []\n autoCloseIds.value = []\n ancestorIds.value = []\n lastCancelledId.value = null\n lastConfirmedId.value = null\n}\n\n\n/*\n * usePop composable\n *\n * The id arg is optional, but if given, relevant actions are pre-configured\n * to use that id. This means you can use it in either of these ways:\n *\n * A) const pop = usePop()\n * pop.toggle('my-menu')\n *\n * B) const myMenu = usePop('my-menu')\n * myMenu.toggle()\n */\n\nexport function usePop(id = '') {\n\n const curry = func => options => func(id, options)\n\n return {\n // state\n popsById: shallowReadonly(popsById),\n popIdsByTrigger: readonly(popIdsByTrigger),\n anchorsByPopId: readonly(anchorsByPopId),\n openIds: readonly(openIds),\n escIds: readonly(escIds),\n outsideClickIds: readonly(outsideClickIds),\n autoCloseIds: readonly(autoCloseIds),\n ancestorIds: readonly(ancestorIds),\n\n lastCancelledId: readonly(lastCancelledId),\n lastConfirmedId: readonly(lastConfirmedId),\n wasOutsideClick: readonly(wasOutsideClick),\n\n // getters\n isOpen: id ? curry(isOpen) : isOpen,\n isType: id ? curry(isType) : isType,\n openDropdownIds: readonly(openDropdownIds),\n openFlyoutIds: readonly(openFlyoutIds),\n openModalIds: readonly(openModalIds),\n openPopoverIds: readonly(openPopoverIds),\n openToastIds: readonly(openToastIds),\n openTooltipIds: readonly(openTooltipIds),\n\n // actions\n toggle: id ? curry(toggle) : toggle,\n open: id ? curry(open) : open,\n cancel: id ? curry(cancel) : cancel,\n confirm: id ? curry(confirm) : confirm,\n close: id ? curry(close) : close,\n closeAll,\n reset,\n register,\n unregister,\n registerPopTrigger,\n unregisterPopTrigger,\n addEsc,\n removeEsc,\n addOutsideClick,\n removeOutsideClick,\n addAutoClose,\n removeAutoClose,\n addAncestor,\n removeAncestor,\n setAnchorId\n }\n}","import { computed, useId, unref, useAttrs, warn, inject, watch } from 'vue'\nimport { BsPopoverProvider } from '@components/popover/provider-key-popover.js'\nimport { usePop } from '@composables/pop'\n\n// -- PROPS --\n// They live in and are exposed from this file so consumers can easily grab them from one\n// place along with the composable (and they're used in the composable code below too)\n\nexport const popTriggerProps = {\n pop: {\n type: String,\n default: undefined,\n description: 'Toggles given pop id open or closed.',\n typeDef: 'string'\n },\n popOpen: {\n type: String,\n default: undefined,\n description: 'Opens given pop id.',\n typeDef: 'string'\n },\n popClose: {\n type: String,\n default: undefined,\n description: 'Closes given pop id. Or, you can set the value to \"self\" when inside of a popover.',\n typeDef: 'string'\n },\n popCancel: {\n type: String,\n default: undefined,\n description: 'Closes the given pop id. Or, you can set the value to \"self\" when inside of a popover.',\n typeDef: 'string'\n },\n popConfirm: {\n type: String,\n default: undefined,\n description: 'Closes the given pop id. Or, you can set the value to \"self\" when inside of a popover.',\n typeDef: 'string'\n },\n popHover: {\n // HJ TODO: Will likely only allow this trigger to be used for Tooltip and Popover components\n type: String,\n default: undefined,\n description: 'Opens and closes given pop id on hover.',\n typeDef: 'string'\n },\n willPop: {\n type: String,\n default: undefined,\n description: 'Enables auto-anchoring and auto-accessibility for given pop id. Use if manually controlling visibility via @click and usePop. It is not needed when using a `pop` prop above.',\n typeDef: 'string'\n }\n}\n\n\n// -- COMPOSABLE --\n\nexport function usePopTriggers(props) {\n\n const pop = usePop()\n const autoId = useId()\n const attrs = useAttrs()\n\n // this is a way to determine if the trigger is inside of a popover, so that we\n // can get that popover's id to use in the \"self\" conversion in the popId computed\n const popover = inject(BsPopoverProvider, null)\n\n const safeProps = computed(() => unref(props))\n\n // get the currently used pop prop\n const popProp = computed(() => {\n return Object\n .keys(popTriggerProps)\n .find(key => safeProps.value[key] !== undefined)\n })\n\n // get the pop prop value, which is the id to pop\n const popId = computed(() => {\n if (!popProp.value) return\n\n const id = safeProps.value[popProp.value]\n\n if (!id) {\n return warn(`Invalid prop: The \"${popProp.value}\" prop must have a value.`)\n }\n\n if (id === 'self') {\n return popover?.id || warn(`Invalid prop: The value \"self\" can only be used when inside of a popover.`)\n }\n\n return id\n })\n\n // get the <BsPopover>'s props...may not exist if BsPopover isn't currently in the DOM\n const popoverProps = computed(() => {\n if (!popProp.value) return\n return pop.popsById.value[popId.value]?.props\n })\n\n\n // -- SLOT PROPS --\n\n const isPopOpen = computed(() => {\n return pop.openIds.value.includes(popId.value)\n })\n\n const popSlotProps = computed(() => {\n if (!popProp.value) return {}\n\n return {\n isPopOpen: isPopOpen.value\n }\n })\n\n\n // -- ATTRS --\n\n const idAttr = computed(() => {\n if (!popProp.value) return\n const id = safeProps.value.id || attrs.id || autoId\n return id\n })\n\n const ariaAttrs = computed(() => {\n if (!popProp.value) return {}\n\n // means that the <BsPopover> does not exist right now\n if (!popoverProps.value) return {}\n\n const { role } = popoverProps.value\n\n if (role === 'tooltip') {\n return { 'aria-describedby': popId.value }\n }\n\n return {\n 'aria-haspopup': role,\n 'aria-controls': popId.value,\n 'aria-expanded': isPopOpen.value\n }\n })\n\n // HJ TODO: This will be enhanced in future PRs. At the moment, you can only\n // have a click OR a hover trigger, but not both...that will need to be changed\n // i.e. a common use case is a button that pops a modal/flyout AND also has a tooltip\n const eventAttrs = computed(() => {\n if (!popProp.value || popProp.value === 'popHover') return {}\n return { onClick, onKeydown: onKeyboardClick }\n })\n\n const popAttrs = computed(() => {\n if (!popProp.value) return {}\n return {\n id: idAttr.value,\n ...ariaAttrs.value,\n ...eventAttrs.value,\n [`data-bs-${popProp.value}`]: popId.value\n }\n })\n\n\n // -- REGISTER POP IDs BY TRIGGER TYPE (popProp) --\n\n watch(popId, (id, _, onCleanup) => {\n if (!id) return\n const trigger = popProp.value\n pop.registerPopTrigger(trigger, id)\n // runs before the watcher runs again\n onCleanup(() => pop.unregisterPopTrigger(trigger, id))\n }, { immediate: true })\n\n\n // -- EVENT HANDLERS --\n // Note: pop-hover listeners are delegated to document, see popHoverEvents.js\n\n function onClick(event) {\n\n // mimic disabled button behavior for faux buttons like BsInputButton\n // see note about data-bs-pop-faux-button in comment for onKeyboardClick()\n if (event.target.tagName !== 'BUTTON') {\n const popEl = event.target.closest(`[data-bs-pop-faux-button=\"true\"]`)\n if (popEl?.ariaDisabled === 'true') {\n event.preventDefault()\n event.stopImmediatePropagation()\n return\n }\n }\n\n pop.setAnchorId(popId.value, idAttr.value)\n\n // consumer will manually control visibility\n if (popProp.value === 'willPop') return\n\n // get the usePop function to be called based on popProp used\n const methodsByProp = {\n popOpen: pop.open,\n popClose: pop.close,\n popCancel: pop.cancel,\n popConfirm: pop.confirm\n }\n const popFn = methodsByProp[popProp.value] || pop.toggle\n popFn(popId.value)\n }\n\n // Mimic button \"click via keyboard\" behavior for faux buttons like BsInputButton\n // Specifically targeting data-bs-pop-faux-button so this behavior can be explicitly opt-in,\n // so if popTriggers get added to an input, it won’t fire when people are just typing\n function onKeyboardClick(event) {\n if (event.target.dataset.bsPopFauxButton !== 'true') return\n const codes = ['Space', 'Enter', 'NumpadEnter']\n if (!codes.includes(event.code)) return\n onClick(event)\n }\n\n\n return {\n popAttrs,\n popSlotProps\n }\n}","import { popTriggerProps } from '@composables/popTriggers'\n\nexport const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n disabled: {\n // useButtonOrLink reacts to this prop\n default: false,\n description: `Sets the disabled state of the button.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n ghostBtn: {\n default: false,\n description: `Apply the ghost button style.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n linkTo: {\n // useButtonOrLink reacts to this prop\n default: undefined,\n description: `Pass in a url or router object to convert a button to an\n anchor tag (to enable client-side routing, use \\'RouterLink\\' or \\'NuxtLink\\').`,\n type: [String, Object],\n typeDef: 'string | object',\n },\n size: {\n default: '',\n description: `Sets the size of the button. Note that the \\`xs\\` size is only\n supported for text buttons.`,\n type: String,\n typeDef: `'sm' | 'xs' | 'xxs'`,\n typeOptions: ['', 'sm', 'xs', 'xxs'],\n validator: (val) => ['', 'sm', 'xs', 'xxs'].includes(val)\n },\n type: {\n // useButtonOrLink reacts to this prop\n type: String,\n default: 'button',\n description: 'Sets the HTML button type attribute when rendering as a <button>.',\n typeDef: `'button' | 'submit' | 'reset'`,\n typeOptions: ['button', 'submit', 'reset'],\n validator: val => propDefinitions.type.typeOptions.includes(val)\n },\n unstyled: {\n default: false,\n description: `Prevent all Blue Steel styling from being applied (except what\\'s done by the base css reset).\n Useful when your use case calls for totally custom button styling, yet you\\’d still like to use the\n BsButton component for it\\’s \"pop\" props feature.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n variant: {\n default: undefined,\n description: `Changes the variant of the button. \\`'white'\\` is only available with ghost buttons or text buttons, on\n dark backgrounds. \\`'royal'\\` and \\`'pink'\\` are deprecated and will be removed in a future release. Use \\`'accent-1'\\`,\n or \\`'accent-3'\\` respectively.`,\n type: String,\n typeDef: `'' | 'primary' | 'secondary' | 'positive' | 'negative' | 'warning' | 'accent-1' | 'accent-2' | 'accent-3' | 'pink' | 'royal' | 'white'`,\n typeOptions: ['', 'primary', 'secondary', 'positive', 'negative', 'warning', 'accent-1', 'accent-2', 'accent-3', 'pink', 'royal', 'white'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n },\n\n // Pop System related props...they're stored in the usePopTriggers composable file so consumers\n // can potentially import them to create their own custom pop buttons for cases unique to their apps\n ...popTriggerProps,\n\n // DEPRECATED\n router: {\n default: undefined,\n deprecated: true,\n },\n textBtn: {\n default: undefined,\n deprecated: true,\n },\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `Button label content.`\n }\n}\n","export const propDefinitions = {\n disabled: {\n default: false,\n description: `Set to \\`true\\` to disable the calendar input.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n disabledDates: {\n default: [],\n description: `Array of dates to disable.`,\n type: Array,\n typeDef: 'Date[]',\n },\n error: {\n default: false,\n description: `Set to \\`true\\` to display an error state.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n errorMsg: {\n default: '',\n description: `Error message to display.`,\n type: String,\n typeDef: 'string',\n },\n exclusiveDates: {\n default: [],\n description: `Array of dates to exclusively enable. This prop supersedes\n \\`disabledDates\\`, \\`minDate\\`, and \\`maxDate\\`.`,\n type: Array,\n typeDef: 'Date[]',\n },\n hint: {\n default: '',\n description: `Hint text to display.`,\n type: String,\n typeDef: 'string',\n },\n inputId: {\n default: '',\n description: `Unique id for the input. Autogenerated if not passed.`,\n type: String,\n typeDef: 'string',\n },\n inputMode: {\n default: true,\n description: `Set to \\`false\\` to hide the input. Useful for using just the\n calendar as the date picker.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n isRange: {\n default: false,\n description: `Set to \\`true\\` to enable range selection. When enabled, the\n \\`modelValue\\` prop must be an object with \\`start\\` and \\`end\\`\n properties.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n label: {\n default: '',\n description: `Label text for the input. Alternatively, use the label slot.`,\n type: String,\n typeDef: 'string',\n },\n maxDate: {\n default: null,\n description: `Max date for the calendar.`,\n type: Date,\n typeDef: 'Date',\n },\n minDate: {\n default: null,\n description: `Min date for the calendar.`,\n type: Date,\n typeDef: 'Date',\n },\n /** Date | { start: Date, end: Date } */\n modelValue: {\n default: null,\n description: `Date value. Use v-model to bind to a date value. When\n \\`isRange: true\\`, use an object with \\`start\\` and \\`end\\`\n properties.`,\n type: [Date, Object],\n typeDef: `Date | { start: Date, end: Date }`,\n },\n placeholder: {\n default: 'Choose a date',\n description: `Placeholder text for the input.`,\n type: String,\n typeDef: 'string',\n },\n required: {\n default: false,\n description: `Set to \\`true\\` to mark the input as required.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n showClear: {\n default: false,\n description: `Set to \\`true\\` to show a clear button.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n step: {\n default: 1,\n description: `Step for the calendar month navigation. Will force to \\`1\\` in\n mobile view or single-column view.`,\n type: Number,\n typeDef: '1 | 2',\n typeOptions: [1, 2],\n validator(value) {\n return propDefinitions.step.typeOptions.includes(value)\n }\n },\n variant: {\n default: '',\n description: `Sets the visual style of the calendar. When set to \\`2-col\\`,\n the calendar will display in a two-column layout.`,\n type: String,\n typeDef: `'2-col'`,\n typeOptions: ['', '2-col'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n }\n}\n\nexport const emitDefinitions = {\n 'clear': {\n description: `Emits \\`clear\\` event when the clear button is clicked.`,\n },\n 'update:model-value': {\n description: `Emits \\`update:modelValue\\` event when the date is selected.`,\n },\n}\nexport const slotDefinitions = {\n label: {\n description: `The label for the input. Overrides the \\`label\\` prop.`,\n },\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n disabled: {\n // useButtonOrLink reacts to this prop\n default: false,\n description: `Sets the disabled state on the button.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n ghostBtn: {\n default: false,\n description: `Apply the ghost button style.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n hoverEffect: {\n default: false,\n description: `Set to \\`true\\` to apply hover transition effect (icon\n translates left or right).`,\n type: Boolean,\n typeDef: 'boolean',\n },\n icon: {\n default: '',\n description: `Icon to display. This can be the string name (dynamic load) or\n an actual IconComponent. Not used if the \\`icon\\` slot is provided. If\n no icon provided at all, will use a default caret icon.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n iconPosition: {\n default: 'right',\n description: `Set the position of the icon in relation to button text.`,\n type: String,\n typeDef: `''|'left'|'right'`,\n typeOptions: ['', 'left', 'right'],\n validator(value) {\n return propDefinitions.iconPosition.typeOptions.includes(value)\n }\n },\n label: {\n default: undefined,\n description: `Text to be used as \\`aria-label\\` or \\`title\\` for non-text\n buttons or links, respectively, or as the button text for text buttons.`,\n type: String,\n typeDef: 'string',\n },\n linkTo: {\n // useButtonOrLink reacts to this prop\n default: '',\n description: `Pass in a url to convert a button to an anchor tag\n (to enable client-side routing, use \\'RouterLink\\' or \\'NuxtLink\\').`,\n type: [String, Object],\n typeDef: 'string|Object',\n },\n size: {\n default: '',\n description: `Sets the size of the button. Note that the \\`'xs'\\` size is\n only applicable when \\`textBtn=true\\`, and \\`'xxs'\\` is only applicable\n for color variants.`,\n type: String,\n typeDef: `''|'sm'|'xs'|'xxs'`,\n typeOptions: ['', 'sm', 'xs', 'xxs'],\n validator(value) {\n return propDefinitions.size.typeOptions.includes(value)\n }\n },\n textBtn: {\n default: false,\n description: `Set to \\`true\\` to display the label as text alongside the\n circle icon.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n type: {\n // useButtonOrLink reacts to this prop\n type: String,\n default: 'button',\n description: 'Sets the HTML button type attribute when rendering as a <button>.',\n typeDef: 'string',\n validator: val => ['button', 'submit', 'reset'].includes(val)\n },\n variant: {\n default: '',\n description: `Color variant for the button. Note that when a variant is\n selected, \\`textBtn\\` is effectively set to \\`true\\` and \\`ghostBtn\\` is\n ignored. Several colors have been deprecated: \\`'blue'\\` (use \\`'primary'\\`),\n \\`'pink'\\` (use \\`'accent-3'\\`), \\`'purple'\\` (use \\`'positive'\\`), \\`'orange'\\`\n (use \\`'warning'\\`), \\`'red'\\` (use \\`'negative'\\`), \\`'royal'\\` (use \\`'accent-1'\\`)`,\n type: String,\n typedef: `'' | 'primary' | 'positive' | 'negative' | 'warning' | 'accent-1' | 'accent-3' | 'blue' | 'pink' | 'purple' | 'orange' | 'red' | 'royal' | 'white'`,\n typeOptions: ['', 'primary', 'positive', 'negative', 'warning', 'accent-1', 'accent-3', 'blue', 'pink', 'purple', 'orange', 'red', 'royal', 'white'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n },\n // DEPRECATED\n router: {\n default: undefined,\n deprecated: true,\n },\n href: {\n default: undefined,\n deprecated: true,\n },\n}\n\nexport const emitDefinitions = { }\n\nexport const slotDefinitions = {\n icon: {\n description: `Custom icon to be used in place of the default icon or\n \\`icon\\` prop value.`,\n }\n}\n","/* -- COMPONENT-SPECIFIC PROPS -- */\n\nexport const propDefinitions = {\n // -- REQUIRED --\n\n id: {\n type: String,\n required: true,\n description: `The id of the BsPopover. Used to control visibility state, as well as automatic accessibility hook-up.`,\n typeDef: 'string'\n },\n\n // -- OPTIONAL --\n\n anchor: {\n type: String,\n default: undefined,\n description: 'Rarely needs to be set manually since BsButton\\'s \"pop\" props do it under the hood. The id of the element that the BsPopover should be anchored to, or set to \\`\"viewport\"\\` to place it relative to the browser viewport (see place prop options). When provided, it will take precedence.',\n typeDef: `string | \"viewport\"`,\n },\n backdrop: {\n type: Boolean,\n default: false,\n description: 'Whether or not the backdrop will be visible.',\n typeDef: 'boolean'\n },\n delay: {\n type: [String, Number],\n default: 0,\n description: 'Only applies when opening via the `pop-hover` prop, e.g. `&lt;BsButton pop-hover=\"my-id\"&gt;`. The number of milliseconds the BsPopover should be delayed before opening.',\n typeDef: 'string | number',\n },\n persist: {\n type: Boolean,\n default: false,\n description: 'By default, BsPopover uses \\`v-if\\` to render itself. If you need it to use \\`v-show\\` instead, you can add this prop. However, the default is recommended for best performance. An alternative to using this prop, could be to persist your data in a store.',\n typeDef: 'boolean'\n },\n place: {\n type: String,\n default: undefined,\n description: 'Where the BsPopover will be placed, relative to its anchor. Note: The \\`\"center\"\\` option is only possible when \\`anchor=\"viewport\"\\`.',\n typeDef: `\"top\" | \"top-start\" | \"top-end\" | \"right\" | \"right-start\" | \"right-end\" | \"bottom\" | \"bottom-start\" | \"bottom-end\" | \"left\" | \"left-start\" | \"left-end\" | \"center\"`,\n typeOptions: [\n // these options come with @floating-ui/vue, placement is relative to given anchor\n 'top-start', 'right-start', 'bottom-start', 'left-start',\n 'top', 'right', 'bottom', 'left',\n 'top-end', 'right-end', 'bottom-end', 'left-end',\n // ...if anchor prop is \"viewport\", we'll translate those to css grid positions,\n // and placement will be relative to the viewport, in which case 'center' is also an option\n 'center'\n ],\n validator: val => propDefinitions.place.typeOptions.includes(val)\n },\n preventAutoClose: {\n type: Boolean,\n default: false,\n description: 'By default, only one BsPopover will be open at a time. Use this prop to prevent the BsPopover from being automatically closed when another is opened.',\n typeDef: 'boolean'\n },\n preventClose: {\n type: Boolean,\n default: false,\n description: 'Prevents the BsPopover from being closed by Esc key, outside click, and internal X button (the X button will not be rendered).',\n typeDef: 'boolean'\n },\n preventCloseEsc: {\n type: Boolean,\n default: false,\n description: 'Prevents the BsPopover from being closed by Esc key.',\n typeDef: 'boolean'\n },\n preventCloseOutside: {\n type: Boolean,\n default: false,\n description: 'Prevents the BsPopover from being closed on outside click.',\n typeDef: 'boolean'\n },\n preventCloseX: {\n type: Boolean,\n default: false,\n description: 'Prevents the internal BsPopover X close button from being rendered.',\n typeDef: 'boolean'\n },\n preventFirstShiftTab: {\n type: Boolean,\n default: false,\n description: 'Whether to prevent the shift tab behavior on the first element when `trapFocus=\"true\"`. \\\n Likely use case for this is to catch the \\`@first-shift-tab\\` event to handle special behavior.',\n typeDef: 'boolean'\n },\n preventLastTab: {\n type: Boolean,\n default: false,\n description: 'Whether to prevent the tab behavior on the last element when `trapFocus=\"true\"`. \\\n Likely use case for this is to catch the `@last-tab` event to handle special behavior.',\n typeDef: 'boolean'\n },\n role: {\n type: String,\n default: 'dialog',\n description: 'The ARIA role of the BsPopover. For internal use only...though, if a consumer adds it, we will use what they provide.',\n validator: val => ['alertdialog', 'dialog', 'listbox', 'menu', 'tooltip'].includes(val),\n omitFromDocs: true\n },\n selectorPrefix: {\n type: String,\n default: '',\n description: 'Prefix for the focusable element selector when `trapFocus=\"true\"`.\\\n Likely use case for this could be to include only a subset of focusable elements \\\n within a larger container. For example, \\`.nav-body:not([inert]) \\`. Note that an extra\\\n space may need to be added at the end for descendant selectors.',\n typeDef: 'string'\n },\n size: {\n type: String,\n default: 'md',\n description: 'The size of the BsPopover. Or, you can set a custom size by using css classes on BsPopover.',\n typeDef: `\"sm\" | \"md\" | \"lg\" | \"fit-content\" | \"anchor\"`,\n typeOptions: ['sm', 'md', 'lg', 'fit-content', 'anchor'],\n validator: val => propDefinitions.size.typeOptions.includes(val),\n },\n teleportTargetId: {\n type: String,\n default: 'bs-popover-teleport-target',\n omitFromDocs: true // so far, only used internally for BsToast\n },\n transitionDuration: {\n type: [String, Number],\n default: 'var(--bs-transition-leisurely)',\n description: 'A custom duration for the open/close transition. Provide as milliseconds or a css var.',\n typeDef: 'string'\n },\n transitionName: {\n type: String,\n default: 'bs-popover',\n description: 'Provide the name of a custom transition you\\'ve written, following the Vue transition classes approach.',\n typeDef: 'string'\n },\n trapFocus: {\n type: Boolean,\n default: false,\n description: 'Whether or not to trap focus when the BsPopover is open.',\n typeDef: 'boolean'\n },\n type: {\n type: String,\n default: 'popover',\n description: 'The type of the BsPopover. Internal use only. See usage in usePop.',\n omitFromDocs: true,\n validator: val => ['dropdown', 'flyout', 'modal', 'popover', 'toast', 'tooltip'].includes(val),\n },\n // These will be documented in the emits section, but need to be defined as props here,\n // so that we can check for presence and call them from within the usePop composable\n ...emitsAsProps()\n}\n\nexport const emitDefinitions = {\n open: {\n description: `Fires when BsPopover opens.`,\n payloadType: '{ id }'\n },\n close: {\n description: `Fires any time BsPopover closes.`,\n payloadType: '{ id }'\n },\n cancel: {\n description: `Fires when BsPopover closes via Esc key, outside-click, X close button, \\`pop-cancel\\`, or \\`usePop.cancel\\`.`,\n payloadType: '{ id }'\n },\n confirm: {\n description: `Fires when BsPopover closes via \\`pop-confirm\\` or \\`usePop.confirm\\`.`,\n payloadType: '{ id }'\n },\n 'after-open': {\n description: 'Fires after the BsPopover is open and the transition has completed.',\n payloadType: '{ id }'\n },\n 'after-close': {\n description: 'Fires after BsPopover is closed and the transition has completed.',\n payloadType: '{ id }'\n },\n 'first-shift-tab': {\n description: 'Emitted when shift tab is pressed when the first focusable element within the focus trap is focused.',\n payloadType: '{ id }'\n },\n 'last-tab': {\n description: 'Emitted when tab is pressed when the last focusable element within the focus trap is focused.',\n payloadType: '{ id }'\n },\n 'return-focus': {\n description: 'Emitted when the popover returns focus to its anchor element.',\n payloadType: '{ id }'\n }\n}\n\nexport function emitsAsProps() {\n return {\n onBeforeOpen: {\n description: `Fires before the BsPopover opens. To prevent the BsPopover from opening, explicitly return \\`false\\`.`,\n payloadType: '{ id }'\n },\n onBeforeCancel: {\n description: `Fires before the BsPopover closes via cancel (Esc key, outside-click, X close button, \\`pop-cancel\\`, or \\`usePop.cancel\\`). To prevent the BsPopover from closing, explicitly return \\`false\\`.`,\n payloadType: '{ id }'\n },\n onBeforeConfirm: {\n description: `Fires before the BsPopover closes via \\`pop-confirm\\` or \\`usePop.confirm\\`. To prevent the BsPopover from closing, explicitly return \\`false\\`.`,\n payloadType: '{ id }'\n },\n onBeforeClose: {\n description: `Fires before the BsPopover closes. To prevent the BsPopover from closing, explicitly return \\`false\\`.`,\n payloadType: '{ id }'\n }\n }\n}\n","/* -- POPOVER DEFINITIONS HELPERS -- */\n\n// Used in definition files for components that are based on BsPopover, to customize the inherited docs verbiage\nexport function replaceVerbiage({ name = '', defs = {}, keysToOmit = [], customUpdatesFn }) {\n\n const updatedEntries = Object.entries(defs).map(([prop, data]) => {\n let updatedData = { ...data }\n\n if (updatedData.description) {\n updatedData.description = updatedData.description.replaceAll('BsPopover', name)\n }\n\n if (keysToOmit.includes(prop)) {\n updatedData.omitFromDocs = true\n }\n\n if (customUpdatesFn) {\n updatedData = customUpdatesFn(prop, updatedData)\n }\n\n return [prop, updatedData]\n })\n\n return Object.fromEntries(updatedEntries)\n}\n\n// For docs data, strip \"on\" from special case \"emits as props\" keys\n// e.g. onBeforeClose: {} >> beforeClose: {}\nexport function formatPropEmitKeysForDocs(obj) {\n const updatedEntries = Object.entries(obj).map(([key, obj]) => {\n const cleanKey = key.replace('on', '').charAt(0).toLowerCase() + key.slice(3)\n return [ cleanKey, obj ]\n })\n return Object.fromEntries(updatedEntries)\n}\n\n// For docs prop data, remove \"emits as props\" keys since they will be documented in the emits section\nexport function removeEmitsAsProps(obj) {\n const updatedEntries = Object.entries(obj).filter(([key]) => !key.startsWith('on'))\n return Object.fromEntries(updatedEntries)\n}\n","import {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n emitsAsProps\n} from './defs-popover-component.js'\n\nimport {\n removeEmitsAsProps,\n formatPropEmitKeysForDocs\n} from '@components/popover/defs-popover-helpers'\n\n/* -- DOCSITE-SPECIFIC DEFINITIONS -- */\n\nexport const propDefinitions = {\n ...removeEmitsAsProps(componentPropDefinitions)\n}\n\nexport const emitDefinitions = {\n ...componentEmitDefinitions,\n ...formatPropEmitKeysForDocs(emitsAsProps())\n}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the BsPopover.`,\n slotProps: {\n id: {\n description: 'The `id` of the BsPopover.',\n typeDef: 'string'\n },\n close: {\n description: `Closes the BsPopover. \\`@close\\` will be emitted.`,\n typeDef: 'function'\n },\n cancel: {\n description: `Closes the BsPopover. \\`@cancel\\` and \\`@close\\` will be emitted.`,\n typeDef: 'function'\n },\n confirm: {\n description: `Closes the BsPopover. \\`@confirm\\` and \\`@close\\` will be emitted.`,\n typeDef: 'function'\n }\n }\n }\n}\n","\nexport const propDefinitions = {\n debounce: {\n type: [Boolean, String, Number],\n default: 0,\n description: 'Whether or not to debounce the @query emit. When the prop is present, the default value is 300ms. Or, provide a custom number of milliseconds, e.g. debounce=\"150\". Typically only use this if you\\'re hitting an API as the user types.',\n typeDef: 'boolean | string | number'\n },\n filterKey: {\n type: [String, Function],\n default: undefined,\n description: 'Filters by the given key. Useful when your BsOption model is an object. Provide either: A) the object key that should be use for filtering, or B) a function that receives the object and returns a value that should be used for filtering. See example demos.',\n typeDef: 'string | function'\n },\n filterExternal: {\n type: Boolean,\n default: false,\n description: 'Turns off internal filtering, so you can handle custom filtering yourself using @query.',\n typeDef: 'boolean'\n },\n hideInput: {\n type: Boolean,\n default: false,\n description: 'Hides BsDropdown\\'s internal filter input, but retains its filtering capabilities and feedback messaging. For use with the `filter-input` model, which allows BsDropdown to be filtered by an external input or model.',\n typeDef: 'boolean'\n },\n minChars: {\n type: [String, Number],\n default: 0,\n description: 'The minimum number of characters required before @query will emit the query value. Typically only use this if you\\'re hitting an API as the user types.',\n typeDef: 'string | number'\n },\n placeholder: {\n type: String,\n default: undefined,\n description: 'Placeholder text for the input.',\n typeDef: 'string'\n },\n preventReset: {\n type: Boolean,\n default: false,\n description: 'By default, the model will be cleared when the BsDropdown closes. To prevent that behavior, use `prevent-reset`. This may be useful when filtering a BsDropdown to an external input.',\n typeDef: 'boolean'\n },\n\n // onQuery exists as a prop for abort controller timing reasons, to ensure the\n // pending async detection flows through correctly.\n ...emitsAsProps()\n}\n\nexport function emitsAsProps() {\n return {\n onQuery: {\n type: Function,\n description: `Emits the filter query value, taking \\`debounce\\` and \\`min-chars\\` into consideration. When the \\`debounce\\`\n prop is present, the emit will be debounced. When the \\`min-chars\\` prop is present and the query length is invalid,\n an empty string will be emitted (so you can clear previous results when handling filtering externally). Also emits\n an an optional abortSignal as part of the second arg's object. This should typically only be needed when\n hitting an API as the user types. You can pass the abortSignal into your http call to cancel the previous request,\n so that obsolete results don't show up in the UI.`,\n default: undefined,\n payloadType: 'string, { abortSignal }'\n }\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {}\n","import { emitsAsProps } from '@components/dropdown/defs-dropdown-filter.js'\n\n/* -- COMPONENT-SPECIFIC PROPS -- */\n\n// The BsPopover props fall-through...below are BsDropdown-specific additions and overrides to BsPopover settings\nexport const propDefinitions = {\n\n // -- REQUIRED --\n\n id: {\n // id is only defined again so we can access it in BsDropdown via props.id\n type: String,\n required: true,\n description: 'The id of the BsDropdown. Used to control visibility state, as well as automatic accessibility hook-up.',\n typeDef: 'string'\n },\n\n // -- OPTIONAL --\n\n anchor: {\n type: String,\n default: undefined,\n description: 'Rarely needs top be set manually since BsDropdown does it \\\n under the hood. The id of the element that the BsDropdown should be \\\n anchored to. When provided, it will take precedence until the window \\\n width hits mobile breakpoints (when mobile sheet is the behavior \\\n enabled).',\n typeDef: 'string | \"viewport\"',\n },\n ariaLabel: {\n type: String,\n default: 'Select an option',\n description: 'The label of the BsDropdown.',\n typeDef: 'string'\n },\n debounce: {\n type: [Boolean, String, Number],\n default: 0,\n description: 'For a filterable BsDropdown, whether or not to debounce the `@query` emit. When the prop is present, the default value is `300ms`. Or, provide a custom number of milliseconds, e.g. `debounce=\"150\"`. Typically only use this if you\\'re hitting an API as the user types.',\n typeDef: 'boolean | string | number'\n },\n equateBy: {\n type: [String, Function],\n default: 'id',\n description: 'Only needed if using an object model that has no \"id\" key (or the id key is not unique). Used to derive object equality based selection state. Provide either: A) the unique object key that should be used or, B) a function that receives the object and returns a value that should be used for the equality check. See example demos.',\n typeDef: 'string | function'\n },\n filter: {\n type: Boolean,\n default: false,\n description: 'Enables BsOption list filtering. Case-insensitive filtering will be handled internally, using the `innerText` of the BsOption. Also see `filter-key` or `filter-external`.',\n typeDef: 'boolean'\n },\n filterKey: {\n type: [String, Function],\n default: undefined,\n description: 'May be useful when your BsOption model is an object. Enables BsOption list filtering like the `filter` prop does, except that the case-insensitive internal filtering will use the given obj key or derived value, instead of the BsOption\\'s `innerText` value. Provide either: A) the object key that should be use for filtering, or B) a function that receives the object and returns an item value.',\n typeDef: 'string | function'\n },\n filterExternal: {\n type: Boolean,\n default: false,\n description: 'Enables BsOption list filtering, but does not turn on internal filtering. Allows you to handle the filtering logic yourself, using `@query`, for custom or complex use cases.',\n typeDef: 'boolean'\n },\n hideFilterInput: {\n type: Boolean,\n default: false,\n description: 'For a filterable BsDropdown, this hides the internal filter input, but retains its filtering capabilities and feedback messaging. You can then use `v-model:filter-input=\"yourModel\"` on BsDropdown, to allow the dropdown to be filtered by an external input or model that you control.',\n typeDef: 'boolean'\n },\n mobileButtonLabel: {\n type: String,\n default: 'Select',\n description: 'Label to use for the mobile sheet action button which only \\\n appears on `multiple` mode.',\n typeDef: 'string'\n },\n mobileDescription: {\n type: String,\n default: undefined,\n description: 'Description to use for the mobile sheet heading.',\n typeDef: 'string'\n },\n mobileHeading: {\n type: String,\n default: 'Select an option',\n description: 'Heading text to use for the mobile sheet heading.',\n typeDef: 'string'\n },\n mobileHeadingTag: {\n default: 'div',\n description: 'HTML tag to use for the mobile sheet heading.',\n type: String,\n typeDef: 'string'\n },\n mobileSheet: {\n type: [Boolean, String],\n default: 'tablet',\n description: 'Determines when (or not) to use mobile sheet at various \\\n breakpoints. This can either be `\"tablet\"` (default) for using the mobile \\\n sheet at tablet breakpoints and below, `\"mobile\"` for using the mobile \\\n sheet at mobile breakpoint only, or `false` to never use mobile sheet.',\n typeDef: 'false | \"tablet\" | \"mobile\"'\n },\n minChars: {\n type: [String, Number],\n default: 0,\n description: 'For a filterable BsDropdown, the minimum number of characters required before `@query` will emit the query value. Typically only use this if you\\'re hitting an API as the user types.',\n typeDef: 'string | number'\n },\n multiple: {\n type: Boolean,\n default: false,\n description: 'Specifies that multiple options can be selected.',\n typeDef: 'boolean'\n },\n // only defined again in order to be able to check for presence\n persist: {\n type: Boolean,\n default: false,\n description: 'By default, BsDropdown uses `v-if` to render itself. If you need it to use `v-show` instead, you can add this prop. However, the default is recommended for best performance. An alternative to using this prop, could be to persist your data in a store.',\n typeDef: 'boolean'\n },\n place: {\n type: String,\n default: 'bottom-start',\n description: 'Where the BsDropdown will be placed, relative to its anchor.',\n typeDef: `\"top\" | \"top-start\" | \"top-end\" | \"right\" | \"right-start\" | \"right-end\" | \"bottom\" | \"bottom-start\" | \"bottom-end\" | \"left\" | \"left-start\" | \"left-end\"`,\n typeOptions: [\n // Note: BsPopover's \"center\" option is excluded here, since center is only available\n // for popovers anchored to the viewport...which doesn't make sense for a dropdown\n 'top-start', 'right-start', 'bottom-start', 'left-start',\n 'top', 'right', 'bottom', 'left',\n 'top-end', 'right-end', 'bottom-end', 'left-end',\n ],\n validator: val => propDefinitions.place.typeOptions.includes(val)\n },\n placeholder: {\n type: String,\n default: undefined,\n description: 'For a filterable BsDropdown, placeholder text for the filter input.',\n typeDef: 'string'\n },\n preventFilterReset: {\n type: Boolean,\n default: false,\n description: 'By default, the filter-input model will be cleared when the BsDropdown closes. Preventing that default behavior may be useful in certain cases when filtering BsDropdown by an external input or model.',\n typeDef: 'boolean'\n },\n role: {\n type: String,\n default: 'listbox',\n description: 'The ARIA role of the BsDropdown.',\n validator: val => ['listbox', 'menu'].includes(val),\n },\n\n // The onQuery event needs to be done as a prop to ensure the abort controller async\n // handling flows through correctly to BsDropdownFilter\n ...dropdownEmitsAsProps()\n}\n\n// exported like this so we can bring it into the docsite defs\nexport function dropdownEmitsAsProps() {\n const { onQuery } = emitsAsProps()\n return { onQuery }\n}\n\n// BsPopover emits will bubble up\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n // None specific to BsDropdown\n}","import {\n propDefinitions as popoverPropDefinitions,\n emitDefinitions as popoverEmitDefinitions,\n slotDefinitions as popoverSlotDefinitions\n} from '@components/popover/defs-popover-docsite.js'\n\nimport {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n slotDefinitions as componentSlotDefinitions,\n dropdownEmitsAsProps\n} from './defs-dropdown-component.js'\n\nimport {\n replaceVerbiage,\n removeEmitsAsProps,\n formatPropEmitKeysForDocs\n} from '@components/popover/defs-popover-helpers'\n\n/* -- DOCSITE-SPECIFIC DEFINITIONS -- */\n\nexport const propDefinitions = {\n ...replaceVerbiage({\n name: 'BsDropdown',\n defs: popoverPropDefinitions,\n keysToOmit: [\n 'backdrop',\n 'preventAutoClose',\n 'preventClose',\n 'preventCloseX',\n 'preventFirstShiftTab',\n 'preventLastTab',\n 'selectorPrefix',\n 'transitionDuration',\n 'transitionName',\n 'trapFocus'\n ],\n customUpdatesFn: doCustomPropDocsUpdates\n }),\n\n ...removeEmitsAsProps(componentPropDefinitions),\n\n // these don't need to be defined as a prop in the component since using defineModel()\n 'v-model': {\n type: [String, Object, Number, Array],\n default: undefined,\n description: 'The selected value.',\n typeDef: 'string | object | number | array'\n },\n 'v-model:filter-input': {\n type: String,\n default: undefined,\n description: 'The filter input value. Can be useful if you\\'d like to filter the BsDropdown using an external input instead of its internal filter input (see the `hide-filter-input` prop).',\n typeDef: 'string'\n }\n}\n\nexport const emitDefinitions = {\n ...replaceVerbiage({\n name: 'BsDropdown',\n defs: popoverEmitDefinitions,\n keysToOmit: ['first-shift-tab', 'last-tab']\n }),\n\n ...componentEmitDefinitions,\n ...formatPropEmitKeysForDocs(dropdownEmitsAsProps()),\n\n // these don't need to be defined as an emit in the component since using defineModel()\n 'update:model-value': {\n description: `Fires when the model changes. Emits the updated model value.`,\n payloadType: 'string | object | number | array'\n },\n 'update:filter-input': {\n description: `Fires when the filter-input model changes. Emits the updated filter-input value.`,\n payloadType: 'string'\n }\n}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the BsDropdown.`,\n slotProps: {\n ...replaceVerbiage({\n name: 'BsDropdown',\n defs: popoverSlotDefinitions.default.slotProps\n }),\n ...componentSlotDefinitions\n }\n }\n}\n\nfunction doCustomPropDocsUpdates(prop, data) {\n if (prop === 'anchor') {\n // removes references to being able to use anchor=\"viewport\"...not relevant for a dropdown\n data.description = 'Rarely needs to be set manually since BsButton\\'s \"pop\" props do it under the hood. The id of the element that the BsDropdown should be anchored to. When provided, it will take precedence.'\n data.typeDef = 'string'\n }\n return data\n}","export const propDefinitions = {\n // REQUIRED\n options: {\n description: `Array of option objects OR strings. Strings are auto-normalized to { value: string, label: string }.`,\n required: true,\n type: Array,\n typeDef: `(\n string |\n {\n value: string | number | object,\n label?: string,\n labelHtml?: string,\n description?: string,\n negative?: boolean,\n icon?: string | IconComponent,\n profileImg?: {\n initials: string,\n src?: string,\n profileName?: string\n }\n checkbox?: {\n inputId: string,\n checked: boolean\n }\n }\n )[]`\n },\n // OPTIONAL\n valueIdKey: {\n default: 'id',\n description: `For option values that are objects, pass the key to look for\n on the option's object value. Also to be used as the Option El's id\n attribute for accessibility.`,\n type: String,\n typeDef: 'string',\n },\n showNoOptions: {\n default: true,\n description: `Whether to show the 'No options' message when the options\n array is empty.`,\n type: Boolean,\n typeDef: 'boolean',\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {}\n","export const propDefinitions = {\n // REQUIRED\n title: {\n description: `Heading for the empty state.`,\n type: String,\n typeDef: 'string',\n required: true\n },\n // OPTIONAL\n description: {\n default: '',\n description: `Description can be added via prop or by using the\n \\`description\\` slot.`,\n type: String,\n typeDef: 'string'\n },\n icon: {\n default: '',\n description: `Icon to display. This can be the string name (dynamic load) or\n an actual IconComponent. Not used if the \\`icon\\` slot is provided.`,\n type: [String, Object],\n typeDef: 'string|IconComponent'\n },\n size: {\n default: 'md',\n description: 'Size variant of the empty state.',\n type: String,\n typeDef: \"'xs' | 'sm' | 'md' | 'lg'\",\n typeOptions: ['xs', 'sm', 'md', 'lg'],\n validator(value) {\n return propDefinitions.size.typeOptions.includes(value)\n }\n },\n}\n\nexport const emitDefinitions = { }\n\nexport const slotDefinitions = {\n 'call-to-action': {\n description: `Custom call-to-action content, typically a button or link.`,\n },\n description: {\n description: `Custom description to be used in place of the \\`description\\`\n prop.`\n },\n icon: {\n description: `Custom icon to be used in place of the \\`iconName\\` prop\n value.`,\n }\n}\n","/* -- COMPONENT-SPECIFIC PROPS -- */\n\n// The BsPopover props fall-through...below are BsFlyout-specific overrides to BsPopover settings\nexport const propDefinitions = {\n place: {\n type: String,\n default: 'left',\n description: 'On which side of the viewport the BsFlyout will be placed.',\n typeDef: `\"left\" | \"right\"`,\n typeOptions: ['left', 'right'],\n validator: val => propDefinitions.place.typeOptions.includes(val)\n },\n size: {\n type: String,\n default: 'md',\n description: 'The size of the BsFlyout. Or, you can set a custom size by using css classes on BsFlyout.',\n // anchor size is not allowed for flyouts\n typeDef: `\"sm\" | \"md\" | \"lg\" | \"fit-content\"`,\n typeOptions: ['sm', 'md', 'lg', 'fit-content'],\n validator: val => propDefinitions.size.typeOptions.includes(val)\n },\n transitionDuration: {\n type: [String, Number],\n default: 'var(--bs-transition-leisurely)',\n description: 'A custom duration for the open/close transition. Provide as milliseconds or a css var, e.g. var(--my-custom-duration).',\n typeDef: 'string | number',\n },\n transitionName: {\n type: String,\n default: 'bs-flyout',\n description: 'Provide the name of a custom transition you\\'ve written, following the Vue transition classes approach.',\n typeDef: 'string'\n }\n}\n\n// BsPopover emits will bubble up\nexport const emitDefinitions = {\n // None specific to BsFlyout\n}\n","import {\n propDefinitions as popoverPropDefinitions,\n emitDefinitions as popoverEmitDefinitions,\n slotDefinitions as popoverSlotDefinitions,\n} from '@components/popover/defs-popover-docsite.js'\nimport {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions\n} from './defs-flyout-component.js'\nimport { replaceVerbiage } from '@components/popover/defs-popover-helpers'\n\n/* -- DOCSITE-SPECIFIC DEFINITIONS -- */\n\nexport const propDefinitions = {\n ...replaceVerbiage({\n name: 'BsFlyout',\n defs: popoverPropDefinitions,\n keysToOmit: [\n 'anchor',\n 'delay',\n 'preventFirstShiftTab',\n 'preventLastTab',\n 'selectorPrefix',\n 'trapFocus',\n ]\n }),\n ...componentPropDefinitions,\n}\n\nexport const emitDefinitions = {\n ...replaceVerbiage({\n name: 'BsFlyout',\n defs: popoverEmitDefinitions,\n keysToOmit: ['first-shift-tab', 'last-tab']\n }),\n ...componentEmitDefinitions\n}\n\nexport const slotDefinitions = {\n default: {\n description: `The Header, Body, Footer content of the BsFlyout.`,\n slotProps: {\n ...replaceVerbiage({\n name: 'BsFlyout',\n defs: popoverSlotDefinitions.default.slotProps\n })\n }\n }\n}\n","export const propDefinitions = {\n // REQUIRED\n title: {\n required: true,\n description: `The title of the form container. This prop is required.`,\n type: String,\n typeDef: 'string',\n },\n \n // OPTIONAL\n inactive: {\n default: false,\n description: `Set to \\`true\\` to mute the form container background, \n title and subTitle.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n expanded: {\n default: true,\n description: `Set to \\`false\\` to hide the form container content.\n This can be used to create an expandable form container.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n icon: {\n default: '',\n description: `Icon prepended to the header title. This can be the string \n name (dynamic load) or an actual IconComponent. Not used if the \\`icon\\`\n slot is provided.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n required: {\n default: false,\n description: `Set to \\`true\\` will add a red asterisk to the title`,\n type: Boolean,\n typeDef: 'boolean',\n },\n subTitle: {\n default: '',\n description: `The subTitle of the form container. This will be displayed\n below the title.`,\n type: String,\n typeDef: 'string',\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the form container.`\n },\n 'header-actions': {\n description: `Custom actions to display on the right. This slot can be used\n to add buttons, links, etc. to the form container's header.`,\n },\n icon: {\n description: `The icon prepended to the header title. Overrides the \\`icon\\`\n prop. Slot to be used when advanced functionality is required, such as \n adding a click handler on the icon.`,\n },\n 'title-addon': {\n description: `Custom content appended to the title. This can be used\n to add additional information or controls related to the title.`,\n },\n}","export const propDefinitions = {\n hideMobileToggle: {\n default: false,\n description: `If \\`true\\`, the mobile toggle button will be hidden. Use\n the \\`mobile-open\\` prop to control the mobile navigation open state\n instead.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n mobileOpen: {\n default: false,\n description: `If \\`true\\`, the mobile navigation is open. This is only\n applicable on tablet or mobile page widths.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n mobileToggleText: {\n default: 'Menu',\n description: `The text to be displayed on the mobile toggle button.`,\n type: String,\n typeDef: 'string',\n },\n navData: {\n default: () => [],\n description: `The navigation data to be displayed.`,\n type: Array,\n typeDef: `Array({\n <span class=\"bs-text-ink-accent-3\">/* Name of the icon (dynamically loaded) or IconComponent itself */</span>\n <span class=\"bs-font-semibold\">icon?</span>: string | IconComponent,\n <span class=\"bs-text-ink-accent-3\">/* Unique ID for the nav item */</span>\n <span class=\"bs-font-semibold\">id</span>: string,\n <span class=\"bs-text-ink-accent-3\">/* Nested nav items. Only one level deep is supported */</span>\n <span class=\"bs-font-semibold\">navItems?</span>: object[],\n <span class=\"bs-text-ink-accent-3\">/* Text to display for the nav item */</span>\n <span class=\"bs-font-semibold\">text</span>: string,\n <span class=\"bs-text-ink-accent-3\">/* Router path, Router object, or absolute URL. When navItems prop is present, this is ignored. */</span>\n <span class=\"bs-font-semibold\">to?</span>: string | object,\n <span class=\"bs-text-ink-accent-3\">/* Alternative \"to\" for the WWT Admin Menu Builder */</span>\n <span class=\"bs-font-semibold\">resource?</span>: { <span class=\"bs-font-semibold\">url</span>: string | object },\n <span class=\"bs-text-ink-accent-3\">/* Set the desired behavior of a link. _self, _blank, _parent, _top can be used. */</span>\n <span class=\"bs-font-semibold\">target?</span>: string,\n })`,\n typeDefPopover: true\n },\n router: {\n default: null,\n description: `Vue Router instance. This is used to highlight the active\n navigation item.`,\n type: Object,\n typeDef: `Router`,\n },\n title: {\n default: undefined,\n description: `The title to display on the desktop navigation.`,\n type: String,\n typeDef: 'string',\n },\n titleIcon: {\n default: undefined,\n description: `Icon to be display on the desktop navigation if \\`title\\` is\n not provided, or as the toggle icon for mobile navigation. This can be the\n string name (dynamically loaded) or an actual IconComponent.`,\n type: [String, Object],\n typeDef: 'string | IconComponent',\n },\n titleUrl: {\n default: undefined,\n description: `When provided, turns the desktop title into a link to the\n provided URL.`,\n type: String,\n typeDef: 'string',\n },\n}\n\nexport const emitDefinitions = {\n 'mobile-toggle': {\n description: `Emitted when the mobile toggle button is clicked. This\n should be used to control the mobile navigation open state.`\n },\n 'nav-link-clicked': {\n description: `Emitted when a navigation item is clicked. Emits the event\n (\\`ev\\`) and the navigation item (\\`payload\\`). Actual navigation is\n already done by the component, but this can be used to perform any\n additional actions on navigation.`,\n payloadType: `{ ev, payload }`,\n }\n}\n\nexport const slotDefinitions = {\n 'additional-nav-option': {\n description: `The additional navigation option to be displayed at the right\n (for desktop version) or bottom (for mobile version) of the navigation.`\n }\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n disabled: {\n default: false,\n description: 'Disables the BsInlineTab.',\n type: Boolean,\n typeDef: 'boolean',\n },\n linkTo: {\n default: undefined,\n description: 'Pass in a url to convert a BsInlineTab into an anchor tag.',\n type: String,\n typeDef: 'string',\n },\n selected: {\n default: false,\n description: 'Selects the BsInlineTab manually. Only required when manually \\\n handling selection state, as opposed to using v-model on BsInlineTabs.',\n type: Boolean,\n typeDef: 'boolean',\n },\n type: {\n default: 'button',\n description: 'The button type attribute.',\n type: String,\n typeDef: `'button' | 'submit' | 'reset'`,\n typeOptions: ['button', 'submit', 'reset'],\n validator(val) {\n return propDefinitions.type.typeOptions.includes(val)\n }\n },\n value: {\n default: undefined,\n description: 'Required when using v-model on BsInlineTabs. The value of this \\\n BsInlineTab.',\n type: [String, Object, Number],\n typeDef: 'string | object | number',\n },\n variant: {\n default: undefined,\n description: 'Use variant=\"white\" to render the BsInlineTab with a white \\\n background. Alternatively, you can set this once at the BsInlineTabs level.',\n type: String,\n typeDef: `'' | 'white'`,\n typeOptions: ['', 'white'],\n validator(val) {\n return propDefinitions.variant.typeOptions.includes(val)\n }\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: 'Content of the tab.',\n slotProps: {\n isSelected: {\n description: 'Whether the current BsInlineTab is selected.',\n typeDef: 'boolean',\n }\n }\n }\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n as: {\n default: 'div',\n description: 'Renders the BsInlineTabs root element as the given html tag, e.g. ul.',\n type: String,\n typeDef: 'string',\n },\n disabled: {\n default: false,\n description: 'Disables every BsInlineTab in the group.',\n type: Boolean,\n typeDef: 'boolean',\n },\n matcher: {\n default: 'id',\n description: 'Only needed when your model is an object, and that object has \\\n no \\'id\\' key (or the id key is not unique). Used to derive selection \\\n state, based on object equality. Provide either: A) the unique object key \\\n that should be used or, B) a function that receives the object and returns \\\n a value that should be used for the equality check.',\n type: [String, Function],\n typeDef: 'string | function',\n },\n multiple: {\n default: false,\n description: 'Allows multiple selections.',\n type: Boolean,\n typeDef: 'boolean',\n },\n variant: {\n default: undefined,\n description: 'Use variant=\"white\" to render every child BsInlineTab with a \\\n white background. Alternatively, you can set this on each child BsInlineTab.',\n type: String,\n typeDef: `'' | 'white'`,\n typeOptions: ['', 'white'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n },\n },\n}\n\nexport const emitDefinitions = {\n 'update:model-value': {\n description: 'Fires when v-model has been updated. Emits the current \\\n BsInlineTab selections.'\n }\n}\n\nexport const slotDefinitions = {\n default: {\n description: 'Slot in any BsInlineTab children.'\n }\n}\n","\n/* -- FOR COMPONENT USAGE -- */\n\nexport const inputSearchPropDefinitions = {\n id: {\n type: String,\n default: undefined,\n description: 'The id of the BsInputSearch. Will be auto-generated if not provided.',\n typeDef: 'string'\n },\n disabled: {\n type: Boolean,\n default: false,\n description: 'Sets the disabled state on the input.',\n typeDef: 'boolean'\n },\n error: {\n type: Boolean,\n default: false,\n description: 'Applies error styles to the BsInputSearch.',\n typeDef: 'boolean',\n },\n hideSearchIcon: {\n type: Boolean,\n default: false,\n description: 'Hides the search icon.',\n typeDef: 'boolean'\n },\n placeholder: {\n type: String,\n default: 'Search Items',\n description: 'Placeholder attribute - same as native.',\n typeDef: 'string'\n },\n preventClear: {\n type: Boolean,\n default: false,\n description: 'Prevents the clear X button from being displayed.',\n typeDef: 'boolean'\n },\n variant: {\n type: String,\n default: undefined,\n description: 'Sets the variant of the input. Currently only \"filter\" is supported.',\n typeDef: 'string',\n typeOptions: ['filter'],\n // we may be getting at least one more variant so we'll validate against arr\n validator: val => inputSearchPropDefinitions.variant.typeOptions.includes(val)\n },\n // DEPRECATED\n inputId: {\n type: String,\n default: undefined,\n deprecated: true,\n description: 'Sets the id on the input element and the label\\'s for attribute.',\n typeDef: 'string'\n },\n hideClear: {\n type: Boolean,\n // had to change from false to undefined so useDeprecatedProp() only shows message when prop is used\n default: undefined,\n deprecated: true,\n description: 'Hides the clear button. Use prevent-clear instead.',\n typeDef: 'boolean'\n }\n}\n\nexport const inputSearchEmitsDefinitions = {\n clear: {\n description: `Fires when the clear button is clicked.`\n }\n}\n\n\n/* -- FOR DOCS SITE USAGE -- */\n\nexport const propDefinitions = {\n ...inputSearchPropDefinitions,\n\n // model-value doesn't need to be defined as a prop in the component since using defineModel()\n modelValue: {\n type: String,\n default: '',\n description: 'The value of the search field.',\n typeDef: 'string'\n }\n}\n\nexport const emitDefinitions = {\n ...inputSearchEmitsDefinitions,\n\n // update:model-value doesn't need to be defined as an emit in the component since using defineModel()\n 'update:model-value': {\n description: `Fires when the model changes. Emits the updated model value.`,\n payloadType: 'string'\n }\n}\n\nexport const slotDefinitions = {}\n","/* -- COMPONENT-SPECIFIC PROPS -- */\n\n// The BsPopover props fall-through...below are BsModal-specific overrides to BsPopover settings\nexport const propDefinitions = {\n size: {\n type: String,\n default: 'md',\n description: 'The size of the BsModal. Or, you can set a custom size by using css classes on BsModal.',\n // anchor size is not allowed for modals\n typeDef: `\"sm\" | \"md\" | \"lg\" | \"fit-content\"`,\n typeOptions: ['sm', 'md', 'lg', 'fit-content'],\n validator: val => propDefinitions.size.typeOptions.includes(val)\n },\n transitionName: {\n type: String,\n default: 'bs-modal',\n description: 'Provide the name of a custom transition you\\'ve written, following the Vue transition classes approach.',\n typeDef: 'string'\n }\n}\n\n// BsPopover emits will bubble up\nexport const emitDefinitions = {\n // None specific to BsModal\n}\n","import {\n propDefinitions as popoverPropDefinitions,\n emitDefinitions as popoverEmitDefinitions,\n slotDefinitions as popoverSlotDefinitions,\n} from '@components/popover/defs-popover-docsite.js'\nimport {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n} from './defs-modal-component.js'\nimport { replaceVerbiage } from '@components/popover/defs-popover-helpers'\n\n/* -- DOCSITE-SPECIFIC DEFINITIONS -- */\n\nexport const propDefinitions = {\n ...replaceVerbiage({\n name: 'BsModal',\n defs: popoverPropDefinitions,\n keysToOmit: [\n 'anchor',\n 'delay',\n 'place',\n 'preventFirstShiftTab',\n 'preventLastTab',\n 'selectorPrefix',\n 'trapFocus',\n ]\n }),\n ...componentPropDefinitions,\n}\n\nexport const emitDefinitions = {\n ...replaceVerbiage({\n name: 'BsModal',\n defs: popoverEmitDefinitions,\n keysToOmit: ['first-shift-tab', 'last-tab']\n }),\n ...componentEmitDefinitions\n}\n\nexport const slotDefinitions = {\n default: {\n description: `The Header, Body, Footer content of the BsModal.`,\n slotProps: {\n ...replaceVerbiage({\n name: 'BsModal',\n defs: popoverSlotDefinitions.default.slotProps\n })\n }\n }\n}\n","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n alert: {\n default: false,\n description: `Whether or not this is an \"alert\" type modal. Adds\n \\`role=\"alertdialog\"\\` instead of just \\`\"dialog\"\\``,\n type: Boolean,\n typeDef: 'boolean',\n },\n bodyBackgroundContrast: {\n default: false,\n description: `Whether or not to add a background to the body.\n Should only be used when also using a header and/or footer.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n closeButton: {\n default: true,\n description: `Whether or not to include a \"close\" button at the top of\n modal content.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n footerBorder: {\n default: false,\n description: `Whether or not to add a border to the footer.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n fullHeight: {\n default: false,\n description: `Removes the vertical padding from the modal content and\n removes header/footer. Essentially makes the body full-height.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n fullWidth: {\n default: false,\n description: `Removes the horizontal padding from the modal content.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n headerBorder: {\n default: false,\n description: `Whether or not to add a border to the header.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n modalId: {\n default: undefined,\n description: `Sets the \\`id\\` attribute of the modal element and this\n value is emitted when closing the modal.`,\n type: String,\n typeDef: 'string',\n },\n preloaded: {\n default: false,\n description: `If \\`true\\`, the content will always be rendered via\n \\`v-show\\` rather than \\`v-if\\`.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n shown: {\n default: true,\n description: `Whether or not the element should be visible. Acts as a\n \\`v-if\\` over the content (unless \\`preloaded\\`). Defaults to \\`true\\`\n so the transition would play on mount if desired.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n size: {\n default: 'base',\n description: `Sets the initial size and style of the modal.`,\n type: String,\n typeDef: `'' | 'base' | 'sm' | 'lg'`,\n typeOptions: ['', 'base', 'sm', 'lg'],\n validator: (value) => {\n return ['', 'base', 'sm', 'lg'].includes(value)\n },\n },\n subtitle: {\n default: undefined,\n description: `The subtitle of the modal. This will be rendered in a\n heading tag at the top of the modal below the title.`,\n type: String,\n typeDef: 'string',\n },\n title: {\n default: undefined,\n description: `The title of the modal. This will be rendered in a heading\n tag at the top of the modal. If the 'title' slot alternative is being\n used, this prop will be overwritten. **Note:** If no title is set,\n \\`aria-label\\` must be added on this component to satisfy accessibility\n requirements.`,\n type: String,\n typeDef: 'string',\n },\n // DEPRECATED\n enterControlled: {\n default: undefined,\n deprecated: true,\n },\n enterTrigger: {\n default: undefined,\n deprecated: true,\n },\n leaveTrigger: {\n default: undefined,\n deprecated: true,\n },\n}\n\nexport const emitDefinitions = {\n 'close': {\n description: `Emits when the user clicks the \"close\" button, clicks the\n backdrop or presses the \"Escape\" key. The \\`modalId\\` prop is emitted\n along with this event.`,\n payloadType: 'string',\n },\n 'x-clicked-close': {\n description: `Emits when the user clicks the \"close\" button. The \\`modalId\\`\n prop is emitted along with this event.`,\n payloadType: 'string',\n },\n 'escape-pressed-close': {\n description: `Emits when the user presses the \"Escape\" key. The \\`modalId\\`\n prop is emitted along with this event.`,\n payloadType: 'string',\n },\n 'backdrop-clicked-close': {\n description: `Emits when the user clicks the backdrop outside the modal. The\n \\`modalId\\` prop is emitted along with this event.`,\n payloadType: 'string',\n },\n 'after-enter': {\n description: `Vue Transition hook. Called when the enter transition has\n finished. The element should be fully rendered by now and may be\n manipulated (e.g. setting focus). Emits the element.`,\n },\n 'after-leave': {\n description: `Vue Transition hook. Called when the leave transition has\n finished. Emits the element.`\n },\n}\n\nexport const slotDefinitions = {\n 'default': {\n description: `The default slot is used to provide the body content of the\n modal.`\n },\n 'title': {\n description: `The named slot 'title' is used to provide a custom title\n beyond just text (e.g. including an icon). Alternative to the \\`title\\`\n prop.`\n },\n 'subtitle': {\n description: `The named slot 'subtitle' is used to provide a custom subtitle\n beyond just text (e.g. including an icon). Alternative to the \\`subtitle\\`\n prop.`\n },\n 'footer': {\n description: `Provide a custom footer.`\n }\n}\n","export const propDefinitions = {\n disabled: {\n type: Boolean,\n default: false,\n description: 'Whether or not the BsOption is disabled.',\n typeDef: 'boolean',\n },\n id: {\n type: String,\n default: undefined,\n description:\n 'The unique id of the BsOption. Will be auto-generated if not provided. Used internally.',\n typeDef: 'string',\n },\n // So we can prevent a consumer added @click on a disabled BsOption\n onClick: {\n type: Function,\n default: undefined,\n omitFromDocs: true,\n },\n selected: {\n type: Boolean,\n default: false,\n description:\n 'Whether or not the BsOption is selected. Not needed if using v-model on BsDropdown.',\n typeDef: 'boolean',\n },\n value: {\n type: [String, Object, Number],\n default: undefined,\n description:\n 'The model value of the BsOption. Only needed if using v-model on BsDropdown.',\n typeDef: 'string | object | number',\n },\n negative: {\n type: Boolean,\n default: false,\n description:\n 'Whether or not to display the BsOption as negative.',\n typeDef: 'boolean',\n },\n iconColumn: {\n type: Boolean,\n default: false,\n description:\n 'Whether or not to add a column on the left of the BsOption to display an icon.',\n typeDef: 'boolean',\n },\n}\n\nexport const emitDefinitions = {}\n","import {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n } from './defs-option-component.js'\n\n/* -- FOR DOCS SITE USAGE -- */\n\nexport const propDefinitions = {\n ...componentPropDefinitions\n}\n\nexport const emitDefinitions = {\n ...componentEmitDefinitions\n}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the BsOption.`,\n slotProps: {\n isSelected: {\n description: `Whether or not the BsOption is selected.`,\n typeDef: 'boolean',\n },\n },\n },\n}","\n/* -- FOR COMPONENT USAGE -- */\n\nexport const propDefinitions = {\n id: {\n type: String,\n default: undefined,\n description: 'Either this prop or the `title` slot is required. The unique id of the BsOptionGroup. Will be auto-generated if not provided. Used internally and for accessibility.',\n typeDef: 'string'\n },\n title: {\n type: String,\n default: undefined,\n description: 'Either this prop or the `title` slot is required. The visual title for the group. Also used as the accessibility label.',\n typeDef: 'string'\n }\n}\n\nexport const emitDefinitions = {}\n","import {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n } from './defs-option-group-component.js'\n\n/* -- FOR DOCS SITE USAGE -- */\n\nexport const propDefinitions = {\n ...componentPropDefinitions\n}\n\nexport const emitDefinitions = {\n ...componentEmitDefinitions\n}\n\nexport const slotDefinitions = {\n default: {\n description: 'The content of the BsOptionGroup.',\n slotProps: {}\n },\n title: {\n description: 'An alternative to the `title` prop. Either this slot or the `title` prop is required. Use when the title needs to contain HTML.',\n slotProps: {}\n }\n}","export const propDefinitions = {\n background: {\n type: Boolean,\n default: false,\n description: 'Whether or not the body has a background color. Ideally, should only be used when also using a BsPopHeader and/or BsPopFooter.',\n typeDef: 'boolean'\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the BsPopBody.`,\n slotProps: {}\n }\n}","export const propDefinitions = {\n border: {\n type: Boolean,\n default: undefined, // set to undefined instead of false so we can check for usage\n description: 'Whether or not the footer has a top border. Note: the default will be `true` if used inside of a `BsToast`.',\n typeDef: 'boolean'\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the BsPopFooter.`,\n slotProps: {}\n }\n}","export const propDefinitions = {\n border: {\n type: Boolean,\n default: false,\n description: 'Whether or not the header has a bottom border.',\n typeDef: 'boolean'\n },\n subtitle: {\n type: String,\n default: undefined,\n description: 'The subtitle text. For basic use cases. Alternatively, use the Subtitle component inside of BsPopHeader. Note: Any child content added to BsPopHeader takes precedence over the title and subtitle props.',\n typeDef: 'string'\n },\n title: {\n type: String,\n default: undefined,\n description: 'The subtitle text. For basic use cases. Alternatively, use the BsPopTitle component inside of BsPopHeader. Note: Any child content added to BsPopHeader takes precedence over the title and subtitle props.',\n typeDef: 'string'\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the BsPopHeader.`,\n slotProps: {}\n }\n}\n","export const propDefinitions = {\n disabled: {\n // useButtonOrLink reacts to this prop\n default: false,\n description: 'Disables the BsPill when a button or link.',\n type: Boolean,\n typeDef: 'boolean'\n },\n linkTo: {\n // useButtonOrLink reacts to this prop\n default: undefined,\n description: 'Pass in a url to convert a BsPill into an anchor tag. Required when pill should render as button or link.',\n type: [String, Object],\n typeDef: 'string | object'\n },\n onClick: {\n // useButtonOrLink reacts to this prop...necessary since Pill renders as a <span> by default.\n // Checking props.onClick is the Vue way to test for the conditional presence of @click.\n // useButtonOrLink uses the presence of the @click in its rendering logic.\n default: undefined,\n description: 'Function to be called when the pill is clicked. Providing this prop automatically converts the pill from a span to an interactive button element. Function receives the click event as a parameter.',\n type: Function\n },\n router: {\n default: undefined,\n description: 'Vue Router instance to enable router-link functionality when used with linkTo prop. Required when using router links.',\n type: Object,\n typeDef: 'object'\n },\n status: {\n description: 'Status pills use color to indicate a state. May optionally include an icon. Neutral was formerly labeled as disabled, Negative was formerly labeled as error. Complete is deprecated, use positive instead.',\n type: String,\n typeDef: `'active' | 'complete' | 'disabled' | 'error' | 'warning' | 'positive' | 'neutral' | 'negative'`,\n typeOptions: ['active', 'complete', 'disabled', 'error', 'warning', 'positive', 'neutral', 'negative'],\n validator(value) {\n return propDefinitions.status.typeOptions.includes(value)\n },\n },\n type: {\n // useButtonOrLink reacts to this prop\n default: 'button',\n description: 'Specifies the type of button when BsPill renders as a button element. Only applies when the pill is interactive (has onClick handler or linkTo prop).',\n type: String,\n typeDef: `'button' | 'submit' | 'reset'`,\n typeOptions: ['button', 'submit', 'reset'],\n validator(value) {\n return propDefinitions.type.typeOptions.includes(value)\n },\n },\n variant: {\n description: 'Sets filter styles as well as live & white styles.',\n type: String,\n typeDef: `'filter' | 'filter-add' | 'filter-remove' | 'inactive' | 'live' | 'white'`,\n typeOptions: ['filter','filter-add','filter-remove','inactive','live', 'white'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n },\n },\n // DEPRECATED\n active: {\n deprecated: true,\n default: false,\n description: 'Used with the filter prop to indicate a pill that is an active.',\n type : Boolean,\n typeDef: 'boolean'\n },\n truncate: {\n deprecated: true,\n default: true,\n description: 'Will truncate and add elipses when text overflows.',\n type: Boolean,\n typeDef: 'boolean'\n },\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {}","export const propDefinitions = {\n as: {\n type: String,\n default: 'div',\n description: 'The element or component the BsPopSubtitle should render as. This can be useful for setting as specific header tags, if desired.',\n typeDef: 'string | component'\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the BsPopSubtitle.`,\n slotProps: {}\n }\n}","export const propDefinitions = {\n as: {\n type: String,\n default: 'div',\n description: 'The element or component the BsPopTitle should render as. This can be useful for setting as specific header tags, if desired.',\n typeDef: 'string | component'\n },\n id: {\n type: String,\n default: undefined,\n description: 'The id for the BsPopTitle. Will be auto-generated if not provided. Used for accessibility.',\n typeDef: 'string'\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the BsPopTitle.`,\n slotProps: {}\n }\n}","export const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n action: {\n default: '',\n description: `Action section text. Not used if the \\`action\\` slot is\n provided.`,\n type: String,\n typeDef: 'string'\n },\n actionIcon: {\n default: '',\n description: `Icon to show with the action text. This can be the string name\n (dynamic load) or an actual IconComponent. Not used if the \\`action\\` slot\n is provided.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n company: {\n default: '',\n description: `Company name.`,\n type: String,\n typeDef: 'string'\n },\n email: {\n default: '',\n description: `Email address.`,\n type: String,\n typeDef: 'string'\n },\n imageSize: {\n default: 'lg',\n description: `Profile image size.`,\n type: String,\n typeDef: 'xs|sm|md|lg|xl',\n typeOptions: ['xs', 'sm', 'md', 'lg', 'xl'],\n validator(value) {\n return propDefinitions.imageSize.typeOptions.includes(value)\n }\n },\n imageSrc: {\n default: '',\n description: `Profile image url.`,\n type: String,\n typeDef: 'string'\n },\n initials: {\n default: '',\n description: `Initials to display if no image is provided.`,\n type: String,\n typeDef: 'string'\n },\n jobTitle: {\n default: '',\n description: `Job title.`,\n type: String,\n typeDef: 'string'\n },\n layout: {\n default: 'vertical',\n description: `Profile card layout`,\n type: String,\n typeDef: 'horizontal|vertical',\n typeOptions: ['horizontal', 'vertical'],\n validator(value) {\n return propDefinitions.layout.typeOptions.includes(value)\n }\n },\n linkTo: {\n default: '',\n description: `Pass in the profile URL (to enable client-side routing, pass\n the Vue router instance into \\`router\\` prop).`,\n type: String,\n typeDef: 'string'\n },\n miscMeta: {\n default: '',\n description: `Miscellaneous text which appears last. Not used if the\n \\`misc\\` slot is provided.`,\n type: String,\n typeDef: 'string'\n },\n miscMetaIcon: {\n default: '',\n description: `Icon to show with the misc text. This can be the string name\n (dynamic load) or an actual IconComponent. Not used if the \\`misc\\` slot\n is provided.`,\n type: [String, Object],\n typeDef: 'string|IconComponent',\n },\n profileName: {\n default: '',\n description: `Profile subject's name.`,\n type: String,\n typeDef: 'string'\n },\n router: {\n default: undefined,\n description: `Pass in the Vue router instance to enable client-side routing\n (applicable only when \\`linkTo\\` is provided).`,\n type: Object,\n typeDef: 'Router'\n },\n // DEPRECATED\n href: {\n default: undefined,\n deprecated: true,\n }\n}\n\nexport const emitDefinitions = {\n 'action-toggled': {\n description: `Emitted when the optional action button is clicked.`\n }\n}\n\nexport const slotDefinitions = {\n action: {\n description: `Custom action section of the profile. Will replace the\n \\`actionIcon\\` and \\`action\\` props.`\n },\n misc: {\n description: `Custom misc section of the profile. Will replace the\n \\`miscMetaIcon\\` and \\`misc\\` props.`\n }\n}\n","import { emitsAsProps as popoverEmitsAsProps } from '@components/popover/defs-popover-component.js'\nimport { emitsAsProps as dropdownFilterEmitsAsProps } from '@components/dropdown/defs-dropdown-filter.js'\n\n/* -- COMPONENT-SPECIFIC PROPS -- */\n\nexport const propDefinitions = {\n\n // -- REQUIRED --\n // none\n\n // -- OPTIONAL --\n debounce: {\n type: [Boolean, String, Number],\n default: 0,\n description: 'For a filterable BsSelect, whether or not to debounce the `@query` emit. When the prop is present, the default value is `300ms`. Or, provide a custom number of milliseconds, e.g. `debounce=\"150\"`. Typically only use this if you\\'re hitting an API as the user types.',\n typeDef: 'boolean | string | number'\n },\n disabled: {\n type: Boolean,\n default: false,\n description: 'Whether or not the BsSelect is disabled.',\n typeDef: 'boolean'\n },\n displayValue: {\n type: [String, Function],\n default: undefined,\n description: 'Mainly only needed if using an object model. Use to define what to display in the input (as opposed to displaying the entire object). Provide either: A) the object key that should be displayed, or B) a function that receives the selected item and returns the value to display, e.g. obj => obj.name. When using the `multiple` prop, the function will be called on each individual item of the array. See demo examples. This prop could also be used for non-object model cases for plain text formatting, e.g. \"SOME_VALUE\" to \"Some Value\". Alternatively, see the `display-value` slot to display HTML content.',\n typeDef: 'string | function'\n },\n dropdownClass: {\n type: String,\n default: undefined,\n description: 'CSS classes to be added to the dropdown element. Can be used to set a custom dropdown width, e.g. w-20.',\n typeDef: 'string'\n },\n dropdownPlace: {\n type: String,\n default: 'bottom-start',\n description: 'Where the BsSelect dropdown will be placed, relative to its input.',\n typeDef: `\"top\" | \"top-start\" | \"top-end\" | \"right\" | \"right-start\" | \"right-end\" | \"bottom\" | \"bottom-start\" | \"bottom-end\" | \"left\" | \"left-start\" | \"left-end\"`,\n typeOptions: [\n // Note: BsPopover's \"center\" option is excluded here, since center is only available\n // for popovers anchored to the viewport...which doesn't make sense for a select\n 'top-start', 'right-start', 'bottom-start', 'left-start',\n 'top', 'right', 'bottom', 'left',\n 'top-end', 'right-end', 'bottom-end', 'left-end',\n ],\n validator: val => propDefinitions.dropdownPlace.typeOptions.includes(val)\n },\n dropdownSize: {\n type: String,\n default: 'anchor',\n description: 'The size of the BsSelect dropdown. By default it will be sized to match its input, i.e. its anchor.',\n typeDef: `\"anchor\" | \"sm\" | \"md\" | \"lg\" | \"fit-content\"`,\n typeOptions: ['anchor', 'sm', 'md', 'lg', 'fit-content'],\n validator: val => propDefinitions.dropdownSize.typeOptions.includes(val)\n },\n filter: {\n type: Boolean,\n default: false,\n description: 'Enables BsOption list filtering. Case-insensitive filtering will be handled internally, using the `innerText` of the BsOption. Also see `filter-key` or `filter-external`.',\n typeDef: 'boolean'\n },\n filterKey: {\n type: [String, Function],\n default: undefined,\n description: 'May be useful when your BsOption model is an object. Enables BsOption list filtering like the `filter` prop does, except that the case-insensitive internal filtering will use the given obj key or derived value, instead of the BsOption\\'s `innerText` value. Provide either: A) the object key that should be use for filtering, or B) a function that receives the object and returns an item value.',\n typeDef: 'string | function'\n },\n filterExternal: {\n type: Boolean,\n default: false,\n description: 'Enables BsOption list filtering, but does not turn on internal filtering. Allows you to handle the filtering logic yourself, using `@query`. This is useful when you\\'d like to hit an API to bring back options as the user types.',\n typeDef: 'boolean'\n },\n filterPlaceholder: {\n type: String,\n default: undefined,\n description: 'For a filterable BsSelect, the placeholder text for the filter input.',\n typeDef: 'string'\n },\n equateBy: {\n type: [String, Function],\n default: 'id',\n description: 'Only needed if using an object model that has no \"id\" key (or the id key is not unique). Used to derive object equality based selection state. Provide either: A) the unique object key that should be used or, B) a function that receives the object and returns a value that should be used for the equality check. See example demos.',\n typeDef: 'string | function'\n },\n error: {\n type: Boolean,\n default: false,\n description: 'Applies error styles to the BsSelect.',\n typeDef: 'boolean',\n },\n hintId: {\n type: String,\n default: undefined,\n description: 'The id of an element that contains hint or error text related to the BsSelect. This is used to associate the hint with the BsSelect for screen readers.',\n typeDef: 'string'\n },\n id: {\n type: String,\n default: undefined,\n description: 'The id of the BsSelect. Will be auto-generated if not provided.',\n typeDef: 'string'\n },\n minChars: {\n type: [String, Number],\n default: 0,\n description: 'For a filterable BsSelect, the minimum number of characters required before filtering will happen (or before `@query` will emit the filter query value). Typically only use this if you\\'re hitting an API as the user types.',\n typeDef: 'string | number'\n },\n mobileButtonLabel: {\n type: String,\n default: undefined,\n description: 'Label to use for the mobile sheet action button which only \\\n appears on `multiple` mode.',\n typeDef: 'string'\n },\n mobileDescription: {\n type: String,\n default: undefined,\n description: 'Description to use for the mobile sheet heading.',\n typeDef: 'string'\n },\n mobileHeading: {\n type: String,\n default: undefined,\n description: 'Heading text to use for the mobile sheet heading.',\n typeDef: 'string'\n },\n mobileHeadingTag: {\n default: undefined,\n description: 'HTML tag to use for the mobile sheet heading.',\n type: String,\n typeDef: 'string'\n },\n mobileSheet: {\n type: [Boolean, String],\n default: undefined,\n description: 'Determines when (or not) to use mobile sheet at various \\\n breakpoints. This can either be `\"tablet\"` (default) for using the mobile \\\n sheet at tablet breakpoints and below, `\"mobile\"` for using the mobile \\\n sheet at mobile breakpoint only, or `false` to never use mobile sheet.',\n typeDef: 'false | \"tablet\" | \"mobile\"'\n },\n multiple: {\n type: Boolean,\n default: false,\n description: 'Specifies that multiple options can be selected.',\n typeDef: 'boolean'\n },\n persist: {\n type: Boolean,\n default: false,\n description: 'By default, BsSelect uses `v-if` to render its dropdown. If you need it to use `v-show` instead, you can add this prop. However, the default is recommended for best performance. An alternative to using this prop, could be to persist your data in a store.',\n typeDef: 'boolean'\n },\n placeholder: {\n type: String,\n default: undefined,\n description: 'Placeholder text for the BsSelect.',\n typeDef: 'string'\n },\n preventClear: {\n type: Boolean,\n default: false,\n description: 'Prevents the clear X button from being displayed.',\n typeDef: 'boolean'\n },\n required: {\n type: Boolean,\n default: false,\n description: 'Whether the BsSelect is required.',\n typeDef: 'boolean',\n },\n showCount: {\n type: Boolean,\n default: false,\n description: 'For optional use with the `multiple` prop. Shows the selection count when greater than zero.',\n typeDef: 'boolean'\n },\n\n // The BsPopover events cannot just bubble up, due to the BsSelect component structure, so\n // we have to redefine and re-emit the events. The \"guard\" events need to be done as\n // props instead of emits, to ensure that the guard behavior flows through correctly\n // and is handled by the usePop composable (this is how it's done in BsPopover as well).\n // The onQuery event needs to be done as a prop to ensure the abort controller async\n // handling flows through correctly to BsDropdownFilter.\n ...selectEmitsAsProps(),\n}\n\nexport function selectEmitsAsProps() {\n // we don't need the cancel/confirm-related ones for a select\n const { onBeforeOpen, onBeforeClose } = popoverEmitsAsProps()\n const { onQuery } = dropdownFilterEmitsAsProps()\n return {\n onBeforeOpen,\n onBeforeClose,\n onQuery\n }\n}\n\n// We have to re-emit these BsDropdown emits from BsSelect due to the component structure\nexport const emitDefinitions = {\n 'after-open': {\n description: 'Fires after the BsSelect dropdown is open and the transition has completed.',\n payloadType: '{ id }'\n },\n 'after-close': {\n description: 'Fires after the BsSelect dropdown is closed and the transition has completed.',\n payloadType: '{ id }'\n },\n close: {\n description: `Fires when the BsSelect dropdown closes.`,\n payloadType: '{ id }'\n },\n open: {\n description: `Fires when the BsSelect dropdown opens.`,\n payloadType: '{ id }'\n }\n}\n\n// defined in defs-select-docsite.js\nexport const slotDefinitions = {}\n","import {\n slotDefinitions as popoverSlotDefinitions\n } from '@components/popover/defs-popover-docsite.js'\n\nimport {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n selectEmitsAsProps\n} from './defs-select-component.js'\n\nimport {\n replaceVerbiage,\n removeEmitsAsProps,\n formatPropEmitKeysForDocs\n} from '@components/popover/defs-popover-helpers'\n\n/* -- DOCSITE-SPECIFIC DEFINITIONS -- */\n\nexport const propDefinitions = {\n ...removeEmitsAsProps(componentPropDefinitions),\n // these don't need to be defined as a prop in the component since using defineModel()\n 'v-model': {\n type: [String, Object, Number, Array],\n default: undefined,\n description: 'The selected value.',\n typeDef: 'string | object | number | array'\n },\n 'v-model:filter-input': {\n type: String,\n default: '',\n description: 'The filter input value.',\n typeDef: 'string'\n }\n}\n\nexport const emitDefinitions = {\n ...componentEmitDefinitions,\n ...formatPropEmitKeysForDocs(selectEmitsAsProps()),\n\n // these don't need to be defined as an emit in the component since using defineModel()\n 'update:model-value': {\n description: `Fires when the model changes. Emits the updated model value.`,\n payloadType: 'string | object | number | array'\n },\n 'update:filter-input': {\n description: `Fires when the filter-input model changes. Emits the updated filter-input value.`,\n payloadType: 'string'\n }\n}\n\nexport const slotDefinitions = {\n default: {\n description: `The content of the BsSelect, i.e. multiple BsOption elements.`,\n slotProps: {\n ...replaceVerbiage({\n name: 'BsSelect',\n defs: popoverSlotDefinitions.default.slotProps,\n keysToOmit: ['cancel', 'confirm']\n })\n }\n },\n 'display-value': {\n description: `Allows the display value to include HTML content, for custom cases. This is an alternative to using the text-only \\`display-value\\` prop. See related demo.`,\n slotProps:{\n isOpen: {\n description: `Whether or not the BsSelect's dropdown is open.`,\n typeDef: 'boolean'\n },\n selected: {\n description: `The selected model value.`,\n typeDef: 'string | object | number | array'\n }\n }\n }\n}\n","/* -- COMPONENT-SPECIFIC PROPS -- */\n\n// The BsSelect props fall-through...ones re-defined below are because they need to be used for BsLabel/BsFieldDetails too\nexport const propDefinitions = {\n // -- REQUIRED --\n // none\n\n // -- OPTIONAL --\n disabled: {\n type: Boolean,\n default: false,\n description: 'Whether or not the BsSelectField is disabled.',\n typeDef: 'boolean'\n },\n error: {\n type: Boolean,\n default: false,\n description: 'Applies error styles to the BsSelectField.',\n typeDef: 'boolean',\n },\n errorMsg: {\n type: String,\n default: undefined,\n description: 'Error text to display below the field when `error` is `true`.',\n typeDef: 'string'\n },\n hint: {\n type: String,\n default: undefined,\n description: 'Hint text to display below the field.',\n typeDef: 'string'\n },\n id: {\n type: String,\n default: undefined,\n description: 'The id to use for the internal BsSelect. This is used for the pop system and accessibility. Will be auto-generated if not provided.',\n typeDef: 'string'\n },\n label: {\n type: String,\n default: undefined,\n description: 'The field label. Alternatively, use the `#label` slot.',\n typeDef: 'string'\n },\n required: {\n type: Boolean,\n default: false,\n description: 'Whether the BsSelectField is required.',\n typeDef: 'boolean',\n }\n}\n\n// BsSelect emits will bubble up\nexport const emitDefinitions = {\n // None specific to BsSelectField\n}\n","import {\n propDefinitions as selectPropDefinitions,\n emitDefinitions as selectEmitDefinitions,\n slotDefinitions as selectSlotDefinitions\n} from '@components/select/defs-select-docsite.js'\n\nimport {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n} from './defs-select-field-component.js'\n\nimport { replaceVerbiage } from '@components/popover/defs-popover-helpers'\n\n/* -- DOCSITE-SPECIFIC DEFINITIONS -- */\n\nexport const propDefinitions = {\n ...replaceVerbiage({\n name: 'BsSelectField',\n defs: selectPropDefinitions,\n keysToOmit: ['hintId']\n }),\n ...componentPropDefinitions,\n}\n\nexport const emitDefinitions = {\n ...replaceVerbiage({\n name: 'BsSelectField',\n defs: selectEmitDefinitions\n }),\n ...componentEmitDefinitions\n}\n\nexport const slotDefinitions = {\n ...replaceVerbiage({\n name: 'BsSelectField',\n defs: selectSlotDefinitions\n })\n}\n","import { popTriggerProps } from '@composables/popTriggers'\n\nexport const propDefinitions = {\n // REQUIRED\n // none\n // OPTIONAL\n disabled: {\n // useButtonOrLink reacts to this prop\n default: false,\n description: `Sets the disabled state of the text button.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n linkTo: {\n // useButtonOrLink reacts to this prop\n default: undefined,\n description: `Pass in a url to convert a text button to an anchor tag (to enable\n client-side routing, use \\'RouterLink\\' or \\'NuxtLink\\').`,\n type: String,\n typeDef: 'string',\n },\n size: {\n default: '',\n description: `Sets the size of the text button.`,\n type: String,\n typeDef: `'xs' | 'sm' | 'md'`,\n typeOptions: ['', 'xs', 'sm', 'md'],\n validator: val => propDefinitions.size.typeOptions.includes(val)\n },\n type: {\n // useButtonOrLink reacts to this prop\n type: String,\n default: 'button',\n description: 'Sets the HTML button type attribute when rendering as a <button>.',\n typeDef: `'button' | 'submit' | 'reset'`,\n typeOptions: ['button', 'submit', 'reset'],\n validator: val => propDefinitions.type.typeOptions.includes(val)\n },\n unstyled: {\n default: false,\n description: `Prevent all Blue Steel styling from being applied (except what\\'s done by the base css reset). \n Useful when your use case calls for totally custom button styling, yet you\\’d still like to use the \n BsButton component for it\\’s \"pop\" props feature.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n variant: {\n default: undefined,\n description: `Changes the variant of the text button. \\'white\\' should only be\n used on dark backgrounds.`,\n type: String,\n typeDef: `'' | 'base' | 'negative' | 'alt-base' | 'alt-negative' | 'white'`,\n typeOptions: ['', 'base', 'negative', 'alt-base', 'alt-negative', 'white'],\n validator(value) {\n return propDefinitions.variant.typeOptions.includes(value)\n }\n },\n\n // Pop System related props...they're stored in the usePopTriggers composable file so consumers\n // can potentially import them to create their own custom pop buttons for cases unique to their apps\n ...popTriggerProps\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `Button label content.`\n }\n}\n","/* -- COMPONENT-SPECIFIC PROPS -- */\n\n// The BsPopover props fall-through...below are BsToast-specific overrides to BsPopover settings\nexport const propDefinitions = {\n\n // -- REQUIRED --\n id: {\n // id is only defined again so we can access it in BsToast via props.id\n type: String,\n required: true,\n description: `The id of the BsToast. Used to control visibility state, as well as automatic accessibility hook-up.`,\n typeDef: 'string'\n },\n\n // -- OPTIONAL --\n duration: {\n default: 0,\n description: 'Duration that the toast should be visible for. Stays open indefinitely if `0` is provided.',\n type: Number,\n typeDef: 'number'\n },\n variant: {\n default: 'base',\n description: 'Variant of the toast.',\n type: String,\n typeDef: `'base' | 'warning' | 'positive' | 'negative'`,\n typeOptions: ['base', 'warning', 'positive', 'negative'],\n validator: (val) => propDefinitions.variant.typeOptions.includes(val)\n }\n}\n\n// BsPopover emits will bubble up\nexport const emitDefinitions = {\n open: {\n description: `Fires when BsToast opens.`,\n payloadType: '{ id }'\n },\n close: {\n description: `Fires any time BsToast closes.`,\n payloadType: '{ id }'\n }\n}\n","import {\n propDefinitions as popoverPropDefinitions,\n emitDefinitions as popoverEmitDefinitions,\n slotDefinitions as popoverSlotDefinitions,\n} from '@components/popover/defs-popover-docsite.js'\nimport {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n} from './defs-toast-component.js'\nimport { replaceVerbiage } from '../popover/defs-popover-helpers.js'\n\n/* -- DOCSITE-SPECIFIC DEFINITIONS -- */\n\nexport const propDefinitions = {\n ...replaceVerbiage({\n name: 'BsToast',\n defs: popoverPropDefinitions,\n keysToOmit: [\n 'anchor',\n 'backdrop',\n 'delay',\n 'place',\n 'preventAutoClose',\n 'preventClose',\n 'preventCloseOutside',\n 'preventCloseX',\n 'preventFirstShiftTab',\n 'preventLastTab',\n 'role',\n 'selectorPrefix',\n 'size',\n 'teleportTargetId',\n 'transitionDuration',\n 'transitionName',\n 'trapFocus',\n ]\n }),\n ...componentPropDefinitions\n}\n\nexport const emitDefinitions = {\n ...replaceVerbiage({\n name: 'BsToast',\n defs: popoverEmitDefinitions,\n keysToOmit: ['first-shift-tab', 'last-tab']\n }),\n ...componentEmitDefinitions\n}\n\nexport const slotDefinitions = {\n default: {\n description: 'The content of the toast (BsPopHeader, BsPopBody, BsPopFooter).',\n slotProps: {\n ...replaceVerbiage({\n name: 'BsToast',\n defs: popoverSlotDefinitions.default.slotProps\n })\n }\n }\n}\n","/* -- COMPONENT-SPECIFIC PROPS -- */\n\n// The BsPopover props fall-through...below are BsTooltip-specific overrides to BsPopover settings\nexport const propDefinitions = {\n // only defined again so we can access it in BsTooltip via props.anchor\n anchor: {\n type: String,\n default: undefined,\n description: 'The `id` of the element that the BsTooltip should be anchored to. Only necessary in cases where the BsTooltip cannot be placed as a direct child of your trigger element, e.g. a BsInput.',\n typeDef: 'string',\n },\n delay: {\n type: [String, Number],\n default: 500,\n description: 'The number of milliseconds the BsTooltip should be delayed before opening on hover.',\n typeDef: 'string | number'\n },\n // only defined again so we can access it in BsTooltip via props.id\n id: {\n type: String,\n default: undefined,\n description: 'The `id` of the BsTooltip. Will be auto-generated if not provided. Used to control visibility state, as well as automatic accessibility hook-up.',\n typeDef: 'string'\n },\n // Place is defined as a prop in order to exclude BsPopover's \"center\" option, since center\n // is only available for popovers anchored to the viewport...which doesn't make sense for a tooltip\n place: {\n type: String,\n default: 'top',\n description: 'Where the BsTooltip will be placed, relative to its anchor.',\n typeDef: '\"top\" | \"top-start\" | \"top-end\" | \"right\" | \"right-start\" | \"right-end\" | \"bottom\" | \"bottom-start\" | \"bottom-end\" | \"left\" | \"left-start\" | \"left-end\"',\n typeOptions: [\n 'top-start', 'right-start', 'bottom-start', 'left-start',\n 'top', 'right', 'bottom', 'left',\n 'top-end', 'right-end', 'bottom-end', 'left-end',\n ],\n validator: val => propDefinitions.place.typeOptions.includes(val)\n }\n}\n\n// BsPopover emits will bubble up\nexport const emitDefinitions = {\n // None specific to BsTooltip\n}\n","import {\n propDefinitions as popoverPropDefinitions,\n emitDefinitions as popoverEmitDefinitions,\n slotDefinitions as popoverSlotDefinitions,\n} from '@components/popover/defs-popover-docsite.js'\n\nimport {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n} from './defs-tooltip-component.js'\n\nimport { replaceVerbiage } from '@components/popover/defs-popover-helpers'\n\n/* -- DOCSITE-SPECIFIC DEFINITIONS -- */\n\nexport const propDefinitions = {\n ...replaceVerbiage({\n name: 'BsTooltip',\n defs: popoverPropDefinitions,\n keysToOmit: [\n 'backdrop',\n 'persist',\n 'preventAutoClose',\n 'preventClose',\n 'preventCloseEsc',\n 'preventCloseOutside',\n 'preventCloseX',\n 'preventFirstShiftTab',\n 'preventLastTab',\n 'selectorPrefix',\n 'trapFocus'\n ],\n }),\n ...componentPropDefinitions,\n}\n\nexport const emitDefinitions = {\n ...replaceVerbiage({\n name: 'BsTooltip',\n defs: popoverEmitDefinitions,\n keysToOmit: [\n 'beforeCancel',\n 'beforeConfirm',\n 'cancel',\n 'confirm',\n 'first-shift-tab',\n 'last-tab',\n ]\n }),\n ...componentEmitDefinitions\n}\n\nexport const slotDefinitions = {\n default: {\n description: 'The content of the BsTooltip can contain HTML for formatting, but should not contain interactive or focusable elements. If the latter is needed, use a BsPopover instead.',\n slotProps: {\n ...replaceVerbiage({\n name: 'BsTooltip',\n defs: popoverSlotDefinitions.default.slotProps,\n keysToOmit: ['close', 'cancel', 'confirm']\n })\n }\n }\n}\n","import { emitsAsProps as popoverEmitsAsProps } from '@components/popover/defs-popover-component.js'\nimport { emitsAsProps as dropdownFilterEmitsAsProps } from '@components/dropdown/defs-dropdown-filter.js'\n\n/* -- FOR COMPONENT USAGE -- */\n\nexport const propDefinitions = {\n id: {\n type: String,\n default: undefined,\n description: 'The id of the BsTypeahead. Will be auto-generated if not provided.',\n typeDef: 'string'\n },\n debounce: {\n type: [Boolean, String, Number],\n default: 0,\n description: 'Whether or not to debounce the `@query` emit. When the prop is present, the default value is `300ms`. Or, provide a custom number of milliseconds, e.g. `debounce=\"150\"`. Typically only use this if you\\'re hitting an API as the user types.',\n typeDef: 'boolean | string | number'\n },\n disabled: {\n type: Boolean,\n default: false,\n description: 'Sets the disabled state on the input.',\n typeDef: 'boolean'\n },\n displayValue: {\n type: [String, Function],\n default: undefined,\n description: 'Mainly only needed if using an object model. Use to define what to display in the input (as opposed to displaying the entire object). Provide either: A) the object key that should be displayed, or B) a function that receives the selected item and returns the value to display, e.g. obj => obj.name. See demo examples. This prop could also be used for non-object model cases for plain text formatting, e.g. \"SOME_VALUE\" to \"Some Value\".',\n typeDef: 'string | function'\n },\n dropdownClass: {\n type: String,\n default: undefined,\n description: 'CSS classes to be added to the dropdown element. Can be used to set a custom dropdown width, e.g. w-20.',\n typeDef: 'string'\n },\n dropdownPlace: {\n type: String,\n default: 'bottom-start',\n description: 'Where the BsInputTypeahead dropdown will be placed, relative to its input.',\n typeDef: `\"top\" | \"top-start\" | \"top-end\" | \"right\" | \"right-start\" | \"right-end\" | \"bottom\" | \"bottom-start\" | \"bottom-end\" | \"left\" | \"left-start\" | \"left-end\"`,\n typeOptions: [\n // Note: BsPopover's \"center\" option is excluded here, since center is only available\n // for popovers anchored to the viewport...which doesn't make sense for a select\n 'top-start', 'right-start', 'bottom-start', 'left-start',\n 'top', 'right', 'bottom', 'left',\n 'top-end', 'right-end', 'bottom-end', 'left-end',\n ],\n validator: val => propDefinitions.dropdownPlace.typeOptions.includes(val)\n },\n dropdownSize: {\n type: String,\n default: 'anchor',\n description: 'The size of the BsInputTypeahead dropdown. By default it will be sized to match its input, i.e. its anchor.',\n typeDef: `\"anchor\" | \"sm\" | \"md\" | \"lg\" | \"fit-content\"`,\n typeOptions: ['anchor', 'sm', 'md', 'lg', 'fit-content'],\n validator: val => propDefinitions.dropdownSize.typeOptions.includes(val)\n },\n equateBy: {\n type: [String, Function],\n default: 'id',\n description: 'Only needed if using an object model that has no \"id\" key (or the id key is not unique). Used to derive object equality based selection state. Provide either: A) the unique object key that should be used or, B) a function that receives the object and returns a value that should be used for the equality check. See example demos.',\n typeDef: 'string | function'\n },\n error: {\n type: Boolean,\n default: false,\n description: 'Applies error styles to the BsTypeahead.',\n typeDef: 'boolean',\n },\n filterExternal: {\n type: Boolean,\n default: false,\n description: 'Enables BsOption list filtering, but does not turn on internal filtering. Allows you to handle the filtering logic yourself, using `@query`, for custom or complex use cases.',\n typeDef: 'boolean'\n },\n filterKey: {\n type: [String, Function],\n default: undefined,\n description: 'May be useful when your BsOption model is an object. The case-insensitive internal filtering will use the given obj key or derived value, instead of the default filtering behavior of using BsOption\\'s `innerText` value. Provide either: A) the object key that should be use for filtering, or B) a function that receives the object and returns an item value.',\n typeDef: 'string | function'\n },\n hideSearchIcon: {\n type: Boolean,\n default: false,\n description: 'Hides the search icon.',\n typeDef: 'boolean'\n },\n minChars: {\n type: [String, Number],\n default: 0,\n description: 'The minimum number of characters required before filtering will happen (or before `@query` will emit the filter query value). Typically only use this if you\\'re hitting an API as the user types.',\n typeDef: 'string | number'\n },\n multiple: {\n type: Boolean,\n default: false,\n description: 'Specifies that multiple options can be selected.',\n typeDef: 'boolean'\n },\n placeholder: {\n type: String,\n default: 'Search Items',\n description: 'Placeholder attribute - same as native.',\n typeDef: 'string'\n },\n persist: {\n type: Boolean,\n default: false,\n description: 'By default, BsTypeahead uses `v-if` to render its dropdown. If you need it to use `v-show` instead, you can add this prop. However, the default is recommended for best performance. An alternative to using this prop, could be to persist your data in a store.',\n typeDef: 'boolean'\n },\n placeholder: {\n type: String,\n default: 'Select an option',\n description: 'Placeholder text for the BsTypeahead.',\n typeDef: 'string'\n },\n preventClear: {\n type: Boolean,\n default: false,\n description: 'Prevents the clear X button from being displayed.',\n typeDef: 'boolean'\n },\n\n // DEPRECATED\n inputId: {\n type: String,\n default: undefined,\n deprecated: true,\n description: 'Sets the id on the input element and the label\\'s for attribute.',\n typeDef: 'string'\n },\n\n // The BsPopover events cannot just bubble up, due to the BsSelect component structure, so\n // we have to redefine and re-emit the events. These \"guard\" events need to be done as\n // props instead of emits, to ensure that the guard behavior flows through correctly\n // and is handled by the usePop composable (this is how it's done in BsPopover as well).\n ...emitsAsProps(),\n}\n\nexport function emitsAsProps() {\n // we don't need the cancel/confirm-related ones for a select\n const { onBeforeOpen, onBeforeClose } = popoverEmitsAsProps()\n const { onQuery } = dropdownFilterEmitsAsProps()\n return {\n onBeforeOpen,\n onBeforeClose,\n onQuery\n }\n}\n\n// We have to re-emit these BsDropdown emits from BsTypeahead due to the component structure\nexport const emitDefinitions = {\n open: {\n description: `Fires when the BsTypeahead dropdown opens.`,\n payloadType: '{ id }'\n },\n close: {\n description: `Fires when the BsTypeahead dropdown closes.`,\n payloadType: '{ id }'\n },\n 'after-open': {\n description: 'Fires after the BsTypeahead dropdown is open and the transition has completed.',\n payloadType: '{ id }'\n },\n 'after-close': {\n description: 'Fires after the BsTypeahead dropdown is closed and the transition has completed.',\n payloadType: '{ id }'\n }\n}\n","import {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n } from './defs-typeahead-component.js'\n\n\nexport const propDefinitions = {\n ...componentPropDefinitions,\n\n // model-value doesn't need to be defined as a prop in the component since using defineModel()\n 'v-model': {\n type: [String, Object, Number, Array],\n default: undefined,\n description: 'The selected value.',\n typeDef: 'string | object | number | array'\n },\n 'v-model:filter-input': {\n type: String,\n default: '',\n description: 'The filter input value.',\n typeDef: 'string'\n }\n}\n\nexport const emitDefinitions = {\n ...componentEmitDefinitions,\n\n // these don't need to be defined as an emit in the component since using defineModel()\n 'update:model-value': {\n description: `Fires when the model changes. Emits the updated model value.`,\n payloadType: 'string | object | number | array'\n },\n 'update:filter-input': {\n description: 'Fires when the filter-input model changes. Emits the updated filter-input value.',\n payloadType: 'string'\n }\n}\n\nexport const slotDefinitions = {}\n","/* -- COMPONENT-SPECIFIC PROPS -- */\n\n// The BsTypeahead props fall-through...ones re-defined below are because they need to be used for BsLabel/BsFieldDetails too\nexport const propDefinitions = {\n // -- REQUIRED --\n // none\n\n // -- OPTIONAL --\n disabled: {\n type: Boolean,\n default: false,\n description: 'Whether or not the BsTypeaheadField is disabled.',\n typeDef: 'boolean'\n },\n error: {\n type: Boolean,\n default: false,\n description: 'Applies error styles to the BsTypeaheadField.',\n typeDef: 'boolean',\n },\n errorMsg: {\n type: String,\n default: undefined,\n description: 'Error text to display below the field when `error` is `true`.',\n typeDef: 'string'\n },\n hint: {\n type: String,\n default: undefined,\n description: 'Hint text to display below the field.',\n typeDef: 'string'\n },\n id: {\n type: String,\n default: undefined,\n description: 'The id to use for the internal BsTypeahead. This is used for the pop system and accessibility. Will be auto-generated if not provided.',\n typeDef: 'string'\n },\n label: {\n type: String,\n default: undefined,\n description: 'The field label. Alternatively, use the `#label` slot.',\n typeDef: 'string'\n },\n required: {\n type: Boolean,\n default: false,\n description: 'Whether the BsTypeaheadField is required.',\n typeDef: 'boolean',\n }\n}\n\n// BsTypeahead emits will bubble up\nexport const emitDefinitions = {\n // None specific to BsTypeaheadField\n}\n","import {\n propDefinitions as typeaheadPropDefinitions,\n emitDefinitions as typeaheadEmitDefinitions,\n slotDefinitions as typeaheadSlotDefinitions\n} from '@components/typeahead/defs-typeahead-docsite.js'\n\nimport {\n propDefinitions as componentPropDefinitions,\n emitDefinitions as componentEmitDefinitions,\n} from './defs-typeahead-field-component.js'\n\nimport { replaceVerbiage } from '@components/popover/defs-popover-helpers'\n\n/* -- DOCSITE-SPECIFIC DEFINITIONS -- */\n\nexport const propDefinitions = {\n ...replaceVerbiage({\n name: 'BsTypeaheadField',\n defs: typeaheadPropDefinitions,\n keysToOmit: ['hintId']\n }),\n ...componentPropDefinitions,\n}\n\nexport const emitDefinitions = {\n ...replaceVerbiage({\n name: 'BsTypeaheadField',\n defs: typeaheadEmitDefinitions\n }),\n ...componentEmitDefinitions\n}\n\nexport const slotDefinitions = {\n ...replaceVerbiage({\n name: 'BsTypeaheadField',\n defs: typeaheadSlotDefinitions\n })\n}\n","export const propDefinitions = {\n collapsed: {\n default: false,\n description: `If \\`true\\`, the navigation is collapsed to show only icons.\n This prop can be used with v-model:collapsed for two-way binding.\n Note: This only works when variant is set to 'collapsible'.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n mobileOpen: {\n default: false,\n description: `If \\`true\\`, the mobile navigation is open. This is only\n applicable on tablet or mobile page widths.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n navData: {\n default: () => [],\n description: `The navigation data to be displayed.`,\n type: Array,\n typeDef: `Array({\n <span class=\"bs-text-ink-accent-3\">/* If true, creates a divider-only section without toggle button or title (only when navItems present) */</span>\n <span class=\"bs-font-semibold\">dividerOnly?</span>: boolean,\n <span class=\"bs-text-ink-accent-3\">/* If true, styles the nav item as app links (used on digital transformation project) */</span>\n <span class=\"bs-font-semibold\">appLinks?</span>: boolean,\n <span class=\"bs-text-ink-accent-3\">/* Name of the icon (dynamically loaded) or IconComponent itself */</span>\n <span class=\"bs-font-semibold\">icon?</span>: string | IconComponent,\n <span class=\"bs-text-ink-accent-3\">/* Unique ID for the nav item */</span>\n <span class=\"bs-font-semibold\">id</span>: string,\n <span class=\"bs-text-ink-accent-3\">/* Alternative metadata structure for WWT Admin Menu Builder */</span>\n <span class=\"bs-font-semibold\">metaData?</span>: { <span class=\"bs-font-semibold\">external?</span>: boolean },\n <span class=\"bs-text-ink-accent-3\">/* Nested nav items. Only one level deep is supported */</span>\n <span class=\"bs-font-semibold\">navItems?</span>: object[],\n <span class=\"bs-text-ink-accent-3\">/* Alternative \"to\" for the WWT Admin Menu Builder */</span>\n <span class=\"bs-font-semibold\">resource?</span>: { <span class=\"bs-font-semibold\">url</span>: string | object },\n <span class=\"bs-text-ink-accent-3\">/* Text to display for the nav item (not shown when dividerOnly is true) */</span>\n <span class=\"bs-font-semibold\">text</span>: string,\n <span class=\"bs-text-ink-accent-3\">/* Router path, Router object, or absolute URL. When navItems prop is present, this is ignored. */</span>\n <span class=\"bs-font-semibold\">to?</span>: string | object,\n <span class=\"bs-text-ink-accent-3\">/* Set the desired behavior of a link. _self, _blank, _parent, _top can be used. */</span>\n <span class=\"bs-font-semibold\">target?</span>: string,\n })`,\n typeDefPopover: true\n },\n router: {\n default: null,\n description: `Vue Router instance. This is used to highlight the active\n navigation item.`,\n type: Object,\n typeDef: `Router`,\n },\n startCollapsed: {\n default: false,\n description: `If \\`true\\`, the navigation sections are collapsed on load.`,\n type: Boolean,\n typeDef: 'boolean',\n },\n variant: {\n default: 'wide',\n description: `The variant of the vertical navigation to be displayed.\n Note that when using \\`'narrow\\`' variant, the external links and slotted\n items will not be displayed. The \\`'collapsible'\\` variant enables the collapse\n feature with a toggle button.`,\n type: String,\n typeDef: `'wide'|'narrow'|'collapsible'`,\n validator: (value) => {\n return ['wide', 'narrow', 'collapsible'].includes(value)\n }\n },\n bgVariant: {\n default: '',\n description: `The background color variant of the vertical navigation.\n When set to \\`'bg-base'\\`, the background color will use \\`bg-base\\` instead\n of the default \\`bg-navy-base\\`. Leave empty or omit for default styling.`,\n type: String,\n typeDef: `''|'bg-base'`,\n validator: (value) => {\n return ['', 'bg-base'].includes(value)\n }\n },\n width: {\n default: '',\n description: `Custom width of the vertical navigation. This will override\n the \\`variant\\` prop.`,\n type: String,\n typeDef: 'string',\n },\n}\n\nexport const emitDefinitions = {\n 'nav-link-clicked': {\n description: `Emitted when a navigation item is clicked. Emits the event\n (\\`ev\\`) and the navigation item (\\`payload\\`). Actual navigation is\n already done by the component, but this can be used to perform any\n additional actions on navigation.`,\n payloadType: `{ ev, payload }`,\n },\n 'update:collapsed': {\n description: `Emitted when the collapsed state changes. Used for v-model:collapsed binding.`,\n payloadType: `boolean`,\n }\n}\n\nexport const slotDefinitions = {\n 'top-content': {\n description: `Content to be displayed at the very top of the navigation list.\n Useful for adding components like inputs, selects, or other custom elements.`\n },\n 'end-items': {\n description: `Additional navigation items to be displayed at the bottom\n of the navigation.`\n },\n 'top-content': {\n description: `Content to be displayed at the very top of the navigation list.\n Useful for adding components like inputs, selects, or other custom elements.`\n },\n}\n","import { onMounted, ref, useId } from 'vue'\n\n/**\n * Generates unique ids for use in component markup.\n * Refs are initialized with empty strings and populated with uuids on mount to avoid SSR / hydration mismatch issues.\n *\n * @param {number} quantity how many ids to generate - defaults to 1\n * @returns {Array} array of refs with generated ids\n */\nexport function useGenIdAttrs(quantity = 1) {\n const ids = []\n for (let i = 0; i < quantity; i++) {\n ids.push(ref(useId()))\n }\n\n return ids\n}\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-accordion.js'\nimport { computed, ref } from 'vue'\nimport { useGenIdAttrs } from '../../composables/genId.js'\nimport { BsIconCaretDown, BsIcon } from '@wwtdev/bsds-icons-vue3'\n\nconst props = defineProps(propDefinitions)\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst containerRef = ref(null)\nconst isOpen = ref(false)\n\nconst [ containerId ] = useGenIdAttrs()\n\nconst contentId = computed(() => containerId.value + '-content')\nconst headingId = computed(() => containerId.value + '-title')\n\nconst openItemMatch = computed(() => {\n return (props.openItemId && props.openItemId === containerId.value) || props.openItem === true\n})\nconst showContent = computed(() => {\n return props.controlled ? openItemMatch.value : isOpen.value\n})\n\nfunction handleToggled() {\n emit('toggled', containerId.value)\n if (!props.controlled) isOpen.value = !isOpen.value\n}\n</script>\n\n<template>\n<div :id=\"containerId\" ref=\"containerRef\" class=\"bs-accordion\" data-component=\"bs-accordion\" :data-stacked=\"stacked\">\n <header part=\"header\" :data-open=\"showContent\">\n <button\n :aria-controls=\"contentId\"\n :aria-expanded=\"showContent\"\n class=\"bs-accordion-toggle\"\n type=\"button\"\n @click=\"handleToggled\"\n >\n <span v-if=\"icon || $slots.icon\" data-position=\"start\" style=\"display: inline-flex;\">\n <slot name=\"icon\">\n <BsIcon v-if=\"typeof icon === 'string'\" :name=\"icon\" />\n <component v-else :is=\"icon\" />\n </slot>\n </span>\n <span :id=\"headingId\">\n <slot name=\"header\">\n {{ headerText }}\n </slot>\n </span>\n <BsIconCaretDown size=\"md\" data-position=\"end\" />\n </button>\n </header>\n <div\n :aria-labelledby=\"headingId\"\n class=\"bs-accordion-content\"\n :data-open=\"showContent\"\n :id=\"contentId\"\n part=\"content\"\n role=\"region\"\n >\n <div>\n <slot />\n </div>\n </div>\n</div>\n</template>\n","/*\n Determines correct tag and attrs for components that can be rendered\n as <button> or <a> tags (e.g. Button, Pill, InlineTab, etc.)\n*/\n\nimport { unref, computed } from 'vue'\n\nexport function useButtonOrLink(props, defaultRootTag = 'button') {\n\n const safeProps = computed(() => unref(props))\n\n const rootTag = computed(() => safeProps.value.as || getTag(safeProps.value))\n\n const buttonOrLinkAttrs = computed(() => getAttrs(rootTag.value, safeProps.value))\n\n function getTag(myProps) {\n const tagsByProp = { linkTo: 'a', href: 'a', onClick: 'button' }\n const foundProp = Object.keys(tagsByProp).find(prop => myProps[prop])\n return tagsByProp[foundProp] || defaultRootTag\n }\n\n function getHref(myProps) {\n if (myProps.linkTo && typeof myProps.linkTo === 'object') {\n return props.router?.resolve(props.linkTo)?.path || ''\n }\n return myProps.linkTo || myProps.href\n }\n\n function getAttrs(tag, myProps) {\n const isLink = tag === 'a'\n const isButton = tag === 'button'\n\n const disableClick = event => {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return {\n type: isButton ? (myProps.type || 'button') : undefined,\n disabled: isButton ? myProps.disabled : undefined,\n href: isLink ? getHref(myProps) : undefined,\n // on an <a>: when disabled, prevent the click, in order to mimic native <button> behavior\n // did not do this via css pointer-events: none, because want BsTooltips to still work on disabled <a>\n ...(isLink && myProps.disabled && { 'aria-disabled': true, tabindex: -1, onClick: disableClick })\n }\n }\n\n return { rootTag, buttonOrLinkAttrs }\n}\n","import { computed, unref } from 'vue'\n\nexport function useClientRouter(props) {\n\n const propUrl = computed(() => {\n const safeProps = unref(props)\n if (safeProps.linkTo && typeof safeProps.linkTo === 'object') {\n return safeProps.router?.resolve(safeProps.linkTo)?.path || ''\n }\n return safeProps.linkTo || safeProps.href || ''\n })\n\n const hrefIsRelative = computed(() => propUrl.value?.startsWith?.('/') || false)\n\n const routeTo = computed(() => {\n const safeProps = unref(props)\n return hrefIsRelative.value && safeProps.router?.navigateTo || safeProps.router?.push || null\n })\n\n\n function onLinkClick(e) {\n const safeProps = unref(props)\n\n if (safeProps.disabled) {\n e.preventDefault()\n e.stopImmediatePropagation()\n return\n }\n if (!propUrl.value || !routeTo.value) return\n\n const anchorEl = e.target.closest('a')\n if (anchorEl.href === `${window.location.origin}${propUrl.value}`) {\n e.preventDefault()\n routeTo.value(propUrl.value)\n }\n }\n return { onLinkClick }\n}\n","import { ref, onMounted, watch, computed, warn } from 'vue'\n\n/**\n * Notifies about the usage of a deprecated prop.\n *\n * @param {object} props Props object.\n * @param {string} propName Deprecated prop name.\n * @param {string} [newPropName] Replacement prop name. If not provided, the\n * warning will not include a suggestion for a new prop.\n * @param {string} [customMessage] Custom message to display in the warning.\n */\nexport function useDeprecatedProp(props, propName, newPropName, customMessage) {\n if (props[propName] !== undefined) {\n let warning = `[Deprecated] The prop \"${propName}\" is deprecated and will be removed in future versions.`\n if (newPropName) {\n warning += ` Please use \"${newPropName}\" instead.`\n }\n if (customMessage) {\n warning += ` ${customMessage}`\n }\n warn(warning)\n }\n}\n\n/**\n * Returns a computed property which returns the new or deprecated prop value.\n *\n * @param {object} props Props object.\n * @param {string} propName Deprecated prop name.\n * @param {string} newPropName Replacement prop name.\n * @returns {computed} Computed property that returns the value of the\n * deprecated prop or the new prop.\n */\nexport function useDeprecatedPropActual(props, propName, newPropName) {\n return computed(() => props[propName] || props[newPropName])\n}\n\n/**\n * Helps handle deprecated transition props.\n *\n * @param {object} props Props object.\n * @returns {ref} transition Ref that indicates the transition state.\n */\nexport function useDeprecatedTransition(props) {\n const transition = ref(false)\n\n onMounted(() => {\n // @Deprecated - Remove 'enterControlled' and 'enterTrigger' in future release\n if (props.enterControlled) {\n transition.value = props.enterTrigger\n } else {\n transition.value = props.shown\n }\n })\n\n watch(() => props.shown, (value) => {\n transition.value = value\n })\n\n // @Deprecated - Remove in future release\n watch(() => props.enterTrigger, (value) => {\n transition.value = value\n })\n\n // @Deprecated - Remove in future release\n watch(() => props.leaveTrigger, (value) => {\n // Nothing happened in previous version if 'leaveTrigger' is false\n if (value) {\n transition.value = false\n }\n })\n\n return { transition }\n}\n","<script setup>\nimport { computed, useAttrs, useSlots, unref } from 'vue'\nimport { useButtonOrLink } from '../../composables/buttonOrLink.js'\nimport { useClientRouter } from '../../composables/clientRouter.js'\nimport { useDeprecatedProp } from '../../composables/deprecated.js'\nimport { BsIcon, BsIconCaretLeft, BsIconCaretRight, BsIconSmallCaretLeft, BsIconSmallCaretRight } from '@wwtdev/bsds-icons-vue3'\nimport { propDefinitions } from './defs-circle-button.js'\n\n// Props\nconst props = defineProps(propDefinitions)\nuseDeprecatedProp(props, 'router', undefined, 'If client-side rendering is desired, use \\'RouterLink\\' or \\'NuxtLink\\' instead.')\n\nconst $slots = useSlots()\nconst { rootTag, buttonOrLinkAttrs } = useButtonOrLink(props)\nconst { onLinkClick } = useClientRouter(props)\n\n// Computed Properties\nconst accessibleLabelAttr = computed(() => {\n if (isTextBtn.value) return {};\n if (props.href) return { title: props.label }\n return { \"aria-label\": props.label }\n})\n\nconst hoverDirection = computed(() => {\n if (!props.hoverEffect) return undefined;\n return props.iconPosition\n})\n\nconst iconComputed = computed(() => {\n if (props.icon) {\n return props.icon\n }\n\n if (props.iconPosition === 'left') {\n if (props.textBtn || props.size === 'sm') {\n return BsIconSmallCaretLeft\n } else {\n return BsIconCaretLeft\n }\n } else {\n if (props.textBtn || props.size === 'sm') {\n return BsIconSmallCaretRight\n } else {\n return BsIconCaretRight\n }\n }\n})\n\nconst isTextBtn = computed(() => props.textBtn || !!$slots?.default)\n\nconst textLeft = computed(() => isTextBtn.value && props.iconPosition !== \"left\")\n\nconst textRight = computed(() => isTextBtn.value && props.iconPosition === \"left\")\n\nconst variantPrefixed = computed(() => props.variant ? `color-${props.variant}` : undefined)\n</script>\n\n<template>\n <component\n :is=\"rootTag\"\n class=\"bs-circle-button\"\n :data-disabled=\"disabled\"\n :data-direction=\"hoverDirection\"\n :data-ghost=\"ghostBtn || undefined\"\n :data-size=\"size || undefined\"\n :data-text=\"isTextBtn || undefined\"\n :data-variant=\"variantPrefixed\"\n data-component=\"bs-circle-button\"\n v-bind=\"{ ...buttonOrLinkAttrs, ...accessibleLabelAttr }\"\n @click=\"onLinkClick\"\n >\n <span v-if=\"textLeft\">\n <slot>\n {{ label }}\n </slot>\n </span>\n <span class=\"bs-circle-button-icon\" role=\"presentation\">\n <slot name=\"icon\">\n <BsIcon v-if=\"typeof iconComputed === 'string'\" :name=\"iconComputed\" />\n <component v-else :is=\"iconComputed\" />\n </slot>\n </span>\n <span v-if=\"textRight\">\n <slot>\n {{ label }}\n </slot>\n </span>\n </component>\n</template>\n\n","<script setup>\nimport BsCircleButton from '../circle-button/BsCircleButton.vue'\nimport { BsIconSmallCaretLeft, BsIconSmallCaretRight } from '@wwtdev/bsds-icons-vue3'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\n// Props\nconst props = defineProps({\n direction: {\n type: String,\n validator: val => ['left', 'right'].includes(val),\n default: 'right',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ghostBtn: {\n type: Boolean,\n default: false,\n },\n hoverEffect: {\n type: Boolean,\n default: true,\n },\n label: {\n type: String,\n },\n linkTo: {\n type: [String, Object]\n },\n router: {},\n size: {\n type: String,\n validator: val => ['', 'sm', 'xs', 'xxs'].includes(val),\n default: '',\n },\n // DEPRECATED VARIANTS\n // - blue -> primary\n // - purple -> positive\n // - orange -> warning\n // - red -> negative\n // - royal -> accent-1\n // - pink -> accent-3\n variant: {\n type: String,\n validator: val => ['', 'primary', 'positive', 'warning', 'negative', 'accent-1', 'accent-2', 'accent-3', 'blue', 'pink', 'purple', 'red', 'royal', 'white', 'orange'].includes(val),\n default: '',\n },\n})\n\nuseDeprecatedProp(props, 'router', undefined, 'If client-side rendering is desired, use \\'RouterLink\\' or \\'NuxtLink\\' instead.')\n\n</script>\n\n<template>\n <BsCircleButton\n :disabled=\"disabled\"\n :ghost-btn=\"ghostBtn\"\n :hover-effect=\"hoverEffect\"\n :icon-position=\"direction\"\n :label=\"label\"\n :link-to=\"linkTo\"\n :router=\"router\"\n :size=\"size\"\n text-btn\n :variant=\"variant\"\n >\n <template #icon>\n <BsIconSmallCaretRight v-if=\"direction == 'right'\" />\n <BsIconSmallCaretLeft v-else />\n </template>\n <template #default>\n <slot>\n {{ label }}\n </slot>\n </template>\n </BsCircleButton>\n</template>\n\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-alert.js'\nimport { BsIconCircleExclamation, BsIconClose, BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport BsCaretTextButton from '../caret-text-button/BsCaretTextButton.vue'\nimport { computed } from 'vue'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps(propDefinitions)\n\nuseDeprecatedProp(props, 'actionRouter', undefined, 'If client-side rendering is desired, use \\'RouterLink\\' or \\'NuxtLink\\' instead.')\n\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst buttonVariant = computed(() => {\n switch (props.variant) {\n case 'success':\n return 'purple'\n case 'warning':\n return 'orange'\n case 'negative':\n return 'red'\n default:\n return 'blue'\n }\n})\n\nconst shouldUseDirectLink = computed(() => {\n if (props.actionLinkTo) {\n if (typeof props.actionLinkTo === 'object') {\n return false\n }\n if (props.actionLinkTo.startsWith('http')) {\n return true\n }\n return false\n }\n return true\n})\n\n</script>\n\n<template>\n<div\n class=\"bs-alert\"\n :data-horizontal=\"horizontal ? 'true' : undefined\"\n :data-variant=\"variant\"\n role=\"alert\"\n>\n <div class=\"bs-alert-icon\">\n <slot name=\"icon\">\n <template v-if=\"icon\">\n <BsIcon v-if=\"typeof icon === 'string'\" :name=\"icon\" size=\"auto\" />\n <component v-else :is=\"icon\" size=\"auto\" />\n </template>\n <BsIconCircleExclamation v-else size=\"auto\" />\n </slot>\n </div>\n\n <div class=\"bs-alert-title\">\n <slot name=\"title\">\n {{ title }}\n </slot>\n </div>\n\n <div v-if=\"description || $slots.description\" class=\"bs-alert-description\">\n <slot name=\"description\">\n {{ description }}\n </slot>\n </div>\n\n <button\n v-if=\"!hideDismiss\"\n class=\"bs-alert-close\"\n aria-label=\"Close alert\"\n title=\"Close alert\"\n type=\"button\"\n @click=\"emit('close')\"\n >\n <BsIconClose />\n </button>\n\n <template v-if=\"actionLabel\">\n <BsCaretTextButton\n v-if=\"shouldUseDirectLink\"\n class=\"bs-alert-action\"\n :label=\"actionLabel\"\n :link-to=\"actionLinkTo\"\n size=\"sm\"\n :variant=\"buttonVariant\"\n @click=\"emit('action-click')\"\n />\n <component is=\"RouterLink\" v-else v-slot=\"{ href }\" :to=\"actionLinkTo\" custom>\n <BsCaretTextButton\n class=\"bs-alert-action\"\n :label=\"actionLabel\"\n :link-to=\"href\"\n size=\"sm\"\n :variant=\"buttonVariant\"\n @click=\"emit('action-click')\"\n />\n </component>\n </template>\n</div>\n</template>\n","export const propDefinitions = {\n\n // -- REQUIRED --\n\n inertSelector: {\n type: String,\n required: true,\n description: `Provide a css selector path, which targets the elements to mark as \"inert\" while the BsBackdrop is mounted. Internally, this selector will be used by document.querySelectorAll(). In HTML, the \"inert\" attribute is used to ensure that the browser \"ignores\" user input events for the element and its descendants, including focus events and events from assistive technologies. Example selector: body > *:not(.bs-popover-teleport-target)`,\n typeDef: 'string'\n },\n active: {\n type: Boolean,\n required: true,\n description: 'Whether or not the backdrop is active.',\n typeDef: 'boolean'\n },\n\n // -- OPTIONAL --\n\n transitionDuration: {\n type: [String, Number],\n default: 'var(--bs-transition-leisurely)',\n description: 'A custom duration for the fade transition. Provide as milliseconds or a css var, e.g. var(--my-custom-duration).',\n typeDef: 'string | number',\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {}\n","<template>\n <Transition name=\"bs-backdrop\" appear>\n <div\n v-if=\"active\"\n class=\"bs-backdrop\"\n :style=\"`--bs-backdrop-transition-duration: ${duration}`\"\n aria-hidden=\"true\" />\n </Transition>\n</template>\n\n<script setup>\nimport { onMounted, onUnmounted, watch, computed } from 'vue'\nimport { propDefinitions } from './defs-backdrop.js'\n\nconst props = defineProps(propDefinitions)\n\nlet elementsToMarkInert = []\nlet isScrollbar = false\nlet origScrollbarGutter\n\nconst duration = computed(() => {\n const val = props.transitionDuration.toString()\n if (val.startsWith('var(--') || val.startsWith('calc(') || val.endsWith('ms')) return val\n if (val.startsWith('--')) return `var(${val})`\n return `${val}ms`\n})\n\nwatch(() => props.active, () => {\n props.active ? activate() : deactivate()\n})\n\nonMounted(() => props.active && activate())\nonUnmounted(() => props.active && deactivate())\n\n// - - - - - - - - - - - - - - -\n\nfunction activate() {\n elementsToMarkInert = getElementsToMarkInert()\n isScrollbar = hasPageScrollbar()\n addInert()\n lockPageScroll()\n}\n\nfunction deactivate() {\n removeInert()\n unlockPageScroll()\n}\n\nfunction getElementsToMarkInert() {\n const nodes = document.querySelectorAll(props.inertSelector)\n return Array.from(nodes)\n}\n\nfunction hasPageScrollbar() {\n const el = document.scrollingElement\n if (!el) return\n return el.scrollHeight > el.clientHeight\n}\n\nfunction addInert() {\n elementsToMarkInert.forEach(el => el.setAttribute('inert', ''))\n}\n\nfunction removeInert() {\n elementsToMarkInert.forEach(el => el.removeAttribute('inert'))\n}\n\nfunction lockPageScroll() {\n if (isScrollbar) {\n origScrollbarGutter = getComputedStyle(document.scrollingElement)?.scrollbarGutter\n document.scrollingElement.style.scrollbarGutter = 'stable'\n }\n document.body.setAttribute('data-scroll', false)\n}\n\nfunction unlockPageScroll() {\n if (isScrollbar) {\n document.scrollingElement.style.scrollbarGutter = origScrollbarGutter\n }\n document.body.removeAttribute('data-scroll')\n}\n</script>","<script setup>\nimport { propDefinitions } from './defs-badge.js'\nimport { ref, computed } from 'vue'\n\n// Props\nconst props = defineProps(propDefinitions)\n\n// Element Ref\nconst hostRef= ref(null)\n\n// Computed Properties\nconst countFmt = computed(() => {\n if (props.count === 0) return \"0\";\n if (!props.count || props.dot) return null;\n return props.count > props.countMax ? props.countMax + \"+\" : props.count.toString();\n})\n\nconst labelFmt = computed(() => {\n const base = hostRef.value?.textContent?.trim() || \"\";\n const ct = countFmt.value ? countFmt.value + \" \" : \"\";\n if (!ct && !props.dot) return base;\n const sfx = props.count !== 1 ? \"s\" : \"\";\n return `${base ? `${base}, ` : ''}${ct}${props.label}${sfx}`;\n})\n\n</script>\n\n<template>\n <span\n ref=\"hostRef\"\n :aria-label=\"labelFmt\"\n :class=\"{ 'bs-badge': dot || countFmt }\"\n :data-badge-color=\"color\"\n data-component=\"bs-badge\"\n :data-count=\"countFmt\"\n :data-position=\"position\"\n :data-show-zero=\"showZero\"\n :data-variant=\"variant\"\n role=\"status\"\n >\n <slot v-if=\"variant !== 'notext'\"/>\n </span>\n</template>\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-banner.js'\nimport { ref } from 'vue'\nimport { BsIconWarning, BsIconClose, BsIcon } from '@wwtdev/bsds-icons-vue3'\n\nconst props = defineProps(propDefinitions)\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst isDismissed = ref(false)\n\nfunction handleDismiss() {\n isDismissed.value = true\n emit('dismiss')\n}\n</script>\n\n<template>\n <div\n v-if=\"!isDismissed\"\n role=\"alert\"\n class=\"bs-banner\"\n data-component=\"bs-banner\"\n :data-variant=\"variant\"\n >\n <div class=\"bs-banner-content\">\n <div class=\"bs-banner-warning-icon\">\n <slot name=\"icon\">\n <template v-if=\"icon\">\n <BsIcon v-if=\"typeof icon === 'string'\" :name=\"icon\" size=\"md\" />\n <component v-else :is=\"icon\" size=\"md\" />\n </template>\n <BsIconWarning v-else size=\"md\" />\n </slot>\n </div>\n <p>\n <slot />\n </p>\n <button type=\"button\" title=\"Close Banner\" @click=\"handleDismiss\">\n <BsIconClose />\n </button>\n </div>\n </div>\n</template>\n","<script setup>\nimport { propDefinitions } from './defs-button.js'\nimport { useButtonOrLink } from '@composables/buttonOrLink.js'\nimport { useClientRouter } from '@composables/clientRouter.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\nimport { usePopTriggers } from '@composables/popTriggers'\n\nconst props = defineProps(propDefinitions)\nuseDeprecatedProp(props, 'router', undefined, 'If client-side rendering is desired, use \\'RouterLink\\' or \\'NuxtLink\\' instead.')\nuseDeprecatedProp(props, 'textBtn', undefined, 'Use the \\'BsTextButton\\' component instead.')\n\nconst { rootTag, buttonOrLinkAttrs } = useButtonOrLink(props)\nconst { onLinkClick } = useClientRouter(props)\nconst { popAttrs, popSlotProps } = usePopTriggers(props)\n</script>\n\n<template>\n <component\n :is=\"rootTag\"\n :class=\"!unstyled && 'bs-button'\"\n data-component=\"bs-button\"\n :data-ghost=\"ghostBtn || undefined\"\n :data-size=\"size || undefined\"\n :data-text=\"textBtn || undefined\"\n :data-variant=\"variant || undefined\"\n v-bind=\"{ ...buttonOrLinkAttrs, ...popAttrs }\"\n @click=\"onLinkClick\">\n <slot v-bind=\"popSlotProps\" />\n </component>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue'\n\n// Props\nconst props = defineProps({\n /** The number of characters that have been entered by the user. */\n charCount: Number,\n /** Pass value to show character count and set the maximum number of characters that are allowed to be submitted by the user. */\n charMax: Number,\n /** Applies error styles to the helper text. */\n error: {\n type: Boolean,\n default: false\n },\n /** Pass error text. Will be shown if `error` is `true`. */\n errorMsg: String,\n /** Pass single helper text. */\n hint: String,\n /** Adds an id to associate a hint to an input. */\n hintId: String\n})\n\n// Computed Properties\nconst hintMsg = computed(() => {\n return props.error ? (props.errorMsg || props.hint) : props.hint\n})\n\n</script>\n\n<template>\n<div class=\"bs-field-details\" data-component=\"bs-field-details\">\n <span v-if=\"hintMsg\"\n :id=\"hintId\"\n class=\"bs-hint\"\n :data-error=\"error\"\n >\n {{ hintMsg }}\n </span>\n\n <span v-if=\"charMax\"\n aria-description=\"character count over character limit for the preceding text field\"\n class=\"bs-character-count\"\n :data-error=\"props.charCount > props.charMax\"\n >\n {{ props.charCount || '0' }} / {{ props.charMax }}\n </span>\n</div>\n</template>\n","<template>\n<label\n class=\"bs-label\"\n :class=\"hide ? 'bs-visually-hidden' : ''\"\n data-component=\"bs-label\"\n :data-disabled=\"disabled\"\n :for=\"for\"\n>\n <span>\n <slot />\n </span>\n <template v-if=\"required\">\n <span data-required=\"true\" aria-hidden=\"true\">&#32;*</span>\n <span class=\"bs-visually-hidden\">required</span>\n </template>\n</label>\n</template>\n\n<script setup>\nconst props = defineProps({\n disabled: { type: Boolean, default: false },\n for: { type: String, required: true },\n hide: { type: Boolean, default: false },\n required: { type: Boolean, default: false }\n})\n</script>\n","<script setup>\nimport { computed, useAttrs } from 'vue'\n\nconst props = defineProps({\n error: {\n type: Boolean,\n default: false\n },\n hintId: String,\n modelValue: [String, Number],\n value: [String, Number],\n})\nconst emit = defineEmits(['update:modelValue'])\nconst attrs = useAttrs()\n\nconst aria = computed(() => (\n { [props.error ? \"aria-errormessage\" : \"aria-describedby\"]: props.hintId }\n))\n\nfunction handleInput(e) {\n const val = attrs.type === 'number' ? parseInt(e.target['value']) : e.target['value']\n emit('update:modelValue', val)\n}\n</script>\n\n<template>\n<input\n class=\"bs-input\"\n data-component=\"bs-input\"\n :data-error=\"error\"\n :id=\"$attrs.id\"\n :value=\"value ?? modelValue\"\n @input=\"handleInput\"\n v-bind=\"aria\"\n/>\n</template>\n","<script setup>\nconst props = defineProps({\n autopad: { type: Boolean, default: false },\n autosizeIcons: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n error: { type: Boolean, default: false },\n multifocus: { type: Boolean, default: false },\n variant: { type: String, validator: (v) => ['inner-bordered', 'combobox'].includes(v) },\n})\n</script>\n<template>\n <div\n class=\"bs-input-addon\"\n data-component=\"bs-input-addon\"\n :data-autopad=\"autopad\"\n :data-autosize-icons=\"autosizeIcons\"\n :data-disabled=\"disabled\"\n :data-error=\"error\"\n :data-variant=\"variant\"\n :data-multifocus=\"multifocus\"\n >\n <slot />\n </div>\n</template>\n","<script setup>\nimport BsInput from '@components/input/BsInput.vue'\nimport BsInputAddon from '@components/input-addon/BsInputAddon.vue'\nimport { BsIconCalendar, BsIconClose } from '@wwtdev/bsds-icons-vue3'\n\ndefineProps({\n disabled: {\n type: Boolean,\n default: false,\n },\n error: {\n type: Boolean,\n default: false,\n },\n inputId: {\n type: String,\n required: true\n },\n listeners: {\n type: Object,\n default: () => ({})\n },\n modelValue: {\n type: [Date, Object, String],\n default: null\n },\n placeholder: {\n type: String,\n default: 'Choose your date'\n },\n required: {\n type: Boolean,\n default: false,\n },\n showClear: {\n type: Boolean,\n default: false,\n }\n})\n\nconst emit = defineEmits(['clear'])\n</script>\n<template>\n <BsInputAddon\n :disabled=\"disabled\"\n :error=\"error\"\n >\n <BsIconCalendar />\n <BsInput\n data-autowidth\n :disabled=\"disabled\"\n :id=\"inputId\"\n :model-value=\"modelValue\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n v-on=\"listeners\"\n />\n <button\n v-show=\"showClear\"\n aria-label=\"Clear\"\n type=\"button\"\n class=\"bs-calendar-clear-btn\"\n @click=\"$emit('clear')\"\n >\n <BsIconClose size=\"sm\" class=\"bs-text-black\" />\n </button>\n </BsInputAddon>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue'\nimport { BsIconCalendar, BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport BsInput from '@components/input/BsInput.vue'\nimport BsInputAddon from '@components/input-addon/BsInputAddon.vue'\nimport debounce from 'debounce'\n\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false,\n },\n error: {\n type: Boolean,\n default: false,\n },\n inputId: {\n type: String,\n required: true\n },\n inputValue: {\n type: Object,\n default: null\n },\n inputValueFmt: {\n type: String,\n },\n listeners: {\n type: Object,\n default: () => ({})\n },\n placeholder: {\n type: String,\n default: 'Choose your date'\n },\n required: {\n type: Boolean,\n default: false,\n },\n showClear: {\n type: Boolean,\n default: false\n }\n})\n\nconst emit = defineEmits(['ui-focusin', 'ui-input', 'clear'])\n\nconst hiddenStart = ref(null)\nconst hiddenEnd = ref(null)\n\nfunction dispatchRangeChange(el) {\n const ev = new Event('change', { bubbles: true, cancelable: true })\n el.dispatchEvent(ev)\n}\n\nfunction handleRangeChange(e) {\n const { value } = e.target\n const [ start, end ] = value.split(/ to | - /)\n\n hiddenStart.value.value = start || ''\n hiddenEnd.value.value = end || ''\n dispatchRangeChange(hiddenStart.value)\n dispatchRangeChange(hiddenEnd.value)\n}\n\nconst handleRangeChangeDebounced = debounce(handleRangeChange, 1000)\n\nfunction handleRangeInput(e) {\n emit('ui-input')\n handleRangeChangeDebounced(e)\n}\n\nconst startListener = computed(() => {\n if (props.listeners.start) {\n return props.listeners.start\n }\n return {}\n})\n\nconst endListener = computed(() => {\n if (props.listeners.end) {\n return props.listeners.end\n }\n return {}\n})\n</script>\n\n<template>\n <BsInputAddon\n :disabled=\"disabled\"\n :error=\"error\"\n >\n <BsIconCalendar />\n <BsInput\n data-autowidth\n :disabled=\"disabled\"\n :id=\"inputId\"\n :model-value=\"inputValueFmt\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n @focusin=\"$emit('ui-focusin')\"\n @input=\"handleRangeInput\"\n @change=\"handleRangeChange\"\n />\n <input\n ref=\"hiddenStart\"\n type=\"hidden\"\n :disabled=\"disabled\"\n :id=\"`${inputId}-start`\"\n :model-value=\"inputValue.start\"\n v-on=\"startListener\"\n />\n <input\n ref=\"hiddenEnd\"\n type=\"hidden\"\n :disabled=\"disabled\"\n :id=\"`${inputId}-end`\"\n :model-value=\"inputValue.end\"\n v-on=\"endListener\"\n />\n <button\n v-show=\"showClear\"\n aria-label=\"Clear\"\n type=\"button\"\n class=\"bs-calendar-clear-btn\"\n @click=\"$emit('clear')\"\n >\n <BsIconClose size=\"sm\" class=\"bs-text-black\" />\n </button>\n </BsInputAddon>\n</template>","import { onBeforeUnmount, onMounted } from 'vue'\n\n/** @param {import('vue').Ref<HTMLElement>} containerRef template ref on el wrapping VDatePicker */\nexport function useCalendarWorkaround(containerRef) {\n /**\n * @param {HTMLElement} el\n * @returns {boolean}\n */\n function isNavBtn(el) {\n return (\n el?.classList?.contains?.('vc-arrow') &&\n (el.classList.contains('vc-prev') || el.classList.contains('vc-next'))\n )\n }\n\n /**\n * @param {KeyboardEvent[\"key\"]} key\n * @returns {boolean}\n */\n function isSpaceOrEnter(key) {\n return key === ' ' || key === 'Spacebar' || key === 'Enter'\n }\n\n /** @param {KeyboardEvent} e */\n function keydownWorkaround(e) {\n if (isNavBtn(e?.target) && isSpaceOrEnter(e?.key)) {\n e.preventDefault()\n }\n }\n\n onMounted(() => {\n containerRef.value?.addEventListener?.('keydown', keydownWorkaround)\n })\n\n onBeforeUnmount(() => {\n containerRef.value?.removeEventListener?.('keydown', keydownWorkaround)\n })\n}\n","import { onBeforeMount, onBeforeUnmount, watch } from 'vue'\n\nexport function useMatchMedia(query, handlerFn, watchList = []) {\n let mediaQuery\n\n onBeforeMount(() => {\n mediaQuery = window.matchMedia(query)\n mediaQuery.addEventListener('change', handlerFn)\n handlerFn(mediaQuery)\n })\n\n onBeforeUnmount(() => {\n mediaQuery.removeEventListener('change', handlerFn)\n mediaQuery = null\n })\n\n if (watchList.length) {\n watch(watchList, () => handlerFn(mediaQuery))\n }\n}\n","import { useAttrs, computed, unref } from 'vue'\n\nexport function useFilterAttrs(keysToFilter = []) {\n\n const attrs = useAttrs()\n\n const isFilterKey = key => unref(keysToFilter).includes(key)\n\n const attrEntries = computed(() => Object.entries(attrs))\n\n const filtered = computed(() => {\n return Object.fromEntries(\n attrEntries.value.filter(([key]) => isFilterKey(key))\n )\n })\n\n const remaining = computed(() => {\n return Object.fromEntries(\n attrEntries.value.filter(([key]) => !isFilterKey(key))\n )\n })\n\n return { filtered, remaining }\n}","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-calendar.js'\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { DatePicker as VDatePicker } from 'v-calendar'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsLabel from '../label/BsLabel.vue'\nimport BsInputDateSingle from './internal/BsInputDateSingle.vue'\nimport BsInputDateRange from './internal/BsInputDateRange.vue'\nimport { useCalendarWorkaround } from '@composables/calendarWorkaround.js'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useMatchMedia } from '@composables/matchMedia.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport 'v-calendar/style.css'\n\nconst MQ = '(min-width: 752px)'\n\nconst props = defineProps(propDefinitions)\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst calendar = ref(null)\nconst columns = ref(1)\nconst container = ref(null)\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\nconst steps = ref(1)\n\n// These fall outside the scope of this component's API but\n// can be passed through to v-calendar if needed... Do we need this? Not sure.\ndefineOptions({ inheritAttrs: false })\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\nconst disabledDatesComputed = computed(() =>\n props.exclusiveDates?.length\n ? getBlackoutDates(props.exclusiveDates)\n : props.disabledDates\n)\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst modifiers = computed(() => ({ range: props.isRange }))\nconst showClearBtn = computed(() => props.showClear && props.modelValue && !props.disabled)\nconst showFieldDetails = computed(() => Boolean(props.error && props.errorMsg || props.hint))\nconst stepRef = computed(() => props.step)\nconst variantRef = computed(() => props.variant)\n\nuseCalendarWorkaround(container) // Workaround for v-calendar bug - remove when fixed\nuseMatchMedia(\n MQ,\n (e) => columns.value = e?.matches && variantRef.value == '2-col' ? 2 : 1,\n [ variantRef ]\n)\nuseMatchMedia(\n MQ,\n (e) => steps.value = e?.matches && variantRef.value == '2-col' ? stepRef.value : 1,\n [ stepRef, variantRef ]\n)\n\nonMounted(() => {\n if (!props.inputMode) setTimeout(setNavButtonLabels, 100)\n})\n\nwatch(() => calendar.value?.popoverRef?.isVisible, (visible) => {\n if (visible) setTimeout(setNavButtonLabels, 100)\n})\n\nfunction formatInput(inputValue) {\n if (props.isRange && inputValue.start && inputValue.end) {\n return `${inputValue.start} to ${inputValue.end}`\n } else if (!props.isRange && inputValue) {\n return inputValue\n } else {\n return ''\n }\n}\n\nfunction getBlackoutDates(exclusiveDates) {\n const toDisable = []\n const ONE_DAY = 24 * 60 * 60 * 1000\n for (let i = 0; i < exclusiveDates.length; i++) {\n const date = exclusiveDates[i]\n if (i === 0) {\n toDisable.push({ start: null, end: new Date(date.getTime() - ONE_DAY) })\n }\n if (i > 0 && date.getTime() - exclusiveDates[i - 1].getTime() > ONE_DAY) {\n toDisable.push({\n start: new Date(exclusiveDates[i - 1].getTime() + ONE_DAY),\n end: new Date(date.getTime() - ONE_DAY),\n })\n }\n if (i === exclusiveDates.length - 1) {\n toDisable.push({ start: new Date(date.getTime() + ONE_DAY), end: null })\n }\n }\n return toDisable\n}\n\nfunction handleRangeBlur(e) {\n if (!props.isRange || container.value.contains(e.relatedTarget)) return\n calendar.value.hidePopover()\n}\n\nfunction setNavButtonLabels() {\n const prev = container.value.querySelector('button.vc-prev')\n const next = container.value.querySelector('button.vc-next')\n if (prev) prev.setAttribute('aria-label', 'Previous month')\n if (next) next.setAttribute('aria-label', 'Next month')\n}\n</script>\n<template>\n <div ref=\"container\"\n class=\"bs-calendar\"\n data-component=\"bs-calendar\"\n :data-range=\"isRange\"\n @focusout=\"handleRangeBlur\"\n v-bind=\"filtered\"\n >\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <VDatePicker\n ref=\"calendar\"\n :columns=\"columns\"\n :disabled-dates=\"disabledDatesComputed\"\n :max-date=\"maxDate\"\n :min-date=\"minDate\"\n mode=\"date\"\n :model-value=\"modelValue\"\n :model-modifiers=\"modifiers\"\n :popover=\"{ visibility: 'focus'}\"\n :rows=\"1\"\n :step=\"steps\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n >\n <template #default=\"{ inputValue, inputEvents, showPopover }\" v-if=\"inputMode\">\n\n <BsInputDateSingle v-if=\"!isRange\"\n :disabled=\"disabled\"\n :error=\"error\"\n :input-id=\"inputIdAttr\"\n :listeners=\"inputEvents\"\n :model-value=\"formatInput(inputValue)\"\n :placeholder=\"placeholder\"\n :show-clear=\"showClearBtn\"\n :required=\"required\"\n @clear=\"$emit('clear')\"\n />\n\n <BsInputDateRange v-else\n :disabled=\"disabled\"\n :error=\"error\"\n :input-id=\"inputIdAttr\"\n :input-value=\"inputValue\"\n :input-value-fmt=\"formatInput(inputValue)\"\n :listeners=\"inputEvents\"\n :placeholder=\"placeholder\"\n :show-clear=\"showClearBtn\"\n :required=\"required\"\n @ui-focusin=\"showPopover\"\n @ui-input=\"showPopover\"\n @clear=\"$emit('clear')\"\n />\n\n </template>\n </VDatePicker>\n <BsFieldDetails v-if=\"showFieldDetails\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint\"\n :hint-id=\"hintId\"\n />\n </div>\n</template>\n\n<style>\n/* ------------- Input/Toggle ------------- */\n\n.bs-calendar :where(.bs-input-addon .bs-icon) {\n padding-inline: .75rem .5rem;\n width: 2.25rem;\n}\n\n.bs-calendar :where(.bs-input-addon input) {\n padding-inline-start: 0;\n}\n\n/* ------------- Calendar Base + Container ------------- */\n\n.bs-calendar {\n --bs-cal-color: var(--bs-ink-base);\n --bs-cal-focus-ring-color: var(--bs-primary-base-fixed);\n --bs-cal-highlight-content-hover-color: var(--bs-neutral-dark);\n --bs-cal-radius: 0px;\n --bs-cal-text-sm: 0.875rem;\n --bs-cal-weekday-color: var(--bs-ink-light);\n --bs-cal-width-day: auto;\n --bs-cal-width: 100%;\n\n --bs-cal-day-padding: 0;\n --bs-cal-day-bg-selected: var(--bs-primary-base-fixed);\n --bs-cal-day-bg-betweens: var(--bs-primary-lightest);\n --bs-cal-day-bg-tentative-start: var(--bs-primary-base-fixed);\n --bs-cal-day-hover-bg: var(--bs-primary-lightest);\n --bs-cal-day-hover-bg-betweens: var(--bs-primary-light);\n --bs-cal-day-hover-bg-selected: var(--bs-primary-medium);\n}\n\n.bs-calendar :is(.vc-popover-content-wrapper, .vc-light, .vc-dark),\n.bs-calendar :is(.vc-popover-content-wrapper, .vc-light, .vc-dark) * {\n --vc-bg: var(--bs-bg-base-to-light);\n --vc-color: var(--bs-cal-color); /* Text color */\n --vc-day-content-disabled-color: var(--bs-ink-disabled); /* Disabled date text color */\n --vc-day-content-hover-bg: var(--bs-cal-day-hover-bg); /* Day hover bg color */\n --vc-focus-ring: 0 0 0 2px var(--bs-cal-focus-ring-color); /* Focus ring box shadow */\n --vc-font-family: 'Roobert', sans-serif;\n --vc-font-medium: var(--vc-font-normal);\n --vc-header-arrow-color: var(--bs-ink-base); /* Nav Arrow color */\n --vc-header-arrow-hover-bg: var(--bs-bg-medium); /* Nav Arrow hover bg color */\n --vc-header-title-color: var(--bs-ink-base);\n --vc-highlight-light-bg: var(--bs-cal-day-bg-betweens); /* Bg Color for dates between start and end date */\n --vc-highlight-light-content-color: var(--bs-ink-base); /* Text color for dates between start and end date */\n --vc-highlight-outline-bg: var(--bs-cal-day-bg-tentative-start); /* Bg color for Start and End UNCONFIRMED dates */\n --vc-highlight-outline-border: transparent ;\n --vc-highlight-outline-color: var(--bs-ink-primary);\n --vc-highlight-outline-content-color: var(--bs-ink-white);\n --vc-highlight-solid-bg: var(--bs-cal-day-bg-selected); /* Bg Color for SELECTED day */\n --vc-popover-content-border: transparent;\n --vc-rounded-lg: var(--bs-cal-radius);\n --vc-shadow-lg: var(--bs-shadow-contentMedium);\n --vc-text-sm: var(--bs-cal-text-sm);\n --vc-weekday-color: var(--bs-cal-weekday-color);\n}\n\n.bs-calendar :where(.vc-popover-content-wrapper, .vc-container, .vc-pane-layout) {\n width: var(--bs-cal-width);\n}\n\n/* Override focus ring and implement our own -- needed to accommodate the offset */\n\n.bs-calendar :where(.vc-day-content):is(:focus-visible, :focus-within, :focus) {\n box-shadow: none;\n}\n\n.bs-calendar :where(.vc-day-content):is(:focus-visible, :focus-within, :focus)::after {\n border-radius: 50%;\n border: 2px solid var(--bs-cal-focus-ring-color);\n bottom: auto;\n content: '';\n height: 2.375rem;\n left: auto;\n position: absolute;\n right: auto;\n top: auto;\n width: 2.375rem;\n z-index: 9999;\n}\n\n\n/* ------------- Calendar Header Row ------------- */\n\n.bs-calendar :where(.vc-header) {\n margin-block-start: 1.5rem;\n padding-inline: 1.5rem;\n}\n\n.bs-calendar :where(.vc-title) {\n font-size: inherit;\n}\n\n/* ------------- Calendar Rows ------------- */\n\n.bs-calendar :where(.vc-weeks) {\n padding-block: 1rem 1.5rem;\n padding-inline: 1rem;\n}\n\n/* ------------- Calendar Cells (Days, Weekday Letters) ------------- */\n\n.bs-calendar :where(.vc-weekday, .vc-day) {\n height: 2rem;\n padding-inline: var(--bs-cal-day-padding);\n width: var(--bs-cal-width-day);\n}\n\n.bs-calendar :where(.vc-highlight-content-light) {\n font-weight: var(--vc-font-medium);\n}\n\n.bs-calendar :where(.vc-highlight-content-light:hover) {\n color: var(--bs-cal-highlight-content-hover-color);\n}\n\n.bs-calendar :where(.vc-day:focus-within) {\n z-index: 10;\n}\n\n/* ------------- Calendar Day Content Circle (appears on hover, selected, focus, etc) ------------- */\n.bs-calendar :where(.vc-day-content, .vc-highlight) {\n height: 2rem;\n line-height: 2rem;\n width: 2rem;\n}\n\n/* Hover bg color on SELECTED date */\n.bs-calendar .vc-highlights ~ :where(.vc-day-content) {\n --vc-day-content-hover-bg: var(--bs-cal-day-hover-bg-selected);\n}\n\n/* Hover bg color on dates between start and end date */\n.bs-calendar .vc-highlights:where(:has(.vc-highlight-base-middle)) ~ :where(.vc-day-content) {\n --vc-day-content-hover-bg: var(--bs-cal-day-hover-bg-betweens);\n}\n\n/* ------------- Disabled dates ------------- */\n.bs-calendar :where(.vc-disabled, [aria-disabled=\"true\"]) {\n --bs-cal-day-hover-bg: transparent;\n --bs-cal-focus-ring-color: var(--bs-ink-disabled); /* Maybe - clear this w/ design */\n}\n\n\n/* ------------- Dark mode ------------- */\n\n:where(.dark) .bs-calendar {\n --bs-cal-color: var(--bs-white);\n --bs-cal-day-bg-betweens: var(--bs-accent-1-light);\n --bs-cal-day-bg-selected: var(--bs-accent-1-base);\n --bs-cal-day-bg-tentative-start: var(--bs-accent-1-base);\n --bs-cal-day-hover-bg-betweens: var(--bs-accent-1-medium);\n --bs-cal-day-hover-bg-selected: var(--bs-secondary-base);\n --bs-cal-day-hover-bg: var(--bs-accent-1-medium);\n --bs-cal-highlight-content-hover-color: var(--bs-ink-base);\n --bs-cal-weekday-color: var(--bs-white);\n}\n\n/* ------------- Clear button ------------- */\n\n.bs-calendar-clear-btn {\n background-color: inherit;\n border-color: transparent;\n color: inherit;\n cursor: pointer;\n font-family: inherit;\n font-size: var(--bs-text-base);\n height: 100%;\n padding: var(--bs-space-0);\n position: relative;\n text-decoration: none;\n}\n.bs-calendar-clear-btn:focus {\n border-radius: .25rem;\n box-shadow: var(--focus-border) 0px 0px 0px 1px inset;\n z-index: 1;\n}\n\n/* ------------- Tablet/Destkop styles ------------- */\n@media (min-width: 752px) {\n .bs-calendar {\n --bs-cal-day-padding: 0.5rem;\n --bs-cal-radius: 0.25rem;\n --bs-cal-text-sm: 1.125rem;\n --bs-cal-width: max-content;\n --bs-cal-width-day: 3rem;\n }\n}\n</style>\n","<script setup>\nimport BsCircleButton from '../circle-button/BsCircleButton.vue'\nimport { BsIconCaretLeft, BsIconCaretRight } from '@wwtdev/bsds-icons-vue3'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\n// Props\nconst props = defineProps({\n direction: {\n type: String,\n validator: val => ['left', 'right'].includes(val),\n default: 'right',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ghostBtn: {\n type: Boolean,\n default: false,\n },\n hoverEffect: {\n type: Boolean,\n default: true,\n },\n label: {\n type: String,\n required: true,\n },\n linkTo: {\n type: [String, Object],\n },\n router: {},\n size: {\n type: String,\n validator: val => ['sm'].includes(val),\n },\n})\n\nuseDeprecatedProp(props, 'router', undefined, 'If client-side rendering is desired, use \\'RouterLink\\' or \\'NuxtLink\\' instead.')\n\n</script>\n\n<template>\n <BsCircleButton\n :disabled=\"disabled\"\n :ghost-btn=\"ghostBtn\"\n :hover-effect=\"hoverEffect\"\n :icon-position=\"direction\"\n :label=\"label\"\n :link-to=\"linkTo\"\n :router=\"router\"\n :size=\"size\"\n :text-btn=\"false\"\n >\n <template #icon>\n <BsIconCaretRight v-if=\"direction == 'right'\" />\n <BsIconCaretLeft v-else />\n </template>\n </BsCircleButton>\n</template>\n\n","<script setup>\n/**\n * @typedef {import('../Types.vue').Chart.Dataset} ChartDataset\n *\n * @typedef {Object} ChartTableRow\n * @property {string} rowLabel\n * @property {string} [rowLabelFmt]\n * @property {ChartTableCell[]} dataCells\n *\n * @typedef {Object} ChartTableCell\n * @property {string} datasetLabel\n * @property {number | string | null} value\n */\n\nimport { computed, onMounted, ref } from 'vue'\n\nconst props = defineProps({\n chartType: {\n type: String,\n required: true\n },\n data: {\n type: Array,\n required: true,\n },\n dataIdxLabels: {\n type: Array,\n default: () => []\n },\n tableTitle: {\n type: String,\n default: '',\n },\n xAxisType: {\n type: String,\n default: 'category',\n validator: (value) => ['category', 'linear', 'time'].includes(value),\n },\n xLabel: {\n type: String,\n default: 'X'\n },\n yLabel: {\n type: String,\n default: 'Y'\n },\n})\n\nconst mounted = ref(false)\n\nconst formatTimeVal = (timeVal) => {\n const date = new Date(timeVal)\n const timeStr = date.toTimeString().split(' ')[0]\n const dateStr = date.toDateString().split(' ').slice(1, 3).join(' ')\n return `${timeStr} (${dateStr})`\n}\n\nconst altLayout = computed(() => !props.dataIdxLabels?.length)\n\n/**\n * @param {ChartDataset[]} datasets\n * @returns {ChartTableRow[]}\n */\nfunction getBasicRows(datasets) {\n try {\n return datasets.map(ds => {\n const rowLabel = ds.label\n let dataCells = []\n // e.g., { x: 'Jan', y: 140 } - not guaranteed to have 1 data pt for every x tick\n if (ds.data.some(it => it?.x && it?.y)) {\n const xTickToYValue = ds.data.reduce((acc, d) => {\n acc[d.x] = d.y\n return acc\n }, {})\n dataCells = props.dataIdxLabels.map((tickPtLabel) => {\n const yValue = xTickToYValue[tickPtLabel] ?? null\n return { value: yValue }\n })\n } else {\n // e.g. just a number - should be 1 data pt for every x tick\n dataCells = ds.data.map((d) => ({ value: d }))\n }\n return { rowLabel, dataCells }\n })\n } catch(err) {\n return []\n }\n}\n\n/**\n * @param {ChartDataset[]} datasets\n * @returns {ChartTableRow[]}\n */\nfunction getAltRows(datasets) {\n try {\n const consolidatedIndices = datasets.reduce((acc, ds) => {\n const toAdd = ds.data.map(d => d?.x)\n return [ ...acc, ...toAdd ]\n }, [])\n\n const uniqueIndices = Array.from(new Set(consolidatedIndices))\n if (props.xAxisType === 'time' || props.xAxisType === 'linear') {\n uniqueIndices.sort((a,b) => {\n if (typeof a === 'string' && typeof b === 'string') {\n a = a.toLowerCase()\n b = b.toLowerCase()\n }\n if (a < b) return -1\n if (a > b) return 1\n return 0\n })\n }\n\n const rows = uniqueIndices.map((idx) => {\n const row = { rowLabel: idx }\n const rowData = []\n datasets.forEach((ds) => {\n const cell = { datasetLabel: ds.label }\n const dataPt = ds.data.find((d) => d.x === idx)\n cell.value = dataPt ? dataPt.y : null\n rowData.push(cell)\n })\n row.dataCells = rowData\n if (props.xAxisType === 'time') {\n row.rowLabelFmt = formatTimeVal(idx)\n }\n return row\n })\n\n return rows\n } catch(err) {\n return []\n }\n}\n\nconst tableRows = computed(() => altLayout.value ? getAltRows(props.data) : getBasicRows(props.data))\nconst table = computed(() => ({\n colspan: altLayout.value ? props.data.length + 1 : props.dataIdxLabels.length + 1,\n title: props.tableTitle,\n colHeadingFirst: altLayout.value ? props.xLabel : 'Dataset',\n colHeadings: altLayout.value ? props.data.map((ds) => ds.label) : props.dataIdxLabels,\n rows: tableRows.value\n}))\nconst tableReady = computed(() => mounted.value && !!tableRows.value?.length)\n\nonMounted(() => {\n mounted.value = true\n})\n</script>\n\n<template>\n<div class=\"bs-chart-table\" data-component=\"bs-chart-table\">\n <table :summary=\"table.title\" v-if=\"tableReady\">\n <thead>\n <tr>\n <th :colspan=\"table.colspan\">\n {{ table.title }}\n </th>\n </tr>\n <tr>\n <th scope=\"col\">\n {{ table.colHeadingFirst }}\n </th>\n <th v-for=\"colHeading in table.colHeadings\"\n :key=\"colHeading\"\n scope=\"col\"\n >\n {{ colHeading }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"row in table.rows\" :key=\"row.rowLabelFmt || row.rowLabel\">\n <th scope=\"row\">\n {{ row.rowLabelFmt || row.rowLabel }}\n </th>\n <td v-for=\"(c) in row.dataCells\"\n :key=\"`${row.rowLabelFmt || row.rowLabel}${c.datasetLabel}${c.value}`\"\n >\n {{ c.value }}\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n</template>\n","import { onMounted, onUnmounted } from 'vue'\n\n/**\n * Listens for keydown and calls the given function. Attaches the listener to\n * `document` by default unless `elRef` is given.\n *\n * @param {string[] | RegExp[]} keys Keys to listen for. This is the `key` property of the\n * KeyboardEvent (https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\n * @param {function} onKeydown Callback when keys are pressed.\n * @param {Ref} elRef Optional target ref where the listener will be\n * attached. If not given, will use `document`.\n */\nconst useKeydown = (keys, onKeydown, elRef = undefined) => {\n const handler = (ev) => {\n if (keys?.includes?.(ev.key) || keys?.some?.(k => k?.test?.(ev.key))) {\n onKeydown(ev)\n }\n }\n\n onMounted(() => {\n const element = elRef?.value ?? document\n element.addEventListener('keydown', handler)\n })\n\n onUnmounted(() => {\n const element = elRef?.value ?? document\n element.removeEventListener('keydown', handler)\n })\n}\nexport default useKeydown\n","import { onMounted, onBeforeUnmount, ref, watch } from 'vue'\nimport { Chart, Filler } from 'chart.js'\nimport 'chartjs-adapter-date-fns'\nimport _merge from 'lodash.merge'\nimport useKeydown from '../composables/keydown.js'\nimport { useMatchMedia } from '../composables/matchMedia.js'\nimport debounce from 'debounce'\n\n/**\n * @typedef {import('../components/Types.vue').Chart.ChartType} ChartType\n * @typedef {import('../components/Types.vue').Chart.Config} ChartConfiguration\n * @typedef {import('../components/Types.vue').Chart.ConfigOptions} ChartConfigOptions\n * @typedef {import('../components/Types.vue').Chart.ConfigPlugins} ChartConfigPlugins\n * @typedef {import('../components/Types.vue').Chart.ConfigData} ChartConfigData\n * @typedef {import('../components/Types.vue').Chart.Dataset} ChartDataset\n * @typedef {import('../components/Types.vue').Chart.Color} Color\n * @typedef {import('../components/Types.vue').Chart.LegendOptions} LegendOptions\n * @typedef {import('../components/Types.vue').Chart.Plugin} Plugin\n * @typedef {import('../components/Types.vue').Chart.ComponentProps} BsChartProps\n */\n\nconst TICK_SIZE = 16\nconst TICK_SIZE_LG = 20\n\n/**\n *\n * @param {ChartType} type\n * @param {BsChartProps} props\n * @returns {Object}\n * @property {Ref<null>} canvasRef - Place this ref on the canvas element.\n * @property {Ref<null>} legendListRef - Place this ref on the ul element.\n *\n */\nexport function useChart(type, props) {\n const canvasRef = ref(null)\n const isDesktop = ref(false)\n const legendListRef = ref(null)\n const BREAKPOINT_QUERY = '(min-width: 1166px)'\n const MOBILE_TICK_SIZES = { tickSize: TICK_SIZE }\n const DESKTOP_TICK_SIZES = { tickSize: TICK_SIZE_LG }\n let chart\n let chartConfig\n\n function createChartConfig(type, props) {\n let chartSpecificMethod\n switch (type) {\n case 'bar':\n chartSpecificMethod = 'setBarChartConfigs'\n break;\n case 'line':\n chartSpecificMethod = 'setLineChartConfigs'\n break;\n // TODO:\n // case 'pie':\n // case 'donut':\n default:\n throw new Error(`Unsupported chart type: ${type}`)\n }\n\n return new BsChartConfigBuilder()\n .setCommonConfigs(props)\n .setCustomOptions(props)\n [chartSpecificMethod](props)\n .setPlugins([getHtmlLegendPlugin(legendListRef), Filler])\n .build()\n }\n\n function handleLegendItemToggle(e) {\n e.preventDefault()\n e.stopImmediatePropagation()\n const li = e.target.closest('li')\n if (li && chart) {\n const { labelIndex, datasetIndex } = li.dataset\n type === 'pie' || type === 'doughnut' ?\n chart.toggleDataVisibility(labelIndex) :\n chart.setDatasetVisibility(datasetIndex, !chart.isDatasetVisible(datasetIndex))\n chart.update()\n e.preventDefault()\n e.stopImmediatePropagation()\n refocusLegendItem(datasetIndex, labelIndex)\n }\n }\n\n function refocusLegendItem(datasetIndex, labelIndex) {\n // must query again bc list items are destroyed/recreated on update\n const sel = `[data-dataset-index=\"${datasetIndex}\"][data-label-index=\"${labelIndex}\"]`\n const item = legendListRef.value.querySelector(sel)\n item?.focus?.()\n }\n\n function registerChart(...chartElements) {\n if (!chartConfig || !canvasRef.value) return\n Chart.register(...chartElements)\n Chart.defaults.font.family = \"'Roobert', sans-serif\"\n chart = new Chart(canvasRef.value, chartConfig)\n }\n\n const updateConfigOpts = debounce(function (props) {\n if (!chartConfig) return\n chartConfig.updateOptions(props)\n chart.options = chartConfig.options\n chart.update()\n }, 100)\n\n const updateConfigData = debounce(function (props) {\n if (!chartConfig) return\n chartConfig.updateData(props)\n chart.data = chartConfig.data\n chart.update()\n }, 100)\n\n useMatchMedia(\n BREAKPOINT_QUERY,\n (e) => isDesktop.value = e?.matches,\n [ isDesktop ]\n )\n\n onMounted(() => {\n try {\n chartConfig = createChartConfig(type, props)\n legendListRef.value?.addEventListener('click', handleLegendItemToggle)\n } catch(err) {\n console.error('Error creating chart config', err)\n chartConfig = null\n }\n })\n\n useKeydown([' ', 'Enter'], handleLegendItemToggle, legendListRef)\n\n onBeforeUnmount(() => {\n legendListRef.value?.removeEventListener('click', handleLegendItemToggle)\n chart?.destroy()\n })\n\n watch([\n () => props.customOptions,\n () => props.showTooltips,\n () => props.showXGrid,\n () => props.showYGrid,\n () => props.stacked,\n () => props.xLabel,\n () => props.yLabel,\n () => props.yMin,\n () => props.yMax\n ], () => updateConfigOpts(props))\n\n watch(\n isDesktop,\n (isDesktopMatched) => updateConfigOpts(_merge(\n {},\n props,\n isDesktopMatched ? DESKTOP_TICK_SIZES : MOBILE_TICK_SIZES\n ))\n )\n\n watch(\n [\n () => props.data,\n () => props.dataIdxLabels,\n ],\n () => updateConfigData(props),\n { deep: true }\n )\n\n return {\n canvasRef,\n legendListRef,\n registerChart,\n }\n}\n\n/**\n * @param {HTMLUListElement} legendList\n * @returns {Plugin}\n */\nconst getHtmlLegendPlugin = (legendListRef) => ({\n id: 'htmlLegend',\n afterUpdate(chart) {\n // Remove old legend items\n legendListRef.value.innerHTML = ''\n legendListRef.value.style.setProperty('--cjs-legend-padding-inline', `${chart.scales.x.left}px`)\n\n // Reuse the built-in legendItems generator\n const legendItems = chart.options.plugins.legend.labels.generateLabels(chart);\n\n legendItems.forEach(it => {\n const li = document.createElement('li');\n li.setAttribute('tabindex', '0')\n li.dataset.datasetIndex = it.datasetIndex\n li.dataset.labelIndex = it.index\n\n // Color box\n const boxSpan = document.createElement('span');\n boxSpan.style.setProperty('--legend-item-box-fill', it.fillStyle)\n boxSpan.style.setProperty('--legend-item-box-stroke', it.strokeStyle)\n\n // Text\n const text = document.createTextNode(it.text);\n const textContainer = document.createElement('p');\n textContainer.style.setProperty('--legend-item-text-color', 'var(--bs-ink-base)')\n textContainer.style.setProperty('--legend-item-text-decoration', it.hidden ? 'line-through' : 'none')\n textContainer.appendChild(text);\n\n li.appendChild(boxSpan);\n li.appendChild(textContainer);\n legendListRef.value.appendChild(li);\n });\n }\n});\n\n\n/**\n * @param {number} i\n * @returns {Color}\n *\n * @description per last design discussion, we do not want to allow custom colors.\n * That was a while back though - if changes, we can add a prop to allow custom colors and handle here.\n */\nfunction getBackgroundColor(i, initialDivider = 1) {\n const DEFAULT_COLORS = [\n [0, 134, 234], // 0086ea\n [227, 28, 121], // e31c79\n [130, 18, 196], // 8212c4\n [153, 207, 247], // 99cfff\n [243, 196, 168], // f3c4a8\n [238, 40, 42], // ee282a\n [22, 47, 180], // 162fb4\n [197, 204, 235], // c5cceb\n [28, 0, 135], // 1c0087\n [251, 85, 14], // fb550e\n [203, 192, 218], // cbc0da\n [29, 30, 72], // 1d1e48\n [248, 169, 170], // f8a9aa\n [164, 153, 207], // a499cf\n [99, 66, 145], // 634291\n [224, 197, 239], // e0c5ef\n [228, 94, 155] , // e45e9b\n [83, 101, 196], // 5365c4\n [246, 203, 224], // f6cbe0\n [161, 84, 208], // a154d0\n [241, 83, 85], // f15355\n [10, 11, 25], // 0a0b19\n [201, 202, 217], // c9cad9\n [85, 87, 117], // 555775\n ]\n\n const color = DEFAULT_COLORS[i % DEFAULT_COLORS.length]\n const divider = Math.floor(i / DEFAULT_COLORS.length) + initialDivider\n return `rgba(${color.toString()}, ${1 / divider})`\n}\n\n/**\n * @param {number} i\n * @returns {Color}\n */\nfunction getBorderColor(i) {\n // So far this is same as bg color across chart type designs. Subject to change.\n return getBackgroundColor(i)\n}\n\nfunction getCommonOptionsPermissive(chartProps) {\n return {\n maintainAspectRatio: false,\n plugins: {\n tooltip: {\n enabled: chartProps.tooltipsEnabled\n }\n },\n }\n}\n\nfunction getCommonOptionsStrict() {\n return {\n plugins: {\n legend: {\n display: false, // we use a custom, non-canvas legend\n },\n },\n responsive: true,\n }\n}\n\n/**\n *\n * @param {Object} propsPlus\n * @param {boolean} propsPlus.showXGrid\n * @param {boolean} propsPlus.showYGrid\n * @param {boolean} propsPlus.stacked\n * @param {string} propsPlus.xAxisType\n * @param {string} propsPlus.xLabel\n * @param {string} propsPlus.yLabel\n * @param {number} propsPlus.yMax\n * @param {number} propsPlus.yMin\n * @param {ChartConfigOptions} propsPlus.customOptions\n * @param {number} propsPlus.tickSize\n *\n * @returns\n */\nfunction getCartesianScaleOptions(propsPlus) {\n const {\n dataIdxLabels,\n showXGrid,\n showYGrid,\n stacked,\n xAxisType,\n xLabel,\n yLabel,\n yMax,\n yMin,\n customOptions,\n tickSize\n } = propsPlus\n const scaleOptions = {\n x: {\n grid: {\n display: showXGrid\n },\n offset: true,\n stacked,\n ticks: {\n font: {\n size: tickSize || TICK_SIZE\n }\n },\n title: {\n display: !!xLabel,\n text: xLabel,\n },\n type: xAxisType || 'category',\n },\n y: {\n beginAtZero: true,\n //grace: \"10%\", //TODO: maybe apply this, or take as prop\n grid: {\n display: showYGrid\n },\n stacked,\n suggestedMax: yMax,\n suggestedMin: yMin,\n ticks: {\n font: {\n size: tickSize || TICK_SIZE\n }\n },\n title: {\n display: !!yLabel,\n text: yLabel,\n },\n }\n }\n\n if (xAxisType === 'time' || customOptions?.scales?.x?.type === 'time') {\n // there's a third option, 'data', but it likely won't be used\n scaleOptions.x.ticks.source = dataIdxLabels?.length ? 'labels' : 'auto'\n scaleOptions.x.time = {\n tooltipFormat: 'dd MMM yyyy : h:mm bbb'\n }\n }\n\n return scaleOptions\n}\n\n\nclass BsChartConfig {\n/**\n * @param {Object} options\n * @param {ChartType} options.type\n * @param {ChartConfigData} options.data - datasets and labels.\n * @param {ChartConfigOptions} options.options\n * @param {ChartConfigPlugins} options.plugins\n */\n constructor({\n type,\n data,\n options,\n plugins\n }) {\n this.type = type\n this.data = {\n ...data,\n datasets: this.fmtDatasets(data.datasets)\n }\n this.options = options\n this.plugins = plugins\n }\n\n updateOptions(props) {\n const { showTooltips } = props\n this.options.plugins.tooltip.enabled = showTooltips\n }\n\n updateData(props) {\n this.data.datasets = this.fmtDatasets(props.data)\n this.data.labels = props.dataIdxLabels\n }\n\n fmtDatasets(datasets) {\n return datasets\n }\n}\n\nclass BsChartBarConfig extends BsChartConfig {\n constructor({ data, options, plugins }) {\n super({ type: 'bar', data, options, plugins })\n }\n\n fmtDatasets(datasets) {\n return datasets.map((dataset, i) => ({\n ...dataset,\n backgroundColor: getBackgroundColor(i),\n categoryPercentage: datasets.length > 1 ? .5 : .33\n }))\n }\n\n updateOptions(props) {\n super.updateOptions(props)\n const scaleOpts = getCartesianScaleOptions(props)\n const tickFontOpts = { x: { ticks: { font: scaleOpts.x.ticks.font }}, y: { ticks: { font: scaleOpts.y.ticks.font }} }\n const updatedOpts = _merge(\n {},\n this.options,\n { scales: scaleOpts },\n props.customOptions,\n getCommonOptionsStrict(),\n { scales: tickFontOpts }\n )\n this.options = updatedOpts\n }\n}\n\nclass BsChartLineConfig extends BsChartConfig {\n constructor({ data, options, plugins }) {\n super({ type: 'line', data, options, plugins })\n }\n\n fmtDatasets(datasets) {\n return datasets.map((dataset, i) => ({\n ...dataset,\n backgroundColor: getBackgroundColor(i, 2),\n borderColor: getBorderColor(i),\n borderWidth: 4\n }))\n }\n\n updateOptions(props) {\n super.updateOptions(props)\n const scaleOpts = getCartesianScaleOptions(props)\n const tickFontOpts = { x: { ticks: { font: scaleOpts.x.ticks.font }}, y: { ticks: { font: scaleOpts.y.ticks.font }} }\n const updatedOpts = _merge(\n {},\n this.options,\n { scales: scaleOpts },\n props.customOptions,\n getCommonOptionsStrict(),\n { scales: tickFontOpts }\n )\n this.options = updatedOpts\n }\n}\n\nexport class BsChartConfigBuilder {\n constructor() {\n return this\n }\n\n /**\n * @param {BsChartProps} chartProps\n * @returns {BsChartConfigBuilder}\n */\n setBarChartConfigs(chartProps) {\n this.type = 'bar'\n this.setCartesianAxesOpts(chartProps)\n return this\n }\n\n /**\n * @param {BsChartProps} chartProps\n * @returns {BsChartConfigBuilder}\n */\n setCommonConfigs(chartProps) {\n const { data } = chartProps\n this.commonOptionsBasic = getCommonOptionsPermissive(chartProps)\n this.commonOptionsStrict = getCommonOptionsStrict()\n this.datasets = data\n return this\n }\n\n setCustomOptions(chartProps) {\n this.customOptions = chartProps.customOptions\n return this\n }\n\n /**\n * @param {BsChartProps} chartProps\n * @returns {BsChartConfigBuilder}\n */\n setLineChartConfigs(chartProps) {\n this.type = 'line'\n this.setCartesianAxesOpts(chartProps)\n return this\n }\n\n /**\n * @param {Plugin[]} plugins\n * @returns {BsChartConfigBuilder}\n */\n setPlugins(plugins = []) {\n this.plugins = plugins\n return this\n }\n\n /**\n * @param {BsChartProps} chartProps\n * @returns {BsChartConfigBuilder}\n */\n setCartesianAxesOpts(chartProps) {\n const { dataIdxLabels } = chartProps\n this.dataIdxLabels = dataIdxLabels\n this.scalesOptions = getCartesianScaleOptions(chartProps)\n\n // always enforced\n this.commonOptionsStrict.scales = {\n x: { ticks: { font: { size: TICK_SIZE } } },\n y: { ticks: { font: { size: TICK_SIZE } } }\n }\n return this\n }\n\n build() {\n const optionsArg = {\n data: {\n datasets: this.datasets,\n labels: this.dataIdxLabels // TODO: || this.pieSliceLabels (or something)\n },\n options: _merge(\n {},\n this.commonOptionsBasic,\n {\n scales: this.scalesOptions\n },\n this.customOptions,\n this.commonOptionsStrict, // enforce a limited, opinionated base set for design system consistency\n ),\n plugins: this.plugins,\n type: this.type\n }\n\n switch (this.type) {\n case 'bar':\n return new BsChartBarConfig(optionsArg)\n case 'line':\n return new BsChartLineConfig(optionsArg)\n default:\n throw new Error(`Unsupported chart type: ${this.type}`)\n }\n }\n}\n","<script setup>\nimport { computed, onMounted } from 'vue'\nimport BsChartTable from '../chart-table/BsChartTable.vue'\nimport {\n BarController,\n BarElement,\n CategoryScale,\n Legend,\n LinearScale,\n TimeScale,\n Tooltip\n} from 'chart.js'\nimport { useChart } from '../../composables/chart.js'\n\n// Props\n/** Provide a title for the accessible text table representation of this chart. */\nconst props = defineProps({\n chartTitle: {\n type: String,\n default: '',\n },\n customOptions: {\n type: Object,\n default: () => ({}),\n },\n /** Array of datasets. */\n data: {\n type: Array,\n required: true,\n },\n /** Array of labels for each point along the X-Axis. */\n dataIdxLabels: {\n type: Array,\n default: () => [],\n },\n /** Pass `true` to show legend. */\n showLegend: {\n type: Boolean,\n default: true,\n },\n /** Pass `true` to show tooltips on hover. */\n showTooltips: {\n type: Boolean,\n default: true,\n },\n /** Pass `true` to show vertical gridlines. */\n showXGrid: {\n type: Boolean,\n default: false,\n },\n /** Pass `true` to show horizontal gridlines. */\n showYGrid: {\n type: Boolean,\n default: false,\n },\n /** Pass `true` to stack each dataset's data at a given index into a single column. */\n stacked: {\n type: Boolean,\n default: false,\n },\n xAxisType: {\n type: String,\n default: 'category',\n validator: (value) => ['category', 'linear'].includes(value),\n },\n /** Label for the X-Axis. */\n xLabel: {\n type: String,\n default: '',\n },\n /** Label for the Y-Axis. */\n yLabel: {\n type: String,\n default: '',\n },\n yMax: {\n type: Number,\n default: 0,\n },\n yMin: {\n type: Number,\n default: 0,\n },\n})\n\nconst { canvasRef, legendListRef, registerChart } = useChart('bar', props)\n\nconst title = computed(() => props.chartTitle || `${props.yLabel} / ${props.xLabel}`)\n\n// Lifecycle Hooks - Init Chart; Watchers\nonMounted(() => registerChart(\n BarController,\n BarElement,\n CategoryScale,\n LinearScale,\n Legend,\n TimeScale,\n Tooltip\n))\n</script>\n\n<template>\n<div class=\"bs-chart bs-chart-bar\" data-component=\"bs-chart-bar\">\n <figure>\n <div>\n <canvas\n :aria-label=\"title\"\n ref=\"canvasRef\"\n role=\"img\"\n ></canvas>\n </div>\n <div>\n <BsChartTable\n chart-type=\"bar\"\n :data=\"data\"\n :data-idx-labels=\"dataIdxLabels\"\n :table-title=\"title\"\n :x-axis-type=\"xAxisType\"\n :x-label=\"xLabel\"\n :y-label=\"yLabel\"\n ></BsChartTable>\n <figcaption\n :data-hidden=\"!showLegend\"\n >\n <ul ref=\"legendListRef\"></ul>\n </figcaption>\n </div>\n </figure>\n</div>\n</template>\n","<script setup>\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\nimport BsLabel from '@components/label/BsLabel.vue'\n\nconst props = defineProps({\n /** Sets the label. */\n /** @ex Task Completed */\n label: {\n type: String,\n },\n /** Sets the checked state. */\n checked: {\n type: Boolean,\n default: false\n },\n /** Sets the disabled state on the input. */\n disabled: {\n type: Boolean,\n default: false\n },\n /** Applies error styles to the input. */\n error: {\n type: Boolean,\n default: false\n },\n /** Sets the indeterminate state; i.e. partially checked. */\n indeterminate: {\n type: Boolean,\n default: false\n },\n /** Sets the required state on the input. */\n required: {\n type: Boolean,\n default: false\n },\n /** Sets the size of the input. */\n size: {\n type: String,\n validator: (value) => value === 'sm',\n },\n value: {\n type: [ String, Number, Object ]\n },\n /** Sets the `checked` state - `v-model` directive will use this; do not set explicitly. */\n modelValue: {\n type: [ Boolean, Array ]\n },\n // DEPRECATED\n inputId: { default: undefined }\n})\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\n\nconst emit = defineEmits(['update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen ] = useGenIdAttrs()\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Refs & Computed Properties\nconst inputEl = ref(null)\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst isChecked = computed(() => props.checked || isModelValueChecked.value)\nconst isIndeterminate = computed(() => props.indeterminate || props.checkedPartially)\nconst isVModelArray = computed(() => Array.isArray(props.modelValue) && props.value)\nconst isModelValueChecked = computed(() => (\n ( isVModelArray.value && props.modelValue.includes(props.value) ) ||\n ( typeof props.modelValue === 'boolean' && props.modelValue )\n))\n\nfunction setIndeterminate() {\n if (inputEl.value) inputEl.value.indeterminate = isIndeterminate.value && !isChecked.value\n}\n\nfunction doVModelSimple(checked) {\n emit('update:modelValue', checked)\n}\n\nfunction doVModelComplex(checked) {\n const newValue = [ ...props.modelValue ]\n checked ? newValue.push(props.value) : newValue.splice(newValue.indexOf(props.value), 1)\n emit('update:modelValue', newValue)\n}\n\nfunction onChange(e) {\n const { checked } = e.target\n isVModelArray.value ? doVModelComplex(checked) : doVModelSimple(checked)\n}\n\nwatch(isChecked, setIndeterminate)\nwatch(isIndeterminate, setIndeterminate)\n\nonMounted(setIndeterminate)\n\n</script>\n<template>\n <div class=\"bs-boolean\"\n data-component=\"bs-checkbox\"\n :data-disabled=\"disabled\"\n :data-error=\"error\"\n :data-size=\"size\"\n v-bind=\"filtered\"\n >\n <input\n ref=\"inputEl\"\n :checked=\"isChecked\"\n :data-error=\"error\"\n :disabled=\"disabled\"\n :id=\"$attrs.id || inputIdAttr\"\n :required=\"required\"\n :value=\"value || 'on'\"\n type=\"checkbox\"\n @change=\"onChange\"\n v-bind=\"remaining\"\n />\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n </div>\n</template>\n","<!--\n Used in BsPopover, but exists as its own thing in case\n consumers need/want to use it for custom layout cases.\n-->\n<template>\n <BsButton\n aria-label=\"Close\"\n class=\"bs-pop-x-button\"\n data-component=\"bs-pop-x-button\"\n unstyled>\n <slot>\n <BsIconClose aria-hidden=\"true\" />\n </slot>\n </BsButton>\n</template>\n\n<script setup>\nimport BsButton from '@components/button/BsButton.vue'\nimport { BsIconClose } from '@wwtdev/bsds-icons-vue3'\n</script>","/*\nCREATE & ADD A REUSABLE TELEPORT CONTAINER ELEMENT\n\nWhy create a container and not just Teleport to <body>?\nhttps://atfzl.com/articles/don-t-attach-tooltips-to-document-body/\n\nAlso, Vue docs recommend this approach as a \"Tip\" box in their SSR/Teleport docs:\nhttps://vuejs.org/guide/scaling-up/ssr.html#teleports\n\nThe isTeleportTargetMounted flag is needed, because Vue needs the Teleport target to be\nadded in onBeforeMount at the latest, yet Nuxt needs it to be added in onMounted to avoid\na hydration mismatch warning. So using onMounted plus the isTeleportTargetMounted flag\nas a v-if on <Teleport> resolves this conundrum. See usage in BsPopover.vue.\n*/\n\nimport { ref, onMounted, warn, computed } from 'vue'\n\nconst mountedTargetIds = ref({})\n\nexport function useCreateTeleportTarget(teleportTargetId) {\n\n if (!teleportTargetId) warn('[useCreateTeleportTarget]: Must provide an id for the created element.')\n\n const id = teleportTargetId.replace('#', '')\n\n onMounted(() => {\n\n // the getElementById check is mainly just to prevent any dupes caused by hot reload during local dev\n if (mountedTargetIds.value[id] || document.getElementById(id)) return\n\n const element = document.createElement('div')\n element.id = id\n document.body.appendChild(element)\n\n mountedTargetIds.value[id] = true\n })\n\n const isTeleportTargetMounted = computed(() => {\n return mountedTargetIds.value[id]\n })\n\n return {\n teleportTo: `#${id}`,\n isTeleportTargetMounted\n }\n}","// GLOBAL STORAGE\n// Store trap definitions and active traps so that\n// - Event listener can be removed on unmount\n// - The options can be updated/accessed\n// - We can assure that only one trap is active at a time\n// id: { el, handleKeydown, options }\nconst focusTraps = {}\n// id[]\nconst activeTraps = []\nlet id = 0\nconst datasetKey = 'bsFocusTrapId'\n\n/**\n * Builds the options for the focus trap.\n *\n * @param {Object} binding The binding object from the directive.\n * @returns {Object} The options for the focus trap.\n */\nfunction buildOptions(binding) {\n const options = {\n // Defaults\n active: true,\n preventFirstShiftTab: false,\n preventLastTab: false,\n selectorPrefix: '',\n // Actual values\n ...binding?.value || {},\n }\n\n const FOCUSABLE_ELEMENT_TAGS = [\n 'a[href]',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'area[href]',\n 'details',\n 'summary',\n '[tabindex]',\n '[contenteditable=\"true\"]',\n ]\n\n // Build selector\n let selector = ''\n FOCUSABLE_ELEMENT_TAGS.forEach((tag) => {\n selector += `${options.selectorPrefix}${tag}:not([disabled]):not([tabindex=\"-1\"]),`\n })\n // Remove trailing comma\n selector = selector.slice(0, -1)\n options.selector = selector\n\n return options\n}\n\n/**\n * Focus trap directive. Usage example:\n *\n * Static active state:\n * - `<div v-focus-trap></div>`\n *\n * Dynamic active state:\n * - `const options = { active: true }`\n * - `<div v-focus-trap=\"options\"></div>`\n *\n * Options:\n * - `active`: boolean - Whether the focus trap is active.\n * - `preventFirstShiftTab`: boolean - Whether to prevent the first shift tab\n * (likely use case is to catch the `'first-shift-tab'` event to handle\n * special behavior).\n * - `preventLastTab`: boolean - Whether to prevent the last tab (likely use\n * case is to catch the `'last-tab'` event to handle special behavior).\n * - `selectorPrefix`: string - Prefix for the focusable element selector.\n * Typical use case could be to include only a subset of focusable elements\n * within a larger container. For example, `.nav-body:not([inert]) `. Note\n * that an extra space may need to be added at the end for descendant\n * selectors.\n *\n * Events (emitted from target element):\n * - `'first-shift-tab'`: Emitted when the first shift tab is pressed.\n * - `'last-tab'`: Emitted when the last tab is pressed.\n */\nexport const vFocusTrap = {\n mounted(el, binding) {\n // ===== HELPERS =====\n function _handleFirstShiftTab(ev, lastElement, options) {\n ev.preventDefault()\n if (!options.preventFirstShiftTab) {\n // Wrap around to the last element\n lastElement.focus()\n }\n el.dispatchEvent(new Event('first-shift-tab'))\n }\n\n function _handleLastTab(ev, firstElement, options) {\n ev.preventDefault()\n if (!options.preventLastTab) {\n // Wrap around to the first element\n firstElement.focus()\n }\n el.dispatchEvent(new Event('last-tab'))\n }\n\n function _handleOutsideTab(ev, firstElement) {\n ev.preventDefault()\n // Current focus is outside the guard, so bring it in\n firstElement.focus()\n }\n\n // ===== ACTUAL HANDLER =====\n function handleKeydown(ev) {\n const trapId = Number(el.dataset[datasetKey])\n const { options } = focusTraps[trapId]\n const index = activeTraps.indexOf(trapId)\n // Only trap if active and the trap on top of the stack\n if (index === activeTraps.length - 1\n && options.active\n && ev.key === 'Tab') {\n // Find all focusable elements\n // Grabbing these every time since the DOM could change\n const focusableElements = el.querySelectorAll(options.selector)\n if (focusableElements.length > 0) {\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n // Handle actual tabbing\n if (document.activeElement === firstElement && ev.shiftKey) {\n _handleFirstShiftTab(ev, lastElement, options)\n } else if (document.activeElement === lastElement && !ev.shiftKey) {\n _handleLastTab(ev, firstElement, options)\n } else if (!el.contains(document.activeElement)) {\n _handleOutsideTab(ev, firstElement)\n }\n }\n }\n }\n\n // ===== INIT WORK =====\n const trapId = ++id\n el.dataset[datasetKey] = trapId\n window.addEventListener('keydown', handleKeydown)\n focusTraps[trapId] = { el, handleKeydown, options: buildOptions(binding) }\n if (focusTraps[trapId].options.active) {\n activeTraps.push(trapId)\n }\n },\n\n updated(el, binding) {\n const trapId = Number(el.dataset[datasetKey])\n const prevActive = focusTraps[trapId].options.active\n focusTraps[trapId].options = buildOptions(binding)\n // Special case for active state change\n if (prevActive !== focusTraps[trapId].options.active) {\n if (prevActive) {\n // Switching to inactive\n activeTraps.splice(activeTraps.indexOf(trapId), 1)\n } else {\n // Switching to active\n activeTraps.push(trapId)\n }\n }\n },\n\n unmounted(el) {\n const trapId = Number(el.dataset[datasetKey])\n window.removeEventListener('keydown', focusTraps[trapId].handleKeydown)\n delete focusTraps[trapId]\n activeTraps.splice(activeTraps.indexOf(trapId), 1)\n }\n}\n","import { ref, shallowRef, unref, watch } from 'vue'\nimport { usePop } from '@composables/pop.js'\n\n/* -- usePopHoverEvents Composable --\n\n What?\n - Sets up event delegation at the document level for the pop-hover events as well as\n the special BsTooltip usage options (drop into parent element or set an anchor)\n - Consumed by BsPopover.js\n\n Why?\n - We need to use event delegation for the pop hover events, to allow the \"anchor\" BsTooltip\n usage approach to work (since the anchor may not be in the DOM yet when the BsTooltip mounts).\n*/\n\nconst events = ['pointerover', 'pointerout', 'focusin', 'focusout']\n\nconst pop = usePop()\n\nconst usageCount = ref(0)\nconst activeEvent = shallowRef(null)\n\n// add listeners to the document only once, and only if needed\nwatch(() => usageCount.value > 0, isBeingUsed => {\n isBeingUsed ? addEventListeners() : removeEventListeners()\n})\n\nexport function usePopHoverEvents({ props, shouldListen = true }) {\n\n watch(() => unref(shouldListen), (newVal, _, onCleanup) => {\n if (!newVal) return\n ++usageCount.value\n onCleanup(() => --usageCount.value)\n }, { immediate: true })\n\n watch(activeEvent, (event, _, onCleanup) => {\n if (!event) return\n if (!unref(shouldListen)) return\n if (!shouldHandleEvent(event, props)) return\n\n let timer\n\n const handlersByType = {\n pointerover: e => open(e, props),\n pointerout: e => guardClose(e, props),\n focusin: e => open(e, props),\n focusout: e => guardClose(e, props)\n }\n\n const handler = handlersByType[event.type]\n\n const { delay = 0 } = props || {}\n\n if (delay && event.type === 'pointerover') {\n timer = setTimeout(() => handler(event), delay)\n // cancel the delayed open if user ends up clicking the button or anywhere else\n document.addEventListener('click', () => clearTimeout(timer), { once: true })\n } else {\n handler(event)\n }\n\n onCleanup(() => clearTimeout(timer))\n })\n}\n\n\n// - - - - - - - - - - - - - - -\n\n\nfunction addEventListeners() {\n events.forEach(type => document.addEventListener(type, onEventFired))\n}\n\nfunction removeEventListeners() {\n events.forEach(type => document.removeEventListener(type, onEventFired))\n}\n\nfunction onEventFired(event) {\n if (!event.target.id) return\n if (event.type === 'focusin' && !isKeyboardFocused(event)) return\n activeEvent.value = event\n}\n\nfunction isKeyboardFocused(event) {\n // Ignore event if focused by click instead of keyboard. Prevents tooltips on buttons from\n // flashing-up in an annoying way when a user clicks the button (absent a zero delay scenario).\n return event.target.matches(':focus-visible')\n}\n\nfunction shouldHandleEvent(event, props) {\n if (!props) return false\n if (event.target.dataset.bsPophover === props.id) return true\n return canHoverTooltip(event, props)\n}\n\nfunction canHoverTooltip(event, props) {\n if (props.type !== 'tooltip') return false\n if (props.anchor && event.target.id === props.anchor) return true\n}\n\nfunction open(event, props) {\n if (props.type === 'tooltip') addAriaDescribedBy(event, props)\n pop.setAnchorId(props.id, event.target.id)\n pop.open(props.id)\n const onClickToClose = (e) => close(e, props)\n event.target.bsTooltipClickCloseFn = onClickToClose\n event.target.addEventListener('click', onClickToClose)\n}\n\nfunction close(event, props) {\n pop.close(props.id)\n event.target.removeEventListener('click', event.target.bsTooltipClickCloseFn)\n delete event.target.bsTooltipClickCloseFn\n if (props.type === 'tooltip') removeAriaDescribedBy(event)\n}\n\n// allow mouse to move into the BsTooltip without it closing\nfunction guardClose(event, props) {\n const popoverEl = event.target.id === props.id\n ? event.target\n : document.getElementById(props.id)\n\n if (!popoverEl) return close(event, props)\n\n setTimeout(() => {\n // tooltips aren't supposed to receive focus, so shouldn't stay open if user clicks inside (but popover/others can)\n const isInPopover = popoverEl.matches(':is(:hover, :focus-within:not(.bs-tooltip))')\n if (!isInPopover) return close(event, props)\n event.target.addEventListener('pointerout', (e) => guardClose(e, props), { once: true })\n }, 100)\n}\n\nfunction addAriaDescribedBy(event, props) {\n const key = 'aria-describedby'\n const existing = event.target.getAttribute(key)\n if (existing) return\n event.target.setAttribute(key, props.id)\n event.target.bsRemoveAriaDescribedby = true\n}\n\nfunction removeAriaDescribedBy(event) {\n if (!event.target.bsRemoveAriaDescribedby) return\n event.target.removeAttribute('aria-describedby')\n delete event.target.bsRemoveAriaDescribedby\n}\n","<template>\n <Teleport v-if=\"isTeleportTargetMounted\" :to=\"teleportTo\">\n\n <Transition\n :name=\"transitionName\"\n :css=\"!!transitionName\"\n appear\n :style=\"`--bs-popover-transition-duration: ${duration};`\"\n @after-enter=\"emit('after-open', { id })\"\n @after-leave=\"emit('after-close', { id })\">\n\n <div\n v-if=\"persist || isOpen\"\n v-show=\"persist ? isOpen : true\"\n :id=\"`${id}-wrap`\"\n class=\"bs-popover-wrap\">\n\n <BsBackdrop\n v-if=\"backdrop\"\n :active=\"isOpen\"\n :inert-selector=\"backdropInertSelector\" />\n\n <div\n :id=\"id\"\n v-bind=\"$attrs\"\n ref=\"popover\"\n class=\"bs-popover\"\n :data-size=\"size\"\n :data-place-self=\"isAnchoredToViewport ? placement : undefined\"\n :style=\"[ !isAnchoredToViewport && floatingStyles, width ]\"\n :role=\"role\"\n :aria-labelledby=\"ourAriaLabelledBy\"\n :aria-modal=\"backdrop || undefined\"\n tabindex=\"-1\"\n v-focus-trap=\"focusTrapOptions\"\n @first-shift-tab=\"emit('first-shift-tab', { id })\"\n @last-tab=\"emit('last-tab', { id })\">\n\n <slot v-bind=\"{ id, close, cancel, confirm }\" />\n\n <!--\n Lives below slot for tab order reason (close should be tabbed to last).\n Calls cancel instead of close on purpose (user clicking X is equivalent\n to a footer cancel button action, consumer can react to @cancel or @close).\n -->\n <BsPopXButton\n v-if=\"!preventCloseX && !preventClose\"\n pop-cancel=\"self\" />\n\n </div>\n\n </div>\n\n </Transition>\n\n </Teleport>\n</template>\n\n<script setup>\nimport { computed, watch, ref, onMounted, onUnmounted, nextTick, provide, useAttrs, useTemplateRef } from 'vue'\nimport { propDefinitions, emitDefinitions } from './defs-popover-component.js'\nimport BsBackdrop from '@components/backdrop/BsBackdrop.vue'\nimport BsPopXButton from '@components/pop-x-button/BsPopXButton.vue'\nimport { BsPopoverProvider } from './provider-key-popover.js'\nimport { usePop } from '@composables/pop'\nimport { useCreateTeleportTarget } from '@composables/createTeleportTarget'\nimport { useFloating, offset, flip, shift, autoUpdate } from '@floating-ui/vue'\nimport { vFocusTrap } from '@directives/vFocusTrap'\nimport { usePopHoverEvents } from '@composables/popHoverEvents.js'\n\n// $attrs are bound to .bs-popover element\ndefineOptions({ inheritAttrs: false })\n\nconst props = defineProps(propDefinitions)\n\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nprovide(BsPopoverProvider, {\n id: props.id,\n setAriaLabelledBy\n})\n\nconst attrs = useAttrs()\nconst pop = usePop()\n\nconst { isTeleportTargetMounted, teleportTo } = useCreateTeleportTarget(props.teleportTargetId)\n\nlet returnFocusId\n\nconst popoverEl = useTemplateRef('popover')\nconst anchorEl = ref(null)\n\nconst notSelectors = [\n `#${props.teleportTargetId}`,\n `#bs-toast-teleport-target`,\n 'script'\n]\n\nconst backdropInertSelector = `body > *:not(${notSelectors.join(',')})`\n\nconst ariaLabelledBy = ref()\n\nconst width = ref('')\n\nconst isOpen = computed(() => pop.openIds.value.includes(props.id))\n\nconst anchorId = computed(() => props.anchor || pop.anchorsByPopId.value[props.id])\n\nconst isAnchoredToViewport = computed(() => anchorId.value === 'viewport')\n\nconst ourAriaLabelledBy = computed(() => {\n if (attrs['aria-label']) return\n const labelledBy = attrs['aria-labelledby']\n if (labelledBy) return labelledBy\n if (ariaLabelledBy.value) return ariaLabelledBy.value\n if (isAnchoredToViewport.value) return pop.anchorsByPopId.value[props.id]\n return anchorId.value\n})\n\nconst placement = computed(() => {\n const fallback = isAnchoredToViewport.value ? 'center' : 'top'\n return props.place || fallback\n})\n\nconst duration = computed(() => {\n const val = props.transitionDuration.toString()\n if (val.startsWith('var(--') || val.startsWith('calc(') || val.endsWith('ms')) return val\n if (val.startsWith('--')) return `var(${val})`\n return `${val}ms`\n})\n\nconst focusTrapOptions = computed(() => {\n return {\n active: props.trapFocus && isOpen.value,\n preventFirstShiftTab: props.preventFirstShiftTab,\n preventLastTab: props.preventLastTab,\n selectorPrefix: props.selectorPrefix\n }\n})\n\nconst shouldUseHoverEvents = computed(() => {\n return pop.popIdsByTrigger.value.popHover?.includes(props.id) || props.type === 'tooltip'\n})\n\nconst floatingUiAnchorEl = computed(() => {\n return isAnchoredToViewport.value ? null : anchorEl.value\n})\nconst floatingUiPopoverEl = computed(() => {\n return isAnchoredToViewport.value ? null : popoverEl.value\n})\n\nwatch(isOpen, () => {\n updateAnchorElement()\n isOpen.value ? onOpen() : onClose()\n})\nwatch(anchorId, updateAnchorElement)\nwatch(pop.lastCancelledId, id => props.id === id && emitPayload('cancel'))\nwatch(pop.lastConfirmedId, id => props.id === id && emitPayload('confirm'))\n\nwatch(() => props.preventAutoClose, updatePreventAutoClose, { immediate: true })\n\n// did not use a watchEffect on purpose, ran into maximum recursive updates issues\nwatch(() => props.preventClose, updatePreventClose, { immediate: true })\nwatch(() => props.preventCloseEsc, updatePreventCloseEsc, { immediate: true })\nwatch(() => props.preventCloseOutside, updatePreventCloseOutside, { immediate: true })\n\nwatch(() => props.id, (newId, oldId) => {\n unregister(oldId)\n register(newId)\n\n updatePreventAutoClose()\n\n updatePreventClose()\n updatePreventCloseEsc()\n updatePreventCloseOutside()\n})\n\nusePopHoverEvents({\n props,\n shouldListen: shouldUseHoverEvents\n})\n\nonMounted(register)\nonUnmounted(() => {\n unregister()\n window.removeEventListener('resize', setWidth)\n})\n\n// @floating-ui/vue config -- https://floating-ui.com/docs/vue\nconst { floatingStyles } = useFloating(floatingUiAnchorEl, floatingUiPopoverEl, {\n placement,\n middleware: [\n offset(8),\n flip(),\n shift({ padding: 8 })\n ],\n // transform has to be off to prevent conflicts with our transition transforms\n transform: false,\n whileElementsMounted: autoUpdate\n})\n\n// - - - - - - - - - - - - - -\n\nfunction register(id = props.id) {\n pop.register(id, { props })\n}\n\nfunction unregister(id = props.id) {\n pop.unregister(id)\n}\n\nfunction setAriaLabelledBy(val) {\n ariaLabelledBy.value = val\n}\n\nfunction emitPayload(eventName) {\n emit(eventName, { id: props.id })\n}\n\nfunction updateAnchorElement() {\n if (!isOpen.value || isAnchoredToViewport.value || !anchorId.value) {\n anchorEl.value = null\n setWidth()\n return\n }\n\n const newAnchor = document.getElementById(anchorId.value)\n\n if (anchorEl.value === newAnchor) return\n\n if (!newAnchor) {\n throw new Error(`[BsPopover] No element found for given \"anchor\" id, \"${anchorId.value}\".`)\n }\n\n anchorEl.value = newAnchor\n setWidth()\n}\n\n// only set width if prop size=\"anchor\"\nfunction setWidth() {\n width.value = props.size === 'anchor' && anchorEl.value\n ? `--bs-popover-width: ${anchorEl.value.offsetWidth}px`\n : ''\n}\n\n// prevent-close should trump presence of other close props\nfunction updatePreventClose() {\n if (props.preventClose) {\n pop.removeEsc(props.id)\n pop.removeOutsideClick(props.id)\n } else {\n pop.addEsc(props.id)\n pop.addOutsideClick(props.id)\n }\n}\n\nfunction updatePreventCloseEsc() {\n props.preventCloseEsc || props.preventClose\n ? pop.removeEsc(props.id)\n : pop.addEsc(props.id)\n}\n\nfunction updatePreventCloseOutside() {\n props.preventCloseOutside || props.preventClose\n ? pop.removeOutsideClick(props.id)\n : pop.addOutsideClick(props.id)\n}\n\nfunction updatePreventAutoClose() {\n // By default, this one will auto-close when another one opens\n if (!props.preventAutoClose) {\n pop.addAutoClose(props.id)\n return\n }\n // do not auto-close this when another opens\n if (props.preventAutoClose) {\n pop.removeAutoClose(props.id)\n }\n}\n\nfunction onOpen() {\n emitPayload('open')\n addBsButtonScaleWorkaround()\n returnFocusId = isAnchoredToViewport.value\n ? pop.anchorsByPopId.value[props.id]\n : anchorId.value\n window.addEventListener('resize', setWidth)\n}\n\nfunction onClose() {\n emitPayload('close')\n removeBsButtonScaleWorkaround()\n maybeReturnFocus()\n window.removeEventListener('resize', setWidth)\n}\n\nfunction close() {\n pop.close(props.id)\n}\n\nfunction cancel() {\n pop.cancel(props.id)\n}\n\nfunction confirm() {\n pop.confirm(props.id)\n}\n\n/** Returns focus to the element that had focus when the popover opened. */\nasync function maybeReturnFocus() {\n // If clicking outside and backdrop is false, do not return focus\n // When a user clicks outside they may expect focus to be where they clicked\n if (pop.wasOutsideClick.value && !props.backdrop) return\n\n // Don't return focus when hover event\n if (shouldUseHoverEvents.value) return\n\n const returnElement = document.getElementById(returnFocusId)\n emitPayload('return-focus')\n await nextTick()\n returnElement?.focus()\n}\n\n// Workaround for floating-ui issue with BsButton scaling\n// See: https://github.wwt.com/custom-apps/wwt-blue-steel/pull/917\nfunction addBsButtonScaleWorkaround() {\n if (!anchorEl.value?.classList.contains('bs-button')) return\n anchorEl.value?.classList.add('bs-button-no-scale')\n}\n\nfunction removeBsButtonScaleWorkaround() {\n anchorEl.value?.classList.remove('bs-button-no-scale')\n}\n</script>","export const BsDropdownProvider = Symbol('BsDropdownProvider')","// NOTE: Tried to write this using a 'transitionend' event listener on .bs-popover instead,\n// but it did not work as consistently as the approach below does...i.e. the jumpy flyout\n// issue would still happen when opening and closing the flyout semi-rapidly (even when\n// making sure the element was only given focus if the flyout was open)\n\nconst datasetKey = 'bsVFocusTimerId'\n\nexport const vFocus = {\n\n mounted(el, { arg, value }) {\n // e.g. v-focus or v-focus=\"myTrueFlag\"\n const shouldFocusOnMount = value === undefined || value\n\n if (!shouldFocusOnMount) return\n\n // delay focus until after popover transition finishes, to prevent jumpiness when browser tries to\n // scroll to focused input...mainly only seen in right-side flyout at time of writing (see NOTE above)\n const enteringPopover = el.closest('.bs-popover-wrap[class*=\"-enter-active\"]')\n\n let delay = 0\n\n if (enteringPopover) {\n const duration = getComputedStyle(enteringPopover).getPropertyValue('--bs-popover-transition-duration')\n delay = duration.replace('ms', '')\n if (delay.includes('s')) delay = duration.replace('s', '') * 1000\n }\n\n // store timer id so we have access to it in beforeUnmount\n el.dataset[datasetKey] = setTimeout(() => focusElement(arg, el), delay)\n },\n\n\n updated(el, { arg, value }) {\n if (value) focusElement(arg, el)\n },\n\n\n beforeUnmount(el) {\n // prevent the focus from happening if the popover is closed before timed focus has completed\n clearTimeout(el.dataset[datasetKey])\n }\n}\n\n// Handles cases where the element to focus is not the root element of the component.\n// Consumer can pass a CSS Selector as the directive arg, to specify which nested element to focus.\n// e.g. <BsInputSearch v-focus:['input'] /> or <BsInputSearch v-focus:['input']=\"isFocused\" />\nfunction focusElement(arg, el) {\n const elToFocus = arg ? el.querySelector(arg) : el\n elToFocus?.focus()\n}","import { ref, computed } from 'vue'\n\n/* -- useAbortController --\nThis composable wraps the native Web API, AbortController, which allows for\ncancellation of an in-flight http request. Useful for any kind of search interaction\nthat hits an API in succession, to ensure that obsolete results don't show up in the UI.\n*/\n\nexport function useAbortController() {\n\n let abortController = null\n\n const pendingRequestCount = ref(0)\n\n const isPendingRequest = computed(() => pendingRequestCount.value > 0)\n\n function getSignal() {\n abortController = new AbortController()\n return abortController.signal\n }\n\n // Use of trackRequest is only required if you want to use isPendingRequest\n // Ran into a timing issue when using the typical \"isBusy\" flag approach with aborted\n // requests, so that's why this code uses a pending request count approach instead.\n async function trackRequest(fn) {\n pendingRequestCount.value++\n const res = await fn()\n pendingRequestCount.value--\n return res\n }\n\n function abortPreviousRequest() {\n abortController?.abort()\n }\n\n return {\n isPendingRequest,\n getSignal,\n trackRequest,\n abortPreviousRequest\n }\n}","<template>\n <div\n class=\"bs-dropdown-filter\"\n v-bind=\"rootAttrs\"\n :data-hide-input=\"hideInput || undefined\">\n\n <div class=\"bs-input-addon\" v-if=\"!hideInput\">\n <BsIconSearch\n class=\"bs-dropdown-filter-icon\"\n aria-hidden=\"true\" />\n\n <BsInput\n class=\"bs-dropdown-filter-input\"\n aria-label=\"Search\"\n v-model.trim=\"model\"\n v-bind=\"inputAttrs\"\n v-focus=\"isInputFocused\"\n :placeholder=\"placeholder\"\n @blur=\"isInputFocused = false\" />\n\n <button\n v-if=\"model\"\n class=\"bs-dropdown-filter-button\"\n type=\"button\"\n aria-label=\"Clear\"\n @click.stop=\"onClearButtonClick\">\n <BsIconClose size=\"sm\" />\n </button>\n </div>\n\n <p v-if=\"hint\" class=\"bs-dropdown-filter-hint\">\n {{ hint }}\n </p>\n\n </div>\n</template>\n\n<script setup>\nimport { inject, ref, computed, watch, onMounted, onUnmounted } from 'vue'\nimport debounce from 'debounce'\nimport { BsDropdownProvider } from './provider-key-dropdown.js'\nimport { propDefinitions, emitDefinitions } from './defs-dropdown-filter.js'\nimport { vFocus } from '@directives/vFocus.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { useAbortController } from '@composables/abortController'\nimport { BsIconSearch, BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport BsInput from '@components/input/BsInput.vue'\n\nconst props = defineProps(propDefinitions)\n\nconst model = defineModel({\n type: String,\n default: ''\n})\n\ndefineOptions({inheritAttrs: false})\n\nconst dropdown = inject(BsDropdownProvider, null)\n\nconst abortController = useAbortController()\n\n// bind $attrs to input, but split class/style attrs out so can bind to root\nconst { filtered: rootAttrs, remaining: inputAttrs } = useFilterAttrs(['class', 'style'])\n\nconst isInputFocused = ref(false)\n\n// Ths is necessary to fill the gap between user input and when the debounced emit truly fires, to keep \"No results found\"\n// message from showing before the abortController.isPendingRequest actually kicks in (after debounce wait period)\nconst isPendingDebounce = ref(false)\n\nconst isQueryValid = computed(() => model.value.length >= props.minChars)\n\n// What's the difference between `model` and `query`?\n// model: The input value\n// query: The adjusted input value emitted as @query payload. It's also checked in BsOptionGroup.\n// We emit empty string when query is invalid, so consumer can clear previous results (when filtering externally).\nconst query = computed(() => isQueryValid.value ? model.value : '')\n\nconst debounceDelay = computed(() => {\n const value = props.debounce\n if ([true, 'true'].includes(value)) return 300\n if ([undefined, null, false, 'false'].includes(value)) return 0\n return value\n})\n\nconst debouncedQuery = computed(() => {\n const fn = props.filterExternal ? emitQuery : filterOptions\n return debounce(fn, debounceDelay.value)\n})\n\nconst minCharHint = computed(() => {\n if (isQueryValid.value) return ''\n const count = props.minChars - model.value.length\n return `Please enter ${count} more character${count === 1 ? '' : 's'}.`\n})\n\nconst hint = computed(() => {\n if (minCharHint.value) return minCharHint.value\n if (isPendingDebounce.value || abortController.isPendingRequest.value) return 'Searching...'\n const options = Object.values(dropdown.optionsById.value)\n if (!isPendingDebounce.value && query.value.length && !options.length) return 'No results found.'\n if (!props.filterExternal && query.value.length && !options.some(opt => opt.isVisible.value)) return 'No results found.'\n return ''\n})\n\n// using a watch, instead of @input, handles the case where a user may add spaces after a valid query.\n// the watch won't fire, since the trimmed value is still the same as before...whereas the @input would always fire\nwatch(model, (newVal, oldVal) => {\n if (!newVal && !oldVal) return\n isPendingDebounce.value = debounceDelay.value > 0\n model.value && isQueryValid.value\n ? debouncedQuery.value()\n : debouncedQuery.value.trigger()\n}, { immediate: true })\n\nonMounted(() => {\n if (props.preventReset && dropdown.filter.value.query?.value) {\n model.value = dropdown.filter.value.query.value\n return\n }\n dropdown.registerFilter({ query, onDropdownOpen, onDropdownClose })\n})\n\nonUnmounted(() => {\n dropdown.unregisterFilter()\n})\n\n// - - - - - - - - - - - - - - - -\n\nfunction emitQuery(val = query.value) {\n abortController.abortPreviousRequest()\n if (props.onQuery) {\n // second arg is an obj just in case future expansion is needed\n const obj = { abortSignal: abortController.getSignal() }\n abortController.trackRequest(() => props.onQuery(val, obj))\n }\n isPendingDebounce.value = false\n}\n\nfunction focusInput() {\n isInputFocused.value = true\n}\n\n// called on BsDropdown @open (instead of onMounted above), to support BsDropdown \"persist\" case\nfunction onDropdownOpen() {\n focusInput()\n}\n\n// called on BsDropdown @close (instead of onUnmounted above), to support BsDropdown \"persist\" case\nfunction onDropdownClose() {\n debouncedQuery.value.clear()\n\n if (!props.preventReset) {\n model.value = ''\n }\n\n // always emit this on close so consumer can reset their results list\n emitQuery('')\n}\n\nfunction onClearButtonClick() {\n model.value = ''\n focusInput()\n}\n\n// Basic case-insensitive internal filtering...or consumer can handle custom\n// filtering on their own externally by using filter-external and @query\nfunction filterOptions() {\n\n const filterProp = props.filterKey\n\n const funcsByPropType = {\n undefined: x => x.templateRef.value.innerText,\n string: x => x.props.value[props.filterKey],\n function: x => props.filterKey(x.props.value)\n }\n\n const options = Object.values(dropdown.optionsById.value)\n const getValue = funcsByPropType[typeof filterProp]\n\n options.forEach(option => {\n option.isVisible.value = isQueryValid.value\n ? getValue(option).toLowerCase().includes(model.value.toLowerCase())\n : true\n })\n\n emitQuery()\n}\n</script>\n","import { ref, computed, onUnmounted, watch } from 'vue'\n\n/**\n * Keyboard accessibility functionality for BsDropdown. Only really meant to be\n * used with BsDropdown and is highly coupled to it.\n */\nexport function useDropdownKbAccess(props, optionsById, listContainerEl, showFilter) {\n // STATE, VARS\n // Start at -1 so down arrow will focus the first option\n const activeIndex = ref(-1)\n const typeToFocusData = {\n keysTyped: '',\n lastTypedTimestamp: 0\n }\n\n // COMPUTED\n // List of options with disabled/filtered removed\n const filteredOptions = computed(() => {\n // Note: ordering should be fine as JS object string keys are always in insertion order\n const options = Object.values(optionsById.value)\n const filtered = []\n const remaining = []\n let previousGroupId = undefined\n for (let i = 0; i < options.length; i++) {\n const option = options[i]\n if (option.isVisible.value && !option.props.disabled) {\n if (option.groupId !== previousGroupId) {\n // SelectedToTop options remain w/in the group (for now), so add remaining options from the previous group\n filtered.push(...remaining)\n remaining.length = 0\n previousGroupId = option.groupId\n }\n // Add selectedToTop options first & hold others until the end\n if (option.isSelectedToTop.value) {\n filtered.push(option.templateRef.value)\n } else {\n remaining.push(option.templateRef.value)\n }\n }\n }\n filtered.push(...remaining)\n return filtered\n })\n const activeOptionId = computed(() => {\n if (activeIndex.value !== -1) {\n return filteredOptions.value[activeIndex.value].getAttribute('id')\n }\n return null\n })\n\n // LIFE CYCLE\n onUnmounted(() => {\n removeTraverseListListener()\n })\n\n // METHODS\n function initActiveIndex(defaultStartIndex = -1) {\n // activeIndex === -1 means it's the initial state\n if (activeIndex.value === -1) {\n // Find selected option, if any\n // Note: Multiple always starts at the default start index\n let newActiveIndex = defaultStartIndex\n let index = 0\n while (!props.multiple\n && newActiveIndex === defaultStartIndex\n && index < filteredOptions.value.length) {\n const option = filteredOptions.value[index]\n if (option.getAttribute('aria-selected') === 'true') {\n newActiveIndex = index\n }\n index++\n }\n activeIndex.value = newActiveIndex\n }\n }\n\n function handlePageDelta(callback) {\n const observerConfig = {\n root: listContainerEl.value,\n rootMargin: '0px 0px 0px 0px'\n }\n\n // Note: This observer is run off the main thread, so including a callback\n // to actually update the active index\n const observer = new IntersectionObserver((entries) => {\n const delta = entries.reduce((acc, entry) => (\n entry.isIntersecting ? acc + 1 : acc\n ), 0)\n // Subtract 1 to account for the active option\n callback(delta - 1)\n // Only need to run once on page down/up action\n observer.disconnect()\n }, observerConfig)\n\n const listItems = listContainerEl.value.querySelectorAll('.bs-option[data-visible=\"true\"]')\n // Note: adds an observer for each option, but only runs once\n listItems.forEach((el) => observer.observe(el))\n }\n\n function traverseList(ev) {\n const TRAVERSE_KEYS = [\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowLeft',\n 'Home',\n 'End',\n 'PageUp',\n 'PageDown'\n ]\n if (filteredOptions.value.length > 0 && TRAVERSE_KEYS.includes(ev.key)) {\n // Initialize the active index if not done already\n initActiveIndex()\n\n switch (ev.key) {\n case 'ArrowDown':\n // Don't go past the last option\n activeIndex.value = Math.min(activeIndex.value + 1, filteredOptions.value.length - 1)\n break\n case 'ArrowUp':\n // Don't go negative\n activeIndex.value = Math.max(activeIndex.value - 1, 0)\n break\n case 'ArrowRight':\n case 'PageDown':\n // In this case, start at 0 rather than -1\n const startIndex = Math.max(activeIndex.value, 0)\n handlePageDelta((delta) => {\n activeIndex.value = Math.min(startIndex + delta, filteredOptions.value.length - 1)\n })\n break\n case 'ArrowLeft':\n case 'PageUp':\n handlePageDelta((delta) => {\n activeIndex.value = Math.max(activeIndex.value - delta, 0)\n })\n break\n case 'Home':\n activeIndex.value = 0\n break\n case 'End':\n activeIndex.value = filteredOptions.value.length - 1\n break\n }\n\n // Make sure focus is on the list container\n listContainerEl.value.focus()\n ev.preventDefault()\n }\n }\n\n function keydownSelect(ev) {\n const SELECT_KEYS = [ ' ', 'Enter', 'NumpadEnter' ]\n if (SELECT_KEYS.includes(ev.key) && activeIndex.value !== -1) {\n const option = filteredOptions.value[activeIndex.value]\n option.click()\n ev.preventDefault()\n }\n }\n\n function typeToFocus(ev) {\n const TTF_KEYS = /^[a-zA-Z0-9]{1}$/\n if (filteredOptions.value.length > 0\n && !showFilter.value\n && TTF_KEYS.test(ev.key)) {\n // UPDATE KEYS TYPED\n if (ev.timeStamp - typeToFocusData.lastTypedTimestamp > 500) {\n // Outside of the 500ms window, reset the keys typed\n typeToFocusData.keysTyped = ev.key.toLowerCase()\n } else {\n // Inside the 500ms window, append the key\n typeToFocusData.keysTyped += ev.key.toLowerCase()\n }\n // Update the timestamp\n typeToFocusData.lastTypedTimestamp = ev.timeStamp\n\n // LOOK FOR MATCH\n let found = false\n let index = 0\n while (!found && index < filteredOptions.value.length) {\n const optionText = filteredOptions.value[index].textContent\n .trim()\n .toLowerCase()\n if (optionText.startsWith(typeToFocusData.keysTyped)) {\n activeIndex.value = index\n listContainerEl.value.focus()\n ev.preventDefault()\n found = true\n }\n index++\n }\n }\n }\n\n function addTraverseListListener() {\n document.addEventListener('keydown', traverseList)\n document.addEventListener('keydown', typeToFocus)\n listContainerEl.value?.addEventListener('keydown', keydownSelect)\n }\n\n function removeTraverseListListener() {\n document.removeEventListener('keydown', traverseList)\n document.removeEventListener('keydown', typeToFocus)\n listContainerEl.value?.removeEventListener('keydown', keydownSelect)\n }\n\n function resetActiveIndex() {\n activeIndex.value = -1\n }\n\n return {\n activeOptionId,\n filteredOptions,\n addTraverseListListener,\n initActiveIndex,\n removeTraverseListListener,\n resetActiveIndex,\n }\n}\n","<template>\n <BsPopover\n :id=\"id\"\n v-slot=\"{ id, cancel, confirm, close }\"\n class=\"bs-dropdown\"\n :anchor=\"anchorComputed\"\n :backdrop=\"shouldShowBottomSheet\"\n data-component=\"bs-dropdown\"\n :data-mobile-sheet=\"mobileSheet ? mobileSheet : undefined\"\n :persist=\"persist\"\n :place=\"placeComputed\"\n :prevent-close-x=\"!shouldShowBottomSheet\"\n prevent-first-shift-tab\n prevent-last-tab\n trap-focus\n type=\"dropdown\"\n @after-open=\"addTraverseListListener\"\n @[closeEventName]=\"onClose\"\n @first-shift-tab=\"pop.close(id)\"\n @last-tab=\"pop.close(id)\"\n @open=\"onOpen\">\n\n <header class=\"bs-dropdown-mobile-header\">\n <component class=\"bs-dropdown-mobile-heading\" :is=\"mobileHeadingTag\">\n {{ mobileHeading }}\n </component>\n <p class=\"bs-dropdown-mobile-description\" v-if=\"mobileDescription\">\n {{ mobileDescription }}\n </p>\n </header>\n\n <BsDropdownFilter\n v-if=\"showFilter\"\n v-model=\"filterInput\"\n :hide-input=\"hideFilterInput\"\n :filter-key=\"filterKey\"\n :filter-external=\"filterExternal\"\n :debounce=\"debounce\"\n :min-chars=\"minChars\"\n :placeholder=\"placeholder\"\n :prevent-reset=\"preventFilterReset\"\n @query=\"onQuery\" />\n\n <div\n class=\"bs-dropdown-list\"\n ref=\"listContainer\"\n :aria-activedescendant=\"activeOptionId || undefined\"\n :aria-label=\"ariaLabel\"\n aria-live=\"polite\"\n :aria-multiselectable=\"multiple || undefined\"\n :role=\"role\"\n :tabindex=\"tabIndex\"\n @focus=\"initActiveIndex(0)\"\n @blur=\"resetActiveIndex()\"\n @mousedown.prevent>\n <!-- @mousedown.prevent stops active border from showing on selected -->\n <!-- items when a different item is clicked -->\n\n <hr class=\"bs-dropdown-multiple-hr\" aria-hidden=\"true\" v-if=\"showSeparator\"/>\n <slot v-bind=\"{ id, cancel, confirm, close }\" />\n\n </div>\n\n <footer v-if=\"multiple\" class=\"bs-dropdown-mobile-footer\">\n <BsButton pop-close=\"self\">{{ mobileButtonLabel }}</BsButton>\n </footer>\n\n </BsPopover>\n</template>\n\n<script setup>\nimport { provide, shallowRef, ref, computed, nextTick, useTemplateRef, onBeforeUnmount } from 'vue'\nimport BsPopover from '@components/popover/BsPopover.vue'\nimport { propDefinitions, emitDefinitions } from './defs-dropdown-component.js'\nimport { BsDropdownProvider } from './provider-key-dropdown.js'\nimport { usePop } from '@composables/pop.js'\nimport BsDropdownFilter from './BsDropdownFilter.vue'\nimport { useDropdownKbAccess } from '@composables/dropdownKbAccess.js'\nimport { useMatchMedia } from '@composables/matchMedia.js'\nimport BsButton from '@components/button/BsButton.vue'\n\n// Emits: Will also emit what BsPopover emits (open, close, cancel, confirm, etc.)\n\n// Props: The BsPopover props fall-through...below are BsDropdown-specific overrides to BsPopover settings\nconst props = defineProps(propDefinitions)\n\nconst model = defineModel({\n type: [String, Object, Number, Array],\n default: undefined\n})\n\n// Holds a copy if the model value from when it was last opened.\n// Used to group selected options for multiple at the top w/o the options jumping around while making selections.\nconst previousModel = ref()\n\nconst filterInput = defineModel('filterInput', {\n type: String,\n default: ''\n})\n\nconst listContainerEl = useTemplateRef('listContainer')\n\nconst pop = usePop()\n\nuseMatchMedia('(max-width: 751px)', (query) => {\n isMobile.value = query.matches\n})\n\nuseMatchMedia('(max-width: 1165px)', (query) => {\n isTablet.value = query.matches\n})\n\nconst optionsById = shallowRef({})\n\nconst dropdownFilter = shallowRef({})\n\nconst isMobile = ref(false)\nconst isTablet = ref(false)\n\n// To support `persist` prop (v-show) usage, we need to dynamically set the event name that fires\n// BsDropdownFilter's clean up function. v-show needs @after-close to avoid seeing a flash of the\n// BsOptions resetting, but v-if needs @close so query can be reset and emitted (for filter-external)\nconst closeEventName = computed(() => props.persist ? 'afterClose' : 'close')\n\nconst showFilter = computed(() => props.filter || props.filterKey || props.filterExternal)\n\nconst tabIndex = computed(() => {\n if (filteredOptions.value.length > 0\n && pop.isOpen(props.id)) {\n return 0\n }\n\n return undefined\n})\n\nconst shouldShowBottomSheet = computed(() => {\n return (props.mobileSheet === 'tablet' && isTablet.value)\n || (props.mobileSheet === 'mobile' && isMobile.value)\n})\n\nconst anchorComputed = computed(() => {\n if (shouldShowBottomSheet.value) {\n return 'viewport'\n }\n return props.anchor\n})\n\nconst placeComputed = computed(() => {\n if (shouldShowBottomSheet.value) {\n return 'bottom'\n }\n return props.place\n})\n\nconst {\n activeOptionId,\n filteredOptions,\n addTraverseListListener,\n initActiveIndex,\n removeTraverseListListener,\n resetActiveIndex,\n} = useDropdownKbAccess(props, optionsById, listContainerEl, showFilter)\n\nprovide(BsDropdownProvider, {\n // BsDropdown\n props,\n model,\n setModel,\n isSelected,\n wasPreviouslySelected,\n showPreviouslySelectedSeparator,\n\n // BsOption\n registerOption,\n unregisterOption,\n activeOptionId,\n optionsById,\n\n // BsDropdownFilter\n registerFilter,\n unregisterFilter,\n filter: dropdownFilter\n})\n\n// - - - - - - - - - - - - -\n\nfunction registerOption(id, option) {\n optionsById.value = { ...optionsById.value, [id]: option }\n}\n\nfunction unregisterOption(id) {\n const { [id]:remove, ...onesToKeep } = optionsById.value\n optionsById.value = { ...onesToKeep }\n}\n\nfunction registerFilter(data) {\n dropdownFilter.value = data\n}\n\nfunction unregisterFilter() {\n dropdownFilter.value = {}\n}\n\nasync function onOpen() {\n previousModel.value = model.value\n // give BsDropdownFilter time to mount and register itself\n if (!props.persist) await nextTick()\n dropdownFilter.value.onDropdownOpen?.()\n\n if (!props.multiple) {\n nextTick(() => {\n const selectedOption = listContainerEl.value.querySelector(`[aria-selected=\"true\"]`)\n selectedOption?.scrollIntoView?.({ block: 'nearest' })\n })\n }\n}\n\nfunction onClose() {\n dropdownFilter.value.onDropdownClose?.()\n removeTraverseListListener()\n resetActiveIndex()\n}\n\nfunction close() {\n pop.close(props.id)\n}\n\nconst showSeparator = computed(() => showPreviouslySelectedSeparator())\n\n// Show separator for multi-select if there are both selected and unselected options\nfunction showPreviouslySelectedSeparator(groupId) {\n return Object.values(optionsById.value).some(option => option.groupId === groupId && option.isSelectedToTop.value && option.isVisible.value) && \n Object.values(optionsById.value).some(option => option.groupId === groupId && !option.isSelectedToTop.value && option.isVisible.value)\n}\n\nfunction wasPreviouslySelected(val) {\n return checkSelected(previousModel.value, val)\n}\n\nfunction isSelected(val) {\n return checkSelected(model.value, val)\n}\n\nfunction checkSelected(modelValue, val) {\n if (!modelValue) return false\n\n // single model\n if (!props.multiple) return isMatch(modelValue, val)\n\n // a little DX for multiple model, just in case...\n if (!Array.isArray(modelValue)) {\n throw new Error(`[BsDropdown] When \"multiple\" prop is used, v-model must be an Array. Your model: ${modelValue}`)\n }\n\n // multiple model\n return modelValue.some(it => isMatch(it, val))\n}\n\nfunction isMatch(a, b) {\n const { equateBy } = props\n const isObject = (x) => typeof x === 'object' && x !== null && !Array.isArray(x)\n\n if (isObject(a) && isObject(b)) {\n return typeof equateBy === 'function'\n ? equateBy(a) === equateBy(b)\n : a[equateBy] === b[equateBy]\n }\n\n return a === b\n}\n\nfunction setModel(val) {\n // stop here if no new selection was made (so @update:model-value won't fire)\n if (!props.multiple && isSelected(val)) return close()\n\n model.value = props.multiple\n ? getArrayModel(val)\n : val\n\n if (!props.multiple) close()\n}\n\nfunction getArrayModel(val) {\n if (!model.value) return [val]\n\n return isSelected(val)\n ? model.value.filter(it => !isMatch(it, val))\n : [ ...model.value, val ]\n}\n</script>\n","<script setup>\nimport { computed, ref } from 'vue'\nimport { BsIconCaretDown, BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport BsInput from '@components/input/BsInput.vue'\nimport BsInputAddon from '@components/input-addon/BsInputAddon.vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\n\nconst props = defineProps({\n containerId: {\n type: String,\n required: true\n },\n disabled: {\n type: Boolean,\n default: false\n },\n error: {\n type: Boolean,\n default: false\n },\n hintId: {\n type: String\n },\n modelValue: {\n type: String,\n default: ''\n },\n open: {\n type: Boolean,\n default: false\n },\n optionsId: {\n type: String\n },\n placeholder: {\n type: String,\n default: ''\n },\n required: {\n type: Boolean,\n default: false\n },\n})\nconst emit = defineEmits([\n 'clear',\n 'input-focus',\n 'input-mousedown',\n 'input-mouseup',\n 'input-shift-tab',\n 'input-tab',\n 'toggled',\n 'update:modelValue',\n])\n\nconst inputRef = ref(null)\nconst [ toggleId ] = useGenIdAttrs(1)\n\nconst btnProperties = computed(() => ({\n icon: props.modelValue ? 'close' : (props.optionsId ? 'caret-down' : ''),\n show: Boolean(props.modelValue || props.optionsId),\n text: props.modelValue ? 'Clear this field' : (props.optionsId ? 'Toggle options dropdown' : ''),\n}))\n\nconst showCloseButton = computed(() => btnProperties.value.icon === 'close')\n\nfunction handleBtnClick() {\n if (showCloseButton.value) {\n emit('clear')\n } else {\n emit('toggled')\n }\n}\n\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n<BsInputAddon\n aria-live=\"polite\"\n :disabled=\"disabled\"\n :error=\"error\"\n :id=\"containerId\"\n :multifocus=\"false\"\n variant=\"combobox\"\n>\n <BsInput\n ref=\"inputRef\"\n :aria-controls=\"optionsId\"\n :aria-describedby=\"hintId\"\n :aria-expanded=\"optionsId ? open : undefined\"\n :aria-haspopup=\"optionsId ? 'listbox' : undefined\"\n :aria-invalid=\"error\"\n data-part=\"main\"\n :data-error=\"error\"\n :disabled=\"disabled\"\n :model-value=\"modelValue\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :role=\"optionsId ? 'combobox' : undefined\"\n @focus=\"$emit('input-focus')\"\n @input=\"$emit('update:modelValue', $event.target.value)\"\n @keydown.shift.tab=\"$emit('input-shift-tab')\"\n @keydown.tab.exact=\"$emit('input-tab')\"\n @mousedown=\"$emit('input-mousedown')\"\n @mouseup=\"$emit('input-mouseup')\"\n v-bind=\"$attrs\"\n />\n <button v-show=\"btnProperties.show\"\n :aria-controls=\"!showCloseButton && optionsId ? optionsId : undefined\"\n :aria-expanded=\"!showCloseButton && optionsId ? open : undefined\"\n :data-open=\"showCloseButton ? undefined : open\"\n data-part=\"right\"\n :disabled=\"disabled\"\n :id=\"toggleId\"\n style=\"cursor: pointer;\"\n type=\"button\"\n @click=\"handleBtnClick\"\n >\n <span class=\"bs-visually-hidden\">\n {{ btnProperties.text }}\n </span>\n <BsIconClose\n v-if=\"showCloseButton\"\n role=\"presentation\"\n size=\"md\"\n />\n <BsIconCaretDown\n v-else\n role=\"presentation\"\n size=\"md\"\n />\n </button>\n</BsInputAddon>\n</template>\n","import { computed } from 'vue'\n\n// Normalize options to support string[] inputs.\n// Returns a ComputedRef of normalized options.\nexport function useNormalizedOptionsArray(props) {\n return computed(() => {\n return (props.options || []).map(opt =>\n typeof opt === 'string' ? { value: opt, label: opt } : opt,\n )\n })\n}\n\n// Backward compatibility: default export\nexport default useNormalizedOptionsArray","<script setup>\nimport { computed } from 'vue'\nimport BsBadge from '../badge/BsBadge.vue'\nimport { BsIconCaretDown } from '@wwtdev/bsds-icons-vue3'\n\nconst props = defineProps({\n badgeCount: {\n type: Number,\n default: 0\n },\n disabled: {\n type: Boolean,\n default: false\n },\n label: {\n type: String,\n default: 'Filter'\n },\n open: {\n type: Boolean,\n default: false\n },\n optionsId: {\n type: String,\n required: true\n },\n size: {\n type: String,\n validator: val => ['', 'sm', 'xs'].includes(val)\n }\n})\n\nconst showBadge = computed(() => props.badgeCount > 0)\n</script>\n\n<template>\n <button class=\"bs-filter-button\"\n :aria-controls=\"optionsId\"\n :aria-expanded=\"open\"\n aria-haspopup=\"listbox\"\n data-component=\"bs-filter-button\"\n :data-open=\"open\"\n :data-size=\"size\"\n :disabled=\"disabled\"\n type=\"button\"\n >\n <BsBadge v-if=\"showBadge\"\n color=\"blue\"\n :count=\"badgeCount\"\n label=\"active filter\"\n position=\"left\"\n variant=\"notext\"\n />\n <slot name=\"label\">\n {{ label }}\n </slot>\n <BsIconCaretDown />\n </button>\n</template>\n","<!-- Internal component for setting a dropdown's container -->\n<script setup>\nimport { ref } from 'vue'\n\nconst props = defineProps({\n breakout: {\n type: Boolean,\n default: false\n },\n breakoutMounted: {\n type: Boolean,\n default: false\n },\n breakoutStub: {\n type: Object,\n default: null\n },\n containerId: {\n type: String,\n default: undefined\n }\n})\n\nconst internalContainerRef = ref(null)\n\ndefineExpose({ internalContainerRef })\n</script>\n\n<template>\n<!-- Teleport when breaking out -->\n<template v-if=\"breakout && breakoutMounted\">\n <Teleport :to=\"breakoutStub\">\n <slot />\n </Teleport>\n</template>\n\n<template v-if=\"!breakout\">\n <!-- External container -->\n <template v-if=\"containerId\">\n <slot />\n </template>\n\n <!-- Internal container -->\n <div\n v-else\n ref=\"internalContainerRef\"\n style=\"position: relative\"\n >\n <slot />\n </div>\n</template>\n</template>\n","<!--\nEnhances the built-in Vue Transition with the option to render the content with\n`v-if` (default) or `v-show` when `preloaded` is `true`.\n-->\n<script setup>\ndefineProps({\n // Transition Name\n name: {\n type: String,\n required: true\n },\n // When true, the content is displayed with v-show\n // When false, the content is displayed with v-if\n preloaded: {\n type: Boolean,\n default: false\n },\n // When true, the content is shown\n shown: {\n type: Boolean,\n default: true\n },\n})\n\n// Just emit all the standard Transition events\nconst emit = defineEmits([\n 'before-enter',\n 'enter',\n 'after-enter',\n 'enter-cancelled',\n 'before-leave',\n 'leave',\n 'after-leave',\n 'leave-cancelled',\n])\n</script>\n\n<template>\n <template v-if=\"preloaded\">\n <Transition\n v-show=\"shown\"\n :name=\"name\"\n @before-enter=\"emit('before-enter')\"\n @enter=\"emit('enter')\"\n @after-enter=\"emit('after-enter')\"\n @enter-cancelled=\"emit('enter-cancelled')\"\n @before-leave=\"emit('before-leave')\"\n @leave=\"emit('leave')\"\n @after-leave=\"emit('after-leave')\"\n @leave-cancelled=\"emit('leave-cancelled')\"\n >\n <slot />\n </Transition>\n </template>\n\n <template v-else>\n <Transition\n :name=\"name\"\n @before-enter=\"emit('before-enter')\"\n @enter=\"emit('enter')\"\n @after-enter=\"emit('after-enter')\"\n @enter-cancelled=\"emit('enter-cancelled')\"\n @before-leave=\"emit('before-leave')\"\n @leave=\"emit('leave')\"\n @after-leave=\"emit('after-leave')\"\n @leave-cancelled=\"emit('leave-cancelled')\"\n >\n <slot v-if=\"shown\" />\n </Transition>\n </template>\n</template>\n","import { onMounted, onUnmounted, ref, useId } from 'vue'\n\nconst useBreakout = (createBreakout, id = undefined, position = 'relative') => {\n const breakoutId = ref(null)\n const breakoutStub = ref(null)\n const breakoutMounted = ref(false)\n let isPreExisting = false\n\n onMounted(() => {\n if (createBreakout) {\n breakoutId.value = id || useId()\n // Don't recreate the breakout if it already exists\n if (document.getElementById(breakoutId.value)) {\n breakoutStub.value = document.getElementById(breakoutId.value)\n isPreExisting = true\n } else {\n breakoutStub.value = document.createElement('div')\n breakoutStub.value.id = breakoutId.value\n breakoutStub.value.style.position = position\n document.body.insertAdjacentElement('afterbegin', breakoutStub.value)\n }\n breakoutMounted.value = true\n }\n })\n\n onUnmounted(() => {\n // Don't remove the breakout if it existed before\n if (createBreakout && !isPreExisting) {\n document.getElementById(breakoutId.value)?.remove()\n }\n })\n\n return { breakoutId, breakoutStub, breakoutMounted }\n}\nexport default useBreakout\n","import { onMounted, onUnmounted } from 'vue'\n\n/**\n * Listens for clicks outside of the given elements and calls the given\n * function.\n *\n * @param {(Ref|Computed)[]} elRefs Target refs considered as \"inside\" the click area.\n * @param {function} onClickAway Callback when a click happens outside of the\n * target ref.\n */\nconst useClickAway = (elRefs, onClickAway) => {\n const handler = (ev) => {\n if (!elRefs.some((elRef) => elRef.value?.contains(ev.target))) {\n onClickAway(ev)\n }\n }\n\n onMounted(() => {\n document.addEventListener('mouseup', handler)\n })\n\n onUnmounted(() => {\n document.removeEventListener('mouseup', handler)\n })\n}\nexport default useClickAway\n","<script setup>\nimport { ref, computed, provide } from 'vue'\nimport { BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport BsDropdownContainer from './BsDropdownContainer.vue'\nimport BsEnhancedTransition from '../../transition/BsEnhancedTransition.vue'\nimport useBreakout from '../../../composables/breakout'\nimport useClickAway from '../../../composables/clickAway'\nimport useKeydown from '../../../composables/keydown'\n\ndefineOptions({ inheritAttrs: false })\n\n// PROPS\nconst props = defineProps({\n anchorId: {\n type: String,\n required: true\n },\n breakout: {\n type: Boolean,\n default: false\n },\n containerId: {\n type: String,\n default: undefined\n },\n helperDescription: {\n type: String,\n default: undefined\n },\n helperText: {\n type: String,\n default: undefined\n },\n position: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n shown: {\n type: Boolean,\n default: true\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n width: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n }\n})\n\n// EMITS\nconst emit = defineEmits([\n 'close',\n 'enter',\n 'after-enter',\n 'after-leave'\n])\n\n// REFS\nconst dropdownContainerRef = ref(null)\nconst dropdownRef = ref(null)\n\n// STATE\n// Provide these transition states to BsDropdownOptionListDeprecated.vue for various\n// delayed effects such as focus management.\nconst dropdownEnter = ref(false)\nconst dropdownAfterEnter = ref(false)\nconst anchorEl = ref(null)\n\n// COMPUTED\nconst containerEl = computed(() => {\n if (props.breakout) {\n return breakoutStub.value\n } else if (props.containerId) {\n return document.getElementById(props.containerId)\n } else {\n return dropdownContainerRef.value.internalContainerRef\n }\n})\n\n// Don't set data-width in the special 'anchor' width case\nconst widthActual = computed(() => {\n return props.width === 'anchor' ? undefined : props.width\n})\n\n// COMPOSABLES\nuseClickAway([dropdownRef, anchorEl], () => {\n if (dropdownAfterEnter.value) {\n emit('close')\n }\n})\n\nuseKeydown(['Escape'], () => {\n if (dropdownAfterEnter.value) {\n emit('close')\n }\n})\n\nconst { breakoutStub, breakoutMounted } = useBreakout(props.breakout, props.containerId)\n\n// PROVIDE\n// Currently used by BsDropdownOptionListDeprecated.vue\nprovide('dropdownEnter', dropdownEnter)\nprovide('dropdownAfterEnter', dropdownAfterEnter)\nprovide('dropdownShown', computed(() => props.shown))\n\n// METHODS\nconst setDropdownProperty = (property, value) => {\n dropdownRef.value.style.setProperty(property, value)\n}\n\n/**\n * Dynamically set position based on anchor element. Doing this rather than\n * relying on CSS since the dropdown's container could live anywhere on the\n * DOM (in the case of teleporting when breakout=true).\n *\n * Use custom properties rather than explicit properties to allow for\n * us to ignore them on mobile.\n */\nfunction setPosition() {\n const containerRect = containerEl.value.getBoundingClientRect()\n const anchorRect = anchorEl.value.getBoundingClientRect()\n const dropdownRect = dropdownRef.value.getBoundingClientRect()\n\n positionTopBottom(containerRect, anchorRect)\n positionLeftRight(containerRect, anchorRect, dropdownRect)\n}\n\nfunction positionTopBottom(containerRect, anchorRect) {\n // Calculate top/bottom position relative to target container\n if (props.position === 'top') {\n const bottom = containerRect.bottom - anchorRect.bottom\n setDropdownProperty('--dropdown-wscreen-top', 'auto')\n setDropdownProperty('--dropdown-wscreen-bottom', `${bottom + anchorRect.height + 8}px`)\n } else {\n const top = anchorRect.top - containerRect.top\n setDropdownProperty('--dropdown-wscreen-top', `${top + anchorRect.height + 8}px`)\n setDropdownProperty('--dropdown-wscreen-bottom', 'auto')\n }\n}\n\nfunction positionLeftRight(containerRect, anchorRect, dropdownRect) {\n // Calculate left position relative to target container\n const left = anchorRect.left - containerRect.left\n if (props.position === 'center') {\n const offset = (anchorRect.width - dropdownRect.width) / 2\n setDropdownProperty('--dropdown-wscreen-left', `${left + offset}px`)\n setDropdownProperty('--dropdown-wscreen-right', 'auto')\n } else if (props.position === 'right') {\n const right = containerRect.right - anchorRect.right\n setDropdownProperty('--dropdown-wscreen-left', `auto`)\n setDropdownProperty('--dropdown-wscreen-right', `${right}px`)\n } else {\n setDropdownProperty('--dropdown-wscreen-left', `${left}px`)\n setDropdownProperty('--dropdown-wscreen-right', 'auto')\n }\n}\n\n/**\n * Special case when width is \"anchor\". Dynamically set width based on anchor\n * element. Doing this rather than relying on CSS since the dropdown's\n * container could live anywhere on the DOM (in the case of teleporting when\n * breakout=true).\n */\nfunction setWidth() {\n if (props.width === 'anchor') {\n const anchorRect = anchorEl.value.getBoundingClientRect()\n setDropdownProperty('--dropdown-wscreen-width', `${anchorRect.width}px`)\n } else {\n setDropdownProperty('--dropdown-wscreen-width', '')\n }\n}\n\nfunction handleEnter() {\n dropdownEnter.value = true\n // Grab the anchor element every time the dropdown enters just in case it\n // has moved (e.g. button appearing/disappearing based on loading state)\n anchorEl.value = document.getElementById(props.anchorId)\n setPosition()\n setWidth()\n emit('enter')\n}\n\nfunction handleAfterEnter() {\n dropdownAfterEnter.value = true\n emit('after-enter')\n}\n\nfunction handleAfterLeave() {\n dropdownEnter.value = false\n dropdownAfterEnter.value = false\n emit('after-leave')\n}\n</script>\n\n<template>\n<div v-if=\"useMobileStyle && shown\" class=\"bs-dropdown-deprecated-backdrop\" />\n\n<BsDropdownContainer\n ref=\"dropdownContainerRef\"\n :breakout=\"breakout\"\n :breakoutMounted=\"breakoutMounted\"\n :breakoutStub=\"breakoutStub\"\n :containerId=\"containerId\"\n>\n <BsEnhancedTransition\n name=\"bs-dropdown-deprecated\"\n :preloaded=\"preloaded\"\n :shown=\"shown\"\n @after-enter=\"handleAfterEnter\"\n @enter=\"handleEnter\"\n @after-leave=\"handleAfterLeave\"\n >\n <div\n ref=\"dropdownRef\"\n class=\"bs-dropdown-deprecated\"\n :data-width=\"widthActual\"\n :data-shown=\"shown\"\n :data-no-mobile=\"!useMobileStyle\"\n v-bind=\"$attrs\"\n >\n <header v-if=\"helperText\">\n <div>\n <h3>{{ helperText }}</h3>\n <p v-if=\"helperDescription\">{{ helperDescription }}</p>\n </div>\n <button type=\"button\" title=\"close\" @click=\"() => emit('close')\">\n <BsIconClose />\n </button>\n </header>\n\n <slot />\n </div>\n </BsEnhancedTransition>\n</BsDropdownContainer>\n</template>\n","<!-- Handles backwards compatibility with deprecated props -->\n<!-- Replace with BsDropdownNew when retiring these props -->\n<script setup>\nimport { computed } from 'vue'\nimport BsDropdownNew from './BsDropdownNew.vue'\nimport { useDeprecatedProp, useDeprecatedTransition } from '@composables/deprecated.js'\n\n// PROPS\nconst props = defineProps({\n anchorId: {\n type: String,\n default: undefined\n },\n shown: {\n type: Boolean,\n default: true\n },\n breakout: {\n type: Boolean,\n default: false\n },\n containerId: {\n type: String,\n default: undefined\n },\n helperDescription: {\n type: String,\n default: undefined\n },\n helperText: {\n type: String,\n default: undefined\n },\n position: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n width: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n // DEPRECATED\n center: {\n default: undefined\n },\n enterControlled: {\n default: undefined\n },\n enterTrigger: {\n default: undefined\n },\n leaveTrigger: {\n default: undefined\n },\n right: {\n default: undefined\n },\n toggleId: {\n default: undefined\n },\n top: {\n default: undefined\n }\n})\nuseDeprecatedProp(props, 'center', 'position')\nuseDeprecatedProp(props, 'enterControlled', 'preloaded')\nuseDeprecatedProp(props, 'enterTrigger', 'shown')\nuseDeprecatedProp(props, 'leaveTrigger', 'shown')\nuseDeprecatedProp(props, 'right', 'position')\nuseDeprecatedProp(props, 'toggleId', 'anchorId')\nuseDeprecatedProp(props, 'top', 'position')\n\nconst emit = defineEmits([\n 'close',\n 'enter',\n 'after-enter',\n 'after-leave'\n])\n\n// Handles enterControlled/enterTrigger/leaveTrigger backwards compatibility\nconst { transition: shownActual } = useDeprecatedTransition(props)\n\n// Handles width backwards compatibility\nconst widthActual = computed(() => {\n return props.width === 'toggle' ? 'anchor' : props.width\n})\n\n// Handles top/center/right backwards compatibility\nconst positionActual = computed(() => {\n if (props.top) {\n return 'top'\n }\n if (props.center) {\n return 'center'\n }\n if (props.right) {\n return 'right'\n }\n return props.position\n})\n\n// Handles toggleId backwards compatibility\nconst anchorIdActual = computed(()=> {\n if (props.toggleId) {\n return props.toggleId\n }\n return props.anchorId\n})\n</script>\n\n<template>\n<BsDropdownNew\n :anchor-id=\"anchorIdActual\"\n :breakout=\"breakout\"\n :container-id=\"containerId\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :position=\"positionActual\"\n :preloaded=\"preloaded\"\n :shown=\"shownActual\"\n :use-mobile-style=\"useMobileStyle\"\n :width=\"widthActual\"\n @close=\"() => emit('close')\"\n @enter=\"() => emit('enter')\"\n @after-enter=\"() => emit('after-enter')\"\n @after-leave=\"() => emit('after-leave')\"\n>\n <slot />\n</BsDropdownNew>\n</template>\n","/**\n * @param {string} listId\n * @param {unknown} optionVal\n * @param {string} valueIdKey\n * @returns {string} id attribute for the option element\n */\nexport const optionIdFromVal = (listId, optionVal, valueIdKey = 'id') => {\n const suffix =\n typeof optionVal == 'object'\n ? optionVal?.[valueIdKey]?.toString().replace(/\\s/g, '-')\n : optionVal?.toString().replace(/\\s/g, '-')\n return `${listId}-option-${suffix}`\n}\n","<script setup>\nimport { inject, ref, computed, onMounted } from 'vue'\nimport { optionIdFromVal } from '../../../utils/dropdown.js'\n\n// PROPS\nconst props = defineProps({\n valueIdKey: {\n type: [String, Number],\n default: 'id',\n },\n value: {\n type: [String, Number, Object],\n required: true,\n },\n variant: {\n type: String,\n default: undefined,\n },\n})\n\nconst optionRef = ref(null)\n\n// Provided from BsDropdownOptionListDeprecated\nconst optionsId = inject('optionsId', ref(''))\nconst handleOptionSelect = inject('handleOptionSelect', () => {})\nconst registerOption = inject('registerOptionById', () => {})\n\nconst idKey = computed(() => {\n if (typeof props.value != 'object') return '' // many wrapper components depend on this type check\n return props.valueIdKey\n})\n\n/** Create an ID. */\nconst id = computed(() => optionIdFromVal(optionsId.value, props.value, idKey.value))\n\nfunction handleOptionClick(ev) {\n handleOptionSelect(optionRef.value)\n ev.stopPropagation()\n}\n\nonMounted(() => {\n registerOption({ id: id.value, val: props.value })\n})\n</script>\n\n<template>\n <li\n ref=\"optionRef\"\n data-component=\"bs-dropdown-option\"\n :data-value=\"idKey ? undefined : props.value\"\n :data-value-id-key=\"idKey\"\n :data-value-type=\"typeof props.value\"\n :data-variant=\"variant || undefined\"\n :id=\"id\"\n role=\"option\"\n @click=\"handleOptionClick\"\n >\n <slot></slot>\n </li>\n</template>\n","<script setup>\nimport { onMounted, ref } from 'vue'\n\nconst props = defineProps({\n src: String,\n size: String,\n initials: {\n type: String,\n required: true\n },\n profileName: {\n type: String,\n required: true\n },\n useAltText: {\n type: Boolean,\n default: true\n }\n})\nconst isMounted = ref(false)\nconst showImage = ref(!!props.src)\n\nonMounted(() => isMounted.value = true)\n</script>\n\n<template>\n<div\n class=\"bs-profile-img\"\n data-component=\"bs-profile-img\"\n :data-img-size=\"size\"\n :data-initials=\"initials\"\n :data-no-img=\"!showImage\"\n>\n <img v-if=\"showImage && isMounted\"\n :src=\"src\"\n :alt=\"useAltText ? profileName : ''\"\n @error=\"showImage = false\"\n />\n</div>\n</template>\n","<script setup>\nimport { propDefinitions } from './defs-dropdown-option-builder.js'\nimport BsDropdownOptionDeprecated from '../dropdown-option/BsDropdownOptionDeprecated.vue'\nimport BsProfileImg from '../../profile-img/BsProfileImg.vue'\nimport { BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport { useNormalizedOptionsArray } from '../../../composables/normalizeOptionsArray.js'\n\n// PROPS\nconst props = defineProps(propDefinitions)\n\n// Normalize options to support string[] inputs\nconst normalizedOptions = useNormalizedOptionsArray(props)\n\n// METHODS\nfunction getVariant(option) {\n let variant = ''\n\n let columns = 1\n columns += option.checkbox ? 1 : 0\n columns += option.icon ? 1 : 0\n columns += option.profileImg ? 1 : 0\n\n if (columns > 1) {\n variant += ` ${columns}-col`\n }\n\n if (option.checkbox) {\n variant += ' checkbox'\n }\n\n if (option.description) {\n variant += ' description'\n }\n\n if (option.negative) {\n variant += ' negative'\n }\n\n return variant\n}\n\nfunction useAltText(profileName, label) {\n return !!profileName && profileName !== label\n}\n</script>\n\n<template>\n<BsDropdownOptionDeprecated\n v-for=\"option in normalizedOptions\"\n :aria-checked=\"option.checkbox ? option.checkbox.checked : undefined\"\n :key=\"option.value\"\n :value-id-key=\"valueIdKey\"\n :value=\"option.value\"\n :variant=\"getVariant(option)\"\n>\n <!-- Checkbox -->\n <span\n v-if=\"option.checkbox\"\n :id=\"option.checkbox.inputId\"\n aria-hidden=\"true\"\n class=\"bs-checkbox\"\n :data-checked=\"option.checkbox.checked\"\n />\n\n <!-- Icon -->\n <span v-if=\"option.icon\">\n <BsIcon v-if=\"typeof option.icon === 'string'\" :name=\"option.icon\" />\n <component v-else :is=\"option.icon\" />\n </span>\n\n <!-- Profile Img -->\n <BsProfileImg\n v-if=\"option.profileImg\"\n :src=\"option.profileImg.src\"\n size=\"xs\"\n :initials=\"option.profileImg.initials\"\n :profile-name=\"option.profileImg.profileName\"\n :use-alt-text=\"useAltText(option.profileImg.profileName, option.label)\"\n />\n\n <!-- Label -->\n <span v-if=\"option.labelHtml\" v-html=\"option.labelHtml\" />\n <span v-else>{{ option.label }}</span>\n\n <!-- Description -->\n <span v-if=\"option.description\">{{ option.description }}</span>\n</BsDropdownOptionDeprecated>\n\n<li role=\"option\" data-no-hover v-if=\"showNoOptions && normalizedOptions.length === 0\">\n <slot name=\"no-options\">No options</slot>\n</li>\n</template>\n","<template>\n <div\n class=\"bs-input-search\"\n data-component=\"bs-input-search\"\n :data-variant=\"variant\"\n :id=\"rootId\"\n v-bind=\"filtered\"\n tabindex=\"-1\"\n @focus=\"isInputFocused = true\">\n\n <BsIconSearch\n v-if=\"!hideSearchIcon\"\n class=\"bs-input-search-icon\"\n aria-hidden=\"true\" />\n\n <!-- :id binding and id prop in defs file can be removed, once deprecated inputId prop is removed (will fall-through) -->\n <BsInput\n :id=\"idOrAutoId\"\n class=\"bs-input-search-input\"\n aria-label=\"Search\"\n :disabled=\"disabled\"\n :error=\"error\"\n :placeholder=\"placeholder\"\n v-model=\"model\"\n v-bind=\"remaining\"\n v-focus=\"isInputFocused\"\n @blur=\"isInputFocused = false\"/>\n\n <button\n v-if=\"showClear\"\n class=\"bs-input-search-button\"\n type=\"button\"\n aria-label=\"Clear\"\n @click.stop=\"onClearButtonClick\">\n <BsIconClose size=\"sm\" aria-hidden=\"true\" />\n </button>\n\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, mergeProps, useId } from 'vue'\nimport BsInput from '@components/input/BsInput.vue'\nimport { BsIconSearch, BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { inputSearchPropDefinitions, inputSearchEmitsDefinitions } from './defs-input-search.js'\nimport { vFocus } from '@directives/vFocus.js'\nimport { useDeprecatedProp, useDeprecatedPropActual } from '@composables/deprecated'\n\nconst emit = defineEmits(Object.keys(inputSearchEmitsDefinitions))\n\nconst props = defineProps(inputSearchPropDefinitions)\n\n// handle deprecated props\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\nconst idActual = useDeprecatedPropActual(props, 'inputId', 'id')\n\nuseDeprecatedProp(props, 'hideClear', 'preventClear')\nconst preventClearActual = useDeprecatedPropActual(props, 'hideClear', 'preventClear')\n\ndefineOptions({ inheritAttrs: false })\n\nconst model = defineModel({\n type: String,\n default: ''\n})\n\nconst autoId = useId()\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// change idActual.value to props.id once deprecated inputId is removed\nconst idOrAutoId = computed(() => idActual.value || autoId)\n\nconst rootId = computed(() => `${idOrAutoId.value}-wrap`)\n\nconst isInputFocused = ref(false)\n\nconst showClear = computed(() => {\n return model.value\n && !props.disabled\n && !preventClearActual.value\n && props.variant !== 'filter'\n})\n\nfunction onClearButtonClick() {\n model.value = ''\n isInputFocused.value = true\n emit('clear')\n}\n</script>\n","import { onMounted, onUnmounted } from 'vue'\n\n/**\n * Creates a mutation observer for the target element.\n *\n * @param {Ref} targetRef Vue ref of the target element.\n * @param {function} callback The callback function to be called when a mutation\n * occurs.\n * @param {{}} options The MutationObserver options. See https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/observe#options\n * for a list of these options.\n */\nconst useMutationObserver = (targetRef, callback, options) => {\n let observer = null\n\n onMounted(() => {\n observer = new MutationObserver(callback)\n observer.observe(targetRef.value, options)\n })\n\n onUnmounted(() => {\n observer?.disconnect()\n })\n}\nexport default useMutationObserver\n","<script setup>\nimport { ref, onMounted, onUnmounted, provide, watch, computed, inject } from 'vue'\nimport useMutationObserver from '../../../composables/mutationObserver'\nimport useKeydown from '../../../composables/keydown'\nimport { optionIdFromVal } from '@utils/dropdown'\nimport { useDeprecatedProp, useDeprecatedPropActual } from '@composables/deprecated.js'\n\n// PROPS\nconst props = defineProps({\n optionsId: {\n type: String,\n required: true\n },\n label: {\n type: String,\n default: \"Select an option\"\n },\n modelValue: {\n type: [ String, Number, Object ],\n default: undefined\n },\n /* Internal use only - no need to document */\n multiselect: {\n type: Boolean,\n default: false\n },\n preventTab: {\n type: Boolean,\n default: true\n },\n // DEPRECATED\n selectedValue: {\n default: undefined\n },\n})\nuseDeprecatedProp(props, 'selectedValue', undefined, 'Use \\'modelValue\\' (or \\'v-model\\') instead')\nconst selectedValueActual = useDeprecatedPropActual(props, 'selectedValue', 'modelValue')\n\n// EMITS\nconst emit = defineEmits([\n 'close',\n 'options-list-shift-tab',\n 'options-list-tab',\n 'update:modelValue',\n])\n\n\n// REFS\nconst optionsRef = ref(null)\n\n\n// STATE\nconst activeDescendantId = ref(null)\nconst activeIndex = ref(-1)\nconst selectedIndex = ref(-1)\nconst optionEls = ref(null)\nconst hasOverflow = ref(false)\nlet registeredOptionsById = {}\n\n// State provided from BsDropdownDeprecated parent\nconst dropdownEnter = inject('dropdownEnter', ref(false))\nconst dropdownAfterEnter = inject('dropdownAfterEnter', ref(false))\nconst dropdownShown = inject('dropdownShown', ref(false))\n\n\n// PROVIDE (to slotted BsDropdownOptions)\nprovide('optionsId', computed(() => props.optionsId))\nprovide('handleOptionSelect', handleOptionSelect)\nprovide('registerOptionById', ({ id, val }) => {\n registeredOptionsById[id] = val\n})\n\n\n// COMPOSABLES\nuseMutationObserver(optionsRef, refreshOptions, { childList: true })\n\nconst selectKeys = [' ', 'Enter', 'NumpadEnter']\nuseKeydown(selectKeys, handleKeyboardSelect, optionsRef)\n\nconst traverseKeys = ['ArrowDown', 'ArrowUp', 'Home', 'End']\nuseKeydown(traverseKeys, handleKeyDown)\n\nconst typeToFocusKeys = [/^[a-zA-Z0-9]{1}$/]\nconst typeToFocusData = {\n keys: '',\n lastTyped: 0\n}\nuseKeydown(typeToFocusKeys, e => typeToFocus(e, typeToFocusData))\n\n// LIFECYCLE\nonMounted(() => {\n refreshOptions()\n handleShownChange(dropdownShown.value)\n})\n\nonUnmounted(() => {\n registeredOptionsById = null\n})\n\n// Needed for fixing a long-standing firefox bug with scrollbars and content-width\n// https://bugzilla.mozilla.org/show_bug.cgi?id=764076\nwatch(\n [ dropdownEnter, () => optionEls.value?.length ],\n ([ entered, optionsLen ]) => {\n if (entered && optionsLen > 0) {\n hasOverflow.value = optionsRef.value.scrollHeight > optionsRef.value.clientHeight\n }\n }\n)\n\nwatch(dropdownAfterEnter, (newVal) => {\n // Scroll into view once the dropdown is fully done with transitions\n if (newVal) {\n scrollOptionsListIntoView()\n scrollCurrentActiveIntoView()\n }\n})\n\nwatch(dropdownShown, (newVal) => handleShownChange(newVal))\n\n// METHODS\nfunction refreshOptions() {\n optionEls.value = Array.from(\n optionsRef.value.querySelectorAll('[data-component=\"bs-dropdown-option\"]')\n )\n}\n\nfunction scrollOptionsListIntoView() {\n if (optionsRef.value.getBoundingClientRect().bottom > window.innerHeight) {\n optionsRef.value.scrollIntoView({ block: 'nearest' })\n }\n}\n\nfunction scrollCurrentActiveIntoView() {\n if (activeIndex.value > -1) {\n // Always make sure the container is fully scrolled into view otherwise\n // the browser may not scroll the active item into view\n scrollOptionsListIntoView()\n optionEls.value[activeIndex.value]?.scrollIntoView({ block: 'nearest' })\n }\n}\n\nfunction setCurrentActive() {\n if (activeIndex.value > -1) {\n optionEls.value[activeIndex.value]?.setAttribute('data-active', '')\n activeDescendantId.value = optionEls.value[activeIndex.value]?.id\n scrollCurrentActiveIntoView()\n }\n}\n\nfunction removeCurrentActive() {\n if (activeIndex.value > -1) {\n optionEls.value[activeIndex.value]?.removeAttribute('data-active')\n }\n}\n\nfunction handleOptionsFocus() {\n if (activeIndex.value < 0) {\n activeIndex.value = 0\n activeDescendantId.value = optionEls.value[0]?.id\n }\n setCurrentActive()\n}\n\nfunction handleShownChange(newVal) {\n if (newVal) {\n handleShown()\n } else {\n handleNotShown()\n }\n}\n\nfunction handleShown() {\n // Note that multiselect handles its own selection state\n if (!props.multiselect) {\n // Find selected index\n selectedIndex.value = optionEls.value.findIndex(\n // valueIdKey will only be present if value is an object\n el => el.dataset.valueIdKey\n ? el.id === optionIdFromVal(props.optionsId, selectedValueActual.value, el.dataset.valueIdKey)\n : el.dataset.value === String(selectedValueActual.value)\n )\n\n // Set selected when applicable\n if (!props.multiselect && selectedIndex.value > -1) {\n optionEls.value[selectedIndex.value]?.setAttribute('data-selected', '')\n optionEls.value[selectedIndex.value]?.setAttribute('aria-selected', 'true')\n }\n\n // Set active index\n activeIndex.value = selectedIndex.value\n }\n}\n\nfunction handleNotShown() {\n // Reset selected option\n optionEls.value.forEach((option) => {\n option.removeAttribute('data-selected')\n // aria-selected should always be either true or false - https://w3c.github.io/aria/#aria-selected\n option.setAttribute('aria-selected', 'false')\n })\n // Reset active option\n removeCurrentActive()\n // Reset state\n selectedIndex.value = -1\n activeIndex.value = -1\n activeDescendantId.value = null\n}\n\nfunction handleOptionSelect(option) {\n // If the option has a link, click it\n option.querySelector('a')?.click()\n\n // Retrieve option value\n let value = option.dataset.valueIdKey\n ? registeredOptionsById[option.id]\n : option.dataset.value\n if (option.dataset.valueType == 'number') {\n value = Number(value)\n }\n // Emit events\n activeDescendantId.value = option.id\n removeCurrentActive()\n emit('update:modelValue', value)\n emit('close')\n}\n\nfunction handleKeyboardSelect(ev) {\n handleOptionSelect(optionEls.value[activeIndex.value])\n ev.preventDefault()\n}\n\nfunction handleKeyDown(ev) {\n if (dropdownShown.value) {\n switch (ev.key) {\n case 'ArrowDown':\n traverse('down')\n ev.preventDefault()\n break\n case 'ArrowUp':\n traverse('up')\n ev.preventDefault()\n break\n case 'Home':\n traverse('home')\n ev.preventDefault()\n break\n case 'End':\n traverse('end')\n ev.preventDefault()\n break\n }\n }\n}\n\n/** Traverses the option list via keyboard navigation */\nfunction traverse(direction) {\n let newIndex\n switch (direction) {\n case 'up':\n newIndex = (activeIndex.value - 1 < 0) ?\n optionEls.value.length - 1 :\n activeIndex.value - 1\n break\n case 'down':\n newIndex = (activeIndex.value + 1) % optionEls.value.length\n break\n case 'home':\n newIndex = 0\n break\n case 'end':\n newIndex = optionEls.value.length - 1\n break\n }\n updateCurrentActive(newIndex)\n}\n\nfunction typeToFocus(ev, ttfState) {\n if (!dropdownShown.value) return\n\n ttfState.keys = (ev.timeStamp - ttfState.lastTyped > 500) ? ev.key : ttfState.keys + ev.key\n ttfState.lastTyped = ev.timeStamp\n\n const matchIdx = optionEls.value.findIndex((el) => {\n return el.textContent\n .replaceAll(/[^a-zA-Z0-9]/g, '')\n .toLowerCase()\n .startsWith(ttfState.keys)\n })\n\n if (matchIdx > -1) updateCurrentActive(matchIdx, false)\n}\n\nfunction updateCurrentActive(activeIdx, withFocus = true) {\n removeCurrentActive()\n activeIndex.value = activeIdx\n if (document.activeElement !== optionsRef.value && withFocus) {\n // Focusing the options list actually triggers setCurrentActive\n optionsRef.value.focus()\n } else {\n setCurrentActive()\n }\n}\n\n// We're exposing these refs/vars/funcs to parent component(s) (e.g. BsDropdownMultiselectDeprecated),\n// so we'll want to treat them as part of the public interface\n// for this component in terms of preserving compatibility.\ndefineExpose({\n activeIndex,\n optionEls,\n optionsRef,\n refreshOptions,\n setCurrentActive\n})\n</script>\n\n<template>\n\n<ul\n ref=\"optionsRef\"\n :aria-activedescendant=\"activeDescendantId || undefined\"\n :aria-label=\"label\"\n aria-live=\"polite\"\n class=\"bs-dropdown-options-deprecated\"\n data-component=\"bs-dropdown-option-list\"\n :data-overflow=\"hasOverflow\"\n :id=\"optionsId\"\n role=\"listbox\"\n :tabindex=\"dropdownShown ? 0 : undefined\"\n @blur=\"removeCurrentActive\"\n @focus=\"handleOptionsFocus\"\n @keydown.shift.tab=\"emit('options-list-shift-tab')\"\n @keydown.tab.exact=\"emit('options-list-tab')\"\n @mousedown.prevent\n>\n <slot></slot>\n</ul>\n\n</template>\n","<script setup>\nimport { computed, nextTick, ref, watch } from 'vue'\nimport BsDropdownOptionListDeprecated from '../dropdown-option-list/BsDropdownOptionListDeprecated.vue'\nimport BsDropdownOptionBuilderDeprecated from '../dropdown-option-builder/BsDropdownOptionBuilderDeprecated.vue'\nimport { useNormalizedOptionsArray } from '../../../composables/normalizeOptionsArray'\n\nconst props = defineProps({\n focusOnOpen: {\n type: Boolean,\n default: true\n },\n label: {\n type: String,\n default: \"Select an option\"\n },\n options: {\n type: Array,\n default: () => []\n },\n optionsId: {\n type: String,\n required: true\n },\n selectedOptions: {\n type: Array,\n default: () => []\n },\n shown: {\n type: Boolean,\n default: false\n },\n valueIdKey: {\n type: String,\n default: \"id\"\n }\n})\n\nconst emit = defineEmits([\n 'check-option',\n 'options-list-shift-tab',\n 'options-list-tab',\n 'uncheck-option',\n 'update:selectedOptions',\n])\n\nconst optlist = ref(null)\nconst selectedLocalOptions = ref([])\nconst unselectedLocalOptions = ref([])\n\nconst showDivider = computed(() => selectedLocalOptions.value?.length && unselectedLocalOptions.value?.length)\nconst hasSomeOptions = computed(() => selectedLocalOptions.value?.length || unselectedLocalOptions.value?.length)\n\nlet refocusPending = false\n\n// Support string[] by normalizing to { value, label }\nconst normalizedOptions = useNormalizedOptionsArray(props)\n\nwatch(() => props.options, () => {\n sortSelectedUnselected(props.selectedOptions)\n})\n\nwatch(() => props.selectedOptions,\n sortSelectedUnselected,\n { immediate: true }\n)\n\nwatch(() => props.shown, (val) => {\n if (val && props.focusOnOpen) nextTick(focusFirstOption)\n})\n\nfunction focusFirstOption() {\n if (optlist.value) {\n optlist.value.refreshOptions()\n optlist.value.optionsRef.focus()\n }\n}\n\n// When an opt is (un)selected, that opt moves (down) up, so we need to set active\n// on the opt that now takes the position of the previously active opt\nfunction refocusOnOption() {\n if (optlist.value) {\n optlist.value.refreshOptions()\n optlist.value.setCurrentActive()\n }\n}\n\nfunction sortSelectedUnselected(updatedSelectedOptions = []) {\n const byId = updatedSelectedOptions[0]?.[props.valueIdKey] !== undefined\n if (byId) updatedSelectedOptions = updatedSelectedOptions.map(opt => opt[props.valueIdKey])\n const valuesOrIds = new Set(updatedSelectedOptions)\n const selected = []\n const unselected = []\n normalizedOptions.value.forEach((option) => {\n const newOption = { ...option }\n const inputIdMiddle = byId ? option.value[props.valueIdKey] : option.value\n const inputId = `${props.optionsId}-${inputIdMiddle}-cb`\n if (valuesOrIds.has(byId ? option.value[props.valueIdKey] : option.value)) {\n newOption.checkbox = { inputId, checked: true }\n selected.push(newOption)\n } else {\n newOption.checkbox = { inputId, checked: false }\n unselected.push(newOption)\n }\n })\n\n selectedLocalOptions.value = selected\n nextTick(() => {\n unselectedLocalOptions.value = unselected\n nextTick(() => {\n // we need to this additional check to avoid the `immediate` watcher on\n // `props.selectedOptions` from causing a refocus when the dropdown is closed\n if (refocusPending) refocusOnOption()\n refocusPending = false\n })\n })\n}\n\nfunction preorderPayload(unsortedPayload = []) {\n const values = new Set(unsortedPayload)\n const sorted = []\n // Maintain the order of the options as they were passed in\n normalizedOptions.value.forEach(f => {\n if (values.has(f.value)) sorted.push(f.value)\n })\n return sorted\n}\n\nfunction handleOptionSelect(value) {\n let payload = []\n if (props.selectedOptions.includes(value)) {\n payload = props.selectedOptions.filter(f => f !== value)\n emit('uncheck-option', value)\n } else {\n payload = preorderPayload([...props.selectedOptions, value])\n emit('check-option', value)\n }\n refocusPending = true\n emit('update:selectedOptions', payload)\n}\n</script>\n\n<template>\n<BsDropdownOptionListDeprecated\n ref=\"optlist\"\n aria-multiselectable=\"true\"\n data-component=\"bs-dropdown-multiselect\"\n :label=\"label\"\n multiselect\n :options-id=\"optionsId\"\n :shown=\"shown\"\n @options-list-shift-tab=\"emit('options-list-shift-tab')\"\n @options-list-tab=\"emit('options-list-tab')\"\n @update:modelValue=\"handleOptionSelect\"\n>\n <template v-if=\"hasSomeOptions\">\n <BsDropdownOptionBuilderDeprecated\n :options=\"selectedLocalOptions\"\n :show-no-options=\"false\"\n :value-id-key=\"valueIdKey\"\n />\n <li aria-label=\"separator\" role=\"option\" v-show=\"showDivider\"><hr /></li>\n <BsDropdownOptionBuilderDeprecated\n :options=\"unselectedLocalOptions\"\n :show-no-options=\"false\"\n :value-id-key=\"valueIdKey\"\n />\n </template>\n\n <li\n v-else\n role=\"option\"\n data-no-hover=\"true\"\n >\n <slot name=\"no-options\">No options</slot>\n </li>\n</BsDropdownOptionListDeprecated>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue'\nimport { useGenIdAttrs } from '../../../composables/genId'\nimport { useNormalizedOptionsArray } from '../../../composables/normalizeOptionsArray'\nimport BsFilterButton from '../../filter-button/BsFilterButton.vue'\nimport BsDropdownDeprecated from '../dropdown/BsDropdownDeprecated.vue'\nimport BsDropdownOptionBuilderDeprecated from '../dropdown-option-builder/BsDropdownOptionBuilderDeprecated.vue'\nimport BsInputSearch from '../../input-search/BsInputSearch.vue'\nimport BsButton from '@components/button/BsButton.vue'\nimport BsDropdownMultiselectDeprecated from '../dropdown-multiselect/BsDropdownMultiselectDeprecated.vue'\nimport BsDropdownOptionListDeprecated from '../dropdown-option-list/BsDropdownOptionListDeprecated.vue'\n\n// PROPS\nconst props = defineProps({\n anchorId: {\n type: String,\n default: '',\n },\n breakout: {\n type: Boolean,\n default: false,\n },\n containerId: {\n type: String,\n default: '',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n dropdownLabel: {\n type: String,\n default: 'Select an option',\n },\n dropdownPosition: {\n type: String,\n validator: value => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n default: '',\n },\n dropdownWidth: {\n type: String,\n validator: value => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor', 'toggle'].includes(value)\n },\n default: 'md',\n },\n filter: {\n type: Boolean,\n default: false,\n },\n filterButtonText: {\n type: String,\n default: 'Select',\n },\n filterLabel: {\n type: String,\n default: '',\n },\n filterPlaceholder: {\n type: String,\n default: 'Search...',\n },\n helperText: {\n type: String,\n default: '',\n },\n helperDescription: {\n type: String,\n default: '',\n },\n multiselect: {\n type: Boolean,\n default: false,\n },\n open: {\n type: Boolean,\n default: true,\n },\n options: {\n type: Array,\n default: () => [],\n },\n optionsId: {\n type: String,\n default: '',\n },\n selectedOption: {\n type: [String, Number, Object],\n default: '',\n },\n selectedOptions: {\n type: Array,\n default: () => [],\n },\n showBadgeCount: {\n type: Boolean,\n default: false,\n },\n toggleId: {\n type: String,\n default: '',\n },\n toggleLabel: {\n type: String,\n default: 'Filter',\n },\n toggleSize: {\n type: String,\n validator: val => ['', 'sm', 'xs'].includes(val),\n default: '',\n },\n useMobileStyle: {\n type: Boolean,\n default: true,\n },\n valueIdKey: {\n type: String,\n default: 'id',\n },\n})\n\n// EMITS\nconst emit = defineEmits([\n 'check-option',\n 'close',\n 'options-list-shift-tab',\n 'options-list-tab',\n 'toggled',\n 'uncheck-option',\n 'update:selectedOption',\n 'update:selectedOptions',\n])\n\n// VARIABLES\nlet toggleEl = null\n\n// COMPOSABLES\nconst [autoToggleId, autoOptionsId] = useGenIdAttrs(2)\n\n// REFS\nconst isShown = ref(false)\nconst filterTerm = ref('')\n\n// COMPUTED\nconst badgeCount = computed(() => {\n return props.selectedOptions.length\n})\n\nconst OptionList = computed(() =>\n props.multiselect ? BsDropdownMultiselectDeprecated : BsDropdownOptionListDeprecated,\n)\n\nconst optionsIdActual = computed(() => props.optionsId || autoOptionsId.value)\n\nconst toggleIdActual = computed(() => props.toggleId || autoToggleId.value)\n\n// Normalize options to objects, supporting string[] inputs\nconst normalizedOptions = useNormalizedOptionsArray(props)\n\nconst filteredOptions = computed(() => {\n if (filterTerm.value) {\n return normalizedOptions.value.filter(option =>\n option.label.toLowerCase().startsWith(filterTerm.value.toLowerCase()),\n )\n }\n return normalizedOptions.value\n})\n\nconst optionsComputed = computed(() => {\n return props.filter ? filteredOptions.value : normalizedOptions.value\n})\n\n// METHODS\nconst getToggleEl = () =>\n toggleEl ? toggleEl : (toggleEl = document.getElementById(toggleIdActual.value))\n\nfunction checkShouldRestoreFocus() {\n const activeEl = document.activeElement\n return !activeEl || activeEl.tagName === 'BODY' || activeEl.id === optionsIdActual.value\n}\n\nfunction closeAndRestoreFocus() {\n isShown.value = false\n emit('close')\n\n if (checkShouldRestoreFocus()) {\n getToggleEl()?.focus?.()\n }\n}\n\nfunction handleClose() {\n if (isShown.value) {\n closeAndRestoreFocus()\n }\n}\n\n/** When enter has started, this means the element is mounted. */\nfunction handleEnterStart() {\n isShown.value = true\n}\n\nfunction handleUncheckOption(value) {\n const newOptionsValue = props.selectedOptions.filter(opt => opt !== value)\n emit('update:selectedOptions', newOptionsValue)\n emit('uncheck-option', value)\n}\n\nfunction handleCheckOption(value) {\n const newOptionsValue = [...props.selectedOptions, value]\n emit('update:selectedOptions', newOptionsValue)\n emit('check-option', value)\n}\n\nfunction handleSingleSelect(val) {\n if (!props.multiselect) {\n emit('update:selectedOption', val)\n closeAndRestoreFocus()\n }\n}\n\nfunction handleSearchClear() {\n filterTerm.value = ''\n}\n\nfunction handleSearchUpdate(val) {\n filterTerm.value = val\n}\n</script>\n\n<template>\n <div class=\"bs-dropdown-with-toggle\" :id=\"$attrs.id\">\n <slot\n name=\"toggle\"\n :anchor-id=\"anchorId\"\n :options-id=\"optionsIdActual\"\n :toggle-id=\"toggleIdActual\"\n >\n <BsFilterButton\n :aria-controls=\"optionsIdActual\"\n :aria-expanded=\"open\"\n :disabled=\"disabled\"\n :id=\"toggleIdActual\"\n :open=\"open\"\n :options-id=\"optionsIdActual\"\n :size=\"toggleSize\"\n :badge-count=\"showBadgeCount && multiselect ? badgeCount : undefined\"\n @click=\"$emit('toggled')\"\n >\n <template #label>\n <slot name=\"toggle-label\">\n {{ toggleLabel }}\n </slot>\n </template>\n </BsFilterButton>\n </slot>\n <BsDropdownDeprecated\n :anchor-id=\"anchorId || toggleIdActual\"\n :breakout=\"breakout\"\n :container-id=\"containerId\"\n :helper-text=\"helperText\"\n :helper-description=\"helperDescription\"\n :position=\"dropdownPosition\"\n preloaded\n :shown=\"open\"\n :use-mobile-style=\"useMobileStyle\"\n :width=\"dropdownWidth\"\n @close=\"handleClose\"\n @enter=\"handleEnterStart\"\n @after-leave=\"handleSearchClear\"\n >\n <div v-if=\"filter\" class=\"filter-input-container\">\n <BsInputSearch\n :aria-label=\"filterLabel\"\n :model-value=\"filterTerm\"\n :placeholder=\"filterPlaceholder\"\n @update:modelValue=\"handleSearchUpdate\"\n @clear=\"handleSearchClear\"\n />\n </div>\n\n <!--\n model-value / update:modelValue - for BsDropdownOptionListDeprecated\n selected-options / check-option / uncheck-option - for BsDropdownMultiselectDeprecated\n -->\n <OptionList\n :class=\"{ 'filterable-options': filter }\"\n :label=\"dropdownLabel\"\n :model-value=\"selectedOption\"\n :options=\"multiselect ? optionsComputed : undefined\"\n :options-id=\"optionsIdActual\"\n :selected-options=\"selectedOptions\"\n :shown=\"open\"\n :value-id-key=\"valueIdKey\"\n @check-option=\"handleCheckOption\"\n @close=\"multiselect ? undefined : handleClose()\"\n @options-list-shift-tab=\"$emit('options-list-shift-tab')\"\n @options-list-tab=\"$emit('options-list-tab')\"\n @uncheck-option=\"handleUncheckOption\"\n @update:modelValue=\"handleSingleSelect\"\n >\n <template v-if=\"!multiselect\">\n <BsDropdownOptionBuilderDeprecated :options=\"optionsComputed\" :value-id-key=\"valueIdKey\" />\n </template>\n </OptionList>\n <div v-if=\"multiselect\" class=\"mobile-select-button-container\">\n <BsButton\n :title=\"filterButtonText\"\n class=\"mobile-select-button\"\n @click=\"() => emit('close')\"\n >{{ filterButtonText }}</BsButton\n >\n </div>\n </BsDropdownDeprecated>\n </div>\n</template>\n\n<style>\ndiv:where(.bs-dropdown-deprecated-with-toggle) {\n position: relative;\n}\n\n:where(.bs-label + .bs-dropdown-deprecated-with-toggle) {\n margin-top: 0.25rem;\n}\n\n.filter-input-container {\n padding: 0.75rem;\n}\n\n.filterable-options {\n padding-top: 0;\n}\n</style>\n","<script setup>\nimport { computed, ref } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport BsInputCombobox from './internal/BsInputComboboxDeprecated.vue'\nimport BsDropdownWithToggleDeprecated from '@components/_deprecated/dropdown-with-toggle/BsDropdownWithToggleDeprecated.vue'\n\n// PROPS\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false\n },\n displayValue: {\n type: String,\n default: ''\n },\n dropdownPosition: {\n type: String,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n dropdownWidth: {\n type: String,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n error: {\n type: Boolean,\n default: false\n },\n helperText: {\n type: String,\n default: ''\n },\n helperDescription: {\n type: String,\n default: ''\n },\n hintId: {\n type: String,\n },\n inputId: {\n type: String,\n },\n modelValue: {\n type: String,\n default: ''\n },\n options: {\n type: Array,\n default: () => []\n },\n placeholder: {\n type: String,\n },\n required: {\n type: Boolean,\n default: false\n },\n updateOnInput: {\n type: Boolean,\n default: false\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n valueIdKey: {\n type: String,\n default: 'id'\n },\n})\n\n// EMITS\nconst emit = defineEmits(['update:modelValue', 'combobox:change', 'combobox:input'])\n\n// STATE\nconst [ inputIdGen, inputWrapperId, optionsId ] = useGenIdAttrs(3)\nconst open = ref(false)\nconst preventFocusOpen = ref(false)\n\n// REFS\nconst inputComboboxRef = ref(null)\n\n// COMPUTED\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\n\n// VARIABLES\nlet inputEl = null\n\n// METHODS\nfunction getInputEl() {\n if (!inputEl) {\n inputEl = inputComboboxRef.value.$el.querySelector('input')\n }\n return inputEl\n}\n\nfunction handleChange(e) {\n emit('combobox:change', e.target.value)\n emit('update:modelValue', e.target.value)\n}\n\nfunction handleClear() {\n getInputEl().focus()\n emit('combobox:change', '')\n emit('update:modelValue', '')\n}\n\nfunction handleInput(e) {\n emit('combobox:input', e.target.value)\n if (props.updateOnInput) {\n emit('update:modelValue', e.target.value)\n }\n}\n\nfunction handleDropdownClose() {\n open.value = false\n // Input is re-focused after the dropdown closes, so we need to prevent\n // re-opening the dropdown immediately in this case\n if (document.activeElement !== getInputEl()) {\n preventFocusOpen.value = true\n }\n}\n\n// \"focus\" event happens between \"mousedown\" and \"mouseup\", so we need to\n// prevent opening the dropdown on focus if the input was clicked (note that\n// \"click\" event is the same as \"mousedown\" >> \"mouseup\")\nfunction handleInputMousedown() {\n preventFocusOpen.value = true\n}\n\nfunction handleInputMouseup() {\n open.value = true\n preventFocusOpen.value = false\n}\n\nfunction handleFocus() {\n if (preventFocusOpen.value) {\n // Preventing opening the dropdown only once. This is essentially only\n // for the case where the dropdown is closed and the input is focused\n preventFocusOpen.value = false\n } else {\n open.value = true\n }\n}\n\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n<BsDropdownWithToggleDeprecated\n :anchor-id=\"inputWrapperId\"\n :disabled=\"disabled\"\n :dropdown-position=\"dropdownPosition\"\n :dropdown-width=\"dropdownWidth\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :multiselect=\"false\"\n :open=\"open\"\n :options=\"options\"\n :options-id=\"optionsId\"\n :selected-option=\"modelValue\"\n :toggle-id=\"$attrs.id || inputIdAttr\"\n :use-mobile-style=\"useMobileStyle\"\n :value-id-key=\"valueIdKey\"\n @close=\"handleDropdownClose\"\n @options-list-tab=\"open = false\"\n @update:selectedOption=\"$emit('update:modelValue', $event)\"\n>\n <template #toggle>\n <BsInputCombobox\n ref=\"inputComboboxRef\"\n :id=\"$attrs.id || inputIdAttr\"\n :container-id=\"inputWrapperId\"\n :disabled=\"disabled\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :model-value=\"displayValue || modelValue\"\n :open=\"open\"\n :options-id=\"optionsId\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n @change=\"handleChange\"\n @clear=\"handleClear\"\n @input=\"handleInput\"\n @input-focus=\"handleFocus\"\n @input-mousedown=\"handleInputMousedown\"\n @input-mouseup=\"handleInputMouseup\"\n @input-shift-tab=\"open = false\"\n @toggled=\"open = !open\"\n v-bind=\"$attrs\"\n />\n </template>\n</BsDropdownWithToggleDeprecated>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport BsDropdownComboboxDeprecated from '../dropdown-combobox/BsDropdownComboboxDeprecated.vue'\nimport BsFieldDetails from '../../field-details/BsFieldDetails.vue'\nimport BsLabel from '../../label/BsLabel.vue'\n\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false\n },\n displayValue: {\n type: String,\n default: ''\n },\n dropdownPosition: {\n type: String,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n dropdownWidth: {\n type: String,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n error: {\n type: Boolean,\n default: false\n },\n errorMsg: {\n type: String,\n },\n helperText: {\n type: String,\n default: ''\n },\n helperDescription: {\n type: String,\n default: ''\n },\n hint: {\n type: String,\n },\n hintId: {\n type: String,\n },\n inputId: {\n type: String,\n },\n label: {\n type: String,\n },\n modelValue: {\n type: String,\n default: ''\n },\n options: {\n type: Array,\n default: () => []\n },\n placeholder: {\n type: String,\n },\n required: {\n type: Boolean,\n default: false\n },\n updateOnInput: {\n type: Boolean,\n default: false\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n valueIdKey: {\n type: String,\n default: 'id'\n },\n})\nconst emit = defineEmits(['update:modelValue', 'combobox:change', 'combobox:input'])\n\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed properties\nconst hintMsg = computed(() => (\n (props.error && props.errorMsg) || props.hint || undefined\n))\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\n\n</script>\n\n<template>\n<div data-component=\"bs-dropdown-combobox-field\" v-bind=\"filtered\">\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <BsDropdownComboboxDeprecated\n :disabled=\"disabled\"\n :display-value=\"displayValue\"\n :dropdown-position=\"dropdownPosition\"\n :dropdown-width=\"dropdownWidth\"\n :error=\"error\"\n :helper-text=\"helperText\"\n :helper-description=\"helperDescription\"\n :hint-id=\"hintId\"\n :input-id=\"$attrs.id || inputIdAttr\"\n :model-value=\"modelValue\"\n :options=\"options\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :update-on-input=\"updateOnInput\"\n :use-mobile-style=\"useMobileStyle\"\n :value-id-key=\"valueIdKey\"\n @combobox:change=\"$event => $emit('combobox:change', $event)\"\n @combobox:input=\"$event => $emit('combobox:input', $event)\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n />\n <BsFieldDetails v-if=\"hintMsg\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint\"\n :hint-id=\"hintId\"\n />\n</div>\n</template>\n","<script setup>\nimport { ref } from 'vue'\nimport BsDropdownDeprecated from '../dropdown/BsDropdownDeprecated.vue'\nimport BsDropdownOptionListDeprecated from '../dropdown-option-list/BsDropdownOptionListDeprecated.vue'\n\n// PROPS\nconst props = defineProps({\n // DROPDOWN PROPS\n anchorId: {\n type: String,\n default: undefined\n },\n breakout: {\n type: Boolean,\n default: false\n },\n containerId: {\n type: String,\n default: undefined\n },\n helperDescription: {\n type: String,\n default: undefined\n },\n helperText: {\n type: String,\n default: undefined\n },\n position: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n shown: {\n type: Boolean,\n default: true\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n width: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n\n // OPTION LIST PROPS\n label: {\n type: String,\n default: \"Select an option\"\n },\n modelValue: {\n type: [ String, Number ],\n default: undefined\n },\n optionsId: {\n type: String,\n required: true\n },\n preventTab: {\n type: Boolean,\n default: true\n },\n typeToFocus: {\n type: Boolean,\n default: false\n },\n})\n\n// EMITS\nconst emit = defineEmits([\n 'update:modelValue',\n 'close',\n 'after-enter',\n 'after-leave'\n])\n\n// STATE\nconst isShown = ref(false)\n\n// METHODS\n/** When enter has started, this means the element is mounted. */\nfunction handleEnter() {\n isShown.value = true\n}\n\nfunction handleSelect(ev) {\n isShown.value = false\n emit('update:modelValue', ev)\n emit('close')\n}\n\nfunction handleClose() {\n if (isShown.value) {\n isShown.value = false\n emit('close')\n }\n}\n</script>\n\n<template>\n<BsDropdownDeprecated\n :anchor-id=\"anchorId\"\n :breakout=\"breakout\"\n :container-id=\"containerId\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :position=\"position\"\n :preloaded=\"preloaded\"\n :shown=\"shown\"\n :use-mobile-style=\"useMobileStyle\"\n :width=\"width\"\n @close=\"handleClose\"\n @after-enter=\"emit('after-enter')\"\n @enter=\"handleEnter\"\n @after-leave=\"emit('after-leave')\"\n>\n <BsDropdownOptionListDeprecated\n :label=\"label\"\n :model-value=\"modelValue\"\n :options-id=\"optionsId\"\n :prevent-tab=\"preventTab\"\n :type-to-focus=\"typeToFocus\"\n @update:model-value=\"handleSelect\"\n @close=\"handleClose\"\n >\n <slot />\n </BsDropdownOptionListDeprecated>\n</BsDropdownDeprecated>\n</template>\n","<!-- Handles backwards compatibility with deprecated props -->\n<!-- Replace with BsDropdownWithOptionsNew when retiring these props -->\n<script setup>\nimport { computed } from 'vue'\nimport BsDropdownWithOptionsNew from './BsDropdownWithOptionsNew.vue'\nimport { useDeprecatedTransition, useDeprecatedProp } from '@composables/deprecated.js'\n\n// PROPS\nconst props = defineProps({\n anchorId: {\n type: String,\n default: undefined\n },\n shown: {\n type: Boolean,\n default: true\n },\n breakout: {\n type: Boolean,\n default: false\n },\n containerId: {\n type: String,\n default: undefined\n },\n helperDescription: {\n type: String,\n default: undefined\n },\n helperText: {\n type: String,\n default: undefined\n },\n position: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n useMobileStyle: {\n type: Boolean,\n default: true\n },\n width: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n\n // OPTION LIST PROPS\n label: {\n type: String,\n default: \"Select an option\"\n },\n modelValue: {\n type: [ String, Number ],\n default: undefined\n },\n optionsId: {\n type: String,\n required: true\n },\n preventTab: {\n type: Boolean,\n default: true\n },\n\n // DEPRECATED\n center: {\n default: undefined\n },\n enterControlled: {\n default: undefined\n },\n enterTrigger: {\n default: undefined\n },\n leaveTrigger: {\n default: undefined\n },\n right: {\n default: undefined\n },\n selectedValue: {\n default: undefined\n },\n toggleId: {\n default: undefined\n },\n top: {\n default: undefined\n },\n})\nuseDeprecatedProp(props, 'center', 'position')\nuseDeprecatedProp(props, 'enterControlled', 'preloaded')\nuseDeprecatedProp(props, 'enterTrigger', 'shown')\nuseDeprecatedProp(props, 'leaveTrigger', 'shown')\nuseDeprecatedProp(props, 'right', 'position')\nuseDeprecatedProp(props, 'selectedValue', undefined, 'Use \\'modelValue\\' (or \\'v-model\\') instead')\nuseDeprecatedProp(props, 'toggleId', 'anchorId')\nuseDeprecatedProp(props, 'top', 'position')\n\nconst emit = defineEmits([\n 'update:modelValue',\n 'close',\n 'after-enter',\n 'after-leave'\n])\n\n// Handles enterControlled/enterTrigger/leaveTrigger backwards compatibility\nconst { transition: shownActual } = useDeprecatedTransition(props)\n\n// Handles width backwards compatibility\nconst widthActual = computed(() => {\n return props.width === 'toggle' ? 'anchor' : props.width\n})\n\n// Handles top/center/right backwards compatibility\nconst positionActual = computed(() => {\n if (props.top) {\n return 'top'\n }\n if (props.center) {\n return 'center'\n }\n if (props.right) {\n return 'right'\n }\n return props.position\n})\n\n// Handles toggleId backwards compatibility\nconst anchorIdActual = computed(()=> {\n if (props.toggleId) {\n return props.toggleId\n }\n return props.anchorId\n})\n\n// Handles selectedValue backwards compatibility\nconst modelValueActual = computed(() => {\n return props.selectedValue || props.modelValue\n})\n\nfunction handleSelect(ev) {\n emit('update:modelValue', ev)\n}\n</script>\n\n<template>\n<BsDropdownWithOptionsNew\n :anchor-id=\"anchorIdActual\"\n :breakout=\"breakout\"\n :container-id=\"containerId\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :label=\"label\"\n :model-value=\"modelValueActual\"\n :options-id=\"optionsId\"\n :position=\"positionActual\"\n :preloaded=\"preloaded\"\n :prevent-tab=\"preventTab\"\n :shown=\"shownActual\"\n :use-mobile-style=\"useMobileStyle\"\n :width=\"widthActual\"\n @close=\"emit('close')\"\n @after-enter=\"emit('after-enter')\"\n @after-leave=\"emit('after-leave')\"\n @update:model-value=\"handleSelect\"\n>\n <slot />\n</BsDropdownWithOptionsNew>\n</template>\n","<script setup>\nimport { ref, computed, useSlots } from 'vue'\nimport { BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport { propDefinitions } from './defs-empty-state.js'\n\nconst props = defineProps(propDefinitions)\n\nconst slots = useSlots()\n\nconst loaded = ref(false)\n\n// Handles deprecated prop\nconst iconActual = computed(() => {\n return props.iconName || props.icon\n})\nconst shouldDisplay = computed(() => {\n if (!!!slots['icon'] && typeof iconActual.value === 'string') {\n return loaded.value\n }\n\n return true\n})\n</script>\n\n<template>\n<div\n v-show=\"shouldDisplay\"\n class=\"bs-empty-state\"\n data-component=\"bs-empty-state\"\n :data-size=\"size\"\n>\n <div class=\"bs-empty-state-icon\">\n <slot name=\"icon\">\n <BsIcon\n v-if=\"typeof iconActual === 'string'\"\n :name=\"iconActual\"\n size=\"auto\"\n @loading=\"loaded = false\"\n @loaded=\"loaded = true\"\n />\n <component v-else :is=\"iconActual\" size=\"auto\" />\n </slot>\n </div>\n <div>\n <p class=\"bs-empty-state-title\">{{ title }}</p>\n <p class=\"bs-empty-state-description\" v-if=\"size !== 'xs'\">\n <slot name=\"description\">{{ description }}</slot>\n </p>\n <slot name=\"call-to-action\"></slot>\n </div>\n</div>\n</template>\n","<template>\n <BsPopover\n v-slot=\"{ id, cancel, confirm, close }\"\n class=\"bs-flyout\"\n data-component=\"bs-flyout\"\n type=\"flyout\"\n anchor=\"viewport\"\n :place=\"place\"\n :size=\"size\"\n :transition-name=\"transitionName\"\n :transition-duration=\"duration\">\n\n <slot v-bind=\"{ id, cancel, confirm, close }\" />\n\n </BsPopover>\n</template>\n\n<script setup>\nimport { ref, computed, provide } from 'vue'\nimport BsPopover from '@components/popover/BsPopover.vue'\nimport { propDefinitions } from './defs-flyout-component.js'\n\n// Emits: Will emit what BsPopover emits (open, close, cancel, confirm, etc.)\n\n// Props: The BsPopover props fall-through...below are Flyout-specific overrides to BsPopover settings\nconst props = defineProps(propDefinitions)\n\nconst duration = computed(() => {\n const base = 'var(--bs-transition-leisurely)'\n const durationBySize = {\n md: `calc(${base} * 1.15)`,\n lg: `calc(${base} * 1.3)`\n }\n return props.transitionDuration || durationBySize[props.size] || base\n})\n</script>\n","<script setup>\nimport { ref, computed } from 'vue'\nimport useClickAway from '@composables/clickAway'\nimport useKeydown from '@composables/keydown'\nimport BsEnhancedTransition from '../../transition/BsEnhancedTransition.vue'\nimport { BsIconClose } from '@wwtdev/bsds-icons-vue3'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = defineProps({\n absolute: {\n type: Boolean,\n default: false\n },\n position: {\n type: String,\n default: undefined,\n validator (value) {\n return ['', 'right',].includes(value)\n }\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n shown: {\n type: Boolean,\n default: true\n },\n size: {\n type: String,\n default: undefined,\n validator (value) {\n return ['', 'lg'].includes(value)\n }\n },\n toggleId: {\n type: String,\n required: true\n }\n})\n\nconst emit = defineEmits([ 'close' ])\n\nconst flyoutRef = ref(null)\n\nconst toggleEl = computed(() => {\n return document.getElementById(props.toggleId)\n})\n\nuseClickAway([ flyoutRef, toggleEl ], closeFlyout)\nuseKeydown([ 'Escape' ], closeFlyout)\n\nfunction closeFlyout() {\n const hasShownChild = flyoutRef.value?.querySelector('[data-shown=\"true\"]') !== null\n if (props.shown && !hasShownChild) {\n emit('close')\n }\n}\n</script>\n\n<template>\n<BsEnhancedTransition\n name=\"bs-flyout-deprecated\"\n :preloaded=\"preloaded\"\n :shown=\"shown\"\n>\n <div\n ref=\"flyoutRef\"\n class=\"bs-flyout-deprecated\"\n :data-absolute=\"absolute\"\n data-component=\"bs-flyout-deprecated\"\n :data-position=\"position\"\n :data-shown=\"shown\"\n :data-size=\"size\"\n v-bind=\"$attrs\"\n >\n <div class=\"bs-flyout-deprecated-close-container\">\n <button\n type=\"button\"\n title=\"Close\"\n aria-label=\"Close\"\n @click=\"closeFlyout\"\n >\n <BsIconClose />\n </button>\n </div>\n <slot></slot>\n </div>\n</BsEnhancedTransition>\n</template>\n","<script setup>\nimport { ref, onMounted, onBeforeUnmount, watch, computed } from 'vue'\n\n// PROPS\nconst props = defineProps({\n active: {\n type: Boolean,\n default: true,\n },\n preventFirstShiftTab: {\n type: Boolean,\n default: false,\n },\n preventLastTab: {\n type: Boolean,\n default: false,\n },\n selectorPrefix: {\n type: String,\n default: '',\n },\n})\n\n// EMITS\nconst emit = defineEmits(['first-shift-tab', 'last-tab' ])\n\n// REFS\nconst focusGuard = ref(null)\n\n// VARIABLES / STATE\nconst FOCUSABLE_ELEMENT_TAGS = [\n 'a[href]',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'area[href]',\n 'details',\n 'summary',\n '[tabindex]',\n '[contenteditable=\"true\"]',\n]\n\n// COMPUTED\nconst selector = computed(() => {\n // Build selector\n let selector = ''\n FOCUSABLE_ELEMENT_TAGS.forEach((tag) => {\n selector += `${props.selectorPrefix}${tag}:not([disabled]):not([tabindex=\"-1\"]),`\n })\n\n // Remove trailing comma\n selector = selector.slice(0, -1)\n return selector\n})\n\n// LIFE CYCLE HOOKS\nonMounted(() => {\n if (props.active) {\n window.addEventListener('keydown', handleKeydown)\n }\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKeydown)\n})\n\n// WATCHERS\nwatch(() => props.active, (newValue) => {\n if (newValue) {\n window.addEventListener('keydown', handleKeydown)\n } else {\n window.removeEventListener('keydown', handleKeydown)\n }\n})\n\n// METHODS\nfunction handleKeydown(ev) {\n if (ev.key === 'Tab') {\n // Find all focusable elements\n // Grabbing these every time since the DOM could change\n const focusableElements = focusGuard.value.querySelectorAll(selector.value)\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n // Handle actual tabbing\n if (document.activeElement === firstElement && ev.shiftKey) {\n handleFirstShiftTab(ev, lastElement)\n } else if (document.activeElement === lastElement && !ev.shiftKey) {\n handleLastTab(ev, firstElement)\n } else if (!focusGuard.value.contains(document.activeElement)) {\n handleOutsideTab(ev, firstElement)\n }\n }\n}\n\nfunction handleFirstShiftTab(ev, lastElement) {\n ev.preventDefault()\n if (!props.preventFirstShiftTab) {\n // Wrap around to the last element\n lastElement.focus()\n }\n emit('first-shift-tab', ev)\n}\n\nfunction handleLastTab(ev, firstElement) {\n ev.preventDefault()\n if (!props.preventLastTab) {\n // Wrap around to the first element\n firstElement.focus()\n }\n emit('last-tab', ev)\n}\n\nfunction handleOutsideTab(ev, firstElement) {\n ev.preventDefault()\n // Current focus is outside the guard, so bring it in\n firstElement.focus()\n}\n</script>\n\n<template>\n<div ref=\"focusGuard\">\n <slot></slot>\n</div>\n</template>\n","<script setup>\nimport { propDefinitions } from './defs-form-container.js'\nimport { BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport BsLabel from '../label/BsLabel.vue'\n\nconst props = defineProps(propDefinitions)\n\n</script>\n\n<template>\n <div class=\"bs-form-container\" :data-inactive=\"inactive\">\n\n <header class=\"bs-form-container-header-wrapper\">\n <div class=\"bs-form-container-header\">\n\n <div class=\"bs-form-container-title-wrapper\">\n\n <div v-if=\"icon || $slots.icon\" class=\"bs-form-container-header-icon\">\n <slot name=\"icon\">\n <BsIcon v-if=\"typeof icon === 'string'\" :name=\"icon\" size=\"auto\" />\n <component v-else :is=\"icon\" size=\"auto\" />\n </slot>\n </div>\n\n <BsLabel for=\"\" :required=\"required\" :disabled=\"inactive\">\n <span class=\"bs-form-container-title\" :data-inactive=\"inactive\">{{ title }}</span>\n </BsLabel>\n\n <div class=\"bs-form-container-title-addon\">\n <slot name=\"title-addon\" />\n </div>\n </div>\n\n <div v-if=\"subTitle\" class=\"bs-form-container-subtitle\" :data-inactive=\"inactive\">\n <span>{{ subTitle }}</span>\n </div>\n </div>\n\n <div :data-open=\"expanded\" class=\"bs-form-container-header-actions\">\n <slot name=\"header-actions\" />\n </div>\n </header>\n\n <main :data-open=\"expanded\" class=\"bs-form-container-content\">\n <slot />\n </main>\n\n </div>\n</template>","import { ref, computed, toRaw } from 'vue'\n\nexport default function useNavigationUtils(props) {\n // STATE\n const collapsedSections = ref({})\n\n // COMPUTED\n const rawNavData = computed(() => toRaw(props.navData))\n\n // METHODS\n function initializeSections(initialValue) {\n rawNavData.value.forEach((item) => {\n if (item.navItems?.length > 0 && !item.dividerOnly) {\n // Only initialize collapse state for non-divider sections\n collapsedSections.value[item.id] = initialValue\n }\n })\n }\n\n function isAbsoluteTo(item) {\n const to = getTo(item)\n return typeof to === 'string' && to.startsWith('http')\n }\n\n function isActivePath(item) {\n const to = getTo(item)\n if (isAbsoluteTo(item)) {\n // Check for SSR - window is not available during server-side rendering\n if (typeof window === 'undefined') return false\n return window.location.href.startsWith(to)\n }\n\n if (props.router) {\n return to && props.router.resolve(to).path === props.router.currentRoute.value.path\n }\n\n return false\n }\n\n function isExpanded(item) {\n // Divider-only sections are always expanded\n if (item.dividerOnly) return true\n return !collapsedSections.value[item.id]\n }\n\n function getExpandButtonTitle(item) {\n return isExpanded(item) ? `Collapse ${item.text} Section` : `Expand ${item.text} Section`\n }\n\n function getTo(item) {\n if (item.to) {\n return item.to\n } else if (item.resource?.url) {\n return item.resource.url\n } else {\n return null\n }\n }\n\n function getTarget(item) {\n if (item.target) {\n return item.target\n } else {\n return '_self'\n }\n }\n\n return {\n collapsedSections,\n getExpandButtonTitle,\n getTarget,\n getTo,\n initializeSections,\n isAbsoluteTo,\n isActivePath,\n isExpanded,\n rawNavData,\n }\n}\n","<script setup>\nimport useNavigationUtils from '@composables/navigationUtils'\n\nconst props = defineProps({\n item: {\n type: Object,\n required: true\n },\n router: {\n type: Object,\n default: null\n }\n})\n\nconst emit = defineEmits(['nav-link-clicked'])\n\nconst { isAbsoluteTo, isActivePath, getTo, getTarget } = useNavigationUtils(props)\n</script>\n\n<template>\n<a\n v-if=\"isAbsoluteTo(item)\"\n :aria-current=\"isActivePath(item) || undefined\"\n :data-active=\"isActivePath(item)\"\n :href=\"getTo(item)\"\n :target=\"getTarget(item)\"\n @click=\"(ev) => emit('nav-link-clicked', ev)\"\n>\n <slot />\n</a>\n\n<router-link\n v-else\n :aria-current=\"isActivePath(item) || undefined\"\n :data-active=\"isActivePath(item)\"\n :to=\"getTo(item)\"\n :target=\"getTarget(item)\"\n @click=\"(ev) => emit('nav-link-clicked', ev)\"\n>\n <slot />\n</router-link>\n</template>\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-horizontal-navigation.js'\nimport { BsIconCaretDown, BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport { ref, onBeforeMount, watch, onMounted, useId } from 'vue'\nimport useNavigationUtils from '../../composables/navigationUtils'\nimport BsDropdownDeprecated from '../_deprecated/dropdown/BsDropdownDeprecated.vue'\nimport { useMatchMedia } from '@composables/matchMedia.js'\nimport NavigationLink from './NavigationLink.vue'\n\n// PROPS\nconst props = defineProps(propDefinitions)\n\n// EMIT\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\n// COMPOSABLES\nconst {\n collapsedSections,\n getExpandButtonTitle,\n initializeSections,\n isActivePath,\n isExpanded,\n rawNavData,\n} = useNavigationUtils(props)\nconst mobileId = useId()\nuseMatchMedia('(max-width: 1165px)', (ev) => {\n isTablet.value = ev.matches\n})\n\n// STATE\nconst isTablet = ref(false)\nconst mobileOpenState = ref(false)\n\n// LIFE CYCLE HOOKS\nonBeforeMount(() => {\n initializeSections(true)\n})\n\nonMounted(() => {\n mobileOpenState.value = props.mobileOpen\n})\n\n// WATCHERS\nwatch(() => props.navData, () => {\n initializeSections(true)\n})\n\nwatch(() => props.mobileOpen, (newVal) => {\n mobileOpenState.value = newVal\n})\n\nwatch(mobileOpenState, (newVal) => {\n if (newVal) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n emit('mobile-toggle', newVal)\n})\n\nwatch(isTablet, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n mobileOpenState.value = false\n resetSections()\n }\n})\n\n// METHODS\nfunction toggleSection(sectionId) {\n collapsedSections.value[sectionId] = !collapsedSections.value[sectionId]\n // Close all other sections\n Object.keys(collapsedSections.value).forEach((key) => {\n if (key !== sectionId) {\n collapsedSections.value[key] = true\n }\n })\n}\n\nfunction getMobileToggleTitle() {\n return mobileOpenState.value ? 'Close Menu' : 'Open Menu'\n}\n\nfunction isNestedActive(item) {\n return item.navItems.some((navItem) => isActivePath(navItem))\n}\n\nfunction resetSections() {\n Object.keys(collapsedSections.value).forEach((key) => {\n collapsedSections.value[key] = true\n })\n}\n\nfunction handleNestedClick(ev, item) {\n const modifierKeyPressed = ev.ctrlKey || ev.metaKey\n if (!modifierKeyPressed) {\n toggleSection(item.id)\n }\n emit('nav-link-clicked', { ev, payload: item })\n}\n</script>\n\n<template>\n<!-- Mobile Menu -->\n<nav\n v-if=\"isTablet\"\n class=\"bs-horizontal-nav-mobile\"\n :data-shown=\"mobileOpenState\"\n :data-hide-toggle=\"hideMobileToggle\"\n>\n <button\n v-if=\"!hideMobileToggle\"\n type=\"button\"\n class=\"bs-horizontal-nav-mobile-toggle\"\n :aria-expanded=\"mobileOpen\"\n :aria-controls=\"`horizontal-nav-mobile-${mobileId}`\"\n :title=\"getMobileToggleTitle()\"\n @click=\"mobileOpenState = !mobileOpenState\"\n >\n <div class=\"bs-horizontal-nav-mobile-toggle-title\">\n <BsIcon\n v-if=\"typeof titleIcon === 'string'\"\n class=\"bs-horizontal-nav-mobile-toggle-title-icon\"\n :name=\"titleIcon\"\n />\n <component\n v-else\n :is=\"titleIcon\"\n class=\"bs-horizontal-nav-mobile-toggle-title-icon\"\n />\n <span>{{ mobileToggleText }}</span>\n </div>\n <BsIconCaretDown class=\"bs-horizontal-nav-mobile-toggle-caret\" />\n </button>\n <Transition name=\"bs-horizontal-nav-mobile\">\n <div\n v-show=\"mobileOpen\"\n class=\"bs-horizontal-nav-mobile-menu\"\n :id=\"`horizontal-nav-mobile-${mobileId}`\"\n >\n <!-- Main Links Menu -->\n <ul>\n <template v-for=\"item in rawNavData\" :key=\"item.id\">\n <!-- Nested Items -->\n <li v-if=\"item.navItems?.length > 0\" :data-expanded=\"isExpanded(item)\">\n <button\n type=\"button\"\n class=\"bs-horizontal-nav-mobile-nested-toggle\"\n :aria-expanded=\"isExpanded(item)\"\n :aria-controls=\"`${item.id}-nested-menu`\"\n :data-active=\"isNestedActive(item)\"\n :title=\"getExpandButtonTitle(item)\"\n @click=\"toggleSection(item.id)\"\n >\n <span>{{ item.text }}</span>\n <BsIconCaretDown class=\"bs-horizontal-nav-mobile-nested-toggle-caret\" />\n </button>\n <ul class=\"bs-horizontal-nav-mobile-nested-menu\">\n <li v-for=\"nestedItem in item.navItems\">\n <NavigationLink\n :item=\"nestedItem\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => emit('nav-link-clicked', { ev, payload: nestedItem })\"\n >\n {{ nestedItem.text }}\n </NavigationLink>\n </li>\n </ul>\n </li>\n\n <!-- Single Item -->\n <li v-else>\n <NavigationLink\n :item=\"item\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => emit('nav-link-clicked', { ev, payload: item })\"\n >\n {{ item.text }}\n </NavigationLink>\n </li>\n </template>\n </ul>\n\n <!-- End Nav Items -->\n <div v-if=\"$slots['end-items']\" class=\"bs-horizontal-nav-mobile-end-items\">\n <slot name=\"end-items\" />\n </div>\n </div>\n </Transition>\n</nav>\n\n<!-- Desktop Menu -->\n<div v-else class=\"bs-horizontal-nav\">\n <nav>\n <!-- Title Icon -->\n <template v-if=\"!title && titleIcon\">\n <BsIcon\n v-if=\"typeof titleIcon === 'string'\"\n class=\"bs-horizontal-nav-title-icon\"\n :name=\"titleIcon\"\n />\n <component\n v-else\n :is=\"titleIcon\"\n class=\"bs-horizontal-nav-title-icon\"\n />\n </template>\n\n <ul>\n <!-- Title Item -->\n <li v-if=\"title\" class=\"bs-horizontal-nav-title\">\n <router-link\n v-if=\"titleUrl\"\n :aria-current=\"isActivePath({ to: titleUrl }) || undefined\"\n :to=\"titleUrl\"\n :data-active=\"isActivePath({ to: titleUrl })\"\n @click=\"(ev) => emit('nav-link-clicked', { ev, payload: { resource: { url: titleUrl }, text: title } })\"\n >\n <span>{{ title }}</span>\n </router-link>\n\n <span v-else>{{ title }}</span>\n </li>\n\n <template v-for=\"(item, index) in rawNavData\" :key=\"item.id\">\n <!-- Nested Items -->\n <li v-if=\"item.navItems?.length > 0\">\n <!-- Nested Toggle -->\n <button\n :id=\"`${item.id}-toggle`\"\n type=\"button\"\n class=\"bs-horizontal-nav-nested-toggle\"\n :aria-expanded=\"isExpanded(item)\"\n :aria-controls=\"`${item.id}-nested-section`\"\n :data-active=\"isNestedActive(item)\"\n :data-expanded=\"isExpanded(item)\"\n :title=\"getExpandButtonTitle(item)\"\n @click=\"toggleSection(item.id)\"\n >\n <span>{{ item.text }}</span>\n <BsIconCaretDown class=\"bs-horizontal-nav-nested-toggle-caret\" />\n </button>\n <!-- Nested Menu -->\n <BsDropdownDeprecated\n :id=\"`${item.id}-nested-section`\"\n class=\"bs-horizontal-nav-nested-menu\"\n :anchor-id=\"`${item.id}-toggle`\"\n position=\"right\"\n :shown=\"isExpanded(item)\"\n :use-mobile-style=\"false\"\n width=\"content\"\n @close=\"collapsedSections[item.id] = true\"\n >\n <ul>\n <li v-for=\"nestedItem in item.navItems\" :key=\"nestedItem.id\">\n <NavigationLink\n :item=\"nestedItem\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => handleNestedClick(ev, nestedItem)\"\n >\n {{ nestedItem.text }}\n </NavigationLink>\n </li>\n </ul>\n </BsDropdownDeprecated>\n </li>\n\n <!-- Single Item -->\n <li v-else>\n <NavigationLink\n :item=\"item\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => emit('nav-link-clicked', { ev, payload: item })\"\n >\n <span>{{ item.text }}</span>\n </NavigationLink>\n </li>\n </template>\n </ul>\n\n <!-- End Nav Items -->\n <div v-if=\"$slots['end-items']\" class=\"bs-horizontal-nav-end-items\">\n <slot name=\"end-items\" />\n </div>\n </nav>\n</div>\n</template>\n","<script setup>\nimport { ref, onMounted } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\n\ndefineOptions({ inheritAttrs: false })\n\n// REFS\nconst svgWrapperRef = ref(null)\n\n// STATE\nconst viewBox = ref(null)\n\n// VARS\nconst stops = [\n { offset: 0.1326, color: '#EE282A' },\n { offset: 0.5466, color: '#1C0087' },\n { offset: 0.9715, color: '#0086EA' }\n]\nconst [ uniqueId ] = useGenIdAttrs()\n\nonMounted(() => {\n viewBox.value = svgWrapperRef.value\n .querySelector('svg')\n .getAttribute('viewBox')\n || '0 0 0 0'\n})\n</script>\n\n<template>\n <span\n ref=\"svgWrapperRef\"\n class=\"bs-icon-gradient-wrapper\"\n :style=\"`fill: url(#${uniqueId});`\"\n v-bind=\"$attrs\"\n >\n <slot />\n </span>\n\n <!-- Build the fill gradient for the input SVG here -->\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n :view-box=\"viewBox\"\n width=\"0\"\n height=\"0\"\n >\n <linearGradient\n :id=\"uniqueId\"\n x1=\"0\"\n y1=\"0\"\n x2=\"100%\"\n y2=\"100%\"\n gradient-units=\"userSpaceOnUse\"\n >\n <stop\n v-for=\"stop in stops\"\n :key=\"stop.offset\"\n :offset=\"stop.offset\"\n :stop-color=\"stop.color\"\n />\n </linearGradient>\n </svg>\n</template>\n\n<style>\n .bs-icon-gradient-wrapper {\n display: inline-block;\n }\n\n .bs-icon-gradient-wrapper * {\n fill: inherit;\n }\n</style>\n","export const InlineTabsProvider = Symbol('InlineTabs')","<template>\n <component\n :is=\"rootTag\"\n class=\"bs-inline-tab\"\n :data-variant=\"variant\"\n :data-selected=\"isSelected || undefined\"\n :aria-pressed=\"rootTag === 'button' ? isSelected : undefined\"\n v-bind=\"buttonOrLinkAttrs\"\n @click=\"onClick\">\n <slot :is-selected />\n </component>\n</template>\n\n<script setup>\nimport { computed, inject, useAttrs } from 'vue'\nimport { useButtonOrLink } from '../../composables/buttonOrLink.js'\nimport { InlineTabsProvider } from './provider-key-inline-tabs'\nimport { propDefinitions } from './defs-inline-tab.js'\n\nconst props = defineProps(propDefinitions)\n\n// BsInlineTabs usage is optional...inject will return null if BsInlineTab is not a child of BsInlineTabs\nconst group = inject(InlineTabsProvider, null)\n\nconst isSelected = computed(() => {\n return group?.isSelected(props.value) || props.selected\n})\n\nconst isDisabled = computed(() => {\n return group?.props.disabled || props.disabled\n})\n\nconst variant = computed(() => {\n return group?.props.variant || props.variant\n})\n\nconst modifiedProps = computed(() => ({\n ...props,\n disabled: isDisabled.value\n}))\n\nconst { rootTag, buttonOrLinkAttrs } = useButtonOrLink(modifiedProps)\n\n// - - - - - - - - - - - -\n\nfunction onClick(event) {\n setGroupModel()\n}\n\nfunction setGroupModel() {\n if (!group) return\n\n // don't update the model if no new selection was made (so group's @update:model-value won't fire)\n if (isSelected.value && !group.props.multiple) return\n\n group.setModel(props.value)\n}\n</script>\n","<template>\n <component\n :is=\"as\"\n class=\"bs-inline-tab-group\">\n <slot />\n </component>\n</template>\n\n<script setup>\nimport { provide } from 'vue'\nimport { InlineTabsProvider } from './provider-key-inline-tabs.js'\nimport { propDefinitions, emitDefinitions } from './defs-inline-tab-group.js'\n\nconst props = defineProps(propDefinitions)\ndefineEmits(Object.keys(emitDefinitions))\n\nconst model = defineModel({\n type: [String, Object, Number, Array],\n default: undefined,\n required: false\n})\n\nprovide(InlineTabsProvider, {\n props,\n model,\n setModel,\n isSelected\n})\n\n// - - - - - - - - - - - - - -\n\nfunction isSelected(val) {\n if (!model.value) return false\n\n // single model\n if (!props.multiple) return isMatch(model.value, val)\n\n // a little DX for multiple model, just in case...\n if (!Array.isArray(model.value)) {\n throw new Error(`[BsInlineTabs] When \"multiple\" prop is used, v-model must be an Array. Your model: ${model.value}`)\n }\n\n // multiple model\n return model.value.some(it => isMatch(it, val))\n}\n\nfunction isMatch(a, b) {\n const { matcher } = props\n\n if (isObject(a) && isObject(b)) {\n return typeof matcher === 'function'\n ? matcher(a) === matcher(b)\n : a[matcher] === b[matcher]\n }\n\n return a === b\n}\n\nfunction isObject(val) {\n return typeof val === 'object' && val !== null && !Array.isArray(val)\n}\n\nfunction setModel(val) {\n model.value = props.multiple\n ? getArrayModel(val)\n : val\n}\n\nfunction getArrayModel(val) {\n if (!model.value) return [val]\n\n return isSelected(val)\n ? model.value.filter(it => !isMatch(it, val))\n : [ ...model.value, val ]\n}\n</script>\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsInput from '../input/BsInput.vue'\nimport BsLabel from '../label/BsLabel.vue'\n\n// Props\nconst props = defineProps({\n /** Sets the disabled state on input, disabled styles on label. */\n disabled: {\n type: Boolean,\n default: false,\n },\n /** Applies error styles to the input. */\n error: {\n type: Boolean,\n default: false,\n },\n /** Pass error text. */\n errorMsg: String,\n /** Pass helper text. */\n hint: String,\n /** Pass label text. */\n label: { type: String },\n /** Placeholder attribute for `<input>`. */\n placeholder: String,\n /** Sets the required state on the input, append required* indicator to label. */\n required: {\n type: Boolean,\n default: false,\n },\n /** Sets the native input type attribute. */\n type: {\n type: String,\n default: 'text',\n },\n /** Sets the input value - do not use if using `v-model`. */\n value: [ String, Number ],\n /** Sets the input value - `v-model` directive will use this; do not set explicitly. */\n modelValue: [ String, Number ],\n // DEPRECATED\n inputId: { default: undefined }\n})\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\n\nconst emit = defineEmits(['update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed Properties\nconst hintDeprecated = computed(() => props.hints?.join?.(\"\\n\") || props.hints)\nconst hintMsg = computed(() => (\n (props.error && props.errorMsg) || props.hint || hintDeprecated.value || undefined\n))\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\n</script>\n\n<template>\n<div data-component=\"bs-input-field\" v-bind=\"filtered\">\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <BsInput\n :disabled=\"disabled\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :id=\"$attrs.id || inputIdAttr\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :type=\"type\"\n :value=\"value || modelValue\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n />\n <BsFieldDetails v-if=\"hintMsg\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint || hintDeprecated\"\n :hint-id=\"hintId\"\n />\n</div>\n</template>\n\n<style>\n:where([data-component=\"bs-input-field\"]) {\n display: block;\n width: 100%;\n}\n</style>\n","import { getSupportedCallingCodes, getRegionCodeForCountryCode } from \"awesome-phonenumber\";\n\n/**\n * @typedef {Object} Country\n * @property {string} label – the country code (aka dial code) w/ '+' prefix\n * @property {string} flag – the country flag emoji\n * @property {string} value – the country code (aka dial code)\n * @property {string} regionCode – the ISO 3166-1 alpha-2 region code (e.g. 'US' for United States)\n *\n */\n\nconst SYMBOLS = {\n 'A': '🇦',\n 'B': '🇧',\n 'C': '🇨',\n 'D': '🇩',\n 'E': '🇪',\n 'F': '🇫',\n 'G': '🇬',\n 'H': '🇭',\n 'I': '🇮',\n 'J': '🇯',\n 'K': '🇰',\n 'L': '🇱',\n 'M': '🇲',\n 'N': '🇳',\n 'O': '🇴',\n 'P': '🇵',\n 'Q': '🇶',\n 'R': '🇷',\n 'S': '🇸',\n 'T': '🇹',\n 'U': '🇺',\n 'V': '🇻',\n 'W': '🇼',\n 'X': '🇽',\n 'Y': '🇾',\n 'Z': '🇿'\n}\n\n/**\n * Call `initSourceData` first to load the country data.\n */\nexport const CountryUtils = {\n data: {\n allCountries: null,\n byCountryCode: null,\n byRegionCode: null,\n },\n\n/**\n * @param {string|number} countryCode the country code (aka dial code) for the country\n * @returns {Country} the country object\n */\n getCountryByCountryCode(countryCode) {\n this.initMap('byCountryCode', 'value')\n return this.data.byCountryCode?.[countryCode]\n },\n\n /**\n * @param {string|number} regionCode the ISO 3166-1 alpha-2 region code\n * @returns {Country} the country object\n */\n getCountryByRegionCode(regionCode) {\n this.initMap('byRegionCode', 'regionCode')\n return this.data.byRegionCode?.[regionCode]\n },\n\n /**\n * @returns {Country[]} an array of country objects\n */\n initSourceData() {\n if (!this.data.allCountries) {\n this.data.allCountries = getSupportedCallingCodes().map((c) => {\n const regionCode = getRegionCodeForCountryCode(c)\n const flag = SYMBOLS[regionCode[0]] + SYMBOLS[regionCode[1]] ||''\n return {\n label: `+${c}`,\n flag,\n value: c,\n regionCode\n }\n }).filter(it => it.regionCode !== '001')\n }\n return this.data.allCountries\n },\n\n initMap(mapName, libKey) {\n if (!this.data[mapName] && this.data.allCountries) {\n this.data[mapName] = {}\n\n this.data.allCountries.forEach(country => {\n this.data[mapName][country[libKey]] = country\n })\n }\n }\n\n}\n\n\n","<script setup>\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { parsePhoneNumber } from \"awesome-phonenumber\";\nimport { BsIconCaretSort } from '@wwtdev/bsds-icons-vue3'\nimport BsDropdownOptionDeprecated from '../_deprecated/dropdown-option/BsDropdownOptionDeprecated.vue'\nimport BsDropdownWithOptionsDeprecated from '../_deprecated/dropdown-with-options/BsDropdownWithOptionsDeprecated.vue'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsInput from '../input/BsInput.vue'\nimport BsInputAddon from '../input-addon/BsInputAddon.vue'\nimport BsLabel from '../label/BsLabel.vue'\nimport { useGenIdAttrs } from '../../composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\nimport { CountryUtils } from './countryUtils.js'\n\nconst props = defineProps({\n deferValidation: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n error: {\n type: Boolean,\n default: false\n },\n errorMsg: {\n type: String,\n default: ''\n },\n hideLabel: {\n type: Boolean,\n default: false\n },\n hint: {\n type: String,\n default: ''\n },\n label: {\n type: String,\n default: 'Phone Number'\n },\n /** Auto-set w/ v-model. */\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: 'Phone Number'\n },\n required: {\n type: Boolean,\n default: false\n },\n // DEPRECATED\n inputId: { default: undefined }\n})\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\n\nconst emit = defineEmits(['update:modelValue', 'input-blur'])\n\ndefineOptions({ inheritAttrs: false })\n\nconst VALID_OTHER_KEYS = [\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'Backspace',\n 'Delete',\n 'End',\n 'Enter',\n 'Escape',\n 'Home',\n 'Tab',\n]\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n/* ------- Refs ------- */\nconst countryCodesToggle = ref(null)\nconst countryCode = ref(1)\nconst countryCodes = ref([])\nconst currentCountry = ref(null)\nconst [\n countryToggleId,\n countryCodesId,\n hintId,\n inputIdGen\n] = useGenIdAttrs(4)\nconst isMounted = ref(false)\nconst phoneNumber = ref('')\nconst phoneNumberError = ref('')\nconst phoneNumberHasError = ref(false)\nconst showCountryCodes = ref(false)\nconst showValidationResult = ref(true)\ndefineExpose({\n validationErr: phoneNumberHasError,\n validationErrMsg: phoneNumberError,\n})\n\n/* ------- Computed & Watchers ------- */\nconst computedPhoneNumber = computed(() => phoneNumber.value ? `+${countryCode.value}${phoneNumber.value}` : '')\nconst countryToggleLabel = computed(() => `Country code: ${countryCode.value}. Click to change.`)\nconst errorMsgComputed = computed(() => showValidationResult.value ? props.errorMsg || phoneNumberError.value : '')\nconst hasError = computed(() => props.error || phoneNumberHasError.value)\nconst showDetails = computed(() => props.hint || (hasError.value && errorMsgComputed.value))\nconst showErrorState = computed(() => showValidationResult.value && hasError.value)\n\nwatch(computedPhoneNumber, (newVal) => {\n emit('update:modelValue', newVal)\n validate(newVal)\n})\n\nwatch(() => props.modelValue, clearPhoneNumberIfReset)\n\n/* ------- Client-side init ------- */\ninit()\n\nonMounted(() => isMounted.value = true)\n/* ------- Funcs ------- */\n\nfunction clearPhoneNumberIfReset(newVal, oldVal) {\n if (newVal === '' && newVal !== oldVal) {\n phoneNumber.value = ''\n }\n}\n\nfunction handleCountryCodeClose() {\n if (showCountryCodes.value) {\n showCountryCodes.value = false\n countryCodesToggle.value?.focus()\n }\n}\n\nfunction handleCountryCodeInput(selectedVal) {\n countryCode.value = selectedVal\n showCountryCodes.value = false\n countryCodesToggle.value?.focus()\n updateCurrentCountry(selectedVal)\n}\n\nfunction handlePhoneBlur() {\n if (props.deferValidation) showValidationResult.value = true\n emit('input-blur')\n}\n\nfunction handlePhoneInput(e) {\n phoneNumber.value = e.target.value\n if (props.deferValidation) showValidationResult.value = false\n}\n\nfunction ignoreInvalidChars(e) {\n if (!e.key?.match?.(/[0-9]/) && !VALID_OTHER_KEYS.includes(e.key) && !e.ctrlKey && !e.metaKey) {\n e.preventDefault()\n }\n}\n\nfunction init() {\n CountryUtils.initSourceData()\n initParse()\n updateCurrentCountry(countryCode.value)\n validate(computedPhoneNumber.value)\n}\n\nfunction initParse() {\n // try to parse the phone number value and if it's valid or at least has a parsaable country code,\n // set both the country code and phone number\n // otherwise, just set phoneNumber to value (the previous behavior)\n let parsedNum = parsePhoneNumber(props.modelValue)\n if (parsedNum.valid || (parsedNum.countryCode && props.modelValue?.startsWith?.('+'))) {\n countryCode.value = parsedNum.countryCode\n phoneNumber.value = parsedNum.number.significant\n } else {\n phoneNumber.value = props.modelValue\n }\n // set the country code dropdown value\n countryCodes.value = CountryUtils.data.allCountries.map(c => {\n return {\n ...c,\n isSelected: countryCode.value === c\n }\n })\n}\n\nfunction updateCurrentCountry(code) {\n currentCountry.value = CountryUtils.getCountryByCountryCode(code)\n}\n\nfunction validate(pncc) {\n phoneNumberHasError.value = pncc ? !parsePhoneNumber(pncc).valid : false\n phoneNumberError.value = phoneNumberHasError.value ? 'Invalid phone number' : ''\n}\n</script>\n\n<template>\n <div class=\"bs-input-phone\"\n data-component=\"bs-input-phone\"\n v-bind=\"filtered\"\n >\n <BsLabel :for=\"$attrs.id || inputId || inputIdGen\"\n :required=\"required\"\n :disabled=\"disabled\"\n :class=\"{ 'bs-visually-hidden': hideLabel }\"\n >\n {{ label }}\n </BsLabel>\n <BsInputAddon\n :disabled=\"disabled\"\n :error=\"showErrorState\"\n :multifocus=\"true\"\n variant=\"inner-bordered\"\n >\n <button\n :id=\"countryToggleId\"\n ref=\"countryCodesToggle\"\n :aria-controls=\"countryCodesId\"\n :aria-expanded=\"showCountryCodes\"\n aria-haspopup=\"listbox\"\n :aria-label=\"countryToggleLabel\"\n :disabled=\"disabled\"\n type=\"button\"\n @click=\"showCountryCodes = !showCountryCodes\"\n >\n <span>{{ currentCountry?.flag }}</span>\n <span>+{{ countryCode }}</span>\n <BsIconCaretSort v-if=\"!disabled\" size=\"sm\" />\n </button>\n\n <BsInput\n :id=\"$attrs.id || inputId || inputIdGen\"\n :disabled=\"disabled\"\n :hint-id=\"hintId\"\n :placeholder=\"placeholder\"\n :value=\"phoneNumber\"\n data-autowidth\n type=\"tel\"\n v-bind=\"remaining\"\n @input=\"handlePhoneInput\"\n @focusout=\"handlePhoneBlur\"\n @keydown=\"ignoreInvalidChars\"\n />\n </BsInputAddon>\n <BsFieldDetails\n :error=\"hasError\"\n :error-msg=\"errorMsgComputed\"\n :hint=\"hint\"\n :hint-id=\"hintId\"\n v-show=\"showDetails\"\n />\n <template v-if=\"isMounted\">\n <div>\n <BsDropdownWithOptionsDeprecated\n :anchor-id=\"countryToggleId\"\n helper-text=\"Country Code\"\n label=\"Country Code\"\n :model-value=\"countryCode\"\n :options-id=\"countryCodesId\"\n preloaded\n :shown=\"showCountryCodes\"\n width=\"content\"\n @close=\"handleCountryCodeClose\"\n @update:model-value=\"handleCountryCodeInput\"\n >\n <template v-if=\"isMounted\">\n <BsDropdownOptionDeprecated v-for=\"c of countryCodes\"\n :aria-label=\"c.value\"\n :key=\"c.value\"\n :value=\"`${c.value}`\"\n variant=\"2-col\"\n >\n <span aria-hidden=\"true\" style=\"width: 1.25rem;\">\n {{ c?.flag }}\n </span>\n <span aria-hidden=\"true\">\n {{ c.label }}\n </span>\n </BsDropdownOptionDeprecated>\n </template>\n </BsDropdownWithOptionsDeprecated>\n </div>\n </template>\n </div>\n</template>\n","<script setup>\nconst props = defineProps({\n label: {\n type: String,\n default: 'Loading...'\n },\n size: {\n type: String,\n validator: val => ['sm', 'md', 'lg'].includes(val)\n },\n variant: {\n type: String,\n validator: val => ['blue', 'white', 'gradient'].includes(val)\n }\n})\n</script>\n\n<template>\n<svg class=\"bs-spinner\"\n data-component=\"bs-spinner\"\n :data-size=\"size\"\n :data-variant=\"variant\"\n fill=\"none\"\n ref=\"spinnerRef\"\n viewBox=\"0 0 100 100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <title>{{ label }}</title>\n <circle\n cx=\"50\"\n cy=\"50\"\n pathLength=\"100\"\n r=\"45\"\n :stroke=\"variant === 'gradient' ? 'url(#bs-spinner-gradient)' : undefined\"\n />\n <template v-if=\"variant === 'gradient'\">\n <defs>\n <linearGradient id=\"bs-spinner-gradient\">\n <stop offset=\"0%\" />\n <stop offset=\"49%\" />\n <stop offset=\"100%\" />\n </linearGradient>\n </defs>\n </template>\n</svg>\n</template>\n","<script setup>\nimport { ref, watch, computed } from 'vue'\nimport BsInputSearch from '../../input-search/BsInputSearch.vue'\nimport BsDropdownOptionListDeprecated from '../dropdown-option-list/BsDropdownOptionListDeprecated.vue'\nimport BsDropdownOptionBuilderDeprecated from '../dropdown-option-builder/BsDropdownOptionBuilderDeprecated.vue'\nimport BsFieldDetails from '../../field-details/BsFieldDetails.vue'\nimport BsLabel from '../../label/BsLabel.vue'\nimport BsSpinner from '../../spinner/BsSpinner.vue'\nimport BsDropdownMultiselectDeprecated from '../dropdown-multiselect/BsDropdownMultiselectDeprecated.vue'\nimport BsDropdownDeprecated from '../dropdown/BsDropdownDeprecated.vue'\nimport { useGenIdAttrs } from '../../../composables/genId.js'\n\n// PROPS\nconst props = defineProps({\n characterThreshold: {\n type: Number,\n default: 1\n },\n breakout: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n error: {\n type: Boolean,\n default: false\n },\n errorMsg: {\n type: String,\n default: ''\n },\n filterType: {\n type: String,\n default: 'starts-with',\n validator: (value) => ['includes', 'starts-with'].includes(value)\n },\n hideSearchIcon: {\n type: Boolean,\n default: false\n },\n hint: {\n type: String,\n default: ''\n },\n inputValue: {\n type: String,\n default: ''\n },\n internalFiltering: {\n type: Boolean,\n default: true\n },\n label: {\n type: String,\n default: ''\n },\n loading: {\n type: Boolean,\n default: false\n },\n maxOptions: {\n type: Number,\n default: undefined\n },\n multiselect: {\n type: Boolean,\n default: false\n },\n // [{ label: String, value: String, description: String, icon: String }] }\n options: {\n type: Array,\n required: true,\n },\n optionsValue: {\n type: [ String, Number, Array ],\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n },\n required: {\n type: Boolean,\n default: false\n },\n showDropdownOnFocus: {\n type: Boolean,\n default: false\n },\n typeaheadId: {\n type: String,\n default: undefined\n },\n valueIdKey: {\n type: String,\n default: 'id'\n },\n})\n\n// EMITS\nconst emit = defineEmits(['close', 'open', 'update:inputValue', 'update:optionsValue'])\n\n// REFS\nconst optionsShown = ref(false)\nconst optionSelected = ref(false)\n\n// VARS\nconst [ generatedId, generatedHintId ] = useGenIdAttrs(2)\nlet prevOptions = []\n\n// LIFECYCLE\nwatch(() => props.inputValue, () => {\n // After an option is selected, an input change occurs. This will prevent\n // the dropdown from showing again immediately after an option is selected.\n if (optionSelected.value) {\n optionSelected.value = false\n } else {\n showDropdownIfValue()\n }\n})\n\nwatch(optionsShown, () => {\n optionsShown.value\n ? emit('open')\n : emit('close')\n})\n\n// COMPUTED\nconst typeaheadIdActual = computed(() => props.typeaheadId || generatedId.value)\nconst hintMsg = computed(() => (props.error && props.errorMsg) || props.hint || undefined)\nconst inputContainerId = computed(() => `${typeaheadIdActual.value}-input-container`)\nconst inputId = computed(() => `${typeaheadIdActual.value}-input`)\nconst optionsId = computed(() => `${typeaheadIdActual.value}-options`)\nconst optionsValueActual = computed(() => {\n if (props.multiselect) {\n // Make sure optionsValue is an array for multiselect\n return Array.isArray(props.optionsValue)\n ? props.optionsValue\n : [ props.optionsValue ]\n }\n return props.optionsValue\n})\n\n// Build out / filter / highlight options\nconst modifiedOptions = computed(() => {\n if (optionsShown.value) {\n let newOptions = props.options\n const filterValue = props.inputValue.toLowerCase()\n const filterFunc = props.filterType === 'includes' ? 'includes' : 'startsWith'\n\n if (props.inputValue.length >= props.characterThreshold) {\n // Filter\n newOptions = filterOptions(newOptions, filterValue, filterFunc)\n // Limit max options\n newOptions = newOptions.slice(0, props.maxOptions)\n // Highlight\n newOptions = highlightOptions(newOptions, filterValue, filterFunc)\n\n prevOptions = newOptions\n }\n return newOptions\n } else {\n // Not showing, so return the last filtered options to prevent flicker of\n // different options while the dropdown is closing\n return prevOptions\n }\n})\n\n// METHODS\nfunction filterOptions(options, filterValue, filterFunc) {\n if (props.internalFiltering) {\n return options.filter((option) => (\n option.label.toLowerCase()[filterFunc](filterValue)\n ))\n } else {\n return options\n }\n}\n\nfunction highlightOptions(options, filterValue, filterFunc) {\n return options.map((option) => {\n let labelHtml = option.label\n if (filterValue !== '') {\n const replaceHtml = `<span style=\"color: var(--bs-primary-base)\">${filterValue}</span>`\n if (filterFunc === 'includes') {\n labelHtml = option.label.replaceAll(filterValue, replaceHtml)\n } else {\n labelHtml = option.label.replace(filterValue, replaceHtml)\n }\n }\n return { ...option, labelHtml }\n })\n}\n\n/** Show the typeahead dropdown with show on focus prop or the character threshold is met. */\nfunction showDropdownIfValue() {\n if (props.showDropdownOnFocus) {\n optionsShown.value = true\n } else if (props.inputValue.length >= props.characterThreshold) {\n optionsShown.value = true\n } else {\n optionsShown.value = false\n }\n}\n\nfunction handleClear() {\n emit('update:inputValue', '')\n if (!props.multiselect) {\n emit('update:optionsValue', '')\n }\n document.getElementById(inputId.value).focus()\n}\n\nfunction handleSelect(ev) {\n optionSelected.value = true\n const selectedOption = modifiedOptions.value.find((option) => option.value === ev)\n emit('update:inputValue', selectedOption.label)\n emit('update:optionsValue', ev)\n}\n\nfunction handleCheck(ev) {\n const newOptionsValue = [ ...optionsValueActual.value, ev ]\n emit('update:optionsValue', newOptionsValue)\n}\n\nfunction handleUncheck(ev) {\n const newOptionsValue = optionsValueActual.value.filter((opt) => opt !== ev)\n emit('update:optionsValue', newOptionsValue)\n}\n</script>\n\n<template>\n<BsLabel\n v-if=\"label || $slots.label\"\n :for=\"inputId\"\n :disabled=\"disabled\"\n :required=\"required\"\n>\n <slot name=\"label\">\n {{ label }}\n </slot>\n</BsLabel>\n<div :id=\"inputContainerId\" class=\"typeahead-search-wrapper\">\n <BsInputSearch\n :aria-controls=\"optionsId\"\n :aria-describedby=\"hintMsg ? generatedHintId : undefined\"\n :aria-expanded=\"optionsShown\"\n aria-haspopup=\"listbox\"\n autocomplete=\"off\"\n :disabled=\"disabled\"\n :error=\"error\"\n :prevent-clear=\"inputValue === ''\"\n :hide-search-icon=\"hideSearchIcon\"\n :input-id=\"inputId\"\n :placeholder=\"placeholder\"\n role=\"combobox\"\n :model-value=\"inputValue\"\n v-bind=\"$attrs\"\n @clear=\"handleClear\"\n @focusin=\"showDropdownIfValue\"\n @update:model-value=\"(ev) => emit('update:inputValue', ev)\"\n />\n</div>\n<BsDropdownDeprecated\n :anchor-id=\"inputContainerId\"\n :breakout=\"breakout\"\n :preloaded=\"true\"\n :shown=\"optionsShown\"\n :use-mobile-style=\"false\"\n width=\"anchor\"\n @close=\"optionsShown = false\"\n>\n <BsDropdownMultiselectDeprecated\n v-if=\"multiselect\"\n :focus-on-open=\"false\"\n :label=\"label\"\n :options=\"modifiedOptions\"\n :options-id=\"optionsId\"\n :selected-options=\"optionsValueActual\"\n :shown=\"optionsShown\"\n :value-id-key=\"valueIdKey\"\n @check-option=\"handleCheck\"\n @uncheck-option=\"handleUncheck\"\n >\n <template v-if=\"loading\" #no-options>\n <span style=\"display: flex; justify-content: center;\">\n <BsSpinner size=\"sm\" />\n </span>\n </template>\n <template v-else #no-options>No results found</template>\n </BsDropdownMultiselectDeprecated>\n\n <BsDropdownOptionListDeprecated\n v-else\n :label=\"label\"\n :model-value=\"optionsValueActual\"\n :options-id=\"optionsId\"\n :shown=\"optionsShown\"\n @update:model-value=\"handleSelect\"\n @close=\"optionsShown = false\"\n >\n <BsDropdownOptionBuilderDeprecated :options=\"modifiedOptions\" :value-id-key=\"valueIdKey\">\n <template v-if=\"loading\" #no-options>\n <span style=\"display: flex; justify-content: center;\">\n <BsSpinner size=\"sm\" />\n </span>\n </template>\n <template v-else #no-options>No results found</template>\n </BsDropdownOptionBuilderDeprecated>\n </BsDropdownOptionListDeprecated>\n</BsDropdownDeprecated>\n<div aria-live=\"polite\">\n <BsFieldDetails v-if=\"hintMsg\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint\"\n :hint-id=\"generatedHintId\"\n />\n</div>\n</template>\n\n<style>\n:where(.bs-label + .typeahead-search-wrapper) {\n margin-top: 0.25rem;\n}\n</style>\n","<script setup>\ndefineProps({\n size: {\n type: String,\n default: 'md',\n validator: (value) => ['xs', 'sm', 'md', 'lg'].includes(value),\n },\n variant: {\n type: String,\n validator: (value) => ['black', 'white', 'gray'].includes(value),\n },\n})\n</script>\n\n<template>\n<span\n class=\"bs-loader\"\n :data-size=\"size\"\n :data-variant=\"variant\"\n role=\"status\"\n>\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n <span class=\"bs-visually-hidden\">Loading</span>\n</span>\n</template>\n","<template>\n <BsPopover\n v-slot=\"{ id, cancel, confirm, close }\"\n class=\"bs-modal\"\n data-component=\"bs-modal\"\n type=\"modal\"\n anchor=\"viewport\"\n backdrop\n :size=\"size\"\n trap-focus\n :transition-name=\"transitionName\">\n\n <slot v-bind=\"{ id, cancel, confirm, close }\" />\n\n </BsPopover>\n</template>\n\n<script setup>\nimport { ref, computed, provide } from 'vue'\nimport BsPopover from '@components/popover/BsPopover.vue'\nimport { propDefinitions } from './defs-modal-component.js'\n\n// Emits: Will emit what BsPopover emits (open, close, cancel, confirm, etc.)\n\n// Props: The BsPopover props fall-through...below are BsModal-specific overrides to BsPopover settings\ndefineProps(propDefinitions)\n\n</script>\n","<script setup>\nimport { watch, onMounted, onUnmounted } from 'vue'\nimport BsEnhancedTransition from '../transition/BsEnhancedTransition.vue'\n\nconst props = defineProps({\n shown: {\n type: Boolean,\n default: true,\n },\n preloaded: {\n type: Boolean,\n default: false,\n },\n // DEPRECATED\n enterControlled: {\n default: undefined,\n },\n enterTrigger: {\n default: undefined,\n },\n leaveTrigger: {\n default: undefined,\n },\n})\n\nconst emit = defineEmits(['after-enter', 'after-leave'])\n\nonMounted(() => {\n setBodyScroll()\n})\n\n// Ensure there's no side effect when the component is unmounted before the transition ends\nonUnmounted(() => {\n document.body.removeAttribute('data-scroll')\n})\n\nwatch(() => props.shown, () => {\n setBodyScroll()\n})\n\nfunction setBodyScroll() {\n if (props.shown) {\n document.body.setAttribute('data-scroll', 'false')\n } else {\n document.body.removeAttribute('data-scroll')\n }\n}\n</script>\n\n<template>\n <BsEnhancedTransition\n name=\"bs-overlay\"\n :shown=\"shown\"\n :preloaded=\"preloaded\"\n @after-enter=\"emit('after-enter')\"\n @after-leave=\"emit('after-leave')\"\n >\n <div class=\"bs-overlay\" :data-shown=\"shown\" />\n </BsEnhancedTransition>\n</template>\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-modal-deprecated.js'\nimport { ref, computed, useSlots } from 'vue'\nimport { BsIconClose } from '@wwtdev/bsds-icons-vue3'\nimport useKeydown from '@composables/keydown'\nimport BsEnhancedTransition from '../../transition/BsEnhancedTransition.vue'\nimport BsOverlay from '@components/overlay/BsOverlay.vue'\nimport { useDeprecatedTransition, useDeprecatedProp } from '@composables/deprecated.js'\nimport { useGenIdAttrs } from '@composables/genId'\nimport useClickAway from '@composables/clickAway'\nimport BsFocusGuardDeprecated from '../focus-guard/BsFocusGuardDeprecated.vue'\n\n// PROPS\nconst props = defineProps(propDefinitions)\nuseDeprecatedProp(props, 'enterControlled', 'preloaded')\nuseDeprecatedProp(props, 'enterTrigger', 'shown')\nuseDeprecatedProp(props, 'leaveTrigger', 'shown')\n\n// EMITS\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\n// REFS / VARIABLES\nconst modalRef = ref(null)\nlet isVisible = false\n\n// COMPOSABLES\nconst { transition } = useDeprecatedTransition(props)\nconst [ titleId ] = useGenIdAttrs()\nconst [ subtitleId ] = useGenIdAttrs()\nconst slots = useSlots()\nuseClickAway([modalRef], () => closeModal('backdrop-clicked-close'))\nuseKeydown(['Escape'], () => closeModal('escape-pressed-close'))\n\n// COMPUTED\nconst hasTitle = computed(() => {\n return !!(props.title || slots.title)\n})\nconst hasSubtitle = computed(() => {\n return !!(props.subtitle || slots.subtitle)\n})\nconst hasProgress = computed(() => {\n return !!slots.progress\n})\nconst hasHeader = computed(() => {\n return !props.fullHeight && hasTitle.value\n})\nconst hasFooter = computed(() => {\n return !props.fullHeight && !!slots.footer\n})\n\n// METHODS\nfunction closeModal(customEventName, checkForShownChild = true) {\n const hasShownChild = checkForShownChild && modalRef.value?.querySelector('[data-shown=\"true\"]') !== null\n if (isVisible && !hasShownChild) {\n emit('close', props.modalId)\n emit(customEventName, props.modalId)\n }\n}\n\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n<BsOverlay\n :enter-controlled=\"enterControlled\"\n :enter-trigger=\"enterTrigger\"\n :leave-trigger=\"leaveTrigger\"\n :preloaded=\"preloaded\"\n :shown=\"transition\"\n/>\n<BsEnhancedTransition\n name=\"bs-modal-deprecated\"\n :preloaded=\"preloaded\"\n :shown=\"transition\"\n @after-enter=\"emit('after-enter')\"\n @after-leave=\"emit('after-leave')\"\n @enter=\"isVisible = true\"\n>\n <div\n class=\"bs-modal-deprecated\"\n :id=\"modalId\"\n ref=\"modalRef\"\n :aria-labelledby=\"title && !$attrs['aria-label'] ? titleId : undefined\"\n aria-modal=\"true\"\n :data-body-background-contrast=\"bodyBackgroundContrast\"\n data-component=\"bs-modal-deprecated\"\n :data-footer-border=\"footerBorder\"\n :data-full-height=\"fullHeight\"\n :data-full-width=\"fullWidth\"\n :data-header-border=\"headerBorder\"\n :data-shown=\"transition\"\n :data-size=\"size\"\n :role=\"alert ? 'alertdialog' : 'dialog'\"\n v-bind=\"$attrs\"\n >\n <BsFocusGuardDeprecated :active=\"transition\">\n <header v-if=\"hasHeader\" class=\"bs-modal-deprecated-header-container\">\n <!-- HEADER ROW -->\n <div class=\"bs-modal-deprecated-header\">\n <!-- TITLE -->\n <template v-if=\"hasTitle\">\n <slot name=\"title\">\n <span\n v-if=\"title\"\n class=\"bs-modal-deprecated-title\"\n :id=\"titleId\"\n >\n {{ title }}\n </span>\n </slot>\n </template>\n\n <!-- CLOSE BUTTON (HEADER) -->\n <button\n v-if=\"closeButton\"\n class=\"bs-modal-deprecated-close-button\"\n aria-label=\"Close Modal\"\n title=\"Close Modal\"\n type=\"button\"\n @click=\"closeModal('x-clicked-close', false)\"\n >\n <BsIconClose></BsIconClose>\n </button>\n </div>\n\n <!-- SUBTITLE ROW -->\n <div v-if=\"hasSubtitle\" class=\"bs-modal-deprecated-subtitle\">\n <slot name=\"subtitle\">\n <span :id=\"subtitleId\">{{ subtitle }}</span>\n </slot>\n </div>\n\n <!-- PROGRESS ROW -->\n <div v-if=\"hasProgress\" class=\"bs-modal-deprecated-progress\">\n <slot name=\"progress\"></slot>\n </div>\n </header>\n\n <!-- CLOSE BUTTON (FULL-HEIGHT) -->\n <button\n v-if=\"closeButton && !hasHeader\"\n class=\"bs-modal-deprecated-close-button\"\n aria-label=\"Close Modal\"\n title=\"Close Modal\"\n type=\"button\"\n @click=\"closeModal('x-clicked-close', false)\"\n >\n <BsIconClose></BsIconClose>\n </button>\n\n <!-- BODY -->\n <div class=\"bs-modal-deprecated-body\">\n <slot></slot>\n </div>\n\n <!-- FOOTER -->\n <footer v-if=\"hasFooter\" class=\"bs-modal-deprecated-footer\">\n <slot name=\"footer\"></slot>\n </footer>\n </BsFocusGuardDeprecated>\n </div>\n</BsEnhancedTransition>\n</template>\n","export const BsOptionGroupProvider = Symbol('BsOptionGroupProvider')","<template>\n <div\n ref=\"option\"\n v-show=\"isVisible\"\n v-bind=\"remaining\"\n :id=\"idOrAutoId\"\n class=\"bs-option\"\n :aria-disabled=\"disabled || undefined\"\n :aria-selected=\"isMultiple ? isSelected : (isSelected || undefined)\"\n :data-selected-to-top=\"isSelectedToTop\"\n :data-active=\"isActive || undefined\"\n data-component=\"bs-option\"\n :data-negative=\"negative || undefined\"\n :data-visible=\"isVisible || undefined\"\n :data-multiple=\"isMultiple || undefined\"\n :role=\"role\"\n @click.stop=\"onSelect\">\n\n <!-- Multiple Select -->\n <template v-if=\"isMultiple\">\n <span\n class=\"bs-checkbox\"\n aria-hidden=\"true\"\n :data-disabled=\"disabled || undefined\"\n :data-checked=\"isSelected\" />\n <div class=\"bs-option-grid\" :data-icon-col=\"iconColumn || undefined\" v-bind=\"filtered\">\n <slot :selected=\"isSelected\">\n {{ value }}\n </slot>\n </div>\n </template>\n\n <!-- Single Select -->\n <div v-else class=\"bs-option-grid\" :data-icon-col=\"iconColumn || undefined\" v-bind=\"filtered\">\n <slot :selected=\"isSelected\">\n {{ value }}\n </slot>\n </div>\n\n </div>\n</template>\n\n<script setup>\nimport { inject, onMounted, onUnmounted, computed, ref, useId, useTemplateRef, useAttrs, watch, nextTick } from 'vue'\nimport { BsDropdownProvider } from '@components/dropdown/provider-key-dropdown.js'\nimport { BsOptionGroupProvider } from '@components/option-group/provider-key-option-group.js'\nimport { propDefinitions } from './defs-option-component.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\n\nconst props = defineProps(propDefinitions)\n\nconst dropdown = inject(BsDropdownProvider, null)\nconst optionGroup = inject(BsOptionGroupProvider, null)\n\nconst templateRef = useTemplateRef('option')\nconst attrs = useAttrs()\n\nconst autoId = useId()\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\nconst isVisible = ref(true)\n\nconst idOrAutoId = computed(() => props.id || autoId)\n\nconst isMultiple = computed(() => dropdown.props.multiple)\n\nconst isSelected = computed(() => props.selected || dropdown.isSelected(props.value))\n\nconst isSelectedToTop = computed(() => isMultiple.value && dropdown?.wasPreviouslySelected(props.value))\n\nconst role = computed(() => {\n if (attrs.role) return attrs.role\n if (dropdown.props.role === 'listbox') return 'option'\n return 'menuitem'\n})\n\nconst isActive = computed(() => dropdown.activeOptionId.value === idOrAutoId.value)\n\nonMounted(() => {\n dropdown?.registerOption(idOrAutoId.value, { templateRef, props, isVisible, isSelectedToTop, groupId: optionGroup?.id })\n optionGroup?.registerOption(idOrAutoId.value)\n})\n\nonUnmounted(() => {\n dropdown?.unregisterOption(idOrAutoId.value)\n optionGroup?.unregisterOption(idOrAutoId.value)\n})\n\nwatch(isActive, (newVal) => {\n if (newVal) {\n nextTick(() => templateRef.value?.scrollIntoView?.({ block: 'start', behavior: 'smooth' }))\n }\n})\n\n// - - - - - - - - - - - - - - -\n\nfunction onSelect(event) {\n if (props.disabled) return\n\n dropdown.setModel(props.value)\n\n // onClick is defined as a prop, so we can prevent a consumer added\n // @click from firing when the BsOption is disabled\n if (props.onClick) props.onClick(event)\n}\n</script>","<template>\n <div\n v-if=\"hasTitle\"\n v-show=\"shouldShowGroup\"\n class=\"bs-option-group\"\n data-component=\"bs-option-group\"\n :data-visible=\"shouldShowGroup\"\n :role=\"hasTitle ? 'group' : undefined\"\n :aria-labelledby=\"hasTitle ? idOrAutoId : undefined\">\n\n <p\n :id=\"idOrAutoId\"\n class=\"bs-option-group-title\"\n aria-hidden=\"true\">\n <slot name=\"title\">{{ title }}</slot>\n </p>\n\n <hr class=\"bs-option-group-multiple-hr\" aria-hidden=\"true\" v-if=\"showSeparator\"/>\n <slot />\n\n </div>\n</template>\n\n<script setup>\nimport { computed, useSlots, useId, inject, provide, ref, onBeforeMount, warn } from 'vue'\nimport { propDefinitions } from './defs-option-group-component.js'\nimport { BsDropdownProvider } from '@components/dropdown/provider-key-dropdown.js'\nimport { BsOptionGroupProvider } from './provider-key-option-group.js'\n\nconst props = defineProps(propDefinitions)\n\nconst dropdown = inject(BsDropdownProvider)\n\nconst slots = useSlots()\n\nconst autoId = useId()\n\nconst optionIds = ref([])\n\nconst idOrAutoId = computed(() => props.id || autoId)\n\nconst hasTitle = computed(() => props.title || slots.title)\n\n// so we don't get straggler groups when filtering\nconst shouldShowGroup = computed(() => {\n if (!dropdown.filter.value.query?.value) return true\n return optionIds.value.some(id => dropdown.optionsById.value[id].isVisible.value)\n})\n\nprovide(BsOptionGroupProvider, {\n id: idOrAutoId,\n registerOption,\n unregisterOption,\n})\n\nonBeforeMount(() => {\n if (!hasTitle.value) {\n warn('BsOptionGroup: The title prop or the title slot is required.')\n }\n})\n\n// - - - - - - - - - - - - - - - -\n\nfunction registerOption(id) {\n optionIds.value = [...optionIds.value, id]\n}\n\nfunction unregisterOption(id) {\n optionIds.value = optionIds.value.filter(optId => id !== optId)\n}\n\n// Show separator for multi-select if there are both selected and unselected options\nconst showSeparator = computed(() => dropdown.showPreviouslySelectedSeparator(idOrAutoId))\n\n</script>","<script setup>\n import { computed, ref, onMounted, watch } from 'vue'\n import {\n BsIconCaretLeftDouble,\n BsIconCaretLeft,\n BsIconCaretRightDouble,\n BsIconCaretRight\n } from '@wwtdev/bsds-icons-vue3'\n\n // PROPS\n const props = defineProps({\n // Used for all\n showFirstLastButtons: {\n type: Boolean,\n default: false\n },\n prevPageText: {\n type: String,\n default: undefined\n },\n firstPageText: {\n type: String,\n default: undefined\n },\n nextPageText: {\n type: String,\n default: undefined\n },\n lastPageText: {\n type: String,\n default: undefined\n },\n fixed: {\n type: Boolean,\n default: false\n },\n variant: {\n type: String,\n default: 'base',\n validator: (value) => {\n return ['base', 'group', 'results'].includes(value)\n }\n },\n modelValue: {\n type: Number,\n default: undefined\n },\n // Used for variant=\"base\"\n centerDisplay: {\n type: String,\n default: 'numbers',\n validator: (value) => {\n return ['numbers', 'text'].includes(value)\n }\n },\n // Used for variant=\"base\", centerDisplay=\"numbers\"\n breakText: {\n type: String,\n default: '…'\n },\n // Used for variant=\"base\", centerDisplay=\"numbers\"\n pageRange: {\n type: Number,\n default: 3\n },\n // Used for variant=\"base\"\n pageCount: {\n type: Number,\n default: undefined\n },\n // Used for variant=\"base\", centerDisplay=\"text\" and variant=\"group\"\n centerLabel: {\n type: String,\n default: undefined\n },\n // Used for variant=\"group\"\n itemsPerGroup: {\n type: Number,\n default: 25\n },\n // Used for variant=\"group\"\n itemsCount: {\n type: Number,\n default: undefined\n },\n // Used for variant=\"results\"\n resultsIncrements: {\n type: String,\n default: undefined\n },\n })\n\n // EMITS\n const emit = defineEmits(['update:modelValue'])\n\n // STATE\n const valueState = ref(null)\n\n onMounted(() => {\n if (props.modelValue) {\n // Set internal value to the prop value\n valueState.value = props.modelValue\n } else {\n if (props.variant === 'results') {\n valueState.value = resultsNumbers.value[0]\n } else {\n valueState.value = 1\n }\n }\n })\n\n // Keep internal value in sync with prop\n watch(() => props.modelValue, (newVal) => {\n valueState.value = newVal\n })\n\n // Emit change when internal value changes\n watch(valueState, (newVal, oldVal) => {\n // Don't emit on initial value set\n if (oldVal !== null) {\n emit('update:modelValue', newVal)\n }\n })\n\n // Actual page count varies based on variant\n const actualPageCount = computed(() => {\n if (props.variant === 'group') {\n return Math.ceil(props.itemsCount / props.itemsPerGroup)\n } else if (props.variant === 'base') {\n return props.pageCount\n }\n })\n\n // Helps with a special case where `variant=\"base\"` + `centerDisplay=\"text\"`\n // uses the same style as `variant=\"group\"`, so just use that variant\n const computedVariant = computed(() => {\n if (props.variant === 'base') {\n if (props.centerDisplay === 'text') {\n return 'group'\n } else {\n return undefined\n }\n }\n return props.variant\n })\n\n function handleFirstNav() {\n valueState.value = 1\n }\n\n function handlePrevNav() {\n // Use Math.max to never go below the first page\n valueState.value = Math.max(valueState.value - 1, 1)\n }\n\n function handleNextNav() {\n // Use Math.min to never go over the pageCount\n valueState.value = Math.min(\n valueState.value + 1,\n actualPageCount.value\n )\n }\n\n function handleLastNav() {\n valueState.value = actualPageCount.value\n }\n\n const pages = computed(() => {\n // Show all pages\n if (props.pageCount <= props.pageRange) {\n return [...Array(props.pageCount + 1).keys()].slice(1)\n }\n\n // Always show first page\n const pages = [1]\n\n const offset = (props.pageRange - 1) / 2\n let left = valueState.value - offset\n let right = valueState.value + offset\n\n // Check if left goes under lower bounds\n if (left < 1) {\n // Move right by the left underflow\n right += 1 - left\n // Set left to lower bounds\n left = 1\n }\n\n // Check if right goes over upper bounds\n if (right > props.pageCount) {\n // Move left by the right overflow\n left -= right - props.pageCount\n // Set right to upper bounds\n right = props.pageCount\n }\n\n // Remove first / last page duplicates\n left = Math.max(left, 2)\n right = Math.min(right, props.pageCount - 1)\n\n // Add left ellipsis\n if (left > 2) {\n pages.push(props.breakText)\n }\n\n // Add page numbers\n for (let i = left; i <= right; i++) {\n pages.push(i)\n }\n\n // Add right ellipsis\n if (right < props.pageCount - 1) {\n pages.push(props.breakText)\n }\n\n // Always show last page\n pages.push(props.pageCount)\n\n return pages\n })\n\n const pageTextDisplay = computed(() => {\n return `${props.centerLabel ?? 'Page'} ${valueState.value} of ${actualPageCount.value}`\n })\n\n const groupTextDisplay = computed(() => {\n // valueState starts at 1 rather than 0\n const first = ((valueState.value - 1) * props.itemsPerGroup) + 1\n // Use Math.min to never go over the totalCounts\n const last = Math.min((first - 1) + props.itemsPerGroup, props.itemsCount)\n return `${props.centerLabel ?? 'Results'} ${first} - ${last} of ${props.itemsCount}`\n })\n\n const resultsNumbers = computed(() => {\n return props.resultsIncrements\n .split(',')\n .map((increment) => parseInt(increment))\n })\n</script>\n\n<template>\n <div\n class=\"bs-pagination\"\n data-component=\"bs-pagination\"\n :data-variant=\"computedVariant\"\n :data-fixed=\"props.fixed\"\n >\n <!-- Left Carets -->\n <div\n v-if=\"variant === 'base' || variant === 'group'\"\n class=\"bs-pagination-carets\"\n >\n <!-- First Button -->\n <button\n v-if=\"showFirstLastButtons\"\n type=\"button\"\n :class=\"firstPageText ? 'bs-pagination-word-caret' : undefined\"\n :aria-label=\"firstPageText ? undefined : 'First Page'\"\n :title=\"firstPageText\"\n :disabled=\"valueState === 1\"\n @click=\"handleFirstNav\"\n >\n <BsIconCaretLeftDouble />\n <span v-if=\"firstPageText\">{{ firstPageText }}</span>\n </button>\n\n <!-- Prev Button -->\n <button\n type=\"button\"\n :class=\"prevPageText ? 'bs-pagination-word-caret' : undefined\"\n :aria-label=\"prevPageText ? undefined : 'Previous Page'\"\n :title=\"prevPageText\"\n :disabled=\"valueState === 1\"\n @click=\"handlePrevNav\"\n >\n <BsIconCaretLeft />\n <span v-if=\"prevPageText\">{{ prevPageText }}</span>\n </button>\n </div>\n\n <!-- Page Numbers Display -->\n <div\n v-if=\"variant === 'base' && centerDisplay === 'numbers'\"\n class=\"bs-pagination-page-numbers\"\n >\n <button\n v-for=\"page in pages\"\n :key=\"`page-${page}-button`\"\n type=\"button\"\n :title=\"`Page ${page}`\"\n :disabled=\"valueState === page || breakText === page\"\n :data-selected=\"page === valueState\"\n @click=\"valueState = page\"\n >\n {{ page }}\n </button>\n </div>\n\n <!-- Page Text Display -->\n <span v-if=\"props.variant === 'base' && props.centerDisplay === 'text'\">\n {{ pageTextDisplay }}\n </span>\n\n <!-- Group Text Display -->\n <span v-if=\"props.variant === 'group'\">\n {{ groupTextDisplay }}\n </span>\n\n <!-- Results Display -->\n <template v-if=\"props.variant === 'results'\">\n <span>Results Per Page:</span>\n <div class=\"bs-pagination-results-numbers\">\n <button\n v-for=\"resultsNum in resultsNumbers\"\n type=\"button\"\n :key=\"`results-${resultsNum}`\"\n :data-selected=\"resultsNum === valueState\"\n :disabled=\"valueState === resultsNum || breakText === resultsNum\"\n @click=\"valueState = resultsNum\"\n >\n {{ resultsNum }}\n </button>\n </div>\n </template>\n\n <!-- Right Carets -->\n <div\n v-if=\"variant === 'base' || variant === 'group'\"\n class=\"bs-pagination-carets\"\n >\n <!-- Next Button -->\n <button\n type=\"button\"\n :class=\"nextPageText ? 'bs-pagination-word-caret' : undefined\"\n :aria-label=\"nextPageText ? undefined : 'Next Page'\"\n :title=\"nextPageText\"\n :disabled=\"valueState === actualPageCount\"\n @click=\"handleNextNav\"\n >\n <span v-if=\"nextPageText\">{{ nextPageText }}</span>\n <BsIconCaretRight />\n </button>\n\n <!-- Last Button -->\n <button\n v-if=\"showFirstLastButtons\"\n type=\"button\"\n :class=\"lastPageText ? 'bs-pagination-word-caret' : undefined\"\n :aria-label=\"lastPageText ? undefined : 'Last Page'\"\n :title=\"lastPageText\"\n :disabled=\"valueState === actualPageCount\"\n @click=\"handleLastNav\"\n >\n <span v-if=\"lastPageText\">{{ lastPageText }}</span>\n <BsIconCaretRightDouble />\n </button>\n </div>\n </div>\n</template>\n","<template>\n<component\n :is=\"rootTag\"\n class=\"bs-pill\"\n :data-active=\"active\"\n data-component=\"bs-pill\"\n :data-status=\"status || undefined\"\n :data-variant=\"variant || undefined\"\n :disabled=\"disabled\"\n v-bind=\"buttonOrLinkAttrs\"\n @click=\"handleClick\">\n <span class=\"bs-pill-content\" :data-truncate=\"truncate\">\n <slot />\n </span>\n</component>\n</template>\n\n<script setup>\nimport { useButtonOrLink } from '../../composables/buttonOrLink.js'\nimport { useClientRouter } from '../../composables/clientRouter.js'\nimport { propDefinitions } from './defs-pill.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps(propDefinitions)\nuseDeprecatedProp(props, 'truncate', undefined, 'Truncating should be applied via CSS, for example, via the truncate Tailwind class.')\nuseDeprecatedProp(props, 'active')\n\nconst { onLinkClick } = useClientRouter(props)\n\nconst { rootTag, buttonOrLinkAttrs } = useButtonOrLink(props, 'span')\n\nfunction handleClick(event) {\n if (props.onClick) props.onClick(event)\n onLinkClick(event)\n}\n\n</script>\n<style>\n:where([data-component=\"bs-pill\"]) {\n display: inline-block;\n max-width: 100%;\n}\n</style>\n","<template>\n <div\n class=\"bs-pop-body\"\n :data-background=\"background || undefined\"\n data-component=\"bs-pop-body\">\n <slot />\n </div>\n</template>\n\n<script setup>\nimport { propDefinitions } from './defs-pop-body.js'\n\nconst props = defineProps(propDefinitions)\n</script>","export const BsToastProvider = Symbol('BsToastProvider')\n","<script setup>\nimport { propDefinitions } from './defs-text-button.js'\nimport { useButtonOrLink } from '@composables/buttonOrLink.js'\nimport { usePopTriggers } from '@composables/popTriggers'\n\nconst props = defineProps(propDefinitions)\n\nconst { rootTag, buttonOrLinkAttrs } = useButtonOrLink(props)\nconst { popAttrs, popSlotProps } = usePopTriggers(props)\n</script>\n\n<template>\n <component\n :is=\"rootTag\"\n :class=\"!unstyled && 'bs-text-button'\"\n data-component=\"bs-text-button\"\n :data-size=\"size || undefined\"\n :data-variant=\"variant || undefined\"\n v-bind=\"{ ...buttonOrLinkAttrs, ...popAttrs }\">\n <slot v-bind=\"popSlotProps\" />\n </component>\n</template>","<template>\n <div\n class=\"bs-pop-footer\"\n :data-border=\"ourBorder\"\n data-component=\"bs-pop-footer\">\n <slot>\n <!-- Special case for BsToast only (this is its version of an X button) -->\n <BsTextButton v-if=\"isInToast\" pop-cancel=\"self\">\n Dismiss\n </BsTextButton>\n </slot>\n </div>\n</template>\n\n<script setup>\nimport { computed, inject } from 'vue'\nimport { propDefinitions } from './defs-pop-footer.js'\nimport { BsToastProvider } from '@components/toast/provider-key-toast.js'\nimport BsTextButton from '@components/text-button/BsTextButton.vue'\n\nconst props = defineProps(propDefinitions)\n\nconst isInToast = inject(BsToastProvider, false)\n\n// a footer used inside of a toast should show the border by default,\n// unless consumer has manually turned it off\nconst ourBorder = computed(() => {\n if (isInToast && props.border !== false) return true\n return props.border || undefined\n})\n</script>","<template>\n <component\n class=\"bs-pop-title\"\n data-component=\"bs-pop-title\"\n :id=\"idOrAutoId\"\n :is=\"as\">\n <slot />\n </component>\n</template>\n\n<script setup>\nimport { inject, useId, computed, watch } from 'vue'\nimport { propDefinitions } from './defs-pop-title.js'\nimport { BsPopoverProvider } from '@components/popover/provider-key-popover.js'\n\nconst props = defineProps(propDefinitions)\n\nconst popover = inject(BsPopoverProvider, null)\n\nconst autoId = useId()\n\nconst idOrAutoId = computed(() => props.id || autoId)\n\nwatch(idOrAutoId, () => {\n popover?.setAriaLabelledBy(idOrAutoId.value)\n}, { immediate: true })\n</script>","<template>\n <component\n class=\"bs-pop-subtitle\"\n data-component=\"bs-pop-subtitle\"\n :is=\"as\">\n <slot />\n </component>\n</template>\n\n<script setup>\nimport { propDefinitions } from './defs-pop-subtitle.js'\n\ndefineProps(propDefinitions)\n</script>","<template>\n <div\n class=\"bs-pop-header\"\n :data-border=\"border || undefined\">\n\n <slot>\n <BsPopTitle v-if=\"title\">\n {{ title }}\n </BsPopTitle>\n\n <BsPopSubtitle v-if=\"subtitle\">\n {{ subtitle }}\n </BsPopSubtitle>\n </slot>\n\n </div>\n</template>\n\n<script setup>\nimport { propDefinitions } from './defs-pop-header.js'\nimport BsPopTitle from '@components/pop-title/BsPopTitle.vue'\nimport BsPopSubtitle from '@components/pop-subtitle/BsPopSubtitle.vue'\n\ndefineProps(propDefinitions)\n</script>","<script setup>\nimport { BsIcon } from '@wwtdev/bsds-icons-vue3'\n\nconst props = defineProps({\n profileName: {\n type: String,\n required: true\n },\n company: String,\n jobTitle: String,\n email: String,\n action: String,\n actionIcon: [String, Object],\n miscMeta: String,\n miscMetaIcon: [String, Object]\n})\nconst emit = defineEmits(['action-toggled'])\n\nfunction handleActionToggle(e) {\n if (e.target.tagName !== 'BUTTON') return\n e.preventDefault()\n e.stopImmediatePropagation()\n emit('action-toggled')\n}\n</script>\n\n<template>\n<div class=\"bs-profile-details\" data-component=\"bs-profile-details\">\n <!-- optional action button (e.g. follow) -->\n <button v-if=\"action || $slots.action\"\n data-icon=\"true\"\n @click=\"handleActionToggle\"\n >\n <slot name=\"action\">\n <template v-if=\"actionIcon\">\n <BsIcon\n v-if=\"typeof actionIcon === 'string'\"\n :name=\"actionIcon\"\n class=\"bs-icon\"\n />\n <component v-else :is=\"actionIcon\" class=\"bs-icon\" />\n </template>\n {{ action }}\n </slot>\n </button>\n\n <!-- standard details -->\n <span class=\"bs-profile-name bs-font-semibold\" data-size=\"sm\">\n {{ profileName }}\n </span>\n <span class=\"bs-font-semibold\" v-if=\"company\">{{ company }}</span>\n <span v-if=\"jobTitle\">{{ jobTitle }}</span>\n <span v-if=\"email\">{{ email }}</span>\n\n <!-- optional misc/meta (e.g. event attendee type) -->\n <span data-icon=\"true\" v-if=\"miscMeta || $slots.misc\">\n <slot name=\"misc\">\n <template v-if=\"miscMetaIcon\">\n <BsIcon\n v-if=\"typeof miscMetaIcon === 'string'\"\n :name=\"miscMetaIcon\"\n class=\"bs-icon\"\n />\n <component v-else :is=\"miscMetaIcon\" class=\"bs-icon\" />\n </template>\n {{ miscMeta }}\n </slot>\n </span>\n</div>\n</template>\n","<script setup>\nimport { useButtonOrLink } from '../../composables/buttonOrLink.js'\nimport { useClientRouter } from '../../composables/clientRouter.js'\nimport BsProfileDetails from '../profile-details/BsProfileDetails.vue'\nimport BsProfileImg from '../profile-img/BsProfileImg.vue'\nimport { propDefinitions, emitDefinitions } from './defs-profile.js'\n\nconst props = defineProps(propDefinitions)\n\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst { onLinkClick } = useClientRouter(props)\n\n// Not sure this component is a good use-case for useButtonOrLink, since it looks\n// like it will only ever be a link or a div, never a button...but updating\n// it with the useButtonOrLink tweaks because it was here already.\nconst { rootTag, buttonOrLinkAttrs } = useButtonOrLink(props, 'div')\n// const rootTag = computed(() => linkUrl.value ? 'a' : 'div')\n\n// TODO: Refactor. This is not strictly valid HTML since we're\n// potentially nesting a button inside an anchor tag (in profile details).\n// But fixing it now would require a styles overhaul; keeping as is for now\n// in the interest of a quick conversion to vue.\n</script>\n\n<template>\n<component\n :is=\"rootTag\"\n class=\"bs-profile\"\n data-component=\"bs-profile\"\n :data-layout=\"layout\"\n v-bind=\"buttonOrLinkAttrs\"\n @click=\"onLinkClick\"\n>\n <BsProfileImg\n :src=\"imageSrc\"\n :size=\"imageSize\"\n :initials=\"initials\"\n :profile-name=\"profileName\"\n :use-alt-text=\"false\"\n />\n <BsProfileDetails\n :profile-name=\"profileName\"\n :company=\"company\"\n :job-title=\"jobTitle\"\n :email=\"email\"\n :action=\"action\"\n :action-icon=\"actionIcon\"\n :misc-meta=\"miscMeta\"\n :misc-meta-icon=\"miscMetaIcon\"\n @action-toggled=\"emit('action-toggled')\"\n >\n <template #action>\n <slot name=\"action\" />\n </template>\n <template #misc>\n <slot name=\"misc\" />\n </template>\n </BsProfileDetails>\n</component>\n</template>\n","import { computed } from 'vue'\n\n// this is shared by timeline, progress bar\n\n/**\n * @typedef {import('../components/Types.vue').Progress.Status} Status\n * @typedef {import('../components/Types.vue').Progress.Step} Step\n */\n// JSDoc why - can import the types from sfc into here but not vice versa\n\n/**\n * @param {Object} props\n * @param {Array<Step|string>} props.steps\n * @param {Number} props.currentStep\n * @param {String} props.currentStatus\n */\nexport function useSteps(props) {\n const progressStep = computed(() => {\n switch(props.currentStatus) {\n case undefined:\n case null:\n case '':\n return props.steps.filter(step => step.status === 'complete')?.length\n case 'complete':\n return props.steps.length\n case 'in-progress':\n return props.currentStep\n default:\n return props.currentStep\n }\n })\n\n const progressText = computed(() => {\n return `${progressStep.value} of ${props.steps.length} completed.`\n })\n\n\n function getStatus(status, idx) {\n if (status) return status\n\n if (props.currentStatus) {\n if (idx < props.currentStep) {\n return 'complete'\n } else if (idx === props.currentStep) {\n return props.currentStatus\n } else {\n return 'not-started'\n }\n }\n\n return 'not-started'\n }\n\n return {\n progressStep,\n progressText,\n getStatus\n }\n}\n","<script setup>\nimport { useSteps } from '@composables/steps'\n\n/**\n * @typedef {import('../Types.vue').Progress.Status} Status\n * @typedef {import('../Types.vue').Progress.Step} Step\n */\n\nconst props = defineProps({\n /** @type {Status} */\n currentStatus: {\n type: String,\n validator: (value) => {\n return [\n 'cancelled',\n 'complete',\n 'error',\n 'in-progress',\n 'not-started',\n 'ongoing',\n 'paused',\n 'warning',\n ].includes(value)\n }\n },\n currentStep: {\n type: Number,\n default: 0\n },\n /** @type {Array<Step|string>} */\n steps: {\n type: Array,\n required: true\n },\n})\n\nconst { progressStep, progressText, getStatus } = useSteps(props)\n\n</script>\n<template>\n<div\n :aria-valuemax=\"steps.length\"\n :aria-valuenow=\"progressStep\"\n :aria-valuetext=\"progressText\"\n class=\"bs-progress-bar\"\n data-component=\"bs-progress-bar\"\n role=\"progressbar\"\n>\n <div v-for=\"(step, idx) in steps\"\n class=\"bs-step-item\"\n :data-status=\"getStatus(step.status, idx)\"\n data-variant=\"progress\"\n :key=\"step.id || step.label\"\n role=\"status\"\n >\n <span>\n {{ step.label || step }} : {{ getStatus(step.status, idx) || 'not started' }}\n </span>\n </div>\n</div>\n</template>\n\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\nimport BsLabel from '../label/BsLabel.vue'\n\nconst props = defineProps({\n label: {\n type: String,\n },\n checked: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n error: {\n type: Boolean,\n default: false,\n },\n required: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String,\n validator: (value) => value === 'sm',\n },\n value: {\n type: String\n },\n modelValue: {\n type: String\n },\n // DEPRECATED\n inputId: { default: undefined }\n})\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\n\nconst emit = defineEmits(['update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen ] = useGenIdAttrs()\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed Properties\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst isChecked = computed(() => props.checked || (props.modelValue && props.modelValue === props.value))\n\n</script>\n\n<template>\n <div class=\"bs-boolean\"\n data-component=\"bs-radio\"\n :data-disabled=\"disabled\"\n :data-error=\"error\"\n :data-size=\"size\"\n v-bind=\"filtered\"\n >\n <input\n :checked=\"isChecked\"\n :disabled=\"disabled\"\n :id=\"$attrs.id || inputIdAttr\"\n :required=\"required\"\n type=\"radio\"\n :value=\"value\"\n :data-error=\"error\"\n v-bind=\"remaining\"\n @change=\"(e) => $emit('update:modelValue', e.target['value'])\"\n />\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n </div>\n</template>\n","import { popTriggerProps } from '@composables/popTriggers.js'\n\n/* -- COMPONENT-SPECIFIC PROPS -- */\n\nexport const propDefinitions = {\n\n // -- REQUIRED --\n // none\n\n // -- OPTIONAL --\n id: {\n type: String,\n default: undefined,\n description: 'The id of the BsInputButton. Will be auto-generated if not provided.',\n typeDef: 'string'\n },\n disabled: {\n type: Boolean,\n default: false,\n description: 'Whether or not the BsInputButton is disabled.',\n typeDef: 'boolean'\n },\n displayValue: {\n type: [String, Function],\n default: undefined,\n description: 'Mainly only needed if using an object model. Use to define the text value to be displayed in the input. Provide either: A) the object key that should be displayed, or B) a function that receives the selected obj and returns the value to display, e.g. obj => obj.name. See example demos. Could also be used for any other plain text formatting, e.g. \"SOME_VALUE\" to \"Some Value\". Alternatively, see the `display-value` slot to display HTML content.',\n typeDef: 'string | function'\n },\n error: {\n type: Boolean,\n default: false,\n description: 'Applies error styles to the BsInputButton.',\n typeDef: 'boolean',\n },\n hintId: {\n type: String,\n default: undefined,\n description: 'The id of the hint element. This is used to associate the hint with the input for screen readers.',\n typeDef: 'string'\n },\n multiple: {\n type: Boolean,\n default: false,\n description: 'Specifies that multiple selections can be displayed.',\n typeDef: 'boolean'\n },\n placeholder: {\n type: String,\n default: undefined,\n description: 'Placeholder text for the filter input.',\n typeDef: 'string'\n },\n preventClear: {\n type: Boolean,\n default: false,\n description: 'Prevents the clear X button from being displayed.',\n typeDef: 'boolean'\n },\n // really should only need this one specific pop trigger prop for this use case\n pop: {\n ...popTriggerProps.pop\n },\n required: {\n type: Boolean,\n default: false,\n description: 'Whether the input is required.',\n typeDef: 'boolean',\n },\n showCount: {\n type: Boolean,\n default: false,\n description: 'For optional use with the `multiple` prop. Shows the selection count when greater than zero.',\n typeDef: 'boolean'\n }\n}\n\nexport const emitDefinitions = {}\n\nexport const slotDefinitions = {\n default: {\n description: `Allows the display value to include HTML content. For custom cases. This is an alternative to using the text-only \\`display-value\\` prop.`,\n slotProps: {\n displayText: {\n description: 'The text-only display value. Use as the fallback slot content in the consuming component, e.g. BsSelect.',\n typeDef: 'string'\n },\n isPopOpen: {\n description: 'Whether or not a popover tied to this input is open.',\n typeDef: 'boolean'\n }\n }\n }\n}","<template>\n <!--\n - A faux input used in BsSelect and BsTypeahead\n - Currently for internal use only\n - Future State: Ability to display pills for multiselect case\n -->\n <div\n ref=\"root\"\n :aria-invalid=\"error || undefined\"\n :aria-disabled=\"disabled || undefined\"\n :aria-required=\"required || undefined\"\n class=\"bs-input bs-input-button\"\n data-bs-pop-faux-button=\"true\"\n :data-error=\"error || undefined\"\n :id=\"idOrAutoId\"\n role=\"combobox\"\n :tabindex=\"disabled ? undefined : 0\"\n v-bind=\"ariaAttrs\">\n\n <!-- Count -->\n <BsBadge\n v-if=\"multiple && showCount && model?.length\"\n class=\"bs-input-button-count\"\n color=\"blue\"\n :count=\"model.length\"\n variant=\"notext\" />\n\n <!-- Placeholder -->\n <div v-if=\"!displayText\" class=\"bs-input-button-placeholder\">\n {{ placeholder }}\n </div>\n\n <!-- Display Value -->\n <div v-if=\"displayText\" class=\"bs-input-button-value\">\n <slot v-bind=\"{ displayText, ...popSlotProps }\">\n {{ displayText }}\n </slot>\n </div>\n\n <!-- Clear Button -->\n <button\n v-if=\"!disabled && !preventClear && displayText\"\n class=\"bs-input-button-clear\"\n type=\"button\"\n aria-label=\"Clear\"\n @click.stop=\"onClear\">\n <BsIconClose size=\"sm\" aria-hidden=\"true\" />\n </button>\n\n <!-- Caret Indicator -->\n <BsIconCaretDown\n class=\"bs-input-button-caret\"\n aria-hidden=\"true\" />\n\n </div>\n</template>\n\n<script setup>\nimport { useId, computed, useTemplateRef } from 'vue'\nimport { propDefinitions } from './defs-input-button.js'\nimport BsBadge from '@components/badge/BsBadge.vue'\nimport { usePopTriggers } from '@composables/popTriggers.js'\nimport { BsIconCaretDown, BsIconClose } from '@wwtdev/bsds-icons-vue3'\n\nconst props = defineProps(propDefinitions)\n\nconst model = defineModel({\n type: [String, Object, Number, Array],\n default: undefined\n})\n\nconst { popAttrs, popSlotProps } = usePopTriggers(props)\n\nconst autoId = useId()\n\nconst rootEl = useTemplateRef('root')\n\nconst idOrAutoId = computed(() => props.id || autoId)\n\nconst singleDisplayText = computed(() => {\n if (props.multiple) return\n return props.displayValue\n ? getDisplayValue(model.value)\n : model.value\n})\n\nconst multipleDisplayText = computed(() => {\n if (!props.multiple) return\n if (!Array.isArray(model.value) || !model.value.length) return\n const list = props.displayValue\n ? model.value.map(val => getDisplayValue(val))\n : model.value\n return list.join(', ')\n})\n\nconst displayText = computed(() => {\n return props.multiple\n ? multipleDisplayText.value\n : singleDisplayText.value\n})\n\nconst ariaAttrs = computed(() => {\n const key = props.error ? 'aria-errormessage' : 'aria-describedby'\n return {\n ...popAttrs.value,\n [key]: props.hintId\n }\n})\n\nfunction getDisplayValue(val) {\n if (!val) return val\n return typeof props.displayValue === 'function'\n ? props.displayValue(val)\n : val[props.displayValue]\n}\n\nfunction onClear() {\n model.value = props.multiple ? [] : null\n rootEl.value.focus()\n}\n</script>","<template>\n\n <!-- Faux Input -->\n <BsInputButton\n class=\"bs-select\"\n data-component=\"bs-select\"\n :disabled=\"disabled\"\n :display-value=\"displayValue\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :id=\"idOrAutoId\"\n :multiple=\"multiple\"\n :placeholder=\"placeholder\"\n :prevent-clear=\"preventClear\"\n :pop=\"dropdownId\"\n :required=\"required\"\n :show-count=\"showCount\"\n v-bind=\"$attrs\"\n v-model=\"model\"\n v-slot=\"{ displayText, isPopOpen }\">\n <slot\n name=\"display-value\"\n v-bind=\"{ selected: model, isOpen: isPopOpen }\">\n {{ displayText }}\n </slot>\n </BsInputButton>\n\n <!--\n Dropdown:\n - Must re-emit the BsPopover emits, since the input and dropdown are siblings\n - onBeforeClose & onBeforeOpen are done as props instead, to ensure \"guard\" behavior\n is handled correctly by usePop composable. See note in defs-select-component.js\n -->\n <BsDropdown\n class=\"bs-select-dropdown\"\n :class=\"dropdownClass\"\n :debounce=\"debounce\"\n :equate-by=\"equateBy\"\n :id=\"dropdownId\"\n :filter=\"filter\"\n :filter-key=\"filterKey\"\n :filter-external=\"filterExternal\"\n :persist=\"persist\"\n :place=\"dropdownPlace\"\n :placeholder=\"filterPlaceholder\"\n :min-chars=\"minChars\"\n :mobile-button-label=\"mobileButtonLabel\"\n :mobile-description=\"mobileDescription\"\n :mobile-heading=\"mobileHeading\"\n :mobile-heading-tag=\"mobileHeadingTag\"\n :mobile-sheet=\"mobileSheet\"\n :multiple=\"multiple\"\n :size=\"dropdownSize\"\n v-model=\"model\"\n v-model:filter-input=\"filterInput\"\n v-slot=\"{ id, close }\"\n @after-close=\"data => $emit('after-close', data)\"\n @after-open=\"data => $emit('after-open', data)\"\n @before-close=\"onBeforeClose\"\n @before-open=\"onBeforeOpen\"\n @close=\"data => $emit('close', data)\"\n @open=\"data => $emit('open', data)\"\n @query=\"onQuery\">\n <slot v-bind=\"{ id, close }\" />\n </BsDropdown>\n\n</template>\n\n<script setup>\nimport { useId, computed } from 'vue'\nimport { propDefinitions, emitDefinitions } from './defs-select-component.js'\nimport BsInputButton from '@components/input-button/BsInputButton.vue'\nimport BsDropdown from '@components/dropdown/BsDropdown.vue'\n\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst props = defineProps(propDefinitions)\n\ndefineOptions({ inheritAttrs: false })\n\nconst model = defineModel({\n type: [String, Object, Number, Array],\n required: false,\n default: undefined\n})\n\nconst filterInput = defineModel('filterInput', {\n type: String,\n default: ''\n})\n\nconst autoId = useId()\n\nconst idOrAutoId = computed(() => props.id || autoId)\n\nconst dropdownId = computed(() => `${idOrAutoId.value}-dropdown`)\n</script>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n disabled: {type: Boolean, default: false},\n error: { type: Boolean, default: false },\n hintId: { type: String },\n inputId: { type: String },\n modelValue: [ String, Number ],\n required: { type: Boolean, default: false },\n value: [ String, Number ]\n})\nconst emit = defineEmits(['update:modelValue'])\n\nconst aria = computed(() => {\n return {[ props.error ? 'aria-errormessage' : 'aria-describedby'] : props.hintId }\n})\n</script>\n<template>\n <select\n :id=\"$attrs.id || inputId\"\n class=\"bs-select-deprecated\"\n data-component=\"bs-select-deprecated\"\n :disabled=\"disabled\"\n :required=\"required\"\n :data-error=\"error\"\n :value=\"value || modelValue\"\n v-bind=\"aria\"\n @change=\"(e) => $emit('update:modelValue', e.target.value)\"\n >\n <slot />\n </select>\n</template>\n","<template>\n <div data-component=\"bs-select-field\" v-bind=\"filtered\">\n\n <!-- Label -->\n <BsLabel v-if=\"label || $slots.label\"\n :id=\"labelId\"\n :disabled=\"disabled\"\n :for=\"idOrAutoId\"\n :required=\"required\">\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n\n <!-- Select -->\n <BsSelect\n :aria-labelledby=\"labelId\"\n :disabled=\"disabled\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :id=\"idOrAutoId\"\n :required=\"required\"\n v-bind=\"remaining\"\n v-model=\"model\">\n <template v-for=\"(_, slot) in $slots\" #[slot]=\"slotProps\">\n <slot :name=\"slot\" v-bind=\"slotProps\" />\n </template>\n </BsSelect>\n\n <!-- Hint / Error -->\n <BsFieldDetails v-if=\"showFieldDetails\"\n :data-disabled=\"disabled\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint\"\n :hint-id=\"hintId\" />\n\n </div>\n</template>\n\n<script setup>\nimport { useId, computed } from 'vue'\nimport BsLabel from '@components/label/BsLabel.vue'\nimport BsSelect from '@components/select/BsSelect.vue'\nimport BsFieldDetails from '@components/field-details/BsFieldDetails.vue'\nimport { propDefinitions } from './defs-select-field-component.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\n\n// Emits: Will emit what BsSelect emits (open, close, etc.)\n\nconst props = defineProps(propDefinitions)\n\ndefineOptions({ inheritAttrs: false })\n\nconst model = defineModel({\n type: [String, Object, Number, Array],\n required: false,\n default: undefined\n})\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\nconst autoId = useId()\n\nconst idOrAutoId = computed(() => props.id || autoId)\n\nconst labelId = computed(() => `${idOrAutoId.value}-label`)\n\nconst hintId = computed(() => `${idOrAutoId.value}-hint`)\n\nconst showFieldDetails = computed(() => {\n const err = props.error && props.errorMsg\n return err || props.hint || ''\n})\n</script>\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport BsFieldDetails from '@components/field-details/BsFieldDetails.vue'\nimport BsLabel from '@components/label/BsLabel.vue'\nimport BsSelectDeprecated from '@components/_deprecated/select/BsSelectDeprecated.vue'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\n\n// Props\nconst props = defineProps({\n data: {\n type: Array,\n default: () => [],\n },\n /** Sets the disabled state on input, disabled styles on label. */\n disabled: {\n type: Boolean,\n default: false,\n },\n /** Applies error styles to the input. */\n error: {\n type: Boolean,\n default: false,\n },\n /** Pass error text. */\n errorMsg: String,\n /** Pass helper text. */\n hint: String,\n /** Pass id for the input element. Will also be applied to label attribute. */\n inputId: String,\n /** Pass label text. */\n label: { type: String },\n /** Placeholder attribute for `<input>`. */\n placeholder: String,\n /** Sets the required state on the input, append required* indicator to label. */\n required: {\n type: Boolean,\n default: false,\n },\n /** Sets the select value - do not use if using `v-model`. */\n value: [ String, Number ],\n /** Sets the select value - `v-model` directive will use this; do not set explicitly. */\n modelValue: [ String, Number ],\n // DEPRECATED\n hints: { default: undefined }\n})\nuseDeprecatedProp(props, 'hints', undefined, 'Use \\'hint\\' and/or \\'errorMsg\\. instead.')\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed Properties\nconst hintDeprecated = computed(() => props.hints?.join?.(\"\\n\") || props.hints)\nconst hintMsg = computed(() => (\n (props.error && props.errorMsg) || props.hint || hintDeprecated.value || undefined\n))\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst selectedVal = computed(() => props.value || props.modelValue)\n</script>\n\n<template>\n<div data-component=\"bs-select-field-deprecated\" v-bind=\"filtered\">\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n\n <BsSelectDeprecated\n :disabled=\"disabled\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :input-id=\"$attrs.id || inputIdAttr\"\n :required=\"required\"\n :value=\"selectedVal\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n >\n <option :selected=\"!selectedVal\" value=\"\" :disabled=\"!!selectedVal\">\n {{ disabled ? '' : placeholder }}\n </option>\n <option v-for=\"option in data\"\n :key=\"option.value\"\n :disabled=\"option.disabled\"\n :selected=\"selectedVal === option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </option>\n </BsSelectDeprecated>\n\n <BsFieldDetails v-if=\"hintMsg\"\n :data-disabled=\"disabled\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint || hintDeprecated\"\n :hint-id=\"hintId\"\n />\n</div>\n</template>\n<style>\n:where([data-component=\"bs-select-field-deprecated\"]) {\n display: block;\n width: 100%;\n}\n</style>\n","<script setup>\nimport { computed, ref, toValue, useAttrs } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport BsDropdownWithToggleDeprecated from '@components/_deprecated/dropdown-with-toggle/BsDropdownWithToggleDeprecated.vue'\nimport BsLabel from '@components/label/BsLabel.vue'\nimport { BsIconCaretDown } from '@wwtdev/bsds-icons-vue3'\n\n// PROPS\nconst props = defineProps({\n breakout: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n dropdownPosition: {\n type: String,\n default: '',\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n dropdownWidth: {\n type: String,\n default: 'anchor',\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n error: {\n type: Boolean,\n default: false\n },\n helperDescription: {\n type: String,\n default: undefined\n },\n helperText: {\n type: String,\n default: undefined\n },\n hintId: {\n type: String,\n default: undefined\n },\n inputId: {\n type: String,\n default: undefined\n },\n inputName: {\n type: String,\n default: undefined\n },\n label: {\n type: String,\n default: undefined\n },\n modelValue: {\n type: [ String, Number, Object ],\n default: undefined\n },\n options: {\n type: Array,\n required: true\n },\n optionsId: {\n type: String,\n default: undefined\n },\n placeholder: {\n type: String,\n default: 'Select an option'\n },\n required: {\n type: Boolean,\n default: false\n },\n selectId: {\n type: String,\n default: undefined\n },\n valueIdKey: {\n type: String,\n default: 'id'\n },\n})\n\n// EMITS\nconst emit = defineEmits(['update:model-value'])\n\n// COMPOSABLES\nconst [ selectIdGen, optionsIdGen ] = useGenIdAttrs(2)\nconst attrs = useAttrs()\n\n// STATE\nconst isOpen = ref(false)\n\n// COMPUTED\nconst selectIdComp = computed(() => {\n return props.selectId || attrs.id || selectIdGen.value\n})\nconst optionsIdComp = computed(() => props.optionsId || optionsIdGen.value)\nconst buttonText = computed(() => {\n if (props.modelValue) {\n const matchedOption = props.options.find((option) => {\n // Object options, find a match by id\n if (option.value?.[props.valueIdKey]) {\n return option.value[props.valueIdKey] === props.modelValue?.[props.valueIdKey]\n }\n // String or Number options, find a match by value\n return option.value === props.modelValue\n })\n\n if (matchedOption) {\n return matchedOption.label\n }\n }\n\n // Default to placeholder if no match or no selected value\n return props.placeholder\n})\nconst placeholderShown = computed(() => {\n return buttonText.value === props.placeholder\n})\n\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n<div>\n <BsLabel\n v-if=\"label || $slots.label\"\n :disabled=\"disabled\"\n :for=\"selectIdComp\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n\n <input\n v-if=\"inputName || inputId\"\n :id=\"inputId\"\n :name=\"inputName\"\n type=\"hidden\"\n :value=\"modelValue\"\n />\n\n <BsDropdownWithToggleDeprecated\n :anchor-id=\"selectIdComp\"\n :breakout=\"breakout\"\n :dropdown-position=\"dropdownPosition\"\n :dropdown-width=\"dropdownWidth\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :multiselect=\"false\"\n :open=\"isOpen\"\n :options-id=\"optionsIdComp\"\n :options=\"options\"\n :selected-option=\"modelValue\"\n :toggle-id=\"selectIdComp\"\n :value-id-key=\"valueIdKey\"\n @close=\"isOpen = false\"\n @update:selected-option=\"(ev) => emit('update:model-value', ev)\"\n >\n <template #toggle>\n <button\n :aria-controls=\"optionsIdComp\"\n :aria-describedby=\"hintId\"\n :aria-expanded=\"isOpen\"\n aria-haspopup=\"listbox\"\n :aria-invalid=\"error\"\n :aria-label=\"`${isOpen ? 'Close' : 'Open'} Combobox`\"\n class=\"bs-select-deprecated\"\n :data-cy=\"placeholderShown ? 'ignore' : undefined\"\n :data-disabled=\"disabled\"\n :data-error=\"error\"\n :data-open=\"isOpen\"\n :data-placeholder=\"placeholderShown\"\n :data-required=\"required\"\n :disabled=\"disabled\"\n :id=\"selectIdComp\"\n role=\"combobox\"\n v-bind=\"$attrs\"\n @click.prevent=\"isOpen = !isOpen\"\n >\n <span>{{ buttonText }}</span>\n <BsIconCaretDown v-if=\"!disabled\" size=\"md\" />\n </button>\n </template>\n </BsDropdownWithToggleDeprecated>\n</div>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '../../composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js' \nimport BsLabel from '../label/BsLabel.vue'\n\nconst props = defineProps({\n checked: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n hideLabel: {\n type: Boolean,\n default: false,\n },\n innerOnLabel: {\n type: String\n },\n innerOffLabel: {\n type: String\n },\n label: {\n type: String\n },\n size: {\n type: String,\n validator: (value) => value === 'sm',\n },\n modelValue: {\n type: Boolean\n },\n // DEPRECATED\n inputId: { default: undefined }\n})\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\n\nconst emit = defineEmits(['update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen ] = useGenIdAttrs()\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed Properties\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst isChecked = computed(() => props.checked || props.modelValue)\n\n</script>\n\n<template>\n<div class=\"bs-boolean\"\n data-component=\"bs-switch\"\n :data-disabled=\"disabled\"\n :data-size=\"size\"\n v-bind=\"filtered\"\n>\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :hide=\"hideLabel\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <div class=\"bs-switch\"\n :data-disabled=\"disabled\"\n :data-size=\"size\"\n >\n <input\n :checked=\"isChecked\"\n :disabled=\"disabled\"\n :id=\"$attrs.id || inputIdAttr\"\n type=\"checkbox\"\n v-bind=\"remaining\"\n @change=\"(e) => emit('update:modelValue', e.target['checked'])\"\n />\n <span\n aria-hidden=\"true\"\n :data-inner-on-label=\"innerOnLabel\"\n :data-inner-off-label=\"innerOffLabel\"\n ></span>\n </div>\n</div>\n</template>\n","<template>\n <div\n :aria-controls=\"panelIdComputed\"\n :aria-selected=\"isActive ? 'true' : 'false'\"\n :data-hidden=\"hidden || undefined\"\n data-component=\"bs-tab\"\n role=\"tab\"\n tabindex=\"0\"\n ref=\"hostEl\"\n @click=\"handleTabSelection\"\n @keydown=\"handleKeydown\"\n >\n <slot />\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, useAttrs } from \"vue\"\n\nconst props = defineProps({\n activeTabId: {\n type: String,\n required: true,\n },\n hidden: {\n type: Boolean,\n default: false,\n },\n panelId: {\n type: String\n },\n})\nconst emit = defineEmits([\"tabClick\"])\n\nconst attrs = useAttrs()\n\nconst hostEl = ref()\nconst isActive = computed(() => props.activeTabId === attrs.id)\nconst panelIdComputed = computed(() => props.panelId || `${attrs.id}-panel`)\n\nfunction handleKeydown(e) {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n e.stopPropagation()\n handleTabSelection()\n }\n}\nfunction handleTabSelection() {\n if (props.activeTabId !== attrs.id) {\n const ev = new CustomEvent(\"tabClick\", { detail: attrs.id, bubbles: true })\n hostEl.value.dispatchEvent(ev)\n }\n}\n</script>\n","<script>\nfunction TableCol() {\n return null\n}\n\nTableCol.props = {\n id: {\n // TODO: Change to \"required\", use as cell loop key, and update all docs after getting resizing working ORCA app okay\n type: String,\n default: undefined\n },\n name: {\n type: [String, Number],\n default: ''\n },\n resize: {\n type: [Boolean, Number, String], // String could be \"left\" or \"right\"\n default: false\n },\n // named as resizeId instead of resizeKey, to help indicate it should ideally be a unique id per column\n resizeId: {\n type: String,\n default: undefined\n },\n resizeMin: {\n type: [String, Number],\n default: undefined // undefined so this can override Table-level setting when defined,\n },\n resizeMax: {\n type: [String, Number],\n default: undefined // undefined so this can override Table-level setting when defined\n },\n rowKey: {\n type: [String, Number],\n default: ''\n },\n sort: {\n type: [Boolean, String, Number],\n default: false\n },\n sortKey: {\n type: String,\n default: ''\n },\n truncate: {\n type: [Boolean, String, Number],\n default: undefined // undefined so this can override Table-level setting when defined\n },\n width: {\n type: String,\n default: '' // default width is set in Table.vue\n }\n}\n\nexport default TableCol\n</script>\n","export const TableHeaderProvider = Symbol('TableHeaderProvider')\nexport const TableBodyProvider = Symbol('TableBodyProvider')\nexport const TableFooterProvider = Symbol('TableFooterProvider')\n","<template>\n <div\n :class=\"`bs-table-${kind}-rowgroup`\"\n role=\"rowgroup\"\n :style=\"`--bs-table-${kind}-row-count: ${rowCount}`\">\n <slot />\n </div>\n</template>\n\n<script setup>\nimport { ref, provide } from 'vue'\nimport { TableHeaderProvider, TableBodyProvider, TableFooterProvider } from './provider-keys-table'\n\n// Why this Provide/Inject approach?\n// For css grid implicit rows subgrid layout reasons, we need to count rows rendered into the header/body/footer respectively\n// Checking the TableRow's parent instance isn't necessarily reliable or efficient\n// Instead we are using provide/inject to figure out if the TableRow is a descendant of the header/body/footer (see TableRow for that part of it)\n// (TODO: tweak to work with nested Tables scenario? low priority, thinking can factor in a table id)\n\nconst props = defineProps({\n kind: {\n type: String,\n required: true,\n validate: val => ['header', 'body', 'footer'].includes(val)\n }\n})\n\nconst providerByKind = {\n header: TableHeaderProvider,\n body: TableBodyProvider,\n footer: TableFooterProvider\n}\n\nconst rowCount = ref(0)\n\nprovide(providerByKind[props.kind], { incrementRowCount, decrementRowCount })\n\nfunction incrementRowCount() {\n rowCount.value++\n}\n\nfunction decrementRowCount() {\n rowCount.value--\n}\n</script>","<script>\nfunction FrozenCols() {\n return null\n}\n\nFrozenCols.props = {\n place: {\n type: String,\n default: 'left',\n validator: val => ['left', 'right'].includes(val)\n }\n}\n\nexport default FrozenCols\n</script>\n","<template>\n <div class=\"bs-table-row\" role=\"row\">\n <slot />\n </div>\n</template>\n\n<script setup>\nimport { onMounted, onUnmounted, inject } from 'vue'\nimport { TableHeaderProvider, TableBodyProvider, TableFooterProvider } from './provider-keys-table'\n\n// Detect if this row is a child of the Table body, header, or footer (body first since it will be the majority)\nconst rowgroup = inject(TableBodyProvider, null) || inject(TableHeaderProvider, null) || inject(TableFooterProvider)\n\n// keeping track of the rendered rows count is unfortunately necessary for the css grid implicit rows subgrid layout\nonMounted(() => rowgroup.incrementRowCount())\nonUnmounted(() => rowgroup.decrementRowCount())\n</script>\n","<script>\nimport { h } from 'vue'\n\nfunction HeadCell(props, { slots }) {\n return h('div', {\n class: 'bs-table-head-cell',\n role: 'columnheader'\n }, slots)\n}\n\n// defined so fall-through attributes work correctly without effort\nHeadCell.props = {}\n\nexport default HeadCell\n</script>\n","<script>\nimport { h } from 'vue'\n\nfunction Cell(props, { slots }) {\n return h('div', {\n class: 'bs-table-cell',\n role: 'cell'\n }, slots)\n}\n\n// defined so fall-through attributes work correctly without effort\nCell.props = {}\n\nexport default Cell\n</script>","<template>\n <div class=\"bs-table-wrap-header\">\n <slot />\n </div>\n</template>\n","<template>\n <div class=\"bs-table-wrap-footer\">\n <slot />\n </div>\n</template>","<template>\n <button\n class=\"bs-sort-toggle\"\n type=\"button\"\n @click=\"onToggle\">\n <slot>\n <span class=\"bs-visually-hidden\">sort toggle</span>\n </slot>\n <component\n :is=\"iconsByOrder[props.order] || BsIconCaretSort\"\n :size=\"size\"\n aria-hidden=\"true\" />\n </button>\n</template>\n\n<script setup>\nimport { BsIconCaretSort, BsIconCaretSortUp, BsIconCaretSortDown } from '@wwtdev/bsds-icons-vue3'\n\nconst emit = defineEmits(['toggle'])\n\nconst props = defineProps({\n order: {\n type: String,\n default: '',\n validate: val => ['asc', 'desc'].includes(val)\n },\n size: {\n type: String,\n default: 'md',\n // these should be same as values allowed for BsIcons size prop\n validate: val => ['sm', 'md', 'lg', 'xl', '2xl', '3xl', 'auto'].includes(val)\n }\n})\n\nconst iconsByOrder = {\n asc: BsIconCaretSortUp,\n desc: BsIconCaretSortDown\n}\n\nfunction onToggle(event) {\n const nextStates = {\n asc: 'desc',\n desc: 'asc'\n }\n emit('toggle', nextStates[props.order] || 'asc', event)\n}\n</script>\n","<template>\n <div\n v-show=\"isResizerVisible\"\n ref=\"resizer\"\n class=\"bs-table-col-resizer\"\n :class=\"isResizing && 'bs-table-col-resizer-active'\"\n @dragstart.prevent\n @pointerdown.prevent.stop=\"onPointerDown\"\n @dblclick.prevent.stop=\"onDoubleClick\" />\n</template>\n\n<script setup>\nimport { useTemplateRef, shallowRef, ref, onMounted, onUnmounted, nextTick } from 'vue'\n\nconst emit = defineEmits(['resize'])\n\nconst resizerEl = useTemplateRef('resizer')\n\nconst resizerExtraHoverTarget = 5\n\nlet xStart = null\nlet xPos = null\nlet animationFrame = null\n\nconst target = shallowRef({ el: null, rect: null })\nconst isResizerVisible = ref(false)\nconst isResizing = ref(false)\n\nonMounted(() => {\n // had to listen on document instead of table header rowgroup or table, due to issue\n // with resizer staying visible when mouse leaves header vertically, very fast\n document.addEventListener('pointermove', showHideResizer)\n})\n\nonUnmounted(() => {\n document.removeEventListener('pointermove', showHideResizer)\n})\n\n// - - - - - - - - - - - -\n\nfunction showHideResizer(event) {\n if (isResizing.value) return\n\n if (isResizerVisible.value) {\n return (event.target === resizerEl.value) || hideResizer()\n }\n\n setTarget(event.target.closest('[data-bs-table-col-resize-id]'))\n\n if (!target.value.el) return\n\n const isOnLeftBorder = event.clientX <= (target.value.rect.left + resizerExtraHoverTarget)\n const isOnRightBorder = event.clientX >= (target.value.rect.right - resizerExtraHoverTarget)\n\n // TODO: Also handle left-only resize\n if (isOnLeftBorder && event.target.dataset.bsTableColResize === 'right') return\n\n if (isOnLeftBorder || isOnRightBorder) {\n xPos = isOnLeftBorder ? target.value.rect.left : target.value.rect.right\n if (isOnLeftBorder) setTarget(getTargetsPreviousSibling())\n if (!target.value.el) return\n showResizer()\n }\n}\n\n// TODO: Handle frozen cols right case\nfunction getTargetsPreviousSibling() {\n const prevSibling = target.value.el.previousElementSibling\n\n if (!prevSibling) return\n\n const prevCell = prevSibling.classList.contains('bs-table-cols-frozen-left')\n ? target.value.el.previousElementSibling.lastElementChild\n : target.value.el.previousElementSibling\n\n return prevCell.dataset.bsTableColResizeId ? prevCell : null\n}\n\nfunction setTarget(el) {\n // TODO: Handle resize max, coming back to do this after getting ORCA app resize working\n target.value = el\n ? { el, rect: el.getBoundingClientRect(), minWidth: getResizeMin(el) }\n : { el: null, rect: null }\n}\n\nfunction getResizeMin(el) {\n const width = el.dataset.bsTableColResizeMin?.replace('px', '')\n if (!width) return undefined\n return parseInt(width, 10)\n}\n\nfunction showResizer() {\n moveResizerToXpos()\n resizerEl.value.style.setProperty('--bs-table-col-resizer-y', `${target.value.rect.top}px`)\n resizerEl.value.style.setProperty('--bs-table-col-resizer-handle-height', `${target.value.rect.height}px`)\n isResizerVisible.value = true\n}\n\nfunction hideResizer() {\n isResizerVisible.value = false\n}\n\nfunction onPointerDown(event) {\n event.target.setPointerCapture(event.pointerId)\n const scrollWrap = resizerEl.value.closest('.bs-table-scroll-wrap')\n resizerEl.value.style.setProperty('--bs-table-col-resizer-tail-height', `${scrollWrap.offsetHeight}px`)\n isResizing.value = true\n xStart = xPos\n resizerEl.value.addEventListener('pointermove', onPointerMove)\n resizerEl.value.addEventListener('pointerup', onPointerUp, { once: true })\n}\n\nfunction onPointerMove(event) {\n xPos = isMinColWidth(event)\n ? target.value.rect.left + target.value.minWidth\n : event.clientX\n\n if (animationFrame) return\n\n animationFrame = requestAnimationFrame(() => {\n animationFrame = null\n moveResizerToXpos()\n })\n}\n\nfunction isMinColWidth(event) {\n return (event.clientX - target.value.rect.left) <= target.value.minWidth\n}\n\nfunction moveResizerToXpos() {\n resizerEl.value.style.setProperty('--bs-table-col-resizer-x', `${xPos}px`)\n}\n\nfunction onPointerUp() {\n resizerEl.value.removeEventListener('pointermove', onPointerMove)\n // timeout fixes a weird issue in Firefox (as of 11/2024) where dblclick event won't fire when also removing a class\n setTimeout(() => isResizing.value = false)\n const xDiff = xPos - xStart\n if (xDiff === 0) return\n emitResize(Math.round(target.value.rect.width + xDiff))\n}\n\nasync function emitResize(width) {\n emit('resize', {\n el: target.value.el,\n id: target.value.el.dataset.bsTableColResizeId,\n width\n })\n // handles case where user does not mouse-off/hide resizer before resizing again,\n // by getting latest boundingClientRect() info after the column has been resized\n await nextTick(() => setTarget(target.value.el))\n}\n\n// TODO: Come back to think about this after working in ORCA app. This gets weird if the default col width is not in pixels.\nfunction onDoubleClick() {\n emitResize() // no width given, resets col back to orig width\n hideResizer()\n}\n</script>\n","<!-- uses local css only (no blue steel css, except vars), due to structure differences from Blue Steel table css -->\n\n<!--\n TODO:\n * Resize Cols\n * Finalize loop keys approach, using rowIdKey (not sure if this is needed, no issues so far with our huge, complex table)\n-->\n<script>\nimport { h, readonly, shallowRef, cloneVNode, computed, ref, warn } from 'vue'\nimport TableCol from './TableCol.vue'\nimport TableRowGroup from './TableRowGroup.vue'\nimport FrozenCols from './FrozenCols.vue'\nimport TableRow from './TableRow.vue'\nimport HeadCell from './HeadCell.vue'\nimport Cell from './Cell.vue'\nimport TableHeader from './TableHeader.vue'\nimport TableFooter from './TableFooter.vue'\nimport SortToggle from './SortToggle.vue'\nimport TableColResizer from './TableColResizer.vue'\n\nexport default {\n\n props: {\n rows: {\n type: Array,\n required: true\n },\n ariaDescribedby: {\n type: String,\n default: undefined\n },\n ariaLabel: {\n type: String,\n default: undefined\n },\n borders: {\n type: String,\n default: 'rows',\n validate: val => ['rows', 'cols', 'grid', 'none', 'frozen'].includes(val)\n },\n cellPadding: {\n type: String,\n default: 'md'\n },\n // can also be set or overridden at the individual col level, via TableCol's \"width\" prop\n colWidth: {\n type: String,\n default: '1fr'\n },\n freezeHeader: {\n type: [Boolean, String, Number],\n default: false\n },\n freezeFooter: {\n type: [Boolean, String, Number],\n default: false\n },\n // can also be set or overridden at the individual col level, via TableCol's \"resize-min\" prop\n resizeColsMin: {\n type: [String, Number],\n default: '40px'\n },\n // can also be set or overridden at the individual col level, via TableCol's \"resize-max\" prop\n resizeColsMax: {\n type: [String, Number],\n default: undefined\n },\n role: {\n type: String,\n default: 'table'\n },\n rowHover: {\n type: [Boolean, String, Number],\n default: false\n },\n // NOTE: This prop is not used in the code yet. Waiting to see if any issues arise IRL usage, none so far.\n // The row data's unique id key to be used for the table rows v-for :key\n // rowIdKey: {\n // type: String,\n // default: 'id'\n // },\n sortKey: {\n type: String,\n default: undefined\n },\n sortOrder: {\n type: String,\n default: undefined,\n validator: val => ['asc', 'desc'].includes(val)\n },\n striped: {\n type: [Boolean, String, Number],\n default: false\n },\n // can also be set or overridden at the individual col level, via TableCol's \"truncate\" prop\n truncate: {\n type: [Boolean, String, Number],\n default: false\n }\n },\n\n emits: ['sort', 'resize-col'],\n\n setup(props, { slots: tableSlots, emit }) {\n\n const cols = shallowRef({\n left: [],\n center: [],\n right: []\n })\n\n const resizedColWidthsById = ref({})\n\n const colWidths = computed(() => {\n return Object.values(cols.value).flat().map(col => {\n const resizeId = getResizeId(col)\n return resizedColWidthsById.value[resizeId] ?? getInitialColWidth(col)\n }).join(' ')\n })\n\n // consumer can use a size option or provide any valid css padding value\n const cellPaddingCssVar = computed(() => {\n const value = ['xs', 'sm', 'md', 'lg', 'xl', 'none'].includes(props.cellPadding)\n ? `var(--bs-table-cell-padding-${props.cellPadding})`\n : props.cellPadding\n return `--bs-table-cell-padding: ${value}`\n })\n\n // consumer can use boolean flag, or provide any valid css color value\n const rowHoverCssVar = computed(() => {\n if (typeof props.rowHover !== 'string' || props.rowHover === 'true') return ''\n return `--bs-table-row-hover: ${ props.rowHover }`\n })\n\n const canResizeCols = computed(() => {\n return Object.values(cols.value).flat().some(getResizeId)\n })\n\n\n // ----- WRAPPER -----\n\n function wrapper(content = []) {\n const css = [\n 'bs-table-wrap',\n `bs-table-border-${props.borders}`,\n props.striped && 'bs-table-striped',\n props.rowHover && 'bs-table-row-hover'\n ]\n\n return h('div', {\n class: css,\n style: [cellPaddingCssVar.value, rowHoverCssVar.value]\n }, content)\n }\n\n\n // ----- TABLE -----\n\n function table(content = []) {\n const style = [\n `--bs-table-col-widths: ${colWidths.value}`,\n `--bs-table-frozen-left-count: ${cols.value.left.length}`,\n `--bs-table-frozen-right-count: ${cols.value.right.length}`\n ]\n\n return h('div', {\n class: 'bs-table',\n style,\n role: props.role,\n ariaLabel: props.ariaLabel,\n ariaDescribedby: props.ariaDescribedby\n }, content)\n }\n\n // is needed to ensure cases where a consumer may flex-1 the <Table>, work nicely automatically\n function tableScrollWrapper(content = []) {\n return h('div', { class: 'bs-table-scroll-wrap'}, content)\n }\n\n\n // ----- HEADER ROWGROUP -----\n\n function headerRowgroup(rows = []) {\n return h(TableRowGroup, {\n kind: 'header',\n class: props.freezeHeader && 'bs-table-header-rowgroup-freeze'\n }, () => rows)\n }\n\n function headerRowgroupDefault() {\n return headerRowgroup(\n row(\n cells(headCell)\n )\n )\n }\n\n function headerRowgroupSlot() {\n const slotContent = tableSlots.header({ cols: readonly(cols.value) })\n return headerRowgroup(\n slotRows(slotContent, headCell)\n )\n }\n\n\n // ----- BODY ROWGROUP -----\n\n function bodyRowgroup(rows = []) {\n return h(TableRowGroup, { kind: 'body' }, () => rows)\n }\n\n function bodyRowgroupDefault() {\n const rows = props.rows.map((rowData, rowIndex) => {\n return row(\n cells(bodyCell, { row: rowData, rowIndex })\n )\n })\n return bodyRowgroup(rows)\n }\n\n function bodyRowgroupSlot() {\n const rows = props.rows.map((rowData, rowIndex) => {\n const slotContent = tableSlots.body({ row: rowData, rowIndex })\n return slotRows(slotContent, bodyCell, { row: rowData, rowIndex })\n })\n return bodyRowgroup(rows)\n }\n\n\n // ----- FOOTER ROWGROUP -----\n\n function footerRowgroup(rows = []) {\n return h(TableRowGroup, {\n kind: 'footer',\n class: props.freezeFooter && 'bs-table-footer-rowgroup-freeze'\n }, () => rows)\n }\n\n function footerRowgroupSlot() {\n const slotContent = tableSlots.footer({ cols: readonly(cols.value) })\n return footerRowgroup(\n slotRows(slotContent, headCell)\n )\n }\n\n\n // ----- ROWS -----\n\n function row(cells = []) {\n return h(TableRow, null, () => cells)\n }\n\n function slotRows(slotContent = [], cellFn, slotProps = {}) {\n const rows = findNodesByType(slotContent, [TableRow])\n return rows.map(node => isDefaultRowPlaceholder(node)\n ? h(node, null, () => cells(cellFn, slotProps))\n : h(node)\n )\n }\n\n\n // ----- CELLS -----\n\n function headCell(col = {}) {\n const slotContent = col.slots?.default({}).find(node => node.type === HeadCell)\n const sortKey = getSortKey(col)\n\n const attrs = {\n class: props.truncate && truncateCss(col),\n ['data-bs-table-col-id']: col.props.id, // TODO: only added here for col resize reasons, could be on all cells\n ...getResizeAttrs(col),\n ...(sortKey && (sortKey === props.sortKey) && { 'aria-sort': `${props.sortOrder}ending` })\n }\n\n // if HeadCell contains SortToggle, automatically hook it up\n if (sortKey && slotContent?.children) {\n const newKids = slotContent.children.default().map(node => {\n return node.type === SortToggle\n ? cloneVNode(node, { ...getSortToggleProps(col) })\n : h(node)\n })\n return h(slotContent, attrs, () => newKids)\n }\n\n return slotContent\n ? h(slotContent, attrs)\n : h(HeadCell, attrs, () => sortToggle(col) || col.props?.name)\n }\n\n function getResizeAttrs(col) {\n const resizeId = getResizeId(col)\n\n if (!resizeId) return {}\n\n const colMin = col.props['resize-min'] || col.props.resizeMin\n const colMax = col.props['resize-max'] || col.props.resizeMax\n\n return {\n ['data-bs-table-col-resize-id']: resizeId,\n ['data-bs-table-col-resize']: ['right', 'left'].includes(col.props.resize) ? col.props.resize : undefined,\n ['data-bs-table-col-resize-min']: colMin === undefined ? props.resizeColsMin : colMin,\n ['data-bs-table-col-resize-max']: colMax === undefined ? props.resizeColsMax : colMax\n }\n }\n\n function getResizeId(col) {\n const resizeId = col.props['resize-id'] || col.props.resizeId\n if (resizeId) return resizeId\n\n const resizeKey = col.props['resize-key'] || col.props.resizeKey\n if (resizeKey) {\n throw new Error(`[BsTable] BsTableCol does not have a \"resize-key\" prop. Instead, use: resize-id=\"${resizeKey}\".`)\n }\n\n if (!isColPropTruthy(col, 'resize')) return\n if (!col.props.id) throw new Error('[BsTable] BsTableCol \"resize\" prop is missing identifier. Must use either approach...single prop: \\'resize-id=\"myUniqueResizeId\"\\', or both props: \\'resize id=\"myTableColId\"\\'')\n return col.props.id\n }\n\n function getSortToggleProps(col = {}) {\n const sortKey = getSortKey(col)\n return {\n order: props.sortKey === sortKey ? props.sortOrder : null,\n onToggle: sortOrder => emit('sort', { sortKey, sortOrder })\n }\n }\n\n function sortToggle(col = {}) {\n const sortKey = getSortKey(col)\n if (!sortKey) return\n return h(SortToggle, { ...getSortToggleProps(col) }, () => col.props?.name)\n }\n\n function getSortKey(col) {\n const sortKey = col.props['sort-key'] || col.props.sortKey\n if (sortKey) return sortKey\n if (!isColPropTruthy(col, 'sort')) return\n if (!col.props.id) throw new Error('[BsTable] BsTableCol \"sort\" prop is missing key identifier. Must use either approach...single prop: \\'sort-key=\"mySortKey\"\\', or both props: \\'sort id=\"myTableColId\"\\'')\n return col.props.id\n }\n\n function bodyCell(col = {}, slotProps = {}) {\n const slotContent = col.slots?.default(slotProps).find(node => node.type === Cell)\n const attrs = { class: props.truncate && truncateCss(col) }\n return slotContent\n ? h(slotContent, attrs)\n : h(Cell, attrs, () => getRowKeyProp(slotProps.row, col))\n }\n\n // TODO (HJ): Update this to use isColPropTruthy() approach and fix issue where TableCol only\n // overrides Table setting, instead of being allowed to just set it on a TableCol alone\n function truncateCss(col) {\n // the checks are a little weird here, to allow for a better consumer experience,\n // e.g. can override Table level setting at TableCol level, without a binding for false\n const isTruncate = col.props.truncate === undefined\n ? props.truncate\n : col.props.truncate === '' || col.props.truncate\n\n return col.props.truncate !== 'false' && isTruncate && 'bs-table-truncate'\n }\n\n function frozenCells(side, cellFn, slotProps) {\n if (!cols.value[side].length) return\n const theCells = cols.value[side].map(col => cellFn(col, slotProps))\n return h('div', { class: `bs-table-cols-frozen-${side}`}, theCells)\n }\n\n function cells(cellFn, slotProps = {}) {\n return [\n frozenCells('left', cellFn, slotProps),\n cols.value.center.map(col => cellFn(col, slotProps)),\n frozenCells('right', cellFn, slotProps)\n ]\n }\n\n\n // ----- TABLE COL RESIZER -----\n\n function tableColResizer() {\n return h(TableColResizer, { onResize: onResizeCol })\n }\n\n // TODO: This is disgusting. Clean it up. See if can move into TableColResizer w/TableProvider.\n function onResizeCol({ el, id, width }) {\n const colsToUpdate = Object.values(cols.value).flat().reduce((acc, col) => {\n // TODO: Bullet-proof this id check, after getting resizing up and running in ORCA app\n const key = getResizeId(col) || col.props.id\n if (key === id || resizedColWidthsById.value[key] || getInitialColWidth(col).endsWith('px')) return acc\n acc.push({ id: key, width: null })\n return acc\n }, [])\n\n if (colsToUpdate.length) {\n const row = el.closest('.bs-table-row')\n colsToUpdate.forEach(col => {\n const headCell = row.querySelector(`:where([data-bs-table-col-resize-id=\"${col.id}\"], [data-bs-table-col-id=\"${col.id}\"])`)\n if (!headCell) return\n col.width = `${headCell.offsetWidth}px`\n })\n }\n\n const updates = [{ id, width: width ? `${width}px` : undefined }, ...colsToUpdate]\n updates.forEach(col => resizedColWidthsById.value[col.id] = col.width)\n emit('resize-col', { target: updates[0], updated: [...updates] })\n }\n\n\n // ----- HELPERS -----\n\n // In header/body/footer slots, an empty <TableRow /> should be used to represent where the consumer\n // wants the standard, default row content to appear, in relation to their other custom rows in the slot\n // E.g. a custom conditional group header row, then the default/real row appears below that\n function isDefaultRowPlaceholder(node) {\n return node.type === TableRow && !node.children\n }\n\n // allows for 'a.b.c' paths too, but for anything more complex, consumer should use a <Cell> in the TableCol slot instead\n function getRowKeyProp(row, col) {\n const key = col.props['row-key'] || col.props.rowKey || col.props.id\n const path = (key || '').split('.')\n return path.reduce((obj, key) => obj && obj[key], row)\n }\n\n // making this a bit harder on myself, but it's for DX reasons. Want to allow Boolean, String, Number to be used on some TableCol props\n function isColPropTruthy(col, prop) {\n const val = col.props[prop]\n return val === '' || (val && val !== 'false')\n }\n\n function getInitialColWidth(col) {\n return col.props?.width ?? props.colWidth\n }\n\n\n // ----- VNODE PROCESSING -----\n\n function findNodesByType(nodes, types = []) {\n return nodes.reduce((acc, node) => {\n if (types.includes(node.type)) return [ ...acc, node ]\n if (Array.isArray(node.children)) return [ ...acc, ...findNodesByType(node.children, types) ]\n return acc\n }, [])\n }\n\n function processFrozenTableCols(node) {\n const place = node.props?.place || node.type.props.place.default\n if (!node.type.props.place.validator(place)) {\n warn(`[BsTable warn] Invalid prop: BsFrozenCols prop \"place\" must be set to \"left\" or \"right\". Yours: \"${place}\".`)\n }\n return {\n place,\n frozenCols: findNodesByType(node.children.default(), [TableCol])\n }\n }\n\n function processTableCols(nodes = []) {\n const format = col => ({\n props: col.props || { name: '' },\n slots: col.children\n })\n return nodes.reduce((acc, node) => {\n if (node.type === FrozenCols) {\n const { place, frozenCols } = processFrozenTableCols(node)\n acc[place] = acc[place].concat(frozenCols.map(format))\n return acc\n }\n acc.center.push(format(node))\n return acc\n }, { left: [], center: [], right: [] })\n }\n\n function processDefaultSlot(nodes) {\n return nodes.reduce((acc, node) => {\n\n if (node.type === TableHeader) {\n acc.header = node\n return acc\n }\n\n if (node.type === TableFooter) {\n acc.footer = node\n return acc\n }\n\n if ([FrozenCols, TableCol].includes(node.type)) {\n acc.columns.push(node)\n return acc\n }\n\n // covers v-for usage case\n const nested = findNodesByType([node], [FrozenCols, TableCol])\n\n nested?.length\n ? acc.columns = [...acc.columns, ...nested]\n : acc.other.push(node)\n\n return acc\n\n }, { columns: [], header: null, footer: null, other: [] })\n }\n\n\n // ----- RENDER FUNCTION -----\n // Did not use a provide/inject approach to register TableCols on mount/unmount,\n // because we want to render columns in the order TableCols are placed in the DOM (which\n // would fail in a v-if'd TableCol scenario...registered order wouldn't be reliable)\n\n return () => {\n const { columns, header, footer, other } = processDefaultSlot(tableSlots.default())\n\n cols.value = processTableCols(columns)\n\n return wrapper([\n header,\n tableScrollWrapper([\n table([\n tableSlots.header ? headerRowgroupSlot() : headerRowgroupDefault(),\n tableSlots.body ? bodyRowgroupSlot() : bodyRowgroupDefault(),\n tableSlots.footer && footerRowgroupSlot()\n ]),\n other, // non-Table related slot content, e.g. consumers could add a loading spinner or empty state message\n canResizeCols.value && tableColResizer()\n ]),\n footer\n ])\n }\n }\n}\n</script>\n","<script setup>\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport BsDropdownOptionDeprecated from '../_deprecated/dropdown-option/BsDropdownOptionDeprecated.vue'\nimport BsDropdownWithOptionsDeprecated from '../_deprecated/dropdown-with-options/BsDropdownWithOptionsDeprecated.vue'\nimport { BsIconActionEllipsis } from '@wwtdev/bsds-icons-vue3'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport debounce from 'debounce'\n\nconst props = defineProps({\n activeTabId: { type: String, required: true },\n helperText: {type: String, default: 'Select a tab'},\n helperDescription: { type: String },\n modelValue: { type: String },\n withBsTabs: { type: Boolean, default: true },\n})\nconst emit = defineEmits(['tabChange','update:modelValue'])\n\nconst DEFAULT_TOGGLE_WIDTH = 73\nconst ELLIPSIS_WIDTH = 20\nconst TAB_GAP = 16\n\n// state\nconst adaptedToWidth = ref(false)\nconst dropdownMounted = ref(false)\nconst hiddenTabs = ref([])\nconst showDropdown = ref(false)\nconst showDropdownToggle = ref(false)\nconst hostEl = ref()\nconst tablistEl = ref()\n\nconst accumulatedWidths = ref([]) //number[] = []\nconst activeLineInitialized = ref(false)\nconst allTabs = ref([]) //HTMLElement[]\n\nconst dropdownToggle = ref() // HTMLButtonElement\nconst navigableTabs = ref([])\nconst resizeObserver = ref() // ResizeObserver\nconst totalWidth = ref() // number\nconst [ tabListAutoId, dropdownId ] = useGenIdAttrs(2)\nlet adaptToWidthTimeoutId\n\n// computed\nconst activeTabIdx = computed(() => {\n if (props.activeTabId) return allTabs.value.findIndex(t => t.id === props.activeTabId)\n return 0\n})\n\nconst activeTabIsHidden = computed(() => {\n return hiddenTabs.value.some(t => t.id === props.activeTabId)\n})\n\nconst dropdownOptionsId = computed(() => {\n return `${dropdownId.value}-options`\n})\nconst dropdownToggleId = computed(() => {\n return `${dropdownId.value}-toggle`\n})\n\nconst dropdownToggleText = computed(() => {\n return activeTabIsHidden.value ? allTabs.value[activeTabIdx.value]?.textContent : 'More'\n})\n\nconst dropdownToggleWidth = computed(() => {\n if (activeTabIsHidden.value) return (\n accumulatedWidths.value[activeTabIdx.value] -\n accumulatedWidths.value[activeTabIdx.value - 1] +\n ELLIPSIS_WIDTH +\n TAB_GAP\n )\n return DEFAULT_TOGGLE_WIDTH + TAB_GAP\n})\n\nfunction adaptToWidth() {\n let showToggle = false\n let tab // HTMLElement\n let thresholdWidth = 0\n let thresholdReached = false\n let tabsToHide = []\n if (!allTabs.value?.length) return\n\n for (let i = 0; i < allTabs.value.length; i++) {\n tab = allTabs.value[i]\n tab.setAttribute('tabindex', '-1')\n if (thresholdReached && i !== activeTabIdx.value) {\n tab.dataset.hidden = 'true'\n tabsToHide.push(tab)\n continue\n }\n thresholdWidth = i < allTabs.value.length - 1 ? totalWidth.value - dropdownToggleWidth.value : totalWidth.value\n\n if (accumulatedWidths.value[i] > thresholdWidth) {\n tab.dataset.hidden = 'true'\n tabsToHide.push(tab)\n showToggle = true\n thresholdReached = true\n continue\n }\n tab.dataset.hidden = 'false'\n tab.setAttribute('tabindex', '0')\n }\n\n showDropdownToggle.value = showToggle\n hiddenTabs.value = tabsToHide\n if (!adaptedToWidth.value) nextTick(() => adaptedToWidth.value = true)\n adaptToWidthTimeoutId = setTimeout(() => {\n if (!hostEl.value) return\n setNavigableTabs()\n moveActiveLine()\n activeLineInitialized.value = true\n }, activeLineInitialized.value ? 25 : 1000)\n}\n\nfunction adaptToWidthCleanup() {\n clearTimeout(adaptToWidthTimeoutId)\n}\n\nfunction cleanup() {\n adaptToWidthCleanup()\n observerCleanup()\n}\n\nfunction fireTabChange(tabId) {\n emit('tabChange', tabId)\n emit('update:modelValue', tabId)\n}\n\nfunction getTabWidth(tabIdx) {\n const actualWidth = allTabs.value[tabIdx]?.getBoundingClientRect?.()?.width\n if (actualWidth) return actualWidth\n const approxWidth = (tabIdx === 0) ? accumulatedWidths.value[0] : accumulatedWidths.value[tabIdx] - accumulatedWidths.value[tabIdx - 1]\n return approxWidth || 0\n}\n\nfunction handleActiveTabIdChange() {\n allTabs.value[activeTabIdx.value]?.setAttribute('aria-selected', 'true')\n adaptToWidth()\n}\n\nfunction handleDropdownClose() {\n dropdownToggle.value?.focus()\n showDropdown.value = false\n}\n\nfunction handleDropdownToggleClick() {\n showDropdown.value = !showDropdown.value\n if (!dropdownMounted.value) dropdownMounted.value = true\n}\n\nfunction handleDropdownOptionSelect(tabId) {\n showDropdown.value = false\n dropdownToggle.value?.focus()\n fireTabChange(tabId)\n}\n\nfunction handleTabClick(event) {\n if (props.withBsTabs) return\n\n const tab = event.target.closest('[role=\"tab\"]')\n if (!tab || tab.getAttribute('aria-selected') === 'true') return\n const tabId = tab.getAttribute('id')\n fireTabChange(tabId)\n}\n\nfunction handleTabNav(e) {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n const tabIdx = navigableTabs.value.findIndex(t => t.id === e.target.id)\n if (tabIdx === -1) return\n e.preventDefault()\n e.stopPropagation()\n e.key === 'ArrowLeft' ? handleTabPrevious(tabIdx) : handleTabNext(tabIdx)\n }\n}\n\nfunction handleTabNext(tabIdx) {\n const nextIdx = (tabIdx + 1) % navigableTabs.value.length\n navigableTabs.value[nextIdx]?.focus()\n}\n\nfunction handleTabPrevious(tabIdx) {\n const prevIdx = tabIdx === 0 ? navigableTabs.value.length - 1 : tabIdx - 1\n navigableTabs.value[prevIdx]?.focus()\n}\n\n/** This controls the underline (active tab indicator) */\nfunction moveActiveLine() {\n const prevOffset = parseInt(hostEl.value.style.getPropertyValue('--active-line-offset')) || 0\n const max = totalWidth.value\n let duration = 300\n let offsetPx = navigableTabs.value?.[activeTabIdx.value]?.offsetLeft || 0\n let scaleNum = getTabWidth(activeTabIdx.value)\n if (showDropdownToggle.value && activeTabIsHidden.value) {\n offsetPx = dropdownToggle.value?.offsetLeft\n scaleNum = dropdownToggle.value?.offsetWidth\n }\n duration = Math.max(Math.abs((offsetPx - prevOffset) / max * 300), 100)\n hostEl.value.style.setProperty('--active-line-max-width', `${max}px`)\n hostEl.value.style.setProperty('--active-line-scale', `${scaleNum / max}`)\n hostEl.value.style.setProperty('--active-line-offset', `${offsetPx}px`)\n hostEl.value.style.setProperty('--active-line-transition-duration', `${duration}ms`)\n}\n\nfunction observerCleanup() {\n resizeObserver.value?.disconnect?.()\n resizeObserver.value = null\n}\n\nfunction resizeObserverSetup() {\n const cb = debounce(() => {\n totalWidth.value = hostEl?.value?.clientWidth\n adaptToWidth()\n }, 25)\n resizeObserver.value = new ResizeObserver(cb)\n resizeObserver.value.observe(document.body)\n if (hostEl.value) {\n resizeObserver.value.observe(hostEl.value)\n }\n}\n\nfunction setAllTabs() {\n allTabs.value = Array.from(tablistEl.value.children).filter(c => c.role === 'tab')\n}\n\nfunction setAccumlulatedWidths() {\n let tabWidth\n let maxTabWidth = 0\n allTabs.value.forEach((t, i) => {\n tabWidth = t.getBoundingClientRect().width + TAB_GAP\n maxTabWidth = Math.max(maxTabWidth, tabWidth)\n accumulatedWidths.value.push(i ? tabWidth + accumulatedWidths.value[i - 1] : tabWidth)\n })\n}\n\nfunction setNavigableTabs() {\n let tabs = []\n if (typeof window === 'undefined') return tabs\n for (let tab of allTabs.value) {\n if (tab.dataset?.hidden === 'true' || tab.dataset?.hidden === '' || tab.getAttribute('tabindex') === '-1') break\n tabs.push(tab)\n }\n if (showDropdownToggle.value) tabs.push(hostEl.value.querySelector('.bs-tab-list-toggle'))\n navigableTabs.value = tabs\n}\n\nwatch(() => props.activeTabId, handleActiveTabIdChange)\n\nonMounted(() => {\n try {\n setAllTabs()\n setAccumlulatedWidths()\n resizeObserverSetup()\n totalWidth.value = hostEl.value.getBoundingClientRect().width\n adaptToWidth()\n if (!props.withBsTabs) {\n allTabs.value[activeTabIdx.value]?.setAttribute('aria-selected', 'true')\n }\n } catch(err) {\n console.log('tab error', err)\n }\n})\n\nonUnmounted(cleanup)\n</script>\n\n<template>\n<div\n class=\"bs-tab-list\"\n ref=\"hostEl\"\n :id=\"$attrs.id || tabListAutoId\"\n data-component=\"bs-tab-list\"\n :data-resizing=\"!adaptedToWidth || undefined\"\n>\n <div\n class=\"bs-tab-list-tabs\"\n ref=\"tablistEl\"\n role=\"tablist\"\n @click=\"handleTabClick\"\n @tabClick=\"e => fireTabChange(e.detail)\"\n @keydown=\"handleTabNav\"\n >\n <slot />\n </div>\n\n <!-- \"More...\" button -->\n <button\n :aria-controls=\"dropdownId\"\n :aria-expanded=\"showDropdown\"\n class=\"bs-tab-list-toggle\"\n :data-active=\"activeTabIsHidden || undefined\"\n :data-hidden=\"!showDropdownToggle\"\n :id=\"dropdownToggleId\"\n ref=\"dropdownToggle\"\n @click=\"handleDropdownToggleClick\"\n >\n <BsIconActionEllipsis size=\"sm\" />\n {{ dropdownToggleText }}\n </button>\n\n <!-- Hidden tabs dropdown -->\n <BsDropdownWithOptionsDeprecated\n :anchor-id=\"dropdownToggleId\"\n :container-id=\"$attrs.id || tabListAutoId\"\n :helper-description=\"helperDescription || undefined\"\n :helper-text=\"helperText\"\n :id=\"dropdownId\"\n :options-id=\"dropdownOptionsId\"\n position=\"right\"\n preloaded\n :shown=\"showDropdown\"\n width=\"content\"\n @close=\"handleDropdownClose\"\n @update:model-value=\"handleDropdownOptionSelect\"\n >\n <BsDropdownOptionDeprecated v-for=\"t of hiddenTabs\" :key=\"t.id\"\n :value=\"t.id\"\n :options-id=\"dropdownOptionsId\"\n >\n {{ t.textContent }}\n </BsDropdownOptionDeprecated>\n </BsDropdownWithOptionsDeprecated>\n</div>\n</template>\n","<script setup>\nimport { computed, useAttrs } from 'vue'\n\n// Props\nconst props = defineProps({\n activeTabId: {\n type: String,\n required: true\n },\n tabId: {\n type: String,\n required: true\n },\n})\n\nconst $attrs = useAttrs()\n\n// Computed Properties\nconst isActive = computed(() => props.activeTabId && props.activeTabId === props.tabId)\nconst panelId = computed(() => $attrs.id || `${props.tabId}-panel`)\n</script>\n\n<template>\n <section\n :aria-labelledby=\"tabId\"\n :data-active=\"isActive\"\n data-component=\"bs-tab-panel\"\n :id=\"panelId\"\n role=\"tabpanel\"\n >\n <slot />\n </section>\n</template>\n","<script setup>\nimport { computed } from 'vue'\n\nconst props = defineProps({\n error: {\n type: Boolean,\n default: false\n },\n hintId: String,\n value: String,\n modelValue: String,\n})\nconst emit = defineEmits(['update:modelValue'])\n\nconst aria = computed(() => (\n { [props.error ? \"aria-errormessage\" : \"aria-describedby\"]: props.hintId }\n))\n\n</script>\n\n<template>\n<textarea\n class=\"bs-textarea\"\n data-component=\"bs-textarea\"\n :data-error=\"error\"\n :rows=\"$attrs.rows || 6\"\n :value=\"value || modelValue\"\n @input=\"e => $emit('update:modelValue', e.target.value)\"\n v-bind=\"aria\"\n/>\n</template>\n","<script setup>\nimport { computed } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js' \nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsLabel from '../label/BsLabel.vue'\nimport BsTextarea from '../textarea/BsTextarea.vue'\n\nconst props = defineProps({\n /** Sets the maximum value this textarea will allow. Will also display character count if present. This does not set maxlength, so users are able to enter text that is longer and edit it down. Enforcement of length must be by the developer. */\n charMax: Number,\n /** Sets the disabled state on input, disabled styles on label. */\n disabled: {\n type: Boolean,\n default: false,\n },\n /** Applies error styles to the input. */\n error: {\n type: Boolean,\n default: false,\n },\n /** Pass error text. */\n errorMsg: String,\n /** Pass helper text. */\n hint: String,\n /** @Deprecated Use `hint` and/or `errorMsg`. */\n hints: [ String, Array ],\n /** Pass label text. */\n label: { type: String },\n /** Placeholder attribute for `<textarea>`. */\n placeholder: String,\n /** Sets the required state on the textarea, append required* indicator to label. */\n required: {\n type: Boolean,\n default: false,\n },\n /** Sets the number of rows for the textarea. Defaults to `6`. */\n rows: {\n type: [Number, String],\n default: 6\n },\n /** Sets the textarea value - do not use if using `v-model`. */\n value: String,\n /** Sets the textarea value - `v-model` directive will use this; do not set explicitly. */\n modelValue: String,\n// DEPRECATED\n inputId: { default: undefined }\n})\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\n\nconst emit = defineEmits(['update:modelValue'])\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\n// Computed Properties\nconst charCount = computed(() => (props.value || props.modelValue)?.length || 0)\nconst hintDeprecated = computed(() => props.hints?.join?.(\"\\n\") || props.hints)\nconst hintMsg = computed(() => (\n (props.error && props.errorMsg) || props.hint || hintDeprecated.value || undefined\n))\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\n\n</script>\n\n<template>\n<div data-component=\"bs-textarea-field\" v-bind=\"filtered\">\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <BsTextarea\n :disabled=\"disabled\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :id=\"$attrs.id || inputIdAttr\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :rows=\"rows\"\n :value=\"value || modelValue\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n />\n <BsFieldDetails v-if=\"hintMsg || charMax\"\n :char-count=\"charCount\"\n :char-max=\"charMax\"\n :data-disabled=\"disabled\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint || hintDeprecated\"\n :hint-id=\"hintId\"\n />\n</div>\n</template>\n<style>\n:where([data-component=\"bs-textarea-field\"]) {\n display: block;\n width: 100%;\n}\n</style>\n","<script setup>\nimport {\n BsIconCircleCheck,\n BsIconCircleEllipsis,\n BsIconCircleExclamation,\n BsIconCirclePause,\n BsIconCirclePlay,\n BsIconCircleStop,\n BsIconCircleX,\n BsIconGraphPieEmpty,\n} from '@wwtdev/bsds-icons-vue3'\nimport { useSteps } from '@composables/steps'\n\n/**\n * @typedef {import('../Types.vue').Progress.Status} Status\n * @typedef {import('../Types.vue').Progress.Step} Step\n */\n\nconst props = defineProps({\n /** @type {Status} */\n currentStatus: {\n type: String,\n validator: (value) => {\n return [\n 'cancelled',\n 'complete',\n 'error',\n 'in-progress',\n 'not-started',\n 'ongoing',\n 'paused',\n 'warning'\n ].includes(value)\n }\n },\n currentStep: {\n type: Number,\n default: 0\n },\n /** @type {Array<Step|string>} */\n steps: {\n type: Array,\n required: true\n },\n})\n\nconst STATUSES_ICONS = {\n cancelled: BsIconCircleStop,\n complete: BsIconCircleCheck,\n error: BsIconCircleX,\n \"in-progress\": BsIconCircleEllipsis,\n \"not-started\": BsIconGraphPieEmpty,\n ongoing: BsIconCirclePlay,\n paused: BsIconCirclePause,\n warning: BsIconCircleExclamation,\n}\n\nconst { progressStep, progressText, getStatus } = useSteps(props)\n\nfunction getIcon(status, idx) {\n status = getStatus(status, idx)\n return STATUSES_ICONS[status] || BsIconGraphPieEmpty\n}\n\n</script>\n<template>\n<div\n :aria-valuemax=\"steps.length\"\n :aria-valuenow=\"progressStep\"\n :aria-valuetext=\"progressText\"\n class=\"bs-timeline\"\n data-component=\"bs-timeline\"\n role=\"progressbar\"\n>\n <div v-for=\"(step, idx) in steps\"\n class=\"bs-step-item\"\n :data-status=\"getStatus(step.status, idx)\"\n :key=\"step.id || step.label\"\n role=\"status\"\n >\n <Component :is=\"getIcon(step.status, idx)\"\n class=\"bs-step-icon\"\n role=\"presentation\"\n />\n <p>\n {{ step.label || step }}\n <span class=\"bs-visually-hidden\">\n : {{ getStatus(step.status, idx) || 'not started' }}\n </span>\n </p>\n </div>\n</div>\n</template>\n\n","/**\n * @typedef {Object} TimeObj\n * @property {number} hours - number of hours\n * @property {number} minutes - number of minutes\n */\n\n/**\n * @param {string} val - potential time string\n * @returns {\"\"|\"uFmt\"|\"uFmtNoColon\"|\"amPm\"|\"amPmNoColon\"} matched pattern or empty string\n * @description Takes a potential time string, `val`, and returns a matched pattern. If the input string does not match any known time patterns, an empty string is returned.\n * @example\n * checkTimePattern('1234') // 'uFmtNoColon'\n * checkTimePattern('12:34') // 'uFmt'\n * checkTimePattern('12:34pm') // 'amPm'\n * checkTimePattern('12:34 pm') // 'amPm'\n * checkTimePattern('12:34 am') // 'amPm'\n * checkTimePattern('12:34am') // 'amPm'\n * checkTimePattern('5') // '' (invalid)\n * checkTimePattern('5 pm') // '' (invalid)\n */\nfunction checkTimePattern(val) {\n const uFmt = /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/.test(val) // 24h fmt\n const uFmtNoColon = /^([01]?[0-9]|2[0-3])[0-5][0-9]$/.test(val) // 24h fmt without colon\n const amPm = /^([0]?[0-9]|1[0-2]):[0-5][0-9] ?(a|p|am|pm)$/i.test(val) // am pm fmt\n const amPmNoColon = /^([0]?[0-9]|1[0-2])[0-5][0-9] ?(a|p|am|pm)$/i.test(val) // am pm fmt without colon\n\n if (uFmt) return 'uFmt'\n if (uFmtNoColon) return 'uFmtNoColon'\n if (amPm) return 'amPm'\n if (amPmNoColon) return 'amPmNoColon'\n return ''\n}\n\nconst parseIntTen = (val) => parseInt(val, 10)\n\n/**\n * @param {string} val - raw string to attempt to parse into hours and minutes\n * @returns {TimeObj} object with `hours` and `minutes` fields\n * @description Takes a raw string, `val`, and attempts to parse it into hours and minutes. If the input string is not a valid time or parsing otherwise fails, the `hours` and `minutes` fields are undefined.\n * @example\n * parseRaw('1234') // { hours: 12, minutes: 34 }\n * parseRaw('12:34') // { hours: 12, minutes: 34 }\n * parseRaw('12:34pm') // { hours: 12, minutes: 34 }\n * parseRaw('12:34 pm') // { hours: 12, minutes: 34 }\n * parseRaw('00:34') // { hours: 0, minutes: 34 }\n * parseRaw('12:34am') // { hours: 0, minutes: 34 }\n * // invalid\n * parseRaw('5pm') // { hours: undefined, minutes: undefined }\n */\nfunction parseRaw(val = '') {\n const STRIP_PATTERN = /[^0-9:apmAPM]/g\n let hours\n let minutes\n val = val.replaceAll(STRIP_PATTERN, '').toLowerCase()\n\n const matchedPattern = checkTimePattern(val)\n switch (matchedPattern) {\n case 'uFmt':\n case 'uFmtNoColon':\n minutes = parseIntTen(val.slice(-2))\n hours = parseIntTen(val.slice(0, -2))\n break\n case 'amPm':\n case 'amPmNoColon':\n const parts = val.split(/(a|p|am|pm)/)\n const pm = val.includes('p')\n minutes = parseIntTen(parts[0].slice(-2))\n hours = parseIntTen(parts[0].slice(0, -2))\n if (hours < 12 && pm) hours += 12\n if (hours === 12 && !pm) hours = 0\n if (hours === 24) hours = 0\n break\n }\n\n return {\n hours,\n minutes,\n }\n}\n\n/**\n *\n * @param {string} val - time string in the format `HH:mm`\n * @returns {string} am/pm formatted time string\n *\n * @description Takes a time string, `val`, in the format `HH:mm` and returns a formatted time string in the format `H:mm AM/PM. This will strip out all characters except for numeric characters and colon.`\n */\nexport function fmtTimeValToDisplay(val = '') {\n const STRIP_PATTERN = /[^0-9:]/g\n val = val.replaceAll(STRIP_PATTERN, '')\n if (!val) return ''\n\n const [ hours, minutes ] = val.split(':')\n const hoursInt = parseIntTen(hours)\n const minutesInt = parseIntTen(minutes)\n const ampm = hoursInt < 12 ? 'AM' : 'PM'\n if (isNaN(hoursInt) || isNaN(minutesInt) || hoursInt > 23 || minutesInt > 59) return ''\n return `${hoursInt % 12 || 12}:${minutes} ${ampm}`\n}\n\n/**\n * @param {string} val - time string with or without colon, am/pm, or spaces\n * @returns {string} formatted time string in the format `HH:mm`\n * @description Takes an unformatted time string, `val`, and returns a formatted time string in the format `HH:mm`. If the input string is not a valid time or parsing otherwise fails, an empty string is returned.\n * @example\n * fmtInputToTimeVal('1234') // '12:34'\n * fmtInputToTimeVal('12:34') // '12:34'\n * fmtInputToTimeVal('12:34pm') // '12:34'\n * fmtInputToTimeVal('12:34 pm') // '12:34'\n * fmtInputToTimeVal('12:34am') // '00:34'\n * fmtInputToTimeVal('12:34 am') // '00:34'\n * fmtInputToTimeVal('500') // '05:00'\n * fmtInputToTimeVal('5:00') // '05:00'\n * fmtInputToTimeVal('500p') // '17:00'\n * fmtInputToTimeVal('5:00pm') // '17:00'\n * fmtInputToTimeVal('5:00 pm') // '17:00'\n * fmtInputToTimeVal('5pm') // '' (invalid)\n */\nexport function fmtInputToTimeVal(val = '') {\n const { hours, minutes } = parseRaw(val)\n if (isNaN(hours) || isNaN(minutes)) return ''\n\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`\n}\n\n\n","<script setup>\nimport { onMounted, ref, watch } from 'vue'\nimport BsDropdownComboboxDeprecated from '@components/_deprecated/dropdown-combobox/BsDropdownComboboxDeprecated.vue'\nimport { fmtTimeValToDisplay, fmtInputToTimeVal } from '@utils/fmtTime.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js' \n\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false\n },\n disabledTimes: {\n type: Array,\n default: () => []\n },\n dropdownPosition: {\n type: String,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n dropdownWidth: {\n type: String,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n error: {\n type: Boolean,\n default: false\n },\n helperText: {\n type: String,\n default: ''\n },\n helperDescription: {\n type: String,\n default: ''\n },\n hintId: {\n type: String,\n },\n maxTime: {\n type: String,\n default: '23:59'\n },\n minTime: {\n type: String,\n default: '00:00'\n },\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: 'hh:mm am'\n },\n required: {\n type: Boolean,\n default: false\n },\n step: {\n type: Number,\n default: 30,\n validator: (value) => {\n return [5, 10, 15, 30, 60].includes(value)\n },\n },\n // DEPRECATED\n inputId: { default: undefined }\n})\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst EXCLUDED = 'excluded'\nconst OVER = 'over'\nconst SKIP = 'skip'\nconst STOP = 'stop'\nconst UNDER = 'under'\n\nconst displayValue = ref(fmtTimeValToDisplay(props.modelValue))\nconst options = ref([])\nconst timeError = ref('')\nconst timeHasError = ref(false)\n\nfunction createOptions() {\n const options = []\n let stopAll = false\n for (let i = 0; i < 24; i++) {\n if (stopAll) break\n for (let j = 0; j < 60; j += props.step) {\n const timeVal = getTimeString(i, j)\n const skipOrStop = getSkipOrStop(timeVal)\n if (skipOrStop === SKIP) continue\n if (skipOrStop === STOP) {\n stopAll = true\n break\n }\n options.push({\n label: fmtTimeValToDisplay(timeVal),\n value: timeVal,\n })\n }\n }\n return options\n}\n\nfunction checkConstraints(timeVal) {\n if (!timeVal) return ''\n if (props.minTime && timeVal < props.minTime) return UNDER\n if (props.maxTime && timeVal > props.maxTime) return OVER\n if (props.disabledTimes.includes(timeVal)) return EXCLUDED\n return ''\n}\n\nfunction getSkipOrStop(timeVal) {\n switch (checkConstraints(timeVal)) {\n case OVER:\n return STOP\n case UNDER:\n case EXCLUDED:\n return SKIP\n default:\n return ''\n }\n}\n\nfunction getTimeString(hour, minute) {\n hour = hour.toString().padStart(2, '0')\n minute = minute.toString().padStart(2, '0')\n return `${hour}:${minute}`\n}\n\nfunction handleComboboxChange(val) {\n const formattedValue = fmtInputToTimeVal(val)\n if (formattedValue === props.modelValue) {\n displayValue.value = fmtTimeValToDisplay(props.modelValue)\n }\n updateWithValidation(formattedValue)\n}\n\nfunction setOptions() {\n options.value = createOptions()\n}\n\nfunction updateWithValidation(value) {\n validate(value)\n emit('update:modelValue', value)\n}\n\nfunction validate(value) {\n const check = checkConstraints(value)\n switch(check) {\n case OVER:\n timeError.value = `Time must be before ${fmtTimeValToDisplay(props.maxTime)}`\n timeHasError.value = true\n break\n case UNDER:\n timeError.value = `Time must be after ${fmtTimeValToDisplay(props.minTime)}`\n timeHasError.value = true\n break\n case EXCLUDED:\n timeError.value = `The following times are disabled: ${props.disabledTimes.map(t => fmtTimeValToDisplay(t)).join(', ')}`\n timeHasError.value = true\n break\n default:\n timeError.value = ''\n timeHasError.value = false\n }\n}\n\nonMounted(setOptions)\n\nwatch([\n () => props.disabledTimes,\n () => props.maxTime,\n () => props.minTime,\n () => props.step,\n], setOptions)\n\nwatch([\n () => props.disabledTimes,\n () => props.maxTime,\n () => props.minTime,\n () => props.modelValue,\n], () => validate(props.modelValue))\n\nwatch(() => props.modelValue, (val) => {\n displayValue.value = props.modelValue ? fmtTimeValToDisplay(val) : ''\n})\n\ndefineExpose({\n validationErr: timeHasError,\n validationErrMsg: timeError,\n})\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n <BsDropdownComboboxDeprecated\n :disabled=\"disabled\"\n :display-value=\"displayValue\"\n :dropdown-position=\"dropdownPosition\"\n :dropdown-width=\"dropdownWidth\"\n :error=\"error || timeHasError\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :hint-id=\"hintId\"\n :input-id=\"inputId\"\n :model-value=\"modelValue\"\n :options=\"options\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :update-on-input=\"false\"\n @update:modelValue=\"handleComboboxChange\"\n />\n</template>\n","<script setup>\nimport { computed, ref, watch } from 'vue'\nimport { useGenIdAttrs } from '@composables/genId.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\nimport { useDeprecatedProp } from '@composables/deprecated.js'\nimport BsFieldDetails from '../field-details/BsFieldDetails.vue'\nimport BsTimePicker from '../time-picker/BsTimePicker.vue'\nimport BsLabel from '../label/BsLabel.vue'\n\nconst props = defineProps({\n disabled: {\n type: Boolean,\n default: false\n },\n disabledTimes: {\n type: Array,\n default: () => []\n },\n dropdownPosition: {\n type: String,\n validator: (value) => {\n return ['', 'top', 'center', 'right'].includes(value)\n },\n },\n dropdownWidth: {\n type: String,\n validator: (value) => {\n return ['', 'sm', 'md', 'lg', 'content', 'anchor'].includes(value)\n },\n },\n error: {\n type: Boolean,\n default: false\n },\n errorMsg: {\n type: String,\n },\n helperText: {\n type: String,\n default: ''\n },\n helperDescription: {\n type: String,\n default: ''\n },\n hint: {\n type: String,\n },\n label: {\n type: String,\n },\n maxTime: {\n type: String,\n },\n minTime: {\n type: String,\n },\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: 'hh:mm am'\n },\n required: {\n type: Boolean,\n default: false\n },\n step: {\n type: Number,\n default: 30,\n validator: (value) => {\n return [5, 10, 15, 30, 60].includes(value)\n },\n },\n // DEPRECATED\n inputId: { default: undefined }\n})\nuseDeprecatedProp(props, 'inputId', undefined, 'Set \\'id\\' directly on the component instead.')\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst [ inputIdGen, hintId ] = useGenIdAttrs(2)\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\nconst timePicker = ref(null)\n\nconst errorMsgComputed = computed(() => props.errorMsg || timeError.value)\nconst hasError = computed(() => props.error || timeHasError.value)\nconst inputIdAttr = computed(() => props.inputId || inputIdGen.value)\nconst showDetails = computed(() => props.hint || (hasError.value && errorMsgComputed.value))\nconst timeError = computed(() => timePicker.value?.validationErrMsg)\nconst timeHasError = computed(() => timePicker.value?.validationErr)\n\ndefineExpose({\n validationErr: timeHasError,\n validationErrMsg: timeError,\n})\ndefineOptions({ inheritAttrs: false })\n</script>\n\n<template>\n<div\n aria-live=\"polite\"\n data-component=\"bs-time-picker-field\"\n v-bind=\"filtered\"\n>\n <BsLabel v-if=\"label || $slots.label\"\n :for=\"$attrs.id || inputIdAttr\"\n :disabled=\"disabled\"\n :required=\"required\"\n >\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n <BsTimePicker\n ref=\"timePicker\"\n :disabled-times=\"disabledTimes\"\n :disabled=\"disabled\"\n :dropdown-position=\"dropdownPosition\"\n :dropdown-width=\"dropdownWidth\"\n :error=\"hasError\"\n :helper-description=\"helperDescription\"\n :helper-text=\"helperText\"\n :hint-id=\"hintId\"\n :id=\"$attrs.id || inputIdAttr\"\n :max-time=\"maxTime\"\n :min-time=\"minTime\"\n :model-value=\"modelValue\"\n :placeholder=\"placeholder\"\n :required=\"required\"\n :step=\"step\"\n @update:modelValue=\"$event => $emit('update:modelValue', $event)\"\n v-bind=\"remaining\"\n />\n <BsFieldDetails v-show=\"showDetails\"\n :error=\"hasError\"\n :error-msg=\"errorMsgComputed\"\n :hint=\"hint\"\n :hint-id=\"hintId\"\n />\n</div>\n</template>\n","import { ref } from 'vue'\n\n// GLOBAL STATE\n// Needed to maintain a couple of things:\n// 1. Order of toasts (newest at start of array) in comparison to how usePop\n// orders them (newest at end of array) so they are stacked/ordered properly.\n// 2. \"Active\" vs \"Open\" (active means it's open and/or going through\n// transitioning). This needs to be available across all toasts for controling\n// CSS \"order\" until it's off-screen.\nconst activeToastIds = ref([])\n\nexport function useToast() {\n return { activeToastIds }\n}\n","<script setup>\nimport { provide, computed } from 'vue'\nimport { propDefinitions, emitDefinitions } from './defs-toast-component'\nimport BsPopover from '@components/popover/BsPopover.vue'\nimport { usePop } from '@composables/pop'\nimport { useToast } from '@composables/toast'\nimport { BsToastProvider } from './provider-key-toast'\n\n// PROPS\nconst props = defineProps(propDefinitions)\n\n// EMITS\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\n// COMPOSABLES\nconst pop = usePop()\nconst { activeToastIds } = useToast()\n\n// PROVIDE\n// BsPopFooter uses this to detect if it's inside of a BsToast (to default the border)\nprovide(BsToastProvider, {})\n\n// VARS / REFS\nlet dismissTimer = null\n\n// COMPUTED\nconst orderStyle = computed(() => {\n const index = activeToastIds.value.indexOf(props.id)\n return index === -1 ? '' : `--toast-order: ${index}`\n})\n\n// METHODS\nfunction onOpen(payload) {\n // Add to start of array\n activeToastIds.value = [props.id, ...activeToastIds.value]\n if (props.duration > 0) {\n dismissTimer = setTimeout(() => pop.close(props.id), props.duration)\n }\n // Propagate open event which is from BsPopover\n emit('open', payload)\n}\n\nfunction onClose(payload) {\n if (dismissTimer) {\n clearTimeout(dismissTimer)\n dismissTimer = null\n }\n // Propagate close event which is from BsPopover\n emit('close', payload)\n}\n\nfunction onAfterClose() {\n activeToastIds.value = activeToastIds.value.filter((toastId) => toastId !== props.id)\n}\n</script>\n\n<template>\n<BsPopover\n :id=\"id\"\n v-slot=\"{ id, close, cancel, confirm }\"\n class=\"bs-toast\"\n :style=\"orderStyle\"\n anchor=\"viewport\"\n data-component=\"bs-toast\"\n :data-variant=\"variant\"\n prevent-auto-close\n prevent-close-x\n prevent-close-outside\n teleport-target-id=\"bs-toast-teleport-target\"\n transition-name=\"bs-toast\"\n type=\"toast\"\n @open=\"onOpen\"\n @close=\"onClose\"\n @after-close=\"onAfterClose\"\n>\n <slot v-bind=\"{ id, close, cancel, confirm }\" />\n</BsPopover>\n</template>\n","<script setup>\n import { useSlots, inject } from 'vue'\n import BsTextButton from '@components/text-button/BsTextButton.vue'\n\n // Provided from BsToast\n const handleDismiss = inject('handleDismiss', () => {})\n\n function isStacked() {\n return useSlots().default?.().length > 2 || undefined\n }\n</script>\n\n<template>\n <div\n class=\"bs-toast-actions-deprecated\"\n data-component=\"bs-toast-actions-deprecated\"\n :data-stacked=\"isStacked()\"\n >\n <slot>\n <BsTextButton\n size=\"sm\"\n text-btn\n @click=\"handleDismiss\"\n >\n Dismiss\n </BsTextButton>\n </slot>\n </div>\n</template>","<template>\n <div class=\"bs-toast-body-deprecated\" data-component=\"bs-toast-body-deprecated\">\n <slot></slot>\n </div>\n</template>","<script setup>\nimport { provide, inject } from 'vue'\nimport BsEnhancedTransition from '@components/transition/BsEnhancedTransition.vue'\nimport { useDeprecatedTransition, useDeprecatedProp } from '@composables/deprecated.js'\n\nconst props = defineProps({\n shown: {\n type: Boolean,\n default: true\n },\n preloaded: {\n type: Boolean,\n default: false\n },\n toastId: {\n type: String,\n required: true\n },\n variant: {\n type: String,\n default: undefined,\n validator: (value) => {\n return ['warning', 'positive', 'negative'].includes(value)\n }\n },\n stacked: {\n type: Boolean,\n default: false\n },\n duration: {\n type: Number,\n default: 10000\n },\n // DEPRECATED\n enterControlled: {\n default: undefined\n },\n enterTrigger: {\n default: undefined\n },\n leaveTrigger: {\n default: undefined\n }\n})\nuseDeprecatedProp(props, 'enterControlled', 'preloaded')\nuseDeprecatedProp(props, 'enterTrigger', 'shown')\nuseDeprecatedProp(props, 'leaveTrigger', 'shown')\n\nconst emit = defineEmits(['dismiss', 'after-enter', 'after-leave'])\n\ndefineOptions({ inheritAttrs: false })\n\nconst { transition } = useDeprecatedTransition(props)\n\nlet autoDismissTimer = null\n\n// Send down to slotted children\nprovide('variant', props.variant)\nprovide('handleDismiss', handleDismiss)\n\n// Sent down from BsToaster, or use props\nconst stacked = inject('stacked', props.stacked)\n\nfunction handleDismiss() {\n if (autoDismissTimer) {\n clearTimeout(autoDismissTimer)\n autoDismissTimer = null\n }\n emit('dismiss', props.toastId)\n}\n\nfunction handleEnterEnd() {\n if (props.duration > 0) {\n autoDismissTimer = setTimeout(() => {\n handleDismiss()\n }, props.duration)\n }\n\n emit('after-enter')\n}\n</script>\n\n<template>\n <BsEnhancedTransition\n name=\"bs-toast-deprecated\"\n :shown=\"transition\"\n :preloaded=\"preloaded\"\n @after-enter=\"handleEnterEnd\"\n @after-leave=\"emit('after-leave')\"\n >\n <div\n class=\"bs-toast-deprecated\"\n data-component=\"bs-toast-deprecated\"\n :data-variant=\"variant\"\n :data-shown=\"transition\"\n :data-stacked=\"stacked || undefined\"\n role=\"alert\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n </BsEnhancedTransition>\n</template>","<script setup>\n import { provide } from 'vue'\n\n // Send down to slotted BsToast components\n provide('stacked', true)\n</script>\n\n<template>\n <div class=\"bs-toaster-deprecated\" data-component=\"bs-toaster-deprecated\">\n <slot />\n </div>\n</template>\n","<script setup>\n import { inject, computed } from 'vue'\n import {\n BsIconWarning,\n BsIconThumbsUpStroke,\n BsIconCircleExclamation\n } from '@wwtdev/bsds-icons-vue3'\n\n // Provided from BsToast\n const variant = inject('variant', undefined)\n\n const icon = computed(() => {\n switch(variant) {\n case 'warning':\n return BsIconWarning\n case 'positive':\n return BsIconThumbsUpStroke\n case 'negative':\n return BsIconWarning\n default:\n return BsIconCircleExclamation\n }\n })\n</script>\n\n<template>\n <div class=\"bs-toast-header-deprecated\" data-component=\"bs-toast-header-deprecated\" :data-variant=\"variant\">\n <component :is=\"icon\" class=\"bs-toast-header-deprecated-icon\" />\n <div class=\"bs-toast-header-deprecated-text\"><slot/></div>\n </div>\n</template>","<template>\n\n <BsPopover\n :id=\"idOrAutoId\"\n v-bind=\"$attrs\"\n class=\"bs-tooltip\"\n data-component=\"bs-tooltip\"\n type=\"tooltip\"\n role=\"tooltip\"\n :anchor=\"anchorId\"\n :delay=\"delay\"\n :place=\"place\"\n prevent-close-x>\n <slot />\n </BsPopover>\n\n <!-- this element remains behind (not Teleported), so we can find the parent element -->\n <!-- not needed if BsTooltip is given an anchor prop, or is controlled by pop-hover -->\n <span\n v-if=\"isMounted && shouldUseParent\"\n ref=\"locator\"\n data-bs-tooltip-locator\n hidden />\n\n</template>\n\n<script setup>\nimport { useId, computed, watch, useTemplateRef, onMounted, onBeforeUnmount, ref, shallowRef, nextTick } from 'vue'\nimport { propDefinitions } from './defs-tooltip-component.js'\nimport BsPopover from '@components/popover/BsPopover.vue'\nimport { usePop } from '@composables/pop.js'\n\n// Note: Visibility state is handled by popHoverEvents.js\n\n// Emits: Will also emit what BsPopover emits (open, close, etc.)\n\n// Props: The BsPopover props fall-through...below are BsTooltip-specific overrides to BsPopover settings\nconst props = defineProps(propDefinitions)\n\ndefineOptions({ inheritAttrs: false })\n\nconst locatorElement = useTemplateRef('locator')\n\nconst pop = usePop()\nconst autoId = useId()\n\nconst isMounted = ref(false)\n\nconst idOrAutoId = computed(() => props.id || autoId)\n\nconst parentId = computed(() => `${idOrAutoId.value}-bs-tooltip-anchor`)\n\nconst isControlledByPopTrigger = computed(() => {\n // checking props.id instead of idOrAutoId, since id is required for popTrigger usage\n if (!props.id) return false\n const triggers = Object.keys(pop.popIdsByTrigger.value)\n return triggers.some(key => pop.popIdsByTrigger.value[key].includes(props.id))\n})\n\nconst shouldUseParent = computed(() => {\n return !isControlledByPopTrigger.value && !props.anchor\n})\n\nconst anchorId = computed(() => {\n if (props.anchor) return props.anchor\n if (shouldUseParent.value) return parentId.value\n})\n\nwatch(shouldUseParent, () => {\n shouldUseParent.value ? addParentId() : removeParentId()\n})\n\nonMounted(() => {\n // doing this stuff to avoid Nuxt hydration mismatch warning\n isMounted.value = true\n nextTick(() => shouldUseParent.value && addParentId())\n})\n\nonBeforeUnmount(removeParentId)\n\n\n// - - - - - - - - - - - - - - - - -\n\n\nfunction addParentId() {\n if (!locatorElement.value) return\n const parentEl = locatorElement.value.parentNode\n if (!parentEl.id) parentEl.id = parentId.value\n}\n\nfunction removeParentId() {\n if (!locatorElement.value) return\n const parentEl = locatorElement.value.parentNode\n const isOurId = parentEl.id === parentId.value\n if (isOurId) parentEl.removeAttribute('id')\n}\n</script>\n","<script setup>\nimport { computed, ref } from 'vue'\nimport useKeydown from '@composables/keydown'\n\n// PROPS\nconst props = defineProps({\n tooltipId: {\n type: String,\n required: true\n },\n content: {\n type: String,\n default: ''\n },\n position: {\n type: String,\n default: 'top',\n validator: (value) => {\n return [\n 'top',\n 'top-left',\n 'top-right',\n 'right',\n 'bottom',\n 'bottom-left',\n 'bottom-right',\n 'left'\n ].includes(value)\n }\n }\n})\n\n// STATE\nconst isHoverOrFocused = ref(false)\nconst isEscaped = ref(false)\n\nconst getTooltipTextClass = computed(() => {\n let cssClass = 'bs-tooltip-deprecated-text'\n if (isEscaped.value) {\n // Different positions have different translateX/Y style\n if (props.position === 'top' || props.position === 'bottom') {\n cssClass += ' escaped-x'\n } else if (props.position === 'left' || props.position === 'right') {\n cssClass += ' escaped-y'\n } else {\n cssClass += ' escaped'\n }\n }\n return cssClass;\n})\n\n// Handle escape key closing the tooltip\nuseKeydown(['Escape'], () => {\n if (isHoverOrFocused.value) {\n isHoverOrFocused.value = false\n isEscaped.value = true\n }\n})\n\nfunction handleEnterOrFocus() {\n isHoverOrFocused.value = true\n}\n\nfunction handleLeaveOrFocusOut() {\n isHoverOrFocused.value = false\n // Also reset escaped so it shows again on hover/focus\n isEscaped.value = false\n}\n</script>\n\n<template>\n<div\n class=\"bs-tooltip-deprecated\"\n :data-position=\"position\"\n data-component=\"bs-tooltip-deprecated\"\n @mouseenter=\"handleEnterOrFocus\"\n @focusin=\"handleEnterOrFocus\"\n @mouseleave=\"handleLeaveOrFocusOut\"\n @focusout=\"handleLeaveOrFocusOut\"\n>\n <slot />\n <div\n :class=\"getTooltipTextClass\"\n :id=\"tooltipId\"\n role=\"tooltip\"\n >\n <slot name=\"content\">\n {{ content }}\n </slot>\n </div>\n</div>\n</template>\n","<script setup>\nimport { computed, ref, useId, nextTick, mergeProps, useAttrs, useTemplateRef } from 'vue'\nimport BsDropdown from '@components/dropdown/BsDropdown.vue'\nimport BsInputSearch from '../input-search/BsInputSearch.vue'\nimport { usePop } from '@composables/pop.js'\nimport { propDefinitions, emitDefinitions } from './defs-typeahead-component.js'\n\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\nconst props = defineProps(propDefinitions)\n\n// allocate attributes to root and/or child elements\ndefineOptions({ inheritAttrs: false })\n\nconst model = defineModel({\n type: [String, Object, Number, Array],\n required: false,\n default: undefined\n})\n\nconst filterInput = defineModel('filterInput', {\n type: String,\n default: ''\n})\n\nconst inputEvents = {\n onInput: openDropdown\n}\n\nconst focusEvents = {\n onFocus: maybeOpenDropdown,\n onClick: openDropdown,\n}\n\nconst autoId = useId()\nconst attrs = useAttrs()\n\nconst inputSearchEl = useTemplateRef('inputSearch')\n\nconst pop = usePop()\n\nconst returnedFocus = ref(false)\n\nconst idOrAutoId = computed(() => props.id || autoId)\n\nconst dropdownId = computed(() => `${idOrAutoId.value}-dropdown`)\n\n// the BsInputSearch root/wrapper element, not its internal input\nconst anchorId = computed(() => inputSearchEl.value?.$el.id)\n\nconst openTriggers = {...focusEvents, ...inputEvents}\n\nconst mergedAttrs = computed(() => mergeProps(openTriggers, attrs))\n\nfunction openDropdown() {\n pop.open(dropdownId.value)\n}\n\nfunction maybeOpenDropdown() {\n if (returnedFocus.value) {\n //When focus is returned from the dropdown (after selecting an option, pressing esc, etc.) don't re-open the dropdown\n returnedFocus.value = false;\n return;\n }\n openDropdown()\n}\n\nasync function onUpdateModel(val) {\n // v2 doesn't add multiple selections to input\n if (props.multiple) return\n await nextTick()\n filterInput.value = props.displayValue\n ? getDisplayValue(model.value)\n : model.value\n}\n\nfunction getDisplayValue(val) {\n if (!val) return val\n return typeof props.displayValue === 'function'\n ? props.displayValue(val)\n : val[props.displayValue]\n}\n\nfunction onClear() {\n model.value = undefined\n // prevents dropdown from re-opening if X is clicked to clear the value while dropdown is closed\n returnedFocus.value = true\n}\n</script>\n\n<template>\n<BsInputSearch\n ref=\"inputSearch\"\n :disabled=\"disabled\"\n :error=\"error\"\n :hide-search-icon=\"hideSearchIcon\"\n :id=\"idOrAutoId\"\n :placeholder=\"placeholder\"\n :prevent-clear=\"preventClear\"\n v-bind=\"mergedAttrs\"\n v-model=\"filterInput\"\n @clear=\"onClear\" />\n\n<!--\n Dropdown:\n - Must re-emit the BsPopover emits, since the input and dropdown are siblings\n - onBeforeClose & onBeforeOpen are done as props instead, to ensure \"guard\" behavior\n is handled correctly by usePop composable. See note in defs-typeahead-component.js\n-->\n<BsDropdown\n :anchor=\"anchorId\"\n class=\"bs-input-search-dropdown\"\n :class=\"dropdownClass\"\n :debounce=\"debounce\"\n :equate-by=\"equateBy\"\n :filter=\"filterExternal ? undefined : true\"\n :filter-key=\"filterKey\"\n :filter-external=\"filterExternal\"\n hide-filter-input\n :id=\"dropdownId\"\n :persist=\"persist\"\n :place=\"dropdownPlace\"\n :min-chars=\"minChars\"\n :multiple=\"multiple\"\n prevent-filter-reset\n :size=\"dropdownSize\"\n :mobile-sheet=\"false\"\n v-model=\"model\"\n v-model:filter-input=\"filterInput\"\n v-slot=\"{ id, close }\"\n @after-close=\"data => $emit('after-close', data)\"\n @after-open=\"data => $emit('after-open', data)\"\n @before-close=\"onBeforeClose\"\n @before-open=\"onBeforeOpen\"\n @close=\"data => $emit('close', data)\"\n @open=\"data => $emit('open', data)\"\n @query=\"onQuery\"\n @return-focus=\"returnedFocus = true\"\n @update:model-value=\"onUpdateModel\">\n <slot v-bind=\"{ id, close }\" />\n</BsDropdown>\n</template>\n","<template>\n <div data-component=\"bs-typeahead-field\" v-bind=\"filtered\">\n\n <!-- Label -->\n <BsLabel v-if=\"label || $slots.label\"\n :id=\"labelId\"\n :disabled=\"disabled\"\n :for=\"idOrAutoId\"\n :required=\"required\">\n <slot name=\"label\">\n {{ label }}\n </slot>\n </BsLabel>\n\n <!-- Typeahead -->\n <BsTypeahead\n :aria-labelledby=\"labelId\"\n :disabled=\"disabled\"\n :error=\"error\"\n :hint-id=\"hintId\"\n :id=\"idOrAutoId\"\n :required=\"required\"\n v-bind=\"remaining\"\n v-model=\"model\">\n <template v-for=\"(_, slot) in $slots\" #[slot]=\"slotProps\">\n <slot :name=\"slot\" v-bind=\"slotProps\" />\n </template>\n </BsTypeahead>\n\n <!-- Hint / Error -->\n <BsFieldDetails v-if=\"showFieldDetails\"\n :data-disabled=\"disabled\"\n :error=\"error\"\n :error-msg=\"errorMsg\"\n :hint=\"hint\"\n :hint-id=\"hintId\" />\n\n </div>\n</template>\n\n<script setup>\nimport { useId, computed } from 'vue'\nimport BsLabel from '@components/label/BsLabel.vue'\nimport BsTypeahead from '@components/typeahead/BsTypeahead.vue'\nimport BsFieldDetails from '@components/field-details/BsFieldDetails.vue'\nimport { propDefinitions } from './defs-typeahead-field-component.js'\nimport { useFilterAttrs } from '@composables/filterAttrs.js'\n\n// Emits: Will emit what BsTypeahead emits (open, close, etc.)\n\nconst props = defineProps(propDefinitions)\n\ndefineOptions({ inheritAttrs: false })\n\nconst model = defineModel({\n type: [String, Object, Number, Array],\n required: false,\n default: undefined\n})\n\nconst { filtered, remaining } = useFilterAttrs(['class', 'style'])\n\nconst autoId = useId()\n\nconst idOrAutoId = computed(() => props.id || autoId)\n\nconst labelId = computed(() => `${idOrAutoId.value}-label`)\n\nconst hintId = computed(() => `${idOrAutoId.value}-hint`)\n\nconst showFieldDetails = computed(() => {\n const err = props.error && props.errorMsg\n return err || props.hint || ''\n})\n</script>\n","<script setup>\nimport { propDefinitions, emitDefinitions } from './defs-vertical-navigation.js'\nimport { BsIconCaretUp, BsIconCaretLeft, BsIconCaretRight, BsIcon } from '@wwtdev/bsds-icons-vue3'\nimport { ref, watch, onMounted, computed } from 'vue'\nimport useNavigationUtils from '../../composables/navigationUtils'\nimport { useMatchMedia } from '@composables/matchMedia.js'\nimport NavigationLink from './NavigationLink.vue'\n\n// PROPS\nconst props = defineProps(propDefinitions)\n\n// EMITS\nconst emit = defineEmits(Object.keys(emitDefinitions))\n\n// COMPOSABLES\nconst {\n collapsedSections,\n getExpandButtonTitle,\n initializeSections,\n isExpanded,\n rawNavData,\n} = useNavigationUtils(props)\nuseMatchMedia('(max-width: 1165px)', (ev) => {\n isTablet.value = ev.matches\n})\n\n// REFS\nconst verticalNav = ref(null)\nconst toggleButton = ref(null)\n\n// STATE\nconst isTablet = ref(false)\nconst internalCollapsed = ref(props.collapsed)\n\n// COMPUTED\nconst isNarrow = computed(() => {\n return !props.width && props.variant === 'narrow'\n})\n\nconst isCollapsible = computed(() => {\n return props.variant === 'collapsible'\n})\n\nconst isEffectivelyCollapsed = computed(() => {\n if (!isCollapsible.value || isTablet.value) return false\n return internalCollapsed.value\n})\n\n// METHODS\nfunction updatePageNavWidth() {\n // Calculate the actual width for page layout (ignoring hover state)\n let layoutWidth = '0px'\n \n // Only check collapsible state and collapsed state, ignore hover\n const isActuallyCollapsed = isCollapsible.value && !isTablet.value && internalCollapsed.value\n \n if (isActuallyCollapsed) {\n layoutWidth = '4rem' // 64px collapsed\n } else if (props.width) {\n layoutWidth = props.width // Use custom width as-is\n } else if (isNarrow.value) {\n layoutWidth = '4.5rem' // 72px narrow\n } else {\n layoutWidth = '9.875rem' // 158px wide\n }\n \n // Set CSS variable on body that page layout can use\n // Check for SSR - document is not available during server-side rendering\n if (typeof document !== 'undefined') {\n document.body.style.setProperty('--bs-page-nav-width', layoutWidth)\n }\n}\n\n// LIFE CYCLE HOOKS\nonMounted(() => {\n initializeSections(props.startCollapsed)\n // Set page nav width immediately on mount for SSR/Nuxt hydration\n // This ensures the CSS variable is set before first paint on client\n updatePageNavWidth()\n})\n\n// WATCHERS\nwatch(() => props.navData, () => {\n initializeSections(props.startCollapsed)\n})\n\n// Watch for button ref changes (when it mounts/unmounts due to v-if)\nwatch(toggleButton, (button) => {\n if (button && props.width) {\n button.style.setProperty('--bs-vertical-nav-width', props.width)\n }\n})\n\nwatch(() => props.collapsed, (newVal) => {\n internalCollapsed.value = newVal\n})\n\n// Set CSS variables on document body for page layout (CSS-only approach)\n// This allows page content to respond to navigation width changes without JavaScript\n// IMPORTANT: We use internalCollapsed directly (not isEffectivelyCollapsed) so hover doesn't shift layout\nwatch([() => internalCollapsed.value, isNarrow, () => props.width, isCollapsible, isTablet], \n () => {\n updatePageNavWidth()\n }\n)\n\nwatch(() => props.width, (newValue) => {\n if (newValue) {\n verticalNav.value.style.setProperty('--bs-vertical-nav-width', newValue)\n // Also update toggle button if it exists\n if (toggleButton.value) {\n toggleButton.value.style.setProperty('--bs-vertical-nav-width', newValue)\n }\n } else {\n verticalNav.value.style.removeProperty('--bs-vertical-nav-width')\n // Also remove from toggle button if it exists\n if (toggleButton.value) {\n toggleButton.value.style.removeProperty('--bs-vertical-nav-width')\n }\n }\n})\n\nwatch(() => props.mobileOpen, (newVal) => {\n // Check for SSR - document is not available during server-side rendering\n if (typeof document === 'undefined') return\n \n if (newVal) {\n document.body.style.overflow = 'hidden'\n verticalNav.value.style.setProperty('visibility', 'visible')\n setTimeout(() => {\n verticalNav.value.style.setProperty('opacity', '1')\n }, 0)\n } else {\n document.body.style.overflow = ''\n verticalNav.value.style.removeProperty('opacity')\n setTimeout(() => {\n verticalNav.value.style.removeProperty('visibility')\n }, 200)\n }\n})\n\n// METHODS\nfunction toggleSection(sectionId) {\n collapsedSections.value[sectionId] = !collapsedSections.value[sectionId]\n}\n\nfunction toggleCollapsed() {\n internalCollapsed.value = !internalCollapsed.value\n emit('update:collapsed', internalCollapsed.value)\n}\n</script>\n\n<template>\n <div class=\"bs-vertical-nav-wrapper\" :data-bg-variant=\"props.bgVariant || undefined\">\n <!-- Collapse Toggle Button -->\n <button\n v-if=\"isCollapsible && !isTablet\"\n ref=\"toggleButton\"\n class=\"bs-vertical-nav-toggle\"\n type=\"button\"\n :aria-expanded=\"!internalCollapsed\"\n :title=\"internalCollapsed ? 'Expand navigation' : 'Collapse navigation'\"\n :data-collapsed=\"isEffectivelyCollapsed\"\n :data-narrow=\"isNarrow\"\n @click=\"toggleCollapsed\"\n >\n <BsIconCaretRight v-if=\"internalCollapsed\" class=\"bs-vertical-nav-toggle-icon\" />\n <BsIconCaretLeft v-else class=\"bs-vertical-nav-toggle-icon\" />\n </button>\n\n <nav\n class=\"bs-vertical-nav\"\n ref=\"verticalNav\"\n :data-narrow=\"isNarrow\"\n :data-collapsed=\"isEffectivelyCollapsed\"\n :data-collapsible=\"isCollapsible\"\n :style=\"props.width && !isEffectivelyCollapsed ? { width: props.width } : undefined\"\n >\n <!-- Upper / Main Secondary Nav Options -->\n <ul>\n <!-- Top Content Slot -->\n <li v-if=\"$slots['top-content']\" class=\"bs-vertical-nav-top-content\">\n <slot name=\"top-content\" />\n </li>\n\n <template v-for=\"item in rawNavData\" :key=\"item.id\">\n <!-- Section (Collapsible or Divider-Only) -->\n <li\n v-if=\"item.navItems?.length > 0\"\n class=\"bs-vertical-nav-section\"\n :data-collapsed=\"!item.dividerOnly && !isExpanded(item)\"\n :data-divider-only=\"item.dividerOnly\"\n :data-app-links=\"item.appLinks\"\n >\n <!-- Toggle button (only shown if not divider-only) -->\n <button\n v-if=\"!item.dividerOnly && !isNarrow && !isEffectivelyCollapsed\"\n class=\"bs-vertical-nav-section-toggle\"\n :aria-expanded=\"isExpanded(item)\"\n :aria-controls=\"`${item.id}-nested-section`\"\n :title=\"getExpandButtonTitle(item)\"\n type=\"button\"\n @click=\"toggleSection(item.id)\"\n >\n <span v-if=\"!isEffectivelyCollapsed\">{{ item.text }}</span>\n <BsIconCaretUp class=\"bs-vertical-nav-section-toggle-caret\" />\n </button>\n\n <!-- Nested Items (always visible for divider-only sections) -->\n <ul v-show=\"item.dividerOnly || isExpanded(item) || isEffectivelyCollapsed\" :id=\"`${item.id}-nested-section`\">\n <li v-for=\"nestedItem in item.navItems\" :key=\"nestedItem.id\">\n <NavigationLink\n :item=\"nestedItem\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => emit('nav-link-clicked', { ev, payload: nestedItem })\"\n :aria-label=\"nestedItem.text\"\n >\n <BsIcon\n v-if=\"typeof nestedItem.icon === 'string'\"\n class=\"bs-vertical-nav-link-icon\"\n :name=\"nestedItem.icon\"\n />\n <component\n v-else\n :is=\"nestedItem.icon\"\n class=\"bs-vertical-nav-link-icon\"\n />\n <span>{{ nestedItem.text }}</span>\n </NavigationLink>\n </li>\n </ul>\n </li>\n\n <!-- Single Item -->\n <li v-else>\n <NavigationLink\n :item=\"item\"\n :router=\"router\"\n @nav-link-clicked=\"(ev) => emit('nav-link-clicked', { ev, payload: item })\"\n :aria-label=\"item.text\"\n >\n <BsIcon\n v-if=\"typeof item.icon === 'string'\"\n class=\"bs-vertical-nav-link-icon\"\n :name=\"item.icon\"\n />\n <component\n v-else\n :is=\"item.icon\"\n class=\"bs-vertical-nav-link-icon\"\n />\n <span>{{ item.text }}</span>\n </NavigationLink>\n </li>\n </template>\n </ul>\n\n <!-- End Items -->\n <div v-if=\"$slots['end-items']\" class=\"bs-vertical-nav-end-items\">\n <slot name=\"end-items\" />\n </div>\n </nav>\n </div>\n</template>\n"],"names":["bsSelectors","_selectors","propDefinitions","emitDefinitions","slotDefinitions","value","val","BsPopoverProvider","isTextSelection","isListening","lastOpenedTime","popsById","shallowRef","popIdsByTrigger","ref","anchorsByPopId","openIds","escIds","outsideClickIds","autoCloseIds","ancestorIds","lastCancelledId","lastConfirmedId","wasOutsideClick","isOpen","id","isType","type","_b","_a","openDropdownIds","computed","openFlyoutIds","openModalIds","openPopoverIds","openToastIds","openTooltipIds","register","data","unregister","close","removeEsc","removeOutsideClick","removeAutoClose","removeAncestor","remove","onesToKeep","registerPopTrigger","existing","unregisterPopTrigger","index","addEsc","x","addOutsideClick","addAutoClose","addAncestor","setAnchorId","popId","anchorId","toggle","options","open","beforeOpen","fn","ancestorEl","idsToKeepOpen","maybeStartListening","beforeCancel","cancel","triggerCancelEmit","beforeConfirm","confirm","triggerConfirmEmit","beforeClose","emit","maybeStopListening","closeAll","force","onOutsideClick","onEsc","event","lastOpenedEscId","lastOpenedId","reset","usePop","curry","func","shallowReadonly","readonly","popTriggerProps","usePopTriggers","props","pop","autoId","useId","attrs","useAttrs","popover","inject","safeProps","unref","popProp","key","warn","popoverProps","isPopOpen","popSlotProps","idAttr","ariaAttrs","role","eventAttrs","onClick","onKeyboardClick","popAttrs","watch","_","onCleanup","trigger","popEl","emitsAsProps","replaceVerbiage","name","defs","keysToOmit","customUpdatesFn","updatedEntries","prop","updatedData","formatPropEmitKeysForDocs","obj","removeEmitsAsProps","componentPropDefinitions","componentEmitDefinitions","dropdownEmitsAsProps","onQuery","popoverPropDefinitions","doCustomPropDocsUpdates","popoverEmitDefinitions","popoverSlotDefinitions","componentSlotDefinitions","inputSearchPropDefinitions","inputSearchEmitsDefinitions","selectEmitsAsProps","onBeforeOpen","onBeforeClose","popoverEmitsAsProps","dropdownFilterEmitsAsProps","selectPropDefinitions","selectEmitDefinitions","selectSlotDefinitions","typeaheadPropDefinitions","typeaheadEmitDefinitions","typeaheadSlotDefinitions","useGenIdAttrs","quantity","ids","i","__props","__emit","containerRef","containerId","contentId","headingId","openItemMatch","showContent","handleToggled","_createElementBlock","_unref","stacked","_createElementVNode","icon","$slots","_openBlock","_hoisted_4","_renderSlot","_ctx","_createBlock","BsIcon","_resolveDynamicComponent","headerText","_createVNode","BsIconCaretDown","useButtonOrLink","defaultRootTag","rootTag","getTag","buttonOrLinkAttrs","getAttrs","myProps","tagsByProp","foundProp","getHref","tag","isLink","isButton","disableClick","useClientRouter","propUrl","hrefIsRelative","routeTo","onLinkClick","e","useDeprecatedProp","propName","newPropName","customMessage","warning","useDeprecatedPropActual","useDeprecatedTransition","transition","onMounted","useSlots","accessibleLabelAttr","isTextBtn","hoverDirection","iconComputed","BsIconSmallCaretLeft","BsIconCaretLeft","BsIconSmallCaretRight","BsIconCaretRight","textLeft","textRight","variantPrefixed","_mergeProps","disabled","ghostBtn","size","_hoisted_1","label","_hoisted_2","_hoisted_3","BsCircleButton","buttonVariant","shouldUseDirectLink","horizontal","variant","_Fragment","BsIconCircleExclamation","title","description","hideDismiss","BsIconClose","actionLabel","BsCaretTextButton","actionLinkTo","_withCtx","href","elementsToMarkInert","isScrollbar","origScrollbarGutter","duration","activate","deactivate","onUnmounted","getElementsToMarkInert","hasPageScrollbar","addInert","lockPageScroll","removeInert","unlockPageScroll","nodes","el","_Transition","active","hostRef","countFmt","labelFmt","base","ct","sfx","_normalizeClass","dot","color","position","showZero","isDismissed","handleDismiss","BsIconWarning","unstyled","textBtn","hintMsg","_toDisplayString","_cache","aria","handleInput","$attrs","BsInputAddon","BsIconCalendar","BsInput","_toHandlers","$emit","hiddenStart","hiddenEnd","dispatchRangeChange","ev","handleRangeChange","start","end","handleRangeChangeDebounced","debounce","handleRangeInput","startListener","endListener","useCalendarWorkaround","isNavBtn","isSpaceOrEnter","keydownWorkaround","onBeforeUnmount","useMatchMedia","query","handlerFn","watchList","mediaQuery","onBeforeMount","useFilterAttrs","keysToFilter","isFilterKey","attrEntries","filtered","remaining","MQ","calendar","columns","container","inputIdGen","hintId","steps","disabledDatesComputed","getBlackoutDates","inputIdAttr","modifiers","showClearBtn","showFieldDetails","stepRef","variantRef","setNavButtonLabels","visible","formatInput","inputValue","exclusiveDates","toDisable","date","handleRangeBlur","prev","next","isRange","BsLabel","required","maxDate","minDate","modelValue","$event","_createSlots","inputMode","inputEvents","showPopover","BsInputDateRange","error","placeholder","BsInputDateSingle","BsFieldDetails","errorMsg","hint","mounted","formatTimeVal","timeVal","timeStr","dateStr","altLayout","getBasicRows","datasets","ds","rowLabel","dataCells","it","xTickToYValue","acc","d","tickPtLabel","getAltRows","consolidatedIndices","toAdd","uniqueIndices","a","b","idx","row","rowData","cell","dataPt","tableRows","table","tableReady","_renderList","colHeading","_hoisted_5","c","useKeydown","keys","onKeydown","elRef","handler","k","TICK_SIZE","TICK_SIZE_LG","useChart","canvasRef","isDesktop","legendListRef","BREAKPOINT_QUERY","MOBILE_TICK_SIZES","DESKTOP_TICK_SIZES","chart","chartConfig","createChartConfig","chartSpecificMethod","BsChartConfigBuilder","getHtmlLegendPlugin","Filler","handleLegendItemToggle","li","labelIndex","datasetIndex","refocusLegendItem","sel","item","registerChart","chartElements","Chart","updateConfigOpts","updateConfigData","err","isDesktopMatched","_merge","boxSpan","text","textContainer","getBackgroundColor","initialDivider","DEFAULT_COLORS","divider","getBorderColor","getCommonOptionsPermissive","chartProps","getCommonOptionsStrict","getCartesianScaleOptions","propsPlus","dataIdxLabels","showXGrid","showYGrid","xAxisType","xLabel","yLabel","yMax","yMin","customOptions","tickSize","scaleOptions","BsChartConfig","plugins","showTooltips","BsChartBarConfig","dataset","scaleOpts","tickFontOpts","updatedOpts","BsChartLineConfig","optionsArg","BarController","BarElement","CategoryScale","LinearScale","Legend","TimeScale","Tooltip","BsChartTable","inputEl","isChecked","isModelValueChecked","isIndeterminate","isVModelArray","setIndeterminate","doVModelSimple","checked","doVModelComplex","newValue","onChange","BsButton","mountedTargetIds","useCreateTeleportTarget","teleportTargetId","element","isTeleportTargetMounted","focusTraps","activeTraps","datasetKey","buildOptions","binding","FOCUSABLE_ELEMENT_TAGS","selector","vFocusTrap","_handleFirstShiftTab","lastElement","_handleLastTab","firstElement","_handleOutsideTab","handleKeydown","trapId","focusableElements","prevActive","events","usageCount","activeEvent","isBeingUsed","addEventListeners","removeEventListeners","usePopHoverEvents","shouldListen","newVal","shouldHandleEvent","timer","guardClose","delay","onEventFired","isKeyboardFocused","canHoverTooltip","addAriaDescribedBy","onClickToClose","removeAriaDescribedBy","popoverEl","provide","setAriaLabelledBy","teleportTo","returnFocusId","useTemplateRef","anchorEl","backdropInertSelector","ariaLabelledBy","width","isAnchoredToViewport","ourAriaLabelledBy","labelledBy","placement","fallback","focusTrapOptions","shouldUseHoverEvents","floatingUiAnchorEl","floatingUiPopoverEl","updateAnchorElement","onOpen","onClose","emitPayload","updatePreventAutoClose","updatePreventClose","updatePreventCloseEsc","updatePreventCloseOutside","newId","oldId","setWidth","floatingStyles","useFloating","offset","flip","shift","autoUpdate","eventName","newAnchor","addBsButtonScaleWorkaround","removeBsButtonScaleWorkaround","maybeReturnFocus","returnElement","nextTick","_Teleport","transitionName","persist","backdrop","BsBackdrop","_withDirectives","preventCloseX","preventClose","BsPopXButton","BsDropdownProvider","vFocus","arg","enteringPopover","focusElement","elToFocus","useAbortController","abortController","pendingRequestCount","isPendingRequest","getSignal","trackRequest","res","abortPreviousRequest","model","_useModel","dropdown","rootAttrs","inputAttrs","isInputFocused","isPendingDebounce","isQueryValid","debounceDelay","debouncedQuery","emitQuery","filterOptions","minCharHint","count","opt","oldVal","onDropdownOpen","onDropdownClose","focusInput","onClearButtonClick","filterProp","funcsByPropType","getValue","option","hideInput","BsIconSearch","useDropdownKbAccess","optionsById","listContainerEl","showFilter","activeIndex","typeToFocusData","filteredOptions","previousGroupId","activeOptionId","removeTraverseListListener","initActiveIndex","defaultStartIndex","newActiveIndex","handlePageDelta","callback","observerConfig","observer","entries","delta","entry","traverseList","TRAVERSE_KEYS","startIndex","keydownSelect","typeToFocus","TTF_KEYS","found","addTraverseListListener","resetActiveIndex","previousModel","filterInput","isMobile","isTablet","dropdownFilter","closeEventName","tabIndex","shouldShowBottomSheet","anchorComputed","placeComputed","setModel","isSelected","wasPreviouslySelected","showPreviouslySelectedSeparator","registerOption","unregisterOption","registerFilter","unregisterFilter","selectedOption","showSeparator","groupId","checkSelected","isMatch","equateBy","isObject","getArrayModel","BsPopover","mobileSheet","_toHandlerKey","mobileHeadingTag","mobileHeading","mobileDescription","BsDropdownFilter","hideFilterInput","filterKey","filterExternal","minChars","preventFilterReset","ariaLabel","multiple","mobileButtonLabel","inputRef","toggleId","btnProperties","showCloseButton","handleBtnClick","_vShow","useNormalizedOptionsArray","showBadge","BsBadge","internalContainerRef","__expose","useBreakout","createBreakout","breakoutId","breakoutStub","breakoutMounted","isPreExisting","useClickAway","elRefs","onClickAway","dropdownContainerRef","dropdownRef","dropdownEnter","dropdownAfterEnter","containerEl","widthActual","setDropdownProperty","property","setPosition","containerRect","anchorRect","dropdownRect","positionTopBottom","positionLeftRight","bottom","top","left","right","handleEnter","handleAfterEnter","handleAfterLeave","BsDropdownContainer","BsEnhancedTransition","shownActual","positionActual","anchorIdActual","BsDropdownNew","optionIdFromVal","listId","optionVal","valueIdKey","suffix","optionRef","optionsId","handleOptionSelect","idKey","handleOptionClick","isMounted","showImage","normalizedOptions","getVariant","useAltText","profileName","BsDropdownOptionDeprecated","BsProfileImg","showNoOptions","_hoisted_6","idActual","preventClearActual","idOrAutoId","rootId","showClear","hideSearchIcon","useMutationObserver","targetRef","selectedValueActual","optionsRef","activeDescendantId","selectedIndex","optionEls","hasOverflow","registeredOptionsById","dropdownShown","refreshOptions","handleKeyboardSelect","handleKeyDown","typeToFocusKeys","handleShownChange","entered","optionsLen","scrollOptionsListIntoView","scrollCurrentActiveIntoView","setCurrentActive","removeCurrentActive","handleOptionsFocus","handleShown","handleNotShown","traverse","direction","newIndex","updateCurrentActive","ttfState","matchIdx","activeIdx","withFocus","optlist","selectedLocalOptions","unselectedLocalOptions","showDivider","hasSomeOptions","refocusPending","sortSelectedUnselected","focusFirstOption","refocusOnOption","updatedSelectedOptions","byId","valuesOrIds","selected","unselected","newOption","inputIdMiddle","inputId","preorderPayload","unsortedPayload","values","sorted","f","payload","BsDropdownOptionListDeprecated","BsDropdownOptionBuilderDeprecated","toggleEl","autoToggleId","autoOptionsId","isShown","filterTerm","badgeCount","OptionList","BsDropdownMultiselectDeprecated","optionsIdActual","toggleIdActual","optionsComputed","getToggleEl","checkShouldRestoreFocus","activeEl","closeAndRestoreFocus","handleClose","handleEnterStart","handleUncheckOption","newOptionsValue","handleCheckOption","handleSingleSelect","handleSearchClear","handleSearchUpdate","BsFilterButton","BsDropdownDeprecated","BsInputSearch","inputWrapperId","preventFocusOpen","inputComboboxRef","getInputEl","handleChange","handleClear","handleDropdownClose","handleInputMousedown","handleInputMouseup","handleFocus","BsDropdownWithToggleDeprecated","BsInputCombobox","BsDropdownComboboxDeprecated","handleSelect","modelValueActual","BsDropdownWithOptionsNew","slots","loaded","iconActual","shouldDisplay","durationBySize","place","flyoutRef","closeFlyout","hasShownChild","focusGuard","handleFirstShiftTab","handleLastTab","handleOutsideTab","inactive","_hoisted_7","subTitle","expanded","useNavigationUtils","collapsedSections","rawNavData","toRaw","initializeSections","initialValue","isAbsoluteTo","to","getTo","isActivePath","isExpanded","getExpandButtonTitle","getTarget","_component_router_link","mobileId","mobileOpenState","oldValue","resetSections","toggleSection","sectionId","getMobileToggleTitle","isNestedActive","navItem","handleNestedClick","hideMobileToggle","mobileOpen","titleIcon","mobileToggleText","nestedItem","NavigationLink","router","_createTextVNode","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","titleUrl","_hoisted_13","_hoisted_15","_hoisted_16","svgWrapperRef","viewBox","stops","uniqueId","stop","InlineTabsProvider","group","isDisabled","modifiedProps","setGroupModel","matcher","as","hintDeprecated","SYMBOLS","CountryUtils","countryCode","regionCode","getSupportedCallingCodes","getRegionCodeForCountryCode","flag","mapName","libKey","country","VALID_OTHER_KEYS","countryCodesToggle","countryCodes","currentCountry","countryToggleId","countryCodesId","phoneNumber","phoneNumberError","phoneNumberHasError","showCountryCodes","showValidationResult","computedPhoneNumber","countryToggleLabel","errorMsgComputed","hasError","showDetails","showErrorState","validate","clearPhoneNumberIfReset","init","handleCountryCodeClose","handleCountryCodeInput","selectedVal","updateCurrentCountry","handlePhoneBlur","handlePhoneInput","ignoreInvalidChars","initParse","parsedNum","parsePhoneNumber","code","pncc","BsIconCaretSort","BsDropdownWithOptionsDeprecated","optionsShown","optionSelected","generatedId","generatedHintId","prevOptions","showDropdownIfValue","typeaheadIdActual","inputContainerId","optionsValueActual","modifiedOptions","newOptions","filterValue","filterFunc","highlightOptions","labelHtml","replaceHtml","handleCheck","handleUncheck","BsSpinner","setBodyScroll","modalRef","isVisible","titleId","subtitleId","closeModal","hasTitle","hasSubtitle","hasProgress","hasHeader","hasFooter","customEventName","checkForShownChild","BsOverlay","enterControlled","enterTrigger","leaveTrigger","preloaded","_isRef","modalId","bodyBackgroundContrast","footerBorder","fullHeight","fullWidth","headerBorder","alert","BsFocusGuardDeprecated","closeButton","subtitle","BsOptionGroupProvider","optionGroup","templateRef","isMultiple","isSelectedToTop","isActive","onSelect","negative","iconColumn","optionIds","shouldShowGroup","optId","valueState","resultsNumbers","actualPageCount","computedVariant","handleFirstNav","handlePrevNav","handleNextNav","handleLastNav","pages","pageTextDisplay","groupTextDisplay","first","last","increment","BsIconCaretLeftDouble","page","resultsNum","_hoisted_12","BsIconCaretRightDouble","handleClick","status","truncate","background","BsToastProvider","isInToast","ourBorder","BsTextButton","border","BsPopTitle","BsPopSubtitle","handleActionToggle","layout","imageSrc","imageSize","initials","BsProfileDetails","company","jobTitle","email","action","actionIcon","miscMeta","miscMetaIcon","useSteps","progressStep","step","progressText","getStatus","rootEl","singleDisplayText","getDisplayValue","multipleDisplayText","displayText","onClear","showCount","_normalizeProps","_guardReactiveProps","preventClear","dropdownId","BsInputButton","displayValue","BsDropdown","dropdownClass","filter","dropdownPlace","filterPlaceholder","dropdownSize","labelId","BsSelect","slot","slotProps","BsSelectDeprecated","selectIdGen","optionsIdGen","selectIdComp","optionsIdComp","buttonText","matchedOption","placeholderShown","_withModifiers","hostEl","panelIdComputed","handleTabSelection","TableCol","_sfc_main","TableHeaderProvider","TableBodyProvider","TableFooterProvider","providerByKind","rowCount","incrementRowCount","decrementRowCount","_normalizeStyle","FrozenCols","rowgroup","HeadCell","h","Cell","_sfc_render","iconsByOrder","BsIconCaretSortUp","BsIconCaretSortDown","onToggle","resizerExtraHoverTarget","resizerEl","xStart","xPos","animationFrame","target","isResizerVisible","isResizing","showHideResizer","hideResizer","setTarget","isOnLeftBorder","isOnRightBorder","getTargetsPreviousSibling","showResizer","prevSibling","prevCell","getResizeMin","moveResizerToXpos","onPointerDown","scrollWrap","onPointerMove","onPointerUp","isMinColWidth","xDiff","emitResize","onDoubleClick","tableSlots","cols","resizedColWidthsById","colWidths","col","resizeId","getResizeId","getInitialColWidth","cellPaddingCssVar","rowHoverCssVar","canResizeCols","wrapper","content","css","style","tableScrollWrapper","headerRowgroup","rows","TableRowGroup","headerRowgroupDefault","cells","headCell","headerRowgroupSlot","slotContent","slotRows","bodyRowgroup","bodyRowgroupDefault","rowIndex","bodyCell","bodyRowgroupSlot","footerRowgroup","footerRowgroupSlot","TableRow","cellFn","findNodesByType","node","isDefaultRowPlaceholder","sortKey","getSortKey","truncateCss","getResizeAttrs","newKids","SortToggle","cloneVNode","getSortToggleProps","sortToggle","colMin","colMax","resizeKey","isColPropTruthy","sortOrder","getRowKeyProp","isTruncate","frozenCells","side","theCells","tableColResizer","TableColResizer","onResizeCol","colsToUpdate","updates","types","processFrozenTableCols","processTableCols","format","frozenCols","processDefaultSlot","TableHeader","TableFooter","nested","header","footer","other","DEFAULT_TOGGLE_WIDTH","ELLIPSIS_WIDTH","TAB_GAP","adaptedToWidth","dropdownMounted","hiddenTabs","showDropdown","showDropdownToggle","tablistEl","accumulatedWidths","activeLineInitialized","allTabs","dropdownToggle","navigableTabs","resizeObserver","totalWidth","tabListAutoId","adaptToWidthTimeoutId","activeTabIdx","t","activeTabIsHidden","dropdownOptionsId","dropdownToggleId","dropdownToggleText","dropdownToggleWidth","adaptToWidth","showToggle","tab","thresholdWidth","thresholdReached","tabsToHide","setNavigableTabs","moveActiveLine","adaptToWidthCleanup","cleanup","observerCleanup","fireTabChange","tabId","getTabWidth","tabIdx","actualWidth","_c","handleActiveTabIdChange","handleDropdownToggleClick","handleDropdownOptionSelect","handleTabClick","handleTabNav","handleTabPrevious","handleTabNext","nextIdx","prevIdx","prevOffset","max","offsetPx","scaleNum","_d","resizeObserverSetup","cb","setAllTabs","setAccumlulatedWidths","tabWidth","tabs","BsIconActionEllipsis","panelId","charCount","BsTextarea","STATUSES_ICONS","BsIconCircleStop","BsIconCircleCheck","BsIconCircleX","BsIconCircleEllipsis","BsIconGraphPieEmpty","BsIconCirclePlay","BsIconCirclePause","getIcon","checkTimePattern","uFmt","uFmtNoColon","amPm","amPmNoColon","parseIntTen","parseRaw","STRIP_PATTERN","hours","minutes","parts","pm","fmtTimeValToDisplay","hoursInt","minutesInt","ampm","fmtInputToTimeVal","EXCLUDED","OVER","SKIP","STOP","UNDER","timeError","timeHasError","createOptions","stopAll","j","getTimeString","skipOrStop","getSkipOrStop","checkConstraints","hour","minute","handleComboboxChange","formattedValue","updateWithValidation","setOptions","timePicker","BsTimePicker","activeToastIds","useToast","dismissTimer","orderStyle","onAfterClose","toastId","isStacked","autoDismissTimer","handleEnterEnd","BsIconThumbsUpStroke","locatorElement","parentId","isControlledByPopTrigger","shouldUseParent","addParentId","removeParentId","parentEl","isHoverOrFocused","isEscaped","getTooltipTextClass","cssClass","handleEnterOrFocus","handleLeaveOrFocusOut","openDropdown","focusEvents","maybeOpenDropdown","inputSearchEl","returnedFocus","openTriggers","mergedAttrs","mergeProps","onUpdateModel","BsTypeahead","verticalNav","toggleButton","internalCollapsed","isNarrow","isCollapsible","isEffectivelyCollapsed","updatePageNavWidth","layoutWidth","button","toggleCollapsed","BsIconCaretUp"],"mappings":";;;;;;;;;AAGA,MAAMA,KAAc;AAAA,EAClB,WAAU;AAAA,EACV,OAAM;AAAA,EACN,QAAO;AAAA,EACP,QAAO;AAAA,EACP,UAAS;AAAA,EACT,UAAS;AAAA,EACT,WAAU;AAAA,EACV,YAAW;AAAA,EACX,UAAS;AAAA,EACT,cAAa;AAAA,EACb,uBAAsB;AAAA,EACtB,qBAAoB;AAAA,EACpB,gBAAe;AAAA,EACf,oBAAmB;AAAA,EACnB,YAAW;AAAA,EACX,cAAa;AAAA,EACb,cAAa;AAAA,EACb,QAAO;AAAA,EACP,kBAAiB;AAAA,EACjB,OAAM;AAAA,EACN,YAAW;AAAA,EACX,YAAW;AAAA,EACX,YAAW;AAAA,EACX,aAAY;AAAA,EACZ,OAAM;AAAA,EACN,OAAM;AAAA,EACN,iBAAgB;AAAA,EAChB,YAAY;AAAA,IACV,WAAW;AAAA,IACX,aAAa;AAAA,IACb,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,EACP;AAAA,EACD,MAAK;AAAA,EACL,SAAQ;AAAA,EACR,gBAAe;AAAA,EACf,YAAW;AAAA,EACX,aAAY;AAAA,EACZ,OAAM;AAAA,EACN,QAAO;AAAA,EACP,kBAAiB;AAAA,EACjB,aAAY;AAAA,EACZ,uBAAsB;AAAA,EACtB,SAAQ;AAAA,EACR,QAAO;AAAA,EACP,KAAI;AAAA,EACJ,SAAQ;AAAA,EACR,UAAS;AAAA,EACT,UAAS;AAAA,EACT,eAAc;AAAA,EACd,iBAAgB;AAAA,EAChB,UAAS;AAAA,EACT,OAAM;AAAA,EACN,wBAAuB;AAAA,EACvB,qBAAoB;AAAA,EACpB,uBAAsB;AAAA,EACtB,mBAAkB;AAAA,EAClB,SAAQ;AAAA,EACR,mBAAkB;AACpB,GAGeC,KAAA;AAAA,EACd,aAAAD;AACD,GCtEaE,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AACH,GAEaC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AACH,GAEaC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACD,QAAQ;AAAA,IACN,aAAa;AAAA,EAEd;AAAA,EACD,MAAM;AAAA,IACJ,aAAa;AAAA,EAEd;AACH;;;;;8CCvEaF,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,aAAa;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,WAAW,WAAW,UAAU;AAAA,IAClD,UAAUG,GAAO;AACf,aAAOH,GAAgB,QAAQ,YAAY,SAASG,CAAK;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA,EAED,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,aAAa;AAAA,EACjB;AACA,GAEaF,KAAkB;AAAA,EAC7B,gBAAgB;AAAA,IACd,aAAa;AAAA,EACd;AAAA,EACD,OAAS;AAAA,IACP,aAAa;AAAA,EACd;AACH,GAEaC,KAAkB;AAAA,EAC7B,aAAa;AAAA,IACX,aAAa;AAAA,EAEd;AAAA,EACD,MAAM;AAAA,IACJ,aAAa;AAAA,EAEd;AAAA,EACD,OAAO;AAAA,IACL,aAAa;AAAA,EACd;AACH;;;;;8CC7FaF,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,OAAO,QAAQ,OAAO;AAAA,IACxC,WAAW,CAAAI,MAAO,CAAC,IAAI,OAAO,QAAQ,OAAO,EAAE,SAASA,CAAG;AAAA,EAC5D;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,KAAK;AAAA,IACH,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IAIb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,QAAQ,OAAO;AAAA,IACjC,WAAW,CAAAA,MAAO,CAAC,QAAQ,OAAO,EAAE,SAASA,CAAG;AAAA,EACjD;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,QAAQ;AAAA,IAC1B,UAAUD,GAAO;AACf,aAAOH,GAAgB,QAAQ,YAAY,SAASG,CAAK;AAAA,IAC/D;AAAA,EACA;AACA,GAEaF,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,EAEd;AACH;;;;;8CC9EaF,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,UAAU;AAAA,IAC5B,UAAUG,GAAO;AACf,aAAOH,GAAgB,QAAQ,YAAY,SAASG,CAAK;AAAA,IAC/D;AAAA,EACG;AACH,GAEaF,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,EACd;AACH,GAEaC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACD,MAAM;AAAA,IACJ,aAAa;AAAA,EAEd;AACH;;;;;8CCtCaG,KAAoB,OAAO,mBAAmB;ACEpD,SAASC,KAAkB;AAChC,SAAO,OAAO,gBAAgB,OAAO,aAAY,EAAG,SAAU,EAAC,SAAS;AAC1E;ACDA,IAAIC,KAAc,IACdC,KAAiB;AAKrB,MAAMC,KAAWC,GAAW,EAAE,GAExBC,KAAkBC,EAAI,EAAE,GAExBC,KAAiBD,EAAI,EAAE,GAEvBE,KAAUF,EAAI,CAAE,CAAA,GAEhBG,KAASH,EAAI,EAAE,GAEfI,KAAkBJ,EAAI,EAAE,GAExBK,KAAeL,EAAI,EAAE,GAErBM,KAAcN,EAAI,EAAE,GAEpBO,KAAkBP,EAAI,IAAI,GAC1BQ,KAAkBR,EAAI,IAAI,GAC1BS,KAAkBT,EAAI,EAAK;AAIjC,SAASU,GAAOC,GAAI;AAClB,SAAOT,GAAQ,MAAM,SAASS,CAAE;AAClC;AAEA,SAASC,GAAOD,GAAIE,GAAM;;AACxB,WAAOC,KAAAC,IAAAlB,GAAS,MAAMc,CAAE,MAAjB,gBAAAI,EAAoB,UAApB,gBAAAD,EAA2B,UAASD;AAC7C;AAEA,MAAMG,KAAkBC,EAAS,MACxBf,GAAQ,MAAM,OAAO,CAAAS,MAAMC,GAAOD,GAAI,UAAU,CAAC,CACzD,GAEKO,KAAgBD,EAAS,MACtBf,GAAQ,MAAM,OAAO,CAAAS,MAAMC,GAAOD,GAAI,QAAQ,CAAC,CACvD,GAEKQ,KAAeF,EAAS,MACrBf,GAAQ,MAAM,OAAO,CAAAS,MAAMC,GAAOD,GAAI,OAAO,CAAC,CACtD,GAEKS,KAAiBH,EAAS,MACvBf,GAAQ,MAAM,OAAO,CAAAS,MAAMC,GAAOD,GAAI,SAAS,CAAC,CACxD,GAEKU,KAAeJ,EAAS,MACrBf,GAAQ,MAAM,OAAO,CAAAS,MAAMC,GAAOD,GAAI,OAAO,CAAC,CACtD,GAEKW,KAAiBL,EAAS,MACvBf,GAAQ,MAAM,OAAO,CAAAS,MAAMC,GAAOD,GAAI,SAAS,CAAC,CACxD;AAKD,SAASY,GAASZ,GAAIa,IAAO,IAAI;AAC/B,EAAA3B,GAAS,QAAQ;AAAA,IACf,GAAGA,GAAS;AAAA,IACZ,CAACc,CAAE,GAAG,EAAE,IAAAA,GAAI,GAAGa,EAAI;AAAA,EACvB;AACA;AAEA,SAASC,GAAWd,GAAI;AACtBe,EAAAA,GAAMf,CAAE,GACRgB,GAAUhB,CAAE,GACZiB,GAAmBjB,CAAE,GACrBkB,GAAgBlB,CAAE,GAClBmB,GAAenB,CAAE;AACjB,QAAM,EAAE,CAACA,CAAE,GAAEoB,GAAQ,GAAGC,EAAU,IAAKnC,GAAS;AAChD,EAAAA,GAAS,QAAQmC;AACnB;AAEA,SAASC,GAAmBpB,GAAMF,GAAI;AAEpC,QAAMuB,IAAWnC,GAAgB,MAAMc,CAAI,KAAK,CAAA;AAChD,EAAAd,GAAgB,MAAMc,CAAI,IAAI,CAAC,GAAGqB,GAAUvB,CAAE;AAChD;AAEA,SAASwB,GAAqBtB,GAAMF,GAAI;AAEtC,QAAMyB,IAAQrC,GAAgB,MAAMc,CAAI,EAAE,QAAQF,CAAE;AACpD,EAAIyB,MAAU,MACdrC,GAAgB,MAAMc,CAAI,EAAE,OAAOuB,GAAO,CAAC;AAC7C;AAEA,SAASC,GAAO1B,GAAI;AAClB,EAAAR,GAAO,QAAQ,CAAC,GAAGA,GAAO,OAAOQ,CAAE;AACrC;AAEA,SAASgB,GAAUhB,GAAI;AACrB,EAAAR,GAAO,QAAQA,GAAO,MAAM,OAAO,CAAAmC,MAAKA,MAAM3B,CAAE;AAClD;AAEA,SAAS4B,GAAgB5B,GAAI;AAC3B,EAAAP,GAAgB,QAAQ,CAAC,GAAGA,GAAgB,OAAOO,CAAE;AACvD;AAEA,SAASiB,GAAmBjB,GAAI;AAC9B,EAAAP,GAAgB,QAAQA,GAAgB,MAAM,OAAO,CAAAkC,MAAKA,MAAM3B,CAAE;AACpE;AAEA,SAAS6B,GAAa7B,GAAI;AACxB,EAAAN,GAAa,QAAQ,CAAC,GAAGA,GAAa,OAAOM,CAAE;AACjD;AAEA,SAASkB,GAAgBlB,GAAI;AAC3B,EAAAN,GAAa,QAAQA,GAAa,MAAM,OAAO,CAAAiC,MAAKA,MAAM3B,CAAE;AAC9D;AAEA,SAAS8B,GAAY9B,GAAI;AACvB,EAAAL,GAAY,QAAQ,CAAC,GAAGA,GAAY,OAAOK,CAAE;AAC/C;AAEA,SAASmB,GAAenB,GAAI;AAC1B,EAAAL,GAAY,QAAQA,GAAY,MAAM,OAAO,CAAAgC,MAAKA,MAAM3B,CAAE;AAC5D;AAEA,SAAS+B,GAAYC,GAAOC,GAAU;AACpC,EAAA3C,GAAe,MAAM0C,CAAK,IAAIC;AAChC;AAEA,SAASC,GAAOlC,GAAImC,IAAU,IAAI;AAChC,EAAApC,GAAOC,CAAE,IAAIe,GAAMf,CAAE,IAAIoC,GAAKpC,GAAImC,CAAO;AAC3C;AAEA,eAAeE,GAAWrC,GAAI;;AAC5B,QAAMsC,KAAKlC,IAAAlB,GAAS,MAAMc,CAAE,MAAjB,gBAAAI,EAAoB,MAAM;AAGrC,UAFgBkC,IAAK,MAAMA,EAAG,EAAC,IAAAtC,EAAE,CAAC,IAAI,QAEnB;AACrB;AAEA,eAAeoC,GAAKpC,GAAImC,IAAU,IAAI;;AAKpC,MAHIpC,GAAOC,CAAE,KAGT,CADY,MAAMqC,GAAWrC,CAAE,EACrB;AAId,EAAImC,EAAQ,UAAQJ,GAAY/B,GAAImC,EAAQ,MAAM;AAIlD,QAAMI,KAAanC,IAAA,SAAS,eAAed,GAAe,MAAMU,CAAE,CAAC,MAAhD,gBAAAI,EAAmD,QAAQ;AAC9E,EAAImC,KAAYT,GAAYS,EAAW,EAAE;AAEzC,QAAMC,IAAgBjD,GAAQ,MAAM,OAAO,CAAAoC,MAClC,CAACjC,GAAa,MAAM,SAASiC,CAAC,KAAKhC,GAAY,MAAM,SAASgC,CAAC,CACvE;AAED,EAAApC,GAAQ,QAAQ,CAAC,GAAGiD,GAAexC,CAAE,GACrCf,KAAiB,oBAAI,KAAI,GACzBa,GAAgB,QAAQ,IACxB2C,GAAmB,GACfF,KAAYpB,GAAeoB,EAAW,EAAE;AAC9C;AAEA,eAAeG,GAAa1C,GAAI;;AAC9B,QAAMsC,KAAKlC,IAAAlB,GAAS,MAAMc,CAAE,MAAjB,gBAAAI,EAAoB,MAAM;AAGrC,UAFkBkC,IAAK,MAAMA,EAAG,EAAC,IAAAtC,EAAE,CAAC,IAAI,QAEnB;AACvB;AAEA,eAAe2C,GAAO3C,GAAI;AAIxB,EAHI,CAACD,GAAOC,CAAE,KAGV,CADc,MAAM0C,GAAa1C,CAAE,KAGvCe,GAAMf,GAAI,EAAE,MAAM,SAAU,CAAA;AAC9B;AAEA,SAAS4C,GAAkB5C,GAAI;AAE7B,EAAAJ,GAAgB,QAAQI,GACxB,WAAW,MAAMJ,GAAgB,QAAQ,MAAM,GAAG;AACpD;AAEA,eAAeiD,GAAc7C,GAAI;;AAC/B,QAAMsC,KAAKlC,IAAAlB,GAAS,MAAMc,CAAE,MAAjB,gBAAAI,EAAoB,MAAM;AAGrC,UAFmBkC,IAAK,MAAMA,EAAG,EAAC,IAAAtC,EAAE,CAAC,IAAI,QAEnB;AACxB;AAEA,eAAe8C,GAAQ9C,GAAI;AAIzB,EAHI,CAACD,GAAOC,CAAE,KAGV,CADe,MAAM6C,GAAc7C,CAAE,KAGzCe,GAAMf,GAAI,EAAE,MAAM,UAAW,CAAA;AAC/B;AAEA,SAAS+C,GAAmB/C,GAAI;AAE9B,EAAAH,GAAgB,QAAQG,GACxB,WAAW,MAAMH,GAAgB,QAAQ,MAAM,GAAG;AACpD;AAEA,eAAemD,GAAYhD,GAAI;;AAC7B,QAAMsC,KAAKlC,IAAAlB,GAAS,MAAMc,CAAE,MAAjB,gBAAAI,EAAoB,MAAM;AAGrC,UAFiBkC,IAAK,MAAMA,EAAG,EAAC,IAAAtC,EAAE,CAAC,IAAI,QAEnB;AACtB;AAEA,eAAee,GAAMf,GAAI,EAAE,MAAAiD,EAAI,IAAK,CAAA,GAAI;AAItC,EAHI,CAAClD,GAAOC,CAAE,KAGV,CADa,MAAMgD,GAAYhD,CAAE,MAIjCiD,MAAS,YAAUL,GAAkB5C,CAAE,GACvCiD,MAAS,aAAWF,GAAmB/C,CAAE,GAE7CT,GAAQ,QAAQA,GAAQ,MAAM,OAAO,CAAAoC,MAAKA,MAAM3B,CAAE,GAClD,OAAOV,GAAe,MAAMU,CAAE,GAC9BkD,GAAkB;AACpB;AAEA,SAASC,GAAS,EAAE,OAAAC,EAAO,IAAG,IAAI;AAChC,EAAIA,KAEF7D,GAAQ,QAAQ,CAAA,GAChBD,GAAe,QAAQ,CAAA,GACvB4D,GAAkB,KAElB3D,GAAQ,MAAM,QAAQwB,EAAK;AAE/B;AAEA,SAAS0B,KAAsB;AAC7B,EAAIzD,MAAe,CAACO,GAAQ,MAAM,WAClC,SAAS,iBAAiB,SAAS8D,EAAc,GACjD,SAAS,iBAAiB,WAAWC,EAAK,GAC1CtE,KAAc;AAChB;AAEA,SAASkE,KAAqB;AAC5B,EAAI,CAAClE,MAAeO,GAAQ,MAAM,WAClC,SAAS,oBAAoB,SAAS8D,EAAc,GACpD,SAAS,oBAAoB,WAAWC,EAAK,GAC7CtE,KAAc;AAChB;AAEA,SAASsE,GAAMC,GAAO;AACpB,MAAIA,EAAM,QAAQ,SAAU;AAC5B,QAAMC,IAAkB,CAAC,GAAGjE,GAAQ,KAAK,EAAE,QAAO,EAAG,KAAK,CAAAS,MAAMR,GAAO,MAAM,SAASQ,CAAE,CAAC;AACzF,EAAIwD,KAAiBb,GAAOa,CAAe;AAC7C;AAEA,SAASH,GAAeE,GAAO;;AAM7B,OAHK,oBAAI,QAAM,QAAO,IAAKtE,GAAe,QAAS,IAAG,OAGlDF,GAAe,EAAI;AAEvB,QAAM0E,IAAelE,GAAQ,MAAM,GAAG,EAAE;AAIxC,MAHI,CAACkE,KAGD,CAAChE,GAAgB,MAAM,SAASgE,CAAY,EAAG;AAEnD,QAAMxB,IAAW3C,GAAe,MAAMmE,CAAY,OAAKrD,IAAAlB,GAAS,MAAMuE,CAAY,MAA3B,gBAAArD,EAA8B,MAAM;AAG3F,EAAI6B,KAAYsB,EAAM,OAAO,QAAQ,IAAItB,CAAQ,EAAE,KAC/CsB,EAAM,OAAO,QAAQ,IAAIE,CAAY,EAAE,MAE3C3D,GAAgB,QAAQ,IACxB6C,GAAOc,CAAY;AACrB;AAIA,SAASC,KAAQ;AACf,EAAAP,GAAS,EAAE,OAAO,GAAM,CAAA,GACxB,OAAO,KAAKjE,GAAS,KAAK,EAAE,QAAQ4B,EAAU,GAC9C9B,KAAc,IACdC,KAAiB,MACjBM,GAAQ,QAAQ,CAAA,GAChBH,GAAgB,QAAQ,CAAA,GACxBE,GAAe,QAAQ,CAAA,GACvBE,GAAO,QAAQ,CAAA,GACfC,GAAgB,QAAQ,CAAA,GACxBC,GAAa,QAAQ,CAAA,GACrBC,GAAY,QAAQ,CAAA,GACpBC,GAAgB,QAAQ,MACxBC,GAAgB,QAAQ;AAC1B;AAgBO,SAAS8D,GAAO3D,IAAK,IAAI;AAE9B,QAAM4D,IAAQ,CAAAC,MAAQ,CAAA1B,MAAW0B,EAAK7D,GAAImC,CAAO;AAEjD,SAAO;AAAA;AAAA,IAEL,UAAU2B,GAAgB5E,EAAQ;AAAA,IAClC,iBAAiB6E,GAAS3E,EAAe;AAAA,IACzC,gBAAgB2E,GAASzE,EAAc;AAAA,IACvC,SAASyE,GAASxE,EAAO;AAAA,IACzB,QAAQwE,GAASvE,EAAM;AAAA,IACvB,iBAAiBuE,GAAStE,EAAe;AAAA,IACzC,cAAcsE,GAASrE,EAAY;AAAA,IACnC,aAAaqE,GAASpE,EAAW;AAAA,IAEjC,iBAAiBoE,GAASnE,EAAe;AAAA,IACzC,iBAAiBmE,GAASlE,EAAe;AAAA,IACzC,iBAAiBkE,GAASjE,EAAe;AAAA;AAAA,IAGzC,QAAQE,IAAK4D,EAAM7D,EAAM,IAAIA;AAAA,IAC7B,QAAQC,IAAK4D,EAAM3D,EAAM,IAAIA;AAAA,IAC7B,iBAAiB8D,GAAS1D,EAAe;AAAA,IACzC,eAAe0D,GAASxD,EAAa;AAAA,IACrC,cAAcwD,GAASvD,EAAY;AAAA,IACnC,gBAAgBuD,GAAStD,EAAc;AAAA,IACvC,cAAcsD,GAASrD,EAAY;AAAA,IACnC,gBAAgBqD,GAASpD,EAAc;AAAA;AAAA,IAGvC,QAAQX,IAAK4D,EAAM1B,EAAM,IAAIA;AAAA,IAC7B,MAAMlC,IAAK4D,EAAMxB,EAAI,IAAIA;AAAAA,IACzB,QAAQpC,IAAK4D,EAAMjB,EAAM,IAAIA;AAAA,IAC7B,SAAS3C,IAAK4D,EAAMd,EAAO,IAAIA;AAAA,IAC/B,OAAO9C,IAAK4D,EAAM7C,EAAK,IAAIA;AAAAA,IAC3B,UAAAoC;AAAA,IACA,OAAAO;AAAA,IACA,UAAA9C;AAAA,IACA,YAAAE;AAAA,IACA,oBAAAQ;AAAA,IACA,sBAAAE;AAAA,IACA,QAAAE;AAAA,IACA,WAAAV;AAAA,IACA,iBAAAY;AAAA,IACA,oBAAAX;AAAA,IACA,cAAAY;AAAA,IACA,iBAAAX;AAAA,IACA,aAAAY;AAAA,IACA,gBAAAX;AAAA,IACA,aAAAY;AAAA,EACJ;AACA;AC9WY,MAACiC,KAAmB;AAAA,EAC9B,KAAK;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA;AAAA,IAER,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA;AAKO,SAASC,GAAeC,GAAO;AAEpC,QAAMC,IAAMR,GAAM,GACZS,IAASC,GAAK,GACdC,IAAQC,GAAQ,GAIhBC,IAAUC,GAAO3F,IAAmB,IAAI,GAExC4F,IAAYpE,EAAS,MAAMqE,EAAMT,CAAK,CAAC,GAGvCU,IAAUtE,EAAS,MAChB,OACJ,KAAK0D,EAAe,EACpB,KAAK,CAAAa,MAAOH,EAAU,MAAMG,CAAG,MAAM,MAAS,CAClD,GAGK7C,IAAQ1B,EAAS,MAAM;AAC3B,QAAI,CAACsE,EAAQ,MAAO;AAEpB,UAAM5E,IAAK0E,EAAU,MAAME,EAAQ,KAAK;AAExC,WAAK5E,IAIDA,MAAO,UACFwE,KAAA,gBAAAA,EAAS,OAAMM,GAAK,2EAA2E,IAGjG9E,IAPE8E,GAAK,sBAAsBF,EAAQ,KAAK,2BAA2B;AAAA,EAQ7E,CAAA,GAGKG,IAAezE,EAAS,MAAM;;AAClC,QAAKsE,EAAQ;AACb,cAAOxE,IAAA+D,EAAI,SAAS,MAAMnC,EAAM,KAAK,MAA9B,gBAAA5B,EAAiC;AAAA,EACzC,CAAA,GAKK4E,IAAY1E,EAAS,MAClB6D,EAAI,QAAQ,MAAM,SAASnC,EAAM,KAAK,CAC9C,GAEKiD,IAAe3E,EAAS,MACvBsE,EAAQ,QAEN;AAAA,IACL,WAAWI,EAAU;AAAA,EAC3B,IAJ+B,CAAA,CAK5B,GAKKE,IAAS5E,EAAS,MACjBsE,EAAQ,QACFF,EAAU,MAAM,MAAMJ,EAAM,MAAMF,IADzB,MAGrB,GAEKe,IAAY7E,EAAS,MAAM;AAC/B,QAAI,CAACsE,EAAQ,MAAO,QAAO,CAAA;AAG3B,QAAI,CAACG,EAAa,MAAO,QAAO,CAAA;AAEhC,UAAM,EAAE,MAAAK,EAAM,IAAGL,EAAa;AAE9B,WAAIK,MAAS,YACJ,EAAE,oBAAoBpD,EAAM,MAAK,IAGnC;AAAA,MACL,iBAAiBoD;AAAA,MACjB,iBAAiBpD,EAAM;AAAA,MACvB,iBAAiBgD,EAAU;AAAA,IACjC;AAAA,EACG,CAAA,GAKKK,IAAa/E,EAAS,MACtB,CAACsE,EAAQ,SAASA,EAAQ,UAAU,aAAmB,CAAA,IACpD,EAAE,SAAAU,GAAS,WAAWC,EAAe,CAC7C,GAEKC,IAAWlF,EAAS,MACnBsE,EAAQ,QACN;AAAA,IACL,IAAIM,EAAO;AAAA,IACX,GAAGC,EAAU;AAAA,IACb,GAAGE,EAAW;AAAA,IACd,CAAC,WAAWT,EAAQ,KAAK,EAAE,GAAG5C,EAAM;AAAA,EAC1C,IAN+B,CAAA,CAO5B;AAKD,EAAAyD,EAAMzD,GAAO,CAAChC,GAAI0F,GAAGC,MAAc;AACjC,QAAI,CAAC3F,EAAI;AACT,UAAM4F,IAAUhB,EAAQ;AACxB,IAAAT,EAAI,mBAAmByB,GAAS5F,CAAE,GAElC2F,EAAU,MAAMxB,EAAI,qBAAqByB,GAAS5F,CAAE,CAAC;AAAA,EACzD,GAAK,EAAE,WAAW,GAAM,CAAA;AAMtB,WAASsF,EAAQ/B,GAAO;AAItB,QAAIA,EAAM,OAAO,YAAY,UAAU;AACrC,YAAMsC,IAAQtC,EAAM,OAAO,QAAQ,kCAAkC;AACrE,WAAIsC,KAAA,gBAAAA,EAAO,kBAAiB,QAAQ;AAClC,QAAAtC,EAAM,eAAc,GACpBA,EAAM,yBAAwB;AAC9B;AAAA,MACR;AAAA,IACA;AAKI,QAHAY,EAAI,YAAYnC,EAAM,OAAOkD,EAAO,KAAK,GAGrCN,EAAQ,UAAU,UAAW;AAUjC,KAPsB;AAAA,MACpB,SAAST,EAAI;AAAA,MACb,UAAUA,EAAI;AAAA,MACd,WAAWA,EAAI;AAAA,MACf,YAAYA,EAAI;AAAA,IACtB,EACgCS,EAAQ,KAAK,KAAKT,EAAI,QAC5CnC,EAAM,KAAK;AAAA,EACrB;AAKE,WAASuD,EAAgBhC,GAAO;AAG9B,IAFIA,EAAM,OAAO,QAAQ,oBAAoB,UAEzC,CADU,CAAC,SAAS,SAAS,aAAa,EACnC,SAASA,EAAM,IAAI,KAC9B+B,EAAQ/B,CAAK;AAAA,EACjB;AAGE,SAAO;AAAA,IACL,UAAAiC;AAAA,IACA,cAAAP;AAAA,EACJ;AACA;ACzNO,MAAMxG,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,UAAU;AAAA;AAAA,IAER,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA;AAAA,IAEN,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,MAAM,MAAM,KAAK;AAAA,IACnC,WAAW,CAACI,MAAQ,CAAC,IAAI,MAAM,MAAM,KAAK,EAAE,SAASA,CAAG;AAAA,EACzD;AAAA,EACD,MAAM;AAAA;AAAA,IAEJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa,CAAC,UAAU,UAAU,OAAO;AAAA,IACzC,WAAW,CAAAA,MAAOJ,GAAgB,KAAK,YAAY,SAASI,CAAG;AAAA,EAChE;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA;AAAA;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,WAAW,aAAa,YAAY,YAAY,WAAW,YAAY,YAAY,YAAY,QAAQ,SAAS,OAAO;AAAA,IACzI,UAAUD,GAAO;AACf,aAAOH,GAAgB,QAAQ,YAAY,SAASG,CAAK;AAAA,IAC/D;AAAA,EACG;AAAA;AAAA;AAAA,EAID,GAAGoF;AAAA;AAAA,EAGH,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,YAAY;AAAA,EACb;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,EACb;AACH,GAEatF,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,EACjB;AACA;;;;;8CCvFaF,KAAkB;AAAA,EAC7B,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,eAAe;AAAA,IACb,SAAS,CAAE;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,SAAS,CAAE;AAAA,IACX,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA;AAAA,EAED,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM,CAAC,MAAM,MAAM;AAAA,IACnB,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,GAAG,CAAC;AAAA,IAClB,UAAUG,GAAO;AACf,aAAOH,GAAgB,KAAK,YAAY,SAASG,CAAK;AAAA,IAC5D;AAAA,EACG;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,OAAO;AAAA,IACzB,UAAUA,GAAO;AACf,aAAOH,GAAgB,QAAQ,YAAY,SAASG,CAAK;AAAA,IAC/D;AAAA,EACA;AACA,GAEaF,KAAkB;AAAA,EAC7B,OAAS;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACD,sBAAsB;AAAA,IACpB,aAAa;AAAA,EACd;AACH,GACaC,KAAkB;AAAA,EAC7B,OAAO;AAAA,IACL,aAAa;AAAA,EACd;AACH;;;;;8CC5IaF,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,UAAU;AAAA;AAAA,IAER,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,QAAQ,OAAO;AAAA,IACjC,UAAUG,GAAO;AACf,aAAOH,GAAgB,aAAa,YAAY,SAASG,CAAK;AAAA,IACpE;AAAA,EACG;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA;AAAA,IAEN,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,MAAM,MAAM,KAAK;AAAA,IACnC,UAAUA,GAAO;AACf,aAAOH,GAAgB,KAAK,YAAY,SAASG,CAAK;AAAA,IAC5D;AAAA,EACG;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA;AAAA,IAEJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW,CAAAC,MAAO,CAAC,UAAU,UAAU,OAAO,EAAE,SAASA,CAAG;AAAA,EAC7D;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAKb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,WAAW,YAAY,YAAY,WAAW,YAAY,YAAY,QAAQ,QAAQ,UAAU,UAAU,OAAO,SAAS,OAAO;AAAA,IACnJ,UAAUD,GAAO;AACf,aAAOH,GAAgB,QAAQ,YAAY,SAASG,CAAK;AAAA,IAC/D;AAAA,EACG;AAAA;AAAA,EAED,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,YAAY;AAAA,EACb;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,YAAY;AAAA,EACb;AACH,GAEaF,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,MAAM;AAAA,IACJ,aAAa;AAAA,EAEjB;AACA;;;;;8CClHaF,KAAkB;AAAA;AAAA,EAG7B,IAAI;AAAA,IACF,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA,EAID,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,MAEX;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,MAC9C;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,MAC9C;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA;AAAA;AAAA,MAG9C;AAAA,IACD;AAAA,IACD,WAAW,CAAAI,MAAOJ,GAAgB,MAAM,YAAY,SAASI,CAAG;AAAA,EACjE;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW,CAAAA,MAAO,CAAC,eAAe,UAAU,WAAW,QAAQ,SAAS,EAAE,SAASA,CAAG;AAAA,IACtF,cAAc;AAAA,EACf;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IAIb,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa,CAAC,MAAM,MAAM,MAAM,eAAe,QAAQ;AAAA,IACvD,WAAW,CAAAA,MAAOJ,GAAgB,KAAK,YAAY,SAASI,CAAG;AAAA,EAChE;AAAA,EACD,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,cAAc;AAAA;AAAA,EACf;AAAA,EACD,oBAAoB;AAAA,IAClB,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,IACd,WAAW,CAAAA,MAAO,CAAC,YAAY,UAAU,SAAS,WAAW,SAAS,SAAS,EAAE,SAASA,CAAG;AAAA,EAC9F;AAAA;AAAA;AAAA,EAGD,GAAGiH,GAAY;AACjB,GAEapH,KAAkB;AAAA,EAC7B,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,OAAO;AAAA,IACL,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,QAAQ;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,SAAS;AAAA,IACP,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,mBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,EACjB;AACA;AAEO,SAASoH,KAAe;AAC7B,SAAO;AAAA,IACL,cAAc;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA,IACd;AAAA,IACD,gBAAgB;AAAA,MACd,aAAa;AAAA,MACb,aAAa;AAAA,IACd;AAAA,IACD,iBAAiB;AAAA,MACf,aAAa;AAAA,MACb,aAAa;AAAA,IACd;AAAA,IACD,eAAe;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,IACnB;AAAA,EACA;AACA;ACpNO,SAASC,GAAgB,EAAE,MAAAC,IAAO,IAAI,MAAAC,IAAO,CAAA,GAAI,YAAAC,IAAa,IAAI,iBAAAC,KAAmB;AAE1F,QAAMC,IAAiB,OAAO,QAAQH,CAAI,EAAE,IAAI,CAAC,CAACI,GAAMxF,CAAI,MAAM;AAChE,QAAIyF,IAAc,EAAE,GAAGzF,EAAI;AAE3B,WAAIyF,EAAY,gBACdA,EAAY,cAAcA,EAAY,YAAY,WAAW,aAAaN,CAAI,IAG5EE,EAAW,SAASG,CAAI,MAC1BC,EAAY,eAAe,KAGzBH,MACFG,IAAcH,EAAgBE,GAAMC,CAAW,IAG1C,CAACD,GAAMC,CAAW;AAAA,EAC1B,CAAA;AAED,SAAO,OAAO,YAAYF,CAAc;AAC1C;AAIO,SAASG,GAA0BC,GAAK;AAC7C,QAAMJ,IAAiB,OAAO,QAAQI,CAAG,EAAE,IAAI,CAAC,CAAC3B,GAAK2B,CAAG,MAEhD,CADU3B,EAAI,QAAQ,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,YAAW,IAAKA,EAAI,MAAM,CAAC,GACzD2B,CAAG,CACvB;AACD,SAAO,OAAO,YAAYJ,CAAc;AAC1C;AAGO,SAASK,GAAmBD,GAAK;AACtC,QAAMJ,IAAiB,OAAO,QAAQI,CAAG,EAAE,OAAO,CAAC,CAAC3B,CAAG,MAAM,CAACA,EAAI,WAAW,IAAI,CAAC;AAClF,SAAO,OAAO,YAAYuB,CAAc;AAC1C;AC3BO,MAAM3H,KAAkB;AAAA,EAC7B,GAAGgI,GAAmBC,EAAwB;AAChD,GAEahI,KAAkB;AAAA,EAC7B,GAAGiI;AAAAA,EACH,GAAGJ,GAA0BT,GAAc,CAAA;AAC7C,GAEanH,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,MACT,IAAI;AAAA,QACF,aAAa;AAAA,QACb,SAAS;AAAA,MACV;AAAA,MACD,OAAO;AAAA,QACL,aAAa;AAAA,QACb,SAAS;AAAA,MACV;AAAA,MACD,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,MACV;AAAA,MACD,SAAS;AAAA,QACP,aAAa;AAAA,QACb,SAAS;AAAA,MACjB;AAAA,IACA;AAAA,EACA;AACA;;;;;8CC3CaF,KAAkB;AAAA,EAC7B,UAAU;AAAA,IACR,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,IAC9B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA;AAAA,EAID,GAAGqH,GAAY;AACjB;AAEO,SAASA,KAAe;AAC7B,SAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MAMb,SAAS;AAAA,MACT,aAAa;AAAA,IACnB;AAAA,EACA;AACA;AAEO,MAAMpH,KAAkB,CAAA,GAElBC,KAAkB,CAAA;;;;;;8CC/DlBF,KAAkB;AAAA;AAAA,EAI7B,IAAI;AAAA;AAAA,IAEF,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA,EAID,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IAKb,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,IAC9B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,SAAS;AAAA,EACV;AAAA,EACD,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,MAAM,CAAC,SAAS,MAAM;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA,IAIb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA,EAED,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA;AAAA;AAAA,MAGX;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,MAC9C;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,MAC9C;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,IAC/C;AAAA,IACD,WAAW,CAAAI,MAAOJ,GAAgB,MAAM,YAAY,SAASI,CAAG;AAAA,EACjE;AAAA,EACD,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW,CAAAA,MAAO,CAAC,WAAW,MAAM,EAAE,SAASA,CAAG;AAAA,EACnD;AAAA;AAAA;AAAA,EAID,GAAG+H,GAAoB;AACzB;AAGO,SAASA,KAAuB;AACrC,QAAM,EAAE,SAAAC,EAAO,IAAKf,GAAY;AAChC,SAAO,EAAE,SAAAe,EAAO;AAClB;AAGO,MAAMnI,KAAkB,CAAA,GAElBC,KAAkB;AAAA;AAE/B,GCxJaF,KAAkB;AAAA,EAC7B,GAAGsH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMe;AAAAA,IACN,YAAY;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACD,iBAAiBC;AAAA,EACrB,CAAG;AAAA,EAED,GAAGN,GAAmBC,EAAwB;AAAA;AAAA,EAG9C,WAAW;AAAA,IACT,MAAM,CAAC,QAAQ,QAAQ,QAAQ,KAAK;AAAA,IACpC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEahI,KAAkB;AAAA,EAC7B,GAAGqH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMiB;AAAAA,IACN,YAAY,CAAC,mBAAmB,UAAU;AAAA,EAC9C,CAAG;AAAA,EAED,GAAGL;AAAAA,EACH,GAAGJ,GAA0BK,IAAsB;AAAA;AAAA,EAGnD,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,EACjB;AACA,GAEajI,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,MACT,GAAGoH,GAAgB;AAAA,QACjB,MAAM;AAAA,QACN,MAAMkB,GAAuB,QAAQ;AAAA,MAC7C,CAAO;AAAA,MACD,GAAGC;AAAAA,IACT;AAAA,EACA;AACA;AAEA,SAASH,GAAwBV,GAAMxF,GAAM;AAC3C,SAAIwF,MAAS,aAEXxF,EAAK,cAAc,+LACnBA,EAAK,UAAU,WAEVA;AACT;;;;;;8CClGapC,KAAkB;AAAA;AAAA,EAE7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBV;AAAA;AAAA,EAED,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA;AAAA;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,eAAe;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACb;AACA,GAEaC,KAAkB,CAAA,GAElBC,KAAkB,CAAA;;;;;8CC/ClBF,KAAkB;AAAA;AAAA,EAE7B,OAAO;AAAA,IACL,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,EACX;AAAA;AAAA,EAED,aAAa;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,MAAM,MAAM,MAAM,IAAI;AAAA,IACpC,UAAUG,GAAO;AACf,aAAOH,GAAgB,KAAK,YAAY,SAASG,CAAK;AAAA,IAC5D;AAAA,EACG;AACH,GAEaF,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,kBAAkB;AAAA,IAChB,aAAa;AAAA,EACd;AAAA,EACD,aAAa;AAAA,IACX,aAAa;AAAA,EAEd;AAAA,EACD,MAAM;AAAA,IACJ,aAAa;AAAA,EAEjB;AACA;;;;;8CC9CaF,KAAkB;AAAA,EAC7B,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa,CAAC,QAAQ,OAAO;AAAA,IAC7B,WAAW,CAAAI,MAAOJ,GAAgB,MAAM,YAAY,SAASI,CAAG;AAAA,EACjE;AAAA,EACD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,SAAS;AAAA,IACT,aAAa,CAAC,MAAM,MAAM,MAAM,aAAa;AAAA,IAC7C,WAAW,CAAAA,MAAOJ,GAAgB,KAAK,YAAY,SAASI,CAAG;AAAA,EAChE;AAAA,EACD,oBAAoB;AAAA,IAClB,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAGaH,KAAkB;AAAA;AAE/B,GCzBaD,KAAkB;AAAA,EAC7B,GAAGsH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMe;AAAAA,IACN,YAAY;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AAAA,EACA,CAAG;AAAA,EACD,GAAGJ;AACL,GAEahI,KAAkB;AAAA,EAC7B,GAAGqH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMiB;AAAAA,IACN,YAAY,CAAC,mBAAmB,UAAU;AAAA,EAC9C,CAAG;AAAA,EACD,GAAGL;AACL,GAEahI,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,MACT,GAAGoH,GAAgB;AAAA,QACjB,MAAM;AAAA,QACN,MAAMkB,GAAuB,QAAQ;AAAA,MACtC,CAAA;AAAA,IACP;AAAA,EACA;AACA;;;;;8CChDaxI,KAAkB;AAAA;AAAA,EAE7B,OAAO;AAAA,IACL,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA;AAAA,EAGD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACb;AACA,GAEaC,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACD,kBAAkB;AAAA,IAChB,aAAa;AAAA;AAAA,EAEd;AAAA,EACD,MAAM;AAAA,IACJ,aAAa;AAAA,EAGd;AAAA,EACD,eAAe;AAAA,IACb,aAAa;AAAA;AAAA,EAEd;AACH;;;;;8CClEaF,KAAkB;AAAA,EAC7B,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS,MAAM,CAAE;AAAA,IACjB,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBT,gBAAgB;AAAA,EACjB;AAAA,EACD,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AACH,GAEaC,KAAkB;AAAA,EAC7B,iBAAiB;AAAA,IACf,aAAa;AAAA;AAAA,EAEd;AAAA,EACD,oBAAoB;AAAA,IAClB,aAAa;AAAA,IAIb,aAAa;AAAA,EACjB;AACA,GAEaC,KAAkB;AAAA,EAC7B,yBAAyB;AAAA,IACvB,aAAa;AAAA;AAAA,EAEjB;AACA;;;;;8CC7FaF,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,UAAU,UAAU,OAAO;AAAA,IACzC,UAAUI,GAAK;AACb,aAAOJ,GAAgB,KAAK,YAAY,SAASI,CAAG;AAAA,IAC1D;AAAA,EACG;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM,CAAC,QAAQ,QAAQ,MAAM;AAAA,IAC7B,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,OAAO;AAAA,IACzB,UAAUA,GAAK;AACb,aAAOJ,GAAgB,QAAQ,YAAY,SAASI,CAAG;AAAA,IAC7D;AAAA,EACA;AACA,GAEaH,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,MACT,YAAY;AAAA,QACV,aAAa;AAAA,QACb,SAAS;AAAA,MACjB;AAAA,IACA;AAAA,EACA;AACA;;;;;8CCjEaF,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,IAAI;AAAA,IACF,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAKb,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,OAAO;AAAA,IACzB,UAAUG,GAAO;AACf,aAAOH,GAAgB,QAAQ,YAAY,SAASG,CAAK;AAAA,IAC1D;AAAA,EACF;AACH,GAEaF,KAAkB;AAAA,EAC7B,sBAAsB;AAAA,IACpB,aAAa;AAAA,EAEjB;AACA,GAEaC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,EACjB;AACA;;;;;8CCrDawI,KAA6B;AAAA,EACxC,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa,CAAC,QAAQ;AAAA;AAAA,IAEtB,WAAW,CAAAtI,MAAOsI,GAA2B,QAAQ,YAAY,SAAStI,CAAG;AAAA,EAC9E;AAAA;AAAA,EAEA,SAAS;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACA,WAAW;AAAA,IACV,MAAM;AAAA;AAAA,IAEN,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEauI,KAA8B;AAAA,EACzC,OAAO;AAAA,IACL,aAAa;AAAA,EACjB;AACA,GAKa3I,KAAkB;AAAA,EAC7B,GAAG0I;AAAA;AAAA,EAGH,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEazI,KAAkB;AAAA,EAC7B,GAAG0I;AAAA;AAAA,EAGH,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,EACjB;AACA,GAEazI,KAAkB,CAAA;;;;;;;8CC/FlBF,KAAkB;AAAA,EAC7B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,SAAS;AAAA,IACT,aAAa,CAAC,MAAM,MAAM,MAAM,aAAa;AAAA,IAC7C,WAAW,CAAAI,MAAOJ,GAAgB,KAAK,YAAY,SAASI,CAAG;AAAA,EAChE;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAGaH,KAAkB;AAAA;AAE/B,GCXaD,KAAkB;AAAA,EAC7B,GAAGsH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMe;AAAAA,IACN,YAAY;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AAAA,EACA,CAAG;AAAA,EACD,GAAGJ;AACL,GAEahI,KAAkB;AAAA,EAC7B,GAAGqH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMiB;AAAAA,IACN,YAAY,CAAC,mBAAmB,UAAU;AAAA,EAC9C,CAAG;AAAA,EACD,GAAGL;AACL,GAEahI,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,MACT,GAAGoH,GAAgB;AAAA,QACjB,MAAM;AAAA,QACN,MAAMkB,GAAuB,QAAQ;AAAA,MACtC,CAAA;AAAA,IACP;AAAA,EACA;AACA;;;;;8CCjDaxI,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,wBAAwB;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,QAAQ,MAAM,IAAI;AAAA,IACpC,WAAW,CAACG,MACH,CAAC,IAAI,QAAQ,MAAM,IAAI,EAAE,SAASA,CAAK;AAAA,EAEjD;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,IAKb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA;AAAA,EAED,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,YAAY;AAAA,EACb;AAAA,EACD,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,YAAY;AAAA,EACb;AAAA,EACD,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,YAAY;AAAA,EACb;AACH,GAEaF,KAAkB;AAAA,EAC7B,OAAS;AAAA,IACP,aAAa;AAAA,IAGb,aAAa;AAAA,EACd;AAAA,EACD,mBAAmB;AAAA,IACjB,aAAa;AAAA,IAEb,aAAa;AAAA,EACd;AAAA,EACD,wBAAwB;AAAA,IACtB,aAAa;AAAA,IAEb,aAAa;AAAA,EACd;AAAA,EACD,0BAA0B;AAAA,IACxB,aAAa;AAAA,IAEb,aAAa;AAAA,EACd;AAAA,EACD,eAAe;AAAA,IACb,aAAa;AAAA;AAAA;AAAA,EAGd;AAAA,EACD,eAAe;AAAA,IACb,aAAa;AAAA;AAAA,EAEd;AACH,GAEaC,KAAkB;AAAA,EAC7B,SAAW;AAAA,IACT,aAAa;AAAA;AAAA,EAEd;AAAA,EACD,OAAS;AAAA,IACP,aAAa;AAAA,EAGd;AAAA,EACD,UAAY;AAAA,IACV,aAAa;AAAA,EAGd;AAAA,EACD,QAAU;AAAA,IACR,aAAa;AAAA,EACjB;AACA;;;;;8CCrKaF,KAAkB;AAAA,EAC7B,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,SAAS;AAAA,EACV;AAAA;AAAA,EAED,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,cAAc;AAAA,EACf;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM,CAAC,QAAQ,QAAQ,MAAM;AAAA,IAC7B,SAAS;AAAA,IACT,aACE;AAAA,IACF,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,SAAS;AAAA,EACV;AAAA,EACD,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,SAAS;AAAA,EACV;AACH,GAEaC,KAAkB,CAAA,GC3ClBD,KAAkB;AAAA,EAC7B,GAAGiI;AACL,GAEahI,KAAkB;AAAA,EAC7B,GAAGiI;AACL,GAEahI,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,MACT,YAAY;AAAA,QACV,aAAa;AAAA,QACb,SAAS;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACH;;;;;8CCtBaF,KAAkB;AAAA,EAC7B,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEaC,KAAkB,CAAA,GCXlBD,KAAkB;AAAA,EAC7B,GAAGiI;AACL,GAEahI,KAAkB;AAAA,EAC7B,GAAGiI;AACL,GAEahI,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW,CAAA;AAAA,EACZ;AAAA,EACD,OAAO;AAAA,IACL,aAAa;AAAA,IACb,WAAW,CAAA;AAAA,EACf;AACA;;;;;8CCxBaF,KAAkB;AAAA,EAC7B,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEaC,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW,CAAA;AAAA,EACf;AACA;;;;;8CChBaF,KAAkB;AAAA,EAC7B,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEaC,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW,CAAA;AAAA,EACf;AACA;;;;;8CChBaF,KAAkB;AAAA,EAC7B,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEaC,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW,CAAA;AAAA,EACf;AACA;;;;;8CC5BaF,KAAkB;AAAA,EAC7B,UAAU;AAAA;AAAA,IAER,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA;AAAA,IAEN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA;AAAA;AAAA;AAAA,IAIP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,EACP;AAAA,EACD,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,UAAU,YAAY,YAAY,SAAS,WAAW,YAAY,WAAW,UAAU;AAAA,IACrG,UAAUG,GAAO;AACb,aAAOH,GAAgB,OAAO,YAAY,SAASG,CAAK;AAAA,IAC3D;AAAA,EACF;AAAA,EACD,MAAM;AAAA;AAAA,IAEJ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,UAAU,UAAU,OAAO;AAAA,IACzC,UAAUA,GAAO;AACf,aAAOH,GAAgB,KAAK,YAAY,SAASG,CAAK;AAAA,IACvD;AAAA,EACF;AAAA,EACD,SAAS;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,UAAS,cAAa,iBAAgB,YAAW,QAAQ,OAAO;AAAA,IAC9E,UAAUA,GAAO;AACf,aAAOH,GAAgB,QAAQ,YAAY,SAASG,CAAK;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA,EAED,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAO;AAAA,IACP,SAAS;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACT,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AACH,GAEaF,KAAkB,CAAA,GAElBC,KAAkB,CAAA;;;;;8CC7ElBF,KAAkB;AAAA,EAC7B,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEaC,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW,CAAA;AAAA,EACf;AACA;;;;;8CChBaF,KAAkB;AAAA,EAC7B,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEaC,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW,CAAA;AAAA,EACf;AACA;;;;;8CCtBaF,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,IAC1C,UAAUG,GAAO;AACf,aAAOH,GAAgB,UAAU,YAAY,SAASG,CAAK;AAAA,IACjE;AAAA,EACG;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,cAAc,UAAU;AAAA,IACtC,UAAUA,GAAO;AACf,aAAOH,GAAgB,OAAO,YAAY,SAASG,CAAK;AAAA,IAC9D;AAAA,EACG;AAAA,EACD,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA;AAAA,EAED,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,YAAY;AAAA,EAChB;AACA,GAEaF,KAAkB;AAAA,EAC7B,kBAAkB;AAAA,IAChB,aAAa;AAAA,EACjB;AACA,GAEaC,KAAkB;AAAA,EAC7B,QAAQ;AAAA,IACN,aAAa;AAAA,EAEd;AAAA,EACD,MAAM;AAAA,IACJ,aAAa;AAAA,EAEjB;AACA;;;;;8CCzHaF,KAAkB;AAAA;AAAA;AAAA;AAAA,EAM7B,UAAU;AAAA,IACR,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,IAC9B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA;AAAA;AAAA,MAGX;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,MAC9C;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,MAC9C;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,IAC/C;AAAA,IACD,WAAW,CAAAI,MAAOJ,GAAgB,cAAc,YAAY,SAASI,CAAG;AAAA,EACzE;AAAA,EACD,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa,CAAC,UAAU,MAAM,MAAM,MAAM,aAAa;AAAA,IACvD,WAAW,CAAAA,MAAOJ,GAAgB,aAAa,YAAY,SAASI,CAAG;AAAA,EACxE;AAAA,EACD,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,SAAS;AAAA,EACV;AAAA,EACD,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,MAAM,CAAC,SAAS,MAAM;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA,IAIb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,GAAGwI,GAAoB;AACzB;AAEO,SAASA,KAAqB;AAEnC,QAAM,EAAE,cAAAC,GAAc,eAAAC,EAAa,IAAKC,GAAmB,GACrD,EAAE,SAAAX,EAAO,IAAKY,GAA0B;AAC9C,SAAO;AAAA,IACL,cAAAH;AAAA,IACA,eAAAC;AAAA,IACA,SAAAV;AAAA,EACJ;AACA;AAGO,MAAMnI,KAAkB;AAAA,EAC7B,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,OAAO;AAAA,IACL,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,EACjB;AACA,GC1MaD,KAAkB;AAAA,EAC7B,GAAGgI,GAAmBC,EAAwB;AAAA;AAAA,EAE9C,WAAW;AAAA,IACT,MAAM,CAAC,QAAQ,QAAQ,QAAQ,KAAK;AAAA,IACpC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEahI,KAAkB;AAAA,EAC7B,GAAGiI;AAAAA,EACH,GAAGJ,GAA0Bc,IAAoB;AAAA;AAAA,EAGjD,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,EACjB;AACA,GAEa1I,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,MACT,GAAGoH,GAAgB;AAAA,QACjB,MAAM;AAAA,QACN,MAAMkB,GAAuB,QAAQ;AAAA,QACrC,YAAY,CAAC,UAAU,SAAS;AAAA,MACjC,CAAA;AAAA,IACP;AAAA,EACG;AAAA,EACD,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,WAAU;AAAA,MACR,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,MACV;AAAA,MACD,UAAU;AAAA,QACR,aAAa;AAAA,QACb,SAAS;AAAA,MACjB;AAAA,IACA;AAAA,EACA;AACA;;;;;8CCvEaxI,KAAkB;AAAA;AAAA;AAAA;AAAA,EAK7B,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAGaC,KAAkB;AAAA;AAE/B,GCxCaD,KAAkB;AAAA,EAC7B,GAAGsH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAM2B;AAAAA,IACN,YAAY,CAAC,QAAQ;AAAA,EACzB,CAAG;AAAA,EACD,GAAGhB;AACL,GAEahI,KAAkB;AAAA,EAC7B,GAAGqH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAM4B;AAAAA,EACV,CAAG;AAAA,EACD,GAAGhB;AACL,GAEahI,KAAkB;AAAA,EAC7B,GAAGoH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAM6B;AAAAA,EACP,CAAA;AACH;;;;;8CCnCanJ,KAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,UAAU;AAAA;AAAA,IAER,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA;AAAA,IAEN,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,MAAM,MAAM,IAAI;AAAA,IAClC,WAAW,CAAAI,MAAOJ,GAAgB,KAAK,YAAY,SAASI,CAAG;AAAA,EAChE;AAAA,EACD,MAAM;AAAA;AAAA,IAEJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa,CAAC,UAAU,UAAU,OAAO;AAAA,IACzC,WAAW,CAAAA,MAAOJ,GAAgB,KAAK,YAAY,SAASI,CAAG;AAAA,EAChE;AAAA,EACD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA;AAAA;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,IAAI,QAAQ,YAAY,YAAY,gBAAgB,OAAO;AAAA,IACzE,UAAUD,GAAO;AACf,aAAOH,GAAgB,QAAQ,YAAY,SAASG,CAAK;AAAA,IAC/D;AAAA,EACG;AAAA;AAAA;AAAA,EAID,GAAGoF;AACL,GAEatF,KAAkB,CAAA,GAElBC,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,EACjB;AACA;;;;;8CClEaF,KAAkB;AAAA;AAAA,EAG7B,IAAI;AAAA;AAAA,IAEF,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA,EAGD,UAAU;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,QAAQ,WAAW,YAAY,UAAU;AAAA,IACvD,WAAW,CAACI,MAAQJ,GAAgB,QAAQ,YAAY,SAASI,CAAG;AAAA,EACxE;AACA,GAGaH,KAAkB;AAAA,EAC7B,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,OAAO;AAAA,IACL,aAAa;AAAA,IACb,aAAa;AAAA,EACjB;AACA,GC5BaD,KAAkB;AAAA,EAC7B,GAAGsH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMe;AAAAA,IACN,YAAY;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AAAA,EACA,CAAG;AAAA,EACD,GAAGJ;AACL,GAEahI,KAAkB;AAAA,EAC7B,GAAGqH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMiB;AAAAA,IACN,YAAY,CAAC,mBAAmB,UAAU;AAAA,EAC9C,CAAG;AAAA,EACD,GAAGL;AACL,GAEahI,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,MACT,GAAGoH,GAAgB;AAAA,QACjB,MAAM;AAAA,QACN,MAAMkB,GAAuB,QAAQ;AAAA,MACtC,CAAA;AAAA,IACP;AAAA,EACA;AACA;;;;;8CCxDaxI,KAAkB;AAAA;AAAA,EAE7B,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA,EAED,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA;AAAA,EAGD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA,MACX;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,MAC9C;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,MAC9C;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,IAC/C;AAAA,IACD,WAAW,CAAAI,MAAOJ,GAAgB,MAAM,YAAY,SAASI,CAAG;AAAA,EACpE;AACA,GAGaH,KAAkB;AAAA;AAE/B,GC5BaD,KAAkB;AAAA,EAC7B,GAAGsH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMe;AAAAA,IACN,YAAY;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACL,CAAG;AAAA,EACD,GAAGJ;AACL,GAEahI,KAAkB;AAAA,EAC7B,GAAGqH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMiB;AAAAA,IACN,YAAY;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AAAA,EACA,CAAG;AAAA,EACD,GAAGL;AACL,GAEahI,KAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,WAAW;AAAA,MACT,GAAGoH,GAAgB;AAAA,QACjB,MAAM;AAAA,QACN,MAAMkB,GAAuB,QAAQ;AAAA,QACrC,YAAY,CAAC,SAAS,UAAU,SAAS;AAAA,MAC1C,CAAA;AAAA,IACP;AAAA,EACA;AACA;;;;;8CC1DaxI,KAAkB;AAAA,EAC7B,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,IAC9B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa;AAAA;AAAA;AAAA,MAGX;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,MAC9C;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,MAC9C;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAgB;AAAA,IAC/C;AAAA,IACD,WAAW,CAAAI,MAAOJ,GAAgB,cAAc,YAAY,SAASI,CAAG;AAAA,EACzE;AAAA,EACD,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,IACT,aAAa,CAAC,UAAU,MAAM,MAAM,MAAM,aAAa;AAAA,IACvD,WAAW,CAAAA,MAAOJ,GAAgB,aAAa,YAAY,SAASI,CAAG;AAAA,EACxE;AAAA,EACD,UAAU;AAAA,IACR,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA,EAGA,SAAS;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,GAAGiH,GAAc;AACnB;AAEO,SAASA,KAAe;AAE7B,QAAM,EAAE,cAAAwB,GAAc,eAAAC,EAAa,IAAKC,GAAmB,GACrD,EAAE,SAAAX,EAAO,IAAKY,GAA0B;AAC9C,SAAO;AAAA,IACL,cAAAH;AAAA,IACA,eAAAC;AAAA,IACA,SAAAV;AAAA,EACJ;AACA;AAGO,MAAMnI,KAAkB;AAAA,EAC7B,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,OAAO;AAAA,IACL,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,cAAc;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,eAAe;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EACjB;AACA,GCpKaD,KAAkB;AAAA,EAC7B,GAAGiI;AAAAA;AAAAA,EAGH,WAAW;AAAA,IACT,MAAM,CAAC,QAAQ,QAAQ,QAAQ,KAAK;AAAA,IACpC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAEahI,KAAkB;AAAA,EAC7B,GAAGiI;AAAAA;AAAAA,EAGH,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACD,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,aAAa;AAAA,EACjB;AACA,GAEahI,KAAkB,CAAA;;;;;8CCnClBF,KAAkB;AAAA;AAAA;AAAA;AAAA,EAK7B,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA,GAGaC,KAAkB;AAAA;AAE/B,GCxCaD,KAAkB;AAAA,EAC7B,GAAGsH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAM8B;AAAAA,IACN,YAAY,CAAC,QAAQ;AAAA,EACzB,CAAG;AAAA,EACD,GAAGnB;AACL,GAEahI,KAAkB;AAAA,EAC7B,GAAGqH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAM+B;AAAAA,EACV,CAAG;AAAA,EACD,GAAGnB;AACL,GAEahI,KAAkB;AAAA,EAC7B,GAAGoH,GAAgB;AAAA,IACjB,MAAM;AAAA,IACN,MAAMgC;AAAAA,EACP,CAAA;AACH;;;;;8CCrCatJ,KAAkB;AAAA,EAC7B,WAAW;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS,MAAM,CAAE;AAAA,IACjB,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBT,gBAAgB;AAAA,EACjB;AAAA,EACD,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IAIb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW,CAACG,MACH,CAAC,QAAQ,UAAU,aAAa,EAAE,SAASA,CAAK;AAAA,EAE1D;AAAA,EACD,WAAW;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IAGb,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW,CAACA,MACH,CAAC,IAAI,SAAS,EAAE,SAASA,CAAK;AAAA,EAExC;AAAA,EACD,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IAEb,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AACH,GAEaF,KAAkB;AAAA,EAC7B,oBAAoB;AAAA,IAClB,aAAa;AAAA,IAIb,aAAa;AAAA,EACd;AAAA,EACD,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,EACjB;AACA,GAEaC,KAAkB;AAAA,EAC7B,eAAe;AAAA,IACb,aAAa;AAAA;AAAA,EAEd;AAAA,EACD,aAAa;AAAA,IACX,aAAa;AAAA;AAAA,EAEd;AAAA,EACD,eAAe;AAAA,IACb,aAAa;AAAA;AAAA,EAEd;AACH;;;;;;AC3GO,SAASqJ,GAAcC,IAAW,GAAG;AAC1C,QAAMC,IAAM,CAAA;AACZ,WAASC,IAAI,GAAGA,IAAIF,GAAUE;AAC5B,IAAAD,EAAI,KAAK7I,EAAIgF,IAAO,CAAC;AAGvB,SAAO6D;AACT;;;;;;;;;;ACVA,UAAMhE,IAAQkE,GACRnF,IAAOoF,GAEPC,IAAejJ,EAAI,IAAI,GACvBU,IAASV,EAAI,EAAK,GAElB,CAAEkJ,CAAa,IAAGP,GAAa,GAE/BQ,IAAYlI,EAAS,MAAMiI,EAAY,QAAQ,UAAU,GACzDE,IAAYnI,EAAS,MAAMiI,EAAY,QAAQ,QAAQ,GAEvDG,IAAgBpI,EAAS,MACrB4D,EAAM,cAAcA,EAAM,eAAeqE,EAAY,SAAUrE,EAAM,aAAa,EAC3F,GACKyE,IAAcrI,EAAS,MACpB4D,EAAM,aAAawE,EAAc,QAAQ3I,EAAO,KACxD;AAED,aAAS6I,IAAgB;AACvB,MAAA3F,EAAK,WAAWsF,EAAY,KAAK,GAC5BrE,EAAM,eAAYnE,EAAO,QAAQ,CAACA,EAAO;AAAA,IAChD;2BAIA8I,EAmCM,OAAA;AAAA,MAnCA,IAAIC,EAAWP,CAAA;AAAA,eAAM;AAAA,MAAJ,KAAID;AAAA,MAAe,OAAM;AAAA,MAAe,kBAAe;AAAA,MAAgB,gBAAcS,EAAO;AAAA;MACjHC,EAqBS,UAAA;AAAA,QArBD,MAAK;AAAA,QAAU,aAAWL,EAAW;AAAA;QAC3CK,EAmBS,UAAA;AAAA,UAlBN,iBAAeR,EAAS;AAAA,UACxB,iBAAeG,EAAW;AAAA,UAC3B,OAAM;AAAA,UACN,MAAK;AAAA,UACJ,SAAOC;AAAA;UAEIK,EAAI,QAAIC,EAAM,OAAC,QAA3BC,KAAAN,EAKO,QALPO,IAKO;AAAA,YAJLC,EAGOC,sBAHP,MAGO;AAAA,qBAFgBL,EAAI,QAAA,iBAAzBM,EAAuDT,EAAAU,EAAA,GAAA;AAAA;gBAAd,MAAMP,EAAI;AAAA,wCACnDE,EAAA,GAAAI,EAA+BE,GAARR,EAAI,IAAA,GAAA,EAAA,KAAA,GAAA;AAAA;;UAG/BD,EAIO,QAAA,EAJA,IAAIP,EAAS,MAAA,GAAA;AAAA,YAClBY,EAEOC,wBAFP,MAEO;AAAA,kBADFI,EAAU,UAAA,GAAA,CAAA;AAAA;;UAGjBC,EAAiDb,EAAAc,EAAA,GAAA;AAAA,YAAhC,MAAK;AAAA,YAAK,iBAAc;AAAA;;;MAG7CZ,EAWM,OAAA;AAAA,QAVH,mBAAiBP,EAAS;AAAA,QAC3B,OAAM;AAAA,QACL,aAAWE,EAAW;AAAA,QACtB,IAAIH,EAAS;AAAA,QACd,MAAK;AAAA,QACL,MAAK;AAAA;QAELQ,EAEM,OAAA,MAAA;AAAA,UADJK,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;ACxDP,SAASO,GAAgB3F,GAAO4F,IAAiB,UAAU;AAEhE,QAAMpF,IAAYpE,EAAS,MAAMqE,EAAMT,CAAK,CAAC,GAEvC6F,IAAUzJ,EAAS,MAAMoE,EAAU,MAAM,MAAMsF,EAAOtF,EAAU,KAAK,CAAC,GAEtEuF,IAAoB3J,EAAS,MAAM4J,EAASH,EAAQ,OAAOrF,EAAU,KAAK,CAAC;AAEjF,WAASsF,EAAOG,GAAS;AACvB,UAAMC,IAAa,EAAE,QAAQ,KAAK,MAAM,KAAK,SAAS,SAAQ,GACxDC,IAAY,OAAO,KAAKD,CAAU,EAAE,KAAK,CAAA/D,MAAQ8D,EAAQ9D,CAAI,CAAC;AACpE,WAAO+D,EAAWC,CAAS,KAAKP;AAAA,EACpC;AAEE,WAASQ,EAAQH,GAAS;;AACxB,WAAIA,EAAQ,UAAU,OAAOA,EAAQ,UAAW,aACvChK,KAAAC,IAAA8D,EAAM,WAAN,gBAAA9D,EAAc,QAAQ8D,EAAM,YAA5B,gBAAA/D,EAAqC,SAAQ,KAE/CgK,EAAQ,UAAUA,EAAQ;AAAA,EACrC;AAEE,WAASD,EAASK,GAAKJ,GAAS;AAC9B,UAAMK,IAASD,MAAQ,KACjBE,IAAWF,MAAQ,UAEnBG,IAAe,CAAAnH,MAAS;AAC5B,MAAAA,EAAM,eAAc,GACpBA,EAAM,yBAAwB;AAAA,IACpC;AACI,WAAO;AAAA,MACL,MAAMkH,IAAYN,EAAQ,QAAQ,WAAY;AAAA,MAC9C,UAAUM,IAAWN,EAAQ,WAAW;AAAA,MACxC,MAAMK,IAASF,EAAQH,CAAO,IAAI;AAAA;AAAA;AAAA,MAGlC,GAAIK,KAAUL,EAAQ,YAAY,EAAE,iBAAiB,IAAM,UAAU,IAAI,SAASO,EAAc;AAAA,IACtG;AAAA,EACA;AAEE,SAAO,EAAE,SAAAX,GAAS,mBAAAE,EAAiB;AACrC;AC7CO,SAASU,GAAgBzG,GAAO;AAErC,QAAM0G,IAAUtK,EAAS,MAAM;;AAC7B,UAAMoE,IAAYC,EAAMT,CAAK;AAC7B,WAAIQ,EAAU,UAAU,OAAOA,EAAU,UAAW,aAC3CvE,KAAAC,IAAAsE,EAAU,WAAV,gBAAAtE,EAAkB,QAAQsE,EAAU,YAApC,gBAAAvE,EAA6C,SAAQ,KAEvDuE,EAAU,UAAUA,EAAU,QAAQ;AAAA,EAC9C,CAAA,GAEKmG,IAAiBvK,EAAS,MAAM;;AAAA,aAAAH,KAAAC,IAAAwK,EAAQ,UAAR,gBAAAxK,EAAe,eAAf,gBAAAD,EAAA,KAAAC,GAA4B,SAAQ;AAAA,GAAK,GAEzE0K,IAAUxK,EAAS,MAAM;;AAC7B,UAAMoE,IAAYC,EAAMT,CAAK;AAC7B,WAAO2G,EAAe,WAASzK,IAAAsE,EAAU,WAAV,gBAAAtE,EAAkB,iBAAcD,IAAAuE,EAAU,WAAV,gBAAAvE,EAAkB,SAAQ;AAAA,EAC1F,CAAA;AAGD,WAAS4K,EAAYC,GAAG;AAGtB,QAFkBrG,EAAMT,CAAK,EAEf,UAAU;AACtB,MAAA8G,EAAE,eAAc,GAChBA,EAAE,yBAAwB;AAC1B;AAAA,IACN;AACI,QAAI,CAACJ,EAAQ,SAAS,CAACE,EAAQ,MAAO;AAGtC,IADiBE,EAAE,OAAO,QAAQ,GAAG,EACxB,SAAS,GAAG,OAAO,SAAS,MAAM,GAAGJ,EAAQ,KAAK,OAC7DI,EAAE,eAAc,GAChBF,EAAQ,MAAMF,EAAQ,KAAK;AAAA,EAEjC;AACE,SAAO,EAAE,aAAAG,EAAW;AACtB;AC1BO,SAASE,EAAkB/G,GAAOgH,GAAUC,GAAaC,GAAe;AAC7E,MAAIlH,EAAMgH,CAAQ,MAAM,QAAW;AACjC,QAAIG,IAAU,0BAA0BH,CAAQ;AAChD,IAAIC,MACFE,KAAW,gBAAgBF,CAAW,eAEpCC,MACFC,KAAW,IAAID,CAAa,KAE9BtG,GAAKuG,CAAO;AAAA,EAChB;AACA;AAWO,SAASC,GAAwBpH,GAAOgH,GAAUC,GAAa;AACpE,SAAO7K,EAAS,MAAM4D,EAAMgH,CAAQ,KAAKhH,EAAMiH,CAAW,CAAC;AAC7D;AAQO,SAASI,GAAwBrH,GAAO;AAC7C,QAAMsH,IAAanM,EAAI,EAAK;AAE5B,SAAAoM,GAAU,MAAM;AAEd,IAAIvH,EAAM,kBACRsH,EAAW,QAAQtH,EAAM,eAEzBsH,EAAW,QAAQtH,EAAM;AAAA,EAE5B,CAAA,GAEDuB,EAAM,MAAMvB,EAAM,OAAO,CAACtF,MAAU;AAClC,IAAA4M,EAAW,QAAQ5M;AAAA,EACpB,CAAA,GAGD6G,EAAM,MAAMvB,EAAM,cAAc,CAACtF,MAAU;AACzC,IAAA4M,EAAW,QAAQ5M;AAAA,EACpB,CAAA,GAGD6G,EAAM,MAAMvB,EAAM,cAAc,CAACtF,MAAU;AAEzC,IAAIA,MACF4M,EAAW,QAAQ;AAAA,EAEtB,CAAA,GAEM,EAAE,YAAAA,EAAU;AACrB;;;;;;;;AChEA,UAAMtH,IAAQkE;AACd,IAAA6C,EAAkB/G,GAAO,UAAU,QAAW,8EAAkF;AAEhI,UAAMgF,IAASwC,GAAQ,GACjB,EAAE,SAAA3B,GAAS,mBAAAE,MAAsBJ,GAAgB3F,CAAK,GACtD,EAAE,aAAA6G,EAAW,IAAKJ,GAAgBzG,CAAK,GAGvCyH,IAAsBrL,EAAS,MAC/BsL,EAAU,QAAc,CAAE,IAC1B1H,EAAM,OAAa,EAAE,OAAOA,EAAM,MAAK,IACpC,EAAE,cAAcA,EAAM,MAAK,CACnC,GAEK2H,IAAiBvL,EAAS,MAAM;AACpC,UAAK4D,EAAM;AACX,eAAOA,EAAM;AAAA,IACf,CAAC,GAEK4H,IAAexL,EAAS,MACxB4D,EAAM,OACDA,EAAM,OAGXA,EAAM,iBAAiB,SACrBA,EAAM,WAAWA,EAAM,SAAS,OAC3B6H,KAEAC,KAGL9H,EAAM,WAAWA,EAAM,SAAS,OAC3B+H,KAEAC,EAGZ,GAEKN,IAAYtL,EAAS,MAAM4D,EAAM,WAAW,CAAC,EAACgF,KAAA,QAAAA,EAAQ,QAAO,GAE7DiD,IAAW7L,EAAS,MAAMsL,EAAU,SAAS1H,EAAM,iBAAiB,MAAM,GAE1EkI,IAAY9L,EAAS,MAAMsL,EAAU,SAAS1H,EAAM,iBAAiB,MAAM,GAE3EmI,IAAkB/L,EAAS,MAAM4D,EAAM,UAAU,SAASA,EAAM,OAAO,KAAK,MAAS;2BAIzFqF,EA6BYE,GA5BLX,EAAOiB,CAAA,CAAA,GADduC,EA6BY;AAAA,MA3BV,OAAM;AAAA,MACL,iBAAeC,EAAQ;AAAA,MACvB,kBAAgBV,EAAc;AAAA,MAC9B,cAAYW,EAAQ,YAAI;AAAA,MACxB,aAAWC,EAAI,QAAI;AAAA,MACnB,aAAWb,EAAS,SAAI;AAAA,MACxB,gBAAcS,EAAe;AAAA,MAC9B,kBAAe;AAAA,IACF,GAAA,EAAA,GAAAvD,EAAAmB,CAAA,GAAsB,GAAA0B,EAAA,MAClC,GAAA,EAAA,SAAO7C,EAAWiC,CAAA,EAAA,CAAA,GAAA;AAAA,iBAEnB,MAIO;AAAA,QAJKoB,EAAQ,cAApBtD,EAIO,QAAA6D,IAAA;AAAA,UAHLrD,EAEOC,yBAFP,MAEO;AAAA,gBADFqD,EAAK,KAAA,GAAA,CAAA;AAAA;;QAGZ3D,EAKO,QALP4D,IAKO;AAAA,UAJLvD,EAGOC,sBAHP,MAGO;AAAA,mBAFgBwC,EAAY,SAAA,iBAAjCvC,EAAuET,EAAAU,EAAA,GAAA;AAAA;cAAtB,MAAMsC,EAAY;AAAA,sCACnE3C,EAAA,GAAAI,EAAuCE,GAAhBqC,EAAY,KAAA,GAAA,EAAA,KAAA,GAAA;AAAA;;QAG3BM,EAAS,cAArBvD,EAIO,QAAAgE,IAAA;AAAA,UAHLxD,EAEOC,yBAFP,MAEO;AAAA,gBADFqD,EAAK,KAAA,GAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClChB,WAAA1B,EA5Cc7C,GA4CW,UAAU,QAAW,8EAAkF,mBAK9HmB,EAqBiBuD,IAAA;AAAA,MApBd,UAAU1E,EAAQ;AAAA,MAClB,aAAWA,EAAQ;AAAA,MACnB,gBAAcA,EAAW;AAAA,MACzB,iBAAeA,EAAS;AAAA,MACxB,OAAOA,EAAK;AAAA,MACZ,WAASA,EAAM;AAAA,MACf,QAAQA,EAAM;AAAA,MACd,MAAMA,EAAI;AAAA,MACX,YAAA;AAAA,MACC,SAASA,EAAO;AAAA;MAEN,QACT,MAAqD;AAAA,QAAxBA,EAAS,aAAA,gBAAtCmB,EAAqDT,EAAAmD,EAAA,GAAA,EAAA,KAAA,GAAA,WACrD1C,EAA+BT,EAAAiD,EAAA,GAAA,EAAA,KAAA,GAAA;AAAA;MAEtB,WACT,MAEO;AAAA,QAFP1C,EAEOC,yBAFP,MAEO;AAAA,cADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;;;;;;;;;;AClEhB,UAAMlE,IAAQkE;AAEd,IAAA6C,EAAkB/G,GAAO,gBAAgB,QAAW,8EAAkF;AAEtI,UAAMjB,IAAOoF,GAEP0E,IAAgBzM,EAAS,MAAM;AACnC,cAAQ4D,EAAM,SAAO;AAAA,QACnB,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACb;AAAA,IACA,CAAC,GAEK8I,IAAsB1M,EAAS,MAC/B4D,EAAM,eACJ,OAAOA,EAAM,gBAAiB,WACzB,KAEL,EAAAA,EAAM,aAAa,WAAW,MAAM,IAKnC,EACR;2BAKD2E,EA4DM,OAAA;AAAA,MA3DJ,OAAM;AAAA,MACL,mBAAiBoE,EAAU,aAAA,SAAY;AAAA,MACvC,gBAAcC,EAAO;AAAA,MACtB,MAAK;AAAA;MAELlE,EAQM,OARN4D,IAQM;AAAA,QAPJvD,EAMOC,sBANP,MAMO;AAAA,UALWL,EAAI,aAApBJ,EAGWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,mBAFYlE,EAAI,QAAA,iBAAzBM,EAAmET,EAAAU,EAAA,GAAA;AAAA;cAA1B,MAAMP,EAAI;AAAA,cAAE,MAAK;AAAA,sCAC1DE,EAAA,GAAAI,EAA2CE,GAApBR,EAAI,IAAA,GAAA;AAAA;cAAE,MAAK;AAAA;0BAEpCM,EAA8CT,EAAAsE,EAAA,GAAA;AAAA;YAAd,MAAK;AAAA;;;MAIzCpE,EAIM,OAJN6D,IAIM;AAAA,QAHJxD,EAEOC,uBAFP,MAEO;AAAA,cADF+D,EAAK,KAAA,GAAA,CAAA;AAAA;;MAIDC,EAAW,eAAIpE,EAAM,OAAC,eAAjCC,KAAAN,EAIM,OAJNO,IAIM;AAAA,QAHJC,EAEOC,6BAFP,MAEO;AAAA,cADFgE,EAAW,WAAA,GAAA,CAAA;AAAA;;MAKTC,EAAW,gCADpB1E,EASS,UAAA;AAAA;QAPP,OAAM;AAAA,QACN,cAAW;AAAA,QACX,OAAM;AAAA,QACN,MAAK;AAAA,QACJ,gCAAO5F,EAAI,OAAA;AAAA;QAEZ0G,EAAeb,EAAA0E,EAAA,CAAA;AAAA;MAGDC,EAAW,oBAA3B5E,EAoBWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,QAlBDH,EAAmB,cAD3BzD,EAQEmE,IAAA;AAAA;UANA,OAAM;AAAA,UACL,OAAOD,EAAW;AAAA,UAClB,WAASE,EAAY;AAAA,UACtB,MAAK;AAAA,UACJ,SAASZ,EAAa;AAAA,UACtB,gCAAO9J,EAAI,cAAA;AAAA,8DAEdsG,EASYE,GAAA,YAAA,GAAA;AAAA;UATyC,IAAIkE,EAAY;AAAA,UAAE,QAAA;AAAA;UACrE,SAAAC,EAAA,CAOE,EARwC,MAAAC,QAAI;AAAA,YAC9ClE,EAOE+D,IAAA;AAAA,cANA,OAAM;AAAA,cACL,OAAOD,EAAW;AAAA,cAClB,WAASI;AAAA,cACV,MAAK;AAAA,cACJ,SAASd,EAAa;AAAA,cACtB,gCAAO9J,EAAI,cAAA;AAAA;;;;;;;GClGPxE,KAAkB;AAAA;AAAA,EAI7B,eAAe;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA,EAID,oBAAoB;AAAA,IAClB,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA;;;;ACXA,UAAMyF,IAAQkE;AAEd,QAAI0F,IAAsB,CAAA,GACtBC,IAAc,IACdC;AAEJ,UAAMC,IAAW3N,EAAS,MAAM;AAC9B,YAAMzB,IAAMqF,EAAM,mBAAmB,SAAQ;AAC7C,aAAIrF,EAAI,WAAW,QAAQ,KAAKA,EAAI,WAAW,OAAO,KAAKA,EAAI,SAAS,IAAI,IAAUA,IAClFA,EAAI,WAAW,IAAI,IAAU,OAAOA,CAAG,MACpC,GAAGA,CAAG;AAAA,IACf,CAAC;AAED,IAAA4G,EAAM,MAAMvB,EAAM,QAAQ,MAAM;AAC9B,MAAAA,EAAM,SAASgK,EAAQ,IAAKC,EAAU;AAAA,IACxC,CAAC,GAED1C,GAAU,MAAMvH,EAAM,UAAUgK,EAAU,CAAA,GAC1CE,GAAY,MAAMlK,EAAM,UAAUiK,EAAY,CAAA;AAI9C,aAASD,IAAW;AAClB,MAAAJ,IAAsBO,EAAsB,GAC5CN,IAAcO,EAAgB,GAC9BC,EAAQ,GACRC,EAAc;AAAA,IAChB;AAEA,aAASL,IAAa;AACpB,MAAAM,EAAW,GACXC,EAAgB;AAAA,IAClB;AAEA,aAASL,IAAyB;AAChC,YAAMM,IAAQ,SAAS,iBAAiBzK,EAAM,aAAa;AAC3D,aAAO,MAAM,KAAKyK,CAAK;AAAA,IACzB;AAEA,aAASL,IAAmB;AAC1B,YAAMM,IAAK,SAAS;AACpB,UAAKA;AACL,eAAOA,EAAG,eAAeA,EAAG;AAAA,IAC9B;AAEA,aAASL,IAAW;AAClB,MAAAT,EAAoB,QAAQ,CAAAc,MAAMA,EAAG,aAAa,SAAS,EAAE,CAAC;AAAA,IAChE;AAEA,aAASH,IAAc;AACrB,MAAAX,EAAoB,QAAQ,CAAAc,MAAMA,EAAG,gBAAgB,OAAO,CAAC;AAAA,IAC/D;AAEA,aAASJ,IAAiB;;AACxB,MAAIT,MACFC,KAAsB5N,IAAA,iBAAiB,SAAS,gBAAgB,MAA1C,gBAAAA,EAA6C,iBACnE,SAAS,iBAAiB,MAAM,kBAAkB,WAEpD,SAAS,KAAK,aAAa,eAAe,EAAK;AAAA,IACjD;AAEA,aAASsO,IAAmB;AAC1B,MAAIX,MACF,SAAS,iBAAiB,MAAM,kBAAkBC,IAEpD,SAAS,KAAK,gBAAgB,aAAa;AAAA,IAC7C;2BA/EEzE,EAMasF,IAAA;AAAA,MAND,MAAK;AAAA,MAAc,QAAA;AAAA;iBAC7B,MAIuB;AAAA,QAHfC,EAAM,eADdjG,EAIuB,OAAA;AAAA;UAFrB,OAAM;AAAA,UACL,gDAA6CoF,EAAQ,KAAA,EAAA;AAAA,UACtD,eAAY;AAAA;;;;;;;;;ACDlB,UAAM/J,IAAQkE,GAGR2G,IAAS1P,EAAI,IAAI,GAGjB2P,IAAW1O,EAAS,MACpB4D,EAAM,UAAU,IAAU,MAC1B,CAACA,EAAM,SAASA,EAAM,MAAY,OAC/BA,EAAM,QAAQA,EAAM,WAAWA,EAAM,WAAW,MAAMA,EAAM,MAAM,SAAU,CACpF,GAEK+K,IAAW3O,EAAS,MAAM;;AAC9B,YAAM4O,MAAO/O,KAAAC,IAAA2O,EAAQ,UAAR,gBAAA3O,EAAe,gBAAf,gBAAAD,EAA4B,WAAU,IAC7CgP,IAAKH,EAAS,QAAQA,EAAS,QAAQ,MAAM;AACnD,UAAI,CAACG,KAAM,CAACjL,EAAM,IAAK,QAAOgL;AAC9B,YAAME,IAAMlL,EAAM,UAAU,IAAI,MAAM;AACtC,aAAO,GAAGgL,IAAO,GAAGA,CAAI,OAAO,EAAE,GAAGC,CAAE,GAAGjL,EAAM,KAAK,GAAGkL,CAAG;AAAA,IAC5D,CAAC;2BAKCvG,EAaO,QAAA;AAAA,eAZD;AAAA,MAAJ,KAAIkG;AAAA,MACH,cAAYE,EAAQ;AAAA,MACpB,OAAKI,GAAA,EAAA,YAAgBC,EAAG,OAAIN,EAAQ,OAAA;AAAA,MACpC,oBAAkBO,EAAK;AAAA,MACxB,kBAAe;AAAA,MACd,cAAYP,EAAQ;AAAA,MACpB,iBAAeQ,EAAQ;AAAA,MACvB,kBAAgBC,EAAQ;AAAA,MACxB,gBAAcvC,EAAO;AAAA,MACtB,MAAK;AAAA;MAEOA,EAAO,YAAA,WAAnB7D,EAAmCC,EAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA;;;;;;;;AClCvC,UAAMrG,IAAOoF,GAEPqH,IAAcrQ,EAAI,EAAK;AAE7B,aAASsQ,IAAgB;AACvB,MAAAD,EAAY,QAAQ,IACpBzM,EAAK,SAAS;AAAA,IAChB;qBAKWyM,EAAW,0BADpB7G,EAwBM,OAAA;AAAA;MAtBJ,MAAK;AAAA,MACL,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,gBAAcqE,EAAO;AAAA;MAEtBlE,EAgBM,OAhBN4D,IAgBM;AAAA,QAfJ5D,EAQM,OARN6D,IAQM;AAAA,UAPJxD,EAMOC,sBANP,MAMO;AAAA,YALWL,EAAI,aAApBJ,EAGWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,qBAFYlE,EAAI,QAAA,iBAAzBM,EAAiET,EAAAU,EAAA,GAAA;AAAA;gBAAxB,MAAMP,EAAI;AAAA,gBAAE,MAAK;AAAA,wCAC1DE,EAAA,GAAAI,EAAyCE,GAAlBR,EAAI,IAAA,GAAA;AAAA;gBAAE,MAAK;AAAA;4BAEpCM,EAAkCT,EAAA8G,EAAA,GAAA;AAAA;cAAZ,MAAK;AAAA;;;QAG/B5G,EAEI,KAAA,MAAA;AAAA,UADFK,EAAQC,EAAA,QAAA,SAAA;AAAA;QAEVN,EAES,UAAA;AAAA,UAFD,MAAK;AAAA,UAAS,OAAM;AAAA,UAAgB,SAAO2G;AAAA;UACjDhG,EAAeb,EAAA0E,EAAA,CAAA;AAAA;;;;;;;;AC/BvB,UAAMtJ,IAAQkE;AACd,IAAA6C,EAAkB/G,GAAO,UAAU,QAAW,8EAAkF,GAChI+G,EAAkB/G,GAAO,WAAW,QAAW,2CAA6C;AAE5F,UAAM,EAAE,SAAA6F,GAAS,mBAAAE,MAAsBJ,GAAgB3F,CAAK,GACtD,EAAE,aAAA6G,EAAW,IAAKJ,GAAgBzG,CAAK,GACvC,EAAE,UAAAsB,GAAU,cAAAP,MAAiBhB,GAAeC,CAAK;2BAIrDqF,EAWYE,GAVLX,EAAOiB,CAAA,CAAA,GADduC,EAWY;AAAA,MATT,QAAQuD,EAAQ,YAAA;AAAA,MACjB,kBAAe;AAAA,MACd,cAAYrD,EAAQ,YAAI;AAAA,MACxB,aAAWC,EAAI,QAAI;AAAA,MACnB,aAAWqD,EAAO,WAAI;AAAA,MACtB,gBAAc5C,EAAO,WAAI;AAAA,IACb,GAAA,EAAA,GAAApE,EAAAmB,CAAA,GAAsB,GAAAnB,EAAAtD,CAAA,EAClC,GAAA,EAAA,SAAOsD,EAAWiC,CAAA,EAAA,CAAA,GAAA;AAAA,iBACnB,MAA8B;AAAA,QAA9B1B,EAA8BC,2BAAhBR,EAAY7D,CAAA,CAAA,CAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvB9B,UAAMf,IAAQkE,GAmBR2H,IAAUzP,EAAS,MAChB4D,EAAM,SAASA,EAAM,YAAYA,EAAM,IAC/C;sBAKDiF,EAAA,GAAAN,EAgBM,OAhBN6D,IAgBM;AAAA,MAfQqD,EAAO,cAAnBlH,EAMO,QAAA;AAAA;QALJ,IAAIT,EAAM;AAAA,QACX,OAAM;AAAA,QACL,cAAYA,EAAK;AAAA,WAEf2H,EAAO,KAAA,GAAA,GAAAnD,EAAA;MAGAxE,EAAO,gBAAnBS,EAMO,QAAA;AAAA;QALL,oBAAiB;AAAA,QACjB,OAAM;AAAA,QACL,cAAY3E,EAAM,YAAYA,EAAM;AAAA,MAElC,GAAA8L,EAAA9L,EAAM,aAAS,GAAA,IAAU,QAAM8L,EAAA9L,EAAM,OAAO,GAAA,GAAA2I,EAAA;;;;;;;;;;;;2BC3CnDhE,EAcQ,SAAA;AAAA,MAbN,OAAKwG,GAAA,CAAC,YACEjH,EAAI,OAAA,uBAAA,EAAA,CAAA;AAAA,MACZ,kBAAe;AAAA,MACd,iBAAeA,EAAQ;AAAA,MACvB,KAAKA,EAAG;AAAA;MAETY,EAEO,QAAA,MAAA;AAAA,QADLK,EAAQC,EAAA,QAAA,SAAA;AAAA;MAEMlB,EAAQ,iBAAxBS,EAGWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,wBAFTnE,EAA2D,QAAA;AAAA,UAArD,iBAAc;AAAA,UAAO,eAAY;AAAA,WAAO,MAAM,EAAA;AAAA,QACpDiH,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAjH,EAAgD,QAA1C,EAAA,OAAM,wBAAqB,YAAQ,EAAA;AAAA;;;;;;;;;;;;;;;;ACV7C,UAAM9E,IAAQkE,GASRnF,IAAOoF,GACP/D,IAAQC,GAAQ,GAEhB2L,IAAO5P,EAAS,OACpB,EAAE,CAAC4D,EAAM,QAAQ,sBAAsB,kBAAkB,GAAGA,EAAM,OAAM,EACzE;AAED,aAASiM,EAAYnF,GAAG;AACtB,YAAMnM,IAAMyF,EAAM,SAAS,WAAW,SAAS0G,EAAE,OAAO,KAAQ,IAAIA,EAAE,OAAO;AAC7E,MAAA/H,EAAK,qBAAqBpE,CAAG;AAAA,IAC/B;sBAIAsK,EAAA,GAAAN,EAQE,SARFyD,EAQE;AAAA,MAPA,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,cAAYlE,EAAK;AAAA,MACjB,IAAIgI,EAAM,OAAC;AAAA,MACX,OAAOhI,EAAK,SAAIA,EAAU;AAAA,MAC1B,SAAO+H;AAAA,OACAD,EAAI,KAAA,GAAA,MAAA,IAAAxD,EAAA;AAAA;;;;;;;;;;;;2BCtBZ7D,EAWM,OAAA;AAAA,MAVJ,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,gBAAcT,EAAO;AAAA,MACrB,uBAAqBA,EAAa;AAAA,MAClC,iBAAeA,EAAQ;AAAA,MACvB,cAAYA,EAAK;AAAA,MACjB,gBAAcA,EAAO;AAAA,MACrB,mBAAiBA,EAAU;AAAA;MAE5BiB,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BCsBVC,EAuBe8G,IAAA;AAAA,MAtBZ,UAAUjI,EAAQ;AAAA,MAClB,OAAOA,EAAK;AAAA;iBAEb,MAAkB;AAAA,QAAlBuB,EAAkBb,EAAAwH,EAAA,CAAA;AAAA,QAClB3G,EAQE4G,IARFjE,EAQE;AAAA,UAPA,kBAAA;AAAA,UACC,UAAUlE,EAAQ;AAAA,UAClB,IAAIA,EAAO;AAAA,UACX,eAAaA,EAAU;AAAA,UACvB,aAAaA,EAAW;AAAA,UACxB,UAAUA,EAAQ;AAAA,QACnB,GAAAoI,GAAMpI,EAAS,SAAA,CAAA,GAAA,MAAA,IAAA,CAAA,YAAA,MAAA,eAAA,eAAA,UAAA,CAAA;AAAA,WAEjBY,EAQS,UAAA;AAAA,UANP,cAAW;AAAA,UACX,MAAK;AAAA,UACL,OAAM;AAAA,UACL,gCAAOyH,EAAK,MAAA,OAAA;AAAA;UAEb9G,EAA+Cb,EAAA0E,EAAA,GAAA;AAAA,YAAlC,MAAK;AAAA,YAAK,OAAM;AAAA;;eANrBpF,EAAS,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnDvB,UAAMlE,IAAQkE,GAsCRnF,IAAOoF,GAEPqI,IAAcrR,EAAI,IAAI,GACtBsR,IAAYtR,EAAI,IAAI;AAE1B,aAASuR,EAAoBhC,GAAI;AAC/B,YAAMiC,IAAK,IAAI,MAAM,UAAU,EAAE,SAAS,IAAM,YAAY,GAAM,CAAA;AAClE,MAAAjC,EAAG,cAAciC,CAAE;AAAA,IACrB;AAEA,aAASC,EAAkB9F,GAAG;AAC5B,YAAM,EAAE,OAAApM,EAAO,IAAGoM,EAAE,QACd,CAAE+F,GAAOC,CAAK,IAAGpS,EAAM,MAAM,UAAU;AAE7C,MAAA8R,EAAY,MAAM,QAAQK,KAAS,IACnCJ,EAAU,MAAM,QAAQK,KAAO,IAC/BJ,EAAoBF,EAAY,KAAK,GACrCE,EAAoBD,EAAU,KAAK;AAAA,IACrC;AAEA,UAAMM,IAA6BC,GAASJ,GAAmB,GAAI;AAEnE,aAASK,EAAiBnG,GAAG;AAC3B,MAAA/H,EAAK,UAAU,GACfgO,EAA2BjG,CAAC;AAAA,IAC9B;AAEA,UAAMoG,IAAgB9Q,EAAS,MACzB4D,EAAM,UAAU,QACXA,EAAM,UAAU,QAElB,CAAA,CACR,GAEKmN,IAAc/Q,EAAS,MACvB4D,EAAM,UAAU,MACXA,EAAM,UAAU,MAElB,CAAA,CACR;2BAICqF,EAyCe8G,IAAA;AAAA,MAxCZ,UAAUjI,EAAQ;AAAA,MAClB,OAAOA,EAAK;AAAA;iBAEb,MAAkB;AAAA,QAAlBuB,EAAkBb,EAAAwH,EAAA,CAAA;AAAA,QAClB3G,EAUE4G,IAAA;AAAA,UATA,kBAAA;AAAA,UACC,UAAUnI,EAAQ;AAAA,UAClB,IAAIA,EAAO;AAAA,UACX,eAAaA,EAAa;AAAA,UAC1B,aAAaA,EAAW;AAAA,UACxB,UAAUA,EAAQ;AAAA,UAClB,kCAASqI,EAAK,MAAA,YAAA;AAAA,UACd,SAAOU;AAAA,UACP,UAAQL;AAAA;QAEX9H,EAOE,SAPFsD,EAOE;AAAA,mBANI;AAAA,UAAJ,KAAIoE;AAAA,UACJ,MAAK;AAAA,UACJ,UAAUtI,EAAQ;AAAA,UAClB,OAAOA,EAAO,OAAA;AAAA,UACd,eAAaA,EAAU,WAAC;AAAA,QACzB,GAAAoI,GAAMY,EAAa,OAAA,EAAA,CAAA,GAAA,MAAA,IAAA1E,EAAA;AAAA,QAErB1D,EAOE,SAPFsD,EAOE;AAAA,mBANI;AAAA,UAAJ,KAAIqE;AAAA,UACJ,MAAK;AAAA,UACJ,UAAUvI,EAAQ;AAAA,UAClB,OAAOA,EAAO,OAAA;AAAA,UACd,eAAaA,EAAU,WAAC;AAAA,QACzB,GAAAoI,GAAMa,EAAW,OAAA,EAAA,CAAA,GAAA,MAAA,IAAAzE,EAAA;AAAA,WAEnB5D,EAQS,UAAA;AAAA,UANP,cAAW;AAAA,UACX,MAAK;AAAA,UACL,OAAM;AAAA,UACL,gCAAOyH,EAAK,MAAA,OAAA;AAAA;UAEb9G,EAA+Cb,EAAA0E,EAAA,GAAA;AAAA,YAAlC,MAAK;AAAA,YAAK,OAAM;AAAA;;eANrBpF,EAAS,SAAA;AAAA;;;;;;ACtHhB,SAASkJ,GAAsBhJ,GAAc;AAKlD,WAASiJ,EAAS3C,GAAI;;AACpB,aACEzO,KAAAC,IAAAwO,KAAA,gBAAAA,EAAI,cAAJ,gBAAAxO,EAAe,aAAf,gBAAAD,EAAA,KAAAC,GAA0B,iBACzBwO,EAAG,UAAU,SAAS,SAAS,KAAKA,EAAG,UAAU,SAAS,SAAS;AAAA,EAE1E;AAME,WAAS4C,EAAe3M,GAAK;AAC3B,WAAOA,MAAQ,OAAOA,MAAQ,cAAcA,MAAQ;AAAA,EACxD;AAGE,WAAS4M,EAAkBzG,GAAG;AAC5B,IAAIuG,EAASvG,KAAA,gBAAAA,EAAG,MAAM,KAAKwG,EAAexG,KAAA,gBAAAA,EAAG,GAAG,KAC9CA,EAAE,eAAc;AAAA,EAEtB;AAEE,EAAAS,GAAU,MAAM;;AACd,KAAAtL,KAAAC,IAAAkI,EAAa,UAAb,gBAAAlI,EAAoB,qBAApB,QAAAD,EAAA,KAAAC,GAAuC,WAAWqR;AAAA,EACnD,CAAA,GAEDC,GAAgB,MAAM;;AACpB,KAAAvR,KAAAC,IAAAkI,EAAa,UAAb,gBAAAlI,EAAoB,wBAApB,QAAAD,EAAA,KAAAC,GAA0C,WAAWqR;AAAA,EACtD,CAAA;AACH;ACnCO,SAASE,GAAcC,GAAOC,GAAWC,IAAY,CAAA,GAAI;AAC9D,MAAIC;AAEJ,EAAAC,GAAc,MAAM;AAClB,IAAAD,IAAa,OAAO,WAAWH,CAAK,GACpCG,EAAW,iBAAiB,UAAUF,CAAS,GAC/CA,EAAUE,CAAU;AAAA,EACrB,CAAA,GAEDL,GAAgB,MAAM;AACpB,IAAAK,EAAW,oBAAoB,UAAUF,CAAS,GAClDE,IAAa;AAAA,EACd,CAAA,GAEGD,EAAU,UACZrM,EAAMqM,GAAW,MAAMD,EAAUE,CAAU,CAAC;AAEhD;ACjBO,SAASE,GAAeC,IAAe,IAAI;AAEhD,QAAM5N,IAAQC,GAAQ,GAEhB4N,IAAc,CAAAtN,MAAOF,EAAMuN,CAAY,EAAE,SAASrN,CAAG,GAErDuN,IAAc9R,EAAS,MAAM,OAAO,QAAQgE,CAAK,CAAC,GAElD+N,IAAW/R,EAAS,MACjB,OAAO;AAAA,IACZ8R,EAAY,MAAM,OAAO,CAAC,CAACvN,CAAG,MAAMsN,EAAYtN,CAAG,CAAC;AAAA,EAC1D,CACG,GAEKyN,IAAYhS,EAAS,MAClB,OAAO;AAAA,IACZ8R,EAAY,MAAM,OAAO,CAAC,CAACvN,CAAG,MAAM,CAACsN,EAAYtN,CAAG,CAAC;AAAA,EAC3D,CACG;AAED,SAAO,EAAE,UAAAwN,GAAU,WAAAC,EAAS;AAC9B;2BCTMC,KAAK;;;;;AAEX,UAAMrO,IAAQkE,GAGRoK,IAAWnT,EAAI,IAAI,GACnBoT,IAAUpT,EAAI,CAAC,GACfqT,IAAYrT,EAAI,IAAI,GACpB,CAAEsT,GAAYC,KAAW5K,GAAc,CAAC,GACxC6K,IAAQxT,EAAI,CAAC,GAKb,EAAE,UAAAgT,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAE3Da,IAAwBxS;AAAA,MAAS,MAAA;;AACrC,gBAAAF,IAAA8D,EAAM,mBAAN,QAAA9D,EAAsB,SAClB2S,EAAiB7O,EAAM,cAAc,IACrCA,EAAM;AAAA;AAAA,IACZ,GACM8O,IAAc1S,EAAS,MAAM4D,EAAM,WAAWyO,EAAW,KAAK,GAC9DM,IAAY3S,EAAS,OAAO,EAAE,OAAO4D,EAAM,QAAO,EAAG,GACrDgP,IAAe5S,EAAS,MAAM4D,EAAM,aAAaA,EAAM,cAAc,CAACA,EAAM,QAAQ,GACpFiP,IAAmB7S,EAAS,MAAM,GAAQ4D,EAAM,SAASA,EAAM,YAAYA,EAAM,KAAK,GACtFkP,IAAU9S,EAAS,MAAM4D,EAAM,IAAI,GACnCmP,IAAa/S,EAAS,MAAM4D,EAAM,OAAO;AAE/C,IAAAoN,GAAsBoB,CAAS,GAC/Bf;AAAA,MACEY;AAAA,MACA,CAACvH,MAAMyH,EAAQ,QAAQzH,KAAA,QAAAA,EAAG,WAAWqI,EAAW,SAAS,UAAU,IAAI;AAAA,MACvE,CAAEA,CAAU;AAAA,IACd,GACA1B;AAAA,MACEY;AAAA,MACA,CAACvH,MAAM6H,EAAM,QAAQ7H,KAAA,QAAAA,EAAG,WAAWqI,EAAW,SAAS,UAAUD,EAAQ,QAAQ;AAAA,MACjF,CAAEA,GAASC,CAAU;AAAA,IACvB,GAEA5H,GAAU,MAAM;AACd,MAAKvH,EAAM,aAAW,WAAWoP,GAAoB,GAAG;AAAA,IAC1D,CAAC,GAED7N,EAAM,MAAA;;AAAM,cAAAtF,KAAAC,IAAAoS,EAAS,UAAT,gBAAApS,EAAgB,eAAhB,gBAAAD,EAA4B;AAAA,OAAW,CAACoT,MAAY;AAC9D,MAAIA,KAAS,WAAWD,GAAoB,GAAG;AAAA,IACjD,CAAC;AAED,aAASE,EAAYC,GAAY;AAC/B,aAAIvP,EAAM,WAAWuP,EAAW,SAASA,EAAW,MAC3C,GAAGA,EAAW,KAAK,OAAOA,EAAW,GAAG,KACtC,CAACvP,EAAM,WAAWuP,IACpBA,IAEA;AAAA,IAEX;AAEA,aAASV,EAAiBW,GAAgB;AACxC,YAAMC,IAAY,CAAA;AAElB,eAASxL,IAAI,GAAGA,IAAIuL,EAAe,QAAQvL,KAAK;AAC9C,cAAMyL,IAAOF,EAAevL,CAAC;AAC7B,QAAIA,MAAM,KACRwL,EAAU,KAAK,EAAE,OAAO,MAAM,KAAK,IAAI,KAAKC,EAAK,QAAS,IAAG,KAAO,EAAG,CAAA,GAErEzL,IAAI,KAAKyL,EAAK,QAAS,IAAGF,EAAevL,IAAI,CAAC,EAAE,QAAO,IAAK,SAC9DwL,EAAU,KAAK;AAAA,UACb,OAAO,IAAI,KAAKD,EAAevL,IAAI,CAAC,EAAE,QAAS,IAAG,KAAO;AAAA,UACzD,KAAK,IAAI,KAAKyL,EAAK,QAAO,IAAK,KAAO;AAAA,QACvC,CAAA,GAECzL,MAAMuL,EAAe,SAAS,KAChCC,EAAU,KAAK,EAAE,OAAO,IAAI,KAAKC,EAAK,YAAY,KAAO,GAAG,KAAK,KAAM,CAAA;AAAA,MAE7E;AACE,aAAOD;AAAA,IACT;AAEA,aAASE,EAAgB7I,GAAG;AAC1B,MAAI,CAAC9G,EAAM,WAAWwO,EAAU,MAAM,SAAS1H,EAAE,aAAa,KAC9DwH,EAAS,MAAM,YAAW;AAAA,IAC5B;AAEA,aAASc,IAAqB;AAC5B,YAAMQ,IAAOpB,EAAU,MAAM,cAAc,gBAAgB,GACrDqB,IAAOrB,EAAU,MAAM,cAAc,gBAAgB;AAC3D,MAAIoB,KAAMA,EAAK,aAAa,cAAc,gBAAgB,GACtDC,KAAMA,EAAK,aAAa,cAAc,YAAY;AAAA,IACxD;sBAGE5K,EAAA,GAAAN,EAoEM,OApENyD,EAoEM;AAAA,eApEG;AAAA,MAAJ,KAAIoG;AAAA,MACP,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,cAAYsB,EAAO;AAAA,MACnB,YAAUH;AAAA,OACH/K,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MAED1F,EAAK,SAAIzD,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,KAAKjB,EAAW;AAAA,QAChB,UAAUzG,EAAQ;AAAA,QAClB,UAAU2H,EAAQ;AAAA;mBAEnB,MAEO;AAAA,UAFP7K,EAEOC,uBAFP,MAEO;AAAA,gBADFqD,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAGZhD,EA6Ccb,OA7CdwD,EA6Cc;AAAA,iBA5CR;AAAA,QAAJ,KAAIkG;AAAA,QACH,SAASC,EAAO;AAAA,QAChB,kBAAgBK,EAAqB;AAAA,QACrC,YAAUqB,EAAO;AAAA,QACjB,YAAUC,EAAO;AAAA,QAClB,MAAK;AAAA,QACJ,eAAaC,EAAU;AAAA,QACvB,mBAAiBpB,EAAS;AAAA,QAC1B,SAAS,EAAsB,YAAA,QAAA;AAAA,QAC/B,MAAM;AAAA,QACN,MAAMJ,EAAK;AAAA,QACX,uBAAkB5C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAE7D,EAAK,MAAA,qBAAsB6D,CAAM;AAAA,SAC9CxL,EAASwJ,CAAA,CAAA,GAAAiC,GAAA,EAAA,GAAA,KAAA;AAAA,QAEmDC,EAAS;gBAAlE;AAAA,UAET,IAAA5G,EAAA,CAUE,EAZkB,YAAA6F,GAAY,aAAAgB,GAAa,aAAAC,EAAW,MAAA;AAAA,YAE9BV,EAAO,gBAYjCzK,EAaEoL,IAAA;AAAA;cAZC,UAAUpI,EAAQ;AAAA,cAClB,OAAOqI,EAAK;AAAA,cACZ,YAAU5B,EAAW;AAAA,cACrB,eAAaS;AAAA,cACb,mBAAiBD,EAAYC,CAAU;AAAA,cACvC,WAAWgB;AAAA,cACX,aAAaI,EAAW;AAAA,cACxB,cAAY3B,EAAY;AAAA,cACxB,UAAUgB,EAAQ;AAAA,cAClB,aAAYQ;AAAA,cACZ,WAAUA;AAAA,cACV,iCAAOjE,EAAK,MAAA,OAAA;AAAA,wLAxBflH,EAUEuL,IAAA;AAAA;cATC,UAAUvI,EAAQ;AAAA,cAClB,OAAOqI,EAAK;AAAA,cACZ,YAAU5B,EAAW;AAAA,cACrB,WAAWyB;AAAA,cACX,eAAajB,EAAYC,CAAU;AAAA,cACnC,aAAaoB,EAAW;AAAA,cACxB,cAAY3B,EAAY;AAAA,cACxB,UAAUgB,EAAQ;AAAA,cAClB,iCAAOzD,EAAK,MAAA,OAAA;AAAA;;;;;MAoBG0C,EAAgB,cAAtC5J,EAKEwL,IAAA;AAAA;QAJC,OAAOH,EAAK;AAAA,QACZ,aAAWI,EAAQ;AAAA,QACnB,MAAMC,EAAI;AAAA,QACV,WAASnM,EAAM8J,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtItB,WAAA3H,EAhCc7C,GAgCW,UAAU,QAAW,8EAAkF,mBAK9HmB,EAeiBuD,IAAA;AAAA,MAdd,UAAU1E,EAAQ;AAAA,MAClB,aAAWA,EAAQ;AAAA,MACnB,gBAAcA,EAAW;AAAA,MACzB,iBAAeA,EAAS;AAAA,MACxB,OAAOA,EAAK;AAAA,MACZ,WAASA,EAAM;AAAA,MACf,QAAQA,EAAM;AAAA,MACd,MAAMA,EAAI;AAAA,MACV,YAAU;AAAA;MAEA,QACT,MAAgD;AAAA,QAAxBA,EAAS,aAAA,gBAAjCmB,EAAgDT,EAAAoD,EAAA,GAAA,EAAA,KAAA,GAAA,WAChD3C,EAA0BT,EAAAkD,EAAA,GAAA,EAAA,KAAA,GAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxChC,UAAM9H,IAAQkE,GAgCR8M,IAAU7V,EAAI,EAAK,GAEnB8V,IAAgB,CAACC,MAAY;AACjC,YAAMxB,IAAO,IAAI,KAAKwB,CAAO,GACvBC,IAAUzB,EAAK,aAAc,EAAC,MAAM,GAAG,EAAE,CAAC,GAC1C0B,IAAU1B,EAAK,aAAY,EAAG,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACnE,aAAO,GAAGyB,CAAO,KAAKC,CAAO;AAAA,IAC/B,GAEMC,IAAYjV,EAAS,MAAA;;AAAM,gBAACF,IAAA8D,EAAM,kBAAN,QAAA9D,EAAqB;AAAA,KAAM;AAM7D,aAASoV,EAAaC,GAAU;AAC9B,UAAI;AACF,eAAOA,EAAS,IAAI,CAAAC,MAAM;AACxB,gBAAMC,IAAWD,EAAG;AACpB,cAAIE,IAAY,CAAA;AAEhB,cAAIF,EAAG,KAAK,KAAK,CAAAG,OAAMA,KAAA,gBAAAA,EAAI,OAAKA,KAAA,gBAAAA,EAAI,EAAC,GAAG;AACtC,kBAAMC,IAAgBJ,EAAG,KAAK,OAAO,CAACK,GAAKC,OACzCD,EAAIC,EAAE,CAAC,IAAIA,EAAE,GACND,IACN,CAAE,CAAA;AACL,YAAAH,IAAY1R,EAAM,cAAc,IAAI,CAAC+R,OAE5B,EAAE,OADMH,EAAcG,CAAW,KAAK,KACvB,EACvB;AAAA,UACT;AAEQ,YAAAL,IAAYF,EAAG,KAAK,IAAI,CAACM,OAAO,EAAE,OAAOA,IAAI;AAE/C,iBAAO,EAAE,UAAAL,GAAU,WAAAC,EAAS;AAAA,QAC7B,CAAA;AAAA,MACF,QAAY;AACX,eAAO,CAAA;AAAA,MACX;AAAA,IACA;AAMA,aAASM,EAAWT,GAAU;AAC5B,UAAI;AACF,cAAMU,IAAsBV,EAAS,OAAO,CAACM,GAAKL,MAAO;AACvD,gBAAMU,IAAQV,EAAG,KAAK,IAAI,CAAAM,MAAKA,KAAA,gBAAAA,EAAG,CAAC;AACnC,iBAAO,CAAE,GAAGD,GAAK,GAAGK,CAAK;AAAA,QAC/B,GAAO,CAAE,CAAA,GAECC,IAAgB,MAAM,KAAK,IAAI,IAAIF,CAAmB,CAAC;AAC7D,gBAAIjS,EAAM,cAAc,UAAUA,EAAM,cAAc,aACpDmS,EAAc,KAAK,CAACC,GAAEC,OAChB,OAAOD,KAAM,YAAY,OAAOC,KAAM,aACxCD,IAAIA,EAAE,YAAW,GACjBC,IAAIA,EAAE,YAAW,IAEfD,IAAIC,IAAU,KACdD,IAAIC,IAAU,IACX,EACR,GAGUF,EAAc,IAAI,CAACG,MAAQ;AACtC,gBAAMC,IAAM,EAAE,UAAUD,EAAG,GACrBE,IAAU,CAAA;AAChB,iBAAAjB,EAAS,QAAQ,CAACC,MAAO;AACvB,kBAAMiB,IAAO,EAAE,cAAcjB,EAAG,MAAK,GAC/BkB,IAASlB,EAAG,KAAK,KAAK,CAACM,MAAMA,EAAE,MAAMQ,CAAG;AAC9C,YAAAG,EAAK,QAAQC,IAASA,EAAO,IAAI,MACjCF,EAAQ,KAAKC,CAAI;AAAA,UAClB,CAAA,GACDF,EAAI,YAAYC,GACZxS,EAAM,cAAc,WACtBuS,EAAI,cAActB,EAAcqB,CAAG,IAE9BC;AAAA,QACR,CAAA;AAAA,MAGF,QAAY;AACX,eAAO,CAAA;AAAA,MACX;AAAA,IACA;AAEA,UAAMI,IAAYvW,EAAS,MAAMiV,EAAU,QAAQW,EAAWhS,EAAM,IAAI,IAAIsR,EAAatR,EAAM,IAAI,CAAC,GAC9F4S,IAAQxW,EAAS,OAAO;AAAA,MAC5B,SAASiV,EAAU,QAAQrR,EAAM,KAAK,SAAS,IAAIA,EAAM,cAAc,SAAS;AAAA,MAChF,OAAOA,EAAM;AAAA,MACb,iBAAiBqR,EAAU,QAAQrR,EAAM,SAAS;AAAA,MAClD,aAAaqR,EAAU,QAAQrR,EAAM,KAAK,IAAI,CAACwR,MAAOA,EAAG,KAAK,IAAIxR,EAAM;AAAA,MACxE,MAAM2S,EAAU;AAAA,IAClB,EAAE,GACIE,IAAazW,EAAS;;AAAM,aAAA4U,EAAQ,SAAS,CAAC,GAAC9U,IAAAyW,EAAU,UAAV,QAAAzW,EAAiB;AAAA,KAAM;AAE5E,WAAAqL,GAAU,MAAM;AACd,MAAAyJ,EAAQ,QAAQ;AAAA,IAClB,CAAC,cAID/L,EAAA,GAAAN,EAiCM,OAjCN6D,IAiCM;AAAA,MAhCgCqK,EAAU,cAA9ClO,EA+BQ,SAAA;AAAA;QA/BA,SAASiO,EAAK,MAAC;AAAA;QACrB9N,EAiBQ,SAAA,MAAA;AAAA,UAhBNA,EAIK,MAAA,MAAA;AAAA,YAHHA,EAEK,MAAA;AAAA,cAFA,SAAS8N,EAAK,MAAC;AAAA,YACf,GAAA9G,EAAA8G,EAAA,MAAM,KAAK,GAAA,GAAAjK,EAAA;AAAA;UAGlB7D,EAUK,MAAA,MAAA;AAAA,YATHA,EAEK,MAFLI,IACK4G,EAAA8G,EAAA,MAAM,eAAe,GAAA,CAAA;AAAA,aAE1B3N,EAAA,EAAA,GAAAN,EAKKsE,IALoB,MAAA6J,GAAAF,EAAA,MAAM,cAApBG,YAAXpO,EAKK,MAAA;AAAA,cAJF,KAAKoO;AAAA,cACN,OAAM;AAAA,iBAEHA,CAAU,GAAA,CAAA;;;QAInBjO,EAWQ,SAAA,MAAA;AAAA,WAVNG,EAAA,EAAA,GAAAN,EASKsE,IATa,MAAA6J,GAAAF,EAAA,MAAM,OAAbL,YAAX5N,EASK,MAAA;AAAA,YAT0B,KAAK4N,EAAI,eAAeA,EAAI;AAAA;YACzDzN,EAEK,MAFLkO,IACKlH,EAAAyG,EAAI,eAAeA,EAAI,QAAQ,GAAA,CAAA;AAAA,aAEpCtN,EAAA,EAAA,GAAAN,EAIKsE,IAJa,MAAA6J,GAAAP,EAAI,YAAVU,YAAZtO,EAIK,MAAA;AAAA,cAHF,KAAQ,GAAA4N,EAAI,eAAeA,EAAI,QAAQ,GAAGU,EAAE,YAAY,GAAGA,EAAE,KAAK;AAAA,YAEhE,GAAAnH,EAAAmH,EAAE,KAAK,GAAA,CAAA;;;;;;GCvKdC,KAAa,CAACC,GAAMC,GAAWC,IAAQ,WAAc;AACzD,QAAMC,IAAU,CAAC3G,MAAO;;AACtB,MAAIzQ,IAAAiX,KAAA,gBAAAA,EAAM,aAAN,QAAAjX,EAAA,KAAAiX,GAAiBxG,EAAG,SAAQ1Q,IAAAkX,KAAA,gBAAAA,EAAM,SAAN,QAAAlX,EAAA,KAAAkX,GAAa,CAAAI,MAAK;;AAAA,cAAArX,IAAAqX,KAAA,gBAAAA,EAAG,SAAH,gBAAArX,EAAA,KAAAqX,GAAU5G,EAAG;AAAA,WAC7DyG,EAAUzG,CAAE;AAAA,EAElB;AAEE,EAAApF,GAAU,MAAM;AAEd,MADgB8L,KAAA,gBAAAA,EAAO,UAAS,UACxB,iBAAiB,WAAWC,CAAO;AAAA,EAC5C,CAAA,GAEDpJ,GAAY,MAAM;AAEhB,MADgBmJ,KAAA,gBAAAA,EAAO,UAAS,UACxB,oBAAoB,WAAWC,CAAO;AAAA,EAC/C,CAAA;AACH,GCPME,KAAY,IACZC,KAAe;AAWd,SAASC,GAAS1X,GAAMgE,GAAO;AACpC,QAAM2T,IAAYxY,EAAI,IAAI,GACpByY,IAAYzY,EAAI,EAAK,GACrB0Y,IAAgB1Y,EAAI,IAAI,GACxB2Y,IAAmB,uBACnBC,IAAoB,EAAE,UAAUP,GAAS,GACzCQ,IAAqB,EAAE,UAAUP,GAAY;AACnD,MAAIQ,GACAC;AAEJ,WAASC,EAAkBnY,GAAMgE,GAAO;AACtC,QAAIoU;AACJ,YAAQpY,GAAI;AAAA,MACV,KAAK;AACH,QAAAoY,IAAsB;AACtB;AAAA,MACF,KAAK;AACH,QAAAA,IAAsB;AACtB;AAAA,MAIF;AACE,cAAM,IAAI,MAAM,2BAA2BpY,CAAI,EAAE;AAAA,IACzD;AAEI,WAAO,IAAIqY,GAAoB,EAC5B,iBAAiBrU,CAAK,EACtB,iBAAiBA,CAAK,EACtBoU,CAAmB,EAAEpU,CAAK,EAC1B,WAAW,CAACsU,GAAoBT,CAAa,GAAGU,EAAM,CAAC,EACvD,MAAK;AAAA,EACZ;AAEE,WAASC,EAAuB1N,GAAG;AACjC,IAAAA,EAAE,eAAc,GAChBA,EAAE,yBAAwB;AAC1B,UAAM2N,IAAK3N,EAAE,OAAO,QAAQ,IAAI;AAChC,QAAI2N,KAAMR,GAAO;AACf,YAAM,EAAE,YAAAS,GAAY,cAAAC,EAAc,IAAGF,EAAG;AAGtC,MAAAR,EAAM,qBAAqBU,GAAc,CAACV,EAAM,iBAAiBU,CAAY,CAAC,GAChFV,EAAM,OAAM,GACZnN,EAAE,eAAc,GAChBA,EAAE,yBAAwB,GAC1B8N,EAAkBD,GAAcD,CAAU;AAAA,IAChD;AAAA,EACA;AAEE,WAASE,EAAkBD,GAAcD,GAAY;;AAEnD,UAAMG,IAAM,wBAAwBF,CAAY,wBAAwBD,CAAU,MAC5EI,IAAOjB,EAAc,MAAM,cAAcgB,CAAG;AAClD,KAAA3Y,IAAA4Y,KAAA,gBAAAA,EAAM,UAAN,QAAA5Y,EAAA,KAAA4Y;AAAA,EACJ;AAEE,WAASC,KAAiBC,GAAe;AACvC,IAAI,CAACd,KAAe,CAACP,EAAU,UAC/BsB,GAAM,SAAS,GAAGD,CAAa,GAC/BC,GAAM,SAAS,KAAK,SAAS,yBAC7BhB,IAAQ,IAAIgB,GAAMtB,EAAU,OAAOO,CAAW;AAAA,EAClD;AAEE,QAAMgB,IAAmBlI,GAAS,SAAUhN,GAAO;AACjD,IAAKkU,MACLA,EAAY,cAAclU,CAAK,GAC/BiU,EAAM,UAAUC,EAAY,SAC5BD,EAAM,OAAM;AAAA,EAChB,GAAK,GAAG,GAEAkB,IAAmBnI,GAAS,SAAUhN,GAAO;AACjD,IAAKkU,MACLA,EAAY,WAAWlU,CAAK,GAC5BiU,EAAM,OAAOC,EAAY,MACzBD,EAAM,OAAM;AAAA,EAChB,GAAK,GAAG;AAEN,SAAAxG;AAAA,IACEqG;AAAA,IACA,CAAChN,MAAM8M,EAAU,QAAQ9M,KAAA,gBAAAA,EAAG;AAAA,IAC5B,CAAE8M,CAAS;AAAA,EACf,GAEErM,GAAU,MAAM;;AACd,QAAI;AACF,MAAA2M,IAAcC,EAAkBnY,GAAMgE,CAAK,IAC3C9D,IAAA2X,EAAc,UAAd,QAAA3X,EAAqB,iBAAiB,SAASsY;AAAA,IAChD,SAAOY,GAAK;AACX,cAAQ,MAAM,+BAA+BA,CAAG,GAChDlB,IAAc;AAAA,IACpB;AAAA,EACG,CAAA,GAEDhB,GAAW,CAAC,KAAK,OAAO,GAAGsB,GAAwBX,CAAa,GAEhErG,GAAgB,MAAM;;AACpB,KAAAtR,IAAA2X,EAAc,UAAd,QAAA3X,EAAqB,oBAAoB,SAASsY,IAClDP,KAAA,QAAAA,EAAO;AAAA,EACR,CAAA,GAED1S,EAAM;AAAA,IACJ,MAAMvB,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,EAChB,GAAK,MAAMkV,EAAiBlV,CAAK,CAAC,GAEhCuB;AAAA,IACEqS;AAAA,IACA,CAACyB,MAAqBH,EAAiBI;AAAA,MACrC,CAAE;AAAA,MACFtV;AAAA,MACAqV,IAAmBrB,IAAqBD;AAAA,IACzC,CAAA;AAAA,EACL,GAEExS;AAAA,IACE;AAAA,MACE,MAAMvB,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,IACb;AAAA,IACD,MAAMmV,EAAiBnV,CAAK;AAAA,IAC5B,EAAE,MAAM,GAAI;AAAA,EAChB,GAES;AAAA,IACL,WAAA2T;AAAA,IACA,eAAAE;AAAA,IACA,eAAAkB;AAAA,EACJ;AACA;AAMA,MAAMT,KAAsB,CAACT,OAAmB;AAAA,EAC9C,IAAI;AAAA,EACJ,YAAYI,GAAO;AAEjB,IAAAJ,EAAc,MAAM,YAAY,IAChCA,EAAc,MAAM,MAAM,YAAY,+BAA+B,GAAGI,EAAM,OAAO,EAAE,IAAI,IAAI,GAG3EA,EAAM,QAAQ,QAAQ,OAAO,OAAO,eAAeA,CAAK,EAEhE,QAAQ,CAAAtC,MAAM;AACxB,YAAM8C,IAAK,SAAS,cAAc,IAAI;AACtC,MAAAA,EAAG,aAAa,YAAY,GAAG,GAC/BA,EAAG,QAAQ,eAAe9C,EAAG,cAC7B8C,EAAG,QAAQ,aAAa9C,EAAG;AAG3B,YAAM4D,IAAU,SAAS,cAAc,MAAM;AAC7C,MAAAA,EAAQ,MAAM,YAAY,0BAA0B5D,EAAG,SAAS,GAChE4D,EAAQ,MAAM,YAAY,4BAA4B5D,EAAG,WAAW;AAGpE,YAAM6D,IAAO,SAAS,eAAe7D,EAAG,IAAI,GACtC8D,IAAgB,SAAS,cAAc,GAAG;AAChD,MAAAA,EAAc,MAAM,YAAY,4BAA4B,oBAAoB,GAChFA,EAAc,MAAM,YAAY,iCAAiC9D,EAAG,SAAS,iBAAiB,MAAM,GACpG8D,EAAc,YAAYD,CAAI,GAE9Bf,EAAG,YAAYc,CAAO,GACtBd,EAAG,YAAYgB,CAAa,GAC5B5B,EAAc,MAAM,YAAYY,CAAE;AAAA,IACxC,CAAK;AAAA,EACL;AACA;AAUA,SAASiB,GAAmBzR,GAAG0R,IAAiB,GAAG;AACjD,QAAMC,IAAiB;AAAA,IACrB,CAAC,GAAG,KAAK,GAAG;AAAA;AAAA,IACZ,CAAC,KAAK,IAAI,GAAG;AAAA;AAAA,IACb,CAAC,KAAK,IAAI,GAAG;AAAA;AAAA,IACb,CAAC,KAAK,KAAK,GAAG;AAAA;AAAA,IACd,CAAC,KAAK,KAAK,GAAG;AAAA;AAAA,IACd,CAAC,KAAK,IAAI,EAAE;AAAA;AAAA,IACZ,CAAC,IAAI,IAAI,GAAG;AAAA;AAAA,IACZ,CAAC,KAAK,KAAK,GAAG;AAAA;AAAA,IACd,CAAC,IAAI,GAAG,GAAG;AAAA;AAAA,IACX,CAAC,KAAK,IAAI,EAAE;AAAA;AAAA,IACZ,CAAC,KAAK,KAAK,GAAG;AAAA;AAAA,IACd,CAAC,IAAI,IAAI,EAAE;AAAA;AAAA,IACX,CAAC,KAAK,KAAK,GAAG;AAAA;AAAA,IACd,CAAC,KAAK,KAAK,GAAG;AAAA;AAAA,IACd,CAAC,IAAI,IAAI,GAAG;AAAA;AAAA,IACZ,CAAC,KAAK,KAAK,GAAG;AAAA;AAAA,IACd,CAAC,KAAK,IAAI,GAAG;AAAA;AAAA,IACb,CAAC,IAAI,KAAK,GAAG;AAAA;AAAA,IACb,CAAC,KAAK,KAAK,GAAG;AAAA;AAAA,IACd,CAAC,KAAK,IAAI,GAAG;AAAA;AAAA,IACb,CAAC,KAAK,IAAI,EAAE;AAAA;AAAA,IACZ,CAAC,IAAI,IAAI,EAAE;AAAA;AAAA,IACX,CAAC,KAAK,KAAK,GAAG;AAAA;AAAA,IACd,CAAC,IAAI,IAAI,GAAG;AAAA;AAAA,EAChB,GAEQvK,IAAQuK,EAAe3R,IAAI2R,EAAe,MAAM,GAChDC,IAAU,KAAK,MAAM5R,IAAI2R,EAAe,MAAM,IAAID;AACxD,SAAO,QAAQtK,EAAM,SAAU,CAAA,KAAK,IAAIwK,CAAO;AACjD;AAMA,SAASC,GAAe7R,GAAG;AAEzB,SAAOyR,GAAmBzR,CAAC;AAC7B;AAEA,SAAS8R,GAA2BC,GAAY;AAC9C,SAAO;AAAA,IACL,qBAAqB;AAAA,IACrB,SAAS;AAAA,MACP,SAAS;AAAA,QACP,SAASA,EAAW;AAAA,MAC5B;AAAA,IACK;AAAA,EACL;AACA;AAEA,SAASC,KAAyB;AAChC,SAAO;AAAA,IACL,SAAS;AAAA,MACP,QAAQ;AAAA,QACN,SAAS;AAAA;AAAA,MACV;AAAA,IACF;AAAA,IACD,YAAY;AAAA,EAChB;AACA;AAkBA,SAASC,GAAyBC,GAAW;;AAC3C,QAAM;AAAA,IACJ,eAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,SAAAzR;AAAA,IACA,WAAA0R;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,eAAAC;AAAA,IACA,UAAAC;AAAA,EACJ,IAAMV,GACEW,IAAe;AAAA,IACnB,GAAG;AAAA,MACD,MAAM;AAAA,QACJ,SAAST;AAAA,MACV;AAAA,MACD,QAAQ;AAAA,MACR,SAAAxR;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,MAAMgS,KAAYrD;AAAA,QAC5B;AAAA,MACO;AAAA,MACD,OAAO;AAAA,QACL,SAAS,CAAC,CAACgD;AAAA,QACX,MAAMA;AAAA,MACP;AAAA,MACD,MAAMD,KAAa;AAAA,IACpB;AAAA,IACD,GAAG;AAAA,MACD,aAAa;AAAA;AAAA,MAEb,MAAM;AAAA,QACJ,SAASD;AAAA,MACV;AAAA,MACD,SAAAzR;AAAA,MACA,cAAc6R;AAAA,MACd,cAAcC;AAAA,MACd,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,MAAME,KAAYrD;AAAA,QAC5B;AAAA,MACO;AAAA,MACD,OAAO;AAAA,QACL,SAAS,CAAC,CAACiD;AAAA,QACX,MAAMA;AAAA,MACP;AAAA,IACP;AAAA,EACA;AAEE,UAAIF,MAAc,YAAUta,KAAAC,IAAA0a,KAAA,gBAAAA,EAAe,WAAf,gBAAA1a,EAAuB,MAAvB,gBAAAD,EAA0B,UAAS,YAE7D6a,EAAa,EAAE,MAAM,SAASV,KAAA,QAAAA,EAAe,SAAS,WAAW,QACjEU,EAAa,EAAE,OAAO;AAAA,IACpB,eAAe;AAAA,EACrB,IAGSA;AACT;AAGA,MAAMC,GAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlB,YAAY;AAAA,IACV,MAAA/a;AAAA,IACA,MAAAW;AAAA,IACA,SAAAsB;AAAA,IACA,SAAA+Y;AAAA,EACJ,GAAK;AACD,SAAK,OAAOhb,GACZ,KAAK,OAAO;AAAA,MACV,GAAGW;AAAA,MACH,UAAU,KAAK,YAAYA,EAAK,QAAQ;AAAA,IAC9C,GACI,KAAK,UAAUsB,GACf,KAAK,UAAU+Y;AAAA,EACnB;AAAA,EAEE,cAAchX,GAAO;AACnB,UAAM,EAAE,cAAAiX,EAAY,IAAKjX;AACzB,SAAK,QAAQ,QAAQ,QAAQ,UAAUiX;AAAA,EAC3C;AAAA,EAEE,WAAWjX,GAAO;AAChB,SAAK,KAAK,WAAW,KAAK,YAAYA,EAAM,IAAI,GAChD,KAAK,KAAK,SAASA,EAAM;AAAA,EAC7B;AAAA,EAEE,YAAYuR,GAAU;AACpB,WAAOA;AAAA,EACX;AACA;AAEA,MAAM2F,WAAyBH,GAAc;AAAA,EAC3C,YAAY,EAAE,MAAApa,GAAM,SAAAsB,GAAS,SAAA+Y,EAAO,GAAI;AACtC,UAAM,EAAE,MAAM,OAAO,MAAAra,GAAM,SAAAsB,GAAS,SAAA+Y,EAAS,CAAA;AAAA,EACjD;AAAA,EAEE,YAAYzF,GAAU;AACpB,WAAOA,EAAS,IAAI,CAAC4F,GAASlT,OAAO;AAAA,MACnC,GAAGkT;AAAA,MACH,iBAAiBzB,GAAmBzR,CAAC;AAAA,MACrC,oBAAoBsN,EAAS,SAAS,IAAI,MAAK;AAAA,IACrD,EAAM;AAAA,EACN;AAAA,EAEE,cAAcvR,GAAO;AACnB,UAAM,cAAcA,CAAK;AACzB,UAAMoX,IAAYlB,GAAyBlW,CAAK,GAC1CqX,IAAe,EAAE,GAAG,EAAE,OAAO,EAAE,MAAMD,EAAU,EAAE,MAAM,KAAM,EAAA,GAAG,GAAG,EAAE,OAAO,EAAE,MAAMA,EAAU,EAAE,MAAM,OAAM,EAAC,GAC7GE,IAAchC;AAAA,MAClB,CAAE;AAAA,MACF,KAAK;AAAA,MACL,EAAE,QAAQ8B,EAAW;AAAA,MACrBpX,EAAM;AAAA,MACNiW,GAAwB;AAAA,MACxB,EAAE,QAAQoB,EAAY;AAAA,IAC5B;AACI,SAAK,UAAUC;AAAA,EACnB;AACA;AAEA,MAAMC,WAA0BR,GAAc;AAAA,EAC5C,YAAY,EAAE,MAAApa,GAAM,SAAAsB,GAAS,SAAA+Y,EAAO,GAAI;AACtC,UAAM,EAAE,MAAM,QAAQ,MAAAra,GAAM,SAAAsB,GAAS,SAAA+Y,EAAS,CAAA;AAAA,EAClD;AAAA,EAEE,YAAYzF,GAAU;AACpB,WAAOA,EAAS,IAAI,CAAC4F,GAASlT,OAAO;AAAA,MACnC,GAAGkT;AAAA,MACH,iBAAiBzB,GAAmBzR,GAAG,CAAC;AAAA,MACxC,aAAa6R,GAAe7R,CAAC;AAAA,MAC7B,aAAa;AAAA,IACnB,EAAM;AAAA,EACN;AAAA,EAEE,cAAcjE,GAAO;AACnB,UAAM,cAAcA,CAAK;AACzB,UAAMoX,IAAYlB,GAAyBlW,CAAK,GAC1CqX,IAAe,EAAE,GAAG,EAAE,OAAO,EAAE,MAAMD,EAAU,EAAE,MAAM,KAAM,EAAA,GAAG,GAAG,EAAE,OAAO,EAAE,MAAMA,EAAU,EAAE,MAAM,OAAM,EAAC,GAC7GE,IAAchC;AAAA,MAClB,CAAE;AAAA,MACF,KAAK;AAAA,MACL,EAAE,QAAQ8B,EAAW;AAAA,MACrBpX,EAAM;AAAA,MACNiW,GAAwB;AAAA,MACxB,EAAE,QAAQoB,EAAY;AAAA,IAC5B;AACI,SAAK,UAAUC;AAAA,EACnB;AACA;AAEO,MAAMjD,GAAqB;AAAA,EAChC,cAAc;AACZ,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAME,mBAAmB2B,GAAY;AAC7B,gBAAK,OAAO,OACZ,KAAK,qBAAqBA,CAAU,GAC7B;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAME,iBAAiBA,GAAY;AAC3B,UAAM,EAAE,MAAArZ,EAAI,IAAKqZ;AACjB,gBAAK,qBAAqBD,GAA2BC,CAAU,GAC/D,KAAK,sBAAsBC,GAAsB,GACjD,KAAK,WAAWtZ,GACT;AAAA,EACX;AAAA,EAEE,iBAAiBqZ,GAAY;AAC3B,gBAAK,gBAAgBA,EAAW,eACzB;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAME,oBAAoBA,GAAY;AAC9B,gBAAK,OAAO,QACZ,KAAK,qBAAqBA,CAAU,GAC7B;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAME,WAAWgB,IAAU,IAAI;AACvB,gBAAK,UAAUA,GACR;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAME,qBAAqBhB,GAAY;AAC/B,UAAM,EAAE,eAAAI,EAAa,IAAKJ;AAC1B,gBAAK,gBAAgBI,GACrB,KAAK,gBAAgBF,GAAyBF,CAAU,GAGxD,KAAK,oBAAoB,SAAS;AAAA,MAChC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAMxC,GAAS,IAAM;AAAA,MAC3C,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAMA,KAAa,EAAA;AAAA,IAC/C,GACW;AAAA,EACX;AAAA,EAEE,QAAQ;AACN,UAAMgE,IAAa;AAAA,MACjB,MAAM;AAAA,QACJ,UAAU,KAAK;AAAA,QACf,QAAQ,KAAK;AAAA;AAAA,MACd;AAAA,MACD,SAASlC;AAAA,QACP,CAAE;AAAA,QACF,KAAK;AAAA,QACL;AAAA,UACE,QAAQ,KAAK;AAAA,QACd;AAAA,QACD,KAAK;AAAA,QACL,KAAK;AAAA;AAAA,MACN;AAAA,MACD,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,IACjB;AAEI,YAAQ,KAAK,MAAI;AAAA,MACf,KAAK;AACH,eAAO,IAAI4B,GAAiBM,CAAU;AAAA,MACxC,KAAK;AACH,eAAO,IAAID,GAAkBC,CAAU;AAAA,MACzC;AACE,cAAM,IAAI,MAAM,2BAA2B,KAAK,IAAI,EAAE;AAAA,IAC9D;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5hBA,UAAMxX,IAAQkE,GAqER,EAAE,WAAAyP,GAAW,eAAAE,GAAe,eAAAkB,EAAe,IAAGrB,GAAS,OAAO1T,CAAK,GAEnEmJ,IAAQ/M,EAAS,MAAM4D,EAAM,cAAc,GAAGA,EAAM,MAAM,MAAMA,EAAM,MAAM,EAAE;AAGpF,WAAAuH,GAAU,MAAMwN;AAAA,MACd0C;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IACF,CAAC,cAID9S,EAAA,GAAAN,EA0BM,OA1BN6D,IA0BM;AAAA,MAzBJ1D,EAwBS,UAAA,MAAA;AAAA,QAvBPA,EAMM,OAAA,MAAA;AAAA,UALJA,EAIU,UAAA;AAAA,YAHP,cAAYqE,EAAK;AAAA,qBACd;AAAA,YAAJ,KAAIwK;AAAA,YACJ,MAAK;AAAA;;QAGT7O,EAeM,OAAA,MAAA;AAAA,UAdJW,EAQgBuS,IAAA;AAAA,YAPd,cAAW;AAAA,YACV,MAAM9T,EAAI;AAAA,YACV,mBAAiBA,EAAa;AAAA,YAC9B,eAAaiF,EAAK;AAAA,YAClB,eAAajF,EAAS;AAAA,YACtB,WAASA,EAAM;AAAA,YACf,WAASA,EAAM;AAAA;UAElBY,EAIa,cAAA;AAAA,YAHV,gBAAcZ,EAAU;AAAA;YAEzBY,EAA6B,MAAA;AAAA,uBAArB;AAAA,cAAJ,KAAI+O;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrHhB,UAAM7T,IAAQkE;AA8Cd,IAAA6C,EAAkB/G,GAAO,WAAW,QAAW,6CAA+C;AAE9F,UAAMjB,IAAOoF,GAIP,CAAEsK,CAAY,IAAG3K,GAAa,GAE9B,EAAE,UAAAqK,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAG3DkK,IAAU9c,EAAI,IAAI,GAClB2T,IAAc1S,EAAS,MAAM4D,EAAM,WAAWyO,EAAW,KAAK,GAC9DyJ,IAAY9b,EAAS,MAAM4D,EAAM,WAAWmY,EAAoB,KAAK,GACrEC,IAAkBhc,EAAS,MAAM4D,EAAM,iBAAiBA,EAAM,gBAAgB,GAC9EqY,IAAgBjc,EAAS,MAAM,MAAM,QAAQ4D,EAAM,UAAU,KAAKA,EAAM,KAAK,GAC7EmY,IAAsB/b,EAAS,MACjCic,EAAc,SAASrY,EAAM,WAAW,SAASA,EAAM,KAAK,KAC5D,OAAOA,EAAM,cAAe,aAAaA,EAAM,UAClD;AAED,aAASsY,IAAmB;AAC1B,MAAIL,EAAQ,UAAOA,EAAQ,MAAM,gBAAgBG,EAAgB,SAAS,CAACF,EAAU;AAAA,IACvF;AAEA,aAASK,EAAeC,GAAS;AAC/B,MAAAzZ,EAAK,qBAAqByZ,CAAO;AAAA,IACnC;AAEA,aAASC,EAAgBD,GAAS;AAChC,YAAME,IAAW,CAAE,GAAG1Y,EAAM,UAAU;AACtC,MAAAwY,IAAUE,EAAS,KAAK1Y,EAAM,KAAK,IAAI0Y,EAAS,OAAOA,EAAS,QAAQ1Y,EAAM,KAAK,GAAG,CAAC,GACvFjB,EAAK,qBAAqB2Z,CAAQ;AAAA,IACpC;AAEA,aAASC,EAAS7R,GAAG;AACnB,YAAM,EAAE,SAAA0R,EAAS,IAAG1R,EAAE;AACtB,MAAAuR,EAAc,QAAQI,EAAgBD,CAAO,IAAID,EAAeC,CAAO;AAAA,IACzE;AAEA,WAAAjX,EAAM2W,GAAWI,CAAgB,GACjC/W,EAAM6W,GAAiBE,CAAgB,GAEvC/Q,GAAU+Q,CAAgB,cAIxBrT,EAAA,GAAAN,EA4BM,OA5BNyD,EA4BM;AAAA,MA5BD,OAAM;AAAA,MACT,kBAAe;AAAA,MACd,iBAAelE,EAAQ;AAAA,MACvB,cAAYA,EAAK;AAAA,MACjB,aAAWA,EAAI;AAAA,OACRU,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MAEhBrJ,EAWE,SAXFsD,EAWE;AAAA,iBAVI;AAAA,QAAJ,KAAI6P;AAAA,QACH,SAASC,EAAS;AAAA,QAClB,cAAYhU,EAAK;AAAA,QACjB,UAAUA,EAAQ;AAAA,QAClB,IAAIgI,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC5B,UAAU5K,EAAQ;AAAA,QAClB,OAAOA,EAAK,SAAA;AAAA,QACb,MAAK;AAAA,QACJ,UAAQyU;AAAA,SACD/T,EAASwJ,CAAA,CAAA,GAAA,MAAA,IAAA1F,EAAA;AAAA,MAEJxE,EAAK,SAAIc,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,KAAK7D,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC7B,UAAU5K,EAAQ;AAAA,QAClB,UAAUA,EAAQ;AAAA;mBAEnB,MAEO;AAAA,UAFPiB,EAEOC,uBAFP,MAEO;AAAA,gBADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;;;;;;2BCxHdmB,EAQWuT,IAAA;AAAA,MAPT,cAAW;AAAA,MACX,OAAM;AAAA,MACN,kBAAe;AAAA,MACf,UAAA;AAAA;iBACA,MAEO;AAAA,QAFPzT,EAEOC,yBAFP,MAEO;AAAA,UADLK,EAAkCb,EAAA0E,EAAA,GAAA,EAArB,eAAY,OAAM,CAAA;AAAA;;;;;GCM/BuP,KAAmB1d,EAAI,CAAE,CAAA;AAExB,SAAS2d,GAAwBC,GAAkB;AAExD,EAAKA,KAAkBnY,GAAK,wEAAwE;AAEpG,QAAM9E,IAAKid,EAAiB,QAAQ,KAAK,EAAE;AAE3C,EAAAxR,GAAU,MAAM;AAGd,QAAIsR,GAAiB,MAAM/c,CAAE,KAAK,SAAS,eAAeA,CAAE,EAAG;AAE/D,UAAMkd,IAAU,SAAS,cAAc,KAAK;AAC5C,IAAAA,EAAQ,KAAKld,GACb,SAAS,KAAK,YAAYkd,CAAO,GAEjCH,GAAiB,MAAM/c,CAAE,IAAI;AAAA,EAC9B,CAAA;AAED,QAAMmd,IAA0B7c,EAAS,MAChCyc,GAAiB,MAAM/c,CAAE,CACjC;AAED,SAAO;AAAA,IACL,YAAY,IAAIA,CAAE;AAAA,IAClB,yBAAAmd;AAAA,EACJ;AACA;ACvCA,MAAMC,KAAa,CAAA,GAEbC,KAAc,CAAA;AACpB,IAAIrd,KAAK;AACT,MAAMsd,KAAa;AAQnB,SAASC,GAAaC,GAAS;AAC7B,QAAMrb,IAAU;AAAA;AAAA,IAEd,QAAQ;AAAA,IACR,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA;AAAA,IAEhB,IAAGqb,KAAA,gBAAAA,EAAS,UAAS,CAAE;AAAA,EAC3B,GAEQC,IAAyB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAGE,MAAIC,IAAW;AACf,SAAAD,EAAuB,QAAQ,CAAClT,MAAQ;AACtC,IAAAmT,KAAY,GAAGvb,EAAQ,cAAc,GAAGoI,CAAG;AAAA,EAC5C,CAAA,GAEDmT,IAAWA,EAAS,MAAM,GAAG,EAAE,GAC/Bvb,EAAQ,WAAWub,GAEZvb;AACT;AA6BY,MAACwb,KAAa;AAAA,EACxB,QAAQ/O,GAAI4O,GAAS;AAEnB,aAASI,EAAqB/M,GAAIgN,GAAa1b,GAAS;AACtD,MAAA0O,EAAG,eAAc,GACZ1O,EAAQ,wBAEX0b,EAAY,MAAK,GAEnBjP,EAAG,cAAc,IAAI,MAAM,iBAAiB,CAAC;AAAA,IACnD;AAEI,aAASkP,EAAejN,GAAIkN,GAAc5b,GAAS;AACjD,MAAA0O,EAAG,eAAc,GACZ1O,EAAQ,kBAEX4b,EAAa,MAAK,GAEpBnP,EAAG,cAAc,IAAI,MAAM,UAAU,CAAC;AAAA,IAC5C;AAEI,aAASoP,EAAkBnN,GAAIkN,GAAc;AAC3C,MAAAlN,EAAG,eAAc,GAEjBkN,EAAa,MAAK;AAAA,IACxB;AAGI,aAASE,EAAcpN,GAAI;AACzB,YAAMqN,IAAS,OAAOtP,EAAG,QAAQ0O,EAAU,CAAC,GACtC,EAAE,SAAAnb,MAAYib,GAAWc,CAAM;AAGrC,UAFcb,GAAY,QAAQa,CAAM,MAE1Bb,GAAY,SAAS,KAC5Blb,EAAQ,UACR0O,EAAG,QAAQ,OAAO;AAGvB,cAAMsN,IAAoBvP,EAAG,iBAAiBzM,EAAQ,QAAQ;AAC9D,YAAIgc,EAAkB,SAAS,GAAG;AAChC,gBAAMJ,IAAeI,EAAkB,CAAC,GAClCN,IAAcM,EAAkBA,EAAkB,SAAS,CAAC;AAElE,UAAI,SAAS,kBAAkBJ,KAAgBlN,EAAG,WAChD+M,EAAqB/M,GAAIgN,GAAa1b,CAAO,IACpC,SAAS,kBAAkB0b,KAAe,CAAChN,EAAG,WACvDiN,EAAejN,GAAIkN,GAAc5b,CAAO,IAC9ByM,EAAG,SAAS,SAAS,aAAa,KAC5CoP,EAAkBnN,GAAIkN,CAAY;AAAA,QAE9C;AAAA,MACA;AAAA,IACA;AAGI,UAAMG,IAAS,EAAEle;AACjB,IAAA4O,EAAG,QAAQ0O,EAAU,IAAIY,GACzB,OAAO,iBAAiB,WAAWD,CAAa,GAChDb,GAAWc,CAAM,IAAI,EAAE,IAAAtP,GAAI,eAAAqP,GAAe,SAASV,GAAaC,CAAO,EAAC,GACpEJ,GAAWc,CAAM,EAAE,QAAQ,UAC7Bb,GAAY,KAAKa,CAAM;AAAA,EAE1B;AAAA,EAED,QAAQtP,GAAI4O,GAAS;AACnB,UAAMU,IAAS,OAAOtP,EAAG,QAAQ0O,EAAU,CAAC,GACtCc,IAAahB,GAAWc,CAAM,EAAE,QAAQ;AAC9C,IAAAd,GAAWc,CAAM,EAAE,UAAUX,GAAaC,CAAO,GAE7CY,MAAehB,GAAWc,CAAM,EAAE,QAAQ,WACxCE,IAEFf,GAAY,OAAOA,GAAY,QAAQa,CAAM,GAAG,CAAC,IAGjDb,GAAY,KAAKa,CAAM;AAAA,EAG5B;AAAA,EAED,UAAUtP,GAAI;AACZ,UAAMsP,IAAS,OAAOtP,EAAG,QAAQ0O,EAAU,CAAC;AAC5C,WAAO,oBAAoB,WAAWF,GAAWc,CAAM,EAAE,aAAa,GACtE,OAAOd,GAAWc,CAAM,GACxBb,GAAY,OAAOA,GAAY,QAAQa,CAAM,GAAG,CAAC;AAAA,EACrD;AACA,GCxJMG,KAAS,CAAC,eAAe,cAAc,WAAW,UAAU,GAE5Dla,KAAMR,GAAM,GAEZ2a,KAAajf,EAAI,CAAC,GAClBkf,KAAcpf,GAAW,IAAI;AAGnCsG,EAAM,MAAM6Y,GAAW,QAAQ,GAAG,CAAAE,MAAe;AAC/C,EAAAA,IAAcC,GAAiB,IAAKC,GAAoB;AAC1D,CAAC;AAEM,SAASC,GAAkB,EAAE,OAAAza,GAAO,cAAA0a,IAAe,GAAI,GAAI;AAEhE,EAAAnZ,EAAM,MAAMd,EAAMia,CAAY,GAAG,CAACC,GAAQnZ,GAAGC,MAAc;AACzD,IAAKkZ,MACL,EAAEP,GAAW,OACb3Y,EAAU,MAAM,EAAE2Y,GAAW,KAAK;AAAA,EACtC,GAAK,EAAE,WAAW,GAAM,CAAA,GAEtB7Y,EAAM8Y,IAAa,CAAChb,GAAOmC,GAAGC,MAAc;AAG1C,QAFI,CAACpC,KACD,CAACoB,EAAMia,CAAY,KACnB,CAACE,GAAkBvb,GAAOW,CAAK,EAAG;AAEtC,QAAI6a;AASJ,UAAMvH,IAPiB;AAAA,MACrB,aAAa,CAAAxM,MAAK5I,GAAK4I,GAAG9G,CAAK;AAAA,MAC/B,YAAY,CAAA8G,MAAKgU,GAAWhU,GAAG9G,CAAK;AAAA,MACpC,SAAS,CAAA8G,MAAK5I,GAAK4I,GAAG9G,CAAK;AAAA,MAC3B,UAAU,CAAA8G,MAAKgU,GAAWhU,GAAG9G,CAAK;AAAA,IACxC,EAEmCX,EAAM,IAAI,GAEnC,EAAE,OAAA0b,IAAQ,EAAG,IAAG/a,KAAS,CAAA;AAE/B,IAAI+a,KAAS1b,EAAM,SAAS,iBAC1Bwb,IAAQ,WAAW,MAAMvH,EAAQjU,CAAK,GAAG0b,CAAK,GAE9C,SAAS,iBAAiB,SAAS,MAAM,aAAaF,CAAK,GAAG,EAAE,MAAM,GAAM,CAAA,KAE5EvH,EAAQjU,CAAK,GAGfoC,EAAU,MAAM,aAAaoZ,CAAK,CAAC;AAAA,EACpC,CAAA;AACH;AAMA,SAASN,KAAoB;AAC3B,EAAAJ,GAAO,QAAQ,CAAAne,MAAQ,SAAS,iBAAiBA,GAAMgf,EAAY,CAAC;AACtE;AAEA,SAASR,KAAuB;AAC9B,EAAAL,GAAO,QAAQ,CAAAne,MAAQ,SAAS,oBAAoBA,GAAMgf,EAAY,CAAC;AACzE;AAEA,SAASA,GAAa3b,GAAO;AAC3B,EAAKA,EAAM,OAAO,OACdA,EAAM,SAAS,aAAa,CAAC4b,GAAkB5b,CAAK,MACxDgb,GAAY,QAAQhb;AACtB;AAEA,SAAS4b,GAAkB5b,GAAO;AAGhC,SAAOA,EAAM,OAAO,QAAQ,gBAAgB;AAC9C;AAEA,SAASub,GAAkBvb,GAAOW,GAAO;AACvC,SAAKA,IACDX,EAAM,OAAO,QAAQ,eAAeW,EAAM,KAAW,KAClDkb,GAAgB7b,GAAOW,CAAK,IAFhB;AAGrB;AAEA,SAASkb,GAAgB7b,GAAOW,GAAO;AACrC,MAAIA,EAAM,SAAS,UAAW,QAAO;AACrC,MAAIA,EAAM,UAAUX,EAAM,OAAO,OAAOW,EAAM,OAAQ,QAAO;AAC/D;AAEA,SAAS9B,GAAKmB,GAAOW,GAAO;AAC1B,EAAIA,EAAM,SAAS,aAAWmb,GAAmB9b,GAAOW,CAAK,GAC7DC,GAAI,YAAYD,EAAM,IAAIX,EAAM,OAAO,EAAE,GACzCY,GAAI,KAAKD,EAAM,EAAE;AACjB,QAAMob,IAAiB,CAACtU,MAAMjK,GAAMiK,GAAG9G,CAAK;AAC5C,EAAAX,EAAM,OAAO,wBAAwB+b,GACrC/b,EAAM,OAAO,iBAAiB,SAAS+b,CAAc;AACvD;AAEA,SAASve,GAAMwC,GAAOW,GAAO;AAC3B,EAAAC,GAAI,MAAMD,EAAM,EAAE,GAClBX,EAAM,OAAO,oBAAoB,SAASA,EAAM,OAAO,qBAAqB,GAC5E,OAAOA,EAAM,OAAO,uBAChBW,EAAM,SAAS,aAAWqb,GAAsBhc,CAAK;AAC3D;AAGA,SAASyb,GAAWzb,GAAOW,GAAO;AAChC,QAAMsb,IAAYjc,EAAM,OAAO,OAAOW,EAAM,KACxCX,EAAM,SACN,SAAS,eAAeW,EAAM,EAAE;AAEpC,MAAI,CAACsb,EAAW,QAAOze,GAAMwC,GAAOW,CAAK;AAEzC,aAAW,MAAM;AAGf,QAAI,CADgBsb,EAAU,QAAQ,6CAA6C,EACjE,QAAOze,GAAMwC,GAAOW,CAAK;AAC3C,IAAAX,EAAM,OAAO,iBAAiB,cAAc,CAACyH,MAAMgU,GAAWhU,GAAG9G,CAAK,GAAG,EAAE,MAAM,GAAM,CAAA;AAAA,EAC3F,GAAK,GAAG;AACR;AAEA,SAASmb,GAAmB9b,GAAOW,GAAO;AACxC,QAAMW,IAAM;AAEZ,EADiBtB,EAAM,OAAO,aAAasB,CAAG,MAE9CtB,EAAM,OAAO,aAAasB,GAAKX,EAAM,EAAE,GACvCX,EAAM,OAAO,0BAA0B;AACzC;AAEA,SAASgc,GAAsBhc,GAAO;AACpC,EAAKA,EAAM,OAAO,4BAClBA,EAAM,OAAO,gBAAgB,kBAAkB,GAC/C,OAAOA,EAAM,OAAO;AACtB;;;;;;ACvEA,UAAMW,IAAQkE,GAERnF,IAAOoF;AAEb,IAAAoX,GAAQ3gB,IAAmB;AAAA,MACzB,IAAIoF,EAAM;AAAA,MACV,mBAAAwb;AAAA,IACF,CAAC;AAED,UAAMpb,IAAQC,GAAQ,GAChBJ,IAAMR,GAAM,GAEZ,EAAE,yBAAAwZ,GAAyB,YAAAwC,EAAU,IAAK3C,GAAwB9Y,EAAM,gBAAgB;AAE9F,QAAI0b;AAEJ,UAAMJ,IAAYK,GAAe,SAAS,GACpCC,IAAWzgB,EAAI,IAAI,GAQnB0gB,IAAwB,gBANT;AAAA,MACnB,IAAI7b,EAAM,gBAAgB;AAAA,MAC1B;AAAA,MACA;AAAA,IACF,EAE2D,KAAK,GAAG,CAAC,KAE9D8b,IAAiB3gB,EAAG,GAEpB4gB,IAAQ5gB,EAAI,EAAE,GAEdU,IAASO,EAAS,MAAM6D,EAAI,QAAQ,MAAM,SAASD,EAAM,EAAE,CAAC,GAE5DjC,IAAW3B,EAAS,MAAM4D,EAAM,UAAUC,EAAI,eAAe,MAAMD,EAAM,EAAE,CAAC,GAE5Egc,IAAuB5f,EAAS,MAAM2B,EAAS,UAAU,UAAU,GAEnEke,IAAoB7f,EAAS,MAAM;AACvC,UAAIgE,EAAM,YAAY,EAAG;AACzB,YAAM8b,IAAa9b,EAAM,iBAAiB;AAC1C,aAAI8b,MACAJ,EAAe,QAAcA,EAAe,QAC5CE,EAAqB,QAAc/b,EAAI,eAAe,MAAMD,EAAM,EAAE,IACjEjC,EAAS;AAAA,IAClB,CAAC,GAEKoe,IAAY/f,EAAS,MAAM;AAC/B,YAAMggB,IAAWJ,EAAqB,QAAQ,WAAW;AACzD,aAAOhc,EAAM,SAASoc;AAAA,IACxB,CAAC,GAEKrS,IAAW3N,EAAS,MAAM;AAC9B,YAAMzB,IAAMqF,EAAM,mBAAmB,SAAQ;AAC7C,aAAIrF,EAAI,WAAW,QAAQ,KAAKA,EAAI,WAAW,OAAO,KAAKA,EAAI,SAAS,IAAI,IAAUA,IAClFA,EAAI,WAAW,IAAI,IAAU,OAAOA,CAAG,MACpC,GAAGA,CAAG;AAAA,IACf,CAAC,GAEK0hB,IAAmBjgB,EAAS,OACzB;AAAA,MACL,QAAQ4D,EAAM,aAAanE,EAAO;AAAA,MAClC,sBAAsBmE,EAAM;AAAA,MAC5B,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,IAC1B,EACC,GAEKsc,IAAuBlgB,EAAS,MAAM;;AAC1C,eAAOF,IAAA+D,EAAI,gBAAgB,MAAM,aAA1B,gBAAA/D,EAAoC,SAAS8D,EAAM,QAAOA,EAAM,SAAS;AAAA,IAClF,CAAC,GAEKuc,IAAqBngB,EAAS,MAC3B4f,EAAqB,QAAQ,OAAOJ,EAAS,KACrD,GACKY,IAAsBpgB,EAAS,MAC5B4f,EAAqB,QAAQ,OAAOV,EAAU,KACtD;AAED,IAAA/Z,EAAM1F,GAAQ,MAAM;AAClB,MAAA4gB,GAAmB,GACnB5gB,EAAO,QAAQ6gB,EAAM,IAAKC,GAAO;AAAA,IACnC,CAAC,GACDpb,EAAMxD,GAAU0e,EAAmB,GACnClb,EAAMtB,EAAI,iBAAiB,CAAAnE,MAAMkE,EAAM,OAAOlE,KAAM8gB,GAAY,QAAQ,CAAC,GACzErb,EAAMtB,EAAI,iBAAiB,CAAAnE,MAAMkE,EAAM,OAAOlE,KAAM8gB,GAAY,SAAS,CAAC,GAE1Erb,EAAM,MAAMvB,EAAM,kBAAkB6c,GAAwB,EAAE,WAAW,GAAM,CAAA,GAG/Etb,EAAM,MAAMvB,EAAM,cAAc8c,IAAoB,EAAE,WAAW,GAAM,CAAA,GACvEvb,EAAM,MAAMvB,EAAM,iBAAiB+c,IAAuB,EAAE,WAAW,GAAM,CAAA,GAC7Exb,EAAM,MAAMvB,EAAM,qBAAqBgd,IAA2B,EAAE,WAAW,GAAM,CAAA,GAErFzb,EAAM,MAAMvB,EAAM,IAAI,CAACid,GAAOC,MAAU;AACtC,MAAAtgB,GAAWsgB,CAAK,GAChBxgB,EAASugB,CAAK,GAEdJ,EAAsB,GAEtBC,GAAkB,GAClBC,GAAqB,GACrBC,GAAyB;AAAA,IAC3B,CAAC,GAEDvC,GAAkB;AAAA,MAChB,OAAAza;AAAA,MACA,cAAcsc;AAAA,IAChB,CAAC,GAED/U,GAAU7K,CAAQ,GAClBwN,GAAY,MAAM;AAChB,MAAAtN,GAAU,GACV,OAAO,oBAAoB,UAAUugB,EAAQ;AAAA,IAC/C,CAAC;AAGD,UAAM,EAAE,gBAAAC,EAAgB,IAAGC,GAAYd,GAAoBC,GAAqB;AAAA,MAC9E,WAAAL;AAAA,MACA,YAAY;AAAA,QACVmB,GAAO,CAAC;AAAA,QACRC,GAAM;AAAA,QACNC,GAAM,EAAE,SAAS,EAAG,CAAA;AAAA,MACrB;AAAA;AAAA,MAED,WAAW;AAAA,MACX,sBAAsBC;AAAA,IACxB,CAAC;AAID,aAAS/gB,EAASZ,IAAKkE,EAAM,IAAI;AAC/B,MAAAC,EAAI,SAASnE,GAAI,EAAE,OAAAkE,EAAO,CAAA;AAAA,IAC5B;AAEA,aAASpD,GAAWd,IAAKkE,EAAM,IAAI;AACjC,MAAAC,EAAI,WAAWnE,CAAE;AAAA,IACnB;AAEA,aAAS0f,GAAkB7gB,GAAK;AAC9B,MAAAmhB,EAAe,QAAQnhB;AAAA,IACzB;AAEA,aAASiiB,GAAYc,GAAW;AAC9B,MAAA3e,EAAK2e,GAAW,EAAE,IAAI1d,EAAM,GAAI,CAAA;AAAA,IAClC;AAEA,aAASyc,KAAsB;AAC7B,UAAI,CAAC5gB,EAAO,SAASmgB,EAAqB,SAAS,CAACje,EAAS,OAAO;AAClE,QAAA6d,EAAS,QAAQ,MACjBuB,GAAQ;AACR;AAAA,MACJ;AAEE,YAAMQ,IAAY,SAAS,eAAe5f,EAAS,KAAK;AAExD,UAAI6d,EAAS,UAAU+B,GAEvB;AAAA,YAAI,CAACA;AACH,gBAAM,IAAI,MAAM,wDAAwD5f,EAAS,KAAK,IAAI;AAG5F,QAAA6d,EAAS,QAAQ+B,GACjBR,GAAQ;AAAA;AAAA,IACV;AAGA,aAASA,KAAW;AAClB,MAAApB,EAAM,QAAQ/b,EAAM,SAAS,YAAY4b,EAAS,QAC9C,uBAAuBA,EAAS,MAAM,WAAW,OACjD;AAAA,IACN;AAGA,aAASkB,KAAqB;AAC5B,MAAI9c,EAAM,gBACRC,EAAI,UAAUD,EAAM,EAAE,GACtBC,EAAI,mBAAmBD,EAAM,EAAE,MAE/BC,EAAI,OAAOD,EAAM,EAAE,GACnBC,EAAI,gBAAgBD,EAAM,EAAE;AAAA,IAEhC;AAEA,aAAS+c,KAAwB;AAC/B,MAAA/c,EAAM,mBAAmBA,EAAM,eAC3BC,EAAI,UAAUD,EAAM,EAAE,IACtBC,EAAI,OAAOD,EAAM,EAAE;AAAA,IACzB;AAEA,aAASgd,KAA4B;AACnC,MAAAhd,EAAM,uBAAuBA,EAAM,eAC/BC,EAAI,mBAAmBD,EAAM,EAAE,IAC/BC,EAAI,gBAAgBD,EAAM,EAAE;AAAA,IAClC;AAEA,aAAS6c,IAAyB;AAEhC,UAAI,CAAC7c,EAAM,kBAAkB;AAC3B,QAAAC,EAAI,aAAaD,EAAM,EAAE;AACzB;AAAA,MACJ;AAEE,MAAIA,EAAM,oBACRC,EAAI,gBAAgBD,EAAM,EAAE;AAAA,IAEhC;AAEA,aAAS0c,IAAS;AAChB,MAAAE,GAAY,MAAM,GAClBgB,EAA0B,GAC1BlC,IAAgBM,EAAqB,QACjC/b,EAAI,eAAe,MAAMD,EAAM,EAAE,IACjCjC,EAAS,OACb,OAAO,iBAAiB,UAAUof,EAAQ;AAAA,IAC5C;AAEA,aAASR,KAAU;AACjB,MAAAC,GAAY,OAAO,GACnBiB,EAA6B,GAC7BC,GAAgB,GAChB,OAAO,oBAAoB,UAAUX,EAAQ;AAAA,IAC/C;AAEA,aAAStgB,IAAQ;AACf,MAAAoD,EAAI,MAAMD,EAAM,EAAE;AAAA,IACpB;AAEA,aAASvB,IAAS;AAChB,MAAAwB,EAAI,OAAOD,EAAM,EAAE;AAAA,IACrB;AAEA,aAASpB,IAAU;AACjB,MAAAqB,EAAI,QAAQD,EAAM,EAAE;AAAA,IACtB;AAGA,mBAAe8d,KAAmB;AAMhC,UAHI7d,EAAI,gBAAgB,SAAS,CAACD,EAAM,YAGpCsc,EAAqB,MAAO;AAEhC,YAAMyB,IAAgB,SAAS,eAAerC,CAAa;AAC3D,MAAAkB,GAAY,cAAc,GAC1B,MAAMoB,GAAQ,GACdD,KAAA,QAAAA,EAAe;AAAA,IACjB;AAIA,aAASH,IAA6B;;AACpC,OAAK1hB,IAAA0f,EAAS,UAAT,QAAA1f,EAAgB,UAAU,SAAS,kBACxCD,IAAA2f,EAAS,UAAT,QAAA3f,EAAgB,UAAU,IAAI;AAAA,IAChC;AAEA,aAAS4hB,IAAgC;;AACvC,OAAA3hB,IAAA0f,EAAS,UAAT,QAAA1f,EAAgB,UAAU,OAAO;AAAA,IACnC;qBA3UkB0I,EAAuBqU,CAAA,UAAvC5T,EAsDW4Y,IAAA;AAAA;MAtD+B,IAAIrZ,EAAU6W,CAAA;AAAA;MAEtDhW,EAkDakF,IAAA;AAAA,QAjDV,MAAMuT,EAAc;AAAA,QACpB,OAAOA,EAAc;AAAA,QACtB,QAAA;AAAA,QACC,+CAA4CnU,EAAQ,KAAA,GAAA;AAAA,QACpD,cAAWgC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAErR,EAAI,cAAA,EAAA,IAAiBjD,EAAE,GAAA,CAAA;AAAA,QACpC,cAAWiQ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAErR,EAAI,eAAA,EAAA,IAAkBjD,EAAE,GAAA,CAAA;AAAA;mBAEtC,MAwCM;AAAA,UAvCEqiB,EAAAA,WAAWtiB,EAAM,iBADzB8I,EAwCM,OAAA;AAAA;YArCH,OAAO7I,EAAE,EAAA;AAAA,YACV,OAAM;AAAA;YAGEsiB,EAAQ,iBADhB/Y,EAG4CgZ,IAAA;AAAA;cADzC,QAAQxiB,EAAM;AAAA,cACd,kBAAgBggB;AAAA;YAEnByC,IAAArZ,EAAA,GAAAN,EA2BM,OA3BNyD,EA2BM,EA1BH,IAAItM,EAAAA,MACGoQ,EAAM,QAAA;AAAA,cACd,KAAI;AAAA,cACJ,OAAM;AAAA,cACL,aAAW3D,EAAI;AAAA,cACf,mBAAiByT,EAAA,QAAuBG,EAAA,QAAY;AAAA,cACpD,OAAU,CAAA,CAAAH,EAAA,SAAwBpX,EAAAwY,CAAA,GAAgBrB,EAAK,KAAA;AAAA,cACvD,MAAM7a,EAAI;AAAA,cACV,mBAAiB+a,EAAiB;AAAA,cAClC,cAAYmC,EAAQ,YAAI;AAAA,cACzB,UAAS;AAAA,cAER,iBAAerS,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAErR,EAAI,mBAAA,EAAA,IAAsBjD,EAAE,GAAA,CAAA;AAAA,cAC7C,WAAQiQ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAErR,EAAI,YAAA,EAAA,IAAejD,EAAE,GAAA,CAAA;AAAA;cAEhCqJ,EAAgDC,iCAAhCtJ,EAAE,IAAA,OAAEe,GAAO,QAAA4B,YAAQG,EAAO,CAAA,CAAA,CAAA;AAAA,cAQjC2f,CAAAA,EAAAA,kBAAkBC,EAAY,qBADvCnZ,EAEsBoZ,IAAA;AAAA;gBAApB,cAAW;AAAA;;sBAbCpC,EAAgB,KAAA;AAAA;;YArBxB8B,CAAAA,IAAAA,EAAAA,UAAUtiB,EAAM,QAAA,EAAA;AAAA;;;;;;ICbnB6iB,KAAqB,OAAO,oBAAoB,GCKvDtF,KAAa,mBAENuF,KAAS;AAAA,EAEpB,QAAQjU,GAAI,EAAE,KAAAkU,GAAK,OAAAlkB,EAAK,GAAI;AAI1B,QAAI,EAFuBA,MAAU,UAAaA,GAEzB;AAIzB,UAAMmkB,IAAkBnU,EAAG,QAAQ,0CAA0C;AAE7E,QAAIqQ,IAAQ;AAEZ,QAAI8D,GAAiB;AACnB,YAAM9U,IAAW,iBAAiB8U,CAAe,EAAE,iBAAiB,kCAAkC;AACtG,MAAA9D,IAAQhR,EAAS,QAAQ,MAAM,EAAE,GAC7BgR,EAAM,SAAS,GAAG,MAAGA,IAAQhR,EAAS,QAAQ,KAAK,EAAE,IAAI;AAAA,IACnE;AAGI,IAAAW,EAAG,QAAQ0O,EAAU,IAAI,WAAW,MAAM0F,GAAaF,GAAKlU,CAAE,GAAGqQ,CAAK;AAAA,EACvE;AAAA,EAGD,QAAQrQ,GAAI,EAAE,KAAAkU,GAAK,OAAAlkB,EAAK,GAAI;AAC1B,IAAIA,KAAOokB,GAAaF,GAAKlU,CAAE;AAAA,EAChC;AAAA,EAGD,cAAcA,GAAI;AAEhB,iBAAaA,EAAG,QAAQ0O,EAAU,CAAC;AAAA,EACvC;AACA;AAKA,SAAS0F,GAAaF,GAAKlU,GAAI;AAC7B,QAAMqU,IAAYH,IAAMlU,EAAG,cAAckU,CAAG,IAAIlU;AAChD,EAAAqU,KAAA,QAAAA,EAAW;AACb;ACzCO,SAASC,KAAqB;AAEnC,MAAIC,IAAkB;AAEtB,QAAMC,IAAsB/jB,EAAI,CAAC,GAE3BgkB,IAAmB/iB,EAAS,MAAM8iB,EAAoB,QAAQ,CAAC;AAErE,WAASE,IAAY;AACnB,WAAAH,IAAkB,IAAI,gBAAe,GAC9BA,EAAgB;AAAA,EAC3B;AAKE,iBAAeI,EAAajhB,GAAI;AAC9B,IAAA8gB,EAAoB;AACpB,UAAMI,IAAM,MAAMlhB,EAAE;AACpB,WAAA8gB,EAAoB,SACbI;AAAA,EACX;AAEE,WAASC,IAAuB;AAC9B,IAAAN,KAAA,QAAAA,EAAiB;AAAA,EACrB;AAEE,SAAO;AAAA,IACL,kBAAAE;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC;AAAA,IACA,sBAAAE;AAAA,EACJ;AACA;;;;;;;;;;;;;;;;;;ACOA,UAAMvf,IAAQkE,GAERsb,IAAQC,GAGbvb,GAAA,YAAA,GAIKwb,IAAWnf,GAAOme,IAAoB,IAAI,GAE1CO,IAAkBD,GAAkB,GAGpC,EAAE,UAAUW,GAAW,WAAWC,EAAY,IAAG7R,GAAe,CAAC,SAAS,OAAO,CAAC,GAElF8R,IAAiB1kB,EAAI,EAAK,GAI1B2kB,IAAoB3kB,EAAI,EAAK,GAE7B4kB,IAAe3jB,EAAS,MAAMojB,EAAM,MAAM,UAAUxf,EAAM,QAAQ,GAMlE0N,IAAQtR,EAAS,MAAM2jB,EAAa,QAAQP,EAAM,QAAQ,EAAE,GAE5DQ,IAAgB5jB,EAAS,MAAM;AACnC,YAAM1B,IAAQsF,EAAM;AACpB,aAAI,CAAC,IAAM,MAAM,EAAE,SAAStF,CAAK,IAAU,MACvC,CAAC,QAAW,MAAM,IAAO,OAAO,EAAE,SAASA,CAAK,IAAU,IACvDA;AAAA,IACT,CAAC,GAEKulB,IAAiB7jB,EAAS,MAAM;AACpC,YAAMgC,IAAK4B,EAAM,iBAAiBkgB,IAAYC;AAC9C,aAAOnT,GAAS5O,GAAI4hB,EAAc,KAAK;AAAA,IACzC,CAAC,GAEKI,IAAchkB,EAAS,MAAM;AACjC,UAAI2jB,EAAa,MAAO,QAAO;AAC/B,YAAMM,IAAQrgB,EAAM,WAAWwf,EAAM,MAAM;AAC3C,aAAO,gBAAgBa,CAAK,kBAAkBA,MAAU,IAAI,KAAK,GAAG;AAAA,IACtE,CAAC,GAEKtP,IAAO3U,EAAS,MAAM;AAC1B,UAAIgkB,EAAY,MAAO,QAAOA,EAAY;AAC1C,UAAIN,EAAkB,SAASb,EAAgB,iBAAiB,MAAO,QAAO;AAC9E,YAAMhhB,IAAU,OAAO,OAAOyhB,EAAS,YAAY,KAAK;AAExD,aADI,CAACI,EAAkB,SAASpS,EAAM,MAAM,UAAU,CAACzP,EAAQ,UAC3D,CAAC+B,EAAM,kBAAkB0N,EAAM,MAAM,UAAU,CAACzP,EAAQ,KAAK,CAAAqiB,MAAOA,EAAI,UAAU,KAAK,IAAU,sBAC9F;AAAA,IACT,CAAC;AAID,IAAA/e,EAAMie,GAAO,CAAC7E,GAAQ4F,MAAW;AAC/B,MAAI,CAAC5F,KAAU,CAAC4F,MAChBT,EAAkB,QAAQE,EAAc,QAAQ,GAChDR,EAAM,SAASO,EAAa,QACxBE,EAAe,MAAK,IACpBA,EAAe,MAAM,QAAO;AAAA,IAClC,GAAG,EAAE,WAAW,GAAM,CAAA,GAEtB1Y,GAAU,MAAM;;AACd,UAAIvH,EAAM,kBAAgB9D,IAAAwjB,EAAS,OAAO,MAAM,UAAtB,QAAAxjB,EAA6B,QAAO;AAC5D,QAAAsjB,EAAM,QAAQE,EAAS,OAAO,MAAM,MAAM;AAC1C;AAAA,MACJ;AACE,MAAAA,EAAS,eAAe,EAAE,OAAAhS,GAAO,gBAAA8S,GAAgB,iBAAAC,EAAiB,CAAA;AAAA,IACpE,CAAC,GAEDvW,GAAY,MAAM;AAChB,MAAAwV,EAAS,iBAAgB;AAAA,IAC3B,CAAC;AAID,aAASQ,EAAUvlB,IAAM+S,EAAM,OAAO;AAEpC,UADAuR,EAAgB,qBAAoB,GAChCjf,EAAM,SAAS;AAEjB,cAAMsC,IAAM,EAAE,aAAa2c,EAAgB,UAAW,EAAA;AACtD,QAAAA,EAAgB,aAAa,MAAMjf,EAAM,QAAQrF,GAAK2H,CAAG,CAAC;AAAA,MAC9D;AACE,MAAAwd,EAAkB,QAAQ;AAAA,IAC5B;AAEA,aAASY,IAAa;AACpB,MAAAb,EAAe,QAAQ;AAAA,IACzB;AAGA,aAASW,IAAiB;AACxB,MAAAE,EAAU;AAAA,IACZ;AAGA,aAASD,IAAkB;AACzB,MAAAR,EAAe,MAAM,MAAK,GAErBjgB,EAAM,iBACTwf,EAAM,QAAQ,KAIhBU,EAAU,EAAE;AAAA,IACd;AAEA,aAASS,IAAqB;AAC5B,MAAAnB,EAAM,QAAQ,IACdkB,EAAU;AAAA,IACZ;AAIA,aAASP,IAAgB;AAEvB,YAAMS,IAAa5gB,EAAM,WAEnB6gB,IAAkB;AAAA,QACtB,WAAW,CAAApjB,MAAKA,EAAE,YAAY,MAAM;AAAA,QACpC,QAAQ,CAAAA,MAAKA,EAAE,MAAM,MAAMuC,EAAM,SAAS;AAAA,QAC1C,UAAU,CAAAvC,MAAKuC,EAAM,UAAUvC,EAAE,MAAM,KAAK;AAAA,MAChD,GAEQQ,IAAU,OAAO,OAAOyhB,EAAS,YAAY,KAAK,GAClDoB,IAAWD,EAAgB,OAAOD,CAAU;AAElD,MAAA3iB,EAAQ,QAAQ,CAAA8iB,MAAU;AACxB,QAAAA,EAAO,UAAU,QAAQhB,EAAa,QAClCe,EAASC,CAAM,EAAE,YAAW,EAAG,SAASvB,EAAM,MAAM,YAAa,CAAA,IACjE;AAAA,MACL,CAAA,GAEDU,EAAS;AAAA,IACX;sBA1LEjb,EAAA,GAAAN,EAiCM,OAjCNyD,EAiCM,EAhCJ,OAAM,wBACExD,EAAS+a,CAAA,GAAA;AAAA,MAChB,mBAAiBqB,EAAS,aAAI;AAAA;MAEIA,EAAS,yBAA5C/b,KAAAN,EAsBM,OAtBN+D,IAsBM;AAAA,QArBJjD,EAEuBb,EAAAqc,EAAA,GAAA;AAAA,UADrB,OAAM;AAAA,UACN,eAAY;AAAA;QAEd3C,GAAA7Y,EAOmC4G,IAPnCjE,EAOmC;AAAA,UANjC,OAAM;AAAA,UACN,cAAW;AAAA,sBACGoX,EAAK;AAAA,wDAALA,EAAK,QAAApP;AAAA,0BAAnB,EAAoB,MAAA,GAAA;AAAA,WACZxL,EAAUgb,CAAA,GAAA;AAAA,UAEjB,aAAajP,EAAW;AAAA,UACxB,+BAAMkP,EAAc,QAAA;AAAA;kBAFZA,EAAc,KAAA;AAAA;QAKjBL,EAAK,cADb7a,EAOS,UAAA;AAAA;UALP,OAAM;AAAA,UACN,MAAK;AAAA,UACL,cAAW;AAAA,UACV,YAAYgc,GAAkB,CAAA,MAAA,CAAA;AAAA;UAC/Blb,EAAyBb,EAAA0E,EAAA,GAAA,EAAZ,MAAK,KAAI,CAAA;AAAA;;MAIjByH,EAAI,cAAbpM,EAEI,KAFJgE,IAEImD,EADCiF,EAAI,KAAA,GAAA,CAAA;;;;ACzBN,SAASmQ,GAAoBlhB,GAAOmhB,GAAaC,GAAiBC,GAAY;AAGnF,QAAMC,IAAcnmB,EAAI,EAAE,GACpBomB,IAAkB;AAAA,IACtB,WAAW;AAAA,IACX,oBAAoB;AAAA,EACxB,GAIQC,IAAkBplB,EAAS,MAAM;AAErC,UAAM6B,IAAU,OAAO,OAAOkjB,EAAY,KAAK,GACzChT,IAAW,CAAA,GACXC,IAAY,CAAA;AAClB,QAAIqT;AACJ,aAASxd,IAAI,GAAGA,IAAIhG,EAAQ,QAAQgG,KAAK;AACvC,YAAM8c,IAAS9iB,EAAQgG,CAAC;AACxB,MAAI8c,EAAO,UAAU,SAAS,CAACA,EAAO,MAAM,aACtCA,EAAO,YAAYU,MAErBtT,EAAS,KAAK,GAAGC,CAAS,GAC1BA,EAAU,SAAS,GACnBqT,IAAkBV,EAAO,UAGvBA,EAAO,gBAAgB,QACzB5S,EAAS,KAAK4S,EAAO,YAAY,KAAK,IAEtC3S,EAAU,KAAK2S,EAAO,YAAY,KAAK;AAAA,IAGjD;AACI,WAAA5S,EAAS,KAAK,GAAGC,CAAS,GACnBD;AAAA,EACR,CAAA,GACKuT,IAAiBtlB,EAAS,MAC1BklB,EAAY,UAAU,KACjBE,EAAgB,MAAMF,EAAY,KAAK,EAAE,aAAa,IAAI,IAE5D,IACR;AAGD,EAAApX,GAAY,MAAM;AAChB,IAAAyX,EAA0B;AAAA,EAC3B,CAAA;AAGD,WAASC,EAAgBC,IAAoB,IAAI;AAE/C,QAAIP,EAAY,UAAU,IAAI;AAG5B,UAAIQ,IAAiBD,GACjBtkB,IAAQ;AACZ,aAAO,CAACyC,EAAM,YACJ8hB,MAAmBD,KACnBtkB,IAAQikB,EAAgB,MAAM;AAEtC,QADeA,EAAgB,MAAMjkB,CAAK,EAC/B,aAAa,eAAe,MAAM,WAC3CukB,IAAiBvkB,IAEnBA;AAEF,MAAA+jB,EAAY,QAAQQ;AAAA,IAC1B;AAAA,EACA;AAEE,WAASC,EAAgBC,GAAU;AACjC,UAAMC,IAAiB;AAAA,MACrB,MAAMb,EAAgB;AAAA,MACtB,YAAY;AAAA,IAClB,GAIUc,IAAW,IAAI,qBAAqB,CAACC,MAAY;AACrD,YAAMC,IAAQD,EAAQ,OAAO,CAACtQ,GAAKwQ,MACjCA,EAAM,iBAAiBxQ,IAAM,IAAIA,GAChC,CAAC;AAEJ,MAAAmQ,EAASI,IAAQ,CAAC,GAElBF,EAAS,WAAU;AAAA,IACzB,GAAOD,CAAc;AAIjB,IAFkBb,EAAgB,MAAM,iBAAiB,iCAAiC,EAEhF,QAAQ,CAAC1W,MAAOwX,EAAS,QAAQxX,CAAE,CAAC;AAAA,EAClD;AAEE,WAAS4X,EAAa3V,GAAI;AACxB,UAAM4V,IAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,QAAIf,EAAgB,MAAM,SAAS,KAAKe,EAAc,SAAS5V,EAAG,GAAG,GAAG;AAItE,cAFAiV,EAAe,GAEPjV,EAAG,KAAG;AAAA,QACZ,KAAK;AAEH,UAAA2U,EAAY,QAAQ,KAAK,IAAIA,EAAY,QAAQ,GAAGE,EAAgB,MAAM,SAAS,CAAC;AACpF;AAAA,QACF,KAAK;AAEH,UAAAF,EAAY,QAAQ,KAAK,IAAIA,EAAY,QAAQ,GAAG,CAAC;AACrD;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAEH,gBAAMkB,IAAa,KAAK,IAAIlB,EAAY,OAAO,CAAC;AAChD,UAAAS,EAAgB,CAACK,MAAU;AACzB,YAAAd,EAAY,QAAQ,KAAK,IAAIkB,IAAaJ,GAAOZ,EAAgB,MAAM,SAAS,CAAC;AAAA,UAClF,CAAA;AACD;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAAO,EAAgB,CAACK,MAAU;AACzB,YAAAd,EAAY,QAAQ,KAAK,IAAIA,EAAY,QAAQc,GAAO,CAAC;AAAA,UAC1D,CAAA;AACD;AAAA,QACF,KAAK;AACH,UAAAd,EAAY,QAAQ;AACpB;AAAA,QACF,KAAK;AACH,UAAAA,EAAY,QAAQE,EAAgB,MAAM,SAAS;AACnD;AAAA,MACV;AAGM,MAAAJ,EAAgB,MAAM,MAAK,GAC3BzU,EAAG,eAAc;AAAA,IACvB;AAAA,EACA;AAEE,WAAS8V,EAAc9V,GAAI;AAEzB,IADoB,CAAE,KAAK,SAAS,aAAa,EACjC,SAASA,EAAG,GAAG,KAAK2U,EAAY,UAAU,OACzCE,EAAgB,MAAMF,EAAY,KAAK,EAC/C,MAAK,GACZ3U,EAAG,eAAc;AAAA,EAEvB;AAEE,WAAS+V,EAAY/V,GAAI;AACvB,UAAMgW,IAAW;AACjB,QAAInB,EAAgB,MAAM,SAAS,KAC5B,CAACH,EAAW,SACZsB,EAAS,KAAKhW,EAAG,GAAG,GAAG;AAE5B,MAAIA,EAAG,YAAY4U,EAAgB,qBAAqB,MAEtDA,EAAgB,YAAY5U,EAAG,IAAI,YAAW,IAG9C4U,EAAgB,aAAa5U,EAAG,IAAI,YAAW,GAGjD4U,EAAgB,qBAAqB5U,EAAG;AAGxC,UAAIiW,IAAQ,IACRrlB,IAAQ;AACZ,aAAO,CAACqlB,KAASrlB,IAAQikB,EAAgB,MAAM;AAI7C,QAHmBA,EAAgB,MAAMjkB,CAAK,EAAE,YAC7C,KAAI,EACJ,YAAW,EACC,WAAWgkB,EAAgB,SAAS,MACjDD,EAAY,QAAQ/jB,GACpB6jB,EAAgB,MAAM,MAAK,GAC3BzU,EAAG,eAAc,GACjBiW,IAAQ,KAEVrlB;AAAA,IAER;AAAA,EACA;AAEE,WAASslB,IAA0B;;AACjC,aAAS,iBAAiB,WAAWP,CAAY,GACjD,SAAS,iBAAiB,WAAWI,CAAW,IAChDxmB,IAAAklB,EAAgB,UAAhB,QAAAllB,EAAuB,iBAAiB,WAAWumB;AAAA,EACvD;AAEE,WAASd,IAA6B;;AACpC,aAAS,oBAAoB,WAAWW,CAAY,GACpD,SAAS,oBAAoB,WAAWI,CAAW,IACnDxmB,IAAAklB,EAAgB,UAAhB,QAAAllB,EAAuB,oBAAoB,WAAWumB;AAAA,EAC1D;AAEE,WAASK,IAAmB;AAC1B,IAAAxB,EAAY,QAAQ;AAAA,EACxB;AAEE,SAAO;AAAA,IACL,gBAAAI;AAAA,IACA,iBAAAF;AAAA,IACA,yBAAAqB;AAAA,IACA,iBAAAjB;AAAA,IACA,4BAAAD;AAAA,IACA,kBAAAmB;AAAA,EACJ;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtIA,UAAM9iB,IAAQkE,GAERsb,IAAQC,GAGbvb,GAAA,YAAA,GAIK6e,IAAgB5nB,EAAG,GAEnB6nB,IAAcvD,GAAYvb,GAAA,aAG/B,GAEKkd,IAAkBzF,GAAe,eAAe,GAEhD1b,IAAMR,GAAM;AAElB,IAAAgO,GAAc,sBAAsB,CAACC,MAAU;AAC7C,MAAAuV,EAAS,QAAQvV,EAAM;AAAA,IACzB,CAAC,GAEDD,GAAc,uBAAuB,CAACC,MAAU;AAC9C,MAAAwV,EAAS,QAAQxV,EAAM;AAAA,IACzB,CAAC;AAED,UAAMyT,IAAclmB,GAAW,CAAE,CAAA,GAE3BkoB,IAAiBloB,GAAW,CAAE,CAAA,GAE9BgoB,IAAW9nB,EAAI,EAAK,GACpB+nB,IAAW/nB,EAAI,EAAK,GAKpBioB,IAAiBhnB,EAAS,MAAM4D,EAAM,UAAU,eAAe,OAAO,GAEtEqhB,IAAajlB,EAAS,MAAM4D,EAAM,UAAUA,EAAM,aAAaA,EAAM,cAAc,GAEnFqjB,IAAWjnB,EAAS,MAAM;AAC9B,UAAIolB,EAAgB,MAAM,SAAS,KAC5BvhB,EAAI,OAAOD,EAAM,EAAE;AACxB,eAAO;AAAA,IAIX,CAAC,GAEKsjB,IAAwBlnB,EAAS,MAC7B4D,EAAM,gBAAgB,YAAYkjB,EAAS,SAC7CljB,EAAM,gBAAgB,YAAYijB,EAAS,KAClD,GAEKM,IAAiBnnB,EAAS,MAC1BknB,EAAsB,QACjB,aAEFtjB,EAAM,MACd,GAEKwjB,IAAgBpnB,EAAS,MACzBknB,EAAsB,QACjB,WAEFtjB,EAAM,KACd,GAEK;AAAA,MACJ,gBAAA0hB;AAAA,MACA,iBAAAF;AAAA,MACA,yBAAAqB;AAAA,MACA,iBAAAjB;AAAA,MACA,4BAAAD;AAAA,MACA,kBAAAmB;AAAA,IACF,IAAI5B,GAAoBlhB,GAAOmhB,GAAaC,GAAiBC,CAAU;AAEvE,IAAA9F,GAAQmD,IAAoB;AAAA;AAAA,MAE1B,OAAA1e;AAAA,MACA,OAAAwf;AAAA,MACA,UAAAiE;AAAA,MACA,YAAAC;AAAA,MACA,uBAAAC;AAAA,MACA,iCAAAC;AAAA;AAAA,MAGA,gBAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,gBAAApC;AAAA,MACA,aAAAP;AAAA;AAAA,MAGA,gBAAA4C;AAAA,MACA,kBAAAC;AAAA,MACA,QAAQb;AAAA,IACV,CAAC;AAID,aAASU,EAAe/nB,GAAIilB,GAAQ;AAClC,MAAAI,EAAY,QAAQ,EAAE,GAAGA,EAAY,OAAO,CAACrlB,CAAE,GAAGilB,EAAM;AAAA,IAC1D;AAEA,aAAS+C,EAAiBhoB,GAAI;AAC5B,YAAM,EAAE,CAACA,CAAE,GAAEoB,GAAQ,GAAGC,EAAU,IAAKgkB,EAAY;AACnD,MAAAA,EAAY,QAAQ,EAAE,GAAGhkB,EAAU;AAAA,IACrC;AAEA,aAAS4mB,EAAepnB,GAAM;AAC5B,MAAAwmB,EAAe,QAAQxmB;AAAA,IACzB;AAEA,aAASqnB,IAAmB;AAC1B,MAAAb,EAAe,QAAQ,CAAA;AAAA,IACzB;AAEA,mBAAezG,KAAS;;AACtB,MAAAqG,EAAc,QAAQvD,EAAM,OAEvBxf,EAAM,WAAS,MAAMge,GAAQ,IAClC/hB,KAAAC,IAAAinB,EAAe,OAAM,mBAArB,QAAAlnB,EAAA,KAAAC,IAEK8D,EAAM,YACTge,GAAS,MAAM;;AACb,cAAMiG,IAAiB7C,EAAgB,MAAM,cAAc,wBAAwB;AACnF,SAAAllB,KAAA+nB,KAAA,gBAAAA,EAAgB,mBAAhB,QAAA/nB,GAAA,KAAA+nB,GAAiC,EAAE,OAAO,UAAW;AAAA,MACtD,CAAA;AAAA,IAEL;AAEA,aAAStH,KAAU;;AACjB,OAAA1gB,KAAAC,IAAAinB,EAAe,OAAM,oBAArB,QAAAlnB,EAAA,KAAAC,IACAylB,EAA0B,GAC1BmB,EAAgB;AAAA,IAClB;AAEA,aAASjmB,KAAQ;AACf,MAAAoD,EAAI,MAAMD,EAAM,EAAE;AAAA,IACpB;AAEA,UAAMkkB,KAAgB9nB,EAAS,MAAMwnB,GAAiC,CAAA;AAGtE,aAASA,GAAgCO,GAAS;AAChD,aAAO,OAAO,OAAOhD,EAAY,KAAK,EAAE,KAAK,CAAAJ,MAAUA,EAAO,YAAYoD,KAAWpD,EAAO,gBAAgB,SAASA,EAAO,UAAU,KAAK,KACzI,OAAO,OAAOI,EAAY,KAAK,EAAE,KAAK,CAAAJ,MAAUA,EAAO,YAAYoD,KAAW,CAACpD,EAAO,gBAAgB,SAASA,EAAO,UAAU,KAAK;AAAA,IACzI;AAEA,aAAS4C,GAAsBhpB,GAAK;AAClC,aAAOypB,GAAcrB,EAAc,OAAOpoB,CAAG;AAAA,IAC/C;AAEA,aAAS+oB,GAAW/oB,GAAK;AACvB,aAAOypB,GAAc5E,EAAM,OAAO7kB,CAAG;AAAA,IACvC;AAEA,aAASypB,GAAcjU,GAAYxV,GAAK;AACtC,UAAI,CAACwV,EAAY,QAAO;AAGxB,UAAI,CAACnQ,EAAM,SAAU,QAAOqkB,EAAQlU,GAAYxV,CAAG;AAGnD,UAAI,CAAC,MAAM,QAAQwV,CAAU;AAC3B,cAAM,IAAI,MAAM,oFAAoFA,CAAU,EAAE;AAIlH,aAAOA,EAAW,KAAK,CAAAwB,MAAM0S,EAAQ1S,GAAIhX,CAAG,CAAC;AAAA,IAC/C;AAEA,aAAS0pB,EAAQjS,GAAGC,GAAG;AACrB,YAAM,EAAE,UAAAiS,EAAQ,IAAKtkB,GACfukB,KAAW,CAAC9mB,MAAM,OAAOA,KAAM,YAAYA,MAAM,QAAQ,CAAC,MAAM,QAAQA,CAAC;AAE/E,aAAI8mB,GAASnS,CAAC,KAAKmS,GAASlS,CAAC,IACpB,OAAOiS,KAAa,aACvBA,EAASlS,CAAC,MAAMkS,EAASjS,CAAC,IAC1BD,EAAEkS,CAAQ,MAAMjS,EAAEiS,CAAQ,IAGzBlS,MAAMC;AAAA,IACf;AAEA,aAASoR,EAAS9oB,GAAK;AAErB,UAAI,CAACqF,EAAM,YAAY0jB,GAAW/oB,CAAG,EAAG,QAAOkC,GAAK;AAEpD,MAAA2iB,EAAM,QAAQxf,EAAM,WAChBwkB,GAAc7pB,CAAG,IACjBA,GAECqF,EAAM,YAAUnD,GAAK;AAAA,IAC5B;AAEA,aAAS2nB,GAAc7pB,GAAK;AAC1B,aAAK6kB,EAAM,QAEJkE,GAAW/oB,CAAG,IACjB6kB,EAAM,MAAM,OAAO,CAAA7N,MAAM,CAAC0S,EAAQ1S,GAAIhX,CAAG,CAAC,IAC1C,CAAE,GAAG6kB,EAAM,OAAO7kB,CAAG,IAJA,CAACA,CAAG;AAAA,IAK/B;sBA/REsK,EAAA,GAAAI,EAkEYof,IAlEZrc,EAkEY;AAAA,MAjET,IAAItM,EAAE;AAAA,MAEP,OAAM;AAAA,MACL,QAAQynB,EAAc;AAAA,MACtB,UAAUD,EAAqB;AAAA,MAChC,kBAAe;AAAA,MACd,qBAAmBoB,EAAAA,cAAcA,EAAAA,cAAc;AAAA,MAC/C,SAASvG,EAAO;AAAA,MAChB,OAAOqF,EAAa;AAAA,MACpB,oBAAkBF,EAAqB;AAAA,MACxC,2BAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,MACA,MAAK;AAAA,MACJ,aAAY1e,EAAuBie,CAAA;AAAA,IACnC,GAAA,EAAA,CAAA8B,GAAAvB,EAAA,KAAgB,IAAEzG,GAAO,GAAA;AAAA,MACzB,iBAAiB5Q,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAAxL,EAAA3E,CAAA,EAAI,MAAMnE,EAAE,EAAA;AAAA,MAC7B,WAAUiQ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAAxL,EAAA3E,CAAA,EAAI,MAAMnE,EAAE,EAAA;AAAA,MACtB,QAAM4gB;AAAA;MAEP,SAAAhT,EAAA,CAOS,EA1BC,IAAA5N,GAAI,QAAA2C,IAAQ,SAAAG,GAAS,OAAA/B,QAAK;AAAA,QAmBpCiI,EAOS,UAPT0D,IAOS;AAAA,WANPvD,EAAA,GAAAI,EAEYE,GAFuCqf,EAAAA,gBAAgB,GAAxD,EAAA,OAAM,gCAA4B;AAAA,uBAC3C,MAAmB;AAAA,kBAAhBC,EAAa,aAAA,GAAA,CAAA;AAAA;;;UAE8BC,EAAiB,0BAAjEngB,EAEI,KAFJ+D,IAEIoD,EADCgZ,EAAiB,iBAAA,GAAA,CAAA;;QAKhBzD,EAAU,cADlBhc,EAUqB0f,IAAA;AAAA;sBARV/B,EAAW;AAAA,wDAAXA,EAAW,QAAA5S;AAAA,UACnB,cAAY4U,EAAe;AAAA,UAC3B,cAAYC,EAAS;AAAA,UACrB,mBAAiBC,EAAc;AAAA,UAC/B,UAAUlY,EAAQ;AAAA,UAClB,aAAWmY,EAAQ;AAAA,UACnB,aAAaxU,EAAW;AAAA,UACxB,iBAAeyU,EAAkB;AAAA,UACjC,SAAOziB,EAAO;AAAA;QAEjBmC,EAkBM,OAAA;AAAA,UAjBJ,OAAM;AAAA,UACN,KAAI;AAAA,UACH,yBAAuBF,EAAc8c,CAAA,KAAI;AAAA,UACzC,cAAY2D,EAAS;AAAA,UACtB,aAAU;AAAA,UACT,wBAAsBC,EAAQ,YAAI;AAAA,UAClC,MAAMpkB,EAAI;AAAA,UACV,UAAUmiB,EAAQ;AAAA,UAClB,gCAAOze,EAAegd,CAAA,EAAA,CAAA;AAAA,UACtB,+BAAMhd,EAAgBke,CAAA,EAAA;AAAA,UACtB,gCAAD,MAAkB;AAAA,UAAA,GAAA,CAAA,SAAA,CAAA;AAAA;UAI2CoB,GAAa,SAA1Ejf,KAAAN,EAA6E,MAA7EO,EAA6E;UAC7EC,EAAgDC,6BAAhC,IAAAtJ,GAAI,QAAA2C,IAAQ,SAAAG,GAAS,OAAA/B,EAAK,CAAA,CAAA,CAAA;AAAA;QAI9ByoB,EAAQ,YAAtBrgB,KAAAN,EAES,UAFTqO,IAES;AAAA,UADPvN,EAA6DmT,IAAA,EAAnD,aAAU,OAAM,GAAA;AAAA,uBAAC,MAAuB;AAAA,kBAApB2M,EAAiB,iBAAA,GAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDrD,UAAMvlB,IAAQkE,GAoCRnF,IAAOoF,GAWPqhB,IAAWrqB,EAAI,IAAI,GACnB,CAAEsqB,CAAQ,IAAK3hB,GAAc,CAAC,GAE9B4hB,IAAgBtpB,EAAS,OAAO;AAAA,MACpC,MAAM4D,EAAM,aAAa,UAAWA,EAAM,YAAY,eAAe;AAAA,MACrE,MAAM,GAAQA,EAAM,cAAcA,EAAM;AAAA,MACxC,MAAMA,EAAM,aAAa,qBAAsBA,EAAM,YAAY,4BAA4B;AAAA,IAC/F,EAAE,GAEI2lB,IAAkBvpB,EAAS,MAAMspB,EAAc,MAAM,SAAS,OAAO;AAE3E,aAASE,IAAiB;AACxB,MAAID,EAAgB,QAClB5mB,EAAK,OAAO,IAEZA,EAAK,SAAS;AAAA,IAElB;2BAMAsG,EAuDe8G,IAAA;AAAA,MAtDb,aAAU;AAAA,MACT,UAAUjI,EAAQ;AAAA,MAClB,OAAOA,EAAK;AAAA,MACZ,IAAIA,EAAW;AAAA,MACf,YAAY;AAAA,MACb,SAAQ;AAAA;iBAER,MAqBE;AAAA,QArBFuB,EAqBE4G,IArBFjE,EAqBE;AAAA,mBApBI;AAAA,UAAJ,KAAIod;AAAA,UACH,iBAAethB,EAAS;AAAA,UACxB,oBAAkBA,EAAM;AAAA,UACxB,iBAAeA,EAAA,YAAYA,EAAA,OAAO;AAAA,UAClC,iBAAeA,EAAS,YAAA,YAAe;AAAA,UACvC,gBAAcA,EAAK;AAAA,UACpB,aAAU;AAAA,UACT,cAAYA,EAAK;AAAA,UACjB,UAAUA,EAAQ;AAAA,UAClB,eAAaA,EAAU;AAAA,UACvB,aAAaA,EAAW;AAAA,UACxB,UAAUA,EAAQ;AAAA,UAClB,MAAMA,EAAS,YAAA,aAAgB;AAAA,UAC/B,gCAAOqI,EAAK,MAAA,aAAA;AAAA,UACZ,gCAAOA,EAAK,MAAA,qBAAsB6D,EAAO,OAAO,KAAK;AAAA,UACrD,WAAO;AAAA,yCAAY7D,EAAK,MAAA,iBAAA,GAAA,CAAA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA;AAAA,yCACLA,EAAK,MAAA,WAAA,GAAA,CAAA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA;AAAA;UACxB,oCAAWA,EAAK,MAAA,iBAAA;AAAA,UAChB,kCAASA,EAAK,MAAA,eAAA;AAAA,WACPL,EAAM,MAAA,GAAA,MAAA,IAAA,CAAA,iBAAA,oBAAA,iBAAA,iBAAA,gBAAA,cAAA,YAAA,eAAA,eAAA,YAAA,MAAA,CAAA;AAAA,WAEhBpH,EAwBS,UAAA;AAAA,UAvBN,kBAAgB6gB,EAAe,SAAIzhB,cAAYA,EAAA,YAAY;AAAA,UAC3D,kBAAgByhB,EAAe,SAAIzhB,cAAYA,EAAA,OAAO;AAAA,UACtD,aAAWyhB,EAAA,QAAkB,SAAYzhB,EAAI;AAAA,UAC9C,aAAU;AAAA,UACT,UAAUA,EAAQ;AAAA,UAClB,IAAIU,EAAQ6gB,CAAA;AAAA,UACb,OAAA,EAAwB,QAAA,UAAA;AAAA,UACxB,MAAK;AAAA,UACJ,SAAOG;AAAA;UAER9gB,EAEO,QAFP4D,IACKoD,EAAA4Z,EAAA,MAAc,IAAI,GAAA,CAAA;AAAA,UAGfC,EAAe,cADvBtgB,EAIET,EAAA0E,EAAA,GAAA;AAAA;YAFA,MAAK;AAAA,YACL,MAAK;AAAA,sBAEPjE,EAIET,EAAAc,EAAA,GAAA;AAAA;YAFA,MAAK;AAAA,YACL,MAAK;AAAA;;UAtBO,CAAAmgB,IAAAH,EAAA,MAAc,IAAI;AAAA;;;;;;ACvG7B,SAASI,GAA0B9lB,GAAO;AAC/C,SAAO5D,EAAS,OACN4D,EAAM,WAAW,CAAE,GAAE;AAAA,IAAI,CAAAsgB,MAC/B,OAAOA,KAAQ,WAAW,EAAE,OAAOA,GAAK,OAAOA,EAAG,IAAKA;AAAA,EAC7D,CACG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLA,UAAMtgB,IAAQkE,GA2BR6hB,IAAY3pB,EAAS,MAAM4D,EAAM,aAAa,CAAC;2BAInD2E,EAqBS,UAAA;AAAA,MArBD,OAAM;AAAA,MACX,iBAAeT,EAAS;AAAA,MACxB,iBAAeA,EAAI;AAAA,MACpB,iBAAc;AAAA,MACd,kBAAe;AAAA,MACd,aAAWA,EAAI;AAAA,MACf,aAAWA,EAAI;AAAA,MACf,UAAUA,EAAQ;AAAA,MACnB,MAAK;AAAA;MAEU6hB,EAAS,cAAxB1gB,EAME2gB,IAAA;AAAA;QALA,OAAM;AAAA,QACL,OAAO9hB,EAAU;AAAA,QAClB,OAAM;AAAA,QACN,UAAS;AAAA,QACT,SAAQ;AAAA;MAEViB,EAEOC,uBAFP,MAEO;AAAA,YADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;MAEVuB,EAAmBb,EAAAc,EAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACjCvB,UAAMugB,IAAuB9qB,EAAI,IAAI;AAErC,WAAA+qB,EAAa,EAAE,sBAAAD,EAAsB,CAAA;MAKrB/hB,EAAA,YAAYA,EAAe,wBACzCmB,EAEW4Y,IAAA;AAAA;QAFA,IAAI/Z,EAAY;AAAA;QACzBiB,EAAQC,EAAA,QAAA,SAAA;AAAA;MAIKlB,EAAQ,6BAAzBS,EAcWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,QAZO/E,EAAW,cACzBiB,EAAQC,EAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA,UAIVT,EAMM,OAAA;AAAA;mBAJA;AAAA,UAAJ,KAAIshB;AAAA,UACJ,OAAA,EAA0B,UAAA,WAAA;AAAA;UAE1B9gB,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBZ,UAAMrG,IAAOoF;qBAaKD,EAAS,qBACvBmB,EAaasF,IAAA;AAAA;MAXV,MAAMzG,EAAI;AAAA,MACV,sCAAcnF,EAAI,cAAA;AAAA,MAClB,gCAAOA,EAAI,OAAA;AAAA,MACX,qCAAaA,EAAI,aAAA;AAAA,MACjB,yCAAiBA,EAAI,iBAAA;AAAA,MACrB,sCAAcA,EAAI,cAAA;AAAA,MAClB,gCAAOA,EAAI,OAAA;AAAA,MACX,qCAAaA,EAAI,aAAA;AAAA,MACjB,yCAAiBA,EAAI,iBAAA;AAAA;iBAEtB,MAAQ;AAAA,QAARoG,EAAQC,EAAA,QAAA,SAAA;AAAA;;;WAXAlB,EAAK,KAAA;AAAA,eAgBfmB,EAYasF,IAAA;AAAA;MAXV,MAAMzG,EAAI;AAAA,MACV,sCAAcnF,EAAI,cAAA;AAAA,MAClB,gCAAOA,EAAI,OAAA;AAAA,MACX,uCAAaA,EAAI,aAAA;AAAA,MACjB,2CAAiBA,EAAI,iBAAA;AAAA,MACrB,wCAAcA,EAAI,cAAA;AAAA,MAClB,kCAAOA,EAAI,OAAA;AAAA,MACX,uCAAaA,EAAI,aAAA;AAAA,MACjB,2CAAiBA,EAAI,iBAAA;AAAA;iBAEtB,MAAqB;AAAA,QAATmF,EAAK,QAAjBiB,EAAqBC,EAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA;;;;;GCjErB+gB,KAAc,CAACC,GAAgBtqB,IAAK,QAAWwP,IAAW,eAAe;AAC7E,QAAM+a,IAAalrB,EAAI,IAAI,GACrBmrB,IAAenrB,EAAI,IAAI,GACvBorB,IAAkBprB,EAAI,EAAK;AACjC,MAAIqrB,IAAgB;AAEpB,SAAAjf,GAAU,MAAM;AACd,IAAI6e,MACFC,EAAW,QAAQvqB,KAAMqE,GAAK,GAE1B,SAAS,eAAekmB,EAAW,KAAK,KAC1CC,EAAa,QAAQ,SAAS,eAAeD,EAAW,KAAK,GAC7DG,IAAgB,OAEhBF,EAAa,QAAQ,SAAS,cAAc,KAAK,GACjDA,EAAa,MAAM,KAAKD,EAAW,OACnCC,EAAa,MAAM,MAAM,WAAWhb,GACpC,SAAS,KAAK,sBAAsB,cAAcgb,EAAa,KAAK,IAEtEC,EAAgB,QAAQ;AAAA,EAE3B,CAAA,GAEDrc,GAAY,MAAM;;AAEhB,IAAIkc,KAAkB,CAACI,OACrBtqB,IAAA,SAAS,eAAemqB,EAAW,KAAK,MAAxC,QAAAnqB,EAA2C;AAAA,EAE9C,CAAA,GAEM,EAAE,YAAAmqB,GAAY,cAAAC,GAAc,iBAAAC,EAAe;AACpD,GCvBME,KAAe,CAACC,GAAQC,MAAgB;AAC5C,QAAMrT,IAAU,CAAC3G,MAAO;AACtB,IAAK+Z,EAAO,KAAK,CAACrT,MAAU;;AAAA,cAAAnX,IAAAmX,EAAM,UAAN,gBAAAnX,EAAa,SAASyQ,EAAG;AAAA,KAAO,KAC1Dga,EAAYha,CAAE;AAAA,EAEpB;AAEE,EAAApF,GAAU,MAAM;AACd,aAAS,iBAAiB,WAAW+L,CAAO;AAAA,EAC7C,CAAA,GAEDpJ,GAAY,MAAM;AAChB,aAAS,oBAAoB,WAAWoJ,CAAO;AAAA,EAChD,CAAA;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA,UAAMtT,IAAQkE,GAkDRnF,IAAOoF,GAQPyiB,IAAuBzrB,EAAI,IAAI,GAC/B0rB,IAAc1rB,EAAI,IAAI,GAKtB2rB,IAAgB3rB,EAAI,EAAK,GACzB4rB,IAAqB5rB,EAAI,EAAK,GAC9BygB,IAAWzgB,EAAI,IAAI,GAGnB6rB,IAAc5qB,EAAS,MACvB4D,EAAM,WACDsmB,EAAa,QACXtmB,EAAM,cACR,SAAS,eAAeA,EAAM,WAAW,IAEzC4mB,EAAqB,MAAM,oBAErC,GAGKK,IAAc7qB,EAAS,MACpB4D,EAAM,UAAU,WAAW,SAAYA,EAAM,KACrD;AAGD,IAAAymB,GAAa,CAACI,GAAajL,CAAQ,GAAG,MAAM;AAC1C,MAAImL,EAAmB,SACrBhoB,EAAK,OAAO;AAAA,IAEhB,CAAC,GAEDmU,GAAW,CAAC,QAAQ,GAAG,MAAM;AAC3B,MAAI6T,EAAmB,SACrBhoB,EAAK,OAAO;AAAA,IAEhB,CAAC;AAED,UAAM,EAAE,cAAAunB,GAAc,iBAAAC,MAAoBJ,GAAYnmB,EAAM,UAAUA,EAAM,WAAW;AAIvF,IAAAub,GAAQ,iBAAiBuL,CAAa,GACtCvL,GAAQ,sBAAsBwL,CAAkB,GAChDxL,GAAQ,iBAAiBnf,EAAS,MAAM4D,EAAM,KAAK,CAAC;AAGpD,UAAMknB,IAAsB,CAACC,GAAUzsB,MAAU;AAC/C,MAAAmsB,EAAY,MAAM,MAAM,YAAYM,GAAUzsB,CAAK;AAAA,IACrD;AAUA,aAAS0sB,IAAc;AACrB,YAAMC,IAAgBL,EAAY,MAAM,sBAAqB,GACvDM,IAAa1L,EAAS,MAAM,sBAAqB,GACjD2L,IAAeV,EAAY,MAAM,sBAAqB;AAE5D,MAAAW,EAAkBH,GAAeC,CAAU,GAC3CG,EAAkBJ,GAAeC,GAAYC,CAAY;AAAA,IAC3D;AAEA,aAASC,EAAkBH,GAAeC,GAAY;AAEpD,UAAItnB,EAAM,aAAa,OAAO;AAC5B,cAAM0nB,IAASL,EAAc,SAASC,EAAW;AACjD,QAAAJ,EAAoB,0BAA0B,MAAM,GACpDA,EAAoB,6BAA6B,GAAGQ,IAASJ,EAAW,SAAS,CAAC,IAAI;AAAA,MAC1F,OAAS;AACL,cAAMK,IAAML,EAAW,MAAMD,EAAc;AAC3C,QAAAH,EAAoB,0BAA0B,GAAGS,IAAML,EAAW,SAAS,CAAC,IAAI,GAChFJ,EAAoB,6BAA6B,MAAM;AAAA,MAC3D;AAAA,IACA;AAEA,aAASO,EAAkBJ,GAAeC,GAAYC,GAAc;AAElE,YAAMK,IAAON,EAAW,OAAOD,EAAc;AAC7C,UAAIrnB,EAAM,aAAa,UAAU;AAC/B,cAAMsd,KAAUgK,EAAW,QAAQC,EAAa,SAAS;AACzD,QAAAL,EAAoB,2BAA2B,GAAGU,IAAOtK,CAAM,IAAI,GACnE4J,EAAoB,4BAA4B,MAAM;AAAA,MAC1D,WAAalnB,EAAM,aAAa,SAAS;AACrC,cAAM6nB,IAAQR,EAAc,QAAQC,EAAW;AAC/C,QAAAJ,EAAoB,2BAA2B,MAAM,GACrDA,EAAoB,4BAA4B,GAAGW,CAAK,IAAI;AAAA,MAChE;AACI,QAAAX,EAAoB,2BAA2B,GAAGU,CAAI,IAAI,GAC1DV,EAAoB,4BAA4B,MAAM;AAAA,IAE1D;AAQA,aAAS/J,IAAW;AAClB,UAAInd,EAAM,UAAU,UAAU;AAC5B,cAAMsnB,IAAa1L,EAAS,MAAM,sBAAqB;AACvD,QAAAsL,EAAoB,4BAA4B,GAAGI,EAAW,KAAK,IAAI;AAAA,MAC3E;AACI,QAAAJ,EAAoB,4BAA4B,EAAE;AAAA,IAEtD;AAEA,aAASY,IAAc;AACrB,MAAAhB,EAAc,QAAQ,IAGtBlL,EAAS,QAAQ,SAAS,eAAe5b,EAAM,QAAQ,GACvDonB,EAAW,GACXjK,EAAQ,GACRpe,EAAK,OAAO;AAAA,IACd;AAEA,aAASgpB,IAAmB;AAC1B,MAAAhB,EAAmB,QAAQ,IAC3BhoB,EAAK,aAAa;AAAA,IACpB;AAEA,aAASipB,IAAmB;AAC1B,MAAAlB,EAAc,QAAQ,IACtBC,EAAmB,QAAQ,IAC3BhoB,EAAK,aAAa;AAAA,IACpB;;MAIWmF,EAAA,kBAAkBA,EAAK,SAAlCe,KAAAN,EAA8E,OAA9E6D,EAA8E;MAE9E/C,EAoCsBwiB,IAAA;AAAA,iBAnChB;AAAA,QAAJ,KAAIrB;AAAA,QACH,UAAU1iB,EAAQ;AAAA,QAClB,iBAAiBU,EAAe2hB,CAAA;AAAA,QAChC,cAAc3hB,EAAY0hB,CAAA;AAAA,QAC1B,aAAapiB,EAAW;AAAA;mBAEzB,MA4BuB;AAAA,UA5BvBuB,EA4BuByiB,IAAA;AAAA,YA3BrB,MAAK;AAAA,YACJ,WAAWhkB,EAAS;AAAA,YACpB,OAAOA,EAAK;AAAA,YACZ,cAAa6jB;AAAA,YACb,SAAOD;AAAA,YACP,cAAaE;AAAA;uBAEd,MAmBM;AAAA,cAnBNljB,EAmBM,OAnBNsD,EAmBM;AAAA,yBAlBA;AAAA,gBAAJ,KAAIye;AAAA,gBACJ,OAAM;AAAA,gBACL,cAAYI,EAAW;AAAA,gBACvB,cAAY/iB,EAAK;AAAA,gBACjB,mBAAiBA,EAAc;AAAA,iBACxBgI,EAAM,MAAA,GAAA;AAAA,gBAEAhI,EAAU,mBAAxBS,EAQS,UAAAgE,IAAA;AAAA,kBAPP7D,EAGM,OAAA,MAAA;AAAA,oBAFJA,EAAyB,cAAlBZ,EAAU,UAAA,GAAA,CAAA;AAAA,oBACRA,EAAiB,qBAA1Be,EAAA,GAAAN,EAAuD,WAAxBT,EAAiB,iBAAA,GAAA,CAAA;;kBAElDY,EAES,UAAA;AAAA,oBAFD,MAAK;AAAA,oBAAS,OAAM;AAAA,oBAAS,+BAAa/F,EAAI,OAAA;AAAA;oBACpD0G,EAAeb,EAAA0E,EAAA,CAAA;AAAA;;gBAInBnE,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1Od,UAAMpF,IAAQkE;AAsEd,IAAA6C,EAAkB/G,GAAO,UAAU,UAAU,GAC7C+G,EAAkB/G,GAAO,mBAAmB,WAAW,GACvD+G,EAAkB/G,GAAO,gBAAgB,OAAO,GAChD+G,EAAkB/G,GAAO,gBAAgB,OAAO,GAChD+G,EAAkB/G,GAAO,SAAS,UAAU,GAC5C+G,EAAkB/G,GAAO,YAAY,UAAU,GAC/C+G,EAAkB/G,GAAO,OAAO,UAAU;AAE1C,UAAMjB,IAAOoF,GAQP,EAAE,YAAYgkB,MAAgB9gB,GAAwBrH,CAAK,GAG3DinB,IAAc7qB,EAAS,MACpB4D,EAAM,UAAU,WAAW,WAAWA,EAAM,KACpD,GAGKooB,IAAiBhsB,EAAS,MAC1B4D,EAAM,MACD,QAELA,EAAM,SACD,WAELA,EAAM,QACD,UAEFA,EAAM,QACd,GAGKqoB,IAAiBjsB,EAAS,MAC1B4D,EAAM,WACDA,EAAM,WAERA,EAAM,QACd;2BAIDqF,EAiBgBijB,IAAA;AAAA,MAhBb,aAAWD,EAAc;AAAA,MACzB,UAAUnkB,EAAQ;AAAA,MAClB,gBAAcA,EAAW;AAAA,MACzB,sBAAoBA,EAAiB;AAAA,MACrC,eAAaA,EAAU;AAAA,MACvB,UAAUkkB,EAAc;AAAA,MACxB,WAAWlkB,EAAS;AAAA,MACpB,OAAOU,EAAWujB,CAAA;AAAA,MAClB,oBAAkBjkB,EAAc;AAAA,MAChC,OAAO+iB,EAAW;AAAA,MAClB,+BAAaloB,EAAI,OAAA;AAAA,MACjB,+BAAaA,EAAI,OAAA;AAAA,MACjB,oCAAmBA,EAAI,aAAA;AAAA,MACvB,oCAAmBA,EAAI,aAAA;AAAA;iBAExB,MAAQ;AAAA,QAARoG,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;GCvIGmjB,KAAkB,CAACC,GAAQC,GAAWC,IAAa,SAAS;;AACvE,QAAMC,IACJ,OAAOF,KAAa,YAChBvsB,IAAAusB,KAAA,gBAAAA,EAAYC,OAAZ,gBAAAxsB,EAAyB,WAAW,QAAQ,OAAO,OACnDusB,KAAA,gBAAAA,EAAW,WAAW,QAAQ,OAAO;AAC3C,SAAO,GAAGD,CAAM,WAAWG,CAAM;AACnC;;;;;;;;;;;;;;;;;ACPA,UAAM3oB,IAAQkE,GAeR0kB,IAAYztB,EAAI,IAAI,GAGpB0tB,IAAYtoB,GAAO,aAAapF,EAAI,EAAE,CAAC,GACvC2tB,IAAqBvoB,GAAO,sBAAsB,MAAM;AAAA,IAAE,CAAA,GAC1DsjB,IAAiBtjB,GAAO,sBAAsB,MAAM;AAAA,IAAE,CAAA,GAEtDwoB,IAAQ3sB,EAAS,MACjB,OAAO4D,EAAM,SAAS,WAAiB,KACpCA,EAAM,UACd,GAGKlE,IAAKM,EAAS,MAAMmsB,GAAgBM,EAAU,OAAO7oB,EAAM,OAAO+oB,EAAM,KAAK,CAAC;AAEpF,aAASC,EAAkBrc,GAAI;AAC7B,MAAAmc,EAAmBF,EAAU,KAAK,GAClCjc,EAAG,gBAAe;AAAA,IACpB;AAEA,WAAApF,GAAU,MAAM;AACd,MAAAsc,EAAe,EAAE,IAAI/nB,EAAG,OAAO,KAAKkE,EAAM,MAAO,CAAA;AAAA,IACnD,CAAC,mBAIC2E,EAYK,MAAA;AAAA,eAXC;AAAA,MAAJ,KAAIikB;AAAA,MACJ,kBAAe;AAAA,MACd,cAAYG,EAAK,QAAG,SAAY/oB,EAAM;AAAA,MACtC,qBAAmB+oB,EAAK;AAAA,MACxB,mBAAe,OAAS/oB,EAAM;AAAA,MAC9B,gBAAckE,EAAO,WAAI;AAAA,MACzB,IAAIpI,EAAE;AAAA,MACP,MAAK;AAAA,MACJ,SAAOktB;AAAA;MAER7jB,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACtDjB,UAAMpF,IAAQkE,GAgBR+kB,IAAY9tB,EAAI,EAAK,GACrB+tB,IAAY/tB,EAAI,CAAC,CAAC6E,EAAM,GAAG;AAEjC,WAAAuH,GAAU,MAAM0hB,EAAU,QAAQ,EAAI,mBAItCtkB,EAYM,OAAA;AAAA,MAXJ,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,iBAAeT,EAAI;AAAA,MACnB,iBAAeA,EAAQ;AAAA,MACvB,gBAAcglB,EAAS;AAAA;MAEbA,EAAA,SAAaD,EAAS,cAAjCtkB,EAIE,OAAA;AAAA;QAHC,KAAKT,EAAG;AAAA,QACR,KAAKA,EAAU,aAAGA,EAAW,cAAA;AAAA,QAC7B,gCAAOglB,EAAS,QAAA;AAAA;;;;;;;;;;;ACzBrB,UAAMC,IAAoBrD,GAHZ5hB,CAG2C;AAGzD,aAASklB,EAAWrI,GAAQ;AAC1B,UAAI/X,IAAU,IAEVuF,IAAU;AACd,aAAAA,KAAWwS,EAAO,WAAW,IAAI,GACjCxS,KAAWwS,EAAO,OAAO,IAAI,GAC7BxS,KAAWwS,EAAO,aAAa,IAAI,GAE/BxS,IAAU,MACZvF,KAAW,IAAIuF,CAAO,SAGpBwS,EAAO,aACT/X,KAAW,cAGT+X,EAAO,gBACT/X,KAAW,iBAGT+X,EAAO,aACT/X,KAAW,cAGNA;AAAA,IACT;AAEA,aAASqgB,EAAWC,GAAa7gB,GAAO;AACtC,aAAO,CAAC,CAAC6gB,KAAeA,MAAgB7gB;AAAA,IAC1C;;cAIA9D,EAuC6BsE,IAAA,MAAA6J,GAtCVlO,EAAiBukB,CAAA,GAAA,CAA3BpI,YADT1b,EAuC6BkkB,IAAA;AAAA,QArC1B,gBAAcxI,EAAO,WAAWA,EAAO,SAAS,UAAU;AAAA,QAC1D,KAAKA,EAAO;AAAA,QACZ,gBAAc2H,EAAU;AAAA,QACxB,OAAO3H,EAAO;AAAA,QACd,SAASqI,EAAWrI,CAAM;AAAA;mBAG3B,MAME;AAAA,UALMA,EAAO,iBADfpc,EAME,QAAA;AAAA;YAJC,IAAIoc,EAAO,SAAS;AAAA,YACrB,eAAY;AAAA,YACZ,OAAM;AAAA,YACL,gBAAcA,EAAO,SAAS;AAAA;UAIrBA,EAAO,aAAnBpc,EAGO,QAAA+D,IAAA;AAAA,YAFgB,OAAAqY,EAAO,QAAI,iBAAhC1b,EAAqET,EAAAU,EAAA,GAAA;AAAA;cAArB,MAAMyb,EAAO;AAAA,2CAC7D1b,EAAsCE,GAAfwb,EAAO,IAAI,GAAA,EAAA,KAAA,GAAA;AAAA;UAK5BA,EAAO,mBADf1b,EAOEmkB,IAAA;AAAA;YALC,KAAKzI,EAAO,WAAW;AAAA,YACxB,MAAK;AAAA,YACJ,UAAUA,EAAO,WAAW;AAAA,YAC5B,gBAAcA,EAAO,WAAW;AAAA,YAChC,gBAAcsI,EAAWtI,EAAO,WAAW,aAAaA,EAAO,KAAK;AAAA;UAI3DA,EAAO,kBAAnBpc,EAA0D,QAAA;AAAA;YAA5B,WAAQoc,EAAO;AAAA,mCAC7Cpc,EAAsC,QAAAO,IAAA4G,EAAtBiV,EAAO,KAAK,GAAA,CAAA;AAAA,UAGhBA,EAAO,oBAAnBpc,EAA+D,QAAAqO,IAAAlH,EAA5BiV,EAAO,WAAW,GAAA,CAAA;;;;MAGjB0I,EAAa,iBAAI7kB,EAAiBukB,CAAA,EAAC,WAAM,KAA/ElkB,KAAAN,EAEK,MAFL+kB,IAEK;AAAA,QADHvkB,EAAyCC,4BAAzC,MAAyC;AAAA,4BAAjB,cAAU,EAAA;AAAA;;;;;;;;;;;;;;;ACxCpC,UAAMrG,IAAOoF,GAEPnE,IAAQkE;AAGd,IAAA6C,EAAkB/G,GAAO,WAAW,QAAW,6CAA+C;AAC9F,UAAM2pB,IAAWviB,GAAwBpH,GAAO,WAAW,IAAI;AAE/D,IAAA+G,EAAkB/G,GAAO,aAAa,cAAc;AACpD,UAAM4pB,IAAqBxiB,GAAwBpH,GAAO,aAAa,cAAc,GAI/Ewf,IAAQC,GAGbvb,GAAA,YAAA,GAEKhE,IAASC,GAAK,GAEd,EAAE,UAAAgO,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAG3D8b,IAAaztB,EAAS,MAAMutB,EAAS,SAASzpB,CAAM,GAEpD4pB,IAAS1tB,EAAS,MAAM,GAAGytB,EAAW,KAAK,OAAO,GAElDhK,IAAiB1kB,EAAI,EAAK,GAE1B4uB,IAAY3tB,EAAS,MAClBojB,EAAM,SACR,CAACxf,EAAM,YACP,CAAC4pB,EAAmB,SACpB5pB,EAAM,YAAY,QACxB;AAED,aAAS2gB,IAAqB;AAC5B,MAAAnB,EAAM,QAAQ,IACdK,EAAe,QAAQ,IACvB9gB,EAAK,OAAO;AAAA,IACd;sBAxFEkG,EAAA,GAAAN,EAoCM,OApCNyD,EAoCM;AAAA,MAnCJ,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,gBAAcY,EAAO;AAAA,MACrB,IAAI8gB,EAAM;AAAA,OACHllB,EAAQuJ,CAAA,GAAA;AAAA,MAChB,UAAS;AAAA,MACR,gCAAO0R,EAAc,QAAA;AAAA;MAGbmK,EAAc,mCADvB3kB,EAGuBT,EAAAqc,EAAA,GAAA;AAAA;QADrB,OAAM;AAAA,QACN,eAAY;AAAA;MAGd3C,GAAA7Y,EAUkC4G,IAVlCjE,EAUkC;AAAA,QAT/B,IAAIyhB,EAAU;AAAA,QACf,OAAM;AAAA,QACN,cAAW;AAAA,QACV,UAAUxhB,EAAQ;AAAA,QAClB,OAAOqI,EAAK;AAAA,QACZ,aAAaC,EAAW;AAAA,oBAChB6O,EAAK;AAAA,sDAALA,EAAK,QAAApP;AAAA,SACNxL,EAASwJ,CAAA,GAAA;AAAA,QAEhB,+BAAMyR,EAAc,QAAA;AAAA;gBADZA,EAAc,KAAA;AAAA;MAIjBkK,EAAS,cADjBplB,EAOS,UAAA;AAAA;QALP,OAAM;AAAA,QACN,MAAK;AAAA,QACL,cAAW;AAAA,QACV,YAAYgc,GAAkB,CAAA,MAAA,CAAA;AAAA;QAC/Blb,EAA4Cb,EAAA0E,EAAA,GAAA;AAAA,UAA/B,MAAK;AAAA,UAAK,eAAY;AAAA;;;;ICvBnC2gB,KAAsB,CAACC,GAAWlI,GAAU/jB,MAAY;AAC5D,MAAIikB,IAAW;AAEf,EAAA3a,GAAU,MAAM;AACd,IAAA2a,IAAW,IAAI,iBAAiBF,CAAQ,GACxCE,EAAS,QAAQgI,EAAU,OAAOjsB,CAAO;AAAA,EAC1C,CAAA,GAEDiM,GAAY,MAAM;AAChB,IAAAgY,KAAA,QAAAA,EAAU;AAAA,EACX,CAAA;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA,UAAMliB,IAAQkE;AA2Bd,IAAA6C,EAAkB/G,GAAO,iBAAiB,QAAW,yCAA6C;AAClG,UAAMmqB,IAAsB/iB,GAAwBpH,GAAO,iBAAiB,YAAY,GAGlFjB,IAAOoF,GASPimB,IAAajvB,EAAI,IAAI,GAIrBkvB,IAAqBlvB,EAAI,IAAI,GAC7BmmB,IAAcnmB,EAAI,EAAE,GACpBmvB,IAAgBnvB,EAAI,EAAE,GACtBovB,IAAYpvB,EAAI,IAAI,GACpBqvB,IAAcrvB,EAAI,EAAK;AAC7B,QAAIsvB,IAAwB,CAAA;AAG5B,UAAM3D,IAAgBvmB,GAAO,iBAAiBpF,EAAI,EAAK,CAAC,GAClD4rB,IAAqBxmB,GAAO,sBAAsBpF,EAAI,EAAK,CAAC,GAC5DuvB,IAAgBnqB,GAAO,iBAAiBpF,EAAI,EAAK,CAAC;AAIxD,IAAAogB,GAAQ,aAAanf,EAAS,MAAM4D,EAAM,SAAS,CAAC,GACpDub,GAAQ,sBAAsBuN,EAAkB,GAChDvN,GAAQ,sBAAsB,CAAC,EAAE,IAAAzf,GAAI,KAAAnB,EAAG,MAAO;AAC7C,MAAA8vB,EAAsB3uB,CAAE,IAAInB;AAAA,IAC9B,CAAC,GAIDsvB,GAAoBG,GAAYO,GAAgB,EAAE,WAAW,GAAM,CAAA,GAGnEzX,GADmB,CAAC,KAAK,SAAS,aAAa,GACxB0X,IAAsBR,CAAU,GAGvDlX,GADqB,CAAC,aAAa,WAAW,QAAQ,KAAK,GAClC2X,EAAa;AAEtC,UAAMC,IAAkB,CAAC,kBAAkB,GACrCvJ,IAAkB;AAAA,MACtB,MAAM;AAAA,MACN,WAAW;AAAA,IACb;AACA,IAAArO,GAAW4X,GAAiB,CAAAhkB,MAAK4b,GAAY5b,GAAGya,CAAe,CAAC,GAGhEha,GAAU,MAAM;AACd,MAAAojB,EAAc,GACdI,EAAkBL,EAAc,KAAK;AAAA,IACvC,CAAC,GAEDxgB,GAAY,MAAM;AAChB,MAAAugB,IAAwB;AAAA,IAC1B,CAAC,GAIDlpB;AAAA,MACE,CAAEulB,GAAe,MAAA;;AAAM,gBAAA5qB,IAAAquB,EAAU,UAAV,gBAAAruB,EAAiB;AAAA,OAAQ;AAAA,MAChD,CAAC,CAAE8uB,GAASC,OAAiB;AAC3B,QAAID,KAAWC,IAAa,MAC1BT,EAAY,QAAQJ,EAAW,MAAM,eAAeA,EAAW,MAAM;AAAA,MAE3E;AAAA,IACA,GAEA7oB,EAAMwlB,GAAoB,CAACpM,MAAW;AAEpC,MAAIA,MACFuQ,EAAyB,GACzBC,EAA2B;AAAA,IAE/B,CAAC,GAED5pB,EAAMmpB,GAAe,CAAC/P,MAAWoQ,EAAkBpQ,CAAM,CAAC;AAG1D,aAASgQ,IAAiB;AACxB,MAAAJ,EAAU,QAAQ,MAAM;AAAA,QACtBH,EAAW,MAAM,iBAAiB,uCAAuC;AAAA,MAC7E;AAAA,IACA;AAEA,aAASc,IAA4B;AACnC,MAAId,EAAW,MAAM,sBAAuB,EAAC,SAAS,OAAO,eAC3DA,EAAW,MAAM,eAAe,EAAE,OAAO,UAAW,CAAA;AAAA,IAExD;AAEA,aAASe,IAA8B;;AACrC,MAAI7J,EAAY,QAAQ,OAGtB4J,EAAyB,IACzBhvB,IAAAquB,EAAU,MAAMjJ,EAAY,KAAK,MAAjC,QAAAplB,EAAoC,eAAe,EAAE,OAAO,UAAW;AAAA,IAE3E;AAEA,aAASkvB,IAAmB;;AAC1B,MAAI9J,EAAY,QAAQ,QACtBplB,IAAAquB,EAAU,MAAMjJ,EAAY,KAAK,MAAjC,QAAAplB,EAAoC,aAAa,eAAe,KAChEmuB,EAAmB,SAAQpuB,IAAAsuB,EAAU,MAAMjJ,EAAY,KAAK,MAAjC,gBAAArlB,EAAoC,IAC/DkvB,EAA2B;AAAA,IAE/B;AAEA,aAASE,IAAsB;;AAC7B,MAAI/J,EAAY,QAAQ,QACtBplB,IAAAquB,EAAU,MAAMjJ,EAAY,KAAK,MAAjC,QAAAplB,EAAoC,gBAAgB;AAAA,IAExD;AAEA,aAASovB,IAAqB;;AAC5B,MAAIhK,EAAY,QAAQ,MACtBA,EAAY,QAAQ,GACpB+I,EAAmB,SAAQnuB,IAAAquB,EAAU,MAAM,CAAC,MAAjB,gBAAAruB,EAAoB,KAEjDkvB,EAAgB;AAAA,IAClB;AAEA,aAASL,EAAkBpQ,GAAQ;AACjC,MAAIA,IACF4Q,GAAW,IAEXC,GAAc;AAAA,IAElB;AAEA,aAASD,KAAc;;AAErB,MAAKvrB,EAAM,gBAETsqB,EAAc,QAAQC,EAAU,MAAM;AAAA;AAAA,QAEpC,CAAA7f,OAAMA,GAAG,QAAQ,aACbA,GAAG,OAAO6d,GAAgBvoB,EAAM,WAAWmqB,EAAoB,OAAOzf,GAAG,QAAQ,UAAU,IAC3FA,GAAG,QAAQ,UAAU,OAAOyf,EAAoB,KAAK;AAAA,MAC/D,GAGQ,CAACnqB,EAAM,eAAesqB,EAAc,QAAQ,QAC9CpuB,IAAAquB,EAAU,MAAMD,EAAc,KAAK,MAAnC,QAAApuB,EAAsC,aAAa,iBAAiB,MACpED,IAAAsuB,EAAU,MAAMD,EAAc,KAAK,MAAnC,QAAAruB,EAAsC,aAAa,iBAAiB,UAItEqlB,EAAY,QAAQgJ,EAAc;AAAA,IAEtC;AAEA,aAASkB,KAAiB;AAExB,MAAAjB,EAAU,MAAM,QAAQ,CAACxJ,MAAW;AAClC,QAAAA,EAAO,gBAAgB,eAAe,GAEtCA,EAAO,aAAa,iBAAiB,OAAO;AAAA,MAC7C,CAAA,GAEDsK,EAAmB,GAEnBf,EAAc,QAAQ,IACtBhJ,EAAY,QAAQ,IACpB+I,EAAmB,QAAQ;AAAA,IAC7B;AAEA,aAASvB,GAAmB/H,GAAQ;;AAElC,OAAA7kB,KAAA6kB,EAAO,cAAc,GAAG,MAAxB,QAAA7kB,GAA2B;AAG3B,UAAIxB,IAAQqmB,EAAO,QAAQ,aACvB0J,EAAsB1J,EAAO,EAAE,IAC/BA,EAAO,QAAQ;AACnB,MAAIA,EAAO,QAAQ,aAAa,aAC9BrmB,IAAQ,OAAOA,CAAK,IAGtB2vB,EAAmB,QAAQtJ,EAAO,IAClCsK,EAAmB,GACnBtsB,EAAK,qBAAqBrE,CAAK,GAC/BqE,EAAK,OAAO;AAAA,IACd;AAEA,aAAS6rB,GAAqBje,GAAI;AAChC,MAAAmc,GAAmByB,EAAU,MAAMjJ,EAAY,KAAK,CAAC,GACrD3U,EAAG,eAAc;AAAA,IACnB;AAEA,aAASke,GAAcle,GAAI;AACzB,UAAI+d,EAAc;AAChB,gBAAQ/d,EAAG,KAAG;AAAA,UACZ,KAAK;AACH,YAAA8e,GAAS,MAAM,GACf9e,EAAG,eAAc;AACjB;AAAA,UACF,KAAK;AACH,YAAA8e,GAAS,IAAI,GACb9e,EAAG,eAAc;AACjB;AAAA,UACF,KAAK;AACH,YAAA8e,GAAS,MAAM,GACf9e,EAAG,eAAc;AACjB;AAAA,UACF,KAAK;AACH,YAAA8e,GAAS,KAAK,GACd9e,EAAG,eAAc;AACjB;AAAA,QACR;AAAA,IAEA;AAGA,aAAS8e,GAASC,GAAW;AAC3B,UAAIC;AACJ,cAAQD,GAAS;AAAA,QACf,KAAK;AACH,UAAAC,IAAYrK,EAAY,QAAQ,IAAI,IAClCiJ,EAAU,MAAM,SAAS,IACzBjJ,EAAY,QAAQ;AACtB;AAAA,QACF,KAAK;AACH,UAAAqK,KAAYrK,EAAY,QAAQ,KAAKiJ,EAAU,MAAM;AACrD;AAAA,QACF,KAAK;AACH,UAAAoB,IAAW;AACX;AAAA,QACF,KAAK;AACH,UAAAA,IAAWpB,EAAU,MAAM,SAAS;AACpC;AAAA,MACN;AACE,MAAAqB,GAAoBD,CAAQ;AAAA,IAC9B;AAEA,aAASjJ,GAAY/V,GAAIkf,GAAU;AACjC,UAAI,CAACnB,EAAc,MAAO;AAE1B,MAAAmB,EAAS,OAAQlf,EAAG,YAAYkf,EAAS,YAAY,MAAOlf,EAAG,MAAMkf,EAAS,OAAOlf,EAAG,KACxFkf,EAAS,YAAYlf,EAAG;AAExB,YAAMmf,KAAWvB,EAAU,MAAM,UAAU,CAAC7f,MACnCA,EAAG,YACP,WAAW,iBAAiB,EAAE,EAC9B,YAAW,EACX,WAAWmhB,EAAS,IAAI,CAC5B;AAED,MAAIC,KAAW,MAAIF,GAAoBE,IAAU,EAAK;AAAA,IACxD;AAEA,aAASF,GAAoBG,GAAWC,IAAY,IAAM;AACxD,MAAAX,EAAmB,GACnB/J,EAAY,QAAQyK,GAChB,SAAS,kBAAkB3B,EAAW,SAAS4B,IAEjD5B,EAAW,MAAM,MAAK,IAEtBgB,EAAgB;AAAA,IAEpB;AAKA,WAAAlF,EAAa;AAAA,MACX,aAAA5E;AAAA,MACA,WAAAiJ;AAAA,MACA,YAAAH;AAAA,MACA,gBAAAO;AAAA,MACA,kBAAAS;AAAA,IACF,CAAC,mBAKDzmB,EAkBK,MAAA;AAAA,eAjBC;AAAA,MAAJ,KAAIylB;AAAA,MACH,yBAAuBC,EAAkB,SAAI;AAAA,MAC7C,cAAYnmB,EAAK;AAAA,MAClB,aAAU;AAAA,MACV,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,iBAAesmB,EAAW;AAAA,MAC1B,IAAItmB,EAAS;AAAA,MACd,MAAK;AAAA,MACJ,UAAUU,EAAa8lB,CAAA,IAAA,IAAO;AAAA,MAC9B,QAAMW;AAAA,MACN,SAAOC;AAAA,MACP,WAAO;AAAA,sCAAYvsB,EAAI,wBAAA,GAAA,CAAA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA;AAAA,sCACJA,EAAI,kBAAA,GAAA,CAAA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA;AAAA;MACvB,gCAAD,MAAkB;AAAA,MAAA,GAAA,CAAA,SAAA,CAAA;AAAA;MAElBoG,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzUf,UAAMpF,IAAQkE,GA+BRnF,IAAOoF,GAQP8nB,IAAU9wB,EAAI,IAAI,GAClB+wB,IAAuB/wB,EAAI,CAAE,CAAA,GAC7BgxB,IAAyBhxB,EAAI,CAAE,CAAA,GAE/BixB,IAAchwB,EAAS;;AAAM,eAAAF,IAAAgwB,EAAqB,UAArB,gBAAAhwB,EAA4B,aAAUD,IAAAkwB,EAAuB,UAAvB,gBAAAlwB,EAA8B;AAAA,KAAM,GACvGowB,IAAiBjwB,EAAS;;AAAM,eAAAF,IAAAgwB,EAAqB,UAArB,gBAAAhwB,EAA4B,aAAUD,IAAAkwB,EAAuB,UAAvB,gBAAAlwB,EAA8B;AAAA,KAAM;AAEhH,QAAIqwB,IAAiB;AAGrB,UAAMnD,IAAoBrD,GAA0B9lB,CAAK;AAEzD,IAAAuB,EAAM,MAAMvB,EAAM,SAAS,MAAM;AAC/B,MAAAusB,EAAuBvsB,EAAM,eAAe;AAAA,IAC9C,CAAC,GAEDuB;AAAA,MAAM,MAAMvB,EAAM;AAAA,MAChBusB;AAAA,MACA,EAAE,WAAW,GAAI;AAAA,IACnB,GAEAhrB,EAAM,MAAMvB,EAAM,OAAO,CAACrF,MAAQ;AAChC,MAAIA,KAAOqF,EAAM,eAAage,GAASwO,CAAgB;AAAA,IACzD,CAAC;AAED,aAASA,IAAmB;AAC1B,MAAIP,EAAQ,UACVA,EAAQ,MAAM,eAAc,GAC5BA,EAAQ,MAAM,WAAW,MAAK;AAAA,IAElC;AAIA,aAASQ,IAAkB;AACzB,MAAIR,EAAQ,UACVA,EAAQ,MAAM,eAAc,GAC5BA,EAAQ,MAAM,iBAAgB;AAAA,IAElC;AAEA,aAASM,EAAuBG,IAAyB,IAAI;;AAC3D,YAAMC,MAAOzwB,IAAAwwB,EAAuB,CAAC,MAAxB,gBAAAxwB,EAA4B8D,EAAM,iBAAgB;AAC/D,MAAI2sB,MAAMD,IAAyBA,EAAuB,IAAI,CAAApM,MAAOA,EAAItgB,EAAM,UAAU,CAAC;AAC1F,YAAM4sB,IAAc,IAAI,IAAIF,CAAsB,GAC5CG,IAAW,CAAA,GACXC,IAAa,CAAA;AACnB,MAAA3D,EAAkB,MAAM,QAAQ,CAACpI,MAAW;AAC1C,cAAMgM,IAAY,EAAE,GAAGhM,EAAM,GACvBiM,IAAgBL,IAAO5L,EAAO,MAAM/gB,EAAM,UAAU,IAAI+gB,EAAO,OAC/DkM,IAAU,GAAGjtB,EAAM,SAAS,IAAIgtB,CAAa;AACnD,QAAIJ,EAAY,IAAID,IAAO5L,EAAO,MAAM/gB,EAAM,UAAU,IAAI+gB,EAAO,KAAK,KACtEgM,EAAU,WAAW,EAAE,SAAAE,GAAS,SAAS,GAAI,GAC7CJ,EAAS,KAAKE,CAAS,MAEvBA,EAAU,WAAW,EAAE,SAAAE,GAAS,SAAS,GAAK,GAC9CH,EAAW,KAAKC,CAAS;AAAA,MAE5B,CAAA,GAEDb,EAAqB,QAAQW,GAC7B7O,GAAS,MAAM;AACb,QAAAmO,EAAuB,QAAQW,GAC/B9O,GAAS,MAAM;AAGb,UAAIsO,KAAgBG,EAAe,GACnCH,IAAiB;AAAA,QAClB,CAAA;AAAA,MACF,CAAA;AAAA,IACH;AAEA,aAASY,EAAgBC,IAAkB,IAAI;AAC7C,YAAMC,IAAS,IAAI,IAAID,CAAe,GAChCE,IAAS,CAAA;AAEf,aAAAlE,EAAkB,MAAM,QAAQ,CAAAmE,MAAK;AACnC,QAAIF,EAAO,IAAIE,EAAE,KAAK,KAAGD,EAAO,KAAKC,EAAE,KAAK;AAAA,MAC7C,CAAA,GACMD;AAAA,IACT;AAEA,aAASvE,EAAmBpuB,GAAO;AACjC,UAAI6yB,IAAU,CAAA;AACd,MAAIvtB,EAAM,gBAAgB,SAAStF,CAAK,KACtC6yB,IAAUvtB,EAAM,gBAAgB,OAAO,CAAAstB,MAAKA,MAAM5yB,CAAK,GACvDqE,EAAK,kBAAkBrE,CAAK,MAE5B6yB,IAAUL,EAAgB,CAAC,GAAGltB,EAAM,iBAAiBtF,CAAK,CAAC,GAC3DqE,EAAK,gBAAgBrE,CAAK,IAE5B4xB,IAAiB,IACjBvtB,EAAK,0BAA0BwuB,CAAO;AAAA,IACxC;2BAIAloB,EAiCiCmoB,IAAA;AAAA,eAhC3B;AAAA,MAAJ,KAAIvB;AAAA,MACJ,wBAAqB;AAAA,MACrB,kBAAe;AAAA,MACd,OAAO/nB,EAAK;AAAA,MACb,aAAA;AAAA,MACC,cAAYA,EAAS;AAAA,MACrB,OAAOA,EAAK;AAAA,MACZ,8CAAwBnF,EAAI,wBAAA;AAAA,MAC5B,yCAAkBA,EAAI,kBAAA;AAAA,MACtB,uBAAmB+pB;AAAA;iBAEpB,MAYW;AAAA,QAZKuD,EAAc,cAA9B1nB,EAYWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,UAXTxD,EAIEgoB,IAAA;AAAA,YAHC,SAASvB,EAAoB;AAAA,YAC7B,mBAAiB;AAAA,YACjB,gBAAchoB,EAAU;AAAA;UAE3Boa,GAAAxZ,EAAyE,MAAzE0D,IAAyE,CAAA,GAAAuD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,YAAXjH,EAAM,MAAA,MAAA,MAAA,EAAA;AAAA;iBAAnBsnB,EAAW,KAAA;AAAA;UAC5D3mB,EAIEgoB,IAAA;AAAA,YAHC,SAAStB,EAAsB;AAAA,YAC/B,mBAAiB;AAAA,YACjB,gBAAcjoB,EAAU;AAAA;mBAI7Be,KAAAN,EAMK,MANL+D,IAMK;AAAA,UADHvD,EAAyCC,4BAAzC,MAAyC;AAAA,8BAAjB,cAAU,EAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChKtC,UAAMpF,IAAQkE,GA+GRnF,IAAOoF;AAYb,QAAIupB,IAAW;AAGf,UAAM,CAACC,GAAcC,CAAa,IAAI9pB,GAAc,CAAC,GAG/C+pB,IAAU1yB,EAAI,EAAK,GACnB2yB,IAAa3yB,EAAI,EAAE,GAGnB4yB,IAAa3xB,EAAS,MACnB4D,EAAM,gBAAgB,MAC9B,GAEKguB,IAAa5xB;AAAA,MAAS,MAC1B4D,EAAM,cAAciuB,KAAkCT;AAAAA,IACxD,GAEMU,IAAkB9xB,EAAS,MAAM4D,EAAM,aAAa4tB,EAAc,KAAK,GAEvEO,IAAiB/xB,EAAS,MAAM4D,EAAM,YAAY2tB,EAAa,KAAK,GAGpExE,IAAqBrD,GAA0B9lB,CAAK,GAEpDwhB,IAAkBplB,EAAS,MAC3B0xB,EAAW,QACN3E,EAAkB,MAAM;AAAA,MAAO,CAAApI,MACpCA,EAAO,MAAM,YAAa,EAAC,WAAW+M,EAAW,MAAM,aAAa;AAAA,IAC1E,IAES3E,EAAkB,KAC1B,GAEKiF,IAAkBhyB,EAAS,MACxB4D,EAAM,SAASwhB,EAAgB,QAAQ2H,EAAkB,KACjE,GAGKkF,IAAc,MAClBX,MAAuBA,IAAW,SAAS,eAAeS,EAAe,KAAK;AAEhF,aAASG,IAA0B;AACjC,YAAMC,IAAW,SAAS;AAC1B,aAAO,CAACA,KAAYA,EAAS,YAAY,UAAUA,EAAS,OAAOL,EAAgB;AAAA,IACrF;AAEA,aAASM,IAAuB;;AAC9B,MAAAX,EAAQ,QAAQ,IAChB9uB,EAAK,OAAO,GAERuvB,EAAuB,OACzBryB,MAAAC,IAAAmyB,EAAa,MAAb,gBAAAnyB,EAAe,UAAf,QAAAD,GAAA,KAAAC;AAAA,IAEJ;AAEA,aAASuyB,IAAc;AACrB,MAAIZ,EAAQ,SACVW,EAAoB;AAAA,IAExB;AAGA,aAASE,IAAmB;AAC1B,MAAAb,EAAQ,QAAQ;AAAA,IAClB;AAEA,aAASc,EAAoBj0B,GAAO;AAClC,YAAMk0B,KAAkB5uB,EAAM,gBAAgB,OAAO,CAAAsgB,OAAOA,OAAQ5lB,CAAK;AACzE,MAAAqE,EAAK,0BAA0B6vB,EAAe,GAC9C7vB,EAAK,kBAAkBrE,CAAK;AAAA,IAC9B;AAEA,aAASm0B,EAAkBn0B,GAAO;AAChC,YAAMk0B,KAAkB,CAAC,GAAG5uB,EAAM,iBAAiBtF,CAAK;AACxD,MAAAqE,EAAK,0BAA0B6vB,EAAe,GAC9C7vB,EAAK,gBAAgBrE,CAAK;AAAA,IAC5B;AAEA,aAASo0B,EAAmBn0B,GAAK;AAC/B,MAAKqF,EAAM,gBACTjB,EAAK,yBAAyBpE,CAAG,GACjC6zB,EAAoB;AAAA,IAExB;AAEA,aAASO,IAAoB;AAC3B,MAAAjB,EAAW,QAAQ;AAAA,IACrB;AAEA,aAASkB,EAAmBr0B,GAAK;AAC/B,MAAAmzB,EAAW,QAAQnzB;AAAA,IACrB;4BAIEgK,EAmFM,OAAA;AAAA,MAnFD,OAAM;AAAA,MAA2B,IAAIuH,EAAM,OAAC;AAAA;MAC/C/G,EAuBOC,EAAA,QAAA,UAAA;AAAA,QArBJ,UAAWlB,EAAQ;AAAA,QACnB,WAAYgqB,EAAe;AAAA,QAC3B,UAAWC,EAAc;AAAA,SAJ5B,MAuBO;AAAA,QAjBL1oB,EAgBiBwpB,IAAA;AAAA,UAfd,iBAAef,EAAe;AAAA,UAC9B,iBAAehqB,EAAI;AAAA,UACnB,UAAUA,EAAQ;AAAA,UAClB,IAAIiqB,EAAc;AAAA,UAClB,MAAMjqB,EAAI;AAAA,UACV,cAAYgqB,EAAe;AAAA,UAC3B,MAAMhqB,EAAU;AAAA,UAChB,eAAaA,EAAc,kBAAIA,gBAAc6pB,EAAA,QAAa;AAAA,UAC1D,mCAAOxhB,EAAK,MAAA,SAAA;AAAA;UAEF,SACT,MAEO;AAAA,YAFPpH,EAEOC,8BAFP,MAEO;AAAA,kBADFlB,EAAW,WAAA,GAAA,CAAA;AAAA;;;;;MAKtBuB,EAyDuBypB,IAAA;AAAA,QAxDpB,aAAWhrB,EAAQ,YAAIiqB,EAAc;AAAA,QACrC,UAAUjqB,EAAQ;AAAA,QAClB,gBAAcA,EAAW;AAAA,QACzB,eAAaA,EAAU;AAAA,QACvB,sBAAoBA,EAAiB;AAAA,QACrC,UAAUA,EAAgB;AAAA,QAC3B,WAAA;AAAA,QACC,OAAOA,EAAI;AAAA,QACX,oBAAkBA,EAAc;AAAA,QAChC,OAAOA,EAAa;AAAA,QACpB,SAAOuqB;AAAA,QACP,SAAOC;AAAA,QACP,cAAaK;AAAA;mBAEd,MAQM;AAAA,UARK7qB,EAAM,UAAjBe,KAAAN,EAQM,OARN+D,IAQM;AAAA,YAPJjD,EAME0pB,IAAA;AAAA,cALC,cAAYjrB,EAAW;AAAA,cACvB,eAAa4pB,EAAU;AAAA,cACvB,aAAa5pB,EAAiB;AAAA,cAC9B,uBAAmB8qB;AAAA,cACnB,SAAOD;AAAA;;UAQZtpB,EAmBab,EAAAopB,CAAA,GAAA;AAAA,YAlBV,kCAA+B9pB,EAAM,OAAA,CAAA;AAAA,YACrC,OAAOA,EAAa;AAAA,YACpB,eAAaA,EAAc;AAAA,YAC3B,SAASA,EAAA,cAAckqB,EAAA,QAAkB;AAAA,YACzC,cAAYF,EAAe;AAAA,YAC3B,oBAAkBhqB,EAAe;AAAA,YACjC,OAAOA,EAAI;AAAA,YACX,gBAAcA,EAAU;AAAA,YACxB,eAAc2qB;AAAA,YACd,SAAO9iB,GAAA,CAAA,MAAAA,GAAA,CAAA,IAAA,CAAAqE,OAAAlM,EAAA,cAAc,SAAYuqB,EAAW;AAAA,YAC5C,iDAAwBliB,EAAK,MAAA,wBAAA;AAAA,YAC7B,4CAAkBA,EAAK,MAAA,kBAAA;AAAA,YACvB,iBAAgBoiB;AAAA,YAChB,uBAAmBG;AAAA;uBAEpB,MAEW;AAAA,cAFM5qB,EAAW,gCAC1BmB,EAA2FooB,IAAA;AAAA;gBAAvD,SAASW,EAAe;AAAA,gBAAG,gBAAclqB,EAAU;AAAA;;;;UAGhFA,EAAW,eAAtBe,KAAAN,EAOM,OAPNgE,IAOM;AAAA,YANJlD,EAKCmT,IAAA;AAAA,cAJE,OAAO1U,EAAgB;AAAA,cACxB,OAAM;AAAA,cACL,iCAAanF,EAAI,OAAA;AAAA;yBACjB,MAAsB;AAAA,oBAAnBmF,EAAgB,gBAAA,GAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChT9B,UAAMlE,IAAQkE,GAqERnF,IAAOoF,GAGP,CAAEsK,GAAY2gB,GAAgBvG,CAAW,IAAG/kB,GAAc,CAAC,GAC3D5F,IAAO/C,EAAI,EAAK,GAChBk0B,IAAmBl0B,EAAI,EAAK,GAG5Bm0B,IAAmBn0B,EAAI,IAAI,GAG3B2T,IAAc1S,EAAS,MAAM4D,EAAM,WAAWyO,EAAW,KAAK;AAGpE,QAAIwJ,IAAU;AAGd,aAASsX,IAAa;AACpB,aAAKtX,MACHA,IAAUqX,EAAiB,MAAM,IAAI,cAAc,OAAO,IAErDrX;AAAA,IACT;AAEA,aAASuX,EAAa1oB,GAAG;AACvB,MAAA/H,EAAK,mBAAmB+H,EAAE,OAAO,KAAK,GACtC/H,EAAK,qBAAqB+H,EAAE,OAAO,KAAK;AAAA,IAC1C;AAEA,aAAS2oB,IAAc;AACrB,MAAAF,EAAY,EAAC,MAAK,GAClBxwB,EAAK,mBAAmB,EAAE,GAC1BA,EAAK,qBAAqB,EAAE;AAAA,IAC9B;AAEA,aAASkN,EAAYnF,GAAG;AACtB,MAAA/H,EAAK,kBAAkB+H,EAAE,OAAO,KAAK,GACjC9G,EAAM,iBACRjB,EAAK,qBAAqB+H,EAAE,OAAO,KAAK;AAAA,IAE5C;AAEA,aAAS4oB,IAAsB;AAC7B,MAAAxxB,EAAK,QAAQ,IAGT,SAAS,kBAAkBqxB,QAC7BF,EAAiB,QAAQ;AAAA,IAE7B;AAKA,aAASM,IAAuB;AAC9B,MAAAN,EAAiB,QAAQ;AAAA,IAC3B;AAEA,aAASO,IAAqB;AAC5B,MAAA1xB,EAAK,QAAQ,IACbmxB,EAAiB,QAAQ;AAAA,IAC3B;AAEA,aAASQ,IAAc;AACrB,MAAIR,EAAiB,QAGnBA,EAAiB,QAAQ,KAEzBnxB,EAAK,QAAQ;AAAA,IAEjB;2BAMAmH,EA2CiCyqB,IAAA;AAAA,MA1C9B,aAAWlrB,EAAcwqB,CAAA;AAAA,MACzB,UAAUlrB,EAAQ;AAAA,MAClB,qBAAmBA,EAAgB;AAAA,MACnC,kBAAgBA,EAAa;AAAA,MAC7B,sBAAoBA,EAAiB;AAAA,MACrC,eAAaA,EAAU;AAAA,MACvB,aAAa;AAAA,MACb,MAAMhG,EAAI;AAAA,MACV,SAASgG,EAAO;AAAA,MAChB,cAAYU,EAASikB,CAAA;AAAA,MACrB,mBAAiB3kB,EAAU;AAAA,MAC3B,aAAWgI,EAAAA,OAAO,MAAM4C,EAAW;AAAA,MACnC,oBAAkB5K,EAAc;AAAA,MAChC,gBAAcA,EAAU;AAAA,MACxB,SAAOwrB;AAAA,MACP,yCAAkBxxB,EAAI,QAAA;AAAA,MACtB,2BAAqB6N,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAE7D,EAAK,MAAA,qBAAsB6D,CAAM;AAAA;MAE9C,UACT,MAqBE;AAAA,QArBF3K,EAqBEsqB,IArBF3nB,EAqBE;AAAA,mBApBI;AAAA,UAAJ,KAAIknB;AAAA,UACH,IAAIpjB,EAAAA,OAAO,MAAM4C,EAAW;AAAA,UAC5B,gBAAclK,EAAcwqB,CAAA;AAAA,UAC5B,UAAUlrB,EAAQ;AAAA,UAClB,OAAOA,EAAK;AAAA,UACZ,WAASA,EAAM;AAAA,UACf,eAAaA,EAAY,gBAAIA,EAAU;AAAA,UACvC,MAAMhG,EAAI;AAAA,UACV,cAAY0G,EAASikB,CAAA;AAAA,UACrB,aAAa3kB,EAAW;AAAA,UACxB,UAAUA,EAAQ;AAAA,UAClB,UAAQsrB;AAAA,UACR,SAAOC;AAAA,UACP,SAAOxjB;AAAA,UACP,cAAa4jB;AAAA,UACb,kBAAiBF;AAAA,UACjB,gBAAeC;AAAA,UACf,wCAAiB1xB,EAAI,QAAA;AAAA,UACrB,WAAO6N,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAElS,EAAI,QAAA,CAAIA,EAAI;AAAA,WACdgO,EAAM,MAAA,GAAA,MAAA,IAAA,CAAA,MAAA,gBAAA,YAAA,SAAA,WAAA,eAAA,QAAA,cAAA,eAAA,UAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzLpB,UAAMlM,IAAQkE,GA+ER,CAAEuK,GAAYC,KAAW5K,GAAc,CAAC,GAExC,EAAE,UAAAqK,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAG3DlC,IAAUzP,EAAS,MACtB4D,EAAM,SAASA,EAAM,YAAaA,EAAM,QAAQ,MAClD,GACK8O,IAAc1S,EAAS,MAAM4D,EAAM,WAAWyO,EAAW,KAAK;sBAKpExJ,EAAA,GAAAN,EAsCM,OAtCNyD,EAsCM,EAtCD,kBAAe,gCAAqCxD,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MAChDjK,EAAK,SAAIc,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,KAAK7D,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC7B,UAAU5K,EAAQ;AAAA,QAClB,UAAUA,EAAQ;AAAA;mBAEnB,MAEO;AAAA,UAFPiB,EAEOC,uBAFP,MAEO;AAAA,gBADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAGZuB,EAqBEuqB,IArBF5nB,EAqBE;AAAA,QApBC,UAAUlE,EAAQ;AAAA,QAClB,iBAAeA,EAAY;AAAA,QAC3B,qBAAmBA,EAAgB;AAAA,QACnC,kBAAgBA,EAAa;AAAA,QAC7B,OAAOA,EAAK;AAAA,QACZ,eAAaA,EAAU;AAAA,QACvB,sBAAoBA,EAAiB;AAAA,QACrC,WAASU,EAAM8J,CAAA;AAAA,QACf,YAAUxC,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAClC,eAAa5K,EAAU;AAAA,QACvB,SAASA,EAAO;AAAA,QAChB,aAAaA,EAAW;AAAA,QACxB,UAAUA,EAAQ;AAAA,QAClB,mBAAiBA,EAAa;AAAA,QAC9B,oBAAkBA,EAAc;AAAA,QAChC,gBAAcA,EAAU;AAAA,QACxB,qBAAiB6H,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAU7D,EAAAA,yBAAyB6D,CAAM;AAAA,QAC1D,oBAAgBrE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAU7D,EAAAA,wBAAwB6D,CAAM;AAAA,QACxD,uBAAmBrE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAU7D,EAAAA,2BAA2B6D,CAAM;AAAA,SACvDxL,EAASwJ,CAAA,CAAA,GAAA,MAAA,IAAA,CAAA,YAAA,iBAAA,qBAAA,kBAAA,SAAA,eAAA,sBAAA,WAAA,YAAA,eAAA,WAAA,eAAA,YAAA,mBAAA,oBAAA,cAAA,CAAA;AAAA,MAEGvC,EAAO,cAA7BxG,EAKEwL,IAAA;AAAA;QAJC,OAAO3M,EAAK;AAAA,QACZ,aAAWA,EAAQ;AAAA,QACnB,MAAMA,EAAI;AAAA,QACV,WAASU,EAAM8J,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDpB,UAAM3P,IAAOoF,GAQP0pB,IAAU1yB,EAAI,EAAK;AAIzB,aAAS2sB,IAAc;AACrB,MAAA+F,EAAQ,QAAQ;AAAA,IAClB;AAEA,aAASoC,EAAatjB,GAAI;AACxB,MAAAkhB,EAAQ,QAAQ,IAChB9uB,EAAK,qBAAqB4N,CAAE,GAC5B5N,EAAK,OAAO;AAAA,IACd;AAEA,aAAS0vB,IAAc;AACrB,MAAIZ,EAAQ,UACVA,EAAQ,QAAQ,IAChB9uB,EAAK,OAAO;AAAA,IAEhB;2BAIAsG,EA2BuB6pB,IAAA;AAAA,MA1BpB,aAAWhrB,EAAQ;AAAA,MACnB,UAAUA,EAAQ;AAAA,MAClB,gBAAcA,EAAW;AAAA,MACzB,sBAAoBA,EAAiB;AAAA,MACrC,eAAaA,EAAU;AAAA,MACvB,UAAUA,EAAQ;AAAA,MAClB,WAAWA,EAAS;AAAA,MACpB,OAAOA,EAAK;AAAA,MACZ,oBAAkBA,EAAc;AAAA,MAChC,OAAOA,EAAK;AAAA,MACZ,SAAOuqB;AAAA,MACP,qCAAa1vB,EAAI,aAAA;AAAA,MACjB,SAAO+oB;AAAA,MACP,qCAAa/oB,EAAI,aAAA;AAAA;iBAElB,MAUiC;AAAA,QAVjC0G,EAUiC+nB,IAAA;AAAA,UAT9B,OAAOtpB,EAAK;AAAA,UACZ,eAAaA,EAAU;AAAA,UACvB,cAAYA,EAAS;AAAA,UACrB,eAAaA,EAAU;AAAA,UACvB,iBAAeA,EAAW;AAAA,UAC1B,uBAAoB+rB;AAAA,UACpB,SAAOxB;AAAA;qBAER,MAAQ;AAAA,YAARtpB,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/HZ,UAAMpF,IAAQkE;AA4Fd,IAAA6C,EAAkB/G,GAAO,UAAU,UAAU,GAC7C+G,EAAkB/G,GAAO,mBAAmB,WAAW,GACvD+G,EAAkB/G,GAAO,gBAAgB,OAAO,GAChD+G,EAAkB/G,GAAO,gBAAgB,OAAO,GAChD+G,EAAkB/G,GAAO,SAAS,UAAU,GAC5C+G,EAAkB/G,GAAO,iBAAiB,QAAW,yCAA6C,GAClG+G,EAAkB/G,GAAO,YAAY,UAAU,GAC/C+G,EAAkB/G,GAAO,OAAO,UAAU;AAE1C,UAAMjB,IAAOoF,GAQP,EAAE,YAAYgkB,MAAgB9gB,GAAwBrH,CAAK,GAG3DinB,IAAc7qB,EAAS,MACpB4D,EAAM,UAAU,WAAW,WAAWA,EAAM,KACpD,GAGKooB,IAAiBhsB,EAAS,MAC1B4D,EAAM,MACD,QAELA,EAAM,SACD,WAELA,EAAM,QACD,UAEFA,EAAM,QACd,GAGKqoB,IAAiBjsB,EAAS,MAC1B4D,EAAM,WACDA,EAAM,WAERA,EAAM,QACd,GAGKkwB,IAAmB9zB,EAAS,MACzB4D,EAAM,iBAAiBA,EAAM,UACrC;AAED,aAASiwB,EAAatjB,GAAI;AACxB,MAAA5N,EAAK,qBAAqB4N,CAAE;AAAA,IAC9B;2BAIAtH,EAqB2B8qB,IAAA;AAAA,MApBxB,aAAW9H,EAAc;AAAA,MACzB,UAAUnkB,EAAQ;AAAA,MAClB,gBAAcA,EAAW;AAAA,MACzB,sBAAoBA,EAAiB;AAAA,MACrC,eAAaA,EAAU;AAAA,MACvB,OAAOA,EAAK;AAAA,MACZ,eAAagsB,EAAgB;AAAA,MAC7B,cAAYhsB,EAAS;AAAA,MACrB,UAAUkkB,EAAc;AAAA,MACxB,WAAWlkB,EAAS;AAAA,MACpB,eAAaA,EAAU;AAAA,MACvB,OAAOU,EAAWujB,CAAA;AAAA,MAClB,oBAAkBjkB,EAAc;AAAA,MAChC,OAAO+iB,EAAW;AAAA,MAClB,gCAAOloB,EAAI,OAAA;AAAA,MACX,qCAAaA,EAAI,aAAA;AAAA,MACjB,qCAAaA,EAAI,aAAA;AAAA,MACjB,uBAAoBkxB;AAAA;iBAErB,MAAQ;AAAA,QAAR9qB,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;AC5KV,UAAMpF,IAAQkE,GAERksB,IAAQ5oB,GAAQ,GAEhB6oB,IAASl1B,EAAI,EAAK,GAGlBm1B,IAAal0B,EAAS,MACnB4D,EAAM,YAAYA,EAAM,IAChC,GACKuwB,IAAgBn0B,EAAS,MACzB,CAAGg0B,EAAM,QAAW,OAAOE,EAAW,SAAU,WAC3CD,EAAO,QAGT,EACR;8BAID1rB,EAyBM,OAAA;AAAA,MAvBJ,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,aAAW4D,EAAI;AAAA;MAEhBzD,EAWM,OAXN4D,IAWM;AAAA,QAVJvD,EASOC,sBATP,MASO;AAAA,iBAPUkrB,EAAU,SAAA,iBADzBjrB,EAMET,EAAAU,EAAA,GAAA;AAAA;YAJC,MAAMgrB,EAAU;AAAA,YACjB,MAAK;AAAA,YACJ,kCAASD,EAAM,QAAA;AAAA,YACf,iCAAQA,EAAM,QAAA;AAAA,oCAEjBprB,EAAA,GAAAI,EAAiDE,GAA1B+qB,EAAU,KAAA,GAAA;AAAA;YAAE,MAAK;AAAA;;;MAG5CxrB,EAMM,OAAA,MAAA;AAAA,QALJA,EAA+C,KAA/C6D,IAA+CmD,EAAZ3C,EAAK,KAAA,GAAA,CAAA;AAAA,QACIZ,EAAI,SAAA,QAAhDtD,KAAAN,EAEI,KAFJO,IAEI;AAAA,UADFC,EAAiDC,6BAAjD,MAAiD;AAAA,gBAArBgE,EAAW,WAAA,GAAA,CAAA;AAAA;;QAEzCjE,EAAmCC,EAAA,QAAA,gBAAA;AAAA;;WAtB7BmrB,EAAa,KAAA;AAAA;;;;;;ACDvB,UAAMvwB,IAAQkE,GAER6F,IAAW3N,EAAS,MAAM;AAC9B,YAAM4O,IAAO,kCACPwlB,IAAiB;AAAA,QACrB,IAAI,QAAQxlB,CAAI;AAAA,QAChB,IAAI,QAAQA,CAAI;AAAA,MACpB;AACE,aAAOhL,EAAM,sBAAsBwwB,EAAexwB,EAAM,IAAI,KAAKgL;AAAA,IACnE,CAAC;2BAjCC3F,EAaYof,IAAA;AAAA,MAXV,OAAM;AAAA,MACN,kBAAe;AAAA,MACf,MAAK;AAAA,MACL,QAAO;AAAA,MACN,OAAOgM,EAAK;AAAA,MACZ,MAAMloB,EAAI;AAAA,MACV,mBAAiB2V,EAAc;AAAA,MAC/B,uBAAqBnU,EAAQ;AAAA;MAE9B,SAAAL,EAAA,CAAgD,EAVtC,IAAA5N,GAAI,QAAA2C,GAAQ,SAAAG,GAAS,OAAA/B,QAAK;AAAA,QAUpCsI,EAAgDC,6BAAhC,IAAAtJ,GAAI,QAAA2C,GAAQ,SAAAG,GAAS,OAAA/B,EAAK,CAAA,CAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACH9C,UAAMmD,IAAQkE,GAiCRnF,IAAOoF,GAEPusB,IAAYv1B,EAAI,IAAI,GAEpBuyB,IAAWtxB,EAAS,MACjB,SAAS,eAAe4D,EAAM,QAAQ,CAC9C;AAED,IAAAymB,GAAa,CAAEiK,GAAWhD,CAAQ,GAAIiD,CAAW,GACjDzd,GAAW,CAAE,QAAQ,GAAIyd,CAAW;AAEpC,aAASA,IAAc;;AACrB,YAAMC,MAAgB10B,IAAAw0B,EAAU,UAAV,gBAAAx0B,EAAiB,cAAc,4BAA2B;AAChF,MAAI8D,EAAM,SAAS,CAAC4wB,KAClB7xB,EAAK,OAAO;AAAA,IAEhB;2BAIAsG,EA2BuB6iB,IAAA;AAAA,MA1BrB,MAAK;AAAA,MACJ,WAAWhkB,EAAS;AAAA,MACpB,OAAOA,EAAK;AAAA;iBAEb,MAqBM;AAAA,QArBNY,EAqBM,OArBNsD,EAqBM;AAAA,mBApBA;AAAA,UAAJ,KAAIsoB;AAAA,UACJ,OAAM;AAAA,UACL,iBAAexsB,EAAQ;AAAA,UACxB,kBAAe;AAAA,UACd,iBAAeA,EAAQ;AAAA,UACvB,cAAYA,EAAK;AAAA,UACjB,aAAWA,EAAI;AAAA,WACRgI,EAAM,MAAA,GAAA;AAAA,UAEdpH,EASM,OATN4D,IASM;AAAA,YARJ5D,EAOO,UAAA;AAAA,cANL,MAAK;AAAA,cACL,OAAM;AAAA,cACN,cAAW;AAAA,cACV,SAAO6rB;AAAA;cAERlrB,EAAeb,EAAA0E,EAAA,CAAA;AAAA;;UAGnBnE,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFjB,UAAMpF,IAAQkE,GAoBRnF,IAAOoF,GAGP0sB,IAAa11B,EAAI,IAAI,GAGrBoe,IAAyB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAGMC,IAAWpd,EAAS,MAAM;AAE9B,UAAIod,IAAW;AACf,aAAAD,EAAuB,QAAQ,CAAClT,MAAQ;AACtC,QAAAmT,KAAY,GAAGxZ,EAAM,cAAc,GAAGqG,CAAG;AAAA,MAC1C,CAAA,GAGDmT,IAAWA,EAAS,MAAM,GAAG,EAAE,GACxBA;AAAA,IACT,CAAC;AAGD,IAAAjS,GAAU,MAAM;AACd,MAAIvH,EAAM,UACR,OAAO,iBAAiB,WAAW+Z,CAAa;AAAA,IAEpD,CAAC,GAEDvM,GAAgB,MAAM;AACpB,aAAO,oBAAoB,WAAWuM,CAAa;AAAA,IACrD,CAAC,GAGDxY,EAAM,MAAMvB,EAAM,QAAQ,CAAC0Y,MAAa;AACtC,MAAIA,IACF,OAAO,iBAAiB,WAAWqB,CAAa,IAEhD,OAAO,oBAAoB,WAAWA,CAAa;AAAA,IAEvD,CAAC;AAGD,aAASA,EAAcpN,GAAI;AACzB,UAAIA,EAAG,QAAQ,OAAO;AAGpB,cAAMsN,IAAoB4W,EAAW,MAAM,iBAAiBrX,EAAS,KAAK,GACpEK,IAAeI,EAAkB,CAAC,GAClCN,IAAcM,EAAkBA,EAAkB,SAAS,CAAC;AAGlE,QAAI,SAAS,kBAAkBJ,KAAgBlN,EAAG,WAChDmkB,EAAoBnkB,GAAIgN,CAAW,IAC1B,SAAS,kBAAkBA,KAAe,CAAChN,EAAG,WACvDokB,EAAcpkB,GAAIkN,CAAY,IACpBgX,EAAW,MAAM,SAAS,SAAS,aAAa,KAC1DG,EAAiBrkB,GAAIkN,CAAY;AAAA,MAEvC;AAAA,IACA;AAEA,aAASiX,EAAoBnkB,GAAIgN,GAAa;AAC5C,MAAAhN,EAAG,eAAc,GACZ3M,EAAM,wBAET2Z,EAAY,MAAK,GAEnB5a,EAAK,mBAAmB4N,CAAE;AAAA,IAC5B;AAEA,aAASokB,EAAcpkB,GAAIkN,GAAc;AACvC,MAAAlN,EAAG,eAAc,GACZ3M,EAAM,kBAET6Z,EAAa,MAAK,GAEpB9a,EAAK,YAAY4N,CAAE;AAAA,IACrB;AAEA,aAASqkB,EAAiBrkB,GAAIkN,GAAc;AAC1C,MAAAlN,EAAG,eAAc,GAEjBkN,EAAa,MAAK;AAAA,IACpB;2BAIAlV,EAEM,OAAA;AAAA,eAFG;AAAA,MAAJ,KAAIksB;AAAA;MACP1rB,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;2BCjHbT,EAqCM,OAAA;AAAA,MArCD,OAAM;AAAA,MAAqB,iBAAessB,EAAQ;AAAA;MAErDnsB,EA6BS,UA7BT4D,IA6BS;AAAA,QA5BP5D,EAuBM,OAvBN6D,IAuBM;AAAA,UArBJ7D,EAgBM,OAhBNI,IAgBM;AAAA,YAdOH,EAAI,QAAIC,EAAM,OAAC,QAA1BC,KAAAN,EAKM,OALNqO,IAKM;AAAA,cAJJ7N,EAGOC,sBAHP,MAGO;AAAA,uBAFgBL,EAAI,QAAA,iBAAzBM,EAAmET,EAAAU,EAAA,GAAA;AAAA;kBAA1B,MAAMP,EAAI;AAAA,kBAAE,MAAK;AAAA,0CAC1DE,EAAA,GAAAI,EAA2CE,GAApBR,EAAI,IAAA,GAAA;AAAA;kBAAE,MAAK;AAAA;;;YAItCU,EAEUsK,IAAA;AAAA,cAFD,KAAI;AAAA,cAAI,UAAUC,EAAQ;AAAA,cAAG,UAAUihB,EAAQ;AAAA;yBACtD,MAAkF;AAAA,gBAAlFnsB,EAAkF,QAAA;AAAA,kBAA5E,OAAM;AAAA,kBAA2B,iBAAemsB,EAAQ;AAAA,qBAAK9nB,EAAK,KAAA,GAAA,GAAAugB,EAAA;AAAA;;;YAG1E5kB,EAEM,OAFNosB,IAEM;AAAA,cADJ/rB,EAA2BC,EAAA,QAAA,aAAA;AAAA;;UAIpB+rB,EAAQ,iBAAnBxsB,EAEM,OAAA;AAAA;YAFe,OAAM;AAAA,YAA8B,iBAAessB,EAAQ;AAAA;YAC9EnsB,EAA2B,gBAAlBqsB,EAAQ,QAAA,GAAA,CAAA;AAAA;;QAIrBrsB,EAEM,OAAA;AAAA,UAFA,aAAWssB,EAAQ;AAAA,UAAE,OAAM;AAAA;UAC/BjsB,EAA8BC,EAAA,QAAA,gBAAA;AAAA;;MAIlCN,EAEO,QAAA;AAAA,QAFA,aAAWssB,EAAQ;AAAA,QAAE,OAAM;AAAA;QAChCjsB,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;AC1CC,SAASisB,GAAmBrxB,GAAO;AAEhD,QAAMsxB,IAAoBn2B,EAAI,CAAE,CAAA,GAG1Bo2B,IAAan1B,EAAS,MAAMo1B,GAAMxxB,EAAM,OAAO,CAAC;AAGtD,WAASyxB,EAAmBC,GAAc;AACxC,IAAAH,EAAW,MAAM,QAAQ,CAACzc,MAAS;;AACjC,QAAI5Y,IAAA4Y,EAAK,aAAL,gBAAA5Y,EAAe,UAAS,KAAK,CAAC4Y,EAAK,gBAErCwc,EAAkB,MAAMxc,EAAK,EAAE,IAAI4c;AAAA,IAEtC,CAAA;AAAA,EACL;AAEE,WAASC,EAAa7c,GAAM;AAC1B,UAAM8c,IAAKC,EAAM/c,CAAI;AACrB,WAAO,OAAO8c,KAAO,YAAYA,EAAG,WAAW,MAAM;AAAA,EACzD;AAEE,WAASE,EAAahd,GAAM;AAC1B,UAAM8c,IAAKC,EAAM/c,CAAI;AACrB,WAAI6c,EAAa7c,CAAI,IAEf,OAAO,SAAW,MAAoB,KACnC,OAAO,SAAS,KAAK,WAAW8c,CAAE,IAGvC5xB,EAAM,SACD4xB,KAAM5xB,EAAM,OAAO,QAAQ4xB,CAAE,EAAE,SAAS5xB,EAAM,OAAO,aAAa,MAAM,OAG1E;AAAA,EACX;AAEE,WAAS+xB,EAAWjd,GAAM;AAExB,WAAIA,EAAK,cAAoB,KACtB,CAACwc,EAAkB,MAAMxc,EAAK,EAAE;AAAA,EAC3C;AAEE,WAASkd,EAAqBld,GAAM;AAClC,WAAOid,EAAWjd,CAAI,IAAI,YAAYA,EAAK,IAAI,aAAa,UAAUA,EAAK,IAAI;AAAA,EACnF;AAEE,WAAS+c,EAAM/c,GAAM;;AACnB,WAAIA,EAAK,KACAA,EAAK,MACH5Y,IAAA4Y,EAAK,aAAL,QAAA5Y,EAAe,MACjB4Y,EAAK,SAAS,MAEd;AAAA,EAEb;AAEE,WAASmd,EAAUnd,GAAM;AACvB,WAAIA,EAAK,SACAA,EAAK,SAEL;AAAA,EAEb;AAEE,SAAO;AAAA,IACL,mBAAAwc;AAAA,IACA,sBAAAU;AAAA,IACA,WAAAC;AAAA,IACA,OAAAJ;AAAA,IACA,oBAAAJ;AAAA,IACA,cAAAE;AAAA,IACA,cAAAG;AAAA,IACA,YAAAC;AAAA,IACA,YAAAR;AAAA,EACJ;AACA;;;;;;;;;;;;;;;AC3EA,UAAMvxB,IAAQkE,GAWRnF,IAAOoF,GAEP,EAAE,cAAAwtB,GAAc,cAAAG,GAAc,OAAAD,GAAO,WAAAI,EAAW,IAAGZ,GAAmBrxB,CAAK;;;AAKzE,aAAA4E,EAAA+sB,CAAA,EAAaztB,EAAI,IAAA,UADzBS,EASI,KAAA;AAAA;QAPD,gBAAcC,EAAAktB,CAAA,EAAa5tB,EAAA,IAAI,KAAK;AAAA,QACpC,eAAaU,EAAYktB,CAAA,EAAC5tB,EAAI,IAAA;AAAA,QAC9B,MAAMU,EAAKitB,CAAA,EAAC3tB,EAAI,IAAA;AAAA,QAChB,QAAQU,EAASqtB,CAAA,EAAC/tB,EAAI,IAAA;AAAA,QACtB,SAAQ6H,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAY,MAAO5N,sBAAyB4N,CAAE;AAAA;QAE3CxH,EAAQC,EAAA,QAAA,SAAA;AAAA,yBAGVC,EASc6sB,GAAA;AAAA;QAPX,gBAActtB,EAAAktB,CAAA,EAAa5tB,EAAA,IAAI,KAAK;AAAA,QACpC,eAAaU,EAAYktB,CAAA,EAAC5tB,EAAI,IAAA;AAAA,QAC9B,IAAIU,EAAKitB,CAAA,EAAC3tB,EAAI,IAAA;AAAA,QACd,QAAQU,EAASqtB,CAAA,EAAC/tB,EAAI,IAAA;AAAA,QACtB,SAAQ6H,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAY,MAAO5N,sBAAyB4N,CAAE;AAAA;mBAE3C,MAAQ;AAAA,UAARxH,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AC7BV,UAAMpF,IAAQkE,GAGRnF,IAAOoF,GAGP;AAAA,MACJ,mBAAAmtB;AAAA,MACA,sBAAAU;AAAA,MACA,oBAAAP;AAAA,MACA,cAAAK;AAAA,MACA,YAAAC;AAAA,MACA,YAAAR;AAAA,IACF,IAAIF,GAAmBrxB,CAAK,GACtBmyB,IAAWhyB,GAAK;AACtB,IAAAsN,GAAc,uBAAuB,CAACd,MAAO;AAC3C,MAAAuW,EAAS,QAAQvW,EAAG;AAAA,IACtB,CAAC;AAGD,UAAMuW,IAAW/nB,EAAI,EAAK,GACpBi3B,IAAkBj3B,EAAI,EAAK;AAGjC,IAAA2S,GAAc,MAAM;AAClB,MAAA2jB,EAAmB,EAAI;AAAA,IACzB,CAAC,GAEDlqB,GAAU,MAAM;AACd,MAAA6qB,EAAgB,QAAQpyB,EAAM;AAAA,IAChC,CAAC,GAGDuB,EAAM,MAAMvB,EAAM,SAAS,MAAM;AAC/B,MAAAyxB,EAAmB,EAAI;AAAA,IACzB,CAAC,GAEDlwB,EAAM,MAAMvB,EAAM,YAAY,CAAC2a,MAAW;AACxC,MAAAyX,EAAgB,QAAQzX;AAAA,IAC1B,CAAC,GAEDpZ,EAAM6wB,GAAiB,CAACzX,MAAW;AACjC,MAAIA,IACF,SAAS,KAAK,MAAM,WAAW,WAE/B,SAAS,KAAK,MAAM,WAAW,IAEjC5b,EAAK,iBAAiB4b,CAAM;AAAA,IAC9B,CAAC,GAEDpZ,EAAM2hB,GAAU,CAACxK,GAAU2Z,MAAa;AACtC,MAAI3Z,MAAa2Z,MACfD,EAAgB,QAAQ,IACxBE,EAAa;AAAA,IAEjB,CAAC;AAGD,aAASC,EAAcC,GAAW;AAChC,MAAAlB,EAAkB,MAAMkB,CAAS,IAAI,CAAClB,EAAkB,MAAMkB,CAAS,GAEvE,OAAO,KAAKlB,EAAkB,KAAK,EAAE,QAAQ,CAAC3wB,MAAQ;AACpD,QAAIA,MAAQ6xB,MACVlB,EAAkB,MAAM3wB,CAAG,IAAI;AAAA,MAElC,CAAA;AAAA,IACH;AAEA,aAAS8xB,IAAuB;AAC9B,aAAOL,EAAgB,QAAQ,eAAe;AAAA,IAChD;AAEA,aAASM,EAAe5d,GAAM;AAC5B,aAAOA,EAAK,SAAS,KAAK,CAAC6d,MAAYb,EAAaa,CAAO,CAAC;AAAA,IAC9D;AAEA,aAASL,IAAgB;AACvB,aAAO,KAAKhB,EAAkB,KAAK,EAAE,QAAQ,CAAC3wB,MAAQ;AACpD,QAAA2wB,EAAkB,MAAM3wB,CAAG,IAAI;AAAA,MAChC,CAAA;AAAA,IACH;AAEA,aAASiyB,EAAkBjmB,GAAImI,GAAM;AAEnC,MAD2BnI,EAAG,WAAWA,EAAG,WAE1C4lB,EAAczd,EAAK,EAAE,GAEvB/V,EAAK,oBAAoB,EAAE,IAAA4N,GAAI,SAASmI,EAAM,CAAA;AAAA,IAChD;;;aAMQoO,EAAQ,cADhBve,EAqFM,OAAA;AAAA;QAnFJ,OAAM;AAAA,QACL,cAAYytB,EAAe;AAAA,QAC3B,oBAAkBS,EAAgB;AAAA;QAG1BA,EAAgB,qCADzBluB,EAuBS,UAAA;AAAA;UArBP,MAAK;AAAA,UACL,OAAM;AAAA,UACL,iBAAemuB,EAAU;AAAA,UACzB,0CAAwCluB,EAAQutB,CAAA,CAAA;AAAA,UAChD,OAAOM,EAAoB;AAAA,UAC3B,SAAK1mB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAEgiB,EAAe,QAAA,CAAIA,EAAe;AAAA;UAE1CttB,EAYM,OAZN6D,IAYM;AAAA,mBAVWoqB,EAAS,aAAA,iBADxB1tB,EAIET,EAAAU,EAAA,GAAA;AAAA;cAFA,OAAM;AAAA,cACL,MAAMytB,EAAS;AAAA,sCAElB9tB,EAAA,GAAAI,EAIEE,GAFKwtB,EAAS,SAAA,GAAA;AAAA;cACd,OAAM;AAAA;YAERjuB,EAAmC,gBAA1BkuB,EAAgB,gBAAA,GAAA,CAAA;AAAA;UAE3BvtB,EAAiEb,EAAAc,EAAA,GAAA,EAAhD,OAAM,wCAAuC,CAAA;AAAA;QAEhED,EAsDakF,IAAA,EAtDD,MAAK,2BAA0B,GAAA;AAAA,qBACzC,MAoDM;AAAA,eApDN7F,EAoDM,OAAA;AAAA,cAlDJ,OAAM;AAAA,cACL,6BAA6BF,EAAQutB,CAAA,CAAA;AAAA;cAGtCrtB,EAwCK,MAAA,MAAA;AAAA,wBAvCHH,EAsCWsE,IAAA,MAAA6J,GAtCclO,EAAU2sB,CAAA,GAAA,CAAlBzc,MAAI;;;oBAAsB,KAAAA,EAAK;AAAA;sBAEpC5Y,IAAA4Y,EAAK,aAAL,gBAAA5Y,EAAe,UAAM,UAA/ByI,EAwBK,MAAA;AAAA;sBAxBiC,iBAAeC,EAAUmtB,CAAA,EAACjd,CAAI;AAAA;sBAClEhQ,EAWS,UAAA;AAAA,wBAVP,MAAK;AAAA,wBACL,OAAM;AAAA,wBACL,iBAAeF,EAAUmtB,CAAA,EAACjd,CAAI;AAAA,wBAC9B,iBAAa,GAAKA,EAAK,EAAE;AAAA,wBACzB,eAAa4d,EAAe5d,CAAI;AAAA,wBAChC,OAAOlQ,EAAoBotB,CAAA,EAACld,CAAI;AAAA,wBAChC,SAAO,CAAA1E,MAAAmiB,EAAczd,EAAK,EAAE;AAAA;wBAE7BhQ,EAA4B,QAAA,MAAAgH,EAAnBgJ,EAAK,IAAI,GAAA,CAAA;AAAA,wBAClBrP,EAAwEb,EAAAc,EAAA,GAAA,EAAvD,OAAM,+CAA8C,CAAA;AAAA;sBAEvEZ,EAUK,MAVLosB,IAUK;AAAA,yBATHjsB,EAAA,EAAA,GAAAN,EAQKsE,IARoB,MAAA6J,GAAAgC,EAAK,WAAnBme,YAAXtuB,EAQK,MAAA,MAAA;AAAA,0BAPHc,EAMiBytB,IAAA;AAAA,4BALd,MAAMD;AAAA,4BACN,QAAQE,EAAM;AAAA,4BACd,mBAAmBxmB,MAAO5N,EAA2B,oBAAA,EAAA,IAAA4N,YAAasmB,EAAU,CAAA;AAAA;uCAE7E,MAAqB;AAAA,8BAAlBG,EAAAtnB,EAAAmnB,EAAW,IAAI,GAAA,CAAA;AAAA;;;;;uCAO1BtuB,EAQK,MAAA0uB,IAAA;AAAA,sBAPH5tB,EAMiBytB,IAAA;AAAA,wBALd,MAAMpe;AAAA,wBACN,QAAQqe,EAAM;AAAA,wBACd,mBAAmBxmB,MAAO5N,EAA2B,oBAAA,EAAA,IAAA4N,YAAamI,EAAI,CAAA;AAAA;mCAEvE,MAAe;AAAA,0BAAZse,EAAAtnB,EAAAgJ,EAAK,IAAI,GAAA,CAAA;AAAA;;;;;;;cAOT9P,EAAM,OAAA,WAAA,KAAjBC,KAAAN,EAEM,OAFN2uB,IAEM;AAAA,gBADJnuB,EAAyBC,EAAA,QAAA,WAAA;AAAA;;mBAjDnB0tB,EAAU,UAAA;AAAA;;;;oBAwDxB7tB,KAAAN,EA6FM,OA7FN4uB,IA6FM;AAAA,QA5FJzuB,EA2FM,OAAA,MAAA;AAAA,UAzFaqE,CAAAA,EAAAA,SAAS4pB,EAAS,kBAAnCpuB,EAWWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,mBATM8pB,EAAS,aAAA,iBADxB1tB,EAIET,EAAAU,EAAA,GAAA;AAAA;cAFA,OAAM;AAAA,cACL,MAAMytB,EAAS;AAAA,sCAElB9tB,EAAA,GAAAI,EAIEE,GAFKwtB,EAAS,SAAA,GAAA;AAAA;cACd,OAAM;AAAA;;UAIVjuB,EAsEK,MAAA,MAAA;AAAA,YApEOqE,EAAK,SAAflE,KAAAN,EAYK,MAZL6uB,IAYK;AAAA,cAVKC,EAAQ,iBADhBpuB,EAQc6sB,GAAA;AAAA;gBANX,gBAActtB,EAAAktB,CAAA,EAAmB2B,EAAAA,IAAAA,EAAAA,eAAe;AAAA,gBAChD,IAAIA,EAAQ;AAAA,gBACZ,eAAa7uB,EAAYktB,CAAA,EAAA,EAAA,IAAO2B,EAAQ,UAAA;AAAA,gBACxC,SAAK1nB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGY,MAAO5N,wBAA2B,IAAA4N,GAAE,SAAA,EAAA,UAAA,EAAA,KAA8B8mB,EAAQ,SAAA,GAAA,MAAUtqB,EAAK,MAAA,GAAA;AAAA;2BAElG,MAAwB;AAAA,kBAAxBrE,EAAwB,gBAAfqE,EAAK,KAAA,GAAA,CAAA;AAAA;;+DAGhBlE,EAAA,GAAAN,EAA+B,cAAfwE,EAAK,KAAA,GAAA,CAAA;AAAA;aAGvBlE,EAAA,EAAA,GAAAN,EAqDWsE,IArDuB,MAAA6J,GAAAlO,EAAA2sB,CAAA,GAAhB,CAAAzc,GAAMvX,MAAK;;;gBAAuB,KAAAuX,EAAK;AAAA;kBAE7C5Y,IAAA4Y,EAAK,aAAL,gBAAA5Y,EAAe,UAAM,UAA/ByI,EAuCK,MAAA+uB,IAAA;AAAA,kBArCH5uB,EAaS,UAAA;AAAA,oBAZN,IAAE,GAAKgQ,EAAK,EAAE;AAAA,oBACf,MAAK;AAAA,oBACL,OAAM;AAAA,oBACL,iBAAelQ,EAAUmtB,CAAA,EAACjd,CAAI;AAAA,oBAC9B,iBAAa,GAAKA,EAAK,EAAE;AAAA,oBACzB,eAAa4d,EAAe5d,CAAI;AAAA,oBAChC,iBAAelQ,EAAUmtB,CAAA,EAACjd,CAAI;AAAA,oBAC9B,OAAOlQ,EAAoBotB,CAAA,EAACld,CAAI;AAAA,oBAChC,SAAO,CAAA1E,MAAAmiB,EAAczd,EAAK,EAAE;AAAA;oBAE7BhQ,EAA4B,QAAA,MAAAgH,EAAnBgJ,EAAK,IAAI,GAAA,CAAA;AAAA,oBAClBrP,EAAiEb,EAAAc,EAAA,GAAA,EAAhD,OAAM,wCAAuC,CAAA;AAAA;kBAGhED,EAqBuBypB,IAAA;AAAA,oBApBpB,IAAE,GAAKpa,EAAK,EAAE;AAAA,oBACf,OAAM;AAAA,oBACL,aAAS,GAAKA,EAAK,EAAE;AAAA,oBACtB,UAAS;AAAA,oBACR,OAAOlQ,EAAUmtB,CAAA,EAACjd,CAAI;AAAA,oBACtB,oBAAkB;AAAA,oBACnB,OAAM;AAAA,oBACL,SAAO,CAAA1E,MAAAxL,EAAA0sB,CAAA,EAAkBxc,EAAK,EAAE,IAAA;AAAA;+BAEjC,MAUK;AAAA,sBAVLhQ,EAUK,MAAA,MAAA;AAAA,yBATHG,EAAA,EAAA,GAAAN,EAQKsE,IARoB,MAAA6J,GAAAgC,EAAK,WAAnBme,YAAXtuB,EAQK,MAAA;AAAA,0BARoC,KAAKsuB,EAAW;AAAA;0BACvDxtB,EAMiBytB,IAAA;AAAA,4BALd,MAAMD;AAAA,4BACN,QAAQE,EAAM;AAAA,4BACd,mBAAmBxmB,MAAOimB,EAAkBjmB,GAAIsmB,CAAU;AAAA;uCAE3D,MAAqB;AAAA,8BAAlBG,EAAAtnB,EAAAmnB,EAAW,IAAI,GAAA,CAAA;AAAA;;;;;;;;4BAQ5BtuB,EAQK,MAAAgvB,IAAA;AAAA,kBAPHluB,EAMiBytB,IAAA;AAAA,oBALd,MAAMpe;AAAA,oBACN,QAAQqe,EAAM;AAAA,oBACd,mBAAmBxmB,MAAO5N,EAA2B,oBAAA,EAAA,IAAA4N,YAAamI,EAAI,CAAA;AAAA;+BAEvE,MAA4B;AAAA,sBAA5BhQ,EAA4B,QAAA,MAAAgH,EAAnBgJ,EAAK,IAAI,GAAA,CAAA;AAAA;;;;;;;UAOf9P,EAAM,OAAA,WAAA,KAAjBC,KAAAN,EAEM,OAFNivB,IAEM;AAAA,YADJzuB,EAAyBC,EAAA,QAAA,WAAA;AAAA;;;;;;;;AClR/B,UAAMyuB,IAAgB14B,EAAI,IAAI,GAGxB24B,IAAU34B,EAAI,IAAI,GAGlB44B,IAAQ;AAAA,MACZ,EAAE,QAAQ,QAAQ,OAAO,UAAW;AAAA,MACpC,EAAE,QAAQ,QAAQ,OAAO,UAAW;AAAA,MACpC,EAAE,QAAQ,QAAQ,OAAO,UAAS;AAAA,IACpC,GACM,CAAEC,CAAU,IAAGlwB,GAAa;AAElC,WAAAyD,GAAU,MAAM;AACd,MAAAusB,EAAQ,QAAQD,EAAc,MAC3B,cAAc,KAAK,EACnB,aAAa,SAAS,KACpB;AAAA,IACP,CAAC;MAIC/uB,EAOO,QAPPsD,EAOO;AAAA,iBAND;AAAA,QAAJ,KAAIyrB;AAAA,QACJ,OAAM;AAAA,QACL,qBAAqBjvB,EAAQovB,CAAA,CAAA;AAAA,SACtB9nB,EAAM,MAAA,GAAA;AAAA,QAEd/G,EAAQC,EAAA,QAAA,SAAA;AAAA;YAIVT,EAqBM,OAAA;AAAA,QApBJ,OAAM;AAAA,QACL,YAAUmvB,EAAO;AAAA,QAClB,OAAM;AAAA,QACN,QAAO;AAAA;QAEPhvB,EAciB,kBAAA;AAAA,UAbd,IAAIF,EAAQovB,CAAA;AAAA,UACb,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,kBAAe;AAAA;gBAEfrvB,EAKEsE,IAAA,MAAA6J,GAJeihB,GAAK,CAAbE,MADTnvB,EAKE,QAAA;AAAA,YAHC,KAAKmvB,EAAK;AAAA,YACV,QAAQA,EAAK;AAAA,YACb,cAAYA,EAAK;AAAA;;;;;ICzDbC,KAAqB,OAAO,YAAY;;;;ACmBrD,UAAMl0B,IAAQkE,GAGRiwB,IAAQ5zB,GAAO2zB,IAAoB,IAAI,GAEvCxQ,IAAatnB,EAAS,OACnB+3B,KAAA,gBAAAA,EAAO,WAAWn0B,EAAM,WAAUA,EAAM,QAChD,GAEKo0B,IAAah4B,EAAS,OACnB+3B,KAAA,gBAAAA,EAAO,MAAM,aAAYn0B,EAAM,QACvC,GAEKgJ,IAAU5M,EAAS,OAChB+3B,KAAA,gBAAAA,EAAO,MAAM,YAAWn0B,EAAM,OACtC,GAEKq0B,IAAgBj4B,EAAS,OAAO;AAAA,MACpC,GAAG4D;AAAA,MACH,UAAUo0B,EAAW;AAAA,IACvB,EAAE,GAEI,EAAE,SAAAvuB,GAAS,mBAAAE,MAAsBJ,GAAgB0uB,CAAa;AAIpE,aAASjzB,EAAQ/B,GAAO;AACtB,MAAAi1B,EAAa;AAAA,IACf;AAEA,aAASA,IAAgB;AACvB,MAAKH,MAGDzQ,EAAW,SAAS,CAACyQ,EAAM,MAAM,YAErCA,EAAM,SAASn0B,EAAM,KAAK;AAAA,IAC5B;2BAvDEqF,EASYE,GARLX,EAAOiB,CAAA,CAAA,GADduC,EASY;AAAA,MAPV,OAAM;AAAA,MACL,gBAAcY,EAAO;AAAA,MACrB,iBAAe0a,EAAU,SAAI;AAAA,MAC7B,gBAAc9e,EAAAiB,CAAA,MAAuB,WAAA6d,EAAA,QAAa;AAAA,OAC3C9e,EAAiBmB,CAAA,GAAA,EACxB,SAAO3E,EAAO,CAAA,GAAA;AAAA,iBACf,MAAqB;AAAA,QAArB+D,EAAqBC,EAAA,QAAA,WAAA,EAAd,YAAAse,EAAW,MAAA,CAAA;AAAA;;;;;;;;;;;;;;;;ACItB,UAAM1jB,IAAQkE,GAGRsb,IAAQC,GAIbvb,GAAA,YAAA;AAED,IAAAqX,GAAQ2Y,IAAoB;AAAA,MAC1B,OAAAl0B;AAAA,MACA,OAAAwf;AAAA,MACA,UAAAiE;AAAA,MACA,YAAAC;AAAA,IACF,CAAC;AAID,aAASA,EAAW/oB,GAAK;AACvB,UAAI,CAAC6kB,EAAM,MAAO,QAAO;AAGzB,UAAI,CAACxf,EAAM,SAAU,QAAOqkB,EAAQ7E,EAAM,OAAO7kB,CAAG;AAGpD,UAAI,CAAC,MAAM,QAAQ6kB,EAAM,KAAK;AAC5B,cAAM,IAAI,MAAM,sFAAsFA,EAAM,KAAK,EAAE;AAIrH,aAAOA,EAAM,MAAM,KAAK,CAAA7N,MAAM0S,EAAQ1S,GAAIhX,CAAG,CAAC;AAAA,IAChD;AAEA,aAAS0pB,EAAQjS,GAAGC,GAAG;AACrB,YAAM,EAAE,SAAAkiB,EAAO,IAAKv0B;AAEpB,aAAIukB,EAASnS,CAAC,KAAKmS,EAASlS,CAAC,IACpB,OAAOkiB,KAAY,aACtBA,EAAQniB,CAAC,MAAMmiB,EAAQliB,CAAC,IACxBD,EAAEmiB,CAAO,MAAMliB,EAAEkiB,CAAO,IAGvBniB,MAAMC;AAAA,IACf;AAEA,aAASkS,EAAS5pB,GAAK;AACrB,aAAO,OAAOA,KAAQ,YAAYA,MAAQ,QAAQ,CAAC,MAAM,QAAQA,CAAG;AAAA,IACtE;AAEA,aAAS8oB,EAAS9oB,GAAK;AACrB,MAAA6kB,EAAM,QAAQxf,EAAM,WAChBwkB,EAAc7pB,CAAG,IACjBA;AAAA,IACN;AAEA,aAAS6pB,EAAc7pB,GAAK;AAC1B,aAAK6kB,EAAM,QAEJkE,EAAW/oB,CAAG,IACjB6kB,EAAM,MAAM,OAAO,CAAA7N,MAAM,CAAC0S,EAAQ1S,GAAIhX,CAAG,CAAC,IAC1C,CAAE,GAAG6kB,EAAM,OAAO7kB,CAAG,IAJA,CAACA,CAAG;AAAA,IAK/B;sBAzEEsK,EAAA,GAAAI,EAIYE,GAHLivB,EAAAA,EAAE,GACP,EAAA,OAAM,yBAAqB;AAAA,iBAC3B,MAAQ;AAAA,QAARrvB,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACMZ,UAAMpF,IAAQkE;AAoCd,IAAA6C,EAAkB/G,GAAO,WAAW,QAAW,6CAA+C;AAM9F,UAAM,CAAEyO,GAAYC,KAAW5K,GAAc,CAAC,GAExC,EAAE,UAAAqK,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAG3D0mB,IAAiBr4B,EAAS,MAAA;;AAAM,eAAAH,KAAAC,IAAA8D,EAAM,UAAN,gBAAA9D,EAAa,SAAb,gBAAAD,EAAA,KAAAC,GAAoB;AAAA,OAAS8D,EAAM;AAAA,KAAK,GACxE6L,IAAUzP,EAAS,MACtB4D,EAAM,SAASA,EAAM,YAAaA,EAAM,QAAQy0B,EAAe,SAAS,MAC1E,GACK3lB,IAAc1S,EAAS,MAAM4D,EAAM,WAAWyO,EAAW,KAAK;sBAIpExJ,EAAA,GAAAN,EA4BM,OA5BNyD,EA4BM,EA5BD,kBAAe,oBAAyBxD,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MACpCjK,EAAK,SAAIc,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,KAAK7D,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC7B,UAAU5K,EAAQ;AAAA,QAClB,UAAUA,EAAQ;AAAA;mBAEnB,MAEO;AAAA,UAFPiB,EAEOC,uBAFP,MAEO;AAAA,gBADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAGZuB,EAWE4G,IAXFjE,EAWE;AAAA,QAVC,UAAUlE,EAAQ;AAAA,QAClB,OAAOA,EAAK;AAAA,QACZ,WAASU,EAAM8J,CAAA;AAAA,QACf,IAAIxC,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC5B,aAAa5K,EAAW;AAAA,QACxB,UAAUA,EAAQ;AAAA,QAClB,MAAMA,EAAI;AAAA,QACV,OAAOA,EAAK,SAAIA,EAAU;AAAA,QAC1B,uBAAmB6H,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAU7D,EAAAA,2BAA2B6D,CAAM;AAAA,SACvDxL,EAASwJ,CAAA,CAAA,GAAA,MAAA,IAAA,CAAA,YAAA,SAAA,WAAA,MAAA,eAAA,YAAA,QAAA,OAAA,CAAA;AAAA,MAEGvC,EAAO,cAA7BxG,EAKEwL,IAAA;AAAA;QAJC,OAAO3M,EAAK;AAAA,QACZ,aAAWA,EAAQ;AAAA,QACnB,MAAMA,EAAI,QAAIuwB,EAAc;AAAA,QAC5B,WAAS7vB,EAAM8J,CAAA;AAAA;;;IChFdgmB,KAAU;AAAA,EACd,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AACP,GAKaC,KAAe;AAAA,EAC1B,MAAM;AAAA,IACJ,cAAc;AAAA,IACd,eAAe;AAAA,IACf,cAAc;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,wBAAwBC,GAAa;;AACnC,gBAAK,QAAQ,iBAAiB,OAAO,IAC9B14B,IAAA,KAAK,KAAK,kBAAV,gBAAAA,EAA0B04B;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,uBAAuBC,GAAY;;AACjC,gBAAK,QAAQ,gBAAgB,YAAY,IAClC34B,IAAA,KAAK,KAAK,iBAAV,gBAAAA,EAAyB24B;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKD,iBAAiB;AACf,WAAK,KAAK,KAAK,iBACb,KAAK,KAAK,eAAeC,GAAwB,EAAG,IAAI,CAAC7hB,MAAM;AAC7D,YAAM4hB,IAAaE,GAA4B9hB,CAAC,GAC1C+hB,IAAON,GAAQG,EAAW,CAAC,CAAC,IAAIH,GAAQG,EAAW,CAAC,CAAC,KAAI;AAC/D,aAAO;AAAA,QACL,OAAO,IAAI5hB,CAAC;AAAA,QACZ,MAAA+hB;AAAA,QACA,OAAO/hB;AAAA,QACP,YAAA4hB;AAAA,MACV;AAAA,IACO,CAAA,EAAE,OAAO,CAAAljB,MAAMA,EAAG,eAAe,KAAK,IAElC,KAAK,KAAK;AAAA,EAClB;AAAA,EAED,QAAQsjB,GAASC,GAAQ;AACvB,IAAI,CAAC,KAAK,KAAKD,CAAO,KAAK,KAAK,KAAK,iBACnC,KAAK,KAAKA,CAAO,IAAI,CAAA,GAErB,KAAK,KAAK,aAAa,QAAQ,CAAAE,MAAW;AACxC,WAAK,KAAKF,CAAO,EAAEE,EAAQD,CAAM,CAAC,IAAIC;AAAA,IACvC,CAAA;AAAA,EAEP;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClFA,UAAMn1B,IAAQkE;AA6Cd,IAAA6C,EAAkB/G,GAAO,WAAW,QAAW,6CAA+C;AAE9F,UAAMjB,IAAOoF,GAIPixB,IAAmB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAEM,EAAE,UAAAjnB,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAG3DsnB,IAAqBl6B,EAAI,IAAI,GAC7By5B,IAAcz5B,EAAI,CAAC,GACnBm6B,IAAen6B,EAAI,CAAE,CAAA,GACrBo6B,IAAiBp6B,EAAI,IAAI,GACzB;AAAA,MACJq6B;AAAA,MACAC;AAAA,MACA/mB;AAAA,MACAD;AAAA,IACF,IAAI3K,GAAc,CAAC,GACbmlB,IAAY9tB,EAAI,EAAK,GACrBu6B,IAAcv6B,EAAI,EAAE,GACpBw6B,IAAmBx6B,EAAI,EAAE,GACzBy6B,IAAsBz6B,EAAI,EAAK,GAC/B06B,IAAmB16B,EAAI,EAAK,GAC5B26B,IAAuB36B,EAAI,EAAI;AACrC,IAAA+qB,EAAa;AAAA,MACX,eAAe0P;AAAA,MACf,kBAAkBD;AAAA,IACpB,CAAC;AAGD,UAAMI,IAAsB35B,EAAS,MAAMs5B,EAAY,QAAQ,IAAId,EAAY,KAAK,GAAGc,EAAY,KAAK,KAAK,EAAE,GACzGM,IAAqB55B,EAAS,MAAM,iBAAiBw4B,EAAY,KAAK,oBAAoB,GAC1FqB,IAAmB75B,EAAS,MAAM05B,EAAqB,QAAQ91B,EAAM,YAAY21B,EAAiB,QAAQ,EAAE,GAC5GO,IAAW95B,EAAS,MAAM4D,EAAM,SAAS41B,EAAoB,KAAK,GAClEO,IAAc/5B,EAAS,MAAM4D,EAAM,QAASk2B,EAAS,SAASD,EAAiB,KAAM,GACrFG,KAAiBh6B,EAAS,MAAM05B,EAAqB,SAASI,EAAS,KAAK;AAElF,IAAA30B,EAAMw0B,GAAqB,CAACpb,MAAW;AACrC,MAAA5b,EAAK,qBAAqB4b,CAAM,GAChC0b,GAAS1b,CAAM;AAAA,IACjB,CAAC,GAEDpZ,EAAM,MAAMvB,EAAM,YAAYs2B,EAAuB,GAGrDC,GAAI,GAEJhvB,GAAU,MAAM0hB,EAAU,QAAQ,EAAI;AAGtC,aAASqN,GAAwB3b,GAAQ4F,GAAQ;AAC/C,MAAI5F,MAAW,MAAMA,MAAW4F,MAC9BmV,EAAY,QAAQ;AAAA,IAExB;AAEA,aAASc,KAAyB;;AAChC,MAAIX,EAAiB,UACnBA,EAAiB,QAAQ,KACzB35B,IAAAm5B,EAAmB,UAAnB,QAAAn5B,EAA0B;AAAA,IAE9B;AAEA,aAASu6B,GAAuBC,GAAa;;AAC3C,MAAA9B,EAAY,QAAQ8B,GACpBb,EAAiB,QAAQ,KACzB35B,IAAAm5B,EAAmB,UAAnB,QAAAn5B,EAA0B,SAC1By6B,EAAqBD,CAAW;AAAA,IAClC;AAEA,aAASE,KAAkB;AACzB,MAAI52B,EAAM,oBAAiB81B,EAAqB,QAAQ,KACxD/2B,EAAK,YAAY;AAAA,IACnB;AAEA,aAAS83B,GAAiB/vB,GAAG;AAC3B,MAAA4uB,EAAY,QAAQ5uB,EAAE,OAAO,OACzB9G,EAAM,oBAAiB81B,EAAqB,QAAQ;AAAA,IAC1D;AAEA,aAASgB,GAAmBhwB,GAAG;;AAC7B,MAAI,GAAC7K,KAAAC,IAAA4K,EAAE,QAAF,gBAAA5K,EAAO,UAAP,QAAAD,EAAA,KAAAC,GAAe,aAAY,CAACk5B,EAAiB,SAAStuB,EAAE,GAAG,KAAK,CAACA,EAAE,WAAW,CAACA,EAAE,WACpFA,EAAE,eAAc;AAAA,IAEpB;AAEA,aAASyvB,KAAO;AACd,MAAA5B,GAAa,eAAc,GAC3BoC,EAAS,GACTJ,EAAqB/B,EAAY,KAAK,GACtCyB,GAASN,EAAoB,KAAK;AAAA,IACpC;AAEA,aAASgB,IAAY;;AAInB,UAAIC,IAAYC,GAAiBj3B,EAAM,UAAU;AACjD,MAAIg3B,EAAU,SAAUA,EAAU,iBAAe/6B,KAAAC,IAAA8D,EAAM,eAAN,gBAAA9D,EAAkB,eAAlB,QAAAD,EAAA,KAAAC,GAA+B,SAC9E04B,EAAY,QAAQoC,EAAU,aAC9BtB,EAAY,QAAQsB,EAAU,OAAO,eAErCtB,EAAY,QAAQ11B,EAAM,YAG5Bs1B,EAAa,QAAQX,GAAa,KAAK,aAAa,IAAI,CAAA1hB,QAC/C;AAAA,QACL,GAAGA;AAAA,QACH,YAAY2hB,EAAY,UAAU3hB;AAAA,MACxC,EACG;AAAA,IACH;AAEA,aAAS0jB,EAAqBO,GAAM;AAClC,MAAA3B,EAAe,QAAQZ,GAAa,wBAAwBuC,CAAI;AAAA,IAClE;AAEA,aAASb,GAASc,GAAM;AACtB,MAAAvB,EAAoB,QAAQuB,IAAO,CAACF,GAAiBE,CAAI,EAAE,QAAQ,IACnExB,EAAiB,QAAQC,EAAoB,QAAQ,yBAAyB;AAAA,IAChF;sBAIE3wB,EAAA,GAAAN,EAsFM,OAtFNyD,EAsFM;AAAA,MAtFD,OAAM;AAAA,MACT,kBAAe;AAAA,OACPxD,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MAEhB1I,EAMUsK,IAAA;AAAA,QANA,KAAK7D,EAAM,OAAC,MAAMhI,EAAA,WAAWU,EAAU6J,CAAA;AAAA,QAC9C,UAAUvK,EAAQ;AAAA,QAClB,UAAUA,EAAQ;AAAA,QAClB,kCAA+BA,EAAS,UAAA,CAAA;AAAA;mBAEzC,MAAW;AAAA,cAARA,EAAK,KAAA,GAAA,CAAA;AAAA;;;MAEVuB,EAmCe0G,IAAA;AAAA,QAlCZ,UAAUjI,EAAQ;AAAA,QAClB,OAAOkyB,GAAc;AAAA,QACrB,YAAY;AAAA,QACb,SAAQ;AAAA;mBAER,MAcS;;AAAA;AAAA,YAdTtxB,EAcS,UAAA;AAAA,cAbN,IAAIF,EAAe4wB,CAAA;AAAA,uBAChB;AAAA,cAAJ,KAAIH;AAAA,cACH,iBAAezwB,EAAc6wB,CAAA;AAAA,cAC7B,iBAAeI,EAAgB;AAAA,cAChC,iBAAc;AAAA,cACb,cAAYG,EAAkB;AAAA,cAC9B,UAAU9xB,EAAQ;AAAA,cACnB,MAAK;AAAA,cACJ,SAAK6H,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,OAAEylB,EAAgB,QAAA,CAAIA,EAAgB;AAAA;cAE5C/wB,EAAuC,QAAA,MAAAgH,GAA9B5P,IAAAq5B,EAAc,UAAd,gBAAAr5B,EAAgB,IAAI,GAAA,CAAA;AAAA,cAC7B4I,EAA+B,QAAA,MAAzB,MAACgH,EAAG8oB,EAAW,KAAA,GAAA,CAAA;AAAA,cACG1wB,EAAQ,6BAAhCmB,EAA8CT,EAAAwyB,EAAA,GAAA;AAAA;gBAAZ,MAAK;AAAA;;YAGzC3xB,EAYE4G,IAZFjE,EAYE;AAAA,cAXC,IAAI8D,EAAM,OAAC,MAAMhI,EAAA,WAAWU,EAAU6J,CAAA;AAAA,cACtC,UAAUvK,EAAQ;AAAA,cAClB,WAASU,EAAM8J,CAAA;AAAA,cACf,aAAaxK,EAAW;AAAA,cACxB,OAAOwxB,EAAW;AAAA,cACnB,kBAAA;AAAA,cACA,MAAK;AAAA,eACG9wB,EAASwJ,CAAA,GAAA;AAAA,cAChB,SAAOyoB;AAAA,cACP,YAAUD;AAAA,cACV,WAASE;AAAA;;;;;SAGdrxB,EAMEoL,IAAA;AAAA,QALC,OAAOqlB,EAAQ;AAAA,QACf,aAAWD,EAAgB;AAAA,QAC3B,MAAM/xB,EAAI;AAAA,QACV,WAASU,EAAM8J,CAAA;AAAA;aACRynB,EAAW,KAAA;AAAA;MAELlN,EAAS,cACvBtkB,EA6BM,OAAA+D,IAAA;AAAA,QA5BJjD,EA2BkC4xB,IAAA;AAAA,UA1B/B,aAAWzyB,EAAe4wB,CAAA;AAAA,UAC3B,eAAY;AAAA,UACZ,OAAM;AAAA,UACL,eAAaZ,EAAW;AAAA,UACxB,cAAYhwB,EAAc6wB,CAAA;AAAA,UAC3B,WAAA;AAAA,UACC,OAAOI,EAAgB;AAAA,UACxB,OAAM;AAAA,UACL,SAAOW;AAAA,UACP,uBAAoBC;AAAA;qBAErB,MAcW;AAAA,YAdKxN,EAAS,gBACvBtkB,EAY6BsE,IAAA,EAAA,KAAA,EAAA,GAAA6J,GAZWwiB,EAAY,OAAA,CAAjBriB,YAAnC5N,EAY6BkkB,IAAA;AAAA,cAX1B,cAAYtW,EAAE;AAAA,cACd,KAAKA,EAAE;AAAA,cACP,OAAK,GAAKA,EAAE,KAAK;AAAA,cAClB,SAAQ;AAAA;yBAER,MAEO;AAAA,gBAFPnO,EAEO,QAFP6D,IACKmD,EAAAmH,KAAA,gBAAAA,EAAG,IAAI,GAAA,CAAA;AAAA,gBAEZnO,EAEO,QAFPI,IACK4G,EAAAmH,EAAE,KAAK,GAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;2BCpQ1BtO,EA0BM,OAAA;AAAA,MA1BD,OAAM;AAAA,MACT,kBAAe;AAAA,MACd,aAAWT,EAAI;AAAA,MACf,gBAAcA,EAAO;AAAA,MACtB,MAAK;AAAA,MACL,KAAI;AAAA,MACJ,SAAQ;AAAA,MACR,OAAM;AAAA;MAENY,EAA0B,iBAAhBZ,EAAK,KAAA,GAAA,CAAA;AAAA,MACfY,EAME,UAAA;AAAA,QALA,IAAG;AAAA,QACH,IAAG;AAAA,QACH,YAAW;AAAA,QACX,GAAE;AAAA,QACD,QAAQZ,EAAO,YAAA,aAAA,8BAAgD;AAAA;MAElDA,EAAO,YAAA,mBACrBS,EAMO,QAAAgE,IAAA,CAAA,GAAAoD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,QALLjH,EAIiB,kBAAA,EAJD,IAAG,sBAAqB,GAAA;AAAA,UACtCA,EAAoB,QAAA,EAAd,QAAO,KAAI,CAAA;AAAA,UACjBA,EAAqB,QAAA,EAAf,QAAO,MAAK,CAAA;AAAA,UAClBA,EAAsB,QAAA,EAAhB,QAAO,OAAM,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3B3B,UAAM9E,IAAQkE,GA0FRnF,IAAOoF,GAGPmzB,IAAen8B,EAAI,EAAK,GACxBo8B,IAAiBp8B,EAAI,EAAK,GAG1B,CAAEq8B,GAAaC,KAAoB3zB,GAAc,CAAC;AACxD,QAAI4zB,IAAc,CAAA;AAGlB,IAAAn2B,EAAM,MAAMvB,EAAM,YAAY,MAAM;AAGlC,MAAIu3B,EAAe,QACjBA,EAAe,QAAQ,KAEvBI,EAAmB;AAAA,IAEvB,CAAC,GAEDp2B,EAAM+1B,GAAc,MAAM;AACxB,MAAAA,EAAa,QACTv4B,EAAK,MAAM,IACXA,EAAK,OAAO;AAAA,IAClB,CAAC;AAGD,UAAM64B,IAAoBx7B,EAAS,MAAM4D,EAAM,eAAew3B,EAAY,KAAK,GACzE3rB,IAAUzP,EAAS,MAAO4D,EAAM,SAASA,EAAM,YAAaA,EAAM,QAAQ,MAAS,GACnF63B,IAAmBz7B,EAAS,MAAM,GAAGw7B,EAAkB,KAAK,kBAAkB,GAC9E3K,IAAU7wB,EAAS,MAAM,GAAGw7B,EAAkB,KAAK,QAAQ,GAC3D/O,IAAYzsB,EAAS,MAAM,GAAGw7B,EAAkB,KAAK,UAAU,GAC/DE,IAAqB17B,EAAS,MAC9B4D,EAAM,cAED,MAAM,QAAQA,EAAM,YAAY,IACnCA,EAAM,eACN,CAAEA,EAAM,YAAY,IAEnBA,EAAM,YACd,GAGK+3B,IAAkB37B,EAAS,MAAM;AACrC,UAAIk7B,EAAa,OAAO;AACtB,YAAIU,IAAah4B,EAAM;AACvB,cAAMi4B,IAAcj4B,EAAM,WAAW,YAAW,GAC1Ck4B,IAAal4B,EAAM,eAAe,aAAa,aAAa;AAElE,eAAIA,EAAM,WAAW,UAAUA,EAAM,uBAEnCg4B,IAAa7X,EAAc6X,GAAYC,GAAaC,CAAU,GAE9DF,IAAaA,EAAW,MAAM,GAAGh4B,EAAM,UAAU,GAEjDg4B,IAAaG,EAAiBH,GAAYC,GAAaC,CAAU,GAEjER,IAAcM,IAETA;AAAA,MACX;AAGI,eAAON;AAAA,IAEX,CAAC;AAGD,aAASvX,EAAcliB,GAASg6B,GAAaC,GAAY;AACvD,aAAIl4B,EAAM,oBACD/B,EAAQ,OAAO,CAAC8iB,MACrBA,EAAO,MAAM,cAAcmX,CAAU,EAAED,CAAW,CACnD,IAEMh6B;AAAA,IAEX;AAEA,aAASk6B,EAAiBl6B,GAASg6B,GAAaC,GAAY;AAC1D,aAAOj6B,EAAQ,IAAI,CAAC8iB,MAAW;AAC7B,YAAIqX,KAAYrX,EAAO;AACvB,YAAIkX,MAAgB,IAAI;AACtB,gBAAMI,KAAc,+CAA+CJ,CAAW;AAC9E,UAAIC,MAAe,aACjBE,KAAYrX,EAAO,MAAM,WAAWkX,GAAaI,EAAW,IAE5DD,KAAYrX,EAAO,MAAM,QAAQkX,GAAaI,EAAW;AAAA,QAEjE;AACI,eAAO,EAAE,GAAGtX,GAAQ,WAAAqX,GAAS;AAAA,MAC9B,CAAA;AAAA,IACH;AAGA,aAAST,IAAsB;AAC7B,MAAI33B,EAAM,uBAECA,EAAM,WAAW,UAAUA,EAAM,qBAD1Cs3B,EAAa,QAAQ,KAIrBA,EAAa,QAAQ;AAAA,IAEzB;AAEA,aAAS7H,IAAc;AACrB,MAAA1wB,EAAK,qBAAqB,EAAE,GACvBiB,EAAM,eACTjB,EAAK,uBAAuB,EAAE,GAEhC,SAAS,eAAekuB,EAAQ,KAAK,EAAE,MAAK;AAAA,IAC9C;AAEA,aAASgD,EAAatjB,GAAI;AACxB,MAAA4qB,EAAe,QAAQ;AACvB,YAAMtT,IAAiB8T,EAAgB,MAAM,KAAK,CAAChX,MAAWA,EAAO,UAAUpU,CAAE;AACjF,MAAA5N,EAAK,qBAAqBklB,EAAe,KAAK,GAC9CllB,EAAK,uBAAuB4N,CAAE;AAAA,IAChC;AAEA,aAAS2rB,EAAY3rB,GAAI;AACvB,YAAMiiB,IAAkB,CAAE,GAAGkJ,EAAmB,OAAOnrB,CAAE;AACzD,MAAA5N,EAAK,uBAAuB6vB,CAAe;AAAA,IAC7C;AAEA,aAAS2J,EAAc5rB,GAAI;AACzB,YAAMiiB,IAAkBkJ,EAAmB,MAAM,OAAO,CAACxX,MAAQA,MAAQ3T,CAAE;AAC3E,MAAA5N,EAAK,uBAAuB6vB,CAAe;AAAA,IAC7C;;MAKQ1qB,EAAK,SAAIc,EAAM,OAAC,cADxBK,EASU0K,IAAA;AAAA;QAPP,KAAKkd,EAAO;AAAA,QACZ,UAAU/oB,EAAQ;AAAA,QAClB,UAAUA,EAAQ;AAAA;mBAEnB,MAEO;AAAA,UAFPiB,EAEOC,uBAFP,MAEO;AAAA,gBADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAGZY,EAoBM,OAAA;AAAA,QApBA,IAAI+yB,EAAgB;AAAA,QAAE,OAAM;AAAA;QAChCpyB,EAkBE0pB,IAlBF/mB,EAkBE;AAAA,UAjBC,iBAAeygB,EAAS;AAAA,UACxB,oBAAkBhd,EAAA,QAAUjH,EAAA6yB,CAAA,IAAkB;AAAA,UAC9C,iBAAeH,EAAY;AAAA,UAC5B,iBAAc;AAAA,UACd,cAAa;AAAA,UACZ,UAAUpzB,EAAQ;AAAA,UAClB,OAAOA,EAAK;AAAA,UACZ,iBAAeA,EAAU,eAAA;AAAA,UACzB,oBAAkBA,EAAc;AAAA,UAChC,YAAU+oB,EAAO;AAAA,UACjB,aAAa/oB,EAAW;AAAA,UACzB,MAAK;AAAA,UACJ,eAAaA,EAAU;AAAA,WAChBgI,EAAM,QAAA;AAAA,UACb,SAAOujB;AAAA,UACP,WAASkI;AAAA,UACT,uBAAqB5rB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAY,MAAO5N,uBAA0B4N,CAAE;AAAA;;MAG7DlH,EA+CuBypB,IAAA;AAAA,QA9CpB,aAAW2I,EAAgB;AAAA,QAC3B,UAAU3zB,EAAQ;AAAA,QAClB,WAAW;AAAA,QACX,OAAOozB,EAAY;AAAA,QACnB,oBAAkB;AAAA,QACnB,OAAM;AAAA,QACL,gCAAOA,EAAY,QAAA;AAAA;mBAEpB,MAkBkC;AAAA,UAjB1BpzB,EAAW,oBADnBmB,EAkBkC4oB,IAAA;AAAA;YAhB/B,iBAAe;AAAA,YACf,OAAO/pB,EAAK;AAAA,YACZ,SAAS6zB,EAAe;AAAA,YACxB,cAAYlP,EAAS;AAAA,YACrB,oBAAkBiP,EAAkB;AAAA,YACpC,OAAOR,EAAY;AAAA,YACnB,gBAAcpzB,EAAU;AAAA,YACxB,eAAco0B;AAAA,YACd,iBAAgBC;AAAA;YAEDr0B,EAAO;oBAAG;AAAA,oBACxB,MAEO;AAAA,gBAFPY,EAEO,QAFP4D,IAEO;AAAA,kBADLjD,EAAuB+yB,IAAA,EAAZ,MAAK,KAAI,CAAA;AAAA;;;;oBAGN;AAAA,oBAAW,MAAgB;AAAA,kCAAhB,oBAAgB,EAAA;AAAA;;;8GAG/CnzB,EAiBiCmoB,IAAA;AAAA;YAf9B,OAAOtpB,EAAK;AAAA,YACZ,eAAa4zB,EAAkB;AAAA,YAC/B,cAAYjP,EAAS;AAAA,YACrB,OAAOyO,EAAY;AAAA,YACnB,uBAAoBrH;AAAA,YACpB,gCAAOqH,EAAY,QAAA;AAAA;uBAEpB,MAOoC;AAAA,cAPpC7xB,EAOoCgoB,IAAA;AAAA,gBAPA,SAASsK,EAAe;AAAA,gBAAG,gBAAc7zB,EAAU;AAAA;gBACrEA,EAAO;wBAAG;AAAA,wBACxB,MAEO;AAAA,oBAFPY,EAEO,QAFP6D,IAEO;AAAA,sBADLlD,EAAuB+yB,IAAA,EAAZ,MAAK,KAAI,CAAA;AAAA;;;;wBAGN;AAAA,wBAAW,MAAgB;AAAA,sCAAhB,oBAAgB,EAAA;AAAA;;;;;;;;;;MAInD1zB,EAOM,OAPNI,IAOM;AAAA,QANkB2G,EAAO,cAA7BxG,EAKEwL,IAAA;AAAA;UAJC,OAAO3M,EAAK;AAAA,UACZ,aAAWA,EAAQ;AAAA,UACnB,MAAMA,EAAI;AAAA,UACV,WAASU,EAAe6yB,CAAA;AAAA;;;;;;;;;;;;;;;;;;2BChT7B9yB,EAWO,QAAA;AAAA,MAVL,OAAM;AAAA,MACL,aAAWT,EAAI;AAAA,MACf,gBAAcA,EAAO;AAAA,MACtB,MAAK;AAAA;MAELY,EAAa,QAAA,MAAA,MAAA,EAAA;AAAA,MACbA,EAAa,QAAA,MAAA,MAAA,EAAA;AAAA,MACbA,EAAa,QAAA,MAAA,MAAA,EAAA;AAAA,MACbA,EAAa,QAAA,MAAA,MAAA,EAAA;AAAA,MACbA,EAA+C,QAAzC,EAAA,OAAM,wBAAqB,WAAO,EAAA;AAAA;;;;;;2BCxBxCO,EAaYof,IAAA;AAAA,MAXV,OAAM;AAAA,MACN,kBAAe;AAAA,MACf,MAAK;AAAA,MACL,QAAO;AAAA,MACP,UAAA;AAAA,MACC,MAAMlc,EAAI;AAAA,MACX,cAAA;AAAA,MACC,mBAAiB2V,EAAc;AAAA;MAEhC,SAAAxU,EAAA,CAAgD,EAVtC,IAAA5N,GAAI,QAAA2C,GAAQ,SAAAG,GAAS,OAAA/B,QAAK;AAAA,QAUpCsI,EAAgDC,6BAAhC,IAAAtJ,GAAI,QAAA2C,GAAQ,SAAAG,GAAS,OAAA/B,EAAK,CAAA,CAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACR9C,UAAMmD,IAAQkE,GAqBRnF,IAAOoF;AAEb,IAAAoD,GAAU,MAAM;AACd,MAAAkxB,EAAa;AAAA,IACf,CAAC,GAGDvuB,GAAY,MAAM;AAChB,eAAS,KAAK,gBAAgB,aAAa;AAAA,IAC7C,CAAC,GAED3I,EAAM,MAAMvB,EAAM,OAAO,MAAM;AAC7B,MAAAy4B,EAAa;AAAA,IACf,CAAC;AAED,aAASA,IAAgB;AACvB,MAAIz4B,EAAM,QACR,SAAS,KAAK,aAAa,eAAe,OAAO,IAEjD,SAAS,KAAK,gBAAgB,aAAa;AAAA,IAE/C;2BAIEqF,EAQuB6iB,IAAA;AAAA,MAPrB,MAAK;AAAA,MACJ,OAAOhkB,EAAK;AAAA,MACZ,WAAWA,EAAS;AAAA,MACpB,qCAAanF,EAAI,aAAA;AAAA,MACjB,qCAAaA,EAAI,aAAA;AAAA;iBAElB,MAA8C;AAAA,QAA9C+F,EAA8C,OAAA;AAAA,UAAzC,OAAM;AAAA,UAAc,cAAYZ,EAAK;AAAA;;;;;;;;;;;;;;;;;;;;;;AC5C9C,UAAMlE,IAAQkE;AACd,IAAA6C,EAAkB/G,GAAO,mBAAmB,WAAW,GACvD+G,EAAkB/G,GAAO,gBAAgB,OAAO,GAChD+G,EAAkB/G,GAAO,gBAAgB,OAAO;AAGhD,UAAMjB,IAAOoF,GAGPu0B,IAAWv9B,EAAI,IAAI;AACzB,QAAIw9B,IAAY;AAGhB,UAAM,EAAE,YAAArxB,EAAU,IAAKD,GAAwBrH,CAAK,GAC9C,CAAE44B,CAAS,IAAG90B,GAAa,GAC3B,CAAE+0B,CAAY,IAAG/0B,GAAa,GAC9BssB,IAAQ5oB,GAAQ;AACtB,IAAAif,GAAa,CAACiS,CAAQ,GAAG,MAAMI,EAAW,wBAAwB,CAAC,GACnE5lB,GAAW,CAAC,QAAQ,GAAG,MAAM4lB,EAAW,sBAAsB,CAAC;AAG/D,UAAMC,IAAW38B,EAAS,MACjB,CAAC,EAAE4D,EAAM,SAASowB,EAAM,MAChC,GACK4I,IAAc58B,EAAS,MACpB,CAAC,EAAE4D,EAAM,YAAYowB,EAAM,SACnC,GACK6I,IAAc78B,EAAS,MACpB,CAAC,CAACg0B,EAAM,QAChB,GACK8I,IAAY98B,EAAS,MAClB,CAAC4D,EAAM,cAAc+4B,EAAS,KACtC,GACKI,IAAY/8B,EAAS,MAClB,CAAC4D,EAAM,cAAc,CAAC,CAACowB,EAAM,MACrC;AAGD,aAAS0I,EAAWM,GAAiBC,IAAqB,IAAM;;AAC9D,YAAMzI,IAAgByI,OAAsBn9B,IAAAw8B,EAAS,UAAT,gBAAAx8B,EAAgB,cAAc,4BAA2B;AACrG,MAAIy8B,KAAa,CAAC/H,MAChB7xB,EAAK,SAASiB,EAAM,OAAO,GAC3BjB,EAAKq6B,GAAiBp5B,EAAM,OAAO;AAAA,IAEvC;;MAMAyF,EAME6zB,IAAA;AAAA,QALC,oBAAkBC,EAAe;AAAA,QACjC,iBAAeC,EAAY;AAAA,QAC3B,iBAAeC,EAAY;AAAA,QAC3B,WAAWC,EAAS;AAAA,QACpB,OAAO90B,EAAU0C,CAAA;AAAA;MAEpB7B,EA2FuByiB,IAAA;AAAA,QA1FrB,MAAK;AAAA,QACJ,WAAWwR,EAAS;AAAA,QACpB,OAAO90B,EAAU0C,CAAA;AAAA,QACjB,qCAAavI,EAAI,aAAA;AAAA,QACjB,qCAAaA,EAAI,aAAA;AAAA,QACjB,gCAAO46B,GAAShB,CAAA,IAAAA,EAAA,QAAA,KAAAA,IAAA;AAAA;mBAEjB,MAkFM;AAAA,UAlFN7zB,EAkFM,OAlFNsD,EAkFM;AAAA,YAjFJ,OAAM;AAAA,YACL,IAAIwxB,EAAO;AAAA,qBACR;AAAA,YAAJ,KAAIlB;AAAA,YACH,mBAAiBvvB,EAAK,SAAA,CAAK+C,SAAuB,YAAA,IAAAtH,EAAAg0B,CAAA,IAAU;AAAA,YAC7D,cAAW;AAAA,YACV,iCAA+BiB,EAAsB;AAAA,YACtD,kBAAe;AAAA,YACd,sBAAoBC,EAAY;AAAA,YAChC,oBAAkBC,EAAU;AAAA,YAC5B,mBAAiBC,EAAS;AAAA,YAC1B,sBAAoBC,EAAY;AAAA,YAChC,cAAYr1B,EAAU0C,CAAA;AAAA,YACtB,aAAWiB,EAAI;AAAA,YACf,MAAM2xB,EAAK,QAAA,gBAAA;AAAA,aACJhuB,EAAM,MAAA,GAAA;AAAA,YAEdzG,EAgEyB00B,IAAA,EAhEA,QAAQv1B,EAAU0C,CAAA,EAAA,GAAA;AAAA,yBACzC,MAwCS;AAAA,gBAxCK4xB,EAAS,SAAvBj0B,KAAAN,EAwCS,UAxCT+D,IAwCS;AAAA,kBAtCP5D,EAyBM,OAzBN6D,IAyBM;AAAA,oBAvBYowB,EAAQ,QACtB5zB,EAQOC,+BARP,MAQO;AAAA,sBANG+D,EAAK,cADbxE,EAMO,QAAA;AAAA;wBAJL,OAAM;AAAA,wBACL,IAAIC,EAAOg0B,CAAA;AAAA,2BAETzvB,EAAK,KAAA,GAAA,GAAAjE,EAAA;;oBAONk1B,EAAW,oBADnBz1B,EASS,UAAA;AAAA;sBAPP,OAAM;AAAA,sBACN,cAAW;AAAA,sBACX,OAAM;AAAA,sBACN,MAAK;AAAA,sBACJ,gCAAOm0B,EAAU,mBAAA,EAAA;AAAA;sBAElBrzB,EAA2Bb,EAAA0E,EAAA,CAAA;AAAA;;kBAKpB0vB,EAAW,SAAtB/zB,KAAAN,EAIM,OAJNqO,IAIM;AAAA,oBAHJ7N,EAEOC,0BAFP,MAEO;AAAA,sBADLN,EAA4C,QAArC,EAAA,IAAIF,EAAAi0B,CAAA,OAAewB,EAAQ,QAAA,GAAA,GAAA3Q,EAAA;AAAA;;kBAK3BuP,EAAW,SAAtBh0B,KAAAN,EAEM,OAFNusB,IAEM;AAAA,oBADJ/rB,EAA6BC,EAAA,QAAA,UAAA;AAAA;;gBAMzBg1B,EAAAA,gBAAgBlB,EAAS,cADjCv0B,EASS,UAAA;AAAA;kBAPP,OAAM;AAAA,kBACN,cAAW;AAAA,kBACX,OAAM;AAAA,kBACN,MAAK;AAAA,kBACJ,gCAAOm0B,EAAU,mBAAA,EAAA;AAAA;kBAElBrzB,EAA2Bb,EAAA0E,EAAA,CAAA;AAAA;gBAI7BxE,EAEM,OAFNuuB,IAEM;AAAA,kBADJluB,EAAaC,EAAA,QAAA,SAAA;AAAA;gBAID+zB,EAAS,SAAvBl0B,KAAAN,EAES,UAFT2uB,IAES;AAAA,kBADPnuB,EAA2BC,EAAA,QAAA,QAAA;AAAA;;;;;;;;;;IC7JtBk1B,KAAwB,OAAO,uBAAuB;;;;ACiDnE,UAAMt6B,IAAQkE,GAERwb,IAAWnf,GAAOme,IAAoB,IAAI,GAC1C6b,IAAch6B,GAAO+5B,IAAuB,IAAI,GAEhDE,IAAc7e,GAAe,QAAQ,GACrCvb,IAAQC,GAAQ,GAEhBH,IAASC,GAAK,GAEd,EAAE,UAAAgO,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAE3D4qB,IAAYx9B,EAAI,EAAI,GAEpB0uB,IAAaztB,EAAS,MAAM4D,EAAM,MAAME,CAAM,GAE9Cu6B,IAAar+B,EAAS,MAAMsjB,EAAS,MAAM,QAAQ,GAEnDgE,IAAatnB,EAAS,MAAM4D,EAAM,YAAY0f,EAAS,WAAW1f,EAAM,KAAK,CAAC,GAE9E06B,IAAkBt+B,EAAS,MAAMq+B,EAAW,UAAS/a,KAAA,gBAAAA,EAAU,sBAAsB1f,EAAM,OAAM,GAEjGkB,IAAO9E,EAAS,MAChBgE,EAAM,OAAaA,EAAM,OACzBsf,EAAS,MAAM,SAAS,YAAkB,WACvC,UACR,GAEKib,IAAWv+B,EAAS,MAAMsjB,EAAS,eAAe,UAAUmK,EAAW,KAAK;AAElF,IAAAtiB,GAAU,MAAM;AACd,MAAAmY,KAAA,QAAAA,EAAU,eAAemK,EAAW,OAAO,EAAE,aAAA2Q,GAAa,OAAAx6B,GAAO,WAAA24B,GAAW,iBAAA+B,GAAiB,SAASH,KAAA,gBAAAA,EAAa,GAAI,IACvHA,KAAA,QAAAA,EAAa,eAAe1Q,EAAW;AAAA,IACzC,CAAC,GAED3f,GAAY,MAAM;AAChB,MAAAwV,KAAA,QAAAA,EAAU,iBAAiBmK,EAAW,QACtC0Q,KAAA,QAAAA,EAAa,iBAAiB1Q,EAAW;AAAA,IAC3C,CAAC,GAEDtoB,EAAMo5B,GAAU,CAAChgB,MAAW;AAC1B,MAAIA,KACFqD,GAAS,MAAA;;AAAM,gBAAA/hB,KAAAC,IAAAs+B,EAAY,UAAZ,gBAAAt+B,EAAmB,mBAAnB,gBAAAD,EAAA,KAAAC,GAAoC,EAAE,OAAO,SAAS,UAAU;OAAW;AAAA,IAE9F,CAAC;AAID,aAAS0+B,EAASv7B,GAAO;AACvB,MAAIW,EAAM,aAEV0f,EAAS,SAAS1f,EAAM,KAAK,GAIzBA,EAAM,WAASA,EAAM,QAAQX,CAAK;AAAA,IACxC;qBAxGEif,IAAArZ,KAAAN,EAsCM,OAtCNyD,EAsCM,EArCJ,KAAI,SAAQ,GAEJxD,EAASwJ,CAAA,GAAA;AAAA,MAChB,IAAIyb,EAAU;AAAA,MACf,OAAM;AAAA,MACL,iBAAexhB,EAAQ,YAAI;AAAA,MAC3B,iBAAeoyB,EAAU,QAAG/W,UAAcA,EAAA,SAAc;AAAA,MACxD,wBAAsBgX,EAAe;AAAA,MACrC,eAAaC,EAAQ,SAAI;AAAA,MAC1B,kBAAe;AAAA,MACd,iBAAeE,EAAQ,YAAI;AAAA,MAC3B,gBAAclC,EAAS,SAAI;AAAA,MAC3B,iBAAe8B,EAAU,SAAI;AAAA,MAC7B,MAAMv5B,EAAI;AAAA,MACV,YAAY05B,GAAQ,CAAA,MAAA,CAAA;AAAA;MAGLH,EAAU,cAA1B91B,EAWWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,QAVTnE,EAI+B,QAAA;AAAA,UAH7B,OAAM;AAAA,UACN,eAAY;AAAA,UACX,iBAAeuD,EAAQ,YAAI;AAAA,UAC3B,gBAAcqb,EAAU;AAAA;QAC3B5e,EAIM,OAJNsD,EAIM;AAAA,UAJD,OAAM;AAAA,UAAkB,iBAAe0yB,EAAU,cAAI;AAAA,WAAmBl2B,EAAQuJ,CAAA,CAAA,GAAA;AAAA,UACnFhJ,EAEOC,EAFA,QAAA,WAAA,EAAA,UAAUse,EAAA,MAAU,GAA3B,MAEO;AAAA,gBADFhpB,EAAK,KAAA,GAAA,CAAA;AAAA;;iBAMduK,KAAAN,EAIM,OAJNyD,EAIM;AAAA;QAJM,OAAM;AAAA,QAAkB,iBAAe0yB,EAAU,cAAI;AAAA,SAAmBl2B,EAAQuJ,CAAA,CAAA,GAAA;AAAA,QAC1FhJ,EAEOC,EAFA,QAAA,WAAA,EAAA,UAAUse,EAAA,MAAU,GAA3B,MAEO;AAAA,cADFhpB,EAAK,KAAA,GAAA,CAAA;AAAA;;;WAhCJi+B,EAAS,KAAA;AAAA;;;;;;;;;;AC0BrB,UAAM34B,IAAQkE,GAERwb,IAAWnf,GAAOme,EAAkB,GAEpC0R,IAAQ5oB,GAAQ,GAEhBtH,IAASC,GAAK,GAEd46B,IAAY5/B,EAAI,CAAE,CAAA,GAElB0uB,IAAaztB,EAAS,MAAM4D,EAAM,MAAME,CAAM,GAE9C64B,IAAW38B,EAAS,MAAM4D,EAAM,SAASowB,EAAM,KAAK,GAGpD4K,IAAkB5+B,EAAS,MAAM;;AACrC,cAAKF,IAAAwjB,EAAS,OAAO,MAAM,UAAtB,QAAAxjB,EAA6B,QAC3B6+B,EAAU,MAAM,KAAK,CAAAj/B,MAAM4jB,EAAS,YAAY,MAAM5jB,CAAE,EAAE,UAAU,KAAK,IADhC;AAAA,IAElD,CAAC;AAED,IAAAyf,GAAQ+e,IAAuB;AAAA,MAC7B,IAAIzQ;AAAA,MACJ,gBAAAhG;AAAA,MACA,kBAAAC;AAAA,IACF,CAAC,GAEDhW,GAAc,MAAM;AAClB,MAAKirB,EAAS,SACZn4B,GAAK,8DAA8D;AAAA,IAEvE,CAAC;AAID,aAASijB,EAAe/nB,GAAI;AAC1B,MAAAi/B,EAAU,QAAQ,CAAC,GAAGA,EAAU,OAAOj/B,CAAE;AAAA,IAC3C;AAEA,aAASgoB,EAAiBhoB,GAAI;AAC5B,MAAAi/B,EAAU,QAAQA,EAAU,MAAM,OAAO,CAAAE,MAASn/B,MAAOm/B,CAAK;AAAA,IAChE;AAGA,UAAM/W,IAAgB9nB,EAAS,MAAMsjB,EAAS,gCAAgCmK,CAAU,CAAC;qBAtE/EkP,EAAQ,iBADhBp0B,EAmBM,OAAA;AAAA;MAhBJ,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,gBAAcq2B,EAAe;AAAA,MAC7B,MAAMjC,EAAQ,QAAA,UAAa;AAAA,MAC3B,mBAAiBA,EAAA,QAAWlP,EAAA,QAAa;AAAA;MAE1C/kB,EAKI,KAAA;AAAA,QAJD,IAAI+kB,EAAU;AAAA,QACf,OAAM;AAAA,QACN,eAAY;AAAA;QACZ1kB,EAAqCC,uBAArC,MAAqC;AAAA,cAAf+D,EAAK,KAAA,GAAA,CAAA;AAAA;;MAGoC+a,EAAa,SAA9Ejf,KAAAN,EAAiF,MAAjFgE,EAAiF;MACjFxD,EAAQC,EAAA,QAAA,SAAA;AAAA;WAfA41B,EAAe,KAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACOzB,UAAMh7B,IAAQkE,GAmFRnF,IAAOoF,GAGP+2B,IAAa//B,EAAI,IAAI;AAE3B,IAAAoM,GAAU,MAAM;AACd,MAAIvH,EAAM,aAERk7B,EAAW,QAAQl7B,EAAM,aAErBA,EAAM,YAAY,YACpBk7B,EAAW,QAAQC,EAAe,MAAM,CAAC,IAEzCD,EAAW,QAAQ;AAAA,IAGxB,CAAA,GAGD35B,EAAM,MAAMvB,EAAM,YAAY,CAAC2a,MAAW;AACxC,MAAAugB,EAAW,QAAQvgB;AAAA,IACpB,CAAA,GAGDpZ,EAAM25B,GAAY,CAACvgB,GAAQ4F,MAAW;AAEpC,MAAIA,MAAW,QACbxhB,EAAK,qBAAqB4b,CAAM;AAAA,IAEnC,CAAA;AAGD,UAAMygB,IAAkBh/B,EAAS,MAAM;AACrC,UAAI4D,EAAM,YAAY;AACpB,eAAO,KAAK,KAAKA,EAAM,aAAaA,EAAM,aAAa;AAClD,UAAIA,EAAM,YAAY;AAC3B,eAAOA,EAAM;AAAA,IAEhB,CAAA,GAIKq7B,IAAkBj/B,EAAS,MAC3B4D,EAAM,YAAY,SAChBA,EAAM,kBAAkB,SACnB,UAEP,SAGGA,EAAM,OACd;AAED,aAASs7B,IAAiB;AACxB,MAAAJ,EAAW,QAAQ;AAAA,IACvB;AAEE,aAASK,IAAgB;AAEvB,MAAAL,EAAW,QAAQ,KAAK,IAAIA,EAAW,QAAQ,GAAG,CAAC;AAAA,IACvD;AAEE,aAASM,IAAgB;AAEvB,MAAAN,EAAW,QAAQ,KAAK;AAAA,QACtBA,EAAW,QAAQ;AAAA,QACnBE,EAAgB;AAAA,MACtB;AAAA,IACA;AAEE,aAASK,IAAgB;AACvB,MAAAP,EAAW,QAAQE,EAAgB;AAAA,IACvC;AAEE,UAAMM,IAAQt/B,EAAS,MAAM;AAE3B,UAAI4D,EAAM,aAAaA,EAAM;AAC3B,eAAO,CAAC,GAAG,MAAMA,EAAM,YAAY,CAAC,EAAE,KAAI,CAAE,EAAE,MAAM,CAAC;AAIvD,YAAM07B,IAAQ,CAAC,CAAC,GAEVpe,KAAUtd,EAAM,YAAY,KAAK;AACvC,UAAI4nB,IAAOsT,EAAW,QAAQ5d,GAC1BuK,IAAQqT,EAAW,QAAQ5d;AAG/B,MAAIsK,IAAO,MAETC,KAAS,IAAID,GAEbA,IAAO,IAILC,IAAQ7nB,EAAM,cAEhB4nB,KAAQC,IAAQ7nB,EAAM,WAEtB6nB,IAAQ7nB,EAAM,YAIhB4nB,IAAO,KAAK,IAAIA,GAAM,CAAC,GACvBC,IAAQ,KAAK,IAAIA,GAAO7nB,EAAM,YAAY,CAAC,GAGvC4nB,IAAO,KACT8T,EAAM,KAAK17B,EAAM,SAAS;AAI5B,eAASiE,IAAI2jB,GAAM3jB,KAAK4jB,GAAO5jB;AAC7B,QAAAy3B,EAAM,KAAKz3B,CAAC;AAId,aAAI4jB,IAAQ7nB,EAAM,YAAY,KAC5B07B,EAAM,KAAK17B,EAAM,SAAS,GAI5B07B,EAAM,KAAK17B,EAAM,SAAS,GAEnB07B;AAAA,IACR,CAAA,GAEKC,IAAkBv/B,EAAS,MACxB,GAAG4D,EAAM,eAAe,MAAM,IAAIk7B,EAAW,KAAK,OAAOE,EAAgB,KAAK,EACtF,GAEKQ,IAAmBx/B,EAAS,MAAM;AAEtC,YAAMy/B,KAAUX,EAAW,QAAQ,KAAKl7B,EAAM,gBAAiB,GAEzD87B,IAAO,KAAK,IAAKD,IAAQ,IAAK77B,EAAM,eAAeA,EAAM,UAAU;AACzE,aAAO,GAAGA,EAAM,eAAe,SAAS,IAAI67B,CAAK,MAAMC,CAAI,OAAO97B,EAAM,UAAU;AAAA,IACnF,CAAA,GAEKm7B,IAAiB/+B,EAAS,MACvB4D,EAAM,kBACV,MAAM,GAAG,EACT,IAAI,CAAC+7B,MAAc,SAASA,CAAS,CAAC,CAC1C;2BAIDp3B,EAoHM,OAAA;AAAA,MAnHJ,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,gBAAc02B,EAAe;AAAA,MAC7B,cAAYr7B,EAAM;AAAA;MAIXkE,EAAA,sBAAsBA,EAAO,YAAA,WADrCe,KAAAN,EA8BM,OA9BN+D,IA8BM;AAAA,QAxBIxE,EAAoB,6BAD5BS,EAWS,UAAA;AAAA;UATP,MAAK;AAAA,UACJ,OAAKwG,GAAEjH,EAAa,gBAAA,6BAAgC,MAAS;AAAA,UAC7D,cAAYA,EAAa,gBAAG,SAAS;AAAA,UACrC,OAAOA,EAAa;AAAA,UACpB,UAAUg3B,EAAU,UAAA;AAAA,UACpB,SAAOI;AAAA;UAER71B,EAAyBb,EAAAo3B,EAAA,CAAA;AAAA,UACb93B,EAAa,iBAAzBe,EAAA,GAAAN,EAAqD,cAAvBT,EAAa,aAAA,GAAA,CAAA;;QAI7CY,EAUS,UAAA;AAAA,UATP,MAAK;AAAA,UACJ,OAAKqG,GAAEjH,EAAY,eAAA,6BAAgC,MAAS;AAAA,UAC5D,cAAYA,EAAY,eAAG,SAAS;AAAA,UACpC,OAAOA,EAAY;AAAA,UACnB,UAAUg3B,EAAU,UAAA;AAAA,UACpB,SAAOK;AAAA;UAER91B,EAAmBb,EAAAkD,EAAA,CAAA;AAAA,UACP5D,EAAY,gBAAxBe,EAAA,GAAAN,EAAmD,cAAtBT,EAAY,YAAA,GAAA,CAAA;;;MAMrCA,EAAA,sBAAsBA,EAAa,kBAAA,aAD3Ce,KAAAN,EAeM,OAfNusB,IAeM;AAAA,gBAXJvsB,EAUSsE,IAAA,MAAA6J,GATQ4oB,EAAK,OAAA,CAAbO,YADTt3B,EAUS,UAAA;AAAA,UARN,aAAas3B,CAAI;AAAA,UAClB,MAAK;AAAA,UACJ,eAAeA,CAAI;AAAA,UACnB,UAAUf,EAAU,UAAKe,KAAQ/3B,EAAA,cAAc+3B;AAAA,UAC/C,iBAAeA,MAASf,EAAU;AAAA,UAClC,SAAK,CAAA9qB,MAAE8qB,EAAU,QAAGe;AAAA,aAElBA,CAAI,GAAA,GAAA5I,EAAA;;MAKCrzB,EAAM,YAAsB,UAAAA,EAAM,kBAAa,UAA3DiF,EAAA,GAAAN,EAEO,cADFg3B,EAAe,KAAA,GAAA,CAAA;MAIR37B,EAAM,YAAO,WAAzBiF,EAAA,GAAAN,EAEO,cADFi3B,EAAgB,KAAA,GAAA,CAAA;MAIL57B,EAAM,YAAO,kBAA7B2E,EAcWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,QAbT8C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAjH,EAA8B,cAAxB,qBAAiB,EAAA;AAAA,QACvBA,EAWM,OAXN0uB,IAWM;AAAA,kBAVJ7uB,EASSsE,IAAA,MAAA6J,GARcqoB,EAAc,OAAA,CAA5Be,YADTv3B,EASS,UAAA;AAAA,YAPP,MAAK;AAAA,YACJ,gBAAgBu3B,CAAU;AAAA,YAC1B,iBAAeA,MAAehB,EAAU;AAAA,YACxC,UAAUA,EAAU,UAAKgB,KAAch4B,EAAA,cAAcg4B;AAAA,YACrD,SAAK,CAAA9rB,MAAE8qB,EAAU,QAAGgB;AAAA,eAElBA,CAAU,GAAA,GAAAC,EAAA;;;MAOXj4B,EAAA,sBAAsBA,EAAO,YAAA,WADrCe,KAAAN,EA8BM,OA9BN+uB,IA8BM;AAAA,QAzBJ5uB,EAUS,UAAA;AAAA,UATP,MAAK;AAAA,UACJ,OAAKqG,GAAEjH,EAAY,eAAA,6BAAgC,MAAS;AAAA,UAC5D,cAAYA,EAAY,eAAG,SAAS;AAAA,UACpC,OAAOA,EAAY;AAAA,UACnB,UAAUg3B,EAAU,UAAKE,EAAe;AAAA,UACxC,SAAOI;AAAA;UAEIt3B,EAAY,gBAAxBe,EAAA,GAAAN,EAAmD,cAAtBT,EAAY,YAAA,GAAA,CAAA;UACzCuB,EAAoBb,EAAAoD,EAAA,CAAA;AAAA;QAKd9D,EAAoB,6BAD5BS,EAWS,UAAA;AAAA;UATP,MAAK;AAAA,UACJ,OAAKwG,GAAEjH,EAAY,eAAA,6BAAgC,MAAS;AAAA,UAC5D,cAAYA,EAAY,eAAG,SAAS;AAAA,UACpC,OAAOA,EAAY;AAAA,UACnB,UAAUg3B,EAAU,UAAKE,EAAe;AAAA,UACxC,SAAOK;AAAA;UAEIv3B,EAAY,gBAAxBe,EAAA,GAAAN,EAAmD,cAAtBT,EAAY,YAAA,GAAA,CAAA;UACzCuB,EAA0Bb,EAAAw3B,EAAA,CAAA;AAAA;;;;;;;;AC3UlC,UAAMp8B,IAAQkE;AACd,IAAA6C,EAAkB/G,GAAO,YAAY,QAAW,qFAAqF,GACrI+G,EAAkB/G,GAAO,QAAQ;AAEjC,UAAM,EAAE,aAAA6G,EAAW,IAAKJ,GAAgBzG,CAAK,GAEvC,EAAE,SAAA6F,GAAS,mBAAAE,EAAiB,IAAKJ,GAAgB3F,GAAO,MAAM;AAEpE,aAASq8B,EAAYh9B,GAAO;AAC1B,MAAIW,EAAM,WAASA,EAAM,QAAQX,CAAK,GACtCwH,EAAYxH,CAAK;AAAA,IACnB;2BAjCAgG,EAaYE,GAZLX,EAAOiB,CAAA,CAAA,GADduC,EAaY;AAAA,MAXV,OAAM;AAAA,MACL,eAAawC,EAAM;AAAA,MACpB,kBAAe;AAAA,MACd,eAAa0xB,EAAM,UAAI;AAAA,MACvB,gBAActzB,EAAO,WAAI;AAAA,MACzB,UAAUX,EAAQ;AAAA,OACXzD,EAAiBmB,CAAA,GAAA,EACxB,SAAOs2B,EAAW,CAAA,GAAA;AAAA,iBACnB,MAEO;AAAA,QAFPv3B,EAEO,QAAA;AAAA,UAFD,OAAM;AAAA,UAAmB,iBAAey3B,EAAQ;AAAA;UACpDp3B,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;2BCXVT,EAKM,OAAA;AAAA,MAJJ,OAAM;AAAA,MACL,mBAAiB63B,EAAU,cAAI;AAAA,MAChC,kBAAe;AAAA;MACfr3B,EAAQC,EAAA,QAAA,SAAA;AAAA;;GCLCq3B,KAAkB,OAAO,iBAAiB;;;;ACKvD,UAAMz8B,IAAQkE,GAER,EAAE,SAAA2B,GAAS,mBAAAE,MAAsBJ,GAAgB3F,CAAK,GACtD,EAAE,UAAAsB,GAAU,cAAAP,MAAiBhB,GAAeC,CAAK;2BAIrDqF,EAQYE,GAPLX,EAAOiB,CAAA,CAAA,GADduC,EAQY;AAAA,MANT,QAAQuD,EAAQ,YAAA;AAAA,MACjB,kBAAe;AAAA,MACd,aAAWpD,EAAI,QAAI;AAAA,MACnB,gBAAcS,EAAO,WAAI;AAAA,IACb,GAAA,EAAA,GAAApE,EAAAmB,CAAA,MAAsBnB,EAAQtD,CAAA,EAAA,CAAA,GAAA;AAAA,iBAC3C,MAA8B;AAAA,QAA9B6D,EAA8BC,2BAAhBR,EAAY7D,CAAA,CAAA,CAAA,CAAA;AAAA;;;;;;;;ACC9B,UAAMf,IAAQkE,GAERw4B,IAAYn8B,GAAOk8B,IAAiB,EAAK,GAIzCE,IAAYvgC,EAAS,MACrBsgC,KAAa18B,EAAM,WAAW,KAAc,KACzCA,EAAM,UAAU,MACxB;2BA5BC2E,EAUM,OAAA;AAAA,MATJ,OAAM;AAAA,MACL,eAAag4B,EAAS;AAAA,MACvB,kBAAe;AAAA;MACfx3B,EAKOC,yBALP,MAKO;AAAA,QAHeR,EAAS83B,CAAA,UAA7Br3B,EAEeu3B,IAAA;AAAA;UAFgB,cAAW;AAAA;qBAAO,MAEjD,CAAA,GAAA7wB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,cAFiD,aAEjD,EAAA;AAAA;;;;;;;;;;ACMN,UAAM/L,IAAQkE,GAER5D,IAAUC,GAAO3F,IAAmB,IAAI,GAExCsF,IAASC,GAAK,GAEd0pB,IAAaztB,EAAS,MAAM4D,EAAM,MAAME,CAAM;AAEpD,WAAAqB,EAAMsoB,GAAY,MAAM;AACtB,MAAAvpB,KAAA,QAAAA,EAAS,kBAAkBupB,EAAW;AAAA,IACxC,GAAG,EAAE,WAAW,GAAM,CAAA,cAxBpB5kB,EAAA,GAAAI,EAMYE,GAFLivB,EAAE,EAAA,GAAA;AAAA,MAHP,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,IAAI3K,EAAU;AAAA;iBAEf,MAAQ;AAAA,QAAR1kB,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;sBCLVH,EAAA,GAAAI,EAKYE,GAFLivB,EAAE,EAAA,GAAA;AAAA,MAFP,OAAM;AAAA,MACN,kBAAe;AAAA;iBAEf,MAAQ;AAAA,QAARrvB,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;2BCJVT,EAcM,OAAA;AAAA,MAbJ,OAAM;AAAA,MACL,eAAak4B,EAAM,UAAI;AAAA;MAExB13B,EAQOC,yBARP,MAQO;AAAA,QAPa+D,EAAK,cAAvB9D,EAEay3B,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,qBADX,MAAW;AAAA,gBAAR3zB,EAAK,KAAA,GAAA,CAAA;AAAA;;;QAGWkxB,EAAQ,iBAA7Bh1B,EAEgB03B,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,qBADd,MAAc;AAAA,gBAAX1C,EAAQ,QAAA,GAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACKnB,UAAMt7B,IAAOoF;AAEb,aAAS64B,EAAmBl2B,GAAG;AAC7B,MAAIA,EAAE,OAAO,YAAY,aACzBA,EAAE,eAAc,GAChBA,EAAE,yBAAwB,GAC1B/H,EAAK,gBAAgB;AAAA,IACvB;sBAIAkG,EAAA,GAAAN,EAyCM,OAzCN6D,IAyCM;AAAA,MAvCUtE,EAAM,UAAIc,EAAM,OAAC,eAA/BL,EAeS,UAAA;AAAA;QAdP,aAAU;AAAA,QACT,SAAOq4B;AAAA;QAER73B,EAUOC,wBAVP,MAUO;AAAA,UATWlB,EAAU,mBAA1BS,EAOWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,mBALM/E,EAAU,cAAA,iBADzBmB,EAIET,EAAAU,EAAA,GAAA;AAAA;cAFC,MAAMpB,EAAU;AAAA,cACjB,OAAM;AAAA,sCAERe,EAAA,GAAAI,EAAqDE,GAA9BrB,EAAU,UAAA,GAAA;AAAA;cAAE,OAAM;AAAA;;UAChCkvB,EAAA,QACPlvB,EAAM,MAAA,GAAA,CAAA;AAAA;;MAKdY,EAEO,QAFP4D,IAEOoD,EADF5H,EAAW,WAAA,GAAA,CAAA;AAAA,MAEqBA,EAAO,gBAA5CS,EAAkE,QAAlEgE,IAAkEmD,EAAjB5H,EAAO,OAAA,GAAA,CAAA;MAC5CA,EAAQ,YAApBe,EAAA,GAAAN,EAA2C,cAAlBT,EAAQ,QAAA,GAAA,CAAA;MACrBA,EAAK,SAAjBe,EAAA,GAAAN,EAAqC,cAAfT,EAAK,KAAA,GAAA,CAAA;MAGEA,EAAQ,YAAIc,EAAM,OAAC,QAAhDC,KAAAN,EAYO,QAZP+kB,IAYO;AAAA,QAXLvkB,EAUOC,sBAVP,MAUO;AAAA,UATWlB,EAAY,qBAA5BS,EAOWsE,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,mBALM/E,EAAY,gBAAA,iBAD3BmB,EAIET,EAAAU,EAAA,GAAA;AAAA;cAFC,MAAMpB,EAAY;AAAA,cACnB,OAAM;AAAA,sCAERe,EAAA,GAAAI,EAAuDE,GAAhCrB,EAAY,YAAA,GAAA;AAAA;cAAE,OAAM;AAAA;;UAClCkvB,EAAA,QACPlvB,EAAQ,QAAA,GAAA,CAAA;AAAA;;;;;;;;;AC1DlB,UAAMlE,IAAQkE,GAERnF,IAAOoF,GAEP,EAAE,aAAA0C,EAAW,IAAKJ,GAAgBzG,CAAK,GAKvC,EAAE,SAAA6F,GAAS,mBAAAE,EAAiB,IAAKJ,GAAgB3F,GAAO,KAAK;2BAUnEqF,EAiCYE,GAhCLX,EAAOiB,CAAA,CAAA,GADduC,EAiCY;AAAA,MA/BV,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,eAAa60B,EAAM;AAAA,OACZr4B,EAAiBmB,CAAA,GAAA,EACxB,SAAOnB,EAAWiC,CAAA,EAAA,CAAA,GAAA;AAAA,iBAEnB,MAME;AAAA,QANFpB,EAME+jB,IAAA;AAAA,UALC,KAAK0T,EAAQ;AAAA,UACb,MAAMC,EAAS;AAAA,UACf,UAAUC,EAAQ;AAAA,UAClB,gBAAc9T,EAAW;AAAA,UACzB,gBAAc;AAAA;QAEjB7jB,EAiBmB43B,IAAA;AAAA,UAhBhB,gBAAc/T,EAAW;AAAA,UACzB,SAASgU,EAAO;AAAA,UAChB,aAAWC,EAAQ;AAAA,UACnB,OAAOC,EAAK;AAAA,UACZ,QAAQC,EAAM;AAAA,UACd,eAAaC,EAAU;AAAA,UACvB,aAAWC,EAAQ;AAAA,UACnB,kBAAgBC,EAAY;AAAA,UAC5B,wCAAgB7+B,EAAI,gBAAA;AAAA;UAEV,UACT,MAAsB;AAAA,YAAtBoG,EAAsBC,EAAA,QAAA,QAAA;AAAA;UAEb,QACT,MAAoB;AAAA,YAApBD,EAAoBC,EAAA,QAAA,MAAA;AAAA;;;;;;;;ACxCnB,SAASy4B,GAAS79B,GAAO;AAC9B,QAAM89B,IAAe1hC,EAAS,MAAM;;AAClC,YAAO4D,EAAM,eAAa;AAAA,MACxB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,gBAAO9D,IAAA8D,EAAM,MAAM,OAAO,CAAA+9B,MAAQA,EAAK,WAAW,UAAU,MAArD,gBAAA7hC,EAAwD;AAAA,MACjE,KAAK;AACH,eAAO8D,EAAM,MAAM;AAAA,MACrB,KAAK;AACH,eAAOA,EAAM;AAAA,MACf;AACE,eAAOA,EAAM;AAAA,IACrB;AAAA,EACG,CAAA,GAEKg+B,IAAe5hC,EAAS,MACrB,GAAG0hC,EAAa,KAAK,OAAO99B,EAAM,MAAM,MAAM,aACtD;AAGD,WAASi+B,EAAU3B,GAAQhqB,GAAK;AAC9B,WAAIgqB,MAEAt8B,EAAM,gBACJsS,IAAMtS,EAAM,cACP,aACEsS,MAAQtS,EAAM,cAChBA,EAAM,gBAEN,gBAIJ;AAAA,EACX;AAEE,SAAO;AAAA,IACL,cAAA89B;AAAA,IACA,cAAAE;AAAA,IACA,WAAAC;AAAA,EACJ;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDA,UAAMj+B,IAAQkE,GA4BR,EAAE,cAAA45B,GAAc,cAAAE,GAAc,WAAAC,EAAW,IAAGJ,GAAS79B,CAAK;2BAIhE2E,EAmBM,OAAA;AAAA,MAlBH,iBAAeT,EAAK,MAAC;AAAA,MACrB,iBAAeU,EAAYk5B,CAAA;AAAA,MAC3B,kBAAgBl5B,EAAYo5B,CAAA;AAAA,MAC7B,OAAM;AAAA,MACN,kBAAe;AAAA,MACf,MAAK;AAAA;OAEL/4B,EAAA,EAAA,GAAAN,EAUMsE,IAVqB,MAAA6J,GAAA5O,EAAA,OAAd,CAAA65B,GAAMzrB,YAAnB3N,EAUM,OAAA;AAAA,QATJ,OAAM;AAAA,QACL,eAAaC,EAASq5B,CAAA,EAACF,EAAK,QAAQzrB,CAAG;AAAA,QACxC,gBAAa;AAAA,QACZ,KAAKyrB,EAAK,MAAMA,EAAK;AAAA,QACtB,MAAK;AAAA;QAELj5B,EAEO,QADF,MAAAgH,EAAAiyB,EAAK,SAASA,CAAI,IAAG,QAAGjyB,EAAGlH,KAAUm5B,EAAK,QAAQzrB,CAAG,KAAA,aAAA,GAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjD9D,UAAMtS,IAAQkE;AAiCd,IAAA6C,EAAkB/G,GAAO,WAAW,QAAW,6CAA+C;AAM9F,UAAM,CAAEyO,CAAY,IAAG3K,GAAa,GAE9B,EAAE,UAAAqK,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAG3De,IAAc1S,EAAS,MAAM4D,EAAM,WAAWyO,EAAW,KAAK,GAC9DyJ,IAAY9b,EAAS,MAAM4D,EAAM,WAAYA,EAAM,cAAcA,EAAM,eAAeA,EAAM,KAAM;sBAKtGiF,EAAA,GAAAN,EA2BM,OA3BNyD,EA2BM;AAAA,MA3BD,OAAM;AAAA,MACT,kBAAe;AAAA,MACd,iBAAelE,EAAQ;AAAA,MACvB,cAAYA,EAAK;AAAA,MACjB,aAAWA,EAAI;AAAA,OACRU,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MAEhBrJ,EAUE,SAVFsD,EAUE;AAAA,QATC,SAAS8P,EAAS;AAAA,QAClB,UAAUhU,EAAQ;AAAA,QAClB,IAAIgI,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC5B,UAAU5K,EAAQ;AAAA,QACnB,MAAK;AAAA,QACJ,OAAOA,EAAK;AAAA,QACZ,cAAYA,EAAK;AAAA,SACVU,EAASwJ,CAAA,GAAA;AAAA,QAChB,2BAAStH,MAAMyF,QAA2B,qBAAAzF,EAAE,OAAM,KAAA;AAAA;MAEtC5C,EAAK,SAAIc,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,KAAK7D,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC7B,UAAU5K,EAAQ;AAAA,QAClB,UAAUA,EAAQ;AAAA;mBAEnB,MAEO;AAAA,UAFPiB,EAEOC,uBAFP,MAEO;AAAA,gBADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;;;IC7EH3J,KAAkB;AAAA;AAAA;AAAA;AAAA,EAM7B,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA;AAAA,EAED,KAAK;AAAA,IACH,GAAGuF,GAAgB;AAAA,EACpB;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS;AAAA,EACb;AACA;;;;;;;;;;;;;;;;;ACVA,UAAME,IAAQkE,GAERsb,IAAQC,GAGbvb,GAAA,YAAA,GAEK,EAAE,UAAA5C,GAAU,cAAAP,MAAiBhB,GAAeC,CAAK,GAEjDE,IAASC,GAAK,GAEd+9B,IAASviB,GAAe,MAAM,GAE9BkO,IAAaztB,EAAS,MAAM4D,EAAM,MAAME,CAAM,GAE9Ci+B,IAAoB/hC,EAAS,MAAM;AACvC,UAAI,CAAA4D,EAAM;AACV,eAAOA,EAAM,eACTo+B,EAAgB5e,EAAM,KAAK,IAC3BA,EAAM;AAAA,IACZ,CAAC,GAEK6e,IAAsBjiC,EAAS,MAC/B,CAAC4D,EAAM,YACP,CAAC,MAAM,QAAQwf,EAAM,KAAK,KAAK,CAACA,EAAM,MAAM,SAAQ,UAC3Cxf,EAAM,eACfwf,EAAM,MAAM,IAAI,CAAA7kB,MAAOyjC,EAAgBzjC,CAAG,CAAC,IAC3C6kB,EAAM,OACE,KAAK,IAAI,CACtB,GAEK8e,IAAcliC,EAAS,MACpB4D,EAAM,WACTq+B,EAAoB,QACpBF,EAAkB,KACvB,GAEKl9B,IAAY7E,EAAS,MAAM;AAC/B,YAAMuE,IAAMX,EAAM,QAAQ,sBAAsB;AAChD,aAAO;AAAA,QACL,GAAGsB,EAAS;AAAA,QACZ,CAACX,CAAG,GAAGX,EAAM;AAAA,MACjB;AAAA,IACA,CAAC;AAED,aAASo+B,EAAgBzjC,GAAK;AAC5B,aAAKA,MACE,OAAOqF,EAAM,gBAAiB,aACjCA,EAAM,aAAarF,CAAG,IACtBA,EAAIqF,EAAM,YAAY;AAAA,IAC5B;AAEA,aAASu+B,IAAU;AACjB,MAAA/e,EAAM,QAAQxf,EAAM,WAAW,CAAA,IAAK,MACpCk+B,EAAO,MAAM,MAAK;AAAA,IACpB;;;AAjHE,aAAAj5B,EAAA,GAAAN,EAgDM,OAhDNyD,EAgDM;AAAA,QA/CJ,KAAI;AAAA,QACH,gBAAcsI,EAAK,SAAI;AAAA,QACvB,iBAAerI,EAAQ,YAAI;AAAA,QAC3B,iBAAe2H,EAAQ,YAAI;AAAA,QAC5B,OAAM;AAAA,QACN,2BAAwB;AAAA,QACvB,cAAYU,EAAK,SAAI;AAAA,QACrB,IAAImZ,EAAU;AAAA,QACf,MAAK;AAAA,QACJ,UAAUxhB,EAAQ,WAAG,SAAS;AAAA,SACvBpH,EAAS,KAAA,GAAA;AAAA,QAITqkB,EAAAA,YAAYkZ,EAAAA,eAAatiC,IAAAsjB,EAAA,UAAA,QAAAtjB,EAAO,gBADxCmJ,EAKqB2gB,IAAA;AAAA;UAHnB,OAAM;AAAA,UACN,OAAM;AAAA,UACL,OAAOxG,EAAK,MAAC;AAAA,UACd,SAAQ;AAAA;QAGE8e,EAAW,0BAAvB35B,EAEM,OAFN+D,IAEMoD,EADD6E,EAAW,WAAA,GAAA,CAAA;AAAA,QAIL2tB,EAAW,SAAtBr5B,KAAAN,EAIM,OAJNgE,IAIM;AAAA,UAHJxD,EAEOC,EAFS,QAAA,WAAAq5B,GAAAC,GAAA,EAAA,aAAAJ,EAAA,OAAgB,GAAA15B,EAAA7D,CAAA,OAAhC,MAEO;AAAA,gBADFu9B,EAAW,KAAA,GAAA,CAAA;AAAA;;SAMTj2B,EAAQ,YAAA,CAAKs2B,EAAY,gBAAIL,EAAW,cADjD35B,EAOS,UAAA;AAAA;UALP,OAAM;AAAA,UACN,MAAK;AAAA,UACL,cAAW;AAAA,UACV,YAAY45B,GAAO,CAAA,MAAA,CAAA;AAAA;UACpB94B,EAA4Cb,EAAA0E,EAAA,GAAA;AAAA,YAA/B,MAAK;AAAA,YAAK,eAAY;AAAA;;QAIrC7D,EAEuBb,EAAAc,EAAA,GAAA;AAAA,UADrB,OAAM;AAAA,UACN,eAAY;AAAA;;;;;;;;;;;;;;;;;;;;;ACwBlB,UAAM1F,IAAQkE,GAIRsb,IAAQC,GAIbvb,GAAA,YAAA,GAEK8e,IAAcvD,GAAYvb,GAAA,aAG/B,GAEKhE,IAASC,GAAK,GAEd0pB,IAAaztB,EAAS,MAAM4D,EAAM,MAAME,CAAM,GAE9C0+B,IAAaxiC,EAAS,MAAM,GAAGytB,EAAW,KAAK,WAAW;;MA5F9DpkB,EAsBgBo5B,IAtBhBz2B,EAsBgB;AAAA,QArBd,OAAM;AAAA,QACN,kBAAe;AAAA,QACd,UAAUC,EAAQ;AAAA,QAClB,iBAAey2B,EAAY;AAAA,QAC3B,OAAOpuB,EAAK;AAAA,QACZ,WAAShC,EAAM;AAAA,QACf,IAAImb,EAAU;AAAA,QACd,UAAUvE,EAAQ;AAAA,QAClB,aAAa3U,EAAW;AAAA,QACxB,iBAAeguB,EAAY;AAAA,QAC3B,KAAKC,EAAU;AAAA,QACf,UAAU5uB,EAAQ;AAAA,QAClB,cAAYwuB,EAAS;AAAA,SACdtyB,EAAM,QAAA;AAAA,oBACLsT,EAAK;AAAA,sDAALA,EAAK,QAAApP;AAAA;mBAEd,CAIO,EALG,aAAAkuB,GAAa,WAAAx9B,EAAS,MAAA;AAAA,UAChCqE,EAIOC,EAFgB,QAAA,iBAAAq5B,GAAAC,GAAA,EAAA,UAAAlf,EAAA,OAAe,QAAA1e,OAFtC,MAIO;AAAA,gBADFw9B,CAAW,GAAA,CAAA;AAAA;;;;MAUlB74B,EA+Bas5B,IAAA;AAAA,QA9BX,OAAK5zB,GAAA,CAAC,sBACE6zB,EAAa,aAAA,CAAA;AAAA,QACpB,UAAUhyB,EAAQ;AAAA,QAClB,aAAWsX,EAAQ;AAAA,QACnB,IAAIsa,EAAU;AAAA,QACd,QAAQK,EAAM;AAAA,QACd,cAAYha,EAAS;AAAA,QACrB,mBAAiBC,EAAc;AAAA,QAC/B,SAAS/G,EAAO;AAAA,QAChB,OAAO+gB,EAAa;AAAA,QACpB,aAAaC,EAAiB;AAAA,QAC9B,aAAWha,EAAQ;AAAA,QACnB,uBAAqBI,EAAiB;AAAA,QACtC,sBAAoBT,EAAiB;AAAA,QACrC,kBAAgBD,EAAa;AAAA,QAC7B,sBAAoBD,EAAgB;AAAA,QACpC,gBAAcF,EAAW;AAAA,QACzB,UAAUY,EAAQ;AAAA,QAClB,MAAM8Z,EAAY;AAAA,oBACV5f,EAAK;AAAA,sDAALA,EAAK,QAAApP;AAAA,QACN,gBAAc4S,EAAW;AAAA,uDAAXA,EAAW,QAAA5S;AAAA,QAEhC,cAAarE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAApP,MAAQ4P,EAAAA,qBAAqB5P,CAAI;AAAA,QAC9C,aAAYoP,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAApP,MAAQ4P,EAAAA,oBAAoB5P,CAAI;AAAA,QAC5C,eAAc0G,EAAa;AAAA,QAC3B,cAAaD,EAAY;AAAA,QACzB,SAAO2I,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAApP,MAAQ4P,EAAAA,eAAe5P,CAAI;AAAA,QAClC,QAAMoP,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAApP,MAAQ4P,EAAAA,cAAc5P,CAAI;AAAA,QAChC,SAAOgG,EAAO;AAAA;mBACf,CAA+B,EARrB,IAAA7G,GAAI,OAAAe,EAAK,MAAA;AAAA,UAQnBsI,EAA+BC,EAAA,QAAA,WAAAq5B,GAAAC,GAAA,EAAf,IAAA5iC,GAAI,OAAAe,EAAK,CAAA,CAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;AC5D7B,UAAMmD,IAAQkE,GAWR8H,IAAO5P,EAAS,OACb,EAAC,CAAE4D,EAAM,QAAQ,sBAAsB,kBAAkB,GAAIA,EAAM,OAAM,EACjF;sBAGCiF,EAAA,GAAAN,EAYS,UAZTyD,EAYS;AAAA,MAXN,IAAI8D,EAAAA,OAAO,MAAMhI,EAAO;AAAA,MACzB,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,UAAUA,EAAQ;AAAA,MAClB,UAAUA,EAAQ;AAAA,MAClB,cAAYA,EAAK;AAAA,MACjB,OAAOA,EAAK,SAAIA,EAAU;AAAA,OACnB8H,EAAI,OAAA;AAAA,MACX,UAAMD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGjF,MAAMyF,EAAAA,2BAA2BzF,EAAE,OAAO,KAAK;AAAA;MAEzD3B,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;ACoBZ,UAAMpF,IAAQkE,GAIRsb,IAAQC,GAIbvb,GAAA,YAAA,GAEK,EAAE,UAAAiK,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAE3D7N,IAASC,GAAK,GAEd0pB,IAAaztB,EAAS,MAAM4D,EAAM,MAAME,CAAM,GAE9Cm/B,IAAUjjC,EAAS,MAAM,GAAGytB,EAAW,KAAK,QAAQ,GAEpDnb,IAAStS,EAAS,MAAM,GAAGytB,EAAW,KAAK,OAAO,GAElD5a,IAAmB7S,EAAS,MACpB4D,EAAM,SAASA,EAAM,YACnBA,EAAM,QAAQ,EAC7B;sBAxECiF,EAAA,GAAAN,EAoCM,OApCNyD,EAoCM,EApCD,kBAAe,qBAA0BxD,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MAGrC1F,EAAK,SAAIzD,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,IAAIsvB,EAAO;AAAA,QACX,UAAUh3B,EAAQ;AAAA,QAClB,KAAKwhB,EAAU;AAAA,QACf,UAAU7Z,EAAQ;AAAA;mBACnB,MAEO;AAAA,UAFP7K,EAEOC,uBAFP,MAEO;AAAA,gBADFqD,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAKZhD,EAYW65B,IAZXl3B,EAYW;AAAA,QAXR,mBAAiBi3B,EAAO;AAAA,QACxB,UAAUh3B,EAAQ;AAAA,QAClB,OAAOqI,EAAK;AAAA,QACZ,WAAShC,EAAM;AAAA,QACf,IAAImb,EAAU;AAAA,QACd,UAAU7Z,EAAQ;AAAA,SACXpL,EAASwJ,CAAA,GAAA;AAAA,oBACRoR,EAAK;AAAA,sDAALA,EAAK,QAAApP;AAAA;WACgBpL,EAAM,QAAA,CAAlBxD,GAAG+9B;gBAAkBA;AAAA,UACrC,IAAA71B,EAAA,CAD6C81B,MAAS;AAAA,YACtDr6B,EAAwCC,EAAA,QAA3Bm6B,GAAId,GAAAC,GAAUc,CAAS,CAAA,CAAA;AAAA;;;MAKlBvwB,EAAgB,cAAtC5J,EAKsBwL,IAAA;AAAA;QAJnB,iBAAexI,EAAQ;AAAA,QACvB,OAAOqI,EAAK;AAAA,QACZ,aAAWI,EAAQ;AAAA,QACnB,MAAMC,EAAI;AAAA,QACV,WAASrC,EAAM;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBtB,UAAM1O,IAAQkE;AAqCd,IAAA6C,EAAkB/G,GAAO,SAAS,QAAW,uCAA2C;AAIxF,UAAM,CAAEyO,GAAYC,KAAW5K,GAAc,CAAC,GAExC,EAAE,UAAAqK,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAG3D0mB,IAAiBr4B,EAAS,MAAA;;AAAM,eAAAH,KAAAC,IAAA8D,EAAM,UAAN,gBAAA9D,EAAa,SAAb,gBAAAD,EAAA,KAAAC,GAAoB;AAAA,OAAS8D,EAAM;AAAA,KAAK,GACxE6L,IAAUzP,EAAS,MACtB4D,EAAM,SAASA,EAAM,YAAaA,EAAM,QAAQy0B,EAAe,SAAS,MAC1E,GACK3lB,IAAc1S,EAAS,MAAM4D,EAAM,WAAWyO,EAAW,KAAK,GAC9DioB,IAAct6B,EAAS,MAAM4D,EAAM,SAASA,EAAM,UAAU;sBAIlEiF,EAAA,GAAAN,EAyCM,OAzCNyD,EAyCM,EAzCD,kBAAe,gCAAqCxD,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MAChDjK,EAAK,SAAIc,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,KAAK7D,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC7B,UAAU5K,EAAQ;AAAA,QAClB,UAAUA,EAAQ;AAAA;mBAEnB,MAEO;AAAA,UAFPiB,EAEOC,uBAFP,MAEO;AAAA,gBADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAIZuB,EAqBqBg6B,IArBrBr3B,EAqBqB;AAAA,QApBlB,UAAUlE,EAAQ;AAAA,QAClB,OAAOA,EAAK;AAAA,QACZ,WAASU,EAAM8J,CAAA;AAAA,QACf,YAAUxC,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAClC,UAAU5K,EAAQ;AAAA,QAClB,OAAOwyB,EAAW;AAAA,QAClB,uBAAmB3qB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAU7D,EAAAA,2BAA2B6D,CAAM;AAAA,SACvDxL,EAASwJ,CAAA,CAAA,GAAA;AAAA,mBAEjB,MAES;AAAA,UAFTtJ,EAES,UAAA;AAAA,YAFA,WAAW4xB,EAAW;AAAA,YAAE,OAAM;AAAA,YAAI,YAAYA,EAAW;AAAA,UAC7D,GAAA5qB,EAAA5H,EAAA,gBAAgBA,EAAW,WAAA,GAAA,GAAAsE,EAAA;AAAA,kBAEhC7D,EAOSsE,IAAA,MAAA6J,GAPgB5O,EAAI,MAAA,CAAd6c,YAAfpc,EAOS,UAAA;AAAA,YANN,KAAKoc,EAAO;AAAA,YACZ,UAAUA,EAAO;AAAA,YACjB,UAAU2V,EAAA,UAAgB3V,EAAO;AAAA,YACjC,OAAOA,EAAO;AAAA,UAEZ,GAAAjV,EAAAiV,EAAO,KAAK,GAAA,GAAArY,EAAA;;;;MAIGmD,EAAO,cAA7BxG,EAMEwL,IAAA;AAAA;QALC,iBAAe3M,EAAQ;AAAA,QACvB,OAAOA,EAAK;AAAA,QACZ,aAAWA,EAAQ;AAAA,QACnB,MAAMA,EAAI,QAAIuwB,EAAc;AAAA,QAC5B,WAAS7vB,EAAM8J,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChGpB,UAAM1O,IAAQkE,GAkFRnF,IAAOoF,GAGP,CAAEu7B,GAAaC,KAAiB77B,GAAc,CAAC,GAC/C1D,IAAQC,GAAQ,GAGhBxE,IAASV,EAAI,EAAK,GAGlBykC,IAAexjC,EAAS,MACrB4D,EAAM,YAAYI,EAAM,MAAMs/B,EAAY,KAClD,GACKG,IAAgBzjC,EAAS,MAAM4D,EAAM,aAAa2/B,EAAa,KAAK,GACpEG,IAAa1jC,EAAS,MAAM;AAChC,UAAI4D,EAAM,YAAY;AACpB,cAAM+/B,IAAgB//B,EAAM,QAAQ,KAAK,CAAC+gB,MAAW;;AAEnD,kBAAI7kB,IAAA6kB,EAAO,UAAP,QAAA7kB,EAAe8D,EAAM,cAChB+gB,EAAO,MAAM/gB,EAAM,UAAU,QAAM/D,IAAA+D,EAAM,eAAN,gBAAA/D,EAAmB+D,EAAM,eAG9D+gB,EAAO,UAAU/gB,EAAM;AAAA,QAC/B,CAAA;AAED,YAAI+/B;AACF,iBAAOA,EAAc;AAAA,MAE3B;AAGE,aAAO//B,EAAM;AAAA,IACf,CAAC,GACKggC,IAAmB5jC,EAAS,MACzB0jC,EAAW,UAAU9/B,EAAM,WACnC;2BAMD2E,EA+DM,OAAA,MAAA;AAAA,MA7DIT,EAAK,SAAIc,EAAM,OAAC,cADxBK,EASU0K,IAAA;AAAA;QAPP,UAAU7L,EAAQ;AAAA,QAClB,KAAK07B,EAAY;AAAA,QACjB,UAAU17B,EAAQ;AAAA;mBAEnB,MAEO;AAAA,UAFPiB,EAEOC,uBAFP,MAEO;AAAA,gBADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAKJA,EAAA,aAAaA,EAAO,gBAD5BS,EAME,SAAA;AAAA;QAJC,IAAIT,EAAO;AAAA,QACX,MAAMA,EAAS;AAAA,QAChB,MAAK;AAAA,QACJ,OAAOA,EAAU;AAAA;MAGpBuB,EA0CiCqqB,IAAA;AAAA,QAzC9B,aAAW8P,EAAY;AAAA,QACvB,UAAU17B,EAAQ;AAAA,QAClB,qBAAmBA,EAAgB;AAAA,QACnC,kBAAgBA,EAAa;AAAA,QAC7B,sBAAoBA,EAAiB;AAAA,QACrC,eAAaA,EAAU;AAAA,QACvB,aAAa;AAAA,QACb,MAAMrI,EAAM;AAAA,QACZ,cAAYgkC,EAAa;AAAA,QACzB,SAAS37B,EAAO;AAAA,QAChB,mBAAiBA,EAAU;AAAA,QAC3B,aAAW07B,EAAY;AAAA,QACvB,gBAAc17B,EAAU;AAAA,QACxB,gCAAOrI,EAAM,QAAA;AAAA,QACb,2BAAyBkQ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAY,MAAO5N,wBAA2B4N,CAAE;AAAA;QAEnD,UACT,MAsBS;AAAA,UAtBT7H,EAsBS,UAtBTsD,EAsBS;AAAA,YArBN,iBAAey3B,EAAa;AAAA,YAC5B,oBAAkB37B,EAAM;AAAA,YACxB,iBAAerI,EAAM;AAAA,YACtB,iBAAc;AAAA,YACb,gBAAcqI,EAAK;AAAA,YACnB,iBAAerI,EAAM,QAAA,UAAA,MAAA;AAAA,YACtB,OAAM;AAAA,YACL,WAASmkC,EAAgB,QAAA,WAAc;AAAA,YACvC,iBAAe97B,EAAQ;AAAA,YACvB,cAAYA,EAAK;AAAA,YACjB,aAAWrI,EAAM;AAAA,YACjB,oBAAkBmkC,EAAgB;AAAA,YAClC,iBAAe97B,EAAQ;AAAA,YACvB,UAAUA,EAAQ;AAAA,YAClB,IAAI07B,EAAY;AAAA,YACjB,MAAK;AAAA,aACG1zB,EAAM,QAAA;AAAA,YACb,SAAKH,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAk0B,GAAA,CAAA7vB,MAAUvU,EAAM,QAAA,CAAIA,EAAM,OAAA,CAAA,SAAA,CAAA;AAAA;YAEhCiJ,EAA6B,gBAApBg7B,EAAU,KAAA,GAAA,CAAA;AAAA,YACK57B,EAAQ,6BAAhCmB,EAA8CT,EAAAc,EAAA,GAAA;AAAA;cAAZ,MAAK;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvL/C,UAAM1F,IAAQkE;AAgCd,IAAA6C,EAAkB/G,GAAO,WAAW,QAAW,6CAA+C;AAE9F,UAAMjB,IAAOoF,GAIP,CAAEsK,CAAY,IAAG3K,GAAa,GAE9B,EAAE,UAAAqK,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAG3De,IAAc1S,EAAS,MAAM4D,EAAM,WAAWyO,EAAW,KAAK,GAC9DyJ,IAAY9b,EAAS,MAAM4D,EAAM,WAAWA,EAAM,UAAU;sBAKlEiF,EAAA,GAAAN,EAiCM,OAjCNyD,EAiCM;AAAA,MAjCD,OAAM;AAAA,MACT,kBAAe;AAAA,MACd,iBAAelE,EAAQ;AAAA,MACvB,aAAWA,EAAI;AAAA,OACRU,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MAEDjK,EAAK,SAAIc,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,KAAK7D,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC7B,UAAU5K,EAAQ;AAAA,QAClB,MAAMA,EAAS;AAAA;mBAEhB,MAEO;AAAA,UAFPiB,EAEOC,uBAFP,MAEO;AAAA,gBADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAGZY,EAiBM,OAAA;AAAA,QAjBD,OAAM;AAAA,QACR,iBAAeZ,EAAQ;AAAA,QACvB,aAAWA,EAAI;AAAA;QAEhBY,EAOE,SAPFsD,EAOE;AAAA,UANC,SAAS8P,EAAS;AAAA,UAClB,UAAUhU,EAAQ;AAAA,UAClB,IAAIgI,EAAAA,OAAO,MAAM4C,EAAW;AAAA,UAC7B,MAAK;AAAA,WACGlK,EAASwJ,CAAA,GAAA;AAAA,UAChB,2BAAStH,MAAM/H,EAA0B,qBAAA+H,EAAE,OAAM,OAAA;AAAA;QAEpDhC,EAIQ,QAAA;AAAA,UAHN,eAAY;AAAA,UACX,uBAAqBZ,EAAY;AAAA,UACjC,wBAAsBA,EAAa;AAAA;;;;;;;;;;;;;;;;;;;;;ACnE1C,UAAMlE,IAAQkE,GAeR9D,IAAQC,GAAQ,GAEhB6/B,IAAS/kC,EAAG,GACZw/B,IAAWv+B,EAAS,MAAM4D,EAAM,gBAAgBI,EAAM,EAAE,GACxD+/B,IAAkB/jC,EAAS,MAAM4D,EAAM,WAAW,GAAGI,EAAM,EAAE,QAAQ;AAE3E,aAAS2Z,EAAcjT,GAAG;AACxB,OAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAc,GAChBA,EAAE,gBAAe,GACjBs5B,EAAkB;AAAA,IAEtB;AACA,aAASA,IAAqB;AAC5B,UAAIpgC,EAAM,gBAAgBI,EAAM,IAAI;AAClC,cAAMuM,IAAK,IAAI,YAAY,YAAY,EAAE,QAAQvM,EAAM,IAAI,SAAS,GAAM,CAAA;AAC1E,QAAA8/B,EAAO,MAAM,cAAcvzB,CAAE;AAAA,MACjC;AAAA,IACA;2BAnDEhI,EAYM,OAAA;AAAA,MAXH,iBAAew7B,EAAe;AAAA,MAC9B,iBAAexF,EAAQ,QAAA,SAAA;AAAA,MACvB,eAAaz2B,EAAM,UAAI;AAAA,MACxB,kBAAe;AAAA,MACf,MAAK;AAAA,MACL,UAAS;AAAA,eACL;AAAA,MAAJ,KAAIg8B;AAAA,MACH,SAAOE;AAAA,MACP,WAASrmB;AAAA;MAEV5U,EAAQC,EAAA,QAAA,SAAA;AAAA;;;ACXZ,SAASi7B,KAAW;AAClB,SAAO;AACT;AAEAA,GAAS,QAAQ;AAAA,EACf,IAAI;AAAA;AAAA,IAEF,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA;AAAA,IAC9B,SAAS;AAAA,EACV;AAAA;AAAA,EAED,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA;AAAA,EACV;AAAA,EACD,WAAW;AAAA,IACT,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA;AAAA,EACV;AAAA,EACD,QAAQ;AAAA,IACN,MAAM,CAAC,QAAQ,MAAM;AAAA,IACrB,SAAS;AAAA,EACV;AAAA,EACD,MAAM;AAAA,IACJ,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,IAC9B,SAAS;AAAA,EACV;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,EACV;AAAA,EACD,UAAU;AAAA,IACR,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,IAC9B,SAAS;AAAA;AAAA,EACV;AAAA,EACD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA;AAAA,EACX;AACF;AAEK,MAAEC,KAAWD,ICtDLE,KAAsB,OAAO,qBAAqB,GAClDC,KAAoB,OAAO,mBAAmB,GAC9CC,KAAsB,OAAO,qBAAqB;;;;;;;;;;ACiB/D,UAAMzgC,IAAQkE,GAQRw8B,IAAiB;AAAA,MACrB,QAAQH;AAAA,MACR,MAAMC;AAAA,MACN,QAAQC;AAAA,IACV,GAEME,IAAWxlC,EAAI,CAAC;AAEtB,IAAAogB,GAAQmlB,EAAe1gC,EAAM,IAAI,GAAG,EAAE,mBAAA4gC,GAAmB,mBAAAC,EAAmB,CAAA;AAE5E,aAASD,IAAoB;AAC3B,MAAAD,EAAS;AAAA,IACX;AAEA,aAASE,IAAoB;AAC3B,MAAAF,EAAS;AAAA,IACX;2BA1CEh8B,EAKM,OAAA;AAAA,MAJH,sBAAmBT,EAAI,IAAA,WAAA;AAAA,MACxB,MAAK;AAAA,MACJ,OAAK48B,GAAA,cAAgB58B,EAAI,IAAA,eAAey8B,EAAQ,KAAA,EAAA;AAAA;MACjDx7B,EAAQC,EAAA,QAAA,SAAA;AAAA;;;ACJZ,SAAS27B,KAAa;AACpB,SAAO;AACT;AAEAA,GAAW,QAAQ;AAAA,EACjB,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW,CAAApmC,MAAO,CAAC,QAAQ,OAAO,EAAE,SAASA,CAAG;AAAA,EAClD;AACF;AAEK,WAAaomC;;;;;;ACFlB,UAAMC,IAAWzgC,GAAOigC,IAAmB,IAAI,KAAKjgC,GAAOggC,IAAqB,IAAI,KAAKhgC,GAAOkgC,EAAmB;AAGnH,WAAAl5B,GAAU,MAAMy5B,EAAS,kBAAmB,CAAA,GAC5C92B,GAAY,MAAM82B,EAAS,kBAAmB,CAAA,cAd5C/7B,EAAA,GAAAN,EAEM,OAFN6D,IAEM;AAAA,MADJrD,EAAQC,EAAA,QAAA,SAAA;AAAA;;;ACCZ,SAAS67B,GAASjhC,GAAO,EAAE,OAAAowB,KAAS;AAClC,SAAO8Q,GAAE,OAAO;AAAA,IACd,OAAO;AAAA,IACP,MAAM;AAAA,EACR,GAAG9Q,CAAK;AACV;AAGA6Q,GAAS,QAAQ,CAAA;AAEZ,MAAEX,KAAWW;ACVlB,SAASE,GAAKnhC,GAAO,EAAE,OAAAowB,KAAS;AAC9B,SAAO8Q,GAAE,OAAO;AAAA,IACd,OAAO;AAAA,IACP,MAAM;AAAA,EACR,GAAG9Q,CAAK;AACV;AAGA+Q,GAAK,QAAQ,CAAA;AAER,WAAaA;;;;;;ACZhB,SAAAC,GAAAh8B,GAAA2G,GAAA;SACU9G,EAAA,GAAAN,EAAA,OAAA6D,IAAA;AAAA;;;;ACDV,SAAA44B,GAAAh8B,GAAA2G,GAAA;SACU9G,EAAA,GAAAN,EAAA,OAAA6D,IAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACgBZ,UAAMzJ,IAAOoF,GAEPnE,IAAQkE,GAcRm9B,IAAe;AAAA,MACnB,KAAKC;AAAA,MACL,MAAMC;AAAA,IACR;AAEA,aAASC,EAASniC,GAAO;AAKvB,MAAAN,EAAK,UAJc;AAAA,QACjB,KAAK;AAAA,QACL,MAAM;AAAA,MACV,EAC4BiB,EAAM,KAAK,KAAK,OAAOX,CAAK;AAAA,IACxD;2BA5CEsF,EAWS,UAAA;AAAA,MAVP,OAAM;AAAA,MACN,MAAK;AAAA,MACJ,SAAO68B;AAAA;MACRr8B,EAEOC,yBAFP,MAEO;AAAA,QADL2G,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAjH,EAAmD,QAA7C,EAAA,OAAM,wBAAqB,eAAW,EAAA;AAAA;OAE9CG,EAAA,GAAAI,EAGuBE,GAFhB87B,EAAarhC,EAAM,KAAK,KAAK4E,EAAewyB,EAAA,CAAA,GAAA;AAAA,QAChD,MAAMlzB,EAAI;AAAA,QACX,eAAY;AAAA;;;GCOZu9B,KAA0B;;;;AAJhC,UAAM1iC,IAAOoF,GAEPu9B,IAAY/lB,GAAe,SAAS;AAI1C,QAAIgmB,IAAS,MACTC,IAAO,MACPC,IAAiB;AAErB,UAAMC,IAAS7mC,GAAW,EAAE,IAAI,MAAM,MAAM,KAAM,CAAA,GAC5C8mC,IAAmB5mC,EAAI,EAAK,GAC5B6mC,IAAa7mC,EAAI,EAAK;AAE5B,IAAAoM,GAAU,MAAM;AAGd,eAAS,iBAAiB,eAAe06B,CAAe;AAAA,IAC1D,CAAC,GAED/3B,GAAY,MAAM;AAChB,eAAS,oBAAoB,eAAe+3B,CAAe;AAAA,IAC7D,CAAC;AAID,aAASA,EAAgB5iC,GAAO;AAC9B,UAAI2iC,EAAW,MAAO;AAEtB,UAAID,EAAiB;AACnB,eAAQ1iC,EAAM,WAAWqiC,EAAU,SAAUQ,EAAW;AAK1D,UAFAC,EAAU9iC,EAAM,OAAO,QAAQ,+BAA+B,CAAC,GAE3D,CAACyiC,EAAO,MAAM,GAAI;AAEtB,YAAMM,IAAiB/iC,EAAM,WAAYyiC,EAAO,MAAM,KAAK,OAAOL,IAC5DY,IAAkBhjC,EAAM,WAAYyiC,EAAO,MAAM,KAAK,QAAQL;AAGpE,UAAI,EAAAW,KAAkB/iC,EAAM,OAAO,QAAQ,qBAAqB,aAE5D+iC,KAAkBC,IAAiB;AAGrC,YAFAT,IAAOQ,IAAiBN,EAAO,MAAM,KAAK,OAAOA,EAAO,MAAM,KAAK,OAC/DM,KAAgBD,EAAUG,EAA2B,CAAA,GACrD,CAACR,EAAO,MAAM,GAAI;AACtB,QAAAS,EAAW;AAAA,MACf;AAAA,IACA;AAGA,aAASD,IAA4B;AACnC,YAAME,IAAcV,EAAO,MAAM,GAAG;AAEpC,UAAI,CAACU,EAAa;AAElB,YAAMC,IAAWD,EAAY,UAAU,SAAS,2BAA2B,IACvEV,EAAO,MAAM,GAAG,uBAAuB,mBACvCA,EAAO,MAAM,GAAG;AAEpB,aAAOW,EAAS,QAAQ,qBAAqBA,IAAW;AAAA,IAC1D;AAEA,aAASN,EAAUz3B,GAAI;AAErB,MAAAo3B,EAAO,QAAQp3B,IACX,EAAE,IAAAA,GAAI,MAAMA,EAAG,sBAAqB,GAAI,UAAUg4B,EAAah4B,CAAE,EAAC,IAClE,EAAE,IAAI,MAAM,MAAM,KAAI;AAAA,IAC5B;AAEA,aAASg4B,EAAah4B,GAAI;;AACxB,YAAMqR,KAAQ7f,IAAAwO,EAAG,QAAQ,wBAAX,gBAAAxO,EAAgC,QAAQ,MAAM;AAC5D,UAAK6f;AACL,eAAO,SAASA,GAAO,EAAE;AAAA,IAC3B;AAEA,aAASwmB,IAAc;AACrB,MAAAI,EAAiB,GACjBjB,EAAU,MAAM,MAAM,YAAY,4BAA4B,GAAGI,EAAO,MAAM,KAAK,GAAG,IAAI,GAC1FJ,EAAU,MAAM,MAAM,YAAY,wCAAwC,GAAGI,EAAO,MAAM,KAAK,MAAM,IAAI,GACzGC,EAAiB,QAAQ;AAAA,IAC3B;AAEA,aAASG,IAAc;AACrB,MAAAH,EAAiB,QAAQ;AAAA,IAC3B;AAEA,aAASa,EAAcvjC,GAAO;AAC5B,MAAAA,EAAM,OAAO,kBAAkBA,EAAM,SAAS;AAC9C,YAAMwjC,IAAanB,EAAU,MAAM,QAAQ,uBAAuB;AAClE,MAAAA,EAAU,MAAM,MAAM,YAAY,sCAAsC,GAAGmB,EAAW,YAAY,IAAI,GACtGb,EAAW,QAAQ,IACnBL,IAASC,GACTF,EAAU,MAAM,iBAAiB,eAAeoB,CAAa,GAC7DpB,EAAU,MAAM,iBAAiB,aAAaqB,GAAa,EAAE,MAAM,GAAM,CAAA;AAAA,IAC3E;AAEA,aAASD,EAAczjC,GAAO;AAK5B,MAJAuiC,IAAOoB,EAAc3jC,CAAK,IACtByiC,EAAO,MAAM,KAAK,OAAOA,EAAO,MAAM,WACtCziC,EAAM,SAEN,CAAAwiC,MAEJA,IAAiB,sBAAsB,MAAM;AAC3C,QAAAA,IAAiB,MACjBc,EAAiB;AAAA,MAClB,CAAA;AAAA,IACH;AAEA,aAASK,EAAc3jC,GAAO;AAC5B,aAAQA,EAAM,UAAUyiC,EAAO,MAAM,KAAK,QAASA,EAAO,MAAM;AAAA,IAClE;AAEA,aAASa,IAAoB;AAC3B,MAAAjB,EAAU,MAAM,MAAM,YAAY,4BAA4B,GAAGE,CAAI,IAAI;AAAA,IAC3E;AAEA,aAASmB,IAAc;AACrB,MAAArB,EAAU,MAAM,oBAAoB,eAAeoB,CAAa,GAEhE,WAAW,MAAMd,EAAW,QAAQ,EAAK;AACzC,YAAMiB,IAAQrB,IAAOD;AACrB,MAAIsB,MAAU,KACdC,EAAW,KAAK,MAAMpB,EAAO,MAAM,KAAK,QAAQmB,CAAK,CAAC;AAAA,IACxD;AAEA,mBAAeC,EAAWnnB,GAAQ;AAChC,MAAAhd,EAAK,UAAU;AAAA,QACb,IAAI+iC,EAAO,MAAM;AAAA,QACjB,IAAIA,EAAO,MAAM,GAAG,QAAQ;AAAA,QAC5B,OAAA/lB;AAAA,MACD,CAAA,GAGD,MAAMiC,GAAS,MAAMmkB,EAAUL,EAAO,MAAM,EAAE,CAAC;AAAA,IACjD;AAGA,aAASqB,IAAgB;AACvB,MAAAD,EAAY,GACZhB,EAAW;AAAA,IACb;8BA5JEv9B,EAO2C,OAAA;AAAA,MALzC,KAAI;AAAA,MACJ,OAAKwG,GAAA,CAAC,wBACE62B,EAAU,SAAA,6BAAA,CAAA;AAAA,MACjB,gCAAD,MAAkB;AAAA,MAAA,GAAA,CAAA,SAAA,CAAA;AAAA,MACjB,kBAA0BY,GAAa,CAAA,WAAA,MAAA,CAAA;AAAA,MACvC,eAAuBO,GAAa,CAAA,WAAA,MAAA,CAAA;AAAA;WAN7BpB,EAAgB,KAAA;AAAA;;GCkBvBzB,KAAU;AAAA,EAEb,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACD,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,CAAA3lC,MAAO,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,EAAE,SAASA,CAAG;AAAA,IACzE;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA,IAED,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,cAAc;AAAA,MACZ,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,MAC9B,SAAS;AAAA,IACV;AAAA,IACD,cAAc;AAAA,MACZ,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,MAC9B,SAAS;AAAA,IACV;AAAA;AAAA,IAED,eAAe;AAAA,MACb,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACV;AAAA;AAAA,IAED,eAAe;AAAA,MACb,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,MAC9B,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAAAA,MAAO,CAAC,OAAO,MAAM,EAAE,SAASA,CAAG;AAAA,IAC/C;AAAA,IACD,SAAS;AAAA,MACP,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,MAC9B,SAAS;AAAA,IACV;AAAA;AAAA,IAED,UAAU;AAAA,MACR,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,MAC9B,SAAS;AAAA,IACX;AAAA,EACD;AAAA,EAED,OAAO,CAAC,QAAQ,YAAY;AAAA,EAE5B,MAAMqF,GAAO,EAAE,OAAOojC,GAAY,MAAArkC,EAAG,GAAK;AAExC,UAAMskC,IAAOpoC,GAAW;AAAA,MACtB,MAAM,CAAE;AAAA,MACR,QAAQ,CAAE;AAAA,MACV,OAAO,CAAA;AAAA,IACR,CAAA,GAEKqoC,IAAuBnoC,EAAI,CAAE,CAAA,GAE7BooC,IAAYnnC,EAAS,MAClB,OAAO,OAAOinC,EAAK,KAAK,EAAE,KAAM,EAAC,IAAI,CAAAG,MAAO;AACjD,YAAMC,IAAWC,EAAYF,CAAG;AAChC,aAAOF,EAAqB,MAAMG,CAAQ,KAAKE,GAAmBH,CAAG;AAAA,KACtE,EAAE,KAAK,GAAG,CACZ,GAGKI,IAAoBxnC,EAAS,MAI1B,4BAHO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,EAAE,SAAS4D,EAAM,WAAW,IAC3E,+BAA+BA,EAAM,WAAW,MAChDA,EAAM,WAC8B,EACzC,GAGK6jC,IAAiBznC,EAAS,MAC1B,OAAO4D,EAAM,YAAa,YAAYA,EAAM,aAAa,SAAe,KACrE,yBAA0BA,EAAM,QAAU,EAClD,GAEK8jC,IAAgB1nC,EAAS,MACtB,OAAO,OAAOinC,EAAK,KAAK,EAAE,KAAI,EAAG,KAAKK,CAAW,CACzD;AAKD,aAASK,EAAQC,IAAU,IAAI;AAC7B,YAAMC,IAAM;AAAA,QACV;AAAA,QACA,mBAAmBjkC,EAAM,OAAO;AAAA,QAChCA,EAAM,WAAW;AAAA,QACjBA,EAAM,YAAY;AAAA,MACpB;AAEA,aAAOkhC,GAAE,OAAO;AAAA,QACd,OAAO+C;AAAA,QACP,OAAO,CAACL,EAAkB,OAAOC,EAAe,KAAK;AAAA,MACvD,GAAGG,CAAO;AAAA,IACZ;AAKA,aAASpxB,EAAMoxB,IAAU,IAAI;AAC3B,YAAME,IAAQ;AAAA,QACZ,0BAA0BX,EAAU,KAAK;AAAA,QACzC,iCAAiCF,EAAK,MAAM,KAAK,MAAM;AAAA,QACvD,kCAAkCA,EAAK,MAAM,MAAM,MAAM;AAAA,MAC3D;AAEA,aAAOnC,GAAE,OAAO;AAAA,QACd,OAAO;AAAA,QACP,OAAAgD;AAAA,QACA,MAAMlkC,EAAM;AAAA,QACZ,WAAWA,EAAM;AAAA,QACjB,iBAAiBA,EAAM;AAAA,MACzB,GAAGgkC,CAAO;AAAA,IACZ;AAGA,aAASG,EAAmBH,IAAU,IAAI;AACxC,aAAO9C,GAAE,OAAO,EAAE,OAAO,uBAAsB,GAAG8C,CAAO;AAAA,IAC3D;AAKA,aAASI,EAAeC,IAAO,IAAI;AACjC,aAAOnD,GAAEoD,IAAe;AAAA,QACtB,MAAM;AAAA,QACN,OAAOtkC,EAAM,gBAAgB;AAAA,MAC9B,GAAE,MAAMqkC,CAAI;AAAA,IACf;AAEA,aAASE,IAAwB;AAC/B,aAAOH;AAAA,QACL7xB;AAAA,UACEiyB,GAAMC,CAAQ;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAEA,aAASC,IAAqB;AAC5B,YAAMC,IAAcvB,EAAW,OAAO,EAAE,MAAMvjC,GAASwjC,EAAK,KAAK,EAAG,CAAA;AACpE,aAAOe;AAAA,QACLQ,EAASD,GAAaF,CAAQ;AAAA,MAChC;AAAA,IACF;AAKA,aAASI,EAAaR,IAAO,IAAI;AAC/B,aAAOnD,GAAEoD,IAAe,EAAE,MAAM,UAAU,MAAMD,CAAI;AAAA,IACtD;AAEA,aAASS,IAAsB;AAC7B,YAAMT,IAAOrkC,EAAM,KAAK,IAAI,CAACwS,GAASuyB,MAC7BxyB;AAAA,QACLiyB,GAAMQ,IAAU,EAAE,KAAKxyB,GAAS,UAAAuyB,EAAU,CAAA;AAAA,MAC5C,CACD;AACD,aAAOF,EAAaR,CAAI;AAAA,IAC1B;AAEA,aAASY,IAAmB;AAC1B,YAAMZ,IAAOrkC,EAAM,KAAK,IAAI,CAACwS,GAASuyB,MAAa;AACjD,cAAMJ,IAAcvB,EAAW,KAAK,EAAE,KAAK5wB,GAAS,UAAAuyB,EAAU,CAAA;AAC9D,eAAOH,EAASD,GAAaK,IAAU,EAAE,KAAKxyB,GAAS,UAAAuyB,EAAU,CAAA;AAAA,MAClE,CAAA;AACD,aAAOF,EAAaR,CAAI;AAAA,IAC1B;AAKA,aAASa,EAAeb,IAAO,IAAI;AACjC,aAAOnD,GAAEoD,IAAe;AAAA,QACtB,MAAM;AAAA,QACN,OAAOtkC,EAAM,gBAAgB;AAAA,MAC9B,GAAE,MAAMqkC,CAAI;AAAA,IACf;AAEA,aAASc,IAAqB;AAC5B,YAAMR,IAAcvB,EAAW,OAAO,EAAE,MAAMvjC,GAASwjC,EAAK,KAAK,EAAG,CAAA;AACpE,aAAO6B;AAAA,QACLN,EAASD,GAAaF,CAAQ;AAAA,MAChC;AAAA,IACF;AAKA,aAASlyB,EAAIiyB,IAAQ,IAAI;AACvB,aAAOtD,GAAEkE,IAAU,MAAM,MAAMZ,CAAK;AAAA,IACtC;AAEA,aAASI,EAASD,IAAc,CAAA,GAAIU,GAAQ7F,IAAY,CAAA,GAAI;AAE1D,aADa8F,EAAgBX,GAAa,CAACS,EAAQ,CAAC,EACxC;AAAA,QAAI,CAAAG,MAAQC,GAAwBD,CAAI,IAChDrE,GAAEqE,GAAM,MAAM,MAAMf,GAAMa,GAAQ7F,CAAS,CAAC,IAC5C0B,GAAEqE,CAAI;AAAA,MACV;AAAA,IACF;AAKA,aAASd,EAASjB,IAAM,IAAI;;AAC1B,YAAMmB,KAAczoC,IAAAsnC,EAAI,UAAJ,gBAAAtnC,EAAW,QAAQ,CAAA,GAAI,KAAK,CAAAqpC,MAAQA,EAAK,SAAStE,KAChEwE,IAAUC,GAAWlC,CAAG,GAExBpjC,IAAQ;AAAA,QACZ,OAAOJ,EAAM,YAAY2lC,GAAYnC,CAAG;AAAA,QACvC,wBAAyBA,EAAI,MAAM;AAAA;AAAA,QACpC,GAAGoC,EAAepC,CAAG;AAAA,QACrB,GAAIiC,KAAYA,MAAYzlC,EAAM,WAAY,EAAE,aAAa,GAAGA,EAAM,SAAS,SAAU;AAAA,MAC3F;AAGA,UAAIylC,MAAWd,KAAA,QAAAA,EAAa,WAAU;AACpC,cAAMkB,IAAUlB,EAAY,SAAS,QAAS,EAAC,IAAI,CAAAY,OAC1CA,GAAK,SAASO,KACjBC,GAAWR,IAAM,EAAE,GAAGS,EAAmBxC,CAAG,EAAG,CAAA,IAC/CtC,GAAEqE,EAAI,CACX;AACD,eAAOrE,GAAEyD,GAAavkC,GAAO,MAAMylC,CAAO;AAAA,MAC5C;AAEA,aAAOlB,IACHzD,GAAEyD,GAAavkC,CAAK,IACpB8gC,GAAED,IAAU7gC,GAAO,MAAM;;AAAA,eAAA6lC,EAAWzC,CAAG,OAAKtnC,IAAAsnC,EAAI,UAAJ,gBAAAtnC,EAAW;AAAA,OAAI;AAAA,IACjE;AAEA,aAAS0pC,EAAepC,GAAK;AAC3B,YAAMC,IAAWC,EAAYF,CAAG;AAEhC,UAAI,CAACC,EAAU,QAAO,CAAA;AAEtB,YAAMyC,IAAS1C,EAAI,MAAM,YAAY,KAAKA,EAAI,MAAM,WAC9C2C,IAAS3C,EAAI,MAAM,YAAY,KAAKA,EAAI,MAAM;AAEpD,aAAO;AAAA,QACJ,+BAAgCC;AAAA,QAChC,4BAA6B,CAAC,SAAS,MAAM,EAAE,SAASD,EAAI,MAAM,MAAM,IAAIA,EAAI,MAAM,SAAS;AAAA,QAC/F,gCAAiC0C,MAAW,SAAYlmC,EAAM,gBAAgBkmC;AAAA,QAC9E,gCAAiCC,MAAW,SAAYnmC,EAAM,gBAAgBmmC;AAAA,MACjF;AAAA,IACF;AAEA,aAASzC,EAAYF,GAAK;AACxB,YAAMC,IAAWD,EAAI,MAAM,WAAW,KAAKA,EAAI,MAAM;AACrD,UAAIC,EAAU,QAAOA;AAErB,YAAM2C,IAAY5C,EAAI,MAAM,YAAY,KAAKA,EAAI,MAAM;AACvD,UAAI4C;AACF,cAAM,IAAI,MAAM,oFAAoFA,CAAS,IAAI;AAGnH,UAAKC,EAAgB7C,GAAK,QAAQ,GAClC;AAAA,YAAI,CAACA,EAAI,MAAM,GAAI,OAAM,IAAI,MAAM,6KAAiL;AACpN,eAAOA,EAAI,MAAM;AAAA;AAAA,IACnB;AAEA,aAASwC,EAAmBxC,IAAM,IAAI;AACpC,YAAMiC,IAAUC,GAAWlC,CAAG;AAC9B,aAAO;AAAA,QACL,OAAOxjC,EAAM,YAAYylC,IAAUzlC,EAAM,YAAY;AAAA,QACrD,UAAU,CAAAsmC,MAAcvnC,EAAK,QAAQ,EAAE,SAAA0mC,GAAS,WAAAa,EAAW,CAAA;AAAA,MAC7D;AAAA,IACF;AAEA,aAASL,EAAWzC,IAAM,IAAI;AAE5B,UADgBkC,GAAWlC,CAAG;AAE9B,eAAOtC,GAAE4E,IAAY,EAAE,GAAGE,EAAmBxC,CAAG,KAAK,MAAA;;AAAM,kBAAAtnC,IAAAsnC,EAAI,UAAJ,gBAAAtnC,EAAW;AAAA,SAAI;AAAA,IAC5E;AAEA,aAASwpC,GAAWlC,GAAK;AACvB,YAAMiC,IAAUjC,EAAI,MAAM,UAAU,KAAKA,EAAI,MAAM;AACnD,UAAIiC,EAAS,QAAOA;AACpB,UAAKY,EAAgB7C,GAAK,MAAM,GAChC;AAAA,YAAI,CAACA,EAAI,MAAM,GAAI,OAAM,IAAI,MAAM,qKAAyK;AAC5M,eAAOA,EAAI,MAAM;AAAA;AAAA,IACnB;AAEA,aAASwB,GAASxB,IAAM,IAAIhE,IAAY,CAAA,GAAI;;AAC1C,YAAMmF,KAAczoC,IAAAsnC,EAAI,UAAJ,gBAAAtnC,EAAW,QAAQsjC,GAAW,KAAK,CAAA+F,MAAQA,EAAK,SAASpE,KACvE/gC,IAAQ,EAAE,OAAOJ,EAAM,YAAY2lC,GAAYnC,CAAG,EAAE;AAC1D,aAAOmB,IACHzD,GAAEyD,GAAavkC,CAAK,IACpB8gC,GAAEC,IAAM/gC,GAAO,MAAMmmC,EAAc/G,EAAU,KAAKgE,CAAG,CAAC;AAAA,IAC5D;AAIA,aAASmC,GAAYnC,GAAK;AAGxB,YAAMgD,IAAahD,EAAI,MAAM,aAAa,SACtCxjC,EAAM,WACNwjC,EAAI,MAAM,aAAa,MAAMA,EAAI,MAAM;AAE3C,aAAOA,EAAI,MAAM,aAAa,WAAWgD,KAAc;AAAA,IACzD;AAEA,aAASC,GAAYC,GAAMrB,GAAQ7F,GAAW;AAC5C,UAAI,CAAC6D,EAAK,MAAMqD,CAAI,EAAE,OAAQ;AAC9B,YAAMC,IAAWtD,EAAK,MAAMqD,CAAI,EAAE,IAAI,CAAAlD,MAAO6B,EAAO7B,GAAKhE,CAAS,CAAC;AACnE,aAAO0B,GAAE,OAAO,EAAE,OAAO,wBAAwBwF,CAAI,GAAE,GAAGC,CAAQ;AAAA,IACpE;AAEA,aAASnC,GAAMa,GAAQ7F,IAAY,IAAI;AACrC,aAAO;AAAA,QACLiH,GAAY,QAAQpB,GAAQ7F,CAAS;AAAA,QACrC6D,EAAK,MAAM,OAAO,IAAI,CAAAG,MAAO6B,EAAO7B,GAAKhE,CAAS,CAAC;AAAA,QACnDiH,GAAY,SAASpB,GAAQ7F,CAAS;AAAA,MACxC;AAAA,IACF;AAKA,aAASoH,KAAkB;AACzB,aAAO1F,GAAE2F,IAAiB,EAAE,UAAUC,GAAa,CAAA;AAAA,IACrD;AAGA,aAASA,GAAY,EAAE,IAAAp8B,GAAI,IAAA5O,GAAI,OAAAigB,EAAI,GAAK;AACtC,YAAMgrB,IAAe,OAAO,OAAO1D,EAAK,KAAK,EAAE,OAAO,OAAO,CAACxxB,GAAK2xB,OAAQ;AAEzE,cAAM7iC,KAAM+iC,EAAYF,EAAG,KAAKA,GAAI,MAAM;AAC1C,eAAI7iC,OAAQ7E,KAAMwnC,EAAqB,MAAM3iC,EAAG,KAAKgjC,GAAmBH,EAAG,EAAE,SAAS,IAAI,KAC1F3xB,EAAI,KAAK,EAAE,IAAIlR,IAAK,OAAO,KAAM,CAAA,GAC1BkR;AAAA,SACN,CAAE,CAAA;AAEL,UAAIk1B,EAAa,QAAQ;AACvB,cAAMx0B,IAAM7H,EAAG,QAAQ,eAAe;AACtC,QAAAq8B,EAAa,QAAQ,CAAAvD,OAAO;AAC1B,gBAAMiB,KAAWlyB,EAAI,cAAc,wCAAwCixB,GAAI,EAAE,8BAA8BA,GAAI,EAAE,KAAK;AAC1H,UAAKiB,OACLjB,GAAI,QAAQ,GAAGiB,GAAS,WAAW;AAAA,QACpC,CAAA;AAAA,MACH;AAEA,YAAMuC,IAAU,CAAC,EAAE,IAAAlrC,GAAI,OAAOigB,IAAQ,GAAGA,CAAK,OAAO,OAAQ,GAAK,GAAGgrB,CAAY;AACjF,MAAAC,EAAQ,QAAQ,CAAAxD,MAAQF,EAAqB,MAAME,EAAI,EAAE,IAAIA,EAAI,KAAK,GACtEzkC,EAAK,cAAc,EAAE,QAAQioC,EAAQ,CAAC,GAAG,SAAS,CAAC,GAAGA,CAAO,EAAG,CAAA;AAAA,IAClE;AAQA,aAASxB,GAAwBD,GAAM;AACrC,aAAOA,EAAK,SAASH,MAAY,CAACG,EAAK;AAAA,IACzC;AAGA,aAASgB,EAAch0B,GAAKixB,GAAK;AAG/B,cAFYA,EAAI,MAAM,SAAS,KAAKA,EAAI,MAAM,UAAUA,EAAI,MAAM,MAC7C,IAAI,MAAM,GAAG,EACtB,OAAO,CAAClhC,GAAK3B,MAAQ2B,KAAOA,EAAI3B,CAAG,GAAG4R,CAAG;AAAA,IACvD;AAGA,aAAS8zB,EAAgB7C,GAAKrhC,GAAM;AAClC,YAAMxH,IAAM6oC,EAAI,MAAMrhC,CAAI;AAC1B,aAAOxH,MAAQ,MAAOA,KAAOA,MAAQ;AAAA,IACvC;AAEA,aAASgpC,GAAmBH,GAAK;;AAC/B,eAAOtnC,IAAAsnC,EAAI,UAAJ,gBAAAtnC,EAAW,UAAS8D,EAAM;AAAA,IACnC;AAKA,aAASslC,EAAgB76B,GAAOw8B,IAAQ,IAAI;AAC1C,aAAOx8B,EAAM,OAAO,CAACoH,GAAK0zB,MACpB0B,EAAM,SAAS1B,EAAK,IAAI,IAAU,CAAE,GAAG1zB,GAAK0zB,CAAK,IACjD,MAAM,QAAQA,EAAK,QAAQ,IAAU,CAAE,GAAG1zB,GAAK,GAAGyzB,EAAgBC,EAAK,UAAU0B,CAAK,CAAE,IACrFp1B,GACN,CAAE,CAAA;AAAA,IACP;AAEA,aAASq1B,EAAuB3B,GAAM;;AACpC,YAAM9U,MAAQv0B,IAAAqpC,EAAK,UAAL,gBAAArpC,EAAY,UAASqpC,EAAK,KAAK,MAAM,MAAM;AACzD,aAAKA,EAAK,KAAK,MAAM,MAAM,UAAU9U,CAAK,KACxC7vB,GAAK,oGAAoG6vB,CAAK,IAAI,GAE7G;AAAA,QACL,OAAAA;AAAA,QACA,YAAY6U,EAAgBC,EAAK,SAAS,QAAO,GAAI,CAAClF,EAAQ,CAAC;AAAA,MACjE;AAAA,IACF;AAEA,aAAS8G,EAAiB18B,IAAQ,IAAI;AACpC,YAAM28B,IAAS,CAAA5D,OAAQ;AAAA,QACrB,OAAOA,EAAI,SAAS,EAAE,MAAM,GAAI;AAAA,QAChC,OAAOA,EAAI;AAAA,MACZ;AACD,aAAO/4B,EAAM,OAAO,CAACoH,GAAK0zB,MAAS;AACjC,YAAIA,EAAK,SAASxE,IAAY;AAC5B,gBAAM,EAAE,OAAAtQ,GAAO,YAAA4W,EAAW,IAAIH,EAAuB3B,CAAI;AACzD,iBAAA1zB,EAAI4e,CAAK,IAAI5e,EAAI4e,CAAK,EAAE,OAAO4W,EAAW,IAAID,CAAM,CAAC,GAC9Cv1B;AAAA,QACT;AACA,eAAAA,EAAI,OAAO,KAAKu1B,EAAO7B,CAAI,CAAC,GACrB1zB;AAAA,MACT,GAAG,EAAE,MAAM,CAAE,GAAE,QAAQ,CAAE,GAAE,OAAO,GAAI,CAAA;AAAA,IACxC;AAEA,aAASy1B,GAAmB78B,GAAO;AACjC,aAAOA,EAAM,OAAO,CAACoH,GAAK0zB,MAAS;AAEjC,YAAIA,EAAK,SAASgC;AAChB,iBAAA11B,EAAI,SAAS0zB,GACN1zB;AAGT,YAAI0zB,EAAK,SAASiC;AAChB,iBAAA31B,EAAI,SAAS0zB,GACN1zB;AAGT,YAAI,CAACkvB,IAAYV,EAAQ,EAAE,SAASkF,EAAK,IAAI;AAC3C,iBAAA1zB,EAAI,QAAQ,KAAK0zB,CAAI,GACd1zB;AAIT,cAAM41B,IAASnC,EAAgB,CAACC,CAAI,GAAG,CAACxE,IAAYV,EAAQ,CAAC;AAE7D,eAAAoH,KAAA,QAAAA,EAAQ,SACJ51B,EAAI,UAAU,CAAC,GAAGA,EAAI,SAAS,GAAG41B,CAAM,IACxC51B,EAAI,MAAM,KAAK0zB,CAAI,GAEhB1zB;AAAA,SAEN,EAAE,SAAS,CAAA,GAAI,QAAQ,MAAM,QAAQ,MAAM,OAAO,GAAI,CAAA;AAAA,IAC3D;AAQA,WAAO,MAAM;AACX,YAAM,EAAE,SAAAtD,GAAS,QAAAm5B,GAAQ,QAAAC,GAAQ,OAAAC,EAAM,IAAIN,GAAmBlE,EAAW,QAAS,CAAA;AAElF,aAAAC,EAAK,QAAQ8D,EAAiB54B,CAAO,GAE9Bw1B,EAAQ;AAAA,QACb2D;AAAA,QACAvD,EAAmB;AAAA,UACjBvxB,EAAM;AAAA,YACJwwB,EAAW,SAASsB,EAAqB,IAAEH,EAAuB;AAAA,YAClEnB,EAAW,OAAO6B,EAAmB,IAAEH,EAAqB;AAAA,YAC5D1B,EAAW,UAAU+B,EAAkB;AAAA,UACzC,CAAC;AAAA,UACDyC;AAAA;AAAA,UACA9D,EAAc,SAAS8C,GAAe;AAAA,QACxC,CAAC;AAAA,QACDe;AAAA,MACD,CAAA;AAAA,IACH;AAAA,EACF;AACF,8GC9fME,KAAuB,IACvBC,KAAiB,IACjBC,KAAU;;;;;;;;;;;AAXhB,UAAM/nC,IAAQkE,GAORnF,IAAOoF,GAOP6jC,IAAiB7sC,EAAI,EAAK,GAC1B8sC,IAAkB9sC,EAAI,EAAK,GAC3B+sC,IAAa/sC,EAAI,CAAE,CAAA,GACnBgtC,IAAehtC,EAAI,EAAK,GACxBitC,IAAqBjtC,EAAI,EAAK,GAC9B+kC,IAAS/kC,EAAG,GACZktC,IAAYltC,EAAG,GAEfmtC,IAAoBntC,EAAI,EAAE,GAC1BotC,IAAwBptC,EAAI,EAAK,GACjCqtC,IAAUrtC,EAAI,EAAE,GAEhBstC,IAAiBttC,EAAK,GACtButC,IAAgBvtC,EAAI,CAAE,CAAA,GACtBwtC,IAAiBxtC,EAAK,GACtBytC,IAAaztC,EAAK,GAClB,CAAE0tC,GAAejK,KAAe96B,GAAc,CAAC;AACrD,QAAIglC;AAGJ,UAAMC,IAAe3sC,EAAS,MACxB4D,EAAM,cAAoBwoC,EAAQ,MAAM,UAAU,CAAAQ,MAAKA,EAAE,OAAOhpC,EAAM,WAAW,IAC9E,CACR,GAEKipC,IAAoB7sC,EAAS,MAC1B8rC,EAAW,MAAM,KAAK,CAAAc,MAAKA,EAAE,OAAOhpC,EAAM,WAAW,CAC7D,GAEKkpC,IAAoB9sC,EAAS,MAC1B,GAAGwiC,EAAW,KAAK,UAC3B,GACKuK,IAAmB/sC,EAAS,MACzB,GAAGwiC,EAAW,KAAK,SAC3B,GAEKwK,IAAqBhtC,EAAS,MAAM;;AACxC,aAAO6sC,EAAkB,SAAQ/sC,IAAAssC,EAAQ,MAAMO,EAAa,KAAK,MAAhC,gBAAA7sC,EAAmC,cAAc;AAAA,IACpF,CAAC,GAEKmtC,IAAsBjtC,EAAS,MAC/B6sC,EAAkB,QACpBX,EAAkB,MAAMS,EAAa,KAAK,IAC1CT,EAAkB,MAAMS,EAAa,QAAQ,CAAC,IAC9CjB,KACAC,KAEKF,KAAuBE,EAC/B;AAED,aAASuB,KAAe;;AACtB,UAAIC,IAAa,IACbC,GACAC,KAAiB,GACjBC,KAAmB,IACnBC,KAAa,CAAA;AACjB,WAAKztC,KAAAssC,EAAQ,UAAR,QAAAtsC,GAAe,QAEpB;AAAA,iBAAS+H,KAAI,GAAGA,KAAIukC,EAAQ,MAAM,QAAQvkC,MAAK;AAG7C,cAFAulC,IAAMhB,EAAQ,MAAMvkC,EAAC,GACrBulC,EAAI,aAAa,YAAY,IAAI,GAC7BE,MAAoBzlC,OAAM8kC,EAAa,OAAO;AAChD,YAAAS,EAAI,QAAQ,SAAS,QACrBG,GAAW,KAAKH,CAAG;AACnB;AAAA,UACN;AAGI,cAFAC,KAAiBxlC,KAAIukC,EAAQ,MAAM,SAAS,IAAII,EAAW,QAAQS,EAAoB,QAAQT,EAAW,OAEtGN,EAAkB,MAAMrkC,EAAC,IAAIwlC,IAAgB;AAC/C,YAAAD,EAAI,QAAQ,SAAS,QACrBG,GAAW,KAAKH,CAAG,GACnBD,IAAa,IACbG,KAAmB;AACnB;AAAA,UACN;AACI,UAAAF,EAAI,QAAQ,SAAS,SACrBA,EAAI,aAAa,YAAY,GAAG;AAAA,QACpC;AAEE,QAAApB,EAAmB,QAAQmB,GAC3BrB,EAAW,QAAQyB,IACd3B,EAAe,SAAOhqB,GAAS,MAAMgqB,EAAe,QAAQ,EAAI,GACrEc,IAAwB,WAAW,MAAM;AACvC,UAAK5I,EAAO,UACZ0J,EAAgB,GAChBC,EAAc,GACdtB,EAAsB,QAAQ;AAAA,QAClC,GAAKA,EAAsB,QAAQ,KAAK,GAAI;AAAA;AAAA,IAC5C;AAEA,aAASuB,KAAsB;AAC7B,mBAAahB,CAAqB;AAAA,IACpC;AAEA,aAASiB,KAAU;AACjB,MAAAD,GAAmB,GACnBE,GAAe;AAAA,IACjB;AAEA,aAASC,GAAcC,GAAO;AAC5B,MAAAnrC,EAAK,aAAamrC,CAAK,GACvBnrC,EAAK,qBAAqBmrC,CAAK;AAAA,IACjC;AAEA,aAASC,GAAYC,GAAQ;;AAC3B,YAAMC,KAAcC,MAAAruC,MAAAC,KAAAssC,EAAQ,MAAM4B,CAAM,MAApB,gBAAAluC,GAAuB,0BAAvB,gBAAAD,GAAA,KAAAC,QAAA,gBAAAouC,GAAkD;AACtE,aAAID,MACiBD,MAAW,IAAK9B,EAAkB,MAAM,CAAC,IAAIA,EAAkB,MAAM8B,CAAM,IAAI9B,EAAkB,MAAM8B,IAAS,CAAC,MAChH;AAAA,IACxB;AAEA,aAASG,KAA0B;;AACjC,OAAAruC,IAAAssC,EAAQ,MAAMO,EAAa,KAAK,MAAhC,QAAA7sC,EAAmC,aAAa,iBAAiB,SACjEotC,GAAY;AAAA,IACd;AAEA,aAAS5Z,KAAsB;;AAC7B,OAAAxzB,IAAAusC,EAAe,UAAf,QAAAvsC,EAAsB,SACtBisC,EAAa,QAAQ;AAAA,IACvB;AAEA,aAASqC,KAA4B;AACnC,MAAArC,EAAa,QAAQ,CAACA,EAAa,OAC9BF,EAAgB,UAAOA,EAAgB,QAAQ;AAAA,IACtD;AAEA,aAASwC,EAA2BP,GAAO;;AACzC,MAAA/B,EAAa,QAAQ,KACrBjsC,IAAAusC,EAAe,UAAf,QAAAvsC,EAAsB,SACtB+tC,GAAcC,CAAK;AAAA,IACrB;AAEA,aAASQ,EAAerrC,GAAO;AAC7B,UAAIW,EAAM,WAAY;AAEtB,YAAMwpC,IAAMnqC,EAAM,OAAO,QAAQ,cAAc;AAC/C,UAAI,CAACmqC,KAAOA,EAAI,aAAa,eAAe,MAAM,OAAQ;AAC1D,YAAMU,KAAQV,EAAI,aAAa,IAAI;AACnC,MAAAS,GAAcC,EAAK;AAAA,IACrB;AAEA,aAASS,GAAa7jC,GAAG;AACvB,UAAIA,EAAE,QAAQ,eAAeA,EAAE,QAAQ,cAAc;AACnD,cAAMsjC,IAAS1B,EAAc,MAAM,UAAU,CAAAM,OAAKA,GAAE,OAAOliC,EAAE,OAAO,EAAE;AACtE,YAAIsjC,MAAW,GAAI;AACnB,QAAAtjC,EAAE,eAAc,GAChBA,EAAE,gBAAe,GACjBA,EAAE,QAAQ,cAAc8jC,EAAkBR,CAAM,IAAIS,EAAcT,CAAM;AAAA,MAC5E;AAAA,IACA;AAEA,aAASS,EAAcT,GAAQ;;AAC7B,YAAMU,KAAWV,IAAS,KAAK1B,EAAc,MAAM;AACnD,OAAAxsC,KAAAwsC,EAAc,MAAMoC,CAAO,MAA3B,QAAA5uC,GAA8B;AAAA,IAChC;AAEA,aAAS0uC,EAAkBR,GAAQ;;AACjC,YAAMW,IAAUX,MAAW,IAAI1B,EAAc,MAAM,SAAS,IAAI0B,IAAS;AACzE,OAAAluC,KAAAwsC,EAAc,MAAMqC,CAAO,MAA3B,QAAA7uC,GAA8B;AAAA,IAChC;AAGA,aAAS2tC,IAAiB;;AACxB,YAAMmB,IAAa,SAAS9K,EAAO,MAAM,MAAM,iBAAiB,sBAAsB,CAAC,KAAK,GACtF+K,IAAMrC,EAAW;AACvB,UAAI7+B,KAAW,KACXmhC,OAAWjvC,MAAAC,KAAAwsC,EAAc,UAAd,gBAAAxsC,GAAsB6sC,EAAa,WAAnC,gBAAA9sC,GAA2C,eAAc,GACpEkvC,KAAWhB,GAAYpB,EAAa,KAAK;AAC7C,MAAIX,EAAmB,SAASa,EAAkB,UAChDiC,MAAWZ,KAAA7B,EAAe,UAAf,gBAAA6B,GAAsB,YACjCa,MAAWC,KAAA3C,EAAe,UAAf,gBAAA2C,GAAsB,cAEnCrhC,KAAW,KAAK,IAAI,KAAK,KAAKmhC,KAAWF,KAAcC,IAAM,GAAG,GAAG,GAAG,GACtE/K,EAAO,MAAM,MAAM,YAAY,2BAA2B,GAAG+K,CAAG,IAAI,GACpE/K,EAAO,MAAM,MAAM,YAAY,uBAAuB,GAAGiL,KAAWF,CAAG,EAAE,GACzE/K,EAAO,MAAM,MAAM,YAAY,wBAAwB,GAAGgL,EAAQ,IAAI,GACtEhL,EAAO,MAAM,MAAM,YAAY,qCAAqC,GAAGn2B,EAAQ,IAAI;AAAA,IACrF;AAEA,aAASigC,KAAkB;;AACzB,OAAA/tC,KAAAC,IAAAysC,EAAe,UAAf,gBAAAzsC,EAAsB,eAAtB,QAAAD,EAAA,KAAAC,IACAysC,EAAe,QAAQ;AAAA,IACzB;AAEA,aAAS0C,IAAsB;AAC7B,YAAMC,IAAKt+B,GAAS,MAAM;;AACxB,QAAA47B,EAAW,SAAQ1sC,IAAAgkC,KAAA,gBAAAA,EAAQ,UAAR,gBAAAhkC,EAAe,aAClCotC,GAAY;AAAA,MAChB,GAAK,EAAE;AACL,MAAAX,EAAe,QAAQ,IAAI,eAAe2C,CAAE,GAC5C3C,EAAe,MAAM,QAAQ,SAAS,IAAI,GACtCzI,EAAO,SACTyI,EAAe,MAAM,QAAQzI,EAAO,KAAK;AAAA,IAE7C;AAEA,aAASqL,IAAa;AACpB,MAAA/C,EAAQ,QAAQ,MAAM,KAAKH,EAAU,MAAM,QAAQ,EAAE,OAAO,CAAAp1B,MAAKA,EAAE,SAAS,KAAK;AAAA,IACnF;AAEA,aAASu4B,IAAwB;AAC/B,UAAIC;AAEJ,MAAAjD,EAAQ,MAAM,QAAQ,CAACQ,GAAG/kC,OAAM;AAC9B,QAAAwnC,IAAWzC,EAAE,sBAAuB,EAAC,QAAQjB,IAE7CO,EAAkB,MAAM,KAAKrkC,KAAIwnC,IAAWnD,EAAkB,MAAMrkC,KAAI,CAAC,IAAIwnC,CAAQ;AAAA,MACtF,CAAA;AAAA,IACH;AAEA,aAAS7B,IAAmB;;AAC1B,UAAI8B,IAAO,CAAA;AACX,UAAI,OAAO,SAAW,IAAa,QAAOA;AAC1C,eAASlC,MAAOhB,EAAQ,OAAO;AAC7B,cAAItsC,IAAAstC,GAAI,YAAJ,gBAAAttC,EAAa,YAAW,YAAUD,KAAAutC,GAAI,YAAJ,gBAAAvtC,GAAa,YAAW,MAAMutC,GAAI,aAAa,UAAU,MAAM,KAAM;AAC3G,QAAAkC,EAAK,KAAKlC,EAAG;AAAA,MACjB;AACE,MAAIpB,EAAmB,SAAOsD,EAAK,KAAKxL,EAAO,MAAM,cAAc,qBAAqB,CAAC,GACzFwI,EAAc,QAAQgD;AAAA,IACxB;AAEA,WAAAnqC,EAAM,MAAMvB,EAAM,aAAauqC,EAAuB,GAEtDhjC,GAAU,MAAM;;AACd,UAAI;AACF,QAAAgkC,EAAU,GACVC,EAAqB,GACrBH,EAAmB,GACnBzC,EAAW,QAAQ1I,EAAO,MAAM,sBAAqB,EAAG,OACxDoJ,GAAY,GACPtpC,EAAM,eACT9D,IAAAssC,EAAQ,MAAMO,EAAa,KAAK,MAAhC,QAAA7sC,EAAmC,aAAa,iBAAiB;AAAA,MAEpE,SAAOkZ,GAAK;AACX,gBAAQ,IAAI,aAAaA,CAAG;AAAA,MAChC;AAAA,IACA,CAAC,GAEDlL,GAAY6/B,EAAO,mBAInBplC,EAuDM,OAAA;AAAA,MAtDJ,OAAM;AAAA,eACF;AAAA,MAAJ,KAAIu7B;AAAA,MACH,IAAIh0B,EAAAA,OAAO,MAAMtH,EAAaikC,CAAA;AAAA,MAC/B,kBAAe;AAAA,MACd,iBAAa,CAAGb,EAAc,SAAI;AAAA;MAEnCljC,EASM,OAAA;AAAA,QARJ,OAAM;AAAA,iBACF;AAAA,QAAJ,KAAIujC;AAAA,QACJ,MAAK;AAAA,QACJ,SAAOqC;AAAA,QACP,+BAAU,CAAA5jC,OAAKmjC,GAAcnjC,GAAE,MAAM;AAAA,QACrC,WAAS6jC;AAAA;QAEVxlC,EAAQC,EAAA,QAAA,SAAA;AAAA;MAIVN,EAYS,UAAA;AAAA,QAXN,iBAAeF,EAAUg6B,CAAA;AAAA,QACzB,iBAAeuJ,EAAY;AAAA,QAC5B,OAAM;AAAA,QACL,eAAac,EAAiB,SAAI;AAAA,QAClC,gBAAcb,EAAkB;AAAA,QAChC,IAAIe,EAAgB;AAAA,iBACjB;AAAA,QAAJ,KAAIV;AAAA,QACH,SAAO+B;AAAA;QAER/kC,EAAkCb,EAAA+mC,EAAA,GAAA,EAAZ,MAAK,KAAI,CAAA;AAAA,QAAGvY,EAAA,QAC/BgW,EAAkB,KAAA,GAAA,CAAA;AAAA;MAIvB3jC,EAoBkC4xB,IAAA;AAAA,QAnB/B,aAAW8R,EAAgB;AAAA,QAC3B,gBAAcj9B,EAAAA,OAAO,MAAMtH,EAAaikC,CAAA;AAAA,QACxC,sBAAoB3kC,EAAiB,qBAAI;AAAA,QACzC,eAAaA,EAAU;AAAA,QACvB,IAAIU,EAAUg6B,CAAA;AAAA,QACd,cAAYsK,EAAiB;AAAA,QAC9B,UAAS;AAAA,QACT,WAAA;AAAA,QACC,OAAOf,EAAY;AAAA,QACpB,OAAM;AAAA,QACL,SAAOzY;AAAA,QACP,uBAAoB+a;AAAA;mBAEO,MAAuB;AAAA,kBAAnD9lC,EAK6BsE,IAAA,MAAA6J,GALWo1B,EAAU,OAAA,CAAfc,aAAnC3jC,EAK6BkkB,IAAA;AAAA,YALwB,KAAKyf,GAAE;AAAA,YACzD,OAAOA,GAAE;AAAA,YACT,cAAYE,EAAiB;AAAA;uBAE9B,MAAmB;AAAA,cAAhB9V,EAAAtnB,EAAAk9B,GAAE,WAAW,GAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACxTtB,UAAMhpC,IAAQkE,GAWRgI,IAAS7L,GAAQ,GAGjBs6B,IAAWv+B,EAAS,MAAM4D,EAAM,eAAeA,EAAM,gBAAgBA,EAAM,KAAK,GAChF4rC,IAAUxvC,EAAS,MAAM8P,EAAO,MAAM,GAAGlM,EAAM,KAAK,QAAQ;2BAIhE2E,EAQU,WAAA;AAAA,MAPP,mBAAiBT,EAAK;AAAA,MACtB,eAAay2B,EAAQ;AAAA,MACtB,kBAAe;AAAA,MACd,IAAIiR,EAAO;AAAA,MACZ,MAAK;AAAA;MAELzmC,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;AC3BZ,UAAMpF,IAAQkE,GAWR8H,IAAO5P,EAAS,OACpB,EAAE,CAAC4D,EAAM,QAAQ,sBAAsB,kBAAkB,GAAGA,EAAM,OAAM,EACzE;sBAKDiF,EAAA,GAAAN,EAQE,YARFyD,EAQE;AAAA,MAPA,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,cAAYlE,EAAK;AAAA,MACjB,MAAMgI,EAAM,OAAC,QAAI;AAAA,MACjB,OAAOhI,EAAK,SAAIA,EAAU;AAAA,MAC1B,SAAK6H,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAE,CAAAjF,MAAKyF,EAAAA,2BAA2BzF,EAAE,OAAO,KAAK;AAAA,OAC9CkF,EAAI,KAAA,GAAA,MAAA,IAAAxD,EAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBd,UAAMxI,IAAQkE;AAwCd,IAAA6C,EAAkB/G,GAAO,WAAW,QAAW,6CAA+C;AAM9F,UAAM,CAAEyO,GAAYC,KAAW5K,GAAc,CAAC,GAExC,EAAE,UAAAqK,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAG3D89B,IAAYzvC,EAAS,MAAA;;AAAO,eAAAF,IAAA8D,EAAM,SAASA,EAAM,eAArB,gBAAA9D,EAAkC,WAAU;AAAA,KAAC,GACzEu4B,IAAiBr4B,EAAS,MAAA;;AAAM,eAAAH,KAAAC,IAAA8D,EAAM,UAAN,gBAAA9D,EAAa,SAAb,gBAAAD,EAAA,KAAAC,GAAoB;AAAA,OAAS8D,EAAM;AAAA,KAAK,GACxE6L,IAAUzP,EAAS,MACtB4D,EAAM,SAASA,EAAM,YAAaA,EAAM,QAAQy0B,EAAe,SAAS,MAC1E,GACK3lB,IAAc1S,EAAS,MAAM4D,EAAM,WAAWyO,EAAW,KAAK;sBAKpExJ,EAAA,GAAAN,EA+BM,OA/BNyD,EA+BM,EA/BD,kBAAe,uBAA4BxD,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MACvCjK,EAAK,SAAIc,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,KAAK7D,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC7B,UAAU5K,EAAQ;AAAA,QAClB,UAAUA,EAAQ;AAAA;mBAEnB,MAEO;AAAA,UAFPiB,EAEOC,uBAFP,MAEO;AAAA,gBADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAGZuB,EAWEqmC,IAXF1jC,EAWE;AAAA,QAVC,UAAUlE,EAAQ;AAAA,QAClB,OAAOA,EAAK;AAAA,QACZ,WAASU,EAAM8J,CAAA;AAAA,QACf,IAAIxC,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC5B,aAAa5K,EAAW;AAAA,QACxB,UAAUA,EAAQ;AAAA,QAClB,MAAMA,EAAI;AAAA,QACV,OAAOA,EAAK,SAAIA,EAAU;AAAA,QAC1B,uBAAmB6H,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAU7D,EAAAA,2BAA2B6D,CAAM;AAAA,SACvDxL,EAASwJ,CAAA,CAAA,GAAA,MAAA,IAAA,CAAA,YAAA,SAAA,WAAA,MAAA,eAAA,YAAA,QAAA,OAAA,CAAA;AAAA,MAEGvC,EAAA,SAAW3H,EAAO,gBAAxCmB,EAQEwL,IAAA;AAAA;QAPC,cAAYg7B,EAAS;AAAA,QACrB,YAAU3nC,EAAO;AAAA,QACjB,iBAAeA,EAAQ;AAAA,QACvB,OAAOA,EAAK;AAAA,QACZ,aAAWA,EAAQ;AAAA,QACnB,MAAMA,EAAI,QAAIuwB,EAAc;AAAA,QAC5B,WAAS7vB,EAAM8J,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFpB,UAAM1O,IAAQkE,GA4BR6nC,IAAiB;AAAA,MACrB,WAAWC;AAAA,MACX,UAAUC;AAAA,MACV,OAAOC;AAAA,MACP,eAAeC;AAAA,MACf,eAAeC;AAAA,MACf,SAASC;AAAA,MACT,QAAQC;AAAA,MACR,SAASpjC;AAAA,IACX,GAEM,EAAE,cAAA40B,GAAc,cAAAE,GAAc,WAAAC,EAAW,IAAGJ,GAAS79B,CAAK;AAEhE,aAASusC,EAAQjQ,GAAQhqB,GAAK;AAC5B,aAAAgqB,IAAS2B,EAAU3B,GAAQhqB,CAAG,GACvBy5B,EAAezP,CAAM,KAAK8P;AAAA,IACnC;2BAIAznC,EAyBM,OAAA;AAAA,MAxBH,iBAAeT,EAAK,MAAC;AAAA,MACrB,iBAAeU,EAAYk5B,CAAA;AAAA,MAC3B,kBAAgBl5B,EAAYo5B,CAAA;AAAA,MAC7B,OAAM;AAAA,MACN,kBAAe;AAAA,MACf,MAAK;AAAA;OAEL/4B,EAAA,EAAA,GAAAN,EAgBMsE,IAhBqB,MAAA6J,GAAA5O,EAAA,OAAd,CAAA65B,GAAMzrB,YAAnB3N,EAgBM,OAAA;AAAA,QAfJ,OAAM;AAAA,QACL,eAAaC,EAASq5B,CAAA,EAACF,EAAK,QAAQzrB,CAAG;AAAA,QACvC,KAAKyrB,EAAK,MAAMA,EAAK;AAAA,QACtB,MAAK;AAAA;SAEL94B,EAAA,GAAAI,EAGEE,GAHcgnC,EAAQxO,EAAK,QAAQzrB,CAAG,CAAA,GAAA;AAAA,UACtC,OAAM;AAAA,UACN,MAAK;AAAA;QAEPxN,EAKI,KAAA,MAAA;AAAA,UAJCsuB,EAAAtnB,EAAAiyB,EAAK,SAASA,CAAI,IAAG,KACxB,CAAA;AAAA,UAAAj5B,EAEO,QAFP6D,IAAiC,QAC7BmD,EAAGlH,EAASq5B,CAAA,EAACF,EAAK,QAAQzrB,CAAG,KAAA,aAAA,GAAA,CAAA;AAAA;;;;;ACnEvC,SAASk6B,GAAiB7xC,GAAK;AAC7B,QAAM8xC,IAAO,mCAAmC,KAAK9xC,CAAG,GAClD+xC,IAAc,kCAAkC,KAAK/xC,CAAG,GACxDgyC,IAAO,gDAAgD,KAAKhyC,CAAG,GAC/DiyC,IAAc,+CAA+C,KAAKjyC,CAAG;AAE3E,SAAI8xC,IAAa,SACbC,IAAoB,gBACpBC,IAAa,SACbC,IAAoB,gBACjB;AACT;AAEA,MAAMC,KAAc,CAAClyC,MAAQ,SAASA,GAAK,EAAE;AAgB7C,SAASmyC,GAASnyC,IAAM,IAAI;AAC1B,QAAMoyC,IAAgB;AACtB,MAAIC,GACAC;AAIJ,UAHAtyC,IAAMA,EAAI,WAAWoyC,GAAe,EAAE,EAAE,YAAW,GAE5BP,GAAiB7xC,CAAG,GACrB;AAAA,IACpB,KAAK;AAAA,IACL,KAAK;AACH,MAAAsyC,IAAUJ,GAAYlyC,EAAI,MAAM,EAAE,CAAC,GACnCqyC,IAAQH,GAAYlyC,EAAI,MAAM,GAAG,EAAE,CAAC;AACpC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,YAAMuyC,IAAQvyC,EAAI,MAAM,aAAa,GAC/BwyC,IAAKxyC,EAAI,SAAS,GAAG;AAC3B,MAAAsyC,IAAUJ,GAAYK,EAAM,CAAC,EAAE,MAAM,EAAE,CAAC,GACxCF,IAAQH,GAAYK,EAAM,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,GACrCF,IAAQ,MAAMG,MAAIH,KAAS,KAC3BA,MAAU,MAAM,CAACG,MAAIH,IAAQ,IAC7BA,MAAU,OAAIA,IAAQ;AAC1B;AAAA,EACN;AAEE,SAAO;AAAA,IACL,OAAAA;AAAA,IACA,SAAAC;AAAA,EACJ;AACA;AASO,SAASG,GAAoBzyC,IAAM,IAAI;AAC5C,QAAMoyC,IAAgB;AAEtB,MADApyC,IAAMA,EAAI,WAAWoyC,GAAe,EAAE,GAClC,CAACpyC,EAAK,QAAO;AAEjB,QAAM,CAAEqyC,GAAOC,CAAS,IAAGtyC,EAAI,MAAM,GAAG,GAClC0yC,IAAWR,GAAYG,CAAK,GAC5BM,IAAaT,GAAYI,CAAO,GAChCM,IAAOF,IAAW,KAAK,OAAO;AACpC,SAAI,MAAMA,CAAQ,KAAK,MAAMC,CAAU,KAAKD,IAAW,MAAMC,IAAa,KAAW,KAC9E,GAAGD,IAAW,MAAM,EAAE,IAAIJ,CAAO,IAAIM,CAAI;AAClD;AAoBO,SAASC,GAAkB7yC,IAAM,IAAI;AAC1C,QAAM,EAAE,OAAAqyC,GAAO,SAAAC,EAAS,IAAGH,GAASnyC,CAAG;AACvC,SAAI,MAAMqyC,CAAK,KAAK,MAAMC,CAAO,IAAU,KAEpC,GAAGD,EAAM,SAAU,EAAC,SAAS,GAAG,GAAG,CAAC,IAAIC,EAAQ,SAAU,EAAC,SAAS,GAAG,GAAG,CAAC;AACpF;AC/CA,MAAMQ,KAAW,YACXC,KAAO,QACPC,KAAO,QACPC,KAAO,QACPC,KAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA1Ed,UAAM7tC,IAAQkE;AAkEd,IAAA6C,EAAkB/G,GAAO,WAAW,QAAW,6CAA+C;AAE9F,UAAMjB,IAAOoF,GAQP26B,IAAe3jC,EAAIiyC,GAAoBptC,EAAM,UAAU,CAAC,GACxD/B,IAAU9C,EAAI,CAAE,CAAA,GAChB2yC,IAAY3yC,EAAI,EAAE,GAClB4yC,IAAe5yC,EAAI,EAAK;AAE9B,aAAS6yC,IAAgB;AACvB,YAAM/vC,IAAU,CAAA;AAChB,UAAIgwC,IAAU;AACd,eAAShqC,IAAI,GAAGA,IAAI,MACd,CAAAgqC,GADkBhqC;AAEtB,iBAASiqC,IAAI,GAAGA,IAAI,IAAIA,KAAKluC,EAAM,MAAM;AACvC,gBAAMkR,IAAUi9B,EAAclqC,GAAGiqC,CAAC,GAC5BE,IAAaC,EAAcn9B,CAAO;AACxC,cAAIk9B,MAAeT,IACnB;AAAA,gBAAIS,MAAeR,IAAM;AACvB,cAAAK,IAAU;AACV;AAAA,YACR;AACM,YAAAhwC,EAAQ,KAAK;AAAA,cACX,OAAOmvC,GAAoBl8B,CAAO;AAAA,cAClC,OAAOA;AAAA,YACR,CAAA;AAAA;AAAA,QACP;AAEE,aAAOjT;AAAA,IACT;AAEA,aAASqwC,EAAiBp9B,GAAS;AACjC,aAAKA,IACDlR,EAAM,WAAWkR,IAAUlR,EAAM,UAAgB6tC,KACjD7tC,EAAM,WAAWkR,IAAUlR,EAAM,UAAgB0tC,KACjD1tC,EAAM,cAAc,SAASkR,CAAO,IAAUu8B,KAC3C,KAJc;AAAA,IAKvB;AAEA,aAASY,EAAcn9B,GAAS;AAC9B,cAAQo9B,EAAiBp9B,CAAO,GAAC;AAAA,QAC/B,KAAKw8B;AACH,iBAAOE;AAAA,QACT,KAAKC;AAAA,QACL,KAAKJ;AACH,iBAAOE;AAAA,QACT;AACE,iBAAO;AAAA,MACb;AAAA,IACA;AAEA,aAASQ,EAAcI,GAAMC,GAAQ;AACnC,aAAAD,IAAOA,EAAK,SAAU,EAAC,SAAS,GAAG,GAAG,GACtCC,IAASA,EAAO,SAAU,EAAC,SAAS,GAAG,GAAG,GACnC,GAAGD,CAAI,IAAIC,CAAM;AAAA,IAC1B;AAEA,aAASC,EAAqB9zC,GAAK;AACjC,YAAM+zC,IAAiBlB,GAAkB7yC,CAAG;AAC5C,MAAI+zC,MAAmB1uC,EAAM,eAC3B8+B,EAAa,QAAQsO,GAAoBptC,EAAM,UAAU,IAE3D2uC,EAAqBD,CAAc;AAAA,IACrC;AAEA,aAASE,IAAa;AACpB,MAAA3wC,EAAQ,QAAQ+vC,EAAa;AAAA,IAC/B;AAEA,aAASW,EAAqBj0C,GAAO;AACnC,MAAA27B,EAAS37B,CAAK,GACdqE,EAAK,qBAAqBrE,CAAK;AAAA,IACjC;AAEA,aAAS27B,EAAS37B,GAAO;AAEvB,cADc4zC,EAAiB5zC,CAAK,GACxB;AAAA,QACV,KAAKgzC;AACH,UAAAI,EAAU,QAAQ,uBAAuBV,GAAoBptC,EAAM,OAAO,CAAC,IAC3E+tC,EAAa,QAAQ;AACrB;AAAA,QACF,KAAKF;AACH,UAAAC,EAAU,QAAQ,sBAAsBV,GAAoBptC,EAAM,OAAO,CAAC,IAC1E+tC,EAAa,QAAQ;AACrB;AAAA,QACF,KAAKN;AACH,UAAAK,EAAU,QAAQ,qCAAqC9tC,EAAM,cAAc,IAAI,CAAAgpC,MAAKoE,GAAoBpE,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IACtH+E,EAAa,QAAQ;AACrB;AAAA,QACF;AACE,UAAAD,EAAU,QAAQ,IAClBC,EAAa,QAAQ;AAAA,MAC3B;AAAA,IACA;AAEA,WAAAxmC,GAAUqnC,CAAU,GAEpBrtC,EAAM;AAAA,MACJ,MAAMvB,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,IACd,GAAG4uC,CAAU,GAEbrtC,EAAM;AAAA,MACJ,MAAMvB,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,IACd,GAAG,MAAMq2B,EAASr2B,EAAM,UAAU,CAAC,GAEnCuB,EAAM,MAAMvB,EAAM,YAAY,CAACrF,MAAQ;AACrC,MAAAmkC,EAAa,QAAQ9+B,EAAM,aAAaotC,GAAoBzyC,CAAG,IAAI;AAAA,IACrE,CAAC,GAEDurB,EAAa;AAAA,MACX,eAAe6nB;AAAA,MACf,kBAAkBD;AAAA,IACpB,CAAC,mBAKCzoC,EAgBE2qB,IAAA;AAAA,MAfC,UAAU9rB,EAAQ;AAAA,MAClB,iBAAe46B,EAAY;AAAA,MAC3B,qBAAmB56B,EAAgB;AAAA,MACnC,kBAAgBA,EAAa;AAAA,MAC7B,OAAOA,EAAK,SAAI6pC,EAAY;AAAA,MAC5B,sBAAoB7pC,EAAiB;AAAA,MACrC,eAAaA,EAAU;AAAA,MACvB,WAASA,EAAM;AAAA,MACf,YAAUA,EAAO;AAAA,MACjB,eAAaA,EAAU;AAAA,MACvB,SAASjG,EAAO;AAAA,MAChB,aAAaiG,EAAW;AAAA,MACxB,UAAUA,EAAQ;AAAA,MAClB,mBAAiB;AAAA,MACjB,uBAAmBuqC;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/MxB,UAAMzuC,IAAQkE;AAsEd,IAAA6C,EAAkB/G,GAAO,WAAW,QAAW,6CAA+C;AAI9F,UAAM,CAAEyO,GAAYC,KAAW5K,GAAc,CAAC,GAExC,EAAE,UAAAqK,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAE3D8gC,IAAa1zC,EAAI,IAAI,GAErB86B,IAAmB75B,EAAS,MAAM4D,EAAM,YAAY8tC,EAAU,KAAK,GACnE5X,IAAW95B,EAAS,MAAM4D,EAAM,SAAS+tC,EAAa,KAAK,GAC3Dj/B,IAAc1S,EAAS,MAAM4D,EAAM,WAAWyO,EAAW,KAAK,GAC9D0nB,IAAc/5B,EAAS,MAAM4D,EAAM,QAASk2B,EAAS,SAASD,EAAiB,KAAM,GACrF6X,IAAY1xC,EAAS;;AAAM,cAAAF,IAAA2yC,EAAW,UAAX,gBAAA3yC,EAAkB;AAAA,KAAgB,GAC7D6xC,IAAe3xC,EAAS;;AAAM,cAAAF,IAAA2yC,EAAW,UAAX,gBAAA3yC,EAAkB;AAAA,KAAa;AAEnE,WAAAgqB,EAAa;AAAA,MACX,eAAe6nB;AAAA,MACf,kBAAkBD;AAAA,IACpB,CAAC,cAKD7oC,EAAA,GAAAN,EAwCM,OAxCNyD,EAwCM;AAAA,MAvCJ,aAAU;AAAA,MACV,kBAAe;AAAA,OACPxD,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MAEDjK,EAAK,SAAIc,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,KAAK7D,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC7B,UAAU5K,EAAQ;AAAA,QAClB,UAAUA,EAAQ;AAAA;mBAEnB,MAEO;AAAA,UAFPiB,EAEOC,uBAFP,MAEO;AAAA,gBADFlB,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAGZuB,EAmBEqpC,IAnBF1mC,EAmBE;AAAA,iBAlBI;AAAA,QAAJ,KAAIymC;AAAA,QACH,kBAAgB3qC,EAAa;AAAA,QAC7B,UAAUA,EAAQ;AAAA,QAClB,qBAAmBA,EAAgB;AAAA,QACnC,kBAAgBA,EAAa;AAAA,QAC7B,OAAOgyB,EAAQ;AAAA,QACf,sBAAoBhyB,EAAiB;AAAA,QACrC,eAAaA,EAAU;AAAA,QACvB,WAASU,EAAM8J,CAAA;AAAA,QACf,IAAIxC,EAAAA,OAAO,MAAM4C,EAAW;AAAA,QAC5B,YAAU5K,EAAO;AAAA,QACjB,YAAUA,EAAO;AAAA,QACjB,eAAaA,EAAU;AAAA,QACvB,aAAaA,EAAW;AAAA,QACxB,UAAUA,EAAQ;AAAA,QAClB,MAAMA,EAAI;AAAA,QACV,uBAAmB6H,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqE,MAAU7D,EAAAA,2BAA2B6D,CAAM;AAAA,SACvDxL,EAASwJ,CAAA,CAAA,GAAA,MAAA,IAAA,CAAA,kBAAA,YAAA,qBAAA,kBAAA,SAAA,sBAAA,eAAA,WAAA,MAAA,YAAA,YAAA,eAAA,eAAA,YAAA,MAAA,CAAA;AAAA,SAEnB3I,EAKEoL,IAAA;AAAA,QAJC,OAAOqlB,EAAQ;AAAA,QACf,aAAWD,EAAgB;AAAA,QAC3B,MAAM/xB,EAAI;AAAA,QACV,WAASU,EAAM8J,CAAA;AAAA;aAJMynB,EAAW,KAAA;AAAA;;;ICjI/B4Y,KAAiB5zC,EAAI,CAAE,CAAA;AAEtB,SAAS6zC,KAAW;AACzB,SAAO,EAAE,gBAAAD,GAAc;AACzB;;;;;;ACJA,UAAM/uC,IAAQkE,GAGRnF,IAAOoF,GAGPlE,IAAMR,GAAM,GACZ,EAAE,gBAAAsvC,EAAgB,IAAGC,GAAQ;AAInC,IAAAzzB,GAAQkhB,IAAiB,CAAE,CAAA;AAG3B,QAAIwS,IAAe;AAGnB,UAAMC,IAAa9yC,EAAS,MAAM;AAChC,YAAMmB,IAAQwxC,EAAe,MAAM,QAAQ/uC,EAAM,EAAE;AACnD,aAAOzC,MAAU,KAAK,KAAK,kBAAkBA,CAAK;AAAA,IACpD,CAAC;AAGD,aAASmf,EAAO6Q,GAAS;AAEvB,MAAAwhB,EAAe,QAAQ,CAAC/uC,EAAM,IAAI,GAAG+uC,EAAe,KAAK,GACrD/uC,EAAM,WAAW,MACnBivC,IAAe,WAAW,MAAMhvC,EAAI,MAAMD,EAAM,EAAE,GAAGA,EAAM,QAAQ,IAGrEjB,EAAK,QAAQwuB,CAAO;AAAA,IACtB;AAEA,aAAS5Q,EAAQ4Q,GAAS;AACxB,MAAI0hB,MACF,aAAaA,CAAY,GACzBA,IAAe,OAGjBlwC,EAAK,SAASwuB,CAAO;AAAA,IACvB;AAEA,aAAS4hB,IAAe;AACtB,MAAAJ,EAAe,QAAQA,EAAe,MAAM,OAAO,CAACK,MAAYA,MAAYpvC,EAAM,EAAE;AAAA,IACtF;2BAIAqF,EAmBYof,IAAA;AAAA,MAlBT,IAAI3oB,EAAE;AAAA,MAEP,OAAM;AAAA,MACL,UAAOozC,EAAU,KAAA;AAAA,MAClB,QAAO;AAAA,MACP,kBAAe;AAAA,MACd,gBAAclmC,EAAO;AAAA,MACtB,sBAAA;AAAA,MACA,mBAAA;AAAA,MACA,yBAAA;AAAA,MACA,sBAAmB;AAAA,MACnB,mBAAgB;AAAA,MAChB,MAAK;AAAA,MACJ,QAAM0T;AAAA,MACN,SAAOC;AAAA,MACP,cAAawyB;AAAA;MAEd,SAAAzlC,EAAA,CAAgD,EAhBtC,IAAA5N,GAAI,OAAAe,GAAO,QAAA4B,GAAQ,SAAAG,QAAO;AAAA,QAgBpCuG,EAAgDC,6BAAhC,IAAAtJ,GAAI,OAAAe,GAAO,QAAA4B,GAAQ,SAAAG,EAAO,CAAA,CAAA,CAAA;AAAA;;;;;;;ACtE1C,UAAM6M,IAAgBlL,GAAO,iBAAiB,MAAM;AAAA,IAAE,CAAA;AAEtD,aAAS8uC,IAAY;;AACnB,eAAOpzC,KAAAC,IAAAsL,GAAQ,GAAG,YAAX,gBAAAvL,EAAA,KAAAC,GAAuB,UAAS,KAAK;AAAA,IAChD;2BAIEyI,EAcM,OAAA;AAAA,MAbJ,OAAM;AAAA,MACN,kBAAe;AAAA,MACd,gBAAc0qC,EAAS;AAAA;MAExBlqC,EAQOC,yBARP,MAQO;AAAA,QAPLK,EAMem3B,IAAA;AAAA,UALb,MAAK;AAAA,UACL,YAAA;AAAA,UACC,SAAOh4B,EAAa6G,CAAA;AAAA;qBACtB,MAED,CAAA,GAAAM,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,cAFC,aAED,EAAA;AAAA;;;;;;YCxBCvD,KAAgC;AAAA,EAAC,OAAA;AAAA;;AAAtC,SAAA44B,GAAAh8B,GAAA2G,GAAA;SACe9G,EAAA,GAAAN,EAAA,OAAA6D,IAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACGjB,UAAMxI,IAAQkE;AAuCd,IAAA6C,EAAkB/G,GAAO,mBAAmB,WAAW,GACvD+G,EAAkB/G,GAAO,gBAAgB,OAAO,GAChD+G,EAAkB/G,GAAO,gBAAgB,OAAO;AAEhD,UAAMjB,IAAOoF,GAIP,EAAE,YAAAmD,EAAU,IAAKD,GAAwBrH,CAAK;AAEpD,QAAIsvC,IAAmB;AAGvB,IAAA/zB,GAAQ,WAAWvb,EAAM,OAAO,GAChCub,GAAQ,iBAAiB9P,CAAa;AAGtC,UAAM5G,IAAUtE,GAAO,WAAWP,EAAM,OAAO;AAE/C,aAASyL,IAAgB;AACvB,MAAI6jC,MACF,aAAaA,CAAgB,GAC7BA,IAAmB,OAErBvwC,EAAK,WAAWiB,EAAM,OAAO;AAAA,IAC/B;AAEA,aAASuvC,IAAiB;AACxB,MAAIvvC,EAAM,WAAW,MACnBsvC,IAAmB,WAAW,MAAM;AAClC,QAAA7jC,EAAa;AAAA,MACd,GAAEzL,EAAM,QAAQ,IAGnBjB,EAAK,aAAa;AAAA,IACpB;2BAIEsG,EAkBuB6iB,IAAA;AAAA,MAjBrB,MAAK;AAAA,MACJ,OAAOtjB,EAAU0C,CAAA;AAAA,MACjB,WAAWpD,EAAS;AAAA,MACpB,cAAaqrC;AAAA,MACb,qCAAaxwC,EAAI,aAAA;AAAA;iBAElB,MAUM;AAAA,QAVN+F,EAUM,OAVNsD,EAUM;AAAA,UATJ,OAAM;AAAA,UACN,kBAAe;AAAA,UACd,gBAAclE,EAAO;AAAA,UACrB,cAAYU,EAAU0C,CAAA;AAAA,UACtB,gBAAc1C,EAAOC,CAAA,KAAI;AAAA,UAC1B,MAAK;AAAA,WACGqH,EAAM,MAAA,GAAA;AAAA,UAEd/G,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;AC/FZ,WAAAmW,GAAQ,WAAW,EAAI,cAIvBtW,EAAA,GAAAN,EAEM,OAFN6D,IAEM;AAAA,MADJrD,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;ACAV,UAAM4D,IAAUzI,GAAO,WAAW,MAAS,GAErCwE,IAAO3I,EAAS,MAAM;AAC1B,cAAO4M,GAAO;AAAA,QACZ,KAAK;AACH,iBAAO0C;AAAA,QACT,KAAK;AACH,iBAAO8jC;AAAA,QACT,KAAK;AACH,iBAAO9jC;AAAA,QACT;AACE,iBAAOxC;AAAA,MACf;AAAA,IACG,CAAA;2BAIDvE,EAGM,OAAA;AAAA,MAHD,OAAM;AAAA,MAA6B,kBAAe;AAAA,MAA8B,gBAAcC,EAAOoE,CAAA;AAAA;OACtG/D,EAAA,GAAAI,EAAgEE,GAAhDR,EAAA,KAAI,GAAE,EAAA,OAAM,mCAAiC;AAAA,MAC7DD,EAA0D,OAA1D4D,IAA0D;AAAA,QAAbvD,EAAOC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;ACS1D,UAAMpF,IAAQkE,GAIRurC,IAAiB9zB,GAAe,SAAS,GAEzC1b,IAAMR,GAAM,GACZS,IAASC,GAAK,GAEd8oB,IAAY9tB,EAAI,EAAK,GAErB0uB,IAAaztB,EAAS,MAAM4D,EAAM,MAAME,CAAM,GAE9CwvC,IAAWtzC,EAAS,MAAM,GAAGytB,EAAW,KAAK,oBAAoB,GAEjE8lB,IAA2BvzC,EAAS,MAEnC4D,EAAM,KACM,OAAO,KAAKC,EAAI,gBAAgB,KAAK,EACtC,KAAK,CAAAU,MAAOV,EAAI,gBAAgB,MAAMU,CAAG,EAAE,SAASX,EAAM,EAAE,CAAC,IAFvD,EAGvB,GAEK4vC,IAAkBxzC,EAAS,MACxB,CAACuzC,EAAyB,SAAS,CAAC3vC,EAAM,MAClD,GAEKjC,IAAW3B,EAAS,MAAM;AAC9B,UAAI4D,EAAM,OAAQ,QAAOA,EAAM;AAC/B,UAAI4vC,EAAgB,MAAO,QAAOF,EAAS;AAAA,IAC7C,CAAC;AAED,IAAAnuC,EAAMquC,GAAiB,MAAM;AAC3B,MAAAA,EAAgB,QAAQC,EAAW,IAAKC,EAAc;AAAA,IACxD,CAAC,GAEDvoC,GAAU,MAAM;AAEd,MAAA0hB,EAAU,QAAQ,IAClBjL,GAAS,MAAM4xB,EAAgB,SAASC,EAAa,CAAA;AAAA,IACvD,CAAC,GAEDriC,GAAgBsiC,CAAc;AAM9B,aAASD,IAAc;AACrB,UAAI,CAACJ,EAAe,MAAO;AAC3B,YAAMM,IAAWN,EAAe,MAAM;AACtC,MAAKM,EAAS,OAAIA,EAAS,KAAKL,EAAS;AAAA,IAC3C;AAEA,aAASI,IAAiB;AACxB,UAAI,CAACL,EAAe,MAAO;AAC3B,YAAMM,IAAWN,EAAe,MAAM;AAEtC,MADgBM,EAAS,OAAOL,EAAS,SAC5BK,EAAS,gBAAgB,IAAI;AAAA,IAC5C;;MA7FEtqC,EAYYgf,IAZZrc,EAYY,EAXT,IAAIyhB,EAAA,MAAU,GACP3d,EAAM,QAAA;AAAA,QACd,OAAM;AAAA,QACN,kBAAe;AAAA,QACf,MAAK;AAAA,QACL,MAAK;AAAA,QACJ,QAAQnO,EAAQ;AAAA,QAChB,OAAOgd,EAAK;AAAA,QACZ,OAAO0V,EAAK;AAAA,QACb,mBAAA;AAAA;mBACA,MAAQ;AAAA,UAARtrB,EAAQC,EAAA,QAAA,SAAA;AAAA;;;MAMF6jB,EAAA,SAAa2mB,EAAe,SADpC3qC,EAAA,GAAAN,EAIW,QAJX6D,IAIW,MAAA,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBb,UAAMxI,IAAQkE,GA4BR8rC,IAAmB70C,EAAI,EAAK,GAC5B80C,IAAY90C,EAAI,EAAK,GAErB+0C,IAAsB9zC,EAAS,MAAM;AACzC,UAAI+zC,IAAW;AACf,aAAIF,EAAU,UAERjwC,EAAM,aAAa,SAASA,EAAM,aAAa,WACjDmwC,KAAY,eACHnwC,EAAM,aAAa,UAAUA,EAAM,aAAa,UACzDmwC,KAAY,eAEZA,KAAY,aAGTA;AAAA,IACT,CAAC;AAGD,IAAAj9B,GAAW,CAAC,QAAQ,GAAG,MAAM;AAC3B,MAAI88B,EAAiB,UACnBA,EAAiB,QAAQ,IACzBC,EAAU,QAAQ;AAAA,IAEtB,CAAC;AAED,aAASG,IAAqB;AAC5B,MAAAJ,EAAiB,QAAQ;AAAA,IAC3B;AAEA,aAASK,IAAwB;AAC/B,MAAAL,EAAiB,QAAQ,IAEzBC,EAAU,QAAQ;AAAA,IACpB;2BAIAtrC,EAmBM,OAAA;AAAA,MAlBJ,OAAM;AAAA,MACL,iBAAeT,EAAQ;AAAA,MACxB,kBAAe;AAAA,MACd,cAAYksC;AAAA,MACZ,WAASA;AAAA,MACT,cAAYC;AAAA,MACZ,YAAUA;AAAA;MAEXlrC,EAAQC,EAAA,QAAA,SAAA;AAAA,MACRN,EAQM,OAAA;AAAA,QAPH,UAAOorC,EAAmB,KAAA;AAAA,QAC1B,IAAIhsC,EAAS;AAAA,QACd,MAAK;AAAA;QAELiB,EAEOC,yBAFP,MAEO;AAAA,cADFlB,EAAO,OAAA,GAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC9EhB,UAAMlE,IAAQkE,GAKRsb,IAAQC,GAIbvb,GAAA,YAAA,GAEK8e,IAAcvD,GAAYvb,GAAA,aAG/B,GAEKqM,IAAc;AAAA,MAClB,SAAS+/B;AAAA,IACX,GAEMC,IAAc;AAAA,MAClB,SAASC;AAAA,MACT,SAASF;AAAA,IACX,GAEMpwC,IAASC,GAAK,GACdC,IAAQC,GAAQ,GAEhBowC,IAAgB90B,GAAe,aAAa,GAE5C1b,IAAMR,GAAM,GAEZixC,IAAgBv1C,EAAI,EAAK,GAEzB0uB,IAAaztB,EAAS,MAAM4D,EAAM,MAAME,CAAM,GAE9C0+B,IAAaxiC,EAAS,MAAM,GAAGytB,EAAW,KAAK,WAAW,GAG1D9rB,IAAW3B,EAAS,MAAA;;AAAM,cAAAF,IAAAu0C,EAAc,UAAd,gBAAAv0C,EAAqB,IAAI;AAAA,KAAE,GAErDy0C,IAAe,EAAC,GAAGJ,GAAa,GAAGhgC,EAAW,GAE9CqgC,IAAcx0C,EAAS,MAAMy0C,EAAWF,GAAcvwC,CAAK,CAAC;AAElE,aAASkwC,IAAe;AACtB,MAAArwC,EAAI,KAAK2+B,EAAW,KAAK;AAAA,IAC3B;AAEA,aAAS4R,IAAoB;AAC3B,UAAIE,EAAc,OAAO;AAEvB,QAAAA,EAAc,QAAQ;AACtB;AAAA,MACJ;AACE,MAAAJ,EAAY;AAAA,IACd;AAEA,mBAAeQ,EAAcn2C,GAAK;AAEhC,MAAIqF,EAAM,aACV,MAAMge,GAAQ,GACdgF,EAAY,QAAQhjB,EAAM,eACtBo+B,EAAgB5e,EAAM,KAAK,IAC3BA,EAAM;AAAA,IACZ;AAEA,aAAS4e,EAAgBzjC,GAAK;AAC5B,aAAKA,MACE,OAAOqF,EAAM,gBAAiB,aACjCA,EAAM,aAAarF,CAAG,IACtBA,EAAIqF,EAAM,YAAY;AAAA,IAC5B;AAEA,aAASu+B,IAAU;AACjB,MAAA/e,EAAM,QAAQ,QAEdkxB,EAAc,QAAQ;AAAA,IACxB;;MAIAjrC,EAUqB0pB,IAVrB/mB,EAUqB;AAAA,QATnB,KAAI;AAAA,QACH,UAAUC,EAAQ;AAAA,QAClB,OAAOqI,EAAK;AAAA,QACZ,oBAAkBsZ,EAAc;AAAA,QAChC,IAAIH,EAAU;AAAA,QACd,aAAalZ,EAAW;AAAA,QACxB,iBAAeguB,EAAY;AAAA,SACpBiS,EAAW,OAAA;AAAA,oBACV5tB,EAAW;AAAA,sDAAXA,EAAW,QAAA5S;AAAA,QACnB,SAAOmuB;AAAA;MAQV94B,EA+Bas5B,IAAA;AAAA,QA9BR,QAAQhhC,EAAQ;AAAA,QACjB,OAAKoN,GAAA,CAAC,4BACE6zB,EAAa,aAAA,CAAA;AAAA,QACpB,UAAUhyB,EAAQ;AAAA,QAClB,aAAWsX,EAAQ;AAAA,QACnB,QAAQY,EAAc,iBAAG,SAAS;AAAA,QAClC,cAAYD,EAAS;AAAA,QACrB,mBAAiBC,EAAc;AAAA,QAChC,qBAAA;AAAA,QACC,IAAI0Z,EAAU;AAAA,QACd,SAASzgB,EAAO;AAAA,QAChB,OAAO+gB,EAAa;AAAA,QACpB,aAAW/Z,EAAQ;AAAA,QACnB,UAAUG,EAAQ;AAAA,QACnB,wBAAA;AAAA,QACC,MAAM8Z,EAAY;AAAA,QAClB,gBAAc;AAAA,oBACN5f,EAAK;AAAA;iCAALA,EAAK,QAAApP;AAAA,UAWO0gC;AAAA;QAVb,gBAAc9tB,EAAW;AAAA,uDAAXA,EAAW,QAAA5S;AAAA,QAEhC,cAAarE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAApP,MAAQ4P,EAAAA,qBAAqB5P,CAAI;AAAA,QAC9C,aAAYoP,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAApP,MAAQ4P,EAAAA,oBAAoB5P,CAAI;AAAA,QAC5C,eAAc0G,EAAa;AAAA,QAC3B,cAAaD,EAAY;AAAA,QACzB,SAAO2I,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAApP,MAAQ4P,EAAAA,eAAe5P,CAAI;AAAA,QAClC,QAAMoP,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAApP,MAAQ4P,EAAAA,cAAc5P,CAAI;AAAA,QAChC,SAAOgG,EAAO;AAAA,QACd,sCAAc+tC,EAAa,QAAA;AAAA;mBAE5B,CAA+B,EAVrB,IAAA50C,GAAI,OAAAe,EAAK,MAAA;AAAA,UAUnBsI,EAA+BC,EAAA,QAAA,WAAAq5B,GAAAC,GAAA,EAAf,IAAA5iC,GAAI,OAAAe,EAAK,CAAA,CAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;ACzF7B,UAAMmD,IAAQkE,GAIRsb,IAAQC,GAIbvb,GAAA,YAAA,GAEK,EAAE,UAAAiK,GAAU,WAAAC,EAAW,IAAGL,GAAe,CAAC,SAAS,OAAO,CAAC,GAE3D7N,IAASC,GAAK,GAEd0pB,IAAaztB,EAAS,MAAM4D,EAAM,MAAME,CAAM,GAE9Cm/B,IAAUjjC,EAAS,MAAM,GAAGytB,EAAW,KAAK,QAAQ,GAEpDnb,IAAStS,EAAS,MAAM,GAAGytB,EAAW,KAAK,OAAO,GAElD5a,IAAmB7S,EAAS,MACpB4D,EAAM,SAASA,EAAM,YACnBA,EAAM,QAAQ,EAC7B;sBAxECiF,EAAA,GAAAN,EAoCM,OApCNyD,EAoCM,EApCD,kBAAe,wBAA6BxD,EAAQuJ,CAAA,CAAA,GAAA;AAAA,MAGxC1F,EAAK,SAAIzD,EAAM,OAAC,cAA/BK,EAQU0K,IAAA;AAAA;QAPP,IAAIsvB,EAAO;AAAA,QACX,UAAUh3B,EAAQ;AAAA,QAClB,KAAKwhB,EAAU;AAAA,QACf,UAAU7Z,EAAQ;AAAA;mBACnB,MAEO;AAAA,UAFP7K,EAEOC,uBAFP,MAEO;AAAA,gBADFqD,EAAK,KAAA,GAAA,CAAA;AAAA;;;;MAKZhD,EAYcsrC,IAZd3oC,EAYc;AAAA,QAXX,mBAAiBi3B,EAAO;AAAA,QACxB,UAAUh3B,EAAQ;AAAA,QAClB,OAAOqI,EAAK;AAAA,QACZ,WAAShC,EAAM;AAAA,QACf,IAAImb,EAAU;AAAA,QACd,UAAU7Z,EAAQ;AAAA,SACXpL,EAASwJ,CAAA,GAAA;AAAA,oBACRoR,EAAK;AAAA,sDAALA,EAAK,QAAApP;AAAA;WACgBpL,EAAM,QAAA,CAAlBxD,GAAG+9B;gBAAkBA;AAAA,UACrC,IAAA71B,EAAA,CAD6C81B,MAAS;AAAA,YACtDr6B,EAAwCC,EAAA,QAA3Bm6B,GAAId,GAAAC,GAAUc,CAAS,CAAA,CAAA;AAAA;;;MAKlBvwB,EAAgB,cAAtC5J,EAKsBwL,IAAA;AAAA;QAJnB,iBAAexI,EAAQ;AAAA,QACvB,OAAOqI,EAAK;AAAA,QACZ,aAAWI,EAAQ;AAAA,QACnB,MAAMC,EAAI;AAAA,QACV,WAASrC,EAAM;AAAA;;;;;;;;;;;;;;AC1BtB,UAAM1O,IAAQkE,GAGRnF,IAAOoF,GAGP;AAAA,MACJ,mBAAAmtB;AAAA,MACA,sBAAAU;AAAA,MACA,oBAAAP;AAAA,MACA,YAAAM;AAAA,MACA,YAAAR;AAAA,IACF,IAAIF,GAAmBrxB,CAAK;AAC5B,IAAAyN,GAAc,uBAAuB,CAACd,MAAO;AAC3C,MAAAuW,EAAS,QAAQvW,EAAG;AAAA,IACtB,CAAC;AAGD,UAAMqkC,IAAc71C,EAAI,IAAI,GACtB81C,IAAe91C,EAAI,IAAI,GAGvB+nB,IAAW/nB,EAAI,EAAK,GACpB+1C,IAAoB/1C,EAAI6E,EAAM,SAAS,GAGvCmxC,IAAW/0C,EAAS,MACjB,CAAC4D,EAAM,SAASA,EAAM,YAAY,QAC1C,GAEKoxC,IAAgBh1C,EAAS,MACtB4D,EAAM,YAAY,aAC1B,GAEKqxC,IAAyBj1C,EAAS,MAClC,CAACg1C,EAAc,SAASluB,EAAS,QAAc,KAC5CguB,EAAkB,KAC1B;AAGD,aAASI,IAAqB;AAE5B,UAAIC,IAAc;AAKlB,MAF4BH,EAAc,SAAS,CAACluB,EAAS,SAASguB,EAAkB,QAGtFK,IAAc,SACLvxC,EAAM,QACfuxC,IAAcvxC,EAAM,QACXmxC,EAAS,QAClBI,IAAc,WAEdA,IAAc,YAKZ,OAAO,WAAa,OACtB,SAAS,KAAK,MAAM,YAAY,uBAAuBA,CAAW;AAAA,IAEtE;AAGA,IAAAhqC,GAAU,MAAM;AACd,MAAAkqB,EAAmBzxB,EAAM,cAAc,GAGvCsxC,EAAkB;AAAA,IACpB,CAAC,GAGD/vC,EAAM,MAAMvB,EAAM,SAAS,MAAM;AAC/B,MAAAyxB,EAAmBzxB,EAAM,cAAc;AAAA,IACzC,CAAC,GAGDuB,EAAM0vC,GAAc,CAACO,MAAW;AAC9B,MAAIA,KAAUxxC,EAAM,SAClBwxC,EAAO,MAAM,YAAY,2BAA2BxxC,EAAM,KAAK;AAAA,IAEnE,CAAC,GAEDuB,EAAM,MAAMvB,EAAM,WAAW,CAAC2a,MAAW;AACvC,MAAAu2B,EAAkB,QAAQv2B;AAAA,IAC5B,CAAC,GAKDpZ;AAAA,MAAM,CAAC,MAAM2vC,EAAkB,OAAOC,GAAU,MAAMnxC,EAAM,OAAOoxC,GAAeluB,CAAQ;AAAA,MACxF,MAAM;AACJ,QAAAouB,EAAkB;AAAA,MACtB;AAAA,IACA,GAEA/vC,EAAM,MAAMvB,EAAM,OAAO,CAAC0Y,MAAa;AACrC,MAAIA,KACFs4B,EAAY,MAAM,MAAM,YAAY,2BAA2Bt4B,CAAQ,GAEnEu4B,EAAa,SACfA,EAAa,MAAM,MAAM,YAAY,2BAA2Bv4B,CAAQ,MAG1Es4B,EAAY,MAAM,MAAM,eAAe,yBAAyB,GAE5DC,EAAa,SACfA,EAAa,MAAM,MAAM,eAAe,yBAAyB;AAAA,IAGvE,CAAC,GAED1vC,EAAM,MAAMvB,EAAM,YAAY,CAAC2a,MAAW;AAExC,MAAI,OAAO,WAAa,QAEpBA,KACF,SAAS,KAAK,MAAM,WAAW,UAC/Bq2B,EAAY,MAAM,MAAM,YAAY,cAAc,SAAS,GAC3D,WAAW,MAAM;AACf,QAAAA,EAAY,MAAM,MAAM,YAAY,WAAW,GAAG;AAAA,MACxD,GAAO,CAAC,MAEJ,SAAS,KAAK,MAAM,WAAW,IAC/BA,EAAY,MAAM,MAAM,eAAe,SAAS,GAChD,WAAW,MAAM;AACf,QAAAA,EAAY,MAAM,MAAM,eAAe,YAAY;AAAA,MACzD,GAAO,GAAG;AAAA,IAEV,CAAC;AAGD,aAASze,EAAcC,GAAW;AAChC,MAAAlB,EAAkB,MAAMkB,CAAS,IAAI,CAAClB,EAAkB,MAAMkB,CAAS;AAAA,IACzE;AAEA,aAASif,IAAkB;AACzB,MAAAP,EAAkB,QAAQ,CAACA,EAAkB,OAC7CnyC,EAAK,oBAAoBmyC,EAAkB,KAAK;AAAA,IAClD;2BAIEvsC,EA6GM,OAAA;AAAA,MA7GD,OAAM;AAAA,MAA2B,mBAAiB3E,EAAM,aAAa;AAAA;MAGhEoxC,EAAA,UAAkBluB,EAAQ,cADlCve,EAaS,UAAA;AAAA;iBAXH;AAAA,QAAJ,KAAIssC;AAAA,QACJ,OAAM;AAAA,QACN,MAAK;AAAA,QACJ,kBAAgBC,EAAiB;AAAA,QACjC,OAAOA,EAAiB,QAAA,sBAAA;AAAA,QACxB,kBAAgBG,EAAsB;AAAA,QACtC,eAAaF,EAAQ;AAAA,QACrB,SAAOM;AAAA;QAEgBP,EAAiB,cAAzC7rC,EAAiFT,EAAAoD,EAAA,GAAA;AAAA;UAAtC,OAAM;AAAA,oBACjD3C,EAA8DT,EAAAkD,EAAA,GAAA;AAAA;UAAtC,OAAM;AAAA;;MAGhChD,EA2FM,OAAA;AAAA,QA1FJ,OAAM;AAAA,iBACF;AAAA,QAAJ,KAAIksC;AAAA,QACH,eAAaG,EAAQ;AAAA,QACrB,kBAAgBE,EAAsB;AAAA,QACtC,oBAAkBD,EAAa;AAAA,QAC/B,OAAKtQ,GAAE9gC,EAAM,SAAK,CAAKqxC,EAAsB,QAAA,EAAA,OAAYrxC,EAAM,MAAK,IAAK,MAAS;AAAA;QAGnF8E,EA4EG,MAAA,MAAA;AAAA,UA1EOE,EAAM,OAAA,aAAA,KAAhBC,KAAAN,EAEK,MAFLO,IAEK;AAAA,YADHC,EAA2BC,EAAA,QAAA,aAAA;AAAA;kBAG7BT,EAqEWsE,IAAA,MAAA6J,GArEclO,EAAU2sB,CAAA,GAAA,CAAlBzc,MAAI;;;cAAsB,KAAAA,EAAK;AAAA;gBAGtC5Y,IAAA4Y,EAAK,aAAL,gBAAA5Y,EAAe,UAAM,UAD7ByI,EA4CK,MAAA;AAAA;gBA1CH,OAAM;AAAA,gBACL,mBAAiBmQ,EAAK,eAAgB,CAAAlQ,EAAAmtB,CAAA,EAAWjd,CAAI;AAAA,gBACrD,qBAAmBA,EAAK;AAAA,gBACxB,kBAAgBA,EAAK;AAAA;gBAIb,CAAAA,EAAK,eAAgB,CAAAq8B,EAAA,UAAaE,EAAsB,cADjE1sC,EAWS,UAAA;AAAA;kBATP,OAAM;AAAA,kBACL,iBAAeC,EAAUmtB,CAAA,EAACjd,CAAI;AAAA,kBAC9B,iBAAa,GAAKA,EAAK,EAAE;AAAA,kBACzB,OAAOlQ,EAAoBotB,CAAA,EAACld,CAAI;AAAA,kBACjC,MAAK;AAAA,kBACJ,SAAO,CAAA1E,MAAAmiB,EAAczd,EAAK,EAAE;AAAA;kBAEhBu8B,EAAsB,0BAAnC1sC,EAA2D,QAAAusB,IAAAplB,EAAnBgJ,EAAK,IAAI,GAAA,CAAA;AAAA,kBACjDrP,EAA8Db,EAAA8sC,EAAA,GAAA,EAA/C,OAAM,uCAAsC,CAAA;AAAA;mBAI7D5sC,EAqBK,MAAA;AAAA,kBArBwE,IAAE,GAAKgQ,EAAK,EAAE;AAAA;mBACzF7P,EAAA,EAAA,GAAAN,EAmBKsE,IAnBoB,MAAA6J,GAAAgC,EAAK,WAAnBme,YAAXtuB,EAmBK,MAAA;AAAA,oBAnBoC,KAAKsuB,EAAW;AAAA;oBACvDxtB,EAiBiBytB,IAAA;AAAA,sBAhBd,MAAMD;AAAA,sBACN,QAAQE,EAAM;AAAA,sBACd,mBAAmBxmB,MAAO5N,EAA2B,oBAAA,EAAA,IAAA4N,YAAasmB,GAAU;AAAA,sBAC5E,cAAYA,EAAW;AAAA;iCAExB,MAIE;AAAA,wBAHa,OAAAA,EAAW,QAAI,iBAD9B5tB,EAIET,EAAAU,EAAA,GAAA;AAAA;0BAFA,OAAM;AAAA,0BACL,MAAM2tB,EAAW;AAAA,uDAEpB5tB,EAIEE,GAFK0tB,EAAW,IAAI,GAAA;AAAA;0BACpB,OAAM;AAAA;wBAERnuB,EAAkC,QAAA,MAAAgH,EAAzBmnB,EAAW,IAAI,GAAA,CAAA;AAAA;;;;;kBAlBlB,CAAApN,IAAA/Q,EAAK,eAAelQ,KAAWkQ,CAAI,KAAKu8B,EAAsB,KAAA;AAAA;iCAyB5E1sC,EAmBK,MAAA2uB,IAAA;AAAA,gBAlBH7tB,EAiBiBytB,IAAA;AAAA,kBAhBd,MAAMpe;AAAA,kBACN,QAAQqe,EAAM;AAAA,kBACd,mBAAmBxmB,MAAO5N,EAA2B,oBAAA,EAAA,IAAA4N,YAAamI,GAAI;AAAA,kBACtE,cAAYA,EAAK;AAAA;6BAElB,MAIE;AAAA,oBAHa,OAAAA,EAAK,QAAI,iBADxBzP,EAIET,EAAAU,EAAA,GAAA;AAAA;sBAFA,OAAM;AAAA,sBACL,MAAMwP,EAAK;AAAA,mDAEdzP,EAIEE,GAFKuP,EAAK,IAAI,GAAA;AAAA;sBACd,OAAM;AAAA;oBAERhQ,EAA4B,QAAA,MAAAgH,EAAnBgJ,EAAK,IAAI,GAAA,CAAA;AAAA;;;;;;;QAOf9P,EAAM,OAAA,WAAA,KAAjBC,KAAAN,EAEM,OAFN4uB,IAEM;AAAA,UADJpuB,EAAyBC,EAAA,QAAA,WAAA;AAAA;;;;;"}