@mythpe/quasar-ui-qui 0.0.27 → 0.0.28-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 (93) hide show
  1. package/index.d.ts +13 -0
  2. package/package.json +17 -8
  3. package/src/boot/register.ts +14 -0
  4. package/src/components/datatable/MDatatable.vue +2305 -0
  5. package/src/components/datatable/MDtAvatar.vue +49 -0
  6. package/src/components/datatable/MDtBtn.vue +153 -0
  7. package/src/components/datatable/MDtContextmenuItems.vue +54 -0
  8. package/src/components/datatable/index.ts +6 -0
  9. package/src/components/form/MAvatarViewer.vue +327 -0
  10. package/src/components/form/MAxios.vue +144 -0
  11. package/src/components/form/MBtn.vue +271 -93
  12. package/src/components/form/MCheckbox.vue +150 -0
  13. package/src/components/form/MCkeditor.vue +403 -0
  14. package/src/components/form/MColor.vue +122 -0
  15. package/src/components/form/MDate.vue +50 -0
  16. package/src/components/form/MEditor.vue +285 -0
  17. package/src/components/form/MEmail.vue +43 -0
  18. package/src/components/form/MField.vue +148 -0
  19. package/src/components/form/MFile.vue +215 -0
  20. package/src/components/form/MForm.vue +89 -0
  21. package/src/components/form/MHidden.vue +86 -0
  22. package/src/components/form/MHiddenInput.vue +58 -0
  23. package/src/components/form/MInput.vue +178 -0
  24. package/src/components/form/MInputFieldControl.vue +27 -0
  25. package/src/components/form/MInputLabel.vue +38 -0
  26. package/src/components/form/MMobile.vue +43 -0
  27. package/src/components/form/MOptions.vue +255 -0
  28. package/src/components/form/MOtp.vue +292 -0
  29. package/src/components/form/MPassword.vue +73 -0
  30. package/src/components/form/MPicker.vue +313 -0
  31. package/src/components/form/MRadio.vue +181 -0
  32. package/src/components/form/MSelect.vue +352 -0
  33. package/src/components/form/MTime.vue +48 -0
  34. package/src/components/form/MToggle.vue +211 -0
  35. package/src/components/form/MUploader.vue +511 -0
  36. package/src/components/form/index.ts +65 -0
  37. package/src/components/grid/MBlock.vue +39 -18
  38. package/src/components/grid/MCol.vue +11 -15
  39. package/src/components/grid/MColumn.vue +12 -1
  40. package/src/components/grid/MContainer.vue +22 -13
  41. package/src/components/grid/MHelpRow.vue +13 -12
  42. package/src/components/grid/MRow.vue +31 -10
  43. package/src/components/grid/index.ts +16 -0
  44. package/src/components/index.ts +15 -0
  45. package/src/components/modal/MDialog.vue +58 -0
  46. package/src/components/modal/MModalMenu.vue +62 -0
  47. package/src/components/modal/MTooltip.vue +39 -0
  48. package/src/components/modal/index.ts +5 -0
  49. package/src/components/parials/UploaderItem.vue +298 -0
  50. package/src/components/parials/index.ts +3 -0
  51. package/src/components/transition/MFadeTransition.vue +27 -0
  52. package/src/components/transition/MFadeXTransition.vue +26 -0
  53. package/src/components/transition/MTransition.vue +44 -0
  54. package/src/components/transition/index.ts +13 -0
  55. package/src/components/typography/MTypingString.vue +8 -0
  56. package/src/components/typography/index.ts +11 -0
  57. package/src/composable/index.ts +12 -0
  58. package/src/composable/useBindInput.ts +209 -0
  59. package/src/composable/useError.ts +11 -0
  60. package/src/composable/useMyth.ts +311 -0
  61. package/src/composable/useValue.ts +12 -0
  62. package/src/index.common.js +19 -1
  63. package/src/index.esm.js +18 -3
  64. package/src/index.js +19 -0
  65. package/src/index.sass +9 -26
  66. package/src/index.ts +18 -4
  67. package/src/index.umd.js +17 -2
  68. package/src/style/m-container.sass +13 -0
  69. package/src/style/main.sass +146 -0
  70. package/src/style/print.sass +14 -0
  71. package/src/style/transition.sass +40 -0
  72. package/src/types/api-helpers.d.ts +62 -0
  73. package/src/types/components.d.ts +1108 -27
  74. package/src/types/index.d.ts +21 -1
  75. package/src/types/install-options.d.ts +19 -0
  76. package/src/types/lodash.d.ts +26 -0
  77. package/src/types/m-datatable.d.ts +316 -0
  78. package/src/types/m-geolocation.d.ts +16 -0
  79. package/src/types/m-helpers.d.ts +97 -0
  80. package/src/types/plugin-props-option.d.ts +305 -0
  81. package/src/types/quasar-helpers.d.ts +7 -0
  82. package/src/types/theme.d.ts +12 -0
  83. package/src/utils/Helpers.ts +293 -0
  84. package/src/utils/Str.ts +211 -0
  85. package/src/utils/index.ts +13 -0
  86. package/src/utils/myth.ts +109 -0
  87. package/src/utils/vee-rules.ts +32 -0
  88. package/src/utils/vue-plugin.ts +163 -0
  89. package/tsconfig.json +9 -13
  90. package/src/myth.ts +0 -30
  91. package/src/types/myth.ts +0 -42
  92. package/src/vue-plugin.ts +0 -41
  93. package/types.d.ts +0 -1
@@ -0,0 +1,150 @@
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
+ import { useField } from 'vee-validate'
14
+ import { reactive, toValue, useTemplateRef } from 'vue'
15
+ import { useBindInput, useMyth } from '../../composable'
16
+ import type { MCheckboxProps as Props } from '../../types'
17
+ import { QCheckbox, QField } from 'quasar'
18
+
19
+ const props = withDefaults(defineProps<Props>(), {
20
+ name: '',
21
+ label: undefined,
22
+ toggleIndeterminate: undefined,
23
+ leftLabel: undefined,
24
+ keepColor: undefined,
25
+ dark: undefined,
26
+ dense: undefined,
27
+ disable: undefined,
28
+ viewMode: undefined,
29
+ auto: undefined,
30
+ col: undefined,
31
+ xs: undefined,
32
+ sm: undefined,
33
+ md: undefined,
34
+ lg: undefined,
35
+ xl: undefined,
36
+ required: undefined,
37
+ autocomplete: undefined,
38
+ mobile: undefined,
39
+ email: undefined,
40
+ float: undefined,
41
+ useChoice: undefined
42
+ })
43
+ defineModel<Props['modelValue']>({ required: !1, default: undefined })
44
+ const { __ } = useMyth()
45
+ const helper = useBindInput<any>(() => props, 'checkbox')
46
+ const { getLabel, attrs, inputRules } = helper
47
+ const inputScope = useField<Props['modelValue']>(() => props.name, inputRules, {
48
+ syncVModel: !0,
49
+ label: getLabel,
50
+ type: 'checkbox',
51
+ checkedValue: () => props.val,
52
+ ...toValue<any>(props.fieldOptions)
53
+ })
54
+ const { value, errorMessage, handleChange } = inputScope
55
+
56
+ const listeners = {
57
+ 'update:modelValue': (v: Props['modelValue']) => handleChange(v, !!errorMessage.value)
58
+ }
59
+ const input = useTemplateRef<InstanceType<typeof QCheckbox>>('input')
60
+ const scopes = reactive(inputScope)
61
+ defineExpose<typeof scopes & { input: typeof input }>({ input, ...scopes })
62
+ defineOptions({
63
+ name: 'MCheckbox',
64
+ inheritAttrs: !1
65
+ })
66
+ </script>
67
+
68
+ <template>
69
+ <MCol
70
+ :auto="auto"
71
+ :class="[$attrs.class,{'m--input__required':inputRules?.required!==undefined,'m--input__error':!!errorMessage,'m--input__view':viewMode}]"
72
+ :col="col"
73
+ :lg="lg"
74
+ :md="md"
75
+ :name="name"
76
+ :sm="sm"
77
+ :xs="xs"
78
+ >
79
+ <slot
80
+ name="top-input"
81
+ v-bind="scopes"
82
+ />
83
+ <slot name="caption">
84
+ <div
85
+ v-if="!!caption"
86
+ class="m--input__caption text-caption"
87
+ >
88
+ {{ __(caption) }}
89
+ </div>
90
+ </slot>
91
+ <MRow v-bind="rowProps">
92
+ <slot
93
+ name="before"
94
+ v-bind="scopes"
95
+ />
96
+ <MCol v-bind="colProps">
97
+ <q-field
98
+ v-bind="{
99
+ ...$props,
100
+ ...attrs,
101
+ error:!!errorMessage,
102
+ errorMessage,
103
+ hint:__(hint),
104
+ borderless: !0,
105
+ outlined: !1,
106
+ stackLabel: !0
107
+ }"
108
+ >
109
+ <q-checkbox
110
+ ref="input"
111
+ v-bind="{
112
+ ...$props,
113
+ ...attrs,
114
+ modelValue:value,
115
+ disable:viewMode,
116
+ label: undefined,
117
+ }"
118
+ v-on="listeners"
119
+ >
120
+ <template #default>
121
+ <MRow class="items-center">
122
+ <div
123
+ v-if="!!getLabel"
124
+ class="text-color"
125
+ >
126
+ {{ getLabel }}
127
+ </div>
128
+ <MHelpRow
129
+ v-if="!!help"
130
+ :right="!!getLabel"
131
+ :text="help"
132
+ tooltip
133
+ />
134
+ </MRow>
135
+ </template>
136
+ </q-checkbox>
137
+ </q-field>
138
+ <slot v-bind="scopes" />
139
+ </MCol>
140
+ <slot
141
+ name="after"
142
+ v-bind="scopes"
143
+ />
144
+ </MRow>
145
+ <slot
146
+ name="bottom-input"
147
+ v-bind="scopes"
148
+ />
149
+ </MCol>
150
+ </template>
@@ -0,0 +1,403 @@
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 { useField } from 'vee-validate'
15
+ import type { MCkeditorProps as Props } from '../../types'
16
+ import { computed, reactive, toValue, useTemplateRef } from 'vue'
17
+ import { useBindInput, useMyth } from '../../composable'
18
+
19
+ import type {
20
+ Alignment,
21
+ Autoformat,
22
+ Base64UploadAdapter,
23
+ BlockQuote,
24
+ Bold,
25
+ CKFinder,
26
+ CKFinderUploadAdapter,
27
+ ClassicEditor,
28
+ CloudServices,
29
+ Code,
30
+ CodeBlock,
31
+ EditorConfig,
32
+ Essentials,
33
+ FontBackgroundColor,
34
+ FontColor,
35
+ FontFamily,
36
+ FontSize,
37
+ Heading,
38
+ Image,
39
+ ImageCaption,
40
+ ImageResize,
41
+ ImageStyle,
42
+ ImageToolbar,
43
+ ImageUpload,
44
+ Indent,
45
+ IndentBlock,
46
+ Italic,
47
+ Link,
48
+ List,
49
+ MediaEmbed,
50
+ Mention,
51
+ Paragraph,
52
+ PasteFromOffice,
53
+ PictureEditing,
54
+ RemoveFormat,
55
+ SourceEditing,
56
+ Strikethrough,
57
+ Subscript,
58
+ Superscript,
59
+ Table,
60
+ TableColumnResize,
61
+ TableToolbar,
62
+ TextTransformation,
63
+ TodoList,
64
+ Underline
65
+ } from 'ckeditor5'
66
+ import { Ckeditor } from '@ckeditor/ckeditor5-vue'
67
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
68
+ // @ts-ignore
69
+ import arTranslations from 'ckeditor5/translations/ar.js'
70
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
71
+ // @ts-ignore
72
+ import enTranslations from 'ckeditor5/translations/en.js'
73
+
74
+ type P = {
75
+ name: Props['name'];
76
+ lang: Props['lang'];
77
+ config?: Props['config'];
78
+ tagName?: Props['tagName'];
79
+ disabled?: Props['disabled'];
80
+ disableTwoWayDataBinding?: Props['disableTwoWayDataBinding'];
81
+
82
+ auto?: Props['auto'];
83
+ col?: Props['col'];
84
+ xs?: Props['xs'];
85
+ sm?: Props['sm'];
86
+ md?: Props['md'];
87
+ lg?: Props['lg'];
88
+ xl?: Props['xl'];
89
+ label?: Props['label'];
90
+ caption?: Props['caption'];
91
+ help?: Props['help'];
92
+ required?: Props['required'];
93
+ rules?: Props['rules'];
94
+ viewMode?: Props['viewMode'];
95
+ viewModeValue?: Props['viewModeValue'];
96
+ fieldOptions?: Props['fieldOptions'];
97
+ }
98
+ const props = withDefaults(defineProps<P>(), {
99
+ name: () => '',
100
+ lang: () => 'ar',
101
+ config: undefined,
102
+ tagName: () => 'div',
103
+ disabled: () => !1,
104
+ disableTwoWayDataBinding: () => !1,
105
+
106
+ auto: undefined,
107
+ col: undefined,
108
+ xs: undefined,
109
+ sm: undefined,
110
+ md: undefined,
111
+ lg: undefined,
112
+ xl: undefined,
113
+ label: undefined,
114
+ caption: undefined,
115
+ help: undefined,
116
+ required: undefined,
117
+ rules: undefined,
118
+ viewMode: () => !1,
119
+ viewModeValue: undefined,
120
+ fieldOptions: undefined
121
+ })
122
+ defineModel<Props['modelValue']>({ required: !1, default: undefined })
123
+ const { __, mOptions } = useMyth()
124
+ const helper = useBindInput<any>(() => props, 'ckeditor')
125
+ const { getLabel, inputRules } = helper
126
+ const inputScope = useField<Props['modelValue']>(() => props.name, inputRules, {
127
+ validateOnMount: !1,
128
+ validateOnValueUpdate: !1,
129
+ syncVModel: !0,
130
+ label: getLabel,
131
+ ...toValue<any>(props.fieldOptions)
132
+ })
133
+ const { value, errorMessage, handleChange } = inputScope
134
+
135
+ const isRtl = computed(() => props.lang === 'ar')
136
+ const getConfig = computed<EditorConfig>(() => {
137
+ const inpConfig = {
138
+ language: {
139
+ ui: props.lang as string,
140
+ content: props.lang as string,
141
+ textPartLanguage: [
142
+ {
143
+ title: __('ar'),
144
+ languageCode: 'ar',
145
+ textDirection: 'rtl'
146
+ },
147
+ {
148
+ title: __('en'),
149
+ languageCode: 'en',
150
+ textDirection: 'ltr'
151
+ }
152
+ ]
153
+ },
154
+ translations: [
155
+ arTranslations,
156
+ enTranslations
157
+ ],
158
+ plugins: [
159
+ Autoformat,
160
+ BlockQuote,
161
+ Bold,
162
+ CKFinder,
163
+ CKFinderUploadAdapter,
164
+ CloudServices,
165
+ Essentials,
166
+ Heading,
167
+ Image,
168
+ ImageCaption,
169
+ ImageResize,
170
+ ImageStyle,
171
+ ImageToolbar,
172
+ ImageUpload,
173
+ Base64UploadAdapter,
174
+ Indent,
175
+ IndentBlock,
176
+ Italic,
177
+ Link,
178
+ List,
179
+ MediaEmbed,
180
+ Mention,
181
+ Paragraph,
182
+ PasteFromOffice,
183
+ PictureEditing,
184
+ Table,
185
+ TableColumnResize,
186
+ TableToolbar,
187
+ TextTransformation,
188
+ Underline,
189
+ FontSize,
190
+ FontFamily,
191
+ FontColor,
192
+ FontBackgroundColor,
193
+ RemoveFormat,
194
+ Strikethrough,
195
+ Subscript,
196
+ Code,
197
+ CodeBlock,
198
+ Alignment,
199
+ Superscript,
200
+ TodoList,
201
+ SourceEditing
202
+ ],
203
+ toolbar: {
204
+ items: [
205
+ 'undo',
206
+ 'redo',
207
+ '|',
208
+ 'bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', 'code',
209
+ '|',
210
+ 'fontfamily', 'fontsize', 'fontColor', 'fontBackgroundColor',
211
+ '|',
212
+ 'alignment',
213
+ 'insertTable',
214
+ 'heading',
215
+ '|',
216
+ 'link', 'uploadImage', 'blockQuote', 'codeBlock',
217
+ '|',
218
+ 'bulletedList', 'numberedList', 'todoList', 'outdent', 'indent',
219
+ '|',
220
+ // 'ckbox',
221
+ 'removeFormat',
222
+ 'mediaEmbed',
223
+ '|',
224
+ 'sourceEditing'
225
+ ],
226
+ shouldNotGroupWhenFull: true
227
+ },
228
+ heading: {
229
+ options: [
230
+ {
231
+ model: 'paragraph',
232
+ title: 'Paragraph',
233
+ class: 'ck-heading_paragraph'
234
+ },
235
+ {
236
+ model: 'heading1',
237
+ view: 'h1',
238
+ title: 'Heading 1',
239
+ class: 'ck-heading_heading1'
240
+ },
241
+ {
242
+ model: 'heading2',
243
+ view: 'h2',
244
+ title: 'Heading 2',
245
+ class: 'ck-heading_heading2'
246
+ },
247
+ {
248
+ model: 'heading3',
249
+ view: 'h3',
250
+ title: 'Heading 3',
251
+ class: 'ck-heading_heading3'
252
+ },
253
+ {
254
+ model: 'heading4',
255
+ view: 'h4',
256
+ title: 'Heading 4',
257
+ class: 'ck-heading_heading4'
258
+ }
259
+ ]
260
+ },
261
+ image: {
262
+ resizeOptions: [
263
+ {
264
+ name: 'resizeImage:original',
265
+ label: 'Default image width',
266
+ value: null
267
+ },
268
+ {
269
+ name: 'resizeImage:50',
270
+ label: '50% page width',
271
+ value: '50'
272
+ },
273
+ {
274
+ name: 'resizeImage:75',
275
+ label: '75% page width',
276
+ value: '75'
277
+ }
278
+ ],
279
+ toolbar: [
280
+ 'imageTextAlternative',
281
+ 'toggleImageCaption',
282
+ '|',
283
+ 'imageStyle:inline',
284
+ 'imageStyle:wrapText',
285
+ 'imageStyle:breakText',
286
+ '|',
287
+ 'resizeImage'
288
+ ]
289
+ },
290
+ menuBar: {
291
+ isVisible: !1
292
+ },
293
+ link: {
294
+ addTargetToExternalLinks: true,
295
+ defaultProtocol: 'https://'
296
+ },
297
+ table: {
298
+ contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells']
299
+ }
300
+ }
301
+ if (props.config) {
302
+ return props.config(inpConfig as EditorConfig)
303
+ }
304
+ return inpConfig as EditorConfig
305
+ })
306
+ const listeners = {
307
+ 'update:modelValue': (v: Props['modelValue']) => handleChange(v, !!errorMessage.value)
308
+ }
309
+ const input = useTemplateRef<any>('input')
310
+ const scopes = reactive(inputScope)
311
+ defineExpose<typeof scopes & { input: typeof input }>({ input, ...scopes })
312
+ defineOptions({
313
+ name: 'MCkeditor',
314
+ inheritAttrs: !1
315
+ })
316
+ </script>
317
+
318
+ <template>
319
+ <MCol
320
+ :auto="auto"
321
+ :class="[$attrs.class,{'m--input__required':inputRules?.required!==undefined,'m--input__error':!!errorMessage,'m--input__view':viewMode}]"
322
+ :col="col"
323
+ :lg="lg"
324
+ :md="md"
325
+ :name="name"
326
+ :sm="sm"
327
+ :xs="xs"
328
+ >
329
+ <slot
330
+ name="top-input"
331
+ v-bind="scopes"
332
+ />
333
+ <slot name="top-label">
334
+ <MInputLabel
335
+ v-if="!!getLabel"
336
+ :field="scopes"
337
+ >
338
+ <MHelpRow
339
+ :text="help"
340
+ tooltip
341
+ />
342
+ </MInputLabel>
343
+ </slot>
344
+ <slot name="caption">
345
+ <div
346
+ v-if="!!caption"
347
+ class="m--input__caption"
348
+ >
349
+ {{ __(caption) }}
350
+ </div>
351
+ </slot>
352
+ <slot
353
+ name="help"
354
+ v-bind="scopes"
355
+ >
356
+ <MHelpRow
357
+ v-if="!getLabel"
358
+ :text="help"
359
+ />
360
+ </slot>
361
+ <MTransition>
362
+ <div
363
+ v-if="!!errorMessage"
364
+ class="text-negative text-caption"
365
+ >
366
+ <q-icon
367
+ v-if="!!errorMessage"
368
+ color="negative"
369
+ name="ion-ios-information-circle-outline"
370
+ size="20px"
371
+ />
372
+ {{ errorMessage }}
373
+ </div>
374
+ </MTransition>
375
+ <div
376
+ v-if="viewMode"
377
+ v-html="value"
378
+ />
379
+ <div
380
+ v-else
381
+ :dir="isRtl ? 'rtl' : 'ltr'"
382
+ :style="`direction: ${isRtl ? 'rtl' : 'ltr'}`"
383
+ v-bind="$attrs"
384
+ >
385
+ <ckeditor
386
+ ref="input"
387
+ :config="getConfig"
388
+ :disable-two-way-data-binding="disableTwoWayDataBinding"
389
+ :disabled="disabled"
390
+ :editor="ClassicEditor"
391
+ :model-value="value || ''"
392
+ :tag-name="tagName"
393
+ v-bind="{...$attrs,...mOptions.ckeditor}"
394
+ v-on="listeners"
395
+ />
396
+ <slot v-bind="scopes" />
397
+ </div>
398
+ <slot
399
+ name="bottom-input"
400
+ v-bind="scopes"
401
+ />
402
+ </MCol>
403
+ </template>
@@ -0,0 +1,122 @@
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
+ import type { MInputProps as Props, MInputSlots } from '../../types'
14
+ import { reactive, toValue, useTemplateRef } from 'vue'
15
+ import { useField } from 'vee-validate'
16
+ import { useBindInput } from '../../composable'
17
+ import { QField, QInput } from 'quasar'
18
+
19
+ const props = withDefaults(defineProps<Props>(), {
20
+ name: () => '',
21
+ fillMask: undefined,
22
+ reverseFillMask: undefined,
23
+ unmaskedValue: undefined,
24
+ error: undefined,
25
+ noErrorIcon: undefined,
26
+ reactiveRules: undefined,
27
+ lazyRules: undefined,
28
+ stackLabel: undefined,
29
+ hideHint: undefined,
30
+ dark: undefined,
31
+ loading: undefined,
32
+ clearable: undefined,
33
+ filled: undefined,
34
+ outlined: undefined,
35
+ borderless: undefined,
36
+ standout: undefined,
37
+ labelSlot: undefined,
38
+ bottomSlots: undefined,
39
+ hideBottomSpace: undefined,
40
+ counter: undefined,
41
+ rounded: undefined,
42
+ square: undefined,
43
+ dense: undefined,
44
+ itemAligned: undefined,
45
+ disable: undefined,
46
+ readonly: undefined,
47
+ autofocus: undefined,
48
+ autogrow: undefined,
49
+ viewMode: undefined,
50
+ auto: undefined,
51
+ col: undefined,
52
+ xs: undefined,
53
+ sm: undefined,
54
+ md: undefined,
55
+ lg: undefined,
56
+ xl: undefined,
57
+ required: undefined,
58
+ autocomplete: undefined,
59
+ topLabel: undefined,
60
+ mobile: undefined,
61
+ email: undefined,
62
+ float: undefined
63
+ })
64
+ defineModel<Props['modelValue']>({ required: !1, default: undefined })
65
+ const helper = useBindInput<Props>(() => props, 'input')
66
+ const { getLabel, inputRules, attrs } = helper
67
+ const inputScope = useField<Props['modelValue']>(() => props.name, inputRules, {
68
+ syncVModel: !0,
69
+ label: getLabel,
70
+ ...toValue<any>(props.fieldOptions)
71
+ })
72
+ const { value, errorMessage, handleChange, handleBlur } = inputScope
73
+
74
+ const listeners = {
75
+ blur: (v: any) => handleBlur(v, !0),
76
+ 'update:modelValue': (v: Props['modelValue']) => handleChange(v, !!errorMessage.value)
77
+ }
78
+ const input = useTemplateRef<InstanceType<typeof QInput> | InstanceType<typeof QField>>('input')
79
+ const scopes = reactive(inputScope)
80
+ defineExpose<typeof scopes & { input: typeof input }>({ input, ...scopes })
81
+ defineOptions({
82
+ name: 'MColor',
83
+ inheritAttrs: !1
84
+ })
85
+
86
+ </script>
87
+
88
+ <template>
89
+ <MInput
90
+ ref="input"
91
+ v-bind="{...$props,...attrs,rules:inputRules,modelValue:value}"
92
+ v-on="listeners"
93
+ >
94
+ <template #prepend>
95
+ <div
96
+ :style="`width: 20px; height: 20px; background-color: ${value};`"
97
+ class="m--input__color-preview"
98
+ />
99
+ </template>
100
+ <template #append>
101
+ <q-icon
102
+ class="cursor-pointer"
103
+ name="colorize"
104
+ >
105
+ <q-popup-proxy
106
+ cover
107
+ transition-hide="scale"
108
+ transition-show="scale"
109
+ >
110
+ <q-color v-model="value" />
111
+ </q-popup-proxy>
112
+ </q-icon>
113
+ </template>
114
+ <template
115
+ v-for="(_,slot) in $slots as Readonly<MInputSlots>"
116
+ :key="slot"
117
+ #[slot]
118
+ >
119
+ <slot :name="slot" />
120
+ </template>
121
+ </MInput>
122
+ </template>