@threadlabs/looma 0.6.0 → 0.6.2

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 (71) hide show
  1. package/components/ui-avatar/ui-avatar.html +13 -0
  2. package/components/ui-avatar-group/ui-avatar-group.html +7 -2
  3. package/components/ui-avatar-group/ui-avatar-group.js +3 -3
  4. package/components/ui-badge/ui-badge.html +14 -0
  5. package/components/ui-button/ui-button.html +2 -2
  6. package/components/ui-cluster/ui-cluster.html +1 -1
  7. package/components/ui-combobox/ui-combobox.html +112 -46
  8. package/components/ui-combobox/ui-combobox.js +14 -2
  9. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +3 -3
  10. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +2 -2
  11. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +2 -2
  12. package/components/ui-editor-toolbar/ui-editor-toolbar.html +5 -3
  13. package/components/ui-menu-item/ui-menu-item.html +13 -0
  14. package/components/ui-stack/ui-stack.html +1 -1
  15. package/components/ui-tabs/ui-tabs.html +13 -0
  16. package/components/ui-toast-region/ui-toast-region.html +2 -2
  17. package/components/ui-tooltip/ui-tooltip.html +3 -0
  18. package/components/ui-tooltip/ui-tooltip.js +24 -3
  19. package/dist/index.js +1 -1
  20. package/package.json +1 -1
  21. package/styles/ui-avatar-group.css +7 -2
  22. package/styles/ui-avatar.css +19 -0
  23. package/styles/ui-badge.css +21 -1
  24. package/styles/ui-cluster.css +1 -1
  25. package/styles/ui-combobox.css +52 -1
  26. package/styles/ui-editor-insert-table-grid.css +2 -2
  27. package/styles/ui-editor-table-context-menu.css +1 -1
  28. package/styles/ui-editor-table-toolbar.css +1 -1
  29. package/styles/ui-editor-toolbar.css +5 -3
  30. package/styles/ui-menu-item.css +20 -1
  31. package/styles/ui-stack.css +1 -1
  32. package/styles/ui-tabs.css +19 -0
  33. package/styles/ui-toast-region.css +2 -2
  34. package/tokens.css +4 -0
  35. package/vanilla/UiCombobox.js +141 -119
  36. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  37. package/vanilla/UiEditorTableContextMenu.js +1 -1
  38. package/vanilla/UiEditorTableToolbar.js +1 -1
  39. package/vanilla/UiTooltip.d.ts +1 -0
  40. package/vanilla/UiTooltip.js +1 -1
  41. package/vue/UiAvatar.vue +13 -0
  42. package/vue/UiAvatarGroup.vue +7 -2
  43. package/vue/UiBadge.vue +14 -0
  44. package/vue/UiCluster.vue +1 -1
  45. package/vue/UiCombobox.vue +135 -53
  46. package/vue/UiEditorInsertTableGrid.vue +3 -3
  47. package/vue/UiEditorTableContextMenu.vue +2 -2
  48. package/vue/UiEditorTableToolbar.vue +2 -2
  49. package/vue/UiEditorToolbar.vue +5 -3
  50. package/vue/UiMenuItem.vue +13 -0
  51. package/vue/UiStack.vue +1 -1
  52. package/vue/UiTabs.vue +13 -0
  53. package/vue/UiToastRegion.vue +2 -2
  54. package/vue/UiTooltip.d.ts +4 -0
  55. package/vue/UiTooltip.vue +6 -0
  56. package/vue/chunks/UiAvatar.js +1 -1
  57. package/vue/chunks/UiAvatarGroup.js +1 -1
  58. package/vue/chunks/UiBadge.js +1 -1
  59. package/vue/chunks/UiCluster.js +1 -1
  60. package/vue/chunks/UiCombobox.js +66 -41
  61. package/vue/chunks/UiEditorInsertTableGrid.js +3 -3
  62. package/vue/chunks/UiEditorTableContextMenu.js +2 -2
  63. package/vue/chunks/UiEditorTableToolbar.js +2 -2
  64. package/vue/chunks/UiEditorToolbar.js +1 -1
  65. package/vue/chunks/UiMenuItem.js +1 -1
  66. package/vue/chunks/UiStack.js +1 -1
  67. package/vue/chunks/UiTabs.js +1 -1
  68. package/vue/chunks/UiToastRegion.js +1 -1
  69. package/vue/chunks/UiTooltip.js +5 -2
  70. package/vue/components.css +322 -211
  71. package/vue/editor/index.js +2 -1
@@ -182,7 +182,7 @@ onBeforeUnmount(() => {
182
182
  class="grid"
183
183
  role="group"
184
184
  aria-label="Table dimensions"
185
- :style="{ '--ui-editor-table-grid-rows': rows, '--ui-editor-table-grid-cols': cols }"
185
+ :style="{ '--_rows': rows, '--_cols': cols }"
186
186
  >
187
187
  <button
188
188
  v-for="cell in cells"
@@ -220,8 +220,8 @@ onBeforeUnmount(() => {
220
220
 
221
221
  .grid {
222
222
  display: grid;
223
- grid-template-columns: repeat(var(--ui-editor-table-grid-cols, 8), 1.25rem);
224
- grid-template-rows: repeat(var(--ui-editor-table-grid-rows, 8), 1.25rem);
223
+ grid-template-columns: repeat(var(--_cols, 8), 1.25rem);
224
+ grid-template-rows: repeat(var(--_rows, 8), 1.25rem);
225
225
  gap: 2px;
226
226
  margin-bottom: var(--ui-space-2);
227
227
  }
@@ -222,7 +222,7 @@ onBeforeUnmount(() => {
222
222
  <span
223
223
  class="swatch"
224
224
  :class="{ default: !swatch.color }"
225
- :style="{ '--ui-editor-table-context-swatch': swatch.color }"
225
+ :style="{ '--_swatch': swatch.color }"
226
226
  ></span>
227
227
  <span class="swatch-label">{{ swatch.label }}</span>
228
228
  </button>
@@ -321,7 +321,7 @@ onBeforeUnmount(() => {
321
321
  height: 1rem;
322
322
  border-radius: 999px;
323
323
  border: 1px solid var(--ui-border);
324
- background: var(--ui-editor-table-context-swatch, #fff);
324
+ background: var(--_swatch, #fff);
325
325
  box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.35);
326
326
  flex-shrink: 0;
327
327
  }
@@ -292,7 +292,7 @@ onBeforeUnmount(() => {
292
292
  <span
293
293
  class="swatch"
294
294
  :class="{ default: !swatch.color }"
295
- :style="{ '--ui-editor-table-toolbar-swatch': swatch.color }"
295
+ :style="{ '--_swatch': swatch.color }"
296
296
  ></span>
297
297
  <span>{{ swatch.label }}</span>
298
298
  </button>
@@ -495,7 +495,7 @@ onBeforeUnmount(() => {
495
495
  flex: 0 0 14px;
496
496
  border: 1px solid color-mix(in srgb, var(--ui-border) 80%, #000);
497
497
  border-radius: 3px;
498
- background: var(--ui-editor-table-toolbar-swatch);
498
+ background: var(--_swatch);
499
499
  }
500
500
 
501
501
  .swatch.default {
@@ -45,9 +45,10 @@ const hostState = computed(() =>
45
45
  padding: var(--ui-editor-toolbar-padding-block, 6px)
46
46
  var(--ui-editor-toolbar-padding-inline, 12px);
47
47
  min-height: var(--ui-editor-toolbar-min-height, 48px);
48
- overflow-x: auto;
49
- scrollbar-width: none;
50
- white-space: nowrap;
48
+ /* More controls than the column is wide is normal at a readable measure, so the row wraps.
49
+ Scrolling hid the tail behind an invisible scrollbar. */
50
+ flex-wrap: wrap;
51
+ row-gap: var(--ui-editor-toolbar-row-gap, var(--ui-editor-toolbar-gap, 2px));
51
52
  background: var(--ui-editor-toolbar-surface, var(--ui-surface));
52
53
  border-bottom: 1px solid var(--ui-editor-toolbar-border, var(--ui-border));
53
54
  }
@@ -69,6 +70,7 @@ const hostState = computed(() =>
69
70
  }
70
71
 
71
72
  [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"] {
73
+ flex-wrap: nowrap;
72
74
  position: static;
73
75
  top: auto;
74
76
  width: max-content;
@@ -46,6 +46,19 @@ withDefaults(
46
46
  color var(--ui-motion-fast) var(--ui-motion-ease);
47
47
  }
48
48
 
49
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
50
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
51
+ * Trimming applies to block containers, so the box is a block with centred content. */
52
+ @supports (text-box-trim: trim-both) {
53
+ [data-component~="ui-menu-item"] {
54
+ display: block;
55
+ min-block-size: var(--ui-menu-item-min-block-size, var(--ui-control-size-md, 2.5rem));
56
+ align-content: center;
57
+ text-box-trim: trim-both;
58
+ text-box-edge: cap alphabetic;
59
+ }
60
+ }
61
+
49
62
  [data-component~="ui-menu-item"]:is(:hover, :focus-visible):not([aria-disabled="true"]) {
50
63
  background: var(--ui-menu-item-hover-surface, var(--ui-surface-subtle));
51
64
  }
package/vue/UiStack.vue CHANGED
@@ -32,7 +32,7 @@ const hostState = computed(() =>
32
32
  display: flex;
33
33
  flex-direction: column;
34
34
  align-items: stretch;
35
- gap: var(--ui-layout-gap, var(--_layout-gap));
35
+ gap: var(--ui-stack-gap, var(--_layout-gap));
36
36
  min-inline-size: 0;
37
37
  max-inline-size: 100%;
38
38
  margin: 0;
package/vue/UiTabs.vue CHANGED
@@ -259,6 +259,19 @@ onBeforeUnmount(() => {
259
259
  border-color var(--ui-motion-fast) var(--ui-motion-ease);
260
260
  }
261
261
 
262
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
263
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
264
+ * Trimming applies to block containers, so the box is a block with centred content. */
265
+ @supports (text-box-trim: trim-both) {
266
+ .list button {
267
+ display: block;
268
+ text-align: center;
269
+ align-content: center;
270
+ text-box-trim: trim-both;
271
+ text-box-edge: cap alphabetic;
272
+ }
273
+ }
274
+
262
275
  [data-component~="ui-tabs"][data-ui-tabs-state~="stretch"] .list {
263
276
  grid-auto-columns: minmax(max-content, 1fr);
264
277
  }
@@ -264,13 +264,13 @@ defineExpose({
264
264
  background: var(--ui-surface-elevated);
265
265
  color: var(--ui-text-primary);
266
266
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
267
- animation: ui-toast-enter var(--ui-toast-enter-duration, 0.32s)
267
+ animation: ui-toast-enter var(--ui-toast-region-enter-duration, 0.32s)
268
268
  var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
269
269
  }
270
270
 
271
271
  /* Leaving slides on down and fades; the controller removes the toast when this ends. */
272
272
  .toast.closing {
273
- animation: ui-toast-exit var(--ui-toast-exit-duration, 0.22s) var(--ui-motion-ease) both;
273
+ animation: ui-toast-exit var(--ui-toast-region-exit-duration, 0.22s) var(--ui-motion-ease) both;
274
274
  pointer-events: none;
275
275
  }
276
276
 
@@ -5,6 +5,7 @@ type __VLS_Props = {
5
5
  open?: boolean;
6
6
  placement?: string;
7
7
  showDelay?: number;
8
+ trigger?: 'hover' | 'click' | 'focus';
8
9
  };
9
10
  declare var __VLS_1: {};
10
11
  type __VLS_Slots = {} & {
@@ -22,6 +23,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
22
23
  readonly trigger: "keyboard" | "pointer" | "programmatic";
23
24
  }) => any;
24
25
  "update:open": (value: boolean) => any;
26
+ "update:trigger": (value: "click" | "focus" | "hover") => any;
25
27
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
26
28
  onClose?: ((detail: {
27
29
  readonly open: boolean;
@@ -34,7 +36,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
34
36
  readonly trigger: "keyboard" | "pointer" | "programmatic";
35
37
  }) => any) | undefined;
36
38
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
39
+ "onUpdate:trigger"?: ((value: "click" | "focus" | "hover") => any) | undefined;
37
40
  }>, {
41
+ trigger: "hover" | "click" | "focus";
38
42
  for: string;
39
43
  hideDelay: number;
40
44
  inverse: boolean;
package/vue/UiTooltip.vue CHANGED
@@ -13,6 +13,7 @@ const props = withDefaults(
13
13
  open?: boolean
14
14
  placement?: string
15
15
  showDelay?: number
16
+ trigger?: 'hover' | 'click' | 'focus'
16
17
  }>(),
17
18
  {
18
19
  for: '',
@@ -21,10 +22,12 @@ const props = withDefaults(
21
22
  open: false,
22
23
  placement: 'top-start',
23
24
  showDelay: 500,
25
+ trigger: 'hover',
24
26
  },
25
27
  )
26
28
  const emit = defineEmits<{
27
29
  'update:open': [value: boolean]
30
+ 'update:trigger': [value: 'hover' | 'click' | 'focus']
28
31
  open: [
29
32
  detail: {
30
33
  readonly open: boolean
@@ -91,6 +94,9 @@ function dispatch(name: string, detail?: unknown): boolean {
91
94
  if (detail !== null && typeof detail === 'object' && 'open' in detail) {
92
95
  emitEvent('update:open', (detail as Record<string, unknown>)['open'])
93
96
  }
97
+ if (detail !== null && typeof detail === 'object' && 'trigger' in detail) {
98
+ emitEvent('update:trigger', (detail as Record<string, unknown>)['trigger'])
99
+ }
94
100
  return root.value?.dispatchEvent(
95
101
  new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
96
102
  ) ?? true
@@ -133,6 +133,6 @@ var UiAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
133
133
  ], 16);
134
134
  };
135
135
  }
136
- }), [["__scopeId", "data-v-038b6eb1"]]);
136
+ }), [["__scopeId", "data-v-3a27ff1d"]]);
137
137
  //#endregion
138
138
  export { UiAvatar_default as t };
@@ -114,6 +114,6 @@ var UiAvatarGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
114
114
  }, toDisplayString(`+${overflowCount.value}`), 9, _hoisted_2)], 16, _hoisted_1);
115
115
  };
116
116
  }
117
- }), [["__scopeId", "data-v-6029679e"]]);
117
+ }), [["__scopeId", "data-v-2ad5d86f"]]);
118
118
  //#endregion
119
119
  export { UiAvatarGroup_default as t };
@@ -19,6 +19,6 @@ var UiBadge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
19
19
  return openBlock(), createElementBlock("span", mergeProps({ "data-component": "ui-badge" }, _ctx.$attrs, { "data-ui-badge-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
20
20
  };
21
21
  }
22
- }), [["__scopeId", "data-v-43aa138f"]]);
22
+ }), [["__scopeId", "data-v-7e9b5784"]]);
23
23
  //#endregion
24
24
  export { UiBadge_default as t };
@@ -19,6 +19,6 @@ var UiCluster_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
19
19
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-cluster" }, _ctx.$attrs, { "data-ui-cluster-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
20
20
  };
21
21
  }
22
- }), [["__scopeId", "data-v-06d4310a"]]);
22
+ }), [["__scopeId", "data-v-6de2f2e4"]]);
23
23
  //#endregion
24
24
  export { UiCluster_default as t };
@@ -6,16 +6,17 @@ import * as controllerModule from "@threadlabs/looma/components/ui-combobox/ui-c
6
6
  //#region .build/vue/UiCombobox.vue?vue&type=script&setup=true&lang.ts
7
7
  var _hoisted_1 = ["data-ui-combobox-state"];
8
8
  var _hoisted_2 = ["for"];
9
- var _hoisted_3 = {
9
+ var _hoisted_3 = { class: "control" };
10
+ var _hoisted_4 = {
10
11
  class: "field",
11
12
  ref: "field"
12
13
  };
13
- var _hoisted_4 = [
14
+ var _hoisted_5 = [
14
15
  "data-index",
15
16
  "disabled",
16
17
  "aria-label"
17
18
  ];
18
- var _hoisted_5 = [
19
+ var _hoisted_6 = [
19
20
  "id",
20
21
  "aria-controls",
21
22
  "aria-expanded",
@@ -28,45 +29,45 @@ var _hoisted_5 = [
28
29
  "readonly",
29
30
  "required"
30
31
  ];
31
- var _hoisted_6 = {
32
+ var _hoisted_7 = {
32
33
  key: 1,
33
34
  type: "button",
34
35
  "data-combobox-action": "clear",
35
36
  "aria-label": "Clear"
36
37
  };
37
- var _hoisted_7 = ["id", "disabled"];
38
38
  var _hoisted_8 = ["aria-controls"];
39
- var _hoisted_9 = ["hidden"];
40
- var _hoisted_10 = [
39
+ var _hoisted_9 = ["id", "disabled"];
40
+ var _hoisted_10 = ["hidden"];
41
+ var _hoisted_11 = [
41
42
  "id",
42
43
  "aria-label",
43
44
  "aria-busy"
44
45
  ];
45
- var _hoisted_11 = ["role", "aria-label"];
46
- var _hoisted_12 = {
46
+ var _hoisted_12 = ["role", "aria-label"];
47
+ var _hoisted_13 = {
47
48
  key: 0,
48
49
  class: "group"
49
50
  };
50
- var _hoisted_13 = [
51
+ var _hoisted_14 = [
51
52
  "id",
52
53
  "aria-selected",
53
54
  "aria-disabled",
54
55
  "data-index"
55
56
  ];
56
- var _hoisted_14 = { class: "primary" };
57
- var _hoisted_15 = ["id", "data-index"];
58
- var _hoisted_16 = {
57
+ var _hoisted_15 = { class: "primary" };
58
+ var _hoisted_16 = ["id", "data-index"];
59
+ var _hoisted_17 = {
59
60
  key: 1,
60
61
  class: "message"
61
62
  };
62
- var _hoisted_17 = ["id", "hidden"];
63
- var _hoisted_18 = {
63
+ var _hoisted_18 = ["id", "hidden"];
64
+ var _hoisted_19 = {
64
65
  class: "sr-only",
65
66
  role: "status",
66
67
  "aria-live": "polite",
67
68
  "aria-atomic": "true"
68
69
  };
69
- var _hoisted_19 = {
70
+ var _hoisted_20 = {
70
71
  class: "authored-options",
71
72
  hidden: "",
72
73
  "aria-hidden": "true",
@@ -143,6 +144,7 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
143
144
  const popupElement = useTemplateRef("popup");
144
145
  const listboxElement = useTemplateRef("listbox");
145
146
  const optionsElement = useTemplateRef("options");
147
+ const internalItems = ref([]);
146
148
  const raw = ref("");
147
149
  const display = ref("");
148
150
  const selected = ref(null);
@@ -327,6 +329,7 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
327
329
  })) ?? true;
328
330
  }
329
331
  function read(name) {
332
+ if (name === "internalItems") return internalItems.value;
330
333
  if (name === "raw") return raw.value;
331
334
  if (name === "display") return display.value;
332
335
  if (name === "selected") return selected.value;
@@ -347,6 +350,10 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
347
350
  return props[name];
348
351
  }
349
352
  function write(name, value) {
353
+ if (name === "internalItems") {
354
+ internalItems.value = value;
355
+ return true;
356
+ }
350
357
  if (name === "raw") {
351
358
  raw.value = value;
352
359
  return true;
@@ -512,9 +519,9 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
512
519
  for: `${uid.value}-input`,
513
520
  class: normalizeClass({ "sr-only": __props.labelVisibility === "sr-only" })
514
521
  }, [createTextVNode(toDisplayString(__props.label) + " ", 1), __props.required ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(" *")], 64)) : createCommentVNode("v-if", true)], 10, _hoisted_2),
515
- createElementVNode("div", _hoisted_3, [
522
+ createElementVNode("div", _hoisted_3, [createElementVNode("div", _hoisted_4, [
516
523
  renderSlot(_ctx.$slots, "start", {}, void 0, true),
517
- __props.multiple ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(__props.items, (item, index) => {
524
+ __props.multiple ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(internalItems.value, (item, index) => {
518
525
  return openBlock(), createElementBlock("button", {
519
526
  key: item.id,
520
527
  class: "item",
@@ -526,7 +533,7 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
526
533
  }, [renderSlot(_ctx.$slots, `item-${item.id}`, {}, () => [createVNode(UiBadge_default, null, {
527
534
  default: withCtx(() => [createTextVNode(toDisplayString(item.label), 1)]),
528
535
  _: 2
529
- }, 1024)], true)], 8, _hoisted_4);
536
+ }, 1024)], true)], 8, _hoisted_5);
530
537
  }), 128)) : createCommentVNode("v-if", true),
531
538
  createElementVNode("input", {
532
539
  role: "combobox",
@@ -544,8 +551,8 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
544
551
  readonly: __props.readonly,
545
552
  required: __props.required,
546
553
  ref: "input"
547
- }, null, 40, _hoisted_5),
548
- __props.clearable ? (openBlock(), createElementBlock("button", _hoisted_6, [..._cache[0] || (_cache[0] = [createElementVNode("svg", {
554
+ }, null, 40, _hoisted_6),
555
+ __props.clearable ? (openBlock(), createElementBlock("button", _hoisted_7, [..._cache[0] || (_cache[0] = [createElementVNode("svg", {
549
556
  class: "affordance-icon",
550
557
  "aria-hidden": "true",
551
558
  viewBox: "0 0 24 24",
@@ -554,21 +561,14 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
554
561
  "stroke-width": "2",
555
562
  "stroke-linecap": "round"
556
563
  }, [createElementVNode("path", { d: "M7 7l10 10M17 7 7 17" })], -1)])])) : createCommentVNode("v-if", true),
557
- __props.help ? (openBlock(), createElementBlock("button", {
558
- key: 2,
559
- type: "button",
560
- "aria-label": "Help",
561
- id: `${uid.value}-help`,
562
- disabled: __props.disabled
563
- }, [..._cache[1] || (_cache[1] = [createElementVNode("span", { "aria-hidden": "true" }, "?", -1)])], 8, _hoisted_7)) : createCommentVNode("v-if", true),
564
564
  __props.disclosure ? (openBlock(), createElementBlock("button", {
565
- key: 3,
565
+ key: 2,
566
566
  type: "button",
567
567
  "data-combobox-action": "disclosure",
568
568
  tabindex: "-1",
569
569
  "aria-label": "Show suggestions",
570
570
  "aria-controls": `${uid.value}-listbox`
571
- }, [..._cache[2] || (_cache[2] = [createElementVNode("svg", {
571
+ }, [..._cache[1] || (_cache[1] = [createElementVNode("svg", {
572
572
  class: "affordance-icon",
573
573
  "aria-hidden": "true",
574
574
  viewBox: "0 0 24 24",
@@ -578,9 +578,34 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
578
578
  "stroke-linecap": "round",
579
579
  "stroke-linejoin": "round"
580
580
  }, [createElementVNode("path", { d: "m6 9 6 6 6-6" })], -1)])], 8, _hoisted_8)) : createCommentVNode("v-if", true)
581
- ], 512),
581
+ ], 512), __props.help ? (openBlock(), createElementBlock("button", {
582
+ key: 0,
583
+ class: "help",
584
+ type: "button",
585
+ "aria-label": "Help",
586
+ id: `${uid.value}-help`,
587
+ disabled: __props.disabled
588
+ }, [..._cache[2] || (_cache[2] = [createElementVNode("svg", {
589
+ class: "help-icon",
590
+ "aria-hidden": "true",
591
+ viewBox: "0 0 24 24",
592
+ fill: "none",
593
+ stroke: "currentColor",
594
+ "stroke-width": "2",
595
+ "stroke-linecap": "round",
596
+ "stroke-linejoin": "round"
597
+ }, [
598
+ createElementVNode("circle", {
599
+ cx: "12",
600
+ cy: "12",
601
+ r: "10"
602
+ }),
603
+ createElementVNode("path", { d: "M9.1 9a3 3 0 0 1 5.8 1c0 2-3 3-3 3" }),
604
+ createElementVNode("path", { d: "M12 17h.01" })
605
+ ], -1)])], 8, _hoisted_9)) : createCommentVNode("v-if", true)]),
582
606
  __props.help ? (openBlock(), createBlock(UiTooltip_default, {
583
607
  key: 0,
608
+ trigger: "click",
584
609
  id: `${uid.value}-help-text`,
585
610
  for: `${uid.value}-help`
586
611
  }, {
@@ -603,7 +628,7 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
603
628
  key: group.name,
604
629
  role: group.role,
605
630
  "aria-label": group.label ?? void 0
606
- }, [group.name ? (openBlock(), createElementBlock("div", _hoisted_12, toDisplayString(group.name), 1)) : createCommentVNode("v-if", true), (openBlock(true), createElementBlock(Fragment, null, renderList(group.rows, (row) => {
631
+ }, [group.name ? (openBlock(), createElementBlock("div", _hoisted_13, toDisplayString(group.name), 1)) : createCommentVNode("v-if", true), (openBlock(true), createElementBlock(Fragment, null, renderList(group.rows, (row) => {
607
632
  return openBlock(), createElementBlock("div", {
608
633
  key: row.id,
609
634
  class: normalizeClass(["option", { active: row.index === active.value }]),
@@ -612,8 +637,8 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
612
637
  "aria-selected": row.value === selected.value,
613
638
  "aria-disabled": row.disabled,
614
639
  "data-index": row.index
615
- }, [renderSlot(_ctx.$slots, `option-${row.id}`, {}, () => [createElementVNode("span", _hoisted_14, toDisplayString(row.label), 1)], true)], 10, _hoisted_13);
616
- }), 128))], 8, _hoisted_11);
640
+ }, [renderSlot(_ctx.$slots, `option-${row.id}`, {}, () => [createElementVNode("span", _hoisted_15, toDisplayString(row.label), 1)], true)], 10, _hoisted_14);
641
+ }), 128))], 8, _hoisted_12);
617
642
  }), 128)),
618
643
  creatable.value ? (openBlock(), createElementBlock("div", {
619
644
  key: 0,
@@ -622,21 +647,21 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
622
647
  "aria-selected": "false",
623
648
  id: `${uid.value}-option-${createIndex.value}`,
624
649
  "data-index": createIndex.value
625
- }, toDisplayString(`Create “${raw.value}”`), 11, _hoisted_15)) : createCommentVNode("v-if", true),
626
- message.value ? (openBlock(), createElementBlock("div", _hoisted_16, toDisplayString(message.value), 1)) : createCommentVNode("v-if", true)
627
- ], 8, _hoisted_10), renderSlot(_ctx.$slots, "footer", {}, void 0, true)], 8, _hoisted_9),
650
+ }, toDisplayString(`Create “${raw.value}”`), 11, _hoisted_16)) : createCommentVNode("v-if", true),
651
+ message.value ? (openBlock(), createElementBlock("div", _hoisted_17, toDisplayString(message.value), 1)) : createCommentVNode("v-if", true)
652
+ ], 8, _hoisted_11), renderSlot(_ctx.$slots, "footer", {}, void 0, true)], 8, _hoisted_10),
628
653
  createElementVNode("div", {
629
654
  class: "message",
630
655
  id: `${uid.value}-validation`,
631
656
  hidden: !validation.value.issues.length
632
657
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(validation.value.issues, (issue, index) => {
633
658
  return openBlock(), createElementBlock("div", { key: index }, toDisplayString(issue.message), 1);
634
- }), 128))], 8, _hoisted_17),
635
- createElementVNode("div", _hoisted_18, toDisplayString(statusText.value), 1),
636
- createElementVNode("div", _hoisted_19, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 512)
659
+ }), 128))], 8, _hoisted_18),
660
+ createElementVNode("div", _hoisted_19, toDisplayString(statusText.value), 1),
661
+ createElementVNode("div", _hoisted_20, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 512)
637
662
  ], 16, _hoisted_1);
638
663
  };
639
664
  }
640
- }), [["__scopeId", "data-v-147b231f"]]);
665
+ }), [["__scopeId", "data-v-f1d9bb8a"]]);
641
666
  //#endregion
642
667
  export { UiCombobox_default as t };
@@ -175,8 +175,8 @@ var UiEditorInsertTableGrid_default = /*#__PURE__*/ _plugin_vue_export_helper_de
175
175
  role: "group",
176
176
  "aria-label": "Table dimensions",
177
177
  style: normalizeStyle({
178
- "--ui-editor-table-grid-rows": rows.value,
179
- "--ui-editor-table-grid-cols": cols.value
178
+ "--_rows": rows.value,
179
+ "--_cols": cols.value
180
180
  })
181
181
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(cells.value, (cell) => {
182
182
  return openBlock(), createElementBlock("button", {
@@ -198,6 +198,6 @@ var UiEditorInsertTableGrid_default = /*#__PURE__*/ _plugin_vue_export_helper_de
198
198
  ], 16, _hoisted_1);
199
199
  };
200
200
  }
201
- }), [["__scopeId", "data-v-c4064690"]]);
201
+ }), [["__scopeId", "data-v-00e6602a"]]);
202
202
  //#endregion
203
203
  export { UiEditorInsertTableGrid_default as t };
@@ -157,7 +157,7 @@ var UiEditorTableContextMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_d
157
157
  "data-action": swatch.action
158
158
  }, [createElementVNode("span", {
159
159
  class: normalizeClass(["swatch", { default: !swatch.color }]),
160
- style: normalizeStyle({ "--ui-editor-table-context-swatch": swatch.color })
160
+ style: normalizeStyle({ "--_swatch": swatch.color })
161
161
  }, null, 6), createElementVNode("span", _hoisted_5, toDisplayString(swatch.label), 1)], 10, _hoisted_4);
162
162
  }), 128))])])) : createCommentVNode("v-if", true), (openBlock(true), createElementBlock(Fragment, null, renderList(sections.value, (section) => {
163
163
  return openBlock(), createElementBlock(Fragment, { key: section.heading }, [_cache[1] || (_cache[1] = createElementVNode("div", { class: "sep" }, null, -1)), createElementVNode("div", _hoisted_6, [createElementVNode("div", _hoisted_7, toDisplayString(section.heading), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(section.items, (item) => {
@@ -172,6 +172,6 @@ var UiEditorTableContextMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_d
172
172
  }), 128))], 16, _hoisted_1);
173
173
  };
174
174
  }
175
- }), [["__scopeId", "data-v-7c984caf"]]);
175
+ }), [["__scopeId", "data-v-9cbdf038"]]);
176
176
  //#endregion
177
177
  export { UiEditorTableContextMenu_default as t };
@@ -250,7 +250,7 @@ var UiEditorTableToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
250
250
  "data-action": swatch.action
251
251
  }, [createElementVNode("span", {
252
252
  class: normalizeClass(["swatch", { default: !swatch.color }]),
253
- style: normalizeStyle({ "--ui-editor-table-toolbar-swatch": swatch.color })
253
+ style: normalizeStyle({ "--_swatch": swatch.color })
254
254
  }, null, 6), createElementVNode("span", null, toDisplayString(swatch.label), 1)], 10, _hoisted_14);
255
255
  }), 128))])])) : createCommentVNode("v-if", true), (openBlock(true), createElementBlock(Fragment, null, renderList(sections.value, (section) => {
256
256
  return openBlock(), createElementBlock("div", {
@@ -270,6 +270,6 @@ var UiEditorTableToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
270
270
  ], 16, _hoisted_1);
271
271
  };
272
272
  }
273
- }), [["__scopeId", "data-v-c7ed049b"]]);
273
+ }), [["__scopeId", "data-v-1066cfb2"]]);
274
274
  //#endregion
275
275
  export { UiEditorTableToolbar_default as t };
@@ -23,6 +23,6 @@ var UiEditorToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
23
23
  }, _ctx.$attrs, { "data-ui-editor-toolbar-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1);
24
24
  };
25
25
  }
26
- }), [["__scopeId", "data-v-472b5c16"]]);
26
+ }), [["__scopeId", "data-v-0da1a114"]]);
27
27
  //#endregion
28
28
  export { UiEditorToolbar_default as t };
@@ -26,6 +26,6 @@ var UiMenuItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
26
26
  }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
27
27
  };
28
28
  }
29
- }), [["__scopeId", "data-v-deb5a674"]]);
29
+ }), [["__scopeId", "data-v-69407da9"]]);
30
30
  //#endregion
31
31
  export { UiMenuItem_default as t };
@@ -24,6 +24,6 @@ var UiStack_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
24
24
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-stack" }, _ctx.$attrs, { "data-ui-stack-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
25
25
  };
26
26
  }
27
- }), [["__scopeId", "data-v-aa8062a9"]]);
27
+ }), [["__scopeId", "data-v-9a903e2b"]]);
28
28
  //#endregion
29
29
  export { UiStack_default as t };
@@ -172,6 +172,6 @@ var UiTabs_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
172
172
  }), 128))], 8, _hoisted_2), createElementVNode("div", _hoisted_4, [renderSlot(_ctx.$slots, "default")], 512)], 16, _hoisted_1);
173
173
  };
174
174
  }
175
- }), [["__scopeId", "data-v-b9e876c6"]]);
175
+ }), [["__scopeId", "data-v-3e89baea"]]);
176
176
  //#endregion
177
177
  export { UiTabs_default as t };
@@ -188,6 +188,6 @@ var UiToastRegion_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
188
188
  }), 128))], 16);
189
189
  };
190
190
  }
191
- }), [["__scopeId", "data-v-7d8dab78"]]);
191
+ }), [["__scopeId", "data-v-660faa24"]]);
192
192
  //#endregion
193
193
  export { UiToastRegion_default as t };
@@ -21,10 +21,12 @@ var UiTooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
21
21
  default: false
22
22
  },
23
23
  placement: { default: "top-start" },
24
- showDelay: { default: 500 }
24
+ showDelay: { default: 500 },
25
+ trigger: { default: "hover" }
25
26
  },
26
27
  emits: [
27
28
  "update:open",
29
+ "update:trigger",
28
30
  "open",
29
31
  "close"
30
32
  ],
@@ -69,6 +71,7 @@ var UiTooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
69
71
  const emitEvent = emit;
70
72
  emitEvent(name, detail);
71
73
  if (detail !== null && typeof detail === "object" && "open" in detail) emitEvent("update:open", detail["open"]);
74
+ if (detail !== null && typeof detail === "object" && "trigger" in detail) emitEvent("update:trigger", detail["trigger"]);
72
75
  return root.value?.dispatchEvent(new CustomEvent(name, {
73
76
  bubbles: true,
74
77
  composed: true,
@@ -157,6 +160,6 @@ var UiTooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
157
160
  }), [createElementVNode("div", _hoisted_2, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 16, _hoisted_1);
158
161
  };
159
162
  }
160
- }), [["__scopeId", "data-v-3099b119"]]);
163
+ }), [["__scopeId", "data-v-3af2132e"]]);
161
164
  //#endregion
162
165
  export { UiTooltip_default as t };