@vuetify/nightly 3.0.0-beta.3 → 3.0.0-beta.4
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 +32 -2
- package/dist/_component-variables.sass +61 -0
- package/dist/json/attributes.json +176 -20
- package/dist/json/importMap.json +208 -204
- package/dist/json/tags.json +48 -4
- package/dist/json/web-types.json +492 -46
- package/dist/vuetify.css +950 -932
- package/dist/vuetify.d.ts +2521 -341
- package/dist/vuetify.esm.js +2318 -2130
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +2317 -2129
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +764 -740
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +5 -5
- package/lib/components/VAlert/VAlert.mjs +1 -1
- package/lib/components/VAlert/VAlert.mjs.map +1 -1
- package/lib/components/VAlert/VAlert.sass +0 -2
- package/lib/components/VAppBar/VAppBar.sass +0 -1
- package/lib/components/VAutocomplete/VAutocomplete.mjs +46 -17
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.sass +0 -2
- package/lib/components/VAvatar/VAvatar.css +1 -1
- package/lib/components/VAvatar/VAvatar.sass +1 -2
- package/lib/components/VAvatar/_mixins.scss +0 -1
- package/lib/components/VBadge/VBadge.sass +0 -1
- package/lib/components/VBanner/VBanner.sass +0 -1
- package/lib/components/VBottomNavigation/VBottomNavigation.sass +0 -1
- package/lib/components/VBreadcrumbs/VBreadcrumbs.sass +0 -1
- package/lib/components/VBtn/VBtn.css +24 -7
- package/lib/components/VBtn/VBtn.mjs +20 -11
- package/lib/components/VBtn/VBtn.mjs.map +1 -1
- package/lib/components/VBtn/VBtn.sass +17 -2
- package/lib/components/VBtnGroup/VBtnGroup.sass +0 -1
- package/lib/components/VBtnToggle/VBtnToggle.sass +0 -1
- package/lib/components/VCard/VCard.css +5 -5
- package/lib/components/VCard/VCard.mjs +1 -1
- package/lib/components/VCard/VCard.mjs.map +1 -1
- package/lib/components/VCard/VCard.sass +0 -1
- package/lib/components/VCarousel/VCarousel.sass +0 -1
- package/lib/components/VCheckbox/VCheckbox.mjs +13 -46
- package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
- package/lib/components/VCheckbox/VCheckbox.sass +0 -1
- package/lib/components/VCheckbox/VCheckboxBtn.mjs +67 -0
- package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -0
- package/lib/components/VCheckbox/index.mjs +1 -0
- package/lib/components/VCheckbox/index.mjs.map +1 -1
- package/lib/components/VChip/VChip.css +5 -5
- package/lib/components/VChip/VChip.mjs +1 -1
- package/lib/components/VChip/VChip.mjs.map +1 -1
- package/lib/components/VChip/VChip.sass +0 -1
- package/lib/components/VChipGroup/VChipGroup.mjs +1 -1
- package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
- package/lib/components/VCode/VCode.sass +1 -2
- package/lib/components/VCode/_variables.scss +1 -1
- package/lib/components/VColorPicker/VColorPicker.sass +0 -1
- package/lib/components/VColorPicker/VColorPickerCanvas.sass +0 -1
- package/lib/components/VColorPicker/VColorPickerEdit.sass +0 -1
- package/lib/components/VColorPicker/VColorPickerPreview.sass +0 -1
- package/lib/components/VColorPicker/VColorPickerSwatches.sass +0 -1
- package/lib/components/VCombobox/VCombobox.mjs +47 -29
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/VCombobox.sass +0 -2
- package/lib/components/VCounter/VCounter.sass +0 -1
- package/lib/components/VDialog/VDialog.sass +0 -1
- package/lib/components/VDivider/VDivider.sass +0 -1
- package/lib/components/VExpansionPanel/VExpansionPanel.sass +0 -1
- package/lib/components/VField/VField.css +9 -9
- package/lib/components/VField/VField.mjs +2 -2
- package/lib/components/VField/VField.mjs.map +1 -1
- package/lib/components/VField/VField.sass +6 -8
- package/lib/components/VField/_variables.scss +3 -3
- package/lib/components/VFileInput/VFileInput.sass +0 -1
- package/lib/components/VFooter/VFooter.sass +0 -1
- package/lib/components/VIcon/VIcon.sass +0 -1
- package/lib/components/VImg/VImg.sass +0 -1
- package/lib/components/VInput/VInput.mjs +3 -3
- package/lib/components/VInput/VInput.mjs.map +1 -1
- package/lib/components/VInput/VInput.sass +0 -1
- package/lib/components/VItemGroup/VItemGroup.sass +0 -1
- package/lib/components/VKbd/VKbd.sass +0 -1
- package/lib/components/VKbd/_variables.scss +1 -1
- package/lib/components/VLabel/VLabel.sass +0 -1
- package/lib/components/VList/VList.mjs +1 -1
- package/lib/components/VList/VList.mjs.map +1 -1
- package/lib/components/VList/VList.sass +0 -1
- package/lib/components/VList/VListChildren.mjs +1 -1
- package/lib/components/VList/VListChildren.mjs.map +1 -1
- package/lib/components/VList/VListGroup.mjs +11 -2
- package/lib/components/VList/VListGroup.mjs.map +1 -1
- package/lib/components/VList/VListItem.css +6 -6
- package/lib/components/VList/VListItem.mjs +7 -7
- package/lib/components/VList/VListItem.mjs.map +1 -1
- package/lib/components/VList/VListItem.sass +1 -2
- package/lib/components/VMain/VMain.sass +0 -1
- package/lib/components/VMenu/VMenu.sass +0 -1
- package/lib/components/VMessages/VMessages.sass +0 -1
- package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +5 -1
- package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
- package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +0 -1
- package/lib/components/VOverlay/VOverlay.sass +0 -1
- package/lib/components/VPagination/VPagination.sass +0 -1
- package/lib/components/VProgressCircular/VProgressCircular.sass +0 -1
- package/lib/components/VProgressLinear/VProgressLinear.sass +0 -1
- package/lib/components/VRadioGroup/VRadioGroup.mjs +4 -1
- package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
- package/lib/components/VRating/VRating.sass +0 -1
- package/lib/components/VSelect/VSelect.mjs +54 -19
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/VSelect.sass +0 -2
- package/lib/components/VSelectionControl/VSelectionControl.css +1 -0
- package/lib/components/VSelectionControl/VSelectionControl.mjs +6 -5
- package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
- package/lib/components/VSelectionControl/VSelectionControl.sass +1 -1
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.sass +0 -1
- package/lib/components/VSheet/VSheet.sass +0 -1
- package/lib/components/VSlideGroup/VSlideGroup.sass +0 -1
- package/lib/components/VSlider/VSlider.sass +0 -2
- package/lib/components/VSlider/VSliderThumb.sass +0 -2
- package/lib/components/VSlider/VSliderTrack.sass +0 -2
- package/lib/components/VSnackbar/VSnackbar.css +5 -5
- package/lib/components/VSnackbar/VSnackbar.sass +0 -1
- package/lib/components/VSwitch/VSwitch.mjs +8 -2
- package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
- package/lib/components/VSwitch/VSwitch.sass +0 -1
- package/lib/components/VSystemBar/VSystemBar.sass +0 -1
- package/lib/components/VTable/VTable.sass +0 -1
- package/lib/components/VTabs/VTab.sass +0 -1
- package/lib/components/VTabs/VTabs.sass +0 -1
- package/lib/components/VTabs/_variables.scss +1 -1
- package/lib/components/VTextField/VTextField.mjs +2 -0
- package/lib/components/VTextField/VTextField.mjs.map +1 -1
- package/lib/components/VTextField/VTextField.sass +0 -1
- package/lib/components/VTextarea/VTextarea.sass +0 -2
- package/lib/components/VTimeline/VTimeline.sass +0 -1
- package/lib/components/VToolbar/VToolbar.sass +0 -1
- package/lib/components/VToolbar/VToolbarItems.mjs +1 -1
- package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
- package/lib/components/VTooltip/VTooltip.sass +0 -1
- package/lib/components/VWindow/VWindow.sass +0 -2
- package/lib/components/VWindow/VWindowItem.mjs +9 -3
- package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
- package/lib/components/index.d.ts +2520 -342
- package/lib/composables/display.mjs +13 -11
- package/lib/composables/display.mjs.map +1 -1
- package/lib/composables/form.mjs +6 -6
- package/lib/composables/form.mjs.map +1 -1
- package/lib/composables/items.mjs +2 -2
- package/lib/composables/items.mjs.map +1 -1
- package/lib/composables/ssrBoot.mjs +3 -2
- package/lib/composables/ssrBoot.mjs.map +1 -1
- package/lib/composables/theme.mjs +6 -2
- package/lib/composables/theme.mjs.map +1 -1
- package/lib/composables/validation.mjs +14 -7
- package/lib/composables/validation.mjs.map +1 -1
- package/lib/composables/variant.mjs +3 -3
- package/lib/composables/variant.mjs.map +1 -1
- package/lib/directives/ripple/VRipple.sass +0 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +23 -6
- package/lib/framework.mjs.map +1 -1
- package/lib/index.d.ts +73 -67
- package/lib/styles/tools/_variant.sass +6 -6
- package/lib/util/getCurrentInstance.mjs +19 -0
- package/lib/util/getCurrentInstance.mjs.map +1 -1
- package/lib/util/helpers.mjs +0 -4
- package/lib/util/helpers.mjs.map +1 -1
- package/package.json +11 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Utilities
|
|
2
|
-
import { inject, reactive, ref, toRefs, watchEffect } from 'vue';
|
|
2
|
+
import { inject, nextTick, reactive, ref, toRefs, watchEffect } from 'vue';
|
|
3
3
|
import { mergeDeep } from "../util/index.mjs"; // Globals
|
|
4
4
|
|
|
5
5
|
import { IN_BROWSER, SUPPORTS_TOUCH } from "../util/globals.mjs"; // Types
|
|
@@ -20,16 +20,14 @@ const defaultDisplayOptions = {
|
|
|
20
20
|
const parseDisplayOptions = function () {
|
|
21
21
|
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultDisplayOptions;
|
|
22
22
|
return mergeDeep(defaultDisplayOptions, options);
|
|
23
|
-
};
|
|
24
|
-
// https://stackoverflow.com/questions/1248081
|
|
25
|
-
|
|
23
|
+
};
|
|
26
24
|
|
|
27
|
-
function getClientWidth() {
|
|
28
|
-
return IN_BROWSER ?
|
|
25
|
+
function getClientWidth(isHydrate) {
|
|
26
|
+
return IN_BROWSER && !isHydrate ? window.innerWidth : 0;
|
|
29
27
|
}
|
|
30
28
|
|
|
31
|
-
function getClientHeight() {
|
|
32
|
-
return IN_BROWSER ?
|
|
29
|
+
function getClientHeight(isHydrate) {
|
|
30
|
+
return IN_BROWSER && !isHydrate ? window.innerHeight : 0;
|
|
33
31
|
}
|
|
34
32
|
|
|
35
33
|
function getPlatform() {
|
|
@@ -68,19 +66,23 @@ function getPlatform() {
|
|
|
68
66
|
};
|
|
69
67
|
}
|
|
70
68
|
|
|
71
|
-
export function createDisplay(options) {
|
|
69
|
+
export function createDisplay(options, isHydrate) {
|
|
72
70
|
const {
|
|
73
71
|
thresholds,
|
|
74
72
|
mobileBreakpoint
|
|
75
73
|
} = parseDisplayOptions(options);
|
|
76
|
-
const height = ref(getClientHeight());
|
|
74
|
+
const height = ref(getClientHeight(isHydrate));
|
|
77
75
|
const platform = getPlatform();
|
|
78
76
|
const state = reactive({});
|
|
79
|
-
const width = ref(getClientWidth());
|
|
77
|
+
const width = ref(getClientWidth(isHydrate));
|
|
80
78
|
|
|
81
79
|
function onResize() {
|
|
82
80
|
height.value = getClientHeight();
|
|
83
81
|
width.value = getClientWidth();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (isHydrate) {
|
|
85
|
+
nextTick(() => onResize());
|
|
84
86
|
} // eslint-disable-next-line max-statements
|
|
85
87
|
|
|
86
88
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.mjs","names":["inject","reactive","ref","toRefs","watchEffect","mergeDeep","IN_BROWSER","SUPPORTS_TOUCH","DisplaySymbol","Symbol","for","defaultDisplayOptions","mobileBreakpoint","thresholds","xs","sm","md","lg","xl","xxl","parseDisplayOptions","options","getClientWidth","Math","max","document","documentElement","clientWidth","window","innerWidth","getClientHeight","clientHeight","innerHeight","getPlatform","userAgent","navigator","match","regexp","Boolean","android","ios","cordova","electron","chrome","edge","firefox","opera","win","mac","linux","ssr","touch","createDisplay","height","platform","state","width","onResize","value","name","breakpointValue","mobile","smAndUp","mdAndUp","lgAndUp","xlAndUp","smAndDown","mdAndDown","lgAndDown","xlAndDown","addEventListener","passive","useDisplay","display","Error"],"sources":["../../src/composables/display.ts"],"sourcesContent":["// Utilities\nimport { inject, reactive, ref, toRefs, watchEffect } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Globals\nimport { IN_BROWSER, SUPPORTS_TOUCH } from '@/util/globals'\n\n// Types\nimport type { InjectionKey, ToRefs } from 'vue'\n\nexport type DisplayBreakpoint = keyof DisplayThresholds\n\nexport interface DisplayThresholds {\n xs: number\n sm: number\n md: number\n lg: number\n xl: number\n xxl: number\n}\n\nexport interface DisplayOptions {\n mobileBreakpoint?: number | DisplayBreakpoint\n thresholds?: Partial<DisplayThresholds>\n}\n\nexport interface InternalDisplayOptions {\n mobileBreakpoint: number | DisplayBreakpoint\n thresholds: DisplayThresholds\n}\n\nexport interface DisplayPlatform {\n android: boolean\n ios: boolean\n cordova: boolean\n electron: boolean\n chrome: boolean\n edge: boolean\n firefox: boolean\n opera: boolean\n win: boolean\n mac: boolean\n linux: boolean\n touch: boolean\n ssr: boolean\n}\n\nexport interface DisplayInstance {\n xs: boolean\n sm: boolean\n md: boolean\n lg: boolean\n xl: boolean\n xxl: boolean\n smAndUp: boolean\n mdAndUp: boolean\n lgAndUp: boolean\n xlAndUp: boolean\n smAndDown: boolean\n mdAndDown: boolean\n lgAndDown: boolean\n xlAndDown: boolean\n name: DisplayBreakpoint\n height: number\n width: number\n mobile: boolean\n mobileBreakpoint: number | DisplayBreakpoint\n platform: DisplayPlatform\n thresholds: DisplayThresholds\n}\n\nexport const DisplaySymbol: InjectionKey<ToRefs<DisplayInstance>> = Symbol.for('vuetify:display')\n\nconst defaultDisplayOptions: DisplayOptions = {\n mobileBreakpoint: 'lg',\n thresholds: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560,\n },\n}\n\nconst parseDisplayOptions = (options: DisplayOptions = defaultDisplayOptions) => {\n return mergeDeep(defaultDisplayOptions, options) as InternalDisplayOptions\n}\n\n// Cross-browser support as described in:\n// https://stackoverflow.com/questions/1248081\nfunction getClientWidth () {\n return IN_BROWSER ? Math.max(\n document.documentElement!.clientWidth,\n window.innerWidth\n ) : 0 // SSR\n}\n\nfunction getClientHeight () {\n return IN_BROWSER ? Math.max(\n document.documentElement!.clientHeight,\n window.innerHeight\n ) : 0 // SSR\n}\n\nfunction getPlatform (): DisplayPlatform {\n const userAgent = IN_BROWSER ? window.navigator.userAgent : 'ssr'\n\n function match (regexp: RegExp) {\n return Boolean(userAgent.match(regexp))\n }\n\n const android = match(/android/i)\n const ios = match(/iphone|ipad|ipod/i)\n const cordova = match(/cordova/i)\n const electron = match(/electron/i)\n const chrome = match(/chrome/i)\n const edge = match(/edge/i)\n const firefox = match(/firefox/i)\n const opera = match(/opera/i)\n const win = match(/win/i)\n const mac = match(/mac/i)\n const linux = match(/linux/i)\n const ssr = match(/ssr/i)\n\n return {\n android,\n ios,\n cordova,\n electron,\n chrome,\n edge,\n firefox,\n opera,\n win,\n mac,\n linux,\n touch: SUPPORTS_TOUCH,\n ssr,\n }\n}\n\nexport function createDisplay (options?: DisplayOptions): ToRefs<DisplayInstance> {\n const { thresholds, mobileBreakpoint } = parseDisplayOptions(options)\n\n const height = ref(getClientHeight())\n const platform = getPlatform()\n const state = reactive({} as DisplayInstance)\n const width = ref(getClientWidth())\n\n function onResize () {\n height.value = getClientHeight()\n width.value = getClientWidth()\n }\n\n // eslint-disable-next-line max-statements\n watchEffect(() => {\n const xs = width.value < thresholds.sm\n const sm = width.value < thresholds.md && !xs\n const md = width.value < thresholds.lg && !(sm || xs)\n const lg = width.value < thresholds.xl && !(md || sm || xs)\n const xl = width.value < thresholds.xxl && !(lg || md || sm || xs)\n const xxl = width.value >= thresholds.xxl\n const name =\n xs ? 'xs'\n : sm ? 'sm'\n : md ? 'md'\n : lg ? 'lg'\n : xl ? 'xl'\n : 'xxl'\n const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint]\n const mobile = !platform.ssr\n ? width.value < breakpointValue\n : platform.android || platform.ios || platform.opera\n\n state.xs = xs\n state.sm = sm\n state.md = md\n state.lg = lg\n state.xl = xl\n state.xxl = xxl\n state.smAndUp = !xs\n state.mdAndUp = !(xs || sm)\n state.lgAndUp = !(xs || sm || md)\n state.xlAndUp = !(xs || sm || md || lg)\n state.smAndDown = !(md || lg || xl || xxl)\n state.mdAndDown = !(lg || xl || xxl)\n state.lgAndDown = !(xl || xxl)\n state.xlAndDown = !xxl\n state.name = name\n state.height = height.value\n state.width = width.value\n state.mobile = mobile\n state.mobileBreakpoint = mobileBreakpoint\n state.platform = platform\n state.thresholds = thresholds\n })\n\n if (IN_BROWSER) {\n window.addEventListener('resize', onResize, { passive: true })\n }\n\n return toRefs(state)\n}\n\nexport function useDisplay () {\n const display = inject(DisplaySymbol)\n\n if (!display) throw new Error('Could not find Vuetify display injection')\n\n return display\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"display.mjs","names":["inject","nextTick","reactive","ref","toRefs","watchEffect","mergeDeep","IN_BROWSER","SUPPORTS_TOUCH","DisplaySymbol","Symbol","for","defaultDisplayOptions","mobileBreakpoint","thresholds","xs","sm","md","lg","xl","xxl","parseDisplayOptions","options","getClientWidth","isHydrate","window","innerWidth","getClientHeight","innerHeight","getPlatform","userAgent","navigator","match","regexp","Boolean","android","ios","cordova","electron","chrome","edge","firefox","opera","win","mac","linux","ssr","touch","createDisplay","height","platform","state","width","onResize","value","name","breakpointValue","mobile","smAndUp","mdAndUp","lgAndUp","xlAndUp","smAndDown","mdAndDown","lgAndDown","xlAndDown","addEventListener","passive","useDisplay","display","Error"],"sources":["../../src/composables/display.ts"],"sourcesContent":["// Utilities\nimport { inject, nextTick, reactive, ref, toRefs, watchEffect } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Globals\nimport { IN_BROWSER, SUPPORTS_TOUCH } from '@/util/globals'\n\n// Types\nimport type { InjectionKey, ToRefs } from 'vue'\n\nexport type DisplayBreakpoint = keyof DisplayThresholds\n\nexport interface DisplayThresholds {\n xs: number\n sm: number\n md: number\n lg: number\n xl: number\n xxl: number\n}\n\nexport interface DisplayOptions {\n mobileBreakpoint?: number | DisplayBreakpoint\n thresholds?: Partial<DisplayThresholds>\n}\n\nexport interface InternalDisplayOptions {\n mobileBreakpoint: number | DisplayBreakpoint\n thresholds: DisplayThresholds\n}\n\nexport interface DisplayPlatform {\n android: boolean\n ios: boolean\n cordova: boolean\n electron: boolean\n chrome: boolean\n edge: boolean\n firefox: boolean\n opera: boolean\n win: boolean\n mac: boolean\n linux: boolean\n touch: boolean\n ssr: boolean\n}\n\nexport interface DisplayInstance {\n xs: boolean\n sm: boolean\n md: boolean\n lg: boolean\n xl: boolean\n xxl: boolean\n smAndUp: boolean\n mdAndUp: boolean\n lgAndUp: boolean\n xlAndUp: boolean\n smAndDown: boolean\n mdAndDown: boolean\n lgAndDown: boolean\n xlAndDown: boolean\n name: DisplayBreakpoint\n height: number\n width: number\n mobile: boolean\n mobileBreakpoint: number | DisplayBreakpoint\n platform: DisplayPlatform\n thresholds: DisplayThresholds\n}\n\nexport const DisplaySymbol: InjectionKey<ToRefs<DisplayInstance>> = Symbol.for('vuetify:display')\n\nconst defaultDisplayOptions: DisplayOptions = {\n mobileBreakpoint: 'lg',\n thresholds: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560,\n },\n}\n\nconst parseDisplayOptions = (options: DisplayOptions = defaultDisplayOptions) => {\n return mergeDeep(defaultDisplayOptions, options) as InternalDisplayOptions\n}\n\nfunction getClientWidth (isHydrate?: boolean) {\n return IN_BROWSER && !isHydrate\n ? window.innerWidth\n : 0\n}\n\nfunction getClientHeight (isHydrate?: boolean) {\n return IN_BROWSER && !isHydrate\n ? window.innerHeight\n : 0\n}\n\nfunction getPlatform (): DisplayPlatform {\n const userAgent = IN_BROWSER ? window.navigator.userAgent : 'ssr'\n\n function match (regexp: RegExp) {\n return Boolean(userAgent.match(regexp))\n }\n\n const android = match(/android/i)\n const ios = match(/iphone|ipad|ipod/i)\n const cordova = match(/cordova/i)\n const electron = match(/electron/i)\n const chrome = match(/chrome/i)\n const edge = match(/edge/i)\n const firefox = match(/firefox/i)\n const opera = match(/opera/i)\n const win = match(/win/i)\n const mac = match(/mac/i)\n const linux = match(/linux/i)\n const ssr = match(/ssr/i)\n\n return {\n android,\n ios,\n cordova,\n electron,\n chrome,\n edge,\n firefox,\n opera,\n win,\n mac,\n linux,\n touch: SUPPORTS_TOUCH,\n ssr,\n }\n}\n\nexport function createDisplay (options?: DisplayOptions, isHydrate?: boolean): ToRefs<DisplayInstance> {\n const { thresholds, mobileBreakpoint } = parseDisplayOptions(options)\n\n const height = ref(getClientHeight(isHydrate))\n const platform = getPlatform()\n const state = reactive({} as DisplayInstance)\n const width = ref(getClientWidth(isHydrate))\n\n function onResize () {\n height.value = getClientHeight()\n width.value = getClientWidth()\n }\n\n if (isHydrate) {\n nextTick(() => onResize())\n }\n\n // eslint-disable-next-line max-statements\n watchEffect(() => {\n const xs = width.value < thresholds.sm\n const sm = width.value < thresholds.md && !xs\n const md = width.value < thresholds.lg && !(sm || xs)\n const lg = width.value < thresholds.xl && !(md || sm || xs)\n const xl = width.value < thresholds.xxl && !(lg || md || sm || xs)\n const xxl = width.value >= thresholds.xxl\n const name =\n xs ? 'xs'\n : sm ? 'sm'\n : md ? 'md'\n : lg ? 'lg'\n : xl ? 'xl'\n : 'xxl'\n const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint]\n const mobile = !platform.ssr\n ? width.value < breakpointValue\n : platform.android || platform.ios || platform.opera\n\n state.xs = xs\n state.sm = sm\n state.md = md\n state.lg = lg\n state.xl = xl\n state.xxl = xxl\n state.smAndUp = !xs\n state.mdAndUp = !(xs || sm)\n state.lgAndUp = !(xs || sm || md)\n state.xlAndUp = !(xs || sm || md || lg)\n state.smAndDown = !(md || lg || xl || xxl)\n state.mdAndDown = !(lg || xl || xxl)\n state.lgAndDown = !(xl || xxl)\n state.xlAndDown = !xxl\n state.name = name\n state.height = height.value\n state.width = width.value\n state.mobile = mobile\n state.mobileBreakpoint = mobileBreakpoint\n state.platform = platform\n state.thresholds = thresholds\n })\n\n if (IN_BROWSER) {\n window.addEventListener('resize', onResize, { passive: true })\n }\n\n return toRefs(state)\n}\n\nexport function useDisplay () {\n const display = inject(DisplaySymbol)\n\n if (!display) throw new Error('Could not find Vuetify display injection')\n\n return display\n}\n"],"mappings":"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"}
|
package/lib/composables/form.mjs
CHANGED
|
@@ -20,12 +20,12 @@ export function createForm(props) {
|
|
|
20
20
|
const isReadonly = computed(() => props.readonly);
|
|
21
21
|
const isValidating = ref(false);
|
|
22
22
|
const items = ref([]);
|
|
23
|
-
const
|
|
23
|
+
const errors = ref([]);
|
|
24
24
|
|
|
25
25
|
async function validate() {
|
|
26
26
|
const results = [];
|
|
27
27
|
let valid = true;
|
|
28
|
-
|
|
28
|
+
errors.value = [];
|
|
29
29
|
isValidating.value = true;
|
|
30
30
|
|
|
31
31
|
for (const item of items.value) {
|
|
@@ -42,11 +42,11 @@ export function createForm(props) {
|
|
|
42
42
|
if (!valid && props.fastFail) break;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
errors.value = results;
|
|
46
46
|
isValidating.value = false;
|
|
47
47
|
return {
|
|
48
48
|
valid,
|
|
49
|
-
|
|
49
|
+
errors: errors.value
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -57,7 +57,7 @@ export function createForm(props) {
|
|
|
57
57
|
|
|
58
58
|
function resetValidation() {
|
|
59
59
|
items.value.forEach(item => item.resetValidation());
|
|
60
|
-
|
|
60
|
+
errors.value = [];
|
|
61
61
|
model.value = null;
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -100,7 +100,7 @@ export function createForm(props) {
|
|
|
100
100
|
items
|
|
101
101
|
});
|
|
102
102
|
return {
|
|
103
|
-
|
|
103
|
+
errors,
|
|
104
104
|
isDisabled,
|
|
105
105
|
isReadonly,
|
|
106
106
|
isValidating,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.mjs","names":["computed","inject","provide","ref","watch","useProxiedModel","consoleWarn","propsFactory","FormKey","Symbol","for","makeFormProps","disabled","Boolean","fastFail","lazyValidation","readonly","modelValue","type","default","createForm","props","model","isDisabled","isReadonly","isValidating","items","
|
|
1
|
+
{"version":3,"file":"form.mjs","names":["computed","inject","provide","ref","watch","useProxiedModel","consoleWarn","propsFactory","FormKey","Symbol","for","makeFormProps","disabled","Boolean","fastFail","lazyValidation","readonly","modelValue","type","default","createForm","props","model","isDisabled","isReadonly","isValidating","items","errors","validate","results","valid","value","item","itemErrorMessages","length","push","id","errorMessages","reset","forEach","resetValidation","some","isValid","every","deep","register","unregister","filter","useForm"],"sources":["../../src/composables/form.ts"],"sourcesContent":["// Utilities\nimport { computed, inject, provide, ref, watch } from 'vue'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { consoleWarn, propsFactory } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, PropType, Ref } from 'vue'\n\nexport interface FormProvide {\n register: (\n id: number | string,\n validate: () => Promise<string[]>,\n reset: () => void,\n resetValidation: () => void,\n isValid: Ref<boolean | null>,\n ) => void\n unregister: (id: number | string) => void\n items: Ref<FormField[]>\n isDisabled: ComputedRef<boolean>\n isReadonly: ComputedRef<boolean>\n isValidating: Ref<boolean>\n}\n\ninterface FormField {\n id: number | string\n validate: () => Promise<string[]>\n reset: () => void\n resetValidation: () => void\n isValid: boolean | null\n}\n\ninterface FieldValidationResult {\n id: number | string\n errorMessages: string[]\n}\n\ninterface FormValidationResult {\n valid: boolean\n errors: FieldValidationResult[]\n}\n\nexport interface SubmitEventPromise extends SubmitEvent, Promise<FormValidationResult> {}\n\nexport const FormKey: InjectionKey<FormProvide> = Symbol.for('vuetify:form')\n\nexport interface FormProps {\n disabled: boolean\n fastFail: boolean\n lazyValidation: boolean\n readonly: boolean\n modelValue: boolean | null\n 'onUpdate:modelValue': ((val: boolean | null) => void) | undefined\n}\n\nexport const makeFormProps = propsFactory({\n disabled: Boolean,\n fastFail: Boolean,\n lazyValidation: Boolean,\n readonly: Boolean,\n modelValue: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n})\n\nexport function createForm (props: FormProps) {\n const model = useProxiedModel(props, 'modelValue')\n\n const isDisabled = computed(() => props.disabled)\n const isReadonly = computed(() => props.readonly)\n const isValidating = ref(false)\n const items = ref<FormField[]>([])\n const errors = ref<FieldValidationResult[]>([])\n\n async function validate () {\n const results = []\n let valid = true\n\n errors.value = []\n isValidating.value = true\n\n for (const item of items.value) {\n const itemErrorMessages = await item.validate()\n\n if (itemErrorMessages.length > 0) {\n valid = false\n\n results.push({\n id: item.id,\n errorMessages: itemErrorMessages,\n })\n }\n\n if (!valid && props.fastFail) break\n }\n\n errors.value = results\n isValidating.value = false\n\n return { valid, errors: errors.value }\n }\n\n function reset () {\n items.value.forEach(item => item.reset())\n model.value = null\n }\n\n function resetValidation () {\n items.value.forEach(item => item.resetValidation())\n errors.value = []\n model.value = null\n }\n\n watch(items, () => {\n let valid = null\n\n if (items.value.some(item => item.isValid === false)) {\n valid = false\n } else if (items.value.every(item => item.isValid === true)) {\n valid = true\n }\n\n model.value = valid\n }, {\n deep: true,\n })\n\n provide(FormKey, {\n register: (id, validate, reset, resetValidation, isValid) => {\n if (items.value.some(item => item.id === id)) {\n consoleWarn(`Duplicate input name \"${id}\"`)\n }\n\n items.value.push({\n id,\n validate,\n reset,\n resetValidation,\n isValid: isValid as unknown as boolean | null, // TODO: Better way to type this unwrapping?\n })\n },\n unregister: id => {\n items.value = items.value.filter(item => {\n return item.id !== id\n })\n },\n isDisabled,\n isReadonly,\n isValidating,\n items,\n })\n\n return {\n errors,\n isDisabled,\n isReadonly,\n isValidating,\n items,\n validate,\n reset,\n resetValidation,\n }\n}\n\nexport function useForm () {\n return inject(FormKey, null)\n}\n"],"mappings":"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"}
|
|
@@ -41,7 +41,7 @@ export function transformItem(props, item) {
|
|
|
41
41
|
value: _props.value,
|
|
42
42
|
props: _props,
|
|
43
43
|
children: Array.isArray(children) ? transformItems(props, children) : undefined,
|
|
44
|
-
|
|
44
|
+
raw: item
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
47
|
export function transformItems(props, items) {
|
|
@@ -63,7 +63,7 @@ export function useItems(props) {
|
|
|
63
63
|
function transformOut(value) {
|
|
64
64
|
if (props.returnObject) return value.map(_ref => {
|
|
65
65
|
let {
|
|
66
|
-
|
|
66
|
+
raw: item
|
|
67
67
|
} = _ref;
|
|
68
68
|
return item;
|
|
69
69
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"items.mjs","names":["computed","getPropertyFromItem","pick","propsFactory","makeItemsProps","items","type","Array","default","itemTitle","String","Function","itemValue","itemChildren","Boolean","itemProps","returnObject","transformItem","props","item","title","value","children","_props","isArray","transformItems","undefined","
|
|
1
|
+
{"version":3,"file":"items.mjs","names":["computed","getPropertyFromItem","pick","propsFactory","makeItemsProps","items","type","Array","default","itemTitle","String","Function","itemValue","itemChildren","Boolean","itemProps","returnObject","transformItem","props","item","title","value","children","_props","isArray","transformItems","undefined","raw","array","push","useItems","transformIn","map","transformOut"],"sources":["../../src/composables/items.ts"],"sourcesContent":["// Utilities\nimport { computed } from 'vue'\nimport { getPropertyFromItem, pick, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { SelectItemKey } from '@/util'\n\nexport interface InternalItem {\n title: string\n value: any\n props: {\n [key: string]: any\n title: string\n value: any\n }\n children?: InternalItem[]\n raw: any\n}\n\nexport interface ItemProps {\n items: any[]\n itemTitle: SelectItemKey\n itemValue: SelectItemKey\n itemChildren: SelectItemKey\n itemProps: SelectItemKey\n returnObject: boolean\n}\n\n// Composables\nexport const makeItemsProps = propsFactory({\n items: {\n type: Array as PropType<ItemProps['items']>,\n default: () => ([]),\n },\n itemTitle: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'title',\n },\n itemValue: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'value',\n },\n itemChildren: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: 'children',\n },\n itemProps: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: 'props',\n },\n returnObject: Boolean,\n}, 'item')\n\nexport function transformItem (props: Omit<ItemProps, 'items'>, item: any) {\n const title = getPropertyFromItem(item, props.itemTitle, item)\n const value = getPropertyFromItem(item, props.itemValue, title)\n const children = getPropertyFromItem(item, props.itemChildren)\n const itemProps = props.itemProps === true ? pick(item, ['children'])[1] : getPropertyFromItem(item, props.itemProps)\n\n const _props = {\n title,\n value,\n ...itemProps,\n }\n\n return {\n title: _props.title,\n value: _props.value,\n props: _props,\n children: Array.isArray(children) ? transformItems(props, children) : undefined,\n raw: item,\n }\n}\n\nexport function transformItems (props: Omit<ItemProps, 'items'>, items: ItemProps['items']) {\n const array: InternalItem[] = []\n\n for (const item of items) {\n array.push(transformItem(props, item))\n }\n\n return array\n}\n\nexport function useItems (props: ItemProps) {\n const items = computed(() => transformItems(props, props.items))\n\n function transformIn (value: any[]): InternalItem[] {\n return value.map(item => transformItem(props, item))\n }\n\n function transformOut (value: InternalItem[]) {\n if (props.returnObject) return value.map(({ raw: item }) => item)\n return value.map(({ props }) => props.value)\n }\n\n return { items, transformIn, transformOut }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAT,QAAyB,KAAzB;SACSC,mB,EAAqBC,I,EAAMC,Y,6BAEpC;;AAyBA;AACA,OAAO,MAAMC,cAAc,GAAGD,YAAY,CAAC;EACzCE,KAAK,EAAE;IACLC,IAAI,EAAEC,KADD;IAELC,OAAO,EAAE,MAAO;EAFX,CADkC;EAKzCC,SAAS,EAAE;IACTH,IAAI,EAAE,CAACI,MAAD,EAASH,KAAT,EAAgBI,QAAhB,CADG;IAETH,OAAO,EAAE;EAFA,CAL8B;EASzCI,SAAS,EAAE;IACTN,IAAI,EAAE,CAACI,MAAD,EAASH,KAAT,EAAgBI,QAAhB,CADG;IAETH,OAAO,EAAE;EAFA,CAT8B;EAazCK,YAAY,EAAE;IACZP,IAAI,EAAE,CAACQ,OAAD,EAAUJ,MAAV,EAAkBH,KAAlB,EAAyBI,QAAzB,CADM;IAEZH,OAAO,EAAE;EAFG,CAb2B;EAiBzCO,SAAS,EAAE;IACTT,IAAI,EAAE,CAACQ,OAAD,EAAUJ,MAAV,EAAkBH,KAAlB,EAAyBI,QAAzB,CADG;IAETH,OAAO,EAAE;EAFA,CAjB8B;EAqBzCQ,YAAY,EAAEF;AArB2B,CAAD,EAsBvC,MAtBuC,CAAnC;AAwBP,OAAO,SAASG,aAAT,CAAwBC,KAAxB,EAAyDC,IAAzD,EAAoE;EACzE,MAAMC,KAAK,GAAGnB,mBAAmB,CAACkB,IAAD,EAAOD,KAAK,CAACT,SAAb,EAAwBU,IAAxB,CAAjC;EACA,MAAME,KAAK,GAAGpB,mBAAmB,CAACkB,IAAD,EAAOD,KAAK,CAACN,SAAb,EAAwBQ,KAAxB,CAAjC;EACA,MAAME,QAAQ,GAAGrB,mBAAmB,CAACkB,IAAD,EAAOD,KAAK,CAACL,YAAb,CAApC;EACA,MAAME,SAAS,GAAGG,KAAK,CAACH,SAAN,KAAoB,IAApB,GAA2Bb,IAAI,CAACiB,IAAD,EAAO,CAAC,UAAD,CAAP,CAAJ,CAAyB,CAAzB,CAA3B,GAAyDlB,mBAAmB,CAACkB,IAAD,EAAOD,KAAK,CAACH,SAAb,CAA9F;EAEA,MAAMQ,MAAM,GAAG;IACbH,KADa;IAEbC,KAFa;IAGb,GAAGN;EAHU,CAAf;EAMA,OAAO;IACLK,KAAK,EAAEG,MAAM,CAACH,KADT;IAELC,KAAK,EAAEE,MAAM,CAACF,KAFT;IAGLH,KAAK,EAAEK,MAHF;IAILD,QAAQ,EAAEf,KAAK,CAACiB,OAAN,CAAcF,QAAd,IAA0BG,cAAc,CAACP,KAAD,EAAQI,QAAR,CAAxC,GAA4DI,SAJjE;IAKLC,GAAG,EAAER;EALA,CAAP;AAOD;AAED,OAAO,SAASM,cAAT,CAAyBP,KAAzB,EAA0Db,KAA1D,EAAqF;EAC1F,MAAMuB,KAAqB,GAAG,EAA9B;;EAEA,KAAK,MAAMT,IAAX,IAAmBd,KAAnB,EAA0B;IACxBuB,KAAK,CAACC,IAAN,CAAWZ,aAAa,CAACC,KAAD,EAAQC,IAAR,CAAxB;EACD;;EAED,OAAOS,KAAP;AACD;AAED,OAAO,SAASE,QAAT,CAAmBZ,KAAnB,EAAqC;EAC1C,MAAMb,KAAK,GAAGL,QAAQ,CAAC,MAAMyB,cAAc,CAACP,KAAD,EAAQA,KAAK,CAACb,KAAd,CAArB,CAAtB;;EAEA,SAAS0B,WAAT,CAAsBV,KAAtB,EAAoD;IAClD,OAAOA,KAAK,CAACW,GAAN,CAAUb,IAAI,IAAIF,aAAa,CAACC,KAAD,EAAQC,IAAR,CAA/B,CAAP;EACD;;EAED,SAASc,YAAT,CAAuBZ,KAAvB,EAA8C;IAC5C,IAAIH,KAAK,CAACF,YAAV,EAAwB,OAAOK,KAAK,CAACW,GAAN,CAAU;MAAA,IAAC;QAAEL,GAAG,EAAER;MAAP,CAAD;MAAA,OAAmBA,IAAnB;IAAA,CAAV,CAAP;IACxB,OAAOE,KAAK,CAACW,GAAN,CAAU;MAAA,IAAC;QAAEd;MAAF,CAAD;MAAA,OAAeA,KAAK,CAACG,KAArB;IAAA,CAAV,CAAP;EACD;;EAED,OAAO;IAAEhB,KAAF;IAAS0B,WAAT;IAAsBE;EAAtB,CAAP;AACD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Utilities
|
|
2
|
-
import { computed, onMounted, ref } from 'vue'; // Composables
|
|
2
|
+
import { computed, onMounted, readonly, ref } from 'vue'; // Composables
|
|
3
3
|
|
|
4
4
|
export function useSsrBoot() {
|
|
5
5
|
const isBooted = ref(false);
|
|
@@ -12,7 +12,8 @@ export function useSsrBoot() {
|
|
|
12
12
|
transition: 'none !important'
|
|
13
13
|
} : undefined);
|
|
14
14
|
return {
|
|
15
|
-
ssrBootStyles
|
|
15
|
+
ssrBootStyles,
|
|
16
|
+
isBooted: readonly(isBooted)
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
19
|
//# sourceMappingURL=ssrBoot.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssrBoot.mjs","names":["computed","onMounted","ref","useSsrBoot","isBooted","window","requestAnimationFrame","value","ssrBootStyles","transition","undefined"],"sources":["../../src/composables/ssrBoot.ts"],"sourcesContent":["// Utilities\nimport { computed, onMounted, ref } from 'vue'\n\n// Composables\nexport function useSsrBoot () {\n const isBooted = ref(false)\n\n onMounted(() => {\n window.requestAnimationFrame(() => {\n isBooted.value = true\n })\n })\n\n const ssrBootStyles = computed(() => !isBooted.value ? ({\n transition: 'none !important',\n }) : undefined)\n\n return { ssrBootStyles }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAT,EAAmBC,SAAnB,EAA8BC,
|
|
1
|
+
{"version":3,"file":"ssrBoot.mjs","names":["computed","onMounted","readonly","ref","useSsrBoot","isBooted","window","requestAnimationFrame","value","ssrBootStyles","transition","undefined"],"sources":["../../src/composables/ssrBoot.ts"],"sourcesContent":["// Utilities\nimport { computed, onMounted, readonly, ref } from 'vue'\n\n// Composables\nexport function useSsrBoot () {\n const isBooted = ref(false)\n\n onMounted(() => {\n window.requestAnimationFrame(() => {\n isBooted.value = true\n })\n })\n\n const ssrBootStyles = computed(() => !isBooted.value ? ({\n transition: 'none !important',\n }) : undefined)\n\n return { ssrBootStyles, isBooted: readonly(isBooted) }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAT,EAAmBC,SAAnB,EAA8BC,QAA9B,EAAwCC,GAAxC,QAAmD,KAAnD,C,CAEA;;AACA,OAAO,SAASC,UAAT,GAAuB;EAC5B,MAAMC,QAAQ,GAAGF,GAAG,CAAC,KAAD,CAApB;EAEAF,SAAS,CAAC,MAAM;IACdK,MAAM,CAACC,qBAAP,CAA6B,MAAM;MACjCF,QAAQ,CAACG,KAAT,GAAiB,IAAjB;IACD,CAFD;EAGD,CAJQ,CAAT;EAMA,MAAMC,aAAa,GAAGT,QAAQ,CAAC,MAAM,CAACK,QAAQ,CAACG,KAAV,GAAmB;IACtDE,UAAU,EAAE;EAD0C,CAAnB,GAEhCC,SAFyB,CAA9B;EAIA,OAAO;IAAEF,aAAF;IAAiBJ,QAAQ,EAAEH,QAAQ,CAACG,QAAD;EAAnC,CAAP;AACD"}
|
|
@@ -204,7 +204,7 @@ export function createTheme(app, options) {
|
|
|
204
204
|
watchEffect(() => head.updateDOM());
|
|
205
205
|
}
|
|
206
206
|
} else {
|
|
207
|
-
let styleEl;
|
|
207
|
+
let styleEl = IN_BROWSER ? document.getElementById('vuetify-theme-stylesheet') : null;
|
|
208
208
|
watch(styles, updateStyles, {
|
|
209
209
|
immediate: true
|
|
210
210
|
});
|
|
@@ -232,7 +232,11 @@ export function createTheme(app, options) {
|
|
|
232
232
|
current,
|
|
233
233
|
computedThemes,
|
|
234
234
|
themeClasses,
|
|
235
|
-
styles
|
|
235
|
+
styles,
|
|
236
|
+
global: {
|
|
237
|
+
name,
|
|
238
|
+
current
|
|
239
|
+
}
|
|
236
240
|
};
|
|
237
241
|
}
|
|
238
242
|
export function provideTheme(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.mjs","names":["computed","inject","provide","reactive","ref","watch","watchEffect","colorToInt","colorToRGB","createRange","darken","getCurrentInstance","getLuma","IN_BROWSER","intToHex","lighten","mergeDeep","propsFactory","APCAcontrast","ThemeSymbol","Symbol","for","makeThemeProps","theme","String","defaultThemeOptions","defaultTheme","variations","colors","themes","light","dark","background","surface","primary","secondary","error","info","success","warning","variables","parseThemeOptions","options","isDisabled","key","Object","entries","createTheme","app","head","_context","provides","usehead","parsedOptions","name","computedThemes","acc","original","value","color","variation","fn","amount","keys","test","onColor","colorVal","blackContrast","Math","abs","whiteContrast","min","current","styles","lines","createCssClass","themeName","genCssVariables","map","startsWith","undefined","rgb","r","g","b","Set","values","flatMap","str","i","join","addHeadObjs","style","children","type","id","updateDOM","styleEl","updateStyles","immediate","document","el","createElement","appendChild","innerHTML","themeClasses","provideTheme","props","Error","newTheme","useTheme","selector","content","push","line","lightOverlay","darkOverlay"],"sources":["../../src/composables/theme.ts"],"sourcesContent":["// Utilities\nimport {\n computed,\n inject,\n provide,\n reactive,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport {\n colorToInt,\n colorToRGB,\n createRange,\n darken,\n getCurrentInstance,\n getLuma,\n IN_BROWSER,\n intToHex,\n lighten,\n mergeDeep,\n propsFactory,\n} from '@/util'\nimport { APCAcontrast } from '@/util/color/APCA'\n\n// Types\nimport type { App, DeepReadonly, InjectionKey, Ref } from 'vue'\nimport type { HeadClient } from '@vueuse/head'\n\ntype DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T\n\nexport type ThemeOptions = false | {\n defaultTheme?: string\n variations?: false | VariationsOptions\n themes?: Record<string, ThemeDefinition>\n}\nexport type ThemeDefinition = DeepPartial<InternalThemeDefinition>\n\ninterface InternalThemeOptions {\n isDisabled: boolean\n defaultTheme: string\n variations: false | VariationsOptions\n themes: Record<string, InternalThemeDefinition>\n}\n\ninterface VariationsOptions {\n colors: string[]\n lighten: number\n darken: number\n}\n\ninterface InternalThemeDefinition {\n dark: boolean\n colors: Colors\n variables: Record<string, string | number>\n}\n\nexport interface Colors extends BaseColors, OnColors {\n [key: string]: string\n}\n\ninterface BaseColors {\n background: string\n surface: string\n primary: string\n secondary: string\n success: string\n warning: string\n error: string\n info: string\n}\n\ninterface OnColors {\n 'on-background': string\n 'on-surface': string\n 'on-primary': string\n 'on-secondary': string\n 'on-success': string\n 'on-warning': string\n 'on-error': string\n 'on-info': string\n}\n\nexport interface ThemeInstance {\n isDisabled: boolean\n name: Ref<string>\n themes: Ref<Record<string, InternalThemeDefinition>>\n\n readonly current: DeepReadonly<Ref<InternalThemeDefinition>>\n readonly computedThemes: DeepReadonly<Ref<Record<string, InternalThemeDefinition>>>\n\n themeClasses: Readonly<Ref<string | undefined>>\n styles: Readonly<Ref<string>>\n}\n\nexport const ThemeSymbol: InjectionKey<ThemeInstance> = Symbol.for('vuetify:theme')\n\nexport const makeThemeProps = propsFactory({\n theme: String,\n}, 'theme')\n\nconst defaultThemeOptions: Exclude<ThemeOptions, false> = {\n defaultTheme: 'light',\n variations: { colors: [], lighten: 0, darken: 0 },\n themes: {\n light: {\n dark: false,\n colors: {\n background: '#FFFFFF',\n surface: '#FFFFFF',\n 'surface-variant': '#424242',\n 'on-surface-variant': '#EEEEEE',\n primary: '#6200EE',\n 'primary-darken-1': '#3700B3',\n secondary: '#03DAC6',\n 'secondary-darken-1': '#018786',\n error: '#B00020',\n info: '#2196F3',\n success: '#4CAF50',\n warning: '#FB8C00',\n },\n variables: {\n 'border-color': '#000000',\n 'border-opacity': 0.12,\n 'high-emphasis-opacity': 0.87,\n 'medium-emphasis-opacity': 0.60,\n 'disabled-opacity': 0.38,\n 'idle-opacity': 0.04,\n 'hover-opacity': 0.04,\n 'focus-opacity': 0.12,\n 'selected-opacity': 0.08,\n 'activated-opacity': 0.12,\n 'pressed-opacity': 0.12,\n 'dragged-opacity': 0.08,\n 'kbd-background-color': '#212529',\n 'kbd-color': '#FFFFFF',\n 'code-background-color': '#C2C2C2',\n },\n },\n dark: {\n dark: true,\n colors: {\n background: '#121212',\n surface: '#212121',\n 'surface-variant': '#BDBDBD',\n 'on-surface-variant': '#424242',\n primary: '#BB86FC',\n 'primary-darken-1': '#3700B3',\n secondary: '#03DAC5',\n 'secondary-darken-1': '#03DAC5',\n error: '#CF6679',\n info: '#2196F3',\n success: '#4CAF50',\n warning: '#FB8C00',\n },\n variables: {\n 'border-color': '#FFFFFF',\n 'border-opacity': 0.12,\n 'high-emphasis-opacity': 0.87,\n 'medium-emphasis-opacity': 0.60,\n 'disabled-opacity': 0.38,\n 'idle-opacity': 0.10,\n 'hover-opacity': 0.04,\n 'focus-opacity': 0.12,\n 'selected-opacity': 0.08,\n 'activated-opacity': 0.12,\n 'pressed-opacity': 0.16,\n 'dragged-opacity': 0.08,\n 'kbd-background-color': '#212529',\n 'kbd-color': '#FFFFFF',\n 'code-background-color': '#B7B7B7',\n },\n },\n },\n}\n\nfunction parseThemeOptions (options: ThemeOptions = defaultThemeOptions): InternalThemeOptions {\n if (!options) return { ...defaultThemeOptions, isDisabled: true } as InternalThemeOptions\n\n const themes: Record<string, InternalThemeDefinition> = {}\n for (const [key, theme] of Object.entries(options.themes ?? {})) {\n const defaultTheme = theme.dark\n ? defaultThemeOptions.themes?.dark\n : defaultThemeOptions.themes?.light\n themes[key] = mergeDeep(defaultTheme, theme) as InternalThemeDefinition\n }\n\n return mergeDeep(\n defaultThemeOptions,\n { ...options, themes },\n ) as InternalThemeOptions\n}\n\n// Composables\nexport function createTheme (app: App, options?: ThemeOptions): ThemeInstance {\n const head = app._context.provides.usehead as HeadClient | undefined\n const parsedOptions = reactive(parseThemeOptions(options))\n const name = ref(parsedOptions.defaultTheme)\n const themes = ref(parsedOptions.themes)\n\n const computedThemes = computed(() => {\n const acc: Record<string, InternalThemeDefinition> = {}\n for (const [name, original] of Object.entries(themes.value)) {\n const theme: InternalThemeDefinition = acc[name] = {\n ...original,\n colors: {\n ...original.colors,\n },\n }\n\n if (parsedOptions.variations) {\n for (const name of parsedOptions.variations.colors) {\n const color = theme.colors[name]\n for (const variation of (['lighten', 'darken'] as const)) {\n const fn = variation === 'lighten' ? lighten : darken\n for (const amount of createRange(parsedOptions.variations[variation], 1)) {\n theme.colors[`${name}-${variation}-${amount}`] = intToHex(fn(colorToInt(color), amount))\n }\n }\n }\n }\n\n for (const color of Object.keys(theme.colors)) {\n if (/on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue\n\n const onColor = `on-${color}` as keyof OnColors\n const colorVal = colorToInt(theme.colors[color]!)\n\n const blackContrast = Math.abs(APCAcontrast(0, colorVal))\n const whiteContrast = Math.abs(APCAcontrast(0xffffff, colorVal))\n\n // TODO: warn about poor color selections\n // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))\n // const minContrast = Math.max(blackContrast, whiteContrast)\n // if (minContrast < 60) {\n // consoleInfo(`${key} theme color ${color} has poor contrast (${minContrast.toFixed()}%)`)\n // } else if (contrastAsText < 60 && !['background', 'surface'].includes(color)) {\n // consoleInfo(`${key} theme color ${color} has poor contrast as text (${contrastAsText.toFixed()}%)`)\n // }\n\n // Prefer white text if both have an acceptable contrast ratio\n theme.colors[onColor] = whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000'\n }\n }\n\n return acc\n })\n const current = computed(() => computedThemes.value[name.value])\n\n const styles = computed(() => {\n const lines: string[] = []\n\n if (current.value.dark) {\n createCssClass(lines, ':root', ['color-scheme: dark'])\n }\n\n for (const [themeName, theme] of Object.entries(computedThemes.value)) {\n const { variables, dark } = theme\n\n createCssClass(lines, `.v-theme--${themeName}`, [\n `color-scheme: ${dark ? 'dark' : 'normal'}`,\n ...genCssVariables(theme),\n ...Object.keys(variables).map(key => {\n const value = variables[key]\n const color = typeof value === 'string' && value.startsWith('#') ? colorToRGB(value) : undefined\n const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined\n\n return `--v-${key}: ${rgb ?? value}`\n }),\n ])\n }\n\n const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)))\n for (const key of colors) {\n if (/on-[a-z]/.test(key)) {\n createCssClass(lines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`])\n } else {\n createCssClass(lines, `.bg-${key}`, [\n `--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`,\n `background: rgb(var(--v-theme-${key})) !important`,\n `color: rgb(var(--v-theme-on-${key})) !important`,\n ])\n createCssClass(lines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`])\n createCssClass(lines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`])\n }\n }\n\n return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('')\n })\n\n if (head) {\n head.addHeadObjs(computed(() => ({\n style: [{\n children: styles.value,\n type: 'text/css',\n id: 'vuetify-theme-stylesheet',\n }],\n })))\n\n if (IN_BROWSER) {\n watchEffect(() => head.updateDOM())\n }\n } else {\n let styleEl: HTMLStyleElement\n\n watch(styles, updateStyles, { immediate: true })\n function updateStyles () {\n if (parsedOptions.isDisabled) return\n\n if (typeof document !== 'undefined' && !styleEl) {\n const el = document.createElement('style')\n el.type = 'text/css'\n el.id = 'vuetify-theme-stylesheet'\n\n styleEl = el\n document.head.appendChild(styleEl)\n }\n\n if (styleEl) styleEl.innerHTML = styles.value\n }\n }\n\n const themeClasses = computed(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`)\n\n return {\n isDisabled: parsedOptions.isDisabled,\n name,\n themes,\n current,\n computedThemes,\n themeClasses,\n styles,\n }\n}\n\nexport function provideTheme (props: { theme?: string }) {\n getCurrentInstance('provideTheme')\n\n const theme = inject(ThemeSymbol, null)\n\n if (!theme) throw new Error('Could not find Vuetify theme injection')\n\n const name = computed<string>(() => {\n return props.theme ?? theme?.name.value\n })\n\n const themeClasses = computed(() => theme.isDisabled ? undefined : `v-theme--${name.value}`)\n\n const newTheme: ThemeInstance = {\n ...theme,\n name,\n themeClasses,\n }\n\n provide(ThemeSymbol, newTheme)\n\n return newTheme\n}\n\nexport function useTheme () {\n getCurrentInstance('useTheme')\n\n const theme = inject(ThemeSymbol, null)\n\n if (!theme) throw new Error('Could not find Vuetify theme injection')\n\n return theme\n}\n\nfunction createCssClass (lines: string[], selector: string, content: string[]) {\n lines.push(\n `${selector} {\\n`,\n ...content.map(line => ` ${line};\\n`),\n '}\\n',\n )\n}\n\nfunction genCssVariables (theme: InternalThemeDefinition) {\n const lightOverlay = theme.dark ? 2 : 1\n const darkOverlay = theme.dark ? 1 : 2\n\n const variables: string[] = []\n for (const [key, value] of Object.entries(theme.colors)) {\n const rgb = colorToRGB(value)\n variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`)\n if (!key.startsWith('on-')) {\n variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`)\n }\n }\n\n return variables\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme.mjs","names":["computed","inject","provide","reactive","ref","watch","watchEffect","colorToInt","colorToRGB","createRange","darken","getCurrentInstance","getLuma","IN_BROWSER","intToHex","lighten","mergeDeep","propsFactory","APCAcontrast","ThemeSymbol","Symbol","for","makeThemeProps","theme","String","defaultThemeOptions","defaultTheme","variations","colors","themes","light","dark","background","surface","primary","secondary","error","info","success","warning","variables","parseThemeOptions","options","isDisabled","key","Object","entries","createTheme","app","head","_context","provides","usehead","parsedOptions","name","computedThemes","acc","original","value","color","variation","fn","amount","keys","test","onColor","colorVal","blackContrast","Math","abs","whiteContrast","min","current","styles","lines","createCssClass","themeName","genCssVariables","map","startsWith","undefined","rgb","r","g","b","Set","values","flatMap","str","i","join","addHeadObjs","style","children","type","id","updateDOM","styleEl","document","getElementById","updateStyles","immediate","el","createElement","appendChild","innerHTML","themeClasses","global","provideTheme","props","Error","newTheme","useTheme","selector","content","push","line","lightOverlay","darkOverlay"],"sources":["../../src/composables/theme.ts"],"sourcesContent":["// Utilities\nimport {\n computed,\n inject,\n provide,\n reactive,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport {\n colorToInt,\n colorToRGB,\n createRange,\n darken,\n getCurrentInstance,\n getLuma,\n IN_BROWSER,\n intToHex,\n lighten,\n mergeDeep,\n propsFactory,\n} from '@/util'\nimport { APCAcontrast } from '@/util/color/APCA'\n\n// Types\nimport type { App, DeepReadonly, InjectionKey, Ref } from 'vue'\nimport type { HeadClient } from '@vueuse/head'\n\ntype DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T\n\nexport type ThemeOptions = false | {\n defaultTheme?: string\n variations?: false | VariationsOptions\n themes?: Record<string, ThemeDefinition>\n}\nexport type ThemeDefinition = DeepPartial<InternalThemeDefinition>\n\ninterface InternalThemeOptions {\n isDisabled: boolean\n defaultTheme: string\n variations: false | VariationsOptions\n themes: Record<string, InternalThemeDefinition>\n}\n\ninterface VariationsOptions {\n colors: string[]\n lighten: number\n darken: number\n}\n\ninterface InternalThemeDefinition {\n dark: boolean\n colors: Colors\n variables: Record<string, string | number>\n}\n\nexport interface Colors extends BaseColors, OnColors {\n [key: string]: string\n}\n\ninterface BaseColors {\n background: string\n surface: string\n primary: string\n secondary: string\n success: string\n warning: string\n error: string\n info: string\n}\n\ninterface OnColors {\n 'on-background': string\n 'on-surface': string\n 'on-primary': string\n 'on-secondary': string\n 'on-success': string\n 'on-warning': string\n 'on-error': string\n 'on-info': string\n}\n\nexport interface ThemeInstance {\n readonly isDisabled: boolean\n readonly themes: Ref<Record<string, InternalThemeDefinition>>\n\n readonly name: Readonly<Ref<string>>\n readonly current: DeepReadonly<Ref<InternalThemeDefinition>>\n readonly computedThemes: DeepReadonly<Ref<Record<string, InternalThemeDefinition>>>\n\n readonly themeClasses: Readonly<Ref<string | undefined>>\n readonly styles: Readonly<Ref<string>>\n\n readonly global: {\n readonly name: Ref<string>\n readonly current: DeepReadonly<Ref<InternalThemeDefinition>>\n }\n}\n\nexport const ThemeSymbol: InjectionKey<ThemeInstance> = Symbol.for('vuetify:theme')\n\nexport const makeThemeProps = propsFactory({\n theme: String,\n}, 'theme')\n\nconst defaultThemeOptions: Exclude<ThemeOptions, false> = {\n defaultTheme: 'light',\n variations: { colors: [], lighten: 0, darken: 0 },\n themes: {\n light: {\n dark: false,\n colors: {\n background: '#FFFFFF',\n surface: '#FFFFFF',\n 'surface-variant': '#424242',\n 'on-surface-variant': '#EEEEEE',\n primary: '#6200EE',\n 'primary-darken-1': '#3700B3',\n secondary: '#03DAC6',\n 'secondary-darken-1': '#018786',\n error: '#B00020',\n info: '#2196F3',\n success: '#4CAF50',\n warning: '#FB8C00',\n },\n variables: {\n 'border-color': '#000000',\n 'border-opacity': 0.12,\n 'high-emphasis-opacity': 0.87,\n 'medium-emphasis-opacity': 0.60,\n 'disabled-opacity': 0.38,\n 'idle-opacity': 0.04,\n 'hover-opacity': 0.04,\n 'focus-opacity': 0.12,\n 'selected-opacity': 0.08,\n 'activated-opacity': 0.12,\n 'pressed-opacity': 0.12,\n 'dragged-opacity': 0.08,\n 'kbd-background-color': '#212529',\n 'kbd-color': '#FFFFFF',\n 'code-background-color': '#C2C2C2',\n },\n },\n dark: {\n dark: true,\n colors: {\n background: '#121212',\n surface: '#212121',\n 'surface-variant': '#BDBDBD',\n 'on-surface-variant': '#424242',\n primary: '#BB86FC',\n 'primary-darken-1': '#3700B3',\n secondary: '#03DAC5',\n 'secondary-darken-1': '#03DAC5',\n error: '#CF6679',\n info: '#2196F3',\n success: '#4CAF50',\n warning: '#FB8C00',\n },\n variables: {\n 'border-color': '#FFFFFF',\n 'border-opacity': 0.12,\n 'high-emphasis-opacity': 0.87,\n 'medium-emphasis-opacity': 0.60,\n 'disabled-opacity': 0.38,\n 'idle-opacity': 0.10,\n 'hover-opacity': 0.04,\n 'focus-opacity': 0.12,\n 'selected-opacity': 0.08,\n 'activated-opacity': 0.12,\n 'pressed-opacity': 0.16,\n 'dragged-opacity': 0.08,\n 'kbd-background-color': '#212529',\n 'kbd-color': '#FFFFFF',\n 'code-background-color': '#B7B7B7',\n },\n },\n },\n}\n\nfunction parseThemeOptions (options: ThemeOptions = defaultThemeOptions): InternalThemeOptions {\n if (!options) return { ...defaultThemeOptions, isDisabled: true } as InternalThemeOptions\n\n const themes: Record<string, InternalThemeDefinition> = {}\n for (const [key, theme] of Object.entries(options.themes ?? {})) {\n const defaultTheme = theme.dark\n ? defaultThemeOptions.themes?.dark\n : defaultThemeOptions.themes?.light\n themes[key] = mergeDeep(defaultTheme, theme) as InternalThemeDefinition\n }\n\n return mergeDeep(\n defaultThemeOptions,\n { ...options, themes },\n ) as InternalThemeOptions\n}\n\n// Composables\nexport function createTheme (app: App, options?: ThemeOptions): ThemeInstance {\n const head = app._context.provides.usehead as HeadClient | undefined\n const parsedOptions = reactive(parseThemeOptions(options))\n const name = ref(parsedOptions.defaultTheme)\n const themes = ref(parsedOptions.themes)\n\n const computedThemes = computed(() => {\n const acc: Record<string, InternalThemeDefinition> = {}\n for (const [name, original] of Object.entries(themes.value)) {\n const theme: InternalThemeDefinition = acc[name] = {\n ...original,\n colors: {\n ...original.colors,\n },\n }\n\n if (parsedOptions.variations) {\n for (const name of parsedOptions.variations.colors) {\n const color = theme.colors[name]\n for (const variation of (['lighten', 'darken'] as const)) {\n const fn = variation === 'lighten' ? lighten : darken\n for (const amount of createRange(parsedOptions.variations[variation], 1)) {\n theme.colors[`${name}-${variation}-${amount}`] = intToHex(fn(colorToInt(color), amount))\n }\n }\n }\n }\n\n for (const color of Object.keys(theme.colors)) {\n if (/on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue\n\n const onColor = `on-${color}` as keyof OnColors\n const colorVal = colorToInt(theme.colors[color]!)\n\n const blackContrast = Math.abs(APCAcontrast(0, colorVal))\n const whiteContrast = Math.abs(APCAcontrast(0xffffff, colorVal))\n\n // TODO: warn about poor color selections\n // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))\n // const minContrast = Math.max(blackContrast, whiteContrast)\n // if (minContrast < 60) {\n // consoleInfo(`${key} theme color ${color} has poor contrast (${minContrast.toFixed()}%)`)\n // } else if (contrastAsText < 60 && !['background', 'surface'].includes(color)) {\n // consoleInfo(`${key} theme color ${color} has poor contrast as text (${contrastAsText.toFixed()}%)`)\n // }\n\n // Prefer white text if both have an acceptable contrast ratio\n theme.colors[onColor] = whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000'\n }\n }\n\n return acc\n })\n const current = computed(() => computedThemes.value[name.value])\n\n const styles = computed(() => {\n const lines: string[] = []\n\n if (current.value.dark) {\n createCssClass(lines, ':root', ['color-scheme: dark'])\n }\n\n for (const [themeName, theme] of Object.entries(computedThemes.value)) {\n const { variables, dark } = theme\n\n createCssClass(lines, `.v-theme--${themeName}`, [\n `color-scheme: ${dark ? 'dark' : 'normal'}`,\n ...genCssVariables(theme),\n ...Object.keys(variables).map(key => {\n const value = variables[key]\n const color = typeof value === 'string' && value.startsWith('#') ? colorToRGB(value) : undefined\n const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined\n\n return `--v-${key}: ${rgb ?? value}`\n }),\n ])\n }\n\n const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)))\n for (const key of colors) {\n if (/on-[a-z]/.test(key)) {\n createCssClass(lines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`])\n } else {\n createCssClass(lines, `.bg-${key}`, [\n `--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`,\n `background: rgb(var(--v-theme-${key})) !important`,\n `color: rgb(var(--v-theme-on-${key})) !important`,\n ])\n createCssClass(lines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`])\n createCssClass(lines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`])\n }\n }\n\n return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('')\n })\n\n if (head) {\n head.addHeadObjs(computed(() => ({\n style: [{\n children: styles.value,\n type: 'text/css',\n id: 'vuetify-theme-stylesheet',\n }],\n })))\n\n if (IN_BROWSER) {\n watchEffect(() => head.updateDOM())\n }\n } else {\n let styleEl = IN_BROWSER\n ? document.getElementById('vuetify-theme-stylesheet')\n : null\n\n watch(styles, updateStyles, { immediate: true })\n function updateStyles () {\n if (parsedOptions.isDisabled) return\n\n if (typeof document !== 'undefined' && !styleEl) {\n const el = document.createElement('style')\n el.type = 'text/css'\n el.id = 'vuetify-theme-stylesheet'\n\n styleEl = el\n document.head.appendChild(styleEl)\n }\n\n if (styleEl) styleEl.innerHTML = styles.value\n }\n }\n\n const themeClasses = computed(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`)\n\n return {\n isDisabled: parsedOptions.isDisabled,\n name,\n themes,\n current,\n computedThemes,\n themeClasses,\n styles,\n global: {\n name,\n current,\n },\n }\n}\n\nexport function provideTheme (props: { theme?: string }) {\n getCurrentInstance('provideTheme')\n\n const theme = inject(ThemeSymbol, null)\n\n if (!theme) throw new Error('Could not find Vuetify theme injection')\n\n const name = computed<string>(() => {\n return props.theme ?? theme?.name.value\n })\n\n const themeClasses = computed(() => theme.isDisabled ? undefined : `v-theme--${name.value}`)\n\n const newTheme: ThemeInstance = {\n ...theme,\n name,\n themeClasses,\n }\n\n provide(ThemeSymbol, newTheme)\n\n return newTheme\n}\n\nexport function useTheme () {\n getCurrentInstance('useTheme')\n\n const theme = inject(ThemeSymbol, null)\n\n if (!theme) throw new Error('Could not find Vuetify theme injection')\n\n return theme\n}\n\nfunction createCssClass (lines: string[], selector: string, content: string[]) {\n lines.push(\n `${selector} {\\n`,\n ...content.map(line => ` ${line};\\n`),\n '}\\n',\n )\n}\n\nfunction genCssVariables (theme: InternalThemeDefinition) {\n const lightOverlay = theme.dark ? 2 : 1\n const darkOverlay = theme.dark ? 1 : 2\n\n const variables: string[] = []\n for (const [key, value] of Object.entries(theme.colors)) {\n const rgb = colorToRGB(value)\n variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`)\n if (!key.startsWith('on-')) {\n variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`)\n }\n }\n\n return variables\n}\n"],"mappings":"AAAA;AACA,SACEA,QADF,EAEEC,MAFF,EAGEC,OAHF,EAIEC,QAJF,EAKEC,GALF,EAMEC,KANF,EAOEC,WAPF,QAQO,KARP;SAUEC,U,EACAC,U,EACAC,W,EACAC,M,EACAC,kB,EACAC,O,EACAC,U,EACAC,Q,EACAC,O,EACAC,S,EACAC,Y;SAEOC,Y,kCAET;;AA2EA,OAAO,MAAMC,WAAwC,GAAGC,MAAM,CAACC,GAAP,CAAW,eAAX,CAAjD;AAEP,OAAO,MAAMC,cAAc,GAAGL,YAAY,CAAC;EACzCM,KAAK,EAAEC;AADkC,CAAD,EAEvC,OAFuC,CAAnC;AAIP,MAAMC,mBAAiD,GAAG;EACxDC,YAAY,EAAE,OAD0C;EAExDC,UAAU,EAAE;IAAEC,MAAM,EAAE,EAAV;IAAcb,OAAO,EAAE,CAAvB;IAA0BL,MAAM,EAAE;EAAlC,CAF4C;EAGxDmB,MAAM,EAAE;IACNC,KAAK,EAAE;MACLC,IAAI,EAAE,KADD;MAELH,MAAM,EAAE;QACNI,UAAU,EAAE,SADN;QAENC,OAAO,EAAE,SAFH;QAGN,mBAAmB,SAHb;QAIN,sBAAsB,SAJhB;QAKNC,OAAO,EAAE,SALH;QAMN,oBAAoB,SANd;QAONC,SAAS,EAAE,SAPL;QAQN,sBAAsB,SARhB;QASNC,KAAK,EAAE,SATD;QAUNC,IAAI,EAAE,SAVA;QAWNC,OAAO,EAAE,SAXH;QAYNC,OAAO,EAAE;MAZH,CAFH;MAgBLC,SAAS,EAAE;QACT,gBAAgB,SADP;QAET,kBAAkB,IAFT;QAGT,yBAAyB,IAHhB;QAIT,2BAA2B,IAJlB;QAKT,oBAAoB,IALX;QAMT,gBAAgB,IANP;QAOT,iBAAiB,IAPR;QAQT,iBAAiB,IARR;QAST,oBAAoB,IATX;QAUT,qBAAqB,IAVZ;QAWT,mBAAmB,IAXV;QAYT,mBAAmB,IAZV;QAaT,wBAAwB,SAbf;QAcT,aAAa,SAdJ;QAeT,yBAAyB;MAfhB;IAhBN,CADD;IAmCNT,IAAI,EAAE;MACJA,IAAI,EAAE,IADF;MAEJH,MAAM,EAAE;QACNI,UAAU,EAAE,SADN;QAENC,OAAO,EAAE,SAFH;QAGN,mBAAmB,SAHb;QAIN,sBAAsB,SAJhB;QAKNC,OAAO,EAAE,SALH;QAMN,oBAAoB,SANd;QAONC,SAAS,EAAE,SAPL;QAQN,sBAAsB,SARhB;QASNC,KAAK,EAAE,SATD;QAUNC,IAAI,EAAE,SAVA;QAWNC,OAAO,EAAE,SAXH;QAYNC,OAAO,EAAE;MAZH,CAFJ;MAgBJC,SAAS,EAAE;QACT,gBAAgB,SADP;QAET,kBAAkB,IAFT;QAGT,yBAAyB,IAHhB;QAIT,2BAA2B,IAJlB;QAKT,oBAAoB,IALX;QAMT,gBAAgB,IANP;QAOT,iBAAiB,IAPR;QAQT,iBAAiB,IARR;QAST,oBAAoB,IATX;QAUT,qBAAqB,IAVZ;QAWT,mBAAmB,IAXV;QAYT,mBAAmB,IAZV;QAaT,wBAAwB,SAbf;QAcT,aAAa,SAdJ;QAeT,yBAAyB;MAfhB;IAhBP;EAnCA;AAHgD,CAA1D;;AA2EA,SAASC,iBAAT,GAA+F;EAAA,IAAnEC,OAAmE,uEAA3CjB,mBAA2C;EAC7F,IAAI,CAACiB,OAAL,EAAc,OAAO,EAAE,GAAGjB,mBAAL;IAA0BkB,UAAU,EAAE;EAAtC,CAAP;EAEd,MAAMd,MAA+C,GAAG,EAAxD;;EACA,KAAK,MAAM,CAACe,GAAD,EAAMrB,KAAN,CAAX,IAA2BsB,MAAM,CAACC,OAAP,oBAAeJ,OAAO,CAACb,MAAvB,8BAAiC,EAAjC,CAA3B,EAAiE;IAAA;;IAC/D,MAAMH,YAAY,GAAGH,KAAK,CAACQ,IAAN,4BACjBN,mBAAmB,CAACI,MADH,qBACjB,sBAA4BE,IADX,6BAEjBN,mBAAmB,CAACI,MAFH,qBAEjB,uBAA4BC,KAFhC;IAGAD,MAAM,CAACe,GAAD,CAAN,GAAc5B,SAAS,CAACU,YAAD,EAAeH,KAAf,CAAvB;EACD;;EAED,OAAOP,SAAS,CACdS,mBADc,EAEd,EAAE,GAAGiB,OAAL;IAAcb;EAAd,CAFc,CAAhB;AAID,C,CAED;;;AACA,OAAO,SAASkB,WAAT,CAAsBC,GAAtB,EAAgCN,OAAhC,EAAuE;EAC5E,MAAMO,IAAI,GAAGD,GAAG,CAACE,QAAJ,CAAaC,QAAb,CAAsBC,OAAnC;EACA,MAAMC,aAAa,GAAGlD,QAAQ,CAACsC,iBAAiB,CAACC,OAAD,CAAlB,CAA9B;EACA,MAAMY,IAAI,GAAGlD,GAAG,CAACiD,aAAa,CAAC3B,YAAf,CAAhB;EACA,MAAMG,MAAM,GAAGzB,GAAG,CAACiD,aAAa,CAACxB,MAAf,CAAlB;EAEA,MAAM0B,cAAc,GAAGvD,QAAQ,CAAC,MAAM;IACpC,MAAMwD,GAA4C,GAAG,EAArD;;IACA,KAAK,MAAM,CAACF,IAAD,EAAOG,QAAP,CAAX,IAA+BZ,MAAM,CAACC,OAAP,CAAejB,MAAM,CAAC6B,KAAtB,CAA/B,EAA6D;MAC3D,MAAMnC,KAA8B,GAAGiC,GAAG,CAACF,IAAD,CAAH,GAAY,EACjD,GAAGG,QAD8C;QAEjD7B,MAAM,EAAE,EACN,GAAG6B,QAAQ,CAAC7B;QADN;MAFyC,CAAnD;;MAOA,IAAIyB,aAAa,CAAC1B,UAAlB,EAA8B;QAC5B,KAAK,MAAM2B,IAAX,IAAmBD,aAAa,CAAC1B,UAAd,CAAyBC,MAA5C,EAAoD;UAClD,MAAM+B,KAAK,GAAGpC,KAAK,CAACK,MAAN,CAAa0B,IAAb,CAAd;;UACA,KAAK,MAAMM,SAAX,IAAyB,CAAC,SAAD,EAAY,QAAZ,CAAzB,EAA0D;YACxD,MAAMC,EAAE,GAAGD,SAAS,KAAK,SAAd,GAA0B7C,OAA1B,GAAoCL,MAA/C;;YACA,KAAK,MAAMoD,MAAX,IAAqBrD,WAAW,CAAC4C,aAAa,CAAC1B,UAAd,CAAyBiC,SAAzB,CAAD,EAAsC,CAAtC,CAAhC,EAA0E;cACxErC,KAAK,CAACK,MAAN,CAAc,GAAE0B,IAAK,IAAGM,SAAU,IAAGE,MAAO,EAA5C,IAAiDhD,QAAQ,CAAC+C,EAAE,CAACtD,UAAU,CAACoD,KAAD,CAAX,EAAoBG,MAApB,CAAH,CAAzD;YACD;UACF;QACF;MACF;;MAED,KAAK,MAAMH,KAAX,IAAoBd,MAAM,CAACkB,IAAP,CAAYxC,KAAK,CAACK,MAAlB,CAApB,EAA+C;QAC7C,IAAI,WAAWoC,IAAX,CAAgBL,KAAhB,KAA0BpC,KAAK,CAACK,MAAN,CAAc,MAAK+B,KAAM,EAAzB,CAA9B,EAA2D;QAE3D,MAAMM,OAAO,GAAI,MAAKN,KAAM,EAA5B;QACA,MAAMO,QAAQ,GAAG3D,UAAU,CAACgB,KAAK,CAACK,MAAN,CAAa+B,KAAb,CAAD,CAA3B;QAEA,MAAMQ,aAAa,GAAGC,IAAI,CAACC,GAAL,CAASnD,YAAY,CAAC,CAAD,EAAIgD,QAAJ,CAArB,CAAtB;QACA,MAAMI,aAAa,GAAGF,IAAI,CAACC,GAAL,CAASnD,YAAY,CAAC,QAAD,EAAWgD,QAAX,CAArB,CAAtB,CAP6C,CAS7C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QAEA;;QACA3C,KAAK,CAACK,MAAN,CAAaqC,OAAb,IAAwBK,aAAa,GAAGF,IAAI,CAACG,GAAL,CAASJ,aAAT,EAAwB,EAAxB,CAAhB,GAA8C,MAA9C,GAAuD,MAA/E;MACD;IACF;;IAED,OAAOX,GAAP;EACD,CA9C8B,CAA/B;EA+CA,MAAMgB,OAAO,GAAGxE,QAAQ,CAAC,MAAMuD,cAAc,CAACG,KAAf,CAAqBJ,IAAI,CAACI,KAA1B,CAAP,CAAxB;EAEA,MAAMe,MAAM,GAAGzE,QAAQ,CAAC,MAAM;IAC5B,MAAM0E,KAAe,GAAG,EAAxB;;IAEA,IAAIF,OAAO,CAACd,KAAR,CAAc3B,IAAlB,EAAwB;MACtB4C,cAAc,CAACD,KAAD,EAAQ,OAAR,EAAiB,CAAC,oBAAD,CAAjB,CAAd;IACD;;IAED,KAAK,MAAM,CAACE,SAAD,EAAYrD,KAAZ,CAAX,IAAiCsB,MAAM,CAACC,OAAP,CAAeS,cAAc,CAACG,KAA9B,CAAjC,EAAuE;MACrE,MAAM;QAAElB,SAAF;QAAaT;MAAb,IAAsBR,KAA5B;MAEAoD,cAAc,CAACD,KAAD,EAAS,aAAYE,SAAU,EAA/B,EAAkC,CAC7C,iBAAgB7C,IAAI,GAAG,MAAH,GAAY,QAAS,EADI,EAE9C,GAAG8C,eAAe,CAACtD,KAAD,CAF4B,EAG9C,GAAGsB,MAAM,CAACkB,IAAP,CAAYvB,SAAZ,EAAuBsC,GAAvB,CAA2BlC,GAAG,IAAI;QACnC,MAAMc,KAAK,GAAGlB,SAAS,CAACI,GAAD,CAAvB;QACA,MAAMe,KAAK,GAAG,OAAOD,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAACqB,UAAN,CAAiB,GAAjB,CAA7B,GAAqDvE,UAAU,CAACkD,KAAD,CAA/D,GAAyEsB,SAAvF;QACA,MAAMC,GAAG,GAAGtB,KAAK,GAAI,GAAEA,KAAK,CAACuB,CAAE,KAAIvB,KAAK,CAACwB,CAAE,KAAIxB,KAAK,CAACyB,CAAE,EAAtC,GAA0CJ,SAA3D;QAEA,OAAQ,OAAMpC,GAAI,KAAIqC,GAAf,WAAeA,GAAf,GAAsBvB,KAAM,EAAnC;MACD,CANE,CAH2C,CAAlC,CAAd;IAWD;;IAED,MAAM9B,MAAM,GAAG,IAAIyD,GAAJ,CAAQxC,MAAM,CAACyC,MAAP,CAAc/B,cAAc,CAACG,KAA7B,EAAoC6B,OAApC,CAA4ChE,KAAK,IAAIsB,MAAM,CAACkB,IAAP,CAAYxC,KAAK,CAACK,MAAlB,CAArD,CAAR,CAAf;;IACA,KAAK,MAAMgB,GAAX,IAAkBhB,MAAlB,EAA0B;MACxB,IAAI,WAAWoC,IAAX,CAAgBpB,GAAhB,CAAJ,EAA0B;QACxB+B,cAAc,CAACD,KAAD,EAAS,IAAG9B,GAAI,EAAhB,EAAmB,CAAE,4BAA2BA,GAAI,eAAjC,CAAnB,CAAd;MACD,CAFD,MAEO;QACL+B,cAAc,CAACD,KAAD,EAAS,OAAM9B,GAAI,EAAnB,EAAsB,CACjC,+CAA8CA,GAAI,sBADjB,EAEjC,iCAAgCA,GAAI,eAFH,EAGjC,+BAA8BA,GAAI,eAHD,CAAtB,CAAd;QAKA+B,cAAc,CAACD,KAAD,EAAS,SAAQ9B,GAAI,EAArB,EAAwB,CAAE,4BAA2BA,GAAI,eAAjC,CAAxB,CAAd;QACA+B,cAAc,CAACD,KAAD,EAAS,WAAU9B,GAAI,EAAvB,EAA0B,CAAE,mCAAkCA,GAAI,GAAxC,CAA1B,CAAd;MACD;IACF;;IAED,OAAO8B,KAAK,CAACI,GAAN,CAAU,CAACU,GAAD,EAAMC,CAAN,KAAYA,CAAC,KAAK,CAAN,GAAUD,GAAV,GAAiB,OAAMA,GAAI,EAAjD,EAAoDE,IAApD,CAAyD,EAAzD,CAAP;EACD,CAvCsB,CAAvB;;EAyCA,IAAIzC,IAAJ,EAAU;IACRA,IAAI,CAAC0C,WAAL,CAAiB3F,QAAQ,CAAC,OAAO;MAC/B4F,KAAK,EAAE,CAAC;QACNC,QAAQ,EAAEpB,MAAM,CAACf,KADX;QAENoC,IAAI,EAAE,UAFA;QAGNC,EAAE,EAAE;MAHE,CAAD;IADwB,CAAP,CAAD,CAAzB;;IAQA,IAAIlF,UAAJ,EAAgB;MACdP,WAAW,CAAC,MAAM2C,IAAI,CAAC+C,SAAL,EAAP,CAAX;IACD;EACF,CAZD,MAYO;IACL,IAAIC,OAAO,GAAGpF,UAAU,GACpBqF,QAAQ,CAACC,cAAT,CAAwB,0BAAxB,CADoB,GAEpB,IAFJ;IAIA9F,KAAK,CAACoE,MAAD,EAAS2B,YAAT,EAAuB;MAAEC,SAAS,EAAE;IAAb,CAAvB,CAAL;;IACA,SAASD,YAAT,GAAyB;MACvB,IAAI/C,aAAa,CAACV,UAAlB,EAA8B;;MAE9B,IAAI,OAAOuD,QAAP,KAAoB,WAApB,IAAmC,CAACD,OAAxC,EAAiD;QAC/C,MAAMK,EAAE,GAAGJ,QAAQ,CAACK,aAAT,CAAuB,OAAvB,CAAX;QACAD,EAAE,CAACR,IAAH,GAAU,UAAV;QACAQ,EAAE,CAACP,EAAH,GAAQ,0BAAR;QAEAE,OAAO,GAAGK,EAAV;QACAJ,QAAQ,CAACjD,IAAT,CAAcuD,WAAd,CAA0BP,OAA1B;MACD;;MAED,IAAIA,OAAJ,EAAaA,OAAO,CAACQ,SAAR,GAAoBhC,MAAM,CAACf,KAA3B;IACd;EACF;;EAED,MAAMgD,YAAY,GAAG1G,QAAQ,CAAC,MAAMqD,aAAa,CAACV,UAAd,GAA2BqC,SAA3B,GAAwC,YAAW1B,IAAI,CAACI,KAAM,EAArE,CAA7B;EAEA,OAAO;IACLf,UAAU,EAAEU,aAAa,CAACV,UADrB;IAELW,IAFK;IAGLzB,MAHK;IAIL2C,OAJK;IAKLjB,cALK;IAMLmD,YANK;IAOLjC,MAPK;IAQLkC,MAAM,EAAE;MACNrD,IADM;MAENkB;IAFM;EARH,CAAP;AAaD;AAED,OAAO,SAASoC,YAAT,CAAuBC,KAAvB,EAAkD;EACvDlG,kBAAkB,CAAC,cAAD,CAAlB;EAEA,MAAMY,KAAK,GAAGtB,MAAM,CAACkB,WAAD,EAAc,IAAd,CAApB;EAEA,IAAI,CAACI,KAAL,EAAY,MAAM,IAAIuF,KAAJ,CAAU,wCAAV,CAAN;EAEZ,MAAMxD,IAAI,GAAGtD,QAAQ,CAAS,MAAM;IAAA;;IAClC,uBAAO6G,KAAK,CAACtF,KAAb,2BAAsBA,KAAtB,oBAAsBA,KAAK,CAAE+B,IAAP,CAAYI,KAAlC;EACD,CAFoB,CAArB;EAIA,MAAMgD,YAAY,GAAG1G,QAAQ,CAAC,MAAMuB,KAAK,CAACoB,UAAN,GAAmBqC,SAAnB,GAAgC,YAAW1B,IAAI,CAACI,KAAM,EAA7D,CAA7B;EAEA,MAAMqD,QAAuB,GAAG,EAC9B,GAAGxF,KAD2B;IAE9B+B,IAF8B;IAG9BoD;EAH8B,CAAhC;EAMAxG,OAAO,CAACiB,WAAD,EAAc4F,QAAd,CAAP;EAEA,OAAOA,QAAP;AACD;AAED,OAAO,SAASC,QAAT,GAAqB;EAC1BrG,kBAAkB,CAAC,UAAD,CAAlB;EAEA,MAAMY,KAAK,GAAGtB,MAAM,CAACkB,WAAD,EAAc,IAAd,CAApB;EAEA,IAAI,CAACI,KAAL,EAAY,MAAM,IAAIuF,KAAJ,CAAU,wCAAV,CAAN;EAEZ,OAAOvF,KAAP;AACD;;AAED,SAASoD,cAAT,CAAyBD,KAAzB,EAA0CuC,QAA1C,EAA4DC,OAA5D,EAA+E;EAC7ExC,KAAK,CAACyC,IAAN,CACG,GAAEF,QAAS,MADd,EAEE,GAAGC,OAAO,CAACpC,GAAR,CAAYsC,IAAI,IAAK,KAAIA,IAAK,KAA9B,CAFL,EAGE,KAHF;AAKD;;AAED,SAASvC,eAAT,CAA0BtD,KAA1B,EAA0D;EACxD,MAAM8F,YAAY,GAAG9F,KAAK,CAACQ,IAAN,GAAa,CAAb,GAAiB,CAAtC;EACA,MAAMuF,WAAW,GAAG/F,KAAK,CAACQ,IAAN,GAAa,CAAb,GAAiB,CAArC;EAEA,MAAMS,SAAmB,GAAG,EAA5B;;EACA,KAAK,MAAM,CAACI,GAAD,EAAMc,KAAN,CAAX,IAA2Bb,MAAM,CAACC,OAAP,CAAevB,KAAK,CAACK,MAArB,CAA3B,EAAyD;IACvD,MAAMqD,GAAG,GAAGzE,UAAU,CAACkD,KAAD,CAAtB;IACAlB,SAAS,CAAC2E,IAAV,CAAgB,aAAYvE,GAAI,KAAIqC,GAAG,CAACC,CAAE,IAAGD,GAAG,CAACE,CAAE,IAAGF,GAAG,CAACG,CAAE,EAA5D;;IACA,IAAI,CAACxC,GAAG,CAACmC,UAAJ,CAAe,KAAf,CAAL,EAA4B;MAC1BvC,SAAS,CAAC2E,IAAV,CAAgB,aAAYvE,GAAI,wBAAuBhC,OAAO,CAAC8C,KAAD,CAAP,GAAiB,IAAjB,GAAwB2D,YAAxB,GAAuCC,WAAY,EAA1G;IACD;EACF;;EAED,OAAO9E,SAAP;AACD"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { useForm } from "./form.mjs";
|
|
3
3
|
import { useProxiedModel } from "./proxiedModel.mjs"; // Utilities
|
|
4
4
|
|
|
5
|
-
import { computed, onBeforeMount, onBeforeUnmount, ref, watch } from 'vue';
|
|
5
|
+
import { computed, onBeforeMount, onBeforeUnmount, ref, unref, watch } from 'vue';
|
|
6
6
|
import { getCurrentInstanceName, getUid, propsFactory, wrapInArray } from "../util/index.mjs"; // Types
|
|
7
7
|
|
|
8
8
|
export const makeValidationProps = propsFactory({
|
|
@@ -22,15 +22,22 @@ export const makeValidationProps = propsFactory({
|
|
|
22
22
|
type: Array,
|
|
23
23
|
default: () => []
|
|
24
24
|
},
|
|
25
|
-
modelValue: null
|
|
25
|
+
modelValue: null,
|
|
26
|
+
validationValue: null
|
|
26
27
|
});
|
|
27
28
|
export function useValidation(props) {
|
|
28
29
|
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
|
|
30
|
+
let id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getUid();
|
|
29
31
|
const model = useProxiedModel(props, 'modelValue');
|
|
32
|
+
const validationModel = computed(() => {
|
|
33
|
+
var _props$validationValu;
|
|
34
|
+
|
|
35
|
+
return (_props$validationValu = props.validationValue) != null ? _props$validationValu : model.value;
|
|
36
|
+
});
|
|
30
37
|
const form = useForm();
|
|
31
38
|
const internalErrorMessages = ref([]);
|
|
32
39
|
const isPristine = ref(true);
|
|
33
|
-
const isDirty = computed(() => wrapInArray(model.value === '' ? null : model.value).length
|
|
40
|
+
const isDirty = computed(() => !!(wrapInArray(model.value === '' ? null : model.value).length || wrapInArray(validationModel.value === '' ? null : validationModel.value).length));
|
|
34
41
|
const isDisabled = computed(() => !!(props.disabled || form != null && form.isDisabled.value));
|
|
35
42
|
const isReadonly = computed(() => !!(props.readonly || form != null && form.isReadonly.value));
|
|
36
43
|
const errorMessages = computed(() => {
|
|
@@ -53,7 +60,7 @@ export function useValidation(props) {
|
|
|
53
60
|
const uid = computed(() => {
|
|
54
61
|
var _props$name;
|
|
55
62
|
|
|
56
|
-
return (_props$name = props.name) != null ? _props$name :
|
|
63
|
+
return (_props$name = props.name) != null ? _props$name : unref(id);
|
|
57
64
|
});
|
|
58
65
|
onBeforeMount(() => {
|
|
59
66
|
form == null ? void 0 : form.register(uid.value, validate, reset, resetValidation, isValid);
|
|
@@ -61,8 +68,8 @@ export function useValidation(props) {
|
|
|
61
68
|
onBeforeUnmount(() => {
|
|
62
69
|
form == null ? void 0 : form.unregister(uid.value);
|
|
63
70
|
});
|
|
64
|
-
watch(
|
|
65
|
-
if (
|
|
71
|
+
watch(validationModel, () => {
|
|
72
|
+
if (validationModel.value != null) validate();
|
|
66
73
|
});
|
|
67
74
|
|
|
68
75
|
function reset() {
|
|
@@ -85,7 +92,7 @@ export function useValidation(props) {
|
|
|
85
92
|
}
|
|
86
93
|
|
|
87
94
|
const handler = typeof rule === 'function' ? rule : () => rule;
|
|
88
|
-
const result = await handler(
|
|
95
|
+
const result = await handler(validationModel.value);
|
|
89
96
|
if (result === true) continue;
|
|
90
97
|
|
|
91
98
|
if (typeof result !== 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.mjs","names":["useForm","useProxiedModel","computed","onBeforeMount","onBeforeUnmount","ref","watch","getCurrentInstanceName","getUid","propsFactory","wrapInArray","makeValidationProps","disabled","Boolean","error","errorMessages","type","Array","String","default","maxErrors","Number","name","readonly","rules","modelValue","useValidation","props","model","form","internalErrorMessages","isPristine","isDirty","
|
|
1
|
+
{"version":3,"file":"validation.mjs","names":["useForm","useProxiedModel","computed","onBeforeMount","onBeforeUnmount","ref","unref","watch","getCurrentInstanceName","getUid","propsFactory","wrapInArray","makeValidationProps","disabled","Boolean","error","errorMessages","type","Array","String","default","maxErrors","Number","name","readonly","rules","modelValue","validationValue","useValidation","props","id","model","validationModel","value","form","internalErrorMessages","isPristine","isDirty","length","isDisabled","isReadonly","isValid","isValidating","validationClasses","uid","register","validate","reset","resetValidation","unregister","results","rule","handler","result","console","warn","push"],"sources":["../../src/composables/validation.ts"],"sourcesContent":["// Composables\nimport { useForm } from '@/composables/form'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, onBeforeMount, onBeforeUnmount, ref, unref, watch } from 'vue'\nimport type { MaybeRef } from '@/util'\nimport { getCurrentInstanceName, getUid, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type ValidationResult = string | true\nexport type ValidationRule =\n | ValidationResult\n | PromiseLike<ValidationResult>\n | ((value: any) => ValidationResult)\n | ((value: any) => PromiseLike<ValidationResult>)\n\nexport interface ValidationProps {\n disabled: boolean\n error: boolean\n errorMessages: string | string[]\n maxErrors: string | number\n name: string | undefined\n readonly: boolean\n rules: ValidationRule[]\n modelValue: any\n 'onUpdate:modelValue': ((val: any) => void) | undefined\n validationValue: any\n}\n\nexport const makeValidationProps = propsFactory({\n disabled: Boolean,\n error: Boolean,\n errorMessages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n maxErrors: {\n type: [Number, String],\n default: 1,\n },\n name: String,\n readonly: Boolean,\n rules: {\n type: Array as PropType<ValidationRule[]>,\n default: () => ([]),\n },\n modelValue: null,\n validationValue: null,\n})\n\nexport function useValidation (\n props: ValidationProps,\n name = getCurrentInstanceName(),\n id: MaybeRef<string | number> = getUid(),\n) {\n const model = useProxiedModel(props, 'modelValue')\n const validationModel = computed(() => props.validationValue ?? model.value)\n const form = useForm()\n const internalErrorMessages = ref<string[]>([])\n const isPristine = ref(true)\n const isDirty = computed(() => !!(\n wrapInArray(model.value === '' ? null : model.value).length ||\n wrapInArray(validationModel.value === '' ? null : validationModel.value).length\n ))\n const isDisabled = computed(() => !!(props.disabled || form?.isDisabled.value))\n const isReadonly = computed(() => !!(props.readonly || form?.isReadonly.value))\n const errorMessages = computed(() => {\n return props.errorMessages.length\n ? wrapInArray(props.errorMessages)\n : internalErrorMessages.value\n })\n const isValid = computed(() => {\n if (!props.rules.length) return true\n if (props.error || errorMessages.value.length) return false\n\n return isPristine.value ? null : true\n })\n const isValidating = ref(false)\n const validationClasses = computed(() => {\n return {\n [`${name}--error`]: isValid.value === false,\n [`${name}--dirty`]: isDirty.value,\n [`${name}--disabled`]: isDisabled.value,\n [`${name}--readonly`]: isReadonly.value,\n }\n })\n\n const uid = computed(() => props.name ?? unref(id))\n\n onBeforeMount(() => {\n form?.register(uid.value, validate, reset, resetValidation, isValid)\n })\n\n onBeforeUnmount(() => {\n form?.unregister(uid.value)\n })\n\n watch(validationModel, () => {\n if (validationModel.value != null) validate()\n })\n\n function reset () {\n resetValidation()\n model.value = null\n }\n\n function resetValidation () {\n isPristine.value = true\n internalErrorMessages.value = []\n }\n\n async function validate () {\n const results = []\n\n isValidating.value = true\n\n for (const rule of props.rules) {\n if (results.length >= (props.maxErrors || 1)) {\n break\n }\n\n const handler = typeof rule === 'function' ? rule : () => rule\n const result = await handler(validationModel.value)\n\n if (result === true) continue\n\n if (typeof result !== 'string') {\n // eslint-disable-next-line no-console\n console.warn(`${result} is not a valid value. Rule functions must return boolean true or a string.`)\n\n continue\n }\n\n results.push(result)\n }\n\n internalErrorMessages.value = results\n isValidating.value = false\n isPristine.value = false\n\n return internalErrorMessages.value\n }\n\n return {\n errorMessages,\n isDirty,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n }\n}\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { useColor } from "./color.mjs"; // Utilities
|
|
|
5
5
|
import { computed, unref } from 'vue';
|
|
6
6
|
import { getCurrentInstanceName, propsFactory } from "../util/index.mjs"; // Types
|
|
7
7
|
|
|
8
|
-
export const allowedVariants = ['
|
|
8
|
+
export const allowedVariants = ['elevated', 'flat', 'tonal', 'outlined', 'text', 'plain'];
|
|
9
9
|
export function genOverlays(isClickable, name) {
|
|
10
10
|
return _createVNode(_Fragment, null, [isClickable && _createVNode("div", {
|
|
11
11
|
"class": `${name}__overlay`
|
|
@@ -17,7 +17,7 @@ export const makeVariantProps = propsFactory({
|
|
|
17
17
|
color: String,
|
|
18
18
|
variant: {
|
|
19
19
|
type: String,
|
|
20
|
-
default: '
|
|
20
|
+
default: 'elevated',
|
|
21
21
|
validator: v => allowedVariants.includes(v)
|
|
22
22
|
}
|
|
23
23
|
}, 'variant');
|
|
@@ -38,7 +38,7 @@ export function useVariant(props) {
|
|
|
38
38
|
color
|
|
39
39
|
} = unref(props);
|
|
40
40
|
return {
|
|
41
|
-
[['
|
|
41
|
+
[['elevated', 'flat'].includes(variant) ? 'background' : 'text']: color
|
|
42
42
|
};
|
|
43
43
|
}));
|
|
44
44
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variant.mjs","names":["useColor","computed","unref","getCurrentInstanceName","propsFactory","allowedVariants","genOverlays","isClickable","name","makeVariantProps","color","String","variant","type","default","validator","v","includes","useVariant","props","variantClasses","colorClasses","colorStyles"],"sources":["../../src/composables/variant.tsx"],"sourcesContent":["// Composables\nimport { useColor } from '@/composables/color'\n\n// Utilities\nimport { computed, unref } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport const allowedVariants = [\n '
|
|
1
|
+
{"version":3,"file":"variant.mjs","names":["useColor","computed","unref","getCurrentInstanceName","propsFactory","allowedVariants","genOverlays","isClickable","name","makeVariantProps","color","String","variant","type","default","validator","v","includes","useVariant","props","variantClasses","colorClasses","colorStyles"],"sources":["../../src/composables/variant.tsx"],"sourcesContent":["// Composables\nimport { useColor } from '@/composables/color'\n\n// Utilities\nimport { computed, unref } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport const allowedVariants = [\n 'elevated',\n 'flat',\n 'tonal',\n 'outlined',\n 'text',\n 'plain',\n] as const\n\nexport type Variant = typeof allowedVariants[number]\n\nexport interface VariantProps {\n color?: string\n variant: Variant\n}\n\nexport function genOverlays (isClickable: boolean, name: string) {\n return (\n <>\n { isClickable && <div class={`${name}__overlay`} /> }\n\n <div class={`${name}__underlay`} />\n </>\n )\n}\n\nexport const makeVariantProps = propsFactory({\n color: String,\n variant: {\n type: String as PropType<Variant>,\n default: 'elevated',\n validator: (v: any) => allowedVariants.includes(v),\n },\n}, 'variant')\n\nexport function useVariant (\n props: MaybeRef<VariantProps>,\n name = getCurrentInstanceName(),\n) {\n const variantClasses = computed(() => {\n const { variant } = unref(props)\n return `${name}--variant-${variant}`\n })\n\n const { colorClasses, colorStyles } = useColor(computed(() => {\n const { variant, color } = unref(props)\n return {\n [['elevated', 'flat'].includes(variant) ? 'background' : 'text']: color,\n }\n }))\n\n return { colorClasses, colorStyles, variantClasses }\n}\n"],"mappings":";AAAA;SACSA,Q,uBAET;;AACA,SAASC,QAAT,EAAmBC,KAAnB,QAAgC,KAAhC;SACSC,sB,EAAwBC,Y,6BAEjC;;AAIA,OAAO,MAAMC,eAAe,GAAG,CAC7B,UAD6B,EAE7B,MAF6B,EAG7B,OAH6B,EAI7B,UAJ6B,EAK7B,MAL6B,EAM7B,OAN6B,CAAxB;AAgBP,OAAO,SAASC,WAAT,CAAsBC,WAAtB,EAA4CC,IAA5C,EAA0D;EAC/D,sCAEMD,WAAW;IAAA,SAAiB,GAAEC,IAAK;EAAxB,QAFjB;IAAA,SAIiB,GAAEA,IAAK;EAJxB;AAOD;AAED,OAAO,MAAMC,gBAAgB,GAAGL,YAAY,CAAC;EAC3CM,KAAK,EAAEC,MADoC;EAE3CC,OAAO,EAAE;IACPC,IAAI,EAAEF,MADC;IAEPG,OAAO,EAAE,UAFF;IAGPC,SAAS,EAAGC,CAAD,IAAYX,eAAe,CAACY,QAAhB,CAAyBD,CAAzB;EAHhB;AAFkC,CAAD,EAOzC,SAPyC,CAArC;AASP,OAAO,SAASE,UAAT,CACLC,KADK,EAGL;EAAA,IADAX,IACA,uEADOL,sBAAsB,EAC7B;EACA,MAAMiB,cAAc,GAAGnB,QAAQ,CAAC,MAAM;IACpC,MAAM;MAAEW;IAAF,IAAcV,KAAK,CAACiB,KAAD,CAAzB;IACA,OAAQ,GAAEX,IAAK,aAAYI,OAAQ,EAAnC;EACD,CAH8B,CAA/B;EAKA,MAAM;IAAES,YAAF;IAAgBC;EAAhB,IAAgCtB,QAAQ,CAACC,QAAQ,CAAC,MAAM;IAC5D,MAAM;MAAEW,OAAF;MAAWF;IAAX,IAAqBR,KAAK,CAACiB,KAAD,CAAhC;IACA,OAAO;MACL,CAAC,CAAC,UAAD,EAAa,MAAb,EAAqBF,QAArB,CAA8BL,OAA9B,IAAyC,YAAzC,GAAwD,MAAzD,GAAkEF;IAD7D,CAAP;EAGD,CALsD,CAAT,CAA9C;EAOA,OAAO;IAAEW,YAAF;IAAgBC,WAAhB;IAA6BF;EAA7B,CAAP;AACD"}
|
package/lib/entry-bundler.mjs
CHANGED
|
@@ -10,7 +10,7 @@ export const createVuetify = function () {
|
|
|
10
10
|
...options
|
|
11
11
|
});
|
|
12
12
|
};
|
|
13
|
-
export const version = "3.0.0-beta.
|
|
13
|
+
export const version = "3.0.0-beta.4";
|
|
14
14
|
export { components, directives };
|
|
15
15
|
export * from "./composables/index.mjs";
|
|
16
16
|
//# sourceMappingURL=entry-bundler.mjs.map
|