@vuetify/nightly 3.8.4-master.2025-05-13 → 3.8.5-dev.2025-05-14
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.
- package/CHANGELOG.md +17 -21
- package/dist/_component-variables-labs.sass +1 -0
- package/dist/json/attributes.json +3625 -3273
- package/dist/json/importMap-labs.json +32 -28
- package/dist/json/importMap.json +180 -180
- package/dist/json/tags.json +93 -0
- package/dist/json/web-types.json +7373 -6147
- package/dist/vuetify-labs.cjs +424 -130
- package/dist/vuetify-labs.css +4754 -4698
- package/dist/vuetify-labs.d.ts +2285 -1171
- package/dist/vuetify-labs.esm.js +425 -131
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +424 -130
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +151 -41
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +2697 -2644
- package/dist/vuetify.d.ts +568 -511
- package/dist/vuetify.esm.js +152 -42
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +151 -41
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1181 -1173
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +6 -1
- package/lib/components/VAlert/VAlert.d.ts +35 -0
- package/lib/components/VAlert/VAlert.js +14 -9
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +7 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +94 -94
- package/lib/components/VBottomSheet/VBottomSheet.css +1 -1
- package/lib/components/VBottomSheet/VBottomSheet.sass +1 -1
- package/lib/components/VBtn/VBtn.css +25 -0
- package/lib/components/VBtn/VBtn.sass +9 -0
- package/lib/components/VBtn/_variables.scss +1 -0
- package/lib/components/VBtnGroup/VBtnGroup.css +30 -7
- package/lib/components/VBtnGroup/VBtnGroup.d.ts +58 -32
- package/lib/components/VBtnGroup/VBtnGroup.js +7 -3
- package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.sass +44 -17
- package/lib/components/VBtnToggle/VBtnToggle.d.ts +25 -0
- package/lib/components/VCheckbox/VCheckbox.d.ts +3 -3
- package/lib/components/VCombobox/VCombobox.d.ts +94 -94
- package/lib/components/VField/VField.d.ts +3 -3
- package/lib/components/VFileInput/VFileInput.d.ts +15 -15
- package/lib/components/VInput/VInput.d.ts +4 -4
- package/lib/components/VNumberInput/VNumberInput.d.ts +89 -89
- package/lib/components/VOverlay/VOverlay.css +1 -1
- package/lib/components/VOverlay/_variables.scss +1 -1
- package/lib/components/VRadioGroup/VRadioGroup.d.ts +3 -3
- package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
- package/lib/components/VSelect/VSelect.d.ts +94 -94
- package/lib/components/VSlider/VSlider.d.ts +3 -3
- package/lib/components/VSnackbarQueue/VSnackbarQueue.d.ts +3 -1
- package/lib/components/VSnackbarQueue/VSnackbarQueue.js.map +1 -1
- package/lib/components/VSwitch/VSwitch.d.ts +3 -3
- package/lib/components/VTextField/VTextField.d.ts +27 -27
- package/lib/components/VTextarea/VTextarea.d.ts +15 -15
- package/lib/composables/calendar.d.ts +1 -0
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/dateFormat.d.ts +24 -0
- package/lib/composables/dateFormat.js +112 -0
- package/lib/composables/dateFormat.js.map +1 -0
- package/lib/composables/iconSizes.d.ts +28 -0
- package/lib/composables/iconSizes.js +23 -0
- package/lib/composables/iconSizes.js.map +1 -0
- package/lib/composables/theme.d.ts +6 -1
- package/lib/composables/theme.js +94 -26
- package/lib/composables/theme.js.map +1 -1
- package/lib/composables/virtual.js +6 -1
- package/lib/composables/virtual.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +75 -67
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/iconsets/mdi.js +2 -1
- package/lib/iconsets/mdi.js.map +1 -1
- package/lib/labs/VColorInput/VColorInput.css +4 -0
- package/lib/labs/VColorInput/VColorInput.d.ts +1767 -0
- package/lib/labs/VColorInput/VColorInput.js +129 -0
- package/lib/labs/VColorInput/VColorInput.js.map +1 -0
- package/lib/labs/VColorInput/VColorInput.sass +7 -0
- package/lib/labs/VColorInput/_variables.scss +2 -0
- package/lib/labs/VColorInput/index.d.ts +1 -0
- package/lib/labs/VColorInput/index.js +2 -0
- package/lib/labs/VColorInput/index.js.map +1 -0
- package/lib/labs/VDateInput/VDateInput.d.ts +115 -118
- package/lib/labs/VDateInput/VDateInput.js +38 -79
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
- package/lib/labs/VIconBtn/VIconBtn.js +7 -11
- package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
- package/lib/labs/components.d.ts +1 -0
- package/lib/labs/components.js +1 -0
- package/lib/labs/components.js.map +1 -1
- package/lib/util/globals.d.ts +1 -0
- package/lib/util/globals.js +1 -0
- package/lib/util/globals.js.map +1 -1
- package/package.json +2 -1
@@ -493,6 +493,7 @@ export declare const VTextarea: {
|
|
493
493
|
bgColor?: string | undefined;
|
494
494
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
495
495
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
496
|
+
iconColor?: string | boolean | undefined;
|
496
497
|
appendInnerIcon?: import("../../composables/icons.js").IconValue | undefined;
|
497
498
|
prependInnerIcon?: import("../../composables/icons.js").IconValue | undefined;
|
498
499
|
'onClick:clear'?: ((args_0: MouseEvent) => void) | undefined;
|
@@ -501,7 +502,6 @@ export declare const VTextarea: {
|
|
501
502
|
'onClick:appendInner'?: ((args_0: MouseEvent) => void) | undefined;
|
502
503
|
'onClick:prependInner'?: ((args_0: MouseEvent) => void) | undefined;
|
503
504
|
centerAffix?: boolean | undefined;
|
504
|
-
iconColor?: string | boolean | undefined;
|
505
505
|
hint?: string | undefined;
|
506
506
|
hideDetails?: boolean | "auto" | undefined;
|
507
507
|
suffix?: string | undefined;
|
@@ -614,9 +614,9 @@ export declare const VTextarea: {
|
|
614
614
|
baseColor?: string | undefined;
|
615
615
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
616
616
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
617
|
+
iconColor?: string | boolean | undefined;
|
617
618
|
'onClick:append'?: ((args_0: MouseEvent) => void) | undefined;
|
618
619
|
'onClick:prepend'?: ((args_0: MouseEvent) => void) | undefined;
|
619
|
-
iconColor?: string | boolean | undefined;
|
620
620
|
hint?: string | undefined;
|
621
621
|
hideDetails?: boolean | "auto" | undefined;
|
622
622
|
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "error" | "direction" | "style" | "disabled" | "readonly" | "messages" | "rules" | "focused" | "errorMessages" | "maxErrors" | "density" | "centerAffix" | "glow" | "hideSpinButtons" | "persistentHint">;
|
@@ -670,9 +670,9 @@ export declare const VTextarea: {
|
|
670
670
|
baseColor?: string | undefined;
|
671
671
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
672
672
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
673
|
+
iconColor?: string | boolean | undefined;
|
673
674
|
'onClick:append'?: ((args_0: MouseEvent) => void) | undefined;
|
674
675
|
'onClick:prepend'?: ((args_0: MouseEvent) => void) | undefined;
|
675
|
-
iconColor?: string | boolean | undefined;
|
676
676
|
hint?: string | undefined;
|
677
677
|
hideDetails?: boolean | "auto" | undefined;
|
678
678
|
} & {}, {
|
@@ -773,9 +773,9 @@ export declare const VTextarea: {
|
|
773
773
|
baseColor?: string | undefined;
|
774
774
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
775
775
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
776
|
+
iconColor?: string | boolean | undefined;
|
776
777
|
'onClick:append'?: ((args_0: MouseEvent) => void) | undefined;
|
777
778
|
'onClick:prepend'?: ((args_0: MouseEvent) => void) | undefined;
|
778
|
-
iconColor?: string | boolean | undefined;
|
779
779
|
hint?: string | undefined;
|
780
780
|
hideDetails?: boolean | "auto" | undefined;
|
781
781
|
} & {}, "reset" | "isValid" | "validate" | "resetValidation" | ("error" | "direction" | "style" | "disabled" | "readonly" | "messages" | "rules" | "focused" | "errorMessages" | "maxErrors" | "density" | "centerAffix" | "glow" | "hideSpinButtons" | "persistentHint")> & import("vue").ShallowUnwrapRef<{
|
@@ -787,7 +787,7 @@ export declare const VTextarea: {
|
|
787
787
|
}> & {} & import("vue").ComponentCustomProperties & {} & import("../../util/index.js").GenericProps<{
|
788
788
|
modelValue?: unknown;
|
789
789
|
'onUpdate:modelValue'?: ((value: unknown) => void) | undefined;
|
790
|
-
}, VInputSlots>, "name" | "id" | "width" | "color" | "maxWidth" | "minWidth" | "label" | "class" | "theme" | "$children" | "v-slots" | "v-slot:default" | keyof import("vue").VNodeProps | "onUpdate:focused" | "modelValue" | "validateOn" | "validationValue" | "onUpdate:modelValue" | "baseColor" | "prependIcon" | "appendIcon" | "v-slot:prepend" | "v-slot:append" | "onClick:append" | "onClick:prepend" | "v-slot:message" | "
|
790
|
+
}, VInputSlots>, "name" | "id" | "width" | "color" | "maxWidth" | "minWidth" | "label" | "class" | "theme" | "$children" | "v-slots" | "v-slot:default" | keyof import("vue").VNodeProps | "onUpdate:focused" | "modelValue" | "validateOn" | "validationValue" | "onUpdate:modelValue" | "baseColor" | "prependIcon" | "appendIcon" | "v-slot:prepend" | "v-slot:append" | "iconColor" | "onClick:append" | "onClick:prepend" | "v-slot:message" | "hint" | "hideDetails" | "v-slot:details" | ("error" | "direction" | "style" | "disabled" | "readonly" | "messages" | "rules" | "focused" | "errorMessages" | "maxErrors" | "density" | "centerAffix" | "glow" | "hideSpinButtons" | "persistentHint")>, `$${any}`> & {
|
791
791
|
_allExposed: {
|
792
792
|
reset: () => Promise<void>;
|
793
793
|
resetValidation: () => Promise<void>;
|
@@ -910,6 +910,7 @@ export declare const VTextarea: {
|
|
910
910
|
bgColor?: string | undefined;
|
911
911
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
912
912
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
913
|
+
iconColor?: string | boolean | undefined;
|
913
914
|
appendInnerIcon?: import("../../composables/icons.js").IconValue | undefined;
|
914
915
|
prependInnerIcon?: import("../../composables/icons.js").IconValue | undefined;
|
915
916
|
'onClick:clear'?: ((args_0: MouseEvent) => void) | undefined;
|
@@ -918,7 +919,6 @@ export declare const VTextarea: {
|
|
918
919
|
'onClick:appendInner'?: ((args_0: MouseEvent) => void) | undefined;
|
919
920
|
'onClick:prependInner'?: ((args_0: MouseEvent) => void) | undefined;
|
920
921
|
centerAffix?: boolean | undefined;
|
921
|
-
iconColor?: string | boolean | undefined;
|
922
922
|
hint?: string | undefined;
|
923
923
|
hideDetails?: boolean | "auto" | undefined;
|
924
924
|
suffix?: string | undefined;
|
@@ -1031,9 +1031,9 @@ export declare const VTextarea: {
|
|
1031
1031
|
baseColor?: string | undefined;
|
1032
1032
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1033
1033
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1034
|
+
iconColor?: string | boolean | undefined;
|
1034
1035
|
'onClick:append'?: ((args_0: MouseEvent) => void) | undefined;
|
1035
1036
|
'onClick:prepend'?: ((args_0: MouseEvent) => void) | undefined;
|
1036
|
-
iconColor?: string | boolean | undefined;
|
1037
1037
|
hint?: string | undefined;
|
1038
1038
|
hideDetails?: boolean | "auto" | undefined;
|
1039
1039
|
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "error" | "direction" | "style" | "disabled" | "readonly" | "messages" | "rules" | "focused" | "errorMessages" | "maxErrors" | "density" | "centerAffix" | "glow" | "hideSpinButtons" | "persistentHint">;
|
@@ -1087,9 +1087,9 @@ export declare const VTextarea: {
|
|
1087
1087
|
baseColor?: string | undefined;
|
1088
1088
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1089
1089
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1090
|
+
iconColor?: string | boolean | undefined;
|
1090
1091
|
'onClick:append'?: ((args_0: MouseEvent) => void) | undefined;
|
1091
1092
|
'onClick:prepend'?: ((args_0: MouseEvent) => void) | undefined;
|
1092
|
-
iconColor?: string | boolean | undefined;
|
1093
1093
|
hint?: string | undefined;
|
1094
1094
|
hideDetails?: boolean | "auto" | undefined;
|
1095
1095
|
} & {}, {
|
@@ -1190,9 +1190,9 @@ export declare const VTextarea: {
|
|
1190
1190
|
baseColor?: string | undefined;
|
1191
1191
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1192
1192
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1193
|
+
iconColor?: string | boolean | undefined;
|
1193
1194
|
'onClick:append'?: ((args_0: MouseEvent) => void) | undefined;
|
1194
1195
|
'onClick:prepend'?: ((args_0: MouseEvent) => void) | undefined;
|
1195
|
-
iconColor?: string | boolean | undefined;
|
1196
1196
|
hint?: string | undefined;
|
1197
1197
|
hideDetails?: boolean | "auto" | undefined;
|
1198
1198
|
} & {}, "reset" | "isValid" | "validate" | "resetValidation" | ("error" | "direction" | "style" | "disabled" | "readonly" | "messages" | "rules" | "focused" | "errorMessages" | "maxErrors" | "density" | "centerAffix" | "glow" | "hideSpinButtons" | "persistentHint")> & import("vue").ShallowUnwrapRef<{
|
@@ -1204,7 +1204,7 @@ export declare const VTextarea: {
|
|
1204
1204
|
}> & {} & import("vue").ComponentCustomProperties & {} & import("../../util/index.js").GenericProps<{
|
1205
1205
|
modelValue?: unknown;
|
1206
1206
|
'onUpdate:modelValue'?: ((value: unknown) => void) | undefined;
|
1207
|
-
}, VInputSlots>, "name" | "id" | "width" | "color" | "maxWidth" | "minWidth" | "label" | "class" | "theme" | "$children" | "v-slots" | "v-slot:default" | keyof import("vue").VNodeProps | "onUpdate:focused" | "modelValue" | "validateOn" | "validationValue" | "onUpdate:modelValue" | "baseColor" | "prependIcon" | "appendIcon" | "v-slot:prepend" | "v-slot:append" | "onClick:append" | "onClick:prepend" | "v-slot:message" | "
|
1207
|
+
}, VInputSlots>, "name" | "id" | "width" | "color" | "maxWidth" | "minWidth" | "label" | "class" | "theme" | "$children" | "v-slots" | "v-slot:default" | keyof import("vue").VNodeProps | "onUpdate:focused" | "modelValue" | "validateOn" | "validationValue" | "onUpdate:modelValue" | "baseColor" | "prependIcon" | "appendIcon" | "v-slot:prepend" | "v-slot:append" | "iconColor" | "onClick:append" | "onClick:prepend" | "v-slot:message" | "hint" | "hideDetails" | "v-slot:details" | ("error" | "direction" | "style" | "disabled" | "readonly" | "messages" | "rules" | "focused" | "errorMessages" | "maxErrors" | "density" | "centerAffix" | "glow" | "hideSpinButtons" | "persistentHint")>, `$${any}`> & {
|
1208
1208
|
_allExposed: {
|
1209
1209
|
reset: () => Promise<void>;
|
1210
1210
|
resetValidation: () => Promise<void>;
|
@@ -1303,6 +1303,7 @@ export declare const VTextarea: {
|
|
1303
1303
|
bgColor?: string | undefined;
|
1304
1304
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1305
1305
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1306
|
+
iconColor?: string | boolean | undefined;
|
1306
1307
|
appendInnerIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1307
1308
|
prependInnerIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1308
1309
|
'onClick:clear'?: ((args_0: MouseEvent) => void) | undefined;
|
@@ -1311,7 +1312,6 @@ export declare const VTextarea: {
|
|
1311
1312
|
'onClick:appendInner'?: ((args_0: MouseEvent) => void) | undefined;
|
1312
1313
|
'onClick:prependInner'?: ((args_0: MouseEvent) => void) | undefined;
|
1313
1314
|
centerAffix?: boolean | undefined;
|
1314
|
-
iconColor?: string | boolean | undefined;
|
1315
1315
|
hint?: string | undefined;
|
1316
1316
|
hideDetails?: boolean | "auto" | undefined;
|
1317
1317
|
suffix?: string | undefined;
|
@@ -1424,9 +1424,9 @@ export declare const VTextarea: {
|
|
1424
1424
|
baseColor?: string | undefined;
|
1425
1425
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1426
1426
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1427
|
+
iconColor?: string | boolean | undefined;
|
1427
1428
|
'onClick:append'?: ((args_0: MouseEvent) => void) | undefined;
|
1428
1429
|
'onClick:prepend'?: ((args_0: MouseEvent) => void) | undefined;
|
1429
|
-
iconColor?: string | boolean | undefined;
|
1430
1430
|
hint?: string | undefined;
|
1431
1431
|
hideDetails?: boolean | "auto" | undefined;
|
1432
1432
|
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "error" | "direction" | "style" | "disabled" | "readonly" | "messages" | "rules" | "focused" | "errorMessages" | "maxErrors" | "density" | "centerAffix" | "glow" | "hideSpinButtons" | "persistentHint">;
|
@@ -1480,9 +1480,9 @@ export declare const VTextarea: {
|
|
1480
1480
|
baseColor?: string | undefined;
|
1481
1481
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1482
1482
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1483
|
+
iconColor?: string | boolean | undefined;
|
1483
1484
|
'onClick:append'?: ((args_0: MouseEvent) => void) | undefined;
|
1484
1485
|
'onClick:prepend'?: ((args_0: MouseEvent) => void) | undefined;
|
1485
|
-
iconColor?: string | boolean | undefined;
|
1486
1486
|
hint?: string | undefined;
|
1487
1487
|
hideDetails?: boolean | "auto" | undefined;
|
1488
1488
|
} & {}, {
|
@@ -1583,9 +1583,9 @@ export declare const VTextarea: {
|
|
1583
1583
|
baseColor?: string | undefined;
|
1584
1584
|
prependIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1585
1585
|
appendIcon?: import("../../composables/icons.js").IconValue | undefined;
|
1586
|
+
iconColor?: string | boolean | undefined;
|
1586
1587
|
'onClick:append'?: ((args_0: MouseEvent) => void) | undefined;
|
1587
1588
|
'onClick:prepend'?: ((args_0: MouseEvent) => void) | undefined;
|
1588
|
-
iconColor?: string | boolean | undefined;
|
1589
1589
|
hint?: string | undefined;
|
1590
1590
|
hideDetails?: boolean | "auto" | undefined;
|
1591
1591
|
} & {}, "reset" | "isValid" | "validate" | "resetValidation" | ("error" | "direction" | "style" | "disabled" | "readonly" | "messages" | "rules" | "focused" | "errorMessages" | "maxErrors" | "density" | "centerAffix" | "glow" | "hideSpinButtons" | "persistentHint")> & import("vue").ShallowUnwrapRef<{
|
@@ -1597,7 +1597,7 @@ export declare const VTextarea: {
|
|
1597
1597
|
}> & {} & import("vue").ComponentCustomProperties & {} & import("../../util/index.js").GenericProps<{
|
1598
1598
|
modelValue?: unknown;
|
1599
1599
|
'onUpdate:modelValue'?: ((value: unknown) => void) | undefined;
|
1600
|
-
}, VInputSlots>, "name" | "id" | "width" | "color" | "maxWidth" | "minWidth" | "label" | "class" | "theme" | "$children" | "v-slots" | "v-slot:default" | keyof import("vue").VNodeProps | "onUpdate:focused" | "modelValue" | "validateOn" | "validationValue" | "onUpdate:modelValue" | "baseColor" | "prependIcon" | "appendIcon" | "v-slot:prepend" | "v-slot:append" | "onClick:append" | "onClick:prepend" | "v-slot:message" | "
|
1600
|
+
}, VInputSlots>, "name" | "id" | "width" | "color" | "maxWidth" | "minWidth" | "label" | "class" | "theme" | "$children" | "v-slots" | "v-slot:default" | keyof import("vue").VNodeProps | "onUpdate:focused" | "modelValue" | "validateOn" | "validationValue" | "onUpdate:modelValue" | "baseColor" | "prependIcon" | "appendIcon" | "v-slot:prepend" | "v-slot:append" | "iconColor" | "onClick:append" | "onClick:prepend" | "v-slot:message" | "hint" | "hideDetails" | "v-slot:details" | ("error" | "direction" | "style" | "disabled" | "readonly" | "messages" | "rules" | "focused" | "errorMessages" | "maxErrors" | "density" | "centerAffix" | "glow" | "hideSpinButtons" | "persistentHint")>, `$${any}`> & {
|
1601
1601
|
_allExposed: {
|
1602
1602
|
reset: () => Promise<void>;
|
1603
1603
|
resetValidation: () => Promise<void>;
|
@@ -11,6 +11,7 @@ export interface CalendarProps {
|
|
11
11
|
weekdays: number[];
|
12
12
|
year: number | string | undefined;
|
13
13
|
weeksInMonth: 'dynamic' | 'static';
|
14
|
+
/** @deprecated */
|
14
15
|
firstDayOfWeek: number | string | undefined;
|
15
16
|
'onUpdate:modelValue': ((value: unknown[]) => void) | undefined;
|
16
17
|
'onUpdate:month': ((value: number) => void) | undefined;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"calendar.js","names":["useDate","useProxiedModel","computed","propsFactory","wrapInArray","makeCalendarProps","allowedDates","Array","Function","disabled","type","Boolean","default","displayValue","modelValue","month","Number","String","max","min","showAdjacentMonths","year","weekdays","weeksInMonth","firstDayOfWeek","undefined","useCalendar","props","adapter","model","v","map","i","date","value","length","isArray","getYear","startOfYear","setYear","getMonth","startOfMonth","setMonth","weekDays","toJsDate","startOfWeek","getDay","day","weeks","getWeekArray","days","flat","daysInMonth","lastDay","week","push","addDays","genDays","today","filter","includes","index","isoDate","toISO","isAdjacent","isSameMonth","isStart","isSameDay","isEnd","endOfMonth","isSame","formatted","format","isDisabled","isHidden","isSelected","some","isToday","isWeekEnd","isWeekStart","localized","daysInWeek","weekNumbers","getWeek","isAfter","d"],"sources":["../../src/composables/calendar.ts"],"sourcesContent":["// Composables\nimport { useDate } from '@/composables/date/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed } from 'vue'\nimport { propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport interface CalendarProps {\n allowedDates: unknown[] | ((date: unknown) => boolean) | undefined\n disabled: boolean\n displayValue?: unknown\n modelValue: unknown[] | undefined\n max: unknown\n min: unknown\n showAdjacentMonths: boolean\n month: number | string | undefined\n weekdays: number[]\n year: number | string | undefined\n weeksInMonth: 'dynamic' | 'static'\n firstDayOfWeek: number | string | undefined\n\n 'onUpdate:modelValue': ((value: unknown[]) => void) | undefined\n 'onUpdate:month': ((value: number) => void) | undefined\n 'onUpdate:year': ((value: number) => void) | undefined\n}\n\nexport type CalendarDay = {\n date: Date\n formatted: string\n isAdjacent: boolean\n isDisabled: boolean\n isEnd: boolean\n isHidden: boolean\n isSame: boolean\n isSelected: boolean\n isStart: boolean\n isToday: boolean\n isWeekEnd: boolean\n isWeekStart: boolean\n isoDate: string\n localized: string\n month: number\n year: number\n}\n\nexport type CalendarWeekdays = 0 | 1 | 2 | 3 | 4 | 5 | 6\n\n// Composables\nexport const makeCalendarProps = propsFactory({\n allowedDates: [Array, Function] as PropType<unknown[] | ((date: unknown) => boolean)>,\n disabled: {\n type: Boolean,\n default: null,\n },\n displayValue: null as any as PropType<unknown>,\n modelValue: Array as PropType<unknown[]>,\n month: [Number, String],\n max: null as any as PropType<unknown>,\n min: null as any as PropType<unknown>,\n showAdjacentMonths: Boolean,\n year: [Number, String],\n weekdays: {\n type: Array as PropType<CalendarWeekdays[]>,\n default: () => [0, 1, 2, 3, 4, 5, 6],\n },\n weeksInMonth: {\n type: String as PropType<'dynamic' | 'static'>,\n default: 'dynamic',\n },\n firstDayOfWeek: {\n type: [Number, String],\n default: undefined,\n },\n}, 'calendar')\n\nexport function useCalendar (props: CalendarProps) {\n const adapter = useDate()\n const model = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => wrapInArray(v).map(i => adapter.date(i)),\n )\n const displayValue = computed(() => {\n if (props.displayValue) return adapter.date(props.displayValue)\n if (model.value.length > 0) return adapter.date(model.value[0])\n if (props.min) return adapter.date(props.min)\n if (Array.isArray(props.allowedDates)) return adapter.date(props.allowedDates[0])\n\n return adapter.date()\n })\n\n const year = useProxiedModel(\n props,\n 'year',\n undefined,\n v => {\n const value = v != null ? Number(v) : adapter.getYear(displayValue.value)\n\n return adapter.startOfYear(adapter.setYear(adapter.date(), value))\n },\n v => adapter.getYear(v)\n )\n\n const month = useProxiedModel(\n props,\n 'month',\n undefined,\n v => {\n const value = v != null ? Number(v) : adapter.getMonth(displayValue.value)\n const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value))\n\n return adapter.setMonth(date, value)\n },\n v => adapter.getMonth(v)\n )\n\n const weekDays = computed(() => {\n const firstDayOfWeek = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay()\n // Always generate all days, regardless of props.weekdays\n return [0, 1, 2, 3, 4, 5, 6].map(day => (day + firstDayOfWeek) % 7)\n })\n\n const weeksInMonth = computed(() => {\n const weeks = adapter.getWeekArray(month.value, props.firstDayOfWeek)\n\n const days = weeks.flat()\n\n // Make sure there's always 6 weeks in month (6 * 7 days)\n // if weeksInMonth is 'static'\n const daysInMonth = 6 * 7\n if (props.weeksInMonth === 'static' && days.length < daysInMonth) {\n const lastDay = days[days.length - 1]\n\n let week = []\n for (let day = 1; day <= daysInMonth - days.length; day++) {\n week.push(adapter.addDays(lastDay, day))\n\n if (day % 7 === 0) {\n weeks.push(week)\n week = []\n }\n }\n }\n\n return weeks\n })\n\n function genDays (days: Date[], today: Date): CalendarDay[] {\n return days.filter(date => {\n return weekDays.value.includes(adapter.toJsDate(date).getDay())\n }).map((date, index) => {\n const isoDate = adapter.toISO(date)\n const isAdjacent = !adapter.isSameMonth(date, month.value)\n const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value))\n const isEnd = adapter.isSameDay(date, adapter.endOfMonth(month.value))\n const isSame = adapter.isSameDay(date, month.value)\n\n return {\n date,\n formatted: adapter.format(date, 'keyboardDate'),\n isAdjacent,\n isDisabled: isDisabled(date),\n isEnd,\n isHidden: isAdjacent && !props.showAdjacentMonths,\n isSame,\n isSelected: model.value.some(value => adapter.isSameDay(date, value)),\n isStart,\n isToday: adapter.isSameDay(date, today),\n isWeekEnd: index % 7 === 6,\n isWeekStart: index % 7 === 0,\n isoDate,\n localized: adapter.format(date, 'dayOfMonth'),\n month: adapter.getMonth(date),\n year: adapter.getYear(date),\n }\n })\n }\n\n const daysInWeek = computed(() => {\n const lastDay = adapter.startOfWeek(displayValue.value, props.firstDayOfWeek)\n const week: Date[] = []\n for (let day = 0; day <= 6; day++) {\n week.push(adapter.addDays(lastDay, day) as Date)\n }\n\n const today = adapter.date() as Date\n\n return genDays(week as Date[], today as Date)\n })\n\n const daysInMonth = computed(() => {\n const days = weeksInMonth.value.flat() as Date[]\n const today = adapter.date() as Date\n\n return genDays(days as Date[], today)\n })\n\n const weekNumbers = computed(() => {\n return weeksInMonth.value.map(week => {\n return week.length ? adapter.getWeek(week[0], props.firstDayOfWeek) : null\n })\n })\n\n function isDisabled (value: unknown) {\n if (props.disabled) return true\n\n const date = adapter.date(value)\n\n if (props.min && adapter.isAfter(adapter.date(props.min), date)) return true\n if (props.max && adapter.isAfter(date, adapter.date(props.max))) return true\n\n if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {\n return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date))\n }\n\n if (typeof props.allowedDates === 'function') {\n return !props.allowedDates(date)\n }\n\n return !props.weekdays.includes(adapter.toJsDate(date).getDay())\n }\n\n return {\n displayValue,\n daysInMonth,\n daysInWeek,\n genDays,\n model,\n weeksInMonth,\n weekDays,\n weekNumbers,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"calendar.js","names":["useDate","useProxiedModel","computed","propsFactory","wrapInArray","makeCalendarProps","allowedDates","Array","Function","disabled","type","Boolean","default","displayValue","modelValue","month","Number","String","max","min","showAdjacentMonths","year","weekdays","weeksInMonth","firstDayOfWeek","undefined","useCalendar","props","adapter","model","v","map","i","date","value","length","isArray","getYear","startOfYear","setYear","getMonth","startOfMonth","setMonth","weekDays","toJsDate","startOfWeek","getDay","day","weeks","getWeekArray","days","flat","daysInMonth","lastDay","week","push","addDays","genDays","today","filter","includes","index","isoDate","toISO","isAdjacent","isSameMonth","isStart","isSameDay","isEnd","endOfMonth","isSame","formatted","format","isDisabled","isHidden","isSelected","some","isToday","isWeekEnd","isWeekStart","localized","daysInWeek","weekNumbers","getWeek","isAfter","d"],"sources":["../../src/composables/calendar.ts"],"sourcesContent":["// Composables\nimport { useDate } from '@/composables/date/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed } from 'vue'\nimport { propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport interface CalendarProps {\n allowedDates: unknown[] | ((date: unknown) => boolean) | undefined\n disabled: boolean\n displayValue?: unknown\n modelValue: unknown[] | undefined\n max: unknown\n min: unknown\n showAdjacentMonths: boolean\n month: number | string | undefined\n weekdays: number[]\n year: number | string | undefined\n weeksInMonth: 'dynamic' | 'static'\n\n /** @deprecated */\n firstDayOfWeek: number | string | undefined\n\n 'onUpdate:modelValue': ((value: unknown[]) => void) | undefined\n 'onUpdate:month': ((value: number) => void) | undefined\n 'onUpdate:year': ((value: number) => void) | undefined\n}\n\nexport type CalendarDay = {\n date: Date\n formatted: string\n isAdjacent: boolean\n isDisabled: boolean\n isEnd: boolean\n isHidden: boolean\n isSame: boolean\n isSelected: boolean\n isStart: boolean\n isToday: boolean\n isWeekEnd: boolean\n isWeekStart: boolean\n isoDate: string\n localized: string\n month: number\n year: number\n}\n\nexport type CalendarWeekdays = 0 | 1 | 2 | 3 | 4 | 5 | 6\n\n// Composables\nexport const makeCalendarProps = propsFactory({\n allowedDates: [Array, Function] as PropType<unknown[] | ((date: unknown) => boolean)>,\n disabled: {\n type: Boolean,\n default: null,\n },\n displayValue: null as any as PropType<unknown>,\n modelValue: Array as PropType<unknown[]>,\n month: [Number, String],\n max: null as any as PropType<unknown>,\n min: null as any as PropType<unknown>,\n showAdjacentMonths: Boolean,\n year: [Number, String],\n weekdays: {\n type: Array as PropType<CalendarWeekdays[]>,\n default: () => [0, 1, 2, 3, 4, 5, 6],\n },\n weeksInMonth: {\n type: String as PropType<'dynamic' | 'static'>,\n default: 'dynamic',\n },\n firstDayOfWeek: {\n type: [Number, String],\n default: undefined,\n },\n}, 'calendar')\n\nexport function useCalendar (props: CalendarProps) {\n const adapter = useDate()\n const model = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => wrapInArray(v).map(i => adapter.date(i)),\n )\n const displayValue = computed(() => {\n if (props.displayValue) return adapter.date(props.displayValue)\n if (model.value.length > 0) return adapter.date(model.value[0])\n if (props.min) return adapter.date(props.min)\n if (Array.isArray(props.allowedDates)) return adapter.date(props.allowedDates[0])\n\n return adapter.date()\n })\n\n const year = useProxiedModel(\n props,\n 'year',\n undefined,\n v => {\n const value = v != null ? Number(v) : adapter.getYear(displayValue.value)\n\n return adapter.startOfYear(adapter.setYear(adapter.date(), value))\n },\n v => adapter.getYear(v)\n )\n\n const month = useProxiedModel(\n props,\n 'month',\n undefined,\n v => {\n const value = v != null ? Number(v) : adapter.getMonth(displayValue.value)\n const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value))\n\n return adapter.setMonth(date, value)\n },\n v => adapter.getMonth(v)\n )\n\n const weekDays = computed(() => {\n const firstDayOfWeek = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay()\n // Always generate all days, regardless of props.weekdays\n return [0, 1, 2, 3, 4, 5, 6].map(day => (day + firstDayOfWeek) % 7)\n })\n\n const weeksInMonth = computed(() => {\n const weeks = adapter.getWeekArray(month.value, props.firstDayOfWeek)\n\n const days = weeks.flat()\n\n // Make sure there's always 6 weeks in month (6 * 7 days)\n // if weeksInMonth is 'static'\n const daysInMonth = 6 * 7\n if (props.weeksInMonth === 'static' && days.length < daysInMonth) {\n const lastDay = days[days.length - 1]\n\n let week = []\n for (let day = 1; day <= daysInMonth - days.length; day++) {\n week.push(adapter.addDays(lastDay, day))\n\n if (day % 7 === 0) {\n weeks.push(week)\n week = []\n }\n }\n }\n\n return weeks\n })\n\n function genDays (days: Date[], today: Date): CalendarDay[] {\n return days.filter(date => {\n return weekDays.value.includes(adapter.toJsDate(date).getDay())\n }).map((date, index) => {\n const isoDate = adapter.toISO(date)\n const isAdjacent = !adapter.isSameMonth(date, month.value)\n const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value))\n const isEnd = adapter.isSameDay(date, adapter.endOfMonth(month.value))\n const isSame = adapter.isSameDay(date, month.value)\n\n return {\n date,\n formatted: adapter.format(date, 'keyboardDate'),\n isAdjacent,\n isDisabled: isDisabled(date),\n isEnd,\n isHidden: isAdjacent && !props.showAdjacentMonths,\n isSame,\n isSelected: model.value.some(value => adapter.isSameDay(date, value)),\n isStart,\n isToday: adapter.isSameDay(date, today),\n isWeekEnd: index % 7 === 6,\n isWeekStart: index % 7 === 0,\n isoDate,\n localized: adapter.format(date, 'dayOfMonth'),\n month: adapter.getMonth(date),\n year: adapter.getYear(date),\n }\n })\n }\n\n const daysInWeek = computed(() => {\n const lastDay = adapter.startOfWeek(displayValue.value, props.firstDayOfWeek)\n const week: Date[] = []\n for (let day = 0; day <= 6; day++) {\n week.push(adapter.addDays(lastDay, day) as Date)\n }\n\n const today = adapter.date() as Date\n\n return genDays(week as Date[], today as Date)\n })\n\n const daysInMonth = computed(() => {\n const days = weeksInMonth.value.flat() as Date[]\n const today = adapter.date() as Date\n\n return genDays(days as Date[], today)\n })\n\n const weekNumbers = computed(() => {\n return weeksInMonth.value.map(week => {\n return week.length ? adapter.getWeek(week[0], props.firstDayOfWeek) : null\n })\n })\n\n function isDisabled (value: unknown) {\n if (props.disabled) return true\n\n const date = adapter.date(value)\n\n if (props.min && adapter.isAfter(adapter.date(props.min), date)) return true\n if (props.max && adapter.isAfter(date, adapter.date(props.max))) return true\n\n if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {\n return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date))\n }\n\n if (typeof props.allowedDates === 'function') {\n return !props.allowedDates(date)\n }\n\n return !props.weekdays.includes(adapter.toJsDate(date).getDay())\n }\n\n return {\n displayValue,\n daysInMonth,\n daysInWeek,\n genDays,\n model,\n weeksInMonth,\n weekDays,\n weekNumbers,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import type { Ref } from 'vue';
|
2
|
+
export interface DateFormatProps {
|
3
|
+
inputFormat?: string;
|
4
|
+
}
|
5
|
+
export declare const makeDateFormatProps: <Defaults extends {
|
6
|
+
inputFormat?: unknown;
|
7
|
+
} = {}>(defaults?: Defaults | undefined) => {
|
8
|
+
inputFormat: unknown extends Defaults["inputFormat"] ? {
|
9
|
+
type: StringConstructor;
|
10
|
+
validator: (v: string) => boolean;
|
11
|
+
} : Omit<{
|
12
|
+
type: StringConstructor;
|
13
|
+
validator: (v: string) => boolean;
|
14
|
+
}, "type" | "default"> & {
|
15
|
+
type: import("vue").PropType<unknown extends Defaults["inputFormat"] ? string : string | Defaults["inputFormat"]>;
|
16
|
+
default: unknown extends Defaults["inputFormat"] ? string : string | Defaults["inputFormat"];
|
17
|
+
};
|
18
|
+
};
|
19
|
+
export declare function useDateFormat(props: DateFormatProps, locale: Ref<string>): {
|
20
|
+
isValid: (text: string) => boolean;
|
21
|
+
parseDate: (dateString: string) => unknown;
|
22
|
+
formatDate: (value: unknown) => string;
|
23
|
+
parserFormat: Readonly<Ref<string, string>>;
|
24
|
+
};
|
@@ -0,0 +1,112 @@
|
|
1
|
+
// Composables
|
2
|
+
import { useDate } from "./date/date.js"; // Utilities
|
3
|
+
import { toRef } from 'vue';
|
4
|
+
import { consoleWarn, propsFactory } from "../util/index.js"; // Types
|
5
|
+
// Types
|
6
|
+
class DateFormatSpec {
|
7
|
+
constructor(order,
|
8
|
+
// mdy | dmy | ymd
|
9
|
+
separator // / | - | .
|
10
|
+
) {
|
11
|
+
this.order = order;
|
12
|
+
this.separator = separator;
|
13
|
+
}
|
14
|
+
get format() {
|
15
|
+
return this.order.split('').map(sign => `${sign}${sign}`).join(this.separator).replace('yy', 'yyyy');
|
16
|
+
}
|
17
|
+
static canBeParsed(v) {
|
18
|
+
if (typeof v !== 'string') return false;
|
19
|
+
const lowercase = v.toLowerCase();
|
20
|
+
return ['y', 'm', 'd'].every(sign => lowercase.includes(sign)) && ['/', '-', '.'].some(sign => v.includes(sign));
|
21
|
+
}
|
22
|
+
static parse(v) {
|
23
|
+
if (!DateFormatSpec.canBeParsed(v)) {
|
24
|
+
throw new Error(`[${v}] cannot be parsed into date format specification`);
|
25
|
+
}
|
26
|
+
const order = v.toLowerCase().split('').filter((c, i, all) => 'dmy'.includes(c) && all.indexOf(c) === i).join('');
|
27
|
+
const separator = ['/', '-', '.'].find(sign => v.includes(sign));
|
28
|
+
return new DateFormatSpec(order, separator);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
export const makeDateFormatProps = propsFactory({
|
32
|
+
inputFormat: {
|
33
|
+
type: String,
|
34
|
+
validator: v => !v || DateFormatSpec.canBeParsed(v)
|
35
|
+
}
|
36
|
+
}, 'date-format');
|
37
|
+
export function useDateFormat(props, locale) {
|
38
|
+
const adapter = useDate();
|
39
|
+
function inferFromLocale() {
|
40
|
+
const localeForDateFormat = locale.value ?? 'en-US';
|
41
|
+
const formatFromLocale = Intl.DateTimeFormat(localeForDateFormat, {
|
42
|
+
year: 'numeric',
|
43
|
+
month: '2-digit',
|
44
|
+
day: '2-digit'
|
45
|
+
}).format(adapter.toJsDate(adapter.parseISO('1999-12-07'))).replace(/(07)|(٠٧)|(٢٩)|(۱۶)|(০৭)/, 'dd').replace(/(12)|(١٢)|(٠٨)|(۰۹)|(১২)/, 'mm').replace(/(1999)|(2542)|(١٩٩٩)|(١٤٢٠)|(۱۳۷۸)|(১৯৯৯)/, 'yyyy').replace(/[^ymd\-/.]/g, '').replace(/\.$/, '');
|
46
|
+
if (!DateFormatSpec.canBeParsed(formatFromLocale)) {
|
47
|
+
consoleWarn(`Date format inferred from locale [${localeForDateFormat}] is invalid: [${formatFromLocale}]`);
|
48
|
+
return 'mm/dd/yyyy';
|
49
|
+
}
|
50
|
+
return formatFromLocale;
|
51
|
+
}
|
52
|
+
const currentFormat = toRef(() => {
|
53
|
+
return DateFormatSpec.canBeParsed(props.inputFormat) ? DateFormatSpec.parse(props.inputFormat) : DateFormatSpec.parse(inferFromLocale());
|
54
|
+
});
|
55
|
+
function parseDate(dateString) {
|
56
|
+
function parseDateParts(text) {
|
57
|
+
const parts = text.trim().split(currentFormat.value.separator);
|
58
|
+
return {
|
59
|
+
y: Number(parts[currentFormat.value.order.indexOf('y')]),
|
60
|
+
m: Number(parts[currentFormat.value.order.indexOf('m')]),
|
61
|
+
d: Number(parts[currentFormat.value.order.indexOf('d')])
|
62
|
+
};
|
63
|
+
}
|
64
|
+
function validateDateParts(dateParts) {
|
65
|
+
const {
|
66
|
+
y: year,
|
67
|
+
m: month,
|
68
|
+
d: day
|
69
|
+
} = dateParts;
|
70
|
+
if (!year || !month || !day) return null;
|
71
|
+
if (month < 1 || month > 12) return null;
|
72
|
+
if (day < 1 || day > 31) return null;
|
73
|
+
return {
|
74
|
+
year: autoFixYear(year),
|
75
|
+
month,
|
76
|
+
day
|
77
|
+
};
|
78
|
+
}
|
79
|
+
function autoFixYear(year) {
|
80
|
+
const currentYear = adapter.getYear(adapter.date());
|
81
|
+
if (year > 100 || currentYear % 100 >= 50) {
|
82
|
+
return year;
|
83
|
+
}
|
84
|
+
const currentCentury = ~~(currentYear / 100) * 100;
|
85
|
+
return year < 50 ? currentCentury + year : currentCentury - 100 + year;
|
86
|
+
}
|
87
|
+
const dateParts = parseDateParts(dateString);
|
88
|
+
const validatedParts = validateDateParts(dateParts);
|
89
|
+
if (!validatedParts) return null;
|
90
|
+
const {
|
91
|
+
year,
|
92
|
+
month,
|
93
|
+
day
|
94
|
+
} = validatedParts;
|
95
|
+
const pad = v => String(v).padStart(2, '0');
|
96
|
+
return adapter.parseISO(`${year}-${pad(month)}-${pad(day)}`);
|
97
|
+
}
|
98
|
+
function isValid(text) {
|
99
|
+
return !!parseDate(text);
|
100
|
+
}
|
101
|
+
function formatDate(value) {
|
102
|
+
const parts = adapter.toISO(value).split('-');
|
103
|
+
return currentFormat.value.order.split('').map(sign => parts['ymd'.indexOf(sign)]).join(currentFormat.value.separator);
|
104
|
+
}
|
105
|
+
return {
|
106
|
+
isValid,
|
107
|
+
parseDate,
|
108
|
+
formatDate,
|
109
|
+
parserFormat: toRef(() => currentFormat.value.format)
|
110
|
+
};
|
111
|
+
}
|
112
|
+
//# sourceMappingURL=dateFormat.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"dateFormat.js","names":["useDate","toRef","consoleWarn","propsFactory","DateFormatSpec","constructor","order","separator","format","split","map","sign","join","replace","canBeParsed","v","lowercase","toLowerCase","every","includes","some","parse","Error","filter","c","i","all","indexOf","find","makeDateFormatProps","inputFormat","type","String","validator","useDateFormat","props","locale","adapter","inferFromLocale","localeForDateFormat","value","formatFromLocale","Intl","DateTimeFormat","year","month","day","toJsDate","parseISO","currentFormat","parseDate","dateString","parseDateParts","text","parts","trim","y","Number","m","d","validateDateParts","dateParts","autoFixYear","currentYear","getYear","date","currentCentury","validatedParts","pad","padStart","isValid","formatDate","toISO","parserFormat"],"sources":["../../src/composables/dateFormat.ts"],"sourcesContent":["// Composables\nimport { useDate } from '@/composables/date/date'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { consoleWarn, propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\n// Types\nexport interface DateFormatProps {\n inputFormat?: string\n}\n\nclass DateFormatSpec {\n constructor (\n public readonly order: string, // mdy | dmy | ymd\n public readonly separator: string // / | - | .\n ) { }\n\n get format () {\n return this.order.split('')\n .map(sign => `${sign}${sign}`)\n .join(this.separator)\n .replace('yy', 'yyyy')\n }\n\n static canBeParsed (v: any) {\n if (typeof v !== 'string') return false\n const lowercase = v.toLowerCase()\n return ['y', 'm', 'd'].every(sign => lowercase.includes(sign)) &&\n ['/', '-', '.'].some(sign => v.includes(sign))\n }\n\n static parse (v: string) {\n if (!DateFormatSpec.canBeParsed(v)) {\n throw new Error(`[${v}] cannot be parsed into date format specification`)\n }\n const order = v.toLowerCase().split('')\n .filter((c, i, all) => 'dmy'.includes(c) && all.indexOf(c) === i)\n .join('')\n const separator = ['/', '-', '.'].find(sign => v.includes(sign))!\n return new DateFormatSpec(order, separator)\n }\n}\n\nexport const makeDateFormatProps = propsFactory({\n inputFormat: {\n type: String,\n validator: (v: string) => !v || DateFormatSpec.canBeParsed(v),\n },\n}, 'date-format')\n\nexport function useDateFormat (props: DateFormatProps, locale: Ref<string>) {\n const adapter = useDate()\n\n function inferFromLocale () {\n const localeForDateFormat = locale.value ?? 'en-US'\n const formatFromLocale = Intl.DateTimeFormat(localeForDateFormat, { year: 'numeric', month: '2-digit', day: '2-digit' })\n .format(adapter.toJsDate(adapter.parseISO('1999-12-07')))\n .replace(/(07)|(٠٧)|(٢٩)|(۱۶)|(০৭)/, 'dd')\n .replace(/(12)|(١٢)|(٠٨)|(۰۹)|(১২)/, 'mm')\n .replace(/(1999)|(2542)|(١٩٩٩)|(١٤٢٠)|(۱۳۷۸)|(১৯৯৯)/, 'yyyy')\n .replace(/[^ymd\\-/.]/g, '')\n .replace(/\\.$/, '')\n\n if (!DateFormatSpec.canBeParsed(formatFromLocale)) {\n consoleWarn(`Date format inferred from locale [${localeForDateFormat}] is invalid: [${formatFromLocale}]`)\n return 'mm/dd/yyyy'\n }\n\n return formatFromLocale\n }\n\n const currentFormat = toRef(() => {\n return DateFormatSpec.canBeParsed(props.inputFormat)\n ? DateFormatSpec.parse(props.inputFormat!)\n : DateFormatSpec.parse(inferFromLocale())\n })\n\n function parseDate (dateString: string) {\n function parseDateParts (text: string): Record<'y' |'m' | 'd', number> {\n const parts = text.trim().split(currentFormat.value.separator)\n\n return {\n y: Number(parts[currentFormat.value.order.indexOf('y')]),\n m: Number(parts[currentFormat.value.order.indexOf('m')]),\n d: Number(parts[currentFormat.value.order.indexOf('d')]),\n }\n }\n\n function validateDateParts (dateParts: Record<string, number>) {\n const { y: year, m: month, d: day } = dateParts\n if (!year || !month || !day) return null\n if (month < 1 || month > 12) return null\n if (day < 1 || day > 31) return null\n\n return { year: autoFixYear(year), month, day }\n }\n\n function autoFixYear (year: number) {\n const currentYear = adapter.getYear(adapter.date())\n if (year > 100 || currentYear % 100 >= 50) {\n return year\n }\n\n const currentCentury = ~~(currentYear / 100) * 100\n\n return year < 50\n ? currentCentury + year\n : (currentCentury - 100) + year\n }\n\n const dateParts = parseDateParts(dateString)\n const validatedParts = validateDateParts(dateParts)\n\n if (!validatedParts) return null\n\n const { year, month, day } = validatedParts\n\n const pad = (v: number) => String(v).padStart(2, '0')\n\n return adapter.parseISO(`${year}-${pad(month)}-${pad(day)}`)\n }\n\n function isValid (text: string) {\n return !!parseDate(text)\n }\n\n function formatDate (value: unknown) {\n const parts = adapter.toISO(value).split('-')\n\n return currentFormat.value.order.split('')\n .map(sign => parts['ymd'.indexOf(sign)])\n .join(currentFormat.value.separator)\n }\n\n return {\n isValid,\n parseDate,\n formatDate,\n parserFormat: toRef(() => currentFormat.value.format),\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import type { ComputedGetter, PropType } from 'vue';
|
2
|
+
import type { VIconBtnSizes } from "../labs/VIconBtn/VIconBtn.js";
|
3
|
+
export interface IconSizeProps {
|
4
|
+
iconSize?: VIconBtnSizes | number | string;
|
5
|
+
iconSizes: [VIconBtnSizes, number][];
|
6
|
+
}
|
7
|
+
export declare const makeIconSizeProps: <Defaults extends {
|
8
|
+
iconSize?: unknown;
|
9
|
+
iconSizes?: unknown;
|
10
|
+
} = {}>(defaults?: Defaults | undefined) => {
|
11
|
+
iconSize: unknown extends Defaults["iconSize"] ? PropType<string | number> : {
|
12
|
+
type: PropType<unknown extends Defaults["iconSize"] ? string | number : string | number | Defaults["iconSize"]>;
|
13
|
+
default: unknown extends Defaults["iconSize"] ? string | number : NonNullable<string | number> | Defaults["iconSize"];
|
14
|
+
};
|
15
|
+
iconSizes: unknown extends Defaults["iconSizes"] ? {
|
16
|
+
type: PropType<[VIconBtnSizes, number][]>;
|
17
|
+
default: () => (string | number)[][];
|
18
|
+
} : Omit<{
|
19
|
+
type: PropType<[VIconBtnSizes, number][]>;
|
20
|
+
default: () => (string | number)[][];
|
21
|
+
}, "type" | "default"> & {
|
22
|
+
type: PropType<unknown extends Defaults["iconSizes"] ? [VIconBtnSizes, number][] : [VIconBtnSizes, number][] | Defaults["iconSizes"]>;
|
23
|
+
default: unknown extends Defaults["iconSizes"] ? [VIconBtnSizes, number][] : [VIconBtnSizes, number][] | Defaults["iconSizes"];
|
24
|
+
};
|
25
|
+
};
|
26
|
+
export declare function useIconSizes(props: IconSizeProps, fallback: ComputedGetter<VIconBtnSizes | number | string | undefined>): {
|
27
|
+
iconSize: import("vue").ComputedRef<number | VIconBtnSizes | undefined>;
|
28
|
+
};
|
@@ -0,0 +1,23 @@
|
|
1
|
+
// Utilities
|
2
|
+
import { computed } from 'vue';
|
3
|
+
import { propsFactory } from "../util/index.js"; // Types
|
4
|
+
// Types
|
5
|
+
// Composables
|
6
|
+
export const makeIconSizeProps = propsFactory({
|
7
|
+
iconSize: [Number, String],
|
8
|
+
iconSizes: {
|
9
|
+
type: Array,
|
10
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
11
|
+
}
|
12
|
+
}, 'iconSize');
|
13
|
+
export function useIconSizes(props, fallback) {
|
14
|
+
const iconSize = computed(() => {
|
15
|
+
const iconSizeMap = new Map(props.iconSizes);
|
16
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
17
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
18
|
+
});
|
19
|
+
return {
|
20
|
+
iconSize
|
21
|
+
};
|
22
|
+
}
|
23
|
+
//# sourceMappingURL=iconSizes.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"iconSizes.js","names":["computed","propsFactory","makeIconSizeProps","iconSize","Number","String","iconSizes","type","Array","default","useIconSizes","props","fallback","iconSizeMap","Map","_iconSize","has","get"],"sources":["../../src/composables/iconSizes.ts"],"sourcesContent":["// Utilities\nimport { computed } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { ComputedGetter, PropType } from 'vue'\nimport type { VIconBtnSizes } from '@/labs/VIconBtn/VIconBtn'\n\n// Types\nexport interface IconSizeProps {\n iconSize?: VIconBtnSizes | number | string\n iconSizes: [VIconBtnSizes, number][]\n}\n\n// Composables\nexport const makeIconSizeProps = propsFactory({\n iconSize: [Number, String] as PropType<VIconBtnSizes | number | string>,\n iconSizes: {\n type: Array as PropType<[VIconBtnSizes, number][]>,\n default: () => ([\n ['x-small', 10],\n ['small', 16],\n ['default', 24],\n ['large', 28],\n ['x-large', 32],\n ]),\n },\n}, 'iconSize')\n\nexport function useIconSizes (props: IconSizeProps, fallback: ComputedGetter<VIconBtnSizes | number | string | undefined>) {\n const iconSize = computed(() => {\n const iconSizeMap = new Map(props.iconSizes)\n const _iconSize = props.iconSize as VIconBtnSizes ?? fallback() ?? 'default'\n return iconSizeMap.has(_iconSize)\n ? iconSizeMap.get(_iconSize)\n : _iconSize\n })\n\n return { iconSize }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,QAAQ,KAAK;AAAA,SACrBC,YAAY,4BAErB;AAIA;AAMA;AACA,OAAO,MAAMC,iBAAiB,GAAGD,YAAY,CAAC;EAC5CE,QAAQ,EAAE,CAACC,MAAM,EAAEC,MAAM,CAA8C;EACvEC,SAAS,EAAE;IACTC,IAAI,EAAEC,KAA4C;IAClDC,OAAO,EAAEA,CAAA,KAAO,CACd,CAAC,SAAS,EAAE,EAAE,CAAC,EACf,CAAC,OAAO,EAAE,EAAE,CAAC,EACb,CAAC,SAAS,EAAE,EAAE,CAAC,EACf,CAAC,OAAO,EAAE,EAAE,CAAC,EACb,CAAC,SAAS,EAAE,EAAE,CAAC;EAEnB;AACF,CAAC,EAAE,UAAU,CAAC;AAEd,OAAO,SAASC,YAAYA,CAAEC,KAAoB,EAAEC,QAAqE,EAAE;EACzH,MAAMT,QAAQ,GAAGH,QAAQ,CAAC,MAAM;IAC9B,MAAMa,WAAW,GAAG,IAAIC,GAAG,CAACH,KAAK,CAACL,SAAS,CAAC;IAC5C,MAAMS,SAAS,GAAGJ,KAAK,CAACR,QAAQ,IAAqBS,QAAQ,CAAC,CAAC,IAAI,SAAS;IAC5E,OAAOC,WAAW,CAACG,GAAG,CAACD,SAAS,CAAC,GAC7BF,WAAW,CAACI,GAAG,CAACF,SAAS,CAAC,GAC1BA,SAAS;EACf,CAAC,CAAC;EAEF,OAAO;IAAEZ;EAAS,CAAC;AACrB","ignoreList":[]}
|
@@ -4,11 +4,12 @@ type DeepPartial<T> = T extends object ? {
|
|
4
4
|
} : T;
|
5
5
|
export type ThemeOptions = false | {
|
6
6
|
cspNonce?: string;
|
7
|
-
defaultTheme?: string;
|
7
|
+
defaultTheme?: 'light' | 'dark' | 'system' | string;
|
8
8
|
variations?: false | VariationsOptions;
|
9
9
|
themes?: Record<string, ThemeDefinition>;
|
10
10
|
stylesheetId?: string;
|
11
11
|
scope?: string;
|
12
|
+
unimportant?: boolean;
|
12
13
|
};
|
13
14
|
export type ThemeDefinition = DeepPartial<InternalThemeDefinition>;
|
14
15
|
interface VariationsOptions {
|
@@ -45,11 +46,15 @@ interface OnColors {
|
|
45
46
|
'on-info': string;
|
46
47
|
}
|
47
48
|
export interface ThemeInstance {
|
49
|
+
change: (themeName: string) => void;
|
50
|
+
cycle: (themeArray?: string[]) => void;
|
51
|
+
toggle: (themeArray?: [string, string]) => void;
|
48
52
|
readonly isDisabled: boolean;
|
49
53
|
readonly themes: Ref<Record<string, InternalThemeDefinition>>;
|
50
54
|
readonly name: Readonly<Ref<string>>;
|
51
55
|
readonly current: DeepReadonly<Ref<InternalThemeDefinition>>;
|
52
56
|
readonly computedThemes: DeepReadonly<Ref<Record<string, InternalThemeDefinition>>>;
|
57
|
+
readonly prefix: string;
|
53
58
|
readonly themeClasses: Readonly<Ref<string | undefined>>;
|
54
59
|
readonly styles: Readonly<Ref<string>>;
|
55
60
|
readonly global: {
|