@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
@@ -0,0 +1,67 @@
1
+ type: component
2
+
3
+ mixins:
4
+ - quasar/dist/api/QTabs.json
5
+
6
+ meta:
7
+ desc: Componente para gerar tab dinamicamente, implementa o QTab e Qtabs.
8
+
9
+ props:
10
+ active-color:
11
+ desc: Cor da tab quando ela está ativa.
12
+ type: String
13
+ examples: ['primary', 'negative', 'positive']
14
+
15
+ counter-props:
16
+ desc: Contador de cada tags, funciona como um "notificação"
17
+ default: {}
18
+ type: Object
19
+ examples: ["{ tab: 2 }"]
20
+
21
+ fuse-options:
22
+ desc: Configurações do [fuse.js](https://fusejs.io/api/options.html).
23
+ default: { keys: ['label'] }
24
+ type: Object
25
+
26
+ indicator-color:
27
+ desc: Cor do indicador.
28
+ default: primary
29
+ type: String
30
+
31
+ model-value:
32
+ desc: Model do componente, controla qual é a tab atual selecionada.
33
+ type: String
34
+
35
+ tab-class:
36
+ desc: Classe do QTab
37
+ default: text-primary
38
+ type: String
39
+
40
+ tabs:
41
+ desc: Objeto contendo todas as tabs a serem geradas.
42
+ default: {}
43
+ type: Object
44
+ examples: ["{ tab1: 'tab1', tab2: 'tab2' }"]
45
+
46
+ slots:
47
+ 'tab-[nome-da-chave]':
48
+ desc: Slot dinâmico gerado a partir das chave passada na prop "tabs", substitui todo o "q-tab".
49
+ scope:
50
+ item:
51
+ desc: Objeto com informações da tab atual
52
+ type: Object
53
+
54
+ 'tab-after-[nome-da-chave]':
55
+ desc: Slot dinâmico gerado a partir das chave passada na prop "tabs", substitui o conteúdo dentro do "q-tab".
56
+ scope:
57
+ item:
58
+ desc: Objeto com informações da tab atual
59
+ type: Object
60
+
61
+ events:
62
+ '@update:model-value -> function(value)':
63
+ desc: Dispara quando o model-value altera, também usado para v-model.
64
+ params:
65
+ value:
66
+ desc: Novo valor do model.
67
+ type: String
@@ -4,15 +4,10 @@
4
4
  <div ref="truncate" :class="truncateTextClass">
5
5
  <slot>{{ text }}</slot>
6
6
  </div>
7
- <div v-if="hasTruncate" class="cursor-pointer text-primary" @click="toggleDialog">{{ seeMoreLabel }}</div>
7
+ <div v-if="isTruncated" class="cursor-pointer text-primary" @click="toggleDialog">{{ seeMoreLabel }}</div>
8
8
  </div>
9
- <qas-dialog v-model="showDialog" :cancel="false" :ok="false" v-bind="dialog">
10
- <template #header>
11
- <div class="row" :class="headerClass">
12
- <div v-if="dialogTitle" class="text-bold text-subtitle1">{{ dialogTitle }}</div>
13
- <qas-btn v-close-popup dense flat icon="close" rounded />
14
- </div>
15
- </template>
9
+
10
+ <qas-dialog v-model="showDialog" v-bind="defaultDialogProps">
16
11
  <template #description>
17
12
  <slot>
18
13
  <div>{{ text }}</div>
@@ -23,20 +18,20 @@
23
18
  </template>
24
19
 
25
20
  <script>
26
- import screen from '../../mixins/screen'
27
- import QasDialog from '../dialog/QasDialog'
28
- import QasBtn from '../btn/QasBtn'
21
+ import screenMixin from '../../mixins/screen'
22
+ import QasDialog from '../dialog/QasDialog.vue'
29
23
 
30
24
  export default {
25
+ name: 'QasTextTruncate',
26
+
31
27
  components: {
32
- QasDialog,
33
- QasBtn
28
+ QasDialog
34
29
  },
35
30
 
36
- mixins: [screen],
31
+ mixins: [screenMixin],
37
32
 
38
33
  props: {
39
- dialog: {
34
+ dialogProps: {
40
35
  type: Object,
41
36
  default: () => ({
42
37
  persistent: false
@@ -74,15 +69,28 @@ export default {
74
69
 
75
70
  computed: {
76
71
  truncateTextClass () {
77
- return (this.hasTruncate || this.$_isSmall) && 'ellipsis q-pr-sm'
72
+ return (this.isTruncated || this.mx_isSmall) && 'ellipsis q-pr-sm'
78
73
  },
79
74
 
80
- hasTruncate () {
75
+ isTruncated () {
81
76
  return this.textWidth > this.maxPossibleWidth
82
77
  },
83
78
 
84
79
  headerClass () {
85
80
  return this.dialogTitle ? 'justify-between' : 'justify-end'
81
+ },
82
+
83
+ defaultDialogProps () {
84
+ return {
85
+ cancel: false,
86
+ ok: false,
87
+ useCloseIcon: true,
88
+ ...this.dialogProps,
89
+ card: {
90
+ title: this.dialogTitle,
91
+ description: this.text
92
+ }
93
+ }
86
94
  }
87
95
  },
88
96
 
@@ -0,0 +1,32 @@
1
+ type: component
2
+
3
+ meta:
4
+ desc: Trunca um texto baseado no tamanho do elemento pai e adiciona um rotulo "ver mais" que quando clicado mostra um dialog com o texto original completo (sem ser truncado).
5
+
6
+ props:
7
+ dialog-props:
8
+ desc: Repassa todas props e eventos para o componente `QasDialog`.
9
+ type: Object
10
+ default: { persistent: false }
11
+
12
+ dialog-title:
13
+ desc: Seta o título do dialog.
14
+ type: String
15
+
16
+ max-width:
17
+ desc: Seta o tamanho máximo do texto.
18
+ type: Number
19
+ default: 0
20
+
21
+ see-more-label:
22
+ desc: Texto que vai aparecer para ser clicado quando o texto original for truncado.
23
+ type: String
24
+ default: Ver mais
25
+
26
+ text:
27
+ desc: Texto a ser truncado.
28
+ type: String
29
+
30
+ slots:
31
+ default:
32
+ desc: slot padrão que é utilizado para acessar o texto original (tanto o que é truncado quando o de dentro do dialog)
@@ -1,14 +1,15 @@
1
1
  <template>
2
2
  <div class="qas-transfer row" :class="gutterClass">
3
+ <div class="col-12" />
3
4
  <div class="col-12 col-sm">
4
5
  <qas-label :label="label" :quantity="optionsList.length" />
5
6
 
6
7
  <qas-search-box form-mode :list="optionsList" v-bind="searchBoxProps">
7
8
  <template #default="{ results }">
8
9
  <q-list separator>
9
- <q-item v-for="(item, index) in results" :key="index" :class="itemClass(item, true)" clickable @click="onSelectQueue(item, true)">
10
+ <q-item v-for="(item, index) in results" :key="index" :class="getItemClass(item, true)" clickable @click="onSelectQueue(item, true)">
10
11
  <slot name="item-first-column">
11
- <q-item-section>{{ item[labelKey] }}</q-item-section>
12
+ <q-item-section>{{ getItemLabel(item) }}</q-item-section>
12
13
  </slot>
13
14
  </q-item>
14
15
  </q-list>
@@ -18,10 +19,8 @@
18
19
 
19
20
  <div class="col-12 col-sm-auto items-center justify-center q-col-gutter-md row" :class="actionsClass">
20
21
  <div>
21
- <div>
22
- <qas-btn :class="iconClass" dense :disabled="!firstQueue.length" flat icon="o_arrow_circle_down" rounded @click="setSelectedFromClick(true)" />
23
- <q-tooltip anchor="top middle" self="center middle">Selecionar</q-tooltip>
24
- </div>
22
+ <qas-btn :class="iconClass" dense :disabled="!firstQueue.length" flat icon="o_arrow_circle_down" rounded @click="setSelectedFromClick(true)" />
23
+ <q-tooltip anchor="top middle" self="center middle">Selecionar</q-tooltip>
25
24
  </div>
26
25
  <div>
27
26
  <div>
@@ -34,12 +33,12 @@
34
33
  <div class="col-12 col-sm">
35
34
  <qas-label label="Selecionadas" :quantity="selectedList.length" />
36
35
 
37
- <qas-search-box v-bind="searchBoxProps" empty-list-height="300px" form-mode label="Selecionadas" :list="selectedList" :quantity="selectedList.length">
36
+ <qas-search-box v-bind="searchBoxProps" empty-list-height="300px" form-mode label="Selecionadas" :list="selectedList">
38
37
  <template #default="{ results }">
39
38
  <q-list separator>
40
- <q-item v-for="(item, index) in results" :key="index" :class="itemClass(item)" clickable @click="onSelectQueue(item)">
39
+ <q-item v-for="(item, index) in results" :key="index" :class="getItemClass(item)" clickable @click="onSelectQueue(item)">
41
40
  <slot name="item-second-column">
42
- <q-item-section>{{ item[labelKey] }}</q-item-section>
41
+ <q-item-section>{{ getItemLabel(item) }}</q-item-section>
43
42
  </slot>
44
43
  </q-item>
45
44
  </q-list>
@@ -50,19 +49,24 @@
50
49
  </template>
51
50
 
52
51
  <script>
52
+ import { screenMixin } from '../../mixins'
53
53
  import { extend } from 'quasar'
54
54
 
55
- import QasBtn from '../btn/QasBtn'
56
- import QasLabel from '../label/QasLabel'
57
- import QasSearchBox from '../search-box/QasSearchBox'
55
+ import QasBtn from '../btn/QasBtn.vue'
56
+ import QasLabel from '../label/QasLabel.vue'
57
+ import QasSearchBox from '../search-box/QasSearchBox.vue'
58
58
 
59
59
  export default {
60
+ name: 'QasTransfer',
61
+
60
62
  components: {
61
63
  QasBtn,
62
64
  QasLabel,
63
65
  QasSearchBox
64
66
  },
65
67
 
68
+ mixins: [screenMixin],
69
+
66
70
  props: {
67
71
  emitValue: {
68
72
  type: Boolean
@@ -73,12 +77,6 @@ export default {
73
77
  type: Object
74
78
  },
75
79
 
76
- hideEmptySlot: {
77
- default: true,
78
- type: Boolean
79
- },
80
-
81
- // TODO: Criar o "toLabel" para o slugar de selecionados.
82
80
  label: {
83
81
  default: '',
84
82
  required: true,
@@ -90,22 +88,29 @@ export default {
90
88
  type: String
91
89
  },
92
90
 
93
- options: {
91
+ modelValue: {
94
92
  default: () => [],
95
93
  type: Array
96
94
  },
97
95
 
98
- value: {
96
+ options: {
99
97
  default: () => [],
100
98
  type: Array
101
99
  },
102
100
 
101
+ useEmptySlot: {
102
+ default: true,
103
+ type: Boolean
104
+ },
105
+
103
106
  valueKey: {
104
107
  default: 'value',
105
108
  type: String
106
109
  }
107
110
  },
108
111
 
112
+ emits: ['update:modelValue'],
113
+
109
114
  data () {
110
115
  return {
111
116
  firstQueue: [],
@@ -117,31 +122,21 @@ export default {
117
122
 
118
123
  computed: {
119
124
  actionsClass () {
120
- return !this.isSmall && 'column'
125
+ return !this.mx_isSmall && 'column'
121
126
  },
122
127
 
123
128
  gutterClass () {
124
- return `q-col-gutter-${this.isMedium ? 'md' : 'xl'}`
129
+ return `q-col-gutter-${this.mx_untilLarge ? 'md' : 'xl'}`
125
130
  },
126
131
 
127
132
  iconClass () {
128
- return !this.isSmall && 'qas-transfer__icon'
129
- },
130
-
131
- isMedium () {
132
- return this.$q.screen.lt.md
133
- },
134
-
135
- // TODO: Small seria se fosse sm.
136
- isSmall () {
137
- return this.$q.screen.xs
133
+ return !this.mx_isSmall && 'qas-transfer__icon'
138
134
  },
139
135
 
140
136
  searchBoxProps () {
141
137
  return {
142
138
  fuseOptions: this.fuseOptions,
143
- hideEmptySlot: this.hideEmptySlot,
144
- list: this.options
139
+ useEmptySlot: this.useEmptySlot
145
140
  }
146
141
  }
147
142
  },
@@ -155,8 +150,8 @@ export default {
155
150
  immediate: true
156
151
  },
157
152
 
158
- value: {
159
- handler (value, oldValue) {
153
+ modelValue: {
154
+ handler () {
160
155
  this.setSelectedFromValue(true)
161
156
  },
162
157
 
@@ -178,7 +173,18 @@ export default {
178
173
  })
179
174
  },
180
175
 
181
- handleEmit () {
176
+ getItemClass (object, isFirst) {
177
+ return this[isFirst
178
+ ? 'firstQueue'
179
+ : 'secondQueue'
180
+ ].some(item => item[this.valueKey] === object[this.valueKey]) && 'bg-secondary'
181
+ },
182
+
183
+ getItemLabel (item) {
184
+ return item?.[this.labelKey]
185
+ },
186
+
187
+ getModelValue () {
182
188
  const selectedList = extend(true, [], this.selectedList)
183
189
  return this.emitValue ? selectedList.map(item => item[this.valueKey]) : selectedList
184
190
  },
@@ -191,27 +197,20 @@ export default {
191
197
  this[model] = []
192
198
  },
193
199
 
194
- itemClass (object, isFirst) {
195
- return this[isFirst
196
- ? 'firstQueue'
197
- : 'secondQueue'
198
- ].some(item => item[this.valueKey] === object[this.valueKey]) && 'bg-secondary'
199
- },
200
-
201
200
  onSelectQueue (item, isFirst) {
202
201
  const model = isFirst ? 'firstQueue' : 'secondQueue'
203
202
  const index = this[model].findIndex(selected => selected[this.valueKey] === item[this.valueKey])
204
203
 
205
- return ~index ? this[model].splice(index, 1) : this[model].push(item)
204
+ ~index ? this[model].splice(index, 1) : this[model].push(item)
206
205
  },
207
206
 
208
207
  setSelectedFromClick (isFirst) {
209
208
  this.handleSelectedList(isFirst)
210
- this.updateValue()
209
+ this.updateModelValue()
211
210
  },
212
211
 
213
212
  setSelectedFromValue (isFirst) {
214
- this.value.forEach(item => {
213
+ this.modelValue.forEach(item => {
215
214
  const selected = this.optionsList.find(option => {
216
215
  return option[this.valueKey] === (this.emitValue ? item : item[this.valueKey])
217
216
  })
@@ -224,8 +223,8 @@ export default {
224
223
  this.handleSelectedList(isFirst)
225
224
  },
226
225
 
227
- updateValue () {
228
- return this.$emit('input', this.handleEmit())
226
+ updateModelValue () {
227
+ return this.$emit('update:modelValue', this.getModelValue())
229
228
  }
230
229
  }
231
230
  }
@@ -0,0 +1,59 @@
1
+ type: component
2
+
3
+ meta:
4
+ desc: Componente para transferir itens entre 2 lista (colunas).
5
+
6
+ props:
7
+ emit-value:
8
+ desc: Controla como sera o retorno do model, se "true" será um array de string, se "false" array de objeto.
9
+ type: Boolean
10
+
11
+ model-value:
12
+ desc: Model do componente, controla quais itens estão na segunda coluna.
13
+ default: []
14
+ type: Array
15
+
16
+ fuse-options:
17
+ desc: Configurações do [fuse.js](https://fusejs.io/api/options.html).
18
+ default: { keys: ['label'] }
19
+ type: Object
20
+
21
+ label:
22
+ desc: Rotulo que vai ficar em cima da primeira coluna.
23
+ type: String
24
+ required: true
25
+
26
+ label-key:
27
+ desc: Nos options, você pode passar um array de objeto com qualquer chave/valor, esta prop serve para identificar qual será o equivalente ao "label".
28
+ default: label
29
+ type: String
30
+
31
+ options:
32
+ desc: Array de objetos com todos items que serão transferidos
33
+ default: []
34
+ type: Array
35
+
36
+ use-empty-slot:
37
+ desc: Prop que será repassada para o componente "QasSearchBox", basicamente esconde o slot "empty-result".
38
+ type: Boolean
39
+ default: true
40
+
41
+ value-key:
42
+ desc: Nos options, você pode passar um array de objeto com qualquer chave/valor, esta prop serve para identificar qual será o equivalente ao "value".
43
+ default: value
44
+ type: String
45
+
46
+ slots:
47
+ item-first-column:
48
+ desc: Slot para acessar cada item dentro do `q-item` da primeira coluna.
49
+
50
+ item-second-column:
51
+ desc: Slot para acessar cada item dentro do `q-item` da segunda coluna.
52
+
53
+ events:
54
+ '@update:model-value -> function(value)':
55
+ desc: Dispara quando o model-value altera, também usado para v-model.
56
+ params:
57
+ value:
58
+ desc: Novo valor do model (pode ser array de string ou objeto).
59
+ type: Array