@vuetify/nightly 3.0.2-next-20221120.0 → 3.0.2

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 (37) hide show
  1. package/CHANGELOG.md +2 -10
  2. package/dist/json/importMap.json +110 -110
  3. package/dist/vuetify.css +3970 -3968
  4. package/dist/vuetify.d.ts +45 -45
  5. package/dist/vuetify.esm.js +42 -37
  6. package/dist/vuetify.esm.js.map +1 -1
  7. package/dist/vuetify.js +41 -36
  8. package/dist/vuetify.js.map +1 -1
  9. package/dist/vuetify.min.css +2 -2
  10. package/dist/vuetify.min.js +328 -325
  11. package/dist/vuetify.min.js.map +1 -1
  12. package/lib/components/VCard/VCardItem.mjs +1 -2
  13. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  14. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs +1 -1
  15. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs.map +1 -1
  16. package/lib/components/VOverlay/scrollStrategies.mjs +4 -0
  17. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  18. package/lib/components/VOverlay/useActivator.mjs +4 -0
  19. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  20. package/lib/components/VRating/VRating.mjs +7 -6
  21. package/lib/components/VRating/VRating.mjs.map +1 -1
  22. package/lib/components/VRating/index.d.ts +14 -14
  23. package/lib/components/VSlideGroup/VSlideGroup.css +1 -0
  24. package/lib/components/VSlideGroup/VSlideGroup.sass +1 -0
  25. package/lib/components/VToolbar/VToolbar.css +1 -0
  26. package/lib/components/VToolbar/VToolbar.sass +1 -0
  27. package/lib/components/index.d.ts +14 -14
  28. package/lib/composables/toggleScope.mjs +6 -2
  29. package/lib/composables/toggleScope.mjs.map +1 -1
  30. package/lib/entry-bundler.mjs +1 -1
  31. package/lib/entry-bundler.mjs.map +1 -1
  32. package/lib/framework.mjs +1 -1
  33. package/lib/framework.mjs.map +1 -1
  34. package/lib/index.d.ts +31 -31
  35. package/lib/util/defineComponent.mjs +8 -13
  36. package/lib/util/defineComponent.mjs.map +1 -1
  37. package/package.json +1 -1
@@ -6,8 +6,7 @@ import { VCardTitle } from "./VCardTitle.mjs";
6
6
  import { VDefaultsProvider } from "../VDefaultsProvider/index.mjs"; // Composables
7
7
  import { IconValue } from "../../composables/icons.mjs";
8
8
  import { makeDensityProps } from "../../composables/density.mjs"; // Utility
9
- import { defineComponent } from 'vue';
10
- import { useRender } from "../../util/index.mjs";
9
+ import { defineComponent, useRender } from "../../util/index.mjs";
11
10
  export const VCardItem = defineComponent({
12
11
  name: 'VCardItem',
13
12
  props: {
@@ -1 +1 @@
1
- {"version":3,"file":"VCardItem.mjs","names":["VAvatar","VCardSubtitle","VCardTitle","VDefaultsProvider","IconValue","makeDensityProps","defineComponent","useRender","VCardItem","name","props","appendAvatar","String","appendIcon","prependAvatar","prependIcon","subtitle","title","setup","slots","hasPrepend","prepend","hasAppend","append","hasTitle","hasSubtitle","density","icon","image","VIcon","default"],"sources":["../../../src/components/VCard/VCardItem.tsx"],"sourcesContent":["// Components\nimport { VAvatar } from '../VAvatar'\nimport { VCardSubtitle } from './VCardSubtitle'\nimport { VCardTitle } from './VCardTitle'\nimport { VDefaultsProvider } from '../VDefaultsProvider'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { makeDensityProps } from '@/composables/density'\n\n// Utility\nimport { defineComponent } from 'vue'\nimport { useRender } from '@/util'\n\nexport const VCardItem = defineComponent({\n name: 'VCardItem',\n\n props: {\n appendAvatar: String,\n appendIcon: IconValue,\n prependAvatar: String,\n prependIcon: IconValue,\n subtitle: String,\n title: String,\n\n ...makeDensityProps(),\n },\n\n setup (props, { slots }) {\n useRender(() => {\n const hasPrepend = !!(props.prependAvatar || props.prependIcon || slots.prepend)\n const hasAppend = !!(props.appendAvatar || props.appendIcon || slots.append)\n const hasTitle = !!(props.title || slots.title)\n const hasSubtitle = !!(props.subtitle || slots.subtitle)\n\n return (\n <div class=\"v-card-item\">\n { hasPrepend && (\n <VDefaultsProvider\n key=\"prepend\"\n defaults={{\n VAvatar: {\n density: props.density,\n icon: props.prependIcon,\n image: props.prependAvatar,\n },\n VIcon: {\n density: props.density,\n icon: props.prependIcon,\n },\n }}\n >\n <div class=\"v-card-item__prepend\">\n { slots.prepend?.() ?? (<VAvatar />) }\n </div>\n </VDefaultsProvider>\n ) }\n\n <div class=\"v-card-item__content\">\n { hasTitle && (\n <VCardTitle key=\"title\">\n { slots.title?.() ?? props.title}\n </VCardTitle>\n ) }\n\n { hasSubtitle && (\n <VCardSubtitle key=\"subtitle\">\n { slots.subtitle?.() ?? props.subtitle }\n </VCardSubtitle>\n ) }\n\n { slots.default?.() }\n </div>\n\n { hasAppend && (\n <VDefaultsProvider\n key=\"append\"\n defaults={{\n VAvatar: {\n density: props.density,\n icon: props.appendIcon,\n image: props.appendAvatar,\n },\n VIcon: {\n density: props.density,\n icon: props.appendIcon,\n },\n }}\n >\n <div class=\"v-card-item__append\">\n { slots.append?.() ?? (<VAvatar />) }\n </div>\n </VDefaultsProvider>\n ) }\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VCardItem = InstanceType<typeof VCardItem>\n"],"mappings":";AAAA;AAAA,SACSA,OAAO;AAAA,SACPC,aAAa;AAAA,SACbC,UAAU;AAAA,SACVC,iBAAiB,0CAE1B;AAAA,SACSC,SAAS;AAAA,SACTC,gBAAgB,yCAEzB;AACA,SAASC,eAAe,QAAQ,KAAK;AAAA,SAC5BC,SAAS;AAElB,OAAO,MAAMC,SAAS,GAAGF,eAAe,CAAC;EACvCG,IAAI,EAAE,WAAW;EAEjBC,KAAK,EAAE;IACLC,YAAY,EAAEC,MAAM;IACpBC,UAAU,EAAET,SAAS;IACrBU,aAAa,EAAEF,MAAM;IACrBG,WAAW,EAAEX,SAAS;IACtBY,QAAQ,EAAEJ,MAAM;IAChBK,KAAK,EAAEL,MAAM;IAEb,GAAGP,gBAAgB;EACrB,CAAC;EAEDa,KAAK,CAAER,KAAK,QAAa;IAAA,IAAX;MAAES;IAAM,CAAC;IACrBZ,SAAS,CAAC,MAAM;MAAA;MACd,MAAMa,UAAU,GAAG,CAAC,EAAEV,KAAK,CAACI,aAAa,IAAIJ,KAAK,CAACK,WAAW,IAAII,KAAK,CAACE,OAAO,CAAC;MAChF,MAAMC,SAAS,GAAG,CAAC,EAAEZ,KAAK,CAACC,YAAY,IAAID,KAAK,CAACG,UAAU,IAAIM,KAAK,CAACI,MAAM,CAAC;MAC5E,MAAMC,QAAQ,GAAG,CAAC,EAAEd,KAAK,CAACO,KAAK,IAAIE,KAAK,CAACF,KAAK,CAAC;MAC/C,MAAMQ,WAAW,GAAG,CAAC,EAAEf,KAAK,CAACM,QAAQ,IAAIG,KAAK,CAACH,QAAQ,CAAC;MAExD;QAAA,SACa;MAAa,IACpBI,UAAU;QAAA,OAEJ,SAAS;QAAA,YACH;UACRpB,OAAO,EAAE;YACP0B,OAAO,EAAEhB,KAAK,CAACgB,OAAO;YACtBC,IAAI,EAAEjB,KAAK,CAACK,WAAW;YACvBa,KAAK,EAAElB,KAAK,CAACI;UACf,CAAC;UACDe,KAAK,EAAE;YACLH,OAAO,EAAEhB,KAAK,CAACgB,OAAO;YACtBC,IAAI,EAAEjB,KAAK,CAACK;UACd;QACF;MAAC;QAAA;UAAA,SAEU;QAAsB,IAC7B,mBAAAI,KAAK,CAACE,OAAO,qBAAb,oBAAAF,KAAK,CAAY,sCAAiB;MAAA,EAGzC;QAAA,SAEU;MAAsB,IAC7BK,QAAQ;QAAA,OACQ;MAAO;QAAA,gBACnB,iBAAAL,KAAK,CAACF,KAAK,qBAAX,kBAAAE,KAAK,CAAU,KAAIT,KAAK,CAACO,KAAK;MAAA,EAEnC,EAECQ,WAAW;QAAA,OACQ;MAAU;QAAA,gBACzB,oBAAAN,KAAK,CAACH,QAAQ,qBAAd,qBAAAG,KAAK,CAAa,KAAIT,KAAK,CAACM,QAAQ;MAAA,EAEzC,oBAECG,KAAK,CAACW,OAAO,qBAAb,oBAAAX,KAAK,CAAY,IAGnBG,SAAS;QAAA,OAEH,QAAQ;QAAA,YACF;UACRtB,OAAO,EAAE;YACP0B,OAAO,EAAEhB,KAAK,CAACgB,OAAO;YACtBC,IAAI,EAAEjB,KAAK,CAACG,UAAU;YACtBe,KAAK,EAAElB,KAAK,CAACC;UACf,CAAC;UACDkB,KAAK,EAAE;YACLH,OAAO,EAAEhB,KAAK,CAACgB,OAAO;YACtBC,IAAI,EAAEjB,KAAK,CAACG;UACd;QACF;MAAC;QAAA;UAAA,SAEU;QAAqB,IAC5B,kBAAAM,KAAK,CAACI,MAAM,qBAAZ,mBAAAJ,KAAK,CAAW,sCAAiB;MAAA,EAGxC;IAGP,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"VCardItem.mjs","names":["VAvatar","VCardSubtitle","VCardTitle","VDefaultsProvider","IconValue","makeDensityProps","defineComponent","useRender","VCardItem","name","props","appendAvatar","String","appendIcon","prependAvatar","prependIcon","subtitle","title","setup","slots","hasPrepend","prepend","hasAppend","append","hasTitle","hasSubtitle","density","icon","image","VIcon","default"],"sources":["../../../src/components/VCard/VCardItem.tsx"],"sourcesContent":["// Components\nimport { VAvatar } from '../VAvatar'\nimport { VCardSubtitle } from './VCardSubtitle'\nimport { VCardTitle } from './VCardTitle'\nimport { VDefaultsProvider } from '../VDefaultsProvider'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { makeDensityProps } from '@/composables/density'\n\n// Utility\nimport { defineComponent, useRender } from '@/util'\n\nexport const VCardItem = defineComponent({\n name: 'VCardItem',\n\n props: {\n appendAvatar: String,\n appendIcon: IconValue,\n prependAvatar: String,\n prependIcon: IconValue,\n subtitle: String,\n title: String,\n\n ...makeDensityProps(),\n },\n\n setup (props, { slots }) {\n useRender(() => {\n const hasPrepend = !!(props.prependAvatar || props.prependIcon || slots.prepend)\n const hasAppend = !!(props.appendAvatar || props.appendIcon || slots.append)\n const hasTitle = !!(props.title || slots.title)\n const hasSubtitle = !!(props.subtitle || slots.subtitle)\n\n return (\n <div class=\"v-card-item\">\n { hasPrepend && (\n <VDefaultsProvider\n key=\"prepend\"\n defaults={{\n VAvatar: {\n density: props.density,\n icon: props.prependIcon,\n image: props.prependAvatar,\n },\n VIcon: {\n density: props.density,\n icon: props.prependIcon,\n },\n }}\n >\n <div class=\"v-card-item__prepend\">\n { slots.prepend?.() ?? (<VAvatar />) }\n </div>\n </VDefaultsProvider>\n ) }\n\n <div class=\"v-card-item__content\">\n { hasTitle && (\n <VCardTitle key=\"title\">\n { slots.title?.() ?? props.title}\n </VCardTitle>\n ) }\n\n { hasSubtitle && (\n <VCardSubtitle key=\"subtitle\">\n { slots.subtitle?.() ?? props.subtitle }\n </VCardSubtitle>\n ) }\n\n { slots.default?.() }\n </div>\n\n { hasAppend && (\n <VDefaultsProvider\n key=\"append\"\n defaults={{\n VAvatar: {\n density: props.density,\n icon: props.appendIcon,\n image: props.appendAvatar,\n },\n VIcon: {\n density: props.density,\n icon: props.appendIcon,\n },\n }}\n >\n <div class=\"v-card-item__append\">\n { slots.append?.() ?? (<VAvatar />) }\n </div>\n </VDefaultsProvider>\n ) }\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VCardItem = InstanceType<typeof VCardItem>\n"],"mappings":";AAAA;AAAA,SACSA,OAAO;AAAA,SACPC,aAAa;AAAA,SACbC,UAAU;AAAA,SACVC,iBAAiB,0CAE1B;AAAA,SACSC,SAAS;AAAA,SACTC,gBAAgB,yCAEzB;AAAA,SACSC,eAAe,EAAEC,SAAS;AAEnC,OAAO,MAAMC,SAAS,GAAGF,eAAe,CAAC;EACvCG,IAAI,EAAE,WAAW;EAEjBC,KAAK,EAAE;IACLC,YAAY,EAAEC,MAAM;IACpBC,UAAU,EAAET,SAAS;IACrBU,aAAa,EAAEF,MAAM;IACrBG,WAAW,EAAEX,SAAS;IACtBY,QAAQ,EAAEJ,MAAM;IAChBK,KAAK,EAAEL,MAAM;IAEb,GAAGP,gBAAgB;EACrB,CAAC;EAEDa,KAAK,CAAER,KAAK,QAAa;IAAA,IAAX;MAAES;IAAM,CAAC;IACrBZ,SAAS,CAAC,MAAM;MAAA;MACd,MAAMa,UAAU,GAAG,CAAC,EAAEV,KAAK,CAACI,aAAa,IAAIJ,KAAK,CAACK,WAAW,IAAII,KAAK,CAACE,OAAO,CAAC;MAChF,MAAMC,SAAS,GAAG,CAAC,EAAEZ,KAAK,CAACC,YAAY,IAAID,KAAK,CAACG,UAAU,IAAIM,KAAK,CAACI,MAAM,CAAC;MAC5E,MAAMC,QAAQ,GAAG,CAAC,EAAEd,KAAK,CAACO,KAAK,IAAIE,KAAK,CAACF,KAAK,CAAC;MAC/C,MAAMQ,WAAW,GAAG,CAAC,EAAEf,KAAK,CAACM,QAAQ,IAAIG,KAAK,CAACH,QAAQ,CAAC;MAExD;QAAA,SACa;MAAa,IACpBI,UAAU;QAAA,OAEJ,SAAS;QAAA,YACH;UACRpB,OAAO,EAAE;YACP0B,OAAO,EAAEhB,KAAK,CAACgB,OAAO;YACtBC,IAAI,EAAEjB,KAAK,CAACK,WAAW;YACvBa,KAAK,EAAElB,KAAK,CAACI;UACf,CAAC;UACDe,KAAK,EAAE;YACLH,OAAO,EAAEhB,KAAK,CAACgB,OAAO;YACtBC,IAAI,EAAEjB,KAAK,CAACK;UACd;QACF;MAAC;QAAA;UAAA,SAEU;QAAsB,IAC7B,mBAAAI,KAAK,CAACE,OAAO,qBAAb,oBAAAF,KAAK,CAAY,sCAAiB;MAAA,EAGzC;QAAA,SAEU;MAAsB,IAC7BK,QAAQ;QAAA,OACQ;MAAO;QAAA,gBACnB,iBAAAL,KAAK,CAACF,KAAK,qBAAX,kBAAAE,KAAK,CAAU,KAAIT,KAAK,CAACO,KAAK;MAAA,EAEnC,EAECQ,WAAW;QAAA,OACQ;MAAU;QAAA,gBACzB,oBAAAN,KAAK,CAACH,QAAQ,qBAAd,qBAAAG,KAAK,CAAa,KAAIT,KAAK,CAACM,QAAQ;MAAA,EAEzC,oBAECG,KAAK,CAACW,OAAO,qBAAb,oBAAAX,KAAK,CAAY,IAGnBG,SAAS;QAAA,OAEH,QAAQ;QAAA,YACF;UACRtB,OAAO,EAAE;YACP0B,OAAO,EAAEhB,KAAK,CAACgB,OAAO;YACtBC,IAAI,EAAEjB,KAAK,CAACG,UAAU;YACtBe,KAAK,EAAElB,KAAK,CAACC;UACf,CAAC;UACDkB,KAAK,EAAE;YACLH,OAAO,EAAEhB,KAAK,CAACgB,OAAO;YACtBC,IAAI,EAAEjB,KAAK,CAACG;UACd;QACF;MAAC;QAAA;UAAA,SAEU;QAAqB,IAC5B,kBAAAM,KAAK,CAACI,MAAM,qBAAZ,mBAAAJ,KAAK,CAAW,sCAAiB;MAAA,EAGxC;IAGP,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  // Composables
2
2
  import { provideDefaults } from "../../composables/defaults.mjs"; // Utilities
3
- import { defineComponent, toRefs } from 'vue';
3
+ import { defineComponent, toRefs } from 'vue'; // eslint-disable-line no-restricted-imports
4
4
 
5
5
  // Types
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"VDefaultsProvider.mjs","names":["provideDefaults","defineComponent","toRefs","VDefaultsProvider","name","props","defaults","Object","reset","Number","String","root","Boolean","scoped","setup","slots","default"],"sources":["../../../src/components/VDefaultsProvider/VDefaultsProvider.tsx"],"sourcesContent":["// Composables\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utilities\nimport { defineComponent, toRefs } from 'vue'\n\n// Types\nimport type { DefaultsOptions } from '@/composables/defaults'\nimport type { PropType } from 'vue'\n\nexport const VDefaultsProvider = defineComponent({\n name: 'VDefaultsProvider',\n\n props: {\n defaults: Object as PropType<DefaultsOptions>,\n reset: [Number, String],\n root: Boolean,\n scoped: Boolean,\n },\n\n setup (props, { slots }) {\n const { defaults, reset, root, scoped } = toRefs(props)\n\n provideDefaults(defaults, {\n reset,\n root,\n scoped,\n })\n\n return () => slots.default?.()\n },\n})\n\nexport type VDefaultsProvider = InstanceType<typeof VDefaultsProvider>\n"],"mappings":"AAAA;AAAA,SACSA,eAAe,0CAExB;AACA,SAASC,eAAe,EAAEC,MAAM,QAAQ,KAAK;;AAE7C;;AAIA,OAAO,MAAMC,iBAAiB,GAAGF,eAAe,CAAC;EAC/CG,IAAI,EAAE,mBAAmB;EAEzBC,KAAK,EAAE;IACLC,QAAQ,EAAEC,MAAmC;IAC7CC,KAAK,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;IACvBC,IAAI,EAAEC,OAAO;IACbC,MAAM,EAAED;EACV,CAAC;EAEDE,KAAK,CAAET,KAAK,QAAa;IAAA,IAAX;MAAEU;IAAM,CAAC;IACrB,MAAM;MAAET,QAAQ;MAAEE,KAAK;MAAEG,IAAI;MAAEE;IAAO,CAAC,GAAGX,MAAM,CAACG,KAAK,CAAC;IAEvDL,eAAe,CAACM,QAAQ,EAAE;MACxBE,KAAK;MACLG,IAAI;MACJE;IACF,CAAC,CAAC;IAEF,OAAO;MAAA;MAAA,yBAAME,KAAK,CAACC,OAAO,qBAAb,oBAAAD,KAAK,CAAY;IAAA;EAChC;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"VDefaultsProvider.mjs","names":["provideDefaults","defineComponent","toRefs","VDefaultsProvider","name","props","defaults","Object","reset","Number","String","root","Boolean","scoped","setup","slots","default"],"sources":["../../../src/components/VDefaultsProvider/VDefaultsProvider.tsx"],"sourcesContent":["// Composables\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utilities\nimport { defineComponent, toRefs } from 'vue' // eslint-disable-line no-restricted-imports\n\n// Types\nimport type { DefaultsOptions } from '@/composables/defaults'\nimport type { PropType } from 'vue'\n\nexport const VDefaultsProvider = defineComponent({\n name: 'VDefaultsProvider',\n\n props: {\n defaults: Object as PropType<DefaultsOptions>,\n reset: [Number, String],\n root: Boolean,\n scoped: Boolean,\n },\n\n setup (props, { slots }) {\n const { defaults, reset, root, scoped } = toRefs(props)\n\n provideDefaults(defaults, {\n reset,\n root,\n scoped,\n })\n\n return () => slots.default?.()\n },\n})\n\nexport type VDefaultsProvider = InstanceType<typeof VDefaultsProvider>\n"],"mappings":"AAAA;AAAA,SACSA,eAAe,0CAExB;AACA,SAASC,eAAe,EAAEC,MAAM,QAAQ,KAAK,EAAC;;AAE9C;;AAIA,OAAO,MAAMC,iBAAiB,GAAGF,eAAe,CAAC;EAC/CG,IAAI,EAAE,mBAAmB;EAEzBC,KAAK,EAAE;IACLC,QAAQ,EAAEC,MAAmC;IAC7CC,KAAK,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;IACvBC,IAAI,EAAEC,OAAO;IACbC,MAAM,EAAED;EACV,CAAC;EAEDE,KAAK,CAAET,KAAK,QAAa;IAAA,IAAX;MAAEU;IAAM,CAAC;IACrB,MAAM;MAAET,QAAQ;MAAEE,KAAK;MAAEG,IAAI;MAAEE;IAAO,CAAC,GAAGX,MAAM,CAACG,KAAK,CAAC;IAEvDL,eAAe,CAACM,QAAQ,EAAE;MACxBE,KAAK;MACLG,IAAI;MACJE;IACF,CAAC,CAAC;IAEF,OAAO;MAAA;MAAA,yBAAME,KAAK,CAACC,OAAO,qBAAb,oBAAAD,KAAK,CAAY;IAAA;EAChC;AACF,CAAC,CAAC"}
@@ -33,6 +33,10 @@ export function useScrollStrategies(props, data) {
33
33
  }
34
34
  });
35
35
  });
36
+ onScopeDispose(() => {
37
+ var _scope2;
38
+ (_scope2 = scope) == null ? void 0 : _scope2.stop();
39
+ });
36
40
  }
37
41
  function closeScrollStrategy(data) {
38
42
  function onScroll(e) {
@@ -1 +1 @@
1
- {"version":3,"file":"scrollStrategies.mjs","names":["convertToUnit","getScrollParents","hasScrollbar","IN_BROWSER","propsFactory","effectScope","nextTick","onScopeDispose","watchEffect","requestNewFrame","scrollStrategies","none","close","closeScrollStrategy","block","blockScrollStrategy","reposition","repositionScrollStrategy","makeScrollStrategyProps","scrollStrategy","type","String","Function","default","validator","val","useScrollStrategies","props","data","scope","stop","isActive","value","run","onScroll","e","bindScroll","activatorEl","contentEl","offsetParent","root","scrollElements","Set","contained","undefined","filter","el","classList","contains","scrollbarWidth","window","innerWidth","document","documentElement","offsetWidth","scrollableParent","add","forEach","i","style","setProperty","scrollLeft","scrollTop","x","parseFloat","getPropertyValue","y","removeProperty","remove","slow","raf","update","start","performance","now","updateLocation","time","cancelAnimationFrame","requestAnimationFrame","addEventListener","passive","removeEventListener"],"sources":["../../../src/components/VOverlay/scrollStrategies.ts"],"sourcesContent":["// Utilities\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, propsFactory } from '@/util'\nimport { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\n\nexport interface ScrollStrategyData {\n root: Ref<HTMLElement | undefined>\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n updateLocation: Ref<((e: Event) => void) | undefined>\n}\n\ntype ScrollStrategyFn = (data: ScrollStrategyData, props: StrategyProps) => void\n\nconst scrollStrategies = {\n none: null,\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n}\n\nexport interface StrategyProps {\n scrollStrategy: keyof typeof scrollStrategies | ScrollStrategyFn\n contained: boolean | undefined\n}\n\nexport const makeScrollStrategyProps = propsFactory({\n scrollStrategy: {\n type: [String, Function] as PropType<StrategyProps['scrollStrategy']>,\n default: 'block',\n validator: (val: any) => typeof val === 'function' || val in scrollStrategies,\n },\n}, 'v-overlay-scroll-strategies')\n\nexport function useScrollStrategies (\n props: StrategyProps,\n data: ScrollStrategyData\n) {\n if (!IN_BROWSER) return\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n\n if (!(data.isActive.value && props.scrollStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.run(() => {\n if (typeof props.scrollStrategy === 'function') {\n props.scrollStrategy(data, props)\n } else {\n scrollStrategies[props.scrollStrategy]?.(data, props)\n }\n })\n })\n}\n\nfunction closeScrollStrategy (data: ScrollStrategyData) {\n function onScroll (e: Event) {\n data.isActive.value = false\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll)\n}\n\nfunction blockScrollStrategy (data: ScrollStrategyData, props: StrategyProps) {\n const offsetParent = data.root.value?.offsetParent\n const scrollElements = [...new Set([\n ...getScrollParents(data.activatorEl.value, props.contained ? offsetParent : undefined),\n ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined),\n ])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'))\n const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth\n\n const scrollableParent = (el => hasScrollbar(el) && el)(offsetParent || document.documentElement)\n if (scrollableParent) {\n data.root.value!.classList.add('v-overlay--scroll-blocked')\n }\n\n scrollElements.forEach((el, i) => {\n el.style.setProperty('--v-body-scroll-x', convertToUnit(-el.scrollLeft))\n el.style.setProperty('--v-body-scroll-y', convertToUnit(-el.scrollTop))\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n el.classList.add('v-overlay-scroll-blocked')\n })\n\n onScopeDispose(() => {\n scrollElements.forEach((el, i) => {\n const x = parseFloat(el.style.getPropertyValue('--v-body-scroll-x'))\n const y = parseFloat(el.style.getPropertyValue('--v-body-scroll-y'))\n\n el.style.removeProperty('--v-body-scroll-x')\n el.style.removeProperty('--v-body-scroll-y')\n el.style.removeProperty('--v-scrollbar-offset')\n el.classList.remove('v-overlay-scroll-blocked')\n\n el.scrollLeft = -x\n el.scrollTop = -y\n })\n if (scrollableParent) {\n data.root.value!.classList.remove('v-overlay--scroll-blocked')\n }\n })\n}\n\nfunction repositionScrollStrategy (data: ScrollStrategyData) {\n let slow = false\n let raf = -1\n\n function update (e: Event) {\n requestNewFrame(() => {\n const start = performance.now()\n data.updateLocation.value?.(e)\n const time = performance.now() - start\n slow = time / (1000 / 60) > 2\n })\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {\n if (slow) {\n // If the position calculation is slow,\n // defer updates until scrolling is finished.\n // Browsers usually fire one scroll event per frame so\n // we just wait until we've got two frames without an event\n cancelAnimationFrame(raf)\n raf = requestAnimationFrame(() => {\n raf = requestAnimationFrame(() => {\n update(e)\n })\n })\n } else {\n update(e)\n }\n })\n}\n\n/** @private */\nfunction bindScroll (el: HTMLElement | undefined, onScroll: (e: Event) => void) {\n const scrollElements = [document, ...getScrollParents(el)]\n scrollElements.forEach(el => {\n el.addEventListener('scroll', onScroll, { passive: true })\n })\n\n onScopeDispose(() => {\n scrollElements.forEach(el => {\n el.removeEventListener('scroll', onScroll)\n })\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"scrollStrategies.mjs","names":["convertToUnit","getScrollParents","hasScrollbar","IN_BROWSER","propsFactory","effectScope","nextTick","onScopeDispose","watchEffect","requestNewFrame","scrollStrategies","none","close","closeScrollStrategy","block","blockScrollStrategy","reposition","repositionScrollStrategy","makeScrollStrategyProps","scrollStrategy","type","String","Function","default","validator","val","useScrollStrategies","props","data","scope","stop","isActive","value","run","onScroll","e","bindScroll","activatorEl","contentEl","offsetParent","root","scrollElements","Set","contained","undefined","filter","el","classList","contains","scrollbarWidth","window","innerWidth","document","documentElement","offsetWidth","scrollableParent","add","forEach","i","style","setProperty","scrollLeft","scrollTop","x","parseFloat","getPropertyValue","y","removeProperty","remove","slow","raf","update","start","performance","now","updateLocation","time","cancelAnimationFrame","requestAnimationFrame","addEventListener","passive","removeEventListener"],"sources":["../../../src/components/VOverlay/scrollStrategies.ts"],"sourcesContent":["// Utilities\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, propsFactory } from '@/util'\nimport { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\n\nexport interface ScrollStrategyData {\n root: Ref<HTMLElement | undefined>\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n updateLocation: Ref<((e: Event) => void) | undefined>\n}\n\ntype ScrollStrategyFn = (data: ScrollStrategyData, props: StrategyProps) => void\n\nconst scrollStrategies = {\n none: null,\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n}\n\nexport interface StrategyProps {\n scrollStrategy: keyof typeof scrollStrategies | ScrollStrategyFn\n contained: boolean | undefined\n}\n\nexport const makeScrollStrategyProps = propsFactory({\n scrollStrategy: {\n type: [String, Function] as PropType<StrategyProps['scrollStrategy']>,\n default: 'block',\n validator: (val: any) => typeof val === 'function' || val in scrollStrategies,\n },\n}, 'v-overlay-scroll-strategies')\n\nexport function useScrollStrategies (\n props: StrategyProps,\n data: ScrollStrategyData\n) {\n if (!IN_BROWSER) return\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n\n if (!(data.isActive.value && props.scrollStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.run(() => {\n if (typeof props.scrollStrategy === 'function') {\n props.scrollStrategy(data, props)\n } else {\n scrollStrategies[props.scrollStrategy]?.(data, props)\n }\n })\n })\n\n onScopeDispose(() => {\n scope?.stop()\n })\n}\n\nfunction closeScrollStrategy (data: ScrollStrategyData) {\n function onScroll (e: Event) {\n data.isActive.value = false\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll)\n}\n\nfunction blockScrollStrategy (data: ScrollStrategyData, props: StrategyProps) {\n const offsetParent = data.root.value?.offsetParent\n const scrollElements = [...new Set([\n ...getScrollParents(data.activatorEl.value, props.contained ? offsetParent : undefined),\n ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined),\n ])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'))\n const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth\n\n const scrollableParent = (el => hasScrollbar(el) && el)(offsetParent || document.documentElement)\n if (scrollableParent) {\n data.root.value!.classList.add('v-overlay--scroll-blocked')\n }\n\n scrollElements.forEach((el, i) => {\n el.style.setProperty('--v-body-scroll-x', convertToUnit(-el.scrollLeft))\n el.style.setProperty('--v-body-scroll-y', convertToUnit(-el.scrollTop))\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n el.classList.add('v-overlay-scroll-blocked')\n })\n\n onScopeDispose(() => {\n scrollElements.forEach((el, i) => {\n const x = parseFloat(el.style.getPropertyValue('--v-body-scroll-x'))\n const y = parseFloat(el.style.getPropertyValue('--v-body-scroll-y'))\n\n el.style.removeProperty('--v-body-scroll-x')\n el.style.removeProperty('--v-body-scroll-y')\n el.style.removeProperty('--v-scrollbar-offset')\n el.classList.remove('v-overlay-scroll-blocked')\n\n el.scrollLeft = -x\n el.scrollTop = -y\n })\n if (scrollableParent) {\n data.root.value!.classList.remove('v-overlay--scroll-blocked')\n }\n })\n}\n\nfunction repositionScrollStrategy (data: ScrollStrategyData) {\n let slow = false\n let raf = -1\n\n function update (e: Event) {\n requestNewFrame(() => {\n const start = performance.now()\n data.updateLocation.value?.(e)\n const time = performance.now() - start\n slow = time / (1000 / 60) > 2\n })\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {\n if (slow) {\n // If the position calculation is slow,\n // defer updates until scrolling is finished.\n // Browsers usually fire one scroll event per frame so\n // we just wait until we've got two frames without an event\n cancelAnimationFrame(raf)\n raf = requestAnimationFrame(() => {\n raf = requestAnimationFrame(() => {\n update(e)\n })\n })\n } else {\n update(e)\n }\n })\n}\n\n/** @private */\nfunction bindScroll (el: HTMLElement | undefined, onScroll: (e: Event) => void) {\n const scrollElements = [document, ...getScrollParents(el)]\n scrollElements.forEach(el => {\n el.addEventListener('scroll', onScroll, { passive: true })\n })\n\n onScopeDispose(() => {\n scrollElements.forEach(el => {\n el.removeEventListener('scroll', onScroll)\n })\n })\n}\n"],"mappings":"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"}
@@ -158,6 +158,10 @@ export function useActivator(props, _ref) {
158
158
  flush: 'post',
159
159
  immediate: true
160
160
  });
161
+ onScopeDispose(() => {
162
+ var _scope;
163
+ (_scope = scope) == null ? void 0 : _scope.stop();
164
+ });
161
165
  return {
162
166
  activatorEl,
163
167
  activatorRef,
@@ -1 +1 @@
1
- {"version":3,"file":"useActivator.mjs","names":["makeDelayProps","useDelay","VMenuSymbol","getCurrentInstance","IN_BROWSER","isComponentInstance","propsFactory","SUPPORTS_FOCUS_VISIBLE","computed","effectScope","inject","nextTick","onScopeDispose","ref","watch","watchEffect","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","closeOnContentClick","useActivator","props","isActive","isTop","activatorEl","isHovered","isFocused","firstEnter","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","contentEvents","menu","closeParents","scrimEvents","val","activatorRef","$el","vm","scope","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","selector","proxy","parentNode","hasAttribute","document","querySelector","nodeType","Node","ELEMENT_NODE"],"sources":["../../../src/components/VOverlay/useActivator.tsx"],"sourcesContent":["// Composables\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport { VMenuSymbol } from '@/components/VMenu/shared'\n\n// Utilities\nimport { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport {\n computed,\n effectScope,\n inject,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n watchEffect,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentInternalInstance,\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n\n closeOnContentClick: boolean\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n closeOnContentClick: Boolean,\n\n ...makeDelayProps(),\n}, 'v-overlay-activator')\n\nexport function useActivator (\n props: ActivatorProps,\n { isActive, isTop }: { isActive: Ref<boolean>, isTop: Ref<boolean> }\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n let firstEnter = true\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (\n value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n ) && !(props.openOnHover && isActive.value && !isTop.value)\n ) {\n if (isActive.value !== value) {\n firstEnter = true\n }\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n const contentEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (props.openOnHover) {\n events.mouseenter = () => {\n isHovered = true\n runOpenDelay()\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n if (props.closeOnContentClick) {\n const menu = inject(VMenuSymbol, null)\n events.click = () => {\n isActive.value = false\n menu?.closeParents()\n }\n }\n\n return events\n })\n\n const scrimEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n if (props.openOnHover) {\n events.mouseenter = () => {\n if (firstEnter) {\n isHovered = true\n firstEnter = false\n runOpenDelay()\n }\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n return events\n })\n\n watch(isTop, val => {\n if (val && (\n (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused)) ||\n (openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))\n )) {\n isActive.value = false\n }\n })\n\n const activatorRef = ref()\n watchEffect(() => {\n if (!activatorRef.value) return\n\n nextTick(() => {\n const activator = activatorRef.value\n activatorEl.value = isComponentInstance(activator) ? activator.$el : activator\n })\n })\n\n const vm = getCurrentInstance('useActivator')\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, vm, { activatorEl, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n return { activatorEl, activatorRef, activatorEvents, contentEvents, scrimEvents }\n}\n\nfunction _useActivator (\n props: ActivatorProps,\n vm: ComponentInternalInstance,\n { activatorEl, activatorEvents }: Pick<ReturnType<typeof useActivator>, 'activatorEl' | 'activatorEvents'>\n) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n let el = vm?.proxy?.$el?.parentNode\n while (el.hasAttribute('data-no-activator')) {\n el = el.parentNode\n }\n activator = el\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useActivator.mjs","names":["makeDelayProps","useDelay","VMenuSymbol","getCurrentInstance","IN_BROWSER","isComponentInstance","propsFactory","SUPPORTS_FOCUS_VISIBLE","computed","effectScope","inject","nextTick","onScopeDispose","ref","watch","watchEffect","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","closeOnContentClick","useActivator","props","isActive","isTop","activatorEl","isHovered","isFocused","firstEnter","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","contentEvents","menu","closeParents","scrimEvents","val","activatorRef","$el","vm","scope","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","selector","proxy","parentNode","hasAttribute","document","querySelector","nodeType","Node","ELEMENT_NODE"],"sources":["../../../src/components/VOverlay/useActivator.tsx"],"sourcesContent":["// Composables\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport { VMenuSymbol } from '@/components/VMenu/shared'\n\n// Utilities\nimport { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport {\n computed,\n effectScope,\n inject,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n watchEffect,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentInternalInstance,\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n\n closeOnContentClick: boolean\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n closeOnContentClick: Boolean,\n\n ...makeDelayProps(),\n}, 'v-overlay-activator')\n\nexport function useActivator (\n props: ActivatorProps,\n { isActive, isTop }: { isActive: Ref<boolean>, isTop: Ref<boolean> }\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n let firstEnter = true\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (\n value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n ) && !(props.openOnHover && isActive.value && !isTop.value)\n ) {\n if (isActive.value !== value) {\n firstEnter = true\n }\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n const contentEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (props.openOnHover) {\n events.mouseenter = () => {\n isHovered = true\n runOpenDelay()\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n if (props.closeOnContentClick) {\n const menu = inject(VMenuSymbol, null)\n events.click = () => {\n isActive.value = false\n menu?.closeParents()\n }\n }\n\n return events\n })\n\n const scrimEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n if (props.openOnHover) {\n events.mouseenter = () => {\n if (firstEnter) {\n isHovered = true\n firstEnter = false\n runOpenDelay()\n }\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n return events\n })\n\n watch(isTop, val => {\n if (val && (\n (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused)) ||\n (openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))\n )) {\n isActive.value = false\n }\n })\n\n const activatorRef = ref()\n watchEffect(() => {\n if (!activatorRef.value) return\n\n nextTick(() => {\n const activator = activatorRef.value\n activatorEl.value = isComponentInstance(activator) ? activator.$el : activator\n })\n })\n\n const vm = getCurrentInstance('useActivator')\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, vm, { activatorEl, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n onScopeDispose(() => {\n scope?.stop()\n })\n\n return { activatorEl, activatorRef, activatorEvents, contentEvents, scrimEvents }\n}\n\nfunction _useActivator (\n props: ActivatorProps,\n vm: ComponentInternalInstance,\n { activatorEl, activatorEvents }: Pick<ReturnType<typeof useActivator>, 'activatorEl' | 'activatorEvents'>\n) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n let el = vm?.proxy?.$el?.parentNode\n while (el.hasAttribute('data-no-activator')) {\n el = el.parentNode\n }\n activator = el\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n"],"mappings":"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"}
@@ -12,7 +12,7 @@ import { makeThemeProps, provideTheme } from "../../composables/theme.mjs";
12
12
  import { useLocale } from "../../composables/locale.mjs";
13
13
  import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
14
14
  import { computed, ref } from 'vue';
15
- import { createRange, genericComponent, getUid, useRender } from "../../util/index.mjs"; // Types
15
+ import { clamp, createRange, genericComponent, getUid, useRender } from "../../util/index.mjs"; // Types
16
16
  export const VRating = genericComponent()({
17
17
  name: 'VRating',
18
18
  props: {
@@ -41,7 +41,7 @@ export const VRating = genericComponent()({
41
41
  },
42
42
  readonly: Boolean,
43
43
  modelValue: {
44
- type: Number,
44
+ type: [Number, String],
45
45
  default: 0
46
46
  },
47
47
  itemLabels: Array,
@@ -70,6 +70,7 @@ export const VRating = genericComponent()({
70
70
  themeClasses
71
71
  } = provideTheme(props);
72
72
  const rating = useProxiedModel(props, 'modelValue');
73
+ const normalizedValue = computed(() => clamp(parseFloat(rating.value), 0, +props.length));
73
74
  const range = computed(() => createRange(Number(props.length), 1));
74
75
  const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
75
76
  const hoverIndex = ref(-1);
@@ -78,7 +79,7 @@ export const VRating = genericComponent()({
78
79
  let isClicking = false;
79
80
  const itemState = computed(() => increments.value.map(value => {
80
81
  const isHovering = props.hover && hoverIndex.value > -1;
81
- const isFilled = rating.value >= value;
82
+ const isFilled = normalizedValue.value >= value;
82
83
  const isHovered = hoverIndex.value >= value;
83
84
  const isFullIcon = isHovering ? isHovered : isFilled;
84
85
  const icon = isFullIcon ? props.fullIcon : props.emptyIcon;
@@ -99,7 +100,7 @@ export const VRating = genericComponent()({
99
100
  hoverIndex.value = -1;
100
101
  }
101
102
  function onFocus() {
102
- if (value === 0 && rating.value === 0) {
103
+ if (value === 0 && normalizedValue.value === 0) {
103
104
  var _firstRef$value;
104
105
  (_firstRef$value = firstRef.value) == null ? void 0 : _firstRef$value.focus();
105
106
  } else {
@@ -111,7 +112,7 @@ export const VRating = genericComponent()({
111
112
  }
112
113
  function onClick() {
113
114
  if (props.disabled || props.readonly) return;
114
- rating.value = rating.value === value && props.clearable ? 0 : value;
115
+ rating.value = normalizedValue.value === value && props.clearable ? 0 : value;
115
116
  }
116
117
  return {
117
118
  onMouseenter: props.hover ? onMouseenter : undefined,
@@ -176,7 +177,7 @@ export const VRating = genericComponent()({
176
177
  "id": id,
177
178
  "type": "radio",
178
179
  "value": value,
179
- "checked": rating.value === value,
180
+ "checked": normalizedValue.value === value,
180
181
  "onClick": onClick,
181
182
  "onFocus": onFocus,
182
183
  "onBlur": onBlur,
@@ -1 +1 @@
1
- {"version":3,"file":"VRating.mjs","names":["VBtn","IconValue","makeDensityProps","makeSizeProps","makeTagProps","makeThemeProps","provideTheme","useLocale","useProxiedModel","computed","ref","createRange","genericComponent","getUid","useRender","VRating","name","props","String","itemAriaLabel","type","default","activeColor","color","clearable","Boolean","disabled","emptyIcon","fullIcon","halfIncrements","hover","length","Number","readonly","modelValue","itemLabels","Array","itemLabelPosition","validator","v","includes","ripple","emits","value","setup","slots","t","themeClasses","rating","range","increments","flatMap","hoverIndex","focusIndex","firstRef","isClicking","itemState","map","isHovering","isFilled","isHovered","isFullIcon","icon","eventState","onMouseenter","onMouseleave","onFocus","focus","onBlur","onClick","undefined","onMousedown","onMouseup","VRatingItem","index","showStar","id","replace","btnProps","density","size","tag","variant","item","createLabel","labelProps","label","hasLabels","i","Math","ceil"],"sources":["../../../src/components/VRating/VRating.tsx"],"sourcesContent":["// Styles\nimport './VRating.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { makeDensityProps } from '@/composables/density'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { createRange, genericComponent, getUid, useRender } from '@/util'\n\n// Types\nimport type { SlotsToProps } from '@/util'\nimport type { Prop } from 'vue'\nimport type { Variant } from '@/composables/variant'\n\ntype VRatingItemSlot = {\n value: number\n index: number\n isFilled: boolean\n isHovered: boolean\n icon: IconValue\n color?: string\n props: Record<string, unknown>\n}\n\ntype VRatingItemLabelSlot = {\n value: number\n index: number\n label?: string\n}\n\nexport const VRating = genericComponent<new <T>() => {\n $props: SlotsToProps<{\n item: [VRatingItemSlot]\n 'item-label': [VRatingItemLabelSlot]\n }>\n}>()({\n name: 'VRating',\n\n props: {\n name: String,\n itemAriaLabel: {\n type: String,\n default: '$vuetify.rating.ariaLabel.item',\n },\n activeColor: String,\n color: String,\n clearable: Boolean,\n disabled: Boolean,\n emptyIcon: {\n type: IconValue,\n default: '$ratingEmpty',\n },\n fullIcon: {\n type: IconValue,\n default: '$ratingFull',\n },\n halfIncrements: Boolean,\n hover: Boolean,\n length: {\n type: [Number, String],\n default: 5,\n },\n readonly: Boolean,\n modelValue: {\n type: Number,\n default: 0,\n },\n itemLabels: Array as Prop<string[]>,\n itemLabelPosition: {\n type: String,\n default: 'top',\n validator: (v: any) => ['top', 'bottom'].includes(v),\n },\n ripple: Boolean,\n\n ...makeDensityProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: number) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const { themeClasses } = provideTheme(props)\n const rating = useProxiedModel(props, 'modelValue')\n\n const range = computed(() => createRange(Number(props.length), 1))\n const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]))\n const hoverIndex = ref(-1)\n const focusIndex = ref(-1)\n const firstRef = ref<HTMLElement>()\n let isClicking = false\n\n const itemState = computed(() => increments.value.map(value => {\n const isHovering = props.hover && hoverIndex.value > -1\n const isFilled = rating.value >= value\n const isHovered = hoverIndex.value >= value\n const isFullIcon = isHovering ? isHovered : isFilled\n const icon = isFullIcon ? props.fullIcon : props.emptyIcon\n const activeColor = props.activeColor ?? props.color\n const color = (isFilled || isHovered) ? activeColor : props.color\n\n return { isFilled, isHovered, icon, color }\n }))\n\n const eventState = computed(() => [0, ...increments.value].map(value => {\n function onMouseenter () {\n hoverIndex.value = value\n }\n\n function onMouseleave () {\n hoverIndex.value = -1\n }\n\n function onFocus () {\n if (value === 0 && rating.value === 0) {\n firstRef.value?.focus()\n } else {\n focusIndex.value = value\n }\n }\n\n function onBlur () {\n if (!isClicking) focusIndex.value = -1\n }\n\n function onClick () {\n if (props.disabled || props.readonly) return\n rating.value = rating.value === value && props.clearable ? 0 : value\n }\n\n return {\n onMouseenter: props.hover ? onMouseenter : undefined,\n onMouseleave: props.hover ? onMouseleave : undefined,\n onFocus,\n onBlur,\n onClick,\n }\n }))\n\n function onMousedown () {\n isClicking = true\n }\n\n function onMouseup () {\n isClicking = false\n }\n\n const name = computed(() => props.name ?? `v-rating-${getUid()}`)\n\n function VRatingItem ({ value, index, showStar = true }: { value: number, index: number, showStar?: boolean }) {\n const { onMouseenter, onMouseleave, onFocus, onBlur, onClick } = eventState.value[index + 1]\n const id = `${name.value}-${String(value).replace('.', '-')}`\n const btnProps = {\n color: itemState.value[index]?.color,\n density: props.density,\n disabled: props.disabled,\n icon: itemState.value[index]?.icon,\n ripple: props.ripple,\n size: props.size,\n tag: 'span',\n variant: 'plain' as Variant,\n }\n\n return (\n <>\n <label\n for={ id }\n class={{\n 'v-rating__item--half': props.halfIncrements && value % 1 > 0,\n 'v-rating__item--full': props.halfIncrements && value % 1 === 0,\n }}\n onMousedown={ onMousedown }\n onMouseup={ onMouseup }\n onMouseenter={ onMouseenter }\n onMouseleave={ onMouseleave }\n >\n <span class=\"v-rating__hidden\">{ t(props.itemAriaLabel, value, props.length) }</span>\n {\n !showStar ? undefined\n : slots.item ? slots.item({\n ...itemState.value[index],\n props: btnProps,\n value,\n index,\n })\n : (\n <VBtn { ...btnProps } />\n )\n }\n </label>\n\n <input\n class=\"v-rating__hidden\"\n name={ name.value }\n id={ id }\n type=\"radio\"\n value={ value }\n checked={ rating.value === value }\n onClick={ onClick }\n onFocus={ onFocus }\n onBlur={ onBlur }\n ref={ index === 0 ? firstRef : undefined }\n readonly={ props.readonly }\n disabled={ props.disabled }\n />\n </>\n )\n }\n\n function createLabel (labelProps: { value: number, index: number, label?: string }) {\n if (slots['item-label']) return slots['item-label'](labelProps)\n\n if (labelProps.label) return <span>{ labelProps.label }</span>\n\n return <span>&nbsp;</span>\n }\n\n useRender(() => {\n const hasLabels = !!props.itemLabels?.length || slots['item-label']\n\n return (\n <props.tag\n class={[\n 'v-rating',\n {\n 'v-rating--hover': props.hover,\n 'v-rating--readonly': props.readonly,\n },\n themeClasses.value,\n ]}\n >\n <VRatingItem value={ 0 } index={ -1 } showStar={ false } />\n\n { range.value.map((value, i) => (\n <div class=\"v-rating__wrapper\">\n {\n hasLabels && props.itemLabelPosition === 'top'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n <div\n class={[\n 'v-rating__item',\n {\n 'v-rating__item--focused': Math.ceil(focusIndex.value) === value,\n },\n ]}\n >\n { props.halfIncrements ? (\n <>\n <VRatingItem value={ value - 0.5 } index={ i * 2 } />\n <VRatingItem value={ value } index={ (i * 2) + 1 } />\n </>\n ) : (\n <VRatingItem value={ value } index={ i } />\n ) }\n </div>\n {\n hasLabels && props.itemLabelPosition === 'bottom'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n </div>\n )) }\n </props.tag>\n )\n })\n\n return {}\n },\n})\n\nexport type VRating = InstanceType<typeof VRating>\n"],"mappings":"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"}
1
+ {"version":3,"file":"VRating.mjs","names":["VBtn","IconValue","makeDensityProps","makeSizeProps","makeTagProps","makeThemeProps","provideTheme","useLocale","useProxiedModel","computed","ref","clamp","createRange","genericComponent","getUid","useRender","VRating","name","props","String","itemAriaLabel","type","default","activeColor","color","clearable","Boolean","disabled","emptyIcon","fullIcon","halfIncrements","hover","length","Number","readonly","modelValue","itemLabels","Array","itemLabelPosition","validator","v","includes","ripple","emits","value","setup","slots","t","themeClasses","rating","normalizedValue","parseFloat","range","increments","flatMap","hoverIndex","focusIndex","firstRef","isClicking","itemState","map","isHovering","isFilled","isHovered","isFullIcon","icon","eventState","onMouseenter","onMouseleave","onFocus","focus","onBlur","onClick","undefined","onMousedown","onMouseup","VRatingItem","index","showStar","id","replace","btnProps","density","size","tag","variant","item","createLabel","labelProps","label","hasLabels","i","Math","ceil"],"sources":["../../../src/components/VRating/VRating.tsx"],"sourcesContent":["// Styles\nimport './VRating.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { makeDensityProps } from '@/composables/density'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { clamp, createRange, genericComponent, getUid, useRender } from '@/util'\n\n// Types\nimport type { SlotsToProps } from '@/util'\nimport type { Prop } from 'vue'\nimport type { Variant } from '@/composables/variant'\n\ntype VRatingItemSlot = {\n value: number\n index: number\n isFilled: boolean\n isHovered: boolean\n icon: IconValue\n color?: string\n props: Record<string, unknown>\n}\n\ntype VRatingItemLabelSlot = {\n value: number\n index: number\n label?: string\n}\n\nexport const VRating = genericComponent<new <T>() => {\n $props: SlotsToProps<{\n item: [VRatingItemSlot]\n 'item-label': [VRatingItemLabelSlot]\n }>\n}>()({\n name: 'VRating',\n\n props: {\n name: String,\n itemAriaLabel: {\n type: String,\n default: '$vuetify.rating.ariaLabel.item',\n },\n activeColor: String,\n color: String,\n clearable: Boolean,\n disabled: Boolean,\n emptyIcon: {\n type: IconValue,\n default: '$ratingEmpty',\n },\n fullIcon: {\n type: IconValue,\n default: '$ratingFull',\n },\n halfIncrements: Boolean,\n hover: Boolean,\n length: {\n type: [Number, String],\n default: 5,\n },\n readonly: Boolean,\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n itemLabels: Array as Prop<string[]>,\n itemLabelPosition: {\n type: String,\n default: 'top',\n validator: (v: any) => ['top', 'bottom'].includes(v),\n },\n ripple: Boolean,\n\n ...makeDensityProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: number | string) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const { themeClasses } = provideTheme(props)\n const rating = useProxiedModel(props, 'modelValue')\n const normalizedValue = computed(() => clamp(parseFloat(rating.value), 0, +props.length))\n\n const range = computed(() => createRange(Number(props.length), 1))\n const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]))\n const hoverIndex = ref(-1)\n const focusIndex = ref(-1)\n const firstRef = ref<HTMLElement>()\n let isClicking = false\n\n const itemState = computed(() => increments.value.map(value => {\n const isHovering = props.hover && hoverIndex.value > -1\n const isFilled = normalizedValue.value >= value\n const isHovered = hoverIndex.value >= value\n const isFullIcon = isHovering ? isHovered : isFilled\n const icon = isFullIcon ? props.fullIcon : props.emptyIcon\n const activeColor = props.activeColor ?? props.color\n const color = (isFilled || isHovered) ? activeColor : props.color\n\n return { isFilled, isHovered, icon, color }\n }))\n\n const eventState = computed(() => [0, ...increments.value].map(value => {\n function onMouseenter () {\n hoverIndex.value = value\n }\n\n function onMouseleave () {\n hoverIndex.value = -1\n }\n\n function onFocus () {\n if (value === 0 && normalizedValue.value === 0) {\n firstRef.value?.focus()\n } else {\n focusIndex.value = value\n }\n }\n\n function onBlur () {\n if (!isClicking) focusIndex.value = -1\n }\n\n function onClick () {\n if (props.disabled || props.readonly) return\n rating.value = normalizedValue.value === value && props.clearable ? 0 : value\n }\n\n return {\n onMouseenter: props.hover ? onMouseenter : undefined,\n onMouseleave: props.hover ? onMouseleave : undefined,\n onFocus,\n onBlur,\n onClick,\n }\n }))\n\n function onMousedown () {\n isClicking = true\n }\n\n function onMouseup () {\n isClicking = false\n }\n\n const name = computed(() => props.name ?? `v-rating-${getUid()}`)\n\n function VRatingItem ({ value, index, showStar = true }: { value: number, index: number, showStar?: boolean }) {\n const { onMouseenter, onMouseleave, onFocus, onBlur, onClick } = eventState.value[index + 1]\n const id = `${name.value}-${String(value).replace('.', '-')}`\n const btnProps = {\n color: itemState.value[index]?.color,\n density: props.density,\n disabled: props.disabled,\n icon: itemState.value[index]?.icon,\n ripple: props.ripple,\n size: props.size,\n tag: 'span',\n variant: 'plain' as Variant,\n }\n\n return (\n <>\n <label\n for={ id }\n class={{\n 'v-rating__item--half': props.halfIncrements && value % 1 > 0,\n 'v-rating__item--full': props.halfIncrements && value % 1 === 0,\n }}\n onMousedown={ onMousedown }\n onMouseup={ onMouseup }\n onMouseenter={ onMouseenter }\n onMouseleave={ onMouseleave }\n >\n <span class=\"v-rating__hidden\">{ t(props.itemAriaLabel, value, props.length) }</span>\n {\n !showStar ? undefined\n : slots.item ? slots.item({\n ...itemState.value[index],\n props: btnProps,\n value,\n index,\n })\n : (\n <VBtn { ...btnProps } />\n )\n }\n </label>\n\n <input\n class=\"v-rating__hidden\"\n name={ name.value }\n id={ id }\n type=\"radio\"\n value={ value }\n checked={ normalizedValue.value === value }\n onClick={ onClick }\n onFocus={ onFocus }\n onBlur={ onBlur }\n ref={ index === 0 ? firstRef : undefined }\n readonly={ props.readonly }\n disabled={ props.disabled }\n />\n </>\n )\n }\n\n function createLabel (labelProps: { value: number, index: number, label?: string }) {\n if (slots['item-label']) return slots['item-label'](labelProps)\n\n if (labelProps.label) return <span>{ labelProps.label }</span>\n\n return <span>&nbsp;</span>\n }\n\n useRender(() => {\n const hasLabels = !!props.itemLabels?.length || slots['item-label']\n\n return (\n <props.tag\n class={[\n 'v-rating',\n {\n 'v-rating--hover': props.hover,\n 'v-rating--readonly': props.readonly,\n },\n themeClasses.value,\n ]}\n >\n <VRatingItem value={ 0 } index={ -1 } showStar={ false } />\n\n { range.value.map((value, i) => (\n <div class=\"v-rating__wrapper\">\n {\n hasLabels && props.itemLabelPosition === 'top'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n <div\n class={[\n 'v-rating__item',\n {\n 'v-rating__item--focused': Math.ceil(focusIndex.value) === value,\n },\n ]}\n >\n { props.halfIncrements ? (\n <>\n <VRatingItem value={ value - 0.5 } index={ i * 2 } />\n <VRatingItem value={ value } index={ (i * 2) + 1 } />\n </>\n ) : (\n <VRatingItem value={ value } index={ i } />\n ) }\n </div>\n {\n hasLabels && props.itemLabelPosition === 'bottom'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n </div>\n )) }\n </props.tag>\n )\n })\n\n return {}\n },\n})\n\nexport type VRating = InstanceType<typeof VRating>\n"],"mappings":"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"}
@@ -46,7 +46,7 @@ declare const VRating: {
46
46
  readonly: boolean;
47
47
  tag: string;
48
48
  density: Density;
49
- modelValue: number;
49
+ modelValue: string | number;
50
50
  ripple: boolean;
51
51
  clearable: boolean;
52
52
  hover: boolean;
@@ -95,7 +95,7 @@ declare const VRating: {
95
95
  };
96
96
  readonly: BooleanConstructor;
97
97
  modelValue: {
98
- type: NumberConstructor;
98
+ type: (StringConstructor | NumberConstructor)[];
99
99
  default: number;
100
100
  };
101
101
  itemLabels: Prop<string[], string[]>;
@@ -106,7 +106,7 @@ declare const VRating: {
106
106
  };
107
107
  ripple: BooleanConstructor;
108
108
  }, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">>> & {
109
- "onUpdate:modelValue"?: ((value: number) => any) | undefined;
109
+ "onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
110
110
  } & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, "length" | "disabled" | "size" | "readonly" | "tag" | "density" | "modelValue" | "ripple" | "clearable" | "hover" | "halfIncrements" | "itemAriaLabel" | "emptyIcon" | "fullIcon" | "itemLabelPosition">;
111
111
  $attrs: {
112
112
  [x: string]: unknown;
@@ -119,7 +119,7 @@ declare const VRating: {
119
119
  }>;
120
120
  $root: vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null;
121
121
  $parent: vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null;
122
- $emit: (event: "update:modelValue", value: number) => void;
122
+ $emit: (event: "update:modelValue", value: string | number) => void;
123
123
  $el: any;
124
124
  $options: vue.ComponentOptionsBase<Readonly<vue.ExtractPropTypes<Omit<{
125
125
  theme: StringConstructor;
@@ -161,7 +161,7 @@ declare const VRating: {
161
161
  };
162
162
  readonly: BooleanConstructor;
163
163
  modelValue: {
164
- type: NumberConstructor;
164
+ type: (StringConstructor | NumberConstructor)[];
165
165
  default: number;
166
166
  };
167
167
  itemLabels: Prop<string[], string[]>;
@@ -172,9 +172,9 @@ declare const VRating: {
172
172
  };
173
173
  ripple: BooleanConstructor;
174
174
  }, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">>> & {
175
- "onUpdate:modelValue"?: ((value: number) => any) | undefined;
175
+ "onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
176
176
  }, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<{
177
- 'update:modelValue': (value: number) => boolean;
177
+ 'update:modelValue': (value: number | string) => boolean;
178
178
  }, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">, string, {
179
179
  length: string | number;
180
180
  disabled: boolean;
@@ -182,7 +182,7 @@ declare const VRating: {
182
182
  readonly: boolean;
183
183
  tag: string;
184
184
  density: Density;
185
- modelValue: number;
185
+ modelValue: string | number;
186
186
  ripple: boolean;
187
187
  clearable: boolean;
188
188
  hover: boolean;
@@ -251,7 +251,7 @@ declare const VRating: {
251
251
  };
252
252
  readonly: BooleanConstructor;
253
253
  modelValue: {
254
- type: NumberConstructor;
254
+ type: (StringConstructor | NumberConstructor)[];
255
255
  default: number;
256
256
  };
257
257
  itemLabels: Prop<string[], string[]>;
@@ -262,7 +262,7 @@ declare const VRating: {
262
262
  };
263
263
  ripple: BooleanConstructor;
264
264
  }, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">>> & {
265
- "onUpdate:modelValue"?: ((value: number) => any) | undefined;
265
+ "onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
266
266
  } & vue.ShallowUnwrapRef<{}> & {} & vue.ComponentCustomProperties;
267
267
  __isFragment?: undefined;
268
268
  __isTeleport?: undefined;
@@ -307,7 +307,7 @@ declare const VRating: {
307
307
  };
308
308
  readonly: BooleanConstructor;
309
309
  modelValue: {
310
- type: NumberConstructor;
310
+ type: (StringConstructor | NumberConstructor)[];
311
311
  default: number;
312
312
  };
313
313
  itemLabels: Prop<string[], string[]>;
@@ -318,9 +318,9 @@ declare const VRating: {
318
318
  };
319
319
  ripple: BooleanConstructor;
320
320
  }, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">>> & {
321
- "onUpdate:modelValue"?: ((value: number) => any) | undefined;
321
+ "onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
322
322
  }, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<{
323
- 'update:modelValue': (value: number) => boolean;
323
+ 'update:modelValue': (value: number | string) => boolean;
324
324
  }, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">, string, {
325
325
  length: string | number;
326
326
  disabled: boolean;
@@ -328,7 +328,7 @@ declare const VRating: {
328
328
  readonly: boolean;
329
329
  tag: string;
330
330
  density: Density;
331
- modelValue: number;
331
+ modelValue: string | number;
332
332
  ripple: boolean;
333
333
  clearable: boolean;
334
334
  hover: boolean;
@@ -1,5 +1,6 @@
1
1
  .v-slide-group {
2
2
  display: flex;
3
+ overflow: hidden;
3
4
  }
4
5
 
5
6
  .v-slide-group__next,
@@ -7,6 +7,7 @@
7
7
  // Block
8
8
  .v-slide-group
9
9
  display: flex
10
+ overflow: hidden
10
11
 
11
12
  // Element
12
13
  .v-slide-group__next,
@@ -81,6 +81,7 @@
81
81
 
82
82
  .v-toolbar__prepend,
83
83
  .v-toolbar__append {
84
+ align-items: center;
84
85
  display: flex;
85
86
  }
86
87
 
@@ -73,6 +73,7 @@
73
73
 
74
74
  .v-toolbar__prepend,
75
75
  .v-toolbar__append
76
+ align-items: center
76
77
  display: flex
77
78
 
78
79
  .v-toolbar__prepend