@threadlabs/looma 0.26.4 → 0.26.5

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.
package/vue/UiButton.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { PropType } from 'vue';
2
- declare var __VLS_6: {}, __VLS_8: {}, __VLS_10: {}, __VLS_22: {}, __VLS_24: {}, __VLS_26: {}, __VLS_38: {}, __VLS_45: {};
2
+ declare var __VLS_6: {}, __VLS_8: {}, __VLS_10: {}, __VLS_22: {}, __VLS_24: {}, __VLS_26: {}, __VLS_38: {}, __VLS_40: {}, __VLS_47: {}, __VLS_49: {};
3
3
  type __VLS_Slots = {} & {
4
4
  icon?: (props: typeof __VLS_6) => any;
5
5
  } & {
@@ -15,7 +15,11 @@ type __VLS_Slots = {} & {
15
15
  } & {
16
16
  default?: (props: typeof __VLS_38) => any;
17
17
  } & {
18
- default?: (props: typeof __VLS_45) => any;
18
+ badge?: (props: typeof __VLS_40) => any;
19
+ } & {
20
+ default?: (props: typeof __VLS_47) => any;
21
+ } & {
22
+ badge?: (props: typeof __VLS_49) => any;
19
23
  };
20
24
  declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
21
25
  align: {
package/vue/UiButton.vue CHANGED
@@ -808,7 +808,8 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
808
808
  ><span v-if="checkedProps.loading || checkedProps.pending" class="spinner-wrap"><UiSpinner
809
809
  size="sm"
810
810
  /></span>
811
- <slot /></a>
811
+ <slot />
812
+ <span class="badge"><slot name="badge" /></span></a>
812
813
  <button
813
814
  v-else
814
815
  data-component="ui-button"
@@ -839,6 +840,7 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
839
840
  size="sm"
840
841
  /></span>
841
842
  <slot />
843
+ <span class="badge"><slot name="badge" /></span>
842
844
  </button>
843
845
  </template>
844
846
 
@@ -918,6 +920,21 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
918
920
  }
919
921
 
920
922
  [data-component~="ui-button"] {
923
+ /* Optional inherited action-group values keep text and icon actions under the same light.
924
+ One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
925
+ A single ambient lift avoids stacking a face gradient or another inset bevel. */
926
+ --_ui-action-start: 1px;
927
+ --_ui-action-edge: var(
928
+ --ui-action-edge,
929
+ inset var(--_ui-action-start) 1px 0 light-dark(
930
+ rgb(255 255 255 / 0.08),
931
+ rgb(255 255 255 / 0.06)
932
+ ),
933
+ inset calc(-1 * var(--_ui-action-start)) -1px 0 light-dark(rgb(0 0 0 / 0.08), rgb(0 0 0 / 0.08))
934
+ );
935
+ --_ui-action-shadow:
936
+ var(--_ui-action-edge),
937
+ 0 1px 2px light-dark(rgb(0 0 0 / 0.10), rgb(0 0 0 / 0.20));
921
938
  --_hue: var(--ui-accent);
922
939
  --_hue-hover: var(--ui-accent-hover);
923
940
  --_hue-active: var(--ui-accent-active);
@@ -938,6 +955,10 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
938
955
  color: var(--_tone-text);
939
956
  }
940
957
 
958
+ [data-component~="ui-button"]:dir(rtl) {
959
+ --_ui-action-start: -1px;
960
+ }
961
+
941
962
  [data-component~="ui-button"][data-ui-button-state~="align=start"] {
942
963
  justify-content: flex-start;
943
964
  text-align: start;
@@ -964,8 +985,8 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
964
985
  white-space: var(--ui-button-white-space, inherit);
965
986
  line-height: var(--ui-line-height-tight);
966
987
  padding: var(--ui-space-2) var(--ui-space-3);
967
- background-image: var(--ui-raised-highlight);
968
- box-shadow: var(--ui-button-shadow, var(--ui-raised));
988
+ background-image: none;
989
+ box-shadow: var(--ui-button-shadow, var(--ui-action-shadow, var(--_ui-action-shadow)));
969
990
  cursor: pointer;
970
991
  transition:
971
992
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
@@ -986,6 +1007,22 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
986
1007
  vertical-align: middle;
987
1008
  }
988
1009
 
1010
+ /* A count is an adornment, not another line of label text. Keep the standard control height
1011
+ with enough inset for a 24px mark; large content can still grow the button naturally. */
1012
+ [data-component~="ui-button"]:not([variant="link"]):has(.badge:not(:empty)) {
1013
+ padding-block: var(--ui-space-0-5);
1014
+ }
1015
+
1016
+ .badge {
1017
+ display: inline-flex;
1018
+ align-items: center;
1019
+ flex: none;
1020
+ }
1021
+
1022
+ .badge:empty {
1023
+ display: none;
1024
+ }
1025
+
989
1026
  @supports (text-box-trim: trim-both) {
990
1027
  [data-component~="ui-button"] {
991
1028
  text-box-trim: trim-both;
@@ -1059,6 +1096,15 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
1059
1096
  background-color: var(--ui-button-hover-surface, oklch(from var(--_tone) l c h / 12%));
1060
1097
  }
1061
1098
 
1099
+ /* A neutral card encloses content quietly; ordinary outlines keep their action-tone edge. */
1100
+ [data-component~="ui-button"][data-ui-button-state~="variant=card"][data-ui-button-state~="tone=neutral"] {
1101
+ border-color: var(--ui-button-border, var(--ui-border));
1102
+ }
1103
+
1104
+ [data-component~="ui-button"][data-ui-button-state~="variant=card"][data-ui-button-state~="tone=neutral"]:hover:not(:disabled, [aria-disabled="true"]) {
1105
+ border-color: var(--ui-button-hover-border, var(--ui-border-strong));
1106
+ }
1107
+
1062
1108
  /* Pressed reads as pressed in: the highlight goes, and the shadow moves inside. */
1063
1109
  [data-component~="ui-button"]:active:not(:disabled, [aria-disabled="true"]) {
1064
1110
  background-color: var(--ui-button-active-surface, oklch(from var(--_tone) l c h / 18%));
@@ -1071,7 +1117,7 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
1071
1117
  border-color: var(--_tone);
1072
1118
  background-color: var(--_tone);
1073
1119
  color: var(--_on-tone);
1074
- box-shadow: var(--ui-button-solid-shadow, var(--ui-raised));
1120
+ box-shadow: var(--ui-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow)));
1075
1121
  }
1076
1122
 
1077
1123
  :is([data-component~="ui-button"][data-ui-button-state~="variant=solid"], [data-component~="ui-button"][data-ui-button-state~="variant=danger"]):hover:not(:disabled, [aria-disabled="true"]) {
@@ -1159,16 +1205,20 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
1159
1205
  [data-component~="ui-button"]:focus-visible {
1160
1206
  outline: none;
1161
1207
  box-shadow:
1162
- var(--ui-button-shadow, var(--ui-raised)),
1208
+ var(--ui-button-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
1163
1209
  var(--ui-focus-halo);
1164
1210
  }
1165
1211
 
1166
1212
  [data-component~="ui-button"][data-ui-button-state~="variant=solid"]:focus-visible {
1167
1213
  box-shadow:
1168
- var(--ui-button-solid-shadow, var(--ui-raised)),
1214
+ var(--ui-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
1169
1215
  var(--ui-focus-halo);
1170
1216
  }
1171
1217
 
1218
+ :is([data-component~="ui-button"][data-ui-button-state~="variant=ghost"], [data-component~="ui-button"][data-ui-button-state~="variant=link"], [data-component~="ui-button"][data-ui-button-state~="variant=card"]):focus-visible {
1219
+ box-shadow: var(--ui-focus-halo);
1220
+ }
1221
+
1172
1222
  /* A loading action stays visually active; only an explicitly disabled action takes the
1173
1223
  neutral disabled palette. Its flat surface and muted ink make the state unambiguous. */
1174
1224
  [data-component~="ui-button"]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
@@ -474,6 +474,21 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
474
474
  }
475
475
 
476
476
  [data-component~="ui-icon-button"] {
477
+ /* Optional inherited action-group values keep text and icon actions under the same light.
478
+ One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
479
+ A single ambient lift avoids stacking a face gradient or another inset bevel. */
480
+ --_ui-action-start: 1px;
481
+ --_ui-action-edge: var(
482
+ --ui-action-edge,
483
+ inset var(--_ui-action-start) 1px 0 light-dark(
484
+ rgb(255 255 255 / 0.08),
485
+ rgb(255 255 255 / 0.06)
486
+ ),
487
+ inset calc(-1 * var(--_ui-action-start)) -1px 0 light-dark(rgb(0 0 0 / 0.08), rgb(0 0 0 / 0.08))
488
+ );
489
+ --_ui-action-shadow:
490
+ var(--_ui-action-edge),
491
+ 0 1px 2px light-dark(rgb(0 0 0 / 0.10), rgb(0 0 0 / 0.20));
477
492
  /* Hooks do not inherit, so the parts below read them from the root. */
478
493
  --_ui-icon-button-icon-size: var(--ui-icon-button-icon-size);
479
494
  --_ui-icon-button-icon-stroke-width: var(--ui-icon-button-icon-stroke-width);
@@ -482,6 +497,10 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
482
497
  color: var(--ui-text-secondary);
483
498
  }
484
499
 
500
+ [data-component~="ui-icon-button"]:dir(rtl) {
501
+ --_ui-action-start: -1px;
502
+ }
503
+
485
504
  [data-component~="ui-icon-button"][data-ui-icon-button-state~="tone=accent"] {
486
505
  --_icon-button-border: var(--ui-accent-solid);
487
506
  --_icon-button-hover-border: var(--ui-accent-hover);
@@ -670,9 +689,9 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"]::after {
670
689
  --ui-icon-button-outline-surface,
671
690
  var(--_icon-button-outline-surface, var(--ui-surface-default))
672
691
  );
673
- background-image: var(--ui-raised-highlight);
692
+ background-image: none;
674
693
  color: var(--ui-icon-button-outline-text, var(--_icon-button-text, var(--ui-text-primary)));
675
- box-shadow: var(--ui-raised);
694
+ box-shadow: var(--ui-action-shadow, var(--_ui-action-shadow));
676
695
  }
677
696
 
678
697
  [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"] {
@@ -680,12 +699,9 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"]::after {
680
699
  --ui-icon-button-solid-surface,
681
700
  var(--_icon-button-solid-surface, var(--ui-accent-solid))
682
701
  );
683
- background-image: var(--ui-raised-highlight);
702
+ background-image: none;
684
703
  color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
685
- box-shadow: var(
686
- --ui-icon-button-solid-shadow,
687
- 0 1px 2px color-mix(in srgb, var(--ui-accent-solid) 18%, transparent)
688
- );
704
+ box-shadow: var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow)));
689
705
  }
690
706
 
691
707
  [data-component~="ui-icon-button"]:hover:enabled:not([aria-disabled="true"]) {
@@ -765,6 +781,23 @@ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"]::after {
765
781
  box-shadow: var(--ui-focus-halo);
766
782
  }
767
783
 
784
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"]:focus-visible {
785
+ box-shadow:
786
+ var(--ui-action-shadow, var(--_ui-action-shadow)),
787
+ var(--ui-focus-halo);
788
+ }
789
+
790
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"]:focus-visible {
791
+ box-shadow:
792
+ var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
793
+ var(--ui-focus-halo);
794
+ }
795
+
796
+ [data-component~="ui-icon-button"]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"]):active:enabled:not([aria-disabled="true"]) {
797
+ background-image: none;
798
+ box-shadow: var(--ui-pressed);
799
+ }
800
+
768
801
  [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"]:enabled:focus-visible {
769
802
  box-shadow:
770
803
  var(--ui-pressed),
@@ -26,6 +26,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
26
26
  type: PropType<"text" | "icon" | null>;
27
27
  default: string;
28
28
  };
29
+ variant: {
30
+ type: PropType<"outline" | "subtle" | null>;
31
+ default: string;
32
+ };
29
33
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
30
34
  actionPosition: {
31
35
  type: PropType<"below" | "top-end" | null>;
@@ -43,7 +47,12 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
43
47
  type: PropType<"text" | "icon" | null>;
44
48
  default: string;
45
49
  };
50
+ variant: {
51
+ type: PropType<"outline" | "subtle" | null>;
52
+ default: string;
53
+ };
46
54
  }>> & Readonly<{}>, {
55
+ variant: "subtle" | "outline" | null;
47
56
  disabled: boolean | null;
48
57
  multiline: boolean | null;
49
58
  actionPosition: "top-end" | "below" | null;
@@ -42,6 +42,15 @@ const propValidityContract = {
42
42
  values: ['text', 'icon'],
43
43
  default: 'text',
44
44
  },
45
+ variant: {
46
+ type: { kind: 'terminal', name: 'keyword' },
47
+ required: false,
48
+ target: { attribute: 'variant' },
49
+ description:
50
+ 'outline uses the standard field edge and surface. subtle uses a quiet decorative edge and muted surface for a multiline composer. Both retain the same\n focus, invalid and disabled states, and the field inside shares the group\'s one frame.',
51
+ values: ['outline', 'subtle'],
52
+ default: 'outline',
53
+ },
45
54
  },
46
55
  } as const
47
56
  const props = defineProps({
@@ -52,12 +61,14 @@ const props = defineProps({
52
61
  disabled: { type: null as unknown as PropType<boolean | null>, default: false },
53
62
  multiline: { type: null as unknown as PropType<boolean | null>, default: false },
54
63
  prefixKind: { type: null as unknown as PropType<'text' | 'icon' | null>, default: 'text' },
64
+ variant: { type: null as unknown as PropType<'outline' | 'subtle' | null>, default: 'outline' },
55
65
  })
56
66
  const acceptedProps: Record<string, unknown> = {
57
67
  actionPosition: 'below',
58
68
  disabled: false,
59
69
  multiline: false,
60
70
  prefixKind: 'text',
71
+ variant: 'outline',
61
72
  }
62
73
  const checkedProps = computed(() => ({
63
74
  actionPosition: checkedProp<'below' | 'top-end'>(
@@ -88,6 +99,13 @@ const checkedProps = computed(() => ({
88
99
  'prefixKind',
89
100
  acceptedProps,
90
101
  ) as 'text' | 'icon',
102
+ variant: checkedProp<'outline' | 'subtle'>(
103
+ props['variant'],
104
+ { kind: 'terminal', name: 'keyword' },
105
+ false,
106
+ 'variant',
107
+ acceptedProps,
108
+ ) as 'outline' | 'subtle',
91
109
  }))
92
110
  void checkedProps.value
93
111
  watchSyncEffect(() => {
@@ -148,6 +166,9 @@ if (
148
166
  /** The values the styles' :host-state() rules test. */
149
167
  const hostState = computed(() =>
150
168
  [
169
+ checkedProps.value.variant && 'variant',
170
+ checkedProps.value.variant != null
171
+ && `variant=${encodeURIComponent(checkedProps.value.variant)}`,
151
172
  checkedProps.value.disabled && 'disabled',
152
173
  checkedProps.value.prefixKind && 'prefixKind',
153
174
  checkedProps.value.prefixKind != null
@@ -176,7 +197,7 @@ useComponentHost(() => import('../components/ui-input-group/ui-input-group.js'),
176
197
  ? (incoming[name] ?? incoming[kebab] ?? null)
177
198
  : null
178
199
  },
179
- propNames: ['actionPosition', 'disabled', 'multiline', 'prefixKind'],
200
+ propNames: ['actionPosition', 'disabled', 'multiline', 'prefixKind', 'variant'],
180
201
  propValidity: (name: string) =>
181
202
  propValidityState({ contract: propValidityContract, values: { ...props } }, name),
182
203
  })
@@ -191,6 +212,7 @@ useComponentHost(() => import('../components/ui-input-group/ui-input-group.js'),
191
212
  :data-disabled="reflectedProp('disabled', 'disabled', checkedProps.disabled, undefined, false)"
192
213
  :data-multiline="reflectedProp('multiline', 'multiline', checkedProps.multiline, undefined, false)"
193
214
  :data-prefix-kind="reflectedProp('prefixKind', 'prefix-kind', checkedProps.prefixKind, undefined, false)"
215
+ :data-variant="reflectedProp('variant', 'variant', checkedProps.variant, undefined, false)"
194
216
  :data-ui-input-group-state="hostState || undefined"
195
217
  ref="root"
196
218
  >
@@ -268,6 +290,12 @@ useComponentHost(() => import('../components/ui-input-group/ui-input-group.js'),
268
290
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
269
291
  }
270
292
 
293
+ [data-component~="ui-input-group"][data-ui-input-group-state~="variant=subtle"] {
294
+ border-color: var(--ui-border);
295
+ background: var(--ui-surface-muted);
296
+ box-shadow: none;
297
+ }
298
+
271
299
  /* The frame takes its input's size, so a small group lines up with small buttons and fields. */
272
300
  [data-component~="ui-input-group"]:has(.field [data-ui-input-state~="size=sm"]) {
273
301
  min-block-size: var(--ui-control-size-sm);
@@ -63,9 +63,10 @@ var UiBadge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
63
63
  },
64
64
  required: false,
65
65
  target: { attribute: "size" },
66
- description: "Scale. xs is compact; md is the usual text badge; lg adds room to fixed marks while retaining the usual text size. A square is 24px at xs, 32px at md and\n 40px at lg. A circle is 16px at xs, 24px at md and 32px at lg; use lg for short counts such as 30 or 99+.",
66
+ description: "Scale. xs is compact; sm keeps the usual badge geometry with compact text, fitting short counts such as 99+ inside a 24px circle. md is the usual text\n badge; lg adds room to fixed marks while retaining the usual text size. A square is 24px at xs, 32px at sm and md, and 40px at lg. A circle is 16px at xs,\n 24px at sm and md, and 32px at lg.",
67
67
  values: [
68
68
  "xs",
69
+ "sm",
69
70
  "md",
70
71
  "lg"
71
72
  ],
@@ -179,6 +180,6 @@ var UiBadge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
179
180
  }]]);
180
181
  };
181
182
  }
182
- }), [["__scopeId", "data-v-4d2f1396"]]);
183
+ }), [["__scopeId", "data-v-57826cf9"]]);
183
184
  //#endregion
184
185
  export { UiBadge_default as t };
@@ -82,7 +82,8 @@ var _hoisted_10 = {
82
82
  key: 0,
83
83
  class: "spinner-wrap"
84
84
  };
85
- var _hoisted_11 = [
85
+ var _hoisted_11 = { class: "badge" };
86
+ var _hoisted_12 = [
86
87
  "type",
87
88
  "disabled",
88
89
  "aria-disabled",
@@ -103,10 +104,11 @@ var _hoisted_11 = [
103
104
  "data-variant",
104
105
  "data-ui-button-state"
105
106
  ];
106
- var _hoisted_12 = {
107
+ var _hoisted_13 = {
107
108
  key: 0,
108
109
  class: "spinner-wrap"
109
110
  };
111
+ var _hoisted_14 = { class: "badge" };
110
112
  //#endregion
111
113
  //#region .build/vue/UiButton.vue
112
114
  var UiButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -722,7 +724,11 @@ var UiButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
722
724
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
723
725
  "data-ui-button-state": hostState.value || void 0,
724
726
  ref: "@html-next/root"
725
- }), [checkedProps.value.loading || checkedProps.value.pending ? (openBlock(), createElementBlock("span", _hoisted_10, [createVNode(UiSpinner_default, { size: "sm" })])) : createCommentVNode("v-if", true), renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_9)), [[unref(vPropValidity), {
727
+ }), [
728
+ checkedProps.value.loading || checkedProps.value.pending ? (openBlock(), createElementBlock("span", _hoisted_10, [createVNode(UiSpinner_default, { size: "sm" })])) : createCommentVNode("v-if", true),
729
+ renderSlot(_ctx.$slots, "default", {}, void 0, true),
730
+ createElementVNode("span", _hoisted_11, [renderSlot(_ctx.$slots, "badge", {}, void 0, true)])
731
+ ], 16, _hoisted_9)), [[unref(vPropValidity), {
726
732
  contract: propValidityContract,
727
733
  values: { ...props }
728
734
  }]]) : withDirectives((openBlock(), createElementBlock("button", mergeProps({
@@ -749,12 +755,16 @@ var UiButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
749
755
  "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
750
756
  "data-ui-button-state": hostState.value || void 0,
751
757
  ref: "@html-next/root"
752
- }), [checkedProps.value.loading || checkedProps.value.pending ? (openBlock(), createElementBlock("span", _hoisted_12, [createVNode(UiSpinner_default, { size: "sm" })])) : createCommentVNode("v-if", true), renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_11)), [[unref(vPropValidity), {
758
+ }), [
759
+ checkedProps.value.loading || checkedProps.value.pending ? (openBlock(), createElementBlock("span", _hoisted_13, [createVNode(UiSpinner_default, { size: "sm" })])) : createCommentVNode("v-if", true),
760
+ renderSlot(_ctx.$slots, "default", {}, void 0, true),
761
+ createElementVNode("span", _hoisted_14, [renderSlot(_ctx.$slots, "badge", {}, void 0, true)])
762
+ ], 16, _hoisted_12)), [[unref(vPropValidity), {
753
763
  contract: propValidityContract,
754
764
  values: { ...props }
755
765
  }]]);
756
766
  };
757
767
  }
758
- }), [["__scopeId", "data-v-37d5b9a2"]]);
768
+ }), [["__scopeId", "data-v-e56c4e01"]]);
759
769
  //#endregion
760
770
  export { UiButton_default as t };
@@ -369,6 +369,6 @@ var UiIconButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
369
369
  }]]);
370
370
  };
371
371
  }
372
- }), [["__scopeId", "data-v-b66a1661"]]);
372
+ }), [["__scopeId", "data-v-219fa683"]]);
373
373
  //#endregion
374
374
  export { UiIconButton_default as t };
@@ -8,6 +8,7 @@ var _hoisted_1 = [
8
8
  "data-disabled",
9
9
  "data-multiline",
10
10
  "data-prefix-kind",
11
+ "data-variant",
11
12
  "data-ui-input-group-state"
12
13
  ];
13
14
  var _hoisted_2 = { class: "affix" };
@@ -35,6 +36,10 @@ var UiInputGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
35
36
  prefixKind: {
36
37
  type: null,
37
38
  default: "text"
39
+ },
40
+ variant: {
41
+ type: null,
42
+ default: "outline"
38
43
  }
39
44
  },
40
45
  setup(__props) {
@@ -80,6 +85,17 @@ var UiInputGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
80
85
  description: "Text affixes have their own framing. An icon prefix shares the field surface and uses one compact icon-to-value gap.",
81
86
  values: ["text", "icon"],
82
87
  default: "text"
88
+ },
89
+ variant: {
90
+ type: {
91
+ kind: "terminal",
92
+ name: "keyword"
93
+ },
94
+ required: false,
95
+ target: { attribute: "variant" },
96
+ description: "outline uses the standard field edge and surface. subtle uses a quiet decorative edge and muted surface for a multiline composer. Both retain the same\n focus, invalid and disabled states, and the field inside shares the group's one frame.",
97
+ values: ["outline", "subtle"],
98
+ default: "outline"
83
99
  }
84
100
  } };
85
101
  const props = __props;
@@ -87,7 +103,8 @@ var UiInputGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
87
103
  actionPosition: "below",
88
104
  disabled: false,
89
105
  multiline: false,
90
- prefixKind: "text"
106
+ prefixKind: "text",
107
+ variant: "outline"
91
108
  };
92
109
  const checkedProps = computed(() => ({
93
110
  actionPosition: checkedProp(props["actionPosition"], {
@@ -105,7 +122,11 @@ var UiInputGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
105
122
  prefixKind: checkedProp(props["prefixKind"], {
106
123
  kind: "terminal",
107
124
  name: "keyword"
108
- }, false, "prefixKind", acceptedProps)
125
+ }, false, "prefixKind", acceptedProps),
126
+ variant: checkedProp(props["variant"], {
127
+ kind: "terminal",
128
+ name: "keyword"
129
+ }, false, "variant", acceptedProps)
109
130
  }));
110
131
  checkedProps.value;
111
132
  watchSyncEffect(() => {
@@ -135,6 +156,8 @@ var UiInputGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
135
156
  });
136
157
  /** The values the styles' :host-state() rules test. */
137
158
  const hostState = computed(() => [
159
+ checkedProps.value.variant && "variant",
160
+ checkedProps.value.variant != null && `variant=${encodeURIComponent(checkedProps.value.variant)}`,
138
161
  checkedProps.value.disabled && "disabled",
139
162
  checkedProps.value.prefixKind && "prefixKind",
140
163
  checkedProps.value.prefixKind != null && `prefixKind=${encodeURIComponent(checkedProps.value.prefixKind)}`,
@@ -160,7 +183,8 @@ var UiInputGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
160
183
  "actionPosition",
161
184
  "disabled",
162
185
  "multiline",
163
- "prefixKind"
186
+ "prefixKind",
187
+ "variant"
164
188
  ],
165
189
  propValidity: (name) => propValidityState({
166
190
  contract: propValidityContract,
@@ -173,6 +197,7 @@ var UiInputGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
173
197
  "data-disabled": reflectedProp("disabled", "disabled", checkedProps.value.disabled, void 0, false),
174
198
  "data-multiline": reflectedProp("multiline", "multiline", checkedProps.value.multiline, void 0, false),
175
199
  "data-prefix-kind": reflectedProp("prefixKind", "prefix-kind", checkedProps.value.prefixKind, void 0, false),
200
+ "data-variant": reflectedProp("variant", "variant", checkedProps.value.variant, void 0, false),
176
201
  "data-ui-input-group-state": hostState.value || void 0,
177
202
  ref_key: "root",
178
203
  ref: root
@@ -187,6 +212,6 @@ var UiInputGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
187
212
  }]]);
188
213
  };
189
214
  }
190
- }), [["__scopeId", "data-v-a7fb387e"]]);
215
+ }), [["__scopeId", "data-v-ac4d8095"]]);
191
216
  //#endregion
192
217
  export { UiInputGroup_default as t };