@vc-shell/framework 1.0.222 → 1.0.224

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/core/types/index.ts +2 -1
  3. package/dist/core/plugins/modularity/index.d.ts +3 -3
  4. package/dist/core/plugins/modularity/index.d.ts.map +1 -1
  5. package/dist/core/types/index.d.ts +2 -1
  6. package/dist/core/types/index.d.ts.map +1 -1
  7. package/dist/framework.js +22280 -22124
  8. package/dist/index.css +1 -1
  9. package/dist/index.d.ts +0 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/locales/en.json +2 -1
  12. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -1
  13. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -1
  14. package/dist/shared/components/error-interceptor/index.d.ts.map +1 -1
  15. package/dist/shared/components/notifications/components/notification-container/index.d.ts.map +1 -1
  16. package/dist/shared/modules/dynamic/components/SchemaRender.d.ts +6 -0
  17. package/dist/shared/modules/dynamic/components/SchemaRender.d.ts.map +1 -1
  18. package/dist/shared/modules/dynamic/components/fields/Button.d.ts +2 -0
  19. package/dist/shared/modules/dynamic/components/fields/Button.d.ts.map +1 -1
  20. package/dist/shared/modules/dynamic/components/fields/Card.d.ts +2 -0
  21. package/dist/shared/modules/dynamic/components/fields/Card.d.ts.map +1 -1
  22. package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts +2 -0
  23. package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts.map +1 -1
  24. package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts +2 -0
  25. package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts.map +1 -1
  26. package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts +2 -0
  27. package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts.map +1 -1
  28. package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts +2 -0
  29. package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts.map +1 -1
  30. package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts +2 -0
  31. package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts.map +1 -1
  32. package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts +2 -0
  33. package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts.map +1 -1
  34. package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts +2 -0
  35. package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
  36. package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts +2 -0
  37. package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts.map +1 -1
  38. package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts +2 -0
  39. package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
  40. package/dist/shared/modules/dynamic/components/fields/InputField.d.ts +2 -0
  41. package/dist/shared/modules/dynamic/components/fields/InputField.d.ts.map +1 -1
  42. package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts +2 -0
  43. package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts.map +1 -1
  44. package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts +2 -0
  45. package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts.map +1 -1
  46. package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts +2 -0
  47. package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts.map +1 -1
  48. package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts +2 -0
  49. package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts.map +1 -1
  50. package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts +2 -0
  51. package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts.map +1 -1
  52. package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts +2 -0
  53. package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts.map +1 -1
  54. package/dist/shared/modules/dynamic/components/fields/Table.d.ts +10 -8
  55. package/dist/shared/modules/dynamic/components/fields/Table.d.ts.map +1 -1
  56. package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts +2 -0
  57. package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts.map +1 -1
  58. package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts +2 -0
  59. package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts.map +1 -1
  60. package/dist/shared/modules/dynamic/components/fields/props.d.ts +2 -0
  61. package/dist/shared/modules/dynamic/components/fields/props.d.ts.map +1 -1
  62. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +15 -9
  63. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +1 -1
  64. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts +19 -3
  65. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
  66. package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts +6 -0
  67. package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts.map +1 -1
  68. package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts +10 -4
  69. package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts.map +1 -1
  70. package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts +7 -1
  71. package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts.map +1 -1
  72. package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts +9 -3
  73. package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts.map +1 -1
  74. package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts +8 -2
  75. package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts.map +1 -1
  76. package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts +11 -5
  77. package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts.map +1 -1
  78. package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts +6 -0
  79. package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts.map +1 -1
  80. package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts +9 -3
  81. package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts.map +1 -1
  82. package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts +10 -4
  83. package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts.map +1 -1
  84. package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts +6 -0
  85. package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts.map +1 -1
  86. package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts +8 -2
  87. package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts.map +1 -1
  88. package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts +13 -7
  89. package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts.map +1 -1
  90. package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts +9 -3
  91. package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts.map +1 -1
  92. package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts +7 -1
  93. package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts.map +1 -1
  94. package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts +6 -0
  95. package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts.map +1 -1
  96. package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts +6 -0
  97. package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts.map +1 -1
  98. package/dist/shared/modules/dynamic/composables/useFilterBuilder/index.d.ts +1 -1
  99. package/dist/shared/modules/dynamic/composables/useFilterBuilder/index.d.ts.map +1 -1
  100. package/dist/shared/modules/dynamic/composables/useToolbarReducer/index.d.ts +0 -1
  101. package/dist/shared/modules/dynamic/composables/useToolbarReducer/index.d.ts.map +1 -1
  102. package/dist/shared/modules/dynamic/factories/base/useDetailsFactory.d.ts +3 -1
  103. package/dist/shared/modules/dynamic/factories/base/useDetailsFactory.d.ts.map +1 -1
  104. package/dist/shared/modules/dynamic/factories/base/useListFactory.d.ts +1 -1
  105. package/dist/shared/modules/dynamic/factories/base/useListFactory.d.ts.map +1 -1
  106. package/dist/shared/modules/dynamic/factories/types/index.d.ts +14 -2
  107. package/dist/shared/modules/dynamic/factories/types/index.d.ts.map +1 -1
  108. package/dist/shared/modules/dynamic/helpers/nodeBuilder.d.ts.map +1 -1
  109. package/dist/shared/modules/dynamic/helpers/override.d.ts.map +1 -1
  110. package/dist/shared/modules/dynamic/helpers/visibilityHandler.d.ts.map +1 -1
  111. package/dist/shared/modules/dynamic/index.d.ts +4 -4
  112. package/dist/shared/modules/dynamic/index.d.ts.map +1 -1
  113. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +2 -0
  114. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
  115. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
  116. package/dist/shared/modules/dynamic/types/index.d.ts +6 -17
  117. package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
  118. package/dist/tsconfig.tsbuildinfo +1 -1
  119. package/dist/ui/components/atoms/vc-badge/vc-badge.stories.d.ts +4 -4
  120. package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts +11 -11
  121. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +7 -7
  122. package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts.map +1 -1
  123. package/dist/ui/components/atoms/vc-hint/vc-hint.stories.d.ts +1 -1
  124. package/dist/ui/components/atoms/vc-icon/vc-icon.stories.d.ts +3 -3
  125. package/dist/ui/components/atoms/vc-image/vc-image.stories.d.ts +3 -3
  126. package/dist/ui/components/atoms/vc-label/vc-label.stories.d.ts +2 -2
  127. package/dist/ui/components/atoms/vc-link/vc-link.stories.d.ts +1 -1
  128. package/dist/ui/components/atoms/vc-progress/vc-progress.stories.d.ts +2 -2
  129. package/dist/ui/components/atoms/vc-status/vc-status.stories.d.ts +4 -4
  130. package/dist/ui/components/atoms/vc-switch/vc-switch.stories.d.ts +1 -1
  131. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.stories.d.ts +1 -1
  132. package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.stories.d.ts +10 -10
  133. package/dist/ui/components/molecules/vc-editor/vc-editor.stories.d.ts +1 -1
  134. package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts.map +1 -1
  135. package/dist/ui/components/molecules/vc-field/vc-field.stories.d.ts +95 -2
  136. package/dist/ui/components/molecules/vc-field/vc-field.stories.d.ts.map +1 -1
  137. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.stories.d.ts +2 -2
  138. package/dist/ui/components/molecules/vc-input/vc-input.stories.d.ts +2 -2
  139. package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.stories.d.ts +2 -2
  140. package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts.map +1 -1
  141. package/dist/ui/components/molecules/vc-radio-button/vc-radio-button.stories.d.ts +8 -8
  142. package/dist/ui/components/molecules/vc-rating/vc-rating.stories.d.ts +1 -1
  143. package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
  144. package/dist/ui/components/molecules/vc-slider/index.d.ts.map +1 -1
  145. package/dist/ui/components/molecules/vc-slider/vc-slider.stories.d.ts +3 -3
  146. package/dist/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts.map +1 -1
  147. package/dist/ui/components/organisms/vc-gallery/vc-gallery.stories.d.ts +1 -1
  148. package/dist/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue.d.ts.map +1 -1
  149. package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
  150. package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts +1 -0
  151. package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts.map +1 -1
  152. package/dist/ui/components/organisms/vc-table/_internal/vc-table-empty/vc-table-empty.vue.d.ts +42 -0
  153. package/dist/ui/components/organisms/vc-table/_internal/vc-table-empty/vc-table-empty.vue.d.ts.map +1 -0
  154. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue.d.ts.map +1 -1
  155. package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts +15 -105
  156. package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts.map +1 -1
  157. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts +3 -21
  158. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
  159. package/package.json +4 -4
  160. package/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue +1 -0
  161. package/shared/components/blade-navigation/composables/useBladeNavigation/index.ts +20 -9
  162. package/shared/modules/dynamic/components/fields/Card.ts +1 -0
  163. package/shared/modules/dynamic/components/fields/GalleryField.ts +3 -2
  164. package/shared/modules/dynamic/components/fields/InputCurrency.ts +1 -4
  165. package/shared/modules/dynamic/components/fields/InputField.ts +1 -5
  166. package/shared/modules/dynamic/components/fields/MultivalueField.ts +1 -4
  167. package/shared/modules/dynamic/components/fields/SelectField.ts +1 -4
  168. package/shared/modules/dynamic/components/fields/Table.ts +61 -21
  169. package/shared/modules/dynamic/components/fields/storybook/Card.stories.ts +10 -0
  170. package/shared/modules/dynamic/components/fields/storybook/ContentField.stories.ts +1 -1
  171. package/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.ts +1 -1
  172. package/shared/modules/dynamic/components/fields/storybook/InputField.stories.ts +1 -1
  173. package/shared/modules/dynamic/components/fields/storybook/SelectField.stories.ts +4 -4
  174. package/shared/modules/dynamic/composables/useFilterBuilder/index.ts +1 -1
  175. package/shared/modules/dynamic/composables/useToolbarReducer/index.ts +0 -14
  176. package/shared/modules/dynamic/factories/base/useDetailsFactory.ts +12 -1
  177. package/shared/modules/dynamic/factories/types/index.ts +20 -2
  178. package/shared/modules/dynamic/helpers/nodeBuilder.ts +11 -3
  179. package/shared/modules/dynamic/pages/dynamic-blade-form.vue +16 -11
  180. package/shared/modules/dynamic/pages/dynamic-blade-list.vue +37 -29
  181. package/shared/modules/dynamic/types/index.ts +6 -16
  182. package/ui/components/atoms/vc-card/vc-card.vue +2 -2
  183. package/ui/components/atoms/vc-container/vc-container.vue +71 -128
  184. package/ui/components/atoms/vc-progress/vc-progress.stories.ts +1 -1
  185. package/ui/components/atoms/vc-status/vc-status.stories.ts +1 -1
  186. package/ui/components/molecules/vc-editor/vc-editor.vue +3 -0
  187. package/ui/components/molecules/vc-field/vc-field.stories.ts +2 -2
  188. package/ui/components/molecules/vc-input/vc-input.stories.ts +1 -1
  189. package/ui/components/molecules/vc-select/vc-select.vue +3 -3
  190. package/ui/components/organisms/vc-app/vc-app.vue +2 -2
  191. package/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue +18 -20
  192. package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +23 -16
  193. package/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue +8 -1
  194. package/ui/components/organisms/vc-table/_internal/vc-table-empty/vc-table-empty.vue +76 -0
  195. package/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue +9 -7
  196. package/ui/components/organisms/vc-table/vc-table.vue +188 -358
@@ -37,7 +37,7 @@
37
37
  v-model="item"
38
38
  :ui-schema="form.children"
39
39
  :context="bladeContext"
40
- :current-locale="scope?.multilanguage?.currentLocale"
40
+ :current-locale="toValue(unreffedScope)?.multilanguage?.currentLocale"
41
41
  ></SchemaRender>
42
42
  </VcForm>
43
43
  </div>
@@ -158,6 +158,7 @@ const isReady = ref(false);
158
158
  const activeWidgetExposed = ref<CoreBladeExposed>();
159
159
  const isBladeEditable = computed(() => !toValue("disabled" in toValue(scope || {}) && toValue(scope || {}).disabled));
160
160
  const settings = computed(() => props.model?.settings);
161
+ const unreffedScope = reactiveComputed(() => toValue(scope) ?? {});
161
162
 
162
163
  const { moduleNotifications, markAsRead } = useNotifications(settings.value?.pushNotificationType);
163
164
 
@@ -220,24 +221,29 @@ const bladeStatus = computed(() => {
220
221
  });
221
222
 
222
223
  const bladeMultilanguage = reactiveComputed(() => {
223
- if (scope && toValue(scope) && "multilanguage" in toValue(scope) && toValue(scope).multilanguage) {
224
+ if (
225
+ scope &&
226
+ toValue(unreffedScope) &&
227
+ "multilanguage" in toValue(unreffedScope) &&
228
+ toValue(unreffedScope).multilanguage
229
+ ) {
224
230
  return {
225
231
  component: () => {
226
232
  return h(VcSelect as Component, {
227
233
  name: "currentLocale",
228
- modelValue: toValue(scope).multilanguage?.currentLocale,
229
- options: toValue(scope).multilanguage?.localesOptions,
234
+ modelValue: toValue(unreffedScope).multilanguage?.currentLocale,
235
+ options: toValue(unreffedScope).multilanguage?.localesOptions,
230
236
  optionValue: "value",
231
237
  optionLabel: "label",
232
- disabled: "disabled" in toValue(scope) && toValue(scope).disabled,
238
+ disabled: "disabled" in toValue(unreffedScope) && toValue(unreffedScope).disabled,
233
239
  required: true,
234
240
  clearable: false,
235
241
  "onUpdate:modelValue": (e: string) => {
236
- toValue(scope).multilanguage?.setLocale(e);
242
+ toValue(unreffedScope).multilanguage?.setLocale(e);
237
243
  },
238
244
  });
239
245
  },
240
- currentLocale: toValue(scope).multilanguage?.currentLocale,
246
+ currentLocale: toValue(unreffedScope).multilanguage?.currentLocale,
241
247
  };
242
248
  }
243
249
 
@@ -304,12 +310,11 @@ const toolbarComputed =
304
310
  emit("close:blade");
305
311
  }
306
312
  },
307
- disabled: computed(() => toValue(scope)?.disabled),
313
+ disabled: computed(() => toValue(toValue(unreffedScope)?.disabled)),
308
314
  },
309
315
  },
310
- customToolbarConfig: toValue(scope)?.toolbarOverrides,
316
+ customToolbarConfig: toValue(unreffedScope)?.toolbarOverrides,
311
317
  context: bladeContext.value,
312
- scope,
313
318
  })) ??
314
319
  [];
315
320
 
@@ -363,7 +368,7 @@ provide("isBladeEditable", isBladeEditable);
363
368
  defineExpose({
364
369
  title: bladeTitle ?? "",
365
370
  updateActiveWidgetCount,
366
- ...toRefs(scope?.value ?? {}),
371
+ ...toRefs(toValue(unreffedScope) ?? {}),
367
372
  settings: toValue(settings),
368
373
  });
369
374
  </script>
@@ -10,7 +10,7 @@
10
10
  :class="{
11
11
  'tw-flex tw-flex-auto': isWidgetView,
12
12
  }"
13
- :modified="unref(scope)?.modified"
13
+ :modified="unreffedScope?.modified"
14
14
  @close="$emit('close:blade')"
15
15
  @expand="$emit('expand:blade')"
16
16
  @collapse="$emit('collapse:blade')"
@@ -34,7 +34,7 @@
34
34
  'tw-p-4',
35
35
  ]"
36
36
  >
37
- <VcBreadcrumbs :items="scope?.breadcrumbs" />
37
+ <VcBreadcrumbs :items="toValue(scope?.breadcrumbs)" />
38
38
  </div>
39
39
  <VcTable
40
40
  class="tw-grow tw-basis-0"
@@ -63,7 +63,6 @@
63
63
  @pagination-click="onPaginationClick"
64
64
  @selection-changed="onSelectionChanged"
65
65
  @header-click="onHeaderClick"
66
- @load:change="onSearchList"
67
66
  @scroll:ptr="reload"
68
67
  @search:change="onSearchList"
69
68
  @row:reorder="sortRows"
@@ -129,6 +128,7 @@
129
128
  <component
130
129
  :is="component"
131
130
  :context="itemData"
131
+ :blade-context="bladeContext"
132
132
  />
133
133
  </template>
134
134
 
@@ -141,6 +141,7 @@
141
141
  <component
142
142
  :is="tableTemplates.mobileView"
143
143
  :context="itemData"
144
+ :blade-context="bladeContext"
144
145
  ></component>
145
146
  </template>
146
147
  </VcTable>
@@ -163,7 +164,6 @@ import {
163
164
  toRefs,
164
165
  provide,
165
166
  isRef,
166
- onMounted,
167
167
  } from "vue";
168
168
  import { useI18n } from "vue-i18n";
169
169
  import { DynamicGridSchema, ListContentSchema, SettingsSchema } from "../types";
@@ -175,7 +175,7 @@ import { notification, useBladeNavigation, usePopup } from "../../../components"
175
175
  import { ListBaseBladeScope, ListBladeContext, UseList } from "../factories/types";
176
176
  import { IParentCallArgs } from "../../../index";
177
177
  import * as _ from "lodash-es";
178
- import { toReactive, useMounted } from "@vueuse/core";
178
+ import { reactiveComputed, toReactive, useMounted } from "@vueuse/core";
179
179
  import { safeIn } from "../helpers/safeIn";
180
180
 
181
181
  export interface Props {
@@ -216,7 +216,7 @@ const title = computed(() => t(settings.value?.titleTemplate as string));
216
216
  const allSelected = ref(false);
217
217
  const searchValue = ref();
218
218
  const selectedItemId = shallowRef();
219
- const sort = shallowRef("createdDate:DESC");
219
+ const sort = shallowRef();
220
220
  const selectedIds = shallowRef<string[]>([]);
221
221
  const itemsProxy = ref<Record<string, any>[]>();
222
222
 
@@ -289,6 +289,10 @@ if (props.isWidgetView) {
289
289
  query.value.take = 5;
290
290
  }
291
291
 
292
+ sort.value = query.value.sort ?? "createdDate:DESC";
293
+
294
+ const unreffedScope = reactiveComputed(() => toValue(scope) ?? {});
295
+
292
296
  const { tableTemplates } = useTableTemplates(tableData);
293
297
 
294
298
  const calculateColumns = (columns: ListContentSchema["columns"]) => {
@@ -356,11 +360,11 @@ const toolbarComputed =
356
360
  async clickHandler() {
357
361
  if (
358
362
  scope &&
359
- "openDetailsBlade" in toValue(scope) &&
360
- toValue(scope).openDetailsBlade &&
361
- typeof toValue(scope).openDetailsBlade === "function"
363
+ "openDetailsBlade" in toValue(unreffedScope) &&
364
+ toValue(unreffedScope).openDetailsBlade &&
365
+ typeof toValue(unreffedScope).openDetailsBlade === "function"
362
366
  ) {
363
- toValue(scope).openDetailsBlade?.();
367
+ toValue(unreffedScope).openDetailsBlade?.();
364
368
  } else throw new Error("openDetailsBlade method is not defined in scope");
365
369
  },
366
370
  },
@@ -377,9 +381,8 @@ const toolbarComputed =
377
381
  // isVisible: computed(() => isDesktop.value),
378
382
  },
379
383
  },
380
- customToolbarConfig: toValue(scope)?.toolbarOverrides,
384
+ customToolbarConfig: toValue(unreffedScope)?.toolbarOverrides,
381
385
  context: bladeContext.value,
382
- scope,
383
386
  })) ??
384
387
  [];
385
388
 
@@ -408,11 +411,11 @@ const openDetailsBlade = async () => {
408
411
  if (!props.isWidgetView) {
409
412
  if (
410
413
  scope &&
411
- "openDetailsBlade" in toValue(scope) &&
412
- toValue(scope).openDetailsBlade &&
413
- typeof toValue(scope).openDetailsBlade === "function"
414
+ "openDetailsBlade" in toValue(unreffedScope) &&
415
+ toValue(unreffedScope).openDetailsBlade &&
416
+ typeof toValue(unreffedScope).openDetailsBlade === "function"
414
417
  ) {
415
- await toValue(scope).openDetailsBlade?.();
418
+ await toValue(unreffedScope).openDetailsBlade?.();
416
419
  }
417
420
  } else {
418
421
  emit("add");
@@ -422,8 +425,12 @@ const openDetailsBlade = async () => {
422
425
  const onItemClick = (item: { [x: string]: any; id?: string }) => {
423
426
  if (!props.isWidgetView) {
424
427
  // TODO Add to docs
425
- if (scope && safeIn("onListItemClick", toValue(scope)) && typeof toValue(scope).onListItemClick === "function") {
426
- toValue(scope).onListItemClick?.({
428
+ if (
429
+ scope &&
430
+ safeIn("onListItemClick", toValue(unreffedScope)) &&
431
+ typeof toValue(unreffedScope).onListItemClick === "function"
432
+ ) {
433
+ toValue(unreffedScope).onListItemClick?.({
427
434
  item,
428
435
  onOpen() {
429
436
  selectedItemId.value = item.id;
@@ -434,10 +441,10 @@ const onItemClick = (item: { [x: string]: any; id?: string }) => {
434
441
  });
435
442
  } else if (
436
443
  scope &&
437
- safeIn("openDetailsBlade", toValue(scope)) &&
438
- typeof toValue(scope).openDetailsBlade === "function"
444
+ safeIn("openDetailsBlade", toValue(unreffedScope)) &&
445
+ typeof toValue(unreffedScope).openDetailsBlade === "function"
439
446
  ) {
440
- toValue(scope).openDetailsBlade?.({
447
+ toValue(unreffedScope).openDetailsBlade?.({
441
448
  param: item.id,
442
449
  onOpen() {
443
450
  selectedItemId.value = item.id;
@@ -511,10 +518,10 @@ const onPaginationClick = async (page: number) => {
511
518
  if (query.value.take) {
512
519
  if (
513
520
  scope &&
514
- safeIn("onPaginationClick", toValue(scope)) &&
515
- typeof toValue(scope).onPaginationClick === "function"
521
+ safeIn("onPaginationClick", toValue(unreffedScope)) &&
522
+ typeof toValue(unreffedScope).onPaginationClick === "function"
516
523
  ) {
517
- toValue(scope).onPaginationClick?.({
524
+ toValue(unreffedScope).onPaginationClick?.({
518
525
  ...query.value,
519
526
  skip: (page - 1) * query.value.take,
520
527
  });
@@ -600,9 +607,10 @@ async function handleSelectAllItems(all: boolean) {
600
607
  function disabledActionHandler(disabled: { method?: string } | boolean, item: (typeof items.value)[number]): boolean {
601
608
  if (!disabled) return false;
602
609
  if (typeof disabled === "boolean") return disabled;
603
- else if (disabled.method && typeof toValue(scope)?.[disabled.method] === "function")
604
- return toValue(scope)?.[disabled.method]({ item });
605
- else if (disabled.method && toValue(scope)?.[disabled.method]) return toValue(scope)?.[disabled.method];
610
+ else if (disabled.method && typeof toValue(unreffedScope)?.[disabled.method] === "function")
611
+ return toValue(unreffedScope)?.[disabled.method]({ item });
612
+ else if (disabled.method && toValue(unreffedScope)?.[disabled.method])
613
+ return toValue(unreffedScope)?.[disabled.method];
606
614
  return false;
607
615
  }
608
616
 
@@ -627,7 +635,7 @@ function actionBuilder(item: (typeof items.value)[number]): IActionBuilderResult
627
635
  if (toolbarItem) {
628
636
  await toolbarItem.clickHandler?.();
629
637
  } else {
630
- await toValue(scope)?.[action.method]?.(itemVal);
638
+ await toValue(unreffedScope)?.[action.method]?.(itemVal);
631
639
  }
632
640
  selectedIds.value = [];
633
641
  }
@@ -649,7 +657,7 @@ defineExpose({
649
657
  reload,
650
658
  title,
651
659
  updateActiveWidgetCount,
652
- ...toRefs(scope?.value ?? {}),
660
+ ...toRefs(toValue(unreffedScope) ?? {}),
653
661
  selectedIds,
654
662
  settings: toValue(settings),
655
663
  });
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  VcButton,
3
+ VcCard,
3
4
  VcField,
4
5
  VcGallery,
5
6
  VcIcon,
@@ -768,6 +769,11 @@ export interface CardSchema extends RequiredBy<Pick<SchemaBase, "id" | "label" |
768
769
  * @default false
769
770
  */
770
771
  removePadding?: boolean;
772
+ /**
773
+ * Card variant.
774
+ * @type {default | success | danger}
775
+ */
776
+ variant?: ComponentProps<typeof VcCard>["variant"];
771
777
  }
772
778
 
773
779
  export interface WidgetsSchema extends Pick<SchemaBase, "id" | "horizontalSeparator"> {
@@ -883,22 +889,6 @@ export interface SwitchSchema extends Omit<SchemaBase, "placeholder" | "multilan
883
889
 
884
890
  export type TableSchema = Omit<ListContentSchema, "filter"> &
885
891
  Pick<SchemaBase, "id" | "property" | "visibility"> & {
886
- /**
887
- * Shows button to remove table row.
888
- * Used when table is in editing mode.
889
- */
890
- removeRowButton?: {
891
- /**
892
- * Determines whether the button should be shown or hidden.
893
- */
894
- show: boolean;
895
- /**
896
- * Method to be called when the button is clicked.
897
- * @description Method should be defined in the blade `scope`.
898
- * @type {string}
899
- */
900
- method: string;
901
- };
902
892
  /**
903
893
  * Configuration for the add new row button in the table.
904
894
  * Used when table is in editing mode.
@@ -127,7 +127,7 @@ $variants: success, danger;
127
127
  &__title {
128
128
  @apply tw-uppercase tw-flex-grow
129
129
  tw-text-[color:var(--card-header-color)]
130
- tw-text-base tw-font-bold tw-uppercase;
130
+ tw-text-base tw-font-bold;
131
131
  }
132
132
 
133
133
  &__icon {
@@ -139,7 +139,7 @@ $variants: success, danger;
139
139
  }
140
140
 
141
141
  &__body {
142
- @apply tw-flex-grow tw-box-border;
142
+ @apply tw-flex-grow tw-box-border tw-flex-col;
143
143
  }
144
144
 
145
145
  @each $variant in $variants {
@@ -7,38 +7,41 @@
7
7
  'vc-container_nopadding': noPadding,
8
8
  },
9
9
  ]"
10
- @touchstart="touchStart"
11
- @touchmove="touchMove"
12
- @touchend="touchEnd"
10
+ @touchstart="onTouchstart"
11
+ @touchmove="onTouchmove"
12
+ @touchend="onTouchend"
13
13
  >
14
14
  <div
15
- ref="component"
16
- class="vc-container__inner"
15
+ :class="['vc-container__overscroll', { 'vc-container__overscroll_touching': touching }]"
17
16
  :style="{
18
- transform: dist ? `translate3d(0, ${dist}px, 0)` : '',
17
+ top: -1 * pullDist + topOffset + 'px',
18
+ height: pullDist + 'px',
19
19
  }"
20
20
  >
21
- <div
22
- v-if="usePtr && dist > 0"
23
- class="vc-container__overscroll"
24
- :class="{ 'vc-container__overscroll_passed': status === 'loosing' }"
25
- :style="{ height: dist ? `${dist}px` : '0px' }"
26
- >
21
+ <div class="vc-container__status">
27
22
  <VcIcon
28
- :icon="status === 'pulling' ? 'fas fa-arrow-down' : 'fas fa-sync'"
29
- :class="[iconClass]"
30
- :style="{ transform: status === 'pulling' ? `rotate(${dist * 3}deg)` : '' }"
23
+ :icon="canRefresh || goingUp ? 'fas fa-arrow-up' : 'fas fa-arrow-down'"
24
+ class="vc-container__overscroll-icon"
31
25
  ></VcIcon>
32
- <span v-if="status === 'pulling'">{{ $t("COMPONENTS.ATOMS.VC_CONTAINER.PULL_TO_REFRESH") }}</span>
33
- <span v-else-if="status === 'loosing'">{{ $t("COMPONENTS.ATOMS.VC_CONTAINER.REFRESHING") }}</span>
26
+ <span v-if="!(canRefresh || goingUp)">{{ $t("COMPONENTS.ATOMS.VC_CONTAINER.PULL_TO_REFRESH") }}</span>
27
+ <span v-else>{{ $t("COMPONENTS.ATOMS.VC_CONTAINER.REFRESHING") }}</span>
34
28
  </div>
29
+ </div>
30
+ <div
31
+ ref="component"
32
+ class="vc-container__inner"
33
+ :class="{
34
+ 'vc-container__inner_touching': touching,
35
+ }"
36
+ :style="{ top: topOffset + 'px' }"
37
+ >
35
38
  <slot></slot>
36
39
  </div>
37
40
  </div>
38
41
  </template>
39
42
 
40
43
  <script lang="ts" setup>
41
- import { ref, onMounted, computed, nextTick } from "vue";
44
+ import { ref, onMounted, computed, shallowRef, watch } from "vue";
42
45
  import { VcIcon } from "./../vc-icon";
43
46
 
44
47
  export interface Props {
@@ -51,39 +54,21 @@ export interface Emits {
51
54
  (event: "scroll:ptr"): void;
52
55
  }
53
56
 
54
- const props = defineProps<Props>();
57
+ defineProps<Props>();
55
58
 
56
59
  const emit = defineEmits<Emits>();
57
60
 
58
61
  const component = ref<HTMLElement>();
59
62
  const scroll = ref(false);
60
- const startY = ref(0);
61
- const ceiling = ref();
62
63
  const pullDist = ref(60);
63
- const dist = ref(0);
64
- const status = ref("normal");
65
- const delta = ref(0);
64
+ const touchDiff = shallowRef(0);
65
+ let touchstartY = 0;
66
+ const refreshing = shallowRef(false);
67
+ const goingUp = shallowRef(false);
68
+ const touching = shallowRef(false);
66
69
 
67
- onMounted(() => {
68
- const observer = new ResizeObserver(() => {
69
- scroll.value = (component.value && component.value.clientHeight < component.value.scrollHeight) as boolean;
70
- });
71
-
72
- if (component.value) {
73
- observer.observe(component.value);
74
- }
75
- });
76
-
77
- const touchable = computed(() => status.value !== "refresh" && status.value !== "success");
78
-
79
- const iconClass = computed(() => {
80
- if (status.value === "loosing") {
81
- return "vc-container__overscroll-icon_refresh";
82
- } else if (status.value === "pulling") {
83
- return "vc-container__overscroll-icon_pulling";
84
- }
85
- return "vc-container__overscroll-icon";
86
- });
70
+ const topOffset = computed(() => Math.max(0, Math.min(pullDist.value, touchDiff.value)));
71
+ const canRefresh = computed(() => touchDiff.value >= pullDist.value && !refreshing.value);
87
72
 
88
73
  const scrollTop = () => {
89
74
  if (component.value) {
@@ -91,81 +76,48 @@ const scrollTop = () => {
91
76
  }
92
77
  };
93
78
 
94
- function touchStart(e: TouchEvent): void {
95
- if (!touchable.value) {
96
- return;
97
- }
98
- checkPullStart(e);
79
+ function onTouchstart(e: TouchEvent | MouseEvent) {
80
+ if (refreshing.value) return;
81
+ touching.value = true;
82
+ touchstartY = "clientY" in e ? e.clientY : e.touches[0].clientY;
99
83
  }
100
84
 
101
- function touchMove(e: TouchEvent): void {
102
- if (props.usePtr) {
103
- const touch = e.touches[0];
104
- if (!touchable.value) {
105
- return;
106
- }
85
+ function onTouchmove(e: TouchEvent | MouseEvent) {
86
+ if (refreshing.value || !touching.value) return;
107
87
 
108
- if (!ceiling.value) {
109
- checkPullStart(e);
110
- }
88
+ const touchY = "clientY" in e ? e.clientY : e.touches[0].clientY;
111
89
 
112
- delta.value = touch.clientY - startY.value;
113
-
114
- if (ceiling.value && delta.value >= 0 && delta.value < 80) {
115
- e.preventDefault();
116
-
117
- setStatus(ease(delta.value));
118
- }
119
- }
120
- }
121
-
122
- function touchEnd(): void {
123
- if (delta.value && touchable.value) {
124
- if (status.value === "loosing") {
125
- nextTick(() => emit("scroll:ptr"));
126
- }
127
- setStatus(0);
90
+ if (scroll.value) {
91
+ touchDiff.value = touchY - touchstartY;
128
92
  }
129
93
  }
130
94
 
131
- function getScrollTop(el: HTMLElement) {
132
- const top = el.scrollTop;
95
+ function onTouchend() {
96
+ if (refreshing.value) return;
97
+ touching.value = false;
133
98
 
134
- return Math.max(top, 0);
135
- }
136
-
137
- function checkPullStart(e: TouchEvent) {
138
- ceiling.value = getScrollTop(component.value as HTMLElement) === 0;
139
-
140
- if (ceiling.value) {
141
- startY.value = e.touches[0].clientY;
142
- }
143
- }
144
-
145
- function setStatus(distance: number) {
146
- let stat;
147
- if (distance === 0) {
148
- stat = "normal";
99
+ if (canRefresh.value) {
100
+ touchDiff.value = 0;
101
+ refreshing.value = false;
102
+ emit("scroll:ptr");
149
103
  } else {
150
- stat = distance < pullDist.value ? "pulling" : "loosing";
151
- }
152
- dist.value = distance;
153
- if (stat !== status.value) {
154
- status.value = stat;
104
+ touchDiff.value = 0;
155
105
  }
156
106
  }
157
107
 
158
- function ease(distance: number) {
159
- const pullDistance = +pullDist.value;
160
- if (distance > pullDistance) {
161
- if (distance < pullDistance * 2) {
162
- distance = pullDistance + (distance - pullDistance) / 2;
163
- } else {
164
- distance = pullDistance * 1.5 + (distance - pullDistance * 2) / 4;
165
- }
108
+ onMounted(() => {
109
+ const observer = new ResizeObserver(() => {
110
+ scroll.value = (component.value && component.value.clientHeight < component.value.scrollHeight) as boolean;
111
+ });
112
+
113
+ if (component.value) {
114
+ observer.observe(component.value);
166
115
  }
167
- return Math.round(distance);
168
- }
116
+ });
117
+
118
+ watch(topOffset, (newVal, oldVal) => {
119
+ goingUp.value = newVal < oldVal;
120
+ });
169
121
 
170
122
  defineExpose({
171
123
  scrollTop,
@@ -190,33 +142,29 @@ defineExpose({
190
142
  }
191
143
 
192
144
  &__overscroll {
193
- @apply tw-relative tw-w-full tw-flex tw-items-start tw-justify-center tw-overflow-hidden tw-gap-2;
145
+ @apply tw-absolute tw-w-full [transition:top_0.3s_ease-out];
194
146
 
195
- &_passed {
196
- @apply tw-text-[#43b0e6];
147
+ &_touching {
148
+ @apply tw-transition-none;
197
149
  }
198
150
  }
199
151
 
152
+ &__status {
153
+ @apply tw-flex tw-w-full tw-h-full tw-justify-center tw-items-center tw-pb-[10px];
154
+ }
155
+
200
156
  &__overscroll-icon {
201
157
  @apply tw-text-[color:#a1c0d4];
202
-
203
- &_pulling {
204
- @apply tw-text-[color:#a1c0d4];
205
- }
206
-
207
- &_refresh {
208
- animation: tw-spin 2s linear infinite;
209
- }
210
158
  }
211
159
 
212
160
  &__overscroll span {
213
- @apply tw-mb-2 tw-text-sm tw-text-gray-500;
161
+ @apply tw-ml-2 tw-text-sm tw-text-gray-500;
214
162
  }
215
163
 
216
164
  &__inner {
217
165
  @apply tw-relative tw-overflow-y-auto tw-overflow-x-hidden
218
166
  tw-flex-1 tw-p-[var(--container-scroll-padding)]
219
- tw-transition-transform [scrollbar-color:var(--container-scroll-color)] [scrollbar-width:thin];
167
+ [transition:top_0.3s_ease-out] [scrollbar-color:var(--container-scroll-color)] [scrollbar-width:thin];
220
168
 
221
169
  &::-webkit-scrollbar {
222
170
  @apply tw-w-[var(--container-scroll-width)] tw-bg-transparent;
@@ -232,19 +180,14 @@ defineExpose({
232
180
  tw-overflow-x-hidden
233
181
  hover:tw-bg-[color:var(--container-scroll-color-hover)];
234
182
  }
183
+
184
+ &_touching {
185
+ transition: none;
186
+ }
235
187
  }
236
188
 
237
189
  &_nopadding &__inner {
238
190
  @apply tw-p-0;
239
191
  }
240
192
  }
241
-
242
- @keyframes tw-spin {
243
- from {
244
- transform: rotate(0deg);
245
- }
246
- to {
247
- transform: rotate(360deg);
248
- }
249
- }
250
193
  </style>
@@ -14,7 +14,7 @@ export default {
14
14
  options: ["default", "striped"],
15
15
  table: {
16
16
  type: {
17
- summary: ["default", "striped"],
17
+ summary: '["default", "striped"]',
18
18
  },
19
19
  },
20
20
  },
@@ -18,7 +18,7 @@ export default {
18
18
  options: VARIANT,
19
19
  table: {
20
20
  type: {
21
- summary: VARIANT,
21
+ summary: VARIANT.join(", "),
22
22
  },
23
23
  },
24
24
  },
@@ -104,6 +104,9 @@ const toolbar = {
104
104
  "blockquote",
105
105
  { list: "ordered" },
106
106
  { list: "bullet" },
107
+ { color: [] },
108
+ { background: [] },
109
+ "clean",
107
110
  ],
108
111
  handlers: {},
109
112
  };
@@ -36,7 +36,7 @@ export default {
36
36
  },
37
37
  },
38
38
  aspectRatio: {
39
- control: "array",
39
+ control: "object",
40
40
  table: {
41
41
  type: {
42
42
  summary: "number[]",
@@ -44,7 +44,7 @@ export default {
44
44
  },
45
45
  },
46
46
  },
47
- } as Meta;
47
+ } satisfies Meta;
48
48
 
49
49
  const Template: StoryFn = (args) => ({
50
50
  components: { VcField },
@@ -18,7 +18,7 @@ export default {
18
18
  summary: "number",
19
19
  },
20
20
  defaultValue: {
21
- summary: 1024,
21
+ summary: "1024",
22
22
  },
23
23
  },
24
24
  },