@fastkit/vui 0.7.21 → 0.7.25

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.
@@ -35,20 +35,21 @@ import './setup.scss';
35
35
  import type { App } from 'vue';
36
36
  import type { Router } from 'vue-router';
37
37
  import { VPageLink } from '@fastkit/vue-page';
38
- import { installVuiPlugin as _installVuiPlugin, VuiPluginOptions } from '@fastkit/vui';
38
+ import { installVuiPlugin as _installVuiPlugin, RawVuiPluginOptions, mergeVuiPluginOptions } from '@fastkit/vui';
39
39
  import { colorScheme } from '<%~ it.colorScheme %>';
40
40
  import '<%~ it.mediaMatch %>';
41
41
  import './icon-font';
42
42
  import '${STYLE_AFTER_EFFECTS_PATH}';
43
43
 
44
- export function installVui(settings: { app: App, router: Router }) {
45
- _installVuiPlugin(settings.app, {
44
+ export function installVui(settings: { app: App, router: Router }, options?: RawVuiPluginOptions) {
45
+ const merged = mergeVuiPluginOptions({
46
46
  RouterLink: VPageLink,
47
47
  colorScheme,
48
48
  uiSettings: <%~ it.uiSettings %>,
49
49
  icons: <%~ it.icons %>,
50
50
  ...settings,
51
- });
51
+ }, options);
52
+ _installVuiPlugin(settings.app, merged);
52
53
  }
53
54
 
54
55
  export default installVui;
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../../../../../../../packages/vui/src/tool/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAK9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA+F/C,MAAM,WAAW,oBACf,SAAQ,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,MAAM,WAAW,2BACf,SAAQ,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,OAAO,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,2BAA2B,CAAC;IACtC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,aAAa,CAC3B,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAyJrB"}
1
+ {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../../../../../../../packages/vui/src/tool/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAK9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgG/C,MAAM,WAAW,oBACf,SAAQ,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,MAAM,WAAW,2BACf,SAAQ,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,OAAO,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,2BAA2B,CAAC;IACtC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,aAAa,CAC3B,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAyJrB"}
package/dist/vui.cjs.js CHANGED
@@ -247,6 +247,21 @@ const VFormControl = vue.defineComponent({
247
247
  "name": vui.icon('hinttip')
248
248
  }, null)
249
249
  });
250
+ const hinttipDelay = vue.computed(() => {
251
+ let {
252
+ hinttipDelay
253
+ } = control;
254
+
255
+ if (hinttipDelay == null) {
256
+ hinttipDelay = vui.setting('hinttipDelay');
257
+ }
258
+
259
+ if (hinttipDelay == null) {
260
+ hinttipDelay = 500;
261
+ }
262
+
263
+ return hinttipDelay;
264
+ });
250
265
  ctx.expose(control.expose());
251
266
  const colorProvider = useVuiColorProvider();
252
267
  const classes = vue.computed(() => [{
@@ -268,6 +283,7 @@ const VFormControl = vue.defineComponent({
268
283
  const message = control.renderMessage();
269
284
  const appends = control.renderInfoAppends();
270
285
  const hinttip = control.renderHinttip();
286
+ const _hinttipDelay = hinttipDelay.value;
271
287
  return vue.createVNode("div", {
272
288
  "class": ['v-form-control', classes.value]
273
289
  }, [label && vue.createVNode("label", {
@@ -277,7 +293,8 @@ const VFormControl = vue.defineComponent({
277
293
  }
278
294
  }, [label, getRequiredChip(), hinttip && vue.createVNode(vueKit.VTooltip, {
279
295
  "top": true,
280
- "openOnHover": false
296
+ "openOnHover": _hinttipDelay !== 'click',
297
+ "openDelay": typeof _hinttipDelay === 'number' ? _hinttipDelay : undefined
281
298
  }, {
282
299
  default: () => [vue.createVNode("div", {
283
300
  "class": "v-form-control__label__hinttip__hint"
@@ -3385,7 +3402,8 @@ const DATA_TABLE_DEFAULTS = {
3385
3402
  descQueryValue: 'DESC',
3386
3403
  limits: [5, 10, 20, 50, 100],
3387
3404
  limitDefault: 20,
3388
- contorolThreshold: 10
3405
+ contorolThreshold: 10,
3406
+ searchQuery: []
3389
3407
  };
3390
3408
  function configureDataTableDefaults(defaults) {
3391
3409
  Object.assign(DATA_TABLE_DEFAULTS, defaults);
@@ -3432,6 +3450,14 @@ const VDataTable = vue.defineComponent({
3432
3450
  default: () => DATA_TABLE_DEFAULTS.orderQuery
3433
3451
  },
3434
3452
 
3453
+ /**
3454
+ * 検索クエリ名
3455
+ */
3456
+ searchQuery: {
3457
+ type: [String, Array],
3458
+ default: () => DATA_TABLE_DEFAULTS.searchQuery
3459
+ },
3460
+
3435
3461
  /**
3436
3462
  * リミット件数クエリ名
3437
3463
  */
@@ -3477,7 +3503,11 @@ const VDataTable = vue.defineComponent({
3477
3503
  },
3478
3504
  selectable: Boolean,
3479
3505
  fixedHeader: Boolean,
3480
- maxHeight: [Number, String]
3506
+ maxHeight: [Number, String],
3507
+ // eslint-disable-next-line vue/require-prop-types
3508
+ noDataMessage: {},
3509
+ // eslint-disable-next-line vue/require-prop-types
3510
+ noResultsMessage: {}
3481
3511
  },
3482
3512
  emits: {
3483
3513
  input: selecteds => true
@@ -3506,6 +3536,46 @@ const VDataTable = vue.defineComponent({
3506
3536
  ret.push(...headers.filter(h => !h.hidden));
3507
3537
  return ret;
3508
3538
  });
3539
+ const searchQueryValues = vue.computed(() => {
3540
+ let {
3541
+ searchQuery
3542
+ } = props;
3543
+
3544
+ if (!searchQuery) {
3545
+ return [];
3546
+ }
3547
+
3548
+ if (!Array.isArray(searchQuery)) {
3549
+ searchQuery = [searchQuery];
3550
+ }
3551
+
3552
+ const values = [];
3553
+ searchQuery.forEach(query => {
3554
+ const value = vui.location.getQuery(query);
3555
+
3556
+ if (value == null || value === '') {
3557
+ return;
3558
+ }
3559
+
3560
+ if (typeof value === 'object' && !Object.keys(value).length) {
3561
+ return;
3562
+ }
3563
+
3564
+ values.push(value);
3565
+ });
3566
+ return values;
3567
+ });
3568
+ const emptyMessage = vue.computed(() => {
3569
+ let message;
3570
+
3571
+ if (searchQueryValues.value.length) {
3572
+ message = props.noResultsMessage || vui.setting('noResultsMessage') || 'No search results found.'; // 検索結果が見つかりませんでした。
3573
+ } else {
3574
+ message = props.noDataMessage || vui.setting('noDataMessage') || 'No data was available.'; // データはありませんでした。
3575
+ }
3576
+
3577
+ return typeof message === 'function' ? message() : message;
3578
+ });
3509
3579
  const classesRef = vue.computed(() => [{
3510
3580
  'v-data-table--fixed-header': props.fixedHeader
3511
3581
  }]);
@@ -3972,7 +4042,7 @@ const VDataTable = vue.defineComponent({
3972
4042
  "class": "v-data-table__body container-pull"
3973
4043
  }, [isEmpty ? vue.createVNode("div", {
3974
4044
  "class": "v-data-table__empty--message"
3975
- }, null) : vue.createVNode(VPaper, {
4045
+ }, [emptyMessage.value]) : vue.createVNode(VPaper, {
3976
4046
  "class": "v-data-table__body__inner",
3977
4047
  "style": bodyInnerStylesRef.value
3978
4048
  }, {
@@ -4136,6 +4206,51 @@ const VToolbarTitle = vue.defineComponent({
4136
4206
 
4137
4207
  const DEFAULT_AUTO_SCROLL_TO_ELEMENT_OFFSET_TOP = -20;
4138
4208
  const DEFAULT_TEXTAREA_ROWS = 3;
4209
+ function mergeVuiServiceUISettings(base, overrides) {
4210
+ if (!overrides) {
4211
+ return base;
4212
+ }
4213
+
4214
+ const merged = { ...base
4215
+ };
4216
+ Object.entries(overrides).forEach(([key, value]) => {
4217
+ if (value) {
4218
+ merged[key] = value;
4219
+ }
4220
+ });
4221
+ return merged;
4222
+ }
4223
+ function mergeVuiServiceIconSettings(base, overrides) {
4224
+ if (!overrides) {
4225
+ return base;
4226
+ }
4227
+
4228
+ const merged = { ...base
4229
+ };
4230
+ Object.entries(overrides).forEach(([key, value]) => {
4231
+ if (value) {
4232
+ merged[key] = value;
4233
+ }
4234
+ });
4235
+ return merged;
4236
+ }
4237
+ function mergeVuiServiceOptions(base, overrides) {
4238
+ if (!overrides) {
4239
+ return base;
4240
+ }
4241
+
4242
+ const merged = { ...base,
4243
+ uiSettings: mergeVuiServiceUISettings(base.uiSettings, overrides.uiSettings),
4244
+ icons: mergeVuiServiceIconSettings(base.icons, overrides.icons)
4245
+ };
4246
+ const excludes = ['uiSettings', 'icons'];
4247
+ Object.entries(overrides).forEach(([key, value]) => {
4248
+ if (value && !excludes.includes(key)) {
4249
+ merged[key] = value;
4250
+ }
4251
+ });
4252
+ return merged;
4253
+ }
4139
4254
  class VuiService {
4140
4255
  get scroller() {
4141
4256
  return vueScroller.getDocumentScroller();
@@ -4272,6 +4387,18 @@ class VuiService {
4272
4387
 
4273
4388
  }
4274
4389
 
4390
+ function mergeVuiPluginOptions(base, override) {
4391
+ if (!override) return base;
4392
+ const merged = mergeVuiServiceOptions(base, override);
4393
+
4394
+ if (override.stack) {
4395
+ merged.stack = { ...merged.stack,
4396
+ ...override.stack
4397
+ };
4398
+ }
4399
+
4400
+ return merged;
4401
+ }
4275
4402
  class VuiPlugin {
4276
4403
  static installedApps = new Set();
4277
4404
 
@@ -4415,6 +4542,10 @@ exports.defineFormSelectorComponent = defineFormSelectorComponent;
4415
4542
  exports.iconProps = iconProps;
4416
4543
  exports.installVuiPlugin = installVuiPlugin;
4417
4544
  exports.listTileEmits = listTileEmits;
4545
+ exports.mergeVuiPluginOptions = mergeVuiPluginOptions;
4546
+ exports.mergeVuiServiceIconSettings = mergeVuiServiceIconSettings;
4547
+ exports.mergeVuiServiceOptions = mergeVuiServiceOptions;
4548
+ exports.mergeVuiServiceUISettings = mergeVuiServiceUISettings;
4418
4549
  exports.paginationProps = paginationProps;
4419
4550
  exports.rawIconProp = rawIconProp;
4420
4551
  exports.renderNavigationItemInput = renderNavigationItemInput;
@@ -247,6 +247,21 @@ const VFormControl = vue.defineComponent({
247
247
  "name": vui.icon('hinttip')
248
248
  }, null)
249
249
  });
250
+ const hinttipDelay = vue.computed(() => {
251
+ let {
252
+ hinttipDelay
253
+ } = control;
254
+
255
+ if (hinttipDelay == null) {
256
+ hinttipDelay = vui.setting('hinttipDelay');
257
+ }
258
+
259
+ if (hinttipDelay == null) {
260
+ hinttipDelay = 500;
261
+ }
262
+
263
+ return hinttipDelay;
264
+ });
250
265
  ctx.expose(control.expose());
251
266
  const colorProvider = useVuiColorProvider();
252
267
  const classes = vue.computed(() => [{
@@ -268,6 +283,7 @@ const VFormControl = vue.defineComponent({
268
283
  const message = control.renderMessage();
269
284
  const appends = control.renderInfoAppends();
270
285
  const hinttip = control.renderHinttip();
286
+ const _hinttipDelay = hinttipDelay.value;
271
287
  return vue.createVNode("div", {
272
288
  "class": ['v-form-control', classes.value]
273
289
  }, [label && vue.createVNode("label", {
@@ -277,7 +293,8 @@ const VFormControl = vue.defineComponent({
277
293
  }
278
294
  }, [label, getRequiredChip(), hinttip && vue.createVNode(vueKit.VTooltip, {
279
295
  "top": true,
280
- "openOnHover": false
296
+ "openOnHover": _hinttipDelay !== 'click',
297
+ "openDelay": typeof _hinttipDelay === 'number' ? _hinttipDelay : undefined
281
298
  }, {
282
299
  default: () => [vue.createVNode("div", {
283
300
  "class": "v-form-control__label__hinttip__hint"
@@ -3385,7 +3402,8 @@ const DATA_TABLE_DEFAULTS = {
3385
3402
  descQueryValue: 'DESC',
3386
3403
  limits: [5, 10, 20, 50, 100],
3387
3404
  limitDefault: 20,
3388
- contorolThreshold: 10
3405
+ contorolThreshold: 10,
3406
+ searchQuery: []
3389
3407
  };
3390
3408
  function configureDataTableDefaults(defaults) {
3391
3409
  Object.assign(DATA_TABLE_DEFAULTS, defaults);
@@ -3432,6 +3450,14 @@ const VDataTable = vue.defineComponent({
3432
3450
  default: () => DATA_TABLE_DEFAULTS.orderQuery
3433
3451
  },
3434
3452
 
3453
+ /**
3454
+ * 検索クエリ名
3455
+ */
3456
+ searchQuery: {
3457
+ type: [String, Array],
3458
+ default: () => DATA_TABLE_DEFAULTS.searchQuery
3459
+ },
3460
+
3435
3461
  /**
3436
3462
  * リミット件数クエリ名
3437
3463
  */
@@ -3477,7 +3503,11 @@ const VDataTable = vue.defineComponent({
3477
3503
  },
3478
3504
  selectable: Boolean,
3479
3505
  fixedHeader: Boolean,
3480
- maxHeight: [Number, String]
3506
+ maxHeight: [Number, String],
3507
+ // eslint-disable-next-line vue/require-prop-types
3508
+ noDataMessage: {},
3509
+ // eslint-disable-next-line vue/require-prop-types
3510
+ noResultsMessage: {}
3481
3511
  },
3482
3512
  emits: {
3483
3513
  input: selecteds => true
@@ -3506,6 +3536,46 @@ const VDataTable = vue.defineComponent({
3506
3536
  ret.push(...headers.filter(h => !h.hidden));
3507
3537
  return ret;
3508
3538
  });
3539
+ const searchQueryValues = vue.computed(() => {
3540
+ let {
3541
+ searchQuery
3542
+ } = props;
3543
+
3544
+ if (!searchQuery) {
3545
+ return [];
3546
+ }
3547
+
3548
+ if (!Array.isArray(searchQuery)) {
3549
+ searchQuery = [searchQuery];
3550
+ }
3551
+
3552
+ const values = [];
3553
+ searchQuery.forEach(query => {
3554
+ const value = vui.location.getQuery(query);
3555
+
3556
+ if (value == null || value === '') {
3557
+ return;
3558
+ }
3559
+
3560
+ if (typeof value === 'object' && !Object.keys(value).length) {
3561
+ return;
3562
+ }
3563
+
3564
+ values.push(value);
3565
+ });
3566
+ return values;
3567
+ });
3568
+ const emptyMessage = vue.computed(() => {
3569
+ let message;
3570
+
3571
+ if (searchQueryValues.value.length) {
3572
+ message = props.noResultsMessage || vui.setting('noResultsMessage') || 'No search results found.'; // 検索結果が見つかりませんでした。
3573
+ } else {
3574
+ message = props.noDataMessage || vui.setting('noDataMessage') || 'No data was available.'; // データはありませんでした。
3575
+ }
3576
+
3577
+ return typeof message === 'function' ? message() : message;
3578
+ });
3509
3579
  const classesRef = vue.computed(() => [{
3510
3580
  'v-data-table--fixed-header': props.fixedHeader
3511
3581
  }]);
@@ -3972,7 +4042,7 @@ const VDataTable = vue.defineComponent({
3972
4042
  "class": "v-data-table__body container-pull"
3973
4043
  }, [isEmpty ? vue.createVNode("div", {
3974
4044
  "class": "v-data-table__empty--message"
3975
- }, null) : vue.createVNode(VPaper, {
4045
+ }, [emptyMessage.value]) : vue.createVNode(VPaper, {
3976
4046
  "class": "v-data-table__body__inner",
3977
4047
  "style": bodyInnerStylesRef.value
3978
4048
  }, {
@@ -4136,6 +4206,51 @@ const VToolbarTitle = vue.defineComponent({
4136
4206
 
4137
4207
  const DEFAULT_AUTO_SCROLL_TO_ELEMENT_OFFSET_TOP = -20;
4138
4208
  const DEFAULT_TEXTAREA_ROWS = 3;
4209
+ function mergeVuiServiceUISettings(base, overrides) {
4210
+ if (!overrides) {
4211
+ return base;
4212
+ }
4213
+
4214
+ const merged = { ...base
4215
+ };
4216
+ Object.entries(overrides).forEach(([key, value]) => {
4217
+ if (value) {
4218
+ merged[key] = value;
4219
+ }
4220
+ });
4221
+ return merged;
4222
+ }
4223
+ function mergeVuiServiceIconSettings(base, overrides) {
4224
+ if (!overrides) {
4225
+ return base;
4226
+ }
4227
+
4228
+ const merged = { ...base
4229
+ };
4230
+ Object.entries(overrides).forEach(([key, value]) => {
4231
+ if (value) {
4232
+ merged[key] = value;
4233
+ }
4234
+ });
4235
+ return merged;
4236
+ }
4237
+ function mergeVuiServiceOptions(base, overrides) {
4238
+ if (!overrides) {
4239
+ return base;
4240
+ }
4241
+
4242
+ const merged = { ...base,
4243
+ uiSettings: mergeVuiServiceUISettings(base.uiSettings, overrides.uiSettings),
4244
+ icons: mergeVuiServiceIconSettings(base.icons, overrides.icons)
4245
+ };
4246
+ const excludes = ['uiSettings', 'icons'];
4247
+ Object.entries(overrides).forEach(([key, value]) => {
4248
+ if (value && !excludes.includes(key)) {
4249
+ merged[key] = value;
4250
+ }
4251
+ });
4252
+ return merged;
4253
+ }
4139
4254
  class VuiService {
4140
4255
  get scroller() {
4141
4256
  return vueScroller.getDocumentScroller();
@@ -4272,6 +4387,18 @@ class VuiService {
4272
4387
 
4273
4388
  }
4274
4389
 
4390
+ function mergeVuiPluginOptions(base, override) {
4391
+ if (!override) return base;
4392
+ const merged = mergeVuiServiceOptions(base, override);
4393
+
4394
+ if (override.stack) {
4395
+ merged.stack = { ...merged.stack,
4396
+ ...override.stack
4397
+ };
4398
+ }
4399
+
4400
+ return merged;
4401
+ }
4275
4402
  class VuiPlugin {
4276
4403
  static installedApps = new Set();
4277
4404
 
@@ -4415,6 +4542,10 @@ exports.defineFormSelectorComponent = defineFormSelectorComponent;
4415
4542
  exports.iconProps = iconProps;
4416
4543
  exports.installVuiPlugin = installVuiPlugin;
4417
4544
  exports.listTileEmits = listTileEmits;
4545
+ exports.mergeVuiPluginOptions = mergeVuiPluginOptions;
4546
+ exports.mergeVuiServiceIconSettings = mergeVuiServiceIconSettings;
4547
+ exports.mergeVuiServiceOptions = mergeVuiServiceOptions;
4548
+ exports.mergeVuiServiceUISettings = mergeVuiServiceUISettings;
4418
4549
  exports.paginationProps = paginationProps;
4419
4550
  exports.rawIconProp = rawIconProp;
4420
4551
  exports.renderNavigationItemInput = renderNavigationItemInput;
package/dist/vui.d.ts CHANGED
@@ -19,6 +19,9 @@ import { FocusPosition } from '@tiptap/vue-3';
19
19
  import { FormAction } from '@fastkit/vue-kit';
20
20
  import { FormAutoCapitalize } from '@fastkit/vue-kit';
21
21
  import { FormControl } from '@fastkit/vue-kit';
22
+ import { FormControlHinttip } from '@fastkit/vue-kit';
23
+ import { FormControlHinttipDelay } from '@fastkit/vue-kit';
24
+ import { FormControlHinttipDelay as FormControlHinttipDelay_2 } from '@fastkit/vue-form-control';
22
25
  import { FormControlSlots } from '@fastkit/vue-kit';
23
26
  import { FormNodeControl } from '@fastkit/vue-kit';
24
27
  import { FormNodeError } from '@fastkit/vue-kit';
@@ -829,7 +832,8 @@ declare function createTextFieldProps(): {
829
832
  nodeControl: PropType<FormNodeControl<any, any>>;
830
833
  label: PropType<VNodeChildOrSlot<any>>;
831
834
  hint: PropType<VNodeChildOrSlot<any>>;
832
- hinttip: PropType<string | boolean | (() => VNodeChild)>;
835
+ hinttip: PropType<FormControlHinttip>;
836
+ hinttipDelay: PropType<FormControlHinttipDelay>;
833
837
  infoAppends: PropType<VNodeChildOrSlot<any>>;
834
838
  validating: BooleanConstructor;
835
839
  pending: BooleanConstructor;
@@ -897,6 +901,7 @@ declare const DATA_TABLE_DEFAULTS: {
897
901
  limits: number[];
898
902
  limitDefault: number;
899
903
  contorolThreshold: number;
904
+ searchQuery: string | string[];
900
905
  };
901
906
 
902
907
  export declare interface DataTableCellSlotPayload<T extends DataTableItem = DataTableItem> {
@@ -947,7 +952,8 @@ export declare function defineFormSelectorComponent(opts: DefineFormSelectorComp
947
952
  nodeControl: PropType<FormNodeControl<any, any>>;
948
953
  label: PropType<VNodeChildOrSlot<any>>;
949
954
  hint: PropType<VNodeChildOrSlot<any>>;
950
- hinttip: PropType<string | boolean | (() => VNodeChild)>;
955
+ hinttip: PropType<FormControlHinttip>;
956
+ hinttipDelay: PropType<FormControlHinttipDelay>;
951
957
  infoAppends: PropType<VNodeChildOrSlot<any>>;
952
958
  validating: BooleanConstructor;
953
959
  pending: BooleanConstructor;
@@ -1061,6 +1067,7 @@ export declare function defineFormSelectorComponent(opts: DefineFormSelectorComp
1061
1067
  label?: unknown;
1062
1068
  hint?: unknown;
1063
1069
  hinttip?: unknown;
1070
+ hinttipDelay?: unknown;
1064
1071
  infoAppends?: unknown;
1065
1072
  validating?: unknown;
1066
1073
  pending?: unknown;
@@ -1123,7 +1130,8 @@ export declare function defineFormSelectorComponent(opts: DefineFormSelectorComp
1123
1130
  nodeControl?: FormNodeControl<any, any> | undefined;
1124
1131
  label?: VNodeChildOrSlot<any>;
1125
1132
  hint?: VNodeChildOrSlot<any>;
1126
- hinttip?: string | boolean | (() => VNodeChild) | undefined;
1133
+ hinttip?: FormControlHinttip | undefined;
1134
+ hinttipDelay?: FormControlHinttipDelay | undefined;
1127
1135
  infoAppends?: VNodeChildOrSlot<any>;
1128
1136
  requiredChip?: RequiredChipSource | undefined;
1129
1137
  size?: "sm" | "md" | "lg" | undefined;
@@ -1241,6 +1249,14 @@ export declare const listTileEmits: {
1241
1249
  changeActive: (isActive: boolean) => boolean;
1242
1250
  };
1243
1251
 
1252
+ export declare function mergeVuiPluginOptions(base: VuiPluginOptions, override?: RawVuiPluginOptions): VuiPluginOptions;
1253
+
1254
+ export declare function mergeVuiServiceIconSettings(base: VuiServiceIconSettings, overrides?: RawVuiServiceIconSettings): VuiServiceIconSettings;
1255
+
1256
+ export declare function mergeVuiServiceOptions(base: VuiServiceOptions, overrides?: RawVuiServiceOptions): VuiServiceOptions;
1257
+
1258
+ export declare function mergeVuiServiceUISettings(base: VuiServiceUISettings, overrides?: RawVuiServiceUISettings): VuiServiceUISettings;
1259
+
1244
1260
  export declare interface NavigationItemInput extends ExtractPropInput<ReturnType<typeof createNavigationItemProps>> {
1245
1261
  key: string | number;
1246
1262
  label: VNodeChild | (() => VNodeChild);
@@ -1299,8 +1315,21 @@ export declare type RawVButtonIcon = IconName | VButtonIcon;
1299
1315
 
1300
1316
  export declare type RawVButtonSpacer = boolean | VButtonSpacer;
1301
1317
 
1318
+ export declare interface RawVuiPluginOptions extends RawVuiServiceOptions {
1319
+ stack?: VuiPluginStackOptions;
1320
+ }
1321
+
1302
1322
  export declare type RawVuiPromptOptions = string | VuiPromptOptions;
1303
1323
 
1324
+ export declare type RawVuiServiceIconSettings = Partial<VuiServiceIconSettings>;
1325
+
1326
+ export declare interface RawVuiServiceOptions extends Omit<Partial<VuiServiceOptions>, 'uiSettings' | 'icons'> {
1327
+ uiSettings?: RawVuiServiceUISettings;
1328
+ icons?: RawVuiServiceIconSettings;
1329
+ }
1330
+
1331
+ export declare type RawVuiServiceUISettings = Partial<VuiServiceUISettings>;
1332
+
1304
1333
  declare type RawWysiwygEditorTool = WysiwygEditorTool | WysiwygEditorToolFactory<any>;
1305
1334
 
1306
1335
  declare type RecursiveArray<T> = T | RecursiveArray<T>[];
@@ -3594,7 +3623,8 @@ export declare const VCheckboxGroup: DefineComponent<{
3594
3623
  nodeControl: PropType<FormNodeControl<any, any>>;
3595
3624
  label: PropType<VNodeChildOrSlot<any>>;
3596
3625
  hint: PropType<VNodeChildOrSlot<any>>;
3597
- hinttip: PropType<string | boolean | (() => VNodeChild)>;
3626
+ hinttip: PropType<FormControlHinttip>;
3627
+ hinttipDelay: PropType<FormControlHinttipDelay>;
3598
3628
  infoAppends: PropType<VNodeChildOrSlot<any>>;
3599
3629
  validating: BooleanConstructor;
3600
3630
  pending: BooleanConstructor;
@@ -3708,6 +3738,7 @@ export declare const VCheckboxGroup: DefineComponent<{
3708
3738
  label?: unknown;
3709
3739
  hint?: unknown;
3710
3740
  hinttip?: unknown;
3741
+ hinttipDelay?: unknown;
3711
3742
  infoAppends?: unknown;
3712
3743
  validating?: unknown;
3713
3744
  pending?: unknown;
@@ -3770,7 +3801,8 @@ export declare const VCheckboxGroup: DefineComponent<{
3770
3801
  nodeControl?: FormNodeControl<any, any> | undefined;
3771
3802
  label?: VNodeChildOrSlot<any>;
3772
3803
  hint?: VNodeChildOrSlot<any>;
3773
- hinttip?: string | boolean | (() => VNodeChild) | undefined;
3804
+ hinttip?: FormControlHinttip | undefined;
3805
+ hinttipDelay?: FormControlHinttipDelay | undefined;
3774
3806
  infoAppends?: VNodeChildOrSlot<any>;
3775
3807
  requiredChip?: RequiredChipSource | undefined;
3776
3808
  size?: "sm" | "md" | "lg" | undefined;
@@ -3864,6 +3896,13 @@ export declare const VDataTable: DefineComponent<{
3864
3896
  type: StringConstructor;
3865
3897
  default: () => string;
3866
3898
  };
3899
+ /**
3900
+ * 検索クエリ名
3901
+ */
3902
+ searchQuery: {
3903
+ type: PropType<string | string[]>;
3904
+ default: () => string | string[];
3905
+ };
3867
3906
  /**
3868
3907
  * リミット件数クエリ名
3869
3908
  */
@@ -3910,6 +3949,8 @@ export declare const VDataTable: DefineComponent<{
3910
3949
  selectable: BooleanConstructor;
3911
3950
  fixedHeader: BooleanConstructor;
3912
3951
  maxHeight: (StringConstructor | NumberConstructor)[];
3952
+ noDataMessage: PropType<VNodeChild | (() => VNodeChild)>;
3953
+ noResultsMessage: PropType<VNodeChild | (() => VNodeChild)>;
3913
3954
  }, () => JSX.Element, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
3914
3955
  input: (selecteds: string[]) => true;
3915
3956
  }, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<{
@@ -3918,6 +3959,7 @@ export declare const VDataTable: DefineComponent<{
3918
3959
  pageQuery?: unknown;
3919
3960
  sortQuery?: unknown;
3920
3961
  orderQuery?: unknown;
3962
+ searchQuery?: unknown;
3921
3963
  limitQuery?: unknown;
3922
3964
  defaultOrder?: unknown;
3923
3965
  ascQueryValue?: unknown;
@@ -3931,6 +3973,8 @@ export declare const VDataTable: DefineComponent<{
3931
3973
  selectable?: unknown;
3932
3974
  fixedHeader?: unknown;
3933
3975
  maxHeight?: unknown;
3976
+ noDataMessage?: unknown;
3977
+ noResultsMessage?: unknown;
3934
3978
  } & {
3935
3979
  itemKey: string;
3936
3980
  pageQuery: string;
@@ -3943,6 +3987,7 @@ export declare const VDataTable: DefineComponent<{
3943
3987
  limits: number[];
3944
3988
  limitDefault: number;
3945
3989
  contorolThreshold: number;
3990
+ searchQuery: string | string[];
3946
3991
  modelValue: string[];
3947
3992
  headers: DataTableHeader[];
3948
3993
  items: DataTableItem[];
@@ -3951,6 +3996,8 @@ export declare const VDataTable: DefineComponent<{
3951
3996
  fixedHeader: boolean;
3952
3997
  } & {
3953
3998
  maxHeight?: string | number | undefined;
3999
+ noDataMessage?: VNodeChild | (() => VNodeChild);
4000
+ noResultsMessage?: VNodeChild | (() => VNodeChild);
3954
4001
  }> & {
3955
4002
  onInput?: ((selecteds: string[]) => any) | undefined;
3956
4003
  }, {
@@ -3965,6 +4012,7 @@ export declare const VDataTable: DefineComponent<{
3965
4012
  limits: number[];
3966
4013
  limitDefault: number;
3967
4014
  contorolThreshold: number;
4015
+ searchQuery: string | string[];
3968
4016
  modelValue: string[];
3969
4017
  items: DataTableItem[];
3970
4018
  total: number;
@@ -4671,7 +4719,8 @@ export declare const VFormControl: DefineComponent<{
4671
4719
  nodeControl: PropType<FormNodeControl<any, any>>;
4672
4720
  label: PropType<VNodeChildOrSlot<any>>;
4673
4721
  hint: PropType<VNodeChildOrSlot<any>>;
4674
- hinttip: PropType<string | boolean | (() => VNodeChild)>;
4722
+ hinttip: PropType<FormControlHinttip>;
4723
+ hinttipDelay: PropType<FormControlHinttipDelay>;
4675
4724
  infoAppends: PropType<VNodeChildOrSlot<any>>;
4676
4725
  validating: BooleanConstructor;
4677
4726
  pending: BooleanConstructor;
@@ -4699,6 +4748,7 @@ export declare const VFormControl: DefineComponent<{
4699
4748
  label?: unknown;
4700
4749
  hint?: unknown;
4701
4750
  hinttip?: unknown;
4751
+ hinttipDelay?: unknown;
4702
4752
  infoAppends?: unknown;
4703
4753
  validating?: unknown;
4704
4754
  pending?: unknown;
@@ -4734,7 +4784,8 @@ export declare const VFormControl: DefineComponent<{
4734
4784
  nodeControl?: FormNodeControl<any, any> | undefined;
4735
4785
  label?: VNodeChildOrSlot<any>;
4736
4786
  hint?: VNodeChildOrSlot<any>;
4737
- hinttip?: string | boolean | (() => VNodeChild) | undefined;
4787
+ hinttip?: FormControlHinttip | undefined;
4788
+ hinttipDelay?: FormControlHinttipDelay | undefined;
4738
4789
  infoAppends?: VNodeChildOrSlot<any>;
4739
4790
  requiredChip?: RequiredChipSource | undefined;
4740
4791
  "v-slots"?: ResolveRawSlots<FormControlSlots & {
@@ -7616,7 +7667,8 @@ export declare const VRadioGroup: DefineComponent<{
7616
7667
  nodeControl: PropType<FormNodeControl<any, any>>;
7617
7668
  label: PropType<VNodeChildOrSlot<any>>;
7618
7669
  hint: PropType<VNodeChildOrSlot<any>>;
7619
- hinttip: PropType<string | boolean | (() => VNodeChild)>;
7670
+ hinttip: PropType<FormControlHinttip>;
7671
+ hinttipDelay: PropType<FormControlHinttipDelay>;
7620
7672
  infoAppends: PropType<VNodeChildOrSlot<any>>;
7621
7673
  validating: BooleanConstructor;
7622
7674
  pending: BooleanConstructor;
@@ -7730,6 +7782,7 @@ export declare const VRadioGroup: DefineComponent<{
7730
7782
  label?: unknown;
7731
7783
  hint?: unknown;
7732
7784
  hinttip?: unknown;
7785
+ hinttipDelay?: unknown;
7733
7786
  infoAppends?: unknown;
7734
7787
  validating?: unknown;
7735
7788
  pending?: unknown;
@@ -7792,7 +7845,8 @@ export declare const VRadioGroup: DefineComponent<{
7792
7845
  nodeControl?: FormNodeControl<any, any> | undefined;
7793
7846
  label?: VNodeChildOrSlot<any>;
7794
7847
  hint?: VNodeChildOrSlot<any>;
7795
- hinttip?: string | boolean | (() => VNodeChild) | undefined;
7848
+ hinttip?: FormControlHinttip | undefined;
7849
+ hinttipDelay?: FormControlHinttipDelay | undefined;
7796
7850
  infoAppends?: VNodeChildOrSlot<any>;
7797
7851
  requiredChip?: RequiredChipSource | undefined;
7798
7852
  size?: "sm" | "md" | "lg" | undefined;
@@ -7851,7 +7905,8 @@ export declare const VSelect: DefineComponent<{
7851
7905
  nodeControl: PropType<FormNodeControl<any, any>>;
7852
7906
  label: PropType<VNodeChildOrSlot<any>>;
7853
7907
  hint: PropType<VNodeChildOrSlot<any>>;
7854
- hinttip: PropType<string | boolean | (() => VNodeChild)>;
7908
+ hinttip: PropType<FormControlHinttip>;
7909
+ hinttipDelay: PropType<FormControlHinttipDelay>;
7855
7910
  infoAppends: PropType<VNodeChildOrSlot<any>>;
7856
7911
  validating: BooleanConstructor;
7857
7912
  pending: BooleanConstructor;
@@ -7971,6 +8026,7 @@ export declare const VSelect: DefineComponent<{
7971
8026
  label?: unknown;
7972
8027
  hint?: unknown;
7973
8028
  hinttip?: unknown;
8029
+ hinttipDelay?: unknown;
7974
8030
  infoAppends?: unknown;
7975
8031
  validating?: unknown;
7976
8032
  pending?: unknown;
@@ -8031,7 +8087,8 @@ export declare const VSelect: DefineComponent<{
8031
8087
  nodeControl?: FormNodeControl<any, any> | undefined;
8032
8088
  label?: VNodeChildOrSlot<any>;
8033
8089
  hint?: VNodeChildOrSlot<any>;
8034
- hinttip?: string | boolean | (() => VNodeChild) | undefined;
8090
+ hinttip?: FormControlHinttip | undefined;
8091
+ hinttipDelay?: FormControlHinttipDelay | undefined;
8035
8092
  infoAppends?: VNodeChildOrSlot<any>;
8036
8093
  requiredChip?: RequiredChipSource | undefined;
8037
8094
  startAdornment?: VNodeChildOrSlot<any>;
@@ -8223,7 +8280,8 @@ export declare const VSwitchGroup: DefineComponent<{
8223
8280
  nodeControl: PropType<FormNodeControl<any, any>>;
8224
8281
  label: PropType<VNodeChildOrSlot<any>>;
8225
8282
  hint: PropType<VNodeChildOrSlot<any>>;
8226
- hinttip: PropType<string | boolean | (() => VNodeChild)>;
8283
+ hinttip: PropType<FormControlHinttip>;
8284
+ hinttipDelay: PropType<FormControlHinttipDelay>;
8227
8285
  infoAppends: PropType<VNodeChildOrSlot<any>>;
8228
8286
  validating: BooleanConstructor;
8229
8287
  pending: BooleanConstructor;
@@ -8337,6 +8395,7 @@ export declare const VSwitchGroup: DefineComponent<{
8337
8395
  label?: unknown;
8338
8396
  hint?: unknown;
8339
8397
  hinttip?: unknown;
8398
+ hinttipDelay?: unknown;
8340
8399
  infoAppends?: unknown;
8341
8400
  validating?: unknown;
8342
8401
  pending?: unknown;
@@ -8399,7 +8458,8 @@ export declare const VSwitchGroup: DefineComponent<{
8399
8458
  nodeControl?: FormNodeControl<any, any> | undefined;
8400
8459
  label?: VNodeChildOrSlot<any>;
8401
8460
  hint?: VNodeChildOrSlot<any>;
8402
- hinttip?: string | boolean | (() => VNodeChild) | undefined;
8461
+ hinttip?: FormControlHinttip | undefined;
8462
+ hinttipDelay?: FormControlHinttipDelay | undefined;
8403
8463
  infoAppends?: VNodeChildOrSlot<any>;
8404
8464
  requiredChip?: RequiredChipSource | undefined;
8405
8465
  size?: "sm" | "md" | "lg" | undefined;
@@ -8529,7 +8589,8 @@ export declare const VTextarea: DefineComponent<{
8529
8589
  nodeControl: PropType<FormNodeControl<any, any>>;
8530
8590
  label: PropType<VNodeChildOrSlot<any>>;
8531
8591
  hint: PropType<VNodeChildOrSlot<any>>;
8532
- hinttip: PropType<string | boolean | (() => VNodeChild)>;
8592
+ hinttip: PropType<FormControlHinttip>;
8593
+ hinttipDelay: PropType<FormControlHinttipDelay>;
8533
8594
  infoAppends: PropType<VNodeChildOrSlot<any>>;
8534
8595
  validating: BooleanConstructor;
8535
8596
  pending: BooleanConstructor;
@@ -8648,6 +8709,7 @@ export declare const VTextarea: DefineComponent<{
8648
8709
  label?: unknown;
8649
8710
  hint?: unknown;
8650
8711
  hinttip?: unknown;
8712
+ hinttipDelay?: unknown;
8651
8713
  infoAppends?: unknown;
8652
8714
  validating?: unknown;
8653
8715
  pending?: unknown;
@@ -8729,7 +8791,8 @@ export declare const VTextarea: DefineComponent<{
8729
8791
  nodeControl?: FormNodeControl<any, any> | undefined;
8730
8792
  label?: VNodeChildOrSlot<any>;
8731
8793
  hint?: VNodeChildOrSlot<any>;
8732
- hinttip?: string | boolean | (() => VNodeChild) | undefined;
8794
+ hinttip?: FormControlHinttip | undefined;
8795
+ hinttipDelay?: FormControlHinttipDelay | undefined;
8733
8796
  infoAppends?: VNodeChildOrSlot<any>;
8734
8797
  requiredChip?: RequiredChipSource | undefined;
8735
8798
  startAdornment?: VNodeChildOrSlot<any>;
@@ -8790,7 +8853,8 @@ export declare const VTextField: DefineComponent<{
8790
8853
  nodeControl: PropType<FormNodeControl<any, any>>;
8791
8854
  label: PropType<VNodeChildOrSlot<any>>;
8792
8855
  hint: PropType<VNodeChildOrSlot<any>>;
8793
- hinttip: PropType<string | boolean | (() => VNodeChild)>;
8856
+ hinttip: PropType<FormControlHinttip>;
8857
+ hinttipDelay: PropType<FormControlHinttipDelay>;
8794
8858
  infoAppends: PropType<VNodeChildOrSlot<any>>;
8795
8859
  validating: BooleanConstructor;
8796
8860
  pending: BooleanConstructor;
@@ -8913,6 +8977,7 @@ export declare const VTextField: DefineComponent<{
8913
8977
  label?: unknown;
8914
8978
  hint?: unknown;
8915
8979
  hinttip?: unknown;
8980
+ hinttipDelay?: unknown;
8916
8981
  infoAppends?: unknown;
8917
8982
  validating?: unknown;
8918
8983
  pending?: unknown;
@@ -8998,7 +9063,8 @@ export declare const VTextField: DefineComponent<{
8998
9063
  nodeControl?: FormNodeControl<any, any> | undefined;
8999
9064
  label?: VNodeChildOrSlot<any>;
9000
9065
  hint?: VNodeChildOrSlot<any>;
9001
- hinttip?: string | boolean | (() => VNodeChild) | undefined;
9066
+ hinttip?: FormControlHinttip | undefined;
9067
+ hinttipDelay?: FormControlHinttipDelay | undefined;
9002
9068
  infoAppends?: VNodeChildOrSlot<any>;
9003
9069
  requiredChip?: RequiredChipSource | undefined;
9004
9070
  startAdornment?: VNodeChildOrSlot<any>;
@@ -10138,6 +10204,9 @@ export declare interface VuiServiceUISettings {
10138
10204
  color?: ScopeName;
10139
10205
  variant?: ColorVariant;
10140
10206
  };
10207
+ hinttipDelay?: FormControlHinttipDelay_2;
10208
+ noDataMessage?: VNodeChild | (() => VNodeChild);
10209
+ noResultsMessage?: VNodeChild | (() => VNodeChild);
10141
10210
  }
10142
10211
 
10143
10212
  export declare type VuiVNodeResolver = () => VNodeChild;
@@ -10168,7 +10237,8 @@ export declare const VWysiwygEditor: DefineComponent<{
10168
10237
  nodeControl: PropType<FormNodeControl<any, any>>;
10169
10238
  label: PropType<VNodeChildOrSlot<any>>;
10170
10239
  hint: PropType<VNodeChildOrSlot<any>>;
10171
- hinttip: PropType<string | boolean | (() => VNodeChild)>;
10240
+ hinttip: PropType<FormControlHinttip>;
10241
+ hinttipDelay: PropType<FormControlHinttipDelay>;
10172
10242
  infoAppends: PropType<VNodeChildOrSlot<any>>;
10173
10243
  validating: BooleanConstructor;
10174
10244
  pending: BooleanConstructor;
@@ -10282,6 +10352,7 @@ export declare const VWysiwygEditor: DefineComponent<{
10282
10352
  label?: unknown;
10283
10353
  hint?: unknown;
10284
10354
  hinttip?: unknown;
10355
+ hinttipDelay?: unknown;
10285
10356
  infoAppends?: unknown;
10286
10357
  validating?: unknown;
10287
10358
  pending?: unknown;
@@ -10362,7 +10433,8 @@ export declare const VWysiwygEditor: DefineComponent<{
10362
10433
  nodeControl?: FormNodeControl<any, any> | undefined;
10363
10434
  label?: VNodeChildOrSlot<any>;
10364
10435
  hint?: VNodeChildOrSlot<any>;
10365
- hinttip?: string | boolean | (() => VNodeChild) | undefined;
10436
+ hinttip?: FormControlHinttip | undefined;
10437
+ hinttipDelay?: FormControlHinttipDelay | undefined;
10366
10438
  infoAppends?: VNodeChildOrSlot<any>;
10367
10439
  requiredChip?: RequiredChipSource | undefined;
10368
10440
  startAdornment?: VNodeChildOrSlot<any>;
package/dist/vui.mjs CHANGED
@@ -242,6 +242,21 @@ const VFormControl = defineComponent({
242
242
  "name": vui.icon('hinttip')
243
243
  }, null)
244
244
  });
245
+ const hinttipDelay = computed(() => {
246
+ let {
247
+ hinttipDelay
248
+ } = control;
249
+
250
+ if (hinttipDelay == null) {
251
+ hinttipDelay = vui.setting('hinttipDelay');
252
+ }
253
+
254
+ if (hinttipDelay == null) {
255
+ hinttipDelay = 500;
256
+ }
257
+
258
+ return hinttipDelay;
259
+ });
245
260
  ctx.expose(control.expose());
246
261
  const colorProvider = useVuiColorProvider();
247
262
  const classes = computed(() => [{
@@ -263,6 +278,7 @@ const VFormControl = defineComponent({
263
278
  const message = control.renderMessage();
264
279
  const appends = control.renderInfoAppends();
265
280
  const hinttip = control.renderHinttip();
281
+ const _hinttipDelay = hinttipDelay.value;
266
282
  return createVNode("div", {
267
283
  "class": ['v-form-control', classes.value]
268
284
  }, [label && createVNode("label", {
@@ -272,7 +288,8 @@ const VFormControl = defineComponent({
272
288
  }
273
289
  }, [label, getRequiredChip(), hinttip && createVNode(VTooltip, {
274
290
  "top": true,
275
- "openOnHover": false
291
+ "openOnHover": _hinttipDelay !== 'click',
292
+ "openDelay": typeof _hinttipDelay === 'number' ? _hinttipDelay : undefined
276
293
  }, {
277
294
  default: () => [createVNode("div", {
278
295
  "class": "v-form-control__label__hinttip__hint"
@@ -3380,7 +3397,8 @@ const DATA_TABLE_DEFAULTS = {
3380
3397
  descQueryValue: 'DESC',
3381
3398
  limits: [5, 10, 20, 50, 100],
3382
3399
  limitDefault: 20,
3383
- contorolThreshold: 10
3400
+ contorolThreshold: 10,
3401
+ searchQuery: []
3384
3402
  };
3385
3403
  function configureDataTableDefaults(defaults) {
3386
3404
  Object.assign(DATA_TABLE_DEFAULTS, defaults);
@@ -3427,6 +3445,14 @@ const VDataTable = defineComponent({
3427
3445
  default: () => DATA_TABLE_DEFAULTS.orderQuery
3428
3446
  },
3429
3447
 
3448
+ /**
3449
+ * 検索クエリ名
3450
+ */
3451
+ searchQuery: {
3452
+ type: [String, Array],
3453
+ default: () => DATA_TABLE_DEFAULTS.searchQuery
3454
+ },
3455
+
3430
3456
  /**
3431
3457
  * リミット件数クエリ名
3432
3458
  */
@@ -3472,7 +3498,11 @@ const VDataTable = defineComponent({
3472
3498
  },
3473
3499
  selectable: Boolean,
3474
3500
  fixedHeader: Boolean,
3475
- maxHeight: [Number, String]
3501
+ maxHeight: [Number, String],
3502
+ // eslint-disable-next-line vue/require-prop-types
3503
+ noDataMessage: {},
3504
+ // eslint-disable-next-line vue/require-prop-types
3505
+ noResultsMessage: {}
3476
3506
  },
3477
3507
  emits: {
3478
3508
  input: selecteds => true
@@ -3501,6 +3531,46 @@ const VDataTable = defineComponent({
3501
3531
  ret.push(...headers.filter(h => !h.hidden));
3502
3532
  return ret;
3503
3533
  });
3534
+ const searchQueryValues = computed(() => {
3535
+ let {
3536
+ searchQuery
3537
+ } = props;
3538
+
3539
+ if (!searchQuery) {
3540
+ return [];
3541
+ }
3542
+
3543
+ if (!Array.isArray(searchQuery)) {
3544
+ searchQuery = [searchQuery];
3545
+ }
3546
+
3547
+ const values = [];
3548
+ searchQuery.forEach(query => {
3549
+ const value = vui.location.getQuery(query);
3550
+
3551
+ if (value == null || value === '') {
3552
+ return;
3553
+ }
3554
+
3555
+ if (typeof value === 'object' && !Object.keys(value).length) {
3556
+ return;
3557
+ }
3558
+
3559
+ values.push(value);
3560
+ });
3561
+ return values;
3562
+ });
3563
+ const emptyMessage = computed(() => {
3564
+ let message;
3565
+
3566
+ if (searchQueryValues.value.length) {
3567
+ message = props.noResultsMessage || vui.setting('noResultsMessage') || 'No search results found.'; // 検索結果が見つかりませんでした。
3568
+ } else {
3569
+ message = props.noDataMessage || vui.setting('noDataMessage') || 'No data was available.'; // データはありませんでした。
3570
+ }
3571
+
3572
+ return typeof message === 'function' ? message() : message;
3573
+ });
3504
3574
  const classesRef = computed(() => [{
3505
3575
  'v-data-table--fixed-header': props.fixedHeader
3506
3576
  }]);
@@ -3967,7 +4037,7 @@ const VDataTable = defineComponent({
3967
4037
  "class": "v-data-table__body container-pull"
3968
4038
  }, [isEmpty ? createVNode("div", {
3969
4039
  "class": "v-data-table__empty--message"
3970
- }, null) : createVNode(VPaper, {
4040
+ }, [emptyMessage.value]) : createVNode(VPaper, {
3971
4041
  "class": "v-data-table__body__inner",
3972
4042
  "style": bodyInnerStylesRef.value
3973
4043
  }, {
@@ -4131,6 +4201,51 @@ const VToolbarTitle = defineComponent({
4131
4201
 
4132
4202
  const DEFAULT_AUTO_SCROLL_TO_ELEMENT_OFFSET_TOP = -20;
4133
4203
  const DEFAULT_TEXTAREA_ROWS = 3;
4204
+ function mergeVuiServiceUISettings(base, overrides) {
4205
+ if (!overrides) {
4206
+ return base;
4207
+ }
4208
+
4209
+ const merged = { ...base
4210
+ };
4211
+ Object.entries(overrides).forEach(([key, value]) => {
4212
+ if (value) {
4213
+ merged[key] = value;
4214
+ }
4215
+ });
4216
+ return merged;
4217
+ }
4218
+ function mergeVuiServiceIconSettings(base, overrides) {
4219
+ if (!overrides) {
4220
+ return base;
4221
+ }
4222
+
4223
+ const merged = { ...base
4224
+ };
4225
+ Object.entries(overrides).forEach(([key, value]) => {
4226
+ if (value) {
4227
+ merged[key] = value;
4228
+ }
4229
+ });
4230
+ return merged;
4231
+ }
4232
+ function mergeVuiServiceOptions(base, overrides) {
4233
+ if (!overrides) {
4234
+ return base;
4235
+ }
4236
+
4237
+ const merged = { ...base,
4238
+ uiSettings: mergeVuiServiceUISettings(base.uiSettings, overrides.uiSettings),
4239
+ icons: mergeVuiServiceIconSettings(base.icons, overrides.icons)
4240
+ };
4241
+ const excludes = ['uiSettings', 'icons'];
4242
+ Object.entries(overrides).forEach(([key, value]) => {
4243
+ if (value && !excludes.includes(key)) {
4244
+ merged[key] = value;
4245
+ }
4246
+ });
4247
+ return merged;
4248
+ }
4134
4249
  class VuiService {
4135
4250
  get scroller() {
4136
4251
  return getDocumentScroller$1();
@@ -4267,6 +4382,18 @@ class VuiService {
4267
4382
 
4268
4383
  }
4269
4384
 
4385
+ function mergeVuiPluginOptions(base, override) {
4386
+ if (!override) return base;
4387
+ const merged = mergeVuiServiceOptions(base, override);
4388
+
4389
+ if (override.stack) {
4390
+ merged.stack = { ...merged.stack,
4391
+ ...override.stack
4392
+ };
4393
+ }
4394
+
4395
+ return merged;
4396
+ }
4270
4397
  class VuiPlugin {
4271
4398
  static installedApps = new Set();
4272
4399
 
@@ -4324,4 +4451,4 @@ function installVuiPlugin(app, opts) {
4324
4451
  return app.use(VuiPlugin, opts);
4325
4452
  }
4326
4453
 
4327
- export { CONTROL_FIELD_VARIANTS, CONTROL_SIZES, PAGINATION_ALIGNS, VApp, VBreadcrumbs, VButton, VButtonGroup, VCard, VCardActions, VCardContent, VCheckbox, VCheckboxGroup, VContentSwitcher, VDataTable, VDrawerLayout, VForm, VFormControl, VGridContainer, VGridItem, VHero, VIcon, VListTile, VNavigation, VNavigationItem, VOption, VOptionGroup, VPagination, VPaper, VRadio, VRadioGroup, VSelect, VSwitch, VSwitchGroup, VTabs, VTextField, VTextarea, VToolbar, VToolbarEdge, VToolbarMenu, VToolbarTitle, VUI_CHECKBOX_GROUP_SYMBOL, VUI_CHECKBOX_SYMBOL, VUI_FORM_SYMBOL, VUI_OPTION_SYMBOL, VUI_RADIO_GROUP_SYMBOL, VUI_RADIO_SYMBOL, VUI_SELECT_SYMBOL, VUI_SWITCH_GROUP_SYMBOL, VUI_SWITCH_SYMBOL, VUI_TEXTAREA_SYMBOL, VUI_TEXT_FIELD_SYMBOL, VUI_WYSIWYG_EDITOR_SYMBOL, VWysiwygEditor, VuiColorProviderInjectionKey, VuiControlFieldInjectionKey, VuiControlInjectionKey, VuiInjectionKey, VuiPlugin, VuiService, WysiwygBulletListTool, WysiwygFormatBoldTool, WysiwygFormatItalicTool, WysiwygFormatUnderlineTool, WysiwygHistoryTool, WysiwygLinkTool, WysiwygOrderedListTool, WysiwygTextColorTool, configureDataTableDefaults, createCardProps, createControlFieldProviderProps, createControlProps, createElevationProps, createListTileProps, createNavigationItemProps, createPaperBaseProps, createPaperProps, createRequiredChipRenderer, defineFormSelectorComponent, iconProps, installVuiPlugin, listTileEmits, paginationProps, rawIconProp, renderNavigationItemInput, resolveNavigationItemInput, resolveRawIconProp, useControl, useControlField, useElevation, useVui, useVuiColorProvider, vueButtonProps };
4454
+ export { CONTROL_FIELD_VARIANTS, CONTROL_SIZES, PAGINATION_ALIGNS, VApp, VBreadcrumbs, VButton, VButtonGroup, VCard, VCardActions, VCardContent, VCheckbox, VCheckboxGroup, VContentSwitcher, VDataTable, VDrawerLayout, VForm, VFormControl, VGridContainer, VGridItem, VHero, VIcon, VListTile, VNavigation, VNavigationItem, VOption, VOptionGroup, VPagination, VPaper, VRadio, VRadioGroup, VSelect, VSwitch, VSwitchGroup, VTabs, VTextField, VTextarea, VToolbar, VToolbarEdge, VToolbarMenu, VToolbarTitle, VUI_CHECKBOX_GROUP_SYMBOL, VUI_CHECKBOX_SYMBOL, VUI_FORM_SYMBOL, VUI_OPTION_SYMBOL, VUI_RADIO_GROUP_SYMBOL, VUI_RADIO_SYMBOL, VUI_SELECT_SYMBOL, VUI_SWITCH_GROUP_SYMBOL, VUI_SWITCH_SYMBOL, VUI_TEXTAREA_SYMBOL, VUI_TEXT_FIELD_SYMBOL, VUI_WYSIWYG_EDITOR_SYMBOL, VWysiwygEditor, VuiColorProviderInjectionKey, VuiControlFieldInjectionKey, VuiControlInjectionKey, VuiInjectionKey, VuiPlugin, VuiService, WysiwygBulletListTool, WysiwygFormatBoldTool, WysiwygFormatItalicTool, WysiwygFormatUnderlineTool, WysiwygHistoryTool, WysiwygLinkTool, WysiwygOrderedListTool, WysiwygTextColorTool, configureDataTableDefaults, createCardProps, createControlFieldProviderProps, createControlProps, createElevationProps, createListTileProps, createNavigationItemProps, createPaperBaseProps, createPaperProps, createRequiredChipRenderer, defineFormSelectorComponent, iconProps, installVuiPlugin, listTileEmits, mergeVuiPluginOptions, mergeVuiServiceIconSettings, mergeVuiServiceOptions, mergeVuiServiceUISettings, paginationProps, rawIconProp, renderNavigationItemInput, resolveNavigationItemInput, resolveRawIconProp, useControl, useControlField, useElevation, useVui, useVuiColorProvider, vueButtonProps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastkit/vui",
3
- "version": "0.7.21",
3
+ "version": "0.7.25",
4
4
  "description": "@fastkit/vui",
5
5
  "buildOptions": {
6
6
  "name": "Vui",
@@ -32,11 +32,11 @@
32
32
  "vue": "^3.2.26"
33
33
  },
34
34
  "dependencies": {
35
- "@fastkit/color-scheme": "0.7.21",
36
- "@fastkit/icon-font": "0.7.21",
37
- "@fastkit/tiny-logger": "0.7.21",
38
- "@fastkit/vite-kit": "0.7.21",
39
- "@fastkit/vue-kit": "0.7.21",
35
+ "@fastkit/color-scheme": "0.7.25",
36
+ "@fastkit/icon-font": "0.7.25",
37
+ "@fastkit/tiny-logger": "0.7.25",
38
+ "@fastkit/vite-kit": "0.7.25",
39
+ "@fastkit/vue-kit": "0.7.25",
40
40
  "@tiptap/extension-link": "^2.0.0-beta.35",
41
41
  "@tiptap/extension-underline": "^2.0.0-beta.22",
42
42
  "@tiptap/starter-kit": "^2.0.0-beta.168",
@@ -38,6 +38,7 @@ const DATA_TABLE_DEFAULTS = {
38
38
  limits: [5, 10, 20, 50, 100],
39
39
  limitDefault: 20,
40
40
  contorolThreshold: 10,
41
+ searchQuery: [] as string | string[],
41
42
  };
42
43
 
43
44
  export type DataTableDefaults = typeof DATA_TABLE_DEFAULTS;
@@ -126,6 +127,14 @@ export const VDataTable = defineComponent({
126
127
  default: () => DATA_TABLE_DEFAULTS.orderQuery,
127
128
  },
128
129
 
130
+ /**
131
+ * 検索クエリ名
132
+ */
133
+ searchQuery: {
134
+ type: [String, Array] as PropType<string | string[]>,
135
+ default: () => DATA_TABLE_DEFAULTS.searchQuery,
136
+ },
137
+
129
138
  /**
130
139
  * リミット件数クエリ名
131
140
  */
@@ -172,6 +181,10 @@ export const VDataTable = defineComponent({
172
181
  selectable: Boolean,
173
182
  fixedHeader: Boolean,
174
183
  maxHeight: [Number, String],
184
+ // eslint-disable-next-line vue/require-prop-types
185
+ noDataMessage: {} as PropType<VNodeChild | (() => VNodeChild)>,
186
+ // eslint-disable-next-line vue/require-prop-types
187
+ noResultsMessage: {} as PropType<VNodeChild | (() => VNodeChild)>,
175
188
  },
176
189
  emits: {
177
190
  input: (selecteds: string[]) => true,
@@ -196,6 +209,45 @@ export const VDataTable = defineComponent({
196
209
  ret.push(...headers.filter((h) => !h.hidden));
197
210
  return ret;
198
211
  });
212
+
213
+ const searchQueryValues = computed<string[]>(() => {
214
+ let { searchQuery } = props;
215
+ if (!searchQuery) {
216
+ return [];
217
+ }
218
+ if (!Array.isArray(searchQuery)) {
219
+ searchQuery = [searchQuery];
220
+ }
221
+ const values: string[] = [];
222
+ searchQuery.forEach((query) => {
223
+ const value = vui.location.getQuery(query);
224
+ if (value == null || value === '') {
225
+ return;
226
+ }
227
+ if (typeof value === 'object' && !Object.keys(value).length) {
228
+ return;
229
+ }
230
+ values.push(value);
231
+ });
232
+ return values;
233
+ });
234
+
235
+ const emptyMessage = computed(() => {
236
+ let message: VNodeChild | (() => VNodeChild);
237
+ if (searchQueryValues.value.length) {
238
+ message =
239
+ props.noResultsMessage ||
240
+ vui.setting('noResultsMessage') ||
241
+ 'No search results found.'; // 検索結果が見つかりませんでした。
242
+ } else {
243
+ message =
244
+ props.noDataMessage ||
245
+ vui.setting('noDataMessage') ||
246
+ 'No data was available.'; // データはありませんでした。
247
+ }
248
+ return typeof message === 'function' ? message() : message;
249
+ });
250
+
199
251
  const classesRef = computed(() => [
200
252
  {
201
253
  'v-data-table--fixed-header': props.fixedHeader,
@@ -724,7 +776,7 @@ export const VDataTable = defineComponent({
724
776
  <div class="v-data-table__body container-pull">
725
777
  {isEmpty ? (
726
778
  <div class="v-data-table__empty--message">
727
- {/* {this.computedEmptyMessage} */}
779
+ {emptyMessage.value}
728
780
  </div>
729
781
  ) : (
730
782
  <VPaper
@@ -64,6 +64,17 @@ export const VFormControl = defineComponent({
64
64
  ),
65
65
  });
66
66
 
67
+ const hinttipDelay = computed(() => {
68
+ let { hinttipDelay } = control;
69
+ if (hinttipDelay == null) {
70
+ hinttipDelay = vui.setting('hinttipDelay');
71
+ }
72
+ if (hinttipDelay == null) {
73
+ hinttipDelay = 500;
74
+ }
75
+ return hinttipDelay;
76
+ });
77
+
67
78
  ctx.expose(control.expose());
68
79
 
69
80
  const colorProvider = useVuiColorProvider();
@@ -98,6 +109,7 @@ export const VFormControl = defineComponent({
98
109
  const message = control.renderMessage();
99
110
  const appends = control.renderInfoAppends();
100
111
  const hinttip = control.renderHinttip();
112
+ const _hinttipDelay = hinttipDelay.value;
101
113
 
102
114
  return (
103
115
  <div class={['v-form-control', classes.value]}>
@@ -112,7 +124,12 @@ export const VFormControl = defineComponent({
112
124
  {hinttip && (
113
125
  <VTooltip
114
126
  top
115
- openOnHover={false}
127
+ openOnHover={_hinttipDelay !== 'click'}
128
+ openDelay={
129
+ typeof _hinttipDelay === 'number'
130
+ ? _hinttipDelay
131
+ : undefined
132
+ }
116
133
  v-slots={{
117
134
  activator: (ctx) => (
118
135
  <a
package/src/plugin.tsx CHANGED
@@ -1,5 +1,11 @@
1
1
  import { App } from 'vue';
2
- import { VuiService, VuiServiceOptions, VuiInjectionKey } from './service';
2
+ import {
3
+ VuiService,
4
+ VuiServiceOptions,
5
+ RawVuiServiceOptions,
6
+ mergeVuiServiceOptions,
7
+ VuiInjectionKey,
8
+ } from './service';
3
9
  import {
4
10
  installVueStackPlugin,
5
11
  VueStackServiceOptions,
@@ -14,6 +20,25 @@ export interface VuiPluginOptions extends VuiServiceOptions {
14
20
  stack?: VuiPluginStackOptions;
15
21
  }
16
22
 
23
+ export interface RawVuiPluginOptions extends RawVuiServiceOptions {
24
+ stack?: VuiPluginStackOptions;
25
+ }
26
+
27
+ export function mergeVuiPluginOptions(
28
+ base: VuiPluginOptions,
29
+ override?: RawVuiPluginOptions,
30
+ ): VuiPluginOptions {
31
+ if (!override) return base;
32
+ const merged: VuiPluginOptions = mergeVuiServiceOptions(base, override);
33
+ if (override.stack) {
34
+ merged.stack = {
35
+ ...merged.stack,
36
+ ...override.stack,
37
+ };
38
+ }
39
+ return merged;
40
+ }
41
+
17
42
  declare module '@vue/runtime-core' {
18
43
  export interface ComponentCustomProperties {
19
44
  $vui: VuiService;
package/src/service.tsx CHANGED
@@ -14,7 +14,7 @@ import { RouterLink } from 'vue-router';
14
14
  import { LocationService, setDefaultRouterLink } from '@fastkit/vue-utils';
15
15
  import { VForm } from './components/VForm';
16
16
  import { VTextField, TextFieldInput } from './components/VTextField';
17
- import { VueForm } from '@fastkit/vue-form-control';
17
+ import { VueForm, FormControlHinttipDelay } from '@fastkit/vue-form-control';
18
18
  import { getDocumentScroller } from '@fastkit/vue-scroller';
19
19
 
20
20
  export interface VuiPromptOptions extends Partial<VDialogProps> {
@@ -50,6 +50,29 @@ export interface VuiServiceUISettings {
50
50
  color?: ScopeName;
51
51
  variant?: ColorVariant;
52
52
  };
53
+ hinttipDelay?: FormControlHinttipDelay;
54
+ noDataMessage?: VNodeChild | (() => VNodeChild);
55
+ noResultsMessage?: VNodeChild | (() => VNodeChild);
56
+ }
57
+
58
+ export type RawVuiServiceUISettings = Partial<VuiServiceUISettings>;
59
+
60
+ export function mergeVuiServiceUISettings(
61
+ base: VuiServiceUISettings,
62
+ overrides?: RawVuiServiceUISettings,
63
+ ): VuiServiceUISettings {
64
+ if (!overrides) {
65
+ return base;
66
+ }
67
+ const merged: VuiServiceUISettings = {
68
+ ...base,
69
+ };
70
+ Object.entries(overrides).forEach(([key, value]) => {
71
+ if (value) {
72
+ (merged as any)[key] = value;
73
+ }
74
+ });
75
+ return merged;
53
76
  }
54
77
 
55
78
  export interface VuiServiceIconSettings {
@@ -72,6 +95,26 @@ export interface VuiServiceIconSettings {
72
95
  clear: IconName;
73
96
  }
74
97
 
98
+ export type RawVuiServiceIconSettings = Partial<VuiServiceIconSettings>;
99
+
100
+ export function mergeVuiServiceIconSettings(
101
+ base: VuiServiceIconSettings,
102
+ overrides?: RawVuiServiceIconSettings,
103
+ ): VuiServiceIconSettings {
104
+ if (!overrides) {
105
+ return base;
106
+ }
107
+ const merged: VuiServiceIconSettings = {
108
+ ...base,
109
+ };
110
+ Object.entries(overrides).forEach(([key, value]) => {
111
+ if (value) {
112
+ (merged as any)[key] = value;
113
+ }
114
+ });
115
+ return merged;
116
+ }
117
+
75
118
  export type VuiVNodeResolver = () => VNodeChild;
76
119
 
77
120
  export interface VuiServiceOptions {
@@ -86,6 +129,36 @@ export interface VuiServiceOptions {
86
129
  requiredChip?: VuiVNodeResolver;
87
130
  }
88
131
 
132
+ export interface RawVuiServiceOptions
133
+ extends Omit<Partial<VuiServiceOptions>, 'uiSettings' | 'icons'> {
134
+ uiSettings?: RawVuiServiceUISettings;
135
+ icons?: RawVuiServiceIconSettings;
136
+ }
137
+
138
+ export function mergeVuiServiceOptions(
139
+ base: VuiServiceOptions,
140
+ overrides?: RawVuiServiceOptions,
141
+ ): VuiServiceOptions {
142
+ if (!overrides) {
143
+ return base;
144
+ }
145
+ const merged: VuiServiceOptions = {
146
+ ...base,
147
+ uiSettings: mergeVuiServiceUISettings(
148
+ base.uiSettings,
149
+ overrides.uiSettings,
150
+ ),
151
+ icons: mergeVuiServiceIconSettings(base.icons, overrides.icons),
152
+ };
153
+ const excludes = ['uiSettings', 'icons'];
154
+ Object.entries(overrides).forEach(([key, value]) => {
155
+ if (value && !excludes.includes(key)) {
156
+ (merged as any)[key] = value;
157
+ }
158
+ });
159
+ return merged;
160
+ }
161
+
89
162
  export class VuiService {
90
163
  readonly options: VuiServiceOptions;
91
164
 
@@ -30,20 +30,21 @@ import './setup.scss';
30
30
  import type { App } from 'vue';
31
31
  import type { Router } from 'vue-router';
32
32
  import { VPageLink } from '@fastkit/vue-page';
33
- import { installVuiPlugin as _installVuiPlugin, VuiPluginOptions } from '@fastkit/vui';
33
+ import { installVuiPlugin as _installVuiPlugin, RawVuiPluginOptions, mergeVuiPluginOptions } from '@fastkit/vui';
34
34
  import { colorScheme } from '<%~ it.colorScheme %>';
35
35
  import '<%~ it.mediaMatch %>';
36
36
  import './icon-font';
37
37
  import '${STYLE_AFTER_EFFECTS_PATH}';
38
38
 
39
- export function installVui(settings: { app: App, router: Router }) {
40
- _installVuiPlugin(settings.app, {
39
+ export function installVui(settings: { app: App, router: Router }, options?: RawVuiPluginOptions) {
40
+ const merged = mergeVuiPluginOptions({
41
41
  RouterLink: VPageLink,
42
42
  colorScheme,
43
43
  uiSettings: <%~ it.uiSettings %>,
44
44
  icons: <%~ it.icons %>,
45
45
  ...settings,
46
- });
46
+ }, options);
47
+ _installVuiPlugin(settings.app, merged);
47
48
  }
48
49
 
49
50
  export default installVui;