nuxt-hs-ui 2.1.19 → 2.2.0
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
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
1
|
+
<script setup lang="ts" generic="IdType extends string|number">
|
|
2
2
|
/* ----------------------------------------------------------------------------
|
|
3
3
|
// src\runtime\components\form\radio.vue
|
|
4
4
|
// ----------------------------------------------------------------------------
|
|
@@ -31,7 +31,7 @@ const tx = multiLang.tx;
|
|
|
31
31
|
type Props = {
|
|
32
32
|
// ----------------------------------------------------------------------------
|
|
33
33
|
// Input 種類別
|
|
34
|
-
list: SelectItem[];
|
|
34
|
+
list: SelectItem<IdType>[];
|
|
35
35
|
order?: boolean;
|
|
36
36
|
image?: boolean;
|
|
37
37
|
loading?: boolean;
|
|
@@ -42,8 +42,8 @@ type Props = {
|
|
|
42
42
|
classImgTag?: ClassType;
|
|
43
43
|
nullable?: boolean;
|
|
44
44
|
// ----------------------------------------------------------------------------
|
|
45
|
-
data:
|
|
46
|
-
diff?:
|
|
45
|
+
data: IdType | null;
|
|
46
|
+
diff?: IdType | null | undefined;
|
|
47
47
|
tabindex?: string | undefined;
|
|
48
48
|
// ----------------------------------------------------------------------------
|
|
49
49
|
class?: ClassType;
|
|
@@ -115,6 +115,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
115
115
|
// 設定
|
|
116
116
|
size: "m",
|
|
117
117
|
});
|
|
118
|
+
type EmitIdType = IdType extends string ? string : number;
|
|
118
119
|
// ----------------------------------------------------------------------------
|
|
119
120
|
// [ emit ]
|
|
120
121
|
type Emits = {
|
|
@@ -122,8 +123,8 @@ type Emits = {
|
|
|
122
123
|
focus: [elm: HTMLElement];
|
|
123
124
|
blur: [elm: HTMLElement];
|
|
124
125
|
// ----------------------------
|
|
125
|
-
"update:data": [value:
|
|
126
|
-
"value-change": [after:
|
|
126
|
+
"update:data": [value: EmitIdType | null];
|
|
127
|
+
"value-change": [after: EmitIdType | null, before: EmitIdType | null];
|
|
127
128
|
// ----------------------------
|
|
128
129
|
keydown: [event: KeyboardEvent];
|
|
129
130
|
keyup: [event: KeyboardEvent];
|
|
@@ -150,22 +151,27 @@ const isChangeData = computed(() => {
|
|
|
150
151
|
// [ ref ]
|
|
151
152
|
|
|
152
153
|
// ----------------------------------------------------------------------------
|
|
153
|
-
const displayData = ref<DisplaySelectItem | null>(null);
|
|
154
|
+
const displayData = ref<DisplaySelectItem<IdType> | null>(null);
|
|
154
155
|
watch(displayData, (v) => {
|
|
155
156
|
const before = props.data;
|
|
156
157
|
if (v === null) {
|
|
157
158
|
emit("update:data", null);
|
|
158
|
-
emit("value-change", null, before);
|
|
159
|
+
emit("value-change", null, before as any as EmitIdType | null);
|
|
159
160
|
return;
|
|
160
161
|
}
|
|
161
162
|
if (v.id === null) {
|
|
162
163
|
displayData.value = null;
|
|
163
164
|
return;
|
|
164
165
|
}
|
|
165
|
-
emit("update:data", v.id);
|
|
166
|
-
emit(
|
|
166
|
+
emit("update:data", v.id as any as EmitIdType | null);
|
|
167
|
+
emit(
|
|
168
|
+
"value-change",
|
|
169
|
+
v.id as any as EmitIdType | null,
|
|
170
|
+
before as any as EmitIdType | null
|
|
171
|
+
);
|
|
167
172
|
});
|
|
168
173
|
const selectedId = computed(() => {
|
|
174
|
+
console.log("selectedId", displayData.value);
|
|
169
175
|
if (displayData.value === null) {
|
|
170
176
|
return null;
|
|
171
177
|
}
|
|
@@ -190,13 +196,14 @@ const includeHidden = computed(() => {
|
|
|
190
196
|
});
|
|
191
197
|
// ----------------------------------------------------------------------------
|
|
192
198
|
/** 選択肢 */
|
|
193
|
-
interface SelectItemShow extends DisplaySelectItem {
|
|
199
|
+
interface SelectItemShow extends DisplaySelectItem<IdType> {
|
|
194
200
|
elm: HTMLElement | null;
|
|
195
201
|
activate: boolean;
|
|
202
|
+
i: number;
|
|
196
203
|
}
|
|
197
204
|
|
|
198
205
|
const displayList = computed<SelectItemShow[]>(() => {
|
|
199
|
-
return useDisplayList({
|
|
206
|
+
return useDisplayList<IdType>({
|
|
200
207
|
list: props.list,
|
|
201
208
|
id: props.data,
|
|
202
209
|
order: props.order,
|
|
@@ -205,17 +212,18 @@ const displayList = computed<SelectItemShow[]>(() => {
|
|
|
205
212
|
isShowHidden: isShowHidden.value,
|
|
206
213
|
require: props.require || !props.nullable,
|
|
207
214
|
nullText: props.nullText,
|
|
208
|
-
}).map((row) => {
|
|
215
|
+
}).map((row, index) => {
|
|
209
216
|
return {
|
|
210
217
|
...row,
|
|
211
218
|
elm: null,
|
|
212
219
|
activate: false,
|
|
220
|
+
i: index,
|
|
213
221
|
};
|
|
214
222
|
});
|
|
215
223
|
});
|
|
216
224
|
// ----------------------------------------------------------------------------
|
|
217
225
|
|
|
218
|
-
const checkData = (id:
|
|
226
|
+
const checkData = (id: IdType | null) => {
|
|
219
227
|
const ret = displayList.value.find((row) => row.id === id);
|
|
220
228
|
if (ret === undefined) {
|
|
221
229
|
// 選択肢に存在しないコード引当
|
|
@@ -426,7 +434,6 @@ const inputClass = computed(() => {
|
|
|
426
434
|
<input
|
|
427
435
|
:id="`radio${uid}-null`"
|
|
428
436
|
:ref="(e:any) => (inputElementNull = e)"
|
|
429
|
-
v-bind="(selectedId as any)"
|
|
430
437
|
type="radio"
|
|
431
438
|
:name="`radio${uid}`"
|
|
432
439
|
:tabindex="props.tabindex"
|
|
@@ -469,7 +476,6 @@ const inputClass = computed(() => {
|
|
|
469
476
|
<input
|
|
470
477
|
:id="`radio${uid}-${row.id}`"
|
|
471
478
|
:ref="(e:any) => (row.elm = e)"
|
|
472
|
-
v-bind="(selectedId as any)"
|
|
473
479
|
type="radio"
|
|
474
480
|
class=""
|
|
475
481
|
:name="`radio${uid}`"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
1
|
+
<script setup lang="ts" generic="IdType extends string|number">
|
|
2
2
|
/* ----------------------------------------------------------------------------
|
|
3
3
|
// src\runtime\components\form\select.vue
|
|
4
4
|
// ----------------------------------------------------------------------------
|
|
@@ -31,7 +31,7 @@ const tx = multiLang.tx;
|
|
|
31
31
|
type Props = {
|
|
32
32
|
// ----------------------------------------------------------------------------
|
|
33
33
|
// Input 種類別
|
|
34
|
-
list: SelectItem[];
|
|
34
|
+
list: SelectItem<IdType>[];
|
|
35
35
|
order?: boolean;
|
|
36
36
|
loading?: boolean;
|
|
37
37
|
nullText?: string;
|
|
@@ -40,8 +40,8 @@ type Props = {
|
|
|
40
40
|
classImgTag?: ClassType;
|
|
41
41
|
nullable?: boolean;
|
|
42
42
|
// ----------------------------------------------------------------------------
|
|
43
|
-
data:
|
|
44
|
-
diff?:
|
|
43
|
+
data: IdType | null;
|
|
44
|
+
diff?: IdType | null | undefined;
|
|
45
45
|
tabindex?: string | undefined;
|
|
46
46
|
// ----------------------------------------------------------------------------
|
|
47
47
|
class?: ClassType;
|
|
@@ -112,14 +112,16 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
112
112
|
size: "m",
|
|
113
113
|
});
|
|
114
114
|
// ----------------------------------------------------------------------------
|
|
115
|
+
type EmitIdType = IdType extends string ? string : number;
|
|
116
|
+
|
|
115
117
|
// [ emit ]
|
|
116
118
|
type Emits = {
|
|
117
119
|
ref: [element: HTMLElement];
|
|
118
120
|
focus: [elm: HTMLElement];
|
|
119
121
|
blur: [elm: HTMLElement];
|
|
120
122
|
// ----------------------------
|
|
121
|
-
"update:data": [value:
|
|
122
|
-
"value-change": [after:
|
|
123
|
+
"update:data": [value: EmitIdType | null];
|
|
124
|
+
"value-change": [after: EmitIdType | null, before: EmitIdType | null];
|
|
123
125
|
// ----------------------------
|
|
124
126
|
keydown: [event: KeyboardEvent];
|
|
125
127
|
keyup: [event: KeyboardEvent];
|
|
@@ -148,13 +150,13 @@ const isChangeData = computed(() => {
|
|
|
148
150
|
// [ ref ]
|
|
149
151
|
|
|
150
152
|
// ----------------------------------------------------------------------------
|
|
151
|
-
const displayData = ref<DisplaySelectItem | null>(null);
|
|
153
|
+
const displayData = ref<DisplaySelectItem<IdType> | null>(null);
|
|
152
154
|
watch(displayData, (v) => {
|
|
153
155
|
const before = props.data;
|
|
154
156
|
if (v === null) {
|
|
155
157
|
if (before === null) return;
|
|
156
158
|
emit("update:data", null);
|
|
157
|
-
emit("value-change", null, before);
|
|
159
|
+
emit("value-change", null, before as any as EmitIdType | null);
|
|
158
160
|
return;
|
|
159
161
|
}
|
|
160
162
|
if (v.id === null) {
|
|
@@ -162,8 +164,12 @@ watch(displayData, (v) => {
|
|
|
162
164
|
return;
|
|
163
165
|
}
|
|
164
166
|
if (v.id === before) return;
|
|
165
|
-
emit("update:data", v.id);
|
|
166
|
-
emit(
|
|
167
|
+
emit("update:data", v.id as any as EmitIdType | null);
|
|
168
|
+
emit(
|
|
169
|
+
"value-change",
|
|
170
|
+
v.id as any as EmitIdType | null,
|
|
171
|
+
before as any as EmitIdType | null
|
|
172
|
+
);
|
|
167
173
|
});
|
|
168
174
|
|
|
169
175
|
// ----------------------------------------------------------------------------
|
|
@@ -186,7 +192,7 @@ const includeHidden = computed(() => {
|
|
|
186
192
|
// ----------------------------------------------------------------------------
|
|
187
193
|
/** 選択肢 */
|
|
188
194
|
const displayList = computed(() => {
|
|
189
|
-
return useDisplayList({
|
|
195
|
+
return useDisplayList<IdType>({
|
|
190
196
|
list: props.list,
|
|
191
197
|
id: props.data,
|
|
192
198
|
order: props.order,
|
|
@@ -199,7 +205,7 @@ const displayList = computed(() => {
|
|
|
199
205
|
});
|
|
200
206
|
// ----------------------------------------------------------------------------
|
|
201
207
|
|
|
202
|
-
const checkData = (id:
|
|
208
|
+
const checkData = (id: IdType | null) => {
|
|
203
209
|
const ret = displayList.value.find((row) => row.id === id);
|
|
204
210
|
if (ret === undefined) {
|
|
205
211
|
// 選択肢に存在しないコード引当
|
|
@@ -327,7 +333,9 @@ const selectClose = () => {
|
|
|
327
333
|
>
|
|
328
334
|
<!-- -->
|
|
329
335
|
<!-- -->
|
|
330
|
-
<template
|
|
336
|
+
<template
|
|
337
|
+
#selected-option="{ text, imgUrl, deleted, hidden, appendIcon }"
|
|
338
|
+
>
|
|
331
339
|
<div class="flex items-baseline w-full">
|
|
332
340
|
<SelectImgIcon
|
|
333
341
|
v-if="imgUrl && props.image"
|
|
@@ -344,9 +352,15 @@ const selectClose = () => {
|
|
|
344
352
|
<div v-if="hidden" class="text-error text-[0.7em] leading-[1em]">
|
|
345
353
|
※非表示
|
|
346
354
|
</div>
|
|
355
|
+
<span v-if="appendIcon && typeof appendIcon === 'string'">
|
|
356
|
+
<i :class="appendIcon"></i>
|
|
357
|
+
</span>
|
|
358
|
+
<span v-else-if="appendIcon && Array.isArray(appendIcon)">
|
|
359
|
+
<i v-for="(c, i) in appendIcon" :key="i" :class="c"></i>
|
|
360
|
+
</span>
|
|
347
361
|
</div>
|
|
348
362
|
</template>
|
|
349
|
-
<template #option="{ text, imgUrl, deleted, hidden }">
|
|
363
|
+
<template #option="{ text, imgUrl, deleted, hidden, appendIcon }">
|
|
350
364
|
<div class="flex items-center">
|
|
351
365
|
<SelectImgIcon
|
|
352
366
|
v-if="props.image"
|
|
@@ -362,6 +376,12 @@ const selectClose = () => {
|
|
|
362
376
|
<div v-if="hidden" class="text-error text-[0.7em] leading-[1em]">
|
|
363
377
|
※非表示
|
|
364
378
|
</div>
|
|
379
|
+
<span v-if="appendIcon && typeof appendIcon === 'string'">
|
|
380
|
+
<i :class="appendIcon"></i>
|
|
381
|
+
</span>
|
|
382
|
+
<span v-else-if="appendIcon && Array.isArray(appendIcon)">
|
|
383
|
+
<i v-for="(c, i) in appendIcon" :key="i" :class="c"></i>
|
|
384
|
+
</span>
|
|
365
385
|
</div>
|
|
366
386
|
</template>
|
|
367
387
|
<template v-if="includeHidden" #list-footer>
|
|
@@ -402,9 +422,16 @@ const selectClose = () => {
|
|
|
402
422
|
.v-select > div {
|
|
403
423
|
border-width: 0 !important;
|
|
404
424
|
}
|
|
425
|
+
.v-select:not(.vs--open).vs--single.vs--searchable .vs__selected {
|
|
426
|
+
width: 100%;
|
|
427
|
+
}
|
|
428
|
+
.v-select.vs--open.vs--single.vs--searchable .vs__selected {
|
|
429
|
+
width: calc(100% - 0.5em);
|
|
430
|
+
}
|
|
405
431
|
.v-select .vs__selected {
|
|
406
432
|
margin-top: 0 !important;
|
|
407
433
|
margin-bottom: 0 !important;
|
|
434
|
+
flex: 1 1 auto;
|
|
408
435
|
}
|
|
409
436
|
.v-select .vs__selected,
|
|
410
437
|
.v-select .vs__selected-options {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { MultiLang } from "./multi-lang.js";
|
|
2
|
-
export interface SelectItem {
|
|
3
|
-
readonly id:
|
|
2
|
+
export interface SelectItem<IdType extends number | string = number> {
|
|
3
|
+
readonly id: IdType;
|
|
4
4
|
/**
|
|
5
5
|
* 多言語の場合は多言語のオブジェクトをセットする
|
|
6
6
|
*/
|
|
@@ -25,7 +25,6 @@ export interface SelectItem {
|
|
|
25
25
|
* ただし選択要素は表示する
|
|
26
26
|
*/
|
|
27
27
|
deleted?: boolean;
|
|
28
|
+
/** iタグのアイコンを追加出来る Class */
|
|
29
|
+
appendIcon?: string | string[];
|
|
28
30
|
}
|
|
29
|
-
type WithoutRequier = Partial<Omit<SelectItem, "id" | "text">>;
|
|
30
|
-
export type SelectItemOrigin = Omit<SelectItem, keyof WithoutRequier> & WithoutRequier;
|
|
31
|
-
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { SelectItem } from "./select-item.js";
|
|
2
|
-
export type DisplaySelectItem = {
|
|
3
|
-
id:
|
|
4
|
-
} & Omit<SelectItem
|
|
5
|
-
export declare const useDisplayList: (arg: {
|
|
6
|
-
list: SelectItem[];
|
|
7
|
-
id:
|
|
2
|
+
export type DisplaySelectItem<IdType extends string | number> = {
|
|
3
|
+
id: IdType | null;
|
|
4
|
+
} & Omit<SelectItem<IdType>, "id">;
|
|
5
|
+
export declare const useDisplayList: <IdType extends string | number>(arg: {
|
|
6
|
+
list: SelectItem<IdType>[];
|
|
7
|
+
id: IdType | null;
|
|
8
8
|
order: boolean;
|
|
9
|
-
unKnownData: SelectItem | null;
|
|
9
|
+
unKnownData: SelectItem<IdType> | null;
|
|
10
10
|
unKnownSelected: boolean;
|
|
11
11
|
isShowHidden: boolean;
|
|
12
12
|
require: boolean;
|
|
13
13
|
nullText: string;
|
|
14
|
-
}) => DisplaySelectItem[];
|
|
14
|
+
}) => DisplaySelectItem<IdType>[];
|