@bildvitta/quasar-ui-asteroid 2.16.0 → 3.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/dist/api/QasActions.json +40 -0
  2. package/dist/api/QasActionsMenu.json +64 -0
  3. package/dist/api/QasAlert.json +40 -0
  4. package/dist/api/QasAppBar.json +52 -0
  5. package/dist/api/QasAppMenu.json +38 -0
  6. package/dist/api/QasAvatar.json +44 -0
  7. package/dist/api/QasBox.json +16 -0
  8. package/dist/api/QasBreakline.json +32 -0
  9. package/dist/api/QasBtn.json +16 -0
  10. package/dist/api/QasCard.json +52 -0
  11. package/dist/api/QasCheckboxGroup.json +38 -0
  12. package/dist/api/QasCopy.json +29 -0
  13. package/dist/api/QasDateTimeInput.json +60 -0
  14. package/dist/api/QasDebugger.json +13 -0
  15. package/dist/api/QasDelete.json +64 -0
  16. package/dist/api/QasDialog.json +109 -0
  17. package/dist/api/QasDialogRouter.json +31 -0
  18. package/dist/api/QasField.json +56 -0
  19. package/dist/api/QasFilters.json +111 -0
  20. package/dist/api/QasFormGenerator.json +92 -0
  21. package/dist/api/QasFormView.json +228 -0
  22. package/dist/api/QasGallery.json +54 -0
  23. package/dist/api/QasGridGenerator.json +108 -0
  24. package/dist/api/QasInput.json +40 -0
  25. package/dist/api/QasLabel.json +40 -0
  26. package/dist/api/QasLayout.json +47 -0
  27. package/dist/api/QasListItems.json +72 -0
  28. package/dist/api/QasListView.json +161 -0
  29. package/dist/api/QasMap.json +41 -0
  30. package/dist/api/QasNestedFields.json +223 -0
  31. package/dist/api/QasNumericInput.json +68 -0
  32. package/dist/api/QasPageHeader.json +36 -0
  33. package/dist/api/QasPasswordInput.json +121 -0
  34. package/dist/api/QasPasswordStrengthChecker.json +126 -0
  35. package/dist/api/QasProfile.json +74 -0
  36. package/dist/api/QasResizer.json +34 -0
  37. package/dist/api/QasSearchBox.json +91 -0
  38. package/dist/api/QasSelect.json +88 -0
  39. package/dist/api/QasSelectList.json +134 -0
  40. package/dist/api/QasSignaturePad.json +63 -0
  41. package/dist/api/QasSignatureUploader.json +41 -0
  42. package/dist/api/QasSingleView.json +147 -0
  43. package/dist/api/QasSortable.json +80 -0
  44. package/dist/api/QasTableGenerator.json +56 -0
  45. package/dist/api/QasTabsGenerator.json +90 -0
  46. package/dist/api/QasTextTruncate.json +38 -0
  47. package/dist/api/QasTransfer.json +70 -0
  48. package/dist/api/QasUploader.json +143 -0
  49. package/dist/asteroid.cjs.css +1 -0
  50. package/dist/asteroid.cjs.js +9307 -0
  51. package/dist/asteroid.cjs.min.js +6 -0
  52. package/dist/asteroid.esm.css +1 -0
  53. package/dist/asteroid.esm.js +9298 -0
  54. package/dist/asteroid.esm.min.js +6 -0
  55. package/dist/asteroid.umd.css +1 -0
  56. package/dist/asteroid.umd.js +9301 -0
  57. package/dist/asteroid.umd.min.js +6 -0
  58. package/dist/vetur/asteroid-attributes.json +1178 -0
  59. package/dist/vetur/asteroid-tags.json +535 -0
  60. package/package.json +41 -56
  61. package/src/assets/logo-modular.svg +1 -1
  62. package/src/asteroid.js +1 -0
  63. package/src/components/actions/QasActions.vue +45 -0
  64. package/src/components/actions/QasActions.yml +24 -0
  65. package/src/components/actions-menu/QasActionsMenu.vue +41 -14
  66. package/src/components/actions-menu/QasActionsMenu.yml +63 -0
  67. package/src/components/alert/QasAlert.vue +90 -0
  68. package/src/components/alert/QasAlert.yml +33 -0
  69. package/src/components/app-bar/QasAppBar.vue +16 -13
  70. package/src/components/app-bar/QasAppBar.yml +51 -0
  71. package/src/components/app-menu/QasAppMenu.vue +10 -12
  72. package/src/components/app-menu/QasAppMenu.yml +32 -0
  73. package/src/components/avatar/QasAvatar.vue +17 -9
  74. package/src/components/avatar/QasAvatar.yml +38 -0
  75. package/src/components/box/QasBox.vue +12 -4
  76. package/src/components/box/QasBox.yml +13 -0
  77. package/src/components/breakline/QasBreakline.vue +37 -0
  78. package/src/components/breakline/QasBreakline.yml +25 -0
  79. package/src/components/btn/QasBtn.vue +27 -24
  80. package/src/components/btn/QasBtn.yml +13 -0
  81. package/src/components/card/QasCard.vue +32 -33
  82. package/src/components/card/QasCard.yml +42 -0
  83. package/src/components/checkbox-group/QasCheckboxGroup.vue +50 -17
  84. package/src/components/checkbox-group/QasCheckboxGroup.yml +30 -0
  85. package/src/components/copy/QasCopy.vue +22 -11
  86. package/src/components/copy/QasCopy.yml +20 -0
  87. package/src/components/date-time-input/QasDateTimeInput.vue +18 -26
  88. package/src/components/date-time-input/QasDateTimeInput.yml +54 -0
  89. package/src/components/debugger/QasDebugger.vue +2 -0
  90. package/src/components/debugger/QasDebugger.yml +10 -0
  91. package/src/components/delete/QasDelete.vue +43 -16
  92. package/src/components/delete/QasDelete.yml +52 -0
  93. package/src/components/dialog/QasDialog.vue +63 -67
  94. package/src/components/dialog/QasDialog.yml +86 -0
  95. package/src/components/dialog-router/QasDialogRouter.vue +14 -4
  96. package/src/components/dialog-router/QasDialogRouter.yml +23 -0
  97. package/src/components/field/QasField.vue +21 -24
  98. package/src/components/field/QasField.yml +31 -0
  99. package/src/components/filters/QasFilters.vue +33 -26
  100. package/src/components/filters/QasFilters.yml +91 -0
  101. package/src/components/form-generator/QasFormGenerator.vue +13 -15
  102. package/src/components/form-generator/QasFormGenerator.yml +64 -0
  103. package/src/components/form-view/QasFormView.vue +129 -69
  104. package/src/components/form-view/QasFormView.yml +179 -0
  105. package/src/components/gallery/QasGallery.vue +47 -30
  106. package/src/components/gallery/QasGallery.yml +51 -0
  107. package/src/components/grid-generator/QasGridGenerator.vue +15 -7
  108. package/src/components/grid-generator/QasGridGenerator.yml +73 -0
  109. package/src/components/index.js +0 -0
  110. package/src/components/input/QasInput.vue +43 -36
  111. package/src/components/input/QasInput.yml +32 -0
  112. package/src/components/label/QasLabel.vue +14 -15
  113. package/src/components/label/QasLabel.yml +28 -0
  114. package/src/components/layout/QasLayout.vue +13 -21
  115. package/src/components/layout/QasLayout.yml +38 -0
  116. package/src/components/list-items/QasListItems.vue +15 -12
  117. package/src/components/list-items/QasListItems.yml +57 -0
  118. package/src/components/list-view/QasListView.vue +57 -31
  119. package/src/components/list-view/QasListView.yml +132 -0
  120. package/src/components/map/QasMap.vue +15 -31
  121. package/src/components/map/QasMap.yml +33 -0
  122. package/src/components/nested-fields/QasNestedFields.vue +57 -47
  123. package/src/components/nested-fields/QasNestedFields.yml +180 -0
  124. package/src/components/numeric-input/QasNumericInput.vue +31 -22
  125. package/src/components/numeric-input/QasNumericInput.yml +51 -0
  126. package/src/components/page-header/QasPageHeader.vue +20 -11
  127. package/src/components/page-header/QasPageHeader.yml +24 -0
  128. package/src/components/password-input/QasPasswordInput.vue +24 -21
  129. package/src/components/password-input/QasPasswordInput.yml +103 -0
  130. package/src/components/password-strength-checker/QasPasswordStrengthChecker.vue +51 -34
  131. package/src/components/password-strength-checker/QasPasswordStrengthChecker.yml +103 -0
  132. package/src/components/profile/QasProfile.vue +15 -13
  133. package/src/components/profile/QasProfile.yml +60 -0
  134. package/src/components/resizer/QasResizer.vue +3 -3
  135. package/src/components/resizer/QasResizer.yml +23 -0
  136. package/src/components/search-box/QasSearchBox.vue +50 -21
  137. package/src/components/search-box/QasSearchBox.yml +76 -0
  138. package/src/components/select/QasSelect.vue +51 -50
  139. package/src/components/select/QasSelect.yml +62 -0
  140. package/src/components/select-list/QasSelectList.vue +72 -53
  141. package/src/components/select-list/QasSelectList.yml +116 -0
  142. package/src/components/signature-pad/QasSignaturePad.vue +60 -40
  143. package/src/components/signature-pad/QasSignaturePad.yml +53 -0
  144. package/src/components/signature-uploader/QasSignatureUploader.vue +19 -17
  145. package/src/components/signature-uploader/QasSignatureUploader.yml +36 -0
  146. package/src/components/single-view/QasSingleView.vue +41 -22
  147. package/src/components/single-view/QasSingleView.yml +116 -0
  148. package/src/components/sortable/QasSortable.vue +51 -30
  149. package/src/components/sortable/QasSortable.yml +65 -0
  150. package/src/components/table-generator/QasTableGenerator.vue +112 -21
  151. package/src/components/table-generator/QasTableGenerator.yml +46 -0
  152. package/src/components/tabs-generator/QasTabsGenerator.vue +37 -25
  153. package/src/components/tabs-generator/QasTabsGenerator.yml +67 -0
  154. package/src/components/text-truncate/QasTextTruncate.vue +25 -17
  155. package/src/components/text-truncate/QasTextTruncate.yml +32 -0
  156. package/src/components/transfer/QasTransfer.vue +48 -49
  157. package/src/components/transfer/QasTransfer.yml +59 -0
  158. package/src/components/uploader/QasUploader.vue +169 -48
  159. package/src/components/uploader/QasUploader.yml +117 -0
  160. package/src/css/background.scss +1 -1
  161. package/src/css/border.scss +7 -6
  162. package/src/css/design-system.scss +0 -43
  163. package/src/css/fonts.scss +2 -28
  164. package/src/css/opacity.scss +0 -4
  165. package/src/css/set-brand.scss +15 -0
  166. package/src/css/transitions.scss +1 -1
  167. package/src/helpers/add-counter-suffix.js +3 -0
  168. package/src/helpers/{base64ToBlob.js → base-64-to-blob.js} +0 -0
  169. package/src/helpers/{constructObject.js → construct-object.js} +0 -0
  170. package/src/helpers/filter-object.js +8 -6
  171. package/src/helpers/filters.js +8 -4
  172. package/src/helpers/{greatestCommonDivisor.js → get-greatest-common-divisor.js} +0 -0
  173. package/src/helpers/get-slot-children-text.js +15 -0
  174. package/src/helpers/images.js +28 -0
  175. package/src/helpers/index.js +11 -59
  176. package/src/helpers/{isLocalDevelopment.js → is-local-development.js} +0 -0
  177. package/src/helpers/set-scroll-on-grab.js +61 -0
  178. package/src/index.cjs.js +1 -0
  179. package/src/index.esm.js +4 -0
  180. package/src/index.scss +19 -21
  181. package/src/index.umd.js +2 -0
  182. package/src/mixins/context.js +1 -1
  183. package/src/mixins/dialog-router.js +17 -0
  184. package/src/mixins/form.js +4 -12
  185. package/src/mixins/generator.js +14 -14
  186. package/src/mixins/index.js +2 -8
  187. package/src/mixins/password.js +73 -11
  188. package/src/mixins/screen.js +8 -6
  189. package/src/mixins/view.js +62 -22
  190. package/src/plugins/dialog/Dialog.js +14 -0
  191. package/src/plugins/dialog/Dialog.yml +10 -0
  192. package/src/plugins/index.js +4 -2
  193. package/src/plugins/{NotifyError.js → notify-error/NotifyError.js} +0 -0
  194. package/src/plugins/notify-error/NotifyError.yml +11 -0
  195. package/src/plugins/{NotifySuccess.js → notify-success/NotifySuccess.js} +3 -3
  196. package/src/plugins/notify-success/NotifySuccess.yml +11 -0
  197. package/src/store/history.js +43 -0
  198. package/src/store/index.js +1 -0
  199. package/src/vue-plugin.js +185 -0
  200. package/.babelrc +0 -12
  201. package/.storybook/main.js +0 -35
  202. package/.storybook/preview.js +0 -26
  203. package/debug.log +0 -1
  204. package/index.js +0 -4
  205. package/jest-setup.js +0 -1
  206. package/jest.config.json +0 -22
  207. package/postcss.config.js +0 -5
  208. package/src/components/Introduction.stories.mdx +0 -12
  209. package/src/components/actions-menu/QasActionsMenu.stories.js +0 -73
  210. package/src/components/app-bar/QasAppBar.stories.js +0 -84
  211. package/src/components/app-menu/QasAppMenu.stories.js +0 -66
  212. package/src/components/apps-menu/QasAppsMenu.spec.js +0 -58
  213. package/src/components/apps-menu/QasAppsMenu.stories.js +0 -54
  214. package/src/components/apps-menu/QasAppsMenu.vue +0 -48
  215. package/src/components/avatar/QasAvatar.spec.js +0 -14
  216. package/src/components/avatar/QasAvatar.stories.js +0 -52
  217. package/src/components/box/QasBox.spec.js +0 -18
  218. package/src/components/box/QasBox.stories.js +0 -35
  219. package/src/components/break-line/QasBreakLine.stories.js +0 -57
  220. package/src/components/break-line/QasBreakLine.vue +0 -52
  221. package/src/components/btn/QasBtn.stories.js +0 -45
  222. package/src/components/btn-actions/QasBtnActions.stories.js +0 -77
  223. package/src/components/btn-actions/QasBtnActions.vue +0 -54
  224. package/src/components/card/QasCard.stories.js +0 -126
  225. package/src/components/checkbox-group/QasCheckboxGroup.stories.js +0 -59
  226. package/src/components/copy/QasCopy.stories.js +0 -41
  227. package/src/components/date-time-input/QasDateTimeInput.stories.js +0 -67
  228. package/src/components/debugger/QasDebugger.stories.js +0 -33
  229. package/src/components/delete/QasDelete.stories.js +0 -80
  230. package/src/components/dialog/QasDialog.stories.js +0 -139
  231. package/src/components/dialog-router/QasDialogRouter.stories.js +0 -38
  232. package/src/components/field/QasField.stories.js +0 -181
  233. package/src/components/filters/QasFilters.stories.js +0 -121
  234. package/src/components/form-generator/QasFormGenerator.stories.js +0 -115
  235. package/src/components/form-view/QasFormView.stories.js +0 -236
  236. package/src/components/gallery/QasGallery.stories.js +0 -91
  237. package/src/components/grid-generator/QasGridGenerator.stories.js +0 -142
  238. package/src/components/input/QasInput.stories.js +0 -78
  239. package/src/components/label/QasLabel.stories.js +0 -60
  240. package/src/components/layout/QasLayout.stories.js +0 -104
  241. package/src/components/list-items/QasListItems.stories.js +0 -135
  242. package/src/components/list-view/QasListView.stories.js +0 -168
  243. package/src/components/map/QasMap.stories.js +0 -75
  244. package/src/components/nested-fields/QasNestedFields.stories.js +0 -255
  245. package/src/components/numeric-input/QasNumericInput.stories.js +0 -92
  246. package/src/components/page-header/QasPageHeader.stories.js +0 -61
  247. package/src/components/password-input/QasPasswordInput.stories.js +0 -76
  248. package/src/components/password-strength-checker/QasPasswordStrengthChecker.stories.js +0 -54
  249. package/src/components/profile/QasProfile.stories.js +0 -131
  250. package/src/components/resizer/QasResizer.stories.js +0 -43
  251. package/src/components/search-box/QasSearchBox.stories.js +0 -111
  252. package/src/components/select/QasSelect.stories.js +0 -113
  253. package/src/components/select-list/QasSelectList.stories.js +0 -153
  254. package/src/components/signature-pad/QasSignaturePad.stories.js +0 -51
  255. package/src/components/signature-uploader/QasSignatureUploader.stories.js +0 -69
  256. package/src/components/single-view/QasSingleView.stories.js +0 -130
  257. package/src/components/sortable/QasSortable.stories.js +0 -80
  258. package/src/components/table-generator/QasTableGenerator.stories.js +0 -120
  259. package/src/components/tabs-generator/QasTabsGenerator.stories.js +0 -145
  260. package/src/components/text-truncate/QasTextTruncate.stories.js +0 -55
  261. package/src/components/tip/QasTip.stories.js +0 -57
  262. package/src/components/tip/QasTip.vue +0 -68
  263. package/src/components/tooltip/QasTooltip.stories.js +0 -63
  264. package/src/components/tooltip/QasTooltip.vue +0 -81
  265. package/src/components/transfer/QasTransfer.stories.js +0 -118
  266. package/src/components/uploader/QasCustomUploader.vue +0 -120
  267. package/src/components/uploader/QasUploader.stories.js +0 -139
  268. package/src/directives/Test.js +0 -13
  269. package/src/helpers/historyHandler.js +0 -52
  270. package/src/helpers/label.js +0 -3
  271. package/src/index.js +0 -249
  272. package/src/mixins/map-markers.js +0 -26
  273. package/src/mixins/unsaved-changes.js +0 -24
  274. package/src/mixins/uploader.js +0 -30
  275. package/src/mocks/json/user.json +0 -27
  276. package/src/mocks/json/users-new.json +0 -23
  277. package/src/mocks/json/users.json +0 -97
  278. package/src/mocks/storeModule.js +0 -71
  279. package/src/pages/Forbidden.vue +0 -6
  280. package/src/pages/NotFound.vue +0 -6
@@ -1,13 +1,13 @@
1
1
  <template>
2
2
  <div :id="fieldName" class="qas-nested-fields">
3
3
  <div class="text-left">
4
- <qas-label v-if="useSingleLabel" :label="label" />
4
+ <qas-label v-if="useSingleLabel" :label="fieldLabel" />
5
5
  </div>
6
6
 
7
7
  <div>
8
- <component :is="componentIs" ref="inputContent" name="fade" tag="div">
8
+ <component :is="componentTag" ref="inputContent" name="fade" tag="div">
9
9
  <div v-for="(row, index) in nested" :id="`row-${index}`" :key="index" class="full-width">
10
- <component :is="componentIs" name="fade" tag="div">
10
+ <component :is="componentTag" name="fade" tag="div">
11
11
  <div v-if="!row[destroyKey]" :key="index" class="col-12 q-mt-md">
12
12
  <div>
13
13
  <div class="flex items-center justify-between q-py-xs">
@@ -21,21 +21,25 @@
21
21
 
22
22
  <div ref="formGenerator" class="col-12 justify-between q-col-gutter-x-md row">
23
23
  <slot :errors="transformedErrors" :fields="children" :index="index" name="fields" :update-value="updateValuesFromInput">
24
- <qas-form-generator v-model="nested[index]" :class="formClasses" :columns="formColumns" :errors="transformedErrors[index]" :fields="children" :fields-events="fieldsEvents" :fields-props="fieldsProps" @input="updateValuesFromInput($event, index)">
25
- <template v-for="(slot, key) in $scopedSlots" :slot="key" slot-scope="scope">
26
- <slot :name="key" v-bind="scope" />
24
+ <qas-form-generator v-model="nested[index]" :class="formClasses" :columns="formColumns" :errors="transformedErrors[index]" :fields="children" :fields-props="fieldsProps" @update:model-value="updateValuesFromInput($event, index)">
25
+ <template v-for="(slot, key) in $slots" #[key]="scope">
26
+ <slot v-bind="scope" :errors="transformedErrors" :index="index" :name="key" />
27
27
  </template>
28
28
  </qas-form-generator>
29
29
  </slot>
30
30
 
31
31
  <div v-if="useInlineActions" class="flex items-center qas-nested-fields__actions">
32
- <qas-btn v-if="useDuplicate" class="col-auto" color="primary" flat icon="o_content_copy" round @click="add(row)" />
33
- <qas-btn v-if="showDestroyBtn" class="col-auto" color="negative" flat icon="o_cancel" round @click="destroy(index, row)" />
32
+ <div class="col-auto">
33
+ <qas-btn v-if="useDuplicate" color="primary" flat icon="o_content_copy" round @click="add(row)" />
34
+ </div>
35
+ <div class="col-auto">
36
+ <qas-btn v-if="showDestroyBtn" color="negative" flat icon="o_cancel" round @click="destroy(index, row)" />
37
+ </div>
34
38
  </div>
35
39
  </div>
36
40
 
37
41
  <div class="col-12">
38
- <slot :index="index" :model-value="nested[index]" name="custom-fields" :update-value="updateValuesFromInput" />
42
+ <slot :fields="children" :index="index" :model="nested[index]" name="custom-fields" :update-value="updateValuesFromInput" />
39
43
  </div>
40
44
  </div>
41
45
  </div>
@@ -43,30 +47,34 @@
43
47
  </div>
44
48
  </component>
45
49
 
46
- <slot :add="add" name="add-input">
47
- <div v-if="useInlineActions" class="cursor-pointer items-center q-col-gutter-x-md q-mt-md row" @click="add()">
48
- <qas-input class="col disabled no-pointer-events" hide-bottom-space :label="addInputLabel" outlined @focus="add()" />
50
+ <div class="q-mt-md">
51
+ <slot :add="add" name="add-input">
52
+ <div v-if="useInlineActions" class="cursor-pointer items-center q-col-gutter-x-md q-mt-md row" @click="add()">
53
+ <div class="col">
54
+ <qas-input class="disabled no-pointer-events" hide-bottom-space :label="addInputLabel" outlined @focus="add()" />
55
+ </div>
49
56
 
50
- <div>
51
- <qas-btn class="col-auto" color="green" flat icon="o_add_circle_outline" round />
57
+ <div class="col-auto">
58
+ <qas-btn color="green" flat icon="o_add_circle_outline" round />
59
+ </div>
52
60
  </div>
53
- </div>
54
61
 
55
- <div v-else class="q-mt-lg">
56
- <qas-btn ref="test" class="full-width q-py-sm" icon="o_add" outline @click="add()">{{ addInputLabel }}</qas-btn>
57
- </div>
58
- </slot>
62
+ <div v-else class="q-mt-lg">
63
+ <qas-btn class="full-width q-py-sm" icon="o_add" outline @click="add()">{{ addInputLabel }}</qas-btn>
64
+ </div>
65
+ </slot>
66
+ </div>
59
67
  </div>
60
68
  </div>
61
69
  </template>
62
70
 
63
71
  <script>
64
- import QasBtn from '../btn/QasBtn'
65
- import QasFormGenerator from '../form-generator/QasFormGenerator'
66
- import QasInput from '../input/QasInput'
67
- import QasLabel from '../label/QasLabel'
68
- import { constructObject } from '../../helpers'
72
+ import QasBtn from '../btn/QasBtn.vue'
73
+ import QasFormGenerator from '../form-generator/QasFormGenerator.vue'
74
+ import QasInput from '../input/QasInput.vue'
75
+ import QasLabel from '../label/QasLabel.vue'
69
76
 
77
+ import { constructObject } from '../../helpers'
70
78
  import { extend } from 'quasar'
71
79
  import { camelize } from 'humps'
72
80
 
@@ -126,11 +134,6 @@ export default {
126
134
  default: () => ({})
127
135
  },
128
136
 
129
- fieldsEvents: {
130
- type: Object,
131
- default: () => ({})
132
- },
133
-
134
137
  fieldsProps: {
135
138
  type: Object,
136
139
  default: () => ({})
@@ -191,12 +194,19 @@ export default {
191
194
  type: Boolean
192
195
  },
193
196
 
194
- value: {
197
+ useRemoveOnDestroy: {
198
+ type: Boolean,
199
+ default: true
200
+ },
201
+
202
+ modelValue: {
195
203
  type: Array,
196
204
  default: () => []
197
205
  }
198
206
  },
199
207
 
208
+ emits: ['update:modelValue'],
209
+
200
210
  data () {
201
211
  return {
202
212
  nested: []
@@ -204,7 +214,7 @@ export default {
204
214
  },
205
215
 
206
216
  computed: {
207
- label () {
217
+ fieldLabel () {
208
218
  return this.field?.label
209
219
  },
210
220
 
@@ -234,16 +244,16 @@ export default {
234
244
  },
235
245
 
236
246
  transformedErrors () {
237
- return constructObject(this.fieldName, this.errors)
247
+ return Array.isArray(this.errors) ? this.errors : constructObject(this.fieldName, this.errors)
238
248
  },
239
249
 
240
- componentIs () {
250
+ componentTag () {
241
251
  return this.useAnimation ? 'transition-group' : 'div'
242
252
  }
243
253
  },
244
254
 
245
255
  watch: {
246
- value: {
256
+ modelValue: {
247
257
  handler (value) {
248
258
  this.nested = extend(true, [], value)
249
259
  },
@@ -251,8 +261,8 @@ export default {
251
261
  },
252
262
 
253
263
  field: {
254
- handler (value) {
255
- !this.value.length && this.setDefaultValue()
264
+ handler () {
265
+ !this.modelValue.length && this.setDefaultNestedValue()
256
266
  },
257
267
  immediate: true
258
268
  }
@@ -267,7 +277,7 @@ export default {
267
277
  this.setFocus()
268
278
  })
269
279
 
270
- return this.emitter()
280
+ return this.updateModelValue()
271
281
  },
272
282
 
273
283
  setFocus () {
@@ -277,31 +287,31 @@ export default {
277
287
  return firstElementToBeFocused?.focus && firstElementToBeFocused.focus()
278
288
  },
279
289
 
280
- emitter (value, index) {
281
- return this.$emit('input', value || this.nested)
290
+ updateModelValue (value) {
291
+ return this.$emit('update:modelValue', value || this.nested)
282
292
  },
283
293
 
284
294
  destroy (index, row) {
285
- row.uuid
286
- ? this.nested.splice(index, 1, { [this.destroyKey]: true, ...row })
287
- : this.nested.splice(index, 1)
295
+ this.useRemoveOnDestroy
296
+ ? this.nested.splice(index, 1)
297
+ : this.nested.splice(index, 1, { [this.destroyKey]: true, ...row })
288
298
 
289
- return this.emitter()
299
+ return this.updateModelValue()
290
300
  },
291
301
 
292
302
  updateValuesFromInput (value, index) {
293
303
  this.nested.splice(index, 1, value)
294
304
 
295
- return this.emitter(null, index)
305
+ return this.updateModelValue(null, index)
296
306
  },
297
307
 
298
- setDefaultValue () {
308
+ setDefaultNestedValue () {
299
309
  this.nested.splice(0, 0, { ...this.rowObject })
300
310
  },
301
311
 
302
312
  setScroll () {
303
313
  const elements = this.$refs.inputContent.children
304
- const element = elements[elements.length - 1].elm
314
+ const element = elements[elements.length - 1]
305
315
  const { top } = element.getBoundingClientRect()
306
316
  const pageOffset = window.pageYOffset
307
317
 
@@ -316,7 +326,7 @@ export default {
316
326
  return this.useIndexLabel ? `${this.rowLabel} ${rowKey + 1}` : this.rowLabel
317
327
  }
318
328
 
319
- return this.label
329
+ return this.fieldLabel
320
330
  }
321
331
  }
322
332
  }
@@ -0,0 +1,180 @@
1
+ type: component
2
+
3
+ meta:
4
+ desc: Componente para gerar dinamicamente campos nested.
5
+
6
+ props:
7
+ add-input-label:
8
+ desc: Rótulo do input de adicionar novos campos.
9
+ default: Inserir novo campo
10
+ type: Boolean
11
+
12
+ btn-destroy-props:
13
+ desc: Props do botão de excluir linha contendo os campos.
14
+ default: "{ label: 'Remover', o_cancel, flat: true, dense: true }"
15
+ debugger: true
16
+ type: Object
17
+
18
+ btn-duplicate-props:
19
+ desc: Props do botão de duplicar linha contendo os campos.
20
+ default: "{ label: 'Duplicar', o_content_copy, flat: true, dense: true, hideMobileLabel: true }"
21
+ debugger: true
22
+ type: Object
23
+
24
+ destroy-key:
25
+ desc: Quando excluímos uma "row" e propriedade "useRemoveOnDestroy" for "false", adicionamos uma propriedade para saber que é para ser deletada, com esta prop você escolhe como se chamará essa chave.
26
+ default: destroyed
27
+ type: String
28
+
29
+ model-value:
30
+ desc: Model do componente
31
+ default: []
32
+ type: Array
33
+ examples: [v-model="value"]
34
+ model: true
35
+
36
+ errors:
37
+ desc: Propriedade de erros para mostrar nos campos gerados.
38
+ default: {}
39
+ type: [Array, Object]
40
+
41
+ field:
42
+ desc: Field contendo informações necessárias para a criação do campo correspondente.
43
+ default: {}
44
+ required: true
45
+ type: Object
46
+ examples: ["{ name: 'meuNested', type: 'nested', label: 'Campo nested', children: [...] }"]
47
+
48
+ fields-props:
49
+ desc: Propriedade para repassar propriedades para cada campo individualmente.
50
+ default: {}
51
+ type: Object
52
+ examples: ["{ name: { dense: true, onClick: () => alert('Estou sendo clicado') } }"]
53
+
54
+ form-columns:
55
+ desc: Colunas do grid de cada campo.
56
+ default: {}
57
+ type: Object
58
+ examples: ["{ name: { sm: 6, md: 12 } }", "[{ sm: 6, md: 12 }]"]
59
+
60
+ form-gutter:
61
+ desc: Espaçamento entre cada campo.
62
+ default: md
63
+ type: String
64
+ examples: [xs, sm, md, lg, xl]
65
+
66
+ row-label:
67
+ desc: Rótulo entre cada linha (row).
68
+ type: String
69
+
70
+ row-object:
71
+ desc: Objeto contendo valores iniciais do model de cada linha (row).
72
+ default: {}
73
+ type: Object
74
+ examples: ["{ name: '', cities: [] }"]
75
+
76
+ use-animation:
77
+ desc: Controla a animação na hora de setar o scroll.
78
+ default: true
79
+ type: Boolean
80
+
81
+ use-destroy-always:
82
+ desc: Controla o botão de remover em todas linhas (row), incluindo a primeira.
83
+ type: Boolean
84
+
85
+ use-duplicate:
86
+ desc: Controla o botão de duplicar linha.
87
+ default: true
88
+ type: Boolean
89
+
90
+ use-index-label:
91
+ desc: Se tiver "rowLabel" esta prop controla se cada label da linha vai ter o index como sufixo.
92
+ type: Boolean
93
+
94
+ use-inline-actions:
95
+ desc: Controla o comportamento referente aos estilos das ações de duplicar/adicionar/remover
96
+ type: Boolean
97
+
98
+ use-single-label:
99
+ desc: Se o valor for "true", então vai exibir apenas uma label referente a todas linhas (row) e não uma por linha
100
+ type: Boolean
101
+
102
+ use-remove-on-destroy:
103
+ desc: Se o valor for "true" o valor do model será removido senão será adicionar uma flag como `destroyed` por exemplo.
104
+ default: true
105
+ type: Boolean
106
+
107
+ slots:
108
+ fields:
109
+ desc: Substitui o "QasFormGenerator".
110
+ scope:
111
+ fields:
112
+ desc: Campos atuais.
113
+ default: {}
114
+ type: Object
115
+
116
+ index:
117
+ desc: Index atual dos campos
118
+ type: Number
119
+
120
+ errors:
121
+ desc: Index atual dos campos
122
+ type: Number
123
+
124
+ 'updateValue -> function(value, index)':
125
+ desc: Função para atualizar o model, passando o novo valor e o index.
126
+ type: Function
127
+ examples: ["updateValue({ name: 'novo valor' }, 2)"]
128
+
129
+ 'field-[nome-da-chave]':
130
+ desc: Repassa todos os slots e escopos do "QasFormGenerator".
131
+ scope:
132
+ index:
133
+ desc: Index atual dos campos
134
+ type: Number
135
+
136
+ errors:
137
+ desc: Index atual dos campos
138
+ type: Number
139
+
140
+ 'updateValue -> function(value, index)':
141
+ desc: Função para atualizar o model, passando o novo valor e o index.
142
+ type: Function
143
+ examples: ["updateValue({ name: 'novo valor' }, 2)"]
144
+
145
+ custom-fields:
146
+ desc: Slot para adicionar um campo customizado.
147
+ scope:
148
+ fields:
149
+ desc: Campos atuais.
150
+ default: {}
151
+ type: Object
152
+
153
+ index:
154
+ desc: Index atual dos campos
155
+ type: Number
156
+
157
+ errors:
158
+ desc: Index atual dos campos
159
+ type: Number
160
+
161
+ 'updateValue -> function(value, index)':
162
+ desc: Função para atualizar o model, passando o novo valor e o index.
163
+ type: Function
164
+ examples: ["updateValue({ name: 'novo valor' }, 2)"]
165
+
166
+ add-input:
167
+ desc: Slot para acessar campo de adicionar.
168
+ scope:
169
+ 'add -> function(row)':
170
+ desc: Função para adicionar novos campos no model.
171
+ type: Function
172
+ examples: ["add({ name: 'novo valor' })"]
173
+
174
+ events:
175
+ '@update:model-value -> function (value)':
176
+ desc: Dispara toda vez que o model é atualizado, também utilizado para v-model.
177
+ params:
178
+ value:
179
+ desc: Novo valor do v-model
180
+ type: String
@@ -1,22 +1,24 @@
1
1
  <template>
2
- <div>
3
- <q-field v-model="model" v-bind="$attrs">
4
- <template #control="{ emitValue, floatingLabel, id, value: modelValue }">
5
- <input v-show="floatingLabel" :id="id" ref="input" class="q-field__input" :model-value="modelValue" @input="emitValue($event.target.value)">
6
- </template>
7
- </q-field>
8
- </div>
2
+ <q-field v-model="model" outlined>
3
+ <template #control="{ emitValue, floatingLabel, id, value }">
4
+ <input v-show="floatingLabel" :id="id" ref="input" class="q-field__input" :model-value="value" @input="emitValue($event.target.value)">
5
+ </template>
6
+ </q-field>
9
7
  </template>
10
8
 
11
9
  <script>
10
+ import AutoNumeric from 'autonumeric'
11
+
12
12
  const defaultModes = {
13
- integer: ['commaDecimalCharDotSeparator', 'integer'],
14
13
  decimal: 'commaDecimalCharDotSeparator',
15
- percent: 'percentageEU2dec',
16
- money: 'Brazilian'
14
+ integer: ['commaDecimalCharDotSeparator', 'integer'],
15
+ money: 'Brazilian',
16
+ percent: 'percentageEU2dec'
17
17
  }
18
18
 
19
19
  export default {
20
+ name: 'QasNumericInput',
21
+
20
22
  props: {
21
23
  allowNegative: {
22
24
  default: true,
@@ -44,19 +46,27 @@ export default {
44
46
  validator: value => ['integer', 'decimal', 'percent', 'money'].includes(value)
45
47
  },
46
48
 
49
+ modelValue: {
50
+ default: '',
51
+ type: [String, Number],
52
+ validator: value => {
53
+ return (
54
+ typeof value === 'number' ||
55
+ typeof value === 'string' ||
56
+ value === '' ||
57
+ value === null
58
+ )
59
+ }
60
+ },
61
+
47
62
  preset: {
48
63
  default: false,
49
64
  type: [Boolean, String]
50
- },
51
-
52
- value: {
53
- default: '',
54
- validator (value) {
55
- return typeof value === 'number' || typeof value === 'string' || value === '' || value === null
56
- }
57
65
  }
58
66
  },
59
67
 
68
+ emits: ['update:modelValue'],
69
+
60
70
  data () {
61
71
  return {
62
72
  autoNumeric: null
@@ -70,17 +80,16 @@ export default {
70
80
 
71
81
  model: {
72
82
  get () {
73
- return this.value
83
+ return this.modelValue
74
84
  },
75
85
 
76
86
  set () {
77
- this.$emit('input', this.autoNumeric.getNumber())
87
+ this.$emit('update:modelValue', this.autoNumeric.getNumber())
78
88
  }
79
89
  }
80
90
  },
81
91
 
82
92
  async created () {
83
- const AutoNumeric = (await import('autonumeric')).default
84
93
  const autoNumericPredefinedOptions = AutoNumeric.getPredefinedOptions()
85
94
 
86
95
  let option = this.preset || this.defaultMode
@@ -110,12 +119,12 @@ export default {
110
119
  Object.assign(options, this.autonumericProps)
111
120
 
112
121
  this.$nextTick(() => {
113
- this.$refs.input.value = this.value
122
+ this.$refs.input.value = this.modelValue
114
123
  this.autoNumeric = new AutoNumeric(this.$refs.input, options)
115
124
  })
116
125
  },
117
126
 
118
- beforeDestroy () {
127
+ beforeUnmount () {
119
128
  this.autoNumeric.remove()
120
129
  }
121
130
  }
@@ -0,0 +1,51 @@
1
+ type: component
2
+
3
+ mixins:
4
+ - quasar/dist/api/QField.json
5
+
6
+ meta:
7
+ desc: Componente de input para decimal, inteiro, dinheiro e porcentagem.
8
+
9
+ props:
10
+ allow-negative:
11
+ desc: Controla se pode ou não números negativos.
12
+ default: true
13
+ type: Boolean
14
+
15
+ allow-positive:
16
+ desc: Controla se pode ou não números positivos.
17
+ default: true
18
+ type: Boolean
19
+
20
+ autonumeric-props:
21
+ desc: Opções do autonumeric (http://autonumeric.org/guide).
22
+ default: {}
23
+ type: Object
24
+
25
+ decimal-places:
26
+ desc: Quantidade de casas decimais.
27
+ default: 2
28
+ type: Number
29
+
30
+ mode:
31
+ desc: Modo do componente.
32
+ default: integer
33
+ type: String
34
+ examples: [integer, decimal, percent, money]
35
+
36
+ model-value:
37
+ desc: Model do componente, usado para v-model, sempre que alterado transforma o valor para "Number".
38
+ default: ''
39
+ type: [String, Number]
40
+ model: true
41
+
42
+ preset:
43
+ desc: Propriedade preset serve para usar configuração de predefinição/nacionalidade da moeda pré setada pelo autonumeric (Brasil é o padrão).
44
+ type: [Boolean, String]
45
+
46
+ events:
47
+ '@update:model-value -> function (value)':
48
+ desc: Dispara toda vez que o model é atualizado, também utilizado para v-model.
49
+ params:
50
+ value:
51
+ desc: Novo valor do v-model
@@ -6,28 +6,29 @@
6
6
  {{ title }}
7
7
  </q-toolbar-title>
8
8
 
9
- <q-breadcrumbs v-if="!noBreadcrumbs" class="text-caption text-grey-6">
10
- <q-breadcrumbs-el v-for="item in transformedBreadcrumbs" :key="item.label" :label="item.label" :to="item.route" />
9
+ <q-breadcrumbs v-if="useBreadcrumbs" class="text-caption" separator-color="grey-7">
10
+ <q-breadcrumbs-el v-for="(item, index) in transformedBreadcrumbs" :key="item.label" :class="getBreadcrumbsClass(index)" :label="item.label" :to="item.route" />
11
11
  </q-breadcrumbs>
12
12
  </div>
13
-
14
13
  <slot />
15
14
  </q-toolbar>
16
15
  </template>
17
16
 
18
17
  <script>
19
- import { castArray, get } from 'lodash'
20
- import { history, handleHistory } from '../../helpers/historyHandler'
18
+ import { castArray } from 'lodash-es'
19
+ import { history, getPreviousRoute } from '../../store/history'
21
20
 
22
21
  export default {
22
+ name: 'QasPageHeader',
23
+
23
24
  props: {
24
25
  breadcrumbs: {
25
26
  default: '',
26
- type: [Array, Boolean, String]
27
+ type: [Array, String]
27
28
  },
28
29
 
29
- noBreadcrumbs: {
30
- default: false,
30
+ useBreadcrumbs: {
31
+ default: true,
31
32
  type: Boolean
32
33
  },
33
34
 
@@ -60,8 +61,10 @@ export default {
60
61
  item.route = { name: item.routeName }
61
62
  }
62
63
 
63
- if (this.$history && get(item, 'route.name')) {
64
- const previous = this.$history.find(history => history.name === item.route.name)
64
+ const historyList = history.list
65
+
66
+ if (historyList.length && item?.route?.name) {
67
+ const previous = historyList.find(history => history.name === item.route.name)
65
68
  item.route.query = previous ? previous.query : null
66
69
  }
67
70
 
@@ -72,7 +75,13 @@ export default {
72
75
 
73
76
  methods: {
74
77
  back () {
75
- this.$router.push(handleHistory().getPreviousRoute(this.$route))
78
+ this.$router.push(getPreviousRoute(this.$route))
79
+ },
80
+
81
+ getBreadcrumbsClass (index) {
82
+ const lastIndex = this.transformedBreadcrumbs.length - 1
83
+
84
+ return lastIndex === index ? 'text-grey-7' : 'text-primary'
76
85
  }
77
86
  },
78
87
 
@@ -0,0 +1,24 @@
1
+ type: component
2
+
3
+ mixins:
4
+ - quasar/dist/api/QToolbar.json
5
+
6
+ meta:
7
+ desc: Componente para cabeçalho de páginas com breadcrumbs e botão de voltar baseado no histórico de navegação dentro da aplicação.
8
+
9
+ props:
10
+ breadcrumbs:
11
+ desc: Configurações do QBreadcrumbs (https://quasar.dev/vue-components/breadcrumbs#introduction).
12
+ type: [Array, String]
13
+
14
+ use-breadcrumbs:
15
+ desc: Habilita ou não o breadcrumbs.
16
+ type: [Array, String]
17
+
18
+ title:
19
+ desc: Título do cabeçalho.
20
+ type: String
21
+
22
+ root:
23
+ desc: Rota raiz do breadcrumbs.
24
+ type: [Object, String]