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
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.15.0"
6
6
  },
7
- "version": "2.1.19",
7
+ "version": "2.2.0",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "0.8.4",
10
10
  "unbuild": "2.0.0"
@@ -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: number | null;
46
- diff?: number | null | undefined;
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: number | null];
126
- "value-change": [after: number | null, before: number | null];
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("value-change", v.id, before);
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: number | null) => {
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: number | null;
44
- diff?: number | null | undefined;
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: number | null];
122
- "value-change": [after: number | null, before: number | null];
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("value-change", v.id, before);
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: number | null) => {
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 #selected-option="{ text, imgUrl, deleted, hidden }">
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: number;
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: number | null;
4
- } & Omit<SelectItem, "id">;
5
- export declare const useDisplayList: (arg: {
6
- list: SelectItem[];
7
- id: number | null;
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>[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-hs-ui",
3
- "version": "2.1.19",
3
+ "version": "2.2.0",
4
4
  "description": "My new Nuxt module",
5
5
  "repository": "https://github.com/hare-systems-ryo/nuxt-hs-ui",
6
6
  "license": "MIT",