@ds-mo/ui 15.1.0 → 15.2.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 +2 -2
- package/dist/agent.json +286 -4
- package/dist/angular/ds-map-cluster-marker.d.ts +18 -0
- package/dist/angular/ds-map-cluster-marker.js +43 -0
- package/dist/angular/ds-map-entity-marker.d.ts +18 -0
- package/dist/angular/ds-map-entity-marker.js +43 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +2 -0
- package/dist/angular/proxies.d.ts +2 -0
- package/dist/angular/proxies.js +2 -0
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-bar-action.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-page-title.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-breadcrumb.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-inverted.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-calendar.js +1 -1
- package/dist/components/ds-card-action-center.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-overview.js +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-settings-scope.js +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart.js +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-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-data-customize.js +1 -1
- package/dist/components/ds-data-filter.js +1 -1
- package/dist/components/ds-data-group.js +1 -1
- package/dist/components/ds-data-preferences.js +1 -1
- package/dist/components/ds-data-saved-views.js +1 -1
- package/dist/components/ds-data-saved-views.js.map +1 -1
- package/dist/components/ds-data-search.js +1 -1
- package/dist/components/ds-data-search.js.map +1 -1
- package/dist/components/ds-data-sort.js +1 -1
- package/dist/components/ds-data-toolbar.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-filter-menu.js +1 -1
- package/dist/components/ds-input-date.js +1 -1
- package/dist/components/ds-input-time.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-map-cluster-marker.d.ts +11 -0
- package/dist/components/ds-map-cluster-marker.js +2 -0
- package/dist/components/ds-map-cluster-marker.js.map +1 -0
- package/dist/components/ds-map-entity-marker.d.ts +11 -0
- package/dist/components/ds-map-entity-marker.js +2 -0
- package/dist/components/ds-map-entity-marker.js.map +1 -0
- 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-bubble.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-message.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-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-paper-texture.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-score.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-scroll-overlay.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-textarea.js +1 -1
- package/dist/components/ds-time-picker.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/{p-CD4DZPy_.js → p-5SVmAjXY.js} +2 -2
- package/dist/components/{p-B_jdoM7e.js → p-B3CZvMXs.js} +2 -2
- package/dist/components/{p-Bn8I7iw6.js → p-B6qQaYkB.js} +2 -2
- package/dist/components/p-BCnzbfma.js +2 -0
- package/dist/components/{p-0qY_HDId.js.map → p-BCnzbfma.js.map} +1 -1
- package/dist/components/{p-D922f6Tb.js → p-BJJh-Bf7.js} +2 -2
- package/dist/components/{p-5URekSny.js → p-BLSSaVWm.js} +2 -2
- package/dist/components/{p-BciTtTwx.js → p-BLuqpHvp.js} +2 -2
- package/dist/components/{p-BciTtTwx.js.map → p-BLuqpHvp.js.map} +1 -1
- package/dist/components/{p-BeNa6tw5.js → p-BOhefRMt.js} +2 -2
- package/dist/components/{p-BKZdqJQB.js → p-BR5OC2PX.js} +2 -2
- package/dist/components/{p-CUcUHwI3.js → p-BX506yEW.js} +2 -2
- package/dist/components/{p-C6xVxqOn.js → p-BZ_e69zx.js} +2 -2
- package/dist/components/{p-DEW7r0U9.js → p-BfF4RZdp.js} +2 -2
- package/dist/components/{p-etifxiDc.js → p-Br5e83Fr.js} +2 -2
- package/dist/components/{p-8yBdCXCn.js → p-BtnTQp4K.js} +2 -2
- package/dist/components/{p-Di5FH7eh.js → p-Bv9rSkp0.js} +2 -2
- package/dist/components/{p-CiH4GG6r.js → p-BzYW1IqO.js} +2 -2
- package/dist/components/{p-DpoTwJAR.js → p-C0JkLR83.js} +2 -2
- package/dist/components/{p-CiJ1WR11.js → p-C1gaWjOm.js} +2 -2
- package/dist/components/{p-D0y7Sja6.js → p-C6Aavz9h.js} +2 -2
- package/dist/components/{p-DVOjjuXc.js → p-C6zycbhC.js} +2 -2
- package/dist/components/{p-BhJXmuRA.js → p-CNZ6-kWd.js} +2 -2
- package/dist/components/{p-DVINzOoK.js → p-CR-Jjdcn.js} +2 -2
- package/dist/components/{p-Dfs98tpL.js → p-CRk0TjQv.js} +2 -2
- package/dist/components/{p-DHICPS4n.js → p-CTGgXIXM.js} +2 -2
- package/dist/components/{p-Dw9sE6Iw.js → p-CZ7hxDy_.js} +2 -2
- package/dist/components/{p-CYzFfFcH.js → p-C_Ma6Xa-.js} +2 -2
- package/dist/components/{p-ZhP2tVmM.js → p-Cn6AfzeF.js} +2 -2
- package/dist/components/{p-Dn9QHL4O.js → p-Cu8o2rOz.js} +2 -2
- package/dist/components/{p-FIBCluwV.js → p-CuWPWC3t.js} +2 -2
- package/dist/components/{p-DOAybCp0.js → p-D5HxZrMA.js} +2 -2
- package/dist/components/{p-Dzndkdx5.js → p-D7K1ZHML.js} +2 -2
- package/dist/components/{p-CzIpquvw.js → p-DFO5lV_A.js} +2 -2
- package/dist/components/{p-CdGXzRP8.js → p-Dlp1HqgS.js} +2 -2
- package/dist/components/{p-0FYD2bev.js → p-Dqfc6Nvd.js} +2 -2
- package/dist/components/{p-0FYD2bev.js.map → p-Dqfc6Nvd.js.map} +1 -1
- package/dist/components/{p-CNxvnQ6A.js → p-DsLXlxt3.js} +2 -2
- package/dist/components/{p-ljbw3UMZ.js → p-ER5M085B.js} +2 -2
- package/dist/components/{p-xdmJCPCg.js → p-QWukusRL.js} +2 -2
- package/dist/components/{p-E5W27Fu_.js → p-UY63jmrO.js} +2 -2
- package/dist/components/{p-D1vQGJzc.js → p-YrnU2fM7.js} +2 -2
- package/dist/components/{p-Do2FJd1y.js → p-ZYWnJaye.js} +2 -2
- package/dist/components/{p-DwbcNDJF.js → p-ZwRLjD5M.js} +2 -2
- package/dist/components/p-lamoJZE4.js +2 -0
- package/dist/components/{p-BgQMEHRa.js.map → p-lamoJZE4.js.map} +1 -1
- package/dist/components/{p-CdgOLWX9.js → p-mV4vSjSK.js} +2 -2
- package/dist/components/{p-Cqc2U1ZQ.js → p-mux14tWZ.js} +2 -2
- package/dist/components/{p-C-3YqeTb.js → p-mxZoWfnS.js} +2 -2
- package/dist/components/{p-CmexIVnE.js → p-p0FVyEFa.js} +2 -2
- package/dist/components/{p-Bpd6YCo4.js → p-uADksYMl.js} +2 -2
- package/dist/components/{p-Bm7rqs3C.js → p-xhn1cZgU.js} +2 -2
- package/dist/components/{p-Bm7rqs3C.js.map → p-xhn1cZgU.js.map} +1 -1
- package/dist/docs/components.json +488 -1
- package/dist/lint/index.js +1 -1
- package/dist/mcp-data/registry/bar-title.json +2 -2
- package/dist/mcp-data/registry/calendar.json +1 -1
- package/dist/mcp-data/registry/data-search.json +1 -1
- package/dist/mcp-data/registry/map-cluster-marker.json +263 -0
- package/dist/mcp-data/registry/map-entity-marker.json +321 -0
- package/dist/mcp-data/registry/registry.json +291 -3
- package/dist/mcp-data/registry/shell-app.json +1 -1
- package/dist/mcp-data/registry/shell-page.json +3 -3
- package/dist/react/components.d.ts +2 -0
- package/dist/react/components.js +2 -0
- package/dist/react/ds-map-cluster-marker.d.ts +12 -0
- package/dist/react/ds-map-cluster-marker.js +12 -0
- package/dist/react/ds-map-entity-marker.d.ts +12 -0
- package/dist/react/ds-map-entity-marker.js +12 -0
- package/dist/types/components/MapClusterMarker/MapClusterMarker.d.ts +19 -0
- package/dist/types/components/MapEntityMarker/MapEntityMarker.d.ts +26 -0
- package/dist/types/components.d.ts +195 -0
- package/dist/vue/components.d.ts +2 -0
- package/dist/vue/components.js +2 -0
- package/dist/vue/ds-map-cluster-marker.d.ts +3 -0
- package/dist/vue/ds-map-cluster-marker.js +14 -0
- package/dist/vue/ds-map-entity-marker.d.ts +3 -0
- package/dist/vue/ds-map-entity-marker.js +17 -0
- package/package.json +1 -1
- package/dist/components/p-0qY_HDId.js +0 -2
- package/dist/components/p-BgQMEHRa.js +0 -2
- /package/dist/components/{p-CD4DZPy_.js.map → p-5SVmAjXY.js.map} +0 -0
- /package/dist/components/{p-B_jdoM7e.js.map → p-B3CZvMXs.js.map} +0 -0
- /package/dist/components/{p-Bn8I7iw6.js.map → p-B6qQaYkB.js.map} +0 -0
- /package/dist/components/{p-D922f6Tb.js.map → p-BJJh-Bf7.js.map} +0 -0
- /package/dist/components/{p-5URekSny.js.map → p-BLSSaVWm.js.map} +0 -0
- /package/dist/components/{p-BeNa6tw5.js.map → p-BOhefRMt.js.map} +0 -0
- /package/dist/components/{p-BKZdqJQB.js.map → p-BR5OC2PX.js.map} +0 -0
- /package/dist/components/{p-CUcUHwI3.js.map → p-BX506yEW.js.map} +0 -0
- /package/dist/components/{p-C6xVxqOn.js.map → p-BZ_e69zx.js.map} +0 -0
- /package/dist/components/{p-DEW7r0U9.js.map → p-BfF4RZdp.js.map} +0 -0
- /package/dist/components/{p-etifxiDc.js.map → p-Br5e83Fr.js.map} +0 -0
- /package/dist/components/{p-8yBdCXCn.js.map → p-BtnTQp4K.js.map} +0 -0
- /package/dist/components/{p-Di5FH7eh.js.map → p-Bv9rSkp0.js.map} +0 -0
- /package/dist/components/{p-CiH4GG6r.js.map → p-BzYW1IqO.js.map} +0 -0
- /package/dist/components/{p-DpoTwJAR.js.map → p-C0JkLR83.js.map} +0 -0
- /package/dist/components/{p-CiJ1WR11.js.map → p-C1gaWjOm.js.map} +0 -0
- /package/dist/components/{p-D0y7Sja6.js.map → p-C6Aavz9h.js.map} +0 -0
- /package/dist/components/{p-DVOjjuXc.js.map → p-C6zycbhC.js.map} +0 -0
- /package/dist/components/{p-BhJXmuRA.js.map → p-CNZ6-kWd.js.map} +0 -0
- /package/dist/components/{p-DVINzOoK.js.map → p-CR-Jjdcn.js.map} +0 -0
- /package/dist/components/{p-Dfs98tpL.js.map → p-CRk0TjQv.js.map} +0 -0
- /package/dist/components/{p-DHICPS4n.js.map → p-CTGgXIXM.js.map} +0 -0
- /package/dist/components/{p-Dw9sE6Iw.js.map → p-CZ7hxDy_.js.map} +0 -0
- /package/dist/components/{p-CYzFfFcH.js.map → p-C_Ma6Xa-.js.map} +0 -0
- /package/dist/components/{p-ZhP2tVmM.js.map → p-Cn6AfzeF.js.map} +0 -0
- /package/dist/components/{p-Dn9QHL4O.js.map → p-Cu8o2rOz.js.map} +0 -0
- /package/dist/components/{p-FIBCluwV.js.map → p-CuWPWC3t.js.map} +0 -0
- /package/dist/components/{p-DOAybCp0.js.map → p-D5HxZrMA.js.map} +0 -0
- /package/dist/components/{p-Dzndkdx5.js.map → p-D7K1ZHML.js.map} +0 -0
- /package/dist/components/{p-CzIpquvw.js.map → p-DFO5lV_A.js.map} +0 -0
- /package/dist/components/{p-CdGXzRP8.js.map → p-Dlp1HqgS.js.map} +0 -0
- /package/dist/components/{p-CNxvnQ6A.js.map → p-DsLXlxt3.js.map} +0 -0
- /package/dist/components/{p-ljbw3UMZ.js.map → p-ER5M085B.js.map} +0 -0
- /package/dist/components/{p-xdmJCPCg.js.map → p-QWukusRL.js.map} +0 -0
- /package/dist/components/{p-E5W27Fu_.js.map → p-UY63jmrO.js.map} +0 -0
- /package/dist/components/{p-D1vQGJzc.js.map → p-YrnU2fM7.js.map} +0 -0
- /package/dist/components/{p-Do2FJd1y.js.map → p-ZYWnJaye.js.map} +0 -0
- /package/dist/components/{p-DwbcNDJF.js.map → p-ZwRLjD5M.js.map} +0 -0
- /package/dist/components/{p-CdgOLWX9.js.map → p-mV4vSjSK.js.map} +0 -0
- /package/dist/components/{p-Cqc2U1ZQ.js.map → p-mux14tWZ.js.map} +0 -0
- /package/dist/components/{p-C-3YqeTb.js.map → p-mxZoWfnS.js.map} +0 -0
- /package/dist/components/{p-CmexIVnE.js.map → p-p0FVyEFa.js.map} +0 -0
- /package/dist/components/{p-Bpd6YCo4.js.map → p-uADksYMl.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DATE_FILTER_RELATIVE_PRESETS","label","value","days","offset","ISO_DATE_PATTERN","ISO_CALENDAR_DATE_LABEL","Intl","DateTimeFormat","month","day","year","timeZone","isIsoCalendarDate","test","split","map","Number","date","Date","UTC","getUTCFullYear","getUTCMonth","getUTCDate","formatIsoCalendarDateLabel","format","MONTH_LABELS","parseLooseCalendarDate","trimmed","trim","numeric","match","iso","padStart","labelled","monthIndex","indexOf","toLowerCase","String","shiftIsoCalendarDate","toISOString","slice","dateFilterRelativeValue","preset","dateFilterRangeValue","start","end","ordered","parseDateFilterValue","startsWith","length","some","candidate","kind","rest","CALENDAR_WEEKDAYS","MONTH_FORMATTER","DATE_FORMATTER","weekday","calendarToday","today","getFullYear","getMonth","getDate","calendarMonth","shiftCalendarMonth","calendarMonthLabel","calendarDays","firstOfMonth","firstWeekday","getUTCDay","gridStart","Array","from","_","index","dateValue","inMonth","calendarPaintedRange","pendingStart","heldRange","valueRange","calendarCss","Calendar","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","selectionMode","isInactive","autoFocus","previewEnd","moveMonth","selectDate","isDisabled","dsChange","emit","pending","current","previewRange","clearPreview","handleDayKeyDown","event","key","preventDefault","focusDate","componentWillLoad","anchorDate","componentDidLoad","setFocus","onValueChange","el","querySelector","focus","parsed","min","max","targetMonth","requestAnimationFrame","render","liveRange","liveRangeValue","rangeValue","weeks","previewStart","sort","previewFinish","selectedSingle","preferredFocus","find","h","Host","class","variant","icon","size","hasBorder","ariaLabel","onDsClick","as","emphasis","color","role","onMouseLeave","week","weekIndex","selectedInRange","Boolean","paintedInRange","pendingStartDay","previewInRange","inRange","rangeEdge","selected","textColor","type","disabled","tabIndex","onMouseEnter","onFocus","onClick","onKeyDown"],"sources":["src/wc/utils/date-filter-value.ts","src/wc/components/Calendar/calendar-grid.ts","src/wc/components/Calendar/Calendar.css?tag=ds-calendar&encapsulation=scoped","src/wc/components/Calendar/Calendar.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\nconst ISO_CALENDAR_DATE_LABEL = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n});\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\n/** Readable calendar date for filled ISO values such as `2026-09-10` → `Sep 10, 2026`. */\nexport function formatIsoCalendarDateLabel(value: string): string {\n if (!isIsoCalendarDate(value)) return '';\n return ISO_CALENDAR_DATE_LABEL.format(new Date(`${value}T00:00:00Z`));\n}\n\nconst MONTH_LABELS = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\n\n/** Parse a typed calendar date: ISO, `M/D/YYYY`, or a short-month label such as `Sep 10, 2026`. */\nexport function parseLooseCalendarDate(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) return '';\n if (isIsoCalendarDate(trimmed)) return trimmed;\n\n const numeric = trimmed.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (numeric) {\n const iso = `${numeric[3]}-${numeric[1].padStart(2, '0')}-${numeric[2].padStart(2, '0')}`;\n return isIsoCalendarDate(iso) ? iso : '';\n }\n\n const labelled = trimmed.match(/^([A-Za-z]{3})\\s+(\\d{1,2}),\\s+(\\d{4})$/);\n if (!labelled) return '';\n const monthIndex = MONTH_LABELS.indexOf(labelled[1].toLowerCase());\n if (monthIndex < 0) return '';\n const iso = `${labelled[3]}-${String(monthIndex + 1).padStart(2, '0')}-${labelled[2].padStart(2, '0')}`;\n return isIsoCalendarDate(iso) ? iso : '';\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 CalendarDateRange {\n start: string;\n end: string;\n}\n\nexport interface CalendarDay {\n value: string;\n day: number;\n inMonth: boolean;\n label: string;\n}\n\nexport const CALENDAR_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 calendarToday(): 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 calendarMonth(value: string): string {\n return isIsoCalendarDate(value) ? value.slice(0, 7) : calendarToday().slice(0, 7);\n}\n\nexport function shiftCalendarMonth(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 calendarMonthLabel(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 calendarDays(value: string): CalendarDay[] {\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\n/** Keep the previous committed range visible while a replacement range is being chosen. */\nexport function calendarPaintedRange(\n pendingStart: string,\n heldRange: CalendarDateRange | null,\n valueRange: CalendarDateRange | null\n): CalendarDateRange | null {\n return pendingStart ? heldRange : valueRange;\n}\n","@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: flex;\n min-height: 0;\n flex-direction: column;\n}\n\n.calendar {\n display: flex;\n min-height: 0;\n flex-direction: column;\n min-width: calc(\n (var(--dimension-size-400) * 7) + (var(--dimension-space-050) * 6) +\n (var(--dimension-space-100) * 2)\n );\n padding: var(--ds-calendar-padding, var(--dimension-space-100));\n}\n\n.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.calendar-nav--previous {\n justify-self: start;\n}\n\n.calendar-nav--next {\n justify-self: end;\n}\n\n.calendar-weekdays,\n.calendar-grid__row {\n display: grid;\n grid-template-columns: repeat(7, minmax(0, 1fr));\n column-gap: var(--dimension-space-050);\n}\n\n.calendar-grid {\n display: flex;\n flex-direction: column;\n row-gap: var(--dimension-space-050);\n}\n\n.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.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.calendar-day:disabled {\n cursor: not-allowed;\n}\n\n.calendar-day--outside {\n color: var(--color-foreground-tertiary);\n}\n\n.calendar-day--in-range {\n background: var(--color-background-faint-brand);\n color: var(--color-foreground-primary);\n}\n\n/* In-progress span uses the shared hover overlay; the first day keeps pressed via --surface-open. */\n.calendar-day.ds-interaction-fill.calendar-day--range-preview:not(:disabled)::after {\n background: var(--ds-interaction-hover);\n}\n\n.calendar-day.ds-interaction-fill.calendar-day--range-preview:active:not(:disabled)::after {\n background: var(--ds-interaction-pressed);\n}\n\n.calendar-day--today {\n color: var(--color-foreground-primary);\n}\n\n.calendar-day--range-edge {\n background: var(--color-background-bold-brand);\n color: var(--color-foreground-on-bold-background-primary);\n}\n\n@media (forced-colors: active) {\n .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 Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport {\n dateFilterRangeValue,\n isIsoCalendarDate,\n parseDateFilterValue,\n shiftIsoCalendarDate,\n} from '../../utils';\nimport {\n CALENDAR_WEEKDAYS,\n calendarDays,\n calendarMonth,\n calendarMonthLabel,\n calendarPaintedRange,\n calendarToday,\n shiftCalendarMonth,\n type CalendarDateRange,\n} from './calendar-grid';\n\nexport type CalendarSelectionMode = 'single' | 'range';\n\n@Component({\n tag: 'ds-calendar',\n styleUrl: 'Calendar.css',\n scoped: true,\n})\nexport class Calendar {\n @Element() el!: HTMLElement;\n\n /** Single date emits YYYY-MM-DD. Range emits the shared `range:start/end` string. */\n @Prop() selectionMode: CalendarSelectionMode = 'single';\n @Prop() value: string = '';\n @Prop() min: string | undefined;\n @Prop() max: string | undefined;\n @Prop() isInactive: boolean = false;\n /** Move keyboard focus into the grid after the calendar is rendered. */\n @Prop() autoFocus: boolean = false;\n\n @Event() dsChange!: EventEmitter<string>;\n\n @State() private month = calendarMonth(calendarToday());\n @State() private pendingStart = '';\n @State() private previewEnd = '';\n @State() private heldRange: CalendarDateRange | null = null;\n\n componentWillLoad() {\n this.month = calendarMonth(this.anchorDate());\n }\n\n componentDidLoad() {\n if (this.autoFocus) void this.setFocus();\n }\n\n @Watch('value')\n onValueChange() {\n this.month = calendarMonth(this.anchorDate());\n }\n\n @Method()\n async setFocus() {\n this.el.querySelector<HTMLElement>('.calendar-day[tabindex=\"0\"]')?.focus();\n }\n\n private anchorDate(): string {\n if (this.selectionMode === 'range') {\n const parsed = parseDateFilterValue(this.value);\n if (parsed?.kind === 'range') return parsed.start;\n return calendarToday();\n }\n return isIsoCalendarDate(this.value) ? this.value : calendarToday();\n }\n\n private isDisabled(day: string): boolean {\n if (this.isInactive) return true;\n if (this.min && isIsoCalendarDate(this.min) && day < this.min) return true;\n if (this.max && isIsoCalendarDate(this.max) && day > this.max) return true;\n return false;\n }\n\n private moveMonth = (offset: number) => {\n this.previewEnd = '';\n this.month = shiftCalendarMonth(this.month, offset);\n };\n\n private selectDate = (day: string) => {\n if (this.isDisabled(day)) return;\n this.previewEnd = '';\n if (this.selectionMode === 'single') {\n this.pendingStart = '';\n this.heldRange = null;\n this.dsChange.emit(day);\n return;\n }\n const pending = this.pendingStart;\n if (pending) {\n this.pendingStart = '';\n this.heldRange = null;\n this.dsChange.emit(dateFilterRangeValue(pending, day));\n return;\n }\n const current = parseDateFilterValue(this.value);\n this.heldRange = current?.kind === 'range' ? { start: current.start, end: current.end } : null;\n this.pendingStart = day;\n this.dsChange.emit(dateFilterRangeValue(day, day));\n };\n\n private previewRange = (day: string) => {\n if (!this.pendingStart || this.previewEnd === day) return;\n this.previewEnd = day;\n };\n\n private clearPreview = () => {\n if (!this.previewEnd) return;\n this.previewEnd = '';\n };\n\n private focusDate(day: string) {\n this.previewRange(day);\n const targetMonth = calendarMonth(day);\n if (this.month !== targetMonth) this.month = targetMonth;\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>(`[data-date-option=\"${day}\"]`)?.focus();\n });\n }\n\n private handleDayKeyDown = (event: KeyboardEvent, day: 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(`${day}T00:00:00Z`).getUTCDay();\n } else if (event.key === 'End') {\n offset = 6 - new Date(`${day}T00:00:00Z`).getUTCDay();\n } else if (event.key === 'PageUp' || event.key === 'PageDown') {\n const month = shiftCalendarMonth(calendarMonth(day), event.key === 'PageUp' ? -1 : 1);\n const candidate = `${month}-${day.slice(8, 10)}`;\n event.preventDefault();\n this.focusDate(isIsoCalendarDate(candidate) ? candidate : `${month}-01`);\n return;\n }\n if (offset === null) return;\n event.preventDefault();\n this.focusDate(shiftIsoCalendarDate(day, offset));\n };\n\n render() {\n const liveRange = this.selectionMode === 'range' ? parseDateFilterValue(this.value) : null;\n const liveRangeValue = liveRange?.kind === 'range' ? liveRange : null;\n const rangeValue = calendarPaintedRange(this.pendingStart, this.heldRange, liveRangeValue);\n const days = calendarDays(this.month);\n const weeks = Array.from({ length: 6 }, (_, index) => days.slice(index * 7, index * 7 + 7));\n const today = calendarToday();\n const previewStart =\n this.pendingStart && this.previewEnd ? [this.pendingStart, this.previewEnd].sort()[0] : null;\n const previewFinish =\n this.pendingStart && this.previewEnd ? [this.pendingStart, this.previewEnd].sort()[1] : null;\n const selectedSingle =\n this.selectionMode === 'single' && isIsoCalendarDate(this.value) ? this.value : '';\n const preferredFocus =\n this.pendingStart ||\n selectedSingle ||\n rangeValue?.end ||\n (this.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 <Host>\n <div class=\"calendar\">\n <div class=\"calendar-heading ds-control--md\">\n <ds-button-unfilled\n class=\"calendar-nav calendar-nav--previous\"\n variant=\"icon\"\n icon=\"ChevronLeft\"\n size=\"md\"\n hasBorder={false}\n isInactive={this.isInactive}\n ariaLabel=\"Previous month\"\n onDsClick={() => this.moveMonth(-1)}\n />\n <ds-text as=\"span\" variant=\"text-body-medium\" emphasis color=\"primary\">\n {calendarMonthLabel(this.month)}\n </ds-text>\n <ds-button-unfilled\n class=\"calendar-nav calendar-nav--next\"\n variant=\"icon\"\n icon=\"ChevronRight\"\n size=\"md\"\n hasBorder={false}\n isInactive={this.isInactive}\n ariaLabel=\"Next month\"\n onDsClick={() => this.moveMonth(1)}\n />\n </div>\n <div class=\"calendar-weekdays\" aria-hidden=\"true\">\n {CALENDAR_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=\"calendar-grid\"\n role=\"grid\"\n aria-label={calendarMonthLabel(this.month)}\n onMouseLeave={this.clearPreview}\n >\n {weeks.map((week, weekIndex) => (\n <div class=\"calendar-grid__row\" role=\"row\" key={`week-${weekIndex}`}>\n {week.map(day => {\n const selectedInRange = Boolean(\n liveRangeValue &&\n day.value >= liveRangeValue.start &&\n day.value <= liveRangeValue.end\n );\n const paintedInRange = Boolean(\n rangeValue && day.value >= rangeValue.start && day.value <= rangeValue.end\n );\n const pendingStartDay =\n this.selectionMode === 'range' &&\n Boolean(this.pendingStart) &&\n day.value === this.pendingStart;\n const previewInRange = Boolean(\n this.pendingStart &&\n previewStart &&\n previewFinish &&\n day.value >= previewStart &&\n day.value <= previewFinish &&\n day.value !== this.pendingStart\n );\n const inRange = this.selectionMode === 'range' && paintedInRange;\n const rangeEdge = Boolean(\n this.selectionMode === 'range' &&\n rangeValue &&\n (day.value === rangeValue.start || day.value === rangeValue.end)\n );\n const selected = this.selectionMode === 'single' && day.value === selectedSingle;\n const textColor = rangeEdge\n ? 'on-bold'\n : selected ||\n inRange ||\n pendingStartDay ||\n previewInRange ||\n 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 'calendar-day': true,\n 'calendar-day--outside': !day.inMonth,\n 'calendar-day--today': day.value === today,\n 'calendar-day--in-range': inRange,\n 'calendar-day--range-preview': previewInRange,\n 'calendar-day--range-edge': rangeEdge,\n 'calendar-day--selected': selected,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--on-bold': rangeEdge,\n 'ds-interaction-fill--surface-open':\n pendingStartDay && !this.isDisabled(day.value),\n 'ds-interaction-fill--selected': selected && !this.isDisabled(day.value),\n }}\n disabled={this.isDisabled(day.value)}\n aria-label={day.label}\n aria-selected={selectedInRange || selected ? 'true' : 'false'}\n tabIndex={day.value === focusDate ? 0 : -1}\n onMouseEnter={() => this.previewRange(day.value)}\n onFocus={() => this.previewRange(day.value)}\n onClick={() => this.selectDate(day.value)}\n onKeyDown={event => this.handleDayKeyDown(event, day.value)}\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 ))}\n </div>\n </div>\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","ISO_CALENDAR_DATE_LABEL","Intl","DateTimeFormat","month","day","year","timeZone","isIsoCalendarDate","test","split","map","Number","date","Date","UTC","getUTCFullYear","getUTCMonth","getUTCDate","formatIsoCalendarDateLabel","format","MONTH_LABELS","parseLooseCalendarDate","trimmed","trim","numeric","match","iso","padStart","labelled","monthIndex","indexOf","toLowerCase","String","shiftIsoCalendarDate","toISOString","slice","dateFilterRelativeValue","preset","dateFilterRangeValue","start","end","ordered","parseDateFilterValue","startsWith","length","some","candidate","kind","rest","CALENDAR_WEEKDAYS","MONTH_FORMATTER","DATE_FORMATTER","weekday","calendarToday","today","getFullYear","getMonth","getDate","calendarMonth","shiftCalendarMonth","calendarMonthLabel","calendarDays","firstOfMonth","firstWeekday","getUTCDay","gridStart","Array","from","_","index","dateValue","inMonth","calendarPaintedRange","pendingStart","heldRange","valueRange","calendarCss","Calendar","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","selectionMode","isInactive","autoFocus","previewEnd","moveMonth","selectDate","isDisabled","dsChange","emit","pending","current","previewRange","clearPreview","handleDayKeyDown","event","key","preventDefault","focusDate","componentWillLoad","anchorDate","componentDidLoad","setFocus","onValueChange","el","querySelector","focus","parsed","min","max","targetMonth","requestAnimationFrame","render","liveRange","liveRangeValue","rangeValue","weeks","previewStart","sort","previewFinish","selectedSingle","preferredFocus","find","h","Host","class","variant","icon","size","hasBorder","ariaLabel","onDsClick","as","emphasis","color","role","onMouseLeave","week","weekIndex","selectedInRange","Boolean","paintedInRange","pendingStartDay","previewInRange","inRange","rangeEdge","selected","textColor","type","disabled","tabIndex","onMouseEnter","onFocus","onClick","onKeyDown"],"sources":["src/wc/utils/date-filter-value.ts","src/wc/components/Calendar/calendar-grid.ts","src/wc/components/Calendar/Calendar.css?tag=ds-calendar&encapsulation=scoped","src/wc/components/Calendar/Calendar.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\nconst ISO_CALENDAR_DATE_LABEL = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n});\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\n/** Readable calendar date for filled ISO values such as `2026-09-10` → `Sep 10, 2026`. */\nexport function formatIsoCalendarDateLabel(value: string): string {\n if (!isIsoCalendarDate(value)) return '';\n return ISO_CALENDAR_DATE_LABEL.format(new Date(`${value}T00:00:00Z`));\n}\n\nconst MONTH_LABELS = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\n\n/** Parse a typed calendar date: ISO, `M/D/YYYY`, or a short-month label such as `Sep 10, 2026`. */\nexport function parseLooseCalendarDate(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) return '';\n if (isIsoCalendarDate(trimmed)) return trimmed;\n\n const numeric = trimmed.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (numeric) {\n const iso = `${numeric[3]}-${numeric[1].padStart(2, '0')}-${numeric[2].padStart(2, '0')}`;\n return isIsoCalendarDate(iso) ? iso : '';\n }\n\n const labelled = trimmed.match(/^([A-Za-z]{3})\\s+(\\d{1,2}),\\s+(\\d{4})$/);\n if (!labelled) return '';\n const monthIndex = MONTH_LABELS.indexOf(labelled[1].toLowerCase());\n if (monthIndex < 0) return '';\n const iso = `${labelled[3]}-${String(monthIndex + 1).padStart(2, '0')}-${labelled[2].padStart(2, '0')}`;\n return isIsoCalendarDate(iso) ? iso : '';\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 CalendarDateRange {\n start: string;\n end: string;\n}\n\nexport interface CalendarDay {\n value: string;\n day: number;\n inMonth: boolean;\n label: string;\n}\n\nexport const CALENDAR_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 calendarToday(): 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 calendarMonth(value: string): string {\n return isIsoCalendarDate(value) ? value.slice(0, 7) : calendarToday().slice(0, 7);\n}\n\nexport function shiftCalendarMonth(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 calendarMonthLabel(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 calendarDays(value: string): CalendarDay[] {\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\n/** Keep the previous committed range visible while a replacement range is being chosen. */\nexport function calendarPaintedRange(\n pendingStart: string,\n heldRange: CalendarDateRange | null,\n valueRange: CalendarDateRange | null\n): CalendarDateRange | null {\n return pendingStart ? heldRange : valueRange;\n}\n","@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: flex;\n min-height: 0;\n flex-direction: column;\n}\n\n.calendar {\n display: flex;\n min-height: 0;\n flex-direction: column;\n min-width: calc(\n (var(--dimension-size-400) * 7) + (var(--dimension-space-050) * 6) +\n (var(--dimension-space-100) * 2)\n );\n padding: var(--ds-calendar-padding, var(--dimension-space-100));\n}\n\n.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.calendar-nav--previous {\n justify-self: start;\n}\n\n.calendar-nav--next {\n justify-self: end;\n}\n\n.calendar-weekdays,\n.calendar-grid__row {\n display: grid;\n grid-template-columns: repeat(7, minmax(0, 1fr));\n column-gap: var(--dimension-space-050);\n}\n\n.calendar-grid {\n display: flex;\n flex-direction: column;\n row-gap: var(--dimension-space-050);\n}\n\n.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.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.calendar-day:disabled {\n cursor: not-allowed;\n}\n\n.calendar-day--outside {\n color: var(--color-foreground-tertiary);\n}\n\n.calendar-day--in-range {\n background: var(--color-background-faint-brand);\n color: var(--color-foreground-primary);\n}\n\n/* In-progress span uses the shared hover overlay; the first day keeps pressed via --surface-open. */\n.calendar-day.ds-interaction-fill.calendar-day--range-preview:not(:disabled)::after {\n background: var(--ds-interaction-hover);\n}\n\n.calendar-day.ds-interaction-fill.calendar-day--range-preview:active:not(:disabled)::after {\n background: var(--ds-interaction-pressed);\n}\n\n.calendar-day--today {\n color: var(--color-foreground-primary);\n}\n\n.calendar-day--range-edge {\n background: var(--color-background-bold-brand);\n color: var(--color-foreground-on-bold-background-primary);\n}\n\n@media (forced-colors: active) {\n .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 Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport {\n dateFilterRangeValue,\n isIsoCalendarDate,\n parseDateFilterValue,\n shiftIsoCalendarDate,\n} from '../../utils';\nimport {\n CALENDAR_WEEKDAYS,\n calendarDays,\n calendarMonth,\n calendarMonthLabel,\n calendarPaintedRange,\n calendarToday,\n shiftCalendarMonth,\n type CalendarDateRange,\n} from './calendar-grid';\n\nexport type CalendarSelectionMode = 'single' | 'range';\n\n@Component({\n tag: 'ds-calendar',\n styleUrl: 'Calendar.css',\n scoped: true,\n})\nexport class Calendar {\n @Element() el!: HTMLElement;\n\n /** Single date emits YYYY-MM-DD. Range emits the shared `range:start/end` string. */\n @Prop() selectionMode: CalendarSelectionMode = 'single';\n @Prop() value: string = '';\n @Prop() min: string | undefined;\n @Prop() max: string | undefined;\n @Prop() isInactive: boolean = false;\n /** Move keyboard focus into the grid after the calendar is rendered. */\n @Prop() autoFocus: boolean = false;\n\n @Event() dsChange!: EventEmitter<string>;\n\n @State() private month = calendarMonth(calendarToday());\n @State() private pendingStart = '';\n @State() private previewEnd = '';\n @State() private heldRange: CalendarDateRange | null = null;\n\n componentWillLoad() {\n this.month = calendarMonth(this.anchorDate());\n }\n\n componentDidLoad() {\n if (this.autoFocus) void this.setFocus();\n }\n\n @Watch('value')\n onValueChange() {\n this.month = calendarMonth(this.anchorDate());\n }\n\n @Method()\n async setFocus() {\n this.el.querySelector<HTMLElement>('.calendar-day[tabindex=\"0\"]')?.focus();\n }\n\n private anchorDate(): string {\n if (this.selectionMode === 'range') {\n const parsed = parseDateFilterValue(this.value);\n if (parsed?.kind === 'range') return parsed.start;\n return calendarToday();\n }\n return isIsoCalendarDate(this.value) ? this.value : calendarToday();\n }\n\n private isDisabled(day: string): boolean {\n if (this.isInactive) return true;\n if (this.min && isIsoCalendarDate(this.min) && day < this.min) return true;\n if (this.max && isIsoCalendarDate(this.max) && day > this.max) return true;\n return false;\n }\n\n private moveMonth = (offset: number) => {\n this.previewEnd = '';\n this.month = shiftCalendarMonth(this.month, offset);\n };\n\n private selectDate = (day: string) => {\n if (this.isDisabled(day)) return;\n this.previewEnd = '';\n if (this.selectionMode === 'single') {\n this.pendingStart = '';\n this.heldRange = null;\n this.dsChange.emit(day);\n return;\n }\n const pending = this.pendingStart;\n if (pending) {\n this.pendingStart = '';\n this.heldRange = null;\n this.dsChange.emit(dateFilterRangeValue(pending, day));\n return;\n }\n const current = parseDateFilterValue(this.value);\n this.heldRange = current?.kind === 'range' ? { start: current.start, end: current.end } : null;\n this.pendingStart = day;\n this.dsChange.emit(dateFilterRangeValue(day, day));\n };\n\n private previewRange = (day: string) => {\n if (!this.pendingStart || this.previewEnd === day) return;\n this.previewEnd = day;\n };\n\n private clearPreview = () => {\n if (!this.previewEnd) return;\n this.previewEnd = '';\n };\n\n private focusDate(day: string) {\n this.previewRange(day);\n const targetMonth = calendarMonth(day);\n if (this.month !== targetMonth) this.month = targetMonth;\n requestAnimationFrame(() => {\n this.el.querySelector<HTMLElement>(`[data-date-option=\"${day}\"]`)?.focus();\n });\n }\n\n private handleDayKeyDown = (event: KeyboardEvent, day: 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(`${day}T00:00:00Z`).getUTCDay();\n } else if (event.key === 'End') {\n offset = 6 - new Date(`${day}T00:00:00Z`).getUTCDay();\n } else if (event.key === 'PageUp' || event.key === 'PageDown') {\n const month = shiftCalendarMonth(calendarMonth(day), event.key === 'PageUp' ? -1 : 1);\n const candidate = `${month}-${day.slice(8, 10)}`;\n event.preventDefault();\n this.focusDate(isIsoCalendarDate(candidate) ? candidate : `${month}-01`);\n return;\n }\n if (offset === null) return;\n event.preventDefault();\n this.focusDate(shiftIsoCalendarDate(day, offset));\n };\n\n render() {\n const liveRange = this.selectionMode === 'range' ? parseDateFilterValue(this.value) : null;\n const liveRangeValue = liveRange?.kind === 'range' ? liveRange : null;\n const rangeValue = calendarPaintedRange(this.pendingStart, this.heldRange, liveRangeValue);\n const days = calendarDays(this.month);\n const weeks = Array.from({ length: 6 }, (_, index) => days.slice(index * 7, index * 7 + 7));\n const today = calendarToday();\n const previewStart =\n this.pendingStart && this.previewEnd ? [this.pendingStart, this.previewEnd].sort()[0] : null;\n const previewFinish =\n this.pendingStart && this.previewEnd ? [this.pendingStart, this.previewEnd].sort()[1] : null;\n const selectedSingle =\n this.selectionMode === 'single' && isIsoCalendarDate(this.value) ? this.value : '';\n const preferredFocus =\n this.pendingStart ||\n selectedSingle ||\n rangeValue?.end ||\n (this.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 <Host>\n <div class=\"calendar\">\n <div class=\"calendar-heading ds-control--md\">\n <ds-button-unfilled\n class=\"calendar-nav calendar-nav--previous\"\n variant=\"icon\"\n icon=\"ChevronLeft\"\n size=\"md\"\n hasBorder={false}\n isInactive={this.isInactive}\n ariaLabel=\"Previous month\"\n onDsClick={() => this.moveMonth(-1)}\n />\n <ds-text as=\"span\" variant=\"text-body-medium\" emphasis color=\"primary\">\n {calendarMonthLabel(this.month)}\n </ds-text>\n <ds-button-unfilled\n class=\"calendar-nav calendar-nav--next\"\n variant=\"icon\"\n icon=\"ChevronRight\"\n size=\"md\"\n hasBorder={false}\n isInactive={this.isInactive}\n ariaLabel=\"Next month\"\n onDsClick={() => this.moveMonth(1)}\n />\n </div>\n <div class=\"calendar-weekdays\" aria-hidden=\"true\">\n {CALENDAR_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=\"calendar-grid\"\n role=\"grid\"\n aria-label={calendarMonthLabel(this.month)}\n onMouseLeave={this.clearPreview}\n >\n {weeks.map((week, weekIndex) => (\n <div class=\"calendar-grid__row\" role=\"row\" key={`week-${weekIndex}`}>\n {week.map(day => {\n const selectedInRange = Boolean(\n liveRangeValue &&\n day.value >= liveRangeValue.start &&\n day.value <= liveRangeValue.end\n );\n const paintedInRange = Boolean(\n rangeValue && day.value >= rangeValue.start && day.value <= rangeValue.end\n );\n const pendingStartDay =\n this.selectionMode === 'range' &&\n Boolean(this.pendingStart) &&\n day.value === this.pendingStart;\n const previewInRange = Boolean(\n this.pendingStart &&\n previewStart &&\n previewFinish &&\n day.value >= previewStart &&\n day.value <= previewFinish &&\n day.value !== this.pendingStart\n );\n const inRange = this.selectionMode === 'range' && paintedInRange;\n const rangeEdge = Boolean(\n this.selectionMode === 'range' &&\n rangeValue &&\n (day.value === rangeValue.start || day.value === rangeValue.end)\n );\n const selected = this.selectionMode === 'single' && day.value === selectedSingle;\n const textColor = rangeEdge\n ? 'on-bold'\n : selected ||\n inRange ||\n pendingStartDay ||\n previewInRange ||\n 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 'calendar-day': true,\n 'calendar-day--outside': !day.inMonth,\n 'calendar-day--today': day.value === today,\n 'calendar-day--in-range': inRange,\n 'calendar-day--range-preview': previewInRange,\n 'calendar-day--range-edge': rangeEdge,\n 'calendar-day--selected': selected,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--on-bold': rangeEdge,\n 'ds-interaction-fill--surface-open':\n pendingStartDay && !this.isDisabled(day.value),\n 'ds-interaction-fill--selected': selected && !this.isDisabled(day.value),\n }}\n disabled={this.isDisabled(day.value)}\n aria-label={day.label}\n aria-selected={selectedInRange || selected ? 'true' : 'false'}\n tabIndex={day.value === focusDate ? 0 : -1}\n onMouseEnter={() => this.previewRange(day.value)}\n onFocus={() => this.previewRange(day.value)}\n onClick={() => this.selectDate(day.value)}\n onKeyDown={event => this.handleDayKeyDown(event, day.value)}\n >\n {/* eslint-disable compomo/no-selected-fill-emphasis-change -- Today emphasis is date-driven and remains unchanged when selection changes. */}\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 {/* eslint-enable compomo/no-selected-fill-emphasis-change */}\n </button>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{p as i,H as e,c as t,h as r,a as o,t as s}from"./index.js";import{d as n}from"./p-DwbcNDJF.js";const c=[1,2,3,4,5,6,7,8,9,10,11,12];const d=["AM","PM"];const a=/^\d{2}:\d{2}$/;function l(i){if(!a.test(i))return false;const[e,t]=i.split(":").map(Number);return e>=0&&e<=23&&t>=0&&t<=59}function u(i=60){const e=typeof i==="number"?i:Number(i);if(!Number.isFinite(e)||e<=0)return 1;if(e<60)return 1;return Math.max(1,Math.round(e/60))}function f(i=1,e=0){const t=Number.isFinite(i)&&i>0?Math.floor(i):1;const r=(Math.floor(e)%60+60)%60;const o=new Set;for(let i=0;i<1440;i+=t){o.add((r+i)%60)}return[...o].sort(((i,e)=>i-e))}function p(i){if(!l(i))return null;const[e,t]=i.split(":").map(Number);const r=e>=12?"PM":"AM";const o=e%12===0?12:e%12;return{hour12:o,minute:t,period:r}}function m(i){const e=i.period==="AM"?i.hour12===12?0:i.hour12:i.hour12===12?12:i.hour12+12;return`${String(e).padStart(2,"0")}:${String(i.minute).padStart(2,"0")}`}function v(i){const e=p(i);if(!e)return"";return`${e.hour12}:${String(e.minute).padStart(2,"0")} ${e.period}`}function h(i){const e=i.trim();if(!e)return"";if(l(e))return e;const t=e.match(/^(\d{1,2}):(\d{2})$/);if(t){const i=Number(t[1]);const e=Number(t[2]);if(i>23||e>59)return"";return`${String(i).padStart(2,"0")}:${t[2]}`}const r=e.match(/^(\d{1,2})(?::(\d{2}))?\s*([AaPp])\.?[Mm]\.?$/);if(!r)return"";const o=Number(r[1]);const s=r[2]?Number(r[2]):0;if(o<1||o>12||s>59)return"";const n=r[3].toUpperCase()==="P"?"PM":"AM";return m({hour12:o,minute:s,period:n})}function k(i,e,t){if(!l(i))return true;if(e&&l(e)&&i<e)return true;if(t&&l(t)&&i>t)return true;return false}function g(i,e=60,t){if(!l(i))return false;const r=i.split(":").map(Number);const o=t&&l(t)?t.split(":").map(Number):[0,0];const s=u(e);const n=r[0]*60+r[1];const c=o[0]*60+o[1];return(n-c)%s===0}function b(i,e,t){if(t<=0)return 0;return Math.min(t-1,Math.max(0,i+e))}const w=()=>`.sc-ds-time-picker-h,.sc-ds-time-picker:where(.ds-table),.sc-ds-time-picker:where(.tooltip-popup),.sc-ds-time-picker:where(.ds-radius){--ds-radius-control:var(--dimension-radius-025);--ds-radius-card:var(--dimension-radius-050);--ds-radius-modal:var(--dimension-radius-050);--ds-radius-menu:var(--dimension-radius-075);--ds-radius-tooltip-control:var(--dimension-radius-025);--ds-radius-tooltip-menu:var(--dimension-radius-075);--ds-radius-table:var(--dimension-radius-050)}.ds-control--lg.sc-ds-time-picker,.ds-control--lg.sc-ds-time-picker-h,.ds-control--md.sc-ds-time-picker-h,.ds-control--md.sc-ds-time-picker,.ds-control--sm.sc-ds-time-picker-h,.ds-control--sm.sc-ds-time-picker,.ds-control--xs.sc-ds-time-picker-h,.ds-control--xs.sc-ds-time-picker{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-time-picker-h,.ds-control--lg.sc-ds-time-picker{--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-time-picker-h,.ds-control--md.sc-ds-time-picker{--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-time-picker-h,.ds-control--sm.sc-ds-time-picker{--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-time-picker-h,.ds-control--xs.sc-ds-time-picker{--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}@media (forced-colors: active){.sc-ds-time-picker:root,.sc-ds-time-picker-h,.ds-forced-colors-scope.sc-ds-time-picker{--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-time-picker-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-time-picker-h,.ds-focus-ring.sc-ds-time-picker,.ds-focus-ring-inset.sc-ds-time-picker-h,.ds-focus-ring-inset.sc-ds-time-picker{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-time-picker-h:focus-visible,.ds-focus-ring.sc-ds-time-picker: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-time-picker-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-time-picker{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-time-picker-h:focus-visible,.ds-focus-ring-inset.sc-ds-time-picker:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-time-picker-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-time-picker: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-time-picker-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-time-picker{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-time-picker-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-time-picker::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-time-picker-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}@media (forced-colors: active){.sc-ds-time-picker:root,.sc-ds-time-picker-h,.ds-forced-colors-scope.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill.sc-ds-time-picker{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-time-picker-h::before,.ds-interaction-fill.sc-ds-time-picker::before,.ds-interaction-fill.sc-ds-time-picker-h::after,.ds-interaction-fill.sc-ds-time-picker::after{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;pointer-events:none;cursor:inherit;transition:none}.ds-interaction-fill.sc-ds-time-picker-h::before,.ds-interaction-fill.sc-ds-time-picker::before{z-index:1}.ds-interaction-fill.sc-ds-time-picker-h::after,.ds-interaction-fill.sc-ds-time-picker::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-time-picker-h,.ds-interaction-fill--bordered.sc-ds-time-picker{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--color-border-secondary)}.ds-interaction-fill--selected.sc-ds-time-picker-h::before,.ds-interaction-fill--selected.sc-ds-time-picker::before{background:var(--ds-interaction-active)}.ds-interaction-fill--selected.sc-ds-time-picker-h,.ds-interaction-fill--selected.sc-ds-time-picker{--ds-interaction-dot-ring:var(--ds-interaction-active)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-time-picker-h:hover:not(:disabled)::after,.ds-interaction-fill.sc-ds-time-picker:hover:not(:disabled)::after{background:var(--ds-interaction-hover)}}.ds-interaction-fill.sc-ds-time-picker-h:active:not(:disabled)::after,.ds-interaction-fill.sc-ds-time-picker:active:not(:disabled)::after{background:var(--ds-interaction-pressed)}.ds-interaction-fill--grouped.sc-ds-time-picker-h::after,.ds-interaction-fill--grouped.sc-ds-time-picker::after,.ds-interaction-fill--grouped.sc-ds-time-picker-h:active:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-time-picker:active:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill--grouped.sc-ds-time-picker-h:hover:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-time-picker:hover:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}}.ds-interaction-fill--grouped.sc-ds-time-picker-h,.ds-interaction-fill--grouped.sc-ds-time-picker{--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-time-picker-h>.ds-interaction-fill__content.sc-ds-time-picker,.ds-interaction-fill.sc-ds-time-picker>.ds-interaction-fill__content.sc-ds-time-picker,.ds-interaction-fill__content.sc-ds-time-picker{position:relative;z-index:2;cursor:inherit}.ds-interaction-fill--on-faint.sc-ds-time-picker-h,.ds-interaction-fill--on-faint.sc-ds-time-picker{--ds-interaction-active:var(--color-interaction-active)}.ds-interaction-fill--on-medium.sc-ds-time-picker-h,.ds-interaction-fill--on-medium.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-bold.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-strong.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-translucent.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-inverted.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-media.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-always-dark.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-navigation.sc-ds-time-picker{--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-time-picker-h:not(:disabled)::after,.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-time-picker:not(:disabled)::after{background:var(--ds-interaction-pressed)}@media (forced-colors: active){.ds-interaction-fill.sc-ds-time-picker-h::after,.ds-interaction-fill.sc-ds-time-picker::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-time-picker-h:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill--surface-open.sc-ds-time-picker: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-time-picker-h::before,.ds-interaction-fill--selected.sc-ds-time-picker::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-time-picker-h:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill.sc-ds-time-picker: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-time-picker:root,.sc-ds-time-picker-h,.ds-forced-colors-scope.sc-ds-time-picker{--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-time-picker-h{display:flex;min-height:0;flex-direction:column}.time-picker.sc-ds-time-picker{display:grid;grid-template-columns:repeat(3, minmax(var(--dimension-size-400), 1fr));column-gap:var(--dimension-space-050);min-width:calc( (var(--dimension-size-400) * 3) + (var(--dimension-space-050) * 2) + (var(--ds-time-picker-padding, var(--dimension-space-100)) * 2) );padding:var(--ds-time-picker-padding, var(--dimension-space-100))}.time-picker__column.sc-ds-time-picker{display:flex;min-width:0;flex-direction:column}.time-picker__list.sc-ds-time-picker{display:flex;flex-direction:column;gap:var(--dimension-space-050);max-height:calc((var(--dimension-size-400) * 7) + (var(--dimension-space-050) * 6));overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.time-picker-tile.sc-ds-time-picker{appearance:none;position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;min-width:0;width:100%;height:var(--dimension-size-400);padding:0;border:0;border-radius:var(--dimension-radius-025);background:transparent;color:var(--color-foreground-primary);cursor:default}.time-picker-tile.sc-ds-time-picker:disabled{cursor:not-allowed}`;const x=i(class i extends e{constructor(i){super();if(i!==false){this.__registerHost()}this.dsChange=t(this,"dsChange",7);this.value="";this.step=60;this.isInactive=false;this.autoFocus=false;this.handleColumnKeyDown=(i,e,t,r)=>{const o=["hour","minute","period"];const s=o.indexOf(e);if(i.key==="ArrowLeft"||i.key==="ArrowRight"){const t=o[b(s,i.key==="ArrowLeft"?-1:1,o.length)];if(!t||t===e){i.preventDefault();return}i.preventDefault();const r=t==="hour"?c:t==="minute"?this.minutes():d;const n=this.focusValue(t,r);if(n!==undefined)this.focusOption(t,n);return}let n=null;if(i.key==="ArrowUp")n=-1;else if(i.key==="ArrowDown")n=1;else if(i.key==="Home"||i.key==="End")n=0;if(n===null)return;i.preventDefault();let a;if(i.key==="Home"){a=t.find((i=>!this.isDisabledPart(e,this.optionParts(e,i))))}else if(i.key==="End"){for(let i=t.length-1;i>=0;i-=1){const r=t[i];if(r!==undefined&&!this.isDisabledPart(e,this.optionParts(e,r))){a=r;break}}}else{const i=n;let o=t.indexOf(r);if(o<0)o=i>0?-1:t.length;for(let r=o+i;r>=0&&r<t.length;r+=i){const i=t[r];if(i!==undefined&&!this.isDisabledPart(e,this.optionParts(e,i))){a=i;break}}}if(a===undefined)return;this.focusOption(e,a)}}componentDidLoad(){this.scrollSelectedIntoView();if(this.autoFocus)void this.setFocus()}onValueChange(){this.scrollSelectedIntoView()}async setFocus(){this.focusColumn("hour",c)}parts(){return p(this.value)??{hour12:12,minute:0,period:"AM"}}minutes(){const i=this.min?p(this.min):null;return f(u(this.step),i?.minute??0)}isDisabledTime(i){if(this.isInactive)return true;return k(i,this.min,this.max)||!g(i,this.step,this.min)}optionParts(i,e){return i==="hour"?{hour12:e}:i==="minute"?{minute:e}:{period:e}}isDisabledPart(i,e){if(this.isInactive)return true;const t={...this.parts(),...e};const r=i==="hour"?[t.hour12]:c;const o=i==="minute"?[t.minute]:this.minutes();const s=i==="period"?[t.period]:d;return!r.some((i=>o.some((e=>s.some((t=>!this.isDisabledTime(m({hour12:i,minute:e,period:t}))))))))}orderedValues(i,e){return[i,...e.filter((e=>e!==i))]}commit(i,e){const t={...this.parts(),...e};const r=i==="hour"?[t.hour12]:this.orderedValues(t.hour12,c);const o=i==="minute"?[t.minute]:this.orderedValues(t.minute,this.minutes());const s=i==="period"?[t.period]:this.orderedValues(t.period,d);for(const i of r){for(const e of o){for(const t of s){const r=m({hour12:i,minute:e,period:t});if(!this.isDisabledTime(r)){this.dsChange.emit(r);return}}}}}optionEl(i,e){return this.el.querySelector(`[data-${i}-option="${e}"]`)}scrollSelectedIntoView(){const i=this.parts();this.optionEl("hour",i.hour12)?.scrollIntoView({block:"nearest"});this.optionEl("minute",i.minute)?.scrollIntoView({block:"nearest"});this.optionEl("period",i.period)?.scrollIntoView({block:"nearest"})}focusOption(i,e){requestAnimationFrame((()=>{this.optionEl(i,e)?.focus()}))}focusValue(i,e){const t=this.parts();const r=i==="hour"?t.hour12:i==="minute"?t.minute:t.period;if(!this.isDisabledPart(i,this.optionParts(i,r)))return r;return e.find((e=>!this.isDisabledPart(i,this.optionParts(i,e))))}focusColumn(i,e){const t=this.focusValue(i,e);if(t!==undefined)this.optionEl(i,t)?.focus()}renderTile(i,e,t,o,s,n){const c=this.optionParts(i,e);const d=this.isDisabledPart(i,c);return r("button",{type:"button",role:"option","data-hour-option":i==="hour"?String(e):undefined,"data-minute-option":i==="minute"?String(e):undefined,"data-period-option":i==="period"?String(e):undefined,class:{"time-picker-tile":true,"time-picker-tile--selected":t,"ds-focus-ring-inset":true,"ds-interaction-fill":!d,"ds-interaction-fill--selected":t&&!d},disabled:d,"aria-selected":t?"true":"false",tabIndex:o?0:-1,onClick:()=>this.commit(i,c),onKeyDown:t=>this.handleColumnKeyDown(t,i,n,e)},r("ds-text",{class:"ds-interaction-fill__content",as:"span",variant:"text-body-medium",color:t?"primary":"secondary"},s))}render(){const i=this.parts();const e=this.minutes();const t=e.includes(i.minute)?e:[...e,i.minute].sort(((i,e)=>i-e));const s=this.focusValue("hour",c);const n=this.focusValue("minute",t);const a=this.focusValue("period",d);return r(o,{key:"bb4139dd2970551e41a6cb67d5a6cecbd8d284d0"},r("div",{key:"f78bb81b0b00ca6a5e93cd62f565b71fbf384aed",class:"time-picker",role:"group","aria-label":"Choose time"},r("div",{key:"2200a6b5d4b70ac02add34d66012572c551ee040",class:"time-picker__column"},r("div",{key:"d5cb1c1048ca5478387e0ca89b6607b35aa10334",class:"time-picker__list",role:"listbox","aria-label":"Hour"},c.map((e=>this.renderTile("hour",e,e===i.hour12,e===s,String(e),c))))),r("div",{key:"adcd81119cb0464ad1d79e10b9395b2789c2523b",class:"time-picker__column"},r("div",{key:"4234ef56e38d3f0b9cb3d1177ae526cff956c97c",class:"time-picker__list",role:"listbox","aria-label":"Minute"},t.map((e=>this.renderTile("minute",e,e===i.minute,e===n,String(e).padStart(2,"0"),t))))),r("div",{key:"27bf8e0c3827ed842f4496b838d9ede843a11f54",class:"time-picker__column"},r("div",{key:"98f8d2f3854d7aad51cb5448ab22d9a7dad277e7",class:"time-picker__list",role:"listbox","aria-label":"AM/PM"},d.map((e=>this.renderTile("period",e,e===i.period,e===a,e,d)))))))}get el(){return this}static get watchers(){return{value:[{onValueChange:0}]}}static get style(){return w()}},[2,"ds-time-picker",{value:[1],min:[1],max:[1],step:[8],isInactive:[4,"is-inactive"],autoFocus:[4,"auto-focus"],setFocus:[64]},undefined,{value:[{onValueChange:0}]}]);function y(){if(typeof customElements==="undefined"){return}const i=["ds-time-picker","ds-text"];i.forEach((i=>{switch(i){case"ds-time-picker":if(!customElements.get(s(i))){customElements.define(s(i),x)}break;case"ds-text":if(!customElements.get(s(i))){n()}break}}))}y();export{x as T,g as a,y as d,v as f,l as i,h as p};
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{p as i,H as e,c as t,h as r,a as o,t as s}from"./index.js";import{d as n}from"./p-ZwRLjD5M.js";const c=[1,2,3,4,5,6,7,8,9,10,11,12];const d=["AM","PM"];const a=/^\d{2}:\d{2}$/;function l(i){if(!a.test(i))return false;const[e,t]=i.split(":").map(Number);return e>=0&&e<=23&&t>=0&&t<=59}function u(i=60){const e=typeof i==="number"?i:Number(i);if(!Number.isFinite(e)||e<=0)return 1;if(e<60)return 1;return Math.max(1,Math.round(e/60))}function f(i=1,e=0){const t=Number.isFinite(i)&&i>0?Math.floor(i):1;const r=(Math.floor(e)%60+60)%60;const o=new Set;for(let i=0;i<1440;i+=t){o.add((r+i)%60)}return[...o].sort(((i,e)=>i-e))}function p(i){if(!l(i))return null;const[e,t]=i.split(":").map(Number);const r=e>=12?"PM":"AM";const o=e%12===0?12:e%12;return{hour12:o,minute:t,period:r}}function m(i){const e=i.period==="AM"?i.hour12===12?0:i.hour12:i.hour12===12?12:i.hour12+12;return`${String(e).padStart(2,"0")}:${String(i.minute).padStart(2,"0")}`}function v(i){const e=p(i);if(!e)return"";return`${e.hour12}:${String(e.minute).padStart(2,"0")} ${e.period}`}function h(i){const e=i.trim();if(!e)return"";if(l(e))return e;const t=e.match(/^(\d{1,2}):(\d{2})$/);if(t){const i=Number(t[1]);const e=Number(t[2]);if(i>23||e>59)return"";return`${String(i).padStart(2,"0")}:${t[2]}`}const r=e.match(/^(\d{1,2})(?::(\d{2}))?\s*([AaPp])\.?[Mm]\.?$/);if(!r)return"";const o=Number(r[1]);const s=r[2]?Number(r[2]):0;if(o<1||o>12||s>59)return"";const n=r[3].toUpperCase()==="P"?"PM":"AM";return m({hour12:o,minute:s,period:n})}function k(i,e,t){if(!l(i))return true;if(e&&l(e)&&i<e)return true;if(t&&l(t)&&i>t)return true;return false}function g(i,e=60,t){if(!l(i))return false;const r=i.split(":").map(Number);const o=t&&l(t)?t.split(":").map(Number):[0,0];const s=u(e);const n=r[0]*60+r[1];const c=o[0]*60+o[1];return(n-c)%s===0}function b(i,e,t){if(t<=0)return 0;return Math.min(t-1,Math.max(0,i+e))}const w=()=>`.sc-ds-time-picker-h,.sc-ds-time-picker:where(.ds-table),.sc-ds-time-picker:where(.tooltip-popup),.sc-ds-time-picker:where(.ds-radius){--ds-radius-control:var(--dimension-radius-025);--ds-radius-card:var(--dimension-radius-050);--ds-radius-modal:var(--dimension-radius-050);--ds-radius-menu:var(--dimension-radius-075);--ds-radius-tooltip-control:var(--dimension-radius-025);--ds-radius-tooltip-menu:var(--dimension-radius-075);--ds-radius-table:var(--dimension-radius-050)}.ds-control--lg.sc-ds-time-picker,.ds-control--lg.sc-ds-time-picker-h,.ds-control--md.sc-ds-time-picker-h,.ds-control--md.sc-ds-time-picker,.ds-control--sm.sc-ds-time-picker-h,.ds-control--sm.sc-ds-time-picker,.ds-control--xs.sc-ds-time-picker-h,.ds-control--xs.sc-ds-time-picker{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-time-picker-h,.ds-control--lg.sc-ds-time-picker{--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-time-picker-h,.ds-control--md.sc-ds-time-picker{--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-time-picker-h,.ds-control--sm.sc-ds-time-picker{--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-time-picker-h,.ds-control--xs.sc-ds-time-picker{--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}@media (forced-colors: active){.sc-ds-time-picker:root,.sc-ds-time-picker-h,.ds-forced-colors-scope.sc-ds-time-picker{--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-time-picker-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-time-picker-h,.ds-focus-ring.sc-ds-time-picker,.ds-focus-ring-inset.sc-ds-time-picker-h,.ds-focus-ring-inset.sc-ds-time-picker{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-time-picker-h:focus-visible,.ds-focus-ring.sc-ds-time-picker: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-time-picker-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-time-picker{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-time-picker-h:focus-visible,.ds-focus-ring-inset.sc-ds-time-picker:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-time-picker-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-time-picker: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-time-picker-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-time-picker{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-time-picker-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-time-picker::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-time-picker-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}@media (forced-colors: active){.sc-ds-time-picker:root,.sc-ds-time-picker-h,.ds-forced-colors-scope.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill.sc-ds-time-picker{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-time-picker-h::before,.ds-interaction-fill.sc-ds-time-picker::before,.ds-interaction-fill.sc-ds-time-picker-h::after,.ds-interaction-fill.sc-ds-time-picker::after{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;pointer-events:none;cursor:inherit;transition:none}.ds-interaction-fill.sc-ds-time-picker-h::before,.ds-interaction-fill.sc-ds-time-picker::before{z-index:1}.ds-interaction-fill.sc-ds-time-picker-h::after,.ds-interaction-fill.sc-ds-time-picker::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-time-picker-h,.ds-interaction-fill--bordered.sc-ds-time-picker{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--color-border-secondary)}.ds-interaction-fill--selected.sc-ds-time-picker-h::before,.ds-interaction-fill--selected.sc-ds-time-picker::before{background:var(--ds-interaction-active)}.ds-interaction-fill--selected.sc-ds-time-picker-h,.ds-interaction-fill--selected.sc-ds-time-picker{--ds-interaction-dot-ring:var(--ds-interaction-active)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-time-picker-h:hover:not(:disabled)::after,.ds-interaction-fill.sc-ds-time-picker:hover:not(:disabled)::after{background:var(--ds-interaction-hover)}}.ds-interaction-fill.sc-ds-time-picker-h:active:not(:disabled)::after,.ds-interaction-fill.sc-ds-time-picker:active:not(:disabled)::after{background:var(--ds-interaction-pressed)}.ds-interaction-fill--grouped.sc-ds-time-picker-h::after,.ds-interaction-fill--grouped.sc-ds-time-picker::after,.ds-interaction-fill--grouped.sc-ds-time-picker-h:active:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-time-picker:active:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill--grouped.sc-ds-time-picker-h:hover:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-time-picker:hover:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}}.ds-interaction-fill--grouped.sc-ds-time-picker-h,.ds-interaction-fill--grouped.sc-ds-time-picker{--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-time-picker-h>.ds-interaction-fill__content.sc-ds-time-picker,.ds-interaction-fill.sc-ds-time-picker>.ds-interaction-fill__content.sc-ds-time-picker,.ds-interaction-fill__content.sc-ds-time-picker{position:relative;z-index:2;cursor:inherit}.ds-interaction-fill--on-faint.sc-ds-time-picker-h,.ds-interaction-fill--on-faint.sc-ds-time-picker{--ds-interaction-active:var(--color-interaction-active)}.ds-interaction-fill--on-medium.sc-ds-time-picker-h,.ds-interaction-fill--on-medium.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-bold.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-strong.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-translucent.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-inverted.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-media.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-always-dark.sc-ds-time-picker{--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-time-picker-h,.ds-interaction-fill--on-navigation.sc-ds-time-picker{--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-time-picker-h:not(:disabled)::after,.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-time-picker:not(:disabled)::after{background:var(--ds-interaction-pressed)}@media (forced-colors: active){.ds-interaction-fill.sc-ds-time-picker-h::after,.ds-interaction-fill.sc-ds-time-picker::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-time-picker-h:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill--surface-open.sc-ds-time-picker: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-time-picker-h::before,.ds-interaction-fill--selected.sc-ds-time-picker::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-time-picker-h:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill.sc-ds-time-picker: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-time-picker:root,.sc-ds-time-picker-h,.ds-forced-colors-scope.sc-ds-time-picker{--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-time-picker-h{display:flex;min-height:0;flex-direction:column}.time-picker.sc-ds-time-picker{display:grid;grid-template-columns:repeat(3, minmax(var(--dimension-size-400), 1fr));column-gap:var(--dimension-space-050);min-width:calc( (var(--dimension-size-400) * 3) + (var(--dimension-space-050) * 2) + (var(--ds-time-picker-padding, var(--dimension-space-100)) * 2) );padding:var(--ds-time-picker-padding, var(--dimension-space-100))}.time-picker__column.sc-ds-time-picker{display:flex;min-width:0;flex-direction:column}.time-picker__list.sc-ds-time-picker{display:flex;flex-direction:column;gap:var(--dimension-space-050);max-height:calc((var(--dimension-size-400) * 7) + (var(--dimension-space-050) * 6));overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.time-picker-tile.sc-ds-time-picker{appearance:none;position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;min-width:0;width:100%;height:var(--dimension-size-400);padding:0;border:0;border-radius:var(--dimension-radius-025);background:transparent;color:var(--color-foreground-primary);cursor:default}.time-picker-tile.sc-ds-time-picker:disabled{cursor:not-allowed}`;const x=i(class i extends e{constructor(i){super();if(i!==false){this.__registerHost()}this.dsChange=t(this,"dsChange",7);this.value="";this.step=60;this.isInactive=false;this.autoFocus=false;this.handleColumnKeyDown=(i,e,t,r)=>{const o=["hour","minute","period"];const s=o.indexOf(e);if(i.key==="ArrowLeft"||i.key==="ArrowRight"){const t=o[b(s,i.key==="ArrowLeft"?-1:1,o.length)];if(!t||t===e){i.preventDefault();return}i.preventDefault();const r=t==="hour"?c:t==="minute"?this.minutes():d;const n=this.focusValue(t,r);if(n!==undefined)this.focusOption(t,n);return}let n=null;if(i.key==="ArrowUp")n=-1;else if(i.key==="ArrowDown")n=1;else if(i.key==="Home"||i.key==="End")n=0;if(n===null)return;i.preventDefault();let a;if(i.key==="Home"){a=t.find((i=>!this.isDisabledPart(e,this.optionParts(e,i))))}else if(i.key==="End"){for(let i=t.length-1;i>=0;i-=1){const r=t[i];if(r!==undefined&&!this.isDisabledPart(e,this.optionParts(e,r))){a=r;break}}}else{const i=n;let o=t.indexOf(r);if(o<0)o=i>0?-1:t.length;for(let r=o+i;r>=0&&r<t.length;r+=i){const i=t[r];if(i!==undefined&&!this.isDisabledPart(e,this.optionParts(e,i))){a=i;break}}}if(a===undefined)return;this.focusOption(e,a)}}componentDidLoad(){this.scrollSelectedIntoView();if(this.autoFocus)void this.setFocus()}onValueChange(){this.scrollSelectedIntoView()}async setFocus(){this.focusColumn("hour",c)}parts(){return p(this.value)??{hour12:12,minute:0,period:"AM"}}minutes(){const i=this.min?p(this.min):null;return f(u(this.step),i?.minute??0)}isDisabledTime(i){if(this.isInactive)return true;return k(i,this.min,this.max)||!g(i,this.step,this.min)}optionParts(i,e){return i==="hour"?{hour12:e}:i==="minute"?{minute:e}:{period:e}}isDisabledPart(i,e){if(this.isInactive)return true;const t={...this.parts(),...e};const r=i==="hour"?[t.hour12]:c;const o=i==="minute"?[t.minute]:this.minutes();const s=i==="period"?[t.period]:d;return!r.some((i=>o.some((e=>s.some((t=>!this.isDisabledTime(m({hour12:i,minute:e,period:t}))))))))}orderedValues(i,e){return[i,...e.filter((e=>e!==i))]}commit(i,e){const t={...this.parts(),...e};const r=i==="hour"?[t.hour12]:this.orderedValues(t.hour12,c);const o=i==="minute"?[t.minute]:this.orderedValues(t.minute,this.minutes());const s=i==="period"?[t.period]:this.orderedValues(t.period,d);for(const i of r){for(const e of o){for(const t of s){const r=m({hour12:i,minute:e,period:t});if(!this.isDisabledTime(r)){this.dsChange.emit(r);return}}}}}optionEl(i,e){return this.el.querySelector(`[data-${i}-option="${e}"]`)}scrollSelectedIntoView(){const i=this.parts();this.optionEl("hour",i.hour12)?.scrollIntoView({block:"nearest"});this.optionEl("minute",i.minute)?.scrollIntoView({block:"nearest"});this.optionEl("period",i.period)?.scrollIntoView({block:"nearest"})}focusOption(i,e){requestAnimationFrame((()=>{this.optionEl(i,e)?.focus()}))}focusValue(i,e){const t=this.parts();const r=i==="hour"?t.hour12:i==="minute"?t.minute:t.period;if(!this.isDisabledPart(i,this.optionParts(i,r)))return r;return e.find((e=>!this.isDisabledPart(i,this.optionParts(i,e))))}focusColumn(i,e){const t=this.focusValue(i,e);if(t!==undefined)this.optionEl(i,t)?.focus()}renderTile(i,e,t,o,s,n){const c=this.optionParts(i,e);const d=this.isDisabledPart(i,c);return r("button",{type:"button",role:"option","data-hour-option":i==="hour"?String(e):undefined,"data-minute-option":i==="minute"?String(e):undefined,"data-period-option":i==="period"?String(e):undefined,class:{"time-picker-tile":true,"time-picker-tile--selected":t,"ds-focus-ring-inset":true,"ds-interaction-fill":!d,"ds-interaction-fill--selected":t&&!d},disabled:d,"aria-selected":t?"true":"false",tabIndex:o?0:-1,onClick:()=>this.commit(i,c),onKeyDown:t=>this.handleColumnKeyDown(t,i,n,e)},r("ds-text",{class:"ds-interaction-fill__content",as:"span",variant:"text-body-medium",color:t?"primary":"secondary"},s))}render(){const i=this.parts();const e=this.minutes();const t=e.includes(i.minute)?e:[...e,i.minute].sort(((i,e)=>i-e));const s=this.focusValue("hour",c);const n=this.focusValue("minute",t);const a=this.focusValue("period",d);return r(o,{key:"d68a9721c9a2d0b42785c13365b79323937c1c81"},r("div",{key:"62bd2cea29dc3ea1bce1fe59dae6fb9f1ba74241",class:"time-picker",role:"group","aria-label":"Choose time"},r("div",{key:"f4ab624dd9f48a0155ea87f0a740661284ff1a3e",class:"time-picker__column"},r("div",{key:"c954f288cc81ae37c7bf01319d448cce9809934a",class:"time-picker__list",role:"listbox","aria-label":"Hour"},c.map((e=>this.renderTile("hour",e,e===i.hour12,e===s,String(e),c))))),r("div",{key:"5615e363d39111d5085ef2d0a57159a76f2d93ca",class:"time-picker__column"},r("div",{key:"5a40ee684fa04e9e771369ebd1472ef6a0b8d841",class:"time-picker__list",role:"listbox","aria-label":"Minute"},t.map((e=>this.renderTile("minute",e,e===i.minute,e===n,String(e).padStart(2,"0"),t))))),r("div",{key:"86cd766e7e91f4ee85c0476932dc6632dbf9792e",class:"time-picker__column"},r("div",{key:"11f7dfe41533ed2e94b08c92a282eb1cbac3220c",class:"time-picker__list",role:"listbox","aria-label":"AM/PM"},d.map((e=>this.renderTile("period",e,e===i.period,e===a,e,d)))))))}get el(){return this}static get watchers(){return{value:[{onValueChange:0}]}}static get style(){return w()}},[2,"ds-time-picker",{value:[1],min:[1],max:[1],step:[8],isInactive:[4,"is-inactive"],autoFocus:[4,"auto-focus"],setFocus:[64]},undefined,{value:[{onValueChange:0}]}]);function y(){if(typeof customElements==="undefined"){return}const i=["ds-time-picker","ds-text"];i.forEach((i=>{switch(i){case"ds-time-picker":if(!customElements.get(s(i))){customElements.define(s(i),x)}break;case"ds-text":if(!customElements.get(s(i))){n()}break}}))}y();export{x as T,g as a,y as d,v as f,l as i,h as p};
|
|
2
|
+
//# sourceMappingURL=p-DsLXlxt3.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{p as e,H as s,h as o,a as r,t as n}from"./index.js";import{d as i}from"./p-
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{p as e,H as s,h as o,a as r,t as n}from"./index.js";import{d as i}from"./p-uADksYMl.js";import{d as c}from"./p-ZwRLjD5M.js";const a=["fair","good","excellent"];function d(e){return typeof e==="string"&&a.includes(e)}function t(e){if(typeof e==="string"&&e.trim()==="")return undefined;const s=typeof e==="number"?e:Number(e);if(!Number.isFinite(s)||s<0||s>100)return undefined;if(s<=50)return"fair";if(s<=80)return"good";return"excellent"}function l(e,s){return d(s)?s:t(e)}const b={default:{sm:"text-title-small",md:"text-title-medium",lg:"text-title-large"},dense:{sm:"text-title-medium",md:"text-title-large",lg:"text-display-small"}};const g=()=>`.ds-control-frame.sc-ds-score{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-score{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-score{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-score{min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025))}.ds-control-label-dot.sc-ds-score{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-score{position:absolute;inset-block-start:0;inset-inline-end:0;pointer-events:none}@media (forced-colors: active){.sc-ds-score:root,.sc-ds-score-h,.ds-forced-colors-scope.sc-ds-score{--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-score-h{display:inline-flex;align-items:center;box-sizing:border-box;min-width:0;--_score-badge-inline-size:var(--dimension-size-500);--_score-badge-block-size:var(--dimension-size-400);--_score-skeleton-inset:calc(var(--_score-badge-block-size) / 8)}.score--sm.sc-ds-score-h{--_score-badge-inline-size:calc(var(--dimension-size-400) - var(--dimension-space-050));--_score-badge-block-size:var(--dimension-size-300)}.score--md.sc-ds-score-h{--_score-badge-inline-size:var(--dimension-size-500);--_score-badge-block-size:var(--dimension-size-400)}.score--lg.sc-ds-score-h{--_score-badge-inline-size:calc(var(--dimension-size-600) + var(--dimension-space-100));--_score-badge-block-size:var(--dimension-size-500)}.score__badge.sc-ds-score{display:flex;flex:0 0 auto;align-items:center;justify-content:center;box-sizing:border-box;inline-size:var(--_score-badge-inline-size);block-size:var(--_score-badge-block-size);overflow:hidden;border-radius:var(--dimension-radius-025);background:var(--color-background-faint-neutral);color:var(--color-foreground-bold-neutral);-webkit-user-select:none;user-select:none}.score__badge--fair.sc-ds-score{background:var(--color-safety-score-background-fair);color:var(--color-safety-score-foreground-on-fair)}.score__badge--good.sc-ds-score{background:var(--color-safety-score-background-good);color:var(--color-safety-score-foreground-on-good)}.score__badge--excellent.sc-ds-score{background:var(--color-safety-score-background-excellent);color:var(--color-safety-score-foreground-on-excellent)}.score__value.sc-ds-score,.score__badge.sc-ds-score ds-skeleton.sc-ds-score{flex:0 0 auto}.score__badge--loading.sc-ds-score{padding-inline:var(--_score-skeleton-inset)}.score__badge--loading.sc-ds-score .score__value.sc-ds-score{flex:1 1 auto;inline-size:100%;block-size:100%;max-inline-size:100%;max-block-size:100%;min-inline-size:0}@media (forced-colors: active){.score__badge.sc-ds-score{border:var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);background:var(--ds-forced-color-surface);color:var(--ds-forced-color-content)}}`;const u=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.value="";this.size="md";this.variant="default";this.isLoading=false;this.label=""}render(){const e=this.size;const s=this.variant;const n=l(this.value,this.level);const i=b[s][e];const c=[this.label.trim(),this.isLoading?"":this.value].filter(Boolean).join(" ");return o(r,{key:"35b35e8c8ca409d60ad0bb618f33446a5f541fd2",class:{score:true,[`score--${e}`]:true,[`score--${s}`]:true,"score--loading":this.isLoading},role:c?"img":undefined,"aria-busy":this.isLoading?"true":undefined,"aria-label":c||undefined},o("span",{key:"7789609947b3169ebc231b60a2312c5221fd0232",class:{score__badge:true,[`score__badge--${n}`]:Boolean(n),"score__badge--loading":this.isLoading}},this.isLoading?o("ds-skeleton",{class:"score__value",variant:"text",textVariant:i,background:n?"bold":"faint"}):o("ds-text",{as:"span",class:"score__value ds-control-label-box",variant:i,emphasis:true,color:"inherit",fontFeature:"tabular-nums"},this.value)))}static get style(){return g()}},[2,"ds-score",{value:[8],size:[1],variant:[1],level:[1],isLoading:[4,"is-loading"],label:[1]}]);function f(){if(typeof customElements==="undefined"){return}const e=["ds-score","ds-skeleton","ds-text"];e.forEach((e=>{switch(e){case"ds-score":if(!customElements.get(n(e))){customElements.define(n(e),u)}break;case"ds-skeleton":if(!customElements.get(n(e))){i()}break;case"ds-text":if(!customElements.get(n(e))){c()}break}}))}f();export{u as S,f as d,d as i};
|
|
2
|
+
//# sourceMappingURL=p-ER5M085B.js.map
|