@ds-mo/ui 14.28.0 → 14.29.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.
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +27 -17
- package/dist/agent.json +148 -25
- package/dist/angular/ds-button-filled.d.ts +1 -1
- package/dist/angular/ds-button-filled.js +3 -3
- package/dist/angular/ds-button-unfilled.d.ts +1 -1
- package/dist/angular/ds-button-unfilled.js +3 -3
- package/dist/angular/ds-panel-nav.d.ts +1 -1
- package/dist/angular/ds-panel-nav.js +3 -3
- package/dist/angular/ds-panel-tool-header.d.ts +1 -1
- package/dist/angular/ds-panel-tool-header.js +3 -3
- package/dist/angular/ds-panel-tool-search.d.ts +1 -1
- package/dist/angular/ds-panel-tool-search.js +3 -3
- package/dist/angular/ds-table.d.ts +1 -1
- package/dist/angular/ds-table.js +3 -3
- package/dist/angular/ds-tag.d.ts +1 -1
- package/dist/angular/ds-tag.js +3 -3
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-navigation.js +1 -1
- package/dist/components/ds-card-navigation.js.map +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-filter-menu.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js.map +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tool-search.js.map +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table-filter.js +1 -1
- package/dist/components/ds-table-group.js +1 -1
- package/dist/components/ds-table-group.js.map +1 -1
- package/dist/components/ds-table-saved-views.js +1 -1
- package/dist/components/ds-table-saved-views.js.map +1 -1
- package/dist/components/ds-table-search.js +1 -1
- package/dist/components/ds-table-search.js.map +1 -1
- package/dist/components/ds-table-sort.js +1 -1
- package/dist/components/ds-table-sort.js.map +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-table.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-textarea.js +1 -1
- package/dist/components/ds-textarea.js.map +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/p--yvQzZoO.js +2 -0
- package/dist/components/p--yvQzZoO.js.map +1 -0
- package/dist/components/p-B5AZd41L.js +2 -0
- package/dist/components/p-B5AZd41L.js.map +1 -0
- package/dist/components/p-B5eMVBlz.js +2 -0
- package/dist/components/p-B5eMVBlz.js.map +1 -0
- package/dist/components/p-BGnRFtBa.js +2 -0
- package/dist/components/p-BGnRFtBa.js.map +1 -0
- package/dist/components/p-BIDGQ4tc.js +2 -0
- package/dist/components/p-BIDGQ4tc.js.map +1 -0
- package/dist/components/p-BZDQLjE0.js +2 -0
- package/dist/components/p-BZDQLjE0.js.map +1 -0
- package/dist/components/{p-DmYZLH_L.js → p-BdC7wxhu.js} +2 -2
- package/dist/components/{p-DmYZLH_L.js.map → p-BdC7wxhu.js.map} +1 -1
- package/dist/components/p-BfVlFinS.js +2 -0
- package/dist/components/{p-WM1GTEun.js.map → p-BfVlFinS.js.map} +1 -1
- package/dist/components/p-BmRHJ_jo.js +2 -0
- package/dist/components/p-BmRHJ_jo.js.map +1 -0
- package/dist/components/{p-CxbGZJBU.js → p-BwAWZAHk.js} +2 -2
- package/dist/components/{p-8atLxerP.js → p-By5TDnbF.js} +2 -2
- package/dist/components/{p-BdXUd-tK.js → p-CDXcINTO.js} +2 -2
- package/dist/components/{p-BdXUd-tK.js.map → p-CDXcINTO.js.map} +1 -1
- package/dist/components/{p-DGHeKNfG.js → p-CE8gsv7V.js} +2 -2
- package/dist/components/p-CLcwh1kq.js +2 -0
- package/dist/components/p-CLcwh1kq.js.map +1 -0
- package/dist/components/p-CcK3UiTu.js +2 -0
- package/dist/components/{p-NB-SoVpo.js.map → p-CcK3UiTu.js.map} +1 -1
- package/dist/components/p-Cr5vn5JO.js +2 -0
- package/dist/components/{p-CsW_2w-s.js.map → p-Cr5vn5JO.js.map} +1 -1
- package/dist/components/{p-CW7JhWlS.js → p-Crd3PEUx.js} +2 -2
- package/dist/components/{p-CW7JhWlS.js.map → p-Crd3PEUx.js.map} +1 -1
- package/dist/components/{p-Kp8ifB1g.js → p-Ct90k-nz.js} +2 -2
- package/dist/components/{p-C82vesh_.js → p-Cx2dWjaW.js} +2 -2
- package/dist/components/p-CyoLh8su.js +2 -0
- package/dist/components/p-CyoLh8su.js.map +1 -0
- package/dist/components/p-CysCSinT.js +2 -0
- package/dist/components/{p-BdU6FPu4.js.map → p-CysCSinT.js.map} +1 -1
- package/dist/components/p-CzbsTZt7.js.map +1 -1
- package/dist/components/p-D1pPq-y0.js +2 -0
- package/dist/components/{p-BWDbER5T.js.map → p-D1pPq-y0.js.map} +1 -1
- package/dist/components/{p-B3iy9Rl_.js → p-DF8W85Tz.js} +2 -2
- package/dist/components/p-GbtafFds.js +2 -0
- package/dist/components/p-GbtafFds.js.map +1 -0
- package/dist/components/{p-B_NN7k8H.js → p-K39w53Bw.js} +2 -2
- package/dist/components/p-K39w53Bw.js.map +1 -0
- package/dist/components/p-frKsmPQn.js +2 -0
- package/dist/components/{p-CvB76TJn.js.map → p-frKsmPQn.js.map} +1 -1
- package/dist/docs/components.json +188 -6
- package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +11 -3
- package/dist/lib/components/PanelTools/panel-tools-types.d.ts +2 -0
- package/dist/lib/components/ShellApp/shell-app-types.d.ts +2 -0
- package/dist/lib/shell/index.js.map +1 -1
- package/dist/lib/utils/choice-list.d.ts +2 -0
- package/dist/mcp-data/registry/bar-nav.json +7 -2
- package/dist/mcp-data/registry/bar-title.json +8 -3
- package/dist/mcp-data/registry/button-filled.json +26 -5
- package/dist/mcp-data/registry/button-unfilled.json +27 -6
- package/dist/mcp-data/registry/filter-menu.json +7 -2
- package/dist/mcp-data/registry/mobile-section-switcher.json +8 -3
- package/dist/mcp-data/registry/panel-nav.json +27 -6
- package/dist/mcp-data/registry/panel-tool-header.json +23 -2
- package/dist/mcp-data/registry/panel-tool-search.json +23 -2
- package/dist/mcp-data/registry/panel-tools.json +7 -2
- package/dist/mcp-data/registry/registry.json +147 -24
- package/dist/mcp-data/registry/select.json +8 -3
- package/dist/mcp-data/registry/shell-app.json +8 -3
- package/dist/mcp-data/registry/shell-tools.json +7 -2
- package/dist/mcp-data/registry/table-group.json +7 -2
- package/dist/mcp-data/registry/table-saved-views.json +7 -2
- package/dist/mcp-data/registry/table-search.json +7 -2
- package/dist/mcp-data/registry/table-sort.json +7 -2
- package/dist/mcp-data/registry/table.json +24 -3
- package/dist/mcp-data/registry/tag.json +24 -3
- package/dist/styles/table.css +1 -0
- package/dist/types/components/BarTitle/BarTitle.d.ts +3 -0
- package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +11 -3
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +11 -5
- package/dist/types/components/MobileSectionSwitcher/MobileSectionSwitcher.d.ts +2 -0
- package/dist/types/components/PanelNav/PanelNav.d.ts +4 -1
- package/dist/types/components/PanelToolHeader/PanelToolHeader.d.ts +2 -0
- package/dist/types/components/PanelToolSearch/PanelToolSearch.d.ts +2 -0
- package/dist/types/components/PanelTools/panel-tools-types.d.ts +2 -0
- package/dist/types/components/ShellApp/ShellApp.d.ts +1 -0
- package/dist/types/components/ShellApp/shell-app-types.d.ts +2 -0
- package/dist/types/components/Table/Table.d.ts +10 -0
- package/dist/types/components/Table/table-row-view.d.ts +6 -1
- package/dist/types/components/TableSort/TableSort.d.ts +1 -0
- package/dist/types/components/Tag/Tag.d.ts +3 -0
- package/dist/types/components.d.ts +69 -6
- package/dist/types/utils/choice-list.d.ts +2 -0
- package/dist/vue/ds-button-filled.js +1 -0
- package/dist/vue/ds-button-unfilled.js +1 -0
- package/dist/vue/ds-panel-nav.js +1 -0
- package/dist/vue/ds-panel-tool-header.js +1 -0
- package/dist/vue/ds-panel-tool-search.js +1 -0
- package/dist/vue/ds-table.js +1 -0
- package/dist/vue/ds-tag.js +1 -0
- package/package.json +1 -1
- package/dist/components/p-6iF6gdoc.js +0 -2
- package/dist/components/p-6iF6gdoc.js.map +0 -1
- package/dist/components/p-BWDbER5T.js +0 -2
- package/dist/components/p-B_NN7k8H.js.map +0 -1
- package/dist/components/p-BdU6FPu4.js +0 -2
- package/dist/components/p-Bj018KMC.js +0 -2
- package/dist/components/p-Bj018KMC.js.map +0 -1
- package/dist/components/p-BxLF8b8a.js +0 -2
- package/dist/components/p-BxLF8b8a.js.map +0 -1
- package/dist/components/p-C1BJgnHY.js +0 -2
- package/dist/components/p-C1BJgnHY.js.map +0 -1
- package/dist/components/p-C78uTz-n.js +0 -2
- package/dist/components/p-C78uTz-n.js.map +0 -1
- package/dist/components/p-COn7l__5.js +0 -2
- package/dist/components/p-COn7l__5.js.map +0 -1
- package/dist/components/p-CsW_2w-s.js +0 -2
- package/dist/components/p-CvB76TJn.js +0 -2
- package/dist/components/p-D4-RkuER.js +0 -2
- package/dist/components/p-D4-RkuER.js.map +0 -1
- package/dist/components/p-DB_tlJ2d.js +0 -2
- package/dist/components/p-DB_tlJ2d.js.map +0 -1
- package/dist/components/p-NB-SoVpo.js +0 -2
- package/dist/components/p-P9My22Z1.js +0 -2
- package/dist/components/p-P9My22Z1.js.map +0 -1
- package/dist/components/p-WM1GTEun.js +0 -2
- package/dist/components/p-oAbq-DLk.js +0 -2
- package/dist/components/p-oAbq-DLk.js.map +0 -1
- /package/dist/components/{p-CxbGZJBU.js.map → p-BwAWZAHk.js.map} +0 -0
- /package/dist/components/{p-8atLxerP.js.map → p-By5TDnbF.js.map} +0 -0
- /package/dist/components/{p-DGHeKNfG.js.map → p-CE8gsv7V.js.map} +0 -0
- /package/dist/components/{p-Kp8ifB1g.js.map → p-Ct90k-nz.js.map} +0 -0
- /package/dist/components/{p-C82vesh_.js.map → p-Cx2dWjaW.js.map} +0 -0
- /package/dist/components/{p-B3iy9Rl_.js.map → p-DF8W85Tz.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DATE_FILTER_RELATIVE_PRESETS","label","value","days","offset","ISO_DATE_PATTERN","isIsoCalendarDate","test","year","month","day","split","map","Number","date","Date","UTC","getUTCFullYear","getUTCMonth","getUTCDate","shiftIsoCalendarDate","toISOString","slice","dateFilterRelativeValue","preset","dateFilterRangeValue","start","end","ordered","parseDateFilterValue","startsWith","length","some","candidate","kind","rest","FILTER_MENU_WEEKDAYS","MONTH_FORMATTER","Intl","DateTimeFormat","timeZone","DATE_FORMATTER","weekday","filterMenuToday","today","getFullYear","String","getMonth","padStart","getDate","filterMenuCalendarMonth","shiftFilterMenuCalendarMonth","filterMenuCalendarMonthLabel","format","filterMenuCalendarDays","firstOfMonth","firstWeekday","getUTCDay","gridStart","Array","from","_","index","dateValue","inMonth","filterMenuCss","filterMenuId","ICON_SIZE","lg","md","sm","xs","DATE_MODE_TABS","id","RELATIVE_DATE_OPTIONS","FilterMenu","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","open","triggerLabel","showSelectedCount","icon","size","width","hasBorder","activeFill","collapseLabel","ariaLabel","filters","values","matchModes","side","align","sideOffset","TOKEN_CSS_LENGTHS","space050","alignOffset","menuWidth","menuWidthLg","menuLabel","categoriesLabel","clearLabel","searchPlaceholder","noResultsText","footerLayout","initialFocusVisible","shouldRender","closing","positionReady","pos","x","y","focusRingVisible","activeOptionIndex","captionCompact","dateModeByFilter","calendarMonthByFilter","pendingRangeStartByFilter","previewRangeEndByFilter","optionQueryByFilter","generatedId","triggerElement","pendingInitialFocusVisible","closeTimer","hasLoaded","closingSnapshot","position","AnchoredPositionController","getAnchor","resolvedAnchor","getPopup","el","querySelector","getOwnerDocument","ownerDocument","measure","anchor","popup","anchorRect","getBoundingClientRect","sectionInsetPx","resolveCssLengthPx","TOKEN_DEFAULTS","popupWidth","offsetWidth","popupFallbackWidth","popupHeight","offsetHeight","popupFallbackHeight","sideOffsetPx","alignOffsetPx","resolveChoicePopupAlignOffset","viewportPadPx","viewportPad","viewportWidth","window","innerWidth","viewportHeight","innerHeight","collisionRect","resolveAnchoredOverlayBoundaryRect","boundary","apply","onReady","liveUpdate","observeResize","topLayer","interaction","AnchoredOverlayInteractionController","onOutsideActivation","close","componentDidLoad","syncCaptionCompactObserver","onOpenChange","connectedCallback","disconnectedCallback","disconnectCaptionCompactObserver","unobserve","teardownListeners","onCollapseLabelChange","isOpen","setupListeners","schedule","focusInitialCategory","cancel","captureClosingSnapshot","duration","resolveMotionTimeMs","motionShort2","animationDurationShort3","finishClose","setTimeout","onPositionInputChange","handleKeyDown","event","key","preventDefault","tabLeavesPopup","moveFocusAfterTab","shiftKey","anchorId","document","getElementById","usesInternalTrigger","menuFallbackHeight","connect","observe","disconnect","clearTimeout","restoreFocus","focusAnchor","dsOpenChange","emit","dsClose","toggleFromTrigger","detail","handleTriggerKeyDown","matches","hidePopover","dsAfterClose","filter","options","option","Object","fromEntries","entries","isArray","activeFilterId","requestAnimationFrame","focus","selectedFilter","find","selectedCount","totalSelected","reduce","total","activeFilterCount","selectCategory","filterId","dsActiveFilterChange","handleCategoryKeyDown","currentIndex","findIndex","nextIndex","handlePanelKeyDown","handleOptionKeyDown","visibleOptions","selectOption","includes","enabled","optionIndex","isInactive","current","indexOf","next","direction","optionMatchesQuery","query","normalized","trim","toLocaleLowerCase","description","booleanOption","fieldLabel","setOptionQuery","firstEnabled","content","scrollTop","handleOptionSearchKeyDown","toggleMultiple","checked","selected","Set","add","delete","has","dsChange","dateMode","setDateMode","mode","parsed","initialDate","clearCalendarRangePreview","calendarMonth","moveCalendarMonth","selectCalendarDate","pendingStart","previewCalendarRange","focusCalendarDate","targetMonth","handleCalendarDayKeyDown","target","renderRelativeDateOptions","relativeFilter","h","class","role","ChoiceOptionRow","active","usesSubtext","tabIndex","onFocus","onKeyDown","onHover","onSelect","renderDateCalendar","range","previewEnd","previewStart","sort","previewFinish","preferredFocus","focusDate","variant","onDsClick","as","emphasis","color","onMouseLeave","selectedInRange","Boolean","previewInRange","inRange","rangeEdge","textColor","type","onMouseEnter","onClick","renderDateFilter","hasContainer","tabs","onDsChange","stopPropagation","renderOptionSearch","ChoiceSearch","hasFocusBoundary","hasInteractionFill","placeholder","controls","inputRef","undefined","onValueChange","renderNoOptionResults","body","renderOptions","allOptions","choiceListUsesSubtext","subtext","isSelected","leading","presentation","captionIconOnly","captionCompactDisconnect","observeTableCaptionCompact","compact","renderCaptionTooltip","trigger","renderFooter","categoriesClear","dsClear","renderMatchModeFooter","nextMode","dsMatchModeChange","render","state","activeFilter","hasActiveFilters","categoriesClearFooter","textVariant","CONTROL_TEXT_VARIANT","iconSize","popupId","popupStyle","left","top","transform","Math","round","zIndex","visibility","Host","controlWidthClass","ref","element","inputId","name","lineTruncation","popover","style","count","divider","onMouseDown","hasRing","intent","contrast","isInset","rounded"],"sources":["src/wc/utils/date-filter-value.ts","src/wc/components/FilterMenu/filter-menu-calendar.ts","src/wc/components/FilterMenu/FilterMenu.css?tag=ds-filter-menu&encapsulation=scoped","src/wc/components/FilterMenu/FilterMenu.tsx"],"sourcesContent":["export const DATE_FILTER_RELATIVE_PRESETS = [\n { label: 'Today', value: 'today', days: 1, offset: 0 },\n { label: 'Yesterday', value: 'yesterday', days: 1, offset: -1 },\n { label: 'Last 7 days', value: 'last-7-days', days: 7, offset: 0 },\n { label: 'Last 14 days', value: 'last-14-days', days: 14, offset: 0 },\n { label: 'Last 30 days', value: 'last-30-days', days: 30, offset: 0 },\n { label: 'Last 60 days', value: 'last-60-days', days: 60, offset: 0 },\n { label: 'Last 90 days', value: 'last-90-days', days: 90, offset: 0 },\n] as const;\n\nexport type DateFilterRelativePreset = (typeof DATE_FILTER_RELATIVE_PRESETS)[number]['value'];\nexport type DateFilterRelativeValue = `relative:${DateFilterRelativePreset}`;\nexport type DateFilterRangeValue = `range:${string}/${string}`;\nexport type DateFilterValue = DateFilterRelativeValue | DateFilterRangeValue;\n\nexport interface DateFilterRange {\n start: string;\n end: string;\n}\n\nexport type ParsedDateFilterValue =\n | { kind: 'relative'; preset: DateFilterRelativePreset }\n | ({ kind: 'range' } & DateFilterRange);\n\nconst ISO_DATE_PATTERN = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport function isIsoCalendarDate(value: string): boolean {\n if (!ISO_DATE_PATTERN.test(value)) return false;\n const [year, month, day] = value.split('-').map(Number);\n const date = new Date(Date.UTC(year, month - 1, day));\n return (\n date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day\n );\n}\n\nexport function shiftIsoCalendarDate(value: string, days: number): string {\n if (!isIsoCalendarDate(value)) return '';\n const [year, month, day] = value.split('-').map(Number);\n const date = new Date(Date.UTC(year, month - 1, day + days));\n return date.toISOString().slice(0, 10);\n}\n\nexport function dateFilterRelativeValue(preset: DateFilterRelativePreset): DateFilterRelativeValue {\n return `relative:${preset}`;\n}\n\nexport function dateFilterRangeValue(start: string, end: string = start): DateFilterRangeValue {\n const ordered = start <= end ? [start, end] : [end, start];\n return `range:${ordered[0]}/${ordered[1]}`;\n}\n\nexport function parseDateFilterValue(value: unknown): ParsedDateFilterValue | null {\n if (typeof value !== 'string' || !value) return null;\n\n if (value.startsWith('relative:')) {\n const preset = value.slice('relative:'.length) as DateFilterRelativePreset;\n return DATE_FILTER_RELATIVE_PRESETS.some(candidate => candidate.value === preset)\n ? { kind: 'relative', preset }\n : null;\n }\n\n if (value.startsWith('range:')) {\n const [start, end, ...rest] = value.slice('range:'.length).split('/');\n if (rest.length || !isIsoCalendarDate(start) || !isIsoCalendarDate(end)) return null;\n return start <= end ? { kind: 'range', start, end } : { kind: 'range', start: end, end: start };\n }\n\n // Preserve the previous single-date contract as a one-day range.\n return isIsoCalendarDate(value) ? { kind: 'range', start: value, end: value } : null;\n}\n\nexport function normalizeDateFilterValue(value: unknown): DateFilterValue | '' {\n const parsed = parseDateFilterValue(value);\n if (!parsed) return '';\n return parsed.kind === 'relative'\n ? dateFilterRelativeValue(parsed.preset)\n : dateFilterRangeValue(parsed.start, parsed.end);\n}\n\nexport function resolveDateFilterRange(\n value: unknown,\n referenceDate: string\n): DateFilterRange | null {\n if (!isIsoCalendarDate(referenceDate)) return null;\n const parsed = parseDateFilterValue(value);\n if (!parsed) return null;\n if (parsed.kind === 'range') return { start: parsed.start, end: parsed.end };\n\n const preset = DATE_FILTER_RELATIVE_PRESETS.find(candidate => candidate.value === parsed.preset);\n if (!preset) return null;\n const end = shiftIsoCalendarDate(referenceDate, preset.offset);\n return { start: shiftIsoCalendarDate(end, -(preset.days - 1)), end };\n}\n","import { isIsoCalendarDate, shiftIsoCalendarDate } from '../../utils';\n\nexport interface FilterMenuCalendarDay {\n value: string;\n day: number;\n inMonth: boolean;\n label: string;\n}\n\nexport const FILTER_MENU_WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\nconst MONTH_FORMATTER = new Intl.DateTimeFormat('en-US', {\n month: 'long',\n year: 'numeric',\n timeZone: 'UTC',\n});\nconst DATE_FORMATTER = new Intl.DateTimeFormat('en-US', {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n});\n\nexport function filterMenuToday(): string {\n const today = new Date();\n const year = today.getFullYear();\n const month = String(today.getMonth() + 1).padStart(2, '0');\n const day = String(today.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\nexport function filterMenuCalendarMonth(value: string): string {\n return isIsoCalendarDate(value) ? value.slice(0, 7) : filterMenuToday().slice(0, 7);\n}\n\nexport function shiftFilterMenuCalendarMonth(value: string, offset: number): string {\n const [year, month] = value.split('-').map(Number);\n const date = new Date(Date.UTC(year, month - 1 + offset, 1));\n return `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}`;\n}\n\nexport function filterMenuCalendarMonthLabel(value: string): string {\n const [year, month] = value.split('-').map(Number);\n return MONTH_FORMATTER.format(new Date(Date.UTC(year, month - 1, 1)));\n}\n\nexport function filterMenuCalendarDays(value: string): FilterMenuCalendarDay[] {\n const [year, month] = value.split('-').map(Number);\n const firstOfMonth = `${year}-${String(month).padStart(2, '0')}-01`;\n const firstWeekday = new Date(`${firstOfMonth}T00:00:00Z`).getUTCDay();\n const gridStart = shiftIsoCalendarDate(firstOfMonth, -firstWeekday);\n return Array.from({ length: 42 }, (_, index) => {\n const dateValue = shiftIsoCalendarDate(gridStart, index);\n const date = new Date(`${dateValue}T00:00:00Z`);\n return {\n value: dateValue,\n day: date.getUTCDate(),\n inMonth: dateValue.startsWith(`${value}-`),\n label: DATE_FORMATTER.format(date),\n };\n });\n}\n","@import '../../utils/choice-list.css';\n@import '../../utils/chrome-header.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/control-width.css';\n@import '../../utils/select-trigger.css';\n@import '../../utils/search-control.css';\n@import '../../utils/table-caption-control.css';\n\n:host(.filter-menu-host--external-trigger) {\n display: contents;\n}\n\n.filter-menu {\n display: flex;\n min-height: 0;\n flex-direction: column;\n color: var(--color-foreground-secondary);\n}\n\n.filter-menu__body {\n display: grid;\n grid-template-columns: var(--dimension-menu-width-xs) var(--dimension-menu-width-sm);\n min-height: calc(var(--dimension-size-800) * 4 + var(--dimension-space-150));\n max-height: calc(100vh - var(--dimension-size-800) - var(--dimension-size-600));\n}\n\n.filter-menu__category-pane {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n border-inline-end: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n\n.filter-menu__categories {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.filter-menu__category-section {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.filter-menu__category-section.ds-choice-section--divided {\n padding-block-end: var(--dimension-space-050);\n}\n\n.filter-menu__category {\n justify-content: space-between;\n width: 100%;\n border: 0;\n background: transparent;\n color: var(--color-foreground-secondary);\n cursor: default;\n text-align: start;\n}\n\n.filter-menu__category--active {\n color: var(--color-foreground-primary);\n}\n\n.filter-menu__category-dot-box {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ds-control-icon, var(--dimension-iconography-md));\n height: var(--ds-control-icon, var(--dimension-iconography-md));\n pointer-events: none;\n}\n\n.filter-menu__options {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-menu__options-content {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1 1 auto;\n flex-direction: column;\n overflow: auto;\n}\n\n.filter-menu__option-search {\n position: relative;\n flex: 0 0 var(--dimension-size-500);\n min-width: 0;\n min-height: var(--dimension-size-500);\n background: transparent;\n}\n\n.filter-menu__option-search::after {\n content: '';\n position: absolute;\n inset: auto 0 0;\n height: var(--dimension-stroke-width-012);\n background-color: var(--color-border-tertiary);\n pointer-events: none;\n}\n\n.filter-menu__option-search .select-search {\n height: 100%;\n background: transparent;\n}\n\n.filter-menu__options--date,\n.filter-menu__option-list--date,\n.filter-menu__date {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n}\n\n.filter-menu__option-list--date,\n.filter-menu__date {\n flex: 1 1 auto;\n}\n\n.filter-menu__date-header {\n flex: 0 0 var(--dimension-size-500);\n justify-content: center;\n min-block-size: var(--dimension-size-500);\n padding: var(--dimension-space-050);\n background: var(--color-background-secondary);\n}\n\n.filter-menu__date-body {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n flex-direction: column;\n}\n\n.filter-menu__date-relative {\n flex: 1 1 auto;\n}\n\n.filter-menu__calendar {\n display: flex;\n min-height: 0;\n flex-direction: column;\n padding: var(--dimension-space-100);\n}\n\n.filter-menu__calendar-heading {\n display: grid;\n grid-template-columns: var(--dimension-size-400) minmax(0, 1fr) var(--dimension-size-400);\n align-items: center;\n text-align: center;\n}\n\n.filter-menu__calendar-nav--previous {\n justify-self: start;\n}\n\n.filter-menu__calendar-nav--next {\n justify-self: end;\n}\n\n.filter-menu__calendar-weekdays,\n.filter-menu__calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, minmax(0, 1fr));\n column-gap: var(--dimension-space-050);\n}\n\n.filter-menu__calendar-grid {\n row-gap: var(--dimension-space-050);\n}\n\n.filter-menu__calendar-weekdays {\n align-items: center;\n min-height: var(--dimension-size-400);\n margin-block-start: var(--dimension-space-050);\n color: var(--color-foreground-secondary);\n text-align: center;\n}\n\n.filter-menu__calendar-day {\n appearance: none;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 0;\n width: 100%;\n height: var(--dimension-size-400);\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n color: var(--color-foreground-primary);\n cursor: default;\n}\n\n.filter-menu__calendar-day--outside {\n color: var(--color-foreground-tertiary);\n}\n\n.filter-menu__calendar-day--in-range {\n background: var(--color-background-faint-brand);\n color: var(--color-foreground-primary);\n}\n\n/* Pending range preview stays faint while the already-selected start keeps its bold edge. */\n.filter-menu__calendar-day--range-preview {\n background: var(--color-background-faint-brand);\n}\n\n.filter-menu__calendar-day--today {\n color: var(--color-foreground-primary);\n}\n\n.filter-menu__calendar-day--range-edge {\n background: var(--color-background-bold-brand);\n color: var(--color-foreground-on-bold-background-primary);\n}\n\n.filter-menu__footer {\n flex: 0 0 auto;\n}\n\n.filter-menu__footer--categories-clear .ds-choice-footer__content {\n justify-content: flex-start;\n}\n\n.filter-menu__footer--categories-clear[aria-hidden='true']::before {\n visibility: hidden;\n}\n\n.filter-menu__clear {\n color: var(--color-foreground-bold-brand);\n}\n\n.filter-menu__match-mode-footer {\n flex: 0 0 auto;\n}\n\n.filter-menu__match-mode-content {\n justify-content: flex-start;\n padding-inline: calc(\n var(--dimension-space-050) + var(--ds-control-padding-inline, var(--dimension-space-075)) +\n var(--ds-control-label-inset, var(--dimension-space-025))\n );\n}\n\n.filter-menu__match-mode-toggle {\n appearance: none;\n display: inline-flex;\n align-items: center;\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n cursor: default;\n}\n\n@media (forced-colors: active) {\n .filter-menu__category-pane {\n border-inline-end-color: var(--ds-forced-color-content);\n }\n\n .filter-menu__calendar-day--range-edge {\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n type VNode,\n Watch,\n} from '@stencil/core';\nimport {\n CONTROL_TEXT_VARIANT,\n DATE_FILTER_RELATIVE_PRESETS,\n controlWidthClass,\n dateFilterRangeValue,\n dateFilterRelativeValue,\n parseDateFilterValue,\n resolveChoicePopupAlignOffset,\n resolveCssLengthPx,\n resolveMotionTimeMs,\n shiftIsoCalendarDate,\n TOKEN_CSS_LENGTHS,\n TOKEN_DEFAULTS,\n type ControlWidth,\n} from '../../utils';\nimport { observeTableCaptionCompact } from '../../utils/table-caption-compact';\nimport type { AnchoredAlign, AnchoredSide } from '../../utils/anchored-position';\nimport { AnchoredPositionController } from '../../utils/anchored-position-controller';\nimport { AnchoredOverlayInteractionController } from '../../utils/anchored-overlay-interaction-controller';\nimport { resolveAnchoredOverlayBoundaryRect } from '../../utils/anchored-overlay-boundary';\nimport { ChoiceOptionRow, ChoiceSearch } from '../../utils/choice-list-parts';\nimport { choiceListUsesSubtext } from '../../utils/choice-list';\nimport {\n FILTER_MENU_WEEKDAYS,\n filterMenuCalendarDays,\n filterMenuCalendarMonth,\n filterMenuCalendarMonthLabel,\n filterMenuToday,\n shiftFilterMenuCalendarMonth,\n} from './filter-menu-calendar';\n\nexport type FilterMenuFilterKind = 'single' | 'multiple' | 'boolean' | 'date';\nexport type FilterMenuSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type FilterMenuWidth = ControlWidth;\nexport type FilterMenuFooterLayout = 'summary' | 'categories-clear';\nexport type FilterMenuMatchMode = 'any' | 'all';\ntype FilterMenuDateMode = 'range' | 'relative';\n\nexport interface FilterMenuOption {\n label: string;\n value: string;\n description?: string;\n isInactive?: boolean;\n}\n\nexport interface FilterMenuFilter {\n id: string;\n label: string;\n kind: FilterMenuFilterKind;\n options?: FilterMenuOption[];\n description?: string;\n fieldLabel?: string;\n /** Draw a standard menu-section divider after this category. */\n divider?: boolean;\n}\n\nexport type FilterMenuValue = string[] | boolean | string;\nexport type FilterMenuValues = Record<string, FilterMenuValue | undefined>;\nexport type FilterMenuMatchModes = Record<string, FilterMenuMatchMode | undefined>;\n\nexport interface FilterMenuChangeDetail {\n filterId: string;\n value: FilterMenuValue;\n}\n\nexport interface FilterMenuMatchModeChangeDetail {\n filterId: string;\n mode: FilterMenuMatchMode;\n}\n\nlet filterMenuId = 0;\n\nconst ICON_SIZE: Record<FilterMenuSize, 'lg' | 'md' | 'sm' | 'xs'> = {\n lg: 'lg',\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\nconst DATE_MODE_TABS = [\n { id: 'relative', label: 'Relative' },\n { id: 'range', label: 'Range' },\n];\n\nconst RELATIVE_DATE_OPTIONS: FilterMenuOption[] = DATE_FILTER_RELATIVE_PRESETS.map(preset => ({\n label: preset.label,\n value: dateFilterRelativeValue(preset.value),\n}));\n\n@Component({\n tag: 'ds-filter-menu',\n styleUrl: 'FilterMenu.css',\n scoped: true,\n})\nexport class FilterMenu {\n @Element() el!: HTMLElement;\n\n /** Controlled popup visibility. */\n @Prop({ mutable: true }) open: boolean = false;\n /** Select trigger text. */\n @Prop() triggerLabel: string = 'Filters';\n /** Append the active-filter count to the visible trigger label. */\n @Prop() showSelectedCount: boolean = true;\n /** Optional select trigger prefix icon name. */\n @Prop() icon: string | undefined = 'Filters';\n /** Select trigger density. */\n @Prop() size: FilterMenuSize = 'md';\n /** Select trigger width fit. */\n @Prop() width: FilterMenuWidth = 'hug';\n /** Show the surface-aware inset border around the select trigger. */\n @Prop() hasBorder: boolean = true;\n /** Show selected interaction fill when one or more criteria are active. */\n @Prop() activeFill: boolean = false;\n /**\n * Opt into table-caption icon-only chrome below 900px. The trigger omits its\n * visible label and chevron; keep an accessible name via aria-label.\n */\n @Prop({ reflect: true }) collapseLabel: boolean = false;\n /** ID applied to the internal select trigger. */\n @Prop() inputId: string | undefined;\n /** Direct accessible name for the internal select trigger. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n /** Product-owned filter categories and option definitions. */\n @Prop() filters: FilterMenuFilter[] = [];\n /** Controlled values keyed by filter id. */\n @Prop() values: FilterMenuValues = {};\n /** Controlled any/all match mode keyed by multiple-choice filter id. Defaults to any. */\n @Prop() matchModes: FilterMenuMatchModes = {};\n /** Controlled category shown in the option pane. */\n @Prop() activeFilterId: string | undefined;\n /** External trigger element to position against. */\n @Prop() anchor: HTMLElement | undefined;\n /** ID of the external trigger element used for positioning and focus return. */\n @Prop() anchorId: string | undefined;\n /** Explicit collision owner; otherwise the nearest data-ds-overlay-boundary ancestor is used. */\n @Prop() boundary: HTMLElement | undefined;\n /** Preferred popup side; collision handling may flip it. */\n @Prop() side: AnchoredSide = 'bottom';\n /** Cross-axis alignment against the trigger. */\n @Prop() align: AnchoredAlign = 'end';\n /** Gap between trigger and popup — number in px or a TokoMo length. */\n @Prop() sideOffset: number | string = TOKEN_CSS_LENGTHS.space050;\n /** Cross-axis offset — number in px or a TokoMo length. */\n @Prop() alignOffset: number | string = 0;\n /** Popup width. It remains clamped to its collision boundary by the component recipe. */\n @Prop() menuWidth: string = TOKEN_CSS_LENGTHS.menuWidthLg;\n /** Accessible name for the non-modal filter dialog. */\n @Prop() menuLabel: string = 'Filters';\n /** Accessible name for the category tab list. */\n @Prop() categoriesLabel: string = 'Filter categories';\n /** Footer action and date-clear accessible label. */\n @Prop() clearLabel: string = 'Clear';\n /** Placeholder shown in each non-date option search header. */\n @Prop() searchPlaceholder: string = 'Search';\n /** Empty-state text shown when an option search has no matches. */\n @Prop() noResultsText: string = 'No results';\n /** Footer recipe: full-width selected summary or reserved category-pane Clear action. */\n @Prop() footerLayout: FilterMenuFooterLayout = 'summary';\n /** Show a visible focus ring on initial entry after keyboard activation. */\n @Prop() initialFocusVisible: boolean = false;\n\n @State() private shouldRender = false;\n @State() private closing = false;\n @State() private positionReady = false;\n @State() private pos: { x: number; y: number } = { x: 0, y: 0 };\n @State() private focusRingVisible = false;\n @State() private activeOptionIndex = 0;\n @State() private captionCompact = false;\n @State() private dateModeByFilter: Record<string, FilterMenuDateMode> = {};\n @State() private calendarMonthByFilter: Record<string, string> = {};\n @State() private pendingRangeStartByFilter: Record<string, string> = {};\n @State() private previewRangeEndByFilter: Record<string, string> = {};\n @State() private optionQueryByFilter: Record<string, string> = {};\n\n /** Requests a controlled value replacement without closing the popup. */\n @Event() dsChange!: EventEmitter<FilterMenuChangeDetail>;\n /** Requests that the consumer clear every filter value. */\n @Event() dsClear!: EventEmitter<void>;\n /** Requests a controlled any/all mode replacement for a multiple-choice filter. */\n @Event() dsMatchModeChange!: EventEmitter<FilterMenuMatchModeChangeDetail>;\n /** Requests a controlled active-category replacement. */\n @Event() dsActiveFilterChange!: EventEmitter<string>;\n /** Requests that the controlled popup close. */\n @Event() dsClose!: EventEmitter<void>;\n /** Emitted whenever internal select-trigger activation changes popup visibility. */\n @Event() dsOpenChange!: EventEmitter<boolean>;\n /** Emitted after exit motion and rendered popup removal complete. */\n @Event() dsAfterClose!: EventEmitter<void>;\n\n private readonly generatedId = `ds-filter-menu-${++filterMenuId}`;\n private triggerElement: HTMLButtonElement | null = null;\n private pendingInitialFocusVisible = false;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private captionCompactDisconnect: (() => void) | undefined;\n private hasLoaded = false;\n private closingSnapshot: {\n filters: FilterMenuFilter[];\n values: FilterMenuValues;\n matchModes: FilterMenuMatchModes;\n activeFilterId: string | undefined;\n } | null = null;\n\n private readonly position = new AnchoredPositionController({\n getAnchor: () => this.resolvedAnchor,\n getPopup: () => this.el.querySelector<HTMLElement>('.filter-menu-popup'),\n getOwnerDocument: () => this.el.ownerDocument,\n measure: (anchor, popup) => {\n if (!this.open) return null;\n const anchorRect = anchor.getBoundingClientRect();\n const sectionInsetPx = resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n return {\n anchorRect,\n popupWidth: popup.offsetWidth || this.popupFallbackWidth,\n popupHeight: popup.offsetHeight || this.popupFallbackHeight,\n side: this.side,\n align: this.align,\n sideOffsetPx: resolveCssLengthPx(this.sideOffset, TOKEN_DEFAULTS.space050),\n alignOffsetPx: resolveChoicePopupAlignOffset({\n align: this.align,\n alignOffsetPx: resolveCssLengthPx(this.alignOffset, 0),\n sectionInsetPx,\n }),\n viewportPadPx: this.viewportPad,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n collisionRect: resolveAnchoredOverlayBoundaryRect(anchor, this.boundary),\n };\n },\n apply: ({ x, y }) => {\n this.pos = { x, y };\n },\n onReady: () => {\n this.positionReady = true;\n },\n liveUpdate: 'double-frame',\n observeResize: true,\n topLayer: true,\n });\n private readonly interaction = new AnchoredOverlayInteractionController({\n getAnchor: () => this.resolvedAnchor,\n getPopup: () => this.el.querySelector<HTMLElement>('.filter-menu-popup'),\n getOwnerDocument: () => this.el.ownerDocument,\n onOutsideActivation: () => this.close(),\n });\n\n componentDidLoad() {\n this.hasLoaded = true;\n this.syncCaptionCompactObserver();\n if (this.open) this.onOpenChange(true);\n }\n\n connectedCallback() {\n if (!this.hasLoaded) return;\n this.syncCaptionCompactObserver();\n if (this.open) this.onOpenChange(true);\n }\n\n disconnectedCallback() {\n this.disconnectCaptionCompactObserver();\n this.position.unobserve();\n this.teardownListeners();\n }\n\n @Watch('collapseLabel')\n onCollapseLabelChange() {\n this.syncCaptionCompactObserver();\n }\n\n @Watch('open')\n onOpenChange(isOpen: boolean) {\n if (isOpen) {\n this.teardownListeners();\n this.closingSnapshot = null;\n this.shouldRender = true;\n this.closing = false;\n this.positionReady = false;\n this.focusRingVisible = this.pendingInitialFocusVisible || this.initialFocusVisible;\n this.setupListeners();\n this.position.schedule(() => this.focusInitialCategory());\n return;\n }\n\n if (!this.shouldRender) return;\n this.position.cancel();\n this.captureClosingSnapshot();\n this.closing = true;\n this.teardownListeners();\n const duration = resolveMotionTimeMs(\n TOKEN_DEFAULTS.motionShort2,\n TOKEN_DEFAULTS.animationDurationShort3\n );\n if (duration <= 0) {\n this.finishClose();\n return;\n }\n this.closeTimer = setTimeout(() => this.finishClose(), duration);\n }\n\n @Watch('anchor')\n @Watch('anchorId')\n @Watch('boundary')\n @Watch('side')\n @Watch('align')\n @Watch('sideOffset')\n @Watch('alignOffset')\n @Watch('menuWidth')\n onPositionInputChange() {\n if (this.open) this.position.schedule();\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (!this.shouldRender || this.closing) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n return;\n }\n if (event.key !== 'Tab' || !this.tabLeavesPopup(event)) return;\n event.preventDefault();\n this.close(false);\n this.interaction.moveFocusAfterTab(event.shiftKey);\n }\n\n private get resolvedAnchor(): HTMLElement | null {\n if (this.anchor) return this.anchor;\n if (this.anchorId) return document.getElementById(this.anchorId);\n return this.triggerElement;\n }\n\n private get usesInternalTrigger(): boolean {\n return !this.anchor && !this.anchorId;\n }\n\n private get viewportPad(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n }\n\n private get popupFallbackWidth(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.menuWidthLg, TOKEN_DEFAULTS.menuWidthLg);\n }\n\n private get popupFallbackHeight(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.menuFallbackHeight, TOKEN_DEFAULTS.menuFallbackHeight);\n }\n\n private setupListeners() {\n this.interaction.connect();\n this.position.observe();\n }\n\n private teardownListeners() {\n this.position.unobserve();\n this.interaction.disconnect();\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private close(restoreFocus = true) {\n this.captureClosingSnapshot();\n if (restoreFocus) this.interaction.focusAnchor();\n this.dsOpenChange.emit(false);\n this.dsClose.emit();\n this.open = false;\n this.onOpenChange(false);\n }\n\n private toggleFromTrigger(event: MouseEvent) {\n if (this.open) {\n this.close();\n return;\n }\n this.pendingInitialFocusVisible = event.detail === 0;\n this.open = true;\n this.dsOpenChange.emit(true);\n this.onOpenChange(true);\n }\n\n private handleTriggerKeyDown(event: KeyboardEvent) {\n if (event.key !== 'ArrowDown' || this.open) return;\n event.preventDefault();\n this.pendingInitialFocusVisible = true;\n this.open = true;\n this.dsOpenChange.emit(true);\n this.onOpenChange(true);\n }\n\n private finishClose() {\n const popup = this.el.querySelector<HTMLElement>('.filter-menu-popup');\n if (popup?.matches(':popover-open')) popup.hidePopover();\n this.shouldRender = false;\n this.closing = false;\n this.closingSnapshot = null;\n this.closeTimer = null;\n this.dateModeByFilter = {};\n this.calendarMonthByFilter = {};\n this.pendingRangeStartByFilter = {};\n this.previewRangeEndByFilter = {};\n this.optionQueryByFilter = {};\n this.dsAfterClose.emit();\n }\n\n private captureClosingSnapshot() {\n if (this.closingSnapshot) return;\n this.closingSnapshot = {\n filters: this.filters.map(filter => ({\n ...filter,\n options: filter.options?.map(option => ({ ...option })),\n })),\n values: Object.fromEntries(\n Object.entries(this.values).map(([key, value]) => [\n key,\n Array.isArray(value) ? [...value] : value,\n ])\n ),\n matchModes: { ...this.matchModes },\n activeFilterId: this.activeFilterId,\n };\n }\n\n private focusInitialCategory() {\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>('.filter-menu__category[tabindex=\"0\"]')?.focus();\n this.pendingInitialFocusVisible = false;\n });\n }\n\n private tabLeavesPopup(event: KeyboardEvent): boolean {\n return this.interaction.tabLeavesPopup(event);\n }\n\n private selectedFilter(filters: FilterMenuFilter[], activeFilterId: string | undefined) {\n return filters.find(filter => filter.id === activeFilterId) ?? filters[0];\n }\n\n private selectedCount(filter: FilterMenuFilter, values: FilterMenuValues): number {\n const value = values[filter.id];\n if (filter.kind === 'multiple') return Array.isArray(value) ? value.length : 0;\n if (filter.kind === 'boolean') return value === true ? 1 : 0;\n return typeof value === 'string' && value.length > 0 ? 1 : 0;\n }\n\n private totalSelected(filters: FilterMenuFilter[], values: FilterMenuValues): number {\n return filters.reduce((total, filter) => total + this.selectedCount(filter, values), 0);\n }\n\n private activeFilterCount(filters: FilterMenuFilter[], values: FilterMenuValues): number {\n return filters.filter(filter => this.selectedCount(filter, values) > 0).length;\n }\n\n private selectCategory(filterId: string, focus = false) {\n this.activeOptionIndex = 0;\n this.dsActiveFilterChange.emit(filterId);\n if (!focus) return;\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>(`[data-filter-category=\"${filterId}\"]`)?.focus();\n });\n }\n\n private handleCategoryKeyDown(\n event: KeyboardEvent,\n filters: FilterMenuFilter[],\n filterId: string\n ) {\n const currentIndex = filters.findIndex(filter => filter.id === filterId);\n let nextIndex: number;\n if (event.key === 'ArrowDown') nextIndex = (currentIndex + 1) % filters.length;\n else if (event.key === 'ArrowUp')\n nextIndex = (currentIndex - 1 + filters.length) % filters.length;\n else if (event.key === 'Home') nextIndex = 0;\n else if (event.key === 'End') nextIndex = filters.length - 1;\n else if (event.key === 'ArrowRight') {\n event.preventDefault();\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(\n '.filter-menu__options [role=\"option\"], .filter-menu__options [data-date-option], .filter-menu__options input'\n )\n ?.focus();\n });\n return;\n } else return;\n\n event.preventDefault();\n this.focusRingVisible = true;\n this.selectCategory(filters[nextIndex].id, true);\n }\n\n private handlePanelKeyDown(event: KeyboardEvent, filterId: string) {\n if (event.key !== 'ArrowLeft') return;\n event.preventDefault();\n this.el.querySelector<HTMLElement>(`[data-filter-category=\"${filterId}\"]`)?.focus();\n }\n\n private handleOptionKeyDown(\n event: KeyboardEvent,\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n index: number,\n values: FilterMenuValues,\n visibleOptions: FilterMenuOption[] = filter.options ?? []\n ) {\n if (event.key === 'ArrowLeft') {\n this.handlePanelKeyDown(event, filter.id);\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.selectOption(filter, option, values);\n return;\n }\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n event.preventDefault();\n const enabled = visibleOptions\n .map((candidate, optionIndex) => ({ candidate, optionIndex }))\n .filter(({ candidate }) => !candidate.isInactive)\n .map(({ optionIndex }) => optionIndex);\n if (!enabled.length) return;\n const current = enabled.indexOf(index);\n let next: number;\n if (event.key === 'Home') next = enabled[0];\n else if (event.key === 'End') next = enabled[enabled.length - 1];\n else {\n const direction = event.key === 'ArrowDown' ? 1 : -1;\n const start = current >= 0 ? current : direction === 1 ? -1 : 0;\n next = enabled[(start + direction + enabled.length) % enabled.length];\n }\n this.activeOptionIndex = next;\n this.focusRingVisible = true;\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(`#${this.generatedId}-${filter.id}-option-${next}`)\n ?.focus();\n });\n }\n\n private optionMatchesQuery(option: FilterMenuOption, query: string): boolean {\n const normalized = query.trim().toLocaleLowerCase();\n if (!normalized) return true;\n return `${option.label} ${option.description ?? ''}`.toLocaleLowerCase().includes(normalized);\n }\n\n private visibleOptions(\n filter: FilterMenuFilter,\n query = this.optionQueryByFilter[filter.id] ?? ''\n ) {\n if (filter.kind === 'boolean') {\n const option = this.booleanOption(filter);\n return this.optionMatchesQuery(option, query) ? [option] : [];\n }\n return (filter.options ?? []).filter(option => this.optionMatchesQuery(option, query));\n }\n\n private booleanOption(filter: FilterMenuFilter): FilterMenuOption {\n return {\n label: filter.fieldLabel ?? filter.label,\n value: 'true',\n description: filter.description,\n };\n }\n\n private setOptionQuery(filter: FilterMenuFilter, value: string) {\n const visibleOptions = this.visibleOptions(filter, value);\n const firstEnabled = visibleOptions.findIndex(option => !option.isInactive);\n this.activeOptionIndex = firstEnabled;\n this.focusRingVisible = false;\n this.optionQueryByFilter = { ...this.optionQueryByFilter, [filter.id]: value };\n requestAnimationFrame(() => {\n const content = this.el.querySelector<HTMLElement>('.filter-menu__options-content');\n if (content) content.scrollTop = 0;\n this.position.schedule();\n });\n }\n\n private handleOptionSearchKeyDown(event: KeyboardEvent, filter: FilterMenuFilter) {\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n const visibleOptions = this.visibleOptions(filter);\n const enabled = visibleOptions\n .map((option, index) => ({ option, index }))\n .filter(({ option }) => !option.isInactive)\n .map(({ index }) => index);\n if (!enabled.length) return;\n event.preventDefault();\n const next = event.key === 'ArrowDown' ? enabled[0] : enabled[enabled.length - 1];\n this.activeOptionIndex = next;\n this.focusRingVisible = true;\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(`#${this.generatedId}-${filter.id}-option-${next}`)\n ?.focus();\n });\n }\n\n private toggleMultiple(\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n checked: boolean,\n values: FilterMenuValues\n ) {\n if (option.isInactive) return;\n const current = Array.isArray(values[filter.id]) ? (values[filter.id] as string[]) : [];\n const selected = new Set(current);\n if (checked) selected.add(option.value);\n else selected.delete(option.value);\n const ordered = (filter.options ?? [])\n .map(candidate => candidate.value)\n .filter(value => selected.has(value));\n this.dsChange.emit({ filterId: filter.id, value: ordered });\n }\n\n private selectOption(\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n values: FilterMenuValues\n ) {\n if (option.isInactive) return;\n if (filter.kind === 'single') {\n this.dsChange.emit({ filterId: filter.id, value: option.value });\n return;\n }\n const selected = Array.isArray(values[filter.id])\n ? (values[filter.id] as string[]).includes(option.value)\n : false;\n this.toggleMultiple(filter, option, !selected, values);\n }\n\n private dateMode(filterId: string, value: FilterMenuValue | undefined): FilterMenuDateMode {\n return this.dateModeByFilter[filterId] ?? parseDateFilterValue(value)?.kind ?? 'relative';\n }\n\n private setDateMode(filter: FilterMenuFilter, value: FilterMenuValue | undefined, mode: string) {\n if (mode !== 'range' && mode !== 'relative') return;\n this.dateModeByFilter = { ...this.dateModeByFilter, [filter.id]: mode };\n this.activeOptionIndex = 0;\n if (mode === 'range' && !this.calendarMonthByFilter[filter.id]) {\n const parsed = parseDateFilterValue(value);\n const initialDate = parsed?.kind === 'range' ? parsed.start : filterMenuToday();\n this.calendarMonthByFilter = {\n ...this.calendarMonthByFilter,\n [filter.id]: filterMenuCalendarMonth(initialDate),\n };\n }\n if (mode === 'relative' && this.pendingRangeStartByFilter[filter.id]) {\n const next = { ...this.pendingRangeStartByFilter };\n delete next[filter.id];\n this.pendingRangeStartByFilter = next;\n }\n if (mode === 'relative') this.clearCalendarRangePreview(filter.id);\n }\n\n private calendarMonth(filterId: string, value: FilterMenuValue | undefined): string {\n const parsed = parseDateFilterValue(value);\n const initialDate = parsed?.kind === 'range' ? parsed.start : filterMenuToday();\n return this.calendarMonthByFilter[filterId] ?? filterMenuCalendarMonth(initialDate);\n }\n\n private moveCalendarMonth(filterId: string, month: string, offset: number) {\n this.clearCalendarRangePreview(filterId);\n this.calendarMonthByFilter = {\n ...this.calendarMonthByFilter,\n [filterId]: shiftFilterMenuCalendarMonth(month, offset),\n };\n }\n\n private selectCalendarDate(filterId: string, value: string) {\n this.clearCalendarRangePreview(filterId);\n const pendingStart = this.pendingRangeStartByFilter[filterId];\n const next = { ...this.pendingRangeStartByFilter };\n if (pendingStart) delete next[filterId];\n else next[filterId] = value;\n this.pendingRangeStartByFilter = next;\n this.dsChange.emit({\n filterId,\n value: dateFilterRangeValue(pendingStart ?? value, value),\n });\n }\n\n private previewCalendarRange(filterId: string, value: string) {\n if (!this.pendingRangeStartByFilter[filterId]) return;\n if (this.previewRangeEndByFilter[filterId] === value) return;\n this.previewRangeEndByFilter = { ...this.previewRangeEndByFilter, [filterId]: value };\n }\n\n private clearCalendarRangePreview(filterId: string) {\n if (!this.previewRangeEndByFilter[filterId]) return;\n const next = { ...this.previewRangeEndByFilter };\n delete next[filterId];\n this.previewRangeEndByFilter = next;\n }\n\n private focusCalendarDate(filterId: string, value: string) {\n this.previewCalendarRange(filterId, value);\n const targetMonth = filterMenuCalendarMonth(value);\n if (this.calendarMonthByFilter[filterId] !== targetMonth) {\n this.calendarMonthByFilter = { ...this.calendarMonthByFilter, [filterId]: targetMonth };\n }\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>(`[data-date-option=\"${value}\"]`)?.focus();\n });\n }\n\n private handleCalendarDayKeyDown(event: KeyboardEvent, filterId: string, value: string) {\n let offset: number | null = null;\n if (event.key === 'ArrowLeft') offset = -1;\n else if (event.key === 'ArrowRight') offset = 1;\n else if (event.key === 'ArrowUp') offset = -7;\n else if (event.key === 'ArrowDown') offset = 7;\n else if (event.key === 'Home') {\n offset = -new Date(`${value}T00:00:00Z`).getUTCDay();\n } else if (event.key === 'End') {\n offset = 6 - new Date(`${value}T00:00:00Z`).getUTCDay();\n } else if (event.key === 'PageUp') {\n const month = shiftFilterMenuCalendarMonth(filterMenuCalendarMonth(value), -1);\n const day = value.slice(8, 10);\n const candidate = `${month}-${day}`;\n const target = parseDateFilterValue(candidate) ? candidate : `${month}-01`;\n event.preventDefault();\n this.focusCalendarDate(filterId, target);\n return;\n } else if (event.key === 'PageDown') {\n const month = shiftFilterMenuCalendarMonth(filterMenuCalendarMonth(value), 1);\n const day = value.slice(8, 10);\n const candidate = `${month}-${day}`;\n const target = parseDateFilterValue(candidate) ? candidate : `${month}-01`;\n event.preventDefault();\n this.focusCalendarDate(filterId, target);\n return;\n }\n if (offset === null) return;\n event.preventDefault();\n this.focusCalendarDate(filterId, shiftIsoCalendarDate(value, offset));\n }\n\n private renderRelativeDateOptions(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n const relativeFilter: FilterMenuFilter = {\n ...filter,\n kind: 'single',\n options: RELATIVE_DATE_OPTIONS,\n };\n return (\n <div\n class=\"filter-menu__date-relative ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"listbox\"\n aria-label=\"Relative date\"\n >\n {RELATIVE_DATE_OPTIONS.map((option, index) => (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-relative-${index}`}\n option={option}\n selected={value === option.value}\n active={index === this.activeOptionIndex}\n focusRingVisible={this.focusRingVisible}\n usesSubtext={false}\n tabIndex={index === this.activeOptionIndex ? 0 : -1}\n onFocus={() => {\n this.activeOptionIndex = index;\n }}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleOptionKeyDown(event, relativeFilter, option, index, {\n [filter.id]: value,\n })\n }\n onHover={() => {\n this.focusRingVisible = false;\n this.activeOptionIndex = index;\n }}\n onSelect={() => this.dsChange.emit({ filterId: filter.id, value: option.value })}\n />\n ))}\n </div>\n );\n }\n\n private renderDateCalendar(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n const parsed = parseDateFilterValue(value);\n const range = parsed?.kind === 'range' ? parsed : null;\n const month = this.calendarMonth(filter.id, value);\n const days = filterMenuCalendarDays(month);\n const today = filterMenuToday();\n const pendingStart = this.pendingRangeStartByFilter[filter.id];\n const previewEnd = this.previewRangeEndByFilter[filter.id];\n const previewStart = pendingStart && previewEnd ? [pendingStart, previewEnd].sort()[0] : null;\n const previewFinish = pendingStart && previewEnd ? [pendingStart, previewEnd].sort()[1] : null;\n const preferredFocus =\n this.pendingRangeStartByFilter[filter.id] ??\n range?.end ??\n (month === today.slice(0, 7) ? today : '');\n const focusDate = days.some(day => day.value === preferredFocus)\n ? preferredFocus\n : (days.find(day => day.inMonth)?.value ?? days[0]?.value);\n\n return (\n <div class=\"filter-menu__calendar\">\n <div class=\"filter-menu__calendar-heading ds-control--md\">\n <ds-button-unfilled\n class=\"filter-menu__calendar-nav filter-menu__calendar-nav--previous\"\n variant=\"icon\"\n icon=\"ChevronLeft\"\n size=\"md\"\n hasBorder={false}\n ariaLabel=\"Previous month\"\n onDsClick={() => this.moveCalendarMonth(filter.id, month, -1)}\n />\n <ds-text as=\"span\" variant=\"text-body-medium\" emphasis color=\"primary\">\n {filterMenuCalendarMonthLabel(month)}\n </ds-text>\n <ds-button-unfilled\n class=\"filter-menu__calendar-nav filter-menu__calendar-nav--next\"\n variant=\"icon\"\n icon=\"ChevronRight\"\n size=\"md\"\n hasBorder={false}\n ariaLabel=\"Next month\"\n onDsClick={() => this.moveCalendarMonth(filter.id, month, 1)}\n />\n </div>\n <div class=\"filter-menu__calendar-weekdays\" aria-hidden=\"true\">\n {FILTER_MENU_WEEKDAYS.map(day => (\n <ds-text as=\"span\" variant=\"text-body-small\" color=\"secondary\">\n {day}\n </ds-text>\n ))}\n </div>\n <div\n class=\"filter-menu__calendar-grid\"\n role=\"grid\"\n aria-label={filterMenuCalendarMonthLabel(month)}\n onMouseLeave={() => this.clearCalendarRangePreview(filter.id)}\n >\n {days.map(day => {\n const selectedInRange = Boolean(\n range && day.value >= range.start && day.value <= range.end\n );\n const previewInRange = Boolean(\n previewStart &&\n previewFinish &&\n day.value >= previewStart &&\n day.value <= previewFinish\n );\n const inRange = previewInRange || selectedInRange;\n const rangeEdge = Boolean(\n previewStart\n ? day.value === pendingStart\n : range && (day.value === range.start || day.value === range.end)\n );\n const textColor = rangeEdge\n ? 'on-bold'\n : inRange || day.value === today\n ? 'primary'\n : day.inMonth\n ? 'secondary'\n : 'tertiary';\n return (\n <button\n type=\"button\"\n role=\"gridcell\"\n data-date-option={day.value}\n class={{\n 'filter-menu__calendar-day': true,\n 'filter-menu__calendar-day--outside': !day.inMonth,\n 'filter-menu__calendar-day--today': day.value === today,\n 'filter-menu__calendar-day--in-range': inRange,\n 'filter-menu__calendar-day--range-preview': previewInRange,\n 'filter-menu__calendar-day--range-edge': rangeEdge,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n aria-label={day.label}\n aria-selected={selectedInRange ? 'true' : 'false'}\n tabIndex={day.value === focusDate ? 0 : -1}\n onMouseEnter={() => this.previewCalendarRange(filter.id, day.value)}\n onFocus={() => this.previewCalendarRange(filter.id, day.value)}\n onClick={() => this.selectCalendarDate(filter.id, day.value)}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleCalendarDayKeyDown(event, filter.id, day.value)\n }\n >\n <ds-text\n class=\"ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-medium\"\n color={textColor}\n emphasis={day.value === today}\n >\n {day.day}\n </ds-text>\n </button>\n );\n })}\n </div>\n </div>\n );\n }\n\n private renderDateFilter(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n const mode = this.dateMode(filter.id, value);\n return (\n <div class=\"filter-menu__date\">\n <header class=\"filter-menu__date-header ds-chrome-header ds-chrome-header--bounded\">\n <ds-tab-group\n ariaLabel=\"Date filter mode\"\n size=\"md\"\n width=\"fill\"\n hasContainer={false}\n value={mode}\n tabs={DATE_MODE_TABS}\n onDsChange={(event: CustomEvent<string>) => {\n event.stopPropagation();\n this.setDateMode(filter, value, event.detail);\n }}\n />\n </header>\n <div class=\"filter-menu__date-body\">\n {mode === 'relative'\n ? this.renderRelativeDateOptions(filter, value)\n : this.renderDateCalendar(filter, value)}\n </div>\n </div>\n );\n }\n\n private renderOptionSearch(filter: FilterMenuFilter) {\n return (\n <div class=\"filter-menu__option-search\">\n <ChoiceSearch\n size=\"md\"\n hasFocusBoundary={false}\n hasInteractionFill={false}\n value={this.optionQueryByFilter[filter.id] ?? ''}\n placeholder={this.searchPlaceholder}\n ariaLabel={`Search ${filter.label} options`}\n controls={`${this.generatedId}-${filter.id}-options`}\n inputRef={() => undefined}\n clearLabel={`Clear ${filter.label} search`}\n onValueChange={value => this.setOptionQuery(filter, value)}\n onKeyDown={(event: KeyboardEvent) => this.handleOptionSearchKeyDown(event, filter)}\n />\n </div>\n );\n }\n\n private renderNoOptionResults() {\n return (\n <div\n class=\"ds-choice-empty ds-empty-region\"\n role=\"option\"\n aria-selected=\"false\"\n aria-disabled=\"true\"\n aria-label={this.noResultsText}\n aria-live=\"polite\"\n >\n <ds-empty-state body={this.noResultsText} />\n </div>\n );\n }\n\n private renderOptions(filter: FilterMenuFilter, values: FilterMenuValues) {\n const value = values[filter.id];\n if (filter.kind === 'multiple' || filter.kind === 'single') {\n const selected = Array.isArray(value) ? value : [];\n const allOptions = filter.options ?? [];\n const options = this.visibleOptions(filter);\n const usesSubtext = choiceListUsesSubtext(\n allOptions.map(option => ({\n label: option.label,\n value: option.value,\n subtext: option.description,\n }))\n );\n if (!options.length) return this.renderNoOptionResults();\n return options.map((option, index) => {\n const isSelected =\n filter.kind === 'multiple' ? selected.includes(option.value) : value === option.value;\n return (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-option-${index}`}\n option={{\n label: option.label,\n value: option.value,\n subtext: option.description,\n isInactive: option.isInactive,\n }}\n selected={isSelected}\n active={index === this.activeOptionIndex}\n focusRingVisible={this.focusRingVisible}\n usesSubtext={usesSubtext}\n tabIndex={index === this.activeOptionIndex ? 0 : -1}\n leading={\n filter.kind === 'multiple' ? (\n <span\n class=\"ds-choice-item__icon ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-checkbox label=\"\" size=\"md\" checked={isSelected} presentation />\n </span>\n ) : undefined\n }\n onFocus={() => {\n this.activeOptionIndex = index;\n }}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleOptionKeyDown(event, filter, option, index, values, options)\n }\n onHover={() => {\n this.focusRingVisible = false;\n this.activeOptionIndex = index;\n }}\n onSelect={() => this.selectOption(filter, option, values)}\n />\n );\n });\n }\n\n if (filter.kind === 'boolean') {\n const [option] = this.visibleOptions(filter);\n if (!option) return this.renderNoOptionResults();\n return (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-option-0`}\n option={{\n label: option.label,\n value: option.value,\n subtext: option.description,\n }}\n selected={value === true}\n active\n focusRingVisible={this.focusRingVisible}\n usesSubtext={Boolean(option.description)}\n tabIndex={0}\n leading={\n <span\n class=\"ds-choice-item__icon ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-checkbox label=\"\" size=\"md\" checked={value === true} presentation />\n </span>\n }\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') this.handlePanelKeyDown(event, filter.id);\n else if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.dsChange.emit({ filterId: filter.id, value: value !== true });\n }\n }}\n onHover={() => {\n this.focusRingVisible = false;\n }}\n onSelect={() => this.dsChange.emit({ filterId: filter.id, value: value !== true })}\n />\n );\n }\n\n return this.renderDateFilter(filter, value);\n }\n\n private get captionIconOnly(): boolean {\n return (\n this.collapseLabel && this.captionCompact && this.usesInternalTrigger && Boolean(this.icon)\n );\n }\n\n private syncCaptionCompactObserver(): void {\n this.disconnectCaptionCompactObserver();\n if (!this.collapseLabel) {\n if (this.captionCompact) this.captionCompact = false;\n return;\n }\n this.captionCompactDisconnect = observeTableCaptionCompact(this.el, compact => {\n if (this.captionCompact !== compact) this.captionCompact = compact;\n });\n }\n\n private disconnectCaptionCompactObserver(): void {\n this.captionCompactDisconnect?.();\n this.captionCompactDisconnect = undefined;\n }\n\n private renderCaptionTooltip(trigger: VNode, label: string): VNode {\n if (!this.collapseLabel) return trigger;\n return (\n <ds-tooltip label={label} side=\"top\" size=\"sm\">\n {trigger}\n </ds-tooltip>\n );\n }\n\n private renderFooter(totalSelected: number, categoriesClear: boolean) {\n return (\n <div\n class={{\n 'filter-menu__footer': true,\n 'filter-menu__footer--categories-clear': categoriesClear,\n 'ds-choice-footer': true,\n }}\n aria-hidden={categoriesClear && totalSelected === 0 ? 'true' : undefined}\n >\n <div class=\"ds-choice-footer__content ds-control--md\">\n {!categoriesClear ? (\n <ds-text\n class=\"ds-choice-footer__summary\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n aria-live=\"polite\"\n >\n {totalSelected} selected\n </ds-text>\n ) : null}\n {totalSelected > 0 ? (\n <button\n class=\"filter-menu__clear ds-choice-footer__clear ds-text-action\"\n type=\"button\"\n onClick={() => {\n this.pendingRangeStartByFilter = {};\n this.dsClear.emit();\n }}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n {this.clearLabel}\n </ds-text>\n </button>\n ) : null}\n </div>\n </div>\n );\n }\n\n private renderMatchModeFooter(filter: FilterMenuFilter, matchModes: FilterMenuMatchModes) {\n const mode: FilterMenuMatchMode = matchModes[filter.id] === 'all' ? 'all' : 'any';\n const nextMode: FilterMenuMatchMode = mode === 'any' ? 'all' : 'any';\n return (\n <div class=\"filter-menu__match-mode-footer ds-choice-footer\">\n <div class=\"filter-menu__match-mode-content ds-choice-footer__content ds-control--md\">\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"secondary\">\n Limit results to\n </ds-text>\n <button\n class=\"filter-menu__match-mode-toggle ds-text-action ds-focus-ring\"\n type=\"button\"\n aria-label={`Limit ${filter.label} results to ${nextMode} selected`}\n onClick={() => this.dsMatchModeChange.emit({ filterId: filter.id, mode: nextMode })}\n onKeyDown={(event: KeyboardEvent) => this.handlePanelKeyDown(event, filter.id)}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n {mode}\n </ds-text>\n </button>\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"secondary\">\n selected\n </ds-text>\n </div>\n </div>\n );\n }\n\n render() {\n const state =\n this.closing && this.closingSnapshot\n ? this.closingSnapshot\n : {\n filters: this.filters,\n values: this.values,\n matchModes: this.matchModes,\n activeFilterId: this.activeFilterId,\n };\n const activeFilter = this.selectedFilter(state.filters, state.activeFilterId);\n const totalSelected = this.totalSelected(state.filters, state.values);\n const activeFilterCount = this.activeFilterCount(state.filters, state.values);\n const hasActiveFilters = activeFilterCount > 0;\n const categoriesClearFooter = this.footerLayout === 'categories-clear';\n const label = `${this.triggerLabel}${\n this.showSelectedCount && hasActiveFilters ? ` · ${activeFilterCount}` : ''\n }`;\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const popupId = `${this.generatedId}-popup`;\n const popupStyle: Record<string, string> = {\n position: 'fixed',\n left: '0',\n top: '0',\n width: this.menuWidth,\n transform: `translate(${Math.round(this.pos.x)}px, ${Math.round(this.pos.y)}px)`,\n zIndex: '9998',\n visibility: this.positionReady ? 'visible' : 'hidden',\n };\n\n return (\n <Host\n class={{\n 'filter-menu-host': true,\n 'filter-menu-host--external-trigger': !this.usesInternalTrigger,\n 'ds-select-trigger-host': this.usesInternalTrigger,\n [`ds-control--${this.size}`]: true,\n 'ds-table-caption-control': this.collapseLabel,\n 'ds-table-caption-control--compact': this.captionIconOnly,\n ...controlWidthClass(this.width),\n }}\n >\n {this.usesInternalTrigger\n ? this.renderCaptionTooltip(\n <button\n ref={element => {\n this.triggerElement = (element as HTMLButtonElement) ?? null;\n }}\n id={this.inputId ?? `${this.generatedId}-trigger`}\n type=\"button\"\n class={{\n trigger: true,\n 'ds-control-frame': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': this.activeFill && hasActiveFilters,\n 'trigger--expanded': this.open || this.closing,\n 'trigger--bordered': this.hasBorder,\n 'trigger--has-value': hasActiveFilters,\n [`ds-control--${this.size}`]: true,\n }}\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-expanded={String(this.open)}\n aria-controls={this.open ? popupId : undefined}\n aria-label={this.ariaLabel ?? this.menuLabel}\n onClick={(event: MouseEvent) => this.toggleFromTrigger(event)}\n onKeyDown={(event: KeyboardEvent) => this.handleTriggerKeyDown(event)}\n >\n {this.icon ? (\n <span\n class=\"trigger__prefix ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n </span>\n ) : null}\n {this.captionIconOnly ? null : (\n <ds-text\n class=\"trigger__label-box trigger__label trigger__label-content ds-control-label-box ds-interaction-fill__content\"\n as=\"span\"\n variant={textVariant}\n color=\"inherit\"\n lineTruncation={1}\n >\n {label}\n </ds-text>\n )}\n {this.captionIconOnly ? null : (\n <span\n class=\"trigger__chevron ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name=\"ChevronDown\" size={iconSize} color=\"inherit\" />\n </span>\n )}\n </button>,\n this.captionIconOnly ? label : ''\n )\n : null}\n\n {this.shouldRender ? (\n <div\n id={popupId}\n popover=\"manual\"\n class={{\n 'filter-menu-popup': true,\n 'ds-choice-popup': true,\n 'ds-choice-popup--closing': this.closing,\n }}\n style={popupStyle}\n role=\"dialog\"\n aria-label={this.menuLabel}\n >\n {activeFilter ? (\n <div class=\"filter-menu\">\n <div class=\"filter-menu__body\">\n <div class=\"filter-menu__category-pane\">\n <div\n class=\"filter-menu__categories ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"tablist\"\n aria-label={this.categoriesLabel}\n aria-orientation=\"vertical\"\n >\n {state.filters.map(filter => {\n const active = filter.id === activeFilter.id;\n const count = this.selectedCount(filter, state.values);\n return (\n <div\n key={filter.id}\n class={{\n 'filter-menu__category-section': true,\n 'ds-choice-section--divided': Boolean(filter.divider),\n }}\n >\n <button\n id={`${this.generatedId}-${filter.id}-tab`}\n type=\"button\"\n role=\"tab\"\n data-filter-category={filter.id}\n class={{\n 'filter-menu__category': true,\n 'filter-menu__category--active': active,\n 'ds-choice-item': true,\n 'ds-control-frame': true,\n 'ds-control--md': true,\n 'ds-focus-ring-inset': true,\n 'ds-focus-ring--visible': active && this.focusRingVisible,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': active,\n }}\n aria-selected={String(active)}\n aria-controls={`${this.generatedId}-panel`}\n tabIndex={active ? 0 : -1}\n onMouseDown={() => {\n this.focusRingVisible = false;\n }}\n onClick={() => this.selectCategory(filter.id)}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleCategoryKeyDown(event, state.filters, filter.id)\n }\n >\n <ds-text\n class=\"ds-choice-item__content ds-choice-item__label ds-control-label-box ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-medium\"\n color={active ? 'primary' : 'secondary'}\n >\n {filter.label}\n </ds-text>\n {count > 0 && filter.kind === 'date' ? (\n <span\n class=\"filter-menu__category-dot-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-badge variant=\"dot\" hasRing={false} label=\"\" />\n </span>\n ) : count > 0 ? (\n <ds-tag\n class=\"ds-choice-item__tag ds-interaction-fill__content\"\n label={String(count)}\n size=\"sm\"\n intent=\"brand\"\n contrast=\"bold\"\n isInset\n rounded\n />\n ) : null}\n </button>\n </div>\n );\n })}\n </div>\n {categoriesClearFooter ? this.renderFooter(totalSelected, true) : null}\n </div>\n\n <div\n id={`${this.generatedId}-panel`}\n class={{\n 'filter-menu__options': true,\n 'filter-menu__options--date': activeFilter.kind === 'date',\n }}\n role=\"tabpanel\"\n aria-labelledby={`${this.generatedId}-${activeFilter.id}-tab`}\n >\n {activeFilter.kind === 'date' ? null : this.renderOptionSearch(activeFilter)}\n <div class=\"filter-menu__options-content\">\n {activeFilter.kind === 'date' ? (\n <div key={activeFilter.id} class=\"filter-menu__option-list--date\">\n {this.renderOptions(activeFilter, state.values)}\n </div>\n ) : (\n <div\n id={`${this.generatedId}-${activeFilter.id}-options`}\n key={activeFilter.id}\n class=\"filter-menu__option-list ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"listbox\"\n aria-label={activeFilter.label}\n aria-multiselectable={\n activeFilter.kind === 'multiple' ? 'true' : undefined\n }\n >\n {this.renderOptions(activeFilter, state.values)}\n </div>\n )}\n </div>\n {activeFilter.kind === 'multiple'\n ? this.renderMatchModeFooter(activeFilter, state.matchModes)\n : null}\n </div>\n </div>\n\n {!categoriesClearFooter && totalSelected > 0\n ? this.renderFooter(totalSelected, false)\n : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["DATE_FILTER_RELATIVE_PRESETS","label","value","days","offset","ISO_DATE_PATTERN","isIsoCalendarDate","test","year","month","day","split","map","Number","date","Date","UTC","getUTCFullYear","getUTCMonth","getUTCDate","shiftIsoCalendarDate","toISOString","slice","dateFilterRelativeValue","preset","dateFilterRangeValue","start","end","ordered","parseDateFilterValue","startsWith","length","some","candidate","kind","rest","FILTER_MENU_WEEKDAYS","MONTH_FORMATTER","Intl","DateTimeFormat","timeZone","DATE_FORMATTER","weekday","filterMenuToday","today","getFullYear","String","getMonth","padStart","getDate","filterMenuCalendarMonth","shiftFilterMenuCalendarMonth","filterMenuCalendarMonthLabel","format","filterMenuCalendarDays","firstOfMonth","firstWeekday","getUTCDay","gridStart","Array","from","_","index","dateValue","inMonth","filterMenuCss","filterMenuId","ICON_SIZE","lg","md","sm","xs","DATE_MODE_TABS","id","RELATIVE_DATE_OPTIONS","FilterMenu","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","open","triggerLabel","showSelectedCount","icon","size","width","hasBorder","activeFill","collapseLabel","ariaLabel","filters","values","matchModes","side","align","sideOffset","TOKEN_CSS_LENGTHS","space050","alignOffset","menuWidth","menuWidthLg","menuLabel","categoriesLabel","clearLabel","searchPlaceholder","noResultsText","footerLayout","initialFocusVisible","shouldRender","closing","positionReady","pos","x","y","focusRingVisible","activeOptionIndex","captionCompact","dateModeByFilter","calendarMonthByFilter","pendingRangeStartByFilter","previewRangeEndByFilter","optionQueryByFilter","generatedId","triggerElement","pendingInitialFocusVisible","closeTimer","hasLoaded","closingSnapshot","position","AnchoredPositionController","getAnchor","resolvedAnchor","getPopup","el","querySelector","getOwnerDocument","ownerDocument","measure","anchor","popup","anchorRect","getBoundingClientRect","sectionInsetPx","resolveCssLengthPx","TOKEN_DEFAULTS","popupWidth","offsetWidth","popupFallbackWidth","popupHeight","offsetHeight","popupFallbackHeight","sideOffsetPx","alignOffsetPx","resolveChoicePopupAlignOffset","viewportPadPx","viewportPad","viewportWidth","window","innerWidth","viewportHeight","innerHeight","collisionRect","resolveAnchoredOverlayBoundaryRect","boundary","apply","onReady","liveUpdate","observeResize","topLayer","interaction","AnchoredOverlayInteractionController","onOutsideActivation","close","componentDidLoad","syncCaptionCompactObserver","onOpenChange","connectedCallback","disconnectedCallback","disconnectCaptionCompactObserver","unobserve","teardownListeners","onCollapseLabelChange","isOpen","setupListeners","schedule","focusInitialCategory","cancel","captureClosingSnapshot","duration","resolveMotionTimeMs","motionShort2","animationDurationShort3","finishClose","setTimeout","onPositionInputChange","handleKeyDown","event","key","preventDefault","tabLeavesPopup","moveFocusAfterTab","shiftKey","anchorId","document","getElementById","usesInternalTrigger","menuFallbackHeight","connect","observe","disconnect","clearTimeout","restoreFocus","focusAnchor","dsOpenChange","emit","dsClose","toggleFromTrigger","detail","handleTriggerKeyDown","matches","hidePopover","dsAfterClose","filter","options","option","Object","fromEntries","entries","isArray","activeFilterId","requestAnimationFrame","focus","selectedFilter","find","selectedCount","totalSelected","reduce","total","activeFilterCount","selectCategory","filterId","dsActiveFilterChange","handleCategoryKeyDown","currentIndex","findIndex","nextIndex","handlePanelKeyDown","handleOptionKeyDown","visibleOptions","selectOption","includes","enabled","optionIndex","isInactive","current","indexOf","next","direction","optionMatchesQuery","query","normalized","trim","toLocaleLowerCase","description","booleanOption","fieldLabel","setOptionQuery","firstEnabled","content","scrollTop","handleOptionSearchKeyDown","toggleMultiple","checked","selected","Set","add","delete","has","dsChange","dateMode","setDateMode","mode","parsed","initialDate","clearCalendarRangePreview","calendarMonth","moveCalendarMonth","selectCalendarDate","pendingStart","previewCalendarRange","focusCalendarDate","targetMonth","handleCalendarDayKeyDown","target","renderRelativeDateOptions","relativeFilter","h","class","role","ChoiceOptionRow","active","usesSubtext","tabIndex","onFocus","onKeyDown","onHover","onSelect","renderDateCalendar","range","previewEnd","previewStart","sort","previewFinish","preferredFocus","focusDate","variant","onDsClick","as","emphasis","color","onMouseLeave","selectedInRange","Boolean","previewInRange","inRange","rangeEdge","textColor","type","onMouseEnter","onClick","renderDateFilter","hasContainer","tabs","onDsChange","stopPropagation","renderOptionSearch","ChoiceSearch","hasFocusBoundary","hasInteractionFill","placeholder","controls","inputRef","undefined","onValueChange","renderNoOptionResults","body","renderOptions","allOptions","choiceListUsesSubtext","subtext","isSelected","leading","presentation","captionIconOnly","captionCompactDisconnect","observeTableCaptionCompact","compact","renderCaptionTooltip","trigger","renderFooter","categoriesClear","dsClear","renderMatchModeFooter","nextMode","dsMatchModeChange","render","state","activeFilter","hasActiveFilters","categoriesClearFooter","textVariant","CONTROL_TEXT_VARIANT","iconSize","popupId","popupStyle","left","top","transform","Math","round","zIndex","visibility","Host","controlWidthClass","ref","element","inputId","name","lineTruncation","popover","style","count","divider","onMouseDown","hasRing","intent","contrast","isInset","rounded"],"sources":["src/wc/utils/date-filter-value.ts","src/wc/components/FilterMenu/filter-menu-calendar.ts","src/wc/components/FilterMenu/FilterMenu.css?tag=ds-filter-menu&encapsulation=scoped","src/wc/components/FilterMenu/FilterMenu.tsx"],"sourcesContent":["export const DATE_FILTER_RELATIVE_PRESETS = [\n { label: 'Today', value: 'today', days: 1, offset: 0 },\n { label: 'Yesterday', value: 'yesterday', days: 1, offset: -1 },\n { label: 'Last 7 days', value: 'last-7-days', days: 7, offset: 0 },\n { label: 'Last 14 days', value: 'last-14-days', days: 14, offset: 0 },\n { label: 'Last 30 days', value: 'last-30-days', days: 30, offset: 0 },\n { label: 'Last 60 days', value: 'last-60-days', days: 60, offset: 0 },\n { label: 'Last 90 days', value: 'last-90-days', days: 90, offset: 0 },\n] as const;\n\nexport type DateFilterRelativePreset = (typeof DATE_FILTER_RELATIVE_PRESETS)[number]['value'];\nexport type DateFilterRelativeValue = `relative:${DateFilterRelativePreset}`;\nexport type DateFilterRangeValue = `range:${string}/${string}`;\nexport type DateFilterValue = DateFilterRelativeValue | DateFilterRangeValue;\n\nexport interface DateFilterRange {\n start: string;\n end: string;\n}\n\nexport type ParsedDateFilterValue =\n | { kind: 'relative'; preset: DateFilterRelativePreset }\n | ({ kind: 'range' } & DateFilterRange);\n\nconst ISO_DATE_PATTERN = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport function isIsoCalendarDate(value: string): boolean {\n if (!ISO_DATE_PATTERN.test(value)) return false;\n const [year, month, day] = value.split('-').map(Number);\n const date = new Date(Date.UTC(year, month - 1, day));\n return (\n date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day\n );\n}\n\nexport function shiftIsoCalendarDate(value: string, days: number): string {\n if (!isIsoCalendarDate(value)) return '';\n const [year, month, day] = value.split('-').map(Number);\n const date = new Date(Date.UTC(year, month - 1, day + days));\n return date.toISOString().slice(0, 10);\n}\n\nexport function dateFilterRelativeValue(preset: DateFilterRelativePreset): DateFilterRelativeValue {\n return `relative:${preset}`;\n}\n\nexport function dateFilterRangeValue(start: string, end: string = start): DateFilterRangeValue {\n const ordered = start <= end ? [start, end] : [end, start];\n return `range:${ordered[0]}/${ordered[1]}`;\n}\n\nexport function parseDateFilterValue(value: unknown): ParsedDateFilterValue | null {\n if (typeof value !== 'string' || !value) return null;\n\n if (value.startsWith('relative:')) {\n const preset = value.slice('relative:'.length) as DateFilterRelativePreset;\n return DATE_FILTER_RELATIVE_PRESETS.some(candidate => candidate.value === preset)\n ? { kind: 'relative', preset }\n : null;\n }\n\n if (value.startsWith('range:')) {\n const [start, end, ...rest] = value.slice('range:'.length).split('/');\n if (rest.length || !isIsoCalendarDate(start) || !isIsoCalendarDate(end)) return null;\n return start <= end ? { kind: 'range', start, end } : { kind: 'range', start: end, end: start };\n }\n\n // Preserve the previous single-date contract as a one-day range.\n return isIsoCalendarDate(value) ? { kind: 'range', start: value, end: value } : null;\n}\n\nexport function normalizeDateFilterValue(value: unknown): DateFilterValue | '' {\n const parsed = parseDateFilterValue(value);\n if (!parsed) return '';\n return parsed.kind === 'relative'\n ? dateFilterRelativeValue(parsed.preset)\n : dateFilterRangeValue(parsed.start, parsed.end);\n}\n\nexport function resolveDateFilterRange(\n value: unknown,\n referenceDate: string\n): DateFilterRange | null {\n if (!isIsoCalendarDate(referenceDate)) return null;\n const parsed = parseDateFilterValue(value);\n if (!parsed) return null;\n if (parsed.kind === 'range') return { start: parsed.start, end: parsed.end };\n\n const preset = DATE_FILTER_RELATIVE_PRESETS.find(candidate => candidate.value === parsed.preset);\n if (!preset) return null;\n const end = shiftIsoCalendarDate(referenceDate, preset.offset);\n return { start: shiftIsoCalendarDate(end, -(preset.days - 1)), end };\n}\n","import { isIsoCalendarDate, shiftIsoCalendarDate } from '../../utils';\n\nexport interface FilterMenuCalendarDay {\n value: string;\n day: number;\n inMonth: boolean;\n label: string;\n}\n\nexport const FILTER_MENU_WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\nconst MONTH_FORMATTER = new Intl.DateTimeFormat('en-US', {\n month: 'long',\n year: 'numeric',\n timeZone: 'UTC',\n});\nconst DATE_FORMATTER = new Intl.DateTimeFormat('en-US', {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n});\n\nexport function filterMenuToday(): string {\n const today = new Date();\n const year = today.getFullYear();\n const month = String(today.getMonth() + 1).padStart(2, '0');\n const day = String(today.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\nexport function filterMenuCalendarMonth(value: string): string {\n return isIsoCalendarDate(value) ? value.slice(0, 7) : filterMenuToday().slice(0, 7);\n}\n\nexport function shiftFilterMenuCalendarMonth(value: string, offset: number): string {\n const [year, month] = value.split('-').map(Number);\n const date = new Date(Date.UTC(year, month - 1 + offset, 1));\n return `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}`;\n}\n\nexport function filterMenuCalendarMonthLabel(value: string): string {\n const [year, month] = value.split('-').map(Number);\n return MONTH_FORMATTER.format(new Date(Date.UTC(year, month - 1, 1)));\n}\n\nexport function filterMenuCalendarDays(value: string): FilterMenuCalendarDay[] {\n const [year, month] = value.split('-').map(Number);\n const firstOfMonth = `${year}-${String(month).padStart(2, '0')}-01`;\n const firstWeekday = new Date(`${firstOfMonth}T00:00:00Z`).getUTCDay();\n const gridStart = shiftIsoCalendarDate(firstOfMonth, -firstWeekday);\n return Array.from({ length: 42 }, (_, index) => {\n const dateValue = shiftIsoCalendarDate(gridStart, index);\n const date = new Date(`${dateValue}T00:00:00Z`);\n return {\n value: dateValue,\n day: date.getUTCDate(),\n inMonth: dateValue.startsWith(`${value}-`),\n label: DATE_FORMATTER.format(date),\n };\n });\n}\n","@import '../../utils/choice-list.css';\n@import '../../utils/chrome-header.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/control-width.css';\n@import '../../utils/select-trigger.css';\n@import '../../utils/search-control.css';\n@import '../../utils/table-caption-control.css';\n\n:host(.filter-menu-host--external-trigger) {\n display: contents;\n}\n\n.filter-menu {\n display: flex;\n min-height: 0;\n flex-direction: column;\n color: var(--color-foreground-secondary);\n}\n\n.filter-menu__body {\n display: grid;\n grid-template-columns: var(--dimension-menu-width-xs) var(--dimension-menu-width-sm);\n min-height: calc(var(--dimension-size-800) * 4 + var(--dimension-space-150));\n max-height: calc(100vh - var(--dimension-size-800) - var(--dimension-size-600));\n}\n\n.filter-menu__category-pane {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n border-inline-end: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n\n.filter-menu__categories {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.filter-menu__category-section {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.filter-menu__category-section.ds-choice-section--divided {\n padding-block-end: var(--dimension-space-050);\n}\n\n.filter-menu__category {\n justify-content: space-between;\n width: 100%;\n border: 0;\n background: transparent;\n color: var(--color-foreground-secondary);\n cursor: default;\n text-align: start;\n}\n\n.filter-menu__category--active {\n color: var(--color-foreground-primary);\n}\n\n.filter-menu__category-dot-box {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ds-control-icon, var(--dimension-iconography-md));\n height: var(--ds-control-icon, var(--dimension-iconography-md));\n pointer-events: none;\n}\n\n.filter-menu__options {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-menu__options-content {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1 1 auto;\n flex-direction: column;\n overflow: auto;\n}\n\n.filter-menu__option-search {\n position: relative;\n flex: 0 0 var(--dimension-size-500);\n min-width: 0;\n min-height: var(--dimension-size-500);\n background: transparent;\n}\n\n.filter-menu__option-search::after {\n content: '';\n position: absolute;\n inset: auto 0 0;\n height: var(--dimension-stroke-width-012);\n background-color: var(--color-border-tertiary);\n pointer-events: none;\n}\n\n.filter-menu__option-search .select-search {\n height: 100%;\n background: transparent;\n}\n\n.filter-menu__options--date,\n.filter-menu__option-list--date,\n.filter-menu__date {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n}\n\n.filter-menu__option-list--date,\n.filter-menu__date {\n flex: 1 1 auto;\n}\n\n.filter-menu__date-header {\n flex: 0 0 var(--dimension-size-500);\n justify-content: center;\n min-block-size: var(--dimension-size-500);\n padding: var(--dimension-space-050);\n background: var(--color-background-secondary);\n}\n\n.filter-menu__date-body {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n flex-direction: column;\n}\n\n.filter-menu__date-relative {\n flex: 1 1 auto;\n}\n\n.filter-menu__calendar {\n display: flex;\n min-height: 0;\n flex-direction: column;\n padding: var(--dimension-space-100);\n}\n\n.filter-menu__calendar-heading {\n display: grid;\n grid-template-columns: var(--dimension-size-400) minmax(0, 1fr) var(--dimension-size-400);\n align-items: center;\n text-align: center;\n}\n\n.filter-menu__calendar-nav--previous {\n justify-self: start;\n}\n\n.filter-menu__calendar-nav--next {\n justify-self: end;\n}\n\n.filter-menu__calendar-weekdays,\n.filter-menu__calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, minmax(0, 1fr));\n column-gap: var(--dimension-space-050);\n}\n\n.filter-menu__calendar-grid {\n row-gap: var(--dimension-space-050);\n}\n\n.filter-menu__calendar-weekdays {\n align-items: center;\n min-height: var(--dimension-size-400);\n margin-block-start: var(--dimension-space-050);\n color: var(--color-foreground-secondary);\n text-align: center;\n}\n\n.filter-menu__calendar-day {\n appearance: none;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 0;\n width: 100%;\n height: var(--dimension-size-400);\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n color: var(--color-foreground-primary);\n cursor: default;\n}\n\n.filter-menu__calendar-day--outside {\n color: var(--color-foreground-tertiary);\n}\n\n.filter-menu__calendar-day--in-range {\n background: var(--color-background-faint-brand);\n color: var(--color-foreground-primary);\n}\n\n/* Pending range preview stays faint while the already-selected start keeps its bold edge. */\n.filter-menu__calendar-day--range-preview {\n background: var(--color-background-faint-brand);\n}\n\n.filter-menu__calendar-day--today {\n color: var(--color-foreground-primary);\n}\n\n.filter-menu__calendar-day--range-edge {\n background: var(--color-background-bold-brand);\n color: var(--color-foreground-on-bold-background-primary);\n}\n\n.filter-menu__footer {\n flex: 0 0 auto;\n}\n\n.filter-menu__footer--categories-clear .ds-choice-footer__content {\n justify-content: flex-start;\n}\n\n.filter-menu__footer--categories-clear[aria-hidden='true']::before {\n visibility: hidden;\n}\n\n.filter-menu__clear {\n color: var(--color-foreground-bold-brand);\n}\n\n.filter-menu__match-mode-footer {\n flex: 0 0 auto;\n}\n\n.filter-menu__match-mode-content {\n justify-content: flex-start;\n padding-inline: calc(\n var(--dimension-space-050) + var(--ds-control-padding-inline, var(--dimension-space-075)) +\n var(--ds-control-label-inset, var(--dimension-space-025))\n );\n}\n\n.filter-menu__match-mode-toggle {\n appearance: none;\n display: inline-flex;\n align-items: center;\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n cursor: default;\n}\n\n@media (forced-colors: active) {\n .filter-menu__category-pane {\n border-inline-end-color: var(--ds-forced-color-content);\n }\n\n .filter-menu__calendar-day--range-edge {\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n type VNode,\n Watch,\n} from '@stencil/core';\nimport {\n CONTROL_TEXT_VARIANT,\n DATE_FILTER_RELATIVE_PRESETS,\n controlWidthClass,\n dateFilterRangeValue,\n dateFilterRelativeValue,\n parseDateFilterValue,\n resolveChoicePopupAlignOffset,\n resolveCssLengthPx,\n resolveMotionTimeMs,\n shiftIsoCalendarDate,\n TOKEN_CSS_LENGTHS,\n TOKEN_DEFAULTS,\n type ControlWidth,\n} from '../../utils';\nimport { observeTableCaptionCompact } from '../../utils/table-caption-compact';\nimport type { AnchoredAlign, AnchoredSide } from '../../utils/anchored-position';\nimport { AnchoredPositionController } from '../../utils/anchored-position-controller';\nimport { AnchoredOverlayInteractionController } from '../../utils/anchored-overlay-interaction-controller';\nimport { resolveAnchoredOverlayBoundaryRect } from '../../utils/anchored-overlay-boundary';\nimport { ChoiceOptionRow, ChoiceSearch } from '../../utils/choice-list-parts';\nimport { choiceListUsesSubtext } from '../../utils/choice-list';\nimport {\n FILTER_MENU_WEEKDAYS,\n filterMenuCalendarDays,\n filterMenuCalendarMonth,\n filterMenuCalendarMonthLabel,\n filterMenuToday,\n shiftFilterMenuCalendarMonth,\n} from './filter-menu-calendar';\n\nexport type FilterMenuFilterKind = 'single' | 'multiple' | 'boolean' | 'date';\nexport type FilterMenuSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type FilterMenuWidth = ControlWidth;\nexport type FilterMenuFooterLayout = 'summary' | 'categories-clear';\nexport type FilterMenuMatchMode = 'any' | 'all';\ntype FilterMenuDateMode = 'range' | 'relative';\n\nexport interface FilterMenuOption {\n label: string;\n value: string;\n description?: string;\n isInactive?: boolean;\n}\n\nexport interface FilterMenuFilter {\n id: string;\n label: string;\n kind: FilterMenuFilterKind;\n options?: FilterMenuOption[];\n description?: string;\n fieldLabel?: string;\n /** Draw a standard menu-section divider after this category. */\n divider?: boolean;\n}\n\nexport type FilterMenuValue = string[] | boolean | string;\nexport type FilterMenuValues = Record<string, FilterMenuValue | undefined>;\nexport type FilterMenuMatchModes = Record<string, FilterMenuMatchMode | undefined>;\n\nexport interface FilterMenuChangeDetail {\n filterId: string;\n value: FilterMenuValue;\n}\n\nexport interface FilterMenuMatchModeChangeDetail {\n filterId: string;\n mode: FilterMenuMatchMode;\n}\n\nlet filterMenuId = 0;\n\nconst ICON_SIZE: Record<FilterMenuSize, 'lg' | 'md' | 'sm' | 'xs'> = {\n lg: 'lg',\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\nconst DATE_MODE_TABS = [\n { id: 'relative', label: 'Relative' },\n { id: 'range', label: 'Range' },\n];\n\nconst RELATIVE_DATE_OPTIONS: FilterMenuOption[] = DATE_FILTER_RELATIVE_PRESETS.map(preset => ({\n label: preset.label,\n value: dateFilterRelativeValue(preset.value),\n}));\n\n@Component({\n tag: 'ds-filter-menu',\n styleUrl: 'FilterMenu.css',\n scoped: true,\n})\nexport class FilterMenu {\n @Element() el!: HTMLElement;\n\n /** Controlled popup visibility. */\n @Prop({ mutable: true }) open: boolean = false;\n /** Select trigger text. */\n @Prop() triggerLabel: string = 'Filters';\n /** Append the active-filter count to the visible trigger label. */\n @Prop() showSelectedCount: boolean = true;\n /** Optional select trigger prefix icon name. */\n @Prop() icon: string | undefined = 'Filters';\n /** Select trigger density. */\n @Prop() size: FilterMenuSize = 'md';\n /** Select trigger width fit. */\n @Prop() width: FilterMenuWidth = 'hug';\n /** Show the surface-aware inset border around the select trigger. */\n @Prop() hasBorder: boolean = true;\n /** Show selected interaction fill when one or more criteria are active. */\n @Prop() activeFill: boolean = false;\n /**\n * Opt into table-caption icon-only chrome below 900px. The trigger omits its\n * visible label and chevron; keep an accessible name via aria-label.\n */\n @Prop({ reflect: true }) collapseLabel: boolean = false;\n /** ID applied to the internal select trigger. */\n @Prop() inputId: string | undefined;\n /** Direct accessible name for the internal select trigger. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n /** Product-owned filter categories and option definitions. */\n @Prop() filters: FilterMenuFilter[] = [];\n /** Controlled values keyed by filter id. */\n @Prop() values: FilterMenuValues = {};\n /** Controlled any/all match mode keyed by multiple-choice filter id. Defaults to any. */\n @Prop() matchModes: FilterMenuMatchModes = {};\n /** Controlled category shown in the option pane. */\n @Prop() activeFilterId: string | undefined;\n /** External trigger element to position against. */\n @Prop() anchor: HTMLElement | undefined;\n /** ID of the external trigger element used for positioning and focus return. */\n @Prop() anchorId: string | undefined;\n /** Explicit collision owner; otherwise the nearest data-ds-overlay-boundary ancestor is used. */\n @Prop() boundary: HTMLElement | undefined;\n /** Preferred popup side; collision handling may flip it. */\n @Prop() side: AnchoredSide = 'bottom';\n /** Cross-axis alignment against the trigger. */\n @Prop() align: AnchoredAlign = 'end';\n /** Gap between trigger and popup — number in px or a TokoMo length. */\n @Prop() sideOffset: number | string = TOKEN_CSS_LENGTHS.space050;\n /** Cross-axis offset — number in px or a TokoMo length. */\n @Prop() alignOffset: number | string = 0;\n /** Popup width. It remains clamped to its collision boundary by the component recipe. */\n @Prop() menuWidth: string = TOKEN_CSS_LENGTHS.menuWidthLg;\n /** Accessible name for the non-modal filter dialog. */\n @Prop() menuLabel: string = 'Filters';\n /** Accessible name for the category tab list. */\n @Prop() categoriesLabel: string = 'Filter categories';\n /** Footer action and date-clear accessible label. */\n @Prop() clearLabel: string = 'Clear';\n /** Placeholder shown in each non-date option search header. */\n @Prop() searchPlaceholder: string = 'Search';\n /** Empty-state text shown when an option search has no matches. */\n @Prop() noResultsText: string = 'No results';\n /** Footer recipe: full-width selected summary or reserved category-pane Clear action. */\n @Prop() footerLayout: FilterMenuFooterLayout = 'summary';\n /** Show a visible focus ring on initial entry after keyboard activation. */\n @Prop() initialFocusVisible: boolean = false;\n\n @State() private shouldRender = false;\n @State() private closing = false;\n @State() private positionReady = false;\n @State() private pos: { x: number; y: number } = { x: 0, y: 0 };\n @State() private focusRingVisible = false;\n @State() private activeOptionIndex = 0;\n @State() private captionCompact = false;\n @State() private dateModeByFilter: Record<string, FilterMenuDateMode> = {};\n @State() private calendarMonthByFilter: Record<string, string> = {};\n @State() private pendingRangeStartByFilter: Record<string, string> = {};\n @State() private previewRangeEndByFilter: Record<string, string> = {};\n @State() private optionQueryByFilter: Record<string, string> = {};\n\n /** Requests a controlled value replacement without closing the popup. */\n @Event() dsChange!: EventEmitter<FilterMenuChangeDetail>;\n /** Requests that the consumer clear every filter value. */\n @Event() dsClear!: EventEmitter<void>;\n /** Requests a controlled any/all mode replacement for a multiple-choice filter. */\n @Event() dsMatchModeChange!: EventEmitter<FilterMenuMatchModeChangeDetail>;\n /** Requests a controlled active-category replacement. */\n @Event() dsActiveFilterChange!: EventEmitter<string>;\n /** Requests that the controlled popup close. */\n @Event() dsClose!: EventEmitter<void>;\n /** Emitted whenever internal select-trigger activation changes popup visibility. */\n @Event() dsOpenChange!: EventEmitter<boolean>;\n /** Emitted after exit motion and rendered popup removal complete. */\n @Event() dsAfterClose!: EventEmitter<void>;\n\n private readonly generatedId = `ds-filter-menu-${++filterMenuId}`;\n private triggerElement: HTMLButtonElement | null = null;\n private pendingInitialFocusVisible = false;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private captionCompactDisconnect: (() => void) | undefined;\n private hasLoaded = false;\n private closingSnapshot: {\n filters: FilterMenuFilter[];\n values: FilterMenuValues;\n matchModes: FilterMenuMatchModes;\n activeFilterId: string | undefined;\n } | null = null;\n\n private readonly position = new AnchoredPositionController({\n getAnchor: () => this.resolvedAnchor,\n getPopup: () => this.el.querySelector<HTMLElement>('.filter-menu-popup'),\n getOwnerDocument: () => this.el.ownerDocument,\n measure: (anchor, popup) => {\n if (!this.open) return null;\n const anchorRect = anchor.getBoundingClientRect();\n const sectionInsetPx = resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n return {\n anchorRect,\n popupWidth: popup.offsetWidth || this.popupFallbackWidth,\n popupHeight: popup.offsetHeight || this.popupFallbackHeight,\n side: this.side,\n align: this.align,\n sideOffsetPx: resolveCssLengthPx(this.sideOffset, TOKEN_DEFAULTS.space050),\n alignOffsetPx: resolveChoicePopupAlignOffset({\n align: this.align,\n alignOffsetPx: resolveCssLengthPx(this.alignOffset, 0),\n sectionInsetPx,\n }),\n viewportPadPx: this.viewportPad,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n collisionRect: resolveAnchoredOverlayBoundaryRect(anchor, this.boundary),\n };\n },\n apply: ({ x, y }) => {\n this.pos = { x, y };\n },\n onReady: () => {\n this.positionReady = true;\n },\n liveUpdate: 'double-frame',\n observeResize: true,\n topLayer: true,\n });\n private readonly interaction = new AnchoredOverlayInteractionController({\n getAnchor: () => this.resolvedAnchor,\n getPopup: () => this.el.querySelector<HTMLElement>('.filter-menu-popup'),\n getOwnerDocument: () => this.el.ownerDocument,\n onOutsideActivation: () => this.close(),\n });\n\n componentDidLoad() {\n this.hasLoaded = true;\n this.syncCaptionCompactObserver();\n if (this.open) this.onOpenChange(true);\n }\n\n connectedCallback() {\n if (!this.hasLoaded) return;\n this.syncCaptionCompactObserver();\n if (this.open) this.onOpenChange(true);\n }\n\n disconnectedCallback() {\n this.disconnectCaptionCompactObserver();\n this.position.unobserve();\n this.teardownListeners();\n }\n\n @Watch('collapseLabel')\n onCollapseLabelChange() {\n this.syncCaptionCompactObserver();\n }\n\n @Watch('open')\n onOpenChange(isOpen: boolean) {\n if (isOpen) {\n this.teardownListeners();\n this.closingSnapshot = null;\n this.shouldRender = true;\n this.closing = false;\n this.positionReady = false;\n this.focusRingVisible = this.pendingInitialFocusVisible || this.initialFocusVisible;\n this.setupListeners();\n this.position.schedule(() => this.focusInitialCategory());\n return;\n }\n\n if (!this.shouldRender) return;\n this.position.cancel();\n this.captureClosingSnapshot();\n this.closing = true;\n this.teardownListeners();\n const duration = resolveMotionTimeMs(\n TOKEN_DEFAULTS.motionShort2,\n TOKEN_DEFAULTS.animationDurationShort3\n );\n if (duration <= 0) {\n this.finishClose();\n return;\n }\n this.closeTimer = setTimeout(() => this.finishClose(), duration);\n }\n\n @Watch('anchor')\n @Watch('anchorId')\n @Watch('boundary')\n @Watch('side')\n @Watch('align')\n @Watch('sideOffset')\n @Watch('alignOffset')\n @Watch('menuWidth')\n onPositionInputChange() {\n if (this.open) this.position.schedule();\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (!this.shouldRender || this.closing) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n return;\n }\n if (event.key !== 'Tab' || !this.tabLeavesPopup(event)) return;\n event.preventDefault();\n this.close(false);\n this.interaction.moveFocusAfterTab(event.shiftKey);\n }\n\n private get resolvedAnchor(): HTMLElement | null {\n if (this.anchor) return this.anchor;\n if (this.anchorId) return document.getElementById(this.anchorId);\n return this.triggerElement;\n }\n\n private get usesInternalTrigger(): boolean {\n return !this.anchor && !this.anchorId;\n }\n\n private get viewportPad(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n }\n\n private get popupFallbackWidth(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.menuWidthLg, TOKEN_DEFAULTS.menuWidthLg);\n }\n\n private get popupFallbackHeight(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.menuFallbackHeight, TOKEN_DEFAULTS.menuFallbackHeight);\n }\n\n private setupListeners() {\n this.interaction.connect();\n this.position.observe();\n }\n\n private teardownListeners() {\n this.position.unobserve();\n this.interaction.disconnect();\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private close(restoreFocus = true) {\n this.captureClosingSnapshot();\n if (restoreFocus) this.interaction.focusAnchor();\n this.dsOpenChange.emit(false);\n this.dsClose.emit();\n this.open = false;\n this.onOpenChange(false);\n }\n\n private toggleFromTrigger(event: MouseEvent) {\n if (this.open) {\n this.close();\n return;\n }\n this.pendingInitialFocusVisible = event.detail === 0;\n this.open = true;\n this.dsOpenChange.emit(true);\n this.onOpenChange(true);\n }\n\n private handleTriggerKeyDown(event: KeyboardEvent) {\n if (event.key !== 'ArrowDown' || this.open) return;\n event.preventDefault();\n this.pendingInitialFocusVisible = true;\n this.open = true;\n this.dsOpenChange.emit(true);\n this.onOpenChange(true);\n }\n\n private finishClose() {\n const popup = this.el.querySelector<HTMLElement>('.filter-menu-popup');\n if (popup?.matches(':popover-open')) popup.hidePopover();\n this.shouldRender = false;\n this.closing = false;\n this.closingSnapshot = null;\n this.closeTimer = null;\n this.dateModeByFilter = {};\n this.calendarMonthByFilter = {};\n this.pendingRangeStartByFilter = {};\n this.previewRangeEndByFilter = {};\n this.optionQueryByFilter = {};\n this.dsAfterClose.emit();\n }\n\n private captureClosingSnapshot() {\n if (this.closingSnapshot) return;\n this.closingSnapshot = {\n filters: this.filters.map(filter => ({\n ...filter,\n options: filter.options?.map(option => ({ ...option })),\n })),\n values: Object.fromEntries(\n Object.entries(this.values).map(([key, value]) => [\n key,\n Array.isArray(value) ? [...value] : value,\n ])\n ),\n matchModes: { ...this.matchModes },\n activeFilterId: this.activeFilterId,\n };\n }\n\n private focusInitialCategory() {\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>('.filter-menu__category[tabindex=\"0\"]')?.focus();\n this.pendingInitialFocusVisible = false;\n });\n }\n\n private tabLeavesPopup(event: KeyboardEvent): boolean {\n return this.interaction.tabLeavesPopup(event);\n }\n\n private selectedFilter(filters: FilterMenuFilter[], activeFilterId: string | undefined) {\n return filters.find(filter => filter.id === activeFilterId) ?? filters[0];\n }\n\n private selectedCount(filter: FilterMenuFilter, values: FilterMenuValues): number {\n const value = values[filter.id];\n if (filter.kind === 'multiple') return Array.isArray(value) ? value.length : 0;\n if (filter.kind === 'boolean') return value === true ? 1 : 0;\n return typeof value === 'string' && value.length > 0 ? 1 : 0;\n }\n\n private totalSelected(filters: FilterMenuFilter[], values: FilterMenuValues): number {\n return filters.reduce((total, filter) => total + this.selectedCount(filter, values), 0);\n }\n\n private activeFilterCount(filters: FilterMenuFilter[], values: FilterMenuValues): number {\n return filters.filter(filter => this.selectedCount(filter, values) > 0).length;\n }\n\n private selectCategory(filterId: string, focus = false) {\n this.activeOptionIndex = 0;\n this.dsActiveFilterChange.emit(filterId);\n if (!focus) return;\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>(`[data-filter-category=\"${filterId}\"]`)?.focus();\n });\n }\n\n private handleCategoryKeyDown(\n event: KeyboardEvent,\n filters: FilterMenuFilter[],\n filterId: string\n ) {\n const currentIndex = filters.findIndex(filter => filter.id === filterId);\n let nextIndex: number;\n if (event.key === 'ArrowDown') nextIndex = (currentIndex + 1) % filters.length;\n else if (event.key === 'ArrowUp')\n nextIndex = (currentIndex - 1 + filters.length) % filters.length;\n else if (event.key === 'Home') nextIndex = 0;\n else if (event.key === 'End') nextIndex = filters.length - 1;\n else if (event.key === 'ArrowRight') {\n event.preventDefault();\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(\n '.filter-menu__options [role=\"option\"], .filter-menu__options [data-date-option], .filter-menu__options input'\n )\n ?.focus();\n });\n return;\n } else return;\n\n event.preventDefault();\n this.focusRingVisible = true;\n this.selectCategory(filters[nextIndex].id, true);\n }\n\n private handlePanelKeyDown(event: KeyboardEvent, filterId: string) {\n if (event.key !== 'ArrowLeft') return;\n event.preventDefault();\n this.el.querySelector<HTMLElement>(`[data-filter-category=\"${filterId}\"]`)?.focus();\n }\n\n private handleOptionKeyDown(\n event: KeyboardEvent,\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n index: number,\n values: FilterMenuValues,\n visibleOptions: FilterMenuOption[] = filter.options ?? []\n ) {\n if (event.key === 'ArrowLeft') {\n this.handlePanelKeyDown(event, filter.id);\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.selectOption(filter, option, values);\n return;\n }\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n event.preventDefault();\n const enabled = visibleOptions\n .map((candidate, optionIndex) => ({ candidate, optionIndex }))\n .filter(({ candidate }) => !candidate.isInactive)\n .map(({ optionIndex }) => optionIndex);\n if (!enabled.length) return;\n const current = enabled.indexOf(index);\n let next: number;\n if (event.key === 'Home') next = enabled[0];\n else if (event.key === 'End') next = enabled[enabled.length - 1];\n else {\n const direction = event.key === 'ArrowDown' ? 1 : -1;\n const start = current >= 0 ? current : direction === 1 ? -1 : 0;\n next = enabled[(start + direction + enabled.length) % enabled.length];\n }\n this.activeOptionIndex = next;\n this.focusRingVisible = true;\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(`#${this.generatedId}-${filter.id}-option-${next}`)\n ?.focus();\n });\n }\n\n private optionMatchesQuery(option: FilterMenuOption, query: string): boolean {\n const normalized = query.trim().toLocaleLowerCase();\n if (!normalized) return true;\n return `${option.label} ${option.description ?? ''}`.toLocaleLowerCase().includes(normalized);\n }\n\n private visibleOptions(\n filter: FilterMenuFilter,\n query = this.optionQueryByFilter[filter.id] ?? ''\n ) {\n if (filter.kind === 'boolean') {\n const option = this.booleanOption(filter);\n return this.optionMatchesQuery(option, query) ? [option] : [];\n }\n return (filter.options ?? []).filter(option => this.optionMatchesQuery(option, query));\n }\n\n private booleanOption(filter: FilterMenuFilter): FilterMenuOption {\n return {\n label: filter.fieldLabel ?? filter.label,\n value: 'true',\n description: filter.description,\n };\n }\n\n private setOptionQuery(filter: FilterMenuFilter, value: string) {\n const visibleOptions = this.visibleOptions(filter, value);\n const firstEnabled = visibleOptions.findIndex(option => !option.isInactive);\n this.activeOptionIndex = firstEnabled;\n this.focusRingVisible = false;\n this.optionQueryByFilter = { ...this.optionQueryByFilter, [filter.id]: value };\n requestAnimationFrame(() => {\n const content = this.el.querySelector<HTMLElement>('.filter-menu__options-content');\n if (content) content.scrollTop = 0;\n this.position.schedule();\n });\n }\n\n private handleOptionSearchKeyDown(event: KeyboardEvent, filter: FilterMenuFilter) {\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n const visibleOptions = this.visibleOptions(filter);\n const enabled = visibleOptions\n .map((option, index) => ({ option, index }))\n .filter(({ option }) => !option.isInactive)\n .map(({ index }) => index);\n if (!enabled.length) return;\n event.preventDefault();\n const next = event.key === 'ArrowDown' ? enabled[0] : enabled[enabled.length - 1];\n this.activeOptionIndex = next;\n this.focusRingVisible = true;\n requestAnimationFrame(() => {\n this.el\n .querySelector<HTMLElement>(`#${this.generatedId}-${filter.id}-option-${next}`)\n ?.focus();\n });\n }\n\n private toggleMultiple(\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n checked: boolean,\n values: FilterMenuValues\n ) {\n if (option.isInactive) return;\n const current = Array.isArray(values[filter.id]) ? (values[filter.id] as string[]) : [];\n const selected = new Set(current);\n if (checked) selected.add(option.value);\n else selected.delete(option.value);\n const ordered = (filter.options ?? [])\n .map(candidate => candidate.value)\n .filter(value => selected.has(value));\n this.dsChange.emit({ filterId: filter.id, value: ordered });\n }\n\n private selectOption(\n filter: FilterMenuFilter,\n option: FilterMenuOption,\n values: FilterMenuValues\n ) {\n if (option.isInactive) return;\n if (filter.kind === 'single') {\n this.dsChange.emit({ filterId: filter.id, value: option.value });\n return;\n }\n const selected = Array.isArray(values[filter.id])\n ? (values[filter.id] as string[]).includes(option.value)\n : false;\n this.toggleMultiple(filter, option, !selected, values);\n }\n\n private dateMode(filterId: string, value: FilterMenuValue | undefined): FilterMenuDateMode {\n return this.dateModeByFilter[filterId] ?? parseDateFilterValue(value)?.kind ?? 'relative';\n }\n\n private setDateMode(filter: FilterMenuFilter, value: FilterMenuValue | undefined, mode: string) {\n if (mode !== 'range' && mode !== 'relative') return;\n this.dateModeByFilter = { ...this.dateModeByFilter, [filter.id]: mode };\n this.activeOptionIndex = 0;\n if (mode === 'range' && !this.calendarMonthByFilter[filter.id]) {\n const parsed = parseDateFilterValue(value);\n const initialDate = parsed?.kind === 'range' ? parsed.start : filterMenuToday();\n this.calendarMonthByFilter = {\n ...this.calendarMonthByFilter,\n [filter.id]: filterMenuCalendarMonth(initialDate),\n };\n }\n if (mode === 'relative' && this.pendingRangeStartByFilter[filter.id]) {\n const next = { ...this.pendingRangeStartByFilter };\n delete next[filter.id];\n this.pendingRangeStartByFilter = next;\n }\n if (mode === 'relative') this.clearCalendarRangePreview(filter.id);\n }\n\n private calendarMonth(filterId: string, value: FilterMenuValue | undefined): string {\n const parsed = parseDateFilterValue(value);\n const initialDate = parsed?.kind === 'range' ? parsed.start : filterMenuToday();\n return this.calendarMonthByFilter[filterId] ?? filterMenuCalendarMonth(initialDate);\n }\n\n private moveCalendarMonth(filterId: string, month: string, offset: number) {\n this.clearCalendarRangePreview(filterId);\n this.calendarMonthByFilter = {\n ...this.calendarMonthByFilter,\n [filterId]: shiftFilterMenuCalendarMonth(month, offset),\n };\n }\n\n private selectCalendarDate(filterId: string, value: string) {\n this.clearCalendarRangePreview(filterId);\n const pendingStart = this.pendingRangeStartByFilter[filterId];\n const next = { ...this.pendingRangeStartByFilter };\n if (pendingStart) delete next[filterId];\n else next[filterId] = value;\n this.pendingRangeStartByFilter = next;\n this.dsChange.emit({\n filterId,\n value: dateFilterRangeValue(pendingStart ?? value, value),\n });\n }\n\n private previewCalendarRange(filterId: string, value: string) {\n if (!this.pendingRangeStartByFilter[filterId]) return;\n if (this.previewRangeEndByFilter[filterId] === value) return;\n this.previewRangeEndByFilter = { ...this.previewRangeEndByFilter, [filterId]: value };\n }\n\n private clearCalendarRangePreview(filterId: string) {\n if (!this.previewRangeEndByFilter[filterId]) return;\n const next = { ...this.previewRangeEndByFilter };\n delete next[filterId];\n this.previewRangeEndByFilter = next;\n }\n\n private focusCalendarDate(filterId: string, value: string) {\n this.previewCalendarRange(filterId, value);\n const targetMonth = filterMenuCalendarMonth(value);\n if (this.calendarMonthByFilter[filterId] !== targetMonth) {\n this.calendarMonthByFilter = { ...this.calendarMonthByFilter, [filterId]: targetMonth };\n }\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>(`[data-date-option=\"${value}\"]`)?.focus();\n });\n }\n\n private handleCalendarDayKeyDown(event: KeyboardEvent, filterId: string, value: string) {\n let offset: number | null = null;\n if (event.key === 'ArrowLeft') offset = -1;\n else if (event.key === 'ArrowRight') offset = 1;\n else if (event.key === 'ArrowUp') offset = -7;\n else if (event.key === 'ArrowDown') offset = 7;\n else if (event.key === 'Home') {\n offset = -new Date(`${value}T00:00:00Z`).getUTCDay();\n } else if (event.key === 'End') {\n offset = 6 - new Date(`${value}T00:00:00Z`).getUTCDay();\n } else if (event.key === 'PageUp') {\n const month = shiftFilterMenuCalendarMonth(filterMenuCalendarMonth(value), -1);\n const day = value.slice(8, 10);\n const candidate = `${month}-${day}`;\n const target = parseDateFilterValue(candidate) ? candidate : `${month}-01`;\n event.preventDefault();\n this.focusCalendarDate(filterId, target);\n return;\n } else if (event.key === 'PageDown') {\n const month = shiftFilterMenuCalendarMonth(filterMenuCalendarMonth(value), 1);\n const day = value.slice(8, 10);\n const candidate = `${month}-${day}`;\n const target = parseDateFilterValue(candidate) ? candidate : `${month}-01`;\n event.preventDefault();\n this.focusCalendarDate(filterId, target);\n return;\n }\n if (offset === null) return;\n event.preventDefault();\n this.focusCalendarDate(filterId, shiftIsoCalendarDate(value, offset));\n }\n\n private renderRelativeDateOptions(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n const relativeFilter: FilterMenuFilter = {\n ...filter,\n kind: 'single',\n options: RELATIVE_DATE_OPTIONS,\n };\n return (\n <div\n class=\"filter-menu__date-relative ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"listbox\"\n aria-label=\"Relative date\"\n >\n {RELATIVE_DATE_OPTIONS.map((option, index) => (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-relative-${index}`}\n option={option}\n selected={value === option.value}\n active={index === this.activeOptionIndex}\n focusRingVisible={this.focusRingVisible}\n usesSubtext={false}\n tabIndex={index === this.activeOptionIndex ? 0 : -1}\n onFocus={() => {\n this.activeOptionIndex = index;\n }}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleOptionKeyDown(event, relativeFilter, option, index, {\n [filter.id]: value,\n })\n }\n onHover={() => {\n this.focusRingVisible = false;\n this.activeOptionIndex = index;\n }}\n onSelect={() => this.dsChange.emit({ filterId: filter.id, value: option.value })}\n />\n ))}\n </div>\n );\n }\n\n private renderDateCalendar(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n const parsed = parseDateFilterValue(value);\n const range = parsed?.kind === 'range' ? parsed : null;\n const month = this.calendarMonth(filter.id, value);\n const days = filterMenuCalendarDays(month);\n const today = filterMenuToday();\n const pendingStart = this.pendingRangeStartByFilter[filter.id];\n const previewEnd = this.previewRangeEndByFilter[filter.id];\n const previewStart = pendingStart && previewEnd ? [pendingStart, previewEnd].sort()[0] : null;\n const previewFinish = pendingStart && previewEnd ? [pendingStart, previewEnd].sort()[1] : null;\n const preferredFocus =\n this.pendingRangeStartByFilter[filter.id] ??\n range?.end ??\n (month === today.slice(0, 7) ? today : '');\n const focusDate = days.some(day => day.value === preferredFocus)\n ? preferredFocus\n : (days.find(day => day.inMonth)?.value ?? days[0]?.value);\n\n return (\n <div class=\"filter-menu__calendar\">\n <div class=\"filter-menu__calendar-heading ds-control--md\">\n <ds-button-unfilled\n class=\"filter-menu__calendar-nav filter-menu__calendar-nav--previous\"\n variant=\"icon\"\n icon=\"ChevronLeft\"\n size=\"md\"\n hasBorder={false}\n ariaLabel=\"Previous month\"\n onDsClick={() => this.moveCalendarMonth(filter.id, month, -1)}\n />\n <ds-text as=\"span\" variant=\"text-body-medium\" emphasis color=\"primary\">\n {filterMenuCalendarMonthLabel(month)}\n </ds-text>\n <ds-button-unfilled\n class=\"filter-menu__calendar-nav filter-menu__calendar-nav--next\"\n variant=\"icon\"\n icon=\"ChevronRight\"\n size=\"md\"\n hasBorder={false}\n ariaLabel=\"Next month\"\n onDsClick={() => this.moveCalendarMonth(filter.id, month, 1)}\n />\n </div>\n <div class=\"filter-menu__calendar-weekdays\" aria-hidden=\"true\">\n {FILTER_MENU_WEEKDAYS.map(day => (\n <ds-text as=\"span\" variant=\"text-body-small\" color=\"secondary\">\n {day}\n </ds-text>\n ))}\n </div>\n <div\n class=\"filter-menu__calendar-grid\"\n role=\"grid\"\n aria-label={filterMenuCalendarMonthLabel(month)}\n onMouseLeave={() => this.clearCalendarRangePreview(filter.id)}\n >\n {days.map(day => {\n const selectedInRange = Boolean(\n range && day.value >= range.start && day.value <= range.end\n );\n const previewInRange = Boolean(\n previewStart &&\n previewFinish &&\n day.value >= previewStart &&\n day.value <= previewFinish\n );\n const inRange = previewInRange || selectedInRange;\n const rangeEdge = Boolean(\n previewStart\n ? day.value === pendingStart\n : range && (day.value === range.start || day.value === range.end)\n );\n const textColor = rangeEdge\n ? 'on-bold'\n : inRange || day.value === today\n ? 'primary'\n : day.inMonth\n ? 'secondary'\n : 'tertiary';\n return (\n <button\n type=\"button\"\n role=\"gridcell\"\n data-date-option={day.value}\n class={{\n 'filter-menu__calendar-day': true,\n 'filter-menu__calendar-day--outside': !day.inMonth,\n 'filter-menu__calendar-day--today': day.value === today,\n 'filter-menu__calendar-day--in-range': inRange,\n 'filter-menu__calendar-day--range-preview': previewInRange,\n 'filter-menu__calendar-day--range-edge': rangeEdge,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n aria-label={day.label}\n aria-selected={selectedInRange ? 'true' : 'false'}\n tabIndex={day.value === focusDate ? 0 : -1}\n onMouseEnter={() => this.previewCalendarRange(filter.id, day.value)}\n onFocus={() => this.previewCalendarRange(filter.id, day.value)}\n onClick={() => this.selectCalendarDate(filter.id, day.value)}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleCalendarDayKeyDown(event, filter.id, day.value)\n }\n >\n <ds-text\n class=\"ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-medium\"\n color={textColor}\n emphasis={day.value === today}\n >\n {day.day}\n </ds-text>\n </button>\n );\n })}\n </div>\n </div>\n );\n }\n\n private renderDateFilter(filter: FilterMenuFilter, value: FilterMenuValue | undefined) {\n const mode = this.dateMode(filter.id, value);\n return (\n <div class=\"filter-menu__date\">\n <header class=\"filter-menu__date-header ds-chrome-header ds-chrome-header--bounded\">\n <ds-tab-group\n ariaLabel=\"Date filter mode\"\n size=\"md\"\n width=\"fill\"\n hasContainer={false}\n value={mode}\n tabs={DATE_MODE_TABS}\n onDsChange={(event: CustomEvent<string>) => {\n event.stopPropagation();\n this.setDateMode(filter, value, event.detail);\n }}\n />\n </header>\n <div class=\"filter-menu__date-body\">\n {mode === 'relative'\n ? this.renderRelativeDateOptions(filter, value)\n : this.renderDateCalendar(filter, value)}\n </div>\n </div>\n );\n }\n\n private renderOptionSearch(filter: FilterMenuFilter) {\n return (\n <div class=\"filter-menu__option-search\">\n <ChoiceSearch\n size=\"md\"\n hasFocusBoundary={false}\n hasInteractionFill={false}\n value={this.optionQueryByFilter[filter.id] ?? ''}\n placeholder={this.searchPlaceholder}\n ariaLabel={`Search ${filter.label} options`}\n controls={`${this.generatedId}-${filter.id}-options`}\n inputRef={() => undefined}\n clearLabel={`Clear ${filter.label} search`}\n onValueChange={value => this.setOptionQuery(filter, value)}\n onKeyDown={(event: KeyboardEvent) => this.handleOptionSearchKeyDown(event, filter)}\n />\n </div>\n );\n }\n\n private renderNoOptionResults() {\n return (\n <div\n class=\"ds-choice-empty ds-empty-region\"\n role=\"option\"\n aria-selected=\"false\"\n aria-disabled=\"true\"\n aria-label={this.noResultsText}\n aria-live=\"polite\"\n >\n <ds-empty-state body={this.noResultsText} />\n </div>\n );\n }\n\n private renderOptions(filter: FilterMenuFilter, values: FilterMenuValues) {\n const value = values[filter.id];\n if (filter.kind === 'multiple' || filter.kind === 'single') {\n const selected = Array.isArray(value) ? value : [];\n const allOptions = filter.options ?? [];\n const options = this.visibleOptions(filter);\n const usesSubtext = choiceListUsesSubtext(\n allOptions.map(option => ({\n label: option.label,\n value: option.value,\n subtext: option.description,\n }))\n );\n if (!options.length) return this.renderNoOptionResults();\n return options.map((option, index) => {\n const isSelected =\n filter.kind === 'multiple' ? selected.includes(option.value) : value === option.value;\n return (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-option-${index}`}\n option={{\n label: option.label,\n value: option.value,\n subtext: option.description,\n isInactive: option.isInactive,\n }}\n selected={isSelected}\n active={index === this.activeOptionIndex}\n focusRingVisible={this.focusRingVisible}\n usesSubtext={usesSubtext}\n tabIndex={index === this.activeOptionIndex ? 0 : -1}\n leading={\n filter.kind === 'multiple' ? (\n <span\n class=\"ds-choice-item__icon ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-checkbox label=\"\" size=\"md\" checked={isSelected} presentation />\n </span>\n ) : undefined\n }\n onFocus={() => {\n this.activeOptionIndex = index;\n }}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleOptionKeyDown(event, filter, option, index, values, options)\n }\n onHover={() => {\n this.focusRingVisible = false;\n this.activeOptionIndex = index;\n }}\n onSelect={() => this.selectOption(filter, option, values)}\n />\n );\n });\n }\n\n if (filter.kind === 'boolean') {\n const [option] = this.visibleOptions(filter);\n if (!option) return this.renderNoOptionResults();\n return (\n <ChoiceOptionRow\n size=\"md\"\n id={`${this.generatedId}-${filter.id}-option-0`}\n option={{\n label: option.label,\n value: option.value,\n subtext: option.description,\n }}\n selected={value === true}\n active\n focusRingVisible={this.focusRingVisible}\n usesSubtext={Boolean(option.description)}\n tabIndex={0}\n leading={\n <span\n class=\"ds-choice-item__icon ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-checkbox label=\"\" size=\"md\" checked={value === true} presentation />\n </span>\n }\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') this.handlePanelKeyDown(event, filter.id);\n else if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.dsChange.emit({ filterId: filter.id, value: value !== true });\n }\n }}\n onHover={() => {\n this.focusRingVisible = false;\n }}\n onSelect={() => this.dsChange.emit({ filterId: filter.id, value: value !== true })}\n />\n );\n }\n\n return this.renderDateFilter(filter, value);\n }\n\n private get captionIconOnly(): boolean {\n return (\n this.collapseLabel && this.captionCompact && this.usesInternalTrigger && Boolean(this.icon)\n );\n }\n\n private syncCaptionCompactObserver(): void {\n this.disconnectCaptionCompactObserver();\n if (!this.collapseLabel) {\n if (this.captionCompact) this.captionCompact = false;\n return;\n }\n this.captionCompactDisconnect = observeTableCaptionCompact(this.el, compact => {\n if (this.captionCompact !== compact) this.captionCompact = compact;\n });\n }\n\n private disconnectCaptionCompactObserver(): void {\n this.captionCompactDisconnect?.();\n this.captionCompactDisconnect = undefined;\n }\n\n private renderCaptionTooltip(trigger: VNode, label: string): VNode {\n if (!this.collapseLabel) return trigger;\n return (\n <ds-tooltip label={label} side=\"top\" size=\"sm\">\n {trigger}\n </ds-tooltip>\n );\n }\n\n private renderFooter(totalSelected: number, categoriesClear: boolean) {\n return (\n <div\n class={{\n 'filter-menu__footer': true,\n 'filter-menu__footer--categories-clear': categoriesClear,\n 'ds-choice-footer': true,\n }}\n aria-hidden={categoriesClear && totalSelected === 0 ? 'true' : undefined}\n >\n <div class=\"ds-choice-footer__content ds-control--md\">\n {!categoriesClear ? (\n <ds-text\n class=\"ds-choice-footer__summary\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n aria-live=\"polite\"\n >\n {totalSelected} selected\n </ds-text>\n ) : null}\n {totalSelected > 0 ? (\n <button\n class=\"filter-menu__clear ds-choice-footer__clear ds-text-action\"\n type=\"button\"\n onClick={() => {\n this.pendingRangeStartByFilter = {};\n this.dsClear.emit();\n }}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n {this.clearLabel}\n </ds-text>\n </button>\n ) : null}\n </div>\n </div>\n );\n }\n\n private renderMatchModeFooter(filter: FilterMenuFilter, matchModes: FilterMenuMatchModes) {\n const mode: FilterMenuMatchMode = matchModes[filter.id] === 'all' ? 'all' : 'any';\n const nextMode: FilterMenuMatchMode = mode === 'any' ? 'all' : 'any';\n return (\n <div class=\"filter-menu__match-mode-footer ds-choice-footer\">\n <div class=\"filter-menu__match-mode-content ds-choice-footer__content ds-control--md\">\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"secondary\">\n Limit results to\n </ds-text>\n <button\n class=\"filter-menu__match-mode-toggle ds-text-action ds-focus-ring\"\n type=\"button\"\n aria-label={`Limit ${filter.label} results to ${nextMode} selected`}\n onClick={() => this.dsMatchModeChange.emit({ filterId: filter.id, mode: nextMode })}\n onKeyDown={(event: KeyboardEvent) => this.handlePanelKeyDown(event, filter.id)}\n >\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"inherit\">\n {mode}\n </ds-text>\n </button>\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"secondary\">\n selected\n </ds-text>\n </div>\n </div>\n );\n }\n\n render() {\n const state =\n this.closing && this.closingSnapshot\n ? this.closingSnapshot\n : {\n filters: this.filters,\n values: this.values,\n matchModes: this.matchModes,\n activeFilterId: this.activeFilterId,\n };\n const activeFilter = this.selectedFilter(state.filters, state.activeFilterId);\n const totalSelected = this.totalSelected(state.filters, state.values);\n const activeFilterCount = this.activeFilterCount(state.filters, state.values);\n const hasActiveFilters = activeFilterCount > 0;\n const categoriesClearFooter = this.footerLayout === 'categories-clear';\n const label = `${this.triggerLabel}${\n this.showSelectedCount && hasActiveFilters ? ` · ${activeFilterCount}` : ''\n }`;\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const popupId = `${this.generatedId}-popup`;\n const popupStyle: Record<string, string> = {\n position: 'fixed',\n left: '0',\n top: '0',\n width: this.menuWidth,\n transform: `translate(${Math.round(this.pos.x)}px, ${Math.round(this.pos.y)}px)`,\n zIndex: '9998',\n visibility: this.positionReady ? 'visible' : 'hidden',\n };\n\n return (\n <Host\n class={{\n 'filter-menu-host': true,\n 'filter-menu-host--external-trigger': !this.usesInternalTrigger,\n 'ds-select-trigger-host': this.usesInternalTrigger,\n [`ds-control--${this.size}`]: true,\n 'ds-table-caption-control': this.collapseLabel,\n 'ds-table-caption-control--compact': this.captionIconOnly,\n ...controlWidthClass(this.width),\n }}\n >\n {this.usesInternalTrigger\n ? this.renderCaptionTooltip(\n <button\n ref={element => {\n this.triggerElement = (element as HTMLButtonElement) ?? null;\n }}\n id={this.inputId ?? `${this.generatedId}-trigger`}\n type=\"button\"\n class={{\n trigger: true,\n 'ds-control-frame': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': this.activeFill && hasActiveFilters,\n 'trigger--expanded': this.open || this.closing,\n 'ds-interaction-fill--surface-open': this.open || this.closing,\n 'trigger--bordered': this.hasBorder,\n 'trigger--has-value': hasActiveFilters,\n [`ds-control--${this.size}`]: true,\n }}\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-expanded={String(this.open)}\n aria-controls={this.open ? popupId : undefined}\n aria-label={this.ariaLabel ?? this.menuLabel}\n onClick={(event: MouseEvent) => this.toggleFromTrigger(event)}\n onKeyDown={(event: KeyboardEvent) => this.handleTriggerKeyDown(event)}\n >\n {this.icon ? (\n <span\n class=\"trigger__prefix ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n </span>\n ) : null}\n {this.captionIconOnly ? null : (\n <ds-text\n class=\"trigger__label-box trigger__label trigger__label-content ds-control-label-box ds-interaction-fill__content\"\n as=\"span\"\n variant={textVariant}\n color=\"inherit\"\n lineTruncation={1}\n >\n {label}\n </ds-text>\n )}\n {this.captionIconOnly ? null : (\n <span\n class=\"trigger__chevron ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name=\"ChevronDown\" size={iconSize} color=\"inherit\" />\n </span>\n )}\n </button>,\n this.captionIconOnly ? label : ''\n )\n : null}\n\n {this.shouldRender ? (\n <div\n id={popupId}\n popover=\"manual\"\n class={{\n 'filter-menu-popup': true,\n 'ds-choice-popup': true,\n 'ds-choice-popup--closing': this.closing,\n }}\n style={popupStyle}\n role=\"dialog\"\n aria-label={this.menuLabel}\n >\n {activeFilter ? (\n <div class=\"filter-menu\">\n <div class=\"filter-menu__body\">\n <div class=\"filter-menu__category-pane\">\n <div\n class=\"filter-menu__categories ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"tablist\"\n aria-label={this.categoriesLabel}\n aria-orientation=\"vertical\"\n >\n {state.filters.map(filter => {\n const active = filter.id === activeFilter.id;\n const count = this.selectedCount(filter, state.values);\n return (\n <div\n key={filter.id}\n class={{\n 'filter-menu__category-section': true,\n 'ds-choice-section--divided': Boolean(filter.divider),\n }}\n >\n <button\n id={`${this.generatedId}-${filter.id}-tab`}\n type=\"button\"\n role=\"tab\"\n data-filter-category={filter.id}\n class={{\n 'filter-menu__category': true,\n 'filter-menu__category--active': active,\n 'ds-choice-item': true,\n 'ds-control-frame': true,\n 'ds-control--md': true,\n 'ds-focus-ring-inset': true,\n 'ds-focus-ring--visible': active && this.focusRingVisible,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': active,\n }}\n aria-selected={String(active)}\n aria-controls={`${this.generatedId}-panel`}\n tabIndex={active ? 0 : -1}\n onMouseDown={() => {\n this.focusRingVisible = false;\n }}\n onClick={() => this.selectCategory(filter.id)}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleCategoryKeyDown(event, state.filters, filter.id)\n }\n >\n <ds-text\n class=\"ds-choice-item__content ds-choice-item__label ds-control-label-box ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-medium\"\n color={active ? 'primary' : 'secondary'}\n >\n {filter.label}\n </ds-text>\n {count > 0 && filter.kind === 'date' ? (\n <span\n class=\"filter-menu__category-dot-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-badge variant=\"dot\" hasRing={false} label=\"\" />\n </span>\n ) : count > 0 ? (\n <ds-tag\n class=\"ds-choice-item__tag ds-interaction-fill__content\"\n label={String(count)}\n size=\"sm\"\n intent=\"brand\"\n contrast=\"bold\"\n isInset\n rounded\n />\n ) : null}\n </button>\n </div>\n );\n })}\n </div>\n {categoriesClearFooter ? this.renderFooter(totalSelected, true) : null}\n </div>\n\n <div\n id={`${this.generatedId}-panel`}\n class={{\n 'filter-menu__options': true,\n 'filter-menu__options--date': activeFilter.kind === 'date',\n }}\n role=\"tabpanel\"\n aria-labelledby={`${this.generatedId}-${activeFilter.id}-tab`}\n >\n {activeFilter.kind === 'date' ? null : this.renderOptionSearch(activeFilter)}\n <div class=\"filter-menu__options-content\">\n {activeFilter.kind === 'date' ? (\n <div key={activeFilter.id} class=\"filter-menu__option-list--date\">\n {this.renderOptions(activeFilter, state.values)}\n </div>\n ) : (\n <div\n id={`${this.generatedId}-${activeFilter.id}-options`}\n key={activeFilter.id}\n class=\"filter-menu__option-list ds-choice-list ds-chrome-column ds-chrome-space--sm\"\n role=\"listbox\"\n aria-label={activeFilter.label}\n aria-multiselectable={\n activeFilter.kind === 'multiple' ? 'true' : undefined\n }\n >\n {this.renderOptions(activeFilter, state.values)}\n </div>\n )}\n </div>\n {activeFilter.kind === 'multiple'\n ? this.renderMatchModeFooter(activeFilter, state.matchModes)\n : null}\n </div>\n </div>\n\n {!categoriesClearFooter && totalSelected > 0\n ? this.renderFooter(totalSelected, false)\n : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{p as t,H as i,c as s,h as e,a as n,t as o}from"./index.js";import{d as r}from"./p-rSC7ZUpy.js";import{d}from"./p--yvQzZoO.js";import{d as a}from"./p-Cea7rROU.js";import{d as c}from"./p-0XTyQNRG.js";import{d as l}from"./p-aMyflqva.js";import{d as u}from"./p-CN8PQLZu.js";import{D as p,s as h}from"./p-DOUk4KoT.js";import{s as f,r as v}from"./p-C0qN3PSb.js";import{C as g}from"./p-CuwopElg.js";import{c as m}from"./p-DuFm-ieS.js";const b=()=>`@media (forced-colors: active){.sc-ds-input:root,.sc-ds-input-h,.ds-forced-colors-scope.sc-ds-input{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-interaction-fill.sc-ds-input-h,.ds-interaction-fill.sc-ds-input{position:var(--ds-interaction-position, relative);z-index:var(--ds-interaction-z-index, 0);cursor:default;--ds-interaction-hover:var(--color-interaction-hover);--ds-interaction-pressed:var(--color-interaction-pressed);--ds-interaction-active:var(--color-interaction-active-brand);--ds-interaction-border-width:0px;--ds-interaction-border-color:transparent;--ds-interaction-divider-width:0px;--ds-interaction-divider-color:transparent;--ds-interaction-divider-inline-start-width:0px;--ds-interaction-divider-inline-start-color:transparent;--ds-interaction-divider-inline-end-width:0px;--ds-interaction-divider-inline-end-color:transparent}.ds-interaction-fill.sc-ds-input-h::before,.ds-interaction-fill.sc-ds-input::before,.ds-interaction-fill.sc-ds-input-h::after,.ds-interaction-fill.sc-ds-input::after{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;pointer-events:none;cursor:inherit;transition:none}.ds-interaction-fill.sc-ds-input-h::before,.ds-interaction-fill.sc-ds-input::before{z-index:1}.ds-interaction-fill.sc-ds-input-h::after,.ds-interaction-fill.sc-ds-input::after{z-index:3;box-shadow:inset 0 calc(-1 * var(--ds-interaction-divider-width)) 0 var(--ds-interaction-divider-color), inset var(--ds-interaction-divider-inline-start-width) 0 0 var(--ds-interaction-divider-inline-start-color), inset calc(-1 * var(--ds-interaction-divider-inline-end-width)) 0 0 var(--ds-interaction-divider-inline-end-color), inset 0 0 0 var(--ds-interaction-border-width) var(--ds-interaction-border-color)}.ds-interaction-fill--bordered.sc-ds-input-h,.ds-interaction-fill--bordered.sc-ds-input{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--color-border-secondary)}.ds-interaction-fill--selected.sc-ds-input-h::before,.ds-interaction-fill--selected.sc-ds-input::before{background:var(--ds-interaction-active)}.ds-interaction-fill--selected.sc-ds-input-h,.ds-interaction-fill--selected.sc-ds-input{--ds-interaction-dot-ring:var(--ds-interaction-active)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-input-h:hover:not(:disabled)::after,.ds-interaction-fill.sc-ds-input:hover:not(:disabled)::after{background:var(--ds-interaction-hover)}}.ds-interaction-fill.sc-ds-input-h:active:not(:disabled)::after,.ds-interaction-fill.sc-ds-input:active:not(:disabled)::after{background:var(--ds-interaction-pressed)}.ds-interaction-fill--grouped.sc-ds-input-h::after,.ds-interaction-fill--grouped.sc-ds-input::after,.ds-interaction-fill--grouped.sc-ds-input-h:active:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-input:active:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill--grouped.sc-ds-input-h:hover:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-input:hover:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}}.ds-interaction-fill--grouped.sc-ds-input-h,.ds-interaction-fill--grouped.sc-ds-input{--ds-interaction-divider-width:var(--ds-interaction-group-divider-width, 0px);--ds-interaction-divider-color:var(--ds-interaction-group-divider-color, transparent);--ds-interaction-divider-inline-start-width:var( --ds-interaction-group-divider-inline-start-width, 0px );--ds-interaction-divider-inline-start-color:var( --ds-interaction-group-divider-inline-start-color, transparent );--ds-interaction-divider-inline-end-width:var( --ds-interaction-group-divider-inline-end-width, 0px );--ds-interaction-divider-inline-end-color:var( --ds-interaction-group-divider-inline-end-color, transparent )}.ds-interaction-fill.sc-ds-input-h>.ds-interaction-fill__content.sc-ds-input,.ds-interaction-fill.sc-ds-input>.ds-interaction-fill__content.sc-ds-input,.ds-interaction-fill__content.sc-ds-input{position:relative;z-index:2;cursor:inherit}.ds-interaction-fill--on-faint.sc-ds-input-h,.ds-interaction-fill--on-faint.sc-ds-input{--ds-interaction-active:var(--color-interaction-active)}.ds-interaction-fill--on-medium.sc-ds-input-h,.ds-interaction-fill--on-medium.sc-ds-input{--ds-interaction-hover:var(--color-interaction-on-medium-background-hover);--ds-interaction-pressed:var(--color-interaction-on-medium-background-pressed);--ds-interaction-active:var(--color-interaction-on-medium-background-active);--ds-focus-ring-color:var(--color-interaction-on-medium-background-focus)}.ds-interaction-fill--on-bold.sc-ds-input-h,.ds-interaction-fill--on-bold.sc-ds-input{--ds-interaction-hover:var(--color-interaction-on-bold-background-hover);--ds-interaction-pressed:var(--color-interaction-on-bold-background-pressed);--ds-interaction-active:var(--color-interaction-on-bold-background-active);--ds-focus-ring-color:var(--color-interaction-on-bold-background-focus)}.ds-interaction-fill--on-strong.sc-ds-input-h,.ds-interaction-fill--on-strong.sc-ds-input{--ds-interaction-hover:var(--color-interaction-on-strong-background-hover);--ds-interaction-pressed:var(--color-interaction-on-strong-background-pressed);--ds-interaction-active:var(--color-interaction-on-strong-background-active);--ds-focus-ring-color:var(--color-interaction-on-strong-background-focus)}.ds-interaction-fill--on-translucent.sc-ds-input-h,.ds-interaction-fill--on-translucent.sc-ds-input{--ds-interaction-hover:var(--color-translucent-interaction-hover);--ds-interaction-pressed:var(--color-translucent-interaction-pressed);--ds-interaction-active:var(--color-translucent-interaction-active-brand);--ds-focus-ring-color:var(--color-translucent-interaction-focus)}.ds-interaction-fill--on-inverted.sc-ds-input-h,.ds-interaction-fill--on-inverted.sc-ds-input{--ds-interaction-hover:var(--color-inverted-interaction-hover);--ds-interaction-pressed:var(--color-inverted-interaction-pressed);--ds-interaction-active:var(--color-inverted-interaction-active-brand);--ds-focus-ring-color:var(--color-inverted-interaction-focus)}.ds-interaction-fill--on-media.sc-ds-input-h,.ds-interaction-fill--on-media.sc-ds-input{--ds-interaction-hover:var(--color-media-interaction-hover);--ds-interaction-pressed:var(--color-media-interaction-pressed);--ds-interaction-active:var(--color-media-interaction-active);--ds-focus-ring-color:var(--color-media-interaction-focus)}.ds-interaction-fill--on-always-dark.sc-ds-input-h,.ds-interaction-fill--on-always-dark.sc-ds-input{--ds-interaction-hover:var(--color-always-dark-interaction-hover);--ds-interaction-pressed:var(--color-always-dark-interaction-pressed);--ds-interaction-active:var(--color-always-dark-interaction-active-brand);--ds-focus-ring-color:var(--color-always-dark-interaction-focus)}.ds-interaction-fill--on-navigation.sc-ds-input-h,.ds-interaction-fill--on-navigation.sc-ds-input{--ds-interaction-hover:var(--color-navigation-interaction-hover);--ds-interaction-pressed:var(--color-navigation-interaction-pressed);--ds-interaction-active:var(--color-navigation-interaction-active);--ds-focus-ring-color:var(--color-navigation-interaction-focus)}.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-input-h:not(:disabled)::after,.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-input:not(:disabled)::after{background:var(--ds-interaction-pressed)}@media (forced-colors: active){.ds-interaction-fill.sc-ds-input-h::after,.ds-interaction-fill.sc-ds-input::after{box-shadow:none;outline:var(--ds-interaction-border-width) solid var(--ds-forced-color-control-boundary);outline-offset:calc(-1 * var(--ds-interaction-border-width))}.ds-interaction-fill--surface-open.sc-ds-input-h:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill--surface-open.sc-ds-input:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after{outline:var(--dimension-stroke-width-025) dashed var(--ds-forced-color-control-boundary);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}.ds-interaction-fill--selected.sc-ds-input-h::before,.ds-interaction-fill--selected.sc-ds-input::before{background:transparent;outline:var(--dimension-stroke-width-025) solid var(--ds-forced-color-selected);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}}@media (forced-colors: active) and (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-input-h:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill.sc-ds-input:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after{outline-color:var(--ds-forced-color-selected);outline-width:var(--dimension-stroke-width-012)}}@media (forced-colors: active){.sc-ds-input:root,.sc-ds-input-h,.ds-forced-colors-scope.sc-ds-input{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-input-h{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}.ds-focus-ring.sc-ds-input-h,.ds-focus-ring.sc-ds-input,.ds-focus-ring-inset.sc-ds-input-h,.ds-focus-ring-inset.sc-ds-input{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-input-h:focus-visible,.ds-focus-ring.sc-ds-input:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring.ds-focus-ring--visible.sc-ds-input-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-input{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring-inset.sc-ds-input-h:focus-visible,.ds-focus-ring-inset.sc-ds-input:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-input-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-input:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-input-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-input{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-input-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-input::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}@media (forced-colors: active){.sc-ds-input-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}@media (forced-colors: active){.sc-ds-input:root,.sc-ds-input-h,.ds-forced-colors-scope.sc-ds-input{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-control-inactive.sc-ds-input-h,.ds-control-inactive.sc-ds-input{opacity:var(--effect-opacity-medium);pointer-events:none;cursor:not-allowed}@media (forced-colors: active){.ds-control-inactive.sc-ds-input-h,.ds-control-inactive.sc-ds-input{color:var(--ds-forced-color-disabled);opacity:1}}.ds-control--lg.sc-ds-input,.ds-control--lg.sc-ds-input-h,.ds-control--md.sc-ds-input-h,.ds-control--md.sc-ds-input,.ds-control--sm.sc-ds-input-h,.ds-control--sm.sc-ds-input,.ds-control--xs.sc-ds-input-h,.ds-control--xs.sc-ds-input{--ds-control-radius:var(--dimension-radius-025)}.ds-control--lg.sc-ds-input-h,.ds-control--lg.sc-ds-input{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-input-h,.ds-control--md.sc-ds-input{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-input-h,.ds-control--sm.sc-ds-input{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-input-h,.ds-control--xs.sc-ds-input{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-control-frame.sc-ds-input{display:inline-flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:var(--ds-control-padding-inline, var(--dimension-space-075));gap:var(--ds-control-gap, var(--dimension-space-050));border-radius:var(--ds-control-radius, var(--dimension-radius-025))}.ds-control-section-heading.sc-ds-input{display:flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:calc( var(--ds-control-padding-inline, var(--dimension-space-075)) + var(--ds-control-label-inset, var(--dimension-space-025)) )}.ds-control-icon-box.sc-ds-input{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ds-control-icon, var(--dimension-iconography-md));height:var(--ds-control-icon, var(--dimension-iconography-md))}.ds-control-label-box.sc-ds-input{min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025))}.ds-control-label-dot.sc-ds-input{position:relative;padding-inline-end:calc( var(--ds-control-label-inset, var(--dimension-space-025)) + var(--ds-control-gap, var(--dimension-space-050)) )}.ds-control-label-dot__badge.sc-ds-input{position:absolute;inset-block-start:0;inset-inline-end:0;pointer-events:none}.ds-control-width--hug.sc-ds-input-h,.ds-control-width--hug.sc-ds-input{width:fit-content;max-width:100%;flex:0 0 auto}.ds-control-width--fill.sc-ds-input-h,.ds-control-width--fill.sc-ds-input{width:100%;min-width:0;flex:1 1 auto;align-self:stretch}.ds-field-stack.sc-ds-input-h,.ds-field-stack.sc-ds-input{display:flex;flex-direction:column;gap:var(--dimension-space-050)}.ds-text--display-medium.sc-ds-input-h,.ds-text--display-medium.sc-ds-input{font-size:var(--typography-fontsize-3xl);line-height:var(--typography-lineheight-3xl)}.ds-text--display-small.sc-ds-input-h,.ds-text--display-small.sc-ds-input{font-size:var(--typography-fontsize-2xl);line-height:var(--typography-lineheight-2xl)}.ds-text--title-large.sc-ds-input-h,.ds-text--title-large.sc-ds-input{font-size:var(--typography-fontsize-xl);line-height:var(--typography-lineheight-xl)}.ds-text--title-medium.sc-ds-input-h,.ds-text--title-medium.sc-ds-input{font-size:var(--typography-fontsize-lg);line-height:var(--typography-lineheight-lg)}.ds-text--title-small.sc-ds-input-h,.ds-text--title-small.sc-ds-input{font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md)}.ds-text--body-large.sc-ds-input-h,.ds-text--body-large.sc-ds-input{font-size:var(--typography-fontsize-lg);line-height:var(--typography-lineheight-lg)}.ds-text--body-medium.sc-ds-input-h,.ds-text--body-medium.sc-ds-input{font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md)}.ds-text--body-small.sc-ds-input-h,.ds-text--body-small.sc-ds-input{font-size:var(--typography-fontsize-sm);line-height:var(--typography-lineheight-sm)}.ds-text--caption.sc-ds-input-h,.ds-text--caption.sc-ds-input{font-size:var(--typography-fontsize-xs);line-height:var(--typography-lineheight-xs);text-transform:uppercase}.ds-text--display-medium.ds-text--emphasis.sc-ds-input-h,.ds-text--display-small.ds-text--emphasis.sc-ds-input-h,.ds-text--display-medium.ds-text--emphasis.sc-ds-input,.ds-text--display-small.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-bold);letter-spacing:var(--typography-letterspacing-negative-double)}.ds-text--display-medium.ds-text--regular.sc-ds-input-h,.ds-text--display-small.ds-text--regular.sc-ds-input-h,.ds-text--display-medium.ds-text--regular.sc-ds-input,.ds-text--display-small.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-large.ds-text--emphasis.sc-ds-input-h,.ds-text--title-large.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative-double)}.ds-text--title-large.ds-text--regular.sc-ds-input-h,.ds-text--title-large.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-medium.ds-text--emphasis.sc-ds-input-h,.ds-text--title-small.ds-text--emphasis.sc-ds-input-h,.ds-text--title-medium.ds-text--emphasis.sc-ds-input,.ds-text--title-small.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-medium.ds-text--regular.sc-ds-input-h,.ds-text--title-small.ds-text--regular.sc-ds-input-h,.ds-text--title-medium.ds-text--regular.sc-ds-input,.ds-text--title-small.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-large.ds-text--emphasis.sc-ds-input-h,.ds-text--body-medium.ds-text--emphasis.sc-ds-input-h,.ds-text--body-large.ds-text--emphasis.sc-ds-input,.ds-text--body-medium.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--body-large.ds-text--regular.sc-ds-input-h,.ds-text--body-medium.ds-text--regular.sc-ds-input-h,.ds-text--body-large.ds-text--regular.sc-ds-input,.ds-text--body-medium.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-small.ds-text--emphasis.sc-ds-input-h,.ds-text--body-small.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-small.ds-text--regular.sc-ds-input-h,.ds-text--body-small.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-none)}.ds-text--caption.ds-text--emphasis.sc-ds-input-h,.ds-text--caption.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-positive)}.ds-text--caption.ds-text--regular.sc-ds-input-h,.ds-text--caption.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-positive)}@media (forced-colors: active){.sc-ds-input:root,.sc-ds-input-h,.ds-forced-colors-scope.sc-ds-input{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.input-host.sc-ds-input-h{display:inline-flex;--ds-input-fg:var(--color-foreground-primary);--ds-input-placeholder:var(--color-foreground-secondary);--ds-input-placeholder-active:var(--color-foreground-quaternary);--ds-input-adornment-fg:var(--color-foreground-secondary);--ds-input-border:var(--color-border-secondary);--ds-input-stepper-fg:var(--color-foreground-secondary)}.ds-control-width--fill.sc-ds-input-h,.ds-control-width--fill.sc-ds-input-h .input-control.sc-ds-input{width:100%}.input-control.sc-ds-input{overflow:hidden;background:transparent;border:none;border-radius:var(--ds-control-radius, var(--dimension-radius-025));color:var(--ds-input-fg)}.input-control--bordered.sc-ds-input{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--ds-input-border)}.input-control--error.sc-ds-input{--ds-interaction-border-width:var(--dimension-stroke-width-018);--ds-interaction-border-color:var(--color-border-bold-negative)}.input-control--bordered.sc-ds-input:focus-within:not(.input-control--error){--ds-interaction-border-width:var(--dimension-stroke-width-018);--ds-interaction-border-color:var(--color-border-bold-brand)}.ds-control-inactive.sc-ds-input-h .input-control.sc-ds-input::after{background:transparent}.native-input.sc-ds-input{position:relative;z-index:2;flex:1 1 auto;min-width:0;height:100%;background:transparent;border:none;border-radius:inherit;outline:none;color:var(--ds-input-fg);font-family:inherit;text-overflow:ellipsis;-webkit-appearance:none;appearance:none}.native-input--align-start.sc-ds-input{text-align:start}.native-input--align-end.sc-ds-input{text-align:end}.native-input[type='number'].sc-ds-input{-moz-appearance:textfield}.native-input[type='number'].sc-ds-input::-webkit-inner-spin-button,.native-input[type='number'].sc-ds-input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.input-control--number.input-control--align-start.sc-ds-input{padding-inline-end:var(--dimension-space-025)}.input-control--number.input-control--align-end.sc-ds-input{padding-inline-start:var(--dimension-space-025)}.input-control__number-stepper.sc-ds-input{position:relative;z-index:2;display:grid;grid-template-rows:repeat(2, minmax(0, 1fr));flex:0 0 var(--ds-control-icon);width:var(--ds-control-icon);height:calc(var(--ds-control-height) - var(--dimension-space-050));overflow:hidden;border-radius:var(--ds-control-radius, var(--dimension-radius-025));color:var(--ds-input-stepper-fg)}.input-control__number-step.sc-ds-input{all:unset;position:relative;z-index:0;display:flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:0;min-height:0;overflow:hidden;color:inherit;cursor:default}.input-control__number-step--increment.sc-ds-input{border-radius:var(--ds-control-radius, var(--dimension-radius-025)) var(--ds-control-radius, var(--dimension-radius-025)) 0 0}.input-control__number-step--decrement.sc-ds-input{border-radius:0 0 var(--ds-control-radius, var(--dimension-radius-025)) var(--ds-control-radius, var(--dimension-radius-025))}.input-control__number-step.sc-ds-input:disabled{color:var(--color-foreground-quaternary)}.input-control__number-step-icon.sc-ds-input{flex-shrink:0}.native-input.sc-ds-input:disabled{cursor:not-allowed}.native-input.sc-ds-input:read-only:not(:disabled){cursor:default}.native-input.sc-ds-input::placeholder{color:var(--ds-input-placeholder)}.native-input.sc-ds-input:focus::placeholder{color:var(--ds-input-placeholder-active)}.native-input[type='search'].sc-ds-input::-webkit-search-cancel-button,.native-input[type='search'].sc-ds-input::-webkit-search-decoration{display:none}.input-control__prefix.sc-ds-input,.input-control__suffix.sc-ds-input{position:relative;z-index:2;color:var(--ds-input-adornment-fg)}.input-control__suffix--empty.sc-ds-input{display:none}.input-control.sc-ds-input>.input-control__clear.sc-ds-input{position:relative;z-index:2;flex-shrink:0;align-self:center}.input-control.ds-control--lg.sc-ds-input:has(.input-control__clear),.input-control.ds-control--md.sc-ds-input:has(.input-control__clear),.input-control.ds-control--sm.sc-ds-input:has(.input-control__clear){padding-right:var(--dimension-space-050)}.input-control.ds-control--xs.sc-ds-input:has(.input-control__clear){padding-right:0}.error-text.sc-ds-input{width:100%}@media (forced-colors: active){.input-control__number-step.sc-ds-input:disabled{color:var(--ds-forced-color-disabled)}.input-control--bordered.sc-ds-input:focus-within:not(.input-control--error)::after{outline-color:var(--ds-forced-color-selected)}.input-control--error.sc-ds-input::after{outline-style:dashed}}`;const y={lg:"lg",md:"md",sm:"sm",xs:"xs"};const x={lg:"md",md:"sm",sm:"xs",xs:"xs"};let w=0;const k=t(class t extends i{constructor(t){super();if(t!==false){this.__registerHost()}this.dsChange=s(this,"dsChange",7);this.dsClear=s(this,"dsClear",7);this.internals=this.attachInternals();this.generatedId=`ds-input-${++w}`;this.errorId=`${this.generatedId}-error`;this.value="";this.disabled=false;this.readOnly=false;this.required=false;this.requiredMessage=p;this.clearLabel="Clear";this.type="text";this.textAlign="start";this.inputMode="";this.enterKeyHint="";this.size="md";this.width="fill";this.hasBorder=true;this.hasInteractionFill=true;this.isInactive=false;this.autoFocus=false;this.error=false;this.ariaLabel=null;this.initialValue="";this.formDisabled=false;this.hasSuffix=false;this.focused=false;this.touched=false;this.handleInput=t=>{this.value=t.target.value;this.dsChange.emit(this.value)};this.handleFocus=()=>{this.focused=true};this.handleBlur=()=>{this.focused=false;this.touched=true};this.handleClear=()=>{this.value="";this.dsChange.emit("");this.dsClear.emit();this.inputEl?.focus()};this.handleNumericStep=t=>{const i=this.inputEl;if(!i||i.disabled||i.readOnly||this.numericStepDisabled(t))return;const s=i.value;if(t>0)i.stepUp();else i.stepDown();i.focus({preventScroll:true});if(i.value===s)return;this.value=i.value;this.dsChange.emit(this.value)}}componentWillLoad(){this.initialValue=this.value;this.hasSuffix=Boolean(this.el.querySelector('[slot="suffix"]'));this.syncFormValue()}componentDidRender(){const t=Boolean(this.el.querySelector('[slot="suffix"]'));if(t!==this.hasSuffix)this.hasSuffix=t}syncFormValue(){const t=this.isInactive||this.disabled||this.formDisabled;f(this.internals,this.value,{inactive:t});const i=this.required&&!t&&this.value.length===0;h(this.internals,i,this.requiredMessage)}formDisabledCallback(t){this.formDisabled=t;this.syncFormValue()}formResetCallback(){this.value=this.initialValue}formStateRestoreCallback(t){this.value=v(t)}async setFocus(){this.inputEl?.focus()}numericStepDisabled(t){if(this.value.trim()==="")return false;const i=Number(this.value);if(!Number.isFinite(i))return false;if(t>0&&this.max!==undefined)return i>=this.max;if(t<0&&this.min!==undefined)return i<=this.min;return false}renderNumericStepper(t){const i=t||this.readOnly||this.numericStepDisabled(1);const s=t||this.readOnly||this.numericStepDisabled(-1);return e("span",{class:"input-control__number-stepper"},e("button",{type:"button",class:"input-control__number-step input-control__number-step--increment ds-focus-ring-inset ds-interaction-fill",disabled:i,tabIndex:-1,"aria-hidden":"true",onClick:()=>this.handleNumericStep(1)},e("ds-icon",{class:"input-control__number-step-icon ds-interaction-fill__content",name:"ChevronUp",size:"xs",color:"inherit"})),e("button",{type:"button",class:"input-control__number-step input-control__number-step--decrement ds-focus-ring-inset ds-interaction-fill",disabled:s,tabIndex:-1,"aria-hidden":"true",onClick:()=>this.handleNumericStep(-1)},e("ds-icon",{class:"input-control__number-step-icon ds-interaction-fill__content",name:"ChevronDown",size:"xs",color:"inherit"})))}render(){const t=this.inputId??this.generatedId;const i=this.isInactive||this.disabled||this.formDisabled;const s=this.value.length>0;const o=this.value!==this.initialValue;const r=this.type==="search"&&s&&!i&&!this.readOnly;const d=this.error&&Boolean(this.errorMessage);const a=g[this.size];const c=y[this.size];const l=this.type==="number";const u=this.autoComplete??(this.type==="search"?"off":undefined);const p=[this.ariaDescribedby,d?this.errorId:undefined].filter(Boolean).join(" ")||undefined;return e(n,{key:"56a9900f8e2fc7d72029eaf44071105b2cce9745",class:{"input-host":true,"ds-field-stack":true,"ds-control-inactive":i,[`ds-control--${this.size}`]:true,...m(this.width)},"data-disabled":i?"":undefined,"data-readonly":this.readOnly?"":undefined,"data-required":this.required?"":undefined,"data-invalid":this.error?"":undefined,"data-filled":s?"":undefined,"data-focused":this.focused?"":undefined,"data-dirty":o?"":undefined,"data-touched":this.touched?"":undefined},e("div",{key:"c8f69095e73d5b4669b55c7153925533041c24b0",class:{"input-control":true,"input-control--number":l,"input-control--align-start":this.textAlign==="start","input-control--align-end":this.textAlign==="end","ds-control-frame":true,"input-control--bordered":this.hasBorder,"input-control--error":this.hasBorder&&this.error,"ds-interaction-fill":this.hasInteractionFill,[`ds-control--${this.size}`]:true}},l&&this.textAlign==="end"&&this.renderNumericStepper(i),this.icon&&e("span",{key:"c264cc3de8b4c9689c2113b698d8e54e0d6f11fa",class:"input-control__prefix ds-control-icon-box ds-interaction-fill__content","aria-hidden":"true"},e("ds-icon",{key:"4d4053877a90d2e9ef8c3c9f1537ce47165a8a3a",name:this.icon,size:c,color:"inherit"})),e("input",{key:"661a4267a05e66da8a01db1850c95ffc382c1879",ref:t=>{this.inputEl=t},type:this.type,id:t,value:this.value,placeholder:this.placeholder,min:l?this.min:undefined,max:l?this.max:undefined,step:l?this.step:undefined,disabled:i,readOnly:this.readOnly,required:this.required,autoFocus:this.autoFocus,autoComplete:u,autoCapitalize:this.type==="search"?"none":undefined,autoCorrect:this.type==="search"?"off":undefined,spellcheck:this.type==="search"?false:undefined,inputMode:this.inputMode||undefined,enterKeyHint:this.enterKeyHint||undefined,class:`native-input native-input--align-${this.textAlign} ds-control-label-box ds-text--${a.replace("text-","")} ds-text--regular ds-interaction-fill__content`,"aria-label":this.ariaLabel,"aria-labelledby":this.ariaLabelledby,"aria-describedby":p,"aria-controls":this.ariaControls,"aria-activedescendant":this.ariaActiveDescendant,"aria-invalid":this.error?"true":undefined,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur}),e("span",{key:"9f6db388be1d65869fa0646b3957445d8b41eb8c",class:{"input-control__suffix":true,"ds-control-icon-box":true,"input-control__suffix--empty":!this.hasSuffix}},e("slot",{key:"464e82c5df5cfe31443274c3fe8745204bf93ec3",name:"suffix"})),r&&e("ds-button-unfilled",{key:"a29b8a0671c97bbf3f45b62e5bdfc7f2ae799942",class:"input-control__clear",variant:"icon",size:x[this.size],icon:"CrossCircle",hasBorder:false,rounded:true,ariaLabel:this.clearLabel,onDsClick:this.handleClear}),l&&this.textAlign==="start"&&this.renderNumericStepper(i)),d&&e("ds-text",{key:"74806876e753daa270d00629ebad14736da95762",class:"error-text",as:"div",variant:"text-body-small",color:"negative",textId:this.errorId,role:"alert"},this.errorMessage))}static get formAssociated(){return true}get el(){return this}static get watchers(){return{value:[{syncFormValue:0}],disabled:[{syncFormValue:0}],isInactive:[{syncFormValue:0}],required:[{syncFormValue:0}]}}static get style(){return b()}},[326,"ds-input",{value:[1025],name:[513],form:[513],disabled:[516],readOnly:[516,"read-only"],required:[516],requiredMessage:[1,"required-message"],clearLabel:[1,"clear-label"],placeholder:[1],type:[1],min:[2],max:[2],step:[2],textAlign:[1,"text-align"],autoComplete:[1,"autocomplete"],inputMode:[1,"inputmode"],enterKeyHint:[1,"enterkeyhint"],size:[1],width:[1],hasBorder:[4,"has-border"],hasInteractionFill:[4,"has-interaction-fill"],icon:[1],isInactive:[4,"is-inactive"],autoFocus:[4,"auto-focus"],error:[4],errorMessage:[1,"error-message"],inputId:[1,"input-id"],ariaLabel:[1,"aria-label"],ariaLabelledby:[1,"aria-labelledby"],ariaDescribedby:[1,"aria-describedby"],ariaControls:[1,"aria-controls"],ariaActiveDescendant:[1,"aria-activedescendant"],formDisabled:[32],hasSuffix:[32],focused:[32],touched:[32],setFocus:[64]},undefined,{value:[{syncFormValue:0}],disabled:[{syncFormValue:0}],isInactive:[{syncFormValue:0}],required:[{syncFormValue:0}]}]);function _(){if(typeof customElements==="undefined"){return}const t=["ds-input","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-text","ds-tooltip"];t.forEach((t=>{switch(t){case"ds-input":if(!customElements.get(o(t))){customElements.define(o(t),k)}break;case"ds-badge":if(!customElements.get(o(t))){r()}break;case"ds-button-unfilled":if(!customElements.get(o(t))){d()}break;case"ds-icon":if(!customElements.get(o(t))){a()}break;case"ds-loader":if(!customElements.get(o(t))){c()}break;case"ds-text":if(!customElements.get(o(t))){l()}break;case"ds-tooltip":if(!customElements.get(o(t))){u()}break}}))}_();export{k as I,_ as d};
|
|
2
|
+
//# sourceMappingURL=p-Cr5vn5JO.js.map
|