@threadlabs/looma 0.5.1 → 0.6.0-rc.1

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 (341) hide show
  1. package/README.md +1 -1
  2. package/components/shared/overlay.js +3 -0
  3. package/components/ui-button/ui-button.html +27 -14
  4. package/components/ui-callout/ui-callout.html +1 -1
  5. package/components/ui-checkbox/ui-checkbox.html +1 -1
  6. package/components/ui-cluster/ui-cluster.html +6 -6
  7. package/components/ui-combobox/ui-combobox.html +35 -27
  8. package/components/ui-container/ui-container.html +4 -4
  9. package/components/ui-context-menu/ui-context-menu.html +2 -2
  10. package/components/ui-dialog/ui-dialog.html +21 -8
  11. package/components/ui-disclosure/ui-disclosure.html +19 -4
  12. package/components/ui-editable/ui-editable.html +6 -6
  13. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +21 -21
  14. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +26 -26
  15. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +39 -39
  16. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +26 -22
  17. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +68 -52
  18. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +42 -38
  19. package/components/ui-editor-toolbar/ui-editor-toolbar.html +9 -9
  20. package/components/ui-floating-action-button/ui-floating-action-button.html +16 -22
  21. package/components/ui-form-field/ui-form-field.html +18 -7
  22. package/components/ui-grid/ui-grid.html +6 -6
  23. package/components/ui-icon/ui-icon.html +5 -1
  24. package/components/ui-icon-button/ui-icon-button.html +68 -34
  25. package/components/ui-input/ui-input.html +2 -2
  26. package/components/ui-menu/ui-menu.html +15 -4
  27. package/components/ui-menu-item/ui-menu-item.html +5 -5
  28. package/components/ui-popover/ui-popover.html +3 -3
  29. package/components/ui-popover/ui-popover.js +10 -2
  30. package/components/ui-reel/ui-reel.html +6 -6
  31. package/components/ui-search-result-row/ui-search-result-row.html +9 -9
  32. package/components/ui-search-shell/ui-search-shell.html +10 -3
  33. package/components/ui-search-shell/ui-search-shell.js +9 -0
  34. package/components/ui-select/ui-select.html +2 -2
  35. package/components/ui-sidebar/ui-sidebar.html +11 -11
  36. package/components/ui-stack/ui-stack.html +6 -6
  37. package/components/ui-switcher/ui-switcher.html +6 -6
  38. package/components/ui-tabs/ui-tabs.html +19 -5
  39. package/components/ui-textarea/ui-textarea.html +2 -2
  40. package/components/ui-toast-region/ui-toast-region.html +3 -3
  41. package/components/ui-tooltip/ui-tooltip.html +1 -1
  42. package/components/ui-top-bar/ui-top-bar.html +5 -5
  43. package/components/ui-tree/ui-tree.html +7 -0
  44. package/components/ui-tree-item/ui-tree-item.html +20 -7
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.js +2 -2
  47. package/package.json +2 -2
  48. package/styles/ui-affordance-scope.css +1 -1
  49. package/styles/ui-avatar-group.css +1 -1
  50. package/styles/ui-avatar.css +1 -1
  51. package/styles/ui-badge.css +1 -1
  52. package/styles/ui-button.css +25 -15
  53. package/styles/ui-callout.css +2 -2
  54. package/styles/ui-checkbox.css +2 -2
  55. package/styles/ui-cluster.css +7 -7
  56. package/styles/ui-combobox.css +24 -24
  57. package/styles/ui-container.css +5 -5
  58. package/styles/ui-context-menu.css +3 -3
  59. package/styles/ui-dialog.css +26 -9
  60. package/styles/ui-disclosure.css +23 -7
  61. package/styles/ui-editable.css +7 -7
  62. package/styles/ui-editor-insert-table-grid.css +21 -21
  63. package/styles/ui-editor-mention-menu.css +26 -26
  64. package/styles/ui-editor-slash-menu.css +40 -40
  65. package/styles/ui-editor-table-context-menu.css +21 -21
  66. package/styles/ui-editor-table-overlay.css +49 -49
  67. package/styles/ui-editor-table-toolbar.css +35 -35
  68. package/styles/ui-editor-toolbar.css +10 -10
  69. package/styles/ui-floating-action-button.css +17 -23
  70. package/styles/ui-form-field.css +24 -10
  71. package/styles/ui-grid.css +7 -7
  72. package/styles/ui-icon-button.css +74 -35
  73. package/styles/ui-icon.css +1 -1
  74. package/styles/ui-input.css +3 -3
  75. package/styles/ui-menu-item.css +6 -6
  76. package/styles/ui-menu.css +19 -7
  77. package/styles/ui-popover.css +4 -4
  78. package/styles/ui-radio-group.css +1 -1
  79. package/styles/ui-radio.css +1 -1
  80. package/styles/ui-reel.css +7 -7
  81. package/styles/ui-search-result-row.css +10 -10
  82. package/styles/ui-search-shell.css +14 -5
  83. package/styles/ui-select.css +3 -3
  84. package/styles/ui-separator.css +1 -1
  85. package/styles/ui-sidebar.css +12 -12
  86. package/styles/ui-stack.css +7 -7
  87. package/styles/ui-switch.css +1 -1
  88. package/styles/ui-switcher.css +7 -7
  89. package/styles/ui-tabs.css +21 -7
  90. package/styles/ui-textarea.css +3 -3
  91. package/styles/ui-toast-region.css +3 -3
  92. package/styles/ui-tooltip.css +2 -2
  93. package/styles/ui-top-bar.css +6 -6
  94. package/styles/ui-tree-item.css +30 -9
  95. package/styles/ui-tree.css +8 -2
  96. package/theme-dark.css +42 -103
  97. package/theme-high-contrast.css +18 -22
  98. package/theme-light.css +15 -41
  99. package/tokens.css +149 -201
  100. package/vanilla/UiAffordanceScope.d.ts +1 -1
  101. package/vanilla/UiAffordanceScope.js +2 -2
  102. package/vanilla/UiAvatar.d.ts +1 -1
  103. package/vanilla/UiAvatar.js +2 -2
  104. package/vanilla/UiAvatarGroup.d.ts +1 -1
  105. package/vanilla/UiAvatarGroup.js +2 -2
  106. package/vanilla/UiBadge.d.ts +1 -1
  107. package/vanilla/UiBadge.js +2 -2
  108. package/vanilla/UiButton.d.ts +3 -1
  109. package/vanilla/UiButton.js +3 -3
  110. package/vanilla/UiCallout.d.ts +1 -1
  111. package/vanilla/UiCallout.js +2 -2
  112. package/vanilla/UiCheckbox.d.ts +1 -1
  113. package/vanilla/UiCheckbox.js +2 -2
  114. package/vanilla/UiCluster.d.ts +1 -1
  115. package/vanilla/UiCluster.js +2 -2
  116. package/vanilla/UiCombobox.d.ts +1 -1
  117. package/vanilla/UiCombobox.js +3 -3
  118. package/vanilla/UiContainer.d.ts +1 -1
  119. package/vanilla/UiContainer.js +2 -2
  120. package/vanilla/UiContextMenu.d.ts +1 -1
  121. package/vanilla/UiContextMenu.js +2 -2
  122. package/vanilla/UiDialog.d.ts +1 -1
  123. package/vanilla/UiDialog.js +2 -2
  124. package/vanilla/UiDisclosure.d.ts +2 -1
  125. package/vanilla/UiDisclosure.js +3 -3
  126. package/vanilla/UiEditable.d.ts +1 -1
  127. package/vanilla/UiEditable.js +2 -2
  128. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  129. package/vanilla/UiEditorInsertTableGrid.js +3 -3
  130. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  131. package/vanilla/UiEditorMentionMenu.js +3 -3
  132. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  133. package/vanilla/UiEditorSlashMenu.js +2 -2
  134. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  135. package/vanilla/UiEditorTableContextMenu.js +3 -3
  136. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  137. package/vanilla/UiEditorTableOverlay.js +3 -3
  138. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  139. package/vanilla/UiEditorTableToolbar.js +3 -3
  140. package/vanilla/UiEditorToolbar.d.ts +1 -1
  141. package/vanilla/UiEditorToolbar.js +2 -2
  142. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  143. package/vanilla/UiFloatingActionButton.js +2 -2
  144. package/vanilla/UiFormField.d.ts +1 -1
  145. package/vanilla/UiFormField.js +15 -6
  146. package/vanilla/UiGrid.d.ts +1 -1
  147. package/vanilla/UiGrid.js +2 -2
  148. package/vanilla/UiIcon.d.ts +1 -1
  149. package/vanilla/UiIcon.js +3 -3
  150. package/vanilla/UiIconButton.d.ts +1 -1
  151. package/vanilla/UiIconButton.js +2 -2
  152. package/vanilla/UiInput.d.ts +1 -1
  153. package/vanilla/UiInput.js +2 -2
  154. package/vanilla/UiMenu.d.ts +2 -1
  155. package/vanilla/UiMenu.js +3 -3
  156. package/vanilla/UiMenuItem.d.ts +1 -1
  157. package/vanilla/UiMenuItem.js +2 -2
  158. package/vanilla/UiPopover.d.ts +1 -1
  159. package/vanilla/UiPopover.js +2 -2
  160. package/vanilla/UiRadio.d.ts +1 -1
  161. package/vanilla/UiRadio.js +2 -2
  162. package/vanilla/UiRadioGroup.d.ts +1 -1
  163. package/vanilla/UiRadioGroup.js +2 -2
  164. package/vanilla/UiReel.d.ts +1 -1
  165. package/vanilla/UiReel.js +2 -2
  166. package/vanilla/UiSearchResultRow.d.ts +1 -1
  167. package/vanilla/UiSearchResultRow.js +2 -2
  168. package/vanilla/UiSearchShell.d.ts +1 -1
  169. package/vanilla/UiSearchShell.js +2 -2
  170. package/vanilla/UiSelect.d.ts +1 -1
  171. package/vanilla/UiSelect.js +2 -2
  172. package/vanilla/UiSeparator.d.ts +1 -1
  173. package/vanilla/UiSeparator.js +2 -2
  174. package/vanilla/UiSidebar.d.ts +1 -1
  175. package/vanilla/UiSidebar.js +2 -2
  176. package/vanilla/UiStack.d.ts +1 -1
  177. package/vanilla/UiStack.js +2 -2
  178. package/vanilla/UiSwitch.d.ts +1 -1
  179. package/vanilla/UiSwitch.js +2 -2
  180. package/vanilla/UiSwitcher.d.ts +1 -1
  181. package/vanilla/UiSwitcher.js +2 -2
  182. package/vanilla/UiTabs.d.ts +2 -1
  183. package/vanilla/UiTabs.js +3 -3
  184. package/vanilla/UiTextarea.d.ts +1 -1
  185. package/vanilla/UiTextarea.js +2 -2
  186. package/vanilla/UiToastRegion.d.ts +1 -1
  187. package/vanilla/UiToastRegion.js +3 -3
  188. package/vanilla/UiTooltip.d.ts +1 -1
  189. package/vanilla/UiTooltip.js +2 -2
  190. package/vanilla/UiTopBar.d.ts +1 -1
  191. package/vanilla/UiTopBar.js +1 -1
  192. package/vanilla/UiTree.d.ts +2 -1
  193. package/vanilla/UiTree.js +3 -3
  194. package/vanilla/UiTreeItem.d.ts +1 -1
  195. package/vanilla/UiTreeItem.js +2 -2
  196. package/vue/UiAffordanceScope.d.ts +2 -2
  197. package/vue/UiAffordanceScope.vue +92 -73
  198. package/vue/UiAvatar.d.ts +7 -7
  199. package/vue/UiAvatar.vue +145 -105
  200. package/vue/UiAvatarGroup.d.ts +4 -4
  201. package/vue/UiAvatarGroup.vue +134 -118
  202. package/vue/UiBadge.d.ts +4 -4
  203. package/vue/UiBadge.vue +113 -114
  204. package/vue/UiButton.d.ts +10 -6
  205. package/vue/UiButton.vue +295 -248
  206. package/vue/UiCallout.d.ts +2 -2
  207. package/vue/UiCallout.vue +154 -87
  208. package/vue/UiCheckbox.d.ts +14 -10
  209. package/vue/UiCheckbox.vue +228 -162
  210. package/vue/UiCluster.d.ts +2 -2
  211. package/vue/UiCluster.vue +53 -60
  212. package/vue/UiCombobox.d.ts +36 -32
  213. package/vue/UiCombobox.vue +1005 -416
  214. package/vue/UiContainer.d.ts +2 -2
  215. package/vue/UiContainer.vue +48 -51
  216. package/vue/UiContextMenu.d.ts +6 -4
  217. package/vue/UiContextMenu.vue +205 -116
  218. package/vue/UiDialog.d.ts +11 -9
  219. package/vue/UiDialog.vue +287 -212
  220. package/vue/UiDisclosure.d.ts +10 -6
  221. package/vue/UiDisclosure.vue +265 -159
  222. package/vue/UiEditable.d.ts +16 -12
  223. package/vue/UiEditable.vue +325 -205
  224. package/vue/UiEditorInsertTableGrid.d.ts +8 -8
  225. package/vue/UiEditorInsertTableGrid.vue +216 -157
  226. package/vue/UiEditorMentionMenu.d.ts +9 -9
  227. package/vue/UiEditorMentionMenu.vue +265 -222
  228. package/vue/UiEditorSlashMenu.d.ts +7 -7
  229. package/vue/UiEditorSlashMenu.vue +286 -240
  230. package/vue/UiEditorTableContextMenu.d.ts +5 -5
  231. package/vue/UiEditorTableContextMenu.vue +306 -193
  232. package/vue/UiEditorTableOverlay.d.ts +2 -2
  233. package/vue/UiEditorTableOverlay.vue +600 -369
  234. package/vue/UiEditorTableToolbar.d.ts +7 -7
  235. package/vue/UiEditorTableToolbar.vue +443 -268
  236. package/vue/UiEditorToolbar.d.ts +2 -2
  237. package/vue/UiEditorToolbar.vue +134 -121
  238. package/vue/UiFloatingActionButton.d.ts +6 -6
  239. package/vue/UiFloatingActionButton.vue +95 -99
  240. package/vue/UiFormField.d.ts +6 -6
  241. package/vue/UiFormField.vue +112 -80
  242. package/vue/UiGrid.d.ts +2 -2
  243. package/vue/UiGrid.vue +51 -57
  244. package/vue/UiIcon.d.ts +2 -2
  245. package/vue/UiIcon.vue +118 -89
  246. package/vue/UiIconButton.d.ts +11 -11
  247. package/vue/UiIconButton.vue +287 -217
  248. package/vue/UiInput.d.ts +9 -9
  249. package/vue/UiInput.vue +153 -127
  250. package/vue/UiMenu.d.ts +10 -6
  251. package/vue/UiMenu.vue +227 -143
  252. package/vue/UiMenuItem.d.ts +4 -4
  253. package/vue/UiMenuItem.vue +53 -46
  254. package/vue/UiPopover.d.ts +8 -6
  255. package/vue/UiPopover.vue +197 -137
  256. package/vue/UiRadio.d.ts +14 -10
  257. package/vue/UiRadio.vue +183 -117
  258. package/vue/UiRadioGroup.d.ts +14 -12
  259. package/vue/UiRadioGroup.vue +172 -111
  260. package/vue/UiReel.d.ts +3 -3
  261. package/vue/UiReel.vue +77 -77
  262. package/vue/UiSearchResultRow.d.ts +4 -4
  263. package/vue/UiSearchResultRow.vue +121 -115
  264. package/vue/UiSearchShell.d.ts +10 -8
  265. package/vue/UiSearchShell.vue +245 -176
  266. package/vue/UiSelect.d.ts +9 -9
  267. package/vue/UiSelect.vue +162 -134
  268. package/vue/UiSeparator.d.ts +2 -2
  269. package/vue/UiSeparator.vue +22 -27
  270. package/vue/UiSidebar.d.ts +20 -18
  271. package/vue/UiSidebar.vue +307 -224
  272. package/vue/UiStack.d.ts +3 -3
  273. package/vue/UiStack.vue +64 -70
  274. package/vue/UiSwitch.d.ts +12 -8
  275. package/vue/UiSwitch.vue +218 -150
  276. package/vue/UiSwitcher.d.ts +3 -3
  277. package/vue/UiSwitcher.vue +73 -75
  278. package/vue/UiTabs.d.ts +12 -8
  279. package/vue/UiTabs.vue +268 -210
  280. package/vue/UiTextarea.d.ts +11 -11
  281. package/vue/UiTextarea.vue +155 -128
  282. package/vue/UiToastRegion.d.ts +10 -8
  283. package/vue/UiToastRegion.vue +261 -198
  284. package/vue/UiTooltip.d.ts +14 -12
  285. package/vue/UiTooltip.vue +241 -177
  286. package/vue/UiTopBar.vue +51 -42
  287. package/vue/UiTree.d.ts +10 -6
  288. package/vue/UiTree.vue +180 -70
  289. package/vue/UiTreeItem.d.ts +24 -22
  290. package/vue/UiTreeItem.vue +464 -339
  291. package/vue/chunks/UiAffordanceScope.js +9 -16
  292. package/vue/chunks/UiAvatar.js +23 -29
  293. package/vue/chunks/UiAvatarGroup.js +16 -39
  294. package/vue/chunks/UiBadge.js +3 -12
  295. package/vue/chunks/UiButton.js +15 -18
  296. package/vue/chunks/UiCallout.js +8 -17
  297. package/vue/chunks/UiCheckbox.js +37 -40
  298. package/vue/chunks/UiCluster.js +3 -12
  299. package/vue/chunks/UiCombobox.js +224 -266
  300. package/vue/chunks/UiContainer.js +3 -12
  301. package/vue/chunks/UiContextMenu.js +39 -34
  302. package/vue/chunks/UiDialog.js +36 -39
  303. package/vue/chunks/UiDisclosure.js +44 -48
  304. package/vue/chunks/UiEditable.js +55 -57
  305. package/vue/chunks/UiEditorInsertTableGrid.js +55 -73
  306. package/vue/chunks/UiEditorMentionMenu.js +40 -81
  307. package/vue/chunks/UiEditorSlashMenu.js +28 -52
  308. package/vue/chunks/UiEditorTableContextMenu.js +32 -56
  309. package/vue/chunks/UiEditorTableOverlay.js +58 -82
  310. package/vue/chunks/UiEditorTableToolbar.js +61 -85
  311. package/vue/chunks/UiEditorToolbar.js +4 -13
  312. package/vue/chunks/UiFloatingActionButton.js +7 -21
  313. package/vue/chunks/UiFormField.js +15 -12
  314. package/vue/chunks/UiGrid.js +3 -12
  315. package/vue/chunks/UiIcon.js +20 -43
  316. package/vue/chunks/UiIconButton.js +16 -28
  317. package/vue/chunks/UiInput.js +20 -25
  318. package/vue/chunks/UiMenu.js +30 -33
  319. package/vue/chunks/UiMenuItem.js +4 -10
  320. package/vue/chunks/UiPopover.js +28 -29
  321. package/vue/chunks/UiRadio.js +36 -39
  322. package/vue/chunks/UiRadioGroup.js +30 -34
  323. package/vue/chunks/UiReel.js +6 -15
  324. package/vue/chunks/UiSearchResultRow.js +6 -19
  325. package/vue/chunks/UiSearchShell.js +25 -28
  326. package/vue/chunks/UiSelect.js +20 -23
  327. package/vue/chunks/UiSeparator.js +2 -8
  328. package/vue/chunks/UiSidebar.js +39 -44
  329. package/vue/chunks/UiStack.js +6 -15
  330. package/vue/chunks/UiSwitch.js +35 -38
  331. package/vue/chunks/UiSwitcher.js +6 -15
  332. package/vue/chunks/UiTabs.js +52 -85
  333. package/vue/chunks/UiTextarea.js +21 -26
  334. package/vue/chunks/UiToastRegion.js +38 -72
  335. package/vue/chunks/UiTooltip.js +34 -35
  336. package/vue/chunks/UiTopBar.js +1 -1
  337. package/vue/chunks/UiTree.js +27 -16
  338. package/vue/chunks/UiTreeItem.js +85 -102
  339. package/vue/components.css +4027 -3800
  340. package/vue/editor/LoomaEditor.d.ts +11 -0
  341. package/vue/editor/index.js +9 -0
package/vue/UiInput.vue CHANGED
@@ -1,177 +1,203 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.1 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.2 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
- import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from "vue";
4
- import * as controllerModule from "../components/ui-input/ui-input.js";
5
-
6
- defineOptions({ inheritAttrs: false });
7
-
8
- const hn = {
9
- text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
10
- attr: (v: unknown): any => v === undefined || v === null || v === false ? undefined : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? undefined : String(v),
11
- enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),
12
- };
13
-
14
- const props = withDefaults(defineProps<{
15
- disabled?: boolean | null;
16
- invalid?: boolean | null;
17
- readonly?: boolean | null;
18
- required?: boolean | null;
19
- value?: string | null;
20
- modelValue?: string | null;
21
- }>(), {
22
- disabled: false,
23
- invalid: false,
24
- readonly: false,
25
- required: false,
26
- });
3
+ import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from 'vue'
4
+ import * as controllerModule from '../components/ui-input/ui-input.js'
5
+
6
+ defineOptions({ inheritAttrs: false })
7
+
8
+ const props = withDefaults(
9
+ defineProps<{
10
+ disabled?: boolean
11
+ invalid?: boolean
12
+ readonly?: boolean
13
+ required?: boolean
14
+ value?: string
15
+ modelValue?: string | null
16
+ }>(),
17
+ {
18
+ disabled: false,
19
+ invalid: false,
20
+ readonly: false,
21
+ required: false,
22
+ },
23
+ )
27
24
  const emit = defineEmits<{
28
- "update:modelValue": [value: string];
29
- }>();
30
- const updateModel = (event: Event): void => emit("update:modelValue", (event.target as HTMLInputElement).value);
31
- const root = ref<HTMLElement | null>(null);
32
- const refs: Record<string, Element | undefined> = {};
25
+ 'update:modelValue': [value: string]
26
+ }>()
27
+ const model = computed({
28
+ get: () => props.modelValue ?? props.value ?? undefined,
29
+ set: (value) => emit('update:modelValue', value as string),
30
+ })
31
+
32
+ const root = ref<HTMLElement | null>(null)
33
33
 
34
34
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
35
- const dispatch = (name: string, detail?: unknown): boolean => {
36
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail })) ?? true;
37
- };
35
+ function dispatch(name: string, detail?: unknown): boolean {
36
+ return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail }))
37
+ ?? true
38
+ }
38
39
 
39
40
  function read(name: string): unknown {
40
- return (props as Record<string, unknown>)[name];
41
+ return (props as Record<string, unknown>)[name]
41
42
  }
42
43
 
43
44
  function write(name: string, value: unknown): boolean {
44
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
45
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
45
46
  }
46
47
 
47
- const stops: Array<() => void> = [];
48
+ const stops: Array<() => void> = []
48
49
  const host = {
49
- get element(): Element { return root.value as Element; },
50
+ get element(): Element {
51
+ return root.value as Element
52
+ },
50
53
  state: new Proxy({} as Record<string, unknown>, {
51
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
52
- set: (_target, name, value) => typeof name === "string" && write(name, value),
54
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
55
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
53
56
  }),
54
- refs: refs as Readonly<Record<string, Element>>,
57
+ refs: {} as Readonly<Record<string, Element>>,
55
58
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
56
59
  get: (_target, name) => {
57
- if (typeof name !== "string" || root.value === null) return undefined;
58
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
59
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
60
+ if (typeof name !== 'string' || root.value === null) return undefined
61
+ const form = root.value instanceof HTMLFormElement
62
+ ? root.value
63
+ : root.value.querySelector('form')
64
+ return form?.elements.namedItem(name)
65
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
60
66
  },
61
67
  }),
62
68
  signal<T>(initialValue: T) {
63
- const value = shallowRef(initialValue);
69
+ const value = shallowRef(initialValue)
64
70
  return {
65
71
  get: (): T => value.value,
66
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
67
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
68
- };
72
+ set: (next: T): void => {
73
+ if (!Object.is(value.value, next)) value.value = next
74
+ },
75
+ update: (next: (current: T) => T): void => {
76
+ const updated = next(value.value)
77
+ if (!Object.is(value.value, updated)) value.value = updated
78
+ },
79
+ }
69
80
  },
70
81
  computed<T>(compute: () => T) {
71
- const value = computed(compute);
72
- return { get: (): T => value.value };
82
+ const value = computed(compute)
83
+ return { get: (): T => value.value }
73
84
  },
74
85
  effect(run: () => void | (() => void)): () => void {
75
86
  const stop = watchEffect((onCleanup) => {
76
- const cleanup = run();
77
- if (typeof cleanup === "function") onCleanup(cleanup);
78
- }, { flush: "post" });
79
- stops.push(stop);
80
- return stop;
87
+ const cleanup = run()
88
+ if (typeof cleanup === 'function') onCleanup(cleanup)
89
+ }, { flush: 'post' })
90
+ stops.push(stop)
91
+ return stop
81
92
  },
82
93
  on(event: string, listener: EventListener): () => void {
83
- const element = root.value;
84
- element?.addEventListener(event, listener);
85
- const off = (): void => element?.removeEventListener(event, listener);
86
- stops.push(off);
87
- return off;
94
+ const element = root.value
95
+ element?.addEventListener(event, listener)
96
+ const off = (): void => element?.removeEventListener(event, listener)
97
+ stops.push(off)
98
+ return off
88
99
  },
89
100
  dispatch,
90
- };
101
+ }
91
102
 
92
- let cleanup: void | (() => void);
93
- let ready: Promise<void> | undefined;
103
+ let cleanup: void | (() => void)
104
+ let ready: Promise<void> | undefined
94
105
  onMounted(() => {
95
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
96
- });
106
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
107
+ cleanup = result
108
+ })
109
+ })
97
110
  onBeforeUnmount(() => {
98
- for (const stop of stops.splice(0)) stop();
99
- if (typeof cleanup === "function") cleanup();
100
- });
111
+ for (const stop of stops.splice(0)) stop()
112
+ if (typeof cleanup === 'function') cleanup()
113
+ })
101
114
  </script>
102
115
 
103
116
  <template>
104
- <input data-component="ui-input" v-bind="$attrs" :value="hn.attr((props.modelValue ?? props.value))" :disabled="hn.attr(props.disabled)" :readonly="hn.attr(props.readonly)" :required="hn.attr(props.required)" :aria-invalid="hn.enumerated(props.invalid)" @input="updateModel" ref="root">
117
+ <input
118
+ data-component="ui-input"
119
+ v-bind="$attrs"
120
+ :disabled="disabled"
121
+ :readonly="readonly"
122
+ :required="required"
123
+ :aria-invalid="invalid"
124
+ v-model="model"
125
+ ref="root"
126
+ >
105
127
  </template>
106
128
 
107
129
  <style scoped>
108
130
  [data-component~="ui-input"] {
109
- box-sizing: border-box;
110
- display: inline-block;
111
- inline-size: 100%;
112
- min-inline-size: 0;
113
- min-block-size: var(--ui-control-size-md, 2.5rem);
114
- margin: 0;
115
- padding: var(--ui-space-2) var(--ui-space-3);
116
- appearance: none;
117
- border: 1px solid var(--ui-control-border, var(--ui-border-strong));
118
- border-radius: var(--ui-input-radius, var(--ui-radius-2));
119
- background: var(--ui-control-surface, var(--ui-surface-elevated));
120
- color: var(--ui-text-primary);
121
- font: inherit;
122
- line-height: var(--ui-line-height-md);
123
- box-shadow: var(--ui-input-shadow, var(--ui-control-inset));
124
- transition:
125
- border-color var(--ui-motion-fast) var(--ui-motion-ease),
126
- box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
127
- background-color var(--ui-motion-fast) var(--ui-motion-ease);
128
- }
131
+ box-sizing: border-box;
132
+ display: inline-block;
133
+ inline-size: 100%;
134
+ min-inline-size: 0;
135
+ min-block-size: var(--ui-control-size-md);
136
+ margin: 0;
137
+ padding: var(--ui-space-2) var(--ui-space-3);
138
+ appearance: none;
139
+ border: 1px solid var(--ui-control-border, var(--ui-border-strong));
140
+ border-radius: var(--ui-input-radius, var(--ui-radius-md));
141
+ background: var(--ui-control-surface, var(--ui-surface-elevated));
142
+ color: var(--ui-text-primary);
143
+ font: inherit;
144
+ line-height: var(--ui-line-height-md);
145
+ box-shadow: var(--ui-input-shadow, var(--ui-control-inset));
146
+ transition:
147
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
148
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
149
+ background-color var(--ui-motion-fast) var(--ui-motion-ease);
150
+ }
129
151
 
130
- /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
131
- [data-component~="ui-input"]::selection {
132
- background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
133
- color: inherit;
134
- }
152
+ /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
153
+ [data-component~="ui-input"]::selection {
154
+ background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
155
+ color: inherit;
156
+ }
135
157
 
136
- [data-component~="ui-input"]::placeholder {
137
- color: var(--ui-control-placeholder, var(--ui-text-secondary));
138
- opacity: 1;
139
- }
158
+ [data-component~="ui-input"]::placeholder {
159
+ color: var(--ui-control-placeholder, var(--ui-text-secondary));
160
+ opacity: 1;
161
+ }
140
162
 
141
- [data-component~="ui-input"]:hover:not(:focus):not(:disabled) {
142
- border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
143
- }
163
+ [data-component~="ui-input"]:hover:not(:focus):not(:disabled) {
164
+ border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
165
+ }
144
166
 
145
- [data-component~="ui-input"]:focus-visible {
146
- border-color: var(--ui-control-focus, var(--ui-accent-solid));
147
- outline: none;
148
- box-shadow: var(--ui-input-focus-shadow, var(--ui-control-inset), var(--ui-control-focus-halo-shadow));
149
- }
167
+ [data-component~="ui-input"]:focus-visible {
168
+ border-color: var(--ui-control-focus, var(--ui-accent-solid));
169
+ outline: none;
170
+ box-shadow: var(
171
+ --ui-input-focus-shadow,
172
+ var(--ui-control-inset),
173
+ var(--ui-control-focus-halo-shadow)
174
+ );
175
+ }
150
176
 
151
- /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
152
- [data-component~="ui-input"][aria-invalid="true"],
153
- [data-component~="ui-input"]:is(:user-invalid, [data-user-invalid]) {
154
- border-color: var(--ui-danger-solid);
155
- }
177
+ /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
178
+ [data-component~="ui-input"][aria-invalid="true"],
179
+ [data-component~="ui-input"]:is(:user-invalid, [data-user-invalid]) {
180
+ border-color: var(--ui-danger-solid);
181
+ }
156
182
 
157
- [data-component~="ui-input"]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
158
- box-shadow:
159
- var(--ui-control-inset),
160
- 0 0 0 3px color-mix(in srgb, var(--ui-danger-solid) 22%, transparent);
161
- }
183
+ [data-component~="ui-input"]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
184
+ box-shadow:
185
+ var(--ui-control-inset),
186
+ 0 0 0 3px color-mix(in srgb, var(--ui-danger-solid) 22%, transparent);
187
+ }
162
188
 
163
- [data-component~="ui-input"]:disabled {
164
- background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
165
- color: var(--ui-text-muted);
166
- box-shadow: none;
167
- cursor: not-allowed;
168
- }
189
+ [data-component~="ui-input"]:disabled {
190
+ background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
191
+ color: var(--ui-text-muted);
192
+ box-shadow: none;
193
+ cursor: not-allowed;
194
+ }
169
195
 
170
- /* No text-box-trim here: trimming a native input's line box below its line height lets the text
171
- * scroll vertically inside the field. Native inputs already center their single line. */
196
+ /* No text-box-trim here: trimming a native input's line box below its line height lets the text
197
+ * scroll vertically inside the field. Native inputs already center their single line. */
172
198
 
173
- /* A component that sets its display still honours the hidden attribute on its root. */
174
- [data-component~="ui-input"][hidden] {
175
- display: none;
176
- }
199
+ /* A component that sets its display still honours the hidden attribute on its root. */
200
+ [data-component~="ui-input"][hidden] {
201
+ display: none;
202
+ }
177
203
  </style>
package/vue/UiMenu.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  type __VLS_Props = {
2
- for?: string | null;
3
- open?: boolean | null;
4
- placement?: string | null;
2
+ density?: 'comfortable' | 'compact';
3
+ for?: string;
4
+ open?: boolean;
5
+ placement?: string;
5
6
  };
6
7
  declare var __VLS_1: {};
7
8
  type __VLS_Slots = {} & {
@@ -22,6 +23,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
22
23
  readonly reason: "action" | "programmatic";
23
24
  readonly trigger: "keyboard" | "pointer" | "programmatic";
24
25
  }) => any;
26
+ "update:open": (value: boolean) => any;
25
27
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
26
28
  onSelect?: ((detail: {
27
29
  readonly value: string;
@@ -37,10 +39,12 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
37
39
  readonly reason: "action" | "programmatic";
38
40
  readonly trigger: "keyboard" | "pointer" | "programmatic";
39
41
  }) => any) | undefined;
42
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
40
43
  }>, {
41
- for: string | null;
42
- open: boolean | null;
43
- placement: string | null;
44
+ for: string;
45
+ open: boolean;
46
+ placement: string;
47
+ density: "comfortable" | "compact";
44
48
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
45
49
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
46
50
  declare const _default: typeof __VLS_export;