@odx/foundation 1.0.0-beta.21 → 1.0.0-beta.211
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/README.md +51 -9
- package/dist/_virtual_class-decorator-runtime.js +13 -0
- package/dist/components/accordion/accordion.d.ts +11 -6
- package/dist/components/accordion-item/accordion-item.d.ts +25 -0
- package/dist/components/{accordion → accordion-panel}/accordion-panel.d.ts +4 -3
- package/dist/components/action-button/action-button.d.ts +28 -0
- package/dist/components/action-group/action-group.d.ts +6 -13
- package/dist/components/anchor-navigation/anchor-navigation.d.ts +8 -6
- package/dist/components/anchor-navigation/index.d.ts +0 -1
- package/dist/components/area-footer/area-footer.d.ts +29 -0
- package/dist/components/area-header/area-header.d.ts +20 -4
- package/dist/components/autocomplete/autocomplete.d.ts +27 -0
- package/dist/components/avatar/avatar.d.ts +34 -5
- package/dist/components/badge/badge.d.ts +32 -5
- package/dist/components/breadcrumbs/breadcrumbs.d.ts +3 -7
- package/dist/components/button/button.d.ts +33 -23
- package/dist/components/button-group/button-group.d.ts +10 -5
- package/dist/components/card/card.d.ts +14 -3
- package/dist/components/checkbox/checkbox.d.ts +6 -6
- package/dist/components/checkbox-group/checkbox-group.d.ts +10 -5
- package/dist/components/chip/chip.d.ts +14 -5
- package/dist/components/drawer/drawer.d.ts +17 -0
- package/dist/components/dropdown/dropdown.d.ts +25 -13
- package/dist/components/empty-state/empty-state.d.ts +42 -0
- package/dist/components/form-field/form-field.d.ts +3 -4
- package/dist/components/format/base-format.d.ts +2 -2
- package/dist/components/format/format-bytes.d.ts +1 -1
- package/dist/components/format/format-number.d.ts +1 -1
- package/dist/components/format/relative-time.d.ts +2 -2
- package/dist/components/gradient-overlay/gradient-overlay.d.ts +23 -0
- package/dist/components/header/header.d.ts +12 -2
- package/dist/components/header/index.d.ts +0 -1
- package/dist/components/highlight/highlight.d.ts +27 -7
- package/dist/components/icon-button/icon-button.d.ts +15 -16
- package/dist/components/image/image.d.ts +5 -5
- package/dist/components/inline-message/inline-message.d.ts +17 -6
- package/dist/components/input/input.d.ts +15 -10
- package/dist/components/key-value/key-value.d.ts +49 -0
- package/dist/components/key-value-list/key-value-list.d.ts +15 -0
- package/dist/components/label/label.d.ts +11 -0
- package/dist/components/line-clamp/line-clamp.d.ts +3 -3
- package/dist/components/link/link.d.ts +14 -4
- package/dist/components/list/list.d.ts +10 -2
- package/dist/components/list-item/list-item.d.ts +24 -0
- package/dist/components/loader.d.ts +2 -0
- package/dist/components/loading-overlay/loading-overlay.d.ts +3 -5
- package/dist/components/loading-spinner/loading-spinner.d.ts +9 -3
- package/dist/components/logo/logo.d.ts +12 -3
- package/dist/components/main-menu/index.d.ts +1 -4
- package/dist/components/main-menu/main-menu-button.d.ts +3 -2
- package/dist/components/main-menu/main-menu.d.ts +1 -7
- package/dist/components/main.d.ts +75 -58
- package/dist/components/menu/menu.d.ts +7 -5
- package/dist/components/menu-item/menu-item.d.ts +27 -4
- package/dist/components/modal/modal.d.ts +10 -27
- package/dist/components/navigation/navigation.d.ts +18 -0
- package/dist/components/navigation-item/navigation-item.d.ts +11 -7
- package/dist/components/navigation-item-group/navigation-item-group.d.ts +20 -0
- package/dist/components/option/option.d.ts +6 -3
- package/dist/components/page/page.d.ts +20 -6
- package/dist/components/page-layout/page-layout.d.ts +9 -1
- package/dist/components/pagination/pagination.d.ts +3 -2
- package/dist/components/popover/compute-popover-placement.d.ts +13 -0
- package/dist/components/popover/popover-host.d.ts +43 -0
- package/dist/components/popover/popover-observer.d.ts +10 -0
- package/dist/{cdk → components}/popover/popover.d.ts +3 -2
- package/dist/components/progress-bar/base-progress.d.ts +23 -0
- package/dist/components/progress-bar/progress-bar.d.ts +3 -14
- package/dist/components/progress-ring/progress-ring.d.ts +33 -0
- package/dist/components/radio-button/radio-button.d.ts +5 -3
- package/dist/components/radio-group/radio-group.d.ts +12 -4
- package/dist/components/rail-navigation/rail-navigation.d.ts +5 -7
- package/dist/components/scroll-container/scroll-container.d.ts +36 -0
- package/dist/components/search-bar/search-bar.d.ts +19 -5
- package/dist/components/select/select.d.ts +11 -10
- package/dist/components/separator/separator.d.ts +10 -4
- package/dist/components/sidebar/sidebar.d.ts +30 -0
- package/dist/components/skeleton/skeleton.d.ts +13 -6
- package/dist/components/slider/index.d.ts +2 -2
- package/dist/components/slider/slider-handle.d.ts +6 -6
- package/dist/components/slider/slider-marks.d.ts +2 -2
- package/dist/components/slider/slider.d.ts +2 -3
- package/dist/components/slider/slider.models.d.ts +4 -3
- package/dist/components/spinbox/spinbox.d.ts +14 -10
- package/dist/components/status/status.d.ts +24 -0
- package/dist/components/switch/switch.d.ts +12 -2
- package/dist/components/tab-bar/tab-bar.d.ts +36 -0
- package/dist/components/table/index.d.ts +3 -3
- package/dist/components/table/table-body.d.ts +1 -3
- package/dist/components/table/table-cell.d.ts +1 -3
- package/dist/components/table/table-checkbox-cell.d.ts +2 -2
- package/dist/components/table/table-header-cell.d.ts +1 -1
- package/dist/components/table/table-header.d.ts +5 -3
- package/dist/components/table/table-row.d.ts +3 -3
- package/dist/components/table/table.d.ts +1 -1
- package/dist/components/text/text.d.ts +23 -3
- package/dist/components/textarea/textarea.d.ts +21 -0
- package/dist/components/tile/tile.d.ts +33 -0
- package/dist/components/title/title.d.ts +19 -5
- package/dist/components/toast/toast.d.ts +15 -3
- package/dist/components/toggle-button/toggle-button.d.ts +32 -6
- package/dist/components/toggle-button-group/toggle-button-group.d.ts +20 -0
- package/dist/components/toggle-content/toggle-content.d.ts +4 -4
- package/dist/components/toolbar/toolbar.d.ts +14 -0
- package/dist/components/tooltip/tooltip.d.ts +50 -3
- package/dist/components/translate/translate.d.ts +2 -2
- package/dist/components-loader.js +3 -0
- package/dist/components.js +3851 -4248
- package/dist/en.js +6 -0
- package/dist/i18n/{lib/is-localized.d.ts → is-localized.d.ts} +3 -2
- package/dist/i18n/{lib/localization.d.ts → localization.d.ts} +0 -1
- package/dist/i18n/main.d.ts +7 -6
- package/dist/i18n/translate.d.ts +6 -0
- package/dist/i18n/translations/en.json.d.ts +19 -0
- package/dist/i18n/types.d.ts +30 -0
- package/dist/i18n.js +52 -58
- package/dist/lib/behaviors/can-be-collapsed.d.ts +10 -0
- package/dist/lib/behaviors/can-be-disabled.d.ts +9 -0
- package/dist/lib/behaviors/can-be-expanded.d.ts +11 -0
- package/dist/lib/behaviors/checkbox-control-group.d.ts +21 -0
- package/dist/lib/behaviors/checkbox-control.d.ts +15 -0
- package/dist/lib/behaviors/form-associated.d.ts +22 -0
- package/dist/lib/behaviors/is-draggable.d.ts +23 -0
- package/dist/lib/behaviors/listbox-control.d.ts +26 -0
- package/dist/lib/behaviors/number-form-control.d.ts +11 -0
- package/dist/lib/behaviors/option-control.d.ts +18 -0
- package/dist/lib/behaviors/radio-group-control.d.ts +12 -0
- package/dist/lib/control-element.d.ts +40 -0
- package/dist/lib/controllers/active-descendants-controller.d.ts +29 -0
- package/dist/lib/controllers/drag.controller.d.ts +18 -0
- package/dist/lib/controllers/expandable-controller.d.ts +6 -10
- package/dist/lib/custom-element.d.ts +8 -5
- package/dist/lib/dialog-element.d.ts +183 -0
- package/dist/lib/interactive-control-element.d.ts +19 -0
- package/dist/lib/link-control-element.d.ts +19 -0
- package/dist/lib/models/appearance.d.ts +8 -0
- package/dist/lib/models/layout.d.ts +46 -0
- package/dist/lib/models/shape.d.ts +7 -0
- package/dist/lib/models/size.d.ts +11 -0
- package/dist/lib/models/variant.d.ts +12 -0
- package/dist/main.d.ts +25 -0
- package/dist/main.js +1144 -727
- package/dist/styles-native.css +1 -0
- package/dist/styles.css +1 -1
- package/dist/utils/attribute-directive.d.ts +20 -0
- package/dist/utils/command-directive.d.ts +22 -0
- package/dist/utils/dom-events.d.ts +49 -0
- package/dist/{lib/types/a11y.d.ts → utils/dom-types.d.ts} +1 -17
- package/dist/utils/dom.d.ts +17 -0
- package/dist/utils/lit.d.ts +4 -0
- package/dist/utils/main.d.ts +11 -0
- package/dist/utils/shared-event-listener.d.ts +3 -0
- package/dist/utils/shared-resize-observer.d.ts +7 -0
- package/dist/utils/types.d.ts +5 -0
- package/dist/utils/unique-id.d.ts +20 -0
- package/dist/utils.js +299 -0
- package/dist/vendor.js +1968 -0
- package/package.json +55 -32
- package/dist/cdk/control/checkbox-form-control.d.ts +0 -15
- package/dist/cdk/control/checkbox-group-form-control.d.ts +0 -21
- package/dist/cdk/control/listbox-form-control.d.ts +0 -22
- package/dist/cdk/control/option-control.d.ts +0 -24
- package/dist/cdk/control/radio-group-form-control.d.ts +0 -22
- package/dist/cdk/drag-drop/drag-events.d.ts +0 -9
- package/dist/cdk/drag-drop/drag.controller.d.ts +0 -18
- package/dist/cdk/drag-drop/is-draggable.d.ts +0 -18
- package/dist/cdk/interactive/interactive-element.d.ts +0 -28
- package/dist/cdk/interactive/interactive-link.d.ts +0 -15
- package/dist/cdk/main.d.ts +0 -14
- package/dist/cdk/popover/popover-host.d.ts +0 -25
- package/dist/cdk/popover/popover.models.d.ts +0 -34
- package/dist/cdk/popover/popover.utils.d.ts +0 -5
- package/dist/cdk.js +0 -950
- package/dist/components/accordion/accordion-header.d.ts +0 -17
- package/dist/components/accordion/index.d.ts +0 -4
- package/dist/components/action-group/index.d.ts +0 -2
- package/dist/components/anchor-navigation/anchor-observer.d.ts +0 -11
- package/dist/components/area-header/area-header.models.d.ts +0 -12
- package/dist/components/area-header/index.d.ts +0 -3
- package/dist/components/avatar/avatar.models.d.ts +0 -18
- package/dist/components/avatar/index.d.ts +0 -3
- package/dist/components/avatar-group/avatar-group.d.ts +0 -15
- package/dist/components/avatar-group/index.d.ts +0 -2
- package/dist/components/badge/badge.models.d.ts +0 -14
- package/dist/components/badge/index.d.ts +0 -3
- package/dist/components/breadcrumbs/breadcrumbs-item.d.ts +0 -17
- package/dist/components/breadcrumbs/index.d.ts +0 -3
- package/dist/components/button/button.models.d.ts +0 -27
- package/dist/components/button/index.d.ts +0 -3
- package/dist/components/button-group/index.d.ts +0 -2
- package/dist/components/card/index.d.ts +0 -2
- package/dist/components/checkbox/index.d.ts +0 -2
- package/dist/components/checkbox-group/checkbox-group.models.d.ts +0 -6
- package/dist/components/checkbox-group/index.d.ts +0 -3
- package/dist/components/chip/chip.models.d.ts +0 -10
- package/dist/components/chip/index.d.ts +0 -3
- package/dist/components/circular-progress-bar/circular-progress-bar.d.ts +0 -42
- package/dist/components/circular-progress-bar/circular-progress-bar.models.d.ts +0 -7
- package/dist/components/circular-progress-bar/index.d.ts +0 -3
- package/dist/components/combobox/combobox.d.ts +0 -20
- package/dist/components/combobox/index.d.ts +0 -2
- package/dist/components/content-box/content-box.d.ts +0 -11
- package/dist/components/content-box/content-box.models.d.ts +0 -2
- package/dist/components/content-box/index.d.ts +0 -2
- package/dist/components/dropdown/dropdown.models.d.ts +0 -6
- package/dist/components/dropdown/index.d.ts +0 -3
- package/dist/components/form-field/index.d.ts +0 -2
- package/dist/components/header/header-actions.d.ts +0 -10
- package/dist/components/headline/headline.d.ts +0 -13
- package/dist/components/headline/headline.models.d.ts +0 -8
- package/dist/components/headline/index.d.ts +0 -3
- package/dist/components/highlight/index.d.ts +0 -2
- package/dist/components/icon-button/index.d.ts +0 -2
- package/dist/components/image/index.d.ts +0 -2
- package/dist/components/inline-message/index.d.ts +0 -3
- package/dist/components/inline-message/inline-message.models.d.ts +0 -12
- package/dist/components/input/index.d.ts +0 -3
- package/dist/components/input/input.models.d.ts +0 -7
- package/dist/components/line-clamp/index.d.ts +0 -2
- package/dist/components/link/base-link.d.ts +0 -15
- package/dist/components/link/index.d.ts +0 -3
- package/dist/components/list/index.d.ts +0 -3
- package/dist/components/list/list-item.d.ts +0 -27
- package/dist/components/loading-overlay/index.d.ts +0 -2
- package/dist/components/loading-spinner/index.d.ts +0 -2
- package/dist/components/logo/index.d.ts +0 -3
- package/dist/components/logo/logo.models.d.ts +0 -9
- package/dist/components/main-menu/main-menu-link.d.ts +0 -9
- package/dist/components/main-menu/main-menu-subtitle.d.ts +0 -12
- package/dist/components/main-menu/main-menu-title.d.ts +0 -12
- package/dist/components/menu/index.d.ts +0 -3
- package/dist/components/menu/menu-label.d.ts +0 -9
- package/dist/components/menu-item/index.d.ts +0 -2
- package/dist/components/modal/index.d.ts +0 -3
- package/dist/components/modal/modal.models.d.ts +0 -5
- package/dist/components/navigation-item/index.d.ts +0 -3
- package/dist/components/navigation-item/navigation-item.models.d.ts +0 -6
- package/dist/components/option/index.d.ts +0 -2
- package/dist/components/page/index.d.ts +0 -3
- package/dist/components/page/page.models.d.ts +0 -10
- package/dist/components/page-layout/index.d.ts +0 -2
- package/dist/components/pagination/index.d.ts +0 -2
- package/dist/components/progress-bar/index.d.ts +0 -3
- package/dist/components/progress-bar/progress-bar.models.d.ts +0 -7
- package/dist/components/radio-button/index.d.ts +0 -2
- package/dist/components/radio-group/index.d.ts +0 -3
- package/dist/components/radio-group/radio-group.models.d.ts +0 -6
- package/dist/components/rail-navigation/index.d.ts +0 -2
- package/dist/components/search-bar/index.d.ts +0 -4
- package/dist/components/search-bar/search-bar.events.d.ts +0 -7
- package/dist/components/search-bar/search-bar.models.d.ts +0 -6
- package/dist/components/select/index.d.ts +0 -2
- package/dist/components/separator/index.d.ts +0 -3
- package/dist/components/separator/separator.models.d.ts +0 -6
- package/dist/components/skeleton/index.d.ts +0 -3
- package/dist/components/skeleton/skeleton.models.d.ts +0 -13
- package/dist/components/spacer/index.d.ts +0 -2
- package/dist/components/spacer/spacer.d.ts +0 -13
- package/dist/components/spacer/spacer.models.d.ts +0 -7
- package/dist/components/spinbox/index.d.ts +0 -2
- package/dist/components/stack/index.d.ts +0 -3
- package/dist/components/stack/stack.d.ts +0 -17
- package/dist/components/stack/stack.models.d.ts +0 -25
- package/dist/components/switch/index.d.ts +0 -2
- package/dist/components/text/index.d.ts +0 -3
- package/dist/components/text/text.models.d.ts +0 -14
- package/dist/components/title/index.d.ts +0 -3
- package/dist/components/title/title.models.d.ts +0 -10
- package/dist/components/toast/index.d.ts +0 -3
- package/dist/components/toast/toast.models.d.ts +0 -5
- package/dist/components/toggle-button/index.d.ts +0 -2
- package/dist/components/toggle-content/index.d.ts +0 -2
- package/dist/components/tooltip/index.d.ts +0 -3
- package/dist/components/tooltip/tooltip.models.d.ts +0 -8
- package/dist/components/translate/index.d.ts +0 -2
- package/dist/components/visually-hidden/index.d.ts +0 -2
- package/dist/components/visually-hidden/visually-hidden.d.ts +0 -11
- package/dist/i18n/lib/translate.d.ts +0 -11
- package/dist/lib/controllers/active-desendants-controller.d.ts +0 -25
- package/dist/lib/controllers/focus-trap.controller.d.ts +0 -14
- package/dist/lib/main.d.ts +0 -31
- package/dist/lib/mixins/can-be-disabled.d.ts +0 -15
- package/dist/lib/mixins/can-be-expanded.d.ts +0 -10
- package/dist/lib/mixins/can-be-highlighted.d.ts +0 -8
- package/dist/lib/mixins/can-be-readonly.d.ts +0 -7
- package/dist/lib/mixins/can-be-required.d.ts +0 -7
- package/dist/lib/mixins/can-be-selected.d.ts +0 -9
- package/dist/lib/mixins/can-be-validated.d.ts +0 -12
- package/dist/lib/mixins/form-control.d.ts +0 -17
- package/dist/lib/mixins/number-control.d.ts +0 -12
- package/dist/lib/mixins/with-loading-state.d.ts +0 -8
- package/dist/lib/utils/date.d.ts +0 -2
- package/dist/lib/utils/dedupe-mixin.d.ts +0 -3
- package/dist/lib/utils/dom.d.ts +0 -15
- package/dist/lib/utils/empty-slot-fallback-fix.d.ts +0 -8
- package/dist/lib/utils/get-unique-id.d.ts +0 -36
- package/dist/lib/utils/keyboard-events.d.ts +0 -43
- package/dist/lib/utils/lit.d.ts +0 -5
- package/dist/lib/utils/query-assigned-element.d.ts +0 -16
- package/dist/lib/utils/search-text-content.d.ts +0 -8
- package/dist/lib/utils/shared-intersection-observer.d.ts +0 -18
- package/dist/lib/utils/shared-resize-observer.d.ts +0 -18
- package/dist/lib/utils/transformers.d.ts +0 -5
- package/dist/loader/main.d.ts +0 -2
- package/dist/loader.js +0 -12
- package/dist/vendor-dJxQG085.js +0 -138
- /package/dist/i18n/{lib/config.d.ts → config.d.ts} +0 -0
- /package/dist/i18n/{lib/format.d.ts → format.d.ts} +0 -0
- /package/dist/i18n/{lib/models.d.ts → models.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer base{table{--cell-size:var(--odx-size-300);box-sizing:border-box;border-collapse:collapse;background-color:#0000;width:100%;max-width:100%;& thead{background-color:inherit}& tr{transition:var(--odx-transition-reduced);background-color:var(--odx-color-background-transparent);transition-property:background-color,color}& tr:has(td):hover{background-color:var(--odx-color-background-transparent-hover)}& th,td{padding:var(--odx-control-spacing-md)var(--odx-control-spacing-inline-md);min-height:var(--odx-size-250);text-align:start;font-size:inherit}& td{height:var(--cell-size);vertical-align:middle}& th,tr:not(:last-child) td{border-bottom:var(--odx-border-width-thin)solid var(--odx-color-stroke-neutral-subtle)}& th{cursor:default;vertical-align:top;font-weight:var(--odx-typography-font-weight-medium);-webkit-user-select:none;user-select:none;border-bottom-color:#0000}& th :is(odx-input,odx-select){margin-inline:var(--odx-spacing-negative-50)}}}
|
package/dist/styles.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer reset,base,variant,state,theme;@layer reset{:is(*){box-sizing:border-box;scrollbar-width:thin}:not(:defined){display:none}:before,:after{box-sizing:border-box}[popover]{border:none;outline:none}img,picture,video,canvas,svg{display:block;max-width:100%;margin:0}input,button,textarea,select{font:inherit;margin:0}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word;margin:0}p{text-wrap:pretty}h1,h2,h3,h4,h5,h6{text-wrap:balance}#root,#__next{isolation:isolate;margin:0}}@layer base{odx-stack{display:block}.odx-stack{&.odx-stack-horizontal{flex-flow:row}&.odx-stack-wrap{flex-flow:column wrap}&.odx-stack-horizontal.odx-stack-wrap{flex-flow:row wrap}--flow: column;display:flex;flex-flow:var(--flow);max-inline-size:100%;align-items:stretch;justify-content:flex-start;gap:var(--odx-size-75);text-align:start}}@layer base{.odx-align-start{align-items:flex-start}.odx-align-center{align-items:center}.odx-align-end{align-items:end}.odx-justify-start{justify-content:flex-start}.odx-justify-end{justify-content:flex-end}.odx-justify-center{justify-content:center}.odx-justify-space-between{justify-content:space-between}.odx-justify-space-around{justify-content:space-around}.odx-justify-space-evenly{justify-content:space-evenly}}@layer base{.odx-gap-none{gap:0}.odx-gap-xs{gap:var(--odx-size-25)}.odx-gap-sm{gap:var(--odx-size-50)}.odx-gap-md{gap:var(--odx-size-75)}.odx-gap-lg{gap:var(--odx-size-150)}.odx-gap-xl{gap:var(--odx-size-225)}}@layer base{h1,h2,h3,h4,h5,h6{display:block;font-family:var(--odx-typography-font-family-brand);font-size:var(--_font-size);font-weight:var(--odx-typography-font-weight-semibold);line-height:var(--_line-height)}h6{--_font-size: var(--odx-breakpoint-font-size-heading-6);--_line-height: var(--odx-breakpoint-line-height-heading-6)}h5{--_font-size: var(--odx-breakpoint-font-size-heading-5);--_line-height: var(--odx-breakpoint-line-height-heading-5)}h4{--_font-size: var(--odx-breakpoint-font-size-heading-4);--_line-height: var(--odx-breakpoint-line-height-heading-4)}h3{--_font-size: var(--odx-breakpoint-font-size-heading-3);--_line-height: var(--odx-breakpoint-line-height-heading-3)}h2{--_font-size: var(--odx-breakpoint-font-size-heading-2);--_line-height: var(--odx-breakpoint-line-height-heading-2)}h1{--_font-size: var(--odx-breakpoint-font-size-heading-1);--_line-height: var(--odx-breakpoint-line-height-heading-1)}odx-icon{--rotate: 0deg;transition:var(--odx-transition-default);transition-property:transform;transform:rotate(var(--rotate))}[odxPreventTextOverflow]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}odx-list-item:has(:is(odx-button,odx-icon-button,odx-list-item::part(control)):not([aria-disabled=true]):active){--_color-background-pressed: var(--_color-background-hover)}odx-button:has(odx-icon:only-child),odx-button:has(odx-avatar){--_min-inline-size: 0}odx-accordion[control-position=start] odx-accordion-header::part(expand-control){--icon-rotation: -90deg;order:-1}odx-accordion[control-position=start] odx-accordion-header[expanded]::part(expand-control){--icon-rotation: 0}odx-input:has([slot=suffix])::part(base){padding-inline-end:var(--odx-size-px)}}@layer base{:root{--odx-transition-default: all var(--odx-motion-duration-default) var(--odx-motion-easing-default);--odx-transition-slow: all var(--odx-motion-duration-slow) var(--odx-motion-easing-default);--odx-transition-reduced: all var(--odx-motion-duration-fast) var(--odx-motion-easing-reduced);--odx-page-max-inline-size: 1600px;--odx-page-max-inline-size-narrow: 1200px;--odx-page-max-inline-size-wide: 2400px;scrollbar-color:var(--odx-color-primary-rest) var(--odx-palette-transparent)}html,body{margin:0;padding:0}html{scroll-behavior:smooth}body{color:var(--odx-color-foreground-base);background-color:var(--odx-color-background-cool);font-family:var(--odx-typography-font-family-base),"Noto Sans","Kanit",sans-serif;font-size:var(--odx-typography-font-size-base);line-height:var(--odx-typography-line-height-base)}}
|
|
1
|
+
@layer reset{:where(*){scrollbar-width:thin;box-sizing:border-box}:where(body,div,span,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,code,img,svg,small,strike,strong,sub,sup,b,u,i,ol,ul,li,form,label,table,caption,tbody,tfoot,thead,tr,th,td,main,article,aside,canvas,footer,header,nav,section,time,button,video,textarea,input){appearance:none;box-sizing:border-box;border:0;margin:0;padding:0}:where(img,picture,video,canvas){max-width:100%;display:block}:where(input,button,textarea,select){appearance:none;font-feature-settings:inherit;font-family:inherit;font-size:inherit}:where(a){color:var(--odx-color-foreground-accent-rest);text-decoration:underline}:where(p,h1,h2,h3,h4,h5,h6){overflow-wrap:break-word}:where(p){text-wrap:pretty}:where(h1,h2,h3,h4,h5,h6){text-wrap:balance}:where([popover]){border:none;outline:none}@media (prefers-reduced-motion:reduce){:where(*){scroll-behavior:auto!important;transition-duration:0s!important;animation-duration:0s!important;animation-iteration-count:1!important}}:where(*):not(:defined){display:none}}@layer base{.odx-content-box>a,.odx-content>a,.odx-link{gap:var(--odx-spacing-25);transition:var(--odx-transition-reduced);margin-inline:var(--odx-spacing-negative-12);border-radius:var(--odx-control-border-radius);cursor:pointer;padding-inline:var(--odx-spacing-12);-webkit-text-decoration:inherit;text-decoration:inherit;line-height:inherit;color:var(--odx-color-foreground-accent-rest);outline:none;align-items:center;transition-property:color;display:inline-flex;&:focus-visible{outline:var(--odx-focus-ring-outer);outline-offset:var(--odx-focus-ring-offset-sm)}&:hover:not([disabled]){color:var(--odx-color-foreground-accent-hover);text-decoration:underline}&[disabled]{cursor:not-allowed;color:var(--odx-color-foreground-rest-subtle);-webkit-user-select:none;user-select:none;pointer-events:none}>:is(odx-icon,.odx-icon){vertical-align:middle}}odx-title,[class*=odx-title],:where(h1,h2,h3,h4,h5,h6){font-family:var(--odx-typography-font-family-brand);font-weight:var(--odx-typography-font-weight-semibold);display:block}[class*=odx-title-display-]{font-weight:var(--odx-typography-font-weight-medium)}odx-title,.odx-title{line-height:inherit;font-size:inherit}odx-title[size=xs],.odx-title-xs,:where(h6){line-height:var(--odx-typography-line-height-heading-xs);font-size:var(--odx-typography-font-size-heading-xs)}odx-title[size=sm],.odx-title-sm,:where(h5){line-height:var(--odx-typography-line-height-heading-sm);font-size:var(--odx-typography-font-size-heading-sm)}odx-title[size=md],.odx-title-md,:where(h4){line-height:var(--odx-typography-line-height-heading-md);font-size:var(--odx-typography-font-size-heading-md)}odx-title[size=lg],.odx-title-lg,:where(h3){line-height:var(--odx-typography-line-height-heading-lg);font-size:var(--odx-typography-font-size-heading-lg)}odx-title[size=xl],.odx-title-xl,:where(h2){line-height:var(--odx-typography-line-height-heading-xl);font-size:var(--odx-typography-font-size-heading-xl)}odx-title[size=xxl],.odx-title-xxl,:where(h1){line-height:var(--odx-typography-line-height-heading-xxl);font-size:var(--odx-typography-font-size-heading-xxl)}odx-title[size=display-sm],.odx-title-display-sm{line-height:var(--odx-typography-line-height-display-sm);font-size:var(--odx-typography-font-size-display-sm)}odx-title[size=display-md],.odx-title-display-md{line-height:var(--odx-typography-line-height-display-md);font-size:var(--odx-typography-font-size-display-md)}odx-title[size=display-lg],.odx-title-display-lg{line-height:var(--odx-typography-line-height-display-lg);font-size:var(--odx-typography-font-size-display-lg)}odx-title[size=display-xl],.odx-title-display-xl{line-height:var(--odx-typography-line-height-display-xl);font-size:var(--odx-typography-font-size-display-xl)}odx-text,.odx-text{display:block}odx-text[inline],.odx-text-inline{display:inline-block}odx-text[strong],.odx-text-strong{font-weight:var(--odx-typography-font-weight-medium)}:where(:is(.odx-content,.odx-content-box)>:is(p,odx-text,.odx-text)),odx-text[size=md],.odx-text-md{line-height:var(--odx-typography-line-height-text-md);font-size:var(--odx-typography-font-size-text-md)}odx-text[size=xs],.odx-text-xs{line-height:var(--odx-typography-line-height-text-xs);font-size:var(--odx-typography-font-size-text-xs)}odx-text[size=sm],.odx-text-sm{line-height:var(--odx-typography-line-height-text-sm);font-size:var(--odx-typography-font-size-text-sm)}odx-text[size=lg],.odx-text-lg{line-height:var(--odx-typography-line-height-text-lg);font-size:var(--odx-typography-font-size-text-lg)}:where(.odx-typeset,.odx-content){line-height:var(--odx-typography-line-height-text-md);>:where(odx-title,[class*=odx-title]),:where(h1,h2,h3,h4,h5,h6){margin-block:0 var(--odx-layout-spacing-sm);margin-inline:0}>:where(.odx-text,odx-text),:where(p,li,dt,dd,blockquote,figcaption,small,pre,code,cite){margin:var(--odx-layout-spacing-md)0}:where(h2,h3,h4,h5,h6){margin-block-start:var(--odx-layout-spacing-lg)}:where(ul,ol,dl,blockquote){margin-block:var(--odx-layout-spacing-sm);margin-inline:0;padding-inline-start:var(--odx-spacing-200)}:where(blockquote){padding-inline-end:var(--odx-spacing-200)}:where(dt){font-weight:var(--odx-typography-font-weight-medium)}:where(small){font-size:var(--odx-typography-font-size-text-sm)}}:where(.odx-typeset-sm){line-height:var(--odx-typography-line-height-text-sm);font-size:var(--odx-typography-font-size-text-sm);:where(ul,ol,dl,blockquote){padding-inline-start:var(--odx-spacing-150)}:where(blockquote){padding-inline-end:var(--odx-spacing-150)}:where(h2,h3,h4,h5,h6){margin-block-start:var(--odx-layout-spacing-md)}>:where(.odx-text,odx-text),:where(p,li,dt,dd,blockquote,figcaption,small,pre,code,cite){margin-block:var(--odx-layout-spacing-sm)}}.odx-content-box{background-color:var(--odx-color-background-level-1);padding:var(--odx-layout-spacing-md)}.odx-cluster,.odx-flank,.odx-stack{gap:var(--odx-layout-spacing-md);max-width:100%;text-align:inherit;flex-direction:column;justify-content:flex-start;align-items:center;display:flex}.odx-cluster{flex-flow:wrap;align-items:center}.odx-flank{flex-direction:row}.odx-stack{align-items:stretch}.odx-flank:not(.odx-justify-end)>:not(:first-child),.odx-flank.odx-justify-end>:not(:last-child),.odx-fill{flex:1}.odx-align-baseline,.odx-align-start{align-items:flex-start}.odx-align-center{align-items:center}.odx-align-end{align-items:end}.odx-justify-start{justify-content:flex-start}.odx-justify-end{justify-content:flex-end}.odx-justify-center{justify-content:center}.odx-justify-space-between{justify-content:space-between}.odx-justify-space-around{justify-content:space-around}.odx-justify-space-evenly{justify-content:space-evenly}.odx-nowrap{flex-wrap:nowrap}[class*=odx-auto-grid]{--max-columns:6;--min-column-size:250px;--gap:var(--odx-layout-spacing-md);--_max-column-size:calc((100% - var(--gap)*(var(--max-columns) + 1))/var(--max-columns));--_min-column-size:min(100%,max(var(--min-column-size),var(--_max-column-size)));--_column-size:minmax(var(--_min-column-size),1fr);grid-template-columns:repeat(auto-fit,var(--_column-size));gap:var(--gap);place-content:center;display:grid}.odx-auto-grid-fill{grid-template-columns:repeat(auto-fill,var(--_column-size))}:root{scrollbar-color:var(--odx-color-background-brand)transparent}.odx-dark-mode{color-scheme:dark}.odx-light-mode{color-scheme:light}html{scroll-behavior:smooth}body{background-color:var(--odx-color-background-base);line-height:var(--odx-typography-line-height-base);color:var(--odx-color-foreground-rest);font-family:var(--odx-typography-font-family-base),"Noto Sans",Kanit,sans-serif;font-size:var(--odx-typography-font-size-base)}:where(.odx-content),.odx-content-box{>odx-area-header:first-of-type{margin-block-start:calc(-1*var(--odx-layout-spacing-md))}>odx-key-value-list,>odx-list{margin-block:var(--odx-layout-spacing-md)}}odx-card>odx-area-header[slot=header]:first-child{margin-block-start:calc(-1*var(--odx-layout-spacing-md))}odx-page-layout [id]{scroll-margin-top:calc(var(--page-offset-top))}odx-icon{transition:var(--odx-transition-default);transition-property:transform,color,opacity}input[type=time]::-webkit-calendar-picker-indicator{display:none}[odx-control]:has([odx-control]:not([disabled]):active){--_color-background-pressed:var(--_color-background-hover)}[odx-button]:has(odx-icon:only-child){--_min-width:var(--_height)}odx-rail-navigation :is(odx-navigation-item,odx-navigation-item-group)::part(label){transition:var(--odx-transition-reduced);transition-delay:var(--odx-motion-duration-fast);transition-property:opacity}odx-rail-navigation[collapsed] :is(odx-navigation-item,odx-navigation-item-group)::part(label){opacity:0;white-space:nowrap}}@layer variant,state,theme;@layer utils{.odx-m-auto{margin:auto}.odx-mx-auto{margin-inline:auto}.odx-ml-auto{margin-inline-start:auto}.odx-mr-auto{margin-inline-end:auto}.odx-my-auto{margin-block:auto}.odx-mt-auto{margin-block-start:auto}.odx-mb-auto{margin-block-end:auto}.odx-g-0{--gap:0px;gap:0}.odx-gx-0{column-gap:0}.odx-gy-0{row-gap:0}.odx-p-0{padding:0}.odx-px-0{padding-inline:0}.odx-pl-0{padding-inline-start:0}.odx-pr-0{padding-inline-end:0}.odx-py-0{padding-block:0}.odx-pt-0{padding-block-start:0}.odx-pb-0{padding-block-end:0}.odx-m-0{margin:0}.odx-mx-0{margin-inline:0}.odx-ml-0{margin-inline-start:0}.odx-mr-0{margin-inline-end:0}.odx-my-0{margin-block:0}.odx-mt-0{margin-block-start:0}.odx-mb-0{margin-block-end:0}.odx-g-12{--gap:var(--odx-spacing-12);gap:var(--odx-spacing-12)}.odx-gx-12{column-gap:var(--odx-spacing-12)}.odx-gy-12{row-gap:var(--odx-spacing-12)}.odx-p-12{padding:var(--odx-spacing-12)}.odx-px-12{padding-inline:var(--odx-spacing-12)}.odx-pl-12{padding-inline-start:var(--odx-spacing-12)}.odx-pr-12{padding-inline-end:var(--odx-spacing-12)}.odx-py-12{padding-block:var(--odx-spacing-12)}.odx-pt-12{padding-block-start:var(--odx-spacing-12)}.odx-pb-12{padding-block-end:var(--odx-spacing-12)}.odx-m-12{margin:var(--odx-spacing-12)}.odx-mx-12{margin-inline:var(--odx-spacing-12)}.odx-ml-12{margin-inline-start:var(--odx-spacing-12)}.odx-mr-12{margin-inline-end:var(--odx-spacing-12)}.odx-my-12{margin-block:var(--odx-spacing-12)}.odx-mt-12{margin-block-start:var(--odx-spacing-12)}.odx-mb-12{margin-block-end:var(--odx-spacing-12)}.odx-g-25{--gap:var(--odx-spacing-25);gap:var(--odx-spacing-25)}.odx-gx-25{column-gap:var(--odx-spacing-25)}.odx-gy-25{row-gap:var(--odx-spacing-25)}.odx-p-25{padding:var(--odx-spacing-25)}.odx-px-25{padding-inline:var(--odx-spacing-25)}.odx-pl-25{padding-inline-start:var(--odx-spacing-25)}.odx-pr-25{padding-inline-end:var(--odx-spacing-25)}.odx-py-25{padding-block:var(--odx-spacing-25)}.odx-pt-25{padding-block-start:var(--odx-spacing-25)}.odx-pb-25{padding-block-end:var(--odx-spacing-25)}.odx-m-25{margin:var(--odx-spacing-25)}.odx-mx-25{margin-inline:var(--odx-spacing-25)}.odx-ml-25{margin-inline-start:var(--odx-spacing-25)}.odx-mr-25{margin-inline-end:var(--odx-spacing-25)}.odx-my-25{margin-block:var(--odx-spacing-25)}.odx-mt-25{margin-block-start:var(--odx-spacing-25)}.odx-mb-25{margin-block-end:var(--odx-spacing-25)}.odx-g-37{--gap:var(--odx-spacing-37);gap:var(--odx-spacing-37)}.odx-gx-37{column-gap:var(--odx-spacing-37)}.odx-gy-37{row-gap:var(--odx-spacing-37)}.odx-p-37{padding:var(--odx-spacing-37)}.odx-px-37{padding-inline:var(--odx-spacing-37)}.odx-pl-37{padding-inline-start:var(--odx-spacing-37)}.odx-pr-37{padding-inline-end:var(--odx-spacing-37)}.odx-py-37{padding-block:var(--odx-spacing-37)}.odx-pt-37{padding-block-start:var(--odx-spacing-37)}.odx-pb-37{padding-block-end:var(--odx-spacing-37)}.odx-m-37{margin:var(--odx-spacing-37)}.odx-mx-37{margin-inline:var(--odx-spacing-37)}.odx-ml-37{margin-inline-start:var(--odx-spacing-37)}.odx-mr-37{margin-inline-end:var(--odx-spacing-37)}.odx-my-37{margin-block:var(--odx-spacing-37)}.odx-mt-37{margin-block-start:var(--odx-spacing-37)}.odx-mb-37{margin-block-end:var(--odx-spacing-37)}.odx-g-50{--gap:var(--odx-spacing-50);gap:var(--odx-spacing-50)}.odx-gx-50{column-gap:var(--odx-spacing-50)}.odx-gy-50{row-gap:var(--odx-spacing-50)}.odx-p-50{padding:var(--odx-spacing-50)}.odx-px-50{padding-inline:var(--odx-spacing-50)}.odx-pl-50{padding-inline-start:var(--odx-spacing-50)}.odx-pr-50{padding-inline-end:var(--odx-spacing-50)}.odx-py-50{padding-block:var(--odx-spacing-50)}.odx-pt-50{padding-block-start:var(--odx-spacing-50)}.odx-pb-50{padding-block-end:var(--odx-spacing-50)}.odx-m-50{margin:var(--odx-spacing-50)}.odx-mx-50{margin-inline:var(--odx-spacing-50)}.odx-ml-50{margin-inline-start:var(--odx-spacing-50)}.odx-mr-50{margin-inline-end:var(--odx-spacing-50)}.odx-my-50{margin-block:var(--odx-spacing-50)}.odx-mt-50{margin-block-start:var(--odx-spacing-50)}.odx-mb-50{margin-block-end:var(--odx-spacing-50)}.odx-g-75{--gap:var(--odx-spacing-75);gap:var(--odx-spacing-75)}.odx-gx-75{column-gap:var(--odx-spacing-75)}.odx-gy-75{row-gap:var(--odx-spacing-75)}.odx-p-75{padding:var(--odx-spacing-75)}.odx-px-75{padding-inline:var(--odx-spacing-75)}.odx-pl-75{padding-inline-start:var(--odx-spacing-75)}.odx-pr-75{padding-inline-end:var(--odx-spacing-75)}.odx-py-75{padding-block:var(--odx-spacing-75)}.odx-pt-75{padding-block-start:var(--odx-spacing-75)}.odx-pb-75{padding-block-end:var(--odx-spacing-75)}.odx-m-75{margin:var(--odx-spacing-75)}.odx-mx-75{margin-inline:var(--odx-spacing-75)}.odx-ml-75{margin-inline-start:var(--odx-spacing-75)}.odx-mr-75{margin-inline-end:var(--odx-spacing-75)}.odx-my-75{margin-block:var(--odx-spacing-75)}.odx-mt-75{margin-block-start:var(--odx-spacing-75)}.odx-mb-75{margin-block-end:var(--odx-spacing-75)}.odx-g-100{--gap:var(--odx-spacing-100);gap:var(--odx-spacing-100)}.odx-gx-100{column-gap:var(--odx-spacing-100)}.odx-gy-100{row-gap:var(--odx-spacing-100)}.odx-p-100{padding:var(--odx-spacing-100)}.odx-px-100{padding-inline:var(--odx-spacing-100)}.odx-pl-100{padding-inline-start:var(--odx-spacing-100)}.odx-pr-100{padding-inline-end:var(--odx-spacing-100)}.odx-py-100{padding-block:var(--odx-spacing-100)}.odx-pt-100{padding-block-start:var(--odx-spacing-100)}.odx-pb-100{padding-block-end:var(--odx-spacing-100)}.odx-m-100{margin:var(--odx-spacing-100)}.odx-mx-100{margin-inline:var(--odx-spacing-100)}.odx-ml-100{margin-inline-start:var(--odx-spacing-100)}.odx-mr-100{margin-inline-end:var(--odx-spacing-100)}.odx-my-100{margin-block:var(--odx-spacing-100)}.odx-mt-100{margin-block-start:var(--odx-spacing-100)}.odx-mb-100{margin-block-end:var(--odx-spacing-100)}.odx-g-150{--gap:var(--odx-spacing-150);gap:var(--odx-spacing-150)}.odx-gx-150{column-gap:var(--odx-spacing-150)}.odx-gy-150{row-gap:var(--odx-spacing-150)}.odx-p-150{padding:var(--odx-spacing-150)}.odx-px-150{padding-inline:var(--odx-spacing-150)}.odx-pl-150{padding-inline-start:var(--odx-spacing-150)}.odx-pr-150{padding-inline-end:var(--odx-spacing-150)}.odx-py-150{padding-block:var(--odx-spacing-150)}.odx-pt-150{padding-block-start:var(--odx-spacing-150)}.odx-pb-150{padding-block-end:var(--odx-spacing-150)}.odx-m-150{margin:var(--odx-spacing-150)}.odx-mx-150{margin-inline:var(--odx-spacing-150)}.odx-ml-150{margin-inline-start:var(--odx-spacing-150)}.odx-mr-150{margin-inline-end:var(--odx-spacing-150)}.odx-my-150{margin-block:var(--odx-spacing-150)}.odx-mt-150{margin-block-start:var(--odx-spacing-150)}.odx-mb-150{margin-block-end:var(--odx-spacing-150)}.odx-g-sm{--gap:var(--odx-layout-spacing-sm);gap:var(--odx-layout-spacing-sm)}.odx-gx-sm{column-gap:var(--odx-layout-spacing-sm)}.odx-gy-sm{row-gap:var(--odx-layout-spacing-sm)}.odx-p-sm{padding:var(--odx-layout-spacing-sm)}.odx-px-sm{padding-inline:var(--odx-layout-spacing-sm)}.odx-pl-sm{padding-inline-start:var(--odx-layout-spacing-sm)}.odx-pr-sm{padding-inline-end:var(--odx-layout-spacing-sm)}.odx-py-sm{padding-block:var(--odx-layout-spacing-sm)}.odx-pt-sm{padding-block-start:var(--odx-layout-spacing-sm)}.odx-pb-sm{padding-block-end:var(--odx-layout-spacing-sm)}.odx-m-sm{margin:var(--odx-layout-spacing-sm)}.odx-mx-sm{margin-inline:var(--odx-layout-spacing-sm)}.odx-ml-sm{margin-inline-start:var(--odx-layout-spacing-sm)}.odx-mr-sm{margin-inline-end:var(--odx-layout-spacing-sm)}.odx-my-sm{margin-block:var(--odx-layout-spacing-sm)}.odx-mt-sm{margin-block-start:var(--odx-layout-spacing-sm)}.odx-mb-sm{margin-block-end:var(--odx-layout-spacing-sm)}.odx-g-md{--gap:var(--odx-layout-spacing-md);gap:var(--odx-layout-spacing-md)}.odx-gx-md{column-gap:var(--odx-layout-spacing-md)}.odx-gy-md{row-gap:var(--odx-layout-spacing-md)}.odx-p-md{padding:var(--odx-layout-spacing-md)}.odx-px-md{padding-inline:var(--odx-layout-spacing-md)}.odx-pl-md{padding-inline-start:var(--odx-layout-spacing-md)}.odx-pr-md{padding-inline-end:var(--odx-layout-spacing-md)}.odx-py-md{padding-block:var(--odx-layout-spacing-md)}.odx-pt-md{padding-block-start:var(--odx-layout-spacing-md)}.odx-pb-md{padding-block-end:var(--odx-layout-spacing-md)}.odx-m-md{margin:var(--odx-layout-spacing-md)}.odx-mx-md{margin-inline:var(--odx-layout-spacing-md)}.odx-ml-md{margin-inline-start:var(--odx-layout-spacing-md)}.odx-mr-md{margin-inline-end:var(--odx-layout-spacing-md)}.odx-my-md{margin-block:var(--odx-layout-spacing-md)}.odx-mt-md{margin-block-start:var(--odx-layout-spacing-md)}.odx-mb-md{margin-block-end:var(--odx-layout-spacing-md)}.odx-g-lg{--gap:var(--odx-layout-spacing-lg);gap:var(--odx-layout-spacing-lg)}.odx-gx-lg{column-gap:var(--odx-layout-spacing-lg)}.odx-gy-lg{row-gap:var(--odx-layout-spacing-lg)}.odx-p-lg{padding:var(--odx-layout-spacing-lg)}.odx-px-lg{padding-inline:var(--odx-layout-spacing-lg)}.odx-pl-lg{padding-inline-start:var(--odx-layout-spacing-lg)}.odx-pr-lg{padding-inline-end:var(--odx-layout-spacing-lg)}.odx-py-lg{padding-block:var(--odx-layout-spacing-lg)}.odx-pt-lg{padding-block-start:var(--odx-layout-spacing-lg)}.odx-pb-lg{padding-block-end:var(--odx-layout-spacing-lg)}.odx-m-lg{margin:var(--odx-layout-spacing-lg)}.odx-mx-lg{margin-inline:var(--odx-layout-spacing-lg)}.odx-ml-lg{margin-inline-start:var(--odx-layout-spacing-lg)}.odx-mr-lg{margin-inline-end:var(--odx-layout-spacing-lg)}.odx-my-lg{margin-block:var(--odx-layout-spacing-lg)}.odx-mt-lg{margin-block-start:var(--odx-layout-spacing-lg)}.odx-mb-lg{margin-block-end:var(--odx-layout-spacing-lg)}.odx-no-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.odx-no-overflow{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.odx-visually-hidden:not(:focus-within),.odx-visually-hidden-force{white-space:nowrap!important;width:1px!important;height:1px!important;clip-path:rect(0 0 0 0)!important;border:none!important;padding:0!important;position:absolute!important;overflow:hidden!important}}:root{--odx-transition-default:all var(--odx-motion-duration-default)var(--odx-motion-easing-default);--odx-transition-slow:all var(--odx-motion-duration-slow)var(--odx-motion-easing-default);--odx-transition-reduced:all var(--odx-motion-duration-fast)var(--odx-motion-easing-reduced);--odx-motion-delay-reduced:50ms;--odx-focus-ring-outer:var(--odx-border-width-thick)solid var(--odx-color-stroke-focus-outer);--odx-focus-ring-inner:0 0 0 calc(-1*var(--odx-focus-ring-offset))var(--odx-color-stroke-focus-inner)inset;--odx-focus-ring-offset:calc(-1*var(--odx-border-width-thick));--odx-focus-ring-offset-sm:calc(-1*var(--odx-border-width-thin));--odx-z-level-background:-1;--odx-z-level-base:0;--odx-z-level-foreground:1;--odx-z-level-interactive:5;--odx-z-level-sticky:10;--odx-z-level-sticky-foreground:15;--odx-z-level-overlay:100;--odx-z-level-topmost:9999}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface AttributeDirectiveOptions<T extends string, R> {
|
|
2
|
+
name: T;
|
|
3
|
+
getValue: (host: HTMLElement) => R;
|
|
4
|
+
}
|
|
5
|
+
export interface AttributeDirective<T extends string, R> {
|
|
6
|
+
selector: `[${T}]`;
|
|
7
|
+
attribute: T;
|
|
8
|
+
applied<E extends HTMLElement = HTMLElement>(element?: HTMLElement | null): element is E;
|
|
9
|
+
value: (element: HTMLElement) => R;
|
|
10
|
+
}
|
|
11
|
+
export type BooleanAttributeDirectiveOptions<T extends string> = Omit<AttributeDirectiveOptions<T, boolean>, 'getValue'> & {
|
|
12
|
+
onUpdate?(element: HTMLElement, value: boolean): void;
|
|
13
|
+
};
|
|
14
|
+
export type BooleanAttributeDirective<T extends string> = AttributeDirective<T, boolean> & {
|
|
15
|
+
toggle(element: HTMLElement, state?: boolean): void;
|
|
16
|
+
};
|
|
17
|
+
export declare function booleanAttributeDirective<const T extends string>(options: BooleanAttributeDirectiveOptions<T>): BooleanAttributeDirective<T>;
|
|
18
|
+
export type StringAttributeDirective<T extends string> = AttributeDirective<T, string | null>;
|
|
19
|
+
export declare function stringAttributeDirective<const T extends string>(name: T): StringAttributeDirective<T>;
|
|
20
|
+
//# sourceMappingURL=attribute-directive.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { StringAttributeDirective } from './attribute-directive.js';
|
|
2
|
+
export declare class InvokerCommandEvent extends CustomEvent<{
|
|
3
|
+
source: HTMLElement;
|
|
4
|
+
command: string;
|
|
5
|
+
}> {
|
|
6
|
+
static readonly type = "odx-invoker-command";
|
|
7
|
+
constructor(detail: InvokerCommandEvent['detail'] & {
|
|
8
|
+
bubbles?: boolean;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export interface CommandDirectiveOptions<T extends string> {
|
|
12
|
+
name: T;
|
|
13
|
+
command: string | ((source: HTMLElement) => string | null);
|
|
14
|
+
}
|
|
15
|
+
export interface CommandDirective<T extends string> extends StringAttributeDirective<T> {
|
|
16
|
+
connect: () => void;
|
|
17
|
+
disconnect: () => void;
|
|
18
|
+
subscribe: (target: HTMLElement, handler: (event: InvokerCommandEvent) => void) => () => void;
|
|
19
|
+
invoke: (source: HTMLElement, command: string, targetOrId?: HTMLElement | string | null) => boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function commandDirective<const T extends string>(options: CommandDirectiveOptions<T>): CommandDirective<T>;
|
|
22
|
+
//# sourceMappingURL=command-directive.d.ts.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export declare function createCustomEvent<Payload = never, const T extends string = string>(name: T, options?: CustomEventInit<Payload>): {
|
|
2
|
+
new (eventInit?: CustomEventInit<Payload>): {
|
|
3
|
+
readonly detail: Payload;
|
|
4
|
+
initCustomEvent(type: string, bubbles?: boolean, cancelable?: boolean, detail?: Payload | undefined): void;
|
|
5
|
+
readonly bubbles: boolean;
|
|
6
|
+
cancelBubble: boolean;
|
|
7
|
+
readonly cancelable: boolean;
|
|
8
|
+
readonly composed: boolean;
|
|
9
|
+
readonly currentTarget: EventTarget | null;
|
|
10
|
+
readonly defaultPrevented: boolean;
|
|
11
|
+
readonly eventPhase: number;
|
|
12
|
+
readonly isTrusted: boolean;
|
|
13
|
+
returnValue: boolean;
|
|
14
|
+
readonly srcElement: EventTarget | null;
|
|
15
|
+
readonly target: EventTarget | null;
|
|
16
|
+
readonly timeStamp: DOMHighResTimeStamp;
|
|
17
|
+
readonly type: string;
|
|
18
|
+
composedPath(): EventTarget[];
|
|
19
|
+
initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
|
|
20
|
+
preventDefault(): void;
|
|
21
|
+
stopImmediatePropagation(): void;
|
|
22
|
+
stopPropagation(): void;
|
|
23
|
+
readonly NONE: 0;
|
|
24
|
+
readonly CAPTURING_PHASE: 1;
|
|
25
|
+
readonly AT_TARGET: 2;
|
|
26
|
+
readonly BUBBLING_PHASE: 3;
|
|
27
|
+
};
|
|
28
|
+
readonly type: T;
|
|
29
|
+
dispatch(target: HTMLElement, eventInit?: CustomEventInit<Payload>): boolean;
|
|
30
|
+
};
|
|
31
|
+
export declare function createToggleEvent(oldState: boolean, newState: boolean, eventInit?: EventInit): ToggleEvent;
|
|
32
|
+
export declare function isToggleOpen(event: ToggleEvent): boolean;
|
|
33
|
+
export declare function clickedOutside(event: Event, element?: Element | null, allowSelf?: boolean): boolean;
|
|
34
|
+
export declare function forwardEvent(target: HTMLElement, eventInit?: EventInit): EventListener;
|
|
35
|
+
export declare function getElementFromEvent<T = HTMLElement>(event: Event, filterFn: (node: HTMLElement) => boolean): T | undefined;
|
|
36
|
+
export declare function getKeyInfo(event: KeyboardEvent): {
|
|
37
|
+
up: boolean;
|
|
38
|
+
right: boolean;
|
|
39
|
+
down: boolean;
|
|
40
|
+
left: boolean;
|
|
41
|
+
enter: boolean;
|
|
42
|
+
escape: boolean;
|
|
43
|
+
space: boolean;
|
|
44
|
+
backTab: boolean;
|
|
45
|
+
tab: boolean;
|
|
46
|
+
start: boolean;
|
|
47
|
+
end: boolean;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=dom-events.d.ts.map
|
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
export type ARIARole = 'alert' | 'alertdialog' | 'button' | 'checkbox' | 'dialog' | 'gridcell' | 'link' | 'log' | 'marquee' | 'menuitem' | 'menuitemcheckbox' | 'menuitemradio' | 'option' | 'progressbar' | 'radio' | 'scrollbar' | 'searchbox' | 'slider' | 'spinbutton' | 'status' | 'switch' | 'tab' | 'tabpanel' | 'textbox' | 'timer' | 'tooltip' | 'treeitem' | 'combobox' | 'grid' | 'listbox' | 'menu' | 'menubar' | 'radiogroup' | 'tablist' | 'tree' | 'treegrid' | 'application' | 'article' | 'cell' | 'columnheader' | 'definition' | 'directory' | 'document' | 'feed' | 'figure' | 'group' | 'heading' | 'img' | 'list' | 'listitem' | 'math' | 'none' | 'note' | 'presentation' | 'region' | 'row' | 'rowgroup' | 'rowheader' | 'separator' | 'table' | 'term' | 'text' | 'toolbar' | 'banner' | 'complementary' | 'contentinfo' | 'form' | 'main' | 'navigation' | 'region' | 'search' | 'doc-abstract' | 'doc-acknowledgments' | 'doc-afterword' | 'doc-appendix' | 'doc-backlink' | 'doc-biblioentry' | 'doc-bibliography' | 'doc-biblioref' | 'doc-chapter' | 'doc-colophon' | 'doc-conclusion' | 'doc-cover' | 'doc-credit' | 'doc-credits' | 'doc-dedication' | 'doc-endnote' | 'doc-endnotes' | 'doc-epigraph' | 'doc-epilogue' | 'doc-errata' | 'doc-example' | 'doc-footnote' | 'doc-foreword' | 'doc-glossary' | 'doc-glossref' | 'doc-index' | 'doc-introduction' | 'doc-noteref' | 'doc-notice' | 'doc-pagebreak' | 'doc-pagelist' | 'doc-part' | 'doc-preface' | 'doc-prologue' | 'doc-pullquote' | 'doc-qna' | 'doc-subtitle' | 'doc-tip' | 'doc-toc';
|
|
2
|
-
/**
|
|
3
|
-
* An extension of `ARIAMixin` that enforces strict value types for aria
|
|
4
|
-
* properties.
|
|
5
|
-
*
|
|
6
|
-
* This is needed for correct typing in render functions with lit analyzer.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* render() {
|
|
10
|
-
* const {ariaLabel} = this as ARIAMixinStrict;
|
|
11
|
-
* return html`
|
|
12
|
-
* <button aria-label=${ariaLabel || nothing}>
|
|
13
|
-
* <slot></slot>
|
|
14
|
-
* </button>
|
|
15
|
-
* `;
|
|
16
|
-
* }
|
|
17
|
-
*/
|
|
18
2
|
export interface ARIAMixinStrict extends ARIAMixin {
|
|
19
3
|
ariaAtomic: 'true' | 'false' | null;
|
|
20
4
|
ariaAutoComplete: 'none' | 'inline' | 'list' | 'both' | null;
|
|
@@ -55,4 +39,4 @@ export interface ARIAMixinStrict extends ARIAMixin {
|
|
|
55
39
|
ariaValueText: string | null;
|
|
56
40
|
role: ARIARole | null;
|
|
57
41
|
}
|
|
58
|
-
//# sourceMappingURL=
|
|
42
|
+
//# sourceMappingURL=dom-types.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare function supportsHover(): boolean;
|
|
2
|
+
export declare function parseDate(value: number | string | Date): Date | null;
|
|
3
|
+
export declare function findClosestDocument(node: Node): Document | ShadowRoot;
|
|
4
|
+
export declare function toAriaBooleanAttribute(value: boolean, removeOnFalse?: false | undefined): 'true' | 'false';
|
|
5
|
+
export declare function toAriaBooleanAttribute(value: boolean, removeOnFalse?: true): null;
|
|
6
|
+
export declare function toPx(value?: number | null): string | null;
|
|
7
|
+
export declare function querySlotSelector<S extends string | string[], R = S extends string[] ? HTMLSlotElement[] : HTMLSlotElement | null>(root: DocumentFragment | HTMLElement, slot?: S): R;
|
|
8
|
+
export interface GetAssignedElementOptions<T extends HTMLElement = HTMLElement> {
|
|
9
|
+
slot?: string | string[];
|
|
10
|
+
selector?: ((element: T) => boolean) | string;
|
|
11
|
+
flatten?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function getAssignedElements<T extends HTMLElement = HTMLElement>(root: DocumentFragment | HTMLElement, options?: GetAssignedElementOptions<T>): T[];
|
|
14
|
+
export declare function setFocusable(target: HTMLElement, interactive: boolean): void;
|
|
15
|
+
export declare function waitForAnimations(element?: Element | null, subtree?: boolean): Promise<Animation[]>;
|
|
16
|
+
export declare function interactionResponse(): Promise<unknown>;
|
|
17
|
+
//# sourceMappingURL=dom.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { nothing, ReactiveElement, TemplateResult } from 'lit';
|
|
2
|
+
export declare function optionalAttr<T>(value: T): NonNullable<T>;
|
|
3
|
+
export declare function optionalSlot(host: ReactiveElement, slotName: string, classNames?: string): TemplateResult | typeof nothing;
|
|
4
|
+
//# sourceMappingURL=lit.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './attribute-directive.js';
|
|
2
|
+
export * from './command-directive.js';
|
|
3
|
+
export * from './dom.js';
|
|
4
|
+
export * from './dom-events.js';
|
|
5
|
+
export * from './dom-types.js';
|
|
6
|
+
export * from './lit.js';
|
|
7
|
+
export * from './shared-event-listener.js';
|
|
8
|
+
export * from './shared-resize-observer.js';
|
|
9
|
+
export * from './types.js';
|
|
10
|
+
export * from './unique-id.js';
|
|
11
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function addGlobalEventListener(type: string, listener: EventListener, options?: boolean | AddEventListenerOptions): () => void;
|
|
2
|
+
export declare function removeGlobalEventListener(type: string, listener: EventListener): void;
|
|
3
|
+
//# sourceMappingURL=shared-event-listener.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ObserveElementResizeOptions {
|
|
2
|
+
edges?: Array<'leading' | 'trailing'>;
|
|
3
|
+
fpsLimit?: number;
|
|
4
|
+
}
|
|
5
|
+
export declare function observeElementResize(target: Element, handler: ResizeObserverCallback, options?: ObserveElementResizeOptions): () => void;
|
|
6
|
+
export declare function unobserveElementResize(target: Element): void;
|
|
7
|
+
//# sourceMappingURL=shared-resize-observer.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare type Constructor<T> = new (...args: any[]) => T;
|
|
2
|
+
export type Loose<T extends string> = T | (string & {});
|
|
3
|
+
export type ExpandUnion<T> = T extends unknown ? T : never;
|
|
4
|
+
export type ValuesOf<T extends object> = T[keyof T];
|
|
5
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a unique identifier for a given key. If the prefix has previously been used,
|
|
3
|
+
* the function increments a counter associated with that prefix to ensure uniqueness.
|
|
4
|
+
* The generated ID is in the format of `${prefix}-${counter}`.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} key - The prefix for which to generate a unique identifier.
|
|
7
|
+
* @returns {string} A unique identifier string based on the provided prefix.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const id1 = getUniqueId('component');
|
|
12
|
+
* console.log(id1); // Outputs: "component-1"
|
|
13
|
+
*
|
|
14
|
+
* const id2 = getUniqueId('component');
|
|
15
|
+
* console.log(id2); // Outputs: "component-2"
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function getUniqueId(key: string): string;
|
|
19
|
+
export declare function resetUniqueId(key?: string): void;
|
|
20
|
+
//# sourceMappingURL=unique-id.d.ts.map
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { r as round, t as throttle } from './vendor.js';
|
|
2
|
+
import { nothing, html } from 'lit';
|
|
3
|
+
|
|
4
|
+
function attributeDirective({ name, getValue }) {
|
|
5
|
+
return {
|
|
6
|
+
selector: `[${name}]`,
|
|
7
|
+
attribute: name,
|
|
8
|
+
applied(element) {
|
|
9
|
+
return Boolean(element?.hasAttribute(name));
|
|
10
|
+
},
|
|
11
|
+
value(element) {
|
|
12
|
+
return this.applied(element) ? getValue(element) : null;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function booleanAttributeDirective(options) {
|
|
17
|
+
return {
|
|
18
|
+
...attributeDirective({ ...options, getValue: (element) => element.getAttribute(options.name) !== "false" }),
|
|
19
|
+
toggle(element, state) {
|
|
20
|
+
if (state === element.hasAttribute(options.name)) return;
|
|
21
|
+
element.toggleAttribute(options.name, state);
|
|
22
|
+
options.onUpdate?.(element, element.hasAttribute(options.name));
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function stringAttributeDirective(name) {
|
|
27
|
+
return attributeDirective({ name, getValue: (element) => element.getAttribute(name) });
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function supportsHover() {
|
|
31
|
+
return "matchMedia" in globalThis && globalThis.matchMedia("(hover: hover)").matches;
|
|
32
|
+
}
|
|
33
|
+
const createDate = (value) => Number.isNaN(value) ? null : new Date(value);
|
|
34
|
+
function parseDate(value) {
|
|
35
|
+
if (value instanceof Date) {
|
|
36
|
+
return createDate(value.getTime());
|
|
37
|
+
}
|
|
38
|
+
const date = new Date(value);
|
|
39
|
+
if (Number.isNaN(date.getTime()) && typeof value === "string") {
|
|
40
|
+
return createDate(Number(value));
|
|
41
|
+
}
|
|
42
|
+
return createDate(date.getTime());
|
|
43
|
+
}
|
|
44
|
+
function findClosestDocument(node) {
|
|
45
|
+
let parent = node.parentNode;
|
|
46
|
+
while (parent && parent.nodeType !== Node.DOCUMENT_FRAGMENT_NODE && parent.nodeType !== Node.DOCUMENT_NODE) {
|
|
47
|
+
parent = parent.parentNode;
|
|
48
|
+
}
|
|
49
|
+
return parent ?? document;
|
|
50
|
+
}
|
|
51
|
+
function toAriaBooleanAttribute(value, removeOnFalse = true) {
|
|
52
|
+
if (removeOnFalse && !value) return null;
|
|
53
|
+
return String(value);
|
|
54
|
+
}
|
|
55
|
+
function toPx(value) {
|
|
56
|
+
if (value == null || Number.isNaN(value)) return null;
|
|
57
|
+
return `${round(value, 2)}px`;
|
|
58
|
+
}
|
|
59
|
+
function querySlotSelector(root, slot) {
|
|
60
|
+
if (Array.isArray(slot)) {
|
|
61
|
+
if (slot.length === 0) return [];
|
|
62
|
+
const slotSelector = slot.map((s) => `slot[name="${s}"]`).join(", ");
|
|
63
|
+
return Array.from(root.querySelectorAll(slotSelector));
|
|
64
|
+
} else {
|
|
65
|
+
const slotSelector = slot ? `slot[name="${slot}"]` : "slot:not([name])";
|
|
66
|
+
return root.querySelector(slotSelector);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function getAssignedElements(root, options) {
|
|
70
|
+
const { flatten = true, selector, slot } = options ?? {};
|
|
71
|
+
let elements;
|
|
72
|
+
const slotElement = querySlotSelector(root, slot);
|
|
73
|
+
if (Array.isArray(slotElement)) {
|
|
74
|
+
elements = slotElement.flatMap((slotElement2) => slotElement2.assignedElements({ flatten }));
|
|
75
|
+
} else {
|
|
76
|
+
elements = slotElement?.assignedElements({ flatten }) ?? [];
|
|
77
|
+
}
|
|
78
|
+
if (!selector) {
|
|
79
|
+
return elements;
|
|
80
|
+
}
|
|
81
|
+
const selectorFn = typeof selector === "string" ? (element) => element.matches(selector) : selector;
|
|
82
|
+
return elements.filter(selectorFn);
|
|
83
|
+
}
|
|
84
|
+
function setFocusable(target, interactive) {
|
|
85
|
+
if (interactive) {
|
|
86
|
+
target.tabIndex = target.hasAttribute("tabindex") ? target.tabIndex : 0;
|
|
87
|
+
} else {
|
|
88
|
+
target.removeAttribute("tabindex");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function waitForAnimations(element, subtree = false) {
|
|
92
|
+
if (!element) return [];
|
|
93
|
+
try {
|
|
94
|
+
const animations = element.getAnimations({ subtree });
|
|
95
|
+
if (animations.length === 0) return [];
|
|
96
|
+
await Promise.all(animations.map((animation) => animation.finished));
|
|
97
|
+
return animations;
|
|
98
|
+
} catch {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function interactionResponse() {
|
|
103
|
+
return new Promise((resolve) => {
|
|
104
|
+
setTimeout(resolve, 100);
|
|
105
|
+
requestAnimationFrame(() => {
|
|
106
|
+
setTimeout(resolve, 0);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function createCustomEvent(name, options) {
|
|
112
|
+
const defaultOptions = { bubbles: false, composed: false, cancelable: true, ...options };
|
|
113
|
+
class CustomEventClass extends CustomEvent {
|
|
114
|
+
static {
|
|
115
|
+
this.type = name;
|
|
116
|
+
}
|
|
117
|
+
constructor(eventInit) {
|
|
118
|
+
super(name, Object.assign({}, defaultOptions, eventInit));
|
|
119
|
+
}
|
|
120
|
+
static dispatch(target, eventInit) {
|
|
121
|
+
return target.dispatchEvent(new CustomEventClass(eventInit));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return CustomEventClass;
|
|
125
|
+
}
|
|
126
|
+
function createToggleEvent(oldState, newState, eventInit) {
|
|
127
|
+
return new ToggleEvent("toggle", {
|
|
128
|
+
...eventInit,
|
|
129
|
+
oldState: oldState ? "open" : "closed",
|
|
130
|
+
newState: newState ? "open" : "closed"
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
function isToggleOpen(event) {
|
|
134
|
+
return event.newState === "open";
|
|
135
|
+
}
|
|
136
|
+
function clickedOutside(event, element, allowSelf = false) {
|
|
137
|
+
if (!element?.isConnected) return true;
|
|
138
|
+
return !getElementFromEvent(event, (node) => node === element) && (allowSelf || event.target !== element);
|
|
139
|
+
}
|
|
140
|
+
function forwardEvent(target, eventInit) {
|
|
141
|
+
return (event) => {
|
|
142
|
+
event.stopPropagation();
|
|
143
|
+
const shouldPreventDefault = target.dispatchEvent(
|
|
144
|
+
new Event(event.type, {
|
|
145
|
+
bubbles: event.bubbles,
|
|
146
|
+
composed: event.composed,
|
|
147
|
+
cancelable: event.cancelable,
|
|
148
|
+
...eventInit
|
|
149
|
+
})
|
|
150
|
+
);
|
|
151
|
+
if (shouldPreventDefault) return;
|
|
152
|
+
event.preventDefault();
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
function getElementFromEvent(event, filterFn) {
|
|
156
|
+
return event.composedPath().find((node) => node instanceof HTMLElement && filterFn(node));
|
|
157
|
+
}
|
|
158
|
+
function getKeyInfo(event) {
|
|
159
|
+
const { code, shiftKey } = event;
|
|
160
|
+
return {
|
|
161
|
+
up: code === "ArrowUp",
|
|
162
|
+
right: code === "ArrowRight",
|
|
163
|
+
down: code === "ArrowDown",
|
|
164
|
+
left: code === "ArrowLeft",
|
|
165
|
+
enter: code === "Enter",
|
|
166
|
+
escape: code === "Escape",
|
|
167
|
+
space: code === "Space",
|
|
168
|
+
backTab: code === "Tab" && shiftKey,
|
|
169
|
+
tab: code === "Tab" && !shiftKey,
|
|
170
|
+
start: code === "Home",
|
|
171
|
+
end: code === "End"
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const globalListeners = /* @__PURE__ */ new Map();
|
|
176
|
+
const eventListenerRegistry = /* @__PURE__ */ new Map();
|
|
177
|
+
function handleGlobalEvent(event) {
|
|
178
|
+
const listeners = eventListenerRegistry.get(event.type);
|
|
179
|
+
if (!listeners?.size) return;
|
|
180
|
+
for (const listener of Array.from(listeners).toReversed()) {
|
|
181
|
+
if (event.defaultPrevented) return;
|
|
182
|
+
listener(event);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function addGlobalEventListener(type, listener, options) {
|
|
186
|
+
const listeners = eventListenerRegistry.get(type) ?? /* @__PURE__ */ new Set();
|
|
187
|
+
listeners.add(listener);
|
|
188
|
+
eventListenerRegistry.set(type, listeners);
|
|
189
|
+
if (!globalListeners.get(type)) {
|
|
190
|
+
globalListeners.set(type, handleGlobalEvent);
|
|
191
|
+
globalThis.addEventListener(type, handleGlobalEvent, options);
|
|
192
|
+
}
|
|
193
|
+
return () => removeGlobalEventListener(type, listener);
|
|
194
|
+
}
|
|
195
|
+
function removeGlobalEventListener(type, listener) {
|
|
196
|
+
const listeners = eventListenerRegistry.get(type);
|
|
197
|
+
if (!listeners?.delete(listener)) return;
|
|
198
|
+
if (listeners.size > 0) return;
|
|
199
|
+
globalListeners.delete(type);
|
|
200
|
+
globalThis.removeEventListener(type, handleGlobalEvent);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
class InvokerCommandEvent extends CustomEvent {
|
|
204
|
+
static {
|
|
205
|
+
this.type = "odx-invoker-command";
|
|
206
|
+
}
|
|
207
|
+
constructor(detail) {
|
|
208
|
+
super(InvokerCommandEvent.type, { detail, bubbles: detail.bubbles });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function commandDirective(options) {
|
|
212
|
+
const isCommandSource = (node) => directive.applied(node);
|
|
213
|
+
const isCommandFunction = typeof options.command === "function";
|
|
214
|
+
function handleGlobalEvent(event) {
|
|
215
|
+
const source = getElementFromEvent(event, isCommandSource);
|
|
216
|
+
if (!source) return;
|
|
217
|
+
const command = isCommandFunction ? options.command(source) : options.command;
|
|
218
|
+
if (!command) return;
|
|
219
|
+
directive.invoke(source, command, directive.value(source));
|
|
220
|
+
}
|
|
221
|
+
const directive = {
|
|
222
|
+
...stringAttributeDirective(options.name),
|
|
223
|
+
connect() {
|
|
224
|
+
removeGlobalEventListener("click", handleGlobalEvent);
|
|
225
|
+
addGlobalEventListener("click", handleGlobalEvent);
|
|
226
|
+
},
|
|
227
|
+
disconnect() {
|
|
228
|
+
removeGlobalEventListener("click", handleGlobalEvent);
|
|
229
|
+
},
|
|
230
|
+
subscribe(target, handler) {
|
|
231
|
+
const handleCommand = ((event) => {
|
|
232
|
+
if (!this.applied(event.detail.source)) return;
|
|
233
|
+
handler(event);
|
|
234
|
+
});
|
|
235
|
+
target.addEventListener(InvokerCommandEvent.type, handleCommand);
|
|
236
|
+
return () => target.removeEventListener(InvokerCommandEvent.type, handleCommand);
|
|
237
|
+
},
|
|
238
|
+
invoke(source, command, targetOrId) {
|
|
239
|
+
const root = findClosestDocument(source);
|
|
240
|
+
const target = typeof targetOrId === "string" ? root.getElementById(targetOrId) : targetOrId;
|
|
241
|
+
if (target) {
|
|
242
|
+
return !target.dispatchEvent(new InvokerCommandEvent({ source, command }));
|
|
243
|
+
}
|
|
244
|
+
return !source.dispatchEvent(new InvokerCommandEvent({ source, command, bubbles: true }));
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
return directive;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function optionalAttr(value) {
|
|
251
|
+
return value == null || value === "" ? nothing : value;
|
|
252
|
+
}
|
|
253
|
+
function handleOptionalSlotChange(host) {
|
|
254
|
+
let showSlot;
|
|
255
|
+
return (event) => {
|
|
256
|
+
const hasContent = event.target.assignedElements().length > 0;
|
|
257
|
+
if (showSlot === hasContent) return;
|
|
258
|
+
showSlot = hasContent;
|
|
259
|
+
host.requestUpdate();
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
function optionalSlot(host, slotName, classNames) {
|
|
263
|
+
if (!host.querySelector(`& > [slot="${slotName}"]`)) return nothing;
|
|
264
|
+
return html`<div class="${classNames ? `${slotName} ${classNames}` : slotName}"><slot name="${slotName}" @slotchange="${handleOptionalSlotChange(host)}"></slot></div>`;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
const callbackRegistry = /* @__PURE__ */ new WeakMap();
|
|
268
|
+
let resizeObserver;
|
|
269
|
+
function observeElementResize(target, handler, options) {
|
|
270
|
+
resizeObserver?.unobserve(target);
|
|
271
|
+
callbackRegistry.set(target, throttle(handler, 1e3 / (options?.fpsLimit ?? 30), options));
|
|
272
|
+
resizeObserver ??= new ResizeObserver((entries, observer) => {
|
|
273
|
+
for (const entry of entries) {
|
|
274
|
+
callbackRegistry.get(entry.target)?.(entries, observer);
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
resizeObserver.observe(target);
|
|
278
|
+
return () => unobserveElementResize(target);
|
|
279
|
+
}
|
|
280
|
+
function unobserveElementResize(target) {
|
|
281
|
+
callbackRegistry.delete(target);
|
|
282
|
+
resizeObserver?.unobserve(target);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const uniqueIdCounter = /* @__PURE__ */ new Map();
|
|
286
|
+
function getUniqueId(key) {
|
|
287
|
+
const count = (uniqueIdCounter.get(key) ?? 0) + 1;
|
|
288
|
+
uniqueIdCounter.set(key, count);
|
|
289
|
+
return `${key}-${count}`;
|
|
290
|
+
}
|
|
291
|
+
function resetUniqueId(key) {
|
|
292
|
+
if (key) {
|
|
293
|
+
uniqueIdCounter.delete(key);
|
|
294
|
+
} else {
|
|
295
|
+
uniqueIdCounter.clear();
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export { InvokerCommandEvent, addGlobalEventListener, booleanAttributeDirective, clickedOutside, commandDirective, createCustomEvent, createToggleEvent, findClosestDocument, forwardEvent, getAssignedElements, getElementFromEvent, getKeyInfo, getUniqueId, interactionResponse, isToggleOpen, observeElementResize, optionalAttr, optionalSlot, parseDate, querySlotSelector, removeGlobalEventListener, resetUniqueId, setFocusable, stringAttributeDirective, supportsHover, toAriaBooleanAttribute, toPx, unobserveElementResize, waitForAnimations };
|