@shwfed/config 3.0.20 → 3.0.21
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/dist/module.json +1 -1
- package/dist/runtime/components/actions/buttons/2026-04-21/com.shwfed.actions.button.navigation/config.d.vue.ts +2 -2
- package/dist/runtime/components/actions/buttons/2026-04-21/com.shwfed.actions.button.navigation/config.vue.d.ts +2 -2
- package/dist/runtime/components/form/FormUnitRenderer.vue +8 -1
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.d.vue.ts +2 -2
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.vue.d.ts +2 -2
- package/dist/runtime/components/operations/2026-06-15/com.shwfed.operation.navigation/config.d.vue.ts +2 -2
- package/dist/runtime/components/operations/2026-06-15/com.shwfed.operation.navigation/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
- package/dist/runtime/components/ui/icon-picker/IconPicker.d.vue.ts +0 -1
- package/dist/runtime/components/ui/icon-picker/IconPicker.vue +312 -28
- package/dist/runtime/components/ui/icon-picker/IconPicker.vue.d.ts +0 -1
- package/dist/runtime/components/ui/tabs/TabsList.vue +11 -1
- package/package.json +1 -1
package/dist/module.json
CHANGED
|
@@ -5,14 +5,14 @@ type __VLS_ModelProps = {
|
|
|
5
5
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
6
|
"update:modelValue": (value: {
|
|
7
7
|
readonly type: "com.shwfed.actions.button.navigation";
|
|
8
|
-
readonly mode: "
|
|
8
|
+
readonly mode: "_self" | "_blank";
|
|
9
9
|
readonly url: string;
|
|
10
10
|
readonly compatibilityDate: "2026-04-21";
|
|
11
11
|
}) => any;
|
|
12
12
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
13
13
|
"onUpdate:modelValue"?: ((value: {
|
|
14
14
|
readonly type: "com.shwfed.actions.button.navigation";
|
|
15
|
-
readonly mode: "
|
|
15
|
+
readonly mode: "_self" | "_blank";
|
|
16
16
|
readonly url: string;
|
|
17
17
|
readonly compatibilityDate: "2026-04-21";
|
|
18
18
|
}) => any) | undefined;
|
|
@@ -5,14 +5,14 @@ type __VLS_ModelProps = {
|
|
|
5
5
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
6
|
"update:modelValue": (value: {
|
|
7
7
|
readonly type: "com.shwfed.actions.button.navigation";
|
|
8
|
-
readonly mode: "
|
|
8
|
+
readonly mode: "_self" | "_blank";
|
|
9
9
|
readonly url: string;
|
|
10
10
|
readonly compatibilityDate: "2026-04-21";
|
|
11
11
|
}) => any;
|
|
12
12
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
13
13
|
"onUpdate:modelValue"?: ((value: {
|
|
14
14
|
readonly type: "com.shwfed.actions.button.navigation";
|
|
15
|
-
readonly mode: "
|
|
15
|
+
readonly mode: "_self" | "_blank";
|
|
16
16
|
readonly url: string;
|
|
17
17
|
readonly compatibilityDate: "2026-04-21";
|
|
18
18
|
}) => any) | undefined;
|
|
@@ -137,7 +137,14 @@ const gridStyle = computed(() => {
|
|
|
137
137
|
const rendered = computed(() => {
|
|
138
138
|
const comp = compaction.value;
|
|
139
139
|
if (!comp) return [];
|
|
140
|
-
|
|
140
|
+
const ordered = placedFields.value.slice().sort((a, b) => {
|
|
141
|
+
const [[ax1, ay1]] = a.placement.area;
|
|
142
|
+
const [[bx1, by1]] = b.placement.area;
|
|
143
|
+
if (ay1 !== by1) return ay1 - by1;
|
|
144
|
+
if (ax1 !== bx1) return ax1 - bx1;
|
|
145
|
+
return 0;
|
|
146
|
+
});
|
|
147
|
+
return ordered.map((p) => ({
|
|
141
148
|
key: p.field.id,
|
|
142
149
|
style: cellStyle(p.placement, comp),
|
|
143
150
|
component: p.entry.runtime,
|
|
@@ -39,7 +39,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
39
39
|
readonly mode: "formula" | "prefill";
|
|
40
40
|
readonly expression: string;
|
|
41
41
|
} | undefined;
|
|
42
|
-
readonly maxLength?: number | undefined;
|
|
43
42
|
readonly validations?: readonly {
|
|
44
43
|
readonly message: readonly [{
|
|
45
44
|
readonly locale: "zh";
|
|
@@ -51,6 +50,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
51
50
|
readonly warning?: boolean | undefined;
|
|
52
51
|
readonly when: string;
|
|
53
52
|
}[] | undefined;
|
|
53
|
+
readonly maxLength?: number | undefined;
|
|
54
54
|
}) => any;
|
|
55
55
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
56
56
|
"onUpdate:modelValue"?: ((value: {
|
|
@@ -89,7 +89,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
89
89
|
readonly mode: "formula" | "prefill";
|
|
90
90
|
readonly expression: string;
|
|
91
91
|
} | undefined;
|
|
92
|
-
readonly maxLength?: number | undefined;
|
|
93
92
|
readonly validations?: readonly {
|
|
94
93
|
readonly message: readonly [{
|
|
95
94
|
readonly locale: "zh";
|
|
@@ -101,6 +100,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
101
100
|
readonly warning?: boolean | undefined;
|
|
102
101
|
readonly when: string;
|
|
103
102
|
}[] | undefined;
|
|
103
|
+
readonly maxLength?: number | undefined;
|
|
104
104
|
}) => any) | undefined;
|
|
105
105
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
106
106
|
declare const _default: typeof __VLS_export;
|
|
@@ -39,7 +39,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
39
39
|
readonly mode: "formula" | "prefill";
|
|
40
40
|
readonly expression: string;
|
|
41
41
|
} | undefined;
|
|
42
|
-
readonly maxLength?: number | undefined;
|
|
43
42
|
readonly validations?: readonly {
|
|
44
43
|
readonly message: readonly [{
|
|
45
44
|
readonly locale: "zh";
|
|
@@ -51,6 +50,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
51
50
|
readonly warning?: boolean | undefined;
|
|
52
51
|
readonly when: string;
|
|
53
52
|
}[] | undefined;
|
|
53
|
+
readonly maxLength?: number | undefined;
|
|
54
54
|
}) => any;
|
|
55
55
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
56
56
|
"onUpdate:modelValue"?: ((value: {
|
|
@@ -89,7 +89,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
89
89
|
readonly mode: "formula" | "prefill";
|
|
90
90
|
readonly expression: string;
|
|
91
91
|
} | undefined;
|
|
92
|
-
readonly maxLength?: number | undefined;
|
|
93
92
|
readonly validations?: readonly {
|
|
94
93
|
readonly message: readonly [{
|
|
95
94
|
readonly locale: "zh";
|
|
@@ -101,6 +100,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
101
100
|
readonly warning?: boolean | undefined;
|
|
102
101
|
readonly when: string;
|
|
103
102
|
}[] | undefined;
|
|
103
|
+
readonly maxLength?: number | undefined;
|
|
104
104
|
}) => any) | undefined;
|
|
105
105
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
106
106
|
declare const _default: typeof __VLS_export;
|
|
@@ -4,12 +4,12 @@ type __VLS_ModelProps = {
|
|
|
4
4
|
};
|
|
5
5
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
6
|
"update:modelValue": (value: {
|
|
7
|
-
readonly mode: "
|
|
7
|
+
readonly mode: "_self" | "_blank";
|
|
8
8
|
readonly url: string;
|
|
9
9
|
}) => any;
|
|
10
10
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
11
11
|
"onUpdate:modelValue"?: ((value: {
|
|
12
|
-
readonly mode: "
|
|
12
|
+
readonly mode: "_self" | "_blank";
|
|
13
13
|
readonly url: string;
|
|
14
14
|
}) => any) | undefined;
|
|
15
15
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -4,12 +4,12 @@ type __VLS_ModelProps = {
|
|
|
4
4
|
};
|
|
5
5
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
6
|
"update:modelValue": (value: {
|
|
7
|
-
readonly mode: "
|
|
7
|
+
readonly mode: "_self" | "_blank";
|
|
8
8
|
readonly url: string;
|
|
9
9
|
}) => any;
|
|
10
10
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
11
11
|
"onUpdate:modelValue"?: ((value: {
|
|
12
|
-
readonly mode: "
|
|
12
|
+
readonly mode: "_self" | "_blank";
|
|
13
13
|
readonly url: string;
|
|
14
14
|
}) => any) | undefined;
|
|
15
15
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -44,7 +44,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
44
44
|
readonly mode: "formula" | "prefill";
|
|
45
45
|
readonly expression: string;
|
|
46
46
|
} | undefined;
|
|
47
|
-
readonly enableSorting?: boolean | undefined;
|
|
48
47
|
readonly nodeKey: string;
|
|
49
48
|
readonly nodeChildren: string;
|
|
50
49
|
readonly nodeLabel: readonly [{
|
|
@@ -54,6 +53,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
54
53
|
readonly locale: "en" | "ja" | "ko";
|
|
55
54
|
readonly message: string;
|
|
56
55
|
}[]];
|
|
56
|
+
readonly enableSorting?: boolean | undefined;
|
|
57
57
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
58
58
|
readonly nodeTooltip?: readonly [{
|
|
59
59
|
readonly locale: "zh";
|
|
@@ -108,7 +108,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
108
108
|
readonly mode: "formula" | "prefill";
|
|
109
109
|
readonly expression: string;
|
|
110
110
|
} | undefined;
|
|
111
|
-
readonly enableSorting?: boolean | undefined;
|
|
112
111
|
readonly nodeKey: string;
|
|
113
112
|
readonly nodeChildren: string;
|
|
114
113
|
readonly nodeLabel: readonly [{
|
|
@@ -118,6 +117,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
118
117
|
readonly locale: "en" | "ja" | "ko";
|
|
119
118
|
readonly message: string;
|
|
120
119
|
}[]];
|
|
120
|
+
readonly enableSorting?: boolean | undefined;
|
|
121
121
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
122
122
|
readonly nodeTooltip?: readonly [{
|
|
123
123
|
readonly locale: "zh";
|
|
@@ -44,7 +44,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
44
44
|
readonly mode: "formula" | "prefill";
|
|
45
45
|
readonly expression: string;
|
|
46
46
|
} | undefined;
|
|
47
|
-
readonly enableSorting?: boolean | undefined;
|
|
48
47
|
readonly nodeKey: string;
|
|
49
48
|
readonly nodeChildren: string;
|
|
50
49
|
readonly nodeLabel: readonly [{
|
|
@@ -54,6 +53,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
54
53
|
readonly locale: "en" | "ja" | "ko";
|
|
55
54
|
readonly message: string;
|
|
56
55
|
}[]];
|
|
56
|
+
readonly enableSorting?: boolean | undefined;
|
|
57
57
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
58
58
|
readonly nodeTooltip?: readonly [{
|
|
59
59
|
readonly locale: "zh";
|
|
@@ -108,7 +108,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
108
108
|
readonly mode: "formula" | "prefill";
|
|
109
109
|
readonly expression: string;
|
|
110
110
|
} | undefined;
|
|
111
|
-
readonly enableSorting?: boolean | undefined;
|
|
112
111
|
readonly nodeKey: string;
|
|
113
112
|
readonly nodeChildren: string;
|
|
114
113
|
readonly nodeLabel: readonly [{
|
|
@@ -118,6 +117,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
118
117
|
readonly locale: "en" | "ja" | "ko";
|
|
119
118
|
readonly message: string;
|
|
120
119
|
}[]];
|
|
120
|
+
readonly enableSorting?: boolean | undefined;
|
|
121
121
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
122
122
|
readonly nodeTooltip?: readonly [{
|
|
123
123
|
readonly locale: "zh";
|
|
@@ -44,7 +44,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
44
44
|
readonly mode: "formula" | "prefill";
|
|
45
45
|
readonly expression: string;
|
|
46
46
|
} | undefined;
|
|
47
|
-
readonly enableSorting?: boolean | undefined;
|
|
48
47
|
readonly nodeKey: string;
|
|
49
48
|
readonly nodeChildren: string;
|
|
50
49
|
readonly nodeLabel: readonly [{
|
|
@@ -54,6 +53,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
54
53
|
readonly locale: "en" | "ja" | "ko";
|
|
55
54
|
readonly message: string;
|
|
56
55
|
}[]];
|
|
56
|
+
readonly enableSorting?: boolean | undefined;
|
|
57
57
|
readonly nodeTooltip?: readonly [{
|
|
58
58
|
readonly locale: "zh";
|
|
59
59
|
readonly message: string;
|
|
@@ -107,7 +107,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
107
107
|
readonly mode: "formula" | "prefill";
|
|
108
108
|
readonly expression: string;
|
|
109
109
|
} | undefined;
|
|
110
|
-
readonly enableSorting?: boolean | undefined;
|
|
111
110
|
readonly nodeKey: string;
|
|
112
111
|
readonly nodeChildren: string;
|
|
113
112
|
readonly nodeLabel: readonly [{
|
|
@@ -117,6 +116,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
117
116
|
readonly locale: "en" | "ja" | "ko";
|
|
118
117
|
readonly message: string;
|
|
119
118
|
}[]];
|
|
119
|
+
readonly enableSorting?: boolean | undefined;
|
|
120
120
|
readonly nodeTooltip?: readonly [{
|
|
121
121
|
readonly locale: "zh";
|
|
122
122
|
readonly message: string;
|
|
@@ -44,7 +44,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
44
44
|
readonly mode: "formula" | "prefill";
|
|
45
45
|
readonly expression: string;
|
|
46
46
|
} | undefined;
|
|
47
|
-
readonly enableSorting?: boolean | undefined;
|
|
48
47
|
readonly nodeKey: string;
|
|
49
48
|
readonly nodeChildren: string;
|
|
50
49
|
readonly nodeLabel: readonly [{
|
|
@@ -54,6 +53,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
54
53
|
readonly locale: "en" | "ja" | "ko";
|
|
55
54
|
readonly message: string;
|
|
56
55
|
}[]];
|
|
56
|
+
readonly enableSorting?: boolean | undefined;
|
|
57
57
|
readonly nodeTooltip?: readonly [{
|
|
58
58
|
readonly locale: "zh";
|
|
59
59
|
readonly message: string;
|
|
@@ -107,7 +107,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
107
107
|
readonly mode: "formula" | "prefill";
|
|
108
108
|
readonly expression: string;
|
|
109
109
|
} | undefined;
|
|
110
|
-
readonly enableSorting?: boolean | undefined;
|
|
111
110
|
readonly nodeKey: string;
|
|
112
111
|
readonly nodeChildren: string;
|
|
113
112
|
readonly nodeLabel: readonly [{
|
|
@@ -117,6 +116,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
117
116
|
readonly locale: "en" | "ja" | "ko";
|
|
118
117
|
readonly message: string;
|
|
119
118
|
}[]];
|
|
119
|
+
readonly enableSorting?: boolean | undefined;
|
|
120
120
|
readonly nodeTooltip?: readonly [{
|
|
121
121
|
readonly locale: "zh";
|
|
122
122
|
readonly message: string;
|
|
@@ -45,7 +45,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
45
45
|
readonly mode: "formula" | "prefill";
|
|
46
46
|
readonly expression: string;
|
|
47
47
|
} | undefined;
|
|
48
|
-
readonly enableSorting?: boolean | undefined;
|
|
49
48
|
readonly nodeKey: string;
|
|
50
49
|
readonly nodeChildren: string;
|
|
51
50
|
readonly nodeLabel: readonly [{
|
|
@@ -55,6 +54,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
55
54
|
readonly locale: "en" | "ja" | "ko";
|
|
56
55
|
readonly message: string;
|
|
57
56
|
}[]];
|
|
57
|
+
readonly enableSorting?: boolean | undefined;
|
|
58
58
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
59
59
|
readonly nodeTooltip?: readonly [{
|
|
60
60
|
readonly locale: "zh";
|
|
@@ -110,7 +110,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
110
110
|
readonly mode: "formula" | "prefill";
|
|
111
111
|
readonly expression: string;
|
|
112
112
|
} | undefined;
|
|
113
|
-
readonly enableSorting?: boolean | undefined;
|
|
114
113
|
readonly nodeKey: string;
|
|
115
114
|
readonly nodeChildren: string;
|
|
116
115
|
readonly nodeLabel: readonly [{
|
|
@@ -120,6 +119,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
120
119
|
readonly locale: "en" | "ja" | "ko";
|
|
121
120
|
readonly message: string;
|
|
122
121
|
}[]];
|
|
122
|
+
readonly enableSorting?: boolean | undefined;
|
|
123
123
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
124
124
|
readonly nodeTooltip?: readonly [{
|
|
125
125
|
readonly locale: "zh";
|
|
@@ -45,7 +45,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
45
45
|
readonly mode: "formula" | "prefill";
|
|
46
46
|
readonly expression: string;
|
|
47
47
|
} | undefined;
|
|
48
|
-
readonly enableSorting?: boolean | undefined;
|
|
49
48
|
readonly nodeKey: string;
|
|
50
49
|
readonly nodeChildren: string;
|
|
51
50
|
readonly nodeLabel: readonly [{
|
|
@@ -55,6 +54,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
55
54
|
readonly locale: "en" | "ja" | "ko";
|
|
56
55
|
readonly message: string;
|
|
57
56
|
}[]];
|
|
57
|
+
readonly enableSorting?: boolean | undefined;
|
|
58
58
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
59
59
|
readonly nodeTooltip?: readonly [{
|
|
60
60
|
readonly locale: "zh";
|
|
@@ -110,7 +110,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
110
110
|
readonly mode: "formula" | "prefill";
|
|
111
111
|
readonly expression: string;
|
|
112
112
|
} | undefined;
|
|
113
|
-
readonly enableSorting?: boolean | undefined;
|
|
114
113
|
readonly nodeKey: string;
|
|
115
114
|
readonly nodeChildren: string;
|
|
116
115
|
readonly nodeLabel: readonly [{
|
|
@@ -120,6 +119,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
120
119
|
readonly locale: "en" | "ja" | "ko";
|
|
121
120
|
readonly message: string;
|
|
122
121
|
}[]];
|
|
122
|
+
readonly enableSorting?: boolean | undefined;
|
|
123
123
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
124
124
|
readonly nodeTooltip?: readonly [{
|
|
125
125
|
readonly locale: "zh";
|
|
@@ -45,7 +45,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
45
45
|
readonly mode: "formula" | "prefill";
|
|
46
46
|
readonly expression: string;
|
|
47
47
|
} | undefined;
|
|
48
|
-
readonly enableSorting?: boolean | undefined;
|
|
49
48
|
readonly nodeKey: string;
|
|
50
49
|
readonly nodeChildren: string;
|
|
51
50
|
readonly nodeLabel: readonly [{
|
|
@@ -55,6 +54,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
55
54
|
readonly locale: "en" | "ja" | "ko";
|
|
56
55
|
readonly message: string;
|
|
57
56
|
}[]];
|
|
57
|
+
readonly enableSorting?: boolean | undefined;
|
|
58
58
|
readonly nodeTooltip?: readonly [{
|
|
59
59
|
readonly locale: "zh";
|
|
60
60
|
readonly message: string;
|
|
@@ -109,7 +109,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
109
109
|
readonly mode: "formula" | "prefill";
|
|
110
110
|
readonly expression: string;
|
|
111
111
|
} | undefined;
|
|
112
|
-
readonly enableSorting?: boolean | undefined;
|
|
113
112
|
readonly nodeKey: string;
|
|
114
113
|
readonly nodeChildren: string;
|
|
115
114
|
readonly nodeLabel: readonly [{
|
|
@@ -119,6 +118,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
119
118
|
readonly locale: "en" | "ja" | "ko";
|
|
120
119
|
readonly message: string;
|
|
121
120
|
}[]];
|
|
121
|
+
readonly enableSorting?: boolean | undefined;
|
|
122
122
|
readonly nodeTooltip?: readonly [{
|
|
123
123
|
readonly locale: "zh";
|
|
124
124
|
readonly message: string;
|
|
@@ -45,7 +45,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
45
45
|
readonly mode: "formula" | "prefill";
|
|
46
46
|
readonly expression: string;
|
|
47
47
|
} | undefined;
|
|
48
|
-
readonly enableSorting?: boolean | undefined;
|
|
49
48
|
readonly nodeKey: string;
|
|
50
49
|
readonly nodeChildren: string;
|
|
51
50
|
readonly nodeLabel: readonly [{
|
|
@@ -55,6 +54,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
55
54
|
readonly locale: "en" | "ja" | "ko";
|
|
56
55
|
readonly message: string;
|
|
57
56
|
}[]];
|
|
57
|
+
readonly enableSorting?: boolean | undefined;
|
|
58
58
|
readonly nodeTooltip?: readonly [{
|
|
59
59
|
readonly locale: "zh";
|
|
60
60
|
readonly message: string;
|
|
@@ -109,7 +109,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
109
109
|
readonly mode: "formula" | "prefill";
|
|
110
110
|
readonly expression: string;
|
|
111
111
|
} | undefined;
|
|
112
|
-
readonly enableSorting?: boolean | undefined;
|
|
113
112
|
readonly nodeKey: string;
|
|
114
113
|
readonly nodeChildren: string;
|
|
115
114
|
readonly nodeLabel: readonly [{
|
|
@@ -119,6 +118,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
119
118
|
readonly locale: "en" | "ja" | "ko";
|
|
120
119
|
readonly message: string;
|
|
121
120
|
}[]];
|
|
121
|
+
readonly enableSorting?: boolean | undefined;
|
|
122
122
|
readonly nodeTooltip?: readonly [{
|
|
123
123
|
readonly locale: "zh";
|
|
124
124
|
readonly message: string;
|
|
@@ -46,10 +46,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
46
46
|
readonly mode: "formula" | "prefill";
|
|
47
47
|
readonly expression: string;
|
|
48
48
|
} | undefined;
|
|
49
|
-
readonly enableSorting?: boolean | undefined;
|
|
50
49
|
readonly nodeKey: string;
|
|
51
50
|
readonly nodeChildren: string;
|
|
52
51
|
readonly nodeLabel: string;
|
|
52
|
+
readonly enableSorting?: boolean | undefined;
|
|
53
53
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
54
54
|
readonly nodeTooltip?: readonly [{
|
|
55
55
|
readonly locale: "zh";
|
|
@@ -106,10 +106,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
106
106
|
readonly mode: "formula" | "prefill";
|
|
107
107
|
readonly expression: string;
|
|
108
108
|
} | undefined;
|
|
109
|
-
readonly enableSorting?: boolean | undefined;
|
|
110
109
|
readonly nodeKey: string;
|
|
111
110
|
readonly nodeChildren: string;
|
|
112
111
|
readonly nodeLabel: string;
|
|
112
|
+
readonly enableSorting?: boolean | undefined;
|
|
113
113
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
114
114
|
readonly nodeTooltip?: readonly [{
|
|
115
115
|
readonly locale: "zh";
|
|
@@ -46,10 +46,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
46
46
|
readonly mode: "formula" | "prefill";
|
|
47
47
|
readonly expression: string;
|
|
48
48
|
} | undefined;
|
|
49
|
-
readonly enableSorting?: boolean | undefined;
|
|
50
49
|
readonly nodeKey: string;
|
|
51
50
|
readonly nodeChildren: string;
|
|
52
51
|
readonly nodeLabel: string;
|
|
52
|
+
readonly enableSorting?: boolean | undefined;
|
|
53
53
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
54
54
|
readonly nodeTooltip?: readonly [{
|
|
55
55
|
readonly locale: "zh";
|
|
@@ -106,10 +106,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
106
106
|
readonly mode: "formula" | "prefill";
|
|
107
107
|
readonly expression: string;
|
|
108
108
|
} | undefined;
|
|
109
|
-
readonly enableSorting?: boolean | undefined;
|
|
110
109
|
readonly nodeKey: string;
|
|
111
110
|
readonly nodeChildren: string;
|
|
112
111
|
readonly nodeLabel: string;
|
|
112
|
+
readonly enableSorting?: boolean | undefined;
|
|
113
113
|
readonly cascade: "independent" | "cascade-down" | "cascade-both";
|
|
114
114
|
readonly nodeTooltip?: readonly [{
|
|
115
115
|
readonly locale: "zh";
|
|
@@ -46,10 +46,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
46
46
|
readonly mode: "formula" | "prefill";
|
|
47
47
|
readonly expression: string;
|
|
48
48
|
} | undefined;
|
|
49
|
-
readonly enableSorting?: boolean | undefined;
|
|
50
49
|
readonly nodeKey: string;
|
|
51
50
|
readonly nodeChildren: string;
|
|
52
51
|
readonly nodeLabel: string;
|
|
52
|
+
readonly enableSorting?: boolean | undefined;
|
|
53
53
|
readonly nodeTooltip?: readonly [{
|
|
54
54
|
readonly locale: "zh";
|
|
55
55
|
readonly message: string;
|
|
@@ -105,10 +105,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
105
105
|
readonly mode: "formula" | "prefill";
|
|
106
106
|
readonly expression: string;
|
|
107
107
|
} | undefined;
|
|
108
|
-
readonly enableSorting?: boolean | undefined;
|
|
109
108
|
readonly nodeKey: string;
|
|
110
109
|
readonly nodeChildren: string;
|
|
111
110
|
readonly nodeLabel: string;
|
|
111
|
+
readonly enableSorting?: boolean | undefined;
|
|
112
112
|
readonly nodeTooltip?: readonly [{
|
|
113
113
|
readonly locale: "zh";
|
|
114
114
|
readonly message: string;
|
|
@@ -46,10 +46,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
46
46
|
readonly mode: "formula" | "prefill";
|
|
47
47
|
readonly expression: string;
|
|
48
48
|
} | undefined;
|
|
49
|
-
readonly enableSorting?: boolean | undefined;
|
|
50
49
|
readonly nodeKey: string;
|
|
51
50
|
readonly nodeChildren: string;
|
|
52
51
|
readonly nodeLabel: string;
|
|
52
|
+
readonly enableSorting?: boolean | undefined;
|
|
53
53
|
readonly nodeTooltip?: readonly [{
|
|
54
54
|
readonly locale: "zh";
|
|
55
55
|
readonly message: string;
|
|
@@ -105,10 +105,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
105
105
|
readonly mode: "formula" | "prefill";
|
|
106
106
|
readonly expression: string;
|
|
107
107
|
} | undefined;
|
|
108
|
-
readonly enableSorting?: boolean | undefined;
|
|
109
108
|
readonly nodeKey: string;
|
|
110
109
|
readonly nodeChildren: string;
|
|
111
110
|
readonly nodeLabel: string;
|
|
111
|
+
readonly enableSorting?: boolean | undefined;
|
|
112
112
|
readonly nodeTooltip?: readonly [{
|
|
113
113
|
readonly locale: "zh";
|
|
114
114
|
readonly message: string;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
2
|
modelValue?: string;
|
|
3
3
|
placeholder?: string;
|
|
4
|
-
browseUrl?: string;
|
|
5
4
|
};
|
|
6
5
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
7
6
|
"update:modelValue": (value: string) => any;
|
|
@@ -1,48 +1,332 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import { Icon } from "@iconify/vue";
|
|
3
|
+
import { useVirtualizer } from "@tanstack/vue-virtual";
|
|
4
|
+
import { useElementSize } from "@vueuse/core";
|
|
5
|
+
import { ScrollArea } from "reka-ui/namespaced";
|
|
6
|
+
import { computed, ref, shallowRef, useTemplateRef, watch } from "vue";
|
|
7
|
+
import { useI18n } from "vue-i18n";
|
|
8
|
+
import { Button } from "../button";
|
|
3
9
|
import {
|
|
4
10
|
InputGroup,
|
|
5
11
|
InputGroupAddon,
|
|
6
12
|
InputGroupButton,
|
|
7
13
|
InputGroupInput
|
|
8
14
|
} from "../input-group";
|
|
15
|
+
import { Popover, PopoverAnchor, PopoverContent } from "../popover";
|
|
16
|
+
import { ScrollBar } from "../scroll-area";
|
|
17
|
+
import { Tabs, TabsList, TabsTrigger } from "../tabs";
|
|
9
18
|
const props = defineProps({
|
|
10
19
|
modelValue: { type: String, required: false },
|
|
11
|
-
placeholder: { type: String, required: false }
|
|
12
|
-
browseUrl: { type: String, required: false }
|
|
20
|
+
placeholder: { type: String, required: false }
|
|
13
21
|
});
|
|
14
22
|
const emit = defineEmits(["update:modelValue"]);
|
|
15
|
-
const
|
|
23
|
+
const { t } = useI18n({
|
|
24
|
+
inheritLocale: true,
|
|
25
|
+
messages: {
|
|
26
|
+
zh: {
|
|
27
|
+
"icon-picker-placeholder": "Iconify \u56FE\u6807\u6807\u8BC6\u7B26\uFF0C\u5982 fluent:add-20-regular",
|
|
28
|
+
"icon-picker-browse": "\u6D4F\u89C8\u56FE\u6807",
|
|
29
|
+
"icon-picker-clear": "\u6E05\u7A7A",
|
|
30
|
+
"icon-picker-regular": "\u5E38\u89C4",
|
|
31
|
+
"icon-picker-filled": "\u586B\u5145",
|
|
32
|
+
"icon-picker-loading": "\u6B63\u5728\u52A0\u8F7D\u56FE\u6807\u2026",
|
|
33
|
+
"icon-picker-error": "\u56FE\u6807\u52A0\u8F7D\u5931\u8D25",
|
|
34
|
+
"icon-picker-retry": "\u91CD\u8BD5",
|
|
35
|
+
"icon-picker-empty": "\u65E0\u5339\u914D\u56FE\u6807"
|
|
36
|
+
},
|
|
37
|
+
ja: {
|
|
38
|
+
"icon-picker-placeholder": "Iconify \u30A2\u30A4\u30B3\u30F3 ID\uFF08\u4F8B\uFF1Afluent:add-20-regular\uFF09",
|
|
39
|
+
"icon-picker-browse": "\u30A2\u30A4\u30B3\u30F3\u3092\u53C2\u7167",
|
|
40
|
+
"icon-picker-clear": "\u30AF\u30EA\u30A2",
|
|
41
|
+
"icon-picker-regular": "\u30EC\u30AE\u30E5\u30E9\u30FC",
|
|
42
|
+
"icon-picker-filled": "\u30D5\u30A3\u30EB\u30C9",
|
|
43
|
+
"icon-picker-loading": "\u30A2\u30A4\u30B3\u30F3\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026",
|
|
44
|
+
"icon-picker-error": "\u30A2\u30A4\u30B3\u30F3\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
|
|
45
|
+
"icon-picker-retry": "\u518D\u8A66\u884C",
|
|
46
|
+
"icon-picker-empty": "\u4E00\u81F4\u3059\u308B\u30A2\u30A4\u30B3\u30F3\u304C\u3042\u308A\u307E\u305B\u3093"
|
|
47
|
+
},
|
|
48
|
+
en: {
|
|
49
|
+
"icon-picker-placeholder": "Iconify icon id, e.g. fluent:add-20-regular",
|
|
50
|
+
"icon-picker-browse": "Browse icons",
|
|
51
|
+
"icon-picker-clear": "Clear",
|
|
52
|
+
"icon-picker-regular": "Regular",
|
|
53
|
+
"icon-picker-filled": "Filled",
|
|
54
|
+
"icon-picker-loading": "Loading icons\u2026",
|
|
55
|
+
"icon-picker-error": "Failed to load icons",
|
|
56
|
+
"icon-picker-retry": "Retry",
|
|
57
|
+
"icon-picker-empty": "No matching icon"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
const ICONIFY_API = "https://api.iconify.design";
|
|
62
|
+
const SUFFIX = {
|
|
63
|
+
regular: "-20-regular",
|
|
64
|
+
filled: "-20-filled"
|
|
65
|
+
};
|
|
66
|
+
let stemsCache = null;
|
|
67
|
+
function loadStems() {
|
|
68
|
+
if (!stemsCache) {
|
|
69
|
+
stemsCache = fetch(`${ICONIFY_API}/collection?prefix=fluent`).then(async (response) => {
|
|
70
|
+
if (!response.ok) throw new Error(`iconify collection: HTTP ${response.status}`);
|
|
71
|
+
const body = await response.json();
|
|
72
|
+
const hidden = new Set(body.hidden ?? []);
|
|
73
|
+
const names = [
|
|
74
|
+
...body.uncategorized ?? [],
|
|
75
|
+
...Object.values(body.categories ?? {}).flat()
|
|
76
|
+
].filter((name) => !hidden.has(name));
|
|
77
|
+
const collect = (variant2) => names.filter((name) => name.endsWith(SUFFIX[variant2])).map((name) => name.slice(0, -SUFFIX[variant2].length));
|
|
78
|
+
return { regular: collect("regular"), filled: collect("filled") };
|
|
79
|
+
}).catch((error) => {
|
|
80
|
+
stemsCache = null;
|
|
81
|
+
throw error;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return stemsCache;
|
|
85
|
+
}
|
|
86
|
+
const stems = shallowRef(null);
|
|
87
|
+
const status = ref("idle");
|
|
88
|
+
async function ensureStems() {
|
|
89
|
+
if (stems.value) return;
|
|
90
|
+
status.value = "loading";
|
|
91
|
+
try {
|
|
92
|
+
stems.value = await loadStems();
|
|
93
|
+
status.value = "ready";
|
|
94
|
+
} catch {
|
|
95
|
+
status.value = "error";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const tokens = computed(() => {
|
|
99
|
+
const raw = (props.modelValue ?? "").toLowerCase();
|
|
100
|
+
const body = raw.slice(raw.indexOf(":") + 1);
|
|
101
|
+
return body.replace(/-\d+(?:-(?:regular|filled|light))?$/, "").split(/[^a-z0-9]+/).filter(Boolean);
|
|
102
|
+
});
|
|
103
|
+
function match(variant2) {
|
|
104
|
+
const all = stems.value?.[variant2] ?? [];
|
|
105
|
+
if (!tokens.value.length) return all;
|
|
106
|
+
return all.filter((stem) => tokens.value.every((token) => stem.includes(token)));
|
|
107
|
+
}
|
|
108
|
+
const matches = computed(() => ({
|
|
109
|
+
regular: match("regular"),
|
|
110
|
+
filled: match("filled")
|
|
111
|
+
}));
|
|
112
|
+
const variant = ref("regular");
|
|
113
|
+
const results = computed(() => matches.value[variant.value]);
|
|
114
|
+
const tabs = computed(() => [
|
|
115
|
+
{ value: "regular", label: t("icon-picker-regular") },
|
|
116
|
+
{ value: "filled", label: t("icon-picker-filled") }
|
|
117
|
+
]);
|
|
118
|
+
const open = ref(false);
|
|
119
|
+
const anchor = useTemplateRef("anchor");
|
|
120
|
+
const viewport = useTemplateRef("viewport");
|
|
121
|
+
const scroller = computed(() => viewport.value?.viewportElement ?? null);
|
|
122
|
+
function openPanel() {
|
|
123
|
+
if (open.value) return;
|
|
124
|
+
variant.value = (props.modelValue ?? "").endsWith(SUFFIX.filled) ? "filled" : "regular";
|
|
125
|
+
open.value = true;
|
|
126
|
+
void ensureStems();
|
|
127
|
+
}
|
|
16
128
|
function onInput(value) {
|
|
17
129
|
emit("update:modelValue", value == null ? "" : String(value));
|
|
130
|
+
openPanel();
|
|
131
|
+
}
|
|
132
|
+
function select(stem) {
|
|
133
|
+
emit("update:modelValue", `fluent:${stem}${SUFFIX[variant.value]}`);
|
|
134
|
+
open.value = false;
|
|
135
|
+
}
|
|
136
|
+
function clear() {
|
|
137
|
+
emit("update:modelValue", "");
|
|
138
|
+
openPanel();
|
|
139
|
+
}
|
|
140
|
+
function onInteractOutside(event) {
|
|
141
|
+
const target = event.detail?.originalEvent?.target;
|
|
142
|
+
if (target instanceof Node && anchor.value?.contains(target)) event.preventDefault();
|
|
18
143
|
}
|
|
144
|
+
const CELL = 36;
|
|
145
|
+
const { width: scrollerWidth } = useElementSize(scroller);
|
|
146
|
+
const columns = computed(() => Math.max(1, Math.floor(scrollerWidth.value / CELL)));
|
|
147
|
+
const rowVirtualizer = useVirtualizer(
|
|
148
|
+
computed(() => {
|
|
149
|
+
const element = scroller.value;
|
|
150
|
+
return {
|
|
151
|
+
count: Math.ceil(results.value.length / columns.value),
|
|
152
|
+
estimateSize: () => CELL,
|
|
153
|
+
getScrollElement: () => element,
|
|
154
|
+
overscan: 4
|
|
155
|
+
};
|
|
156
|
+
})
|
|
157
|
+
);
|
|
158
|
+
const rowTotalSize = computed(() => rowVirtualizer.value.getTotalSize());
|
|
159
|
+
const rowWindow = computed(() => rowVirtualizer.value.getVirtualItems());
|
|
160
|
+
function rowStems(index) {
|
|
161
|
+
return results.value.slice(index * columns.value, (index + 1) * columns.value);
|
|
162
|
+
}
|
|
163
|
+
function isSelected(stem) {
|
|
164
|
+
return props.modelValue === `fluent:${stem}${SUFFIX[variant.value]}`;
|
|
165
|
+
}
|
|
166
|
+
watch([results, variant], () => {
|
|
167
|
+
if (scroller.value) scroller.value.scrollTop = 0;
|
|
168
|
+
});
|
|
19
169
|
</script>
|
|
20
170
|
|
|
21
171
|
<template>
|
|
22
|
-
<
|
|
23
|
-
<
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
172
|
+
<Popover v-model:open="open">
|
|
173
|
+
<div ref="anchor">
|
|
174
|
+
<PopoverAnchor as-child>
|
|
175
|
+
<InputGroup>
|
|
176
|
+
<InputGroupAddon align="inline-start">
|
|
177
|
+
<Icon
|
|
178
|
+
:icon="props.modelValue || 'fluent:image-20-regular'"
|
|
179
|
+
:class="props.modelValue ? 'text-zinc-600' : 'text-zinc-300'"
|
|
180
|
+
/>
|
|
181
|
+
</InputGroupAddon>
|
|
182
|
+
<InputGroupInput
|
|
183
|
+
:model-value="props.modelValue ?? ''"
|
|
184
|
+
:placeholder="props.placeholder ?? t('icon-picker-placeholder')"
|
|
185
|
+
class="font-mono text-xs"
|
|
186
|
+
@focus="openPanel"
|
|
187
|
+
@click="openPanel"
|
|
188
|
+
@update:model-value="onInput"
|
|
189
|
+
/>
|
|
190
|
+
<InputGroupAddon align="inline-end">
|
|
191
|
+
<InputGroupButton
|
|
192
|
+
v-if="props.modelValue"
|
|
193
|
+
size="icon-xs"
|
|
194
|
+
data-slot="icon-picker-clear"
|
|
195
|
+
:aria-label="t('icon-picker-clear')"
|
|
196
|
+
tabindex="-1"
|
|
197
|
+
class="text-zinc-500 transition-opacity hover:text-zinc-700 [@media(hover:hover)]:opacity-0 group-focus-within/input-group:opacity-100 group-hover/input-group:opacity-100"
|
|
198
|
+
@mousedown.prevent
|
|
199
|
+
@click.stop="clear"
|
|
200
|
+
>
|
|
201
|
+
<Icon icon="fluent:dismiss-20-regular" />
|
|
202
|
+
</InputGroupButton>
|
|
203
|
+
<InputGroupButton
|
|
204
|
+
size="icon-xs"
|
|
205
|
+
data-slot="icon-picker-toggle"
|
|
206
|
+
:aria-label="t('icon-picker-browse')"
|
|
207
|
+
:aria-expanded="open"
|
|
208
|
+
@click="open ? open = false : openPanel()"
|
|
209
|
+
>
|
|
210
|
+
<Icon
|
|
211
|
+
icon="fluent:chevron-down-20-regular"
|
|
212
|
+
class="transition-transform duration-150"
|
|
213
|
+
:class="open && 'rotate-180'"
|
|
214
|
+
/>
|
|
215
|
+
</InputGroupButton>
|
|
216
|
+
</InputGroupAddon>
|
|
217
|
+
</InputGroup>
|
|
218
|
+
</PopoverAnchor>
|
|
219
|
+
</div>
|
|
220
|
+
|
|
221
|
+
<PopoverContent
|
|
222
|
+
align="start"
|
|
223
|
+
class="w-(--reka-popover-trigger-width) min-w-72 p-0"
|
|
224
|
+
@open-auto-focus="(event) => event.preventDefault()"
|
|
225
|
+
@interact-outside="onInteractOutside"
|
|
226
|
+
>
|
|
227
|
+
<Tabs
|
|
228
|
+
v-model="variant"
|
|
229
|
+
class="gap-0"
|
|
43
230
|
>
|
|
44
|
-
<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
231
|
+
<TabsList class="px-3">
|
|
232
|
+
<TabsTrigger
|
|
233
|
+
v-for="tab in tabs"
|
|
234
|
+
:key="tab.value"
|
|
235
|
+
:value="tab.value"
|
|
236
|
+
class="h-9 px-4 text-xs"
|
|
237
|
+
>
|
|
238
|
+
{{ tab.label }}
|
|
239
|
+
<span class="text-[0.625rem] text-zinc-400 tabular-nums">
|
|
240
|
+
{{ matches[tab.value].length }}
|
|
241
|
+
</span>
|
|
242
|
+
</TabsTrigger>
|
|
243
|
+
</TabsList>
|
|
244
|
+
|
|
245
|
+
<!-- Only the grid scrolls: the placeholder states have nothing to
|
|
246
|
+
scroll, and `h-full` wouldn't resolve for them inside the viewport's
|
|
247
|
+
`display: table` content wrapper anyway. -->
|
|
248
|
+
<section
|
|
249
|
+
v-if="status === 'loading' || status === 'idle'"
|
|
250
|
+
class="h-64 flex items-center justify-center gap-2 text-sm text-zinc-500 select-none"
|
|
251
|
+
>
|
|
252
|
+
<Icon
|
|
253
|
+
icon="fluent:spinner-ios-20-regular"
|
|
254
|
+
class="animate-spin"
|
|
255
|
+
/>
|
|
256
|
+
{{ t("icon-picker-loading") }}
|
|
257
|
+
</section>
|
|
258
|
+
|
|
259
|
+
<section
|
|
260
|
+
v-else-if="status === 'error'"
|
|
261
|
+
class="h-64 flex flex-col items-center justify-center gap-2 text-sm text-zinc-500 select-none"
|
|
262
|
+
>
|
|
263
|
+
<Icon
|
|
264
|
+
icon="fluent:plug-disconnected-20-regular"
|
|
265
|
+
class="text-2xl! text-zinc-400"
|
|
266
|
+
/>
|
|
267
|
+
{{ t("icon-picker-error") }}
|
|
268
|
+
<Button
|
|
269
|
+
size="sm"
|
|
270
|
+
@click="ensureStems"
|
|
271
|
+
>
|
|
272
|
+
{{ t("icon-picker-retry") }}
|
|
273
|
+
</Button>
|
|
274
|
+
</section>
|
|
275
|
+
|
|
276
|
+
<section
|
|
277
|
+
v-else-if="!results.length"
|
|
278
|
+
class="h-64 flex flex-col items-center justify-center gap-2 text-sm text-zinc-500 select-none"
|
|
279
|
+
>
|
|
280
|
+
<Icon
|
|
281
|
+
icon="fluent:search-20-regular"
|
|
282
|
+
class="text-2xl! text-zinc-400"
|
|
283
|
+
/>
|
|
284
|
+
{{ t("icon-picker-empty") }}
|
|
285
|
+
</section>
|
|
286
|
+
|
|
287
|
+
<ScrollArea.Root
|
|
288
|
+
v-else
|
|
289
|
+
class="relative h-64"
|
|
290
|
+
>
|
|
291
|
+
<ScrollArea.Viewport
|
|
292
|
+
ref="viewport"
|
|
293
|
+
class="size-full overscroll-contain p-2 outline-none"
|
|
294
|
+
>
|
|
295
|
+
<div
|
|
296
|
+
class="relative w-full"
|
|
297
|
+
:style="{ height: `${rowTotalSize}px` }"
|
|
298
|
+
>
|
|
299
|
+
<div
|
|
300
|
+
v-for="row in rowWindow"
|
|
301
|
+
:key="String(row.key)"
|
|
302
|
+
class="absolute top-0 left-0 grid w-full"
|
|
303
|
+
:style="{
|
|
304
|
+
height: `${row.size}px`,
|
|
305
|
+
transform: `translateY(${row.start}px)`,
|
|
306
|
+
gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`
|
|
307
|
+
}"
|
|
308
|
+
>
|
|
309
|
+
<button
|
|
310
|
+
v-for="stem in rowStems(row.index)"
|
|
311
|
+
:key="stem"
|
|
312
|
+
type="button"
|
|
313
|
+
:title="`fluent:${stem}${SUFFIX[variant]}`"
|
|
314
|
+
class="flex items-center justify-center rounded text-zinc-600 transition-colors duration-150 hover:bg-zinc-100 hover:text-zinc-900"
|
|
315
|
+
:class="isSelected(stem) && 'bg-zinc-100 text-(--primary)'"
|
|
316
|
+
@click="select(stem)"
|
|
317
|
+
>
|
|
318
|
+
<Icon
|
|
319
|
+
:icon="`fluent:${stem}${SUFFIX[variant]}`"
|
|
320
|
+
class="text-xl!"
|
|
321
|
+
/>
|
|
322
|
+
</button>
|
|
323
|
+
</div>
|
|
324
|
+
</div>
|
|
325
|
+
</ScrollArea.Viewport>
|
|
326
|
+
<ScrollBar orientation="vertical" />
|
|
327
|
+
<ScrollArea.Corner />
|
|
328
|
+
</ScrollArea.Root>
|
|
329
|
+
</Tabs>
|
|
330
|
+
</PopoverContent>
|
|
331
|
+
</Popover>
|
|
48
332
|
</template>
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
2
|
modelValue?: string;
|
|
3
3
|
placeholder?: string;
|
|
4
|
-
browseUrl?: string;
|
|
5
4
|
};
|
|
6
5
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
7
6
|
"update:modelValue": (value: string) => any;
|
|
@@ -13,6 +13,7 @@ const delegatedProps = reactiveOmit(props, "class");
|
|
|
13
13
|
const barEl = ref(null);
|
|
14
14
|
const barStyle = shallowRef({});
|
|
15
15
|
const ready = ref(false);
|
|
16
|
+
const animated = ref(false);
|
|
16
17
|
let mo = null;
|
|
17
18
|
let ro = null;
|
|
18
19
|
function measure() {
|
|
@@ -29,7 +30,15 @@ function measure() {
|
|
|
29
30
|
width: `${rect.width}px`,
|
|
30
31
|
transform: `translateX(${rect.left - rootRect.left}px)`
|
|
31
32
|
};
|
|
33
|
+
if (ready.value) return;
|
|
32
34
|
ready.value = true;
|
|
35
|
+
if (typeof requestAnimationFrame === "undefined") {
|
|
36
|
+
animated.value = true;
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
40
|
+
animated.value = true;
|
|
41
|
+
}));
|
|
33
42
|
}
|
|
34
43
|
function schedule() {
|
|
35
44
|
nextTick(measure);
|
|
@@ -79,7 +88,8 @@ onBeforeUnmount(() => {
|
|
|
79
88
|
ref="barEl"
|
|
80
89
|
data-slot="tabs-active-bar"
|
|
81
90
|
aria-hidden="true"
|
|
82
|
-
class="pointer-events-none absolute -bottom-px left-0 z-1 h-0.5 bg-(--primary)
|
|
91
|
+
class="pointer-events-none absolute -bottom-px left-0 z-1 h-0.5 bg-(--primary)"
|
|
92
|
+
:class="animated && 'transition-[width,transform] duration-300 ease-[cubic-bezier(0.645,0.045,0.355,1)]'"
|
|
83
93
|
:style="{ ...barStyle, visibility: ready ? 'visible' : 'hidden' }"
|
|
84
94
|
/>
|
|
85
95
|
</TabsList>
|