vuetify 3.3.13 → 3.3.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/json/attributes.json +70 -66
  2. package/dist/json/importMap.json +12 -12
  3. package/dist/json/tags.json +5 -4
  4. package/dist/json/web-types.json +274 -185
  5. package/dist/vuetify-labs.css +565 -486
  6. package/dist/vuetify-labs.d.ts +831 -462
  7. package/dist/vuetify-labs.esm.js +453 -310
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +452 -309
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +318 -239
  12. package/dist/vuetify.d.ts +678 -301
  13. package/dist/vuetify.esm.js +253 -173
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +252 -172
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +842 -830
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  21. package/lib/components/VAppBar/index.d.mts +6 -6
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs +12 -2
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  24. package/lib/components/VBadge/VBadge.css +1 -1
  25. package/lib/components/VBadge/_variables.scss +1 -1
  26. package/lib/components/VBtnToggle/VBtnToggle.css +13 -2
  27. package/lib/components/VBtnToggle/VBtnToggle.sass +3 -3
  28. package/lib/components/VBtnToggle/_variables.scss +2 -1
  29. package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
  30. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  31. package/lib/components/VCheckbox/VCheckboxBtn.mjs +14 -11
  32. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  33. package/lib/components/VCheckbox/index.d.mts +203 -87
  34. package/lib/components/VColorPicker/VColorPickerEdit.css +4 -2
  35. package/lib/components/VColorPicker/VColorPickerPreview.css +11 -6
  36. package/lib/components/VCombobox/VCombobox.mjs +11 -1
  37. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  38. package/lib/components/VField/VField.css +25 -7
  39. package/lib/components/VField/VField.sass +15 -1
  40. package/lib/components/VGrid/VGrid.css +153 -142
  41. package/lib/components/VIcon/VIcon.css +1 -0
  42. package/lib/components/VIcon/VIcon.sass +1 -0
  43. package/lib/components/VOverlay/useActivator.mjs +1 -1
  44. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  45. package/lib/components/VProgressLinear/VProgressLinear.css +3 -2
  46. package/lib/components/VRadio/index.d.mts +82 -23
  47. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -2
  48. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  49. package/lib/components/VRadioGroup/index.d.mts +75 -109
  50. package/lib/components/VRangeSlider/index.d.mts +114 -33
  51. package/lib/components/VSelect/VSelect.mjs +12 -2
  52. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  53. package/lib/components/VSelectionControl/VSelectionControl.mjs +19 -3
  54. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  55. package/lib/components/VSelectionControl/index.d.mts +19 -5
  56. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  57. package/lib/components/VSlider/VSliderThumb.css +8 -4
  58. package/lib/components/VSlider/VSliderTrack.css +22 -12
  59. package/lib/components/VSlider/index.d.mts +114 -33
  60. package/lib/components/VSwitch/VSwitch.css +7 -5
  61. package/lib/components/VSwitch/VSwitch.mjs +26 -16
  62. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  63. package/lib/components/VSwitch/VSwitch.sass +6 -4
  64. package/lib/components/VSwitch/_variables.scss +5 -3
  65. package/lib/components/VSwitch/index.d.mts +82 -23
  66. package/lib/components/VTable/VTable.css +3 -0
  67. package/lib/components/VTable/VTable.sass +4 -0
  68. package/lib/components/VTable/_variables.scss +3 -0
  69. package/lib/components/VTabs/VTab.mjs +2 -2
  70. package/lib/components/VTabs/VTab.mjs.map +1 -1
  71. package/lib/components/VTextarea/VTextarea.mjs +1 -0
  72. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  73. package/lib/components/VTimeline/VTimeline.css +19 -10
  74. package/lib/components/VTimeline/VTimeline.sass +5 -0
  75. package/lib/components/VToolbar/VToolbar.css +4 -2
  76. package/lib/components/index.d.mts +676 -299
  77. package/lib/composables/color.mjs +6 -1
  78. package/lib/composables/color.mjs.map +1 -1
  79. package/lib/composables/defaults.mjs +9 -9
  80. package/lib/composables/defaults.mjs.map +1 -1
  81. package/lib/composables/theme.mjs +8 -7
  82. package/lib/composables/theme.mjs.map +1 -1
  83. package/lib/entry-bundler.mjs +1 -1
  84. package/lib/framework.mjs +1 -1
  85. package/lib/index.d.mts +3 -3
  86. package/lib/labs/VDateInput/index.d.mts +2 -2
  87. package/lib/labs/VDatePicker/VDateCard.mjs +3 -0
  88. package/lib/labs/VDatePicker/VDateCard.mjs.map +1 -1
  89. package/lib/labs/VDatePicker/VDatePicker.mjs +51 -21
  90. package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
  91. package/lib/labs/VDatePicker/VDatePickerControls.css +1 -1
  92. package/lib/labs/VDatePicker/VDatePickerControls.mjs +53 -35
  93. package/lib/labs/VDatePicker/VDatePickerControls.mjs.map +1 -1
  94. package/lib/labs/VDatePicker/VDatePickerMonth.mjs +37 -28
  95. package/lib/labs/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  96. package/lib/labs/VDatePicker/VDatePickerYears.mjs +19 -17
  97. package/lib/labs/VDatePicker/VDatePickerYears.mjs.map +1 -1
  98. package/lib/labs/VDatePicker/index.d.mts +148 -156
  99. package/lib/labs/VDateRangePicker/VDateRangeCard.mjs +3 -0
  100. package/lib/labs/VDateRangePicker/VDateRangeCard.mjs.map +1 -1
  101. package/lib/labs/VDateRangePicker/index.d.mts +59 -52
  102. package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
  103. package/lib/labs/VSkeletonLoader/index.d.mts +8 -8
  104. package/lib/labs/components.d.mts +156 -164
  105. package/lib/locale/bg.mjs +23 -23
  106. package/lib/locale/bg.mjs.map +1 -1
  107. package/lib/locale/fa.mjs +16 -16
  108. package/lib/locale/fa.mjs.map +1 -1
  109. package/lib/locale/no.mjs +1 -1
  110. package/lib/locale/no.mjs.map +1 -1
  111. package/lib/styles/tools/_rtl.sass +4 -2
  112. package/lib/styles/tools/_states.sass +5 -5
  113. package/lib/util/colorUtils.mjs +6 -0
  114. package/lib/util/colorUtils.mjs.map +1 -1
  115. package/lib/util/helpers.mjs +10 -4
  116. package/lib/util/helpers.mjs.map +1 -1
  117. package/lib/util/injectSelf.mjs +2 -1
  118. package/lib/util/injectSelf.mjs.map +1 -1
  119. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  // Utilities
2
2
  import { computed, isRef } from 'vue';
3
- import { destructComputed, isCssColor } from "../util/index.mjs"; // Types
3
+ import { destructComputed, getForeground, isCssColor } from "../util/index.mjs"; // Types
4
4
  // Composables
5
5
  export function useColor(colors) {
6
6
  return destructComputed(() => {
@@ -9,6 +9,11 @@ export function useColor(colors) {
9
9
  if (colors.value.background) {
10
10
  if (isCssColor(colors.value.background)) {
11
11
  styles.backgroundColor = colors.value.background;
12
+ if (!colors.value.text) {
13
+ const textColor = getForeground(styles.backgroundColor);
14
+ styles.color = textColor;
15
+ styles.caretColor = textColor;
16
+ }
12
17
  } else {
13
18
  classes.push(`bg-${colors.value.background}`);
14
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"color.mjs","names":["computed","isRef","destructComputed","isCssColor","useColor","colors","classes","styles","value","background","backgroundColor","push","text","color","caretColor","colorClasses","colorStyles","useTextColor","props","name","textColorClasses","textColorStyles","useBackgroundColor","backgroundColorClasses","backgroundColorStyles"],"sources":["../../src/composables/color.ts"],"sourcesContent":["// Utilities\nimport { computed, isRef } from 'vue'\nimport { destructComputed, isCssColor } from '@/util'\n\n// Types\nimport type { CSSProperties, Ref } from 'vue'\n\ntype ColorValue = string | false | null | undefined\n\nexport interface TextColorData {\n textColorClasses: Ref<string[]>\n textColorStyles: Ref<CSSProperties>\n}\n\nexport interface BackgroundColorData {\n backgroundColorClasses: Ref<string[]>\n backgroundColorStyles: Ref<CSSProperties>\n}\n\n// Composables\nexport function useColor (colors: Ref<{ background?: ColorValue, text?: ColorValue }>) {\n return destructComputed(() => {\n const classes: string[] = []\n const styles: CSSProperties = {}\n\n if (colors.value.background) {\n if (isCssColor(colors.value.background)) {\n styles.backgroundColor = colors.value.background\n } else {\n classes.push(`bg-${colors.value.background}`)\n }\n }\n\n if (colors.value.text) {\n if (isCssColor(colors.value.text)) {\n styles.color = colors.value.text\n styles.caretColor = colors.value.text\n } else {\n classes.push(`text-${colors.value.text}`)\n }\n }\n\n return { colorClasses: classes, colorStyles: styles }\n })\n}\n\nexport function useTextColor (color: Ref<ColorValue>): TextColorData\nexport function useTextColor <T extends Record<K, ColorValue>, K extends string> (props: T, name: K): TextColorData\nexport function useTextColor <T extends Record<K, ColorValue>, K extends string> (\n props: T | Ref<ColorValue>,\n name?: K\n): TextColorData {\n const colors = computed(() => ({\n text: isRef(props) ? props.value : (name ? props[name] : null),\n }))\n\n const {\n colorClasses: textColorClasses,\n colorStyles: textColorStyles,\n } = useColor(colors)\n\n return { textColorClasses, textColorStyles }\n}\n\nexport function useBackgroundColor (color: Ref<ColorValue>): BackgroundColorData\nexport function useBackgroundColor <T extends Record<K, ColorValue>, K extends string> (props: T, name: K): BackgroundColorData\nexport function useBackgroundColor <T extends Record<K, ColorValue>, K extends string> (\n props: T | Ref<ColorValue>,\n name?: K\n): BackgroundColorData {\n const colors = computed(() => ({\n background: isRef(props) ? props.value : (name ? props[name] : null),\n }))\n\n const {\n colorClasses: backgroundColorClasses,\n colorStyles: backgroundColorStyles,\n } = useColor(colors)\n\n return { backgroundColorClasses, backgroundColorStyles }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC5BC,gBAAgB,EAAEC,UAAU,6BAErC;AAeA;AACA,OAAO,SAASC,QAAQA,CAAEC,MAA2D,EAAE;EACrF,OAAOH,gBAAgB,CAAC,MAAM;IAC5B,MAAMI,OAAiB,GAAG,EAAE;IAC5B,MAAMC,MAAqB,GAAG,CAAC,CAAC;IAEhC,IAAIF,MAAM,CAACG,KAAK,CAACC,UAAU,EAAE;MAC3B,IAAIN,UAAU,CAACE,MAAM,CAACG,KAAK,CAACC,UAAU,CAAC,EAAE;QACvCF,MAAM,CAACG,eAAe,GAAGL,MAAM,CAACG,KAAK,CAACC,UAAU;MAClD,CAAC,MAAM;QACLH,OAAO,CAACK,IAAI,CAAE,MAAKN,MAAM,CAACG,KAAK,CAACC,UAAW,EAAC,CAAC;MAC/C;IACF;IAEA,IAAIJ,MAAM,CAACG,KAAK,CAACI,IAAI,EAAE;MACrB,IAAIT,UAAU,CAACE,MAAM,CAACG,KAAK,CAACI,IAAI,CAAC,EAAE;QACjCL,MAAM,CAACM,KAAK,GAAGR,MAAM,CAACG,KAAK,CAACI,IAAI;QAChCL,MAAM,CAACO,UAAU,GAAGT,MAAM,CAACG,KAAK,CAACI,IAAI;MACvC,CAAC,MAAM;QACLN,OAAO,CAACK,IAAI,CAAE,QAAON,MAAM,CAACG,KAAK,CAACI,IAAK,EAAC,CAAC;MAC3C;IACF;IAEA,OAAO;MAAEG,YAAY,EAAET,OAAO;MAAEU,WAAW,EAAET;IAAO,CAAC;EACvD,CAAC,CAAC;AACJ;AAIA,OAAO,SAASU,YAAYA,CAC1BC,KAA0B,EAC1BC,IAAQ,EACO;EACf,MAAMd,MAAM,GAAGL,QAAQ,CAAC,OAAO;IAC7BY,IAAI,EAAEX,KAAK,CAACiB,KAAK,CAAC,GAAGA,KAAK,CAACV,KAAK,GAAIW,IAAI,GAAGD,KAAK,CAACC,IAAI,CAAC,GAAG;EAC3D,CAAC,CAAC,CAAC;EAEH,MAAM;IACJJ,YAAY,EAAEK,gBAAgB;IAC9BJ,WAAW,EAAEK;EACf,CAAC,GAAGjB,QAAQ,CAACC,MAAM,CAAC;EAEpB,OAAO;IAAEe,gBAAgB;IAAEC;EAAgB,CAAC;AAC9C;AAIA,OAAO,SAASC,kBAAkBA,CAChCJ,KAA0B,EAC1BC,IAAQ,EACa;EACrB,MAAMd,MAAM,GAAGL,QAAQ,CAAC,OAAO;IAC7BS,UAAU,EAAER,KAAK,CAACiB,KAAK,CAAC,GAAGA,KAAK,CAACV,KAAK,GAAIW,IAAI,GAAGD,KAAK,CAACC,IAAI,CAAC,GAAG;EACjE,CAAC,CAAC,CAAC;EAEH,MAAM;IACJJ,YAAY,EAAEQ,sBAAsB;IACpCP,WAAW,EAAEQ;EACf,CAAC,GAAGpB,QAAQ,CAACC,MAAM,CAAC;EAEpB,OAAO;IAAEkB,sBAAsB;IAAEC;EAAsB,CAAC;AAC1D"}
1
+ {"version":3,"file":"color.mjs","names":["computed","isRef","destructComputed","getForeground","isCssColor","useColor","colors","classes","styles","value","background","backgroundColor","text","textColor","color","caretColor","push","colorClasses","colorStyles","useTextColor","props","name","textColorClasses","textColorStyles","useBackgroundColor","backgroundColorClasses","backgroundColorStyles"],"sources":["../../src/composables/color.ts"],"sourcesContent":["// Utilities\nimport { computed, isRef } from 'vue'\nimport { destructComputed, getForeground, isCssColor } from '@/util'\n\n// Types\nimport type { CSSProperties, Ref } from 'vue'\n\ntype ColorValue = string | false | null | undefined\n\nexport interface TextColorData {\n textColorClasses: Ref<string[]>\n textColorStyles: Ref<CSSProperties>\n}\n\nexport interface BackgroundColorData {\n backgroundColorClasses: Ref<string[]>\n backgroundColorStyles: Ref<CSSProperties>\n}\n\n// Composables\nexport function useColor (colors: Ref<{ background?: ColorValue, text?: ColorValue }>) {\n return destructComputed(() => {\n const classes: string[] = []\n const styles: CSSProperties = {}\n\n if (colors.value.background) {\n if (isCssColor(colors.value.background)) {\n styles.backgroundColor = colors.value.background\n\n if (!colors.value.text) {\n const textColor = getForeground(styles.backgroundColor)\n\n styles.color = textColor\n styles.caretColor = textColor\n }\n } else {\n classes.push(`bg-${colors.value.background}`)\n }\n }\n\n if (colors.value.text) {\n if (isCssColor(colors.value.text)) {\n styles.color = colors.value.text\n styles.caretColor = colors.value.text\n } else {\n classes.push(`text-${colors.value.text}`)\n }\n }\n\n return { colorClasses: classes, colorStyles: styles }\n })\n}\n\nexport function useTextColor (color: Ref<ColorValue>): TextColorData\nexport function useTextColor <T extends Record<K, ColorValue>, K extends string> (props: T, name: K): TextColorData\nexport function useTextColor <T extends Record<K, ColorValue>, K extends string> (\n props: T | Ref<ColorValue>,\n name?: K\n): TextColorData {\n const colors = computed(() => ({\n text: isRef(props) ? props.value : (name ? props[name] : null),\n }))\n\n const {\n colorClasses: textColorClasses,\n colorStyles: textColorStyles,\n } = useColor(colors)\n\n return { textColorClasses, textColorStyles }\n}\n\nexport function useBackgroundColor (color: Ref<ColorValue>): BackgroundColorData\nexport function useBackgroundColor <T extends Record<K, ColorValue>, K extends string> (props: T, name: K): BackgroundColorData\nexport function useBackgroundColor <T extends Record<K, ColorValue>, K extends string> (\n props: T | Ref<ColorValue>,\n name?: K\n): BackgroundColorData {\n const colors = computed(() => ({\n background: isRef(props) ? props.value : (name ? props[name] : null),\n }))\n\n const {\n colorClasses: backgroundColorClasses,\n colorStyles: backgroundColorStyles,\n } = useColor(colors)\n\n return { backgroundColorClasses, backgroundColorStyles }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC5BC,gBAAgB,EAAEC,aAAa,EAAEC,UAAU,6BAEpD;AAeA;AACA,OAAO,SAASC,QAAQA,CAAEC,MAA2D,EAAE;EACrF,OAAOJ,gBAAgB,CAAC,MAAM;IAC5B,MAAMK,OAAiB,GAAG,EAAE;IAC5B,MAAMC,MAAqB,GAAG,CAAC,CAAC;IAEhC,IAAIF,MAAM,CAACG,KAAK,CAACC,UAAU,EAAE;MAC3B,IAAIN,UAAU,CAACE,MAAM,CAACG,KAAK,CAACC,UAAU,CAAC,EAAE;QACvCF,MAAM,CAACG,eAAe,GAAGL,MAAM,CAACG,KAAK,CAACC,UAAU;QAEhD,IAAI,CAACJ,MAAM,CAACG,KAAK,CAACG,IAAI,EAAE;UACtB,MAAMC,SAAS,GAAGV,aAAa,CAACK,MAAM,CAACG,eAAe,CAAC;UAEvDH,MAAM,CAACM,KAAK,GAAGD,SAAS;UACxBL,MAAM,CAACO,UAAU,GAAGF,SAAS;QAC/B;MACF,CAAC,MAAM;QACLN,OAAO,CAACS,IAAI,CAAE,MAAKV,MAAM,CAACG,KAAK,CAACC,UAAW,EAAC,CAAC;MAC/C;IACF;IAEA,IAAIJ,MAAM,CAACG,KAAK,CAACG,IAAI,EAAE;MACrB,IAAIR,UAAU,CAACE,MAAM,CAACG,KAAK,CAACG,IAAI,CAAC,EAAE;QACjCJ,MAAM,CAACM,KAAK,GAAGR,MAAM,CAACG,KAAK,CAACG,IAAI;QAChCJ,MAAM,CAACO,UAAU,GAAGT,MAAM,CAACG,KAAK,CAACG,IAAI;MACvC,CAAC,MAAM;QACLL,OAAO,CAACS,IAAI,CAAE,QAAOV,MAAM,CAACG,KAAK,CAACG,IAAK,EAAC,CAAC;MAC3C;IACF;IAEA,OAAO;MAAEK,YAAY,EAAEV,OAAO;MAAEW,WAAW,EAAEV;IAAO,CAAC;EACvD,CAAC,CAAC;AACJ;AAIA,OAAO,SAASW,YAAYA,CAC1BC,KAA0B,EAC1BC,IAAQ,EACO;EACf,MAAMf,MAAM,GAAGN,QAAQ,CAAC,OAAO;IAC7BY,IAAI,EAAEX,KAAK,CAACmB,KAAK,CAAC,GAAGA,KAAK,CAACX,KAAK,GAAIY,IAAI,GAAGD,KAAK,CAACC,IAAI,CAAC,GAAG;EAC3D,CAAC,CAAC,CAAC;EAEH,MAAM;IACJJ,YAAY,EAAEK,gBAAgB;IAC9BJ,WAAW,EAAEK;EACf,CAAC,GAAGlB,QAAQ,CAACC,MAAM,CAAC;EAEpB,OAAO;IAAEgB,gBAAgB;IAAEC;EAAgB,CAAC;AAC9C;AAIA,OAAO,SAASC,kBAAkBA,CAChCJ,KAA0B,EAC1BC,IAAQ,EACa;EACrB,MAAMf,MAAM,GAAGN,QAAQ,CAAC,OAAO;IAC7BU,UAAU,EAAET,KAAK,CAACmB,KAAK,CAAC,GAAGA,KAAK,CAACX,KAAK,GAAIY,IAAI,GAAGD,KAAK,CAACC,IAAI,CAAC,GAAG;EACjE,CAAC,CAAC,CAAC;EAEH,MAAM;IACJJ,YAAY,EAAEQ,sBAAsB;IACpCP,WAAW,EAAEQ;EACf,CAAC,GAAGrB,QAAQ,CAACC,MAAM,CAAC;EAEpB,OAAO;IAAEmB,sBAAsB;IAAEC;EAAsB,CAAC;AAC1D"}
@@ -1,5 +1,4 @@
1
- // Composables
2
- import { useToggleScope } from "./toggleScope.mjs"; // Utilities
1
+ // Utilities
3
2
  import { computed, inject, provide, ref, shallowRef, unref, watchEffect } from 'vue';
4
3
  import { getCurrentInstance, injectSelf, mergeDeep, toKebabCase } from "../util/index.mjs"; // Types
5
4
  export const DefaultsSymbol = Symbol.for('vuetify:defaults');
@@ -20,6 +19,7 @@ export function provideDefaults(defaults, options) {
20
19
  const scoped = unref(options?.scoped);
21
20
  const reset = unref(options?.reset);
22
21
  const root = unref(options?.root);
22
+ if (providedDefaults.value == null && !(scoped || reset || root)) return injectedDefaults.value;
23
23
  let properties = mergeDeep(providedDefaults.value, {
24
24
  prev: injectedDefaults.value
25
25
  });
@@ -75,16 +75,16 @@ export function internalUseDefaults() {
75
75
  let [key] = _ref;
76
76
  return key.startsWith(key[0].toUpperCase());
77
77
  });
78
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
78
+ _subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : undefined;
79
+ } else {
80
+ _subcomponentDefaults.value = undefined;
79
81
  }
80
82
  });
81
83
  function provideSubDefaults() {
82
- // If subcomponent defaults are provided, override any
83
- // subcomponents provided by the component's setup function.
84
- // This uses injectSelf so must be done after the original setup to work.
85
- useToggleScope(_subcomponentDefaults, () => {
86
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
87
- });
84
+ const injected = injectSelf(DefaultsSymbol, vm);
85
+ provide(DefaultsSymbol, computed(() => {
86
+ return _subcomponentDefaults.value ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value) : injected?.value;
87
+ }));
88
88
  }
89
89
  return {
90
90
  props: _props,
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.mjs","names":["useToggleScope","computed","inject","provide","ref","shallowRef","unref","watchEffect","getCurrentInstance","injectSelf","mergeDeep","toKebabCase","DefaultsSymbol","Symbol","for","createDefaults","options","injectDefaults","defaults","Error","provideDefaults","injectedDefaults","providedDefaults","newDefaults","disabled","value","scoped","reset","root","properties","prev","len","Number","Infinity","i","propIsDefined","vnode","prop","props","internalUseDefaults","arguments","length","undefined","name","vm","type","__name","componentDefaults","_as","_props","Proxy","get","target","propValue","Reflect","filter","v","global","_subcomponentDefaults","subComponents","Object","entries","_ref","key","startsWith","toUpperCase","fromEntries","provideSubDefaults","useDefaults"],"sources":["../../src/composables/defaults.ts"],"sourcesContent":["// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, inject, provide, ref, shallowRef, unref, watchEffect } from 'vue'\nimport { getCurrentInstance, injectSelf, mergeDeep, toKebabCase } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, Ref, VNode } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport type DefaultsInstance = undefined | {\n [key: string]: undefined | Record<string, unknown>\n global?: Record<string, unknown>\n}\n\nexport type DefaultsOptions = Partial<DefaultsInstance>\n\nexport const DefaultsSymbol: InjectionKey<Ref<DefaultsInstance>> = Symbol.for('vuetify:defaults')\n\nexport function createDefaults (options?: DefaultsInstance): Ref<DefaultsInstance> {\n return ref(options)\n}\n\nexport function injectDefaults () {\n const defaults = inject(DefaultsSymbol)\n\n if (!defaults) throw new Error('[Vuetify] Could not find defaults instance')\n\n return defaults\n}\n\nexport function provideDefaults (\n defaults?: MaybeRef<DefaultsInstance | undefined>,\n options?: {\n disabled?: MaybeRef<boolean | undefined>\n reset?: MaybeRef<number | string | undefined>\n root?: MaybeRef<boolean | string | undefined>\n scoped?: MaybeRef<boolean | undefined>\n }\n) {\n const injectedDefaults = injectDefaults()\n const providedDefaults = ref(defaults)\n\n const newDefaults = computed(() => {\n const disabled = unref(options?.disabled)\n\n if (disabled) return injectedDefaults.value\n\n const scoped = unref(options?.scoped)\n const reset = unref(options?.reset)\n const root = unref(options?.root)\n\n let properties = mergeDeep(providedDefaults.value, { prev: injectedDefaults.value })\n\n if (scoped) return properties\n\n if (reset || root) {\n const len = Number(reset || Infinity)\n\n for (let i = 0; i <= len; i++) {\n if (!properties || !('prev' in properties)) {\n break\n }\n\n properties = properties.prev\n }\n\n if (properties && typeof root === 'string' && root in properties) {\n properties = mergeDeep(mergeDeep(properties, { prev: properties }), properties[root])\n }\n\n return properties\n }\n\n return properties.prev\n ? mergeDeep(properties.prev, properties)\n : properties\n }) as ComputedRef<DefaultsInstance>\n\n provide(DefaultsSymbol, newDefaults)\n\n return newDefaults\n}\n\nfunction propIsDefined (vnode: VNode, prop: string) {\n return typeof vnode.props?.[prop] !== 'undefined' ||\n typeof vnode.props?.[toKebabCase(prop)] !== 'undefined'\n}\n\nexport function internalUseDefaults (\n props: Record<string, any> = {},\n name?: string,\n defaults = injectDefaults()\n) {\n const vm = getCurrentInstance('useDefaults')\n\n name = name ?? vm.type.name ?? vm.type.__name\n if (!name) {\n throw new Error('[Vuetify] Could not determine component name')\n }\n\n const componentDefaults = computed(() => defaults.value?.[props._as ?? name])\n const _props = new Proxy(props, {\n get (target, prop) {\n const propValue = Reflect.get(target, prop)\n if (prop === 'class' || prop === 'style') {\n return [componentDefaults.value?.[prop], propValue].filter(v => v != null)\n } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {\n return componentDefaults.value?.[prop] ?? defaults.value?.global?.[prop] ?? propValue\n }\n return propValue\n },\n })\n\n const _subcomponentDefaults = shallowRef()\n watchEffect(() => {\n if (componentDefaults.value) {\n const subComponents = Object.entries(componentDefaults.value).filter(([key]) => key.startsWith(key[0].toUpperCase()))\n if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents)\n }\n })\n\n function provideSubDefaults () {\n // If subcomponent defaults are provided, override any\n // subcomponents provided by the component's setup function.\n // This uses injectSelf so must be done after the original setup to work.\n useToggleScope(_subcomponentDefaults, () => {\n provideDefaults(mergeDeep(\n injectSelf(DefaultsSymbol)?.value ?? {},\n _subcomponentDefaults.value\n ))\n })\n }\n\n return { props: _props, provideSubDefaults }\n}\n\nexport function useDefaults<T extends Record<string, any>> (props: T, name?: string): T\nexport function useDefaults (props?: undefined, name?: string): Record<string, any>\nexport function useDefaults (\n props: Record<string, any> = {},\n name?: string,\n) {\n const { props: _props, provideSubDefaults } = internalUseDefaults(props, name)\n provideSubDefaults()\n return _props\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"defaults.mjs","names":["computed","inject","provide","ref","shallowRef","unref","watchEffect","getCurrentInstance","injectSelf","mergeDeep","toKebabCase","DefaultsSymbol","Symbol","for","createDefaults","options","injectDefaults","defaults","Error","provideDefaults","injectedDefaults","providedDefaults","newDefaults","disabled","value","scoped","reset","root","properties","prev","len","Number","Infinity","i","propIsDefined","vnode","prop","props","internalUseDefaults","arguments","length","undefined","name","vm","type","__name","componentDefaults","_as","_props","Proxy","get","target","propValue","Reflect","filter","v","global","_subcomponentDefaults","subComponents","Object","entries","_ref","key","startsWith","toUpperCase","fromEntries","provideSubDefaults","injected","useDefaults"],"sources":["../../src/composables/defaults.ts"],"sourcesContent":["// Utilities\nimport { computed, inject, provide, ref, shallowRef, unref, watchEffect } from 'vue'\nimport { getCurrentInstance, injectSelf, mergeDeep, toKebabCase } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, Ref, VNode } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport type DefaultsInstance = undefined | {\n [key: string]: undefined | Record<string, unknown>\n global?: Record<string, unknown>\n}\n\nexport type DefaultsOptions = Partial<DefaultsInstance>\n\nexport const DefaultsSymbol: InjectionKey<Ref<DefaultsInstance>> = Symbol.for('vuetify:defaults')\n\nexport function createDefaults (options?: DefaultsInstance): Ref<DefaultsInstance> {\n return ref(options)\n}\n\nexport function injectDefaults () {\n const defaults = inject(DefaultsSymbol)\n\n if (!defaults) throw new Error('[Vuetify] Could not find defaults instance')\n\n return defaults\n}\n\nexport function provideDefaults (\n defaults?: MaybeRef<DefaultsInstance | undefined>,\n options?: {\n disabled?: MaybeRef<boolean | undefined>\n reset?: MaybeRef<number | string | undefined>\n root?: MaybeRef<boolean | string | undefined>\n scoped?: MaybeRef<boolean | undefined>\n }\n) {\n const injectedDefaults = injectDefaults()\n const providedDefaults = ref(defaults)\n\n const newDefaults = computed(() => {\n const disabled = unref(options?.disabled)\n\n if (disabled) return injectedDefaults.value\n\n const scoped = unref(options?.scoped)\n const reset = unref(options?.reset)\n const root = unref(options?.root)\n\n if (providedDefaults.value == null && !(scoped || reset || root)) return injectedDefaults.value\n\n let properties = mergeDeep(providedDefaults.value, { prev: injectedDefaults.value })\n\n if (scoped) return properties\n\n if (reset || root) {\n const len = Number(reset || Infinity)\n\n for (let i = 0; i <= len; i++) {\n if (!properties || !('prev' in properties)) {\n break\n }\n\n properties = properties.prev\n }\n\n if (properties && typeof root === 'string' && root in properties) {\n properties = mergeDeep(mergeDeep(properties, { prev: properties }), properties[root])\n }\n\n return properties\n }\n\n return properties.prev\n ? mergeDeep(properties.prev, properties)\n : properties\n }) as ComputedRef<DefaultsInstance>\n\n provide(DefaultsSymbol, newDefaults)\n\n return newDefaults\n}\n\nfunction propIsDefined (vnode: VNode, prop: string) {\n return typeof vnode.props?.[prop] !== 'undefined' ||\n typeof vnode.props?.[toKebabCase(prop)] !== 'undefined'\n}\n\nexport function internalUseDefaults (\n props: Record<string, any> = {},\n name?: string,\n defaults = injectDefaults()\n) {\n const vm = getCurrentInstance('useDefaults')\n\n name = name ?? vm.type.name ?? vm.type.__name\n if (!name) {\n throw new Error('[Vuetify] Could not determine component name')\n }\n\n const componentDefaults = computed(() => defaults.value?.[props._as ?? name])\n const _props = new Proxy(props, {\n get (target, prop) {\n const propValue = Reflect.get(target, prop)\n if (prop === 'class' || prop === 'style') {\n return [componentDefaults.value?.[prop], propValue].filter(v => v != null)\n } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {\n return componentDefaults.value?.[prop] ?? defaults.value?.global?.[prop] ?? propValue\n }\n return propValue\n },\n })\n\n const _subcomponentDefaults = shallowRef()\n watchEffect(() => {\n if (componentDefaults.value) {\n const subComponents = Object.entries(componentDefaults.value).filter(([key]) => key.startsWith(key[0].toUpperCase()))\n _subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : undefined\n } else {\n _subcomponentDefaults.value = undefined\n }\n })\n\n function provideSubDefaults () {\n const injected = injectSelf(DefaultsSymbol, vm)\n provide(DefaultsSymbol, computed(() => {\n return _subcomponentDefaults.value ? mergeDeep(\n injected?.value ?? {},\n _subcomponentDefaults.value\n ) : injected?.value\n }))\n }\n\n return { props: _props, provideSubDefaults }\n}\n\nexport function useDefaults<T extends Record<string, any>> (props: T, name?: string): T\nexport function useDefaults (props?: undefined, name?: string): Record<string, any>\nexport function useDefaults (\n props: Record<string, any> = {},\n name?: string,\n) {\n const { props: _props, provideSubDefaults } = internalUseDefaults(props, name)\n provideSubDefaults()\n return _props\n}\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  // Utilities
2
2
  import { computed, inject, provide, ref, watch, watchEffect } from 'vue';
3
- import { createRange, darken, getCurrentInstance, getLuma, IN_BROWSER, lighten, mergeDeep, parseColor, propsFactory, RGBtoHex } from "../util/index.mjs";
4
- import { APCAcontrast } from "../util/color/APCA.mjs"; // Types
3
+ import { createRange, darken, getCurrentInstance, getForeground, getLuma, IN_BROWSER, lighten, mergeDeep, parseColor, propsFactory, RGBtoHex } from "../util/index.mjs"; // Types
5
4
  export const ThemeSymbol = Symbol.for('vuetify:theme');
6
5
  export const makeThemeProps = propsFactory({
7
6
  theme: String
@@ -19,6 +18,7 @@ const defaultThemeOptions = {
19
18
  colors: {
20
19
  background: '#FFFFFF',
21
20
  surface: '#FFFFFF',
21
+ 'surface-bright': '#FFFFFF',
22
22
  'surface-variant': '#424242',
23
23
  'on-surface-variant': '#EEEEEE',
24
24
  primary: '#6200EE',
@@ -54,7 +54,8 @@ const defaultThemeOptions = {
54
54
  colors: {
55
55
  background: '#121212',
56
56
  surface: '#212121',
57
- 'surface-variant': '#BDBDBD',
57
+ 'surface-bright': '#ccbfd6',
58
+ 'surface-variant': '#a3a3a3',
58
59
  'on-surface-variant': '#424242',
59
60
  primary: '#BB86FC',
60
61
  'primary-darken-1': '#3700B3',
@@ -133,8 +134,6 @@ export function createTheme(options) {
133
134
  if (/^on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue;
134
135
  const onColor = `on-${color}`;
135
136
  const colorVal = parseColor(theme.colors[color]);
136
- const blackContrast = Math.abs(APCAcontrast(parseColor(0), colorVal));
137
- const whiteContrast = Math.abs(APCAcontrast(parseColor(0xffffff), colorVal));
138
137
 
139
138
  // TODO: warn about poor color selections
140
139
  // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))
@@ -146,7 +145,7 @@ export function createTheme(options) {
146
145
  // }
147
146
 
148
147
  // Prefer white text if both have an acceptable contrast ratio
149
- theme.colors[onColor] = whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000';
148
+ theme.colors[onColor] = getForeground(colorVal);
150
149
  }
151
150
  }
152
151
  return acc;
@@ -247,12 +246,14 @@ export function provideTheme(props) {
247
246
  const theme = inject(ThemeSymbol, null);
248
247
  if (!theme) throw new Error('Could not find Vuetify theme injection');
249
248
  const name = computed(() => {
250
- return props.theme ?? theme?.name.value;
249
+ return props.theme ?? theme.name.value;
251
250
  });
251
+ const current = computed(() => theme.themes.value[name.value]);
252
252
  const themeClasses = computed(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
253
253
  const newTheme = {
254
254
  ...theme,
255
255
  name,
256
+ current,
256
257
  themeClasses
257
258
  };
258
259
  provide(ThemeSymbol, newTheme);
@@ -1 +1 @@
1
- {"version":3,"file":"theme.mjs","names":["computed","inject","provide","ref","watch","watchEffect","createRange","darken","getCurrentInstance","getLuma","IN_BROWSER","lighten","mergeDeep","parseColor","propsFactory","RGBtoHex","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","arguments","length","undefined","isDisabled","key","Object","entries","createTheme","parsedOptions","name","computedThemes","acc","original","value","color","variation","fn","amount","keys","test","onColor","colorVal","blackContrast","Math","abs","whiteContrast","min","current","styles","lines","createCssClass","genCssVariables","themeName","bgLines","fgLines","Set","values","flatMap","push","map","str","i","join","getHead","style","children","id","nonce","cspNonce","install","app","head","_context","provides","usehead","entry","patch","addHeadObjs","updateDOM","styleEl","document","getElementById","updateStyles","immediate","el","createElement","type","setAttribute","appendChild","innerHTML","themeClasses","global","provideTheme","props","Error","newTheme","useTheme","selector","content","line","lightOverlay","darkOverlay","rgb","r","g","b","startsWith"],"sources":["../../src/composables/theme.ts"],"sourcesContent":["// Utilities\nimport {\n computed,\n inject,\n provide,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport {\n createRange,\n darken,\n getCurrentInstance,\n getLuma,\n IN_BROWSER,\n lighten,\n mergeDeep,\n parseColor,\n propsFactory,\n RGBtoHex,\n} from '@/util'\nimport { APCAcontrast } from '@/util/color/APCA'\n\n// Types\nimport type { HeadClient } from '@vueuse/head'\nimport type { App, DeepReadonly, InjectionKey, Ref } from 'vue'\n\ntype DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T\n\nexport type ThemeOptions = false | {\n cspNonce?: string\n defaultTheme?: string\n variations?: false | VariationsOptions\n themes?: Record<string, ThemeDefinition>\n}\nexport type ThemeDefinition = DeepPartial<InternalThemeDefinition>\n\ninterface InternalThemeOptions {\n cspNonce?: string\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 'theme-kbd': '#212529',\n 'theme-on-kbd': '#FFFFFF',\n 'theme-code': '#F5F5F5',\n 'theme-on-code': '#000000',\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': 1,\n 'medium-emphasis-opacity': 0.70,\n 'disabled-opacity': 0.50,\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 'theme-kbd': '#212529',\n 'theme-on-kbd': '#FFFFFF',\n 'theme-code': '#343434',\n 'theme-on-code': '#CCCCCC',\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 || key === '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 (options?: ThemeOptions): ThemeInstance & { install: (app: App) => void } {\n const parsedOptions = 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\n if (!color) continue\n\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}`] = RGBtoHex(fn(parseColor(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 = parseColor(theme.colors[color]!)\n\n const blackContrast = Math.abs(APCAcontrast(parseColor(0), colorVal))\n const whiteContrast = Math.abs(APCAcontrast(parseColor(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 createCssClass(lines, ':root', genCssVariables(current.value))\n\n for (const [themeName, theme] of Object.entries(computedThemes.value)) {\n createCssClass(lines, `.v-theme--${themeName}`, [\n `color-scheme: ${theme.dark ? 'dark' : 'normal'}`,\n ...genCssVariables(theme),\n ])\n }\n\n const bgLines: string[] = []\n const fgLines: string[] = []\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(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`])\n } else {\n createCssClass(bgLines, `.bg-${key}`, [\n `--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`,\n `background-color: rgb(var(--v-theme-${key})) !important`,\n `color: rgb(var(--v-theme-on-${key})) !important`,\n ])\n createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`])\n createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`])\n }\n }\n\n lines.push(...bgLines, ...fgLines)\n\n return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('')\n })\n\n function getHead () {\n return {\n style: [{\n children: styles.value,\n id: 'vuetify-theme-stylesheet',\n nonce: parsedOptions.cspNonce || false as never,\n }],\n }\n }\n\n function install (app: App) {\n if (parsedOptions.isDisabled) return\n\n const head = app._context.provides.usehead as HeadClient | undefined\n if (head) {\n if (head.push) {\n const entry = head.push(getHead)\n if (IN_BROWSER) {\n watch(styles, () => { entry.patch(getHead) })\n }\n } else {\n if (IN_BROWSER) {\n head.addHeadObjs(computed(getHead))\n watchEffect(() => head.updateDOM())\n } else {\n head.addHeadObjs(getHead())\n }\n }\n } else {\n let styleEl = IN_BROWSER\n ? document.getElementById('vuetify-theme-stylesheet')\n : null\n\n if (IN_BROWSER) {\n watch(styles, updateStyles, { immediate: true })\n } else {\n updateStyles()\n }\n\n function updateStyles () {\n if (typeof document !== 'undefined' && !styleEl) {\n const el = document.createElement('style')\n el.type = 'text/css'\n el.id = 'vuetify-theme-stylesheet'\n if (parsedOptions.cspNonce) el.setAttribute('nonce', parsedOptions.cspNonce)\n\n styleEl = el\n document.head.appendChild(styleEl)\n }\n\n if (styleEl) styleEl.innerHTML = styles.value\n }\n }\n }\n\n const themeClasses = computed(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`)\n\n return {\n install,\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 = parseColor(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 for (const [key, value] of Object.entries(theme.variables)) {\n const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined\n const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined\n variables.push(`--v-${key}: ${rgb ?? value}`)\n }\n\n return variables\n}\n"],"mappings":"AAAA;AACA,SACEA,QAAQ,EACRC,MAAM,EACNC,OAAO,EACPC,GAAG,EACHC,KAAK,EACLC,WAAW,QACN,KAAK;AAAA,SAEVC,WAAW,EACXC,MAAM,EACNC,kBAAkB,EAClBC,OAAO,EACPC,UAAU,EACVC,OAAO,EACPC,SAAS,EACTC,UAAU,EACVC,YAAY,EACZC,QAAQ;AAAA,SAEDC,YAAY,kCAErB;AA6EA,OAAO,MAAMC,WAAwC,GAAGC,MAAM,CAACC,GAAG,CAAC,eAAe,CAAC;AAEnF,OAAO,MAAMC,cAAc,GAAGN,YAAY,CAAC;EACzCO,KAAK,EAAEC;AACT,CAAC,EAAE,OAAO,CAAC;AAEX,MAAMC,mBAAiD,GAAG;EACxDC,YAAY,EAAE,OAAO;EACrBC,UAAU,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEf,OAAO,EAAE,CAAC;IAAEJ,MAAM,EAAE;EAAE,CAAC;EACjDoB,MAAM,EAAE;IACNC,KAAK,EAAE;MACLC,IAAI,EAAE,KAAK;MACXH,MAAM,EAAE;QACNI,UAAU,EAAE,SAAS;QACrBC,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,SAAS;QAC5B,oBAAoB,EAAE,SAAS;QAC/BC,OAAO,EAAE,SAAS;QAClB,kBAAkB,EAAE,SAAS;QAC7BC,SAAS,EAAE,SAAS;QACpB,oBAAoB,EAAE,SAAS;QAC/BC,KAAK,EAAE,SAAS;QAChBC,IAAI,EAAE,SAAS;QACfC,OAAO,EAAE,SAAS;QAClBC,OAAO,EAAE;MACX,CAAC;MACDC,SAAS,EAAE;QACT,cAAc,EAAE,SAAS;QACzB,gBAAgB,EAAE,IAAI;QACtB,uBAAuB,EAAE,IAAI;QAC7B,yBAAyB,EAAE,IAAI;QAC/B,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,IAAI;QACrB,kBAAkB,EAAE,IAAI;QACxB,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,IAAI;QACvB,WAAW,EAAE,SAAS;QACtB,cAAc,EAAE,SAAS;QACzB,YAAY,EAAE,SAAS;QACvB,eAAe,EAAE;MACnB;IACF,CAAC;IACDT,IAAI,EAAE;MACJA,IAAI,EAAE,IAAI;MACVH,MAAM,EAAE;QACNI,UAAU,EAAE,SAAS;QACrBC,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,SAAS;QAC5B,oBAAoB,EAAE,SAAS;QAC/BC,OAAO,EAAE,SAAS;QAClB,kBAAkB,EAAE,SAAS;QAC7BC,SAAS,EAAE,SAAS;QACpB,oBAAoB,EAAE,SAAS;QAC/BC,KAAK,EAAE,SAAS;QAChBC,IAAI,EAAE,SAAS;QACfC,OAAO,EAAE,SAAS;QAClBC,OAAO,EAAE;MACX,CAAC;MACDC,SAAS,EAAE;QACT,cAAc,EAAE,SAAS;QACzB,gBAAgB,EAAE,IAAI;QACtB,uBAAuB,EAAE,CAAC;QAC1B,yBAAyB,EAAE,IAAI;QAC/B,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,IAAI;QACrB,kBAAkB,EAAE,IAAI;QACxB,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,IAAI;QACvB,WAAW,EAAE,SAAS;QACtB,cAAc,EAAE,SAAS;QACzB,YAAY,EAAE,SAAS;QACvB,eAAe,EAAE;MACnB;IACF;EACF;AACF,CAAC;AAED,SAASC,iBAAiBA,CAAA,EAAqE;EAAA,IAAnEC,OAAqB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGlB,mBAAmB;EACrE,IAAI,CAACiB,OAAO,EAAE,OAAO;IAAE,GAAGjB,mBAAmB;IAAEqB,UAAU,EAAE;EAAK,CAAC;EAEjE,MAAMjB,MAA+C,GAAG,CAAC,CAAC;EAC1D,KAAK,MAAM,CAACkB,GAAG,EAAExB,KAAK,CAAC,IAAIyB,MAAM,CAACC,OAAO,CAACP,OAAO,CAACb,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE;IAC/D,MAAMH,YAAY,GAAGH,KAAK,CAACQ,IAAI,IAAIgB,GAAG,KAAK,MAAM,GAC7CtB,mBAAmB,CAACI,MAAM,EAAEE,IAAI,GAChCN,mBAAmB,CAACI,MAAM,EAAEC,KAAK;IACrCD,MAAM,CAACkB,GAAG,CAAC,GAAGjC,SAAS,CAACY,YAAY,EAAEH,KAAK,CAA4B;EACzE;EAEA,OAAOT,SAAS,CACdW,mBAAmB,EACnB;IAAE,GAAGiB,OAAO;IAAEb;EAAO,CAAC,CACvB;AACH;;AAEA;AACA,OAAO,SAASqB,WAAWA,CAAER,OAAsB,EAAmD;EACpG,MAAMS,aAAa,GAAGV,iBAAiB,CAACC,OAAO,CAAC;EAChD,MAAMU,IAAI,GAAG/C,GAAG,CAAC8C,aAAa,CAACzB,YAAY,CAAC;EAC5C,MAAMG,MAAM,GAAGxB,GAAG,CAAC8C,aAAa,CAACtB,MAAM,CAAC;EAExC,MAAMwB,cAAc,GAAGnD,QAAQ,CAAC,MAAM;IACpC,MAAMoD,GAA4C,GAAG,CAAC,CAAC;IACvD,KAAK,MAAM,CAACF,IAAI,EAAEG,QAAQ,CAAC,IAAIP,MAAM,CAACC,OAAO,CAACpB,MAAM,CAAC2B,KAAK,CAAC,EAAE;MAC3D,MAAMjC,KAA8B,GAAG+B,GAAG,CAACF,IAAI,CAAC,GAAG;QACjD,GAAGG,QAAQ;QACX3B,MAAM,EAAE;UACN,GAAG2B,QAAQ,CAAC3B;QACd;MACF,CAAC;MAED,IAAIuB,aAAa,CAACxB,UAAU,EAAE;QAC5B,KAAK,MAAMyB,IAAI,IAAID,aAAa,CAACxB,UAAU,CAACC,MAAM,EAAE;UAClD,MAAM6B,KAAK,GAAGlC,KAAK,CAACK,MAAM,CAACwB,IAAI,CAAC;UAEhC,IAAI,CAACK,KAAK,EAAE;UAEZ,KAAK,MAAMC,SAAS,IAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAY;YACxD,MAAMC,EAAE,GAAGD,SAAS,KAAK,SAAS,GAAG7C,OAAO,GAAGJ,MAAM;YACrD,KAAK,MAAMmD,MAAM,IAAIpD,WAAW,CAAC2C,aAAa,CAACxB,UAAU,CAAC+B,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE;cACxEnC,KAAK,CAACK,MAAM,CAAE,GAAEwB,IAAK,IAAGM,SAAU,IAAGE,MAAO,EAAC,CAAC,GAAG3C,QAAQ,CAAC0C,EAAE,CAAC5C,UAAU,CAAC0C,KAAK,CAAC,EAAEG,MAAM,CAAC,CAAC;YAC1F;UACF;QACF;MACF;MAEA,KAAK,MAAMH,KAAK,IAAIT,MAAM,CAACa,IAAI,CAACtC,KAAK,CAACK,MAAM,CAAC,EAAE;QAC7C,IAAI,WAAW,CAACkC,IAAI,CAACL,KAAK,CAAC,IAAIlC,KAAK,CAACK,MAAM,CAAE,MAAK6B,KAAM,EAAC,CAAC,EAAE;QAE5D,MAAMM,OAAO,GAAI,MAAKN,KAAM,EAAmB;QAC/C,MAAMO,QAAQ,GAAGjD,UAAU,CAACQ,KAAK,CAACK,MAAM,CAAC6B,KAAK,CAAC,CAAE;QAEjD,MAAMQ,aAAa,GAAGC,IAAI,CAACC,GAAG,CAACjD,YAAY,CAACH,UAAU,CAAC,CAAC,CAAC,EAAEiD,QAAQ,CAAC,CAAC;QACrE,MAAMI,aAAa,GAAGF,IAAI,CAACC,GAAG,CAACjD,YAAY,CAACH,UAAU,CAAC,QAAQ,CAAC,EAAEiD,QAAQ,CAAC,CAAC;;QAE5E;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACAzC,KAAK,CAACK,MAAM,CAACmC,OAAO,CAAC,GAAGK,aAAa,GAAGF,IAAI,CAACG,GAAG,CAACJ,aAAa,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,MAAM;MACvF;IACF;IAEA,OAAOX,GAAG;EACZ,CAAC,CAAC;EACF,MAAMgB,OAAO,GAAGpE,QAAQ,CAAC,MAAMmD,cAAc,CAACG,KAAK,CAACJ,IAAI,CAACI,KAAK,CAAC,CAAC;EAEhE,MAAMe,MAAM,GAAGrE,QAAQ,CAAC,MAAM;IAC5B,MAAMsE,KAAe,GAAG,EAAE;IAE1B,IAAIF,OAAO,CAACd,KAAK,CAACzB,IAAI,EAAE;MACtB0C,cAAc,CAACD,KAAK,EAAE,OAAO,EAAE,CAAC,oBAAoB,CAAC,CAAC;IACxD;IAEAC,cAAc,CAACD,KAAK,EAAE,OAAO,EAAEE,eAAe,CAACJ,OAAO,CAACd,KAAK,CAAC,CAAC;IAE9D,KAAK,MAAM,CAACmB,SAAS,EAAEpD,KAAK,CAAC,IAAIyB,MAAM,CAACC,OAAO,CAACI,cAAc,CAACG,KAAK,CAAC,EAAE;MACrEiB,cAAc,CAACD,KAAK,EAAG,aAAYG,SAAU,EAAC,EAAE,CAC7C,iBAAgBpD,KAAK,CAACQ,IAAI,GAAG,MAAM,GAAG,QAAS,EAAC,EACjD,GAAG2C,eAAe,CAACnD,KAAK,CAAC,CAC1B,CAAC;IACJ;IAEA,MAAMqD,OAAiB,GAAG,EAAE;IAC5B,MAAMC,OAAiB,GAAG,EAAE;IAE5B,MAAMjD,MAAM,GAAG,IAAIkD,GAAG,CAAC9B,MAAM,CAAC+B,MAAM,CAAC1B,cAAc,CAACG,KAAK,CAAC,CAACwB,OAAO,CAACzD,KAAK,IAAIyB,MAAM,CAACa,IAAI,CAACtC,KAAK,CAACK,MAAM,CAAC,CAAC,CAAC;IACvG,KAAK,MAAMmB,GAAG,IAAInB,MAAM,EAAE;MACxB,IAAI,WAAW,CAACkC,IAAI,CAACf,GAAG,CAAC,EAAE;QACzB0B,cAAc,CAACI,OAAO,EAAG,IAAG9B,GAAI,EAAC,EAAE,CAAE,4BAA2BA,GAAI,eAAc,CAAC,CAAC;MACtF,CAAC,MAAM;QACL0B,cAAc,CAACG,OAAO,EAAG,OAAM7B,GAAI,EAAC,EAAE,CACnC,+CAA8CA,GAAI,sBAAqB,EACvE,uCAAsCA,GAAI,eAAc,EACxD,+BAA8BA,GAAI,eAAc,CAClD,CAAC;QACF0B,cAAc,CAACI,OAAO,EAAG,SAAQ9B,GAAI,EAAC,EAAE,CAAE,4BAA2BA,GAAI,eAAc,CAAC,CAAC;QACzF0B,cAAc,CAACI,OAAO,EAAG,WAAU9B,GAAI,EAAC,EAAE,CAAE,mCAAkCA,GAAI,GAAE,CAAC,CAAC;MACxF;IACF;IAEAyB,KAAK,CAACS,IAAI,CAAC,GAAGL,OAAO,EAAE,GAAGC,OAAO,CAAC;IAElC,OAAOL,KAAK,CAACU,GAAG,CAAC,CAACC,GAAG,EAAEC,CAAC,KAAKA,CAAC,KAAK,CAAC,GAAGD,GAAG,GAAI,OAAMA,GAAI,EAAC,CAAC,CAACE,IAAI,CAAC,EAAE,CAAC;EACrE,CAAC,CAAC;EAEF,SAASC,OAAOA,CAAA,EAAI;IAClB,OAAO;MACLC,KAAK,EAAE,CAAC;QACNC,QAAQ,EAAEjB,MAAM,CAACf,KAAK;QACtBiC,EAAE,EAAE,0BAA0B;QAC9BC,KAAK,EAAEvC,aAAa,CAACwC,QAAQ,IAAI;MACnC,CAAC;IACH,CAAC;EACH;EAEA,SAASC,OAAOA,CAAEC,GAAQ,EAAE;IAC1B,IAAI1C,aAAa,CAACL,UAAU,EAAE;IAE9B,MAAMgD,IAAI,GAAGD,GAAG,CAACE,QAAQ,CAACC,QAAQ,CAACC,OAAiC;IACpE,IAAIH,IAAI,EAAE;MACR,IAAIA,IAAI,CAACb,IAAI,EAAE;QACb,MAAMiB,KAAK,GAAGJ,IAAI,CAACb,IAAI,CAACK,OAAO,CAAC;QAChC,IAAI1E,UAAU,EAAE;UACdN,KAAK,CAACiE,MAAM,EAAE,MAAM;YAAE2B,KAAK,CAACC,KAAK,CAACb,OAAO,CAAC;UAAC,CAAC,CAAC;QAC/C;MACF,CAAC,MAAM;QACL,IAAI1E,UAAU,EAAE;UACdkF,IAAI,CAACM,WAAW,CAAClG,QAAQ,CAACoF,OAAO,CAAC,CAAC;UACnC/E,WAAW,CAAC,MAAMuF,IAAI,CAACO,SAAS,EAAE,CAAC;QACrC,CAAC,MAAM;UACLP,IAAI,CAACM,WAAW,CAACd,OAAO,EAAE,CAAC;QAC7B;MACF;IACF,CAAC,MAAM;MACL,IAAIgB,OAAO,GAAG1F,UAAU,GACpB2F,QAAQ,CAACC,cAAc,CAAC,0BAA0B,CAAC,GACnD,IAAI;MAER,IAAI5F,UAAU,EAAE;QACdN,KAAK,CAACiE,MAAM,EAAEkC,YAAY,EAAE;UAAEC,SAAS,EAAE;QAAK,CAAC,CAAC;MAClD,CAAC,MAAM;QACLD,YAAY,EAAE;MAChB;MAEA,SAASA,YAAYA,CAAA,EAAI;QACvB,IAAI,OAAOF,QAAQ,KAAK,WAAW,IAAI,CAACD,OAAO,EAAE;UAC/C,MAAMK,EAAE,GAAGJ,QAAQ,CAACK,aAAa,CAAC,OAAO,CAAC;UAC1CD,EAAE,CAACE,IAAI,GAAG,UAAU;UACpBF,EAAE,CAAClB,EAAE,GAAG,0BAA0B;UAClC,IAAItC,aAAa,CAACwC,QAAQ,EAAEgB,EAAE,CAACG,YAAY,CAAC,OAAO,EAAE3D,aAAa,CAACwC,QAAQ,CAAC;UAE5EW,OAAO,GAAGK,EAAE;UACZJ,QAAQ,CAACT,IAAI,CAACiB,WAAW,CAACT,OAAO,CAAC;QACpC;QAEA,IAAIA,OAAO,EAAEA,OAAO,CAACU,SAAS,GAAGzC,MAAM,CAACf,KAAK;MAC/C;IACF;EACF;EAEA,MAAMyD,YAAY,GAAG/G,QAAQ,CAAC,MAAMiD,aAAa,CAACL,UAAU,GAAGD,SAAS,GAAI,YAAWO,IAAI,CAACI,KAAM,EAAC,CAAC;EAEpG,OAAO;IACLoC,OAAO;IACP9C,UAAU,EAAEK,aAAa,CAACL,UAAU;IACpCM,IAAI;IACJvB,MAAM;IACNyC,OAAO;IACPjB,cAAc;IACd4D,YAAY;IACZ1C,MAAM;IACN2C,MAAM,EAAE;MACN9D,IAAI;MACJkB;IACF;EACF,CAAC;AACH;AAEA,OAAO,SAAS6C,YAAYA,CAAEC,KAAyB,EAAE;EACvD1G,kBAAkB,CAAC,cAAc,CAAC;EAElC,MAAMa,KAAK,GAAGpB,MAAM,CAACgB,WAAW,EAAE,IAAI,CAAC;EAEvC,IAAI,CAACI,KAAK,EAAE,MAAM,IAAI8F,KAAK,CAAC,wCAAwC,CAAC;EAErE,MAAMjE,IAAI,GAAGlD,QAAQ,CAAS,MAAM;IAClC,OAAOkH,KAAK,CAAC7F,KAAK,IAAIA,KAAK,EAAE6B,IAAI,CAACI,KAAK;EACzC,CAAC,CAAC;EAEF,MAAMyD,YAAY,GAAG/G,QAAQ,CAAC,MAAMqB,KAAK,CAACuB,UAAU,GAAGD,SAAS,GAAI,YAAWO,IAAI,CAACI,KAAM,EAAC,CAAC;EAE5F,MAAM8D,QAAuB,GAAG;IAC9B,GAAG/F,KAAK;IACR6B,IAAI;IACJ6D;EACF,CAAC;EAED7G,OAAO,CAACe,WAAW,EAAEmG,QAAQ,CAAC;EAE9B,OAAOA,QAAQ;AACjB;AAEA,OAAO,SAASC,QAAQA,CAAA,EAAI;EAC1B7G,kBAAkB,CAAC,UAAU,CAAC;EAE9B,MAAMa,KAAK,GAAGpB,MAAM,CAACgB,WAAW,EAAE,IAAI,CAAC;EAEvC,IAAI,CAACI,KAAK,EAAE,MAAM,IAAI8F,KAAK,CAAC,wCAAwC,CAAC;EAErE,OAAO9F,KAAK;AACd;AAEA,SAASkD,cAAcA,CAAED,KAAe,EAAEgD,QAAgB,EAAEC,OAAiB,EAAE;EAC7EjD,KAAK,CAACS,IAAI,CACP,GAAEuC,QAAS,MAAK,EACjB,GAAGC,OAAO,CAACvC,GAAG,CAACwC,IAAI,IAAK,KAAIA,IAAK,KAAI,CAAC,EACtC,KAAK,CACN;AACH;AAEA,SAAShD,eAAeA,CAAEnD,KAA8B,EAAE;EACxD,MAAMoG,YAAY,GAAGpG,KAAK,CAACQ,IAAI,GAAG,CAAC,GAAG,CAAC;EACvC,MAAM6F,WAAW,GAAGrG,KAAK,CAACQ,IAAI,GAAG,CAAC,GAAG,CAAC;EAEtC,MAAMS,SAAmB,GAAG,EAAE;EAC9B,KAAK,MAAM,CAACO,GAAG,EAAES,KAAK,CAAC,IAAIR,MAAM,CAACC,OAAO,CAAC1B,KAAK,CAACK,MAAM,CAAC,EAAE;IACvD,MAAMiG,GAAG,GAAG9G,UAAU,CAACyC,KAAK,CAAC;IAC7BhB,SAAS,CAACyC,IAAI,CAAE,aAAYlC,GAAI,KAAI8E,GAAG,CAACC,CAAE,IAAGD,GAAG,CAACE,CAAE,IAAGF,GAAG,CAACG,CAAE,EAAC,CAAC;IAC9D,IAAI,CAACjF,GAAG,CAACkF,UAAU,CAAC,KAAK,CAAC,EAAE;MAC1BzF,SAAS,CAACyC,IAAI,CAAE,aAAYlC,GAAI,wBAAuBpC,OAAO,CAAC6C,KAAK,CAAC,GAAG,IAAI,GAAGmE,YAAY,GAAGC,WAAY,EAAC,CAAC;IAC9G;EACF;EAEA,KAAK,MAAM,CAAC7E,GAAG,EAAES,KAAK,CAAC,IAAIR,MAAM,CAACC,OAAO,CAAC1B,KAAK,CAACiB,SAAS,CAAC,EAAE;IAC1D,MAAMiB,KAAK,GAAG,OAAOD,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACyE,UAAU,CAAC,GAAG,CAAC,GAAGlH,UAAU,CAACyC,KAAK,CAAC,GAAGX,SAAS;IAChG,MAAMgF,GAAG,GAAGpE,KAAK,GAAI,GAAEA,KAAK,CAACqE,CAAE,KAAIrE,KAAK,CAACsE,CAAE,KAAItE,KAAK,CAACuE,CAAE,EAAC,GAAGnF,SAAS;IACpEL,SAAS,CAACyC,IAAI,CAAE,OAAMlC,GAAI,KAAI8E,GAAG,IAAIrE,KAAM,EAAC,CAAC;EAC/C;EAEA,OAAOhB,SAAS;AAClB"}
1
+ {"version":3,"file":"theme.mjs","names":["computed","inject","provide","ref","watch","watchEffect","createRange","darken","getCurrentInstance","getForeground","getLuma","IN_BROWSER","lighten","mergeDeep","parseColor","propsFactory","RGBtoHex","ThemeSymbol","Symbol","for","makeThemeProps","theme","String","defaultThemeOptions","defaultTheme","variations","colors","themes","light","dark","background","surface","primary","secondary","error","info","success","warning","variables","parseThemeOptions","options","arguments","length","undefined","isDisabled","key","Object","entries","createTheme","parsedOptions","name","computedThemes","acc","original","value","color","variation","fn","amount","keys","test","onColor","colorVal","current","styles","lines","createCssClass","genCssVariables","themeName","bgLines","fgLines","Set","values","flatMap","push","map","str","i","join","getHead","style","children","id","nonce","cspNonce","install","app","head","_context","provides","usehead","entry","patch","addHeadObjs","updateDOM","styleEl","document","getElementById","updateStyles","immediate","el","createElement","type","setAttribute","appendChild","innerHTML","themeClasses","global","provideTheme","props","Error","newTheme","useTheme","selector","content","line","lightOverlay","darkOverlay","rgb","r","g","b","startsWith"],"sources":["../../src/composables/theme.ts"],"sourcesContent":["// Utilities\nimport {\n computed,\n inject,\n provide,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport {\n createRange,\n darken,\n getCurrentInstance,\n getForeground,\n getLuma,\n IN_BROWSER,\n lighten,\n mergeDeep,\n parseColor,\n propsFactory,\n RGBtoHex,\n} from '@/util'\n\n// Types\nimport type { HeadClient } from '@vueuse/head'\nimport type { App, DeepReadonly, InjectionKey, Ref } from 'vue'\n\ntype DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T\n\nexport type ThemeOptions = false | {\n cspNonce?: string\n defaultTheme?: string\n variations?: false | VariationsOptions\n themes?: Record<string, ThemeDefinition>\n}\nexport type ThemeDefinition = DeepPartial<InternalThemeDefinition>\n\ninterface InternalThemeOptions {\n cspNonce?: string\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-bright': '#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 'theme-kbd': '#212529',\n 'theme-on-kbd': '#FFFFFF',\n 'theme-code': '#F5F5F5',\n 'theme-on-code': '#000000',\n },\n },\n dark: {\n dark: true,\n colors: {\n background: '#121212',\n surface: '#212121',\n 'surface-bright': '#ccbfd6',\n 'surface-variant': '#a3a3a3',\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': 1,\n 'medium-emphasis-opacity': 0.70,\n 'disabled-opacity': 0.50,\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 'theme-kbd': '#212529',\n 'theme-on-kbd': '#FFFFFF',\n 'theme-code': '#343434',\n 'theme-on-code': '#CCCCCC',\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 || key === '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 (options?: ThemeOptions): ThemeInstance & { install: (app: App) => void } {\n const parsedOptions = 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\n if (!color) continue\n\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}`] = RGBtoHex(fn(parseColor(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 = parseColor(theme.colors[color]!)\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] = getForeground(colorVal)\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 createCssClass(lines, ':root', genCssVariables(current.value))\n\n for (const [themeName, theme] of Object.entries(computedThemes.value)) {\n createCssClass(lines, `.v-theme--${themeName}`, [\n `color-scheme: ${theme.dark ? 'dark' : 'normal'}`,\n ...genCssVariables(theme),\n ])\n }\n\n const bgLines: string[] = []\n const fgLines: string[] = []\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(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`])\n } else {\n createCssClass(bgLines, `.bg-${key}`, [\n `--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`,\n `background-color: rgb(var(--v-theme-${key})) !important`,\n `color: rgb(var(--v-theme-on-${key})) !important`,\n ])\n createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`])\n createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`])\n }\n }\n\n lines.push(...bgLines, ...fgLines)\n\n return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('')\n })\n\n function getHead () {\n return {\n style: [{\n children: styles.value,\n id: 'vuetify-theme-stylesheet',\n nonce: parsedOptions.cspNonce || false as never,\n }],\n }\n }\n\n function install (app: App) {\n if (parsedOptions.isDisabled) return\n\n const head = app._context.provides.usehead as HeadClient | undefined\n if (head) {\n if (head.push) {\n const entry = head.push(getHead)\n if (IN_BROWSER) {\n watch(styles, () => { entry.patch(getHead) })\n }\n } else {\n if (IN_BROWSER) {\n head.addHeadObjs(computed(getHead))\n watchEffect(() => head.updateDOM())\n } else {\n head.addHeadObjs(getHead())\n }\n }\n } else {\n let styleEl = IN_BROWSER\n ? document.getElementById('vuetify-theme-stylesheet')\n : null\n\n if (IN_BROWSER) {\n watch(styles, updateStyles, { immediate: true })\n } else {\n updateStyles()\n }\n\n function updateStyles () {\n if (typeof document !== 'undefined' && !styleEl) {\n const el = document.createElement('style')\n el.type = 'text/css'\n el.id = 'vuetify-theme-stylesheet'\n if (parsedOptions.cspNonce) el.setAttribute('nonce', parsedOptions.cspNonce)\n\n styleEl = el\n document.head.appendChild(styleEl)\n }\n\n if (styleEl) styleEl.innerHTML = styles.value\n }\n }\n }\n\n const themeClasses = computed(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`)\n\n return {\n install,\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 const current = computed(() => theme.themes.value[name.value])\n\n const themeClasses = computed(() => theme.isDisabled ? undefined : `v-theme--${name.value}`)\n\n const newTheme: ThemeInstance = {\n ...theme,\n name,\n current,\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 = parseColor(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 for (const [key, value] of Object.entries(theme.variables)) {\n const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined\n const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined\n variables.push(`--v-${key}: ${rgb ?? value}`)\n }\n\n return variables\n}\n"],"mappings":"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"}
@@ -15,7 +15,7 @@ export const createVuetify = function () {
15
15
  ...options
16
16
  });
17
17
  };
18
- export const version = "3.3.13";
18
+ export const version = "3.3.15";
19
19
  createVuetify.version = version;
20
20
  export { components, directives };
21
21
  export * from "./composables/index.mjs";
package/lib/framework.mjs CHANGED
@@ -92,7 +92,7 @@ export function createVuetify() {
92
92
  date
93
93
  };
94
94
  }
95
- export const version = "3.3.13";
95
+ export const version = "3.3.15";
96
96
  createVuetify.version = version;
97
97
 
98
98
  // Vue's inject() can only be used in setup
package/lib/index.d.mts CHANGED
@@ -380,14 +380,14 @@ declare module '@vue/runtime-core' {
380
380
  VBtn: typeof import('vuetify/components')['VBtn']
381
381
  VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
382
382
  VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
383
- VCarousel: typeof import('vuetify/components')['VCarousel']
384
- VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
385
383
  VCard: typeof import('vuetify/components')['VCard']
386
384
  VCardActions: typeof import('vuetify/components')['VCardActions']
387
385
  VCardItem: typeof import('vuetify/components')['VCardItem']
388
386
  VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
389
387
  VCardText: typeof import('vuetify/components')['VCardText']
390
388
  VCardTitle: typeof import('vuetify/components')['VCardTitle']
389
+ VCarousel: typeof import('vuetify/components')['VCarousel']
390
+ VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
391
391
  VCheckbox: typeof import('vuetify/components')['VCheckbox']
392
392
  VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
393
393
  VChip: typeof import('vuetify/components')['VChip']
@@ -396,8 +396,8 @@ declare module '@vue/runtime-core' {
396
396
  VColorPicker: typeof import('vuetify/components')['VColorPicker']
397
397
  VCombobox: typeof import('vuetify/components')['VCombobox']
398
398
  VCounter: typeof import('vuetify/components')['VCounter']
399
- VDivider: typeof import('vuetify/components')['VDivider']
400
399
  VDialog: typeof import('vuetify/components')['VDialog']
400
+ VDivider: typeof import('vuetify/components')['VDivider']
401
401
  VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
402
402
  VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
403
403
  VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
@@ -260,7 +260,7 @@ declare const VDateInput: {
260
260
  }>;
261
261
  $root: vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string, {}>, {}, {}> | null;
262
262
  $parent: vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string, {}>, {}, {}> | null;
263
- $emit: ((event: "update:modelValue", date: readonly any[]) => void) & ((event: "update:focused", focused: boolean) => void) & ((event: "update:inputMode", inputMode: "calendar" | "keyboard") => void) & ((event: "update:displayDate", date: any) => void) & ((event: "update:viewMode", viewMode: "month" | "year") => void);
263
+ $emit: ((event: "update:modelValue", date: readonly any[]) => void) & ((event: "update:focused", focused: boolean) => void) & ((event: "update:inputMode", inputMode: "calendar" | "keyboard") => void) & ((event: "update:viewMode", viewMode: "month" | "year") => void) & ((event: "update:displayDate", date: any) => void);
264
264
  $el: any;
265
265
  $options: vue.ComponentOptionsBase<{
266
266
  flat: boolean;
@@ -1141,7 +1141,7 @@ declare const VDateRangeInput: {
1141
1141
  }>;
1142
1142
  $root: vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string, {}>, {}, {}> | null;
1143
1143
  $parent: vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string, {}>, {}, {}> | null;
1144
- $emit: ((event: "update:modelValue", date: readonly any[]) => void) & ((event: "update:focused", focused: boolean) => void) & ((event: "update:inputMode", inputMode: "calendar" | "keyboard") => void) & ((event: "update:displayDate", date: any) => void) & ((event: "update:viewMode", viewMode: "month" | "year") => void);
1144
+ $emit: ((event: "update:modelValue", date: readonly any[]) => void) & ((event: "update:focused", focused: boolean) => void) & ((event: "update:inputMode", inputMode: "calendar" | "keyboard") => void) & ((event: "update:viewMode", viewMode: "month" | "year") => void) & ((event: "update:displayDate", date: any) => void);
1145
1145
  $el: any;
1146
1146
  $options: vue.ComponentOptionsBase<{
1147
1147
  inputMode: "calendar" | "keyboard";
@@ -1,4 +1,7 @@
1
1
  import { createVNode as _createVNode, mergeProps as _mergeProps, Fragment as _Fragment } from "vue";
2
+ // @ts-nocheck
3
+ /* eslint-disable */
4
+
2
5
  // Styles
3
6
  import "./VDateCard.css";
4
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"VDateCard.mjs","names":["makeVDatePickerControlsProps","VDatePickerControls","makeVDatePickerMonthProps","VDatePickerMonth","makeVDatePickerYearsProps","VDatePickerYears","VFadeTransition","VBtn","VCard","createDatePicker","useLocale","useProxiedModel","makeTransitionProps","MaybeTransition","genericComponent","propsFactory","useRender","makeVDateCardProps","cancelText","type","String","default","okText","inputMode","hideActions","Boolean","transition","component","leaveAbsolute","VDateCard","name","props","emits","save","cancel","value","mode","setup","_ref","emit","slots","model","t","onDisplayUpdate","val","onViewModeUpdate","onSave","onCancel","cardProps","filterProps","datePickerControlsProps","datePickerMonthProps","datePickerYearsProps","hasActions","actions","_createVNode","_mergeProps","_Fragment","viewMode","$event","undefined"],"sources":["../../../src/labs/VDatePicker/VDateCard.tsx"],"sourcesContent":["// Styles\nimport './VDateCard.sass'\n\n// Components\nimport { makeVDatePickerControlsProps, VDatePickerControls } from './VDatePickerControls'\nimport { makeVDatePickerMonthProps, VDatePickerMonth } from './VDatePickerMonth'\nimport { makeVDatePickerYearsProps, VDatePickerYears } from './VDatePickerYears'\nimport { VFadeTransition } from '@/components/transitions'\nimport { VBtn } from '@/components/VBtn'\nimport { VCard } from '@/components/VCard/VCard'\n\n// Composables\nimport { createDatePicker } from './composables'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VCardSlots } from '@/components/VCard/VCard'\n\nexport const makeVDateCardProps = propsFactory({\n cancelText: {\n type: String,\n default: '$vuetify.datePicker.cancel',\n },\n okText: {\n type: String,\n default: '$vuetify.datePicker.ok',\n },\n inputMode: {\n type: String as PropType<'keyboard' | 'calendar'>,\n default: 'calendar',\n },\n hideActions: Boolean,\n\n ...makeVDatePickerControlsProps(),\n ...makeVDatePickerMonthProps(),\n ...makeVDatePickerYearsProps(),\n ...makeTransitionProps({ transition: { component: VFadeTransition, leaveAbsolute: true } }),\n}, 'VDateCard')\n\nexport const VDateCard = genericComponent<VCardSlots>()({\n name: 'VDateCard',\n\n props: makeVDateCardProps(),\n\n emits: {\n save: () => true,\n cancel: () => true,\n 'update:displayDate': (value: any) => true,\n 'update:inputMode': (value: any) => true,\n 'update:modelValue': (value: any) => true,\n 'update:viewMode': (mode: 'month' | 'year') => true,\n },\n\n setup (props, { emit, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const { t } = useLocale()\n\n createDatePicker(props)\n\n function onDisplayUpdate (val: any) {\n emit('update:displayDate', val)\n }\n\n function onViewModeUpdate (val: any) {\n emit('update:viewMode', val)\n }\n\n function onSave () {\n emit('update:modelValue', model.value)\n emit('save')\n }\n\n function onCancel () {\n emit('cancel')\n }\n\n useRender(() => {\n const [cardProps] = VCard.filterProps(props)\n const [datePickerControlsProps] = VDatePickerControls.filterProps(props)\n const [datePickerMonthProps] = VDatePickerMonth.filterProps(props)\n const [datePickerYearsProps] = VDatePickerYears.filterProps(props)\n const hasActions = !props.hideActions || !!slots.actions\n\n return (\n <VCard\n { ...cardProps }\n class=\"v-date-card\"\n >\n {{\n ...slots,\n default: () => (\n <>\n <VDatePickerControls\n { ...datePickerControlsProps }\n onUpdate:displayDate={ onDisplayUpdate }\n onUpdate:viewMode={ onViewModeUpdate }\n />\n\n <MaybeTransition transition={ props.transition }>\n { props.viewMode === 'month' ? (\n <VDatePickerMonth\n { ...datePickerMonthProps }\n v-model={ model.value }\n onUpdate:displayDate={ onDisplayUpdate }\n />\n ) : (\n <VDatePickerYears\n { ...datePickerYearsProps }\n onUpdate:displayDate={ onDisplayUpdate }\n onUpdate:viewMode={ onViewModeUpdate }\n />\n )}\n </MaybeTransition>\n </>\n ),\n actions: !hasActions ? undefined : () => (\n <>\n { slots.actions?.() ?? (\n <>\n <VBtn onClick={ onCancel } text={ t(props.cancelText) } />\n <VBtn onClick={ onSave } text={ t(props.okText) } />\n </>\n )}\n </>\n ),\n }}\n </VCard>\n )\n })\n\n return {}\n },\n})\n\nexport type VDateCard = InstanceType<typeof VDateCard>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,4BAA4B,EAAEC,mBAAmB;AAAA,SACjDC,yBAAyB,EAAEC,gBAAgB;AAAA,SAC3CC,yBAAyB,EAAEC,gBAAgB;AAAA,SAC3CC,eAAe;AAAA,SACfC,IAAI;AAAA,SACJC,KAAK,4CAEd;AAAA,SACSC,gBAAgB;AAAA,SAChBC,SAAS;AAAA,SACTC,eAAe;AAAA,SACfC,mBAAmB,EAAEC,eAAe,4CAE7C;AAAA,SACSC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,gCAElD;AAIA,OAAO,MAAMC,kBAAkB,GAAGF,YAAY,CAAC;EAC7CG,UAAU,EAAE;IACVC,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDC,MAAM,EAAE;IACNH,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDE,SAAS,EAAE;IACTJ,IAAI,EAAEC,MAA2C;IACjDC,OAAO,EAAE;EACX,CAAC;EACDG,WAAW,EAAEC,OAAO;EAEpB,GAAGzB,4BAA4B,EAAE;EACjC,GAAGE,yBAAyB,EAAE;EAC9B,GAAGE,yBAAyB,EAAE;EAC9B,GAAGQ,mBAAmB,CAAC;IAAEc,UAAU,EAAE;MAAEC,SAAS,EAAErB,eAAe;MAAEsB,aAAa,EAAE;IAAK;EAAE,CAAC;AAC5F,CAAC,EAAE,WAAW,CAAC;AAEf,OAAO,MAAMC,SAAS,GAAGf,gBAAgB,EAAc,CAAC;EACtDgB,IAAI,EAAE,WAAW;EAEjBC,KAAK,EAAEd,kBAAkB,EAAE;EAE3Be,KAAK,EAAE;IACLC,IAAI,EAAEA,CAAA,KAAM,IAAI;IAChBC,MAAM,EAAEA,CAAA,KAAM,IAAI;IAClB,oBAAoB,EAAGC,KAAU,IAAK,IAAI;IAC1C,kBAAkB,EAAGA,KAAU,IAAK,IAAI;IACxC,mBAAmB,EAAGA,KAAU,IAAK,IAAI;IACzC,iBAAiB,EAAGC,IAAsB,IAAK;EACjD,CAAC;EAEDC,KAAKA,CAAEN,KAAK,EAAAO,IAAA,EAAmB;IAAA,IAAjB;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAF,IAAA;IAC3B,MAAMG,KAAK,GAAG9B,eAAe,CAACoB,KAAK,EAAE,YAAY,CAAC;IAClD,MAAM;MAAEW;IAAE,CAAC,GAAGhC,SAAS,EAAE;IAEzBD,gBAAgB,CAACsB,KAAK,CAAC;IAEvB,SAASY,eAAeA,CAAEC,GAAQ,EAAE;MAClCL,IAAI,CAAC,oBAAoB,EAAEK,GAAG,CAAC;IACjC;IAEA,SAASC,gBAAgBA,CAAED,GAAQ,EAAE;MACnCL,IAAI,CAAC,iBAAiB,EAAEK,GAAG,CAAC;IAC9B;IAEA,SAASE,MAAMA,CAAA,EAAI;MACjBP,IAAI,CAAC,mBAAmB,EAAEE,KAAK,CAACN,KAAK,CAAC;MACtCI,IAAI,CAAC,MAAM,CAAC;IACd;IAEA,SAASQ,QAAQA,CAAA,EAAI;MACnBR,IAAI,CAAC,QAAQ,CAAC;IAChB;IAEAvB,SAAS,CAAC,MAAM;MACd,MAAM,CAACgC,SAAS,CAAC,GAAGxC,KAAK,CAACyC,WAAW,CAAClB,KAAK,CAAC;MAC5C,MAAM,CAACmB,uBAAuB,CAAC,GAAGjD,mBAAmB,CAACgD,WAAW,CAAClB,KAAK,CAAC;MACxE,MAAM,CAACoB,oBAAoB,CAAC,GAAGhD,gBAAgB,CAAC8C,WAAW,CAAClB,KAAK,CAAC;MAClE,MAAM,CAACqB,oBAAoB,CAAC,GAAG/C,gBAAgB,CAAC4C,WAAW,CAAClB,KAAK,CAAC;MAClE,MAAMsB,UAAU,GAAG,CAACtB,KAAK,CAACP,WAAW,IAAI,CAAC,CAACgB,KAAK,CAACc,OAAO;MAExD,OAAAC,YAAA,CAAA/C,KAAA,EAAAgD,WAAA,CAESR,SAAS;QAAA,SACR;MAAa;QAGjB,GAAGR,KAAK;QACRnB,OAAO,EAAEA,CAAA,KAAAkC,YAAA,CAAAE,SAAA,SAAAF,YAAA,CAAAtD,mBAAA,EAAAuD,WAAA,CAGEN,uBAAuB;UAAA,wBACLP,eAAe;UAAA,qBAClBE;QAAgB,WAAAU,YAAA,CAAA1C,eAAA;UAAA,cAGRkB,KAAK,CAACL;QAAU;UAAAL,OAAA,EAAAA,CAAA,MAC1CU,KAAK,CAAC2B,QAAQ,KAAK,OAAO,GAAAH,YAAA,CAAApD,gBAAA,EAAAqD,WAAA,CAEnBL,oBAAoB;YAAA,cACfV,KAAK,CAACN,KAAK;YAAA,uBAAAwB,MAAA,IAAXlB,KAAK,CAACN,KAAK,GAAAwB,MAAA;YAAA,wBACEhB;UAAe,YAAAY,YAAA,CAAAlD,gBAAA,EAAAmD,WAAA,CAIjCJ,oBAAoB;YAAA,wBACFT,eAAe;YAAA,qBAClBE;UAAgB,SAEvC;QAAA,IAGN;QACDS,OAAO,EAAE,CAACD,UAAU,GAAGO,SAAS,GAAG,MAAAL,YAAA,CAAAE,SAAA,SAE7BjB,KAAK,CAACc,OAAO,IAAI,IAAAC,YAAA,CAAAE,SAAA,SAAAF,YAAA,CAAAhD,IAAA;UAAA,WAECwC,QAAQ;UAAA,QAAUL,CAAC,CAACX,KAAK,CAACb,UAAU;QAAC,UAAAqC,YAAA,CAAAhD,IAAA;UAAA,WACrCuC,MAAM;UAAA,QAAUJ,CAAC,CAACX,KAAK,CAACT,MAAM;QAAC,UAElD;MAEJ;IAIT,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"VDateCard.mjs","names":["makeVDatePickerControlsProps","VDatePickerControls","makeVDatePickerMonthProps","VDatePickerMonth","makeVDatePickerYearsProps","VDatePickerYears","VFadeTransition","VBtn","VCard","createDatePicker","useLocale","useProxiedModel","makeTransitionProps","MaybeTransition","genericComponent","propsFactory","useRender","makeVDateCardProps","cancelText","type","String","default","okText","inputMode","hideActions","Boolean","transition","component","leaveAbsolute","VDateCard","name","props","emits","save","cancel","value","mode","setup","_ref","emit","slots","model","t","onDisplayUpdate","val","onViewModeUpdate","onSave","onCancel","cardProps","filterProps","datePickerControlsProps","datePickerMonthProps","datePickerYearsProps","hasActions","actions","_createVNode","_mergeProps","_Fragment","viewMode","$event","undefined"],"sources":["../../../src/labs/VDatePicker/VDateCard.tsx"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable */\n\n// Styles\nimport './VDateCard.sass'\n\n// Components\nimport { makeVDatePickerControlsProps, VDatePickerControls } from './VDatePickerControls'\nimport { makeVDatePickerMonthProps, VDatePickerMonth } from './VDatePickerMonth'\nimport { makeVDatePickerYearsProps, VDatePickerYears } from './VDatePickerYears'\nimport { VFadeTransition } from '@/components/transitions'\nimport { VBtn } from '@/components/VBtn'\nimport { VCard } from '@/components/VCard/VCard'\n\n// Composables\nimport { createDatePicker } from './composables'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VCardSlots } from '@/components/VCard/VCard'\n\nexport const makeVDateCardProps = propsFactory({\n cancelText: {\n type: String,\n default: '$vuetify.datePicker.cancel',\n },\n okText: {\n type: String,\n default: '$vuetify.datePicker.ok',\n },\n inputMode: {\n type: String as PropType<'keyboard' | 'calendar'>,\n default: 'calendar',\n },\n hideActions: Boolean,\n\n ...makeVDatePickerControlsProps(),\n ...makeVDatePickerMonthProps(),\n ...makeVDatePickerYearsProps(),\n ...makeTransitionProps({ transition: { component: VFadeTransition, leaveAbsolute: true } }),\n}, 'VDateCard')\n\nexport const VDateCard = genericComponent<VCardSlots>()({\n name: 'VDateCard',\n\n props: makeVDateCardProps(),\n\n emits: {\n save: () => true,\n cancel: () => true,\n 'update:displayDate': (value: any) => true,\n 'update:inputMode': (value: any) => true,\n 'update:modelValue': (value: any) => true,\n 'update:viewMode': (mode: 'month' | 'year') => true,\n },\n\n setup (props, { emit, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const { t } = useLocale()\n\n createDatePicker(props)\n\n function onDisplayUpdate (val: any) {\n emit('update:displayDate', val)\n }\n\n function onViewModeUpdate (val: any) {\n emit('update:viewMode', val)\n }\n\n function onSave () {\n emit('update:modelValue', model.value)\n emit('save')\n }\n\n function onCancel () {\n emit('cancel')\n }\n\n useRender(() => {\n const [cardProps] = VCard.filterProps(props)\n const [datePickerControlsProps] = VDatePickerControls.filterProps(props)\n const [datePickerMonthProps] = VDatePickerMonth.filterProps(props)\n const [datePickerYearsProps] = VDatePickerYears.filterProps(props)\n const hasActions = !props.hideActions || !!slots.actions\n\n return (\n <VCard\n { ...cardProps }\n class=\"v-date-card\"\n >\n {{\n ...slots,\n default: () => (\n <>\n <VDatePickerControls\n { ...datePickerControlsProps }\n onUpdate:displayDate={ onDisplayUpdate }\n onUpdate:viewMode={ onViewModeUpdate }\n />\n\n <MaybeTransition transition={ props.transition }>\n { props.viewMode === 'month' ? (\n <VDatePickerMonth\n { ...datePickerMonthProps }\n v-model={ model.value }\n onUpdate:displayDate={ onDisplayUpdate }\n />\n ) : (\n <VDatePickerYears\n { ...datePickerYearsProps }\n onUpdate:displayDate={ onDisplayUpdate }\n onUpdate:viewMode={ onViewModeUpdate }\n />\n )}\n </MaybeTransition>\n </>\n ),\n actions: !hasActions ? undefined : () => (\n <>\n { slots.actions?.() ?? (\n <>\n <VBtn onClick={ onCancel } text={ t(props.cancelText) } />\n <VBtn onClick={ onSave } text={ t(props.okText) } />\n </>\n )}\n </>\n ),\n }}\n </VCard>\n )\n })\n\n return {}\n },\n})\n\nexport type VDateCard = InstanceType<typeof VDateCard>\n"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AAAA,SACSA,4BAA4B,EAAEC,mBAAmB;AAAA,SACjDC,yBAAyB,EAAEC,gBAAgB;AAAA,SAC3CC,yBAAyB,EAAEC,gBAAgB;AAAA,SAC3CC,eAAe;AAAA,SACfC,IAAI;AAAA,SACJC,KAAK,4CAEd;AAAA,SACSC,gBAAgB;AAAA,SAChBC,SAAS;AAAA,SACTC,eAAe;AAAA,SACfC,mBAAmB,EAAEC,eAAe,4CAE7C;AAAA,SACSC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,gCAElD;AAIA,OAAO,MAAMC,kBAAkB,GAAGF,YAAY,CAAC;EAC7CG,UAAU,EAAE;IACVC,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDC,MAAM,EAAE;IACNH,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDE,SAAS,EAAE;IACTJ,IAAI,EAAEC,MAA2C;IACjDC,OAAO,EAAE;EACX,CAAC;EACDG,WAAW,EAAEC,OAAO;EAEpB,GAAGzB,4BAA4B,EAAE;EACjC,GAAGE,yBAAyB,EAAE;EAC9B,GAAGE,yBAAyB,EAAE;EAC9B,GAAGQ,mBAAmB,CAAC;IAAEc,UAAU,EAAE;MAAEC,SAAS,EAAErB,eAAe;MAAEsB,aAAa,EAAE;IAAK;EAAE,CAAC;AAC5F,CAAC,EAAE,WAAW,CAAC;AAEf,OAAO,MAAMC,SAAS,GAAGf,gBAAgB,EAAc,CAAC;EACtDgB,IAAI,EAAE,WAAW;EAEjBC,KAAK,EAAEd,kBAAkB,EAAE;EAE3Be,KAAK,EAAE;IACLC,IAAI,EAAEA,CAAA,KAAM,IAAI;IAChBC,MAAM,EAAEA,CAAA,KAAM,IAAI;IAClB,oBAAoB,EAAGC,KAAU,IAAK,IAAI;IAC1C,kBAAkB,EAAGA,KAAU,IAAK,IAAI;IACxC,mBAAmB,EAAGA,KAAU,IAAK,IAAI;IACzC,iBAAiB,EAAGC,IAAsB,IAAK;EACjD,CAAC;EAEDC,KAAKA,CAAEN,KAAK,EAAAO,IAAA,EAAmB;IAAA,IAAjB;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAF,IAAA;IAC3B,MAAMG,KAAK,GAAG9B,eAAe,CAACoB,KAAK,EAAE,YAAY,CAAC;IAClD,MAAM;MAAEW;IAAE,CAAC,GAAGhC,SAAS,EAAE;IAEzBD,gBAAgB,CAACsB,KAAK,CAAC;IAEvB,SAASY,eAAeA,CAAEC,GAAQ,EAAE;MAClCL,IAAI,CAAC,oBAAoB,EAAEK,GAAG,CAAC;IACjC;IAEA,SAASC,gBAAgBA,CAAED,GAAQ,EAAE;MACnCL,IAAI,CAAC,iBAAiB,EAAEK,GAAG,CAAC;IAC9B;IAEA,SAASE,MAAMA,CAAA,EAAI;MACjBP,IAAI,CAAC,mBAAmB,EAAEE,KAAK,CAACN,KAAK,CAAC;MACtCI,IAAI,CAAC,MAAM,CAAC;IACd;IAEA,SAASQ,QAAQA,CAAA,EAAI;MACnBR,IAAI,CAAC,QAAQ,CAAC;IAChB;IAEAvB,SAAS,CAAC,MAAM;MACd,MAAM,CAACgC,SAAS,CAAC,GAAGxC,KAAK,CAACyC,WAAW,CAAClB,KAAK,CAAC;MAC5C,MAAM,CAACmB,uBAAuB,CAAC,GAAGjD,mBAAmB,CAACgD,WAAW,CAAClB,KAAK,CAAC;MACxE,MAAM,CAACoB,oBAAoB,CAAC,GAAGhD,gBAAgB,CAAC8C,WAAW,CAAClB,KAAK,CAAC;MAClE,MAAM,CAACqB,oBAAoB,CAAC,GAAG/C,gBAAgB,CAAC4C,WAAW,CAAClB,KAAK,CAAC;MAClE,MAAMsB,UAAU,GAAG,CAACtB,KAAK,CAACP,WAAW,IAAI,CAAC,CAACgB,KAAK,CAACc,OAAO;MAExD,OAAAC,YAAA,CAAA/C,KAAA,EAAAgD,WAAA,CAESR,SAAS;QAAA,SACR;MAAa;QAGjB,GAAGR,KAAK;QACRnB,OAAO,EAAEA,CAAA,KAAAkC,YAAA,CAAAE,SAAA,SAAAF,YAAA,CAAAtD,mBAAA,EAAAuD,WAAA,CAGEN,uBAAuB;UAAA,wBACLP,eAAe;UAAA,qBAClBE;QAAgB,WAAAU,YAAA,CAAA1C,eAAA;UAAA,cAGRkB,KAAK,CAACL;QAAU;UAAAL,OAAA,EAAAA,CAAA,MAC1CU,KAAK,CAAC2B,QAAQ,KAAK,OAAO,GAAAH,YAAA,CAAApD,gBAAA,EAAAqD,WAAA,CAEnBL,oBAAoB;YAAA,cACfV,KAAK,CAACN,KAAK;YAAA,uBAAAwB,MAAA,IAAXlB,KAAK,CAACN,KAAK,GAAAwB,MAAA;YAAA,wBACEhB;UAAe,YAAAY,YAAA,CAAAlD,gBAAA,EAAAmD,WAAA,CAIjCJ,oBAAoB;YAAA,wBACFT,eAAe;YAAA,qBAClBE;UAAgB,SAEvC;QAAA,IAGN;QACDS,OAAO,EAAE,CAACD,UAAU,GAAGO,SAAS,GAAG,MAAAL,YAAA,CAAAE,SAAA,SAE7BjB,KAAK,CAACc,OAAO,IAAI,IAAAC,YAAA,CAAAE,SAAA,SAAAF,YAAA,CAAAhD,IAAA;UAAA,WAECwC,QAAQ;UAAA,QAAUL,CAAC,CAACX,KAAK,CAACb,UAAU;QAAC,UAAAqC,YAAA,CAAAhD,IAAA;UAAA,WACrCuC,MAAM;UAAA,QAAUJ,CAAC,CAACX,KAAK,CAACT,MAAM;QAAC,UAElD;MAEJ;IAIT,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}
@@ -86,21 +86,24 @@ export const VDatePicker = genericComponent()({
86
86
  const header = computed(() => model.value.length ? adapter.format(model.value[0], 'normalDateWithWeekday') : t(props.header));
87
87
  const headerIcon = computed(() => inputMode.value === 'calendar' ? props.keyboardIcon : props.calendarIcon);
88
88
  const headerTransition = computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`);
89
- function updateFromInput(input, index) {
90
- const {
91
- isValid,
92
- date
93
- } = adapter;
94
- if (isValid(input)) {
95
- const newModel = model.value.slice();
96
- newModel[index] = date(input);
97
- if (props.hideActions) {
98
- model.value = newModel;
99
- } else {
100
- temporaryModel.value = newModel;
101
- }
89
+ const minDate = computed(() => props.min && adapter.isValid(props.min) ? adapter.date(props.min) : null);
90
+ const maxDate = computed(() => props.max && adapter.isValid(props.max) ? adapter.date(props.max) : null);
91
+ const disabled = computed(() => {
92
+ if (!minDate.value && !maxDate.value) return false;
93
+ const targets = [];
94
+ if (minDate.value) {
95
+ const date = adapter.addDays(adapter.startOfMonth(displayDate.value), -1);
96
+ adapter.isAfter(minDate.value, date) && targets.push('prev');
102
97
  }
103
- }
98
+ if (maxDate.value) {
99
+ const date = adapter.addDays(adapter.endOfMonth(displayDate.value), 1);
100
+ adapter.isAfter(date, maxDate.value) && targets.push('next');
101
+ }
102
+ if (minDate.value?.getFullYear() === maxDate.value?.getFullYear()) {
103
+ targets.push('mode');
104
+ }
105
+ return targets;
106
+ });
104
107
  watch(model, val => {
105
108
  if (!isEqual(val, temporaryModel.value)) {
106
109
  temporaryModel.value = val;
@@ -115,6 +118,21 @@ export const VDatePicker = genericComponent()({
115
118
  isReversing.value = adapter.isBefore(val[0], oldVal[0]);
116
119
  }
117
120
  });
121
+ function updateFromInput(input, index) {
122
+ const {
123
+ isValid,
124
+ date
125
+ } = adapter;
126
+ if (isValid(input)) {
127
+ const newModel = model.value.slice();
128
+ newModel[index] = date(input);
129
+ if (props.hideActions) {
130
+ model.value = newModel;
131
+ } else {
132
+ temporaryModel.value = newModel;
133
+ }
134
+ }
135
+ }
118
136
  function onClickCancel() {
119
137
  emit('click:cancel');
120
138
  }
@@ -125,6 +143,15 @@ export const VDatePicker = genericComponent()({
125
143
  function onClickAppend() {
126
144
  inputMode.value = inputMode.value === 'calendar' ? 'keyboard' : 'calendar';
127
145
  }
146
+ function onClickNext() {
147
+ displayDate.value = adapter.addMonths(displayDate.value, 1);
148
+ }
149
+ function onClickPrev() {
150
+ displayDate.value = adapter.addMonths(displayDate.value, -1);
151
+ }
152
+ function onClickMode() {
153
+ viewMode.value = viewMode.value === 'month' ? 'year' : 'month';
154
+ }
128
155
  const headerSlotProps = computed(() => ({
129
156
  header: header.value,
130
157
  appendIcon: headerIcon.value,
@@ -146,10 +173,11 @@ export const VDatePicker = genericComponent()({
146
173
  "key": "header"
147
174
  }, headerSlotProps.value), null),
148
175
  default: () => inputMode.value === 'calendar' ? _createVNode(_Fragment, null, [_createVNode(VDatePickerControls, _mergeProps(datePickerControlsProps, {
149
- "displayDate": displayDate.value,
150
- "onUpdate:displayDate": $event => displayDate.value = $event,
151
- "viewMode": viewMode.value,
152
- "onUpdate:viewMode": $event => viewMode.value = $event
176
+ "disabled": disabled.value,
177
+ "displayDate": adapter.format(displayDate.value, 'monthAndYear'),
178
+ "onClick:next": onClickNext,
179
+ "onClick:prev": onClickPrev,
180
+ "onClick:mode": onClickMode
153
181
  }), null), _createVNode(VFadeTransition, {
154
182
  "hideOnLeave": true
155
183
  }, {
@@ -159,14 +187,16 @@ export const VDatePicker = genericComponent()({
159
187
  "modelValue": temporaryModel.value,
160
188
  "onUpdate:modelValue": $event => temporaryModel.value = $event,
161
189
  "displayDate": displayDate.value,
162
- "onUpdate:displayDate": $event => displayDate.value = $event
190
+ "min": minDate.value,
191
+ "max": maxDate.value
163
192
  }), null) : _createVNode(VDatePickerYears, _mergeProps({
164
193
  "key": "date-picker-years"
165
194
  }, datePickerYearsProps, {
166
195
  "displayDate": displayDate.value,
167
196
  "onUpdate:displayDate": $event => displayDate.value = $event,
168
- "viewMode": viewMode.value,
169
- "onUpdate:viewMode": $event => viewMode.value = $event
197
+ "min": minDate.value,
198
+ "max": maxDate.value,
199
+ "onClick:mode": onClickMode
170
200
  }), null)]
171
201
  })]) : _createVNode("div", {
172
202
  "class": "v-date-picker__input"