@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/components/ui-badge/ui-badge.html +41 -4
- package/components/ui-button/ui-button.html +50 -5
- package/components/ui-icon-button/ui-icon-button.html +35 -7
- package/components/ui-input-group/ui-input-group.html +9 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/styles/ui-badge.css +40 -1
- package/styles/ui-button.css +53 -5
- package/styles/ui-icon-button.css +35 -7
- package/styles/ui-input-group.css +6 -0
- package/vanilla/UiBadge.d.ts +1 -1
- package/vanilla/UiBadge.js +1 -1
- package/vanilla/UiButton.js +47 -21
- package/vanilla/UiInputGroup.d.ts +1 -0
- package/vanilla/UiInputGroup.js +4 -4
- package/vue/UiBadge.d.ts +3 -3
- package/vue/UiBadge.vue +79 -6
- package/vue/UiButton.d.ts +6 -2
- package/vue/UiButton.vue +56 -6
- package/vue/UiIconButton.vue +40 -7
- package/vue/UiInputGroup.d.ts +9 -0
- package/vue/UiInputGroup.vue +29 -1
- package/vue/chunks/UiBadge.js +3 -2
- package/vue/chunks/UiButton.js +15 -5
- package/vue/chunks/UiIconButton.js +1 -1
- package/vue/chunks/UiInputGroup.js +29 -4
- package/vue/components.css +347 -197
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: {},
|
|
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
|
-
|
|
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
|
|
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:
|
|
968
|
-
box-shadow: var(--ui-button-shadow, var(--ui-
|
|
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-
|
|
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-
|
|
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-
|
|
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"])) {
|
package/vue/UiIconButton.vue
CHANGED
|
@@ -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:
|
|
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-
|
|
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:
|
|
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),
|
package/vue/UiInputGroup.d.ts
CHANGED
|
@@ -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;
|
package/vue/UiInputGroup.vue
CHANGED
|
@@ -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);
|
package/vue/chunks/UiBadge.js
CHANGED
|
@@ -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
|
|
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-
|
|
183
|
+
}), [["__scopeId", "data-v-57826cf9"]]);
|
|
183
184
|
//#endregion
|
|
184
185
|
export { UiBadge_default as t };
|
package/vue/chunks/UiButton.js
CHANGED
|
@@ -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
|
|
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
|
-
}), [
|
|
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
|
-
}), [
|
|
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-
|
|
768
|
+
}), [["__scopeId", "data-v-e56c4e01"]]);
|
|
759
769
|
//#endregion
|
|
760
770
|
export { UiButton_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-
|
|
215
|
+
}), [["__scopeId", "data-v-ac4d8095"]]);
|
|
191
216
|
//#endregion
|
|
192
217
|
export { UiInputGroup_default as t };
|