@mythpe/quasar-ui-qui 0.0.26-dev → 0.0.27-dev

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 (54) hide show
  1. package/index.d.ts +0 -4
  2. package/package.json +2 -1
  3. package/src/components/datatable/MDatatable.vue +2305 -0
  4. package/src/components/datatable/MDtAvatar.vue +49 -0
  5. package/src/components/datatable/MDtBtn.vue +153 -0
  6. package/src/components/datatable/MDtContextmenuItems.vue +54 -0
  7. package/src/components/datatable/index.ts +6 -0
  8. package/src/components/form/MAvatarViewer.vue +6 -3
  9. package/src/components/form/MAxios.vue +7 -4
  10. package/src/components/form/MCheckbox.vue +33 -9
  11. package/src/components/form/MDate.vue +4 -1
  12. package/src/components/form/MEmail.vue +4 -1
  13. package/src/components/form/MField.vue +4 -1
  14. package/src/components/form/MFile.vue +5 -2
  15. package/src/components/form/MForm.vue +4 -1
  16. package/src/components/form/MHiddenInput.vue +4 -1
  17. package/src/components/form/MInput.vue +1 -1
  18. package/src/components/form/MInputLabel.vue +4 -1
  19. package/src/components/form/MMobile.vue +4 -1
  20. package/src/components/form/MOptions.vue +255 -0
  21. package/src/components/form/MOtp.vue +292 -0
  22. package/src/components/form/MRadio.vue +5 -2
  23. package/src/components/form/MSelect.vue +4 -1
  24. package/src/components/form/MTime.vue +4 -1
  25. package/src/components/form/MToggle.vue +211 -0
  26. package/src/components/form/MUploader.vue +511 -0
  27. package/src/components/form/index.ts +9 -1
  28. package/src/components/grid/MColumn.vue +4 -1
  29. package/src/components/grid/MHelpRow.vue +5 -1
  30. package/src/components/index.ts +3 -0
  31. package/src/components/modal/MDialog.vue +58 -0
  32. package/src/components/modal/MModalMenu.vue +62 -0
  33. package/src/components/modal/MTooltip.vue +39 -0
  34. package/src/components/modal/index.ts +5 -0
  35. package/src/components/parials/UploaderItem.vue +298 -0
  36. package/src/components/parials/index.ts +3 -0
  37. package/src/components/transition/MTransition.vue +4 -1
  38. package/src/composable/useBindInput.ts +1 -1
  39. package/src/composable/useMyth.ts +20 -11
  40. package/src/index.sass +2 -1
  41. package/src/style/main.sass +104 -0
  42. package/src/style/print.sass +14 -0
  43. package/src/style/transition.sass +40 -0
  44. package/src/types/api-helpers.d.ts +11 -72
  45. package/src/types/components.d.ts +411 -105
  46. package/src/types/index.d.ts +5 -139
  47. package/src/types/install-options.d.ts +19 -0
  48. package/src/types/m-datatable.d.ts +316 -0
  49. package/src/types/m-geolocation.d.ts +16 -0
  50. package/src/types/m-helpers.d.ts +97 -0
  51. package/src/types/plugin-props-option.d.ts +301 -0
  52. package/src/utils/myth.ts +15 -1
  53. package/src/utils/vue-plugin.ts +34 -2
  54. package/src/types/dt.d.ts +0 -144
@@ -0,0 +1,39 @@
1
+ <!--
2
+ - MyTh Ahmed Faiz Copyright © 2016-2024 All rights reserved.
3
+ - Email: mythpe@gmail.com
4
+ - Mobile: +966590470092
5
+ - Website: https://www.4myth.com
6
+ - Github: https://github.com/mythpe
7
+ -->
8
+
9
+ <script
10
+ lang="ts"
11
+ setup
12
+ >
13
+
14
+ import { useMyth } from '../../composable'
15
+
16
+ interface Props {
17
+ noCloseBtn?: boolean;
18
+ }
19
+
20
+ withDefaults(defineProps<Props>(), {
21
+ noCloseBtn: () => !1
22
+ })
23
+ defineOptions({
24
+ name: 'MTooltip',
25
+ inheritAttrs: !1
26
+ })
27
+ const { mOptions } = useMyth()
28
+ </script>
29
+
30
+ <template>
31
+ <q-tooltip
32
+ class="m--dt-btn-tooltip"
33
+ transition-hide="scale"
34
+ transition-show="scale"
35
+ v-bind="{...mOptions.tooltip,...$attrs}"
36
+ >
37
+ <slot />
38
+ </q-tooltip>
39
+ </template>
@@ -0,0 +1,5 @@
1
+ import MDialog from './MDialog.vue'
2
+ import MModalMenu from './MModalMenu.vue'
3
+ import MTooltip from './MTooltip.vue'
4
+
5
+ export { MDialog, MModalMenu, MTooltip }
@@ -0,0 +1,298 @@
1
+ <!--
2
+ - MyTh Ahmed Faiz Copyright © 2016-2024 All rights reserved.
3
+ - Email: mythpe@gmail.com
4
+ - Mobile: +966590470092
5
+ - Website: https://www.4myth.com
6
+ - Github: https://github.com/mythpe
7
+ -->
8
+
9
+ <script
10
+ lang="ts"
11
+ setup
12
+ >
13
+
14
+ import { computed, nextTick, reactive, ref } from 'vue'
15
+ import type { MUploaderMediaItem, MUploaderProps as Props, MUploaderServiceType } from '../../types'
16
+ import { QUploader, useQuasar } from 'quasar'
17
+ import { useMyth } from '../../composable'
18
+ import { useI18n } from 'vue-i18n'
19
+
20
+ type ModelValue = MUploaderMediaItem | File & {
21
+ __sizeLabel?: string;
22
+ __progressLabel?: string;
23
+ __status?: string;
24
+ __img?: string;
25
+ };
26
+
27
+ interface P {
28
+ name: Props['name'];
29
+ modelId?: Props['modelId'];
30
+ iconsSize?: Props['iconsSize'];
31
+ hideDeleteMedia?: Props['hideDeleteMedia'];
32
+ updateBtn?: Props['updateBtn'];
33
+ collection?: Props['collection'];
34
+ returnType?: Props['returnType'];
35
+ service: Props['service'];
36
+ displayMode?: Props['displayMode'];
37
+ shadow?: Props['shadow'];
38
+ scope: QUploader;
39
+ defaultFileIcon?: Props['defaultFileIcon'];
40
+ deleteMediaIcon?: Props['deleteMediaIcon'];
41
+ downloadFileIcon?: Props['downloadFileIcon'];
42
+ mediaLabel?: Props['mediaLabel'];
43
+ }
44
+
45
+ const props = withDefaults(defineProps<P>(), {
46
+ name: () => '',
47
+ modelId: undefined,
48
+ iconsSize: undefined,
49
+ hideDeleteMedia: undefined,
50
+ updateBtn: undefined,
51
+ collection: undefined,
52
+ returnType: undefined,
53
+ service: undefined,
54
+ displayMode: undefined,
55
+ shadow: undefined,
56
+ scope: () => ({} as QUploader),
57
+ defaultFileIcon: undefined,
58
+ deleteMediaIcon: undefined,
59
+ downloadFileIcon: undefined,
60
+ mediaLabel: () => ''
61
+ })
62
+ const modelValue = defineModel<ModelValue>({ required: !0, default: () => ({} as ModelValue) })
63
+ const mediaProp = computed<MUploaderMediaItem>(() => modelValue.value as MUploaderMediaItem)
64
+
65
+ interface Emits {
66
+ (e: 'delete-media', media: MUploaderMediaItem, result: boolean): void;
67
+
68
+ (e: 'remove-file', File: File): void;
69
+
70
+ (e: 'values', value: Props['modelValue']): void;
71
+ }
72
+
73
+ const emit = defineEmits<Emits>()
74
+
75
+ const q = useQuasar()
76
+ const { te } = useI18n({ useScope: 'global' })
77
+ const $myth = useMyth()
78
+ const { alertError, alertSuccess, confirmMessage, __ } = $myth
79
+ const { api, mOptions } = reactive($myth)
80
+ const setModelValue = (value: Props['modelValue']) => emit('values', value)
81
+ const deleting = ref(!1)
82
+ const onClickDeleteAttachment = () => {
83
+ const file = modelValue.value
84
+ if (file instanceof File) {
85
+ confirmMessage().onOk(() => {
86
+ deleteUploaderFile(file)
87
+ })
88
+ } else {
89
+ deleteMedia(file)
90
+ }
91
+ }
92
+
93
+ const hideDeleteMediaProp = computed(() => props.hideDeleteMedia)
94
+ const getRequestConfig = () => ({
95
+ params: {
96
+ collection: props.collection !== undefined ? props.collection : undefined,
97
+ return: props.returnType !== undefined ? props.returnType : undefined
98
+ }
99
+ })
100
+ const deleteMedia = (media: MUploaderMediaItem) => {
101
+ if (deleting.value || hideDeleteMediaProp.value) {
102
+ return
103
+ }
104
+ confirmMessage().onOk(() => {
105
+ const model = modelValue.value as MUploaderMediaItem
106
+ let r = !1
107
+ const method = (typeof props.service === 'string' ? api[props.service] : props.service) as MUploaderServiceType
108
+ if (method) {
109
+ deleting.value = !0
110
+ q.loading.show()
111
+ method.deleteAttachment(props.modelId, model.id, getRequestConfig())
112
+ .then(({ _message, _success, _data }) => {
113
+ _message && alertSuccess(_message)
114
+ r = _success
115
+ setModelValue((_data ?? []) as MUploaderMediaItem[])
116
+ })
117
+ .catch((e) => {
118
+ alertError(e?._message || e?.message)
119
+ r = !1
120
+ })
121
+ .finally(() => {
122
+ deleting.value = !1
123
+ q.loading.hide()
124
+ emit('delete-media', media, r)
125
+ })
126
+ }
127
+ })
128
+ }
129
+ const deleteUploaderFile = (file: File) => {
130
+ nextTick(() => emit('remove-file', file))
131
+ }
132
+ const onUpdateField = (data: any) => {
133
+ const model = modelValue.value as MUploaderMediaItem
134
+ const method = (typeof props.service === 'string' ? api[props.service] : props.service) as MUploaderServiceType
135
+ if (method) {
136
+ deleting.value = !0
137
+ q.loading.show()
138
+ method.updateAttachment(props.modelId, model.id, data, getRequestConfig())
139
+ .then(({ _message, _data }) => {
140
+ _message && alertSuccess(_message)
141
+ setModelValue((_data ?? []) as MUploaderMediaItem[])
142
+ })
143
+ .catch((e) => {
144
+ alertError(e?._message || e?.message)
145
+ })
146
+ .finally(() => {
147
+ deleting.value = !1
148
+ q.loading.hide()
149
+ })
150
+ }
151
+ }
152
+ defineOptions({ name: 'UploaderItem' })
153
+ </script>
154
+
155
+ <template>
156
+ <q-item
157
+ :class="displayMode === 'card' ? `rounded-borders ${shadow || 'shadow-1'}` : undefined"
158
+ :dense="displayMode === 'card'"
159
+ :style="displayMode === 'card' ? 'max-width: 300px; min-width: 200px;' : undefined"
160
+ >
161
+ <q-item-section
162
+ v-if="displayMode === 'list'"
163
+ avatar
164
+ top
165
+ >
166
+ <q-icon
167
+ v-if="!!mediaProp.icon"
168
+ :name="mediaProp.icon"
169
+ :size="iconsSize"
170
+ color="primary"
171
+ />
172
+ <q-img
173
+ v-else-if="!!modelValue.__img || (mediaProp.url && modelValue.type === 'image')"
174
+ :ratio="1"
175
+ :src="modelValue.__img ? modelValue.__img.src : mediaProp.url"
176
+ fit="contain"
177
+ />
178
+ <q-icon
179
+ v-else
180
+ :name="modelValue.type === 'pdf' ? 'fa-regular fa-file-pdf' : (modelValue.type === 'excel' ? 'fa-regular fa-file-excel' : (modelValue.type === 'image' ? 'o_image' :defaultFileIcon))"
181
+ :size="props.iconsSize"
182
+ color="primary"
183
+ />
184
+ </q-item-section>
185
+ <q-item-section :class="{'overflow-hidden': displayMode === 'card'}">
186
+ <q-item-label v-if="!!mediaProp[mediaLabel]">
187
+ {{ mediaProp[mediaLabel] }}
188
+ <q-icon
189
+ v-if="updateBtn"
190
+ class="cursor-pointer"
191
+ color="primary"
192
+ name="o_edit"
193
+ right
194
+ >
195
+ <q-popup-edit
196
+ v-slot="popupScope"
197
+ :label-set="__('labels.save')"
198
+ :model-value="{name: mediaProp.name, order_column: mediaProp.order_column}"
199
+ :title="__('labels.update')"
200
+ buttons
201
+ cover
202
+ max-width="350px"
203
+ persistent
204
+ @save="onUpdateField( $event)"
205
+ >
206
+ <q-input
207
+ v-model="popupScope.value.name"
208
+ :label="__('name')"
209
+ autofocus
210
+ dense
211
+ hide-bottom-space
212
+ />
213
+ <q-input
214
+ v-model="popupScope.value.order_column"
215
+ :label="__('order_column')"
216
+ autofocus
217
+ dense
218
+ hide-bottom-space
219
+ />
220
+ </q-popup-edit>
221
+ <q-tooltip>{{ __('labels.update') }}</q-tooltip>
222
+ </q-icon>
223
+ </q-item-label>
224
+ <q-item-label v-else-if="!!mediaProp.label">
225
+ {{ __(mediaProp.label) }}
226
+ </q-item-label>
227
+ <q-item-label v-if="!!mediaProp.user_id_to_string">
228
+ <q-icon
229
+ color="primary"
230
+ name="ion-ios-contact"
231
+ />
232
+ {{ mediaProp.user_id_to_string }}
233
+ </q-item-label>
234
+ <q-item-label v-if="!!mediaProp.description">
235
+ {{ mediaProp.description }}
236
+ </q-item-label>
237
+ <q-item-label v-else-if="!!mediaProp.attachment_type">
238
+ {{ mediaProp.attachment_type }}
239
+ </q-item-label>
240
+ <slot
241
+ :item="modelValue"
242
+ name="item"
243
+ />
244
+ <q-item-label
245
+ v-if="!!modelValue.__status"
246
+ :class="{'print-hide': !0,'text-positive' : (modelValue.__status === 'uploaded' || !!mediaProp.id),'text-orange' : modelValue.__status === 'uploading','text-amber-10' : modelValue.__status === 'idle' || modelValue.__status === 'failed'}"
247
+ caption
248
+ >
249
+ <q-icon
250
+ :name="modelValue.__status === 'uploaded' ? 'o_check' : ( modelValue.__status === 'uploading' ? 'o_cloud_sync' : (modelValue.__status === 'idle' ? 'o_hourglass_empty' : (modelValue.__status === 'failed' ? 'o_error_outline' : undefined)))"
251
+ size="22px"
252
+ />
253
+ <span class="text-body2 q-pl-xs">
254
+ {{ te(`myth.uploader.statuses.${modelValue.__status}`) ? __(`myth.uploader.statuses.${modelValue.__status}`) : modelValue.__status }}
255
+ </span>
256
+ </q-item-label>
257
+ <q-item-label
258
+ v-if="!!mediaProp.size_to_string || !!modelValue.__sizeLabel"
259
+ caption
260
+ class="print-hide"
261
+ >
262
+ <span v-if="!!mediaProp.size_to_string">{{ mediaProp.size_to_string }} | {{ modelValue.type }}</span>
263
+ <span v-if="modelValue.__sizeLabel">{{ modelValue.__sizeLabel }} / {{ modelValue.__progressLabel }}</span>
264
+ </q-item-label>
265
+ <q-item-label
266
+ v-if="(mediaProp.id && mediaProp.url) || (!hideDeleteMedia || (hideDeleteMedia && !mediaProp.id))"
267
+ class="print-hide justify-between"
268
+ >
269
+ <q-btn
270
+ v-if="mediaProp.id && mediaProp.url"
271
+ :href="mediaProp.url"
272
+ :icon="downloadFileIcon"
273
+ dense
274
+ flat
275
+ target="_blank"
276
+ v-bind="mOptions.uploaderOptions?.downloadBtnProps"
277
+ >
278
+ <q-tooltip class="m--dt-btn-tooltip">
279
+ {{ __('myth.titles.download') }}
280
+ </q-tooltip>
281
+ </q-btn>
282
+ <q-btn
283
+ v-if="(!hideDeleteMedia || (hideDeleteMedia && !mediaProp.id))"
284
+ :disable="deleting || scope.isBusy || scope.isUploading"
285
+ :icon="deleteMediaIcon"
286
+ dense
287
+ flat
288
+ v-bind="mOptions.uploaderOptions?.removeBtnProps"
289
+ @click="onClickDeleteAttachment()"
290
+ >
291
+ <q-tooltip class="m--dt-btn-tooltip">
292
+ {{ __(mediaProp.id ? 'myth.uploader.deleteMedia' : 'myth.uploader.removeMedia') }}
293
+ </q-tooltip>
294
+ </q-btn>
295
+ </q-item-label>
296
+ </q-item-section>
297
+ </q-item>
298
+ </template>
@@ -0,0 +1,3 @@
1
+ import UploaderItem from './UploaderItem.vue'
2
+
3
+ export { UploaderItem }
@@ -6,7 +6,10 @@
6
6
  - Github: https://github.com/mythpe
7
7
  -->
8
8
 
9
- <script lang="ts" setup>
9
+ <script
10
+ lang="ts"
11
+ setup
12
+ >
10
13
  import type { MTransitionProps as Props } from '../../types'
11
14
 
12
15
  interface P {
@@ -1,10 +1,10 @@
1
- import type { PropsContext as UiOpt } from '../types'
2
1
  import { computed, MaybeRefOrGetter, ref, toValue } from 'vue'
3
2
  import { useI18n } from 'vue-i18n'
4
3
  import { useMyth } from './useMyth'
5
4
  import { useSplitAttrs } from 'quasar'
6
5
  import { myth } from '../utils'
7
6
  import { camelCase, kebabCase, snakeCase, uniq } from 'lodash'
7
+ import { PropsContext as UiOpt } from '../types/plugin-props-option'
8
8
 
9
9
  type G = { name: string; [k: string]: any };
10
10
  type OptsContext = { choose?: boolean; };
@@ -9,7 +9,7 @@
9
9
  import lodash from 'lodash'
10
10
  import { useI18n } from 'vue-i18n'
11
11
  import type { RouteLocationNormalizedLoaded } from 'vue-router'
12
- import { copyToClipboard, Dialog, extend, QDialogOptions, QNotifyCreateOptions, useQuasar } from 'quasar'
12
+ import { copyToClipboard, extend, QDialogOptions, QNotifyCreateOptions, useQuasar } from 'quasar'
13
13
  import { Helpers, myth, Str, veeRules } from '../utils'
14
14
  import type { MDtColumn, MDtHeadersParameter, ParseHeaderOptions, Vue3MAlertMessage, Vue3MAlertMessageOptions, Vue3MConfirmMessage } from '../types'
15
15
  import { computed } from 'vue'
@@ -242,19 +242,16 @@ export const useMyth = () => {
242
242
  message = message || ''
243
243
  opts = opts || {}
244
244
  const buttonsProps = {
245
- ...(pluginOptions.value.btn || {})
246
- // ...(options.value.confirmDialogOptions?.buttons || {})
245
+ ...pluginOptions.value.btn,
246
+ ...pluginOptions.value.confirmDialogOptions?.buttons
247
247
  }
248
- // const okProps = options.value.confirmDialogOptions?.okProps || {}
249
- const okProps: any = {}
250
- // const cancelProps = options.value.confirmDialogOptions?.cancelProps || {}
251
- const cancelProps: any = {}
252
- // const dialogProps = options.value.confirmDialog || {} as any
253
- const dialogProps: any = {}
248
+ const okProps = pluginOptions.value.confirmDialogOptions?.okProps || {}
249
+ const cancelProps = pluginOptions.value.confirmDialogOptions?.cancelProps || {}
250
+ const dialogProps = pluginOptions.value.confirmDialog || {} as any
254
251
  dialogProps.transitionShow = dialogProps.transitionShow || 'jump-down'
255
252
  dialogProps.transitionHide = dialogProps.transitionHide || 'jump-up'
256
253
  dialogProps.class = ('m--confirm ') + (dialogProps.class || '')
257
- return Dialog.create({
254
+ return q.dialog({
258
255
  title,
259
256
  message,
260
257
  focus: 'none',
@@ -284,8 +281,19 @@ export const useMyth = () => {
284
281
  })
285
282
  }
286
283
  const api = computed(() => myth.api.value)
284
+ const baseUrl = computed(() => myth.baseUrl.value)
285
+ const mAxios = computed(() => myth.mAxios.value)
286
+ const mOptions = computed(() => myth.props.value)
287
+ const isSmall = computed(() => q.screen.lt.md)
288
+ const themeInput = computed(() => myth.themeInput.value)
289
+ const themeBtn = computed(() => myth.themeBtn.value)
287
290
  return {
288
291
  api,
292
+ baseUrl,
293
+ mAxios,
294
+ mOptions,
295
+ themeInput,
296
+ themeBtn,
289
297
  __,
290
298
  getPageTitle,
291
299
  parseHeaders,
@@ -297,6 +305,7 @@ export const useMyth = () => {
297
305
  confirmMessage,
298
306
  ...Helpers,
299
307
  ...Str,
300
- veeRules
308
+ veeRules,
309
+ isSmall
301
310
  }
302
311
  }
package/src/index.sass CHANGED
@@ -6,4 +6,5 @@
6
6
 
7
7
  @import 'quasar/src/css/variables.sass'
8
8
  @import './style/main.sass'
9
- @import './style/m-container'
9
+ @import './style/m-container.sass'
10
+ @import './style/print.sass'
@@ -1,3 +1,6 @@
1
+ @use 'sass:map'
2
+ @use "quasar/src/css/variables" as q
3
+
1
4
  // Flex.
2
5
  .flex-break
3
6
  flex: 1 0 100% !important
@@ -40,3 +43,104 @@ $text-dark-color: #ffffff !default
40
43
 
41
44
  .text-color
42
45
  color: $text-dark-color
46
+
47
+
48
+ $text-decorations: ('none': none, 'overline': overline, 'underline': underline, 'line-through': line-through)
49
+ @each $name, $value in $text-decorations
50
+ .text-decoration-#{$name}
51
+ text-decoration: map.get($text-decorations, $value) !important
52
+
53
+ $text-wraps: ('wrap': wrap, 'nowrap': nowrap, 'balance': balance, 'pretty': pretty, 'stable': stable)
54
+ @each $name, $value in $text-wraps
55
+ .text-wrap-#{$name}
56
+ text-wrap: map.get($text-wraps, $value) !important
57
+
58
+ $breaks: ('inside', 'after', 'before')
59
+ @each $break in $breaks
60
+ .break-#{$break}-avoid
61
+ page-break-#{$break}: avoid
62
+
63
+ @each $break in $breaks
64
+ .break-#{$break}-always
65
+ page-break-#{$break}: always
66
+
67
+
68
+ $maxes: ('width', 'height') !default
69
+ @each $max in $maxes
70
+ .max-#{$max}
71
+ max-#{$max}: 100% !important
72
+
73
+ $alignsX: ('top', 'bottom') !default
74
+ $alignsY: ('left', 'right') !default
75
+ $radius-class-name: 'border-rounded' !default
76
+ $radius-value: q.$generic-border-radius !default
77
+ $bordered-class-name: 'bordered' !default
78
+ $bordered-size: 1px !default
79
+ $bordered-style: $bordered-size solid q.$primary !default
80
+
81
+
82
+ .#{$radius-class-name}
83
+ border-radius: $radius-value
84
+
85
+
86
+ .#{$bordered-class-name}
87
+ border: $bordered-style
88
+
89
+
90
+ @each $x in $alignsX
91
+ .bordered-#{$x}
92
+ border-#{$x}: $bordered-style
93
+
94
+ .#{$radius-class-name}-#{$x}
95
+ border-#{$x}-left-radius: $radius-value
96
+ border-#{$x}-right-radius: $radius-value
97
+
98
+
99
+ @each $y in $alignsY
100
+ .#{$radius-class-name}-#{$x}-#{$y}
101
+ border-#{$x}-#{$y}-radius: $radius-value
102
+
103
+
104
+ .#{$radius-class-name}-#{$y}
105
+ border-bottom-#{$y}-radius: $radius-value
106
+ border-top-#{$y}-radius: $radius-value
107
+
108
+
109
+ .bordered-#{$y}
110
+ border-#{$y}: $bordered-style
111
+
112
+ .pre-text
113
+ white-space-collapse: preserve-breaks
114
+ white-space: pre-line
115
+
116
+
117
+ pre
118
+ max-width: 100%
119
+
120
+ [data-input-name].m--input__error
121
+ > .q-field
122
+ &:not(.q-field--disabled)
123
+ .q-field__label::after
124
+ color: q.$negative
125
+
126
+ .m--input__top-label__content
127
+ color: q.$negative
128
+
129
+ [data-input-name].m--input__required
130
+ &:not(.m--input__is-top-label)
131
+ > .q-field
132
+ &:not(.q-field--disabled)
133
+ .q-field__label::after
134
+ content: ' *'
135
+
136
+ .m--input__top-label__content::after
137
+ content: ' *'
138
+
139
+ .m--input__color-preview
140
+ border: 1px solid q.$primary
141
+ border-radius: $radius-value
142
+
143
+
144
+ .m--confirm.actions-between
145
+ .q-card__actions
146
+ justify-content: space-between !important
@@ -0,0 +1,14 @@
1
+ @media print
2
+ .q-notifications
3
+ display: none !important
4
+
5
+ .print-shadow-none
6
+ box-shadow: none !important
7
+ border: 0 !important
8
+
9
+ .print-no-padding
10
+ padding: 0 !important
11
+
12
+ .print-no-margin
13
+ margin: 0 !important
14
+
@@ -0,0 +1,40 @@
1
+ .myth-transition__fade-enter-from,
2
+ .myth-transition__fade-leave-to
3
+ opacity: 0
4
+ transform: translateY(-20px)
5
+
6
+
7
+ .myth-transition__fade-enter-active,
8
+ .myth-transition__fade-leave-active
9
+ transition: all .3s ease
10
+
11
+
12
+ .myth-transition__fade-x-enter-from,
13
+ .myth-transition__fade-x-leave-to
14
+ opacity: 0
15
+ transform: translateX(-20px)
16
+
17
+
18
+ .myth-transition__fade-x-enter-active
19
+ transition: all .3s ease
20
+
21
+
22
+ .myth-transition__fade-x-leave-active
23
+ transition: all .1s ease
24
+
25
+
26
+ .m__transition__fade-move,
27
+ .m__transition__fade-enter-active,
28
+ .m__transition__fade-leave-active
29
+ transition: all 0.5s ease
30
+
31
+
32
+ .m__transition__fade-enter-from,
33
+ .m__transition__fade-leave-to
34
+ opacity: 0
35
+ transform: translateX(30px)
36
+
37
+
38
+ .m__transition__fade-leave-active
39
+ position: absolute
40
+