@swiftwc/ui 0.0.0-dev.3 → 0.0.0-dev.30

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 (302) hide show
  1. package/README.md +15 -0
  2. package/generated/buses/alert-dialog.d.ts +2 -0
  3. package/generated/buses/alert-dialog.js +1 -0
  4. package/generated/buses/confirmation-dialog.d.ts +2 -0
  5. package/generated/buses/confirmation-dialog.js +1 -0
  6. package/generated/buses/index.d.ts +6 -0
  7. package/generated/buses/index.js +6 -0
  8. package/generated/buses/lifecycle-observer.d.ts +2 -0
  9. package/generated/buses/lifecycle-observer.js +1 -0
  10. package/generated/client/index.d.ts +31 -2
  11. package/generated/client/index.js +415 -8
  12. package/generated/components/alert-dialog.d.ts +8 -0
  13. package/generated/components/alert-dialog.js +94 -0
  14. package/generated/components/body-view.d.ts +5 -0
  15. package/generated/components/body-view.js +11 -0
  16. package/generated/components/bordered-button.d.ts +13 -0
  17. package/generated/components/bordered-button.js +42 -0
  18. package/generated/components/bordered-prominent-button.d.ts +13 -0
  19. package/generated/components/bordered-prominent-button.js +42 -0
  20. package/generated/components/borderless-button.d.ts +13 -0
  21. package/generated/components/borderless-button.js +42 -0
  22. package/generated/components/confirmation-dialog.d.ts +9 -0
  23. package/generated/components/confirmation-dialog.js +108 -0
  24. package/generated/components/content-unavailable-view.d.ts +24 -0
  25. package/generated/components/content-unavailable-view.js +78 -0
  26. package/generated/components/date-picker.d.ts +46 -0
  27. package/generated/components/date-picker.js +442 -0
  28. package/generated/components/disclosure-group.d.ts +9 -0
  29. package/generated/components/disclosure-group.js +54 -0
  30. package/generated/components/fine-tooltip.d.ts +7 -0
  31. package/generated/components/fine-tooltip.js +104 -0
  32. package/generated/components/form-view.d.ts +6 -0
  33. package/generated/components/form-view.js +58 -0
  34. package/generated/components/glass-button.d.ts +12 -0
  35. package/generated/components/glass-button.js +39 -0
  36. package/generated/components/glass-prominent-button.d.ts +12 -0
  37. package/generated/components/glass-prominent-button.js +39 -0
  38. package/generated/components/index.d.ts +41 -1
  39. package/generated/components/index.js +41 -6
  40. package/generated/components/label-view.d.ts +9 -0
  41. package/generated/components/label-view.js +56 -0
  42. package/generated/components/list-view.d.ts +5 -0
  43. package/generated/components/list-view.js +29 -0
  44. package/generated/components/menu-view.d.ts +9 -0
  45. package/generated/components/menu-view.js +138 -0
  46. package/generated/components/navigation-large-title.d.ts +6 -0
  47. package/generated/components/navigation-large-title.js +177 -0
  48. package/generated/components/navigation-split-view.d.ts +10 -0
  49. package/generated/components/navigation-split-view.js +21 -0
  50. package/generated/components/navigation-stack.d.ts +10 -0
  51. package/generated/components/navigation-stack.js +27 -0
  52. package/generated/components/navigation-title.d.ts +8 -0
  53. package/generated/components/navigation-title.js +49 -0
  54. package/generated/components/picker-view.d.ts +27 -0
  55. package/generated/components/picker-view.js +452 -0
  56. package/generated/components/plain-button.d.ts +7 -0
  57. package/generated/components/plain-button.js +20 -0
  58. package/generated/components/progress-view.d.ts +13 -0
  59. package/generated/components/progress-view.js +122 -0
  60. package/generated/components/screen-view.d.ts +5 -0
  61. package/generated/components/screen-view.js +9 -0
  62. package/generated/components/scroll-view-proxy.d.ts +8 -0
  63. package/generated/components/scroll-view-proxy.js +14 -0
  64. package/generated/components/scroll-view.d.ts +10 -0
  65. package/generated/components/scroll-view.js +197 -0
  66. package/generated/components/section-view.d.ts +9 -0
  67. package/generated/components/section-view.js +81 -0
  68. package/generated/components/sheet-view.d.ts +8 -0
  69. package/generated/components/sheet-view.js +85 -0
  70. package/generated/components/sidebar-toggle.d.ts +7 -0
  71. package/generated/components/sidebar-toggle.js +82 -0
  72. package/generated/components/sidebar-view.d.ts +7 -0
  73. package/generated/components/sidebar-view.js +35 -0
  74. package/generated/components/sticky-container.d.ts +6 -0
  75. package/generated/components/sticky-container.js +24 -0
  76. package/generated/components/tab-bar.d.ts +10 -0
  77. package/generated/components/tab-bar.js +42 -0
  78. package/generated/components/tab-item.d.ts +7 -0
  79. package/generated/components/tab-item.js +125 -0
  80. package/generated/components/tab-view.d.ts +22 -0
  81. package/generated/components/tab-view.js +259 -0
  82. package/generated/components/table-view.d.ts +7 -0
  83. package/generated/components/table-view.js +187 -0
  84. package/generated/components/text-field.d.ts +29 -0
  85. package/generated/components/text-field.js +478 -0
  86. package/generated/components/tool-bar-item-group.d.ts +5 -0
  87. package/generated/components/tool-bar-item-group.js +28 -0
  88. package/generated/components/tool-bar-item.d.ts +7 -0
  89. package/generated/components/tool-bar-item.js +53 -0
  90. package/generated/components/tool-bar.d.ts +19 -0
  91. package/generated/components/tool-bar.js +90 -0
  92. package/generated/components/v-keyboard.d.ts +11 -0
  93. package/generated/components/v-keyboard.js +81 -0
  94. package/generated/components/v-stack.d.ts +10 -0
  95. package/generated/components/v-stack.js +16 -0
  96. package/generated/css/index.css +8067 -0
  97. package/generated/events/alert-dialog.d.ts +8 -0
  98. package/generated/events/alert-dialog.js +1 -0
  99. package/generated/events/confirmation-dialog.d.ts +9 -0
  100. package/generated/events/confirmation-dialog.js +1 -0
  101. package/generated/events/date-picker.d.ts +8 -0
  102. package/generated/events/date-picker.js +1 -0
  103. package/generated/events/index.d.ts +8 -0
  104. package/generated/events/index.js +8 -0
  105. package/generated/events/lifecycle-observer.d.ts +10 -0
  106. package/generated/events/lifecycle-observer.js +1 -0
  107. package/generated/events/picker-view.d.ts +8 -0
  108. package/generated/events/picker-view.js +1 -0
  109. package/generated/events/scroll-view.d.ts +10 -0
  110. package/generated/events/scroll-view.js +1 -0
  111. package/generated/events/tab-view.d.ts +28 -0
  112. package/generated/events/tab-view.js +1 -0
  113. package/generated/events/text-field.d.ts +8 -0
  114. package/generated/events/text-field.js +1 -0
  115. package/generated/i18n/index.d.ts +34 -0
  116. package/generated/i18n/index.js +167 -0
  117. package/generated/i18n/locales/el.d.ts +15 -0
  118. package/generated/i18n/locales/el.js +15 -0
  119. package/generated/i18n/locales/en.d.ts +15 -0
  120. package/generated/i18n/locales/en.js +15 -0
  121. package/generated/i18n/locales/index.d.ts +4 -0
  122. package/generated/i18n/locales/index.js +4 -0
  123. package/generated/index.js +1 -1
  124. package/generated/internal/class/cleanup-registry.d.ts +5 -0
  125. package/generated/internal/class/cleanup-registry.js +38 -0
  126. package/generated/internal/class/css-style-observer.d.ts +8 -0
  127. package/generated/internal/class/css-style-observer.js +25 -0
  128. package/generated/internal/class/form-associated-base.d.ts +20 -0
  129. package/generated/internal/class/form-associated-base.js +96 -0
  130. package/generated/internal/class/mutation-observer-singleton.d.ts +10 -0
  131. package/generated/internal/class/mutation-observer-singleton.js +46 -0
  132. package/generated/internal/class/navigation-path.d.ts +15 -0
  133. package/generated/internal/class/navigation-path.js +84 -0
  134. package/generated/internal/class/navigation-view.d.ts +8 -0
  135. package/generated/internal/class/navigation-view.js +77 -0
  136. package/generated/internal/class/resize-observer-singleton.d.ts +7 -0
  137. package/generated/internal/class/resize-observer-singleton.js +22 -0
  138. package/generated/internal/decorators/custom-element.d.ts +5 -0
  139. package/generated/internal/decorators/custom-element.js +4 -0
  140. package/generated/internal/privateNamespace.d.ts +4 -0
  141. package/generated/internal/privateNamespace.js +1 -0
  142. package/generated/internal/utils/add.d.ts +1 -0
  143. package/generated/internal/utils/add.js +7 -0
  144. package/generated/internal/utils/button-role.d.ts +1 -0
  145. package/generated/internal/utils/button-role.js +59 -0
  146. package/generated/internal/utils/cash/ancestors.d.ts +1 -0
  147. package/generated/internal/utils/cash/ancestors.js +27 -0
  148. package/generated/internal/utils/cash/index.d.ts +23 -0
  149. package/generated/internal/utils/cash/index.js +25 -0
  150. package/generated/internal/utils/cash/next-all.d.ts +1 -0
  151. package/generated/internal/utils/cash/next-all.js +10 -0
  152. package/generated/internal/utils/cash/next.d.ts +1 -0
  153. package/generated/internal/utils/cash/next.js +9 -0
  154. package/generated/internal/utils/cash/prev-all.d.ts +1 -0
  155. package/generated/internal/utils/cash/prev-all.js +10 -0
  156. package/generated/internal/utils/cash/prev.d.ts +1 -0
  157. package/generated/internal/utils/cash/prev.js +9 -0
  158. package/generated/internal/utils/cash/prop.d.ts +18 -0
  159. package/generated/internal/utils/cash/prop.js +30 -0
  160. package/generated/internal/utils/cash/siblings.d.ts +1 -0
  161. package/generated/internal/utils/cash/siblings.js +10 -0
  162. package/generated/internal/utils/clamp.d.ts +1 -0
  163. package/generated/internal/utils/clamp.js +4 -0
  164. package/generated/internal/utils/compare-big-decimals.d.ts +1 -0
  165. package/generated/internal/utils/compare-big-decimals.js +90 -0
  166. package/generated/internal/utils/css-time.d.ts +1 -0
  167. package/generated/internal/utils/css-time.js +3 -0
  168. package/generated/internal/utils/debounce.d.ts +1 -0
  169. package/generated/internal/utils/debounce.js +13 -0
  170. package/generated/internal/utils/frame.d.ts +1 -0
  171. package/generated/internal/utils/frame.js +6 -0
  172. package/generated/internal/utils/index.d.ts +19 -1
  173. package/generated/internal/utils/index.js +20 -1
  174. package/generated/internal/utils/is-inside.d.ts +1 -0
  175. package/generated/internal/utils/is-inside.js +4 -0
  176. package/generated/internal/utils/kebab-case.d.ts +1 -1
  177. package/generated/internal/utils/kebab-case.js +3 -3
  178. package/generated/internal/utils/list-active.d.ts +7 -0
  179. package/generated/internal/utils/list-active.js +83 -0
  180. package/generated/internal/utils/microtask.d.ts +1 -0
  181. package/generated/internal/utils/microtask.js +3 -0
  182. package/generated/internal/utils/onoff.d.ts +45 -0
  183. package/generated/internal/utils/onoff.js +31 -0
  184. package/generated/internal/utils/set.d.ts +1 -0
  185. package/generated/internal/utils/set.js +7 -0
  186. package/generated/internal/utils/sleep.d.ts +1 -0
  187. package/generated/internal/utils/sleep.js +3 -0
  188. package/generated/internal/utils/slow-hide-show.d.ts +1 -0
  189. package/generated/internal/utils/slow-hide-show.js +16 -0
  190. package/generated/internal/utils/timeout.d.ts +5 -0
  191. package/generated/internal/utils/timeout.js +16 -0
  192. package/generated/internal/utils/touch-glass.d.ts +7 -0
  193. package/generated/internal/utils/touch-glass.js +19 -0
  194. package/generated/namespace-browser/base.d.ts +36 -0
  195. package/generated/namespace-browser/base.js +92 -0
  196. package/generated/namespace-browser/index.d.ts +7 -0
  197. package/generated/namespace-browser/index.js +1 -0
  198. package/generated/snapshot/index.d.ts +9 -0
  199. package/generated/snapshot/index.js +58 -0
  200. package/package.json +36 -9
  201. package/scss/_base.scss +5 -0
  202. package/scss/_components.scss +82 -0
  203. package/scss/_final.scss +1 -0
  204. package/scss/_functions.scss +31 -0
  205. package/scss/_mixins.scss +7 -0
  206. package/scss/_placeholders.scss +3 -0
  207. package/scss/_transitions.scss +32 -0
  208. package/scss/_utils.scss +9 -0
  209. package/scss/_vars.scss +179 -3
  210. package/scss/base/_layout.scss +56 -0
  211. package/scss/base/_reboot.scss +191 -0
  212. package/scss/base/_root.scss +397 -0
  213. package/scss/colors/_index.scss +704 -0
  214. package/scss/components/_alert-dialog.scss +111 -0
  215. package/scss/components/_body-view.scss +17 -0
  216. package/scss/components/_bordered-button.scss +57 -0
  217. package/scss/components/_bordered-prominent-button.scss +63 -0
  218. package/scss/components/_borderless-button.scss +44 -0
  219. package/scss/components/_confirmation-dialog.scss +117 -0
  220. package/scss/components/_content-unavailable-view.scss +45 -0
  221. package/scss/components/_date-picker.scss +30 -0
  222. package/scss/components/_detail-placeholder.scss +153 -0
  223. package/scss/components/_disclosure-group.scss +175 -0
  224. package/scss/components/_fine-tooltip.scss +82 -0
  225. package/scss/components/_form-view.scss +195 -0
  226. package/scss/components/_full-screen.scss +15 -0
  227. package/scss/components/_glass-button.scss +59 -0
  228. package/scss/components/_glass-prominent-button.scss +68 -0
  229. package/scss/components/_h-divider.scss +13 -0
  230. package/scss/components/_h-flex-stack.scss +23 -0
  231. package/scss/components/_h-stack.scss +29 -0
  232. package/scss/components/_index.scss +249 -0
  233. package/scss/components/_label-view copy.scss.txt +420 -0
  234. package/scss/components/_label-view.scss +355 -0
  235. package/scss/components/_label-view.scss.txt +536 -0
  236. package/scss/components/_labeled-content.scss +9 -0
  237. package/scss/components/_list-view.scss +229 -0
  238. package/scss/components/_menu-view.scss +205 -0
  239. package/scss/components/_navigation-large-title.scss +27 -0
  240. package/scss/components/_navigation-split-view.scss +424 -0
  241. package/scss/components/_navigation-stack.scss +11 -0
  242. package/scss/components/_navigation-title.scss +10 -0
  243. package/scss/components/_picker-view.scss +122 -0
  244. package/scss/components/_plain-button.scss +18 -0
  245. package/scss/components/_progress-view.scss +98 -0
  246. package/scss/components/_scroll-view-proxy.scss +79 -0
  247. package/scss/components/_scroll-view-toolbars.scss +126 -0
  248. package/scss/components/_scroll-view.scss +130 -0
  249. package/scss/components/_section-view.scss +119 -0
  250. package/scss/components/_sheet-view.scss +102 -0
  251. package/scss/components/_sidebar-toggle.scss +121 -0
  252. package/scss/components/_sidebar-view.scss +53 -0
  253. package/scss/components/_sticky-container.scss +42 -0
  254. package/scss/components/_tab-bar.scss +260 -0
  255. package/scss/components/_tab-item.scss +25 -0
  256. package/scss/components/_tab-view.scss +312 -0
  257. package/scss/components/_table-column.scss +52 -0
  258. package/scss/components/_table-row.scss +172 -0
  259. package/scss/components/_table-view.scss +223 -0
  260. package/scss/components/_text-field.scss +37 -0
  261. package/scss/components/_tool-bar-item-group.scss +48 -0
  262. package/scss/components/_tool-bar-item.scss +97 -0
  263. package/scss/components/_tool-bar.scss +153 -0
  264. package/scss/components/_v-divider.scss +13 -0
  265. package/scss/components/_v-flex-stack.scss +29 -0
  266. package/scss/components/_v-keyboard.scss +14 -0
  267. package/scss/components/_v-stack.scss +25 -0
  268. package/scss/final/_touch-glass.scss +91 -0
  269. package/scss/index.scss +15 -6
  270. package/scss/mixins/_button.scss +44 -0
  271. package/scss/mixins/_color.scss +16 -0
  272. package/scss/mixins/_dialog.scss +89 -0
  273. package/scss/mixins/_index.scss +422 -0
  274. package/scss/placeholders/_buttons.scss +117 -0
  275. package/scss/placeholders/_lists.scss +561 -0
  276. package/scss/transitions/_alert-dialog.scss +18 -0
  277. package/scss/transitions/_bwd.navbar.scss +19 -0
  278. package/scss/transitions/_bwd.scss +39 -0
  279. package/scss/transitions/_confirmation-dialog.scss +13 -0
  280. package/scss/transitions/_disclosure-group.scss +35 -0
  281. package/scss/transitions/_fine-tooltip.scss +21 -0
  282. package/scss/transitions/_fwd.navbar.scss +41 -0
  283. package/scss/transitions/_fwd.scss +24 -0
  284. package/scss/transitions/_glass-button.scss +12 -0
  285. package/scss/transitions/_glass-prominent-button.scss +12 -0
  286. package/scss/transitions/_index.scss +74 -0
  287. package/scss/transitions/_menu-view.scss +26 -0
  288. package/scss/transitions/_navigation-split-view.scss +23 -0
  289. package/scss/transitions/_progress-view.scss +23 -0
  290. package/scss/transitions/_sheet-view.scss +30 -0
  291. package/scss/transitions/_sidebar-view.scss +36 -0
  292. package/scss/transitions/_tab-bar.scss +20 -0
  293. package/scss/utils/_frame.scss +91 -0
  294. package/scss/utils/_index.scss +77 -0
  295. package/scss/utils/_scroll-view.scss +14 -0
  296. package/scss/utils/_spacing.scss +25 -0
  297. package/scss/utils/_stacks.scss +247 -0
  298. package/web-components.html-data/en.json +458 -0
  299. package/generated/internal/snapshot.d.ts +0 -5
  300. package/generated/internal/snapshot.js +0 -23
  301. package/generated/styles.css +0 -8
  302. package/scss/_reboot.scss +0 -11
@@ -0,0 +1,8 @@
1
+ export type AlertReturnDetail = {
2
+ returnValue: string;
3
+ };
4
+ declare global {
5
+ interface HTMLElementEventMap {
6
+ 'alert:return': CustomEvent<AlertReturnDetail>;
7
+ }
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ export type ConfirmationReturnDetail = {
2
+ returnValue: string;
3
+ positionAnchor: string;
4
+ };
5
+ declare global {
6
+ interface HTMLElementEventMap {
7
+ 'confirmation:return': CustomEvent<ConfirmationReturnDetail>;
8
+ }
9
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export type DatePickerSelectionDetail = {
2
+ selection: string;
3
+ };
4
+ declare global {
5
+ interface HTMLElementEventMap {
6
+ selection: CustomEvent<DatePickerSelectionDetail>;
7
+ }
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export * from './alert-dialog';
2
+ export * from './confirmation-dialog';
3
+ export * from './date-picker';
4
+ export * from './lifecycle-observer';
5
+ export * from './picker-view';
6
+ export * from './scroll-view';
7
+ export * from './tab-view';
8
+ export * from './text-field';
@@ -0,0 +1,8 @@
1
+ export * from './alert-dialog';
2
+ export * from './confirmation-dialog';
3
+ export * from './date-picker';
4
+ export * from './lifecycle-observer';
5
+ export * from './picker-view';
6
+ export * from './scroll-view';
7
+ export * from './tab-view';
8
+ export * from './text-field';
@@ -0,0 +1,10 @@
1
+ import { type ScrollView } from '../components';
2
+ export type PageShowHideDetail = {
3
+ page: ScrollView;
4
+ };
5
+ declare global {
6
+ interface HTMLElementEventMap {
7
+ pageshow: CustomEvent<PageShowHideDetail>;
8
+ pagehide: CustomEvent<PageShowHideDetail>;
9
+ }
10
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export type PickerSelectionDetail = {
2
+ selection: string;
3
+ };
4
+ declare global {
5
+ interface HTMLElementEventMap {
6
+ selection: CustomEvent<PickerSelectionDetail>;
7
+ }
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { type ScrollView } from '../components';
2
+ export type PageRevealSwapDetail = {
3
+ page: ScrollView;
4
+ };
5
+ declare global {
6
+ interface HTMLElementEventMap {
7
+ pagereveal: CustomEvent<PageRevealSwapDetail>;
8
+ pageswap: CustomEvent<PageRevealSwapDetail>;
9
+ }
10
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ import { type NavigationSplitView, type NavigationStack } from '../components';
2
+ import { type TabBarPlacement } from '../components/tab-view';
3
+ export type TabBeforeDetail = {
4
+ tag: string;
5
+ ms: number;
6
+ };
7
+ export type TabDetail = {
8
+ tag: string;
9
+ };
10
+ export type TabViewDetail = {
11
+ selection: (NavigationStack | NavigationSplitView)[];
12
+ };
13
+ export type TabViewAdaptableTabBarPlacementDetail = {
14
+ oldValue?: TabBarPlacement;
15
+ newValue?: TabBarPlacement;
16
+ };
17
+ declare global {
18
+ interface HTMLElementEventMap {
19
+ tabshow: CustomEvent<TabDetail>;
20
+ tabhide: CustomEvent<TabDetail>;
21
+ tabreveal: CustomEvent<TabDetail>;
22
+ tabswap: CustomEvent<TabDetail>;
23
+ beforetabreveal: CustomEvent<TabBeforeDetail>;
24
+ beforetabswap: CustomEvent<TabBeforeDetail>;
25
+ 'tab-view:toggle': CustomEvent<TabViewDetail>;
26
+ 'tab-view:adaptable-tab-bar-placement-change': CustomEvent<TabViewAdaptableTabBarPlacementDetail>;
27
+ }
28
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export type TextFieldCommitDetail = {
2
+ text: string;
3
+ };
4
+ declare global {
5
+ interface HTMLElementEventMap {
6
+ commit: CustomEvent<TextFieldCommitDetail>;
7
+ }
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import { en } from './locales';
2
+ type LocaleInput = Intl.UnicodeBCP47LocaleIdentifier | Intl.Locale;
3
+ type DeepStringify<T> = {
4
+ [K in keyof T]: T[K] extends object ? DeepStringify<T[K]> : string;
5
+ };
6
+ export declare function defineTranslations<const T extends object>(factory: () => T): () => T;
7
+ type EnTranslations = DeepStringify<ReturnType<typeof en>>;
8
+ /**
9
+ * @fires localechange - On html[lang] change!
10
+ */
11
+ export declare class I18n {
12
+ #private;
13
+ static on: EventTarget;
14
+ /**
15
+ * Register a translation factory for a language.
16
+ * Call this before the language is first needed.
17
+ *
18
+ * @example
19
+ * I18n.register('el', () => ({ SearchUnavailableContent: { … } }))
20
+ */
21
+ static register(lang: string, factory: () => EnTranslations): void;
22
+ static get tag(): LocaleInput;
23
+ static set tag(val: LocaleInput);
24
+ static get options(): Intl.LocaleOptions | undefined;
25
+ static set options(val: Intl.LocaleOptions | undefined);
26
+ static get locale(): Intl.Locale;
27
+ static get decimalSeparator(): string;
28
+ static get dateSeparator(): string;
29
+ static get dateOrder(): string[];
30
+ static setOwnConfig(options?: Intl.LocaleOptions): void;
31
+ /** Look up a top-level translation key for the current language, falling back to 'en'. */
32
+ static t<K extends keyof EnTranslations>(key: K): EnTranslations[K];
33
+ }
34
+ export {};
@@ -0,0 +1,167 @@
1
+ import { el, en } from './locales';
2
+ export function defineTranslations(factory) {
3
+ return factory;
4
+ }
5
+ /**
6
+ * @fires localechange - On html[lang] change!
7
+ */
8
+ export class I18n {
9
+ static #readyCalled = false;
10
+ static #tag = 'en';
11
+ static #options;
12
+ static #locale = new Intl.Locale('en');
13
+ static #observer;
14
+ static #decimalSeparator = '.';
15
+ static #dateSeparator = '/';
16
+ static #dateOrder = ['month', 'day', 'year'];
17
+ static #lang = 'en';
18
+ /** Registry: language code → factory. Pre-seeded with 'en'. */
19
+ static #factories = new Map([
20
+ ['en', en],
21
+ ['el', el],
22
+ ]);
23
+ /** Cache: language code → resolved translation object. */
24
+ static #strings = new Map();
25
+ static on = new EventTarget();
26
+ // ----------------------------
27
+ // Public registration API
28
+ // ----------------------------
29
+ /**
30
+ * Register a translation factory for a language.
31
+ * Call this before the language is first needed.
32
+ *
33
+ * @example
34
+ * I18n.register('el', () => ({ SearchUnavailableContent: { … } }))
35
+ */
36
+ static register(lang, factory) {
37
+ this.#factories.set(lang, factory);
38
+ this.#strings.delete(lang); // bust cache so next t() re-resolves
39
+ }
40
+ // ----------------------------
41
+ // Lazy init
42
+ // ----------------------------
43
+ static #ensureReady() {
44
+ if (!this.#readyCalled)
45
+ this.setOwnConfig();
46
+ }
47
+ // ----------------------------
48
+ // Accessors
49
+ // ----------------------------
50
+ static get tag() {
51
+ this.#ensureReady();
52
+ return this.#tag;
53
+ }
54
+ static set tag(val) {
55
+ this.#observer?.disconnect();
56
+ this.#observer = undefined;
57
+ this.#tag = val;
58
+ this.#getOwnConfig();
59
+ }
60
+ static get options() {
61
+ this.#ensureReady();
62
+ return this.#options;
63
+ }
64
+ static set options(val) {
65
+ this.#options = val;
66
+ this.#getOwnConfig();
67
+ }
68
+ static get locale() {
69
+ this.#ensureReady();
70
+ return this.#locale;
71
+ }
72
+ static get decimalSeparator() {
73
+ this.#ensureReady();
74
+ return this.#decimalSeparator;
75
+ }
76
+ static get dateSeparator() {
77
+ this.#ensureReady();
78
+ return this.#dateSeparator;
79
+ }
80
+ static get dateOrder() {
81
+ this.#ensureReady();
82
+ return this.#dateOrder;
83
+ }
84
+ static setOwnConfig(options) {
85
+ if (!this.#readyCalled)
86
+ this.#readyCalled = true;
87
+ this.#tag = document.documentElement.lang;
88
+ this.#options = options;
89
+ this.#observer?.disconnect();
90
+ this.#observer = new MutationObserver(this.#handleMutation.bind(this));
91
+ this.#observer.observe(document.documentElement, {
92
+ attributes: true,
93
+ attributeFilter: ['lang'],
94
+ });
95
+ this.#getOwnConfig();
96
+ }
97
+ static #handleMutation() {
98
+ if (!this.#observer)
99
+ return;
100
+ this.#tag = document.documentElement.lang;
101
+ this.#getOwnConfig();
102
+ this.on.dispatchEvent(new CustomEvent('localechange', { detail: { lang: this.#tag } }));
103
+ }
104
+ static #getOwnConfig() {
105
+ try {
106
+ this.#locale = new Intl.Locale(this.#tag ?? 'en', this.#options);
107
+ }
108
+ catch {
109
+ this.#locale = new Intl.Locale('en');
110
+ }
111
+ try {
112
+ const nf = new Intl.NumberFormat(this.#locale);
113
+ const parts = nf.formatToParts(1.1);
114
+ this.#decimalSeparator = parts.find(({ type }) => type === 'decimal')?.value ?? '.';
115
+ }
116
+ catch {
117
+ this.#decimalSeparator = '.';
118
+ }
119
+ try {
120
+ const df = new Intl.DateTimeFormat(this.#locale);
121
+ const parts = df.formatToParts(new Date(2000, 11, 31));
122
+ this.#dateOrder = parts.filter(({ type }) => type !== 'literal').map(({ type }) => type) ?? ['month', 'day', 'year'];
123
+ this.#dateSeparator =
124
+ parts
125
+ .filter(({ type }) => type === 'literal')
126
+ .map(({ value }) => value)
127
+ .at(0) ?? '/';
128
+ }
129
+ catch {
130
+ this.#dateOrder = ['month', 'day', 'year'];
131
+ this.#dateSeparator = '/';
132
+ }
133
+ try {
134
+ this.#lang = this.#resolveLanguage(this.#tag);
135
+ }
136
+ catch {
137
+ this.#lang = 'en';
138
+ }
139
+ }
140
+ /**
141
+ * Resolve the best available language for a given BCP 47 tag.
142
+ * Tries the full tag, then just the base language, then falls back to 'en'.
143
+ */
144
+ static #resolveLanguage(tag) {
145
+ const lang = tag instanceof Intl.Locale ? tag.language : new Intl.Locale(tag || 'en').language;
146
+ if (this.#factories.has(String(tag)))
147
+ return String(tag);
148
+ if (this.#factories.has(lang))
149
+ return lang;
150
+ return 'en';
151
+ }
152
+ /** Look up a top-level translation key for the current language, falling back to 'en'. */
153
+ static t(key) {
154
+ this.#ensureReady();
155
+ if (!this.#strings.has(this.#lang)) {
156
+ const factory = this.#factories.get(this.#lang) ?? en;
157
+ this.#strings.set(this.#lang, factory());
158
+ }
159
+ const current = this.#strings.get(this.#lang);
160
+ if (key in current)
161
+ return current[key];
162
+ // Key missing from current language — fall back to en
163
+ if (!this.#strings.has('en'))
164
+ this.#strings.set('en', en());
165
+ return this.#strings.get('en')[key];
166
+ }
167
+ }
@@ -0,0 +1,15 @@
1
+ declare const _default: () => {
2
+ readonly SearchUnavailableContent: {
3
+ readonly NoLabel: "Κανένα αποτέλεσμα";
4
+ readonly Label: "Κανένα αποτέλεσμα για «{search}»";
5
+ readonly Description: "Ελέγξτε την ορθογραφία ή δοκιμάστε μια νέα αναζήτηση.";
6
+ };
7
+ readonly ButtonRole: {
8
+ readonly Cancel: "Ακύρωση";
9
+ readonly Close: "Κλείσιμο";
10
+ readonly Confirm: "Τέλος";
11
+ readonly Destructive: "Διαγραφή";
12
+ readonly OK: "OK";
13
+ };
14
+ };
15
+ export default _default;
@@ -0,0 +1,15 @@
1
+ import { defineTranslations } from '../index';
2
+ export default defineTranslations(() => ({
3
+ SearchUnavailableContent: {
4
+ NoLabel: 'Κανένα αποτέλεσμα',
5
+ Label: 'Κανένα αποτέλεσμα για «{search}»',
6
+ Description: 'Ελέγξτε την ορθογραφία ή δοκιμάστε μια νέα αναζήτηση.',
7
+ },
8
+ ButtonRole: {
9
+ Cancel: 'Ακύρωση',
10
+ Close: 'Κλείσιμο',
11
+ Confirm: 'Τέλος',
12
+ Destructive: 'Διαγραφή',
13
+ OK: 'OK',
14
+ },
15
+ }));
@@ -0,0 +1,15 @@
1
+ declare const _default: () => {
2
+ readonly SearchUnavailableContent: {
3
+ readonly NoLabel: "No Results";
4
+ readonly Label: "No Results for ”{search}”";
5
+ readonly Description: "Check the spelling or try a new search.";
6
+ };
7
+ readonly ButtonRole: {
8
+ readonly Cancel: "Cancel";
9
+ readonly Close: "Close";
10
+ readonly Confirm: "Confirm";
11
+ readonly Destructive: "Delete";
12
+ readonly OK: "OK";
13
+ };
14
+ };
15
+ export default _default;
@@ -0,0 +1,15 @@
1
+ import { defineTranslations } from '../index';
2
+ export default defineTranslations(() => ({
3
+ SearchUnavailableContent: {
4
+ NoLabel: 'No Results',
5
+ Label: 'No Results for ”{search}”',
6
+ Description: 'Check the spelling or try a new search.',
7
+ },
8
+ ButtonRole: {
9
+ Cancel: 'Cancel',
10
+ Close: 'Close',
11
+ Confirm: 'Confirm',
12
+ Destructive: 'Delete',
13
+ OK: 'OK',
14
+ },
15
+ }));
@@ -0,0 +1,4 @@
1
+ export { default as el } from './el';
2
+ export * from './el';
3
+ export { default as en } from './en';
4
+ export * from './en';
@@ -0,0 +1,4 @@
1
+ export { default as el } from './el';
2
+ export * from './el';
3
+ export { default as en } from './en';
4
+ export * from './en';
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import packageJson from "../package.json";
2
+ import packageJson from '../package.json';
3
3
  console.log(`Hello world! ${packageJson.version}`);
@@ -0,0 +1,5 @@
1
+ export declare class CleanupRegistry {
2
+ #private;
3
+ static register(target: Element, heldValue: () => void, unregisterToken?: string | symbol): void;
4
+ static unregister(target: Element, token?: string | symbol): void;
5
+ }
@@ -0,0 +1,38 @@
1
+ export class CleanupRegistry {
2
+ static #cleanups = new WeakMap();
3
+ static #DEFAULT = Symbol('__default__');
4
+ static register(target, heldValue, unregisterToken = this.#DEFAULT) {
5
+ let tokens = this.#cleanups.get(target);
6
+ if (!tokens)
7
+ this.#cleanups.set(target, (tokens = new Map()));
8
+ let fns = tokens.get(unregisterToken);
9
+ if (!fns)
10
+ tokens.set(unregisterToken, (fns = new Set()));
11
+ fns.add(heldValue);
12
+ }
13
+ static unregister(target, token) {
14
+ const tokens = this.#cleanups.get(target);
15
+ if (!tokens)
16
+ return;
17
+ if (undefined === token) {
18
+ for (const fns of tokens.values())
19
+ for (const fn of fns)
20
+ fn();
21
+ this.#cleanups.delete(target);
22
+ }
23
+ else if ('string' === typeof token && token.endsWith('*')) {
24
+ const prefix = token.slice(0, -1);
25
+ for (const [key, fns] of tokens)
26
+ if ('string' === typeof key && key.startsWith(prefix)) {
27
+ for (const fn of fns)
28
+ fn();
29
+ tokens.delete(key);
30
+ }
31
+ }
32
+ else {
33
+ for (const fn of tokens.get(token) ?? [])
34
+ fn();
35
+ tokens.delete(token);
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,8 @@
1
+ export declare class CSSStyleObserver {
2
+ #private;
3
+ constructor(options?: {
4
+ properties: string[];
5
+ });
6
+ observe(target: Node, callback: (evt: TransitionEvent) => void): Promise<void>;
7
+ disconnect(): Promise<void>;
8
+ }
@@ -0,0 +1,25 @@
1
+ var _a;
2
+ import { onoff } from '../../internal/utils';
3
+ export class CSSStyleObserver {
4
+ #cleanups;
5
+ #options;
6
+ constructor(options = {
7
+ properties: ['perspective-origin'], // --other-number-@property
8
+ }) {
9
+ this.#options = options;
10
+ }
11
+ async observe(target, callback) {
12
+ const listener = this.#handleTransitionrun.bind(this, callback);
13
+ this.#cleanups = onoff('transitionrun', listener, target).on();
14
+ }
15
+ async disconnect() {
16
+ this.#cleanups?.();
17
+ }
18
+ #handleTransitionrun = (callback, evt) => {
19
+ console.debug(`${_a.name} ⚡️ ${evt?.type} (${evt.propertyName})`);
20
+ if (!this.#options?.properties.some((prop) => evt.propertyName.startsWith(prop)))
21
+ return;
22
+ callback?.(evt);
23
+ };
24
+ }
25
+ _a = CSSStyleObserver;
@@ -0,0 +1,20 @@
1
+ export declare function getInternals(instance: FormAssociatedBase): ElementInternals;
2
+ export declare function makeSlotchangeHandler(t: FormAssociatedBase): {
3
+ types: string;
4
+ listener: (evt: Event) => void;
5
+ }[];
6
+ export declare abstract class FormAssociatedBase extends HTMLElement {
7
+ abstract setValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;
8
+ static get formAssociated(): boolean;
9
+ constructor();
10
+ disconnectedCallback(): void;
11
+ connectedCallback(): void;
12
+ get type(): string;
13
+ get form(): HTMLFormElement | null;
14
+ get validity(): ValidityState;
15
+ get validationMessage(): string;
16
+ get willValidate(): boolean;
17
+ checkValidity: () => boolean;
18
+ reportValidity: () => boolean;
19
+ shake: (times?: number, distance?: number, duration?: number) => Promise<void>;
20
+ }
@@ -0,0 +1,96 @@
1
+ import { CleanupRegistry } from './cleanup-registry';
2
+ import { MutationObserverSingleton } from './mutation-observer-singleton';
3
+ const internals = new WeakMap();
4
+ const trackedElements = new WeakMap();
5
+ const observers = new MutationObserverSingleton();
6
+ export function getInternals(instance) {
7
+ const i = internals.get(instance);
8
+ if (!i)
9
+ throw new Error('Not a FormAssociatedBase instance');
10
+ return i;
11
+ }
12
+ export function makeSlotchangeHandler(t) {
13
+ const handleSlotchange = (evt) => {
14
+ console.debug(`${makeSlotchangeHandler.name} ⚡️ ${evt?.type}`);
15
+ const slot = evt.target instanceof HTMLSlotElement && evt.target;
16
+ if (!slot)
17
+ return;
18
+ const assigned = slot.assignedElements({ flatten: true });
19
+ observers.syncObservations(trackedElements.get(t) ?? new Set(), assigned, handleTagMutation, ['value', 'label']);
20
+ // for (const el of trackedElements.get(t) ?? [])
21
+ // if (!assigned.includes(el)) {
22
+ // observers.unobserve(el)
23
+ // trackedElements.get(t)?.delete(el)
24
+ // }
25
+ // for (const el of assigned) {
26
+ // if (!trackedElements.get(t)?.has(el))
27
+ // observers.observe(el, handleTagMutation, {
28
+ // attributes: true,
29
+ // characterData: true,
30
+ // subtree: true,
31
+ // childList: true,
32
+ // attributeFilter: ['value', 'label'],
33
+ // })
34
+ // trackedElements.get(t)?.add(el)
35
+ // }
36
+ if (0 < assigned.length)
37
+ handleTagMutation();
38
+ }, handleTagMutation = (entry) => {
39
+ console.debug(`${handleTagMutation.name} ⚡️ mutation`);
40
+ t.setValidity(t.validity, t.validationMessage);
41
+ };
42
+ return [{ types: 'slotchange', listener: handleSlotchange }];
43
+ }
44
+ export class FormAssociatedBase extends HTMLElement {
45
+ static get formAssociated() {
46
+ return true;
47
+ }
48
+ constructor() {
49
+ super();
50
+ internals.set(this, this.attachInternals());
51
+ trackedElements.set(this, new Set());
52
+ }
53
+ disconnectedCallback() {
54
+ console.debug(`${FormAssociatedBase.name} ⚡️ disconnect`);
55
+ CleanupRegistry.unregister(this);
56
+ observers.clearObservationsSet(trackedElements.get(this) ?? new Set());
57
+ // for (const el of trackedElements.get(this) ?? []) observers.unobserve(el)
58
+ // trackedElements.get(this)?.clear() // trackedElements.delete(this)
59
+ }
60
+ connectedCallback() {
61
+ console.debug(`${FormAssociatedBase.name} ⚡️ connect`);
62
+ }
63
+ get type() {
64
+ return this.localName;
65
+ }
66
+ get form() {
67
+ return getInternals(this).form;
68
+ }
69
+ get validity() {
70
+ return getInternals(this).validity;
71
+ }
72
+ get validationMessage() {
73
+ return getInternals(this).validationMessage;
74
+ }
75
+ get willValidate() {
76
+ return getInternals(this).willValidate;
77
+ }
78
+ checkValidity = () => {
79
+ return getInternals(this).checkValidity();
80
+ };
81
+ reportValidity = () => {
82
+ return getInternals(this).reportValidity();
83
+ };
84
+ shake = async (times = 3, distance = 8, duration = 400) => {
85
+ const frames = [{ transform: 'translateX(0)' }];
86
+ for (let i = 0; i < times; i++)
87
+ frames.push({ transform: `translateX(-${distance}px)` }, { transform: `translateX(${distance}px)` });
88
+ frames.push({ transform: 'translateX(0)' });
89
+ try {
90
+ await this.animate(frames, { duration, easing: 'ease-in-out' }).finished;
91
+ }
92
+ catch {
93
+ //
94
+ }
95
+ };
96
+ }
@@ -0,0 +1,10 @@
1
+ export declare class MutationObserverSingleton {
2
+ #private;
3
+ readonly observer: Promise<MutationObserver>;
4
+ constructor();
5
+ observe(target: Node, callback: (entry: MutationRecord) => void, options: MutationObserverInit): Promise<void>;
6
+ unobserve(target: Node): Promise<void>;
7
+ /** Observes automatically all elements using a Set provided by outside. Calls renderCallback on EVERY change. */
8
+ syncObservations(set: Set<Element>, nodes: Element[], renderCallback: () => void, attributeFilter?: string[]): Promise<void>;
9
+ clearObservationsSet(set: Set<Element>): Promise<void>;
10
+ }