@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/UiButton.vue CHANGED
@@ -1,257 +1,304 @@
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 } from "vue";
4
-
5
- defineOptions({ inheritAttrs: false });
6
-
7
- const hn = {
8
- 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),
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
- };
12
-
13
- const props = withDefaults(defineProps<{
14
- disabled?: boolean | null;
15
- size?: "sm" | "md" | "lg" | null;
16
- variant?: "outline" | "solid" | "danger" | "ghost" | "link" | null;
17
- }>(), {
18
- disabled: false,
19
- size: "md",
20
- variant: "outline",
21
- });
22
-
23
- /** The resolved values the styles' :host-state() rules test. */
24
- const hostState = computed(() => (["variant","size"] as const).flatMap((name) => {
25
- const value = read(name);
26
- const tokens: string[] = hn.t(value) ? [name] : [];
27
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
28
- return tokens;
29
- }).join(" "));
30
-
31
- function read(name: string): unknown {
32
- return (props as Record<string, unknown>)[name];
33
- }
34
-
3
+ import { computed } from 'vue'
4
+
5
+ defineOptions({ inheritAttrs: false })
6
+
7
+ const props = withDefaults(
8
+ defineProps<{
9
+ align?: 'center' | 'start'
10
+ disabled?: boolean
11
+ size?: 'sm' | 'md' | 'lg'
12
+ stretch?: boolean
13
+ variant?: 'outline' | 'solid' | 'danger' | 'ghost' | 'link'
14
+ }>(),
15
+ {
16
+ align: 'center',
17
+ disabled: false,
18
+ size: 'md',
19
+ stretch: false,
20
+ variant: 'outline',
21
+ },
22
+ )
23
+
24
+ /** The values the styles' :host-state() rules test. */
25
+ const hostState = computed(() =>
26
+ [
27
+ props.variant && `variant variant=${props.variant}`,
28
+ props.align && `align align=${props.align}`,
29
+ props.stretch && 'stretch',
30
+ props.size && `size size=${props.size}`,
31
+ ].filter(Boolean).join(' ')
32
+ )
35
33
  </script>
36
34
 
37
35
  <template>
38
- <button data-component="ui-button" type="button" v-bind="$attrs" :disabled="hn.attr(props.disabled)" :data-ui-button-state="hostState || undefined"><slot></slot></button>
36
+ <button
37
+ data-component="ui-button"
38
+ type="button"
39
+ v-bind="$attrs"
40
+ :disabled="disabled"
41
+ :data-ui-button-state="hostState || undefined"
42
+ >
43
+ <slot />
44
+ </button>
39
45
  </template>
40
46
 
41
47
  <style scoped>
42
48
  [data-component~="ui-button"] {
43
- display: inline-flex;
44
- align-items: center;
45
- justify-content: center;
46
- vertical-align: middle;
47
- color: var(--ui-action-secondary-text, var(--ui-text-primary));
48
- }
49
-
50
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"] {
51
- color: var(--ui-action-primary-text, var(--ui-text-on-accent));
52
- }
53
-
54
- [data-component~="ui-button"] {
55
- appearance: none;
56
- min-block-size: var(--ui-button-min-block-size, var(--ui-control-size-md, 2.5rem));
57
- border: 1px solid var(--ui-button-border, var(--ui-border-strong));
58
- border-radius: var(--ui-button-radius, var(--ui-radius-2));
59
- background: var(--ui-button-surface, var(--ui-surface-elevated));
60
- color: var(--ui-button-text, var(--ui-action-secondary-text, var(--ui-text-primary)));
61
- font: inherit;
62
- font-weight: var(--ui-font-medium, 500);
63
- line-height: var(--ui-line-height-tight);
64
- padding: var(--ui-space-2) var(--ui-space-3);
65
- background-image: var(--ui-raised-highlight, none);
66
- box-shadow: var(--ui-button-shadow, var(--ui-raised, var(--ui-shadow-xs)));
67
- cursor: pointer;
68
- transition:
69
- background-color var(--ui-motion-fast) var(--ui-motion-ease),
70
- border-color var(--ui-motion-fast) var(--ui-motion-ease),
71
- color var(--ui-motion-fast) var(--ui-motion-ease),
72
- box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
73
- transform var(--ui-motion-fast) var(--ui-motion-ease);
74
- margin: 0;
75
- }
76
-
77
- @supports (text-box-trim: trim-both) {
78
- [data-component~="ui-button"] {
79
- text-box-trim: trim-both;
80
- text-box-edge: cap alphabetic;
81
- }
82
- }
83
-
84
- [data-component~="ui-button"][data-ui-button-state~="size=sm"] {
85
- min-block-size: var(--ui-control-size-sm, 2rem);
86
- padding: var(--ui-space-1) var(--ui-space-2);
87
- font-size: 0.875rem;
88
- }
89
-
90
- [data-component~="ui-button"][data-ui-button-state~="size=lg"] {
91
- min-block-size: var(--ui-control-size-lg, 3rem);
92
- padding: var(--ui-space-3) var(--ui-space-4);
93
- font-size: 1rem;
94
- }
95
-
96
- [data-component~="ui-button"]:hover:enabled {
97
- background: var(--ui-action-secondary-surface-hover, var(--ui-surface-muted));
98
- border-color: var(--ui-control-border-hover, var(--ui-border-strong));
99
- }
100
-
101
- [data-component~="ui-button"]:active:enabled {
102
- background: var(--ui-surface-subtle);
103
- }
104
-
105
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"] {
106
- border-color: var(--ui-action-primary-surface, var(--ui-accent-solid));
107
- background: var(--ui-action-primary-surface, var(--ui-accent-solid));
108
- color: var(--ui-action-primary-text, var(--ui-text-on-accent));
109
- box-shadow: var(--ui-button-solid-shadow, inset 0 1px rgb(255 255 255 / 0.16), var(--ui-shadow-xs));
110
- }
111
-
112
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"]:hover:enabled {
113
- background: var(--ui-action-primary-surface-hover, var(--ui-accent-hover));
114
- border-color: var(--ui-action-primary-surface-hover, var(--ui-accent-hover));
115
- box-shadow: var(--ui-shadow-sm);
116
- transform: translateY(-1px);
117
- }
118
-
119
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"]:active:enabled {
120
- background: var(--ui-action-primary-surface-active, var(--ui-accent-active));
121
- border-color: var(--ui-action-primary-surface-active, var(--ui-accent-active));
122
- box-shadow: none;
123
- transform: translateY(0);
124
- }
125
-
126
- [data-component~="ui-button"][data-ui-button-state~="variant=danger"] {
127
- border-color: var(--ui-danger-solid);
128
- background: var(--ui-danger-solid);
129
- color: var(--ui-text-on-accent);
130
- box-shadow: var(--ui-button-danger-shadow, inset 0 1px rgb(255 255 255 / 0.14), var(--ui-shadow-xs));
131
- }
132
-
133
- [data-component~="ui-button"][data-ui-button-state~="variant=danger"]:hover:enabled {
134
- background: var(--ui-danger-hover);
135
- border-color: var(--ui-danger-hover);
136
- box-shadow: var(--ui-shadow-sm);
137
- transform: translateY(-1px);
138
- }
139
-
140
- [data-component~="ui-button"][data-ui-button-state~="variant=danger"]:active:enabled {
141
- box-shadow: none;
142
- transform: translateY(0);
143
- }
144
-
145
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"] {
146
- border-color: transparent;
147
- background: transparent;
148
- box-shadow: none;
149
- color: var(--ui-button-ghost-text, var(--ui-action-secondary-text, var(--ui-text-primary)));
150
- }
151
-
152
- /* Tints derive from the text colour, not a surface token, so hover and press show on any background. */
153
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"]:hover:enabled {
154
- background: var(--ui-button-ghost-hover, color-mix(in srgb, currentColor 8%, transparent));
155
- border-color: transparent;
156
- }
157
-
158
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"]:active:enabled {
159
- background: var(--ui-button-ghost-active, color-mix(in srgb, currentColor 14%, transparent));
160
- border-color: transparent;
161
- }
162
-
163
- /* A soft halo that transitions in with the other box-shadow changes, layered on the raised shadow. */
164
- [data-component~="ui-button"]:focus-visible {
165
- outline: none;
166
- box-shadow:
167
- var(--ui-button-shadow, var(--ui-raised, var(--ui-shadow-xs))),
168
- var(--ui-focus-halo);
169
- }
170
-
171
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"]:focus-visible {
172
- box-shadow:
173
- var(--ui-button-solid-shadow, inset 0 1px rgb(255 255 255 / 0.16), var(--ui-shadow-xs)),
174
- var(--ui-focus-halo);
175
- }
176
-
177
- /* Disabled colours fall back to each variant's own; ghost and link take only the text colour. */
178
- [data-component~="ui-button"]:disabled {
179
- opacity: var(--ui-button-disabled-opacity, 0.6);
180
- cursor: not-allowed;
181
- border-color: var(--ui-button-disabled-border, var(--ui-button-border, var(--ui-border-strong)));
182
- background-color: var(--ui-button-disabled-surface, var(--ui-button-surface, var(--ui-surface-elevated)));
183
- color: var(--ui-button-disabled-text, var(--ui-button-text, var(--ui-action-secondary-text, var(--ui-text-primary))));
184
- }
185
-
186
- [data-component~="ui-button"][data-ui-button-state~="variant=solid"]:disabled {
187
- border-color: var(--ui-button-disabled-border, var(--ui-action-primary-surface, var(--ui-accent-solid)));
188
- background-color: var(--ui-button-disabled-surface, var(--ui-action-primary-surface, var(--ui-accent-solid)));
189
- color: var(--ui-button-disabled-text, var(--ui-action-primary-text, var(--ui-text-on-accent)));
190
- }
191
-
192
- [data-component~="ui-button"][data-ui-button-state~="variant=danger"]:disabled {
193
- border-color: var(--ui-button-disabled-border, var(--ui-danger-solid));
194
- background-color: var(--ui-button-disabled-surface, var(--ui-danger-solid));
195
- color: var(--ui-button-disabled-text, var(--ui-text-on-accent));
196
- }
197
-
198
- [data-component~="ui-button"][data-ui-button-state~="variant=ghost"]:disabled {
199
- border-color: transparent;
200
- background-color: transparent;
201
- color: var(--ui-button-disabled-text, var(--ui-button-ghost-text, var(--ui-action-secondary-text, var(--ui-text-primary))));
202
- }
203
-
204
- @media (pointer: coarse) {
205
- [data-component~="ui-button"] {
206
- min-block-size: var(--ui-control-min-block-size, 2.75rem);
207
- }
208
- }
209
-
210
- /* Link: an inline text action. No box, padding, or minimum height (inline targets are exempt under
211
- WCAG 2.5.8); the inherited font; an underline that strengthens on hover; a visible focus ring. */
212
- [data-component~="ui-button"][data-ui-button-state~="variant=link"] {
213
- display: inline;
214
- min-block-size: 0;
215
- padding: 0;
216
- border: 0;
217
- border-radius: var(--ui-radius-sm, 4px);
218
- background: none;
219
- box-shadow: none;
220
- font: inherit;
221
- color: var(--ui-button-link-color, var(--ui-text-secondary));
222
- text-decoration-line: underline;
223
- text-decoration-thickness: 1px;
224
- text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
225
- text-underline-offset: 0.2em;
226
- transition: color var(--ui-motion-fast) var(--ui-motion-ease), text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
227
- }
228
-
229
- [data-component~="ui-button"][data-ui-button-state~="variant=link"]:hover:enabled {
230
- color: var(--ui-button-link-hover-color, var(--ui-text-primary));
231
- text-decoration-color: currentColor;
232
- background: none;
233
- transform: none;
234
- }
235
-
236
- [data-component~="ui-button"][data-ui-button-state~="variant=link"]:active:enabled {
237
- background: none;
238
- transform: none;
239
- }
240
-
241
- [data-component~="ui-button"][data-ui-button-state~="variant=link"]:disabled {
242
- background: none;
243
- color: var(--ui-button-disabled-text, var(--ui-button-link-color, var(--ui-text-secondary)));
244
- }
245
-
246
- [data-component~="ui-button"][data-ui-button-state~="variant=link"]:focus-visible {
247
- box-shadow: none;
248
- /* Fallback keeps the ring if the token is missing: an unresolved var() would void the outline. */
249
- outline: 2px solid var(--ui-focus-ring, currentColor);
250
- outline-offset: 2px;
251
- }
252
-
253
- /* A component that sets its display still honours the hidden attribute on its root. */
254
- [data-component~="ui-button"][hidden] {
255
- display: none;
256
- }
49
+ display: inline-flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ vertical-align: middle;
53
+ color: var(--ui-action-secondary-text, var(--ui-text-primary));
54
+ }
55
+
56
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"] {
57
+ color: var(--ui-action-primary-text, var(--ui-text-on-accent));
58
+ }
59
+
60
+ [data-component~="ui-button"][data-ui-button-state~="align=start"] {
61
+ justify-content: flex-start;
62
+ text-align: start;
63
+ }
64
+
65
+ [data-component~="ui-button"][data-ui-button-state~="stretch"] {
66
+ display: flex;
67
+ inline-size: 100%;
68
+ }
69
+
70
+ [data-component~="ui-button"] {
71
+ appearance: none;
72
+ min-block-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
73
+ border: 1px solid var(--ui-button-border, var(--ui-border-strong));
74
+ border-radius: var(--ui-button-radius, var(--ui-radius-md));
75
+ background: var(--ui-button-surface, var(--ui-surface-elevated));
76
+ color: var(--ui-button-text, var(--ui-action-secondary-text, var(--ui-text-primary)));
77
+ font: inherit;
78
+ font-weight: var(--ui-font-medium);
79
+ line-height: var(--ui-line-height-tight);
80
+ padding: var(--ui-space-2) var(--ui-space-3);
81
+ background-image: var(--ui-raised-highlight);
82
+ box-shadow: var(--ui-button-shadow, var(--ui-raised, var(--ui-shadow-xs)));
83
+ cursor: pointer;
84
+ transition:
85
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
86
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
87
+ color var(--ui-motion-fast) var(--ui-motion-ease),
88
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
89
+ transform var(--ui-motion-fast) var(--ui-motion-ease);
90
+ margin: 0;
91
+ }
92
+
93
+ @supports (text-box-trim: trim-both) {
94
+ [data-component~="ui-button"] {
95
+ text-box-trim: trim-both;
96
+ text-box-edge: cap alphabetic;
97
+ }
98
+ }
99
+
100
+ [data-component~="ui-button"][data-ui-button-state~="size=sm"] {
101
+ min-block-size: var(--ui-control-size-sm);
102
+ padding: var(--ui-space-1) var(--ui-space-2);
103
+ font-size: 0.875rem;
104
+ }
105
+
106
+ [data-component~="ui-button"][data-ui-button-state~="size=lg"] {
107
+ min-block-size: var(--ui-control-size-lg);
108
+ padding: var(--ui-space-3) var(--ui-space-4);
109
+ font-size: 1rem;
110
+ }
111
+
112
+ [data-component~="ui-button"]:hover:enabled {
113
+ background: var(--ui-action-secondary-surface-hover, var(--ui-surface-muted));
114
+ border-color: var(--ui-control-border-hover, var(--ui-border-strong));
115
+ }
116
+
117
+ [data-component~="ui-button"]:active:enabled {
118
+ background: var(--ui-surface-subtle);
119
+ }
120
+
121
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"] {
122
+ border-color: var(--ui-action-primary-surface, var(--ui-accent-solid));
123
+ background: var(--ui-action-primary-surface, var(--ui-accent-solid));
124
+ color: var(--ui-action-primary-text, var(--ui-text-on-accent));
125
+ box-shadow: var(
126
+ --ui-button-solid-shadow,
127
+ inset 0 1px rgb(255 255 255 / 0.16),
128
+ var(--ui-shadow-xs)
129
+ );
130
+ }
131
+
132
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"]:hover:enabled {
133
+ background: var(--ui-action-primary-surface-hover, var(--ui-accent-hover));
134
+ border-color: var(--ui-action-primary-surface-hover, var(--ui-accent-hover));
135
+ box-shadow: var(--ui-shadow-sm);
136
+ transform: translateY(-1px);
137
+ }
138
+
139
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"]:active:enabled {
140
+ background: var(--ui-action-primary-surface-active, var(--ui-accent-active));
141
+ border-color: var(--ui-action-primary-surface-active, var(--ui-accent-active));
142
+ box-shadow: none;
143
+ transform: translateY(0);
144
+ }
145
+
146
+ [data-component~="ui-button"][data-ui-button-state~="variant=danger"] {
147
+ border-color: var(--ui-danger-solid);
148
+ background: var(--ui-danger-solid);
149
+ color: var(--ui-text-on-accent);
150
+ box-shadow: var(
151
+ --ui-button-danger-shadow,
152
+ inset 0 1px rgb(255 255 255 / 0.14),
153
+ var(--ui-shadow-xs)
154
+ );
155
+ }
156
+
157
+ [data-component~="ui-button"][data-ui-button-state~="variant=danger"]:hover:enabled {
158
+ background: var(--ui-danger-hover);
159
+ border-color: var(--ui-danger-hover);
160
+ box-shadow: var(--ui-shadow-sm);
161
+ transform: translateY(-1px);
162
+ }
163
+
164
+ [data-component~="ui-button"][data-ui-button-state~="variant=danger"]:active:enabled {
165
+ box-shadow: none;
166
+ transform: translateY(0);
167
+ }
168
+
169
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"] {
170
+ border-color: transparent;
171
+ background: transparent;
172
+ box-shadow: none;
173
+ color: var(--ui-button-ghost-text, var(--ui-action-secondary-text, var(--ui-text-primary)));
174
+ }
175
+
176
+ /* Tints derive from the text colour, not a surface token, so hover and press show on any background. */
177
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"]:hover:enabled {
178
+ background: var(
179
+ --ui-button-ghost-hover-surface,
180
+ color-mix(in srgb, currentColor 8%, transparent)
181
+ );
182
+ border-color: transparent;
183
+ }
184
+
185
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"]:active:enabled {
186
+ background: var(
187
+ --ui-button-ghost-active-surface,
188
+ color-mix(in srgb, currentColor 14%, transparent)
189
+ );
190
+ border-color: transparent;
191
+ }
192
+
193
+ /* A soft halo that transitions in with the other box-shadow changes, layered on the raised shadow. */
194
+ [data-component~="ui-button"]:focus-visible {
195
+ outline: none;
196
+ box-shadow:
197
+ var(--ui-button-shadow, var(--ui-raised, var(--ui-shadow-xs))),
198
+ var(--ui-focus-halo);
199
+ }
200
+
201
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"]:focus-visible {
202
+ box-shadow:
203
+ var(--ui-button-solid-shadow, inset 0 1px rgb(255 255 255 / 0.16), var(--ui-shadow-xs)),
204
+ var(--ui-focus-halo);
205
+ }
206
+
207
+ /* Disabled colours fall back to each variant's own; ghost and link take only the text colour. */
208
+ [data-component~="ui-button"]:disabled {
209
+ opacity: var(--ui-button-disabled-opacity, 0.6);
210
+ cursor: not-allowed;
211
+ border-color: var(--ui-button-disabled-border, var(--ui-button-border, var(--ui-border-strong)));
212
+ background-color: var(
213
+ --ui-button-disabled-surface,
214
+ var(--ui-button-surface, var(--ui-surface-elevated))
215
+ );
216
+ color: var(
217
+ --ui-button-disabled-text,
218
+ var(--ui-button-text, var(--ui-action-secondary-text, var(--ui-text-primary)))
219
+ );
220
+ }
221
+
222
+ [data-component~="ui-button"][data-ui-button-state~="variant=solid"]:disabled {
223
+ border-color: var(
224
+ --ui-button-disabled-border,
225
+ var(--ui-action-primary-surface, var(--ui-accent-solid))
226
+ );
227
+ background-color: var(
228
+ --ui-button-disabled-surface,
229
+ var(--ui-action-primary-surface, var(--ui-accent-solid))
230
+ );
231
+ color: var(--ui-button-disabled-text, var(--ui-action-primary-text, var(--ui-text-on-accent)));
232
+ }
233
+
234
+ [data-component~="ui-button"][data-ui-button-state~="variant=danger"]:disabled {
235
+ border-color: var(--ui-button-disabled-border, var(--ui-danger-solid));
236
+ background-color: var(--ui-button-disabled-surface, var(--ui-danger-solid));
237
+ color: var(--ui-button-disabled-text, var(--ui-text-on-accent));
238
+ }
239
+
240
+ [data-component~="ui-button"][data-ui-button-state~="variant=ghost"]:disabled {
241
+ border-color: transparent;
242
+ background-color: transparent;
243
+ color: var(
244
+ --ui-button-disabled-text,
245
+ var(--ui-button-ghost-text, var(--ui-action-secondary-text, var(--ui-text-primary)))
246
+ );
247
+ }
248
+
249
+ @media (pointer: coarse) {
250
+ [data-component~="ui-button"] {
251
+ min-block-size: var(--ui-control-min-block-size);
252
+ }
253
+ }
254
+
255
+ /* Link: an inline text action. No box, padding, or minimum height (inline targets are exempt under
256
+ WCAG 2.5.8); the inherited font; an underline that strengthens on hover; a visible focus ring. */
257
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"] {
258
+ display: inline;
259
+ min-block-size: 0;
260
+ padding: 0;
261
+ border: 0;
262
+ border-radius: var(--ui-radius-sm);
263
+ background: none;
264
+ box-shadow: none;
265
+ font: inherit;
266
+ color: var(--ui-button-link-text, var(--ui-text-secondary));
267
+ text-decoration-line: underline;
268
+ text-decoration-thickness: 1px;
269
+ text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
270
+ text-underline-offset: 0.2em;
271
+ transition:
272
+ color var(--ui-motion-fast) var(--ui-motion-ease),
273
+ text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
274
+ }
275
+
276
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"]:hover:enabled {
277
+ color: var(--ui-button-link-hover-text, var(--ui-text-primary));
278
+ text-decoration-color: currentColor;
279
+ background: none;
280
+ transform: none;
281
+ }
282
+
283
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"]:active:enabled {
284
+ background: none;
285
+ transform: none;
286
+ }
287
+
288
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"]:disabled {
289
+ background: none;
290
+ color: var(--ui-button-disabled-text, var(--ui-button-link-text, var(--ui-text-secondary)));
291
+ }
292
+
293
+ [data-component~="ui-button"][data-ui-button-state~="variant=link"]:focus-visible {
294
+ box-shadow: none;
295
+ /* Fallback keeps the ring if the token is missing: an unresolved var() would void the outline. */
296
+ outline: 2px solid var(--ui-focus-ring);
297
+ outline-offset: 2px;
298
+ }
299
+
300
+ /* A component that sets its display still honours the hidden attribute on its root. */
301
+ [data-component~="ui-button"][hidden] {
302
+ display: none;
303
+ }
257
304
  </style>
@@ -1,12 +1,12 @@
1
1
  type __VLS_Props = {
2
- tone?: "info" | "note" | "warning" | "success" | "danger" | null;
2
+ tone?: 'info' | 'note' | 'warning' | 'success' | 'danger';
3
3
  };
4
4
  declare var __VLS_1: {};
5
5
  type __VLS_Slots = {} & {
6
6
  default?: (props: typeof __VLS_1) => any;
7
7
  };
8
8
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
9
- tone: "info" | "note" | "warning" | "success" | "danger" | null;
9
+ tone: "info" | "note" | "warning" | "success" | "danger";
10
10
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
11
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
12
12
  declare const _default: typeof __VLS_export;