@hostlink/nuxt-light 1.49.4 → 1.50.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,7 +1,7 @@
1
1
  {
2
2
  "name": "light",
3
3
  "configKey": "light",
4
- "version": "1.49.4",
4
+ "version": "1.50.0",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
@@ -292,7 +292,7 @@ const onLogout = async () => {
292
292
 
293
293
  <q-btn flat round dense icon="sym_o_person" class="q-mr-sm">
294
294
  <q-menu max-width="250px">
295
- <q-list>
295
+ <q-list :dense="style.dense">
296
296
  <q-item v-close-popup to="/User/profile">
297
297
  <q-item-section avatar>
298
298
  <q-icon name="sym_o_person" />
@@ -302,7 +302,7 @@ const onLogout = async () => {
302
302
 
303
303
  <q-item v-close-popup to="/User/setting">
304
304
  <q-item-section avatar>
305
- <q-icon name="sym_o_settings" />
305
+ <q-icon name="sym_o_settings_account_box" />
306
306
  </q-item-section>
307
307
  <q-item-section>{{ $t("Setting") }}</q-item-section>
308
308
  </q-item>
@@ -5,6 +5,7 @@ declare const _default: import("vue").DefineComponent<QSelectProps, {}, {}, {},
5
5
  square: boolean;
6
6
  dense: boolean;
7
7
  outlined: boolean;
8
+ optionValue: string | ((option: string | any) => any);
8
9
  filled: boolean;
9
10
  stackLabel: boolean;
10
11
  standout: string | boolean;
@@ -12,7 +13,6 @@ declare const _default: import("vue").DefineComponent<QSelectProps, {}, {}, {},
12
13
  emitValue: boolean;
13
14
  mapOptions: boolean;
14
15
  inputDebounce: string | number;
15
- optionValue: string | ((option: string | any) => any);
16
16
  optionLabel: string | ((option: string | any) => string);
17
17
  optionsDark: boolean | null;
18
18
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -5,6 +5,7 @@ declare const _default: import("vue").DefineComponent<QSelectProps, {}, {}, {},
5
5
  square: boolean;
6
6
  dense: boolean;
7
7
  outlined: boolean;
8
+ optionValue: string | ((option: string | any) => any);
8
9
  filled: boolean;
9
10
  stackLabel: boolean;
10
11
  standout: string | boolean;
@@ -12,7 +13,6 @@ declare const _default: import("vue").DefineComponent<QSelectProps, {}, {}, {},
12
13
  emitValue: boolean;
13
14
  mapOptions: boolean;
14
15
  inputDebounce: string | number;
15
- optionValue: string | ((option: string | any) => any);
16
16
  optionLabel: string | ((option: string | any) => string);
17
17
  optionsDark: boolean | null;
18
18
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -2,13 +2,13 @@ import type { Component } from "vue";
2
2
  import { Dialog } from 'quasar';
3
3
  import type { QTableColumn, QTableProps } from 'quasar';
4
4
  export type LTableColumn = QTableColumn & {
5
- searchType?: "date" | "text" | "number" | "select";
5
+ searchType?: "date" | "text" | "number" | "select" | "boolean";
6
6
  searchable?: boolean;
7
7
  searchOptions?: Record<string, any>[] | Function;
8
8
  searchMultiple?: boolean;
9
9
  searchIndex?: string;
10
10
  component?: Component;
11
- componentProps?: any;
11
+ componentProps?: ((row: any) => Record<string, any>);
12
12
  to?: (row: any) => string | null;
13
13
  gql?: Record<string, any>;
14
14
  /**
@@ -22,7 +22,7 @@ export type LTableColumn = QTableColumn & {
22
22
  export type LTableProps = QTableProps & {
23
23
  columns?: Array<LTableColumn>;
24
24
  actions?: Array<'view' | 'edit' | 'delete' | 'update'>;
25
- sortBy?: any;
25
+ sortBy?: string;
26
26
  rowKey?: string;
27
27
  modelName?: any;
28
28
  searchable?: boolean;
@@ -70,15 +70,17 @@ export interface LTableRequest {
70
70
  }) => void;
71
71
  }
72
72
  declare function requestServerInteraction(): void;
73
- declare var __VLS_91: any, __VLS_94: string, __VLS_95: any, __VLS_117: any, __VLS_203: string, __VLS_204: any;
73
+ declare var __VLS_91: any, __VLS_94: string, __VLS_95: any, __VLS_117: any, __VLS_119: any, __VLS_248: string, __VLS_249: any;
74
74
  type __VLS_Slots = {} & {
75
75
  [K in NonNullable<typeof __VLS_94>]?: (props: typeof __VLS_95) => any;
76
76
  } & {
77
- [K in NonNullable<typeof __VLS_203>]?: (props: typeof __VLS_204) => any;
77
+ [K in NonNullable<typeof __VLS_248>]?: (props: typeof __VLS_249) => any;
78
78
  } & {
79
79
  actions?: (props: typeof __VLS_91) => any;
80
80
  } & {
81
81
  'row-expand'?: (props: typeof __VLS_117) => any;
82
+ } & {
83
+ 'top-right'?: (props: typeof __VLS_119) => any;
82
84
  };
83
85
  declare const __VLS_component: import("vue").DefineComponent<LTableProps, {
84
86
  requestServerInteraction: typeof requestServerInteraction;
@@ -7,7 +7,7 @@ import model from "../composables/model";
7
7
  import { toQuery } from "@hostlink/light";
8
8
  import { list } from "#imports";
9
9
  import { useI18n } from "vue-i18n";
10
- import { useStorage } from "@vueuse/core";
10
+ import { useStorage, useSessionStorage } from "@vueuse/core";
11
11
  import { useRoute } from "#imports";
12
12
  const $q = useQuasar();
13
13
  const { t } = useI18n();
@@ -98,7 +98,7 @@ const props = defineProps({
98
98
  "onUpdate:expanded": { type: Function, required: false },
99
99
  onVirtualScroll: { type: Function, required: false },
100
100
  actions: { type: Array, required: false, default: () => [] },
101
- sortBy: { type: null, required: false },
101
+ sortBy: { type: String, required: false },
102
102
  modelName: { type: null, required: false },
103
103
  searchable: { type: Boolean, required: false, default: false },
104
104
  onRequestData: { type: Function, required: false },
@@ -108,6 +108,31 @@ const props = defineProps({
108
108
  searchStyle: { type: String, required: false }
109
109
  });
110
110
  const isServerSide = props.rows == void 0;
111
+ const simpleRouteName = computed(() => {
112
+ if ($route.name && typeof $route.name == "string") {
113
+ return $route.name;
114
+ }
115
+ return "";
116
+ });
117
+ const storageKey = computed(() => {
118
+ if (!props.name) return "l-table-storage-default";
119
+ return "l-table-storage-" + simpleRouteName.value + "-" + props.name;
120
+ });
121
+ const saveFilters = computed({
122
+ get() {
123
+ if (!props.name) return false;
124
+ return useStorage(storageKey.value, false).value;
125
+ },
126
+ set(value) {
127
+ if (!props.name) return;
128
+ const storage = useStorage(storageKey.value, false);
129
+ storage.value = value;
130
+ }
131
+ });
132
+ const filters = useSessionStorage(storageKey.value, {});
133
+ if (!saveFilters.value) {
134
+ filters.value = {};
135
+ }
111
136
  const light = useLight();
112
137
  const pagination = ref(props.pagination);
113
138
  if (props.rowsPerPageOptions[0] == 0) {
@@ -124,8 +149,8 @@ props.columns?.forEach((col) => {
124
149
  });
125
150
  if (props.columns) {
126
151
  for (let i = 0; i < props.columns.length; i++) {
127
- if (props.columns[i].searchOptions) {
128
- let opts = props.columns[i].searchOptions;
152
+ if (props.columns[i]?.searchOptions) {
153
+ let opts = props.columns[i]?.searchOptions;
129
154
  if (typeof opts == "function") {
130
155
  props.columns[i].searchOptions = await opts();
131
156
  }
@@ -153,7 +178,6 @@ const hasSearch = computed(() => {
153
178
  });
154
179
  });
155
180
  const table = ref();
156
- const filters = reactive({});
157
181
  const rows = ref(props.rows);
158
182
  if (rows.value == void 0) {
159
183
  rows.value = [];
@@ -307,26 +331,28 @@ const getFilterValue = () => {
307
331
  let f = {};
308
332
  props.columns?.forEach((col) => {
309
333
  if (col.searchable) {
310
- if (filters[col.name] !== null && filters[col.name] !== "" && filters[col.name] !== void 0) {
334
+ if (filters.value[col.name] !== null && filters.value[col.name] !== "" && filters.value[col.name] !== void 0) {
311
335
  const k = col.searchIndex ?? col.name;
312
- if (col.searchType == "number") {
313
- f[k] = filters[col.name];
336
+ if (col.searchType == "boolean") {
337
+ f[k] = filters.value[col.name];
338
+ } else if (col.searchType == "number") {
339
+ f[k] = filters.value[col.name];
314
340
  } else if (col.searchType == "date") {
315
- if (filters[k].from) {
341
+ if (filters.value[k].from) {
316
342
  f[k] = {
317
- between: [filters[col.name].from, filters[col.name].to]
343
+ _between: [filters.value[col.name].from, filters.value[col.name].to]
318
344
  };
319
345
  } else {
320
- f[k] = filters[k];
346
+ f[k] = filters.value[k];
321
347
  }
322
348
  } else if (col.searchType == "select") {
323
- f[k] = filters[col.name];
349
+ f[k] = filters.value[col.name];
324
350
  } else {
325
351
  if (col.searchMethod == "equals") {
326
- f[k] = filters[col.name];
352
+ f[k] = filters.value[col.name];
327
353
  } else {
328
354
  f[k] = {
329
- contains: filters[col.name]
355
+ contains: filters.value[col.name]
330
356
  };
331
357
  }
332
358
  }
@@ -467,21 +493,21 @@ const searchSelectFilter = (val, update, name) => {
467
493
  }
468
494
  };
469
495
  const showTopRight = computed(() => {
470
- return props.searchable || props.name && (props.columns && props.columns.length > 0);
496
+ return props.name && hasFilters.value || props.searchable || props.name && (props.columns && props.columns.length > 0);
471
497
  });
472
498
  const hidableColumns = computed(() => {
473
499
  return props.columns?.filter((c) => !c.required) || [];
474
500
  });
475
- const simpleRouteName = computed(() => {
476
- if ($route.name && typeof $route.name == "string") {
477
- return $route.name;
478
- }
479
- return "";
480
- });
481
501
  const visibleColumns = props.name ? useStorage("l-table-visible-columns-" + simpleRouteName.value + "-" + props.name, hidableColumns.value.map((c) => c.name)) : ref(hidableColumns.value.map((c) => c.name));
482
502
  watch(filters, () => {
503
+ console.log("filters changed", filters.value);
483
504
  onFilters();
484
505
  }, { deep: true });
506
+ const tempFilters = ref({});
507
+ tempFilters.value = { ...filters.value };
508
+ const hasFilters = computed(() => {
509
+ return Object.keys(filters.value).length > 0;
510
+ });
485
511
  </script>
486
512
 
487
513
  <template>
@@ -491,7 +517,7 @@ watch(filters, () => {
491
517
  <template #header="props">
492
518
  <q-tr :props="props">
493
519
  <q-td v-if="selection != 'none'" auto-width>
494
- <q-checkbox v-model="props.selected" />
520
+ <q-checkbox v-model="props.selected" :color="$light.color" />
495
521
  </q-td>
496
522
  <q-th v-if="hasRowExpand" auto-width></q-th>
497
523
  <q-th v-if="hasActions" auto-width></q-th>
@@ -517,7 +543,7 @@ watch(filters, () => {
517
543
  <template #body="props">
518
544
  <q-tr :props="props">
519
545
  <q-td v-if="selection != 'none'" auto-width>
520
- <q-checkbox v-model="props.selected" />
546
+ <q-checkbox v-model="props.selected" :color="$light.color" />
521
547
  </q-td>
522
548
  <q-td v-if="hasRowExpand" auto-width>
523
549
  <q-btn flat round size="sm" :icon="props.expand ? 'sym_o_expand_more' : 'sym_o_expand_less'"
@@ -542,7 +568,6 @@ watch(filters, () => {
542
568
  </q-td>
543
569
 
544
570
 
545
-
546
571
  <template v-for="col in props.cols">
547
572
  <template v-if="ss.indexOf('body-cell-' + col.name) >= 0">
548
573
  <slot :name="'body-cell-' + col.name" v-bind="props"></slot>
@@ -573,6 +598,15 @@ watch(filters, () => {
573
598
 
574
599
 
575
600
  <template #top-right="props" v-if="showTopRight">
601
+ <slot name="top-right" v-bind="props"></slot>
602
+
603
+ <q-btn v-if="$props.name" :disable="!hasFilters" dense flat icon="sym_o_filter_alt_off"
604
+ :color="$light.color" @click="filters = {};
605
+ tempFilters = {}">
606
+ <q-tooltip>{{ $t("Clear Filters") }}</q-tooltip>
607
+ </q-btn>
608
+
609
+
576
610
  <q-input outlined dense debounce="300" v-model="filter" :placeholder="$t('Search')" :color="$light.color"
577
611
  v-if="searchable">
578
612
  <template v-slot:append>
@@ -580,18 +614,32 @@ watch(filters, () => {
580
614
  </template>
581
615
  </q-input>
582
616
 
583
- <q-icon name="sym_o_view_column" size="sm" class="cursor-pointer" :color="$light.color">
617
+ <q-btn icon="sym_o_settings" flat dense :color="$light.color" v-if="$props.name">
584
618
  <q-popup-proxy>
585
619
  <q-card>
586
620
  <q-card-section>
587
- <div v-for="column in hidableColumns" :key="column.name" class="q-mb-xs">
588
- <q-checkbox v-model="visibleColumns" :val="column.name" :label="column.label"
589
- :color="$light.color" dense />
590
- </div>
621
+ <q-checkbox label="Save filters" v-model="saveFilters" :color="$light.color" />
591
622
  </q-card-section>
592
623
  </q-card>
593
624
  </q-popup-proxy>
594
- </q-icon>
625
+ </q-btn>
626
+
627
+ <q-btn icon="sym_o_view_column" flat dense :color="$light.color" v-if="$props.name">
628
+ <q-popup-proxy>
629
+ <q-card>
630
+ <q-card-section>
631
+ <q-option-group :color="$light.color" type="checkbox" v-model="visibleColumns"
632
+ :options="hidableColumns" option-value="name">
633
+ </q-option-group>
634
+ </q-card-section>
635
+ </q-card>
636
+ </q-popup-proxy>
637
+ </q-btn>
638
+
639
+
640
+ <q-btn icon="sym_o_refresh" flat dense :color="$light.color" @click="requestServerInteraction()">
641
+ <q-tooltip>{{ $t("Refresh") }}</q-tooltip>
642
+ </q-btn>
595
643
  </template>
596
644
 
597
645
 
@@ -614,29 +662,40 @@ watch(filters, () => {
614
662
 
615
663
  <template v-if="col.searchType == 'number'">
616
664
  <q-input style="min-width: 80px;" dense clearable filled square
617
- v-model.number="filters[col.name]" @keydown.enter.prevent="onFilters" @clear="onFilters"
618
- mask="##########" :enterkeyhint="$t('search')" :style="col.searchStyle"></q-input>
665
+ v-model.number="tempFilters[col.name]"
666
+ @keydown.enter.prevent="filters[col.name] = tempFilters[col.name]"
667
+ @clear="delete filters[col.name]" mask="##########" :enterkeyhint="$t('search')"
668
+ :style="col.searchStyle"></q-input>
619
669
  </template>
620
670
 
621
671
  <template v-if="col.searchType == 'select'">
622
- <q-select dense clearable filled square v-model="filters[col.name]"
623
- @update:model-value="onFilters" options-dense :options="localSearchOptions[col.name]"
624
- emit-value map-options :multiple="col.searchMultiple" :color="$light.color" use-input
625
- input-debounce="0" @filter="(val, update) => {
672
+ <q-select dense clearable filled square v-model="filters[col.name]" options-dense
673
+ :options="localSearchOptions[col.name]" emit-value map-options
674
+ :multiple="col.searchMultiple" :color="$light.color" use-input input-debounce="0"
675
+ @filter="(val, update) => {
626
676
  searchSelectFilter(val, update, col.name);
627
677
  }" :style="col.searchStyle" />
628
678
  </template>
629
679
 
630
680
  <template v-if="col.searchType == 'date'">
631
681
  <l-date-picker dense clearable filled square :outlined="false" hide-bottom-space
632
- v-model="filters[col.name]" range @clear="onFilters"
633
- :style="col.searchStyle" />
682
+ v-model="filters[col.name]" range :style="col.searchStyle" />
683
+ </template>
684
+
685
+
686
+ <template v-if="col.searchType == 'boolean'">
687
+ <q-select dense clearable filled square v-model="filters[col.name]" :options="[
688
+ { label: $t('Yes'), value: true },
689
+ { label: $t('No'), value: false }
690
+ ]" :color="$light.color" :style="col.searchStyle" emit-value map-options options-dense />
691
+
692
+
634
693
  </template>
635
694
 
636
695
  <template v-if="!col.searchType || col.searchType == 'text'">
637
- <q-input style="min-width: 80px;" dense clearable filled square v-model="filters[col.name]"
638
- @keydown.enter.prevent="onFilters" @clear="onFilters" :enterkeyhint="$t('search')"
639
- :color="$light.color" :style="col.searchStyle"></q-input>
696
+ <q-input style="min-width: 80px;" dense clearable filled square
697
+ v-model="tempFilters[col.name]" @keydown.enter.prevent="filters[col.name] = tempFilters[col.name]" @clear="delete filters[col.name]" :enterkeyhint="$t('search')" :color="$light.color"
698
+ :style="col.searchStyle"></q-input>
640
699
 
641
700
  </template>
642
701
 
@@ -645,8 +704,12 @@ watch(filters, () => {
645
704
  </q-tr>
646
705
  </template>
647
706
 
648
- <template v-for="slot of ss" v-slot:[slot]="props">
707
+ <template v-for="slot of Object.keys($slots)" v-slot:[slot]="props">
649
708
  <slot :name="slot" v-bind="props"></slot>
650
709
  </template>
710
+
711
+
712
+
713
+
651
714
  </q-table>
652
715
  </template>
@@ -2,13 +2,13 @@ import type { Component } from "vue";
2
2
  import { Dialog } from 'quasar';
3
3
  import type { QTableColumn, QTableProps } from 'quasar';
4
4
  export type LTableColumn = QTableColumn & {
5
- searchType?: "date" | "text" | "number" | "select";
5
+ searchType?: "date" | "text" | "number" | "select" | "boolean";
6
6
  searchable?: boolean;
7
7
  searchOptions?: Record<string, any>[] | Function;
8
8
  searchMultiple?: boolean;
9
9
  searchIndex?: string;
10
10
  component?: Component;
11
- componentProps?: any;
11
+ componentProps?: ((row: any) => Record<string, any>);
12
12
  to?: (row: any) => string | null;
13
13
  gql?: Record<string, any>;
14
14
  /**
@@ -22,7 +22,7 @@ export type LTableColumn = QTableColumn & {
22
22
  export type LTableProps = QTableProps & {
23
23
  columns?: Array<LTableColumn>;
24
24
  actions?: Array<'view' | 'edit' | 'delete' | 'update'>;
25
- sortBy?: any;
25
+ sortBy?: string;
26
26
  rowKey?: string;
27
27
  modelName?: any;
28
28
  searchable?: boolean;
@@ -70,15 +70,17 @@ export interface LTableRequest {
70
70
  }) => void;
71
71
  }
72
72
  declare function requestServerInteraction(): void;
73
- declare var __VLS_91: any, __VLS_94: string, __VLS_95: any, __VLS_117: any, __VLS_203: string, __VLS_204: any;
73
+ declare var __VLS_91: any, __VLS_94: string, __VLS_95: any, __VLS_117: any, __VLS_119: any, __VLS_248: string, __VLS_249: any;
74
74
  type __VLS_Slots = {} & {
75
75
  [K in NonNullable<typeof __VLS_94>]?: (props: typeof __VLS_95) => any;
76
76
  } & {
77
- [K in NonNullable<typeof __VLS_203>]?: (props: typeof __VLS_204) => any;
77
+ [K in NonNullable<typeof __VLS_248>]?: (props: typeof __VLS_249) => any;
78
78
  } & {
79
79
  actions?: (props: typeof __VLS_91) => any;
80
80
  } & {
81
81
  'row-expand'?: (props: typeof __VLS_117) => any;
82
+ } & {
83
+ 'top-right'?: (props: typeof __VLS_119) => any;
82
84
  };
83
85
  declare const __VLS_component: import("vue").DefineComponent<LTableProps, {
84
86
  requestServerInteraction: typeof requestServerInteraction;
@@ -525,9 +525,6 @@ declare const light: {
525
525
  readonly datetimeFormats: {};
526
526
  readonly numberFormats: {};
527
527
  readonly modifiers: import("vue-i18n").LinkedModifiers<import("vue-i18n").VueMessageType>;
528
- formatter: {
529
- interpolate: (message: string, values: any, path: string) => Array<any> | null;
530
- };
531
528
  missing: import("vue-i18n").MissingHandler | null;
532
529
  postTranslation: import("vue-i18n").PostTranslationHandler<import("vue-i18n").VueMessageType> | null;
533
530
  silentTranslationWarn: boolean | RegExp;
@@ -536,15 +533,11 @@ declare const light: {
536
533
  sync: boolean;
537
534
  warnHtmlInMessage: import("vue-i18n").WarnHtmlInMessageLevel;
538
535
  escapeParameterHtml: boolean;
539
- preserveDirectiveContent: boolean;
540
536
  pluralizationRules: import("@intlify/core-base").PluralizationRules;
541
537
  t: import("vue-i18n").VueI18nTranslation<{}, string, import("@intlify/core-base").RemoveIndexSignature<{
542
538
  [x: string]: import("vue-i18n").LocaleMessageValue<import("vue-i18n").VueMessageType>;
543
539
  }>, never, never, never>;
544
540
  rt: import("vue-i18n").VueI18nResolveLocaleMessageTranslation<string>;
545
- tc: import("vue-i18n").VueI18nTranslationChoice<{}, string, import("@intlify/core-base").RemoveIndexSignature<{
546
- [x: string]: import("vue-i18n").LocaleMessageValue<import("vue-i18n").VueMessageType>;
547
- }>, never, never, never>;
548
541
  te: <Str extends string, Key extends never = never>(key: Str | Key, locale?: string | undefined) => boolean;
549
542
  tm: <Key extends string, ResourceKeys extends never = never, Locale extends never = never, Target = import("@intlify/core-base").RemoveIndexSignature<{
550
543
  [x: string]: import("vue-i18n").LocaleMessageValue<import("vue-i18n").VueMessageType>;
@@ -576,9 +569,7 @@ declare const light: {
576
569
  [x: string]: import("@intlify/core-base").NumberFormatOptions;
577
570
  }> : NumberSchema, Formats extends FormatsType = FormatsType>(locale: LocaleSchema | Locale, format: Formats) => void;
578
571
  mergeNumberFormat: <NumberSchema extends Record<string, any> = never, LocaleSchema extends string = string, Locale extends never = never, Formats = import("vue-i18n").IsNever<NumberSchema> extends true ? Record<string, any> : NumberSchema>(locale: LocaleSchema | Locale, format: Formats) => void;
579
- getChoiceIndex: (choice: import("vue-i18n").Choice, choicesLength: number) => number;
580
572
  };
581
- readonly allowComposition: boolean;
582
573
  install: (app: import("vue").App, ...options: unknown[]) => void;
583
574
  dispose: () => void;
584
575
  } | null;
@@ -1131,9 +1122,6 @@ declare const _default: () => {
1131
1122
  readonly datetimeFormats: {};
1132
1123
  readonly numberFormats: {};
1133
1124
  readonly modifiers: import("vue-i18n").LinkedModifiers<import("vue-i18n").VueMessageType>;
1134
- formatter: {
1135
- interpolate: (message: string, values: any, path: string) => Array<any> | null;
1136
- };
1137
1125
  missing: import("vue-i18n").MissingHandler | null;
1138
1126
  postTranslation: import("vue-i18n").PostTranslationHandler<import("vue-i18n").VueMessageType> | null;
1139
1127
  silentTranslationWarn: boolean | RegExp;
@@ -1142,15 +1130,11 @@ declare const _default: () => {
1142
1130
  sync: boolean;
1143
1131
  warnHtmlInMessage: import("vue-i18n").WarnHtmlInMessageLevel;
1144
1132
  escapeParameterHtml: boolean;
1145
- preserveDirectiveContent: boolean;
1146
1133
  pluralizationRules: import("@intlify/core-base").PluralizationRules;
1147
1134
  t: import("vue-i18n").VueI18nTranslation<{}, string, import("@intlify/core-base").RemoveIndexSignature<{
1148
1135
  [x: string]: import("vue-i18n").LocaleMessageValue<import("vue-i18n").VueMessageType>;
1149
1136
  }>, never, never, never>;
1150
1137
  rt: import("vue-i18n").VueI18nResolveLocaleMessageTranslation<string>;
1151
- tc: import("vue-i18n").VueI18nTranslationChoice<{}, string, import("@intlify/core-base").RemoveIndexSignature<{
1152
- [x: string]: import("vue-i18n").LocaleMessageValue<import("vue-i18n").VueMessageType>;
1153
- }>, never, never, never>;
1154
1138
  te: <Str extends string, Key extends never = never>(key: Str | Key, locale?: string | undefined) => boolean;
1155
1139
  tm: <Key extends string, ResourceKeys extends never = never, Locale extends never = never, Target = import("@intlify/core-base").RemoveIndexSignature<{
1156
1140
  [x: string]: import("vue-i18n").LocaleMessageValue<import("vue-i18n").VueMessageType>;
@@ -1182,9 +1166,7 @@ declare const _default: () => {
1182
1166
  [x: string]: import("@intlify/core-base").NumberFormatOptions;
1183
1167
  }> : NumberSchema, Formats extends FormatsType = FormatsType>(locale: LocaleSchema | Locale, format: Formats) => void;
1184
1168
  mergeNumberFormat: <NumberSchema extends Record<string, any> = never, LocaleSchema extends string = string, Locale extends never = never, Formats = import("vue-i18n").IsNever<NumberSchema> extends true ? Record<string, any> : NumberSchema>(locale: LocaleSchema | Locale, format: Formats) => void;
1185
- getChoiceIndex: (choice: import("vue-i18n").Choice, choicesLength: number) => number;
1186
1169
  };
1187
- readonly allowComposition: boolean;
1188
1170
  install: (app: import("vue").App, ...options: unknown[]) => void;
1189
1171
  dispose: () => void;
1190
1172
  } | null;
@@ -57,7 +57,6 @@ declare const _default: {
57
57
  };
58
58
  has2FA: {
59
59
  label: string;
60
- searchType: string;
61
60
  format: (value: any) => "" | "✔️";
62
61
  };
63
62
  _test2: {
@@ -72,7 +72,6 @@ export default {
72
72
  },
73
73
  has2FA: {
74
74
  label: "2FA",
75
- searchType: "select",
76
75
  format: (value) => {
77
76
  return value ? "\u2714\uFE0F" : "";
78
77
  }
@@ -18,21 +18,21 @@ const columns = model("User").columns({
18
18
  email: true,
19
19
  phone: true,
20
20
  join_date: true,
21
- //status: true,
22
21
  has2FA: true
23
- //_test: true,
24
22
  });
23
+ const selectedRows = ref([]);
25
24
  </script>
26
25
 
27
26
  <template>
28
27
  <l-page>
29
28
  <l-tabs route v-model="status">
30
29
  <l-tab label="Active" name="active">
31
- <l-table ref="table" row-key="user_id" @request-data="onRequest" :columns="columns"
32
- :actions="['view', 'update', 'delete']"></l-table>
30
+ <l-table ref="table" row-key="user_id" @request-data="onRequest" :columns="columns" name="user-active"
31
+ :actions="['view', 'update', 'delete']">
32
+ </l-table>
33
33
  </l-tab>
34
34
  <l-tab label="Inactive" name="inactive">
35
- <l-table row-key="user_id" @request-data="onRequest" :columns="columns"
35
+ <l-table row-key="user_id" @request-data="onRequest" :columns="columns" name="user-inactive"
36
36
  :actions="['view', 'update', 'delete']">
37
37
  </l-table>
38
38
  </l-tab>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostlink/nuxt-light",
3
- "version": "1.49.4",
3
+ "version": "1.50.0",
4
4
  "description": "HostLink Nuxt Light Framework",
5
5
  "repository": {
6
6
  "type": "git",
@@ -44,19 +44,19 @@
44
44
  "json-to-graphql-query": "^2.3.0",
45
45
  "nuxt-quasar-ui": "^2.1.12",
46
46
  "quasar": "^2.18.5",
47
- "vue-i18n": "^9.2.2",
47
+ "vue-i18n": "^11.1.12",
48
48
  "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@nuxt/devtools": "latest",
52
52
  "@nuxt/eslint-config": "^0.2.0",
53
- "@nuxt/kit": "^4.2.0",
54
- "@nuxt/schema": "^4.2.0",
53
+ "@nuxt/kit": "^4.2.1",
54
+ "@nuxt/schema": "^4.2.1",
55
55
  "@nuxt/test-utils": "^3.17.2",
56
56
  "@types/node": "^22.5.0",
57
57
  "changelogen": "^0.5.4",
58
58
  "eslint": "^8.46.0",
59
- "nuxt": "^4.2.0",
59
+ "nuxt": "^4.2.1",
60
60
  "typescript": "^5.9.2",
61
61
  "vue-tsc": "^2.2.8"
62
62
  }