nuxt-hs-ui 1.0.10 → 2.0.2

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.
Files changed (112) hide show
  1. package/README.md +11 -4
  2. package/dist/module.d.mts +10 -2
  3. package/dist/module.d.ts +10 -2
  4. package/dist/module.json +5 -2
  5. package/dist/module.mjs +90 -51
  6. package/dist/runtime/assets/flatpickr-dark.css +1 -0
  7. package/dist/runtime/assets/flatpickr-month-select-style.css +1 -0
  8. package/dist/runtime/assets/tabulator-custom.css +1 -0
  9. package/dist/runtime/assets/tabulator.css +1 -0
  10. package/dist/runtime/assets/vue-select.css +1 -0
  11. package/dist/runtime/components/{hs-fc/btn/line-loading.vue → form/btn-line-loading.vue} +28 -42
  12. package/dist/runtime/components/form/btn.vue +488 -0
  13. package/dist/runtime/components/form/check-box.vue +352 -0
  14. package/dist/runtime/components/form/check-list.vue +354 -0
  15. package/dist/runtime/components/form/datepicker copy.vue +770 -0
  16. package/dist/runtime/components/form/datepicker.vue +897 -0
  17. package/dist/runtime/components/form/input-frame.vue +272 -0
  18. package/dist/runtime/components/form/radio.vue +685 -0
  19. package/dist/runtime/components/form/select-img-icon.vue +53 -0
  20. package/dist/runtime/components/form/select.vue +438 -0
  21. package/dist/runtime/components/form/text-box.vue +375 -0
  22. package/dist/runtime/components/form/textarea.vue +466 -0
  23. package/dist/runtime/components/form/value-box.vue +681 -0
  24. package/dist/runtime/components/interactive/alert.vue +113 -0
  25. package/dist/runtime/components/{hs-ui → interactive}/block-loading.vue +42 -59
  26. package/dist/runtime/components/{hs-ui/dialog/index.vue → interactive/dialog.vue} +132 -127
  27. package/dist/runtime/components/interactive/modal-bg.vue +82 -0
  28. package/dist/runtime/components/interactive/modal.vue +143 -0
  29. package/dist/runtime/components/{hs-ui/toast/index.vue → interactive/toast.vue} +76 -109
  30. package/dist/runtime/components/{hs-ui → interactive}/window-loader.vue +12 -9
  31. package/dist/runtime/components/{hs-ui → layout}/accordion.vue +21 -30
  32. package/dist/runtime/components/layout/aspect-box.vue +71 -0
  33. package/dist/runtime/components/layout/card-item.vue +193 -0
  34. package/dist/runtime/components/layout/card.vue +42 -0
  35. package/dist/runtime/components/layout/container.vue +40 -0
  36. package/dist/runtime/components/misc/breadcrumb.vue +96 -0
  37. package/dist/runtime/components/misc/tabulator.vue +187 -0
  38. package/dist/runtime/components/misc/view-name-display-target.vue +39 -0
  39. package/dist/runtime/components/misc/view-name-display.vue +90 -0
  40. package/dist/runtime/composables/use-hs-dialog.d.ts +40 -0
  41. package/dist/runtime/composables/{use-hs-ui-dialog.js → use-hs-dialog.js} +15 -10
  42. package/dist/runtime/composables/{use-hs-form-focus.d.ts → use-hs-focus.d.ts} +1 -1
  43. package/dist/runtime/composables/{use-hs-form-focus.js → use-hs-focus.js} +2 -4
  44. package/dist/runtime/composables/use-hs-misc.d.ts +22 -0
  45. package/dist/runtime/composables/use-hs-misc.js +62 -0
  46. package/dist/runtime/composables/use-hs-modal.d.ts +31 -0
  47. package/dist/runtime/{components/hs-ui/modal/use-ui-modal.js → composables/use-hs-modal.js} +18 -16
  48. package/dist/runtime/composables/use-hs-multi-lang.d.ts +14 -6
  49. package/dist/runtime/composables/use-hs-multi-lang.js +44 -11
  50. package/dist/runtime/composables/{use-hs-ui-toast.d.ts → use-hs-toast.d.ts} +3 -3
  51. package/dist/runtime/composables/{use-hs-ui-toast.js → use-hs-toast.js} +4 -5
  52. package/dist/runtime/composables/{use-hs-ui-window-loader.d.ts → use-hs-window-loader.d.ts} +1 -1
  53. package/dist/runtime/composables/{use-hs-ui-window-loader.js → use-hs-window-loader.js} +1 -2
  54. package/dist/runtime/plugin/v-select.d.ts +2 -0
  55. package/dist/runtime/plugin/v-select.js +5 -0
  56. package/dist/runtime/style.css +22 -1
  57. package/dist/runtime/tailwind.css +78 -0
  58. package/dist/runtime/types/app.config.d.ts +5 -0
  59. package/dist/runtime/{components/hs-ui/dialog/index.type.d.ts → types/dialog.d.ts} +3 -3
  60. package/dist/runtime/{components/hs-ui/toast/index.type.d.ts → types/toast.d.ts} +1 -2
  61. package/dist/runtime/{components/hs-ui/toast/index.type.js → types/toast.js} +0 -1
  62. package/dist/runtime/utils/class-style.d.ts +6 -0
  63. package/dist/runtime/utils/class-style.js +27 -0
  64. package/dist/runtime/utils/com.d.ts +6 -0
  65. package/dist/runtime/{lib → utils}/com.js +1 -4
  66. package/dist/runtime/utils/dayjs.d.ts +53 -0
  67. package/dist/runtime/utils/dayjs.js +124 -0
  68. package/dist/runtime/utils/float.d.ts +2 -0
  69. package/dist/runtime/utils/float.js +35 -0
  70. package/dist/runtime/utils/multi-lang-object.d.ts +17 -0
  71. package/dist/runtime/utils/multi-lang-object.js +34 -0
  72. package/dist/runtime/{lib → utils}/multi-lang.d.ts +1 -1
  73. package/dist/runtime/{lib → utils}/multi-lang.js +31 -27
  74. package/dist/runtime/{lib → utils}/number.d.ts +2 -4
  75. package/dist/runtime/{lib → utils}/number.js +29 -69
  76. package/dist/runtime/utils/object.d.ts +46 -0
  77. package/dist/runtime/utils/object.js +107 -0
  78. package/dist/runtime/utils/select-item.d.ts +31 -0
  79. package/dist/runtime/utils/select.d.ts +14 -0
  80. package/dist/runtime/utils/select.js +36 -0
  81. package/dist/runtime/utils/string.d.ts +39 -0
  82. package/dist/runtime/utils/string.js +125 -0
  83. package/dist/runtime/utils/tabulator.d.ts +108 -0
  84. package/dist/runtime/utils/tabulator.js +296 -0
  85. package/dist/runtime/utils/theme.d.ts +21 -0
  86. package/dist/runtime/utils/theme.js +31 -0
  87. package/dist/runtime/utils/tv.d.ts +101 -0
  88. package/dist/runtime/utils/tv.js +26 -0
  89. package/dist/runtime/utils/wareki.d.ts +3 -0
  90. package/dist/runtime/utils/wareki.js +106 -0
  91. package/dist/types.d.mts +1 -17
  92. package/dist/types.d.ts +1 -17
  93. package/package.json +99 -37
  94. package/dist/runtime/components/hs-fc/btn/index.vue +0 -510
  95. package/dist/runtime/components/hs-ui/aspect-box.vue +0 -83
  96. package/dist/runtime/components/hs-ui/card-item.vue +0 -141
  97. package/dist/runtime/components/hs-ui/card.vue +0 -54
  98. package/dist/runtime/components/hs-ui/container.vue +0 -50
  99. package/dist/runtime/components/hs-ui/modal/bg.vue +0 -94
  100. package/dist/runtime/components/hs-ui/modal/index.vue +0 -206
  101. package/dist/runtime/components/hs-ui/modal/use-ui-modal.d.ts +0 -20
  102. package/dist/runtime/components/v-test.vue +0 -60
  103. package/dist/runtime/composables/use-hs-ui-dialog.d.ts +0 -22
  104. package/dist/runtime/lib/class-style.d.ts +0 -8
  105. package/dist/runtime/lib/class-style.js +0 -59
  106. package/dist/runtime/lib/com.d.ts +0 -14
  107. package/dist/runtime/lib/prefix.d.ts +0 -2
  108. package/dist/runtime/lib/prefix.js +0 -17
  109. package/dist/runtime/lib/theme.d.ts +0 -2
  110. package/dist/runtime/lib/theme.js +0 -21
  111. /package/dist/runtime/{components/hs-ui/dialog/index.type.js → types/dialog.js} +0 -0
  112. /package/dist/runtime/{components/hs-fc/hoge → utils/select-item.js} +0 -0
@@ -0,0 +1,685 @@
1
+ <script setup lang="ts">
2
+ /* ----------------------------------------------------------------------------
3
+ // src\runtime\components\form\radio.vue
4
+ // ----------------------------------------------------------------------------
5
+ // Radio
6
+ // RadioRadio
7
+ ----------------------------------------------------------------------------- */
8
+
9
+ // [ tailwind ]
10
+ import { twMerge } from "tailwind-merge";
11
+ // [ NUXT ]
12
+ import { reactive, ref, watch, computed, useId } from "#imports";
13
+ // [ utils ]
14
+ import { type ClassType, ClassTypeToString } from "../../utils/class-style";
15
+ import type { SelectItem } from "../../utils/select-item";
16
+ import { useDisplayList, type DisplaySelectItem } from "../../utils/select";
17
+ // [ composables ]
18
+ import { useHsFocus } from "../../composables/use-hs-focus";
19
+ import { useHsMultiLang } from "../../composables/use-hs-multi-lang";
20
+ // [ Components ]
21
+ import InputFrame from "./input-frame.vue";
22
+ import SelectImgIcon from "./select-img-icon.vue";
23
+ import Btn from "../form/btn.vue";
24
+
25
+ // ----------------------------------------------------------------------------
26
+ const hsFocus = useHsFocus();
27
+ const multiLang = useHsMultiLang();
28
+ const tx = multiLang.tx;
29
+ // ----------------------------------------------------------------------------
30
+ // [ Props ]
31
+ type Props = {
32
+ // ----------------------------------------------------------------------------
33
+ // Input 種類別
34
+ list: SelectItem[];
35
+ order?: boolean;
36
+ image?: boolean;
37
+ loading?: boolean;
38
+ nullText?: string;
39
+ classCol?: ClassType;
40
+ classRow?: ClassType;
41
+ classImg?: ClassType;
42
+ classImgTag?: ClassType;
43
+ // ----------------------------------------------------------------------------
44
+ data: number | null;
45
+ diff?: number | null | undefined;
46
+ tabindex?: string | undefined;
47
+ // ----------------------------------------------------------------------------
48
+ class?: ClassType;
49
+ classHeader?: ClassType;
50
+ classInput?: ClassType;
51
+ // ----------------------------------------------------------------------------
52
+ // 状態
53
+ // focus?: boolean;
54
+ focusColor?: string;
55
+ // change?: boolean;
56
+ changeColor?: string;
57
+ error?: boolean;
58
+ errorColor?: string;
59
+ disabled?: boolean;
60
+ disabledColor?: string;
61
+ readonly?: boolean;
62
+ // ----------------------------------------------------------------------------
63
+ // 表示
64
+ label?: string;
65
+ // 表示-副情報
66
+ require?: boolean;
67
+ requireText?: string;
68
+ warn?: string;
69
+ warnTimeOut?: number;
70
+ // ----------------------------------------------------------------------------
71
+ // 設定
72
+ size?: "s" | "m" | "l";
73
+ };
74
+
75
+ const props = withDefaults(defineProps<Props>(), {
76
+ // ----------------------------------------------------------------------------
77
+ // Input 種類別
78
+ order: false,
79
+ image: false,
80
+ loading: false,
81
+ nullText: "選択してください",
82
+ nullable: true,
83
+ classCol: "",
84
+ classRow: "",
85
+ classImg: "",
86
+ classImgTag: "",
87
+ // ----------------------------------------------------------------------------
88
+ diff: undefined,
89
+ tabindex: undefined,
90
+ // ----------------------------------------------------------------------------
91
+ class: "",
92
+ classHeader: "",
93
+ classInput: "",
94
+ // ----------------------------------------------------------------------------
95
+ // 状態
96
+ // focus: false,
97
+ focusColor: "shadow-[inset_0px_0px_1px_2px_#0d8ee4]",
98
+ // change: false,
99
+ changeColor: "shadow-[inset_0px_0px_1px_2px_#fd9831be]",
100
+ error: false,
101
+ errorColor: "shadow-[inset_0px_0px_1px_2px_#d80000dc]",
102
+ disabled: false,
103
+ disabledColor: "",
104
+ readonly: false,
105
+ // ----------------------------------------------------------------------------
106
+ // 表示
107
+ label: "",
108
+ // 表示-副情報
109
+ require: false,
110
+ requireText: "必須",
111
+ warn: "",
112
+ warnTimeOut: 300,
113
+ // ----------------------------------------------------------------------------
114
+ // 設定
115
+ size: "m",
116
+ });
117
+ // ----------------------------------------------------------------------------
118
+ // [ emit ]
119
+ type Emits = {
120
+ ref: [element: HTMLElement];
121
+ focus: [elm: HTMLElement];
122
+ blur: [elm: HTMLElement];
123
+ // ----------------------------
124
+ "update:data": [value: number | null];
125
+ "value-change": [after: number | null, before: number | null];
126
+ // ----------------------------
127
+ keydown: [event: KeyboardEvent];
128
+ keyup: [event: KeyboardEvent];
129
+ // ----------------------------
130
+ };
131
+ const emit = defineEmits<Emits>();
132
+ // ----------------------------------------------------------------------------
133
+ // [ getCurrentInstance ]
134
+ const uid = useId();
135
+ // ----------------------------------------------------------------------------
136
+ // 更新の有無判定
137
+ const isChangeData = computed(() => {
138
+ if (props.diff === undefined) return false;
139
+ if (props.diff !== props.data) return true;
140
+ return false;
141
+ });
142
+ // [ ref ]
143
+
144
+ // ----------------------------------------------------------------------------
145
+ const displayData = ref<DisplaySelectItem | null>(null);
146
+ watch(displayData, (v) => {
147
+ const before = props.data;
148
+ if (v === null) {
149
+ emit("update:data", null);
150
+ emit("value-change", null, before);
151
+ return;
152
+ }
153
+ if (v.id === null) {
154
+ displayData.value = null;
155
+ return;
156
+ }
157
+ emit("update:data", v.id);
158
+ emit("value-change", v.id, before);
159
+ });
160
+ const selectedId = computed(() => {
161
+ if (displayData.value === null) {
162
+ return null;
163
+ }
164
+ return displayData.value.id;
165
+ });
166
+ // ----------------------------------------------------------------------------
167
+ // 不明選択肢太陽
168
+ const unKnownSelected = ref<boolean>(false);
169
+ const unKnownData = computed(() => {
170
+ if (props.data === null) return null;
171
+ return {
172
+ id: props.data,
173
+ text: `選択肢にない値です ID=${props.data}`,
174
+ };
175
+ });
176
+
177
+ // ----------------------------------------------------------------------------
178
+ const isShowHidden = ref(false);
179
+ /** 選択肢に非表示アイテムが含まれているかどうか */
180
+ const includeHidden = computed(() => {
181
+ return props.list.filter((row) => row.hidden).length > 0;
182
+ });
183
+ // ----------------------------------------------------------------------------
184
+ /** 選択肢 */
185
+ interface SelectItemShow extends DisplaySelectItem {
186
+ elm: HTMLElement | null;
187
+ activate: boolean;
188
+ }
189
+
190
+ const displayList = computed<SelectItemShow[]>(() => {
191
+ return useDisplayList({
192
+ list: props.list,
193
+ id: props.data,
194
+ order: props.order,
195
+ unKnownData: unKnownData.value,
196
+ unKnownSelected: unKnownSelected.value,
197
+ isShowHidden: isShowHidden.value,
198
+ require: props.require,
199
+ nullText: props.nullText,
200
+ }).map((row) => {
201
+ return {
202
+ ...row,
203
+ elm: null,
204
+ activate: false,
205
+ };
206
+ });
207
+ });
208
+ // ----------------------------------------------------------------------------
209
+
210
+ const checkData = (id: number | null) => {
211
+ const ret = displayList.value.find((row) => row.id === id);
212
+ if (ret === undefined) {
213
+ // 選択肢に存在しないコード引当
214
+ unKnownSelected.value = true;
215
+ displayData.value = unKnownData.value;
216
+ } else {
217
+ unKnownSelected.value = false;
218
+ displayData.value = ret;
219
+ }
220
+ };
221
+ checkData(props.data);
222
+ // const activateItem = computed(() => {
223
+ watch(
224
+ () => props.data,
225
+ (id) => {
226
+ checkData(id);
227
+ }
228
+ );
229
+ // ----------------------------------------------------------------------------
230
+
231
+ // [ focus, blur ]
232
+ interface FocusState {
233
+ isActivate: boolean;
234
+ isMmousedownItem: boolean;
235
+ isNullActivate: boolean;
236
+ isKeyDown: boolean;
237
+ }
238
+ const focusState = reactive<FocusState>({
239
+ isActivate: false,
240
+ isMmousedownItem: false,
241
+ isNullActivate: false,
242
+ isKeyDown: false,
243
+ });
244
+
245
+ /**
246
+ * コントロールのFocus判定
247
+ */
248
+ const computedActivate = computed(() => {
249
+ if (props.disabled === true) return false;
250
+ if (hsFocus.state.id !== uid) return false;
251
+ if (focusState.isActivate) return true;
252
+ if (focusState.isMmousedownItem) return true;
253
+ if (focusState.isNullActivate) return true;
254
+ if (focusState.isKeyDown) return true;
255
+ if (displayList.value.filter((row) => row.activate === true).length === 1)
256
+ return true;
257
+ return false;
258
+ });
259
+
260
+ // ----------------------------------------------------------------------------
261
+ // const isOpen = ref(false);
262
+
263
+ const onFocus = (index: null | number) => {
264
+ if (props.disabled) return;
265
+ if (props.readonly) return;
266
+ focusState.isActivate = true;
267
+ if (index === null) {
268
+ focusState.isNullActivate = true;
269
+ } else {
270
+ displayList.value[index].activate = true;
271
+ }
272
+ hsFocus.state.id = uid;
273
+ };
274
+
275
+ const onBlur = (index: null | number) => {
276
+ if (props.disabled) return;
277
+ if (props.readonly) return;
278
+ if (index === null) {
279
+ focusState.isNullActivate = false;
280
+ } else {
281
+ displayList.value[index].activate = false;
282
+ }
283
+ setTimeout(() => {
284
+ focusState.isActivate = false;
285
+ }, 5);
286
+ };
287
+ // ----------------------------------------------------------------------------
288
+ const colClass = computed(() => {
289
+ return twMerge(
290
+ //
291
+ "col-auto",
292
+ ClassTypeToString(props.classCol)
293
+ );
294
+ });
295
+ // ----------------------------------------------------------------------------
296
+
297
+ const inputElementNull = ref<HTMLElement | null>(null);
298
+ // ----------------------------------------------------------------------------
299
+ const onMousedownItem = () => {
300
+ if (props.disabled) return;
301
+ if (props.readonly) return;
302
+ focusState.isMmousedownItem = true;
303
+ };
304
+ const onMouseupItem = (elm: HTMLElement | null) => {
305
+ if (props.disabled) return;
306
+ if (props.readonly) return;
307
+ focusState.isMmousedownItem = false;
308
+ if (elm !== null) {
309
+ elm.focus();
310
+ }
311
+ };
312
+
313
+ const onKeydown = (event: KeyboardEvent) => {
314
+ if (props.disabled || props.readonly) {
315
+ event.preventDefault();
316
+ return;
317
+ }
318
+ focusState.isKeyDown = true;
319
+ };
320
+
321
+ const onKeyup = (event: KeyboardEvent) => {
322
+ if (props.disabled || props.readonly) {
323
+ event.preventDefault();
324
+ return;
325
+ }
326
+ focusState.isKeyDown = false;
327
+ };
328
+
329
+ const setValue = async (row: SelectItemShow | null) => {
330
+ if (props.disabled) return;
331
+ if (props.readonly) return;
332
+ displayData.value = row;
333
+ };
334
+
335
+ // ----------------------------------------------------------------------------
336
+ const baseClass = computed(() => {
337
+ return [
338
+ twMerge(
339
+ //
340
+ "h-auto",
341
+ props.size === "s" ? "min-h-[44px] " : "",
342
+ props.size === "m" ? "min-h-[48px]" : "",
343
+ props.size === "l" ? "min-h-[60px]" : "",
344
+ ClassTypeToString(props.class)
345
+ ),
346
+ ];
347
+ });
348
+ // ----------------------------------------------------------------------------
349
+ const inputClass = computed(() => {
350
+ return [
351
+ twMerge(
352
+ //
353
+ "px-2",
354
+ ClassTypeToString(props.classInput)
355
+ ),
356
+ ];
357
+ });
358
+
359
+ // ----------------------------------------------------------------------------
360
+ </script>
361
+
362
+ <template>
363
+ <InputFrame
364
+ :class="baseClass"
365
+ :class-header="props.classHeader"
366
+ :class-input="inputClass"
367
+ :focus="computedActivate"
368
+ :focus-color="props.focusColor"
369
+ :change="isChangeData"
370
+ :change-color="props.changeColor"
371
+ :error="props.error"
372
+ :error-color="props.errorColor"
373
+ :disabled="props.disabled"
374
+ :disabled-color="props.disabledColor"
375
+ :readonly="props.readonly"
376
+ :label="props.label"
377
+ :require="props.require"
378
+ :require-text="props.requireText"
379
+ :warn="props.warn"
380
+ :warn-time-out="props.warnTimeOut"
381
+ :size="props.size"
382
+ >
383
+ <div class="nac-input">
384
+ <div
385
+ class="radio-row"
386
+ :class="[`flex flex-wrap`, classRow]"
387
+ @keyup.up="onKeyup"
388
+ @keydown.up="onKeydown"
389
+ @keyup.down="onKeyup"
390
+ @keydown.down="onKeydown"
391
+ @keyup.left="onKeyup"
392
+ @keydown.left="onKeydown"
393
+ @keyup.right="onKeyup"
394
+ @keydown.right="onKeydown"
395
+ >
396
+ <!-- null -->
397
+ <div v-if="!props.require" class="radio-col" :class="colClass">
398
+ <div
399
+ class="nac-radio"
400
+ :class="[{ disabled: props.disabled, readonly: props.readonly }]"
401
+ @mousedown="onMousedownItem"
402
+ @mouseup="onMouseupItem(inputElementNull)"
403
+ @click="setValue(null)"
404
+ >
405
+ <input
406
+ :id="`radio${uid}-null`"
407
+ :ref="(e:any) => (inputElementNull = e)"
408
+ v-bind="(selectedId as any)"
409
+ type="radio"
410
+ :name="`radio${uid}`"
411
+ :tabindex="props.tabindex"
412
+ :value="null"
413
+ :disabled="props.disabled"
414
+ :readonly="props.readonly"
415
+ @focus="onFocus(null)"
416
+ @blur="onBlur(null)"
417
+ />
418
+ <div
419
+ class="radio-mark"
420
+ :class="[{ checked: selectedId === null }]"
421
+ ></div>
422
+ <div class="radio-label">
423
+ <SelectImgIcon
424
+ v-if="props.image"
425
+ class="flex-none"
426
+ :img-url="null"
427
+ :class-img="props.classImg"
428
+ :class-img-tag="props.classImgTag"
429
+ />
430
+ <div class="radio-text truncate">{{ nullText }}</div>
431
+ </div>
432
+ </div>
433
+ </div>
434
+ <!-- list -->
435
+ <template v-for="(row, index) in displayList" :key="index">
436
+ <div
437
+ v-if="row.id !== null"
438
+ class="radio-col"
439
+ :class="colClass"
440
+ @mousedown="onMousedownItem"
441
+ @mouseup="onMouseupItem(row.elm)"
442
+ @click="setValue(row)"
443
+ >
444
+ <div
445
+ class="nac-radio"
446
+ :class="[{ disabled: props.disabled, readonly: props.readonly }]"
447
+ >
448
+ <input
449
+ :id="`radio${uid}-${row.id}`"
450
+ :ref="(e:any) => (row.elm = e)"
451
+ v-bind="(selectedId as any)"
452
+ type="radio"
453
+ class=""
454
+ :name="`radio${uid}`"
455
+ :tabindex="props.tabindex"
456
+ :value="row.id"
457
+ :disabled="props.disabled"
458
+ :readonly="props.readonly"
459
+ @focus="onFocus(index)"
460
+ @blur="onBlur(index)"
461
+ />
462
+ <div
463
+ class="radio-mark"
464
+ :class="[{ checked: selectedId === row.id }]"
465
+ ></div>
466
+ <div
467
+ class="radio-label"
468
+ :class="{
469
+ isDeleted: row.deleted === true,
470
+ isHidden: row.hidden === false,
471
+ }"
472
+ >
473
+ <SelectImgIcon
474
+ v-if="props.image"
475
+ class="flex-none"
476
+ :img-url="row.imgUrl"
477
+ :class-img="props.classImg"
478
+ :class-img-tag="props.classImgTag"
479
+ />
480
+ <div class="radio-text truncate">
481
+ {{ tx(row.text) }}
482
+ <span v-if="row.deleted" class="text-error text-[0.7em] leading-[1em]"
483
+ >※削除済み</span
484
+ >
485
+ <span v-if="row.hidden" class="text-error text-[0.7em] leading-[1em]"
486
+ >※非表示</span
487
+ >
488
+ </div>
489
+ </div>
490
+ </div>
491
+ </div>
492
+ </template>
493
+ </div>
494
+ <template v-if="includeHidden">
495
+ <Btn
496
+ theme="accent1"
497
+ variant="outlined"
498
+ class="w-full mb-1"
499
+ size="xs"
500
+ @click="isShowHidden = !isShowHidden"
501
+ >
502
+ <span class="me-1">Hidden options</span>
503
+ <i
504
+ class="fas"
505
+ :class="[
506
+ !isShowHidden ? 'fa-eye-slash text-error' : 'fa-eye text-success',
507
+ ]"
508
+ ></i>
509
+ <i class="fas fa-caret-right mx-1"></i>
510
+ <i
511
+ class="fas"
512
+ :class="[
513
+ isShowHidden ? 'fa-eye-slash text-error' : 'fa-eye text-success',
514
+ ]"
515
+ ></i>
516
+ </Btn>
517
+ </template>
518
+ </div>
519
+ </InputFrame>
520
+ </template>
521
+
522
+ <style>
523
+ .nac-input {
524
+ width: 100%;
525
+ height: 100%;
526
+ font-size: 1em;
527
+ display: flex;
528
+ align-items: center;
529
+ justify-content: center;
530
+ flex-direction: column;
531
+ }
532
+ .nac-input .radio-row {
533
+ display: flex;
534
+ align-items: center;
535
+ width: 100%;
536
+ }
537
+ .nac-input .radio-col {
538
+ display: flex;
539
+ align-items: center;
540
+ }
541
+ .nac-input .nac-radio {
542
+ display: flex;
543
+ align-items: center;
544
+ min-width: 0;
545
+ align-self: center;
546
+ padding: 0 6px 0 0;
547
+ }
548
+ .nac-input .nac-radio input {
549
+ opacity: 0;
550
+ position: absolute;
551
+ top: 0;
552
+ left: 0;
553
+ background-color: transparent;
554
+ -webkit-appearance: none;
555
+ -moz-appearance: none;
556
+ appearance: none;
557
+ border: 0px;
558
+ outline: none;
559
+ }
560
+ .nac-input .nac-radio .radio-mark {
561
+ flex: 0 0 15px;
562
+ justify-content: flex-start;
563
+ flex: 0 0 auto;
564
+ width: 15px;
565
+ height: 15px;
566
+ border-radius: 100%;
567
+ border: 1px solid gray;
568
+ margin-right: 3px;
569
+ margin: 3px 2px 2px 0;
570
+ box-shadow: inset 0 0 6px rgba(23, 97, 236, 0.308);
571
+ display: flex;
572
+ justify-content: center;
573
+ align-items: center;
574
+ border: 1px solid #112288;
575
+ transition: all 300ms;
576
+ }
577
+ .nac-input .nac-radio .radio-mark::after {
578
+ content: "";
579
+ width: 9px;
580
+ height: 9px;
581
+ position: relative;
582
+ border-radius: 100%;
583
+ background-color: #ffdd9f;
584
+ box-shadow: inset 0 0 6px #ffa600;
585
+ transform: scale(0);
586
+ transition: all 300ms;
587
+ }
588
+ .nac-input .nac-radio .radio-mark.checked {
589
+ border: 1px solid #f55a00;
590
+ }
591
+ .nac-input .nac-radio .radio-mark.checked::after {
592
+ background-color: #ffbcab;
593
+ box-shadow: inset 0 0 7px #f58b00;
594
+ transform: scale(100%);
595
+ }
596
+ .nac-input .nac-radio .radio-label {
597
+ min-width: 0;
598
+ flex: 1 1 auto;
599
+ display: flex;
600
+ align-items: center;
601
+ line-height: 14em;
602
+ }
603
+ .nac-input .nac-radio .radio-label .radio-text {
604
+ overflow: hidden;
605
+ overflow-wrap: break-word;
606
+ word-break: break-all;
607
+ line-height: 1.4em;
608
+ }
609
+ .nac-input .nac-radio .radio-label.isDeleted {
610
+ color: rgb(165, 0, 0);
611
+ }
612
+
613
+ .nac-radio:not(.disabled):not(.readonly) {
614
+ cursor: pointer;
615
+ }
616
+ .nac-radio:not(.disabled):not(.readonly) .radio-mark,
617
+ .nac-radio:not(.disabled):not(.readonly) .radio-label {
618
+ cursor: pointer;
619
+ }
620
+
621
+ .nac-radio.readonly {
622
+ cursor: not-allowed;
623
+ }
624
+ .nac-radio.readonly .radio-mark,
625
+ .nac-radio.readonly .radio-label {
626
+ cursor: not-allowed;
627
+ }
628
+
629
+ .nac-radio.disabled {
630
+ cursor: default;
631
+ }
632
+ .nac-radio.disabled .radio-mark,
633
+ .nac-radio.disabled .radio-label {
634
+ cursor: default;
635
+ }
636
+ .nac-radio.disabled .radio-mark {
637
+ border: 1px solid #818181;
638
+ }
639
+ .nac-radio.disabled .radio-mark::after {
640
+ background-color: #9e9e9e;
641
+ box-shadow: inset 0 0 6px #505050;
642
+ }
643
+
644
+ .item-hidden-control {
645
+ width: calc(100% - 0px);
646
+ padding: 8px 0;
647
+ margin: 6px 0px 0 0px;
648
+ border-top: solid 1px gray;
649
+ -moz-user-select: none;
650
+ -webkit-user-select: none;
651
+ -ms-user-select: none;
652
+ user-select: none;
653
+ cursor: pointer;
654
+ }
655
+ .item-hidden-control > .icons {
656
+ margin: 0 0 0 3px;
657
+ border: solid 1px rgb(190, 190, 190);
658
+ border-radius: 4px;
659
+ padding: 2px 8px;
660
+ background-color: rgba(255, 255, 255, 0.212);
661
+ }
662
+ .item-hidden-control > .icons i:nth-child(2) {
663
+ margin: 0 8px;
664
+ }
665
+ .item-hidden-control > .icons .fa-caret-right {
666
+ color: #9e9e9e;
667
+ }
668
+
669
+ .nac-input.disabled .select-display::after {
670
+ color: #969696;
671
+ }
672
+ .nac-input.disabled .select-display > .img-box {
673
+ cursor: default;
674
+ }
675
+ .nac-input.disabled .select-display > .select-display-text {
676
+ cursor: default;
677
+ }
678
+ .nac-input.disabled .item-hidden-control {
679
+ cursor: default;
680
+ color: rgb(92, 92, 92) !important;
681
+ }
682
+ .nac-input.disabled .item-hidden-control i {
683
+ color: rgb(92, 92, 92) !important;
684
+ }
685
+ </style>