@swiftwc/ui 0.0.0-dev.98 → 1.0.0-canary.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 (342) hide show
  1. package/{web-components.html-data → html-data}/en.json +155 -57
  2. package/package.json +14 -11
  3. package/scss/_components.scss +1 -1
  4. package/scss/_maps.scss +3 -1
  5. package/scss/_utils.scss +3 -1
  6. package/scss/_vars.scss +1 -0
  7. package/scss/base/_layout.scss +8 -8
  8. package/scss/base/_reboot.scss +4 -29
  9. package/scss/base/_root.scss +27 -12
  10. package/scss/colors/_index.scss +66 -1
  11. package/scss/components/_alert-dialog.scss +3 -3
  12. package/scss/components/_bordered-button.scss +2 -2
  13. package/scss/components/_bordered-prominent-button.scss +3 -3
  14. package/scss/components/_borderless-button.scss +2 -2
  15. package/scss/components/_confirmation-dialog.scss +1 -1
  16. package/scss/components/_content-unavailable.scss +1 -1
  17. package/scss/components/{_body-view.scss → _content-view.scss} +2 -2
  18. package/scss/components/_date-picker.scss +1 -1
  19. package/scss/components/_detail-placeholder.scss +5 -5
  20. package/scss/components/_disclosure-group.scss +2 -2
  21. package/scss/components/_fine-tooltip.scss +1 -1
  22. package/scss/components/_form-view.scss +3 -3
  23. package/scss/components/_full-screen.scss +1 -1
  24. package/scss/components/_glass-button.scss +2 -2
  25. package/scss/components/_glass-prominent-button.scss +3 -3
  26. package/scss/components/_group-box.scss +1 -1
  27. package/scss/components/_h-divider.scss +1 -1
  28. package/scss/components/_h-flex-stack.scss +3 -1
  29. package/scss/components/_h-stack.scss +1 -1
  30. package/scss/components/_image-view.scss +1 -1
  31. package/scss/components/_index.scss +35 -24
  32. package/scss/components/_label-view.scss +1 -1
  33. package/scss/components/_labeled-content.scss +1 -1
  34. package/scss/components/_list-view.scss +3 -3
  35. package/scss/components/_menu-view.scss +3 -3
  36. package/scss/components/_navigation-large-title.scss +15 -9
  37. package/scss/components/_navigation-split-view.scss +18 -18
  38. package/scss/components/_navigation-stack.scss +1 -1
  39. package/scss/components/_navigation-title.scss +1 -1
  40. package/scss/components/_picker-view.scss +159 -119
  41. package/scss/components/_plain-button.scss +2 -2
  42. package/scss/components/_progress-view.scss +1 -1
  43. package/scss/components/_scroll-view-proxy.scss +1 -1
  44. package/scss/components/_scroll-view-toolbars.scss +1 -1
  45. package/scss/components/_scroll-view.scss +2 -2
  46. package/scss/components/_search-view.scss +1 -1
  47. package/scss/components/_section-view.scss +1 -1
  48. package/scss/components/_sheet-view.scss +2 -2
  49. package/scss/components/_sidebar-toggle.scss +1 -1
  50. package/scss/components/_sidebar-view.scss +2 -2
  51. package/scss/components/_sticky-container.scss +1 -1
  52. package/scss/components/_tab-bar.scss +1 -1
  53. package/scss/components/_tab-item.scss +1 -1
  54. package/scss/components/_tab-view.scss +23 -15
  55. package/scss/components/_table-column.scss +1 -1
  56. package/scss/components/_table-row.scss +1 -1
  57. package/scss/components/_table-view.scss +1 -1
  58. package/scss/components/_text-field.scss +1 -1
  59. package/scss/components/_text-view.scss +1 -1
  60. package/scss/components/_toggle-view.scss +88 -30
  61. package/scss/components/_tool-bar-item-group.scss +1 -1
  62. package/scss/components/_tool-bar-item.scss +2 -2
  63. package/scss/components/_tool-bar.scss +2 -2
  64. package/scss/components/_v-divider.scss +1 -1
  65. package/scss/components/_v-flex-stack.scss +3 -1
  66. package/scss/components/_v-keyboard.scss +1 -1
  67. package/scss/components/_v-stack.scss +1 -1
  68. package/scss/final/_touch-glass.scss +8 -1
  69. package/scss/mixins/_index.scss +2 -2
  70. package/scss/placeholders/_buttons.scss +5 -5
  71. package/scss/placeholders/_lists.scss +3 -3
  72. package/scss/transitions/_alert-dialog.scss +1 -1
  73. package/scss/transitions/_bwd.navbar.scss +1 -1
  74. package/scss/transitions/_bwd.scss +3 -3
  75. package/scss/transitions/_confirmation-dialog.scss +1 -1
  76. package/scss/transitions/_disclosure-group.scss +1 -1
  77. package/scss/transitions/_fine-tooltip.scss +1 -1
  78. package/scss/transitions/_fwd.navbar.scss +1 -1
  79. package/scss/transitions/_fwd.scss +1 -1
  80. package/scss/transitions/_glass-button.scss +1 -1
  81. package/scss/transitions/_glass-prominent-button.scss +1 -1
  82. package/scss/transitions/_index.scss +1 -1
  83. package/scss/transitions/_menu-view.scss +1 -1
  84. package/scss/transitions/_navigation-split-view.scss +1 -1
  85. package/scss/transitions/_progress-view.scss +1 -1
  86. package/scss/transitions/_sheet-view.scss +1 -1
  87. package/scss/transitions/_sidebar-view.scss +1 -1
  88. package/scss/transitions/_tab-bar.scss +1 -1
  89. package/scss/utils/_background.scss +52 -0
  90. package/scss/utils/_frame.scss +2 -2
  91. package/scss/utils/_index.scss +33 -8
  92. package/scss/utils/_spacing.scss +1 -1
  93. package/scss/utils/_stacks.scss +5 -3
  94. package/generated/buses/alert-dialog.d.ts +0 -2
  95. package/generated/buses/alert-dialog.js +0 -1
  96. package/generated/buses/confirmation-dialog.d.ts +0 -2
  97. package/generated/buses/confirmation-dialog.js +0 -1
  98. package/generated/buses/index.d.ts +0 -6
  99. package/generated/buses/index.js +0 -6
  100. package/generated/buses/lifecycle-observer.d.ts +0 -2
  101. package/generated/buses/lifecycle-observer.js +0 -1
  102. package/generated/client/index.d.ts +0 -30
  103. package/generated/client/index.js +0 -279
  104. package/generated/components/alert-dialog.d.ts +0 -11
  105. package/generated/components/alert-dialog.js +0 -102
  106. package/generated/components/body-view.d.ts +0 -13
  107. package/generated/components/body-view.js +0 -17
  108. package/generated/components/bordered-button.d.ts +0 -17
  109. package/generated/components/bordered-button.js +0 -56
  110. package/generated/components/bordered-prominent-button.d.ts +0 -17
  111. package/generated/components/bordered-prominent-button.js +0 -56
  112. package/generated/components/borderless-button.d.ts +0 -17
  113. package/generated/components/borderless-button.js +0 -56
  114. package/generated/components/color-scheme.d.ts +0 -12
  115. package/generated/components/color-scheme.js +0 -54
  116. package/generated/components/confirmation-dialog.d.ts +0 -12
  117. package/generated/components/confirmation-dialog.js +0 -116
  118. package/generated/components/content-unavailable.d.ts +0 -30
  119. package/generated/components/content-unavailable.js +0 -82
  120. package/generated/components/date-picker.d.ts +0 -52
  121. package/generated/components/date-picker.js +0 -480
  122. package/generated/components/disclosure-group.d.ts +0 -17
  123. package/generated/components/disclosure-group.js +0 -66
  124. package/generated/components/fine-tooltip.d.ts +0 -15
  125. package/generated/components/fine-tooltip.js +0 -111
  126. package/generated/components/form-view.d.ts +0 -16
  127. package/generated/components/form-view.js +0 -65
  128. package/generated/components/glass-button.d.ts +0 -16
  129. package/generated/components/glass-button.js +0 -53
  130. package/generated/components/glass-prominent-button.d.ts +0 -16
  131. package/generated/components/glass-prominent-button.js +0 -53
  132. package/generated/components/h-stack.d.ts +0 -22
  133. package/generated/components/h-stack.js +0 -26
  134. package/generated/components/image-view.d.ts +0 -18
  135. package/generated/components/image-view.js +0 -68
  136. package/generated/components/index.d.ts +0 -47
  137. package/generated/components/index.js +0 -47
  138. package/generated/components/label-view.d.ts +0 -27
  139. package/generated/components/label-view.js +0 -87
  140. package/generated/components/labeled-content.d.ts +0 -27
  141. package/generated/components/labeled-content.js +0 -160
  142. package/generated/components/list-view.d.ts +0 -15
  143. package/generated/components/list-view.js +0 -22
  144. package/generated/components/menu-view.d.ts +0 -20
  145. package/generated/components/menu-view.js +0 -140
  146. package/generated/components/navigation-large-title.d.ts +0 -18
  147. package/generated/components/navigation-large-title.js +0 -188
  148. package/generated/components/navigation-split-view.d.ts +0 -15
  149. package/generated/components/navigation-split-view.js +0 -25
  150. package/generated/components/navigation-stack.d.ts +0 -15
  151. package/generated/components/navigation-stack.js +0 -29
  152. package/generated/components/navigation-title.d.ts +0 -18
  153. package/generated/components/navigation-title.js +0 -72
  154. package/generated/components/picker-view.d.ts +0 -68
  155. package/generated/components/picker-view.js +0 -1153
  156. package/generated/components/plain-button.d.ts +0 -7
  157. package/generated/components/plain-button.js +0 -22
  158. package/generated/components/progress-view.d.ts +0 -20
  159. package/generated/components/progress-view.js +0 -125
  160. package/generated/components/screen-view.d.ts +0 -5
  161. package/generated/components/screen-view.js +0 -11
  162. package/generated/components/scroll-view-proxy.d.ts +0 -13
  163. package/generated/components/scroll-view-proxy.js +0 -17
  164. package/generated/components/scroll-view.d.ts +0 -22
  165. package/generated/components/scroll-view.js +0 -237
  166. package/generated/components/search-view.d.ts +0 -12
  167. package/generated/components/search-view.js +0 -27
  168. package/generated/components/section-view.d.ts +0 -21
  169. package/generated/components/section-view.js +0 -64
  170. package/generated/components/sheet-view.d.ts +0 -11
  171. package/generated/components/sheet-view.js +0 -45
  172. package/generated/components/sidebar-toggle.d.ts +0 -15
  173. package/generated/components/sidebar-toggle.js +0 -88
  174. package/generated/components/sidebar-view.d.ts +0 -10
  175. package/generated/components/sidebar-view.js +0 -37
  176. package/generated/components/sticky-container.d.ts +0 -11
  177. package/generated/components/sticky-container.js +0 -26
  178. package/generated/components/tab-bar.d.ts +0 -10
  179. package/generated/components/tab-bar.js +0 -40
  180. package/generated/components/tab-item.d.ts +0 -10
  181. package/generated/components/tab-item.js +0 -134
  182. package/generated/components/tab-view.d.ts +0 -31
  183. package/generated/components/tab-view.js +0 -198
  184. package/generated/components/table-view.d.ts +0 -26
  185. package/generated/components/table-view.js +0 -161
  186. package/generated/components/text-field.d.ts +0 -42
  187. package/generated/components/text-field.js +0 -526
  188. package/generated/components/toggle-view.d.ts +0 -41
  189. package/generated/components/toggle-view.js +0 -249
  190. package/generated/components/tool-bar-item-group.d.ts +0 -13
  191. package/generated/components/tool-bar-item-group.js +0 -31
  192. package/generated/components/tool-bar-item.d.ts +0 -16
  193. package/generated/components/tool-bar-item.js +0 -69
  194. package/generated/components/tool-bar.d.ts +0 -26
  195. package/generated/components/tool-bar.js +0 -95
  196. package/generated/components/v-keyboard.d.ts +0 -20
  197. package/generated/components/v-keyboard.js +0 -89
  198. package/generated/components/v-stack.d.ts +0 -25
  199. package/generated/components/v-stack.js +0 -29
  200. package/generated/css/index.css +0 -10592
  201. package/generated/events/alert-dialog.d.ts +0 -13
  202. package/generated/events/alert-dialog.js +0 -1
  203. package/generated/events/confirmation-dialog.d.ts +0 -14
  204. package/generated/events/confirmation-dialog.js +0 -1
  205. package/generated/events/date-picker.d.ts +0 -13
  206. package/generated/events/date-picker.js +0 -1
  207. package/generated/events/index.d.ts +0 -9
  208. package/generated/events/index.js +0 -9
  209. package/generated/events/lifecycle-observer.d.ts +0 -18
  210. package/generated/events/lifecycle-observer.js +0 -1
  211. package/generated/events/picker-view.d.ts +0 -29
  212. package/generated/events/picker-view.js +0 -1
  213. package/generated/events/scroll-view.d.ts +0 -18
  214. package/generated/events/scroll-view.js +0 -1
  215. package/generated/events/tab-view.d.ts +0 -54
  216. package/generated/events/tab-view.js +0 -1
  217. package/generated/events/text-field.d.ts +0 -13
  218. package/generated/events/text-field.js +0 -1
  219. package/generated/events/toggle-view.d.ts +0 -14
  220. package/generated/events/toggle-view.js +0 -1
  221. package/generated/i18n/index.d.ts +0 -33
  222. package/generated/i18n/index.js +0 -164
  223. package/generated/i18n/locales/el.d.ts +0 -16
  224. package/generated/i18n/locales/el.js +0 -16
  225. package/generated/i18n/locales/en.d.ts +0 -16
  226. package/generated/i18n/locales/en.js +0 -16
  227. package/generated/i18n/locales/index.d.ts +0 -4
  228. package/generated/i18n/locales/index.js +0 -4
  229. package/generated/index.d.ts +0 -2
  230. package/generated/index.js +0 -3
  231. package/generated/internal/class/cleanup-registry.d.ts +0 -5
  232. package/generated/internal/class/cleanup-registry.js +0 -38
  233. package/generated/internal/class/css-style-observer.d.ts +0 -8
  234. package/generated/internal/class/css-style-observer.js +0 -26
  235. package/generated/internal/class/form-associated-base.d.ts +0 -16
  236. package/generated/internal/class/form-associated-base.js +0 -78
  237. package/generated/internal/class/mutation-observer-set.d.ts +0 -9
  238. package/generated/internal/class/mutation-observer-set.js +0 -42
  239. package/generated/internal/class/mutation-observer-singleton.d.ts +0 -10
  240. package/generated/internal/class/mutation-observer-singleton.js +0 -64
  241. package/generated/internal/class/navigation-path.d.ts +0 -15
  242. package/generated/internal/class/navigation-path.js +0 -84
  243. package/generated/internal/class/navigation-view.d.ts +0 -8
  244. package/generated/internal/class/navigation-view.js +0 -72
  245. package/generated/internal/class/resize-observer-singleton.d.ts +0 -7
  246. package/generated/internal/class/resize-observer-singleton.js +0 -22
  247. package/generated/internal/decorators/adaptive-slot.d.ts +0 -1
  248. package/generated/internal/decorators/adaptive-slot.js +0 -50
  249. package/generated/internal/decorators/custom-element.d.ts +0 -5
  250. package/generated/internal/decorators/custom-element.js +0 -5
  251. package/generated/internal/decorators/index.d.ts +0 -6
  252. package/generated/internal/decorators/index.js +0 -6
  253. package/generated/internal/decorators/microtask-on-connected.d.ts +0 -39
  254. package/generated/internal/decorators/microtask-on-connected.js +0 -67
  255. package/generated/internal/privateNamespace.d.ts +0 -14
  256. package/generated/internal/privateNamespace.js +0 -168
  257. package/generated/internal/utils/add.d.ts +0 -1
  258. package/generated/internal/utils/add.js +0 -7
  259. package/generated/internal/utils/cash/ancestors.d.ts +0 -1
  260. package/generated/internal/utils/cash/ancestors.js +0 -27
  261. package/generated/internal/utils/cash/index.d.ts +0 -24
  262. package/generated/internal/utils/cash/index.js +0 -27
  263. package/generated/internal/utils/cash/next-all.d.ts +0 -1
  264. package/generated/internal/utils/cash/next-all.js +0 -10
  265. package/generated/internal/utils/cash/next.d.ts +0 -1
  266. package/generated/internal/utils/cash/next.js +0 -9
  267. package/generated/internal/utils/cash/prev-all.d.ts +0 -1
  268. package/generated/internal/utils/cash/prev-all.js +0 -10
  269. package/generated/internal/utils/cash/prev.d.ts +0 -1
  270. package/generated/internal/utils/cash/prev.js +0 -9
  271. package/generated/internal/utils/cash/prop.d.ts +0 -18
  272. package/generated/internal/utils/cash/prop.js +0 -30
  273. package/generated/internal/utils/cash/siblings.d.ts +0 -1
  274. package/generated/internal/utils/cash/siblings.js +0 -10
  275. package/generated/internal/utils/clamp.d.ts +0 -1
  276. package/generated/internal/utils/clamp.js +0 -4
  277. package/generated/internal/utils/compare-big-decimals.d.ts +0 -1
  278. package/generated/internal/utils/compare-big-decimals.js +0 -80
  279. package/generated/internal/utils/css-time.d.ts +0 -1
  280. package/generated/internal/utils/css-time.js +0 -3
  281. package/generated/internal/utils/debounce.d.ts +0 -1
  282. package/generated/internal/utils/debounce.js +0 -13
  283. package/generated/internal/utils/define-translations.d.ts +0 -1
  284. package/generated/internal/utils/define-translations.js +0 -3
  285. package/generated/internal/utils/dev-flags.d.ts +0 -3
  286. package/generated/internal/utils/dev-flags.js +0 -5
  287. package/generated/internal/utils/ensure-placeholder.d.ts +0 -1
  288. package/generated/internal/utils/ensure-placeholder.js +0 -41
  289. package/generated/internal/utils/frame.d.ts +0 -1
  290. package/generated/internal/utils/frame.js +0 -6
  291. package/generated/internal/utils/index.d.ts +0 -20
  292. package/generated/internal/utils/index.js +0 -23
  293. package/generated/internal/utils/is-inside.d.ts +0 -1
  294. package/generated/internal/utils/is-inside.js +0 -4
  295. package/generated/internal/utils/kebab-case.d.ts +0 -1
  296. package/generated/internal/utils/kebab-case.js +0 -8
  297. package/generated/internal/utils/list-active.d.ts +0 -7
  298. package/generated/internal/utils/list-active.js +0 -83
  299. package/generated/internal/utils/microtask.d.ts +0 -1
  300. package/generated/internal/utils/microtask.js +0 -3
  301. package/generated/internal/utils/onoff.d.ts +0 -45
  302. package/generated/internal/utils/onoff.js +0 -31
  303. package/generated/internal/utils/set.d.ts +0 -1
  304. package/generated/internal/utils/set.js +0 -7
  305. package/generated/internal/utils/sleep.d.ts +0 -1
  306. package/generated/internal/utils/sleep.js +0 -3
  307. package/generated/internal/utils/slow-hide-show.d.ts +0 -1
  308. package/generated/internal/utils/slow-hide-show.js +0 -16
  309. package/generated/internal/utils/timeout.d.ts +0 -5
  310. package/generated/internal/utils/timeout.js +0 -16
  311. package/generated/internal/utils/touch-glass.d.ts +0 -7
  312. package/generated/internal/utils/touch-glass.js +0 -19
  313. package/generated/internal/vendor/morphdom.d.ts +0 -6
  314. package/generated/internal/vendor/morphdom.js +0 -720
  315. package/generated/morphdom/index.d.ts +0 -8
  316. package/generated/morphdom/index.js +0 -8
  317. package/generated/morphdom/morph.d.ts +0 -4
  318. package/generated/morphdom/morph.js +0 -10
  319. package/generated/morphdom/query-morph.d.ts +0 -5
  320. package/generated/morphdom/query-morph.js +0 -12
  321. package/generated/morphdom/render-to-string.d.ts +0 -12
  322. package/generated/morphdom/render-to-string.js +0 -48
  323. package/generated/morphdom/unsafe-html.d.ts +0 -2
  324. package/generated/morphdom/unsafe-html.js +0 -4
  325. package/generated/namespace-browser/base.d.ts +0 -45
  326. package/generated/namespace-browser/base.js +0 -115
  327. package/generated/namespace-browser/event.d.ts +0 -10
  328. package/generated/namespace-browser/event.js +0 -1
  329. package/generated/namespace-browser/index.d.ts +0 -7
  330. package/generated/namespace-browser/index.js +0 -1
  331. package/generated/snapshot/index.d.ts +0 -9
  332. package/generated/snapshot/index.js +0 -60
  333. package/generated/tpl/html.d.ts +0 -5
  334. package/generated/tpl/html.js +0 -7
  335. package/generated/tpl/index.d.ts +0 -6
  336. package/generated/tpl/index.js +0 -6
  337. package/generated/tpl/is-template-result.d.ts +0 -3
  338. package/generated/tpl/is-template-result.js +0 -1
  339. package/generated/tpl/render.d.ts +0 -2
  340. package/generated/tpl/render.js +0 -132
  341. /package/{web-components.css-data → css-data}/en.json +0 -0
  342. /package/scss/utils/{_scroll-view.scss → _scroll-view.scss.txt} +0 -0
@@ -1,526 +0,0 @@
1
- var _a;
2
- import { I18n } from '../i18n';
3
- import { CleanupRegistry } from '../internal/class/cleanup-registry';
4
- import { FormAssociatedBase, getInternals } from '../internal/class/form-associated-base';
5
- import { MutationObserverSet } from '../internal/class/mutation-observer-set';
6
- import { $, compareBigDecimals, devFlags, kebabCase, onoff, set } from '../internal/utils';
7
- import { queryMorph } from '../morphdom';
8
- import { html } from '../tpl';
9
- const keyboardTypes = ['decimal-pad', 'number-pad', 'default'];
10
- /**
11
- * @summary A control that displays an editable text area.
12
- *
13
- * @fires {{ detail: { text: string } }} commit — Triggered when user interacts with the input area
14
- *
15
- * @slot label
16
- * @slot {HTMLOptionElement[]} validity-options
17
- */
18
- export class TextField extends FormAssociatedBase {
19
- static get observedAttributes() {
20
- return [
21
- 'prompt',
22
- 'minimum',
23
- 'maximum',
24
- 'min-length',
25
- 'max-length',
26
- 'label',
27
- 'name',
28
- 'text',
29
- 'text-input-autocapitalization',
30
- /**
31
- * @type {boolean}
32
- */
33
- 'disable-autocorrection',
34
- /**
35
- * @type {decimal-pad|number-pad|default}
36
- */
37
- 'keyboard-type',
38
- /**
39
- * @type {boolean}
40
- */
41
- 'required',
42
- /**
43
- * @type {boolean}
44
- */
45
- 'disabled',
46
- ];
47
- }
48
- static #template;
49
- static get template() {
50
- return (this.#template ??= $(html `<label part="root text-field-stack">
51
- <div part="root text-field-label-stack">
52
- <slot name="label"></slot>
53
- </div>
54
- <div part="root text-field-input-stack">
55
- <input type="text" part="root input text-field-form-input" />
56
- </div>
57
- <slot name="validity-options" hidden></slot>
58
- </label>`));
59
- }
60
- #renderValidityMsgs = (entries) => {
61
- if (devFlags.debug)
62
- console.debug(`${_a.name} ⚡️ mutation`);
63
- this.setValidity(this.validity, this.validationMessage);
64
- };
65
- #shadowRoot;
66
- // #internals: ElementInternals
67
- #customValidity = '';
68
- // #validitiesSlot?: HTMLSlotElement
69
- #slots = new Map();
70
- #validityObservers = new MutationObserverSet(this.#renderValidityMsgs);
71
- #input;
72
- get #internals() {
73
- return getInternals(this);
74
- }
75
- constructor() {
76
- super();
77
- this.#shadowRoot = this.attachShadow({ mode: 'closed' });
78
- this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
79
- for (const slot of this.#shadowRoot.querySelectorAll('slot'))
80
- this.#slots?.set(slot.name, slot);
81
- CleanupRegistry.register(this, () => {
82
- this.#slots = new Map();
83
- });
84
- CleanupRegistry.unregister(this, 'validities');
85
- CleanupRegistry.register(this, onoff('slotchange', this.#handleValiditiesSlotchange, this.#slots?.get('validity-options')).on(), 'validities');
86
- this.#input = this.#shadowRoot.querySelector('input') ?? undefined;
87
- CleanupRegistry.register(this, onoff([{ types: 'focusin', listener: this.#handleFocusin }], this).on());
88
- CleanupRegistry.register(this, onoff([
89
- { types: 'blur', listener: this.#handleInputBlur },
90
- { types: 'input', listener: this.#handleInputInput },
91
- { types: 'beforeinput', listener: this.#handleInputBeforeinput },
92
- { types: 'paste', listener: this.#handleInputPaste },
93
- ], this.#input).on());
94
- CleanupRegistry.register(this, onoff('localechange', () => {
95
- this.text = this.text;
96
- }, I18n.on).on());
97
- }
98
- attributeChangedCallback(name, oldValue, newValue) {
99
- if (devFlags.debug)
100
- console.debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
101
- switch (name) {
102
- case 'keyboard-type':
103
- switch (newValue) {
104
- case 'decimal-pad':
105
- this.#input?.setAttribute('inputmode', 'decimal');
106
- break;
107
- case 'number-pad':
108
- this.#input?.setAttribute('inputmode', 'numeric');
109
- break;
110
- case 'default':
111
- default:
112
- this.#input?.removeAttribute('inputmode');
113
- break;
114
- }
115
- this.#sendValueToForm();
116
- break;
117
- case 'text-input-autocapitalization':
118
- switch (newValue) {
119
- case 'never':
120
- this.#input?.setAttribute('autocapitalize', 'off');
121
- break;
122
- case 'characters':
123
- this.#input?.setAttribute('autocapitalize', newValue);
124
- break;
125
- case 'words':
126
- this.#input?.setAttribute('autocapitalize', newValue);
127
- break;
128
- default:
129
- case 'sentences':
130
- this.#input?.setAttribute('autocapitalize', 'on');
131
- break;
132
- }
133
- break;
134
- case 'disable-autocorrection':
135
- if ('' === newValue)
136
- for (const [k, v] of [
137
- ['autocomplete', 'off'],
138
- ['autocorrect', 'off'],
139
- ['spellcheck', 'false'],
140
- ])
141
- this.#input?.setAttribute(k, v);
142
- else
143
- for (const k of ['autocomplete', 'autocorrect', 'spellcheck'])
144
- this.#input?.removeAttribute(k);
145
- break;
146
- case 'text':
147
- // if (this.#input) this.#input.value = newValue ?? ''
148
- // nothing happens //this.text = newValue ?? ''
149
- break;
150
- case 'required':
151
- this.#input?.setAttribute(name, newValue ?? ''); // else this.#input?.removeAttribute(name)
152
- this.#sendValueToForm();
153
- break;
154
- case 'name':
155
- case 'minimum':
156
- case 'maximum':
157
- this.#sendValueToForm(false);
158
- break;
159
- case 'prompt':
160
- this.#input?.setAttribute('placeholder', newValue ?? ''); // else this.#input?.removeAttribute(name)
161
- break;
162
- case 'min-length':
163
- this.#input?.setAttribute('minlength', newValue ?? '');
164
- this.#sendValueToForm();
165
- break;
166
- case 'max-length':
167
- this.#input?.setAttribute('maxlength', newValue ?? '');
168
- this.#sendValueToForm();
169
- break;
170
- case 'label':
171
- queryMorph('[slot=label]', html `<label-view slot="label" foreground="secondary">${newValue ? html `<span>${newValue}</span>` : null}</label-view>`, this);
172
- // this.#sendValueToForm()
173
- break;
174
- case 'disabled':
175
- for (const el of this.#shadowRoot.querySelectorAll('input'))
176
- el.toggleAttribute('disabled', !newValue);
177
- break;
178
- }
179
- // render pattern
180
- switch (this.keyboardType) {
181
- case 'decimal-pad':
182
- const allowedSignsRegex2 = String.raw `[+\-]?|[+\-]?(\d+([.,]\d*)?|[.,]\d*)`, // allow single '+' or '-', then allow only one ',' or '.' and finally only digits
183
- digitsDecimalsOnlyRegex = String.raw `(\d+([.,]\d*)?|[.,]\d*)?`; // allow only one ',' or '.' and finally only digits
184
- this.#input?.setAttribute('pattern', this.negativeNumbersAllowed ? allowedSignsRegex2 : digitsDecimalsOnlyRegex);
185
- break;
186
- case 'number-pad':
187
- const allowedSignsRegex = String.raw `([+\-]|\d+|[+\-]\d+)?`, // allow single '+' or '-', then allow only digits
188
- digitsOnlyRegex = String.raw `\d*`; // allow only digits
189
- this.#input?.setAttribute('pattern', this.negativeNumbersAllowed ? allowedSignsRegex : digitsOnlyRegex);
190
- break;
191
- default:
192
- this.#input?.removeAttribute('pattern');
193
- break;
194
- }
195
- }
196
- disconnectedCallback() {
197
- super.disconnectedCallback();
198
- this.#validityObservers.unobserveAll();
199
- }
200
- connectedCallback() {
201
- super.connectedCallback();
202
- // finally
203
- if (!this.hasAttribute('text'))
204
- return;
205
- this.text = this.getAttribute('text') ?? ''; // this.#input.value = this.getAttribute('text') ?? ''
206
- this.#sendValueToForm(false);
207
- }
208
- get keyboardType() {
209
- return keyboardTypes.includes(this.getAttribute('keyboard-type') ?? '') ? this.getAttribute('keyboard-type') : 'default';
210
- }
211
- get text() {
212
- return this.#input?.value ?? '';
213
- }
214
- set text(v) {
215
- if (!this.#input)
216
- return;
217
- const nv = this.#patternTest(v) ? v : '';
218
- set(this.#input, 'value', nv);
219
- // this.text AND this.value have NOW been updated to new values
220
- // if user is NOT interacting replace new-text/input.value with the formatted version of the new-text/input.value!
221
- if (document.activeElement !== this && 0 < this.#input.value.length) {
222
- const finalText = this.value.replace(/[.,]/g, I18n.decimalSeparator);
223
- set(this.#input, 'value', finalText); // if (this.text !== finalText) this.#input.value = finalText
224
- }
225
- }
226
- #handleValiditiesSlotchange = ({ type, target: slot }) => {
227
- if (devFlags.debug)
228
- console.debug(`${_a.name} ⚡️ ${type}`);
229
- if (!(slot instanceof HTMLSlotElement))
230
- return;
231
- const assigned = slot.assignedElements();
232
- this.#validityObservers.syncObservations(assigned, ['value', 'label']);
233
- // if (0 < assigned.length)
234
- this.#renderValidityMsgs([]);
235
- };
236
- #handleFocusin = (evt) => {
237
- if (devFlags.debug)
238
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
239
- if (evt.target === this)
240
- this.#input?.focus();
241
- };
242
- #sendValueToForm = (dispatchEvent = true) => {
243
- // input.value has already been updated/synced !!
244
- if (this.matches(':disabled'))
245
- return this.setValidity({});
246
- // if (this.hasAttribute('required')) {
247
- if (this.#input?.matches(':invalid')) {
248
- this.setValidity(this.#input?.validity, this.#input?.validationMessage);
249
- }
250
- else if (['number-pad', 'decimal-pad'].includes(this.keyboardType) && (this.hasAttribute('minimum') || this.hasAttribute('maximum'))) {
251
- const underflow = compareBigDecimals(this.value, this.getAttribute('minimum') ?? '-Infinity'), overflow = compareBigDecimals(this.value, this.getAttribute('maximum') ?? 'Infinity');
252
- if (0 > underflow)
253
- this.setValidity({ rangeUnderflow: true });
254
- else if (0 < overflow)
255
- this.setValidity({ rangeOverflow: true });
256
- else
257
- this.setValidity({});
258
- }
259
- else {
260
- this.setValidity({});
261
- }
262
- const entries = new FormData();
263
- entries.append(this.name, this.text);
264
- this.#internals.setFormValue(entries);
265
- if (dispatchEvent)
266
- this.dispatchEvent(new CustomEvent('commit', { detail: { text: this.text }, bubbles: true, composed: true }));
267
- };
268
- #handleInputPaste = (evt) => {
269
- if (devFlags.debug)
270
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
271
- const { target: input } = evt;
272
- if (!(input instanceof HTMLInputElement))
273
- return;
274
- evt.preventDefault();
275
- const data = this.#identity(evt.clipboardData?.getData('text') ?? ''); // number is now sanitized but contains edge cases like '+' and also global one separator that could be wither dot or decimal.
276
- if (0 === data.length)
277
- return this.shake(); //.then(this.reportValidity) // nothing to paste
278
- const start = input.selectionStart ?? 0, end = input.selectionEnd ?? 0, before = input.value.slice(0, start), after = input.value.slice(end), newText = `${before}${data}${after}`;
279
- if (-1 < input.maxLength && input.maxLength < newText.length)
280
- return this.shake(); //.then(this.reportValidity) // exceeding maxlength
281
- input.value = newText;
282
- const newCaret = start + data.length;
283
- input.setSelectionRange(newCaret, newCaret); // move caret after inserted char
284
- this.#sendValueToForm(); // input.dispatchEvent(new InputEvent('input', { bubbles: true })) // Manually trigger input event so listeners react
285
- };
286
- // NOTE: identity MUST always pass beforeinput checks
287
- #identity = (str) => {
288
- // 'ab-1.2.3.4x yz ' // "-1.234"
289
- // '++12..34 ' // "+12.34"
290
- // '-+5.6.7.8 ' // "-5.678"
291
- // ' -+5.6,7.8 ' // "-5.678"
292
- // 'foo123bar ' // "123"
293
- // '.12.3 ' // ".123"
294
- // ' http://localhost:5173/input.html' // "5173."
295
- // ' http://localhost:51,73/input.html' // "51,73"
296
- // ' +- 0000.' // "+0000."
297
- // ' +' // "+"
298
- // ' +0000234' // "+0000234"
299
- // ' +-1.2.3.4x yz ' // "+1.234"
300
- let seenSign = false;
301
- switch (this.keyboardType) {
302
- case 'decimal-pad': // allow only ^+- and then only one instance of ., finally remove all non digit rest appearances
303
- let seenDot = false;
304
- return [...`${str.trim()}`].reduce((acc, ch, i) => {
305
- // +- signs are allowed
306
- if (this.negativeNumbersAllowed)
307
- if (!seenSign && (ch === '+' || ch === '-')) {
308
- seenSign = true;
309
- return `${acc}${ch}`;
310
- }
311
- if ((ch === '.' || ch === ',') && !seenDot) {
312
- seenDot = true;
313
- return `${acc}${ch}`;
314
- }
315
- if (/\d/.test(ch))
316
- return `${acc}${ch}`;
317
- return acc; // skip everything else
318
- }, '');
319
- case 'number-pad': // allow only ^+- finally remove all non digit rest appearances
320
- return [...`${str.trim()}`].reduce((acc, ch, i) => {
321
- // +- signs are allowed
322
- if (this.negativeNumbersAllowed)
323
- if (!seenSign && (ch === '+' || ch === '-')) {
324
- seenSign = true;
325
- return `${acc}${ch}`;
326
- }
327
- if (/\d/.test(ch))
328
- return `${acc}${ch}`;
329
- return acc; // skip everything else
330
- }, '');
331
- default:
332
- return `${str}`;
333
- }
334
- };
335
- #patternTest = (str) => {
336
- switch (this.keyboardType) {
337
- case 'decimal-pad':
338
- const allowedSignsRegex2 = /^[+-]?$|^[+-]?(\d+([.,]\d*)?|[.,]\d*)$/, // allow single '+' or '-', then allow only one ',' or '.' and finally only digits
339
- digitsDecimalsOnlyRegex = /^(\d+([.,]\d*)?|[.,]\d*)?$/; // allow only one ',' or '.' and finally only digits
340
- return (this.negativeNumbersAllowed ? allowedSignsRegex2 : digitsDecimalsOnlyRegex).test(str);
341
- // // isValidDecimal(""); // true
342
- // // isValidDecimal("+"); // true
343
- // // isValidDecimal("-"); // true
344
- // // isValidDecimal("123"); // true
345
- // // isValidDecimal("+123"); // true
346
- // // isValidDecimal("-456"); // true
347
- // // isValidDecimal("12.34"); // true
348
- // // isValidDecimal("-0,56"); // true
349
- // // isValidDecimal(".78"); // true
350
- // // isValidDecimal(",9"); // true
351
- // // isValidDecimal("12.3.4"); // false
352
- // // isValidDecimal("12,3,4"); // false
353
- // // isValidDecimal("12-3"); // false
354
- // // isValidDecimal("12a"); // false
355
- case 'number-pad':
356
- const allowedSignsRegex = /^([+-]|\d+|[+-]\d+)?$/, // allow single '+' or '-', then allow only digits
357
- digitsOnlyRegex = /^(\d+)?$/; // allow only digits
358
- return (this.negativeNumbersAllowed ? allowedSignsRegex : digitsOnlyRegex).test(str);
359
- // // isValidInteger(""); // true
360
- // // isValidInteger("+"); // true
361
- // // isValidInteger("-"); // true
362
- // // isValidInteger("123"); // true
363
- // // isValidInteger("+123"); // true
364
- // // isValidInteger("-456"); // true
365
- // // isValidInteger("12-3"); // false
366
- // // isValidInteger("++123"); // false
367
- // // isValidInteger("123a"); // false
368
- default:
369
- return true;
370
- }
371
- };
372
- #handleInputBeforeinput = (evt) => {
373
- if (devFlags.debug)
374
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
375
- const { target: input } = evt;
376
- if (!(input instanceof HTMLInputElement))
377
- return;
378
- if ('insertText' !== evt.inputType)
379
- return;
380
- const data = evt.data ?? '';
381
- if (-1 < input.maxLength && 0 === data.length) {
382
- evt.preventDefault();
383
- return this.shake(); //.then(this.reportValidity)
384
- } // nothing to add
385
- const start = input.selectionStart ?? 0, end = input.selectionEnd ?? 0, before = this.text.slice(0, start), after = this.text.slice(end), newText = `${before}${data}${after}`;
386
- if (0 === newText.length)
387
- return;
388
- switch (input.getAttribute('inputmode')) {
389
- case 'decimal':
390
- // const allowedSignsRegex2 = /^[+-]?$|^[+-]?(\d+([.,]\d*)?|[.,]\d*)$/, // allow single '+' or '-', then allow only one ',' or '.' and finally only digits
391
- // digitsDecimalsOnlyRegex = /^(\d+([.,]\d*)?|[.,]\d*)?$/ // allow only one ',' or '.' and finally only digits
392
- // if ((this.min < 0 ? allowedSignsRegex2 : digitsDecimalsOnlyRegex).test(newText)) break
393
- if (this.#patternTest(newText))
394
- break;
395
- evt.preventDefault();
396
- return this.shake(); //.then(this.reportValidity)
397
- case 'numeric':
398
- // const allowedSignsRegex = /^([+-]|\d+|[+-]\d+)?$/, // allow single '+' or '-', then allow only digits
399
- // digitsOnlyRegex = /^(\d+)?$/ // allow only digits
400
- // if ((this.min < 0 ? allowedSignsRegex : digitsOnlyRegex).test(newText)) break
401
- if (this.#patternTest(newText))
402
- break;
403
- evt.preventDefault();
404
- return this.shake(); //.then(this.reportValidity)
405
- // this.setValidity(prevValidity, prevValiditationMessage) // restore
406
- }
407
- };
408
- #handleInputBlur = ({ type, target: input }) => {
409
- if (devFlags.debug)
410
- console.debug(`${_a.name} ⚡️ ${type}`);
411
- if (!(input instanceof HTMLInputElement))
412
- return;
413
- if (0 === input.value.length)
414
- return;
415
- const finalText = this.value.replace(/[.,]/g, I18n.decimalSeparator);
416
- if (!set(input, 'value', finalText))
417
- return;
418
- this.#sendValueToForm();
419
- };
420
- #handleInputInput = (evt) => {
421
- if (devFlags.debug)
422
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
423
- this.#sendValueToForm();
424
- };
425
- /**
426
- * Form participation property
427
- */
428
- get name() {
429
- return this.getAttribute('name') ?? this.getAttribute('label') ?? this.querySelector(':scope>[slot=label]')?.textContent ?? '';
430
- }
431
- get value() {
432
- // text allows special edge cases, like '-.' or '+' and generally might be invalid number. It might also be localized and not US based.
433
- // here we make sure it is number-like, to be used in number operations.
434
- switch (this.keyboardType) {
435
- case 'decimal-pad':
436
- case 'number-pad':
437
- if ('string' !== typeof this.text)
438
- return '0';
439
- const value = this.text.replace(/[.,]/g, '.');
440
- // Capture optional leading sign
441
- const sign = value.startsWith('-') ? '-' : '';
442
- // Strip sign for processing
443
- let s = value.replace(/^[+-]/, '');
444
- // Split on dot (take only first two parts in case of multiple dots — though
445
- // your input guarantees one, this is defensive)
446
- const [intPart = '', fracPart = ''] = s.split('.'), hasDot = s.includes('.');
447
- // Remove leading zeros from integer part, keep at least '0'
448
- const cleanInt = intPart.replace(/^0+/, '') || '0';
449
- // Remove trailing zeros from fractional part
450
- const cleanFrac = fracPart.replace(/0+$/, '');
451
- // Build result
452
- const result = hasDot && cleanFrac.length > 0 ? `${sign}${cleanInt}.${cleanFrac}` : `${sign}${cleanInt}`;
453
- return result.replace(/^-0(\.0+)?$/, '0');
454
- default:
455
- return this.text;
456
- }
457
- }
458
- get valueAsNumber() {
459
- switch (this.keyboardType) {
460
- case 'decimal-pad':
461
- case 'number-pad':
462
- return Number(this.value);
463
- default:
464
- return '';
465
- }
466
- }
467
- get negativeNumbersAllowed() {
468
- const min = this.getAttribute('minimum') ?? '-Infinity', max = this.getAttribute('maximum') ?? 'Infinity';
469
- return compareBigDecimals('0', min) >= 0 && compareBigDecimals('0', max) <= 0;
470
- }
471
- setValidity = (flags, message, anchor) => {
472
- // let msg
473
- // if (message)
474
- for (const k in flags) {
475
- const key = k; // ✅ type-safe cast
476
- if (true !== flags[key])
477
- continue;
478
- for (const el of this.#slots?.get('validity-options')?.assignedElements({ flatten: true }) ?? []) {
479
- if (!el.matches('option'))
480
- continue;
481
- const { label, value } = el;
482
- if (`${kebabCase(key)}` === value) {
483
- message = label;
484
- break;
485
- }
486
- else if (`${kebabCase(key)}:${message}` === value) {
487
- message = label;
488
- break;
489
- }
490
- }
491
- }
492
- if (!message)
493
- for (const k in flags) {
494
- const key = k; // ✅ type-safe cast
495
- if (true !== flags[key])
496
- continue;
497
- message = kebabCase(key);
498
- break;
499
- }
500
- if (devFlags.debug)
501
- console.debug(`${_a.name} ⚡️ validity-change`);
502
- return this.#internals.setValidity(flags, this.#customValidity || message, anchor ?? this.#input);
503
- };
504
- setCustomValidity = (message) => {
505
- this.#customValidity = message;
506
- if (this.#customValidity)
507
- this.#internals.setValidity({ ...this.#internals.validity, customError: true }, message);
508
- else
509
- this.#sendValueToForm(false);
510
- };
511
- formStateRestoreCallback(state, reason) {
512
- this.text = state;
513
- }
514
- formAssociatedCallback(form) {
515
- this.#sendValueToForm(false);
516
- }
517
- formDisabledCallback(disabled) {
518
- for (const el of this.#shadowRoot.querySelectorAll('input'))
519
- el.toggleAttribute('disabled', !disabled);
520
- }
521
- formResetCallback() {
522
- this.text = '';
523
- this.#sendValueToForm(false);
524
- }
525
- }
526
- _a = TextField;
@@ -1,41 +0,0 @@
1
- import { FormAssociatedBase } from '../internal/class/form-associated-base';
2
- declare const toggleStyles: readonly ["switch", "button"];
3
- export type ToggleStyle = (typeof toggleStyles)[number];
4
- /**
5
- * @summary A control that switches between on and off states.
6
- *
7
- * @fires toggle:change — User toggled the control
8
- *
9
- * @slot label
10
- * @slot {HTMLOptionElement[]} validity-options
11
- */
12
- export declare class ToggleView extends FormAssociatedBase {
13
- #private;
14
- static get observedAttributes(): string[];
15
- static get template(): DocumentFragment;
16
- constructor();
17
- attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
18
- disconnectedCallback(): void;
19
- connectedCallback(): void;
20
- get toggleStyle(): ToggleStyle;
21
- get isOn(): boolean;
22
- set isOn(v: boolean);
23
- /**
24
- * Form participation property
25
- */
26
- get name(): string;
27
- get value(): string | null;
28
- set value(v: string | null);
29
- setValidity: (flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement) => void;
30
- setCustomValidity: (message: string) => void;
31
- formStateRestoreCallback(state: string, reason: string): void;
32
- formAssociatedCallback(form: HTMLFormElement): void;
33
- formDisabledCallback(disabled: boolean): void;
34
- formResetCallback(): void;
35
- }
36
- declare global {
37
- interface HTMLElementTagNameMap {
38
- 'toggle-view': ToggleView;
39
- }
40
- }
41
- export {};