@oscarpalmer/oui 0.40.0 → 0.41.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 (165) hide show
  1. package/dist/css/color-picker.css +80 -69
  2. package/dist/css/listbox.css +169 -0
  3. package/dist/js/color-picker/color-picker.constants.d.mts +2 -2
  4. package/dist/js/color-picker/color-picker.constants.mjs +5 -3
  5. package/dist/js/color-picker/color-picker.dom.d.mts +1 -1
  6. package/dist/js/color-picker/color-picker.dom.mjs +31 -14
  7. package/dist/js/color-picker/color-picker.event.d.mts +2 -2
  8. package/dist/js/color-picker/color-picker.event.mjs +232 -1
  9. package/dist/js/color-picker/color-picker.form.d.mts +1 -1
  10. package/dist/js/color-picker/color-picker.form.mjs +1 -3
  11. package/dist/js/color-picker/color-picker.misc.d.mts +2 -2
  12. package/dist/js/color-picker/color-picker.misc.mjs +104 -2
  13. package/dist/js/color-picker/color-picker.model.d.mts +2 -2
  14. package/dist/js/color-picker/color-picker.output.d.mts +1 -1
  15. package/dist/js/color-picker/color-picker.output.mjs +7 -8
  16. package/dist/js/color-picker/color-picker.state.d.mts +1 -1
  17. package/dist/js/color-picker/color-picker.state.mjs +167 -1
  18. package/dist/js/color-picker/index.d.mts +7 -15
  19. package/dist/js/color-picker/index.mjs +11 -6
  20. package/dist/js/{color-picker.constants-D1mxw_Le.d.mts → color-picker.constants-BZgXQr5o.d.mts} +6 -8
  21. package/dist/js/{color-picker.misc-CtsXGrOe.d.mts → color-picker.misc-BIS3R6jk.d.mts} +8 -4
  22. package/dist/js/combobox/combobox.constants.d.mts +1 -1
  23. package/dist/js/combobox/combobox.dom.d.mts +12 -13
  24. package/dist/js/combobox/combobox.dom.mjs +15 -17
  25. package/dist/js/combobox/combobox.event.d.mts +8 -8
  26. package/dist/js/combobox/combobox.event.mjs +1 -1
  27. package/dist/js/combobox/combobox.misc.d.mts +2 -2
  28. package/dist/js/combobox/combobox.misc.mjs +2 -2
  29. package/dist/js/combobox/combobox.model.d.mts +2 -2
  30. package/dist/js/combobox/combobox.state.d.mts +3 -4
  31. package/dist/js/combobox/combobox.state.mjs +1 -1
  32. package/dist/js/combobox/index.d.mts +8 -19
  33. package/dist/js/combobox/index.mjs +21 -23
  34. package/dist/js/{combobox.constants-DZVkMP5g.d.mts → combobox.constants-Hb3bqqQJ.d.mts} +3 -3
  35. package/dist/js/combobox.misc-DRDFk6X8.d.mts +26 -0
  36. package/dist/js/combobox.model-gjEI2VqZ.d.mts +46 -0
  37. package/dist/js/{combobox.state-BfJ3Hxg8.mjs → combobox.state-AstCICiH.mjs} +30 -41
  38. package/dist/js/dialog/dialog.model.d.mts +1 -1
  39. package/dist/js/dialog/index.d.mts +1 -1
  40. package/dist/js/{dialog.model-DX2mndMh.d.mts → dialog.model-HVzYWoDo.d.mts} +3 -3
  41. package/dist/js/floatable/floatable.embedded.d.mts +1 -1
  42. package/dist/js/floatable/floatable.embedded.mjs +2 -2
  43. package/dist/js/floatable/floatable.standalone.d.mts +1 -1
  44. package/dist/js/{floatable.embedded-MeTyXjFn.d.mts → floatable.embedded-ncshL3Sa.d.mts} +3 -3
  45. package/dist/js/focus-trap/focus-trap.embedded.d.mts +1 -1
  46. package/dist/js/focus-trap/focus-trap.embedded.mjs +10 -9
  47. package/dist/js/focus-trap/focus-trap.model.d.mts +1 -1
  48. package/dist/js/focus-trap/focus-trap.standalone.d.mts +2 -2
  49. package/dist/js/{focus-trap.embedded-DIU05m1z.d.mts → focus-trap.embedded-DpcPkP7c.d.mts} +3 -3
  50. package/dist/js/{focus-trap.model-BeX6UYlw.d.mts → focus-trap.model-CpltX5B5.d.mts} +1 -1
  51. package/dist/js/index.d.mts +16 -16
  52. package/dist/js/index.mjs +3 -3
  53. package/dist/js/internal/attributable.d.mts +1 -1
  54. package/dist/js/internal/draggable/draggable.model.d.mts +1 -1
  55. package/dist/js/internal/draggable/index.d.mts +8 -8
  56. package/dist/js/internal/draggable/index.mjs +27 -18
  57. package/dist/js/internal/l10n/index.d.mts +5 -0
  58. package/dist/js/internal/l10n/index.mjs +147 -0
  59. package/dist/js/internal/l10n/l10n.model.d.mts +2 -0
  60. package/dist/js/{l10n → internal/l10n}/l10n.model.mjs +5 -2
  61. package/dist/js/internal/misc.d.mts +2 -2
  62. package/dist/js/internal/navigable/index.d.mts +3 -3
  63. package/dist/js/internal/navigable/index.mjs +1 -1
  64. package/dist/js/internal/navigable/navigable.model.d.mts +1 -1
  65. package/dist/js/internal/option-list/option-list.constants.d.mts +8 -0
  66. package/dist/js/internal/option-list/option-list.constants.mjs +22 -0
  67. package/dist/js/internal/option-list/option-list.data.d.mts +21 -0
  68. package/dist/js/internal/option-list/option-list.data.mjs +2 -0
  69. package/dist/js/internal/option-list/option-list.dom.d.mts +18 -0
  70. package/dist/js/internal/option-list/option-list.dom.mjs +2 -0
  71. package/dist/js/internal/option-list/option-list.event.d.mts +6 -0
  72. package/dist/js/internal/{listbox/listbox.event.mjs → option-list/option-list.event.mjs} +7 -7
  73. package/dist/js/internal/option-list/option-list.form.d.mts +7 -0
  74. package/dist/js/internal/{listbox/listbox.form.mjs → option-list/option-list.form.mjs} +10 -13
  75. package/dist/js/internal/option-list/option-list.misc.d.mts +13 -0
  76. package/dist/js/internal/option-list/option-list.misc.mjs +2 -0
  77. package/dist/js/internal/option-list/option-list.model.d.mts +2 -0
  78. package/dist/js/internal/option-list/option-list.state.d.mts +8 -0
  79. package/dist/js/internal/option-list/option-list.state.mjs +39 -0
  80. package/dist/js/l10n/index.d.mts +3 -9
  81. package/dist/js/l10n/index.mjs +2 -107
  82. package/dist/js/l10n.model-D1E1u35L.d.mts +54 -0
  83. package/dist/js/listbox/index.d.mts +6 -17
  84. package/dist/js/listbox/index.mjs +22 -23
  85. package/dist/js/listbox/{constants.listbox.d.mts → listbox.constants.d.mts} +1 -1
  86. package/dist/js/listbox/{constants.listbox.mjs → listbox.constants.mjs} +1 -1
  87. package/dist/js/listbox/listbox.dom.d.mts +5 -0
  88. package/dist/js/listbox/listbox.dom.mjs +2 -0
  89. package/dist/js/listbox/listbox.event.d.mts +9 -0
  90. package/dist/js/listbox/listbox.event.mjs +2 -0
  91. package/dist/js/listbox/listbox.misc.d.mts +2 -0
  92. package/dist/js/listbox/listbox.misc.mjs +2 -0
  93. package/dist/js/listbox/listbox.model.d.mts +2 -0
  94. package/dist/js/listbox/listbox.model.mjs +1 -0
  95. package/dist/js/listbox/listbox.state.d.mts +9 -0
  96. package/dist/js/listbox/listbox.state.mjs +2 -0
  97. package/dist/js/{constants.listbox-C5Ap6Ag_.d.mts → listbox.constants-DOBMwKup.d.mts} +3 -3
  98. package/dist/js/listbox.misc-DwfB4Mu_.d.mts +24 -0
  99. package/dist/js/listbox.model-C0MYWXZe.d.mts +20 -0
  100. package/dist/js/listbox.state-BrN296BM.mjs +240 -0
  101. package/dist/js/menu/index.mjs +7 -3
  102. package/dist/js/menu/menu.model.d.mts +7 -7
  103. package/dist/js/movable/movable.embedded.d.mts +1 -1
  104. package/dist/js/movable/movable.embedded.mjs +21 -18
  105. package/dist/js/movable/movable.model.d.mts +1 -1
  106. package/dist/js/movable/movable.standalone.d.mts +2 -2
  107. package/dist/js/{movable.embedded-DoyXLegc.d.mts → movable.embedded-C1bDTLGs.d.mts} +2 -2
  108. package/dist/js/{movable.model-BHaK_mKw.d.mts → movable.model-D9nnPWKk.d.mts} +41 -41
  109. package/dist/js/{navigable.model-BPOM8DZk.d.mts → navigable.model-BqoR6iBv.d.mts} +1 -1
  110. package/dist/js/{listbox.data-BQyZGKgr.mjs → option-list.data-CgMyUwPc.mjs} +70 -71
  111. package/dist/js/option-list.model-CCPUlPeX.d.mts +169 -0
  112. package/dist/js/popover/index.d.mts +2 -2
  113. package/dist/js/popover/index.mjs +1 -1
  114. package/dist/js/popover/popover.model.d.mts +1 -1
  115. package/dist/js/{popover.model-ubKNG612.d.mts → popover.model-DiLdz0Hc.d.mts} +4 -4
  116. package/dist/js/resizable/resizable.embedded.d.mts +1 -1
  117. package/dist/js/resizable/resizable.model.d.mts +1 -1
  118. package/dist/js/resizable/resizable.standalone.d.mts +2 -2
  119. package/dist/js/{resizable.embedded-Bf1qBUdt.d.mts → resizable.embedded-BemH-7Re.d.mts} +2 -2
  120. package/dist/js/{resizable.model-BwzJcTVJ.d.mts → resizable.model-YEtcC9li.d.mts} +3 -3
  121. package/dist/js/sortable/sortable.embedded.d.mts +1 -1
  122. package/dist/js/sortable/sortable.embedded.mjs +46 -38
  123. package/dist/js/sortable/sortable.model.d.mts +1 -1
  124. package/dist/js/sortable/sortable.standalone.d.mts +2 -2
  125. package/dist/js/{sortable.embedded-DzBKAwSG.d.mts → sortable.embedded-CrEGff9k.d.mts} +2 -2
  126. package/dist/js/splitter/index.d.mts +1 -1
  127. package/dist/js/splitter/splitter.model.d.mts +1 -1
  128. package/dist/js/{splitter.model-DOLNjLVS.d.mts → splitter.model-C24W6eZ7.d.mts} +2 -2
  129. package/dist/js/tabs/index.d.mts +2 -2
  130. package/dist/js/tabs/index.mjs +1 -1
  131. package/dist/js/tabs/tabs.model.d.mts +1 -1
  132. package/dist/js/{tabs.model-DRBX_JtI.d.mts → tabs.model-BHPy7fPo.d.mts} +1 -1
  133. package/dist/js/toolbar/toolbar.model.d.mts +2 -2
  134. package/dist/js/tooltip/index.d.mts +2 -2
  135. package/dist/js/tooltip/tooltip.model.d.mts +1 -1
  136. package/dist/js/{tooltip.model-DRkY_BsL.d.mts → tooltip.model-BpNStw5z.d.mts} +3 -3
  137. package/package.json +1 -1
  138. package/dist/js/color-picker.event-Cksj5TvS.mjs +0 -500
  139. package/dist/js/combobox.misc-C1tPZZDi.d.mts +0 -22
  140. package/dist/js/combobox.model-oDV06XCN.d.mts +0 -44
  141. package/dist/js/internal/listbox/listbox.constants.d.mts +0 -8
  142. package/dist/js/internal/listbox/listbox.constants.mjs +0 -22
  143. package/dist/js/internal/listbox/listbox.data.d.mts +0 -19
  144. package/dist/js/internal/listbox/listbox.data.mjs +0 -2
  145. package/dist/js/internal/listbox/listbox.dom.d.mts +0 -65
  146. package/dist/js/internal/listbox/listbox.dom.mjs +0 -2
  147. package/dist/js/internal/listbox/listbox.event.d.mts +0 -4
  148. package/dist/js/internal/listbox/listbox.form.d.mts +0 -5
  149. package/dist/js/internal/listbox/listbox.misc.d.mts +0 -11
  150. package/dist/js/internal/listbox/listbox.misc.mjs +0 -2
  151. package/dist/js/internal/listbox/listbox.model.d.mts +0 -2
  152. package/dist/js/internal/listbox/listbox.state.d.mts +0 -6
  153. package/dist/js/internal/listbox/listbox.state.mjs +0 -39
  154. package/dist/js/l10n/l10n.model.d.mts +0 -2
  155. package/dist/js/l10n.model-D6a9frgl.d.mts +0 -26
  156. package/dist/js/listbox/event.listbox.d.mts +0 -7
  157. package/dist/js/listbox/event.listbox.mjs +0 -48
  158. package/dist/js/listbox/misc.listbox.d.mts +0 -2
  159. package/dist/js/listbox/misc.listbox.mjs +0 -2
  160. package/dist/js/listbox/state.listbox.d.mts +0 -9
  161. package/dist/js/listbox/state.listbox.mjs +0 -2
  162. package/dist/js/listbox.model-CuBOj4qe.d.mts +0 -129
  163. package/dist/js/misc.listbox-CjfBUbHD.mjs +0 -154
  164. package/dist/js/misc.listbox-CtoGvXQo.d.mts +0 -20
  165. /package/dist/js/internal/{listbox/listbox.model.mjs → option-list/option-list.model.mjs} +0 -0
@@ -0,0 +1,147 @@
1
+ import { L10N_MESSAGE_DEFAULT, L10N_MESSAGE_ITEM_CREATE, L10N_MESSAGE_ITEM_UPDATE_KEY, L10N_MESSAGE_ITEM_UPDATE_VALUE, L10N_MESSAGE_OBJECT_CREATE, L10N_MESSAGE_OBJECT_UPDATE, L10N_SYMBOL, L10N_TYPE_DEFAULT, L10N_TYPE_INSTANCE } from "./l10n.model.mjs";
2
+ import { isPlainObject } from "@oscarpalmer/atoms/is";
3
+ //#region src/js/internal/l10n/index.ts
4
+ function OuiDefaultLocalizations(values) {
5
+ this[L10N_SYMBOL] = {
6
+ defaults: values,
7
+ keys: new Set(Object.keys(values)),
8
+ type: L10N_TYPE_DEFAULT,
9
+ values: {}
10
+ };
11
+ }
12
+ OuiDefaultLocalizations.prototype.localize = localizeDefault;
13
+ OuiDefaultLocalizations.prototype.setDefaults = setDefaultLocalizations;
14
+ OuiDefaultLocalizations.prototype.setLanguages = setLocalizations;
15
+ Object.defineProperties(OuiDefaultLocalizations.prototype, {
16
+ keys: {
17
+ enumerable: true,
18
+ get: getKeys
19
+ },
20
+ values: {
21
+ enumerable: true,
22
+ get: getValues
23
+ }
24
+ });
25
+ function OuiLocalizations(defaults) {
26
+ this[L10N_SYMBOL] = {
27
+ defaults,
28
+ keys: new Set(defaults.keys),
29
+ values: {},
30
+ type: L10N_TYPE_INSTANCE
31
+ };
32
+ }
33
+ OuiLocalizations.prototype.localize = localizeWithLanguage;
34
+ OuiLocalizations.prototype.set = setLocalizations;
35
+ Object.defineProperties(OuiLocalizations.prototype, { defaults: {
36
+ enumerable: true,
37
+ get: getDefaults
38
+ } });
39
+ function createDefaultLocalizations(values) {
40
+ validateDefaultValues(values);
41
+ return new OuiDefaultLocalizations(values);
42
+ }
43
+ function createLocalizations(defaults) {
44
+ validateDefaultInstance(defaults);
45
+ return new OuiLocalizations(defaults);
46
+ }
47
+ function getDefaults() {
48
+ return this[L10N_SYMBOL].defaults;
49
+ }
50
+ function getKeys() {
51
+ return [...this[L10N_SYMBOL].keys];
52
+ }
53
+ function getLanguage(parameters) {
54
+ return (typeof parameters?.language === "string" ? parameters.language : parameters?.element?.closest("[lang]")?.getAttribute("lang") ?? document.documentElement.lang).toLowerCase();
55
+ }
56
+ function getLocalization(key, parameters, defaultLocalizations, instanceLocalizations) {
57
+ const defaultState = defaultLocalizations?.[L10N_SYMBOL];
58
+ const instanceState = instanceLocalizations?.[L10N_SYMBOL];
59
+ const language = getLanguage(parameters);
60
+ const values = defaultState == null ? instanceState == null ? [] : [instanceState.values, instanceState.defaults.values.languages] : [defaultState.values];
61
+ const { length } = values;
62
+ let localization;
63
+ let shortLanguage;
64
+ for (let index = 0; index < length; index += 1) {
65
+ const value = values[index];
66
+ localization = value?.[language]?.[key];
67
+ if (localization != null) break;
68
+ shortLanguage ??= language.split("-")[0];
69
+ if (shortLanguage === language) continue;
70
+ localization = value?.[shortLanguage]?.[key];
71
+ if (localization != null) break;
72
+ }
73
+ if (localization != null) return localization;
74
+ return defaultState?.defaults[key] ?? instanceState?.defaults.values.defaults[key] ?? "";
75
+ }
76
+ function getValues() {
77
+ const { defaults, values } = this[L10N_SYMBOL];
78
+ return {
79
+ defaults,
80
+ languages: values
81
+ };
82
+ }
83
+ function isValidLocalization(value) {
84
+ return typeof value === "string" || typeof value === "function";
85
+ }
86
+ function localizeDefault(key, parameters) {
87
+ return localizeValue(key, parameters, this, void 0);
88
+ }
89
+ function localizeWithLanguage(key, parameters) {
90
+ return localizeValue(key, parameters, void 0, this);
91
+ }
92
+ function localizeValue(key, parameters, defaultLocalizations, instanceLocalizations) {
93
+ const localization = getLocalization(key, parameters, defaultLocalizations, instanceLocalizations);
94
+ if (typeof localization === "function") return localization(...Array.isArray(parameters?.arguments) ? parameters.arguments : []);
95
+ return localization;
96
+ }
97
+ async function setDefaultLocalizations(values) {
98
+ if (typeof values !== "object" || values == null) throw new TypeError(L10N_MESSAGE_OBJECT_UPDATE);
99
+ const state = this[L10N_SYMBOL];
100
+ return updateLocalizationValues(state, state.defaults, values).then((count) => count > 0);
101
+ }
102
+ function setLocalizations(first, second) {
103
+ return updateLocalizations(this, typeof first === "string" ? { [first]: second } : first);
104
+ }
105
+ async function updateLocalizationValues(state, to, from) {
106
+ const keys = Object.keys(from);
107
+ const keysLength = keys.length;
108
+ const toAsPlainObject = to;
109
+ let count = 0;
110
+ for (let keysIndex = 0; keysIndex < keysLength; keysIndex += 1) {
111
+ const key = keys[keysIndex];
112
+ const keyValue = from[key];
113
+ const normalizedKey = key.toLowerCase();
114
+ if (!state.keys.has(normalizedKey)) throw new TypeError(L10N_MESSAGE_ITEM_UPDATE_KEY);
115
+ if (!isValidLocalization(keyValue)) throw new TypeError(L10N_MESSAGE_ITEM_UPDATE_VALUE);
116
+ if (state.keys.has(normalizedKey) && isValidLocalization(keyValue)) {
117
+ count += 1;
118
+ toAsPlainObject[normalizedKey] = keyValue;
119
+ }
120
+ }
121
+ return count;
122
+ }
123
+ async function updateLocalizations(localizations, values) {
124
+ if (typeof values !== "object" || values == null) throw new TypeError(L10N_MESSAGE_OBJECT_UPDATE);
125
+ const state = localizations[L10N_SYMBOL];
126
+ const languages = Object.keys(values);
127
+ const languagesLength = languages.length;
128
+ let count = 0;
129
+ for (let languagesIndex = 0; languagesIndex < languagesLength; languagesIndex += 1) {
130
+ const language = languages[languagesIndex];
131
+ const languageValue = values[language];
132
+ if (typeof languageValue !== "object" || languageValue == null) throw new TypeError(L10N_MESSAGE_OBJECT_UPDATE);
133
+ const normalizedLanguage = language.toLowerCase();
134
+ state.values[normalizedLanguage] ??= {};
135
+ count += await updateLocalizationValues(state, state.values[normalizedLanguage], languageValue);
136
+ }
137
+ return count > 0;
138
+ }
139
+ function validateDefaultInstance(value) {
140
+ if (typeof value !== "object" || value === null || !(L10N_SYMBOL in value)) throw new TypeError(L10N_MESSAGE_DEFAULT);
141
+ }
142
+ function validateDefaultValues(value) {
143
+ if (!isPlainObject(value) || Object.keys(value).length === 0) throw new TypeError(L10N_MESSAGE_OBJECT_CREATE);
144
+ if (!Object.values(value).every(isValidLocalization)) throw new TypeError(L10N_MESSAGE_ITEM_CREATE);
145
+ }
146
+ //#endregion
147
+ export { createDefaultLocalizations, createLocalizations };
@@ -0,0 +1,2 @@
1
+ import { _ as OuiLocalizationsValues, a as L10N_MESSAGE_OBJECT_CREATE, c as L10N_TYPE_DEFAULT, d as OuiDefaultLocalizationsState, f as OuiDefaultLocalizationsValues, g as OuiLocalizationsType, h as OuiLocalizationsState, i as L10N_MESSAGE_ITEM_UPDATE_VALUE, l as L10N_TYPE_INSTANCE, m as OuiLocalizationsParameters, n as L10N_MESSAGE_ITEM_CREATE, o as L10N_MESSAGE_OBJECT_UPDATE, p as OuiLocalizations, r as L10N_MESSAGE_ITEM_UPDATE_KEY, s as L10N_SYMBOL, t as L10N_MESSAGE_DEFAULT, u as OuiDefaultLocalizations } from "../../l10n.model-D1E1u35L.mjs";
2
+ export { L10N_MESSAGE_DEFAULT, L10N_MESSAGE_ITEM_CREATE, L10N_MESSAGE_ITEM_UPDATE_KEY, L10N_MESSAGE_ITEM_UPDATE_VALUE, L10N_MESSAGE_OBJECT_CREATE, L10N_MESSAGE_OBJECT_UPDATE, L10N_SYMBOL, L10N_TYPE_DEFAULT, L10N_TYPE_INSTANCE, OuiDefaultLocalizations, OuiDefaultLocalizationsState, OuiDefaultLocalizationsValues, OuiLocalizations, OuiLocalizationsParameters, OuiLocalizationsState, OuiLocalizationsType, OuiLocalizationsValues };
@@ -1,9 +1,12 @@
1
- //#region src/js/l10n/l10n.model.ts
1
+ //#region src/js/internal/l10n/l10n.model.ts
2
+ const L10N_MESSAGE_DEFAULT = "Default localizations must be an instance of OuiDefaultLocalizations.";
2
3
  const L10N_MESSAGE_ITEM_CREATE = "Localization item must be a string or a function.";
3
4
  const L10N_MESSAGE_ITEM_UPDATE_KEY = "Localization item key must be known.";
4
5
  const L10N_MESSAGE_ITEM_UPDATE_VALUE = "Localization item value must be a string or a function.";
5
6
  const L10N_MESSAGE_OBJECT_CREATE = "Default localizations must be a non-empty plain object.";
6
7
  const L10N_MESSAGE_OBJECT_UPDATE = "Localizations update object must be a plain object.";
8
+ const L10N_TYPE_DEFAULT = "default";
9
+ const L10N_TYPE_INSTANCE = "instance";
7
10
  const L10N_SYMBOL = Symbol("l10n");
8
11
  //#endregion
9
- export { L10N_MESSAGE_ITEM_CREATE, L10N_MESSAGE_ITEM_UPDATE_KEY, L10N_MESSAGE_ITEM_UPDATE_VALUE, L10N_MESSAGE_OBJECT_CREATE, L10N_MESSAGE_OBJECT_UPDATE, L10N_SYMBOL };
12
+ export { L10N_MESSAGE_DEFAULT, L10N_MESSAGE_ITEM_CREATE, L10N_MESSAGE_ITEM_UPDATE_KEY, L10N_MESSAGE_ITEM_UPDATE_VALUE, L10N_MESSAGE_OBJECT_CREATE, L10N_MESSAGE_OBJECT_UPDATE, L10N_SYMBOL, L10N_TYPE_DEFAULT, L10N_TYPE_INSTANCE };
@@ -1,7 +1,7 @@
1
1
  import { AnyAriaBooleanAttribute } from "@oscarpalmer/toretto/models";
2
2
  //#region src/js/internal/misc.d.ts
3
3
  export declare function copyValue(value: string, onSuccess?: () => void, onError?: () => void): void;
4
- export declare function getAttributeValue<Value>(element: HTMLElement, attribute: string, possible: Set<Value>, defaultValue: Value): Value;
5
- export declare function getBooleanAriaValue(element: HTMLElement, attribute: AnyAriaBooleanAttribute): boolean;
4
+ export declare function getAttributeValue<Value>(element: Element, attribute: string, possible: Set<Value>, defaultValue: Value): Value;
5
+ export declare function getBooleanAriaValue(element: Element, attribute: AnyAriaBooleanAttribute): boolean;
6
6
  export declare const EXPRESSION_WHITESPACE: RegExp;
7
7
  //#endregion
@@ -1,6 +1,6 @@
1
- import { d as OuiNavigable, h as OuiNavigableOrientation, m as OuiNavigableOptions } from "../../navigable.model-BPOM8DZk.mjs";
1
+ import { d as OuiNavigable, h as OuiNavigableOrientation, m as OuiNavigableOptions } from "../../navigable.model-BqoR6iBv.mjs";
2
2
  //#region src/js/internal/navigable/index.d.ts
3
- export declare function getNavigable(element: HTMLElement, options: OuiNavigableOptions): OuiNavigable;
4
- export declare function getNavigableOrientation(element: HTMLElement, vertical: boolean, aria?: boolean): OuiNavigableOrientation;
3
+ export declare function getNavigable(element: Element, options: OuiNavigableOptions): OuiNavigable;
4
+ export declare function getNavigableOrientation(element: Element, vertical: boolean, aria?: boolean): OuiNavigableOrientation;
5
5
  export declare function updateNavigableFocus(navigable: OuiNavigable, focus: boolean, items?: HTMLElement[]): void;
6
6
  //#endregion
@@ -63,7 +63,7 @@ function onClick(navigable, event) {
63
63
  if (index === -1) return;
64
64
  if (index !== active.index) onNavigate(navigable, index, items, false);
65
65
  options.onActivate?.(navigable);
66
- item.focus();
66
+ item?.focus?.();
67
67
  }
68
68
  function onNavigate(navigable, index, items, focus) {
69
69
  const { active, options } = navigable[NAVIGABLE_SYMBOL];
@@ -1,2 +1,2 @@
1
- import { a as NAVIGABLE_KEYS_NEXT, c as NAVIGABLE_ORIENTATION_HORIZONTAL, d as OuiNavigable, f as OuiNavigableActive, g as OuiNavigableState, h as OuiNavigableOrientation, i as NAVIGABLE_KEYS_HORIZONTAL, l as NAVIGABLE_ORIENTATION_VERTICAL, m as OuiNavigableOptions, n as NAVIGABLE_KEYS_ACTIVATE, o as NAVIGABLE_KEYS_VERTICAL, p as OuiNavigableCallback, r as NAVIGABLE_KEYS_ALL, s as NAVIGABLE_ORIENTATIONS, t as NAVIGABLE_KEYS_ABSOLUTE, u as NAVIGABLE_SYMBOL } from "../../navigable.model-BPOM8DZk.mjs";
1
+ import { a as NAVIGABLE_KEYS_NEXT, c as NAVIGABLE_ORIENTATION_HORIZONTAL, d as OuiNavigable, f as OuiNavigableActive, g as OuiNavigableState, h as OuiNavigableOrientation, i as NAVIGABLE_KEYS_HORIZONTAL, l as NAVIGABLE_ORIENTATION_VERTICAL, m as OuiNavigableOptions, n as NAVIGABLE_KEYS_ACTIVATE, o as NAVIGABLE_KEYS_VERTICAL, p as OuiNavigableCallback, r as NAVIGABLE_KEYS_ALL, s as NAVIGABLE_ORIENTATIONS, t as NAVIGABLE_KEYS_ABSOLUTE, u as NAVIGABLE_SYMBOL } from "../../navigable.model-BqoR6iBv.mjs";
2
2
  export { NAVIGABLE_KEYS_ABSOLUTE, NAVIGABLE_KEYS_ACTIVATE, NAVIGABLE_KEYS_ALL, NAVIGABLE_KEYS_HORIZONTAL, NAVIGABLE_KEYS_NEXT, NAVIGABLE_KEYS_VERTICAL, NAVIGABLE_ORIENTATIONS, NAVIGABLE_ORIENTATION_HORIZONTAL, NAVIGABLE_ORIENTATION_VERTICAL, NAVIGABLE_SYMBOL, OuiNavigable, OuiNavigableActive, OuiNavigableCallback, OuiNavigableOptions, OuiNavigableOrientation, OuiNavigableState };
@@ -0,0 +1,8 @@
1
+ import { _ as OptionListType } from "../../option-list.model-CCPUlPeX.mjs";
2
+ //#region src/js/internal/option-list/option-list.constants.d.ts
3
+ export declare const OPTION_LIST_KEYS_ACTIVATION: Set<string>;
4
+ export declare const LISTBOX_KEYS_NAVIGATION: Set<string>;
5
+ export declare const OPTION_LIST_KEYS_SELECTION: Set<string>;
6
+ export declare const OPTION_LIST_TYPES: Set<OptionListType>;
7
+ export declare const optionListScrollOptions: ScrollIntoViewOptions;
8
+ //#endregion
@@ -0,0 +1,22 @@
1
+ //#region src/js/internal/option-list/option-list.constants.ts
2
+ const OPTION_LIST_KEYS_ACTIVATION = /* @__PURE__ */ new Set([
3
+ " ",
4
+ "Backspace",
5
+ "Delete",
6
+ "Enter"
7
+ ]);
8
+ const LISTBOX_KEYS_NAVIGATION = /* @__PURE__ */ new Set([
9
+ "ArrowDown",
10
+ "ArrowUp",
11
+ "PageDown",
12
+ "PageUp"
13
+ ]);
14
+ const OPTION_LIST_KEYS_SELECTION = /* @__PURE__ */ new Set(["ArrowRight", "End"]);
15
+ const OPTION_LIST_TYPES = /* @__PURE__ */ new Set(["autocomplete", "select"]);
16
+ const optionListScrollOptions = {
17
+ behavior: "auto",
18
+ block: "nearest",
19
+ inline: "nearest"
20
+ };
21
+ //#endregion
22
+ export { LISTBOX_KEYS_NAVIGATION, OPTION_LIST_KEYS_ACTIVATION, OPTION_LIST_KEYS_SELECTION, OPTION_LIST_TYPES, optionListScrollOptions };
@@ -0,0 +1,21 @@
1
+ import { _ as OuiLocalizationsValues } from "../../l10n.model-D1E1u35L.mjs";
2
+ import { g as OptionListState } from "../../option-list.model-CCPUlPeX.mjs";
3
+ import { PlainObject } from "@oscarpalmer/atoms/models";
4
+ //#region src/js/internal/option-list/option-list.data.d.ts
5
+ type ApplySelectionParameters<State extends PlainObject, Localizations extends OuiLocalizationsValues> = {
6
+ added: boolean;
7
+ emit?: boolean;
8
+ option?: HTMLElement;
9
+ scroll?: boolean;
10
+ selected?: HTMLElement[];
11
+ state: OptionListState<State, Localizations>;
12
+ values?: string[];
13
+ };
14
+ export declare function applyOptionListSelection<State extends PlainObject, Localizations extends OuiLocalizationsValues>(parameters: ApplySelectionParameters<State, Localizations>): void;
15
+ export declare function filterOptionList<State extends PlainObject, Localizations extends OuiLocalizationsValues>(type: InputEvent["inputType"], state: OptionListState<State, Localizations>): void;
16
+ export declare function filterOptionListOption<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, value: unknown, textContent?: boolean): HTMLElement | undefined;
17
+ export declare function filterOptionListOptions<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>): HTMLElement | undefined;
18
+ export declare function setOptionListValue<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, value: unknown, emit?: boolean): void;
19
+ export declare function setOptionListValues<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, value: unknown[], emit?: boolean): void;
20
+ export declare function toggleOptionListOption<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, option?: HTMLElement): void;
21
+ //#endregion
@@ -0,0 +1,2 @@
1
+ import { a as setOptionListValue, i as filterOptionListOptions, n as filterOptionList, o as setOptionListValues, r as filterOptionListOption, s as toggleOptionListOption, t as applyOptionListSelection } from "../../option-list.data-CgMyUwPc.mjs";
2
+ export { applyOptionListSelection, filterOptionList, filterOptionListOption, filterOptionListOptions, setOptionListValue, setOptionListValues, toggleOptionListOption };
@@ -0,0 +1,18 @@
1
+ import { _ as OuiLocalizationsValues } from "../../l10n.model-D1E1u35L.mjs";
2
+ import { a as CreateOptionListList, f as OptionListGroup, g as OptionListState, h as OptionListPreview, i as CreateOptionListGroupParameters, n as CreateOptionListContentParameters, o as CreateOptionListOptionParameters, r as CreateOptionListFilter, s as CreateOptionListOptionsParameters, t as CreateOptionListContent } from "../../option-list.model-CCPUlPeX.mjs";
3
+ import { PlainObject } from "@oscarpalmer/atoms/models";
4
+ //#region src/js/internal/option-list/option-list.dom.d.ts
5
+ export declare function createOptionListContent(parameters: CreateOptionListContentParameters): CreateOptionListContent;
6
+ export declare function createOptionListFilter(parameters: CreateOptionListContentParameters): CreateOptionListFilter | undefined;
7
+ export declare function createOptionListGroup(parameters: CreateOptionListGroupParameters): OptionListGroup;
8
+ export declare function createOptionListHeader(parameters: CreateOptionListGroupParameters, group: HTMLOptGroupElement): HTMLElement;
9
+ export declare function createOptionListInput(parameters: CreateOptionListContentParameters, value: string): HTMLInputElement;
10
+ export declare function createOptionListList(parameters: CreateOptionListContentParameters): CreateOptionListList;
11
+ export declare function createOptionListMessage(attribute: string): HTMLDivElement;
12
+ export declare function createOptionListOption(parameters: CreateOptionListOptionParameters): HTMLElement;
13
+ export declare function createOptionListOptions(parameters: CreateOptionListOptionsParameters): HTMLElement[];
14
+ export declare function createOptionListValueLabel(id: string): HTMLSpanElement;
15
+ export declare function updateOptionListMessage<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>): void;
16
+ export declare function updateOptionListPreview<State extends PlainObject, Localizations extends OuiLocalizationsValues>(preview: OptionListPreview, state: OptionListState<State, Localizations>, active?: HTMLElement, scroll?: boolean): void;
17
+ export declare function updateOptionListValueLabel<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>): void;
18
+ //#endregion
@@ -0,0 +1,2 @@
1
+ import { _ as createOptionListValueLabel, b as updateOptionListValueLabel, c as createOptionListContent, d as createOptionListHeader, f as createOptionListInput, g as createOptionListOptions, h as createOptionListOption, l as createOptionListFilter, m as createOptionListMessage, p as createOptionListList, u as createOptionListGroup, v as updateOptionListMessage, y as updateOptionListPreview } from "../../option-list.data-CgMyUwPc.mjs";
2
+ export { createOptionListContent, createOptionListFilter, createOptionListGroup, createOptionListHeader, createOptionListInput, createOptionListList, createOptionListMessage, createOptionListOption, createOptionListOptions, createOptionListValueLabel, updateOptionListMessage, updateOptionListPreview, updateOptionListValueLabel };
@@ -0,0 +1,6 @@
1
+ import { _ as OuiLocalizationsValues } from "../../l10n.model-D1E1u35L.mjs";
2
+ import { g as OptionListState } from "../../option-list.model-CCPUlPeX.mjs";
3
+ import { PlainObject } from "@oscarpalmer/atoms/models";
4
+ //#region src/js/internal/option-list/option-list.event.d.ts
5
+ export declare function processOptionListKeydown<State extends PlainObject, Localizations extends OuiLocalizationsValues>(event: KeyboardEvent, state: OptionListState<State, Localizations>): void;
6
+ //#endregion
@@ -1,8 +1,8 @@
1
- import { LISTBOX_KEYS_NAVIGATION, LISTBOX_KEYS_SELECTION } from "./listbox.constants.mjs";
2
- import { S as getListboxVisibleOptions } from "../../listbox.data-BQyZGKgr.mjs";
1
+ import { LISTBOX_KEYS_NAVIGATION, OPTION_LIST_KEYS_SELECTION } from "./option-list.constants.mjs";
2
+ import { S as getOptionListVisibleOptions } from "../../option-list.data-CgMyUwPc.mjs";
3
3
  import { clamp } from "@oscarpalmer/atoms/number";
4
- //#region src/js/internal/listbox/listbox.event.ts
5
- function processListboxKeydown(event, state) {
4
+ //#region src/js/internal/option-list/option-list.event.ts
5
+ function processOptionListKeydown(event, state) {
6
6
  const { component, form } = state;
7
7
  const { callbacks, disabled, readonly, type } = component;
8
8
  const ignore = disabled || readonly;
@@ -22,7 +22,7 @@ function processListboxKeydown(event, state) {
22
22
  preventDefault = false;
23
23
  callbacks.keydown.onEscape?.(state);
24
24
  break;
25
- case !isSelect && LISTBOX_KEYS_SELECTION.has(event.key):
25
+ case !isSelect && OPTION_LIST_KEYS_SELECTION.has(event.key):
26
26
  if (!ignore) callbacks.keydown.onSelection?.(state);
27
27
  break;
28
28
  case LISTBOX_KEYS_NAVIGATION.has(event.key):
@@ -40,7 +40,7 @@ function processListboxKeydown(event, state) {
40
40
  function onNavigation(event, state) {
41
41
  const { active, autocomplete, callbacks, type } = state.component;
42
42
  const skip = callbacks.keydown.skipNavigation?.(state) ?? false;
43
- const visible = getListboxVisibleOptions(state);
43
+ const visible = getOptionListVisibleOptions(state);
44
44
  if (visible.length === 0) return;
45
45
  let next;
46
46
  if (skip || active == null) next = active ?? visible.at(event.key === "ArrowDown" ? 0 : -1);
@@ -63,4 +63,4 @@ function onNavigation(event, state) {
63
63
  callbacks.keydown.onNavigation(preview, state, next ?? active ?? visible[0]);
64
64
  }
65
65
  //#endregion
66
- export { processListboxKeydown };
66
+ export { processOptionListKeydown };
@@ -0,0 +1,7 @@
1
+ import { _ as OuiLocalizationsValues } from "../../l10n.model-D1E1u35L.mjs";
2
+ import { g as OptionListState } from "../../option-list.model-CCPUlPeX.mjs";
3
+ import { PlainObject } from "@oscarpalmer/atoms/models";
4
+ //#region src/js/internal/option-list/option-list.form.d.ts
5
+ export declare function updateOptionListForm<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, values: string[], emit?: boolean): void;
6
+ export declare function updateOptionListValidity<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>): void;
7
+ //#endregion
@@ -1,7 +1,6 @@
1
- import { getLocalization, localize } from "../../l10n/index.mjs";
2
1
  import { dispatch } from "@oscarpalmer/toretto/event";
3
- //#region src/js/internal/listbox/listbox.form.ts
4
- function updateListboxForm(state, values, emit) {
2
+ //#region src/js/internal/option-list/option-list.form.ts
3
+ function updateOptionListForm(state, values, emit) {
5
4
  const { component, form } = state;
6
5
  const { callbacks, host, multiple, name } = component;
7
6
  let value;
@@ -13,20 +12,18 @@ function updateListboxForm(state, values, emit) {
13
12
  component.values.current = values;
14
13
  form.internals.setFormValue(value, JSON.stringify(values));
15
14
  callbacks.data.onForm(state);
16
- updateListboxValidity(state);
15
+ updateOptionListValidity(state);
17
16
  if (emit ?? true) dispatch(host, "oui:change");
18
17
  }
19
- function updateListboxValidity(state) {
18
+ function updateOptionListValidity(state) {
20
19
  const { component, form } = state;
21
20
  const { autocomplete, filter, host, listbox, localizations, max, min, multiple, options, required } = component;
22
21
  if (autocomplete.none && !listbox) {
23
22
  const valueMissing = required && filter.element.value.length === 0;
24
- const localization = getLocalization(localizations.global, host, "invalid", localizations.component);
25
- form.internals.setValidity({ valueMissing }, localize(localization, {}, []));
23
+ form.internals.setValidity({ valueMissing }, localizations.localize("invalid", { element: host }));
26
24
  form.internals.checkValidity();
27
25
  return;
28
26
  }
29
- let data = {};
30
27
  let error;
31
28
  let key;
32
29
  let parameters = [];
@@ -36,21 +33,21 @@ function updateListboxValidity(state) {
36
33
  key = "input";
37
34
  break;
38
35
  case multiple && typeof max === "number" && options.selected.length > max:
39
- data = { amount: max };
40
36
  error = "rangeOverflow";
41
37
  key = "max";
42
38
  parameters = [max];
43
39
  break;
44
40
  case multiple && typeof min === "number" && options.selected.length < min:
45
- data = { amount: min };
46
41
  error = "rangeUnderflow";
47
42
  key = "min";
48
43
  parameters = [min];
49
44
  }
50
- const localization = key == null ? void 0 : getLocalization(localizations.global, host, key, localizations.component);
51
- const message = localization == null ? void 0 : localize(localization, data, parameters);
45
+ const message = key == null ? void 0 : localizations.localize(key, {
46
+ arguments: parameters,
47
+ element: host
48
+ });
52
49
  form.internals.setValidity(error == null ? {} : { [error]: true }, message);
53
50
  form.internals.checkValidity();
54
51
  }
55
52
  //#endregion
56
- export { updateListboxForm, updateListboxValidity };
53
+ export { updateOptionListForm, updateOptionListValidity };
@@ -0,0 +1,13 @@
1
+ import { _ as OuiLocalizationsValues } from "../../l10n.model-D1E1u35L.mjs";
2
+ import { g as OptionListState } from "../../option-list.model-CCPUlPeX.mjs";
3
+ import { PlainObject } from "@oscarpalmer/atoms/models";
4
+ //#region src/js/internal/option-list/option-list.misc.d.ts
5
+ export declare function generateOptionListIds(prefix: string, select: HTMLSelectElement): void;
6
+ export declare function getOptionListVisibleOptions<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>): Element[];
7
+ export declare function setOptionListDisabled<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, value: boolean): void;
8
+ export declare function setOptionListFilter<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, value: unknown): void;
9
+ export declare function setOptionListLimit<State extends PlainObject, Localizations extends OuiLocalizationsValues>(type: "max" | "min", state: OptionListState<State, Localizations>, value?: unknown): void;
10
+ export declare function setOptionListMultiple(element: Element, value: boolean): void;
11
+ export declare function setOptionListReadonly<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, value: boolean): void;
12
+ export declare function setOptionListRequired<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, value: boolean): void;
13
+ //#endregion
@@ -0,0 +1,2 @@
1
+ import { C as setOptionListDisabled, D as setOptionListReadonly, E as setOptionListMultiple, O as setOptionListRequired, S as getOptionListVisibleOptions, T as setOptionListLimit, w as setOptionListFilter, x as generateOptionListIds } from "../../option-list.data-CgMyUwPc.mjs";
2
+ export { generateOptionListIds, getOptionListVisibleOptions, setOptionListDisabled, setOptionListFilter, setOptionListLimit, setOptionListMultiple, setOptionListReadonly, setOptionListRequired };
@@ -0,0 +1,2 @@
1
+ import { _ as OptionListType, a as CreateOptionListList, c as OptionListAttributes, d as OptionListCallbacks, f as OptionListGroup, g as OptionListState, h as OptionListPreview, i as CreateOptionListGroupParameters, l as OptionListAutoComplete, m as OptionListOptions, n as CreateOptionListContentParameters, o as CreateOptionListOptionParameters, p as OptionListLocalizationValues, r as CreateOptionListFilter, s as CreateOptionListOptionsParameters, t as CreateOptionListContent, u as OptionListAutoCompleteType } from "../../option-list.model-CCPUlPeX.mjs";
2
+ export { CreateOptionListContent, CreateOptionListContentParameters, CreateOptionListFilter, CreateOptionListGroupParameters, CreateOptionListList, CreateOptionListOptionParameters, CreateOptionListOptionsParameters, OptionListAttributes, OptionListAutoComplete, OptionListAutoCompleteType, OptionListCallbacks, OptionListGroup, OptionListLocalizationValues, OptionListOptions, OptionListPreview, OptionListState, OptionListType };
@@ -0,0 +1,8 @@
1
+ import { _ as OuiLocalizationsValues } from "../../l10n.model-D1E1u35L.mjs";
2
+ import { g as OptionListState } from "../../option-list.model-CCPUlPeX.mjs";
3
+ import { PlainObject } from "@oscarpalmer/atoms/models";
4
+ //#region src/js/internal/option-list/option-list.state.d.ts
5
+ export declare function attachOptionList<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, set: Set<OptionListState<State, Localizations>>, onAttach: (state: OptionListState<State, Localizations>) => void): void;
6
+ export declare function detachOptionList<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, set: Set<OptionListState<State, Localizations>>, onDetach: (state: OptionListState<State, Localizations>) => void): void;
7
+ export declare function initializeOptionListState<State extends PlainObject, Localizations extends OuiLocalizationsValues>(state: OptionListState<State, Localizations>, set: Set<OptionListState<State, Localizations>>, onAttach: (state: OptionListState<State, Localizations>) => void): OptionListState<State, Localizations>;
8
+ //#endregion
@@ -0,0 +1,39 @@
1
+ import { updateOptionListForm } from "./option-list.form.mjs";
2
+ import { C as setOptionListDisabled, D as setOptionListReadonly, E as setOptionListMultiple, O as setOptionListRequired, T as setOptionListLimit, b as updateOptionListValueLabel, i as filterOptionListOptions, v as updateOptionListMessage, y as updateOptionListPreview } from "../../option-list.data-CgMyUwPc.mjs";
3
+ import { getAttribute } from "@oscarpalmer/toretto/attribute";
4
+ //#region src/js/internal/option-list/option-list.state.ts
5
+ function attachOptionList(state, set, onAttach) {
6
+ const { filter, id, label } = state.component;
7
+ label.element.htmlFor = filter.element.id;
8
+ label.element.id = `${id}_label`;
9
+ onAttach(state);
10
+ set.add(state);
11
+ }
12
+ function detachOptionList(state, set, onDetach) {
13
+ const { label, select } = state.component;
14
+ const listeners = state.component.listeners.splice(0);
15
+ const { length } = listeners;
16
+ for (let index = 0; index < length; index += 1) listeners[index]();
17
+ label.element.htmlFor = select.id;
18
+ label.element.id = label.id;
19
+ onDetach(state);
20
+ set.delete(state);
21
+ }
22
+ function initializeOptionListState(state, set, onAttach) {
23
+ const { component } = state;
24
+ attachOptionList(state, set, onAttach);
25
+ setOptionListDisabled(state, component.disabled);
26
+ setOptionListLimit("max", state, getAttribute(component.host, "max"));
27
+ setOptionListLimit("min", state, getAttribute(component.host, "min"));
28
+ setOptionListMultiple(component.host, component.multiple);
29
+ setOptionListReadonly(state, component.readonly);
30
+ setOptionListRequired(state, component.required);
31
+ filterOptionListOptions(state);
32
+ updateOptionListForm(state, component.values.current, false);
33
+ updateOptionListMessage(state);
34
+ updateOptionListValueLabel(state);
35
+ if (component.options.selected.length > 0) updateOptionListPreview("none", state, component.options.selected[0], false);
36
+ return state;
37
+ }
38
+ //#endregion
39
+ export { attachOptionList, detachOptionList, initializeOptionListState };
@@ -1,9 +1,3 @@
1
- import { c as OuiLocalizations, s as OuiLocalizationParameters, u as OuiLocalizationsValues } from "../l10n.model-D6a9frgl.mjs";
2
- import { GenericCallback } from "@oscarpalmer/atoms/models";
3
- //#region src/js/l10n/index.d.ts
4
- export declare function createLocalizations<Localizations extends OuiLocalizationsValues>(defaults: Localizations): OuiLocalizations<Localizations>;
5
- export declare function getLanguage(element: Element): string;
6
- export declare function getLocalization<Localizations extends OuiLocalizationsValues, Key extends keyof Localizations>(localizations: OuiLocalizations<Localizations>, element: Element, key: Key, value: Record<string, Partial<Localizations>>): Localizations[Key] | GenericCallback;
7
- export declare function localize<Localizations extends OuiLocalizationsValues, Key extends keyof Localizations, Localization extends Localizations[Key]>(localization: Localization, data: Record<string, unknown>, parameters: OuiLocalizationParameters<Localization>): string;
8
- export declare function updateLocalizations<Localizations extends OuiLocalizationsValues>(instance: OuiLocalizations<Localizations>, values: Record<string, Partial<Localizations>>, destination: Record<string, Partial<Localizations>>, onAfter?: () => void): void;
9
- //#endregion
1
+ import { p as OuiLocalizations, u as OuiDefaultLocalizations } from "../l10n.model-D1E1u35L.mjs";
2
+ import { createDefaultLocalizations, createLocalizations } from "../internal/l10n/index.mjs";
3
+ export { type OuiDefaultLocalizations, type OuiLocalizations, createDefaultLocalizations, createLocalizations };
@@ -1,107 +1,2 @@
1
- import { L10N_MESSAGE_ITEM_CREATE, L10N_MESSAGE_ITEM_UPDATE_KEY, L10N_MESSAGE_ITEM_UPDATE_VALUE, L10N_MESSAGE_OBJECT_CREATE, L10N_MESSAGE_OBJECT_UPDATE, L10N_SYMBOL } from "./l10n.model.mjs";
2
- import { isPlainObject } from "@oscarpalmer/atoms/is";
3
- import { getString } from "@oscarpalmer/atoms/string";
4
- //#region src/js/l10n/index.ts
5
- function OuiLocalizations(defaults) {
6
- this[L10N_SYMBOL] = {
7
- defaults,
8
- keys: new Set(Object.keys(defaults)),
9
- values: {}
10
- };
11
- }
12
- OuiLocalizations.prototype.get = getLocalizationValue;
13
- OuiLocalizations.prototype.set = setLocalizationValues;
14
- Object.defineProperties(OuiLocalizations.prototype, {
15
- defaults: {
16
- enumerable: true,
17
- get: getDefaults
18
- },
19
- keys: {
20
- enumerable: true,
21
- get: getKeys
22
- }
23
- });
24
- function createLocalizations(defaults) {
25
- if (!isPlainObject(defaults) || Object.keys(defaults).length === 0) throw new Error(L10N_MESSAGE_OBJECT_CREATE);
26
- if (!Object.values(defaults).every(isValidLocalization)) throw new Error(L10N_MESSAGE_ITEM_CREATE);
27
- return new OuiLocalizations(defaults);
28
- }
29
- function getDefaults() {
30
- return { ...this[L10N_SYMBOL].defaults };
31
- }
32
- function getKeys() {
33
- return [...this[L10N_SYMBOL].keys];
34
- }
35
- function getLanguage(element) {
36
- return (element.closest("[lang]")?.getAttribute("lang") ?? document.documentElement.lang).toLowerCase();
37
- }
38
- function getLocalization(localizations, element, key, value) {
39
- const language = getLanguage(element);
40
- const state = localizations[L10N_SYMBOL];
41
- const values = [value, state.values];
42
- const { length } = values;
43
- let localization;
44
- let shortLanguage;
45
- for (let index = 0; index < length; index += 1) {
46
- const value = values[index];
47
- localization = value?.[language]?.[key];
48
- if (localization != null) break;
49
- shortLanguage ??= language.split("-")[0];
50
- if (shortLanguage === language) continue;
51
- localization = value?.[shortLanguage]?.[key];
52
- if (localization != null) break;
53
- }
54
- return localization ?? state.defaults[key];
55
- }
56
- function getLocalizationValue(element, key, localizations) {
57
- return getLocalization(this, element, key, localizations);
58
- }
59
- function isValidLocalization(value) {
60
- return typeof value === "string" || typeof value === "function";
61
- }
62
- function localize(localization, data, parameters) {
63
- if (typeof localization === "function") return localization(...parameters);
64
- const keys = Object.keys(data);
65
- const { length } = keys;
66
- let localized = localization;
67
- for (let index = 0; index < length; index += 1) {
68
- const key = keys[index];
69
- const value = data[key];
70
- localized = localized.replaceAll(`{${key}}`, getString(value));
71
- }
72
- return localized;
73
- }
74
- function setLocalizationValues(first, second) {
75
- updateLocalizations(this, typeof first === "string" ? { [first]: second } : first, this[L10N_SYMBOL].values);
76
- }
77
- function updateLocalizations(instance, values, destination, onAfter) {
78
- if (typeof values !== "object" || values == null) throw new Error(L10N_MESSAGE_OBJECT_UPDATE);
79
- const state = instance[L10N_SYMBOL];
80
- const localizations = destination ?? state.values;
81
- const languages = Object.keys(values);
82
- const languagesLength = languages.length;
83
- let updated = false;
84
- for (let languagesIndex = 0; languagesIndex < languagesLength; languagesIndex += 1) {
85
- const language = languages[languagesIndex];
86
- const languageValue = values[language];
87
- if (typeof languageValue !== "object" || languageValue == null) continue;
88
- const normalizedLanguage = language.toLowerCase();
89
- localizations[normalizedLanguage] ??= {};
90
- const keys = Object.keys(languageValue);
91
- const keysLength = keys.length;
92
- for (let keysIndex = 0; keysIndex < keysLength; keysIndex += 1) {
93
- const key = keys[keysIndex];
94
- const keyValue = languageValue[key];
95
- const normalizedKey = key.toLowerCase();
96
- if (!state.keys.has(normalizedKey)) throw new Error(L10N_MESSAGE_ITEM_UPDATE_KEY);
97
- if (!isValidLocalization(keyValue)) throw new Error(L10N_MESSAGE_ITEM_UPDATE_VALUE);
98
- if (state.keys.has(normalizedKey) && isValidLocalization(keyValue)) {
99
- updated = true;
100
- localizations[normalizedLanguage][normalizedKey] = keyValue;
101
- }
102
- }
103
- }
104
- if (updated && typeof onAfter === "function") onAfter();
105
- }
106
- //#endregion
107
- export { createLocalizations, getLanguage, getLocalization, localize, updateLocalizations };
1
+ import { createDefaultLocalizations, createLocalizations } from "../internal/l10n/index.mjs";
2
+ export { createDefaultLocalizations, createLocalizations };