@odx/foundation 1.0.0-alpha.9 → 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/README.md +27 -23
  2. package/dist/cdk/drag-drop/is-draggable.d.ts +1 -1
  3. package/dist/cdk/main.d.ts +2 -2
  4. package/dist/cdk/popover/{popover-host.mixin.d.ts → popover-host.d.ts} +4 -3
  5. package/dist/cdk/popover/popover.d.ts +12 -0
  6. package/dist/cdk.js +23 -12
  7. package/dist/components/accordion/accordion-header.d.ts +18 -0
  8. package/dist/components/accordion/accordion-panel.d.ts +12 -0
  9. package/dist/components/accordion/accordion.d.ts +17 -0
  10. package/dist/components/accordion/index.d.ts +3 -3
  11. package/dist/components/action-group/action-group.d.ts +24 -0
  12. package/dist/components/action-group/index.d.ts +2 -0
  13. package/dist/components/anchor-navigation/anchor-navigation.d.ts +21 -0
  14. package/dist/components/anchor-navigation/anchor-observer.d.ts +11 -0
  15. package/dist/components/anchor-navigation/index.d.ts +3 -0
  16. package/dist/components/area-header/{area-header.component.d.ts → area-header.d.ts} +4 -4
  17. package/dist/components/area-header/index.d.ts +1 -1
  18. package/dist/components/avatar/{avatar.component.d.ts → avatar.d.ts} +4 -4
  19. package/dist/components/avatar/index.d.ts +1 -1
  20. package/dist/components/avatar-group/avatar-group.d.ts +14 -0
  21. package/dist/components/avatar-group/index.d.ts +1 -1
  22. package/dist/components/badge/{badge.component.d.ts → badge.d.ts} +6 -4
  23. package/dist/components/badge/badge.models.d.ts +4 -0
  24. package/dist/components/badge/index.d.ts +1 -1
  25. package/dist/components/breadcrumbs/breadcrumbs-item.d.ts +17 -0
  26. package/dist/components/breadcrumbs/{breadcrumbs.component.d.ts → breadcrumbs.d.ts} +4 -4
  27. package/dist/components/breadcrumbs/index.d.ts +2 -2
  28. package/dist/components/button/base-button.d.ts +6 -4
  29. package/dist/components/button/{button.component.d.ts → button.d.ts} +8 -5
  30. package/dist/components/button/index.d.ts +1 -1
  31. package/dist/components/button-group/button-group.d.ts +21 -0
  32. package/dist/components/button-group/index.d.ts +1 -1
  33. package/dist/components/card/card.d.ts +13 -0
  34. package/dist/components/card/index.d.ts +1 -1
  35. package/dist/components/checkbox/{checkbox.component.d.ts → checkbox.d.ts} +4 -4
  36. package/dist/components/checkbox/index.d.ts +1 -1
  37. package/dist/components/checkbox-group/{checkbox-group.component.d.ts → checkbox-group.d.ts} +4 -4
  38. package/dist/components/checkbox-group/checkbox-group.models.d.ts +1 -0
  39. package/dist/components/checkbox-group/index.d.ts +1 -1
  40. package/dist/components/chip/{chip.component.d.ts → chip.d.ts} +5 -5
  41. package/dist/components/chip/index.d.ts +1 -1
  42. package/dist/components/circular-progress-bar/{circular-progress-bar.component.d.ts → circular-progress-bar.d.ts} +4 -4
  43. package/dist/components/circular-progress-bar/index.d.ts +1 -1
  44. package/dist/components/content-box/content-box.d.ts +11 -0
  45. package/dist/components/content-box/index.d.ts +1 -1
  46. package/dist/components/dropdown/dropdown.d.ts +24 -0
  47. package/dist/components/dropdown/index.d.ts +1 -1
  48. package/dist/components/form-field/{form-field.element.d.ts → form-field.d.ts} +4 -4
  49. package/dist/components/form-field/index.d.ts +1 -1
  50. package/dist/components/format/base-format.d.ts +13 -0
  51. package/dist/components/format/format-bytes.d.ts +13 -0
  52. package/dist/components/format/{format-date.component.d.ts → format-date.d.ts} +4 -4
  53. package/dist/components/format/{format-number.component.d.ts → format-number.d.ts} +4 -4
  54. package/dist/components/format/index.d.ts +5 -4
  55. package/dist/components/format/{relative-time.component.d.ts → relative-time.d.ts} +4 -4
  56. package/dist/components/header/header-actions.d.ts +10 -0
  57. package/dist/components/header/{header.component.d.ts → header.d.ts} +4 -4
  58. package/dist/components/header/index.d.ts +2 -2
  59. package/dist/components/headline/{headline.component.d.ts → headline.d.ts} +4 -4
  60. package/dist/components/headline/index.d.ts +1 -1
  61. package/dist/components/highlight/highlight.d.ts +14 -0
  62. package/dist/components/highlight/index.d.ts +2 -0
  63. package/dist/components/icon-button/{icon-button.component.d.ts → icon-button.d.ts} +6 -5
  64. package/dist/components/icon-button/index.d.ts +1 -1
  65. package/dist/components/image/image.d.ts +34 -0
  66. package/dist/components/image/index.d.ts +2 -0
  67. package/dist/components/inline-message/index.d.ts +1 -1
  68. package/dist/components/inline-message/inline-message.d.ts +18 -0
  69. package/dist/components/inline-message/inline-message.models.d.ts +8 -5
  70. package/dist/components/input/index.d.ts +1 -1
  71. package/dist/components/input/input.d.ts +21 -0
  72. package/dist/components/line-clamp/index.d.ts +1 -1
  73. package/dist/components/line-clamp/line-clamp.d.ts +12 -0
  74. package/dist/components/link/base-link.d.ts +2 -2
  75. package/dist/components/link/index.d.ts +1 -1
  76. package/dist/components/link/{link.component.d.ts → link.d.ts} +3 -3
  77. package/dist/components/list/index.d.ts +2 -2
  78. package/dist/components/list/list-item.d.ts +23 -0
  79. package/dist/components/list/list.d.ts +11 -0
  80. package/dist/components/loading-overlay/index.d.ts +1 -1
  81. package/dist/components/loading-overlay/{loading-overlay.component.d.ts → loading-overlay.d.ts} +5 -5
  82. package/dist/components/loading-spinner/index.d.ts +1 -1
  83. package/dist/components/loading-spinner/loading-spinner.d.ts +13 -0
  84. package/dist/components/logo/index.d.ts +1 -1
  85. package/dist/components/logo/logo.d.ts +13 -0
  86. package/dist/components/main-menu/index.d.ts +5 -5
  87. package/dist/components/main-menu/main-menu-button.d.ts +12 -0
  88. package/dist/components/main-menu/main-menu-link.d.ts +9 -0
  89. package/dist/components/main-menu/main-menu-subtitle.d.ts +12 -0
  90. package/dist/components/main-menu/main-menu-title.d.ts +12 -0
  91. package/dist/components/main-menu/{main-menu.component.d.ts → main-menu.d.ts} +4 -4
  92. package/dist/components/main.d.ts +12 -4
  93. package/dist/components/menu/index.d.ts +2 -2
  94. package/dist/components/menu/menu-label.d.ts +9 -0
  95. package/dist/components/menu/{menu.component.d.ts → menu.d.ts} +8 -8
  96. package/dist/components/menu-item/index.d.ts +1 -1
  97. package/dist/components/menu-item/menu-item.d.ts +15 -0
  98. package/dist/components/modal/index.d.ts +3 -0
  99. package/dist/components/modal/modal.d.ts +35 -0
  100. package/dist/components/modal/modal.models.d.ts +5 -0
  101. package/dist/components/navigation-item/index.d.ts +1 -1
  102. package/dist/components/navigation-item/navigation-item.d.ts +14 -0
  103. package/dist/components/option/index.d.ts +1 -1
  104. package/dist/components/option/option.d.ts +12 -0
  105. package/dist/components/page/index.d.ts +1 -1
  106. package/dist/components/page/{page.component.d.ts → page.d.ts} +4 -4
  107. package/dist/components/page-layout/index.d.ts +1 -1
  108. package/dist/components/page-layout/page-layout.d.ts +11 -0
  109. package/dist/components/pagination/index.d.ts +2 -0
  110. package/dist/components/pagination/pagination.d.ts +32 -0
  111. package/dist/components/progress-bar/index.d.ts +1 -1
  112. package/dist/components/progress-bar/{progress-bar.component.d.ts → progress-bar.d.ts} +4 -4
  113. package/dist/components/radio-button/index.d.ts +1 -1
  114. package/dist/components/radio-button/radio-button.d.ts +13 -0
  115. package/dist/components/radio-group/index.d.ts +1 -1
  116. package/dist/components/radio-group/radio-group.d.ts +11 -0
  117. package/dist/components/radio-group/radio-group.models.d.ts +1 -0
  118. package/dist/components/rail-navigation/index.d.ts +1 -1
  119. package/dist/components/rail-navigation/rail-navigation.d.ts +19 -0
  120. package/dist/components/search-bar/index.d.ts +1 -1
  121. package/dist/components/search-bar/{search-bar.component.d.ts → search-bar.d.ts} +6 -5
  122. package/dist/components/select/index.d.ts +1 -1
  123. package/dist/components/select/select.d.ts +18 -0
  124. package/dist/components/separator/index.d.ts +2 -1
  125. package/dist/components/separator/{separator.component.d.ts → separator.d.ts} +4 -4
  126. package/dist/components/skeleton/index.d.ts +2 -1
  127. package/dist/components/skeleton/skeleton.d.ts +16 -0
  128. package/dist/components/skeleton/skeleton.models.d.ts +13 -0
  129. package/dist/components/slider/index.d.ts +3 -3
  130. package/dist/components/slider/{slider-handle.component.d.ts → slider-handle.d.ts} +5 -5
  131. package/dist/components/slider/{slider-marks.component.d.ts → slider-marks.d.ts} +4 -4
  132. package/dist/components/slider/{slider.component.d.ts → slider.d.ts} +6 -6
  133. package/dist/components/spacer/index.d.ts +1 -1
  134. package/dist/components/spacer/spacer.d.ts +13 -0
  135. package/dist/components/spinbox/index.d.ts +1 -1
  136. package/dist/components/spinbox/spinbox.d.ts +20 -0
  137. package/dist/components/stack/index.d.ts +1 -1
  138. package/dist/components/stack/{stack.component.d.ts → stack.d.ts} +4 -4
  139. package/dist/components/switch/index.d.ts +1 -1
  140. package/dist/components/switch/switch.d.ts +12 -0
  141. package/dist/components/table/index.d.ts +8 -7
  142. package/dist/components/table/table-body.d.ts +12 -0
  143. package/dist/components/table/table-cell.d.ts +12 -0
  144. package/dist/components/table/{table-checkbox-cell.element.d.ts → table-checkbox-cell.d.ts} +4 -4
  145. package/dist/components/table/table-header-cell.d.ts +13 -0
  146. package/dist/components/table/table-header.d.ts +14 -0
  147. package/dist/components/table/{table-row.element.d.ts → table-row.d.ts} +4 -4
  148. package/dist/components/table/table.d.ts +20 -0
  149. package/dist/components/table/{table.context.d.ts → table.models.d.ts} +1 -1
  150. package/dist/components/text/index.d.ts +1 -1
  151. package/dist/components/text/{text.component.d.ts → text.d.ts} +4 -4
  152. package/dist/components/title/index.d.ts +1 -1
  153. package/dist/components/title/{title.component.d.ts → title.d.ts} +4 -4
  154. package/dist/components/toast/index.d.ts +1 -1
  155. package/dist/components/toast/{toast.element.d.ts → toast.d.ts} +4 -4
  156. package/dist/components/toggle-button/index.d.ts +1 -1
  157. package/dist/components/toggle-button/{toggle-button.component.d.ts → toggle-button.d.ts} +4 -4
  158. package/dist/components/toggle-content/index.d.ts +2 -0
  159. package/dist/components/toggle-content/toggle-content.d.ts +13 -0
  160. package/dist/components/tooltip/index.d.ts +1 -1
  161. package/dist/components/tooltip/{tooltip.element.d.ts → tooltip.d.ts} +5 -6
  162. package/dist/components/translate/index.d.ts +2 -0
  163. package/dist/components/translate/translate.d.ts +16 -0
  164. package/dist/components/visually-hidden/index.d.ts +1 -1
  165. package/dist/components/visually-hidden/visually-hidden.d.ts +11 -0
  166. package/dist/components.js +2583 -1674
  167. package/dist/i18n/lib/config.d.ts +6 -6
  168. package/dist/i18n/lib/is-localized.mixin.d.ts +5 -3
  169. package/dist/i18n/lib/localization.d.ts +4 -4
  170. package/dist/i18n/lib/models.d.ts +1 -1
  171. package/dist/i18n/lib/translate.d.ts +6 -4
  172. package/dist/i18n.js +47 -42
  173. package/dist/lib/custom-element.d.ts +5 -5
  174. package/dist/lib/decorators/request-update-on-aria-change.d.ts +1 -31
  175. package/dist/lib/main.d.ts +7 -5
  176. package/dist/lib/mixins/can-be-disabled.d.ts +1 -1
  177. package/dist/lib/mixins/can-be-expanded.d.ts +12 -0
  178. package/dist/lib/mixins/can-be-selected.d.ts +9 -0
  179. package/dist/lib/{models/aria-mixin-strict.d.ts → utils/a11y.d.ts} +3 -1
  180. package/dist/lib/utils/dom.d.ts +3 -0
  181. package/dist/lib/utils/search-text-content.d.ts +7 -0
  182. package/dist/lib/utils/shared-intersection-observer.d.ts +1 -1
  183. package/dist/loader/main.d.ts +2 -0
  184. package/dist/loader.js +13 -0
  185. package/dist/main.js +219 -537
  186. package/dist/styles.css +1 -1
  187. package/dist/{vendor.js → vendor-C_WVAD3D.js} +21 -1
  188. package/dist/vite.config.d.ts +3 -0
  189. package/package.json +18 -13
  190. package/dist/assets/draeger-pangea-text-medium.woff2 +0 -0
  191. package/dist/assets/draeger-pangea-text-regular.woff2 +0 -0
  192. package/dist/assets/draeger-pangea-text-semibold.woff2 +0 -0
  193. package/dist/assets/fonts.css +0 -20
  194. package/dist/cdk/popover/popover.component.d.ts +0 -12
  195. package/dist/components/accordion/accordion-header.component.d.ts +0 -18
  196. package/dist/components/accordion/accordion-panel.component.d.ts +0 -11
  197. package/dist/components/accordion/accordion.component.d.ts +0 -18
  198. package/dist/components/avatar-group/avatar-group.component.d.ts +0 -14
  199. package/dist/components/breadcrumbs/breadcrumbs-item.component.d.ts +0 -17
  200. package/dist/components/button-group/button-group.component.d.ts +0 -18
  201. package/dist/components/card/card.component.d.ts +0 -13
  202. package/dist/components/content-box/content-box.component.d.ts +0 -11
  203. package/dist/components/dropdown/dropdown.component.d.ts +0 -23
  204. package/dist/components/format/format-bytes.component.d.ts +0 -13
  205. package/dist/components/format/format.component.d.ts +0 -13
  206. package/dist/components/header/header-actions.component.d.ts +0 -10
  207. package/dist/components/inline-message/inline-message.component.d.ts +0 -14
  208. package/dist/components/input/input.component.d.ts +0 -20
  209. package/dist/components/line-clamp/line-clamp.component.d.ts +0 -12
  210. package/dist/components/list/list-item.component.d.ts +0 -11
  211. package/dist/components/list/list.component.d.ts +0 -11
  212. package/dist/components/loading-spinner/loading-spinner.component.d.ts +0 -13
  213. package/dist/components/logo/logo.component.d.ts +0 -13
  214. package/dist/components/main-menu/main-menu-button.component.d.ts +0 -12
  215. package/dist/components/main-menu/main-menu-link.component.d.ts +0 -9
  216. package/dist/components/main-menu/main-menu-subtitle.component.d.ts +0 -12
  217. package/dist/components/main-menu/main-menu-title.component.d.ts +0 -12
  218. package/dist/components/menu/menu-label.component.d.ts +0 -9
  219. package/dist/components/menu-item/menu-item.component.d.ts +0 -14
  220. package/dist/components/navigation-item/navigation-item.component.d.ts +0 -16
  221. package/dist/components/option/option.component.d.ts +0 -12
  222. package/dist/components/page-layout/page-layout.component.d.ts +0 -11
  223. package/dist/components/radio-button/radio-button.component.d.ts +0 -13
  224. package/dist/components/radio-group/radio-group.component.d.ts +0 -11
  225. package/dist/components/rail-navigation/rail-navigation.component.d.ts +0 -19
  226. package/dist/components/select/select.component.d.ts +0 -18
  227. package/dist/components/skeleton/skeleton.component.d.ts +0 -12
  228. package/dist/components/spacer/spacer.component.d.ts +0 -13
  229. package/dist/components/spinbox/spinbox.component.d.ts +0 -20
  230. package/dist/components/switch/switch.component.d.ts +0 -12
  231. package/dist/components/table/table-body.element.d.ts +0 -12
  232. package/dist/components/table/table-cell.element.d.ts +0 -12
  233. package/dist/components/table/table-header-cell.element.d.ts +0 -13
  234. package/dist/components/table/table-header.element.d.ts +0 -14
  235. package/dist/components/table/table.element.d.ts +0 -20
  236. package/dist/components/visually-hidden/visually-hidden.component.d.ts +0 -11
  237. package/dist/lib/directives/aria-boolean-attr.d.ts +0 -3
  238. package/dist/lib/external/roving-tabindex.d.ts +0 -87
  239. package/dist/lib/mixins/with-aria-controls.d.ts +0 -11
  240. package/dist/lib/utils/string.d.ts +0 -2
  241. package/public/assets/draeger-pangea-text-medium.woff2 +0 -0
  242. package/public/assets/draeger-pangea-text-regular.woff2 +0 -0
  243. package/public/assets/draeger-pangea-text-semibold.woff2 +0 -0
  244. package/public/assets/fonts.css +0 -20
@@ -1,17 +1,17 @@
1
- import { Locale, SingleUnitIdentifier } from './models.js';
1
+ import { LocaleInput, SingleUnitIdentifier } from './models.js';
2
2
  export interface DateTimeFormatOptions extends Omit<Intl.DateTimeFormatOptions, 'dateStyle'> {
3
- locale?: Locale;
3
+ locale?: LocaleInput;
4
4
  dateStyle?: 'iso8601' | Intl.DateTimeFormatOptions['dateStyle'];
5
5
  }
6
6
  export interface NumberFormatOptions extends Intl.NumberFormatOptions {
7
- locale?: Locale;
7
+ locale?: LocaleInput;
8
8
  unit?: SingleUnitIdentifier;
9
9
  }
10
10
  export interface ListFormatOptions extends Intl.ListFormatOptions {
11
- locale?: Locale;
11
+ locale?: LocaleInput;
12
12
  }
13
13
  export interface RelativeTimeFormatOptions extends Intl.RelativeTimeFormatOptions {
14
- locale?: Locale;
14
+ locale?: LocaleInput;
15
15
  minUnit?: Intl.RelativeTimeFormatUnit;
16
16
  }
17
17
  export interface FormatOptions {
@@ -21,7 +21,7 @@ export interface FormatOptions {
21
21
  relativeTimeFormatOptions?: RelativeTimeFormatOptions;
22
22
  }
23
23
  export interface LocalizationOptions {
24
- defaultLocale: () => Locale;
24
+ defaultLocale: () => LocaleInput;
25
25
  }
26
26
  export type I18nOptions = LocalizationOptions & FormatOptions;
27
27
  export declare function setI18nOptions(options?: Partial<I18nOptions> | null): void;
@@ -1,9 +1,11 @@
1
- import { Signal } from '@lit-labs/signals';
2
- import { Constructor, CustomElement } from '@odx/foundation';
1
+ import { ReadonlySignal } from '@lit-labs/preact-signals';
2
+ import { Constructor, CustomElement } from '../../lib/main.js';
3
3
  import { formatDate, formatList, formatNumber, formatRelativeTime } from './format.js';
4
4
  import { getLocale } from './localization.js';
5
+ import { translate } from './translate.js';
5
6
  export interface IsLocalized {
6
- readonly locale: Signal.Computed<ReturnType<typeof getLocale>>;
7
+ readonly locale: ReadonlySignal<ReturnType<typeof getLocale>>;
8
+ t: (...args: Parameters<typeof translate>) => string;
7
9
  formatDate: typeof formatDate;
8
10
  formatNumber: typeof formatNumber;
9
11
  formatList: typeof formatList;
@@ -1,5 +1,5 @@
1
- import { Locale } from './models.js';
2
- export declare function watchLocaleChanges(root?: HTMLElement): void;
3
- export declare function setLocale(locale: Locale | null): void;
4
- export declare function getLocale(locale?: Locale | null): Intl.Locale;
1
+ import { LocaleInput } from './models.js';
2
+ export declare function getLocale(localeInput?: LocaleInput | null): Intl.Locale;
3
+ export declare function setLocale(localeInput?: LocaleInput | null): void;
4
+ export declare function syncDocumentLanguage(root?: HTMLElement): () => void;
5
5
  //# sourceMappingURL=localization.d.ts.map
@@ -1,4 +1,4 @@
1
- export type Locale = Intl.UnicodeBCP47LocaleIdentifier | Intl.Locale;
1
+ export type LocaleInput = Intl.UnicodeBCP47LocaleIdentifier | Intl.Locale;
2
2
  /**
3
3
  * Single units sanctioned for use in ECMAScript.
4
4
  * See: https://tc39.es/ecma402/#table-sanctioned-single-unit-identifiers
@@ -1,9 +1,11 @@
1
- import { Signal } from '@lit-labs/signals';
2
- import { Locale } from './models.js';
1
+ import { ReadonlySignal } from '@lit-labs/preact-signals';
2
+ import { LocaleInput } from './models.js';
3
+ export type TranslateContext = Record<string, string | number | boolean> | string | number | boolean | null;
3
4
  type Translation = {
4
5
  [key: string]: Translation | string;
5
6
  };
6
- export declare function setTranslation(locale: Locale, translation: Translation): void;
7
- export declare function translate(key: string, context?: Record<string, string | number> | null, locale?: Locale | null): Signal.Computed<string>;
7
+ export declare function interpolate(value: string, context: Record<string, string | number>): string;
8
+ export declare function setTranslation(locale: LocaleInput, translation: Translation): void;
9
+ export declare function translate(key: string, contextInput?: TranslateContext, locale?: LocaleInput | null): ReadonlySignal<string>;
8
10
  export {};
9
11
  //# sourceMappingURL=translate.d.ts.map
package/dist/i18n.js CHANGED
@@ -1,7 +1,7 @@
1
- import { signal, SignalWatcher, computed } from '@lit-labs/signals';
2
- import { createOptions, parseDate, createMutationObserver, dedupeMixin, interpolate } from '@odx/foundation';
1
+ import { signal, effect, computed, SignalWatcher } from '@lit-labs/preact-signals';
2
+ import { createOptions, parseDate, dedupeMixin } from '@odx/foundation';
3
3
  import { property } from 'lit/decorators.js';
4
- import { k as flattenObject } from './vendor.js';
4
+ import { k as flattenObject, l as isNotNil } from './vendor-C_WVAD3D.js';
5
5
 
6
6
  const I18nOptions = createOptions({
7
7
  defaultLocale: () => navigator.language,
@@ -9,10 +9,10 @@ const I18nOptions = createOptions({
9
9
  });
10
10
  const i18nOptions = signal(null);
11
11
  function setI18nOptions(options) {
12
- i18nOptions.set(getI18nOptions(options));
12
+ i18nOptions.value = getI18nOptions(options);
13
13
  }
14
14
  function getI18nOptions(options) {
15
- return I18nOptions(options ?? i18nOptions.get() ?? {});
15
+ return I18nOptions(options ?? i18nOptions.value ?? {});
16
16
  }
17
17
 
18
18
  function formatDate(input, options) {
@@ -66,27 +66,42 @@ function formatRelativeTime(input, options) {
66
66
  return new Intl.RelativeTimeFormat(options?.locale, relativeTimeFormatOptions).format(Math.round(relativeTime / timeUnit.value), timeUnit.unit);
67
67
  }
68
68
 
69
- const activeLocale = signal(null, { equals: (t, t2) => t?.toString() === t2?.toString() });
70
- function watchLocaleChanges(root = document.documentElement) {
71
- const updateLocale = () => activeLocale.set(getLocale(root.lang));
72
- const observer = createMutationObserver(updateLocale);
73
- observer.observe(root, { attributes: true, attributeFilter: ["lang"] });
74
- updateLocale();
69
+ const activeLocale = signal(null);
70
+ function getLocale(localeInput) {
71
+ return new Intl.Locale(localeInput || activeLocale.value || getI18nOptions().defaultLocale());
75
72
  }
76
- function setLocale(locale) {
77
- if (locale === null) {
78
- document.documentElement.lang = getI18nOptions().defaultLocale().toString();
79
- } else {
80
- document.documentElement.lang = getLocale(locale).toString();
81
- }
73
+ function setLocale(localeInput) {
74
+ activeLocale.value = localeInput ? getLocale(localeInput) : null;
82
75
  }
83
- function getLocale(locale) {
84
- const fallbackLocale = activeLocale.get() || getI18nOptions().defaultLocale();
85
- try {
86
- return new Intl.Locale(locale || fallbackLocale);
87
- } catch {
88
- return new Intl.Locale(fallbackLocale);
89
- }
76
+ function syncDocumentLanguage(root = document.documentElement) {
77
+ return effect(() => {
78
+ root.lang = getLocale().toString();
79
+ });
80
+ }
81
+
82
+ const fallbackLocale = "en";
83
+ const translations = signal({});
84
+ function interpolate(value, context) {
85
+ return value.replaceAll(/\{\{\s*([^}\s]+)\s*}}/g, (match, variableName) => {
86
+ return isNotNil(context[variableName]) ? interpolate(context[variableName].toString(), context) : match;
87
+ });
88
+ }
89
+ function setTranslation(locale, translation) {
90
+ const { language } = getLocale(locale);
91
+ translations.value = { ...translations.value, [language]: { ...translations.value[language], ...flattenObject(translation, { delimiter: "." }) } };
92
+ }
93
+ function translate(key, contextInput, locale) {
94
+ return computed(() => {
95
+ const translationRecord = getTranslationRecord(locale);
96
+ if (!translationRecord) return key;
97
+ const value = translationRecord?.[key] ?? getTranslationRecord(fallbackLocale)?.[key] ?? "";
98
+ const context = typeof contextInput === "object" || contextInput === void 0 ? flattenObject(contextInput ?? {}) : { $implicit: contextInput.toString() };
99
+ return interpolate(value, { ...getTranslationRecord(fallbackLocale), ...translationRecord, ...context });
100
+ });
101
+ }
102
+ function getTranslationRecord(localeInput) {
103
+ const locale = getLocale(localeInput);
104
+ return translations.value[locale.toString()] ?? translations.value[locale.language] ?? null;
90
105
  }
91
106
 
92
107
  var __defProp = Object.defineProperty;
@@ -106,16 +121,19 @@ const IsLocalized = dedupeMixin((superClass) => {
106
121
  this.locale = computed(() => getLocale(this.lang));
107
122
  }
108
123
  formatDate(...[input, options]) {
109
- return formatDate(input, { ...options, locale: options?.locale ?? this.locale.get() });
124
+ return formatDate(input, { ...options, locale: options?.locale ?? this.locale.value });
110
125
  }
111
126
  formatNumber(...[input, options]) {
112
- return formatNumber(input, { ...options, locale: options?.locale ?? this.locale.get() });
127
+ return formatNumber(input, { ...options, locale: options?.locale ?? this.locale.value });
113
128
  }
114
129
  formatList(...[input, options]) {
115
- return formatList(input, { ...options, locale: options?.locale ?? this.locale.get() });
130
+ return formatList(input, { ...options, locale: options?.locale ?? this.locale.value });
116
131
  }
117
132
  formatRelativeTime(...[input, options]) {
118
- return formatRelativeTime(input, { ...options, locale: options?.locale ?? this.locale.get() });
133
+ return formatRelativeTime(input, { ...options, locale: options?.locale ?? this.locale.value });
134
+ }
135
+ t(...[key, context, locale]) {
136
+ return translate(key, context, locale ?? this.locale.value).value;
119
137
  }
120
138
  }
121
139
  __decorateClass([
@@ -124,17 +142,4 @@ const IsLocalized = dedupeMixin((superClass) => {
124
142
  return IsLocalizedElement;
125
143
  });
126
144
 
127
- const translations = signal({});
128
- function setTranslation(locale, translation) {
129
- const { language } = getLocale(locale);
130
- translations.set({ ...translations.get(), [language]: { ...translations.get()[language], ...flattenObject(translation, { delimiter: "." }) } });
131
- }
132
- function translate(key, context, locale) {
133
- return computed(() => {
134
- const translation = translations.get()[getLocale(locale).language];
135
- if (typeof translation?.[key] !== "string") return key;
136
- return interpolate(translation[key], { ...translation, ...context });
137
- });
138
- }
139
-
140
- export { IsLocalized, formatDate, formatList, formatNumber, formatRelativeTime, getI18nOptions, getLocale, setI18nOptions, setLocale, setTranslation, translate, watchLocaleChanges };
145
+ export { IsLocalized, formatDate, formatList, formatNumber, formatRelativeTime, getI18nOptions, getLocale, interpolate, setI18nOptions, setLocale, setTranslation, syncDocumentLanguage, translate };
@@ -1,10 +1,10 @@
1
- import { CSSResult, CSSResultGroup, HTMLTemplateResult, LitElement, TemplateResult } from 'lit';
2
- type AllowedEvents = 'change' | 'select' | 'submit' | 'toggle' | 'remove' | 'add' | 'expand' | 'collapse';
3
- export declare function customElement(selector?: keyof HTMLElementTagNameMap, styles?: Array<CSSResultGroup | CSSResult | string>): (target: typeof CustomElement) => void;
1
+ import { CSSResultGroup, HTMLTemplateResult, LitElement, TemplateResult } from 'lit';
2
+ export declare function isCustomElementClass(candidate: unknown): candidate is typeof CustomElement;
3
+ export declare function customElement(selector?: keyof HTMLElementTagNameMap, styles?: Array<string | CSSResultGroup>): (target: typeof CustomElement) => void;
4
4
  export declare class CustomElement extends LitElement {
5
5
  static selector: string;
6
+ static define: () => void;
6
7
  protected render(): HTMLTemplateResult | TemplateResult | string;
7
- emit(event: AllowedEvents, eventInit?: CustomEventInit): boolean;
8
+ emit(event: string, eventInit?: CustomEventInit): boolean;
8
9
  }
9
- export {};
10
10
  //# sourceMappingURL=custom-element.d.ts.map
@@ -1,34 +1,4 @@
1
1
  import { ReactiveElement } from 'lit';
2
- import { ARIAProperty } from '../models/aria-mixin-strict.js';
3
- /**
4
- * Sets up a `ReactiveElement` constructor to enable updates when delegating
5
- * aria attributes. Elements may bind `this.aria*` properties to `aria-*`
6
- * attributes in their render functions.
7
- *
8
- * This function will:
9
- * - Call `requestUpdate()` when an aria attribute changes.
10
- * - Add `role="presentation"` to the host.
11
- *
12
- * NOTE: The following features are not currently supported:
13
- * - Delegating IDREF attributes (ex: `aria-labelledby`, `aria-controls`)
14
- * - Delegating the `role` attribute
15
- *
16
- * @example
17
- * class ButtonElement extends LitElement {
18
- * static {
19
- * requestUpdateOnAriaChange(XButton);
20
- * }
21
- *
22
- * protected override render() {
23
- * return html`
24
- * <button aria-label=${this.ariaLabel || nothing}>
25
- * <slot></slot>
26
- * </button>
27
- * `;
28
- * }
29
- * }
30
- *
31
- * @param ctor The `ReactiveElement` constructor to patch.
32
- */
2
+ import { ARIAProperty } from '../utils/a11y.js';
33
3
  export declare function requestUpdateOnAriaChange(ariaProperties: ARIAProperty[]): (ctor: typeof ReactiveElement) => void;
34
4
  //# sourceMappingURL=request-update-on-aria-change.d.ts.map
@@ -1,32 +1,34 @@
1
+ import { ExtractAssetName } from '@odx/assets-utils';
1
2
  export * from './controllers/focus-trap.controller.js';
2
3
  export * from './decorators/request-update-on-aria-change.js';
3
- export * from './directives/aria-boolean-attr.js';
4
4
  export * from './directives/optional-attr.js';
5
5
  export * from './directives/optional-slot.js';
6
6
  export * from './directives/slot-fallback.js';
7
- export * from './external/roving-tabindex.js';
8
7
  export * from './facade/checkbox-form-control.js';
9
8
  export * from './facade/checkbox-group-form-control.js';
10
9
  export * from './facade/option-control.js';
11
10
  export * from './facade/radio-group-form-control.js';
12
11
  export * from './facade/select-form-control.js';
13
12
  export * from './mixins/can-be-disabled.js';
13
+ export * from './mixins/can-be-expanded.js';
14
14
  export * from './mixins/can-be-readonly.js';
15
15
  export * from './mixins/can-be-required.js';
16
+ export * from './mixins/can-be-selected.js';
16
17
  export * from './mixins/can-be-validated.js';
17
18
  export * from './mixins/dedupe-mixin.js';
18
19
  export * from './mixins/form-control.js';
19
20
  export * from './mixins/number-control.js';
20
- export * from './mixins/with-aria-controls.js';
21
21
  export * from './mixins/with-loading-state.js';
22
- export * from './models/aria-mixin-strict.js';
22
+ export * from './utils/a11y.js';
23
23
  export * from './utils/date.js';
24
24
  export * from './utils/dom.js';
25
25
  export * from './utils/get-unique-id.js';
26
26
  export * from './utils/keyboard-events.js';
27
27
  export * from './utils/object.js';
28
+ export * from './utils/search-text-content.js';
28
29
  export * from './utils/shared-intersection-observer.js';
29
30
  export * from './utils/shared-resize-observer.js';
30
- export * from './utils/string.js';
31
31
  export * from './custom-element.js';
32
+ export { effect } from '@lit-labs/preact-signals';
33
+ export type AvailableIcons = keyof _OdxIcon | ExtractAssetName<keyof _OdxIcon>;
32
34
  //# sourceMappingURL=main.d.ts.map
@@ -3,7 +3,7 @@ import { Constructor } from './dedupe-mixin.js';
3
3
  export interface CanBeDisabled {
4
4
  disabled: boolean;
5
5
  _contextDisabled: boolean;
6
- onDisabledChanged?(disabled: boolean): void;
6
+ isContextDisabled(): boolean;
7
7
  }
8
8
  export declare const CanBeDisabled: <T extends Constructor<CustomElement>>(superClass: T) => Constructor<CanBeDisabled> & T;
9
9
  //# sourceMappingURL=can-be-disabled.d.ts.map
@@ -0,0 +1,12 @@
1
+ import { CustomElement } from '../custom-element.js';
2
+ import { CanBeDisabled } from './can-be-disabled.js';
3
+ import { Constructor } from './dedupe-mixin.js';
4
+ export interface CanBeExpanded extends CanBeDisabled {
5
+ expanded: boolean;
6
+ collapse(emitEvent?: boolean): void;
7
+ expand(emitEvent?: boolean): void;
8
+ toggle(force?: boolean, emitEvent?: boolean): void;
9
+ }
10
+ export type WithAriaControlsElement = CanBeExpanded & CanBeDisabled & HTMLElement;
11
+ export declare const CanBeExpanded: <T extends Constructor<CustomElement>>(superClass: T) => Constructor<CanBeExpanded> & T;
12
+ //# sourceMappingURL=can-be-expanded.d.ts.map
@@ -0,0 +1,9 @@
1
+ import { CustomElement } from '../custom-element.js';
2
+ import { ARIAMixinStrict } from '../utils/a11y.js';
3
+ import { Constructor } from './dedupe-mixin.js';
4
+ export interface CanBeSelected {
5
+ selected: boolean;
6
+ ariaSelectedValue: ARIAMixinStrict['ariaCurrent'];
7
+ }
8
+ export declare const CanBeSelected: <T extends Constructor<CustomElement>>(superClass: T) => Constructor<CanBeSelected> & T;
9
+ //# sourceMappingURL=can-be-selected.d.ts.map
@@ -59,4 +59,6 @@ export interface ARIAMixinStrict extends ARIAMixin {
59
59
  ariaValueText: string | null;
60
60
  role: ARIARole | null;
61
61
  }
62
- //# sourceMappingURL=aria-mixin-strict.d.ts.map
62
+ export declare function toAriaBooleanAttribute(value: boolean, removeOnFalse?: boolean): 'true' | 'false';
63
+ export declare function fromAriaBooleanAttribute(value?: string | null): boolean;
64
+ //# sourceMappingURL=a11y.d.ts.map
@@ -1,3 +1,5 @@
1
+ export type CSSDimensionUnit = 'px' | 'em' | 'rem' | 'vh' | 'vw' | 'vmin' | 'vmax' | '%' | 'fr' | 'auto' | 'inherit' | 'initial' | 'unset';
2
+ export type CSSDimensionValue = `${number}${CSSDimensionUnit}`;
1
3
  /**
2
4
  * Creates a new MutationObserver instance.
3
5
  *
@@ -11,4 +13,5 @@ export declare function findClosestDocument(node: Node): ShadowRoot | Document |
11
13
  export declare function toPx(value?: string | number | null): string | null;
12
14
  export declare function getAssignedElements<T extends HTMLElement = HTMLElement>(host: HTMLElement, ...slots: string[]): T[];
13
15
  export declare function waitForAnimations(element?: Element | null, subtree?: boolean): Promise<Animation[]>;
16
+ export declare function forwardEvent(target: HTMLElement, eventInit?: EventInit): EventListener;
14
17
  //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1,7 @@
1
+ export interface SearchTextContentOptions {
2
+ root: Element;
3
+ query: string;
4
+ minlength: number;
5
+ }
6
+ export declare function searchTextContent(options: SearchTextContentOptions): Range[];
7
+ //# sourceMappingURL=search-text-content.d.ts.map
@@ -4,7 +4,7 @@
4
4
  * @param {IntersectionObserverCallback} callback - The callback to execute when an observed element's size changes.
5
5
  * @returns {IntersectionObserver} A IntersectionObserver instance or a dummy object with no-op methods if unsupported.
6
6
  */
7
- export declare function createIntersectionObserver(callback: IntersectionObserverCallback): IntersectionObserver;
7
+ export declare function createIntersectionObserver(callback: IntersectionObserverCallback, options?: IntersectionObserverInit): IntersectionObserver;
8
8
  export interface SharedIntersectionObserverOptions {
9
9
  fpsLimit: number;
10
10
  }
@@ -0,0 +1,2 @@
1
+ export declare function defineCustomElements(): Promise<void>;
2
+ //# sourceMappingURL=main.d.ts.map
package/dist/loader.js ADDED
@@ -0,0 +1,13 @@
1
+ import { isCustomElementClass } from '@odx/foundation';
2
+ import * as cdkComponents from '@odx/foundation/cdk';
3
+ import * as components from '@odx/foundation/components';
4
+
5
+ async function defineCustomElements() {
6
+ for (const entry of Object.values({ ...components, ...cdkComponents })) {
7
+ if (!isCustomElementClass(entry)) continue;
8
+ entry.define();
9
+ }
10
+ }
11
+ defineCustomElements();
12
+
13
+ export { defineCustomElements };