@odx/foundation 1.0.0-beta.13 → 1.0.0-beta.130

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.
Files changed (276) hide show
  1. package/README.md +7 -8
  2. package/dist/_virtual_class-decorator-runtime.js +13 -0
  3. package/dist/components/accordion/accordion.d.ts +14 -2
  4. package/dist/components/accordion-item/accordion-item.d.ts +25 -0
  5. package/dist/components/{accordion → accordion-panel}/accordion-panel.d.ts +0 -1
  6. package/dist/components/action-button/action-button.d.ts +26 -0
  7. package/dist/components/anchor-navigation/anchor-navigation.d.ts +3 -4
  8. package/dist/components/anchor-navigation/anchor-observer.d.ts +9 -7
  9. package/dist/components/anchor-navigation/index.d.ts +0 -1
  10. package/dist/components/area-header/area-header.d.ts +11 -5
  11. package/dist/components/auto-grid/auto-grid.d.ts +16 -0
  12. package/dist/components/avatar/avatar.d.ts +32 -7
  13. package/dist/components/badge/badge.d.ts +18 -6
  14. package/dist/components/breadcrumbs/breadcrumbs-item.d.ts +1 -4
  15. package/dist/components/breadcrumbs/breadcrumbs.d.ts +2 -5
  16. package/dist/components/breadcrumbs/index.d.ts +1 -2
  17. package/dist/components/button/button.d.ts +29 -24
  18. package/dist/components/button-group/button-group.d.ts +7 -1
  19. package/dist/components/card/card.d.ts +3 -2
  20. package/dist/components/checkbox/checkbox.d.ts +3 -4
  21. package/dist/components/checkbox-group/checkbox-group.d.ts +8 -4
  22. package/dist/components/chip/chip.d.ts +16 -4
  23. package/dist/components/combobox/autocomplete.d.ts +24 -0
  24. package/dist/components/content-box/content-box.d.ts +0 -1
  25. package/dist/components/dropdown/dropdown.d.ts +9 -13
  26. package/dist/components/empty-state/empty-state.d.ts +37 -0
  27. package/dist/components/form-field/form-field.d.ts +0 -1
  28. package/dist/components/format/base-format.d.ts +0 -1
  29. package/dist/components/format/format-bytes.d.ts +1 -2
  30. package/dist/components/format/format-date.d.ts +0 -1
  31. package/dist/components/format/format-number.d.ts +1 -2
  32. package/dist/components/format/index.d.ts +0 -1
  33. package/dist/components/format/relative-time.d.ts +2 -3
  34. package/dist/components/gradient-overlay/gradient-overlay.d.ts +21 -0
  35. package/dist/components/header/header-actions.d.ts +0 -1
  36. package/dist/components/header/header.d.ts +0 -1
  37. package/dist/components/header/index.d.ts +1 -2
  38. package/dist/components/highlight/highlight.d.ts +27 -8
  39. package/dist/components/icon-button/icon-button.d.ts +12 -17
  40. package/dist/components/image/image.d.ts +4 -5
  41. package/dist/components/inline-message/inline-message.d.ts +19 -6
  42. package/dist/components/input/input.d.ts +17 -10
  43. package/dist/components/kpi/kpi.d.ts +39 -0
  44. package/dist/components/line-clamp/line-clamp.d.ts +2 -3
  45. package/dist/components/link/link.d.ts +3 -4
  46. package/dist/components/list/list.d.ts +3 -1
  47. package/dist/components/{list → list-item}/list-item.d.ts +7 -6
  48. package/dist/components/loader.d.ts +1 -0
  49. package/dist/components/loading-overlay/loading-overlay.d.ts +2 -4
  50. package/dist/components/loading-spinner/loading-spinner.d.ts +1 -3
  51. package/dist/components/logo/logo.d.ts +11 -4
  52. package/dist/components/main-menu/index.d.ts +1 -3
  53. package/dist/components/main-menu/main-menu-button.d.ts +0 -1
  54. package/dist/components/main-menu/main-menu-subtitle.d.ts +0 -1
  55. package/dist/components/main-menu/main-menu-title.d.ts +0 -1
  56. package/dist/components/main-menu/main-menu.d.ts +4 -5
  57. package/dist/components/main.d.ts +63 -56
  58. package/dist/components/menu/index.d.ts +1 -2
  59. package/dist/components/menu/menu-label.d.ts +0 -1
  60. package/dist/components/menu/menu.d.ts +3 -4
  61. package/dist/components/menu-item/menu-item.d.ts +5 -4
  62. package/dist/components/modal/modal.d.ts +8 -7
  63. package/dist/components/navigation-item/navigation-item.d.ts +15 -8
  64. package/dist/components/navigation-item-group/navigation-item-group.d.ts +20 -0
  65. package/dist/components/option/option.d.ts +1 -2
  66. package/dist/components/page/page.d.ts +16 -7
  67. package/dist/components/page-layout/page-layout.d.ts +0 -1
  68. package/dist/components/pagination/pagination.d.ts +0 -1
  69. package/dist/components/popover/popover-host.d.ts +34 -0
  70. package/dist/components/popover/popover-observer.d.ts +10 -0
  71. package/dist/{cdk → components}/popover/popover.d.ts +1 -1
  72. package/dist/components/progress-bar/base-progress.d.ts +13 -0
  73. package/dist/components/progress-bar/progress-bar.d.ts +2 -14
  74. package/dist/components/progress-ring/progress-ring.d.ts +33 -0
  75. package/dist/components/radio-button/radio-button.d.ts +1 -2
  76. package/dist/components/radio-group/radio-group.d.ts +8 -4
  77. package/dist/components/rail-navigation/rail-navigation.d.ts +6 -4
  78. package/dist/components/search-bar/index.d.ts +0 -2
  79. package/dist/components/search-bar/search-bar.d.ts +9 -4
  80. package/dist/components/search-bar/search-bar.events.d.ts +0 -1
  81. package/dist/components/select/select.d.ts +14 -6
  82. package/dist/components/separator/separator.d.ts +9 -5
  83. package/dist/components/skeleton/skeleton.d.ts +21 -7
  84. package/dist/components/slider/index.d.ts +2 -3
  85. package/dist/components/slider/slider-handle.d.ts +7 -7
  86. package/dist/components/slider/slider-marks.d.ts +1 -2
  87. package/dist/components/slider/slider.d.ts +2 -4
  88. package/dist/components/slider/slider.models.d.ts +3 -3
  89. package/dist/components/spacer/spacer.d.ts +0 -1
  90. package/dist/components/spinbox/spinbox.d.ts +15 -13
  91. package/dist/components/status/status.d.ts +26 -0
  92. package/dist/components/switch/switch.d.ts +1 -2
  93. package/dist/components/table/index.d.ts +3 -4
  94. package/dist/components/table/table-body.d.ts +0 -3
  95. package/dist/components/table/table-cell.d.ts +0 -3
  96. package/dist/components/table/table-checkbox-cell.d.ts +0 -1
  97. package/dist/components/table/table-header-cell.d.ts +0 -1
  98. package/dist/components/table/table-header.d.ts +2 -3
  99. package/dist/components/table/table-row.d.ts +0 -1
  100. package/dist/components/table/table.d.ts +0 -1
  101. package/dist/components/table/table.models.d.ts +0 -1
  102. package/dist/components/text/text.d.ts +27 -5
  103. package/dist/components/title/title.d.ts +18 -6
  104. package/dist/components/toast/toast.d.ts +18 -4
  105. package/dist/components/toggle-button/toggle-button.d.ts +2 -6
  106. package/dist/components/toggle-button-group/toggle-button-group.d.ts +11 -0
  107. package/dist/components/toggle-content/toggle-content.d.ts +2 -3
  108. package/dist/components/tooltip/tooltip.d.ts +36 -4
  109. package/dist/components/translate/translate.d.ts +0 -1
  110. package/dist/components/visually-hidden/visually-hidden.d.ts +0 -3
  111. package/dist/components.js +3195 -3756
  112. package/dist/i18n/{lib/config.d.ts → config.d.ts} +0 -1
  113. package/dist/i18n/{lib/format.d.ts → format.d.ts} +0 -1
  114. package/dist/i18n/{lib/is-localized.d.ts → is-localized.d.ts} +2 -3
  115. package/dist/i18n/{lib/localization.d.ts → localization.d.ts} +0 -2
  116. package/dist/i18n/main.d.ts +6 -7
  117. package/dist/i18n/{lib/models.d.ts → models.d.ts} +0 -1
  118. package/dist/i18n/{lib/translate.d.ts → translate.d.ts} +1 -3
  119. package/dist/i18n.js +15 -28
  120. package/dist/lib/control/checkbox-form-control.d.ts +13 -0
  121. package/dist/lib/control/checkbox-group-form-control.d.ts +22 -0
  122. package/dist/lib/control/form-control.d.ts +28 -0
  123. package/dist/lib/control/listbox-form-control.d.ts +25 -0
  124. package/dist/lib/control/number-form-control.d.ts +12 -0
  125. package/dist/lib/control/option-control.d.ts +23 -0
  126. package/dist/lib/control/radio-group-form-control.d.ts +15 -0
  127. package/dist/lib/controllers/active-descendants-controller.d.ts +28 -0
  128. package/dist/{cdk/drag-drop → lib/controllers}/drag.controller.d.ts +2 -2
  129. package/dist/lib/controllers/expandable-controller.d.ts +1 -3
  130. package/dist/lib/custom-element.d.ts +10 -6
  131. package/dist/lib/interactive/interactive-element.d.ts +29 -0
  132. package/dist/{cdk → lib}/interactive/interactive-link.d.ts +9 -4
  133. package/dist/lib/main.d.ts +27 -24
  134. package/dist/lib/mixins/can-be-disabled.d.ts +1 -10
  135. package/dist/lib/mixins/can-be-expanded.d.ts +5 -8
  136. package/dist/lib/mixins/is-draggable.d.ts +15 -0
  137. package/dist/{cdk/drag-drop/drag-events.d.ts → lib/models/drag-event.d.ts} +0 -1
  138. package/dist/lib/models/layout.d.ts +30 -0
  139. package/dist/lib/models/placement.d.ts +16 -0
  140. package/dist/lib/models/shape.d.ts +6 -0
  141. package/dist/lib/models/size.d.ts +10 -0
  142. package/dist/lib/models/variant.d.ts +23 -0
  143. package/dist/lib/utils/compute-popover-placement.d.ts +12 -0
  144. package/dist/lib/utils/dom.d.ts +26 -16
  145. package/dist/lib/utils/get-unique-id.d.ts +6 -24
  146. package/dist/lib/utils/lit.d.ts +2 -5
  147. package/dist/lib/utils/shared-resize-observer.d.ts +0 -8
  148. package/dist/lib/utils/{a11y.d.ts → types.d.ts} +2 -6
  149. package/dist/loader.js +6 -11
  150. package/dist/main.js +1112 -732
  151. package/dist/styles.css +1 -1
  152. package/dist/vendor.js +1986 -0
  153. package/package.json +49 -27
  154. package/dist/cdk/control/checkbox-form-control.d.ts +0 -15
  155. package/dist/cdk/control/checkbox-group-form-control.d.ts +0 -21
  156. package/dist/cdk/control/listbox-form-control.d.ts +0 -22
  157. package/dist/cdk/control/option-control.d.ts +0 -24
  158. package/dist/cdk/control/radio-group-form-control.d.ts +0 -22
  159. package/dist/cdk/drag-drop/is-draggable.d.ts +0 -18
  160. package/dist/cdk/interactive/interactive-element.d.ts +0 -28
  161. package/dist/cdk/main.d.ts +0 -14
  162. package/dist/cdk/popover/popover-host.d.ts +0 -25
  163. package/dist/cdk/popover/popover.models.d.ts +0 -34
  164. package/dist/cdk/popover/popover.utils.d.ts +0 -5
  165. package/dist/cdk.js +0 -948
  166. package/dist/components/accordion/accordion-header.d.ts +0 -18
  167. package/dist/components/accordion/index.d.ts +0 -4
  168. package/dist/components/action-group/action-group.d.ts +0 -24
  169. package/dist/components/action-group/index.d.ts +0 -2
  170. package/dist/components/area-header/area-header.models.d.ts +0 -12
  171. package/dist/components/area-header/index.d.ts +0 -3
  172. package/dist/components/avatar/avatar.models.d.ts +0 -13
  173. package/dist/components/avatar/index.d.ts +0 -3
  174. package/dist/components/avatar-group/avatar-group.d.ts +0 -15
  175. package/dist/components/avatar-group/index.d.ts +0 -2
  176. package/dist/components/badge/badge.models.d.ts +0 -14
  177. package/dist/components/badge/index.d.ts +0 -3
  178. package/dist/components/button/button.models.d.ts +0 -26
  179. package/dist/components/button/index.d.ts +0 -3
  180. package/dist/components/button-group/index.d.ts +0 -2
  181. package/dist/components/card/index.d.ts +0 -2
  182. package/dist/components/checkbox/index.d.ts +0 -2
  183. package/dist/components/checkbox-group/checkbox-group.models.d.ts +0 -6
  184. package/dist/components/checkbox-group/index.d.ts +0 -3
  185. package/dist/components/chip/chip.models.d.ts +0 -10
  186. package/dist/components/chip/index.d.ts +0 -3
  187. package/dist/components/circular-progress-bar/circular-progress-bar.d.ts +0 -42
  188. package/dist/components/circular-progress-bar/circular-progress-bar.models.d.ts +0 -7
  189. package/dist/components/circular-progress-bar/index.d.ts +0 -3
  190. package/dist/components/combobox/combobox.d.ts +0 -20
  191. package/dist/components/combobox/index.d.ts +0 -2
  192. package/dist/components/content-box/content-box.models.d.ts +0 -2
  193. package/dist/components/content-box/index.d.ts +0 -2
  194. package/dist/components/dropdown/dropdown.models.d.ts +0 -6
  195. package/dist/components/dropdown/index.d.ts +0 -3
  196. package/dist/components/form-field/index.d.ts +0 -2
  197. package/dist/components/headline/headline.d.ts +0 -13
  198. package/dist/components/headline/headline.models.d.ts +0 -8
  199. package/dist/components/headline/index.d.ts +0 -3
  200. package/dist/components/highlight/index.d.ts +0 -2
  201. package/dist/components/icon-button/index.d.ts +0 -2
  202. package/dist/components/image/index.d.ts +0 -2
  203. package/dist/components/inline-message/index.d.ts +0 -3
  204. package/dist/components/inline-message/inline-message.models.d.ts +0 -12
  205. package/dist/components/input/index.d.ts +0 -3
  206. package/dist/components/input/input.models.d.ts +0 -7
  207. package/dist/components/line-clamp/index.d.ts +0 -2
  208. package/dist/components/link/base-link.d.ts +0 -15
  209. package/dist/components/link/index.d.ts +0 -3
  210. package/dist/components/list/index.d.ts +0 -3
  211. package/dist/components/loading-overlay/index.d.ts +0 -2
  212. package/dist/components/loading-spinner/index.d.ts +0 -2
  213. package/dist/components/logo/index.d.ts +0 -3
  214. package/dist/components/logo/logo.models.d.ts +0 -9
  215. package/dist/components/main-menu/main-menu-link.d.ts +0 -9
  216. package/dist/components/menu-item/index.d.ts +0 -2
  217. package/dist/components/modal/index.d.ts +0 -3
  218. package/dist/components/modal/modal.models.d.ts +0 -5
  219. package/dist/components/navigation-item/index.d.ts +0 -3
  220. package/dist/components/navigation-item/navigation-item.models.d.ts +0 -6
  221. package/dist/components/option/index.d.ts +0 -2
  222. package/dist/components/page/index.d.ts +0 -3
  223. package/dist/components/page/page.models.d.ts +0 -10
  224. package/dist/components/page-layout/index.d.ts +0 -2
  225. package/dist/components/pagination/index.d.ts +0 -2
  226. package/dist/components/progress-bar/index.d.ts +0 -3
  227. package/dist/components/progress-bar/progress-bar.models.d.ts +0 -7
  228. package/dist/components/radio-button/index.d.ts +0 -2
  229. package/dist/components/radio-group/index.d.ts +0 -3
  230. package/dist/components/radio-group/radio-group.models.d.ts +0 -6
  231. package/dist/components/rail-navigation/index.d.ts +0 -2
  232. package/dist/components/search-bar/search-bar.models.d.ts +0 -6
  233. package/dist/components/select/index.d.ts +0 -2
  234. package/dist/components/separator/index.d.ts +0 -3
  235. package/dist/components/separator/separator.models.d.ts +0 -6
  236. package/dist/components/skeleton/index.d.ts +0 -3
  237. package/dist/components/skeleton/skeleton.models.d.ts +0 -13
  238. package/dist/components/spacer/index.d.ts +0 -2
  239. package/dist/components/spacer/spacer.models.d.ts +0 -7
  240. package/dist/components/spinbox/index.d.ts +0 -2
  241. package/dist/components/stack/index.d.ts +0 -3
  242. package/dist/components/stack/stack.d.ts +0 -18
  243. package/dist/components/stack/stack.models.d.ts +0 -25
  244. package/dist/components/switch/index.d.ts +0 -2
  245. package/dist/components/text/index.d.ts +0 -3
  246. package/dist/components/text/text.models.d.ts +0 -14
  247. package/dist/components/title/index.d.ts +0 -3
  248. package/dist/components/title/title.models.d.ts +0 -10
  249. package/dist/components/toast/index.d.ts +0 -3
  250. package/dist/components/toast/toast.models.d.ts +0 -5
  251. package/dist/components/toggle-button/index.d.ts +0 -2
  252. package/dist/components/toggle-content/index.d.ts +0 -2
  253. package/dist/components/tooltip/index.d.ts +0 -3
  254. package/dist/components/tooltip/tooltip.models.d.ts +0 -8
  255. package/dist/components/translate/index.d.ts +0 -2
  256. package/dist/components/visually-hidden/index.d.ts +0 -2
  257. package/dist/lib/controllers/active-desendants-controller.d.ts +0 -25
  258. package/dist/lib/controllers/focus-trap.controller.d.ts +0 -14
  259. package/dist/lib/mixins/can-be-highlighted.d.ts +0 -8
  260. package/dist/lib/mixins/can-be-readonly.d.ts +0 -7
  261. package/dist/lib/mixins/can-be-required.d.ts +0 -7
  262. package/dist/lib/mixins/can-be-selected.d.ts +0 -9
  263. package/dist/lib/mixins/can-be-validated.d.ts +0 -12
  264. package/dist/lib/mixins/form-control.d.ts +0 -17
  265. package/dist/lib/mixins/number-control.d.ts +0 -12
  266. package/dist/lib/mixins/with-loading-state.d.ts +0 -8
  267. package/dist/lib/utils/date.d.ts +0 -2
  268. package/dist/lib/utils/dedupe-mixin.d.ts +0 -3
  269. package/dist/lib/utils/empty-slot-fallback-fix.d.ts +0 -8
  270. package/dist/lib/utils/keyboard-events.d.ts +0 -43
  271. package/dist/lib/utils/query-assigned-element.d.ts +0 -16
  272. package/dist/lib/utils/search-text-content.d.ts +0 -8
  273. package/dist/lib/utils/shared-intersection-observer.d.ts +0 -18
  274. package/dist/lib/utils/transformers.d.ts +0 -5
  275. package/dist/loader/main.d.ts +0 -2
  276. package/dist/vendor-dJxQG085.js +0 -138
package/dist/cdk.js DELETED
@@ -1,948 +0,0 @@
1
- import { FormControl, CustomElement, getKeyboardEventInfo, toAriaBooleanAttribute, CanBeHighlighted, CanBeDisabled, toggleAttribute, getUniqueId, getElementFromEvent, ActiveDescendantsController, dedupeMixin, optionalAttr, requestUpdateOnAriaChange, WithLoadingState, getAssignedElements, toPx, waitForAnimations, findClosestDocument, createMutationObserver, customElement } from '@odx/foundation';
2
- import { isServer, html, unsafeCSS } from 'lit';
3
- import { property, queryAssignedElements, query, state } from 'lit/decorators.js';
4
- import { R as RovingTabindexController, m as minBy } from './vendor-dJxQG085.js';
5
- import { when } from 'lit/directives/when.js';
6
- import { arrow, flip, computePosition, offset, shift, size, hide, autoUpdate } from '@floating-ui/dom';
7
-
8
- var __defProp$9 = Object.defineProperty;
9
- var __getOwnPropDesc$9 = Object.getOwnPropertyDescriptor;
10
- var __decorateClass$9 = (decorators, target, key, kind) => {
11
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$9(target, key) : target;
12
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
13
- if (decorator = decorators[i])
14
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
15
- if (kind && result) __defProp$9(target, key, result);
16
- return result;
17
- };
18
- const LINK_SELECTORS = /* @__PURE__ */ new Set(["a", "button", "odx-link"]);
19
- class CheckboxFormControl extends FormControl(CustomElement) {
20
- constructor() {
21
- super();
22
- this.role = null;
23
- this.checked = false;
24
- this.#handleClick = ({ target }) => {
25
- const { localName } = target;
26
- if (LINK_SELECTORS.has(localName)) return;
27
- this.toggle(void 0, true);
28
- };
29
- this.#handleKeyboardEvent = (event) => {
30
- const { actions } = getKeyboardEventInfo(event);
31
- if (!actions.enter && !actions.space) return;
32
- const { localName } = event.target;
33
- event.preventDefault();
34
- if (event.type === "keydown" || LINK_SELECTORS.has(localName)) return;
35
- this.toggle(void 0, true);
36
- };
37
- if (!isServer) {
38
- this.addEventListener("click", this.#handleClick);
39
- this.addEventListener("keydown", this.#handleKeyboardEvent);
40
- this.addEventListener("keyup", this.#handleKeyboardEvent);
41
- }
42
- }
43
- static {
44
- this.shadowRootOptions = {
45
- ...CustomElement.shadowRootOptions,
46
- delegatesFocus: false
47
- };
48
- }
49
- toFormValue() {
50
- if (this.value) {
51
- return this.checked ? this.value : null;
52
- }
53
- return this.checked ? "on" : null;
54
- }
55
- toggle(state, emitEvent = false) {
56
- const currentState = this.checked;
57
- const newState = state ?? !currentState;
58
- if (this.disabled || this.readonly || newState === currentState) return;
59
- this.checked = newState;
60
- if (!emitEvent || !this.emit("change")) return;
61
- this.checked = currentState;
62
- }
63
- connectedCallback() {
64
- this.tabIndex = 0;
65
- super.connectedCallback();
66
- this.role ||= "checkbox";
67
- }
68
- updateAriaAttributes() {
69
- super.updateAriaAttributes?.();
70
- this.ariaChecked = toAriaBooleanAttribute(this.checked, false);
71
- }
72
- #handleClick;
73
- #handleKeyboardEvent;
74
- }
75
- __decorateClass$9([
76
- property({ type: Boolean, reflect: true })
77
- ], CheckboxFormControl.prototype, "checked", 2);
78
-
79
- var __defProp$8 = Object.defineProperty;
80
- var __getOwnPropDesc$8 = Object.getOwnPropertyDescriptor;
81
- var __decorateClass$8 = (decorators, target, key, kind) => {
82
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$8(target, key) : target;
83
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
84
- if (decorator = decorators[i])
85
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
86
- if (kind && result) __defProp$8(target, key, result);
87
- return result;
88
- };
89
- const GROUP_CONTROL_SELECTOR = "odx-checkbox-group-control";
90
- const _CheckboxGroupFormControl = class _CheckboxGroupFormControl extends FormControl(CustomElement) {
91
- constructor() {
92
- super();
93
- this.value = [];
94
- this.#handleChangeEvent = (event) => {
95
- const { target } = event;
96
- if (!this.isControl(target)) return;
97
- if (target.checked) {
98
- this.updateValue([...this.value, target.value], true);
99
- return;
100
- }
101
- this.updateValue(
102
- this.value.filter((value) => value !== target.value),
103
- true
104
- );
105
- };
106
- if (!isServer) {
107
- this.addEventListener("change", this.#handleChangeEvent);
108
- }
109
- }
110
- get childGroups() {
111
- return this.elements.filter((element) => element instanceof _CheckboxGroupFormControl);
112
- }
113
- get controls() {
114
- return this.#findCheckboxControls((element) => !element.hasAttribute(GROUP_CONTROL_SELECTOR)).concat(this.childGroups.flatMap((group) => group.controls));
115
- }
116
- get groupControls() {
117
- return this.#findCheckboxControls((element) => element.hasAttribute(GROUP_CONTROL_SELECTOR));
118
- }
119
- toFormValue() {
120
- const formData = new FormData();
121
- this.value.forEach((value, index) => {
122
- formData.append(`${this.name}[${index}]`, value);
123
- });
124
- return formData;
125
- }
126
- isIndeterminate() {
127
- return this.value.length > 0 && this.value.length < this.controls.length;
128
- }
129
- isControl(element) {
130
- return element instanceof CheckboxFormControl;
131
- }
132
- updated(props) {
133
- super.updated(props);
134
- if (props.has("value")) {
135
- this.updateCheckboxControls((control) => {
136
- control.checked = this.value.includes(control.value);
137
- });
138
- for (const groupControl of this.groupControls) {
139
- if (groupControl instanceof CheckboxFormControl && "indeterminate" in groupControl) {
140
- groupControl.indeterminate = this.isIndeterminate();
141
- groupControl.checked = this.controls.length > 0 && this.value.length === this.controls.length;
142
- }
143
- }
144
- }
145
- if (props.has("name")) {
146
- this.updateCheckboxControls((control) => {
147
- control.name = this.name;
148
- });
149
- }
150
- if (props.has("disabled")) {
151
- this.updateCheckboxControls((control) => {
152
- control.disabled = this.disabled;
153
- });
154
- }
155
- if (props.has("readonly")) {
156
- this.updateCheckboxControls((control) => {
157
- control.readonly = this.readonly;
158
- });
159
- }
160
- }
161
- updateCheckboxControls(updateFn) {
162
- this.controls.forEach(updateFn);
163
- }
164
- updateValue(value, dispatchEvent) {
165
- this.value = value;
166
- if (!dispatchEvent) return;
167
- this.emit("change");
168
- }
169
- #handleChangeEvent;
170
- #findCheckboxControls(predicate) {
171
- return this.elements.filter((element) => this.isControl(element) && predicate(element));
172
- }
173
- };
174
- __decorateClass$8([
175
- queryAssignedElements({ flatten: true })
176
- ], _CheckboxGroupFormControl.prototype, "elements", 2);
177
- __decorateClass$8([
178
- property({ type: Array })
179
- ], _CheckboxGroupFormControl.prototype, "value", 2);
180
- let CheckboxGroupFormControl = _CheckboxGroupFormControl;
181
-
182
- var __defProp$7 = Object.defineProperty;
183
- var __getOwnPropDesc$7 = Object.getOwnPropertyDescriptor;
184
- var __decorateClass$7 = (decorators, target, key, kind) => {
185
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$7(target, key) : target;
186
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
187
- if (decorator = decorators[i])
188
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
189
- if (kind && result) __defProp$7(target, key, result);
190
- return result;
191
- };
192
- class OptionControl extends CanBeHighlighted(CanBeDisabled(CustomElement)) {
193
- constructor() {
194
- super(...arguments);
195
- this.role = null;
196
- this.value = "";
197
- this.selected = false;
198
- }
199
- #label;
200
- set label(value) {
201
- this.#label = value;
202
- }
203
- get label() {
204
- return this.#label || this.getTextLabel();
205
- }
206
- getTextLabel() {
207
- return this.textContent?.trim() ?? "";
208
- }
209
- toggle(force) {
210
- toggleAttribute(this, "odx-active", force ?? !this.hasAttribute("odx-active"));
211
- }
212
- connectedCallback() {
213
- super.connectedCallback();
214
- this.role ||= "option";
215
- this.id ||= getUniqueId(this.localName);
216
- }
217
- willUpdate(props) {
218
- super.willUpdate?.(props);
219
- if (props.has("selected")) {
220
- this.ariaSelected = toAriaBooleanAttribute(this.selected, false);
221
- }
222
- }
223
- }
224
- __decorateClass$7([
225
- property({ type: String })
226
- ], OptionControl.prototype, "label", 1);
227
- __decorateClass$7([
228
- property()
229
- ], OptionControl.prototype, "value", 2);
230
- __decorateClass$7([
231
- property({ type: Boolean })
232
- ], OptionControl.prototype, "selected", 2);
233
- __decorateClass$7([
234
- property({ reflect: true })
235
- ], OptionControl.prototype, "type", 2);
236
-
237
- var __defProp$6 = Object.defineProperty;
238
- var __getOwnPropDesc$6 = Object.getOwnPropertyDescriptor;
239
- var __decorateClass$6 = (decorators, target, key, kind) => {
240
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$6(target, key) : target;
241
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
242
- if (decorator = decorators[i])
243
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
244
- if (kind && result) __defProp$6(target, key, result);
245
- return result;
246
- };
247
- class ListboxFormControl extends FormControl(CustomElement) {
248
- constructor() {
249
- super();
250
- this.#selectedOptions = /* @__PURE__ */ new Map();
251
- this.autoSelect = false;
252
- this.multiple = false;
253
- this.value = "";
254
- this.#handleBlur = (_event) => {
255
- this.#activeDecendants.deactivate();
256
- };
257
- this.#handleClick = (event) => {
258
- const option = getElementFromEvent(event, (node) => node instanceof OptionControl);
259
- if (!option) return;
260
- this.toggleOption(option);
261
- };
262
- this.#handleFocus = (_event) => {
263
- const selectedIndex = this.options.findIndex((option) => !option.disabled && option.selected);
264
- this.#activeDecendants.activate(selectedIndex === -1 ? void 0 : selectedIndex);
265
- };
266
- this.#handleKeyEvent = (event) => {
267
- const activeOption = this.#activeDecendants.activeItem;
268
- if (!activeOption) return;
269
- const { actions } = getKeyboardEventInfo(event);
270
- if (actions.enter || actions.space || actions.tab && this.canAutoSelect(activeOption)) {
271
- if (this.multiple) {
272
- event.stopPropagation();
273
- event.stopImmediatePropagation();
274
- }
275
- this.toggleOption(activeOption);
276
- }
277
- };
278
- if (!isServer) {
279
- this.addEventListener("blur", this.#handleBlur);
280
- this.addEventListener("focusin", this.#handleFocus);
281
- this.addEventListener("click", this.#handleClick);
282
- this.addEventListener("keydown", this.#handleKeyEvent);
283
- }
284
- this.#activeDecendants = new ActiveDescendantsController(this, {
285
- getItems: () => this.options,
286
- onChange: (_, option, firstChange) => {
287
- option?.scrollIntoView();
288
- if (!option || !this.canAutoSelect(option) || firstChange || option.selected) return;
289
- this.toggleOption(option, true);
290
- }
291
- });
292
- }
293
- #activeDecendants;
294
- #selectedOptions;
295
- get selectedOptions() {
296
- return this.#selectedOptions.values();
297
- }
298
- canAutoSelect(option) {
299
- return this.autoSelect && !option.disabled && !this.multiple;
300
- }
301
- canSelect(option) {
302
- return !option.disabled;
303
- }
304
- toggleOption(option, state) {
305
- if (!this.canSelect(option)) return;
306
- const newState = state ?? (this.required && !this.multiple || !option.selected);
307
- if (this.disabled || newState === option.selected) return;
308
- option.selected = newState;
309
- this.updateValue(option);
310
- if (newState) {
311
- option.scrollIntoView();
312
- }
313
- }
314
- connectedCallback() {
315
- super.connectedCallback();
316
- this.role ||= "listbox";
317
- this.id ||= getUniqueId(this.localName);
318
- }
319
- updateValue(option) {
320
- if (this.multiple) {
321
- const value = typeof this.value === "string" ? [this.value].filter(Boolean) : this.value;
322
- this.value = option.selected ? [...value, option.value] : value.filter((value2) => value2 !== option.value);
323
- } else {
324
- this.value = option.selected ? option.value : "";
325
- }
326
- this.#activeDecendants.select(option);
327
- this.updateSelection();
328
- this.emit("change");
329
- }
330
- willUpdate(props) {
331
- super.willUpdate?.(props);
332
- if (props.has("multiple")) {
333
- this.#handleMultipleChange();
334
- }
335
- if (props.has("required") || props.has("value")) {
336
- const [selectedOption] = this.#selectedOptions.values();
337
- if (!selectedOption?.selected) return;
338
- this.setValidity({ valueMissing: this.required && this.value.length === 0 }, selectedOption);
339
- }
340
- }
341
- updateSelection() {
342
- if (this.disabled) return;
343
- for (const option of this.options ?? []) {
344
- if (option.disabled) continue;
345
- option.selected = this.multiple ? this.value.includes(option.value) : this.value === option.value;
346
- if (option.selected) {
347
- this.#selectedOptions.set(option.value, option);
348
- } else {
349
- this.#selectedOptions.delete(option.value);
350
- }
351
- }
352
- }
353
- #handleBlur;
354
- #handleClick;
355
- #handleFocus;
356
- #handleKeyEvent;
357
- #handleMultipleChange() {
358
- const optionType = this.multiple ? "checkbox" : null;
359
- for (const option of this.options) {
360
- option.type = optionType;
361
- }
362
- if (this.multiple) return;
363
- const [selectedOption] = this.#selectedOptions.values();
364
- if (selectedOption) {
365
- this.updateValue(selectedOption);
366
- }
367
- }
368
- }
369
- __decorateClass$6([
370
- property({ type: Boolean, attribute: "auto-select", reflect: true })
371
- ], ListboxFormControl.prototype, "autoSelect", 2);
372
- __decorateClass$6([
373
- property({ type: Boolean, reflect: true })
374
- ], ListboxFormControl.prototype, "multiple", 2);
375
- __decorateClass$6([
376
- property()
377
- ], ListboxFormControl.prototype, "value", 2);
378
-
379
- var __defProp$5 = Object.defineProperty;
380
- var __getOwnPropDesc$5 = Object.getOwnPropertyDescriptor;
381
- var __decorateClass$5 = (decorators, target, key, kind) => {
382
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$5(target, key) : target;
383
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
384
- if (decorator = decorators[i])
385
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
386
- if (kind && result) __defProp$5(target, key, result);
387
- return result;
388
- };
389
- class RadioGroupFormControl extends FormControl(CustomElement) {
390
- static {
391
- this.shadowRootOptions = {
392
- ...CustomElement.shadowRootOptions,
393
- delegatesFocus: true
394
- };
395
- }
396
- constructor() {
397
- super();
398
- if (!isServer) {
399
- this.addEventListener("change", this.#handleChange, { capture: true });
400
- new RovingTabindexController(this, {
401
- direction: "both",
402
- elements: () => this.getControls(),
403
- elementEnterAction: (element) => element.click(),
404
- focusInIndex: (elements) => elements.findIndex((element) => element.checked)
405
- });
406
- }
407
- }
408
- getControls() {
409
- return this.elements.filter((element) => this.isControl(element));
410
- }
411
- connectedCallback() {
412
- super.connectedCallback();
413
- this.role ||= "radiogroup";
414
- }
415
- isControl(element) {
416
- return element instanceof CheckboxFormControl;
417
- }
418
- update(changes) {
419
- super.update?.(changes);
420
- if (changes.has("value")) {
421
- this.updateCheckboxControls((control) => {
422
- control.checked = this.value.includes(control.value);
423
- });
424
- }
425
- if (changes.has("name")) {
426
- this.updateCheckboxControls((control) => {
427
- control.name = this.name;
428
- });
429
- }
430
- if (changes.has("disabled")) {
431
- this.updateCheckboxControls((control) => {
432
- control.disabled = this.disabled;
433
- });
434
- }
435
- if (changes.has("readonly")) {
436
- this.updateCheckboxControls((control) => {
437
- control.readonly = this.readonly;
438
- });
439
- }
440
- if (changes.has("required") || changes.has("value")) {
441
- const [firstControl] = this.getControls();
442
- if (!firstControl) return;
443
- this.setValidity({ valueMissing: this.required && this.value.length === 0 }, firstControl);
444
- }
445
- }
446
- async updateCheckboxControls(updateFn) {
447
- await 0;
448
- this.getControls().forEach(updateFn);
449
- }
450
- #handleChange = ({ target }) => {
451
- if (!this.isControl(target) || this.value === target.value) return;
452
- this.value = target.value;
453
- };
454
- }
455
- __decorateClass$5([
456
- queryAssignedElements({ flatten: true })
457
- ], RadioGroupFormControl.prototype, "elements", 2);
458
-
459
- var __defProp$4 = Object.defineProperty;
460
- var __getOwnPropDesc$4 = Object.getOwnPropertyDescriptor;
461
- var __decorateClass$4 = (decorators, target, key, kind) => {
462
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$4(target, key) : target;
463
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
464
- if (decorator = decorators[i])
465
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
466
- if (kind && result) __defProp$4(target, key, result);
467
- return result;
468
- };
469
- const IS_DRAG_ACTIVE_ATTRIBUTE = "odx-drag-active";
470
- function isDraggableElement(element) {
471
- if (element instanceof HTMLElement) {
472
- return "isDragActive" in element;
473
- }
474
- return false;
475
- }
476
- const IsDraggable = dedupeMixin((superClass) => {
477
- class IsDraggableElement extends superClass {
478
- constructor() {
479
- super(...arguments);
480
- this.dragDisabled = false;
481
- }
482
- get isDragActive() {
483
- return this.hasAttribute(IS_DRAG_ACTIVE_ATTRIBUTE);
484
- }
485
- dragStart() {
486
- this.toggleAttribute(IS_DRAG_ACTIVE_ATTRIBUTE, true);
487
- }
488
- afterDragEnd() {
489
- this.toggleAttribute(IS_DRAG_ACTIVE_ATTRIBUTE, false);
490
- }
491
- }
492
- __decorateClass$4([
493
- property({ type: Boolean })
494
- ], IsDraggableElement.prototype, "dragDisabled", 2);
495
- return IsDraggableElement;
496
- });
497
-
498
- const DragControllerOptions = (config) => ({
499
- getDraggableElements: () => [],
500
- ...config
501
- });
502
- class DragController {
503
- #host;
504
- #options;
505
- #dragTargets = /* @__PURE__ */ new WeakSet();
506
- #listeners = /* @__PURE__ */ new Map();
507
- get draggableElements() {
508
- return this.#options.getDraggableElements().filter((element) => !element.dragDisabled);
509
- }
510
- get container() {
511
- return this.#options.getContainer?.() ?? this.#host;
512
- }
513
- constructor(host, options) {
514
- this.#host = host;
515
- this.#options = DragControllerOptions(options);
516
- this.#host.addController(this);
517
- }
518
- hostConnected() {
519
- this.#host.style.touchAction = "none";
520
- }
521
- hostDisconnected() {
522
- this.#host.style.touchAction = "";
523
- for (const removeListener of this.#listeners.values()) {
524
- removeListener();
525
- }
526
- }
527
- hostUpdated() {
528
- this.#dragTargets = new WeakSet(this.draggableElements);
529
- this.#host.removeEventListener("pointerdown", this.#handleDragStart);
530
- this.#host.addEventListener("pointerdown", this.#handleDragStart);
531
- }
532
- isDraggable(element) {
533
- return isDraggableElement(element) && this.#dragTargets.has(element);
534
- }
535
- #handleDragStart = async (event) => {
536
- event.preventDefault();
537
- event.stopPropagation();
538
- const target = this.#getDragTarget(event);
539
- if (!target) return;
540
- const onPointerMove = (event2) => this.#handleDragMove(event2, target);
541
- const onPointerUp = (event2) => this.#handleDragEnd(event2, target);
542
- target.beforeDragStart?.({ event, position: this.#calculatePosition(event) });
543
- this.#host.setPointerCapture(event.pointerId);
544
- this.#host.addEventListener("pointermove", onPointerMove);
545
- this.#host.addEventListener("pointerup", onPointerUp, { once: true });
546
- this.#listeners.set(target, () => {
547
- this.#host.removeEventListener("pointermove", onPointerMove);
548
- this.#host.removeEventListener("pointerup", onPointerUp);
549
- });
550
- await 0;
551
- target.dragStart?.({ event, position: this.#calculatePosition(event) });
552
- };
553
- #handleDragMove = (event, target) => {
554
- event.preventDefault();
555
- event.stopPropagation();
556
- target.dragMove?.({ event, position: this.#calculatePosition(event) });
557
- };
558
- #handleDragEnd = async (event, target) => {
559
- event.preventDefault();
560
- event.stopPropagation();
561
- target.dragEnd?.({ event, position: this.#calculatePosition(event) });
562
- this.#host.releasePointerCapture(event.pointerId);
563
- this.#listeners.get(target)?.();
564
- this.#listeners.delete(target);
565
- this.#host.requestUpdate();
566
- await this.#host.updateComplete;
567
- target.afterDragEnd?.({ event, position: this.#calculatePosition(event) });
568
- };
569
- #calculatePosition(event) {
570
- const { left, top, width } = this.container.getBoundingClientRect();
571
- return { x: (event.clientX - left) / width * 100, y: (event.clientY - top) / width * 100 };
572
- }
573
- #getDragTarget(event) {
574
- if (event.target === this.#host) {
575
- return minBy(this.draggableElements, (element) => element.getDistance?.(this.container, event) ?? Number.MAX_SAFE_INTEGER) ?? null;
576
- }
577
- return null;
578
- }
579
- }
580
-
581
- const styles$2 = "@layer base{:host{--_color-background: var(--odx-color-transparent);--_color-background-hover: var(--odx-color-transparent-hover);--_color-background-pressed: var(--odx-color-transparent-pressed);--_color-foreground: var(--odx-color-foreground-base);--_color-foreground-hover: var(--odx-color-foreground-base);--_color-foreground-pressed: var(--odx-color-foreground-base);--_color-stroke: transparent;--_color-stroke-hover: transparent;--_color-stroke-pressed: transparent;--_block-size: var(--odx-size-225);--_min-inline-size: var(--odx-size-500);--_font-size: var(--odx-typography-font-size-3);--_icon-size: var(--odx-typography-font-size-6);--_padding-block: var(--odx-size-37);--_padding-inline: var(--odx-size-75);--_margin-block: 0;--_margin-icon: calc(-.5 * (var(--_icon-size) - var(--_padding-inline)) - var(--odx-size-px));block-size:var(--_block-size);cursor:pointer;position:relative;user-select:none;vertical-align:top;border-radius:var(--odx-border-radius-controls);margin-block:var(--_margin-block);min-inline-size:max(var(--_min-inline-size),min-content);max-inline-size:100%;-webkit-tap-highlight-color:transparent}:host(:focus-visible){outline:none}:host,[part=base]{display:inline-flex;place-items:center;place-content:center}[part=base]{overflow:clip;border-radius:inherit;cursor:inherit;-webkit-appearance:none;vertical-align:middle;text-decoration:none;font:inherit;block-size:100%;inline-size:100%;padding:0;gap:inherit;text-transform:inherit;padding-block:var(--_padding-block);padding-inline:var(--_padding-inline);border:var(--odx-border-width-thin) solid var(--_color-stroke);transition:var(--odx-transition-reduced);transition-property:background-color,border-color,color,opacity,outline-color,transform,block-size;background-color:var(--_color-background, transparent);color:var(--_color-foreground);font-size:var(--_font-size);gap:var(--_padding-inline);font-weight:var(--odx-typography-font-weight-normal);outline:var(--odx-focus-ring-outline);outline-offset:var(--odx-focus-ring-offset);line-height:min(calc(var(--_block-size) / 2 - var(--odx-size-25)),1em);&:focus-visible{outline-color:var(--odx-focus-ring-color)}}[part=base]::-moz-focus-inner{padding:0;border:0}[part=loader]{--_size: calc(var(--_icon-size) - var(--odx-size-25));color:var(--_color-foreground);margin-inline:calc(var(--_margin-icon) + var(--odx-size-25))}[part=label]{margin-block:calc(-1 * var(--_padding-block));margin-inline:calc(-1 * var(--_padding-inline));padding-block:var(--_padding-block);padding-inline:var(--_padding-inline)}:is(odx-icon),::slotted(:is(odx-avatar,odx-icon)){--size: var(--_icon-size);margin-inline:var(--_margin-icon)}::slotted([slot=\"badge\"]){--_badge-margin: var(--odx-size-12);position:absolute;inset-block-start:var(--_badge-margin);inset-inline-end:var(--_badge-margin);pointer-events:none;translate:var(--odx-size-37) -50%}::slotted(odx-avatar){--_color-background: var(--odx-color-transparent-pressed);--_size: var(--odx-size-200);--_font-size: var(--odx-typography-font-size-2);--_spacing: calc(var(--odx-size-75) - var(--odx-size-px));margin:0 calc(-1 * var(--_spacing))}}@layer state{:host(:not([aria-busy=\"true\"])) [part=base]:hover{--_color-background: var(--_color-background-hover);--_color-stroke: var(--_color-stroke-hover)}:host(:not([aria-busy=\"true\"])) [part=base]:active{--_color-background: var(--_color-background-pressed);--_color-stroke: var(--_color-stroke-pressed)}:host([aria-busy=\"true\"]){cursor:default}:host([aria-disabled=\"true\"]){--_color-background: var(--odx-color-disabled-fill);--_color-background-hover: var(--odx-color-disabled-fill);--_color-background-pressed: var(--odx-color-disabled-fill);--_color-foreground: var(--odx-color-disabled-foreground);--_color-stroke: var(--odx-color-disabled-stroke);cursor:not-allowed}:host(:is([align-badge=\"end\"],[align-badge=\"center\"])) ::slotted([slot=\"badge\"]){inset-block-start:unset;inset-block-end:0}:host([align-badge=\"end\"]) ::slotted([slot=\"badge\"]){translate:var(--odx-size-37) 50%}:host([align-badge=\"center\"]) ::slotted([slot=\"badge\"]){inset-inline:auto;translate:0 calc(50% + var(--_badge-margin))}}";
582
-
583
- var __defProp$3 = Object.defineProperty;
584
- var __getOwnPropDesc$3 = Object.getOwnPropertyDescriptor;
585
- var __decorateClass$3 = (decorators, target, key, kind) => {
586
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$3(target, key) : target;
587
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
588
- if (decorator = decorators[i])
589
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
590
- if (kind && result) __defProp$3(target, key, result);
591
- return result;
592
- };
593
- let InteractiveLink = class extends CanBeDisabled(CustomElement) {
594
- constructor() {
595
- super(...arguments);
596
- this.href = "";
597
- this.target = "";
598
- this.rel = "noreferrer noopener";
599
- }
600
- render() {
601
- const { ariaLabel, ariaHasPopup, ariaExpanded, ariaCurrent, ariaHidden } = this;
602
- return html`<a
603
- part="base"
604
- role="button"
605
- aria-label="${optionalAttr(ariaLabel)}"
606
- aria-haspopup="${optionalAttr(ariaHasPopup)}"
607
- aria-expanded="${optionalAttr(ariaExpanded)}"
608
- aria-current="${optionalAttr(ariaCurrent)}"
609
- aria-hidden="${optionalAttr(ariaHidden)}"
610
- href=${optionalAttr(this.href)}
611
- target=${optionalAttr(this.href && this.target)}
612
- download=${optionalAttr(this.href && this.download)}
613
- rel=${optionalAttr(this.href && this.rel)}
614
- >
615
- ${this.renderContent()}
616
- </a>`;
617
- }
618
- renderContent() {
619
- return html`<slot></slot>`;
620
- }
621
- };
622
- InteractiveLink.shadowRootOptions = {
623
- ...CustomElement.shadowRootOptions,
624
- delegatesFocus: true
625
- };
626
- __decorateClass$3([
627
- query('[part~="base"]', true)
628
- ], InteractiveLink.prototype, "nativeElement", 2);
629
- __decorateClass$3([
630
- property()
631
- ], InteractiveLink.prototype, "href", 2);
632
- __decorateClass$3([
633
- property()
634
- ], InteractiveLink.prototype, "target", 2);
635
- __decorateClass$3([
636
- property()
637
- ], InteractiveLink.prototype, "rel", 2);
638
- __decorateClass$3([
639
- property()
640
- ], InteractiveLink.prototype, "download", 2);
641
- InteractiveLink = __decorateClass$3([
642
- requestUpdateOnAriaChange(["ariaLabel", "ariaHasPopup", "ariaExpanded", "ariaCurrent", "ariaHidden", "role"])
643
- ], InteractiveLink);
644
-
645
- var __defProp$2 = Object.defineProperty;
646
- var __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor;
647
- var __typeError = (msg) => {
648
- throw TypeError(msg);
649
- };
650
- var __decorateClass$2 = (decorators, target, key, kind) => {
651
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$2(target, key) : target;
652
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
653
- if (decorator = decorators[i])
654
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
655
- if (kind && result) __defProp$2(target, key, result);
656
- return result;
657
- };
658
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
659
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
660
- var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
661
- var _InteractiveElement_instances, renderSlot_fn, isLoaderSlot_fn;
662
- let InteractiveElement = class extends WithLoadingState(InteractiveLink) {
663
- constructor() {
664
- super(...arguments);
665
- __privateAdd(this, _InteractiveElement_instances);
666
- this.lineClamp = 2;
667
- }
668
- render() {
669
- return html`${when(
670
- this.href,
671
- () => super.render(),
672
- () => this.renderButton()
673
- )}`;
674
- }
675
- renderContent(withSpinner = true) {
676
- return html`
677
- ${__privateMethod(this, _InteractiveElement_instances, renderSlot_fn).call(this, "prefix", !withSpinner)}
678
- <odx-line-clamp part="label" .max=${this.lineClamp}>
679
- ${__privateMethod(this, _InteractiveElement_instances, renderSlot_fn).call(this, void 0, !withSpinner)}
680
- </odx-line-clamp>
681
- ${__privateMethod(this, _InteractiveElement_instances, renderSlot_fn).call(this, "suffix", !withSpinner)}
682
- `;
683
- }
684
- renderButton() {
685
- const { ariaLabel, ariaHasPopup, ariaExpanded } = this;
686
- const type = "type" in this ? this.type : "button";
687
- return html`
688
- <button
689
- part="base"
690
- role="button"
691
- aria-label="${optionalAttr(ariaLabel)}"
692
- aria-haspopup="${optionalAttr(ariaHasPopup)}"
693
- aria-expanded="${optionalAttr(ariaExpanded)}"
694
- type=${type}
695
- ?disabled=${this.disabled || this.loading}
696
- >
697
- ${this.renderContent()}
698
- </button>
699
- `;
700
- }
701
- renderLoader() {
702
- return html`<odx-loading-spinner part="loader"></odx-loading-spinner>`;
703
- }
704
- };
705
- _InteractiveElement_instances = new WeakSet();
706
- renderSlot_fn = function(name, force) {
707
- if (!force && this.loading && __privateMethod(this, _InteractiveElement_instances, isLoaderSlot_fn).call(this, name)) {
708
- return this.renderLoader();
709
- }
710
- return html`<slot name=${optionalAttr(name)}></slot>`;
711
- };
712
- isLoaderSlot_fn = function(name) {
713
- return name === (this.loaderSlot || Object.values(["prefix", "suffix"]).find((slot) => getAssignedElements(this, slot).length > 0));
714
- };
715
- InteractiveElement.styles = unsafeCSS(styles$2);
716
- __decorateClass$2([
717
- property({ type: Number, attribute: "line-clamp" })
718
- ], InteractiveElement.prototype, "lineClamp", 2);
719
- InteractiveElement = __decorateClass$2([
720
- requestUpdateOnAriaChange(["ariaLabel", "ariaHasPopup", "ariaExpanded", "role"])
721
- ], InteractiveElement);
722
-
723
- const styles$1 = "@layer base{:host{--max-block-size: 100%;--max-inline-size: 100%;--_popover-color-background: var(--odx-color-transparent);--_popover-color-foreground: var(--odx-color-foreground-base);--_popover-min-block-size: inherit;--_popover-max-block-size: 100%;--_popover-min-inline-size: inherit;--_popover-max-inline-size: 100%;--_popover-transition: var(--odx-popover-transition, var(--odx-motion-duration-default));--_popover-offset: var(--odx-size-50);--_popover-shadow: var(--odx-popover-shadow, var(--odx-shadow-level-1));--_popover-outer-padding: var(--odx-size-75);--_max-block-size: min(var(--_popover-max-block-size), var(--max-block-size));--_max-inline-size: min(var(--_popover-max-inline-size), var(--max-inline-size));background-color:transparent;opacity:0;transform:translate(var(--_popover-transition-offset-x),var(--_popover-transition-offset-y));transition:opacity var(--_popover-transition),transform var(--_popover-transition) allow-discrete,overlay var(--_popover-transition) allow-discrete,display var(--_popover-transition) allow-discrete;max-block-size:var(--_max-block-size);max-inline-size:var(--_max-inline-size);margin:0;top:var(--_popover-position-y);left:var(--_popover-position-x)}:host(:popover-open){display:flex;opacity:1;transform:translate(0);@starting-style{opacity:0;transform:translate(var(--_popover-transition-offset-x),var(--_popover-transition-offset-y))}}}@layer state{:host,:host([popover-placement^=\"top\"]){--_popover-transition-offset-x: 0;--_popover-transition-offset-y: calc(-1 * var(--_popover-offset));padding-block:var(--_popover-outer-padding) var(--_popover-offset);max-block-size:calc(var(--_max-block-size) - var(--_popover-outer-padding))}:host([popover-placement^=\"right\"]){--_popover-transition-offset-x: var(--_popover-offset);--_popover-transition-offset-y: 0;padding-inline:var(--_popover-offset) var(--_popover-outer-padding);max-inline-size:calc(var(--_max-inline-size) - var(--_popover-outer-padding))}:host([popover-placement^=\"bottom\"]){--_popover-transition-offset-x: 0;--_popover-transition-offset-y: var(--_popover-offset);padding-block:var(--_popover-offset) var(--_popover-outer-padding);max-block-size:calc(var(--_max-block-size) - var(--_popover-outer-padding))}:host([popover-placement^=\"left\"]){--_popover-transition-offset-x: calc(-1 * var(--_popover-offset));--_popover-transition-offset-y: 0;padding-inline:var(--_popover-outer-padding) var(--_popover-offset);max-inline-size:calc(var(--_max-inline-size) - var(--_popover-outer-padding))}}";
724
-
725
- const PopoverPlacement = {
726
- TOP: "top",
727
- TOP_START: "top-start",
728
- TOP_END: "top-end",
729
- RIGHT: "right",
730
- RIGHT_START: "right-start",
731
- RIGHT_END: "right-end",
732
- BOTTOM: "bottom",
733
- BOTTOM_START: "bottom-start",
734
- BOTTOM_END: "bottom-end",
735
- LEFT: "left",
736
- LEFT_START: "left-start",
737
- LEFT_END: "left-end"
738
- };
739
- function PopoverPlacementOptions(options) {
740
- return {
741
- placement: PopoverPlacement.BOTTOM,
742
- enableFallback: true,
743
- fallbackAxisSideDirection: "end",
744
- matchReferenceWidth: false,
745
- offset: 0,
746
- outerPadding: 24,
747
- ...options
748
- };
749
- }
750
- const PopoverSide = {
751
- TOP: PopoverPlacement.TOP,
752
- RIGHT: PopoverPlacement.RIGHT,
753
- BOTTOM: PopoverPlacement.BOTTOM,
754
- LEFT: PopoverPlacement.LEFT
755
- };
756
-
757
- function getPopoverSide(placement) {
758
- return placement.split("-")[0];
759
- }
760
- async function computePopoverPlacement(referenceElement, floatingElement, options) {
761
- const { arrowElement, placement, offset: offset$1, matchReferenceWidth, enableFallback, fallbackAxisSideDirection, minHeight, outerPadding } = options;
762
- const arrowSize = arrowElement?.offsetWidth ?? 0;
763
- const arrowMiddleware = arrowElement ? arrow({ element: arrowElement, padding: arrowSize * 3 }) : void 0;
764
- const flipMiddleWare = enableFallback ? flip({ fallbackAxisSideDirection }) : void 0;
765
- floatingElement.setAttribute("popover-placement", placement);
766
- const result = await computePosition(referenceElement, floatingElement, {
767
- strategy: "fixed",
768
- placement,
769
- middleware: [
770
- offset(offset$1 + arrowSize / 2),
771
- shift({ padding: 12 }),
772
- flipMiddleWare,
773
- size({
774
- apply: ({ availableHeight, availableWidth, rects, placement: currentPlacement }) => {
775
- floatingElement.style.setProperty("--_popover-min-inline-size", matchReferenceWidth ? toPx(rects.reference.width) : null);
776
- floatingElement.style.setProperty("--_popover-max-inline-size", toPx(availableWidth));
777
- floatingElement.style.setProperty("--_popover-min-block-size", minHeight ? toPx(Math.min(availableHeight, minHeight)) : null);
778
- floatingElement.style.setProperty("--_popover-max-block-size", toPx(availableHeight));
779
- floatingElement.setAttribute("popover-placement", currentPlacement);
780
- }
781
- }),
782
- arrowMiddleware,
783
- hide()
784
- ]
785
- });
786
- let arrowPositionX = null;
787
- let arrowPositionY = null;
788
- if (arrowElement && result.middlewareData.arrow) {
789
- const popoverSide = getPopoverSide(result.placement);
790
- const { arrow: arrow2 } = result.middlewareData;
791
- const arrowOffsetX = popoverSide === PopoverSide.LEFT ? floatingElement.offsetWidth - outerPadding - 0.5 * arrowSize : outerPadding - 0.5 * arrowSize;
792
- const arrowOffsetY = popoverSide === PopoverSide.TOP ? floatingElement.offsetHeight - outerPadding - 0.5 * arrowSize : outerPadding - 0.5 * arrowSize;
793
- arrowPositionX = arrow2.x ?? arrowOffsetX;
794
- arrowPositionY = arrow2.y ?? arrowOffsetY;
795
- }
796
- floatingElement.style.setProperty("--_popover-position-x", toPx(result.x));
797
- floatingElement.style.setProperty("--_popover-position-y", toPx(result.y));
798
- floatingElement.style.setProperty("--_popover-arrow-position-x", toPx(arrowPositionX));
799
- floatingElement.style.setProperty("--_popover-arrow-position-y", toPx(arrowPositionY));
800
- }
801
-
802
- var __defProp$1 = Object.defineProperty;
803
- var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
804
- var __decorateClass$1 = (decorators, target, key, kind) => {
805
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target;
806
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
807
- if (decorator = decorators[i])
808
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
809
- if (kind && result) __defProp$1(target, key, result);
810
- return result;
811
- };
812
- class PopoverHost extends CustomElement {
813
- constructor() {
814
- super();
815
- this.isOpen = false;
816
- this.referenceElement = null;
817
- this.anchor = "";
818
- this.#handleToggle = async ({ newState }) => {
819
- if (this.isOpen) {
820
- this.onBeforePopoverShow?.();
821
- await waitForAnimations(this);
822
- this.onPopoverShow?.();
823
- } else {
824
- this.onBeforePopoverHide?.();
825
- await waitForAnimations(this);
826
- this.onPopoverHide?.();
827
- }
828
- this.isOpen = newState === "open";
829
- };
830
- if (!isServer) {
831
- this.addEventListener("toggle", this.#handleToggle);
832
- }
833
- }
834
- static {
835
- this.styles = unsafeCSS(styles$1);
836
- }
837
- #observer;
838
- get options() {
839
- return PopoverPlacementOptions({ placement: this.placement ?? PopoverPlacement.BOTTOM });
840
- }
841
- connectedCallback() {
842
- super.connectedCallback();
843
- this.popover ??= "auto";
844
- this.#connectObserver();
845
- }
846
- disconnectedCallback() {
847
- super.disconnectedCallback();
848
- this.#disconnectObserver();
849
- }
850
- mountPopover(referenceElement) {
851
- if (this.referenceElement && this.referenceElement !== referenceElement) {
852
- this.unmountPopover(this.referenceElement);
853
- }
854
- if (!referenceElement) {
855
- this.referenceElement = null;
856
- return;
857
- }
858
- this.referenceElement = referenceElement;
859
- autoUpdate(
860
- this.referenceElement,
861
- this,
862
- () => (
863
- // biome-ignore lint/style/noNonNullAssertion: Reference element is defined when mounting popover
864
- computePopoverPlacement(this.referenceElement, this, this.options)
865
- )
866
- );
867
- }
868
- unmountPopover(referenceElement) {
869
- this.hidePopover();
870
- }
871
- isPopoverOpen() {
872
- return this.isOpen;
873
- }
874
- togglePopover(force) {
875
- const isOpen = force ?? !this.isPopoverOpen();
876
- if (isOpen && this.canPopoverShow?.() !== false) {
877
- this.showPopover();
878
- } else if (this.canPopoverHide?.() !== false) {
879
- this.hidePopover();
880
- }
881
- return isOpen;
882
- }
883
- #findReferenceElement(anchor) {
884
- return findClosestDocument(this)?.getElementById(anchor);
885
- }
886
- #connectObserver() {
887
- this.#disconnectObserver();
888
- this.mountPopover(this.#findReferenceElement(this.anchor));
889
- this.#observer = createMutationObserver(() => {
890
- const referenceElement = this.anchor ? this.#findReferenceElement(this.anchor) : null;
891
- if (this.referenceElement === referenceElement) return;
892
- this.mountPopover(referenceElement);
893
- });
894
- this.#observer.observe(document.documentElement, { subtree: true, attributeFilter: ["id", "anchor"] });
895
- }
896
- #disconnectObserver() {
897
- this.#observer?.disconnect();
898
- this.#observer = void 0;
899
- }
900
- #handleToggle;
901
- }
902
- __decorateClass$1([
903
- state()
904
- ], PopoverHost.prototype, "isOpen", 2);
905
- __decorateClass$1([
906
- state()
907
- ], PopoverHost.prototype, "referenceElement", 2);
908
- __decorateClass$1([
909
- property({ reflect: true })
910
- ], PopoverHost.prototype, "anchor", 2);
911
- __decorateClass$1([
912
- property({ reflect: true })
913
- ], PopoverHost.prototype, "placement", 2);
914
-
915
- const styles = ":host{--_arrow-size: var(--odx-size-50);--_outer-padding: var(--odx-size-75);--_border-radius: var(--odx-popover-border-radius, var(--odx-border-radius-controls));display:flex;background-color:transparent;border-radius:var(--_border-radius);padding-block:var(--_outer-padding);box-shadow:var(--_popover-shadow)}:host::part(arrow),:host{background-color:var(--_popover-color-background)}:host::part(content){display:flex;flex-direction:column;position:relative;inset-block-start:0!important;inset-inline-start:0!important;block-size:fit-content;min-block-size:var(--_popover-min-block-size);max-block-size:100%;min-inline-size:var(--_popover-min-inline-size);max-inline-size:100%;color:var(--_popover-color-foreground);padding-inline:var(--_outer-padding);border-radius:inherit;z-index:2;overflow:auto;scrollbar-width:thin;scroll-behavior:smooth;scroll-padding-block:calc(var(--odx-size-150) + var(--_outer-padding))}:host::part(arrow){border-radius:var(--odx-border-radius-sm);position:absolute;inline-size:var(--_arrow-size);block-size:var(--_arrow-size);z-index:3;inset:0;transform:translate3d(var(--_popover-arrow-position-x),var(--_popover-arrow-position-y),0) rotate(45deg)}";
916
-
917
- var __defProp = Object.defineProperty;
918
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
919
- var __decorateClass = (decorators, target, key, kind) => {
920
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
921
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
922
- if (decorator = decorators[i])
923
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
924
- if (kind && result) __defProp(target, key, result);
925
- return result;
926
- };
927
- let OdxPopover = class extends CustomElement {
928
- constructor() {
929
- super(...arguments);
930
- this.showArrow = false;
931
- }
932
- render() {
933
- return html`
934
- <div part="content">
935
- <slot></slot>
936
- </div>
937
- ${when(this.showArrow, () => html`<div part="arrow"></div>`)}
938
- `;
939
- }
940
- };
941
- __decorateClass([
942
- property({ type: Boolean, reflect: true })
943
- ], OdxPopover.prototype, "showArrow", 2);
944
- OdxPopover = __decorateClass([
945
- customElement("odx-popover", [styles])
946
- ], OdxPopover);
947
-
948
- export { CheckboxFormControl, CheckboxGroupFormControl, DragController, DragControllerOptions, IS_DRAG_ACTIVE_ATTRIBUTE, InteractiveElement, InteractiveLink, IsDraggable, ListboxFormControl, OdxPopover, OptionControl, PopoverHost, PopoverPlacement, PopoverPlacementOptions, PopoverSide, RadioGroupFormControl, isDraggableElement };