@vuetify/nightly 3.0.2 → 3.0.4-dev-20221208.0

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 (89) hide show
  1. package/CHANGELOG.md +15 -2
  2. package/dist/json/importMap.json +86 -86
  3. package/dist/vuetify.css +152 -154
  4. package/dist/vuetify.d.ts +395 -202
  5. package/dist/vuetify.esm.js +175 -144
  6. package/dist/vuetify.esm.js.map +1 -1
  7. package/dist/vuetify.js +175 -144
  8. package/dist/vuetify.js.map +1 -1
  9. package/dist/vuetify.min.css +2 -2
  10. package/dist/vuetify.min.js +696 -692
  11. package/dist/vuetify.min.js.map +1 -1
  12. package/lib/components/VAlert/index.d.ts +1 -1
  13. package/lib/components/VAppBar/VAppBar.mjs +2 -2
  14. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  15. package/lib/components/VAppBar/index.d.ts +275 -62
  16. package/lib/components/VAutocomplete/index.d.ts +22 -22
  17. package/lib/components/VCheckbox/VCheckbox.css +1 -1
  18. package/lib/components/VCheckbox/VCheckbox.sass +1 -1
  19. package/lib/components/VChip/VChip.mjs +14 -6
  20. package/lib/components/VChip/VChip.mjs.map +1 -1
  21. package/lib/components/VChip/index.d.ts +3 -1
  22. package/lib/components/VChipGroup/index.d.ts +1 -1
  23. package/lib/components/VColorPicker/VColorPicker.mjs +2 -2
  24. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  25. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  26. package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
  27. package/lib/components/VColorPicker/VColorPickerPreview.mjs +2 -2
  28. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  29. package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
  30. package/lib/components/VColorPicker/util/index.mjs +24 -14
  31. package/lib/components/VColorPicker/util/index.mjs.map +1 -1
  32. package/lib/components/VCombobox/index.d.ts +22 -22
  33. package/lib/components/VExpansionPanel/index.d.ts +1 -1
  34. package/lib/components/VField/index.d.ts +6 -6
  35. package/lib/components/VFileInput/index.d.ts +2 -2
  36. package/lib/components/VFooter/VFooter.mjs +1 -1
  37. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  38. package/lib/components/VGrid/VGrid.css +2 -2
  39. package/lib/components/VGrid/VGrid.sass +1 -1
  40. package/lib/components/VLazy/VLazy.mjs +2 -1
  41. package/lib/components/VLazy/VLazy.mjs.map +1 -1
  42. package/lib/components/VList/VListItem.mjs +2 -1
  43. package/lib/components/VList/VListItem.mjs.map +1 -1
  44. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +2 -2
  45. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  46. package/lib/components/VOverlay/locationStrategies.mjs +3 -1
  47. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  48. package/lib/components/VPagination/index.d.ts +1 -1
  49. package/lib/components/VProgressLinear/VProgressLinear.sass +1 -1
  50. package/lib/components/VProgressLinear/_variables.scss +1 -1
  51. package/lib/components/VRadioGroup/VRadioGroup.mjs +1 -2
  52. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  53. package/lib/components/VSelect/index.d.ts +22 -22
  54. package/lib/components/VSelectionControl/VSelectionControl.css +4 -0
  55. package/lib/components/VSelectionControl/VSelectionControl.sass +4 -0
  56. package/lib/components/VSelectionControl/index.d.ts +6 -6
  57. package/lib/components/VSnackbar/index.d.ts +4 -4
  58. package/lib/components/VSwitch/VSwitch.css +1 -1
  59. package/lib/components/VSwitch/VSwitch.sass +1 -1
  60. package/lib/components/VSystemBar/VSystemBar.css +1 -1
  61. package/lib/components/VSystemBar/_variables.scss +1 -1
  62. package/lib/components/VTabs/VTab.css +1 -3
  63. package/lib/components/VTabs/VTab.sass +1 -4
  64. package/lib/components/VTabs/VTabs.css +0 -4
  65. package/lib/components/VTabs/VTabs.sass +0 -5
  66. package/lib/components/VTextField/index.d.ts +18 -18
  67. package/lib/components/VTextarea/index.d.ts +1 -1
  68. package/lib/components/VToolbar/VToolbar.mjs +32 -22
  69. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  70. package/lib/components/VToolbar/index.d.ts +9 -8
  71. package/lib/components/index.d.ts +370 -177
  72. package/lib/components/transitions/dialog-transition.mjs +2 -2
  73. package/lib/components/transitions/dialog-transition.mjs.map +1 -1
  74. package/lib/composables/theme.mjs +7 -7
  75. package/lib/composables/theme.mjs.map +1 -1
  76. package/lib/composables/validation.mjs +1 -1
  77. package/lib/composables/validation.mjs.map +1 -1
  78. package/lib/entry-bundler.mjs +1 -1
  79. package/lib/entry-bundler.mjs.map +1 -1
  80. package/lib/framework.mjs +1 -1
  81. package/lib/framework.mjs.map +1 -1
  82. package/lib/index.d.ts +25 -25
  83. package/lib/util/color/APCA.mjs +6 -6
  84. package/lib/util/color/APCA.mjs.map +1 -1
  85. package/lib/util/color/transformSRGB.mjs +15 -7
  86. package/lib/util/color/transformSRGB.mjs.map +1 -1
  87. package/lib/util/colorUtils.mjs +64 -81
  88. package/lib/util/colorUtils.mjs.map +1 -1
  89. package/package.json +1 -1
@@ -131,8 +131,8 @@ function getDimensions(target, el) {
131
131
  const tsx = targetBox.width / elBox.width;
132
132
  const tsy = targetBox.height / elBox.height;
133
133
  const maxs = Math.max(1, tsx, tsy);
134
- const sx = tsx / maxs;
135
- const sy = tsy / maxs;
134
+ const sx = tsx / maxs || 0;
135
+ const sy = tsy / maxs || 0;
136
136
 
137
137
  // Animate elements larger than 12% of the screen area up to 1.5x slower
138
138
  const asa = elBox.width * elBox.height / (window.innerWidth * window.innerHeight);
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-transition.mjs","names":["Transition","acceleratedEasing","animate","deceleratedEasing","defineComponent","nullifyTransforms","standardEasing","VDialogTransition","name","props","target","Object","setup","slots","functions","onBeforeEnter","el","style","pointerEvents","visibility","onEnter","done","Promise","resolve","requestAnimationFrame","x","y","sx","sy","speed","getDimensions","animation","transform","opacity","duration","easing","getChildren","forEach","offset","finished","then","onAfterEnter","removeProperty","onBeforeLeave","onLeave","onAfterLeave","els","querySelector","children","targetBox","getBoundingClientRect","elBox","originX","originY","getComputedStyle","transformOrigin","split","map","v","parseFloat","anchorSide","anchorOffset","getPropertyValue","offsetX","left","width","offsetY","top","height","tsx","tsy","maxs","Math","max","asa","window","innerWidth","innerHeight","min"],"sources":["../../../src/components/transitions/dialog-transition.tsx"],"sourcesContent":["import type { PropType } from 'vue'\nimport { Transition } from 'vue'\nimport {\n acceleratedEasing,\n animate,\n deceleratedEasing,\n defineComponent,\n nullifyTransforms,\n standardEasing,\n} from '@/util'\n\nexport const VDialogTransition = defineComponent({\n name: 'VDialogTransition',\n\n props: {\n target: Object as PropType<HTMLElement>,\n },\n\n setup (props, { slots }) {\n const functions = {\n onBeforeEnter (el: Element) {\n (el as HTMLElement).style.pointerEvents = 'none'\n ;(el as HTMLElement).style.visibility = 'hidden'\n },\n async onEnter (el: Element, done: () => void) {\n await new Promise(resolve => requestAnimationFrame(resolve))\n await new Promise(resolve => requestAnimationFrame(resolve))\n ;(el as HTMLElement).style.visibility = ''\n\n const { x, y, sx, sy, speed } = getDimensions(props.target!, el as HTMLElement)\n\n const animation = animate(el, [\n { transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`, opacity: 0 },\n { transform: '' },\n ], {\n duration: 225 * speed,\n easing: deceleratedEasing,\n })\n getChildren(el)?.forEach(el => {\n animate(el, [\n { opacity: 0 },\n { opacity: 0, offset: 0.33 },\n { opacity: 1 },\n ], {\n duration: 225 * 2 * speed,\n easing: standardEasing,\n })\n })\n animation.finished.then(() => done())\n },\n onAfterEnter (el: Element) {\n (el as HTMLElement).style.removeProperty('pointer-events')\n },\n onBeforeLeave (el: Element) {\n (el as HTMLElement).style.pointerEvents = 'none'\n },\n async onLeave (el: Element, done: () => void) {\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n const { x, y, sx, sy, speed } = getDimensions(props.target!, el as HTMLElement)\n\n const animation = animate(el, [\n { transform: '' },\n { transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`, opacity: 0 },\n ], {\n duration: 125 * speed,\n easing: acceleratedEasing,\n })\n animation.finished.then(() => done())\n getChildren(el)?.forEach(el => {\n animate(el, [\n {},\n { opacity: 0, offset: 0.2 },\n { opacity: 0 },\n ], {\n duration: 125 * 2 * speed,\n easing: standardEasing,\n })\n })\n },\n onAfterLeave (el: Element) {\n (el as HTMLElement).style.removeProperty('pointer-events')\n },\n }\n\n return () => {\n return props.target\n ? (\n <Transition\n name=\"dialog-transition\"\n { ...functions }\n css={ false }\n v-slots={ slots }\n />\n )\n : <Transition name=\"dialog-transition\" v-slots={ slots } />\n }\n },\n})\n\n/** Animatable children (card, sheet, list) */\nfunction getChildren (el: Element) {\n const els = el.querySelector(':scope > .v-card, :scope > .v-sheet, :scope > .v-list')?.children\n return els && [...els]\n}\n\nfunction getDimensions (target: HTMLElement, el: HTMLElement) {\n const targetBox = target.getBoundingClientRect()\n const elBox = nullifyTransforms(el)\n const [originX, originY] = getComputedStyle(el).transformOrigin.split(' ').map(v => parseFloat(v))\n\n const [anchorSide, anchorOffset] = getComputedStyle(el).getPropertyValue('--v-overlay-anchor-origin').split(' ')\n\n let offsetX = targetBox.left + targetBox.width / 2\n if (anchorSide === 'left' || anchorOffset === 'left') {\n offsetX -= targetBox.width / 2\n } else if (anchorSide === 'right' || anchorOffset === 'right') {\n offsetX += targetBox.width / 2\n }\n\n let offsetY = targetBox.top + targetBox.height / 2\n if (anchorSide === 'top' || anchorOffset === 'top') {\n offsetY -= targetBox.height / 2\n } else if (anchorSide === 'bottom' || anchorOffset === 'bottom') {\n offsetY += targetBox.height / 2\n }\n\n const tsx = targetBox.width / elBox.width\n const tsy = targetBox.height / elBox.height\n const maxs = Math.max(1, tsx, tsy)\n const sx = tsx / maxs\n const sy = tsy / maxs\n\n // Animate elements larger than 12% of the screen area up to 1.5x slower\n const asa = (elBox.width * elBox.height) / (window.innerWidth * window.innerHeight)\n const speed = asa > 0.12\n ? Math.min(1.5, (asa - 0.12) * 10 + 1)\n : 1\n\n return {\n x: offsetX - (originX + elBox.left),\n y: offsetY - (originY + elBox.top),\n sx,\n sy,\n speed,\n }\n}\n\nexport type VDialogTransition = InstanceType<typeof VDialogTransition>\n"],"mappings":"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"}
1
+ {"version":3,"file":"dialog-transition.mjs","names":["Transition","acceleratedEasing","animate","deceleratedEasing","defineComponent","nullifyTransforms","standardEasing","VDialogTransition","name","props","target","Object","setup","slots","functions","onBeforeEnter","el","style","pointerEvents","visibility","onEnter","done","Promise","resolve","requestAnimationFrame","x","y","sx","sy","speed","getDimensions","animation","transform","opacity","duration","easing","getChildren","forEach","offset","finished","then","onAfterEnter","removeProperty","onBeforeLeave","onLeave","onAfterLeave","els","querySelector","children","targetBox","getBoundingClientRect","elBox","originX","originY","getComputedStyle","transformOrigin","split","map","v","parseFloat","anchorSide","anchorOffset","getPropertyValue","offsetX","left","width","offsetY","top","height","tsx","tsy","maxs","Math","max","asa","window","innerWidth","innerHeight","min"],"sources":["../../../src/components/transitions/dialog-transition.tsx"],"sourcesContent":["import type { PropType } from 'vue'\nimport { Transition } from 'vue'\nimport {\n acceleratedEasing,\n animate,\n deceleratedEasing,\n defineComponent,\n nullifyTransforms,\n standardEasing,\n} from '@/util'\n\nexport const VDialogTransition = defineComponent({\n name: 'VDialogTransition',\n\n props: {\n target: Object as PropType<HTMLElement>,\n },\n\n setup (props, { slots }) {\n const functions = {\n onBeforeEnter (el: Element) {\n (el as HTMLElement).style.pointerEvents = 'none'\n ;(el as HTMLElement).style.visibility = 'hidden'\n },\n async onEnter (el: Element, done: () => void) {\n await new Promise(resolve => requestAnimationFrame(resolve))\n await new Promise(resolve => requestAnimationFrame(resolve))\n ;(el as HTMLElement).style.visibility = ''\n\n const { x, y, sx, sy, speed } = getDimensions(props.target!, el as HTMLElement)\n\n const animation = animate(el, [\n { transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`, opacity: 0 },\n { transform: '' },\n ], {\n duration: 225 * speed,\n easing: deceleratedEasing,\n })\n getChildren(el)?.forEach(el => {\n animate(el, [\n { opacity: 0 },\n { opacity: 0, offset: 0.33 },\n { opacity: 1 },\n ], {\n duration: 225 * 2 * speed,\n easing: standardEasing,\n })\n })\n animation.finished.then(() => done())\n },\n onAfterEnter (el: Element) {\n (el as HTMLElement).style.removeProperty('pointer-events')\n },\n onBeforeLeave (el: Element) {\n (el as HTMLElement).style.pointerEvents = 'none'\n },\n async onLeave (el: Element, done: () => void) {\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n const { x, y, sx, sy, speed } = getDimensions(props.target!, el as HTMLElement)\n\n const animation = animate(el, [\n { transform: '' },\n { transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`, opacity: 0 },\n ], {\n duration: 125 * speed,\n easing: acceleratedEasing,\n })\n animation.finished.then(() => done())\n getChildren(el)?.forEach(el => {\n animate(el, [\n {},\n { opacity: 0, offset: 0.2 },\n { opacity: 0 },\n ], {\n duration: 125 * 2 * speed,\n easing: standardEasing,\n })\n })\n },\n onAfterLeave (el: Element) {\n (el as HTMLElement).style.removeProperty('pointer-events')\n },\n }\n\n return () => {\n return props.target\n ? (\n <Transition\n name=\"dialog-transition\"\n { ...functions }\n css={ false }\n v-slots={ slots }\n />\n )\n : <Transition name=\"dialog-transition\" v-slots={ slots } />\n }\n },\n})\n\n/** Animatable children (card, sheet, list) */\nfunction getChildren (el: Element) {\n const els = el.querySelector(':scope > .v-card, :scope > .v-sheet, :scope > .v-list')?.children\n return els && [...els]\n}\n\nfunction getDimensions (target: HTMLElement, el: HTMLElement) {\n const targetBox = target.getBoundingClientRect()\n const elBox = nullifyTransforms(el)\n const [originX, originY] = getComputedStyle(el).transformOrigin.split(' ').map(v => parseFloat(v))\n\n const [anchorSide, anchorOffset] = getComputedStyle(el).getPropertyValue('--v-overlay-anchor-origin').split(' ')\n\n let offsetX = targetBox.left + targetBox.width / 2\n if (anchorSide === 'left' || anchorOffset === 'left') {\n offsetX -= targetBox.width / 2\n } else if (anchorSide === 'right' || anchorOffset === 'right') {\n offsetX += targetBox.width / 2\n }\n\n let offsetY = targetBox.top + targetBox.height / 2\n if (anchorSide === 'top' || anchorOffset === 'top') {\n offsetY -= targetBox.height / 2\n } else if (anchorSide === 'bottom' || anchorOffset === 'bottom') {\n offsetY += targetBox.height / 2\n }\n\n const tsx = targetBox.width / elBox.width\n const tsy = targetBox.height / elBox.height\n const maxs = Math.max(1, tsx, tsy)\n const sx = tsx / maxs || 0\n const sy = tsy / maxs || 0\n\n // Animate elements larger than 12% of the screen area up to 1.5x slower\n const asa = (elBox.width * elBox.height) / (window.innerWidth * window.innerHeight)\n const speed = asa > 0.12\n ? Math.min(1.5, (asa - 0.12) * 10 + 1)\n : 1\n\n return {\n x: offsetX - (originX + elBox.left),\n y: offsetY - (originY + elBox.top),\n sx,\n sy,\n speed,\n }\n}\n\nexport type VDialogTransition = InstanceType<typeof VDialogTransition>\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  // Utilities
2
2
  import { computed, inject, provide, reactive, ref, watch, watchEffect } from 'vue';
3
- import { colorToInt, colorToRGB, createRange, darken, getCurrentInstance, getLuma, IN_BROWSER, intToHex, lighten, mergeDeep, propsFactory } from "../util/index.mjs";
3
+ import { createRange, darken, getCurrentInstance, getLuma, IN_BROWSER, lighten, mergeDeep, parseColor, propsFactory, RGBtoHex } from "../util/index.mjs";
4
4
  import { APCAcontrast } from "../util/color/APCA.mjs"; // Types
5
5
  export const ThemeSymbol = Symbol.for('vuetify:theme');
6
6
  export const makeThemeProps = propsFactory({
@@ -125,7 +125,7 @@ export function createTheme(options) {
125
125
  for (const variation of ['lighten', 'darken']) {
126
126
  const fn = variation === 'lighten' ? lighten : darken;
127
127
  for (const amount of createRange(parsedOptions.variations[variation], 1)) {
128
- theme.colors[`${name}-${variation}-${amount}`] = intToHex(fn(colorToInt(color), amount));
128
+ theme.colors[`${name}-${variation}-${amount}`] = RGBtoHex(fn(parseColor(color), amount));
129
129
  }
130
130
  }
131
131
  }
@@ -133,9 +133,9 @@ export function createTheme(options) {
133
133
  for (const color of Object.keys(theme.colors)) {
134
134
  if (/^on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue;
135
135
  const onColor = `on-${color}`;
136
- const colorVal = colorToInt(theme.colors[color]);
137
- const blackContrast = Math.abs(APCAcontrast(0, colorVal));
138
- const whiteContrast = Math.abs(APCAcontrast(0xffffff, colorVal));
136
+ const colorVal = parseColor(theme.colors[color]);
137
+ const blackContrast = Math.abs(APCAcontrast(parseColor(0), colorVal));
138
+ const whiteContrast = Math.abs(APCAcontrast(parseColor(0xffffff), colorVal));
139
139
 
140
140
  // TODO: warn about poor color selections
141
141
  // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))
@@ -165,7 +165,7 @@ export function createTheme(options) {
165
165
  } = theme;
166
166
  createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${dark ? 'dark' : 'normal'}`, ...genCssVariables(theme), ...Object.keys(variables).map(key => {
167
167
  const value = variables[key];
168
- const color = typeof value === 'string' && value.startsWith('#') ? colorToRGB(value) : undefined;
168
+ const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
169
169
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
170
170
  return `--v-${key}: ${rgb ?? value}`;
171
171
  })]);
@@ -267,7 +267,7 @@ function genCssVariables(theme) {
267
267
  const darkOverlay = theme.dark ? 1 : 2;
268
268
  const variables = [];
269
269
  for (const [key, value] of Object.entries(theme.colors)) {
270
- const rgb = colorToRGB(value);
270
+ const rgb = parseColor(value);
271
271
  variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
272
272
  if (!key.startsWith('on-')) {
273
273
  variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
@@ -1 +1 @@
1
- {"version":3,"file":"theme.mjs","names":["computed","inject","provide","reactive","ref","watch","watchEffect","colorToInt","colorToRGB","createRange","darken","getCurrentInstance","getLuma","IN_BROWSER","intToHex","lighten","mergeDeep","propsFactory","APCAcontrast","ThemeSymbol","Symbol","for","makeThemeProps","theme","String","defaultThemeOptions","defaultTheme","variations","colors","themes","light","dark","background","surface","primary","secondary","error","info","success","warning","variables","parseThemeOptions","options","isDisabled","key","Object","entries","createTheme","parsedOptions","name","computedThemes","acc","original","value","color","variation","fn","amount","keys","test","onColor","colorVal","blackContrast","Math","abs","whiteContrast","min","current","styles","lines","createCssClass","themeName","genCssVariables","map","startsWith","undefined","rgb","r","g","b","bgLines","fgLines","Set","values","flatMap","push","str","i","join","install","app","head","_context","provides","usehead","addHeadObjs","style","children","type","id","cspNonce","nonce","updateDOM","styleEl","document","getElementById","updateStyles","immediate","el","createElement","setAttribute","appendChild","innerHTML","themeClasses","global","provideTheme","props","Error","newTheme","useTheme","selector","content","line","lightOverlay","darkOverlay"],"sources":["../../src/composables/theme.ts"],"sourcesContent":["// Utilities\nimport {\n computed,\n inject,\n provide,\n reactive,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport {\n colorToInt,\n colorToRGB,\n createRange,\n darken,\n getCurrentInstance,\n getLuma,\n IN_BROWSER,\n intToHex,\n lighten,\n mergeDeep,\n propsFactory,\n} from '@/util'\nimport { APCAcontrast } from '@/util/color/APCA'\n\n// Types\nimport type { App, DeepReadonly, InjectionKey, Ref } from 'vue'\nimport type { HeadAttrs, HeadClient } from '@vueuse/head'\n\ntype DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T\n\nexport type ThemeOptions = false | {\n 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': 0.87,\n 'medium-emphasis-opacity': 0.60,\n 'disabled-opacity': 0.38,\n 'idle-opacity': 0.10,\n 'hover-opacity': 0.04,\n 'focus-opacity': 0.12,\n 'selected-opacity': 0.08,\n 'activated-opacity': 0.12,\n 'pressed-opacity': 0.16,\n 'dragged-opacity': 0.08,\n '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 = reactive(parseThemeOptions(options))\n const name = ref(parsedOptions.defaultTheme)\n const themes = ref(parsedOptions.themes)\n\n const computedThemes = computed(() => {\n const acc: Record<string, InternalThemeDefinition> = {}\n for (const [name, original] of Object.entries(themes.value)) {\n const theme: InternalThemeDefinition = acc[name] = {\n ...original,\n colors: {\n ...original.colors,\n },\n }\n\n if (parsedOptions.variations) {\n for (const name of parsedOptions.variations.colors) {\n const color = theme.colors[name]\n\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}`] = intToHex(fn(colorToInt(color), amount))\n }\n }\n }\n }\n\n for (const color of Object.keys(theme.colors)) {\n if (/^on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue\n\n const onColor = `on-${color}` as keyof OnColors\n const colorVal = colorToInt(theme.colors[color]!)\n\n const blackContrast = Math.abs(APCAcontrast(0, colorVal))\n const whiteContrast = Math.abs(APCAcontrast(0xffffff, colorVal))\n\n // TODO: warn about poor color selections\n // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))\n // const minContrast = Math.max(blackContrast, whiteContrast)\n // if (minContrast < 60) {\n // consoleInfo(`${key} theme color ${color} has poor contrast (${minContrast.toFixed()}%)`)\n // } else if (contrastAsText < 60 && !['background', 'surface'].includes(color)) {\n // consoleInfo(`${key} theme color ${color} has poor contrast as text (${contrastAsText.toFixed()}%)`)\n // }\n\n // Prefer white text if both have an acceptable contrast ratio\n theme.colors[onColor] = whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000'\n }\n }\n\n return acc\n })\n const current = computed(() => computedThemes.value[name.value])\n\n const styles = computed(() => {\n const lines: string[] = []\n\n if (current.value.dark) {\n createCssClass(lines, ':root', ['color-scheme: dark'])\n }\n\n for (const [themeName, theme] of Object.entries(computedThemes.value)) {\n const { variables, dark } = theme\n\n createCssClass(lines, `.v-theme--${themeName}`, [\n `color-scheme: ${dark ? 'dark' : 'normal'}`,\n ...genCssVariables(theme),\n ...Object.keys(variables).map(key => {\n const value = variables[key]\n const color = typeof value === 'string' && value.startsWith('#') ? colorToRGB(value) : undefined\n const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined\n\n return `--v-${key}: ${rgb ?? value}`\n }),\n ])\n }\n\n const 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: 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 install (app: App) {\n const head = app._context.provides.usehead as HeadClient | undefined\n if (head) {\n head.addHeadObjs(computed(() => {\n const style: HeadAttrs = {\n children: styles.value,\n type: 'text/css',\n id: 'vuetify-theme-stylesheet',\n }\n if (parsedOptions.cspNonce) style.nonce = parsedOptions.cspNonce\n\n return { style: [style] }\n }))\n\n if (IN_BROWSER) {\n watchEffect(() => head.updateDOM())\n }\n } else {\n let styleEl = IN_BROWSER\n ? document.getElementById('vuetify-theme-stylesheet')\n : null\n\n watch(styles, updateStyles, { immediate: true })\n\n function updateStyles () {\n if (parsedOptions.isDisabled) return\n\n if (typeof document !== 'undefined' && !styleEl) {\n const el = document.createElement('style')\n el.type = 'text/css'\n el.id = 'vuetify-theme-stylesheet'\n 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 = colorToRGB(value)\n variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`)\n if (!key.startsWith('on-')) {\n variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`)\n }\n }\n\n return variables\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"theme.mjs","names":["computed","inject","provide","reactive","ref","watch","watchEffect","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","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","themeName","genCssVariables","map","startsWith","undefined","rgb","r","g","b","bgLines","fgLines","Set","values","flatMap","push","str","i","join","install","app","head","_context","provides","usehead","addHeadObjs","style","children","type","id","cspNonce","nonce","updateDOM","styleEl","document","getElementById","updateStyles","immediate","el","createElement","setAttribute","appendChild","innerHTML","themeClasses","global","provideTheme","props","Error","newTheme","useTheme","selector","content","line","lightOverlay","darkOverlay"],"sources":["../../src/composables/theme.ts"],"sourcesContent":["// Utilities\nimport {\n computed,\n inject,\n provide,\n reactive,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport {\n 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 { App, DeepReadonly, InjectionKey, Ref } from 'vue'\nimport type { HeadAttrs, HeadClient } from '@vueuse/head'\n\ntype DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T\n\nexport type ThemeOptions = false | {\n 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': 0.87,\n 'medium-emphasis-opacity': 0.60,\n 'disabled-opacity': 0.38,\n 'idle-opacity': 0.10,\n 'hover-opacity': 0.04,\n 'focus-opacity': 0.12,\n 'selected-opacity': 0.08,\n 'activated-opacity': 0.12,\n 'pressed-opacity': 0.16,\n 'dragged-opacity': 0.08,\n '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 = reactive(parseThemeOptions(options))\n const name = ref(parsedOptions.defaultTheme)\n const themes = ref(parsedOptions.themes)\n\n const computedThemes = computed(() => {\n const acc: Record<string, InternalThemeDefinition> = {}\n for (const [name, original] of Object.entries(themes.value)) {\n const theme: InternalThemeDefinition = acc[name] = {\n ...original,\n colors: {\n ...original.colors,\n },\n }\n\n if (parsedOptions.variations) {\n for (const name of parsedOptions.variations.colors) {\n const color = theme.colors[name]\n\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 for (const [themeName, theme] of Object.entries(computedThemes.value)) {\n const { variables, dark } = theme\n\n createCssClass(lines, `.v-theme--${themeName}`, [\n `color-scheme: ${dark ? 'dark' : 'normal'}`,\n ...genCssVariables(theme),\n ...Object.keys(variables).map(key => {\n const value = variables[key]\n const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined\n const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined\n\n return `--v-${key}: ${rgb ?? value}`\n }),\n ])\n }\n\n const 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: 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 install (app: App) {\n const head = app._context.provides.usehead as HeadClient | undefined\n if (head) {\n head.addHeadObjs(computed(() => {\n const style: HeadAttrs = {\n children: styles.value,\n type: 'text/css',\n id: 'vuetify-theme-stylesheet',\n }\n if (parsedOptions.cspNonce) style.nonce = parsedOptions.cspNonce\n\n return { style: [style] }\n }))\n\n if (IN_BROWSER) {\n watchEffect(() => head.updateDOM())\n }\n } else {\n let styleEl = IN_BROWSER\n ? document.getElementById('vuetify-theme-stylesheet')\n : null\n\n watch(styles, updateStyles, { immediate: true })\n\n function updateStyles () {\n if (parsedOptions.isDisabled) return\n\n if (typeof document !== 'undefined' && !styleEl) {\n const el = document.createElement('style')\n el.type = 'text/css'\n el.id = 'vuetify-theme-stylesheet'\n 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 return variables\n}\n"],"mappings":"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"}
@@ -40,7 +40,7 @@ export function useValidation(props) {
40
40
  const isDisabled = computed(() => !!(props.disabled || form != null && form.isDisabled.value));
41
41
  const isReadonly = computed(() => !!(props.readonly || form != null && form.isReadonly.value));
42
42
  const errorMessages = computed(() => {
43
- return props.errorMessages.length ? wrapInArray(props.errorMessages) : internalErrorMessages.value;
43
+ return props.errorMessages.length ? wrapInArray(props.errorMessages.slice(0, Math.max(0, +props.maxErrors))) : internalErrorMessages.value;
44
44
  });
45
45
  const isValid = computed(() => {
46
46
  if (props.error || errorMessages.value.length) return false;
@@ -1 +1 @@
1
- {"version":3,"file":"validation.mjs","names":["useForm","useProxiedModel","useToggleScope","makeFocusProps","computed","onBeforeMount","onBeforeUnmount","onMounted","ref","unref","watch","getCurrentInstanceName","getUid","propsFactory","wrapInArray","makeValidationProps","disabled","Boolean","error","errorMessages","type","Array","String","default","maxErrors","Number","name","label","readonly","rules","modelValue","validateOn","validationValue","useValidation","props","id","model","validationModel","undefined","value","form","internalErrorMessages","isPristine","isDirty","length","isDisabled","isReadonly","isValid","isValidating","validationClasses","uid","register","validate","reset","resetValidation","unregister","update","focused","unwatch","val","results","rule","handler","result","console","warn","push"],"sources":["../../src/composables/validation.ts"],"sourcesContent":["// Composables\nimport { useForm } from '@/composables/form'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { makeFocusProps } from '@/composables/focus'\n\n// Utilities\nimport { computed, onBeforeMount, onBeforeUnmount, onMounted, ref, unref, watch } from 'vue'\nimport { getCurrentInstanceName, getUid, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport type ValidationResult = string | boolean\nexport type ValidationRule =\n | ValidationResult\n | PromiseLike<ValidationResult>\n | ((value: any) => ValidationResult)\n | ((value: any) => PromiseLike<ValidationResult>)\n\nexport interface ValidationProps {\n disabled: boolean\n error: boolean\n errorMessages: string | string[]\n focused: boolean\n maxErrors: string | number\n name: string | undefined\n label: string | undefined\n readonly: boolean\n rules: ValidationRule[]\n modelValue: any\n 'onUpdate:modelValue': ((val: any) => void) | undefined\n validateOn?: 'blur' | 'input' | 'submit'\n validationValue: any\n}\n\nexport const makeValidationProps = propsFactory({\n disabled: Boolean,\n error: Boolean,\n errorMessages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n maxErrors: {\n type: [Number, String],\n default: 1,\n },\n name: String,\n label: String,\n readonly: Boolean,\n rules: {\n type: Array as PropType<ValidationRule[]>,\n default: () => ([]),\n },\n modelValue: null,\n validateOn: String as PropType<ValidationProps['validateOn']>,\n validationValue: null,\n\n ...makeFocusProps(),\n}, 'validation')\n\nexport function useValidation (\n props: ValidationProps,\n name = getCurrentInstanceName(),\n id: MaybeRef<string | number> = getUid(),\n) {\n const model = useProxiedModel(props, 'modelValue')\n const validationModel = computed(() => props.validationValue === undefined ? model.value : props.validationValue)\n const form = useForm()\n const internalErrorMessages = ref<string[]>([])\n const isPristine = ref(true)\n const isDirty = computed(() => !!(\n wrapInArray(model.value === '' ? null : model.value).length ||\n wrapInArray(validationModel.value === '' ? null : validationModel.value).length\n ))\n const isDisabled = computed(() => !!(props.disabled || form?.isDisabled.value))\n const isReadonly = computed(() => !!(props.readonly || form?.isReadonly.value))\n const errorMessages = computed(() => {\n return props.errorMessages.length\n ? wrapInArray(props.errorMessages)\n : internalErrorMessages.value\n })\n const isValid = computed(() => {\n if (props.error || errorMessages.value.length) return false\n if (!props.rules.length) return true\n\n return isPristine.value ? null : true\n })\n const isValidating = ref(false)\n const validationClasses = computed(() => {\n return {\n [`${name}--error`]: isValid.value === false,\n [`${name}--dirty`]: isDirty.value,\n [`${name}--disabled`]: isDisabled.value,\n [`${name}--readonly`]: isReadonly.value,\n }\n })\n\n const uid = computed(() => props.name ?? unref(id))\n\n onBeforeMount(() => {\n form?.register({\n id: uid.value,\n validate,\n reset,\n resetValidation,\n })\n })\n\n onBeforeUnmount(() => {\n form?.unregister(uid.value)\n })\n\n const validateOn = computed(() => props.validateOn || form?.validateOn.value || 'input')\n\n // Set initial valid state, for inputs that might not have rules\n onMounted(() => form?.update(uid.value, isValid.value, errorMessages.value))\n\n useToggleScope(() => validateOn.value === 'input', () => {\n watch(validationModel, () => {\n if (validationModel.value != null) {\n validate()\n } else if (props.focused) {\n const unwatch = watch(() => props.focused, val => {\n if (!val) validate()\n\n unwatch()\n })\n }\n })\n })\n\n useToggleScope(() => validateOn.value === 'blur', () => {\n watch(() => props.focused, val => {\n if (!val) validate()\n })\n })\n\n watch(isValid, () => {\n form?.update(uid.value, isValid.value, errorMessages.value)\n })\n\n function reset () {\n resetValidation()\n model.value = null\n }\n\n function resetValidation () {\n isPristine.value = true\n internalErrorMessages.value = []\n }\n\n async function validate () {\n const results = []\n\n isValidating.value = true\n\n for (const rule of props.rules) {\n if (results.length >= (props.maxErrors || 1)) {\n break\n }\n\n const handler = typeof rule === 'function' ? rule : () => rule\n const result = await handler(validationModel.value)\n\n if (result === true) continue\n\n if (typeof result !== 'string') {\n // eslint-disable-next-line no-console\n console.warn(`${result} is not a valid value. Rule functions must return boolean true or a string.`)\n\n continue\n }\n\n results.push(result)\n }\n\n internalErrorMessages.value = results\n isValidating.value = false\n isPristine.value = false\n\n return internalErrorMessages.value\n }\n\n return {\n errorMessages,\n isDirty,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"validation.mjs","names":["useForm","useProxiedModel","useToggleScope","makeFocusProps","computed","onBeforeMount","onBeforeUnmount","onMounted","ref","unref","watch","getCurrentInstanceName","getUid","propsFactory","wrapInArray","makeValidationProps","disabled","Boolean","error","errorMessages","type","Array","String","default","maxErrors","Number","name","label","readonly","rules","modelValue","validateOn","validationValue","useValidation","props","id","model","validationModel","undefined","value","form","internalErrorMessages","isPristine","isDirty","length","isDisabled","isReadonly","slice","Math","max","isValid","isValidating","validationClasses","uid","register","validate","reset","resetValidation","unregister","update","focused","unwatch","val","results","rule","handler","result","console","warn","push"],"sources":["../../src/composables/validation.ts"],"sourcesContent":["// Composables\nimport { useForm } from '@/composables/form'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { makeFocusProps } from '@/composables/focus'\n\n// Utilities\nimport { computed, onBeforeMount, onBeforeUnmount, onMounted, ref, unref, watch } from 'vue'\nimport { getCurrentInstanceName, getUid, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport type ValidationResult = string | boolean\nexport type ValidationRule =\n | ValidationResult\n | PromiseLike<ValidationResult>\n | ((value: any) => ValidationResult)\n | ((value: any) => PromiseLike<ValidationResult>)\n\nexport interface ValidationProps {\n disabled: boolean\n error: boolean\n errorMessages: string | string[]\n focused: boolean\n maxErrors: string | number\n name: string | undefined\n label: string | undefined\n readonly: boolean\n rules: ValidationRule[]\n modelValue: any\n 'onUpdate:modelValue': ((val: any) => void) | undefined\n validateOn?: 'blur' | 'input' | 'submit'\n validationValue: any\n}\n\nexport const makeValidationProps = propsFactory({\n disabled: Boolean,\n error: Boolean,\n errorMessages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n maxErrors: {\n type: [Number, String],\n default: 1,\n },\n name: String,\n label: String,\n readonly: Boolean,\n rules: {\n type: Array as PropType<ValidationRule[]>,\n default: () => ([]),\n },\n modelValue: null,\n validateOn: String as PropType<ValidationProps['validateOn']>,\n validationValue: null,\n\n ...makeFocusProps(),\n}, 'validation')\n\nexport function useValidation (\n props: ValidationProps,\n name = getCurrentInstanceName(),\n id: MaybeRef<string | number> = getUid(),\n) {\n const model = useProxiedModel(props, 'modelValue')\n const validationModel = computed(() => props.validationValue === undefined ? model.value : props.validationValue)\n const form = useForm()\n const internalErrorMessages = ref<string[]>([])\n const isPristine = ref(true)\n const isDirty = computed(() => !!(\n wrapInArray(model.value === '' ? null : model.value).length ||\n wrapInArray(validationModel.value === '' ? null : validationModel.value).length\n ))\n const isDisabled = computed(() => !!(props.disabled || form?.isDisabled.value))\n const isReadonly = computed(() => !!(props.readonly || form?.isReadonly.value))\n const errorMessages = computed(() => {\n return props.errorMessages.length\n ? wrapInArray(props.errorMessages.slice(0, Math.max(0, +props.maxErrors)))\n : internalErrorMessages.value\n })\n const isValid = computed(() => {\n if (props.error || errorMessages.value.length) return false\n if (!props.rules.length) return true\n\n return isPristine.value ? null : true\n })\n const isValidating = ref(false)\n const validationClasses = computed(() => {\n return {\n [`${name}--error`]: isValid.value === false,\n [`${name}--dirty`]: isDirty.value,\n [`${name}--disabled`]: isDisabled.value,\n [`${name}--readonly`]: isReadonly.value,\n }\n })\n\n const uid = computed(() => props.name ?? unref(id))\n\n onBeforeMount(() => {\n form?.register({\n id: uid.value,\n validate,\n reset,\n resetValidation,\n })\n })\n\n onBeforeUnmount(() => {\n form?.unregister(uid.value)\n })\n\n const validateOn = computed(() => props.validateOn || form?.validateOn.value || 'input')\n\n // Set initial valid state, for inputs that might not have rules\n onMounted(() => form?.update(uid.value, isValid.value, errorMessages.value))\n\n useToggleScope(() => validateOn.value === 'input', () => {\n watch(validationModel, () => {\n if (validationModel.value != null) {\n validate()\n } else if (props.focused) {\n const unwatch = watch(() => props.focused, val => {\n if (!val) validate()\n\n unwatch()\n })\n }\n })\n })\n\n useToggleScope(() => validateOn.value === 'blur', () => {\n watch(() => props.focused, val => {\n if (!val) validate()\n })\n })\n\n watch(isValid, () => {\n form?.update(uid.value, isValid.value, errorMessages.value)\n })\n\n function reset () {\n resetValidation()\n model.value = null\n }\n\n function resetValidation () {\n isPristine.value = true\n internalErrorMessages.value = []\n }\n\n async function validate () {\n const results = []\n\n isValidating.value = true\n\n for (const rule of props.rules) {\n if (results.length >= (props.maxErrors || 1)) {\n break\n }\n\n const handler = typeof rule === 'function' ? rule : () => rule\n const result = await handler(validationModel.value)\n\n if (result === true) continue\n\n if (typeof result !== 'string') {\n // eslint-disable-next-line no-console\n console.warn(`${result} is not a valid value. Rule functions must return boolean true or a string.`)\n\n continue\n }\n\n results.push(result)\n }\n\n internalErrorMessages.value = results\n isValidating.value = false\n isPristine.value = false\n\n return internalErrorMessages.value\n }\n\n return {\n errorMessages,\n isDirty,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n }\n}\n"],"mappings":"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"}
@@ -10,7 +10,7 @@ export const createVuetify = function () {
10
10
  ...options
11
11
  });
12
12
  };
13
- export const version = "3.0.2";
13
+ export const version = "3.0.4-dev-20221208.0";
14
14
  createVuetify.version = version;
15
15
  export { components, directives };
16
16
  export * from "./composables/index.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"entry-bundler.mjs","names":["components","directives","createVuetify","_createVuetify","options","version"],"sources":["../src/entry-bundler.ts"],"sourcesContent":["import './styles/main.sass'\nimport * as components from './components'\nimport * as directives from './directives'\nimport { createVuetify as _createVuetify } from './framework'\nimport type { VuetifyOptions } from './framework'\n\nexport const createVuetify = (options: VuetifyOptions = {}) => {\n return _createVuetify({ components, directives, ...options })\n}\n\nexport const version = __VUETIFY_VERSION__\ncreateVuetify.version = version\n\nexport {\n components,\n directives,\n}\nexport * from './composables'\n"],"mappings":"AAAA;AAA2B,OACpB,KAAKA,UAAU;AAAA,OACf,KAAKC,UAAU;AAAA,SACbC,aAAa,IAAIC,cAAc;AAGxC,OAAO,MAAMD,aAAa,GAAG,YAAkC;EAAA,IAAjCE,OAAuB,uEAAG,CAAC,CAAC;EACxD,OAAOD,cAAc,CAAC;IAAEH,UAAU;IAAEC,UAAU;IAAE,GAAGG;EAAQ,CAAC,CAAC;AAC/D,CAAC;AAED,OAAO,MAAMC,OAAO,UAAsB;AAC1CH,aAAa,CAACG,OAAO,GAAGA,OAAO;AAE/B,SACEL,UAAU,EACVC,UAAU;AACX"}
1
+ {"version":3,"file":"entry-bundler.mjs","names":["components","directives","createVuetify","_createVuetify","options","version"],"sources":["../src/entry-bundler.ts"],"sourcesContent":["import './styles/main.sass'\nimport * as components from './components'\nimport * as directives from './directives'\nimport { createVuetify as _createVuetify } from './framework'\nimport type { VuetifyOptions } from './framework'\n\nexport const createVuetify = (options: VuetifyOptions = {}) => {\n return _createVuetify({ components, directives, ...options })\n}\n\nexport const version = __VUETIFY_VERSION__\ncreateVuetify.version = version\n\nexport {\n components,\n directives,\n}\nexport * from './composables'\n"],"mappings":"AAAA;AAA2B,OACpB,KAAKA,UAAU;AAAA,OACf,KAAKC,UAAU;AAAA,SACbC,aAAa,IAAIC,cAAc;AAGxC,OAAO,MAAMD,aAAa,GAAG,YAAkC;EAAA,IAAjCE,OAAuB,uEAAG,CAAC,CAAC;EACxD,OAAOD,cAAc,CAAC;IAAEH,UAAU;IAAEC,UAAU;IAAE,GAAGG;EAAQ,CAAC,CAAC;AAC/D,CAAC;AAED,OAAO,MAAMC,OAAO,yBAAsB;AAC1CH,aAAa,CAACG,OAAO,GAAGA,OAAO;AAE/B,SACEL,UAAU,EACVC,UAAU;AACX"}
package/lib/framework.mjs CHANGED
@@ -87,7 +87,7 @@ export function createVuetify() {
87
87
  locale
88
88
  };
89
89
  }
90
- export const version = "3.0.2";
90
+ export const version = "3.0.4-dev-20221208.0";
91
91
  createVuetify.version = version;
92
92
 
93
93
  // Vue's inject() can only be used in setup
@@ -1 +1 @@
1
- {"version":3,"file":"framework.mjs","names":["createDefaults","DefaultsSymbol","createDisplay","DisplaySymbol","createIcons","IconSymbol","createLocale","LocaleSymbol","createTheme","ThemeSymbol","defineComponent","getUid","IN_BROWSER","mergeDeep","nextTick","reactive","createVuetify","vuetify","blueprint","rest","options","aliases","components","directives","defaults","display","ssr","theme","icons","locale","install","app","key","directive","component","name","aliasName","provide","$nuxt","hook","update","mount","vm","reset","mixin","computed","$vuetify","inject","call","version","$","provides","parent","vnode","appContext"],"sources":["../src/framework.ts"],"sourcesContent":["// Composables\nimport { createDefaults, DefaultsSymbol } from '@/composables/defaults'\nimport { createDisplay, DisplaySymbol } from '@/composables/display'\nimport { createIcons, IconSymbol } from '@/composables/icons'\nimport { createLocale, LocaleSymbol } from '@/composables/locale'\nimport { createTheme, ThemeSymbol } from '@/composables/theme'\n\n// Utilities\nimport { defineComponent, getUid, IN_BROWSER, mergeDeep } from '@/util'\nimport { nextTick, reactive } from 'vue'\n\n// Types\nimport type { App, ComponentPublicInstance, InjectionKey } from 'vue'\nimport type { DefaultsOptions } from '@/composables/defaults'\nimport type { DisplayOptions } from '@/composables/display'\nimport type { IconOptions } from '@/composables/icons'\nimport type { LocaleOptions, RtlOptions } from '@/composables/locale'\nimport type { ThemeOptions } from '@/composables/theme'\n\nexport * from './composables'\n\nexport interface VuetifyOptions {\n aliases?: Record<string, any>\n blueprint?: Blueprint\n components?: Record<string, any>\n directives?: Record<string, any>\n defaults?: DefaultsOptions\n display?: DisplayOptions\n theme?: ThemeOptions\n icons?: IconOptions\n locale?: LocaleOptions & RtlOptions\n ssr?: boolean\n}\n\nexport interface Blueprint extends Omit<VuetifyOptions, 'blueprint'> {}\n\nexport function createVuetify (vuetify: VuetifyOptions = {}) {\n const { blueprint, ...rest } = vuetify\n const options = mergeDeep(blueprint, rest)\n const {\n aliases = {},\n components = {},\n directives = {},\n } = options\n\n const defaults = createDefaults(options.defaults)\n const display = createDisplay(options.display, options.ssr)\n const theme = createTheme(options.theme)\n const icons = createIcons(options.icons)\n const locale = createLocale(options.locale)\n\n const install = (app: App) => {\n for (const key in directives) {\n app.directive(key, directives[key])\n }\n\n for (const key in components) {\n app.component(key, components[key])\n }\n\n for (const key in aliases) {\n app.component(key, defineComponent({\n ...aliases[key],\n name: key,\n aliasName: aliases[key].name,\n }))\n }\n\n theme.install(app)\n\n app.provide(DefaultsSymbol, defaults)\n app.provide(DisplaySymbol, display)\n app.provide(ThemeSymbol, theme)\n app.provide(IconSymbol, icons)\n app.provide(LocaleSymbol, locale)\n\n if (IN_BROWSER && options.ssr) {\n if (app.$nuxt) {\n app.$nuxt.hook('app:suspense:resolve', () => {\n display.update()\n })\n } else {\n const { mount } = app\n app.mount = (...args) => {\n const vm = mount(...args)\n nextTick(() => display.update())\n app.mount = mount\n return vm\n }\n }\n }\n\n getUid.reset()\n\n app.mixin({\n computed: {\n $vuetify () {\n return reactive({\n defaults: inject.call(this, DefaultsSymbol),\n display: inject.call(this, DisplaySymbol),\n theme: inject.call(this, ThemeSymbol),\n icons: inject.call(this, IconSymbol),\n locale: inject.call(this, LocaleSymbol),\n })\n },\n },\n })\n }\n\n return {\n install,\n defaults,\n display,\n theme,\n icons,\n locale,\n }\n}\n\nexport const version = __VUETIFY_VERSION__\ncreateVuetify.version = version\n\n// Vue's inject() can only be used in setup\nfunction inject (this: ComponentPublicInstance, key: InjectionKey<any> | string) {\n const vm = this.$\n\n const provides = vm.parent?.provides ?? vm.vnode.appContext?.provides\n\n if (provides && (key as any) in provides) {\n return provides[(key as string)]\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"framework.mjs","names":["createDefaults","DefaultsSymbol","createDisplay","DisplaySymbol","createIcons","IconSymbol","createLocale","LocaleSymbol","createTheme","ThemeSymbol","defineComponent","getUid","IN_BROWSER","mergeDeep","nextTick","reactive","createVuetify","vuetify","blueprint","rest","options","aliases","components","directives","defaults","display","ssr","theme","icons","locale","install","app","key","directive","component","name","aliasName","provide","$nuxt","hook","update","mount","vm","reset","mixin","computed","$vuetify","inject","call","version","$","provides","parent","vnode","appContext"],"sources":["../src/framework.ts"],"sourcesContent":["// Composables\nimport { createDefaults, DefaultsSymbol } from '@/composables/defaults'\nimport { createDisplay, DisplaySymbol } from '@/composables/display'\nimport { createIcons, IconSymbol } from '@/composables/icons'\nimport { createLocale, LocaleSymbol } from '@/composables/locale'\nimport { createTheme, ThemeSymbol } from '@/composables/theme'\n\n// Utilities\nimport { defineComponent, getUid, IN_BROWSER, mergeDeep } from '@/util'\nimport { nextTick, reactive } from 'vue'\n\n// Types\nimport type { App, ComponentPublicInstance, InjectionKey } from 'vue'\nimport type { DefaultsOptions } from '@/composables/defaults'\nimport type { DisplayOptions } from '@/composables/display'\nimport type { IconOptions } from '@/composables/icons'\nimport type { LocaleOptions, RtlOptions } from '@/composables/locale'\nimport type { ThemeOptions } from '@/composables/theme'\n\nexport * from './composables'\n\nexport interface VuetifyOptions {\n aliases?: Record<string, any>\n blueprint?: Blueprint\n components?: Record<string, any>\n directives?: Record<string, any>\n defaults?: DefaultsOptions\n display?: DisplayOptions\n theme?: ThemeOptions\n icons?: IconOptions\n locale?: LocaleOptions & RtlOptions\n ssr?: boolean\n}\n\nexport interface Blueprint extends Omit<VuetifyOptions, 'blueprint'> {}\n\nexport function createVuetify (vuetify: VuetifyOptions = {}) {\n const { blueprint, ...rest } = vuetify\n const options = mergeDeep(blueprint, rest)\n const {\n aliases = {},\n components = {},\n directives = {},\n } = options\n\n const defaults = createDefaults(options.defaults)\n const display = createDisplay(options.display, options.ssr)\n const theme = createTheme(options.theme)\n const icons = createIcons(options.icons)\n const locale = createLocale(options.locale)\n\n const install = (app: App) => {\n for (const key in directives) {\n app.directive(key, directives[key])\n }\n\n for (const key in components) {\n app.component(key, components[key])\n }\n\n for (const key in aliases) {\n app.component(key, defineComponent({\n ...aliases[key],\n name: key,\n aliasName: aliases[key].name,\n }))\n }\n\n theme.install(app)\n\n app.provide(DefaultsSymbol, defaults)\n app.provide(DisplaySymbol, display)\n app.provide(ThemeSymbol, theme)\n app.provide(IconSymbol, icons)\n app.provide(LocaleSymbol, locale)\n\n if (IN_BROWSER && options.ssr) {\n if (app.$nuxt) {\n app.$nuxt.hook('app:suspense:resolve', () => {\n display.update()\n })\n } else {\n const { mount } = app\n app.mount = (...args) => {\n const vm = mount(...args)\n nextTick(() => display.update())\n app.mount = mount\n return vm\n }\n }\n }\n\n getUid.reset()\n\n app.mixin({\n computed: {\n $vuetify () {\n return reactive({\n defaults: inject.call(this, DefaultsSymbol),\n display: inject.call(this, DisplaySymbol),\n theme: inject.call(this, ThemeSymbol),\n icons: inject.call(this, IconSymbol),\n locale: inject.call(this, LocaleSymbol),\n })\n },\n },\n })\n }\n\n return {\n install,\n defaults,\n display,\n theme,\n icons,\n locale,\n }\n}\n\nexport const version = __VUETIFY_VERSION__\ncreateVuetify.version = version\n\n// Vue's inject() can only be used in setup\nfunction inject (this: ComponentPublicInstance, key: InjectionKey<any> | string) {\n const vm = this.$\n\n const provides = vm.parent?.provides ?? vm.vnode.appContext?.provides\n\n if (provides && (key as any) in provides) {\n return provides[(key as string)]\n }\n}\n"],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -303,9 +303,9 @@ declare module '@vue/runtime-core' {
303
303
  interface Vuetify {
304
304
  defaults: DefaultsInstance
305
305
  display: UnwrapNestedRefs<DisplayInstance>
306
- theme: ThemeInstance
306
+ theme: UnwrapNestedRefs<ThemeInstance>
307
307
  icons: IconOptions
308
- locale: LocaleInstance & RtlInstance
308
+ locale: UnwrapNestedRefs<LocaleInstance & RtlInstance>
309
309
  }
310
310
 
311
311
  export interface ComponentCustomProperties {
@@ -315,25 +315,23 @@ declare module '@vue/runtime-core' {
315
315
  export interface GlobalComponents {
316
316
  VApp: typeof import('vuetify/components')['VApp']
317
317
  VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
318
+ VForm: typeof import('vuetify/components')['VForm']
318
319
  VContainer: typeof import('vuetify/components')['VContainer']
319
320
  VCol: typeof import('vuetify/components')['VCol']
320
321
  VRow: typeof import('vuetify/components')['VRow']
321
322
  VSpacer: typeof import('vuetify/components')['VSpacer']
322
323
  VHover: typeof import('vuetify/components')['VHover']
323
- VForm: typeof import('vuetify/components')['VForm']
324
324
  VLayout: typeof import('vuetify/components')['VLayout']
325
325
  VLayoutItem: typeof import('vuetify/components')['VLayoutItem']
326
326
  VLazy: typeof import('vuetify/components')['VLazy']
327
327
  VLocaleProvider: typeof import('vuetify/components')['VLocaleProvider']
328
- VParallax: typeof import('vuetify/components')['VParallax']
329
328
  VNoSsr: typeof import('vuetify/components')['VNoSsr']
329
+ VParallax: typeof import('vuetify/components')['VParallax']
330
330
  VRadio: typeof import('vuetify/components')['VRadio']
331
331
  VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
332
332
  VResponsive: typeof import('vuetify/components')['VResponsive']
333
333
  VThemeProvider: typeof import('vuetify/components')['VThemeProvider']
334
- VAppBar: typeof import('vuetify/components')['VAppBar']
335
- VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
336
- VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
334
+ VValidation: typeof import('vuetify/components')['VValidation']
337
335
  VFabTransition: typeof import('vuetify/components')['VFabTransition']
338
336
  VDialogBottomTransition: typeof import('vuetify/components')['VDialogBottomTransition']
339
337
  VDialogTopTransition: typeof import('vuetify/components')['VDialogTopTransition']
@@ -350,17 +348,23 @@ declare module '@vue/runtime-core' {
350
348
  VExpandTransition: typeof import('vuetify/components')['VExpandTransition']
351
349
  VExpandXTransition: typeof import('vuetify/components')['VExpandXTransition']
352
350
  VDialogTransition: typeof import('vuetify/components')['VDialogTransition']
351
+ VAppBar: typeof import('vuetify/components')['VAppBar']
352
+ VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
353
+ VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
353
354
  VAlert: typeof import('vuetify/components')['VAlert']
354
355
  VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
356
+ VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
355
357
  VAvatar: typeof import('vuetify/components')['VAvatar']
356
358
  VBadge: typeof import('vuetify/components')['VBadge']
357
- VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
358
359
  VBanner: typeof import('vuetify/components')['VBanner']
359
360
  VBannerActions: typeof import('vuetify/components')['VBannerActions']
360
361
  VBannerText: typeof import('vuetify/components')['VBannerText']
361
362
  VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
362
- VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
363
+ VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
364
+ VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
365
+ VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
363
366
  VBtn: typeof import('vuetify/components')['VBtn']
367
+ VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
364
368
  VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
365
369
  VCard: typeof import('vuetify/components')['VCard']
366
370
  VCardActions: typeof import('vuetify/components')['VCardActions']
@@ -368,18 +372,18 @@ declare module '@vue/runtime-core' {
368
372
  VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
369
373
  VCardText: typeof import('vuetify/components')['VCardText']
370
374
  VCardTitle: typeof import('vuetify/components')['VCardTitle']
371
- VCheckbox: typeof import('vuetify/components')['VCheckbox']
372
- VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
373
375
  VCarousel: typeof import('vuetify/components')['VCarousel']
374
376
  VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
377
+ VCheckbox: typeof import('vuetify/components')['VCheckbox']
378
+ VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
375
379
  VChip: typeof import('vuetify/components')['VChip']
376
- VCode: typeof import('vuetify/components')['VCode']
377
380
  VChipGroup: typeof import('vuetify/components')['VChipGroup']
378
- VValidation: typeof import('vuetify/components')['VValidation']
381
+ VCode: typeof import('vuetify/components')['VCode']
379
382
  VColorPicker: typeof import('vuetify/components')['VColorPicker']
380
383
  VCombobox: typeof import('vuetify/components')['VCombobox']
381
384
  VCounter: typeof import('vuetify/components')['VCounter']
382
385
  VDialog: typeof import('vuetify/components')['VDialog']
386
+ VDivider: typeof import('vuetify/components')['VDivider']
383
387
  VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
384
388
  VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
385
389
  VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
@@ -394,12 +398,11 @@ declare module '@vue/runtime-core' {
394
398
  VLigatureIcon: typeof import('vuetify/components')['VLigatureIcon']
395
399
  VClassIcon: typeof import('vuetify/components')['VClassIcon']
396
400
  VImg: typeof import('vuetify/components')['VImg']
401
+ VInput: typeof import('vuetify/components')['VInput']
397
402
  VItemGroup: typeof import('vuetify/components')['VItemGroup']
398
403
  VItem: typeof import('vuetify/components')['VItem']
399
- VInput: typeof import('vuetify/components')['VInput']
400
404
  VKbd: typeof import('vuetify/components')['VKbd']
401
405
  VLabel: typeof import('vuetify/components')['VLabel']
402
- VDivider: typeof import('vuetify/components')['VDivider']
403
406
  VList: typeof import('vuetify/components')['VList']
404
407
  VListGroup: typeof import('vuetify/components')['VListGroup']
405
408
  VListImg: typeof import('vuetify/components')['VListImg']
@@ -410,40 +413,37 @@ declare module '@vue/runtime-core' {
410
413
  VListItemTitle: typeof import('vuetify/components')['VListItemTitle']
411
414
  VListSubheader: typeof import('vuetify/components')['VListSubheader']
412
415
  VMain: typeof import('vuetify/components')['VMain']
416
+ VMessages: typeof import('vuetify/components')['VMessages']
413
417
  VMenu: typeof import('vuetify/components')['VMenu']
414
418
  VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
415
- VMessages: typeof import('vuetify/components')['VMessages']
416
419
  VOverlay: typeof import('vuetify/components')['VOverlay']
417
420
  VPagination: typeof import('vuetify/components')['VPagination']
418
421
  VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
419
422
  VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
420
423
  VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
421
424
  VRating: typeof import('vuetify/components')['VRating']
425
+ VSelect: typeof import('vuetify/components')['VSelect']
422
426
  VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
423
427
  VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
424
- VSelect: typeof import('vuetify/components')['VSelect']
425
428
  VSheet: typeof import('vuetify/components')['VSheet']
429
+ VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
430
+ VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
426
431
  VSlider: typeof import('vuetify/components')['VSlider']
427
432
  VSnackbar: typeof import('vuetify/components')['VSnackbar']
428
433
  VSwitch: typeof import('vuetify/components')['VSwitch']
434
+ VSystemBar: typeof import('vuetify/components')['VSystemBar']
429
435
  VTabs: typeof import('vuetify/components')['VTabs']
430
436
  VTab: typeof import('vuetify/components')['VTab']
431
- VSystemBar: typeof import('vuetify/components')['VSystemBar']
432
437
  VTable: typeof import('vuetify/components')['VTable']
433
- VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
434
- VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
435
438
  VTextarea: typeof import('vuetify/components')['VTextarea']
436
439
  VTextField: typeof import('vuetify/components')['VTextField']
440
+ VTimeline: typeof import('vuetify/components')['VTimeline']
441
+ VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
437
442
  VToolbar: typeof import('vuetify/components')['VToolbar']
438
443
  VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
439
444
  VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
440
- VTimeline: typeof import('vuetify/components')['VTimeline']
441
- VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
442
445
  VTooltip: typeof import('vuetify/components')['VTooltip']
443
446
  VWindow: typeof import('vuetify/components')['VWindow']
444
447
  VWindowItem: typeof import('vuetify/components')['VWindowItem']
445
- VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
446
- VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
447
- VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
448
448
  }
449
449
  }
@@ -41,12 +41,12 @@ const loClip = 0.001; // Output clip (lint trap #2)
41
41
 
42
42
  export function APCAcontrast(text, background) {
43
43
  // Linearize sRGB
44
- const Rtxt = ((text >> 16 & 0xff) / 255) ** mainTRC;
45
- const Gtxt = ((text >> 8 & 0xff) / 255) ** mainTRC;
46
- const Btxt = ((text >> 0 & 0xff) / 255) ** mainTRC;
47
- const Rbg = ((background >> 16 & 0xff) / 255) ** mainTRC;
48
- const Gbg = ((background >> 8 & 0xff) / 255) ** mainTRC;
49
- const Bbg = ((background >> 0 & 0xff) / 255) ** mainTRC;
44
+ const Rtxt = (text.r / 255) ** mainTRC;
45
+ const Gtxt = (text.g / 255) ** mainTRC;
46
+ const Btxt = (text.b / 255) ** mainTRC;
47
+ const Rbg = (background.r / 255) ** mainTRC;
48
+ const Gbg = (background.g / 255) ** mainTRC;
49
+ const Bbg = (background.b / 255) ** mainTRC;
50
50
 
51
51
  // Apply the standard coefficients and sum to Y
52
52
  let Ytxt = Rtxt * Rco + Gtxt * Gco + Btxt * Bco;
@@ -1 +1 @@
1
- {"version":3,"file":"APCA.mjs","names":["mainTRC","Rco","Gco","Bco","normBG","normTXT","revTXT","revBG","blkThrs","blkClmp","deltaYmin","scaleBoW","scaleWoB","loConThresh","loConFactor","loConOffset","loClip","APCAcontrast","text","background","Rtxt","Gtxt","Btxt","Rbg","Gbg","Bbg","Ytxt","Ybg","Math","abs","outputContrast","SAPC"],"sources":["../../../src/util/color/APCA.ts"],"sourcesContent":["/**\n * WCAG 3.0 APCA perceptual contrast algorithm from https://github.com/Myndex/SAPC-APCA\n * @licence https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @see https://www.w3.org/WAI/GL/task-forces/silver/wiki/Visual_Contrast_of_Text_Subgroup\n */\n\n// MAGICAL NUMBERS\n\n// sRGB Conversion to Relative Luminance (Y)\n\n// Transfer Curve (aka \"Gamma\") for sRGB linearization\n// Simple power curve vs piecewise described in docs\n// Essentially, 2.4 best models actual display\n// characteristics in combination with the total method\nconst mainTRC = 2.4\n\nconst Rco = 0.2126729 // sRGB Red Coefficient (from matrix)\nconst Gco = 0.7151522 // sRGB Green Coefficient (from matrix)\nconst Bco = 0.0721750 // sRGB Blue Coefficient (from matrix)\n\n// For Finding Raw SAPC Contrast from Relative Luminance (Y)\n\n// Constants for SAPC Power Curve Exponents\n// One pair for normal text, and one for reverse\n// These are the \"beating heart\" of SAPC\nconst normBG = 0.55\nconst normTXT = 0.58\nconst revTXT = 0.57\nconst revBG = 0.62\n\n// For Clamping and Scaling Values\n\nconst blkThrs = 0.03 // Level that triggers the soft black clamp\nconst blkClmp = 1.45 // Exponent for the soft black clamp curve\nconst deltaYmin = 0.0005 // Lint trap\nconst scaleBoW = 1.25 // Scaling for dark text on light\nconst scaleWoB = 1.25 // Scaling for light text on dark\nconst loConThresh = 0.078 // Threshold for new simple offset scale\nconst loConFactor = 12.82051282051282 // = 1/0.078,\nconst loConOffset = 0.06 // The simple offset\nconst loClip = 0.001 // Output clip (lint trap #2)\n\nexport function APCAcontrast (text: number, background: number) {\n // Linearize sRGB\n const Rtxt = ((text >> 16 & 0xff) / 255) ** mainTRC\n const Gtxt = ((text >> 8 & 0xff) / 255) ** mainTRC\n const Btxt = ((text >> 0 & 0xff) / 255) ** mainTRC\n\n const Rbg = ((background >> 16 & 0xff) / 255) ** mainTRC\n const Gbg = ((background >> 8 & 0xff) / 255) ** mainTRC\n const Bbg = ((background >> 0 & 0xff) / 255) ** mainTRC\n\n // Apply the standard coefficients and sum to Y\n let Ytxt = (Rtxt * Rco) + (Gtxt * Gco) + (Btxt * Bco)\n let Ybg = (Rbg * Rco) + (Gbg * Gco) + (Bbg * Bco)\n\n // Soft clamp Y when near black.\n // Now clamping all colors to prevent crossover errors\n if (Ytxt <= blkThrs) Ytxt += (blkThrs - Ytxt) ** blkClmp\n if (Ybg <= blkThrs) Ybg += (blkThrs - Ybg) ** blkClmp\n\n // Return 0 Early for extremely low ∆Y (lint trap #1)\n if (Math.abs(Ybg - Ytxt) < deltaYmin) return 0.0\n\n // SAPC CONTRAST\n\n let outputContrast: number // For weighted final values\n if (Ybg > Ytxt) {\n // For normal polarity, black text on white\n // Calculate the SAPC contrast value and scale\n\n const SAPC = ((Ybg ** normBG) - (Ytxt ** normTXT)) * scaleBoW\n\n // NEW! SAPC SmoothScale™\n // Low Contrast Smooth Scale Rollout to prevent polarity reversal\n // and also a low clip for very low contrasts (lint trap #2)\n // much of this is for very low contrasts, less than 10\n // therefore for most reversing needs, only loConOffset is important\n outputContrast =\n (SAPC < loClip) ? 0.0\n : (SAPC < loConThresh) ? SAPC - SAPC * loConFactor * loConOffset\n : SAPC - loConOffset\n } else {\n // For reverse polarity, light text on dark\n // WoB should always return negative value.\n\n const SAPC = ((Ybg ** revBG) - (Ytxt ** revTXT)) * scaleWoB\n\n outputContrast =\n (SAPC > -loClip) ? 0.0\n : (SAPC > -loConThresh) ? SAPC - SAPC * loConFactor * loConOffset\n : SAPC + loConOffset\n }\n\n return outputContrast * 100\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"APCA.mjs","names":["mainTRC","Rco","Gco","Bco","normBG","normTXT","revTXT","revBG","blkThrs","blkClmp","deltaYmin","scaleBoW","scaleWoB","loConThresh","loConFactor","loConOffset","loClip","APCAcontrast","text","background","Rtxt","r","Gtxt","g","Btxt","b","Rbg","Gbg","Bbg","Ytxt","Ybg","Math","abs","outputContrast","SAPC"],"sources":["../../../src/util/color/APCA.ts"],"sourcesContent":["/**\n * WCAG 3.0 APCA perceptual contrast algorithm from https://github.com/Myndex/SAPC-APCA\n * @licence https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @see https://www.w3.org/WAI/GL/task-forces/silver/wiki/Visual_Contrast_of_Text_Subgroup\n */\nimport type { RGB } from '@/util'\n\n// MAGICAL NUMBERS\n\n// sRGB Conversion to Relative Luminance (Y)\n\n// Transfer Curve (aka \"Gamma\") for sRGB linearization\n// Simple power curve vs piecewise described in docs\n// Essentially, 2.4 best models actual display\n// characteristics in combination with the total method\nconst mainTRC = 2.4\n\nconst Rco = 0.2126729 // sRGB Red Coefficient (from matrix)\nconst Gco = 0.7151522 // sRGB Green Coefficient (from matrix)\nconst Bco = 0.0721750 // sRGB Blue Coefficient (from matrix)\n\n// For Finding Raw SAPC Contrast from Relative Luminance (Y)\n\n// Constants for SAPC Power Curve Exponents\n// One pair for normal text, and one for reverse\n// These are the \"beating heart\" of SAPC\nconst normBG = 0.55\nconst normTXT = 0.58\nconst revTXT = 0.57\nconst revBG = 0.62\n\n// For Clamping and Scaling Values\n\nconst blkThrs = 0.03 // Level that triggers the soft black clamp\nconst blkClmp = 1.45 // Exponent for the soft black clamp curve\nconst deltaYmin = 0.0005 // Lint trap\nconst scaleBoW = 1.25 // Scaling for dark text on light\nconst scaleWoB = 1.25 // Scaling for light text on dark\nconst loConThresh = 0.078 // Threshold for new simple offset scale\nconst loConFactor = 12.82051282051282 // = 1/0.078,\nconst loConOffset = 0.06 // The simple offset\nconst loClip = 0.001 // Output clip (lint trap #2)\n\nexport function APCAcontrast (text: RGB, background: RGB) {\n // Linearize sRGB\n const Rtxt = (text.r / 255) ** mainTRC\n const Gtxt = (text.g / 255) ** mainTRC\n const Btxt = (text.b / 255) ** mainTRC\n\n const Rbg = (background.r / 255) ** mainTRC\n const Gbg = (background.g / 255) ** mainTRC\n const Bbg = (background.b / 255) ** mainTRC\n\n // Apply the standard coefficients and sum to Y\n let Ytxt = (Rtxt * Rco) + (Gtxt * Gco) + (Btxt * Bco)\n let Ybg = (Rbg * Rco) + (Gbg * Gco) + (Bbg * Bco)\n\n // Soft clamp Y when near black.\n // Now clamping all colors to prevent crossover errors\n if (Ytxt <= blkThrs) Ytxt += (blkThrs - Ytxt) ** blkClmp\n if (Ybg <= blkThrs) Ybg += (blkThrs - Ybg) ** blkClmp\n\n // Return 0 Early for extremely low ∆Y (lint trap #1)\n if (Math.abs(Ybg - Ytxt) < deltaYmin) return 0.0\n\n // SAPC CONTRAST\n\n let outputContrast: number // For weighted final values\n if (Ybg > Ytxt) {\n // For normal polarity, black text on white\n // Calculate the SAPC contrast value and scale\n\n const SAPC = ((Ybg ** normBG) - (Ytxt ** normTXT)) * scaleBoW\n\n // NEW! SAPC SmoothScale™\n // Low Contrast Smooth Scale Rollout to prevent polarity reversal\n // and also a low clip for very low contrasts (lint trap #2)\n // much of this is for very low contrasts, less than 10\n // therefore for most reversing needs, only loConOffset is important\n outputContrast =\n (SAPC < loClip) ? 0.0\n : (SAPC < loConThresh) ? SAPC - SAPC * loConFactor * loConOffset\n : SAPC - loConOffset\n } else {\n // For reverse polarity, light text on dark\n // WoB should always return negative value.\n\n const SAPC = ((Ybg ** revBG) - (Ytxt ** revTXT)) * scaleWoB\n\n outputContrast =\n (SAPC > -loClip) ? 0.0\n : (SAPC > -loConThresh) ? SAPC - SAPC * loConFactor * loConOffset\n : SAPC + loConOffset\n }\n\n return outputContrast * 100\n}\n"],"mappings":"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"}