@fastkit/vui 0.7.19 → 0.7.23

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;
@@ -123,6 +124,7 @@ function viteVuiPlugin(options = {}) {
123
124
  editorUndo: 'mdi-undo-variant',
124
125
  editorRedo: 'mdi-redo-variant',
125
126
  hinttip: 'mdi-help-circle-outline',
127
+ clear: 'mdi-close',
126
128
  // navigationExpand: (gen, active) => {
127
129
  // return gen({
128
130
  // name: 'mdi-menu-down' as any,
@@ -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,CAwJrB"}
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
@@ -2149,7 +2149,16 @@ const VSelect = vue.defineComponent({
2149
2149
  }, [vue.createVNode("div", {
2150
2150
  "class": "v-select__selections__inner"
2151
2151
  }, [this.renderSelections(selectedItems)])])],
2152
- endAdornment: () => vue.createVNode(VIcon, {
2152
+ endAdornment: () => this.clearable && this.nodeControl.value != null && vue.createVNode(VButton, {
2153
+ "key": "clear",
2154
+ "icon": this.$vui.icon('clear'),
2155
+ "rounded": true,
2156
+ "onClick": ev => {
2157
+ ev.stopPropagation();
2158
+ this.nodeControl.clear();
2159
+ }
2160
+ }, null) || vue.createVNode(VIcon, {
2161
+ "key": "icon",
2153
2162
  "name": this.iconName,
2154
2163
  "rotate": this.menuOpened ? 180 : 0
2155
2164
  }, null)
@@ -3423,6 +3432,11 @@ const VDataTable = vue.defineComponent({
3423
3432
  default: () => DATA_TABLE_DEFAULTS.orderQuery
3424
3433
  },
3425
3434
 
3435
+ /**
3436
+ * 検索クエリ名
3437
+ */
3438
+ searchQuery: [String, Array],
3439
+
3426
3440
  /**
3427
3441
  * リミット件数クエリ名
3428
3442
  */
@@ -3468,7 +3482,11 @@ const VDataTable = vue.defineComponent({
3468
3482
  },
3469
3483
  selectable: Boolean,
3470
3484
  fixedHeader: Boolean,
3471
- maxHeight: [Number, String]
3485
+ maxHeight: [Number, String],
3486
+ // eslint-disable-next-line vue/require-prop-types
3487
+ noDataMessage: {},
3488
+ // eslint-disable-next-line vue/require-prop-types
3489
+ noResultsMessage: {}
3472
3490
  },
3473
3491
  emits: {
3474
3492
  input: selecteds => true
@@ -3497,6 +3515,46 @@ const VDataTable = vue.defineComponent({
3497
3515
  ret.push(...headers.filter(h => !h.hidden));
3498
3516
  return ret;
3499
3517
  });
3518
+ const searchQueryValues = vue.computed(() => {
3519
+ let {
3520
+ searchQuery
3521
+ } = props;
3522
+
3523
+ if (!searchQuery) {
3524
+ return [];
3525
+ }
3526
+
3527
+ if (!Array.isArray(searchQuery)) {
3528
+ searchQuery = [searchQuery];
3529
+ }
3530
+
3531
+ const values = [];
3532
+ searchQuery.forEach(query => {
3533
+ const value = vui.location.getQuery(query);
3534
+
3535
+ if (value == null || value === '') {
3536
+ return;
3537
+ }
3538
+
3539
+ if (typeof value === 'object' && !Object.keys(value).length) {
3540
+ return;
3541
+ }
3542
+
3543
+ values.push(value);
3544
+ });
3545
+ return values;
3546
+ });
3547
+ const emptyMessage = vue.computed(() => {
3548
+ let message;
3549
+
3550
+ if (searchQueryValues.value.length) {
3551
+ message = props.noResultsMessage || vui.setting('noResultsMessage') || 'No search results found.'; // 検索結果が見つかりませんでした。
3552
+ } else {
3553
+ message = props.noDataMessage || vui.setting('noDataMessage') || 'No data was available.'; // データはありませんでした。
3554
+ }
3555
+
3556
+ return typeof message === 'function' ? message() : message;
3557
+ });
3500
3558
  const classesRef = vue.computed(() => [{
3501
3559
  'v-data-table--fixed-header': props.fixedHeader
3502
3560
  }]);
@@ -3963,7 +4021,7 @@ const VDataTable = vue.defineComponent({
3963
4021
  "class": "v-data-table__body container-pull"
3964
4022
  }, [isEmpty ? vue.createVNode("div", {
3965
4023
  "class": "v-data-table__empty--message"
3966
- }, null) : vue.createVNode(VPaper, {
4024
+ }, [emptyMessage.value]) : vue.createVNode(VPaper, {
3967
4025
  "class": "v-data-table__body__inner",
3968
4026
  "style": bodyInnerStylesRef.value
3969
4027
  }, {
@@ -4127,6 +4185,51 @@ const VToolbarTitle = vue.defineComponent({
4127
4185
 
4128
4186
  const DEFAULT_AUTO_SCROLL_TO_ELEMENT_OFFSET_TOP = -20;
4129
4187
  const DEFAULT_TEXTAREA_ROWS = 3;
4188
+ function mergeVuiServiceUISettings(base, overrides) {
4189
+ if (!overrides) {
4190
+ return base;
4191
+ }
4192
+
4193
+ const merged = { ...base
4194
+ };
4195
+ Object.entries(overrides).forEach(([key, value]) => {
4196
+ if (value) {
4197
+ merged[key] = value;
4198
+ }
4199
+ });
4200
+ return merged;
4201
+ }
4202
+ function mergeVuiServiceIconSettings(base, overrides) {
4203
+ if (!overrides) {
4204
+ return base;
4205
+ }
4206
+
4207
+ const merged = { ...base
4208
+ };
4209
+ Object.entries(overrides).forEach(([key, value]) => {
4210
+ if (value) {
4211
+ merged[key] = value;
4212
+ }
4213
+ });
4214
+ return merged;
4215
+ }
4216
+ function mergeVuiServiceOptions(base, overrides) {
4217
+ if (!overrides) {
4218
+ return base;
4219
+ }
4220
+
4221
+ const merged = { ...base,
4222
+ uiSettings: mergeVuiServiceUISettings(base.uiSettings, overrides.uiSettings),
4223
+ icons: mergeVuiServiceIconSettings(base.icons, overrides.icons)
4224
+ };
4225
+ const excludes = ['uiSettings', 'icons'];
4226
+ Object.entries(overrides).forEach(([key, value]) => {
4227
+ if (value && !excludes.includes(key)) {
4228
+ merged[key] = value;
4229
+ }
4230
+ });
4231
+ return merged;
4232
+ }
4130
4233
  class VuiService {
4131
4234
  get scroller() {
4132
4235
  return vueScroller.getDocumentScroller();
@@ -4263,6 +4366,18 @@ class VuiService {
4263
4366
 
4264
4367
  }
4265
4368
 
4369
+ function mergeVuiPluginOptions(base, override) {
4370
+ if (!override) return base;
4371
+ const merged = mergeVuiServiceOptions(base, override);
4372
+
4373
+ if (override.stack) {
4374
+ merged.stack = { ...merged.stack,
4375
+ ...override.stack
4376
+ };
4377
+ }
4378
+
4379
+ return merged;
4380
+ }
4266
4381
  class VuiPlugin {
4267
4382
  static installedApps = new Set();
4268
4383
 
@@ -4406,6 +4521,10 @@ exports.defineFormSelectorComponent = defineFormSelectorComponent;
4406
4521
  exports.iconProps = iconProps;
4407
4522
  exports.installVuiPlugin = installVuiPlugin;
4408
4523
  exports.listTileEmits = listTileEmits;
4524
+ exports.mergeVuiPluginOptions = mergeVuiPluginOptions;
4525
+ exports.mergeVuiServiceIconSettings = mergeVuiServiceIconSettings;
4526
+ exports.mergeVuiServiceOptions = mergeVuiServiceOptions;
4527
+ exports.mergeVuiServiceUISettings = mergeVuiServiceUISettings;
4409
4528
  exports.paginationProps = paginationProps;
4410
4529
  exports.rawIconProp = rawIconProp;
4411
4530
  exports.renderNavigationItemInput = renderNavigationItemInput;
@@ -2149,7 +2149,16 @@ const VSelect = vue.defineComponent({
2149
2149
  }, [vue.createVNode("div", {
2150
2150
  "class": "v-select__selections__inner"
2151
2151
  }, [this.renderSelections(selectedItems)])])],
2152
- endAdornment: () => vue.createVNode(VIcon, {
2152
+ endAdornment: () => this.clearable && this.nodeControl.value != null && vue.createVNode(VButton, {
2153
+ "key": "clear",
2154
+ "icon": this.$vui.icon('clear'),
2155
+ "rounded": true,
2156
+ "onClick": ev => {
2157
+ ev.stopPropagation();
2158
+ this.nodeControl.clear();
2159
+ }
2160
+ }, null) || vue.createVNode(VIcon, {
2161
+ "key": "icon",
2153
2162
  "name": this.iconName,
2154
2163
  "rotate": this.menuOpened ? 180 : 0
2155
2164
  }, null)
@@ -3423,6 +3432,11 @@ const VDataTable = vue.defineComponent({
3423
3432
  default: () => DATA_TABLE_DEFAULTS.orderQuery
3424
3433
  },
3425
3434
 
3435
+ /**
3436
+ * 検索クエリ名
3437
+ */
3438
+ searchQuery: [String, Array],
3439
+
3426
3440
  /**
3427
3441
  * リミット件数クエリ名
3428
3442
  */
@@ -3468,7 +3482,11 @@ const VDataTable = vue.defineComponent({
3468
3482
  },
3469
3483
  selectable: Boolean,
3470
3484
  fixedHeader: Boolean,
3471
- maxHeight: [Number, String]
3485
+ maxHeight: [Number, String],
3486
+ // eslint-disable-next-line vue/require-prop-types
3487
+ noDataMessage: {},
3488
+ // eslint-disable-next-line vue/require-prop-types
3489
+ noResultsMessage: {}
3472
3490
  },
3473
3491
  emits: {
3474
3492
  input: selecteds => true
@@ -3497,6 +3515,46 @@ const VDataTable = vue.defineComponent({
3497
3515
  ret.push(...headers.filter(h => !h.hidden));
3498
3516
  return ret;
3499
3517
  });
3518
+ const searchQueryValues = vue.computed(() => {
3519
+ let {
3520
+ searchQuery
3521
+ } = props;
3522
+
3523
+ if (!searchQuery) {
3524
+ return [];
3525
+ }
3526
+
3527
+ if (!Array.isArray(searchQuery)) {
3528
+ searchQuery = [searchQuery];
3529
+ }
3530
+
3531
+ const values = [];
3532
+ searchQuery.forEach(query => {
3533
+ const value = vui.location.getQuery(query);
3534
+
3535
+ if (value == null || value === '') {
3536
+ return;
3537
+ }
3538
+
3539
+ if (typeof value === 'object' && !Object.keys(value).length) {
3540
+ return;
3541
+ }
3542
+
3543
+ values.push(value);
3544
+ });
3545
+ return values;
3546
+ });
3547
+ const emptyMessage = vue.computed(() => {
3548
+ let message;
3549
+
3550
+ if (searchQueryValues.value.length) {
3551
+ message = props.noResultsMessage || vui.setting('noResultsMessage') || 'No search results found.'; // 検索結果が見つかりませんでした。
3552
+ } else {
3553
+ message = props.noDataMessage || vui.setting('noDataMessage') || 'No data was available.'; // データはありませんでした。
3554
+ }
3555
+
3556
+ return typeof message === 'function' ? message() : message;
3557
+ });
3500
3558
  const classesRef = vue.computed(() => [{
3501
3559
  'v-data-table--fixed-header': props.fixedHeader
3502
3560
  }]);
@@ -3963,7 +4021,7 @@ const VDataTable = vue.defineComponent({
3963
4021
  "class": "v-data-table__body container-pull"
3964
4022
  }, [isEmpty ? vue.createVNode("div", {
3965
4023
  "class": "v-data-table__empty--message"
3966
- }, null) : vue.createVNode(VPaper, {
4024
+ }, [emptyMessage.value]) : vue.createVNode(VPaper, {
3967
4025
  "class": "v-data-table__body__inner",
3968
4026
  "style": bodyInnerStylesRef.value
3969
4027
  }, {
@@ -4127,6 +4185,51 @@ const VToolbarTitle = vue.defineComponent({
4127
4185
 
4128
4186
  const DEFAULT_AUTO_SCROLL_TO_ELEMENT_OFFSET_TOP = -20;
4129
4187
  const DEFAULT_TEXTAREA_ROWS = 3;
4188
+ function mergeVuiServiceUISettings(base, overrides) {
4189
+ if (!overrides) {
4190
+ return base;
4191
+ }
4192
+
4193
+ const merged = { ...base
4194
+ };
4195
+ Object.entries(overrides).forEach(([key, value]) => {
4196
+ if (value) {
4197
+ merged[key] = value;
4198
+ }
4199
+ });
4200
+ return merged;
4201
+ }
4202
+ function mergeVuiServiceIconSettings(base, overrides) {
4203
+ if (!overrides) {
4204
+ return base;
4205
+ }
4206
+
4207
+ const merged = { ...base
4208
+ };
4209
+ Object.entries(overrides).forEach(([key, value]) => {
4210
+ if (value) {
4211
+ merged[key] = value;
4212
+ }
4213
+ });
4214
+ return merged;
4215
+ }
4216
+ function mergeVuiServiceOptions(base, overrides) {
4217
+ if (!overrides) {
4218
+ return base;
4219
+ }
4220
+
4221
+ const merged = { ...base,
4222
+ uiSettings: mergeVuiServiceUISettings(base.uiSettings, overrides.uiSettings),
4223
+ icons: mergeVuiServiceIconSettings(base.icons, overrides.icons)
4224
+ };
4225
+ const excludes = ['uiSettings', 'icons'];
4226
+ Object.entries(overrides).forEach(([key, value]) => {
4227
+ if (value && !excludes.includes(key)) {
4228
+ merged[key] = value;
4229
+ }
4230
+ });
4231
+ return merged;
4232
+ }
4130
4233
  class VuiService {
4131
4234
  get scroller() {
4132
4235
  return vueScroller.getDocumentScroller();
@@ -4263,6 +4366,18 @@ class VuiService {
4263
4366
 
4264
4367
  }
4265
4368
 
4369
+ function mergeVuiPluginOptions(base, override) {
4370
+ if (!override) return base;
4371
+ const merged = mergeVuiServiceOptions(base, override);
4372
+
4373
+ if (override.stack) {
4374
+ merged.stack = { ...merged.stack,
4375
+ ...override.stack
4376
+ };
4377
+ }
4378
+
4379
+ return merged;
4380
+ }
4266
4381
  class VuiPlugin {
4267
4382
  static installedApps = new Set();
4268
4383
 
@@ -4406,6 +4521,10 @@ exports.defineFormSelectorComponent = defineFormSelectorComponent;
4406
4521
  exports.iconProps = iconProps;
4407
4522
  exports.installVuiPlugin = installVuiPlugin;
4408
4523
  exports.listTileEmits = listTileEmits;
4524
+ exports.mergeVuiPluginOptions = mergeVuiPluginOptions;
4525
+ exports.mergeVuiServiceIconSettings = mergeVuiServiceIconSettings;
4526
+ exports.mergeVuiServiceOptions = mergeVuiServiceOptions;
4527
+ exports.mergeVuiServiceUISettings = mergeVuiServiceUISettings;
4409
4528
  exports.paginationProps = paginationProps;
4410
4529
  exports.rawIconProp = rawIconProp;
4411
4530
  exports.renderNavigationItemInput = renderNavigationItemInput;