@bildvitta/quasar-ui-asteroid 3.20.0-beta.2 → 3.20.0-beta.21

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 (102) hide show
  1. package/package.json +3 -3
  2. package/src/asteroid.js +8 -1
  3. package/src/components/actions/QasActions.vue +12 -2
  4. package/src/components/actions-menu/QasActionsMenu.vue +18 -5
  5. package/src/components/alert/QasAlert.vue +89 -64
  6. package/src/components/app-user/QasAppUser.vue +2 -1
  7. package/src/components/board-generator/QasBoardGenerator.vue +883 -162
  8. package/src/components/board-generator/QasBoardGenerator.yml +83 -2
  9. package/src/components/board-generator/private/PvBoardGeneratorCardsContainer.vue +25 -0
  10. package/src/components/box/QasBox.vue +16 -3
  11. package/src/components/box/QasBox.yml +10 -0
  12. package/src/components/btn/QasBtn.vue +27 -5
  13. package/src/components/btn/QasBtn.yml +10 -1
  14. package/src/components/btn-dropdown/QasBtnDropdown.vue +13 -1
  15. package/src/components/card/QasCard.vue +97 -25
  16. package/src/components/card/QasCard.yml +10 -0
  17. package/src/components/card-image/QasCardImage.vue +10 -1
  18. package/src/components/card-image/QasCardImage.yml +5 -0
  19. package/src/components/chart-view/QasChartView.vue +4 -3
  20. package/src/components/chart-view/QasChartView.yml +5 -0
  21. package/src/components/checkbox/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  22. package/src/components/copy/QasCopy.vue +6 -1
  23. package/src/components/copy/QasCopy.yml +5 -0
  24. package/src/components/date-time-input/QasDateTimeInput.vue +30 -6
  25. package/src/components/dialog/QasDialog.vue +308 -91
  26. package/src/components/dialog/QasDialog.yml +51 -23
  27. package/src/components/dialog/composables/use-cancel.js +1 -1
  28. package/src/components/dialog/composables/use-dynamic-components.js +2 -2
  29. package/src/components/dialog/composables/use-ok.js +1 -0
  30. package/src/components/dialog-router/QasDialogRouter.vue +1 -1
  31. package/src/components/drawer/QasDrawer.vue +76 -26
  32. package/src/components/drawer/QasDrawer.yml +10 -0
  33. package/src/components/expansion-item/QasExpansionItem.yml +5 -0
  34. package/src/components/filters/QasFilters.vue +2 -1
  35. package/src/components/filters/private/PvFiltersActions.vue +79 -13
  36. package/src/components/form-generator/QasFormGenerator.vue +8 -1
  37. package/src/components/form-generator/QasFormGenerator.yml +10 -0
  38. package/src/components/form-view/QasFormView.vue +20 -11
  39. package/src/components/form-view/QasFormView.yml +6 -0
  40. package/src/components/gallery/composables/use-delete.js +2 -3
  41. package/src/components/gallery/private/PvGalleryCarouselDialog.vue +8 -7
  42. package/src/components/grid-item/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  43. package/src/components/header/QasHeader.vue +66 -11
  44. package/src/components/header/QasHeader.yml +16 -1
  45. package/src/components/infinite-scroll/QasInfiniteScroll.vue +1 -1
  46. package/src/components/label/QasLabel.vue +3 -1
  47. package/src/components/layout/QasLayout.vue +16 -1
  48. package/src/components/layout/private/PvLayoutNotificationsDrawer.vue +2 -1
  49. package/src/components/layout/private/PvLayoutOverlayDrawer.vue +4 -2
  50. package/src/components/lazy-loading-components/QasLazyLoadingComponents.vue +262 -0
  51. package/src/components/lazy-loading-components/QasLazyLoadingComponents.yml +49 -0
  52. package/src/components/list-view/QasListView.vue +12 -4
  53. package/src/components/list-view/QasListView.yml +12 -0
  54. package/src/components/page-header/QasPageHeader.vue +49 -3
  55. package/src/components/page-header/QasPageHeader.yml +5 -0
  56. package/src/components/router-link/QasRouterLink.vue +72 -0
  57. package/src/components/router-link/QasRouterLink.yml +24 -0
  58. package/src/components/search-box/QasSearchBox.vue +1 -1
  59. package/src/components/select/QasSelect.vue +8 -1
  60. package/src/components/select-list-dialog/QasSelectListDialog.vue +40 -20
  61. package/src/components/select-list-dialog/QasSelectListDialog.yml +14 -2
  62. package/src/components/signature-uploader/QasSignatureUploader.vue +5 -18
  63. package/src/components/single-view/QasSingleView.vue +2 -2
  64. package/src/components/skeleton/QasSkeleton.vue +139 -0
  65. package/src/components/skeleton/QasSkeleton.yml +48 -0
  66. package/src/components/sortable/QasSortable.vue +1 -1
  67. package/src/components/stepper/QasStepper.vue +24 -2
  68. package/src/components/table-generator/QasTableGenerator.vue +186 -35
  69. package/src/components/table-generator/QasTableGenerator.yml +6 -1
  70. package/src/components/tabs-generator/QasTabsGenerator.vue +14 -3
  71. package/src/components/tabs-generator/QasTabsGenerator.yml +5 -1
  72. package/src/components/text-truncate/QasTextTruncate.vue +61 -12
  73. package/src/components/text-truncate/QasTextTruncate.yml +5 -0
  74. package/src/components/toggle-visibility/QasToggleVisibility.vue +2 -1
  75. package/src/components/tooltip/QasTooltip.vue +6 -1
  76. package/src/components/tree-generator/QasTreeGenerator.vue +4 -6
  77. package/src/components/uploader/QasUploader.vue +12 -2
  78. package/src/composables/private/use-view.js +1 -1
  79. package/src/composables/use-overlay-navigation.js +116 -10
  80. package/src/composables/use-screen.js +17 -1
  81. package/src/css/components/button.scss +82 -3
  82. package/src/css/components/item.scss +6 -0
  83. package/src/css/utils/background.scss +5 -0
  84. package/src/css/utils/border.scss +6 -0
  85. package/src/css/utils/container.scss +4 -3
  86. package/src/css/utils/text.scss +9 -0
  87. package/src/helpers/copy-to-clipboard.js +2 -1
  88. package/src/helpers/filters.js +1 -1
  89. package/src/helpers/promise-handler.js +2 -1
  90. package/src/helpers/set-scroll-gradient.js +31 -8
  91. package/src/helpers/set-scroll-on-grab.js +10 -3
  92. package/src/index.scss +1 -0
  93. package/src/mixins/search-filter.js +7 -1
  94. package/src/plugins/delete/Delete.js +7 -9
  95. package/src/plugins/delete/Delete.yml +1 -1
  96. package/src/plugins/dialog/Dialog.yml +1 -1
  97. package/src/plugins/notify-error/NotifyError.yml +1 -1
  98. package/src/plugins/notify-success/NotifySuccess.yml +1 -1
  99. package/src/plugins/screen/Screen.js +17 -1
  100. package/src/plugins/screen/Screen.yml +5 -1
  101. package/src/vue-plugin.js +5 -7
  102. package/src/plugins/index.js +0 -5
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bildvitta/quasar-ui-asteroid",
3
3
  "description": "Asteroid",
4
- "version": "3.20.0-beta.2",
4
+ "version": "3.20.0-beta.21",
5
5
  "author": "Bild & Vitta <systemteam@bild.com.br>",
6
6
  "license": "MIT",
7
7
  "main": "./src/asteroid.js",
@@ -45,7 +45,7 @@
45
45
  "@bildvitta/composables": "^1.0.0-beta.7",
46
46
  "@bildvitta/store-adapter": "^1.0.0",
47
47
  "autonumeric": "4.10.9",
48
- "axios": "^1.4.0",
48
+ "axios": "1.4.0",
49
49
  "date-fns": "^2.30.0",
50
50
  "pdfjs-dist": "4.3.136",
51
51
  "debug": "^4.3.4",
@@ -55,7 +55,7 @@
55
55
  "lodash-es": "^4.17.21",
56
56
  "pica": "^9.0.1",
57
57
  "signature_pad": "^4.1.5",
58
- "sortablejs": "^1.15.3"
58
+ "sortablejs": "1.15.7"
59
59
  },
60
60
  "peerDependencies": {
61
61
  "@quasar/extras": "^1.16.0",
package/src/asteroid.js CHANGED
@@ -4,7 +4,13 @@ export * from './helpers'
4
4
  export * from './mixins'
5
5
  export * from './vue-plugin'
6
6
  export * from './composables'
7
- export * from './plugins'
7
+
8
+ // plugins
9
+ export { default as Delete } from './plugins/delete/Delete.js'
10
+ export { default as Dialog } from './plugins/dialog/Dialog.js'
11
+ export { default as NotifyError } from './plugins/notify-error/NotifyError.js'
12
+ export { default as NotifySuccess } from './plugins/notify-success/NotifySuccess.js'
13
+ export { default as Screen } from './plugins/screen/Screen.js'
8
14
 
9
15
  // components
10
16
  export const QasActions = defineAsyncComponent(() => import('./components/actions/QasActions.vue'))
@@ -72,6 +78,7 @@ export const QasSignaturePad = defineAsyncComponent(() => import('./components/s
72
78
  export const QasSignatureUploader = defineAsyncComponent(() => import('./components/signature-uploader/QasSignatureUploader.vue'))
73
79
  export const QasSingleView = defineAsyncComponent(() => import('./components/single-view/QasSingleView.vue'))
74
80
  export const QasSortable = defineAsyncComponent(() => import('./components/sortable/QasSortable.vue'))
81
+ export const QasSkeleton = defineAsyncComponent(() => import('./components/skeleton/QasSkeleton.vue'))
75
82
  export const QasStatus = defineAsyncComponent(() => import('./components/status/QasStatus.vue'))
76
83
  export const QasStepper = defineAsyncComponent(() => import('./components/stepper/QasStepper.vue'))
77
84
  export const QasStepperFormView = defineAsyncComponent(() => import('./components/stepper-form-view/QasStepperFormView.vue'))
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="q-mt-sm" :class="classes">
2
+ <div :class="classes">
3
3
  <div v-if="hasTertiaryButton" :class="columnClasses">
4
4
  <slot name="tertiary">
5
5
  <qas-btn v-bind="formattedButtonsProps.tertiary" class="full-width" />
@@ -24,6 +24,7 @@
24
24
  import useScreen from '../../composables/use-screen'
25
25
  import { FlexAlign } from '../../enums/Align'
26
26
  import { Spacing } from '../../enums/Spacing'
27
+ import { gutterValidator } from '../../helpers/private/gutter-validator'
27
28
 
28
29
  import QasBtn from '../btn/QasBtn.vue'
29
30
 
@@ -41,7 +42,7 @@ const props = defineProps({
41
42
  gutter: {
42
43
  default: '',
43
44
  type: String,
44
- validator: value => !value || Object.values(Spacing).includes(value)
45
+ validator: value => !value || gutterValidator(value)
45
46
  },
46
47
 
47
48
  primaryButtonProps: {
@@ -54,6 +55,12 @@ const props = defineProps({
54
55
  default: () => ({})
55
56
  },
56
57
 
58
+ spacingTop: {
59
+ type: String,
60
+ default: Spacing.Sm,
61
+ validator: value => Object.values(Spacing).includes(value)
62
+ },
63
+
57
64
  tertiaryButtonProps: {
58
65
  type: Object,
59
66
  default: () => ({})
@@ -81,6 +88,9 @@ const classes = computed(() => {
81
88
  return [
82
89
  !screen.isSmall && 'items-center',
83
90
 
91
+ // espaçamento superior
92
+ `q-mt-${props.spacingTop}`,
93
+
84
94
  // alinhamento
85
95
  `justify-${props.align}`,
86
96
 
@@ -6,11 +6,11 @@
6
6
  <q-item v-bind="getItemProps(item)" :key="key" active-class="primary" clickable data-cy="actions-menu-list-item" @click="setClickHandler(item)">
7
7
  <q-item-section avatar>
8
8
  <q-spinner v-if="item.loading" size="sm" />
9
- <q-icon v-else :name="item.icon" />
9
+ <q-icon v-else :class="getMagicAiClasses(item)" :name="item.icon" />
10
10
  </q-item-section>
11
11
 
12
12
  <q-item-section>
13
- <q-item-label>
13
+ <q-item-label :class="getMagicAiClasses(item)">
14
14
  {{ item.label }}
15
15
  </q-item-label>
16
16
  </q-item-section>
@@ -49,8 +49,6 @@ const SPLIT_SIZE = 2
49
49
 
50
50
  defineOptions({ name: 'QasActionsMenu' })
51
51
 
52
- const qas = inject('qas')
53
-
54
52
  const props = defineProps({
55
53
  buttonProps: {
56
54
  default: () => ({}),
@@ -81,6 +79,10 @@ const props = defineProps({
81
79
  type: Object
82
80
  },
83
81
 
82
+ skeleton: {
83
+ type: Boolean
84
+ },
85
+
84
86
  splitName: {
85
87
  default: '',
86
88
  type: String
@@ -100,6 +102,10 @@ const props = defineProps({
100
102
  }
101
103
  })
102
104
 
105
+ // globals
106
+ const qas = inject('qas')
107
+ const isInsideTableGenerator = inject('isTableGenerator', false)
108
+
103
109
  // refs
104
110
  const menuModel = ref(false)
105
111
 
@@ -152,7 +158,9 @@ const primaryKey = computed(() => {
152
158
  const defaultButtonPropsList = computed(() => {
153
159
  const defaultButtonPropsList = {
154
160
  useHoverOnWhiteColor: true,
155
- useLabelOnSmallScreen: false
161
+
162
+ // se estiver dentro do QasTableGenerator, sempre mostra o label.
163
+ useLabelOnSmallScreen: isInsideTableGenerator
156
164
  }
157
165
 
158
166
  const normalizedButtonPropsList = {}
@@ -181,6 +189,7 @@ const btnDropdownProps = computed(() => {
181
189
  return {
182
190
  buttonsPropsList: defaultButtonPropsList.value,
183
191
  disable: props.disable,
192
+ skeleton: props.skeleton,
184
193
  useSplit: hasSplit.value,
185
194
  useAutoClose: !hasActiveLoading.value
186
195
  }
@@ -277,6 +286,10 @@ function getItemProps (item) {
277
286
  }
278
287
  }
279
288
 
289
+ function getMagicAiClasses ({ useMagicAiColor }) {
290
+ return { 'text-magic-ai': useMagicAiColor }
291
+ }
292
+
280
293
  function handleMenuModel (newValue, oldValue) {
281
294
  // Fecha o menu após o estado de loading do item passar de true para false
282
295
  if (oldValue && !newValue) {
@@ -133,83 +133,108 @@ const component = computed(() => {
133
133
  })
134
134
 
135
135
  const textComponent = computed(() => {
136
- // Regex para encontrar caracteres que estiverem dentro de [].
137
- const regex = /\[.*?\]/g
138
-
139
- const matches = props.text.match(regex) || []
136
+ // Configuração dos tokens suportados
137
+ const tokens = [
138
+ {
139
+ type: 'LINK',
140
+ regex: /\[(.*?)\]/g,
141
+ extractContent: match => match.replace(/\[(.*?)\]/, '$1'),
142
+ render: (content, index) => {
143
+ const isButtonPropsArray = Array.isArray(props.buttonProps)
144
+ const isRouterPropsArray = Array.isArray(props.routerLinkProps)
145
+
146
+ const buttonPropsForIndex = isButtonPropsArray
147
+ ? props.buttonProps[index]
148
+ : props.buttonProps
149
+
150
+ const routerLinkPropsForIndex = isRouterPropsArray
151
+ ? props.routerLinkProps[index]
152
+ : props.routerLinkProps
153
+
154
+ const hasButtonProps = buttonPropsForIndex && !!Object.keys(buttonPropsForIndex).length
155
+
156
+ if (hasButtonProps) {
157
+ return h(QasBtn, {
158
+ variant: 'tertiary',
159
+ label: content,
160
+ ...buttonPropsForIndex
161
+ })
162
+ }
163
+
164
+ return h(RouterLink, {
165
+ ...routerLinkPropsForIndex,
166
+ class: 'text-primary text-subtitle1 qas-alert__link'
167
+ }, {
168
+ default: () => content
169
+ })
170
+ }
171
+ },
172
+ {
173
+ type: 'BOLD',
174
+ regex: /\*\*(.*?)\*\*/g,
175
+ extractContent: match => match.replace(/\*\*(.*?)\*\*/, '$1'),
176
+ render: content => h('strong', { class: 'text-weight-bold' }, content)
177
+ }
178
+ ]
179
+
180
+ // Encontra todos os matches de todos os tipos de token
181
+ const allMatches = []
182
+
183
+ tokens.forEach(token => {
184
+ const matches = props.text.match(token.regex) || []
185
+
186
+ matches.forEach(match => {
187
+ allMatches.push({
188
+ type: token.type,
189
+ match,
190
+ content: token.extractContent(match),
191
+ render: token.render
192
+ })
193
+ })
194
+ })
140
195
 
141
- if (!matches.length) return h('span', props.text)
196
+ // Se não há matches, retorna texto simples
197
+ if (!allMatches.length) {
198
+ return h('span', props.text)
199
+ }
142
200
 
143
201
  let processedText = props.text
144
202
 
145
- /**
146
- * Substitui cada match por um placeholder único na ordem correta
147
- * Exemplo: "Clique [aqui] para [ver mais]" vira "Clique $0 para $1"
148
- */
149
- matches.forEach((match, index) => {
150
- processedText = processedText.replace(match, `$${index}`)
203
+ // Substitui cada match por um placeholder único
204
+ allMatches.forEach((matchData, index) => {
205
+ processedText = processedText.replace(matchData.match, `$${matchData.type}_${index}`)
151
206
  })
152
207
 
153
- // Divide o texto pelos placeholders
154
- const parts = processedText.split(/\$\d+/)
155
-
156
- const placeholders = processedText.match(/\$\d+/g) || []
157
-
208
+ // Separa o texto em partes
209
+ const parts = processedText.split(/(\$\w+_\d+)/)
158
210
  const result = []
159
211
 
160
- parts.forEach((part, index) => {
161
- if (part) result.push(part)
162
-
163
- if (index < placeholders.length) {
164
- // Pega o índice do placeholder para encontrar o match correto
165
- const placeholderIndex = parseInt(placeholders[index].replace('$', ''))
166
-
167
- // Pega o texto original do match. Ex: '[Clique aqui]'
168
- const match = matches[placeholderIndex]
169
-
170
- // Remove os colchetes do match. Ex: [Clique aqui] para Clique aqui
171
- const routerLabel = match.replaceAll(/[[\]]/g, '')
172
-
173
- // Determina as props do botão/link baseado no índice
174
- const isButtonPropsArray = Array.isArray(props.buttonProps)
175
- const isRouterPropsArray = Array.isArray(props.routerLinkProps)
176
-
177
- const buttonPropsForIndex = isButtonPropsArray
178
- ? props.buttonProps[placeholderIndex]
179
- : props.buttonProps
212
+ parts.forEach(part => {
213
+ // Se a parte é texto normal, adiciona como string
214
+ if (!part.startsWith('$')) {
215
+ if (part) result.push(part)
216
+ return
217
+ }
180
218
 
181
- const routerLinkPropsForIndex = isRouterPropsArray
182
- ? props.routerLinkProps[placeholderIndex]
183
- : props.routerLinkProps
219
+ // Se é um placeholder, encontra o match correspondente
220
+ const placeholderMatch = part.match(/\$(\w+)_(\d+)/)
221
+ if (!placeholderMatch) return
184
222
 
185
- const hasButtonProps = buttonPropsForIndex && !!Object.keys(buttonPropsForIndex).length
223
+ const [, type, indexStr] = placeholderMatch
224
+ const index = parseInt(indexStr)
186
225
 
187
- const getRouterLinkRender = () => {
188
- return h(
189
- RouterLink,
190
- {
191
- ...routerLinkPropsForIndex,
192
- class: 'text-primary text-subtitle1 qas-alert__link'
193
- },
194
- {
195
- default: () => routerLabel
196
- }
197
- )
198
- }
226
+ // Encontra o match data correspondente
227
+ const matchData = allMatches[index]
228
+ if (!matchData || matchData.type !== type) return
199
229
 
200
- const getQasBtnRender = () => {
201
- return h(
202
- QasBtn,
203
- {
204
- variant: 'tertiary',
205
- label: routerLabel,
206
- ...buttonPropsForIndex
207
- }
208
- )
209
- }
230
+ // Conta quantos matches do mesmo tipo vieram antes (para o índice das props)
231
+ const typeIndex = allMatches
232
+ .slice(0, index)
233
+ .filter(m => m.type === type)
234
+ .length
210
235
 
211
- result.push(hasButtonProps ? getQasBtnRender() : getRouterLinkRender())
212
- }
236
+ // Renderiza o componente
237
+ result.push(matchData.render(matchData.content, typeIndex))
213
238
  })
214
239
 
215
240
  return h('span', result)
@@ -76,7 +76,8 @@ import useNotifications from '../../composables/use-notifications'
76
76
  import useQueryCache from '../../composables/use-query-cache'
77
77
  import useScreen from '../../composables/use-screen'
78
78
 
79
- import { NotifySuccess, NotifyError } from '../../plugins'
79
+ import NotifySuccess from '../../plugins/notify-success/NotifySuccess.js'
80
+ import NotifyError from '../../plugins/notify-error/NotifyError.js'
80
81
 
81
82
  import { ref, computed, watch, inject } from 'vue'
82
83
  import { useRouter } from 'vue-router'