@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
@@ -1,21 +1,21 @@
1
1
  type __VLS_Props = {
2
- anticipatory?: boolean | null;
3
- disabled?: boolean | null;
4
- label?: string | null;
5
- round?: boolean | null;
6
- size?: "sm" | "md" | "lg" | null;
7
- variant?: "ghost" | "outline" | "solid" | null;
2
+ anticipatory?: boolean;
3
+ disabled?: boolean;
4
+ label?: string;
5
+ round?: boolean;
6
+ size?: 'sm' | 'md' | 'lg';
7
+ variant?: 'ghost' | 'outline' | 'solid';
8
8
  };
9
9
  declare var __VLS_1: {};
10
10
  type __VLS_Slots = {} & {
11
11
  default?: (props: typeof __VLS_1) => any;
12
12
  };
13
13
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
14
- round: boolean | null;
15
- variant: "ghost" | "outline" | "solid" | null;
16
- disabled: boolean | null;
17
- size: "sm" | "md" | "lg" | null;
18
- anticipatory: boolean | null;
14
+ variant: "ghost" | "outline" | "solid";
15
+ disabled: boolean;
16
+ size: "sm" | "md" | "lg";
17
+ round: boolean;
18
+ anticipatory: boolean;
19
19
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
20
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
21
  declare const _default: typeof __VLS_export;
@@ -1,281 +1,351 @@
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-icon-button/ui-icon-button.js";
5
-
6
- defineOptions({ inheritAttrs: false });
7
-
8
- const hn = {
9
- t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),
10
- text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
11
- 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),
12
- enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),
13
- };
14
-
15
- const props = withDefaults(defineProps<{
16
- anticipatory?: boolean | null;
17
- disabled?: boolean | null;
18
- label?: string | null;
19
- round?: boolean | null;
20
- size?: "sm" | "md" | "lg" | null;
21
- variant?: "ghost" | "outline" | "solid" | null;
22
- }>(), {
23
- anticipatory: false,
24
- disabled: false,
25
- round: false,
26
- size: "md",
27
- variant: "ghost",
28
- });
29
- const root = ref<HTMLElement | null>(null);
30
- const refs: Record<string, Element | undefined> = {};
3
+ import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from 'vue'
4
+ import * as controllerModule from '../components/ui-icon-button/ui-icon-button.js'
5
+
6
+ defineOptions({ inheritAttrs: false })
7
+
8
+ const props = withDefaults(
9
+ defineProps<{
10
+ anticipatory?: boolean
11
+ disabled?: boolean
12
+ label?: string
13
+ round?: boolean
14
+ size?: 'sm' | 'md' | 'lg'
15
+ variant?: 'ghost' | 'outline' | 'solid'
16
+ }>(),
17
+ {
18
+ anticipatory: false,
19
+ disabled: false,
20
+ round: false,
21
+ size: 'md',
22
+ variant: 'ghost',
23
+ },
24
+ )
25
+
26
+ const root = ref<HTMLElement | null>(null)
27
+
28
+ /** The values the styles' :host-state() rules test. */
29
+ const hostState = computed(() =>
30
+ [
31
+ props.anticipatory && 'anticipatory',
32
+ props.variant && `variant variant=${props.variant}`,
33
+ props.size && `size size=${props.size}`,
34
+ props.round && 'round',
35
+ ].filter(Boolean).join(' ')
36
+ )
31
37
 
32
38
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
33
- const dispatch = (name: string, detail?: unknown): boolean => {
34
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail })) ?? true;
35
- };
36
-
37
- /** The resolved values the styles' :host-state() rules test. */
38
- const hostState = computed(() => (["anticipatory","variant","size","round"] as const).flatMap((name) => {
39
- const value = read(name);
40
- const tokens: string[] = hn.t(value) ? [name] : [];
41
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
42
- return tokens;
43
- }).join(" "));
39
+ function dispatch(name: string, detail?: unknown): boolean {
40
+ return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail }))
41
+ ?? true
42
+ }
44
43
 
45
44
  function read(name: string): unknown {
46
- return (props as Record<string, unknown>)[name];
45
+ return (props as Record<string, unknown>)[name]
47
46
  }
48
47
 
49
48
  function write(name: string, value: unknown): boolean {
50
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
49
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
51
50
  }
52
51
 
53
- const stops: Array<() => void> = [];
52
+ const stops: Array<() => void> = []
54
53
  const host = {
55
- get element(): Element { return root.value as Element; },
54
+ get element(): Element {
55
+ return root.value as Element
56
+ },
56
57
  state: new Proxy({} as Record<string, unknown>, {
57
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
58
- set: (_target, name, value) => typeof name === "string" && write(name, value),
58
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
59
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
59
60
  }),
60
- refs: refs as Readonly<Record<string, Element>>,
61
+ refs: {} as Readonly<Record<string, Element>>,
61
62
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
62
63
  get: (_target, name) => {
63
- if (typeof name !== "string" || root.value === null) return undefined;
64
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
65
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
64
+ if (typeof name !== 'string' || root.value === null) return undefined
65
+ const form = root.value instanceof HTMLFormElement
66
+ ? root.value
67
+ : root.value.querySelector('form')
68
+ return form?.elements.namedItem(name)
69
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
66
70
  },
67
71
  }),
68
72
  signal<T>(initialValue: T) {
69
- const value = shallowRef(initialValue);
73
+ const value = shallowRef(initialValue)
70
74
  return {
71
75
  get: (): T => value.value,
72
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
73
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
74
- };
76
+ set: (next: T): void => {
77
+ if (!Object.is(value.value, next)) value.value = next
78
+ },
79
+ update: (next: (current: T) => T): void => {
80
+ const updated = next(value.value)
81
+ if (!Object.is(value.value, updated)) value.value = updated
82
+ },
83
+ }
75
84
  },
76
85
  computed<T>(compute: () => T) {
77
- const value = computed(compute);
78
- return { get: (): T => value.value };
86
+ const value = computed(compute)
87
+ return { get: (): T => value.value }
79
88
  },
80
89
  effect(run: () => void | (() => void)): () => void {
81
90
  const stop = watchEffect((onCleanup) => {
82
- const cleanup = run();
83
- if (typeof cleanup === "function") onCleanup(cleanup);
84
- }, { flush: "post" });
85
- stops.push(stop);
86
- return stop;
91
+ const cleanup = run()
92
+ if (typeof cleanup === 'function') onCleanup(cleanup)
93
+ }, { flush: 'post' })
94
+ stops.push(stop)
95
+ return stop
87
96
  },
88
97
  on(event: string, listener: EventListener): () => void {
89
- const element = root.value;
90
- element?.addEventListener(event, listener);
91
- const off = (): void => element?.removeEventListener(event, listener);
92
- stops.push(off);
93
- return off;
98
+ const element = root.value
99
+ element?.addEventListener(event, listener)
100
+ const off = (): void => element?.removeEventListener(event, listener)
101
+ stops.push(off)
102
+ return off
94
103
  },
95
104
  dispatch,
96
- };
105
+ }
97
106
 
98
- let cleanup: void | (() => void);
99
- let ready: Promise<void> | undefined;
107
+ let cleanup: void | (() => void)
108
+ let ready: Promise<void> | undefined
100
109
  onMounted(() => {
101
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
102
- });
110
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
111
+ cleanup = result
112
+ })
113
+ })
103
114
  onBeforeUnmount(() => {
104
- for (const stop of stops.splice(0)) stop();
105
- if (typeof cleanup === "function") cleanup();
106
- });
115
+ for (const stop of stops.splice(0)) stop()
116
+ if (typeof cleanup === 'function') cleanup()
117
+ })
107
118
  </script>
108
119
 
109
120
  <template>
110
- <button data-component="ui-icon-button" type="button" v-bind="$attrs" :disabled="hn.attr(props.disabled)" :aria-label="hn.enumerated(props.label)" :data-ui-icon-button-state="hostState || undefined" ref="root"><slot></slot></button>
121
+ <button
122
+ data-component="ui-icon-button"
123
+ type="button"
124
+ v-bind="$attrs"
125
+ :disabled="disabled"
126
+ :aria-label="label"
127
+ :data-ui-icon-button-state="hostState || undefined"
128
+ ref="root"
129
+ >
130
+ <slot />
131
+ </button>
111
132
  </template>
112
133
 
113
134
  <style scoped>
114
135
  [data-component~="ui-icon-button"] {
115
- display: inline-flex;
116
- color: var(--ui-text-secondary);
117
- }
136
+ display: inline-flex;
137
+ color: var(--ui-text-secondary);
138
+ }
118
139
 
119
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] {
120
- position: relative;
121
- }
140
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] {
141
+ position: relative;
142
+ }
122
143
 
123
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]::before {
124
- content: "";
125
- position: absolute;
126
- inset: 50% auto auto 50%;
127
- z-index: 1;
128
- inline-size: var(--ui-affordance-guide-size, 0.25rem);
129
- block-size: var(--ui-affordance-guide-size, 0.25rem);
130
- border-radius: var(--ui-radius-round, 999px);
131
- background: var(--ui-affordance-guide-color, var(--ui-border-strong));
132
- opacity: var(--ui-affordance-guide-opacity, 0.42);
133
- transform: translate(-50%, -50%);
134
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
135
- pointer-events: none;
136
- }
144
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]::before {
145
+ content: "";
146
+ position: absolute;
147
+ inset: 50% auto auto 50%;
148
+ z-index: 1;
149
+ inline-size: var(--ui-affordance-guide-size);
150
+ block-size: var(--ui-affordance-guide-size);
151
+ border-radius: var(--ui-radius-round);
152
+ background: var(--ui-affordance-guide-color, var(--ui-border-strong));
153
+ opacity: var(--ui-affordance-guide-opacity);
154
+ transform: translate(-50%, -50%);
155
+ transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
156
+ pointer-events: none;
157
+ }
137
158
 
138
- /* At rest an anticipatory button shows only its guide dot; proximity, hover, or focus reveals the
139
- * surface and icon. The root is the native button, so hiding it outright would hide the dot
140
- * too, and slotted icons sit outside this scope; `color: transparent` hides currentColor icons. */
141
- @media (hover: hover) and (pointer: fine) {
142
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]:not([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-ui-proximity="near"], :hover, :focus-visible) {
143
- border-color: transparent;
144
- background: transparent;
145
- box-shadow: none;
146
- color: transparent;
147
- }
148
- }
159
+ /* At rest an anticipatory button shows only its guide dot; proximity, hover, or focus reveals the
160
+ * surface and icon. The root is the native button, so hiding it outright would hide the dot
161
+ * too, and slotted icons sit outside this scope; `color: transparent` hides currentColor icons. */
162
+ @media (hover: hover) and (pointer: fine) {
163
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]:not([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-ui-proximity="near"], :hover, :focus-visible) {
164
+ border-color: transparent;
165
+ background: transparent;
166
+ box-shadow: none;
167
+ color: transparent;
168
+ }
169
+ }
149
170
 
150
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
151
- opacity: 0;
152
- }
171
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
172
+ opacity: 0;
173
+ }
153
174
 
154
- [data-component~="ui-icon-button"] {
155
- appearance: none;
156
- inline-size: var(--ui-icon-button-size, 2rem);
157
- block-size: var(--ui-icon-button-size, 2rem);
158
- min-inline-size: var(--ui-icon-button-size, 2rem);
159
- min-block-size: var(--ui-icon-button-size, 2rem);
160
- padding: 0;
161
- margin: 0;
162
- border: 1px solid transparent;
163
- border-radius: var(--ui-icon-button-radius, var(--ui-radius-2));
164
- background: var(--ui-icon-button-bg, transparent);
165
- color: inherit;
166
- display: inline-flex;
167
- align-items: center;
168
- justify-content: center;
169
- cursor: pointer;
170
- transition:
171
- background-color var(--ui-motion-fast) var(--ui-motion-ease),
172
- border-color var(--ui-motion-fast) var(--ui-motion-ease),
173
- color var(--ui-motion-fast) var(--ui-motion-ease),
174
- box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
175
- transform var(--ui-motion-fast) var(--ui-motion-ease);
176
- }
175
+ [data-component~="ui-icon-button"] {
176
+ /* The size prop resolves here; --ui-icon-button-size overrides it on an element. */
177
+ --_size: 2rem;
178
+ appearance: none;
179
+ inline-size: var(--ui-icon-button-size, var(--_size));
180
+ block-size: var(--ui-icon-button-size, var(--_size));
181
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
182
+ min-block-size: var(--ui-icon-button-size, var(--_size));
183
+ padding: 0;
184
+ margin: 0;
185
+ border: 1px solid transparent;
186
+ border-radius: var(--ui-icon-button-radius, var(--ui-radius-md));
187
+ background: var(--ui-icon-button-surface, transparent);
188
+ color: inherit;
189
+ display: inline-flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ cursor: pointer;
193
+ transition:
194
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
195
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
196
+ color var(--ui-motion-fast) var(--ui-motion-ease),
197
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
198
+ transform var(--ui-motion-fast) var(--ui-motion-ease);
199
+ }
177
200
 
178
- @media (hover: none), (pointer: coarse) {
179
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]::before {
180
- opacity: 0;
181
- }
182
- }
201
+ @media (hover: none), (pointer: coarse) {
202
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]::before {
203
+ opacity: 0;
204
+ }
205
+ }
183
206
 
184
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"] {
185
- inline-size: var(--ui-icon-button-size-sm, 1.75rem);
186
- block-size: var(--ui-icon-button-size-sm, 1.75rem);
187
- min-inline-size: var(--ui-icon-button-size-sm, 1.75rem);
188
- min-block-size: var(--ui-icon-button-size-sm, 1.75rem);
189
- }
207
+ /* A touch target without a bigger button: an invisible hit area, at least the control
208
+ minimum, centred on the button (::before is the anticipatory guide). */
209
+ @media (pointer: coarse) {
210
+ [data-component~="ui-icon-button"] {
211
+ position: relative;
212
+ }
213
+
214
+ [data-component~="ui-icon-button"]::after {
215
+ content: "";
216
+ position: absolute;
217
+ inset: 50% auto auto 50%;
218
+ inline-size: max(100%, var(--ui-control-min-block-size));
219
+ block-size: max(100%, var(--ui-control-min-block-size));
220
+ transform: translate(-50%, -50%);
221
+ }
222
+ }
190
223
 
191
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"] {
192
- inline-size: var(--ui-icon-button-size-lg, 2.5rem);
193
- block-size: var(--ui-icon-button-size-lg, 2.5rem);
194
- min-inline-size: var(--ui-icon-button-size-lg, 2.5rem);
195
- min-block-size: var(--ui-icon-button-size-lg, 2.5rem);
196
- }
224
+ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"] {
225
+ position: relative;
226
+ }
197
227
 
198
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="round"] {
199
- border-radius: var(--ui-radius-round, 999px);
200
- }
228
+ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"]::after {
229
+ content: "";
230
+ position: absolute;
231
+ inset: 50% auto auto 50%;
232
+ inline-size: max(100%, var(--ui-control-min-block-size));
233
+ block-size: max(100%, var(--ui-control-min-block-size));
234
+ transform: translate(-50%, -50%);
235
+ }
201
236
 
202
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"] {
203
- border-color: var(--ui-icon-button-border, var(--ui-border-default));
204
- background: var(--ui-icon-button-outline-bg, var(--ui-surface-default));
205
- color: var(--ui-icon-button-outline-color, var(--ui-text-primary));
206
- }
237
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"] {
238
+ --_size: 1.75rem;
239
+ inline-size: var(--ui-icon-button-size, var(--_size));
240
+ block-size: var(--ui-icon-button-size, var(--_size));
241
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
242
+ min-block-size: var(--ui-icon-button-size, var(--_size));
243
+ }
207
244
 
208
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"] {
209
- background: var(--ui-icon-button-solid-bg, var(--ui-accent-solid));
210
- color: var(--ui-icon-button-solid-color, var(--ui-text-on-accent));
211
- box-shadow: var(
212
- --ui-icon-button-solid-shadow,
213
- 0 1px 2px color-mix(in srgb, var(--ui-accent-solid) 18%, transparent)
214
- );
215
- }
245
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"] {
246
+ --_size: 2.5rem;
247
+ inline-size: var(--ui-icon-button-size, var(--_size));
248
+ block-size: var(--ui-icon-button-size, var(--_size));
249
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
250
+ min-block-size: var(--ui-icon-button-size, var(--_size));
251
+ }
216
252
 
217
- [data-component~="ui-icon-button"]:hover:enabled {
218
- /* Derived from the text colour so the ghost hover shows on any background. */
219
- background: var(--ui-icon-button-hover-bg, color-mix(in srgb, currentColor 8%, transparent));
220
- color: var(--ui-icon-button-hover-color, var(--ui-text-primary));
221
- }
253
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="round"] {
254
+ border-radius: var(--ui-radius-round);
255
+ }
222
256
 
223
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"]:hover:enabled {
224
- border-color: var(--ui-icon-button-hover-border, var(--ui-border-strong));
225
- }
257
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"] {
258
+ border-color: var(--ui-icon-button-border, var(--ui-border-default));
259
+ background: var(--ui-icon-button-outline-surface, var(--ui-surface-default));
260
+ color: var(--ui-icon-button-outline-text, var(--ui-text-primary));
261
+ }
226
262
 
227
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"]:hover:enabled {
228
- background: var(--ui-icon-button-solid-hover-bg, var(--ui-accent-hover));
229
- }
263
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"] {
264
+ background: var(--ui-icon-button-solid-surface, var(--ui-accent-solid));
265
+ color: var(--ui-icon-button-solid-text, var(--ui-text-on-accent));
266
+ box-shadow: var(
267
+ --ui-icon-button-solid-shadow,
268
+ 0 1px 2px color-mix(in srgb, var(--ui-accent-solid) 18%, transparent)
269
+ );
270
+ }
230
271
 
231
- [data-component~="ui-icon-button"]:active:enabled {
232
- transform: scale(var(--ui-icon-button-active-scale, 0.96));
233
- }
272
+ [data-component~="ui-icon-button"]:hover:enabled {
273
+ /* Derived from the text colour so the ghost hover shows on any background. */
274
+ background: var(--ui-icon-button-hover-surface, color-mix(in srgb, currentColor 8%, transparent));
275
+ color: var(--ui-icon-button-hover-text, var(--ui-text-primary));
276
+ }
234
277
 
235
- [data-component~="ui-icon-button"]:focus-visible {
236
- outline: none;
237
- box-shadow: var(--ui-focus-halo);
238
- }
278
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"]:hover:enabled {
279
+ border-color: var(--ui-icon-button-hover-border, var(--ui-border-strong));
280
+ }
239
281
 
240
- /* Disabled colours fall back to each variant's own; ghost takes only the icon colour. */
241
- [data-component~="ui-icon-button"]:disabled {
242
- opacity: var(--ui-icon-button-disabled-opacity, 0.6);
243
- color: var(--ui-icon-button-disabled-color, inherit);
244
- cursor: not-allowed;
245
- }
282
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"]:hover:enabled {
283
+ background: var(--ui-icon-button-solid-hover-surface, var(--ui-accent-hover));
284
+ }
246
285
 
247
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"]:disabled {
248
- border-color: var(--ui-icon-button-disabled-border, var(--ui-icon-button-border, var(--ui-border-default)));
249
- background-color: var(--ui-icon-button-disabled-bg, var(--ui-icon-button-outline-bg, var(--ui-surface-default)));
250
- color: var(--ui-icon-button-disabled-color, var(--ui-icon-button-outline-color, var(--ui-text-primary)));
251
- }
286
+ [data-component~="ui-icon-button"]:active:enabled {
287
+ transform: scale(var(--ui-icon-button-active-scale, 0.96));
288
+ }
252
289
 
253
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"]:disabled {
254
- background-color: var(--ui-icon-button-disabled-bg, var(--ui-icon-button-solid-bg, var(--ui-accent-solid)));
255
- color: var(--ui-icon-button-disabled-color, var(--ui-icon-button-solid-color, var(--ui-text-on-accent)));
256
- }
290
+ [data-component~="ui-icon-button"]:focus-visible {
291
+ outline: none;
292
+ box-shadow: var(--ui-focus-halo);
293
+ }
257
294
 
258
- [data-component~="ui-icon-button"] {
259
- --_icon-button-icon-default: var(--ui-icon-size-md, 1.25rem);
260
- }
295
+ /* Disabled colours fall back to each variant's own; ghost takes only the icon colour. */
296
+ [data-component~="ui-icon-button"]:disabled {
297
+ opacity: var(--ui-icon-button-disabled-opacity, 0.6);
298
+ color: var(--ui-icon-button-disabled-text, inherit);
299
+ cursor: not-allowed;
300
+ }
261
301
 
262
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"] {
263
- --_icon-button-icon-default: var(--ui-icon-size-sm, 1rem);
264
- }
302
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"]:disabled {
303
+ border-color: var(
304
+ --ui-icon-button-disabled-border,
305
+ var(--ui-icon-button-border, var(--ui-border-default))
306
+ );
307
+ background-color: var(
308
+ --ui-icon-button-disabled-surface,
309
+ var(--ui-icon-button-outline-surface, var(--ui-surface-default))
310
+ );
311
+ color: var(
312
+ --ui-icon-button-disabled-text,
313
+ var(--ui-icon-button-outline-text, var(--ui-text-primary))
314
+ );
315
+ }
265
316
 
266
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"] {
267
- --_icon-button-icon-default: var(--ui-icon-size-lg, 1.5rem);
268
- }
317
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"]:disabled {
318
+ background-color: var(
319
+ --ui-icon-button-disabled-surface,
320
+ var(--ui-icon-button-solid-surface, var(--ui-accent-solid))
321
+ );
322
+ color: var(
323
+ --ui-icon-button-disabled-text,
324
+ var(--ui-icon-button-solid-text, var(--ui-text-on-accent))
325
+ );
326
+ }
269
327
 
270
- :slotted(svg) {
271
- inline-size: var(--ui-icon-button-icon-size, var(--_icon-button-icon-default));
272
- block-size: var(--ui-icon-button-icon-size, var(--_icon-button-icon-default));
273
- flex-shrink: 0;
274
- stroke-width: var(--ui-icon-button-icon-stroke-width, 1.75);
275
- }
328
+ [data-component~="ui-icon-button"] {
329
+ --_icon-button-icon-default: var(--ui-icon-size-md);
330
+ }
276
331
 
277
- /* A component that sets its display still honours the hidden attribute on its root. */
278
- [data-component~="ui-icon-button"][hidden] {
279
- display: none;
280
- }
332
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"] {
333
+ --_icon-button-icon-default: var(--ui-icon-size-sm);
334
+ }
335
+
336
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"] {
337
+ --_icon-button-icon-default: var(--ui-icon-size-lg);
338
+ }
339
+
340
+ :slotted(svg) {
341
+ inline-size: var(--ui-icon-button-icon-size, var(--_icon-button-icon-default));
342
+ block-size: var(--ui-icon-button-icon-size, var(--_icon-button-icon-default));
343
+ flex-shrink: 0;
344
+ stroke-width: var(--ui-icon-button-icon-stroke-width, 1.75);
345
+ }
346
+
347
+ /* A component that sets its display still honours the hidden attribute on its root. */
348
+ [data-component~="ui-icon-button"][hidden] {
349
+ display: none;
350
+ }
281
351
  </style>
package/vue/UiInput.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  type __VLS_Props = {
2
- disabled?: boolean | null;
3
- invalid?: boolean | null;
4
- readonly?: boolean | null;
5
- required?: boolean | null;
6
- value?: string | null;
2
+ disabled?: boolean;
3
+ invalid?: boolean;
4
+ readonly?: boolean;
5
+ required?: boolean;
6
+ value?: string;
7
7
  modelValue?: string | null;
8
8
  };
9
9
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
@@ -11,10 +11,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
11
11
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
12
12
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
13
13
  }>, {
14
- invalid: boolean | null;
15
- disabled: boolean | null;
16
- required: boolean | null;
17
- readonly: boolean | null;
14
+ invalid: boolean;
15
+ disabled: boolean;
16
+ required: boolean;
17
+ readonly: boolean;
18
18
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
19
  declare const _default: typeof __VLS_export;
20
20
  export default _default;