vuetify 3.9.5 → 3.9.7

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 (107) hide show
  1. package/dist/json/attributes.json +3244 -3236
  2. package/dist/json/importMap-labs.json +28 -28
  3. package/dist/json/importMap.json +162 -162
  4. package/dist/json/tags.json +2 -0
  5. package/dist/json/web-types.json +6419 -6311
  6. package/dist/vuetify-labs.cjs +183 -127
  7. package/dist/vuetify-labs.css +3841 -3706
  8. package/dist/vuetify-labs.d.ts +173 -75
  9. package/dist/vuetify-labs.esm.js +183 -127
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +183 -127
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +78 -44
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +2171 -2039
  16. package/dist/vuetify.d.ts +70 -70
  17. package/dist/vuetify.esm.js +78 -44
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +78 -44
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +67 -60
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VAlert/VAlert.css +12 -0
  25. package/lib/components/VAlert/VAlert.sass +13 -0
  26. package/lib/components/VAutocomplete/VAutocomplete.css +2 -1
  27. package/lib/components/VAutocomplete/VAutocomplete.sass +3 -2
  28. package/lib/components/VBtn/VBtn.css +10 -0
  29. package/lib/components/VBtn/VBtn.sass +9 -0
  30. package/lib/components/VCard/VCard.css +11 -0
  31. package/lib/components/VCard/VCard.sass +9 -0
  32. package/lib/components/VChip/VChip.css +6 -0
  33. package/lib/components/VChip/VChip.sass +5 -0
  34. package/lib/components/VChipGroup/VChipGroup.css +25 -0
  35. package/lib/components/VChipGroup/VChipGroup.sass +23 -0
  36. package/lib/components/VCombobox/VCombobox.css +2 -1
  37. package/lib/components/VCombobox/VCombobox.sass +3 -2
  38. package/lib/components/VDatePicker/VDatePicker.js +10 -4
  39. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  40. package/lib/components/VDatePicker/VDatePickerYears.js +18 -8
  41. package/lib/components/VDatePicker/VDatePickerYears.js.map +1 -1
  42. package/lib/components/VFileInput/VFileInput.js +4 -2
  43. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  44. package/lib/components/VList/VListItem.css +30 -0
  45. package/lib/components/VList/VListItem.d.ts +3 -3
  46. package/lib/components/VList/VListItem.sass +29 -0
  47. package/lib/components/VNumberInput/VNumberInput.js +6 -6
  48. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  49. package/lib/components/VOtpInput/VOtpInput.js +9 -2
  50. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  51. package/lib/components/VProgressLinear/VProgressLinear.css +3 -3
  52. package/lib/components/VProgressLinear/VProgressLinear.js +5 -6
  53. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  54. package/lib/components/VProgressLinear/VProgressLinear.sass +3 -3
  55. package/lib/components/VSelect/VSelect.css +5 -1
  56. package/lib/components/VSelect/VSelect.sass +6 -2
  57. package/lib/components/VSlideGroup/VSlideGroup.js +5 -4
  58. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  59. package/lib/components/VSnackbar/VSnackbar.css +5 -0
  60. package/lib/components/VSnackbar/VSnackbar.sass +3 -0
  61. package/lib/components/VSparkline/VBarline.js +2 -2
  62. package/lib/components/VSparkline/VBarline.js.map +1 -1
  63. package/lib/components/VSparkline/VTrendline.js +3 -0
  64. package/lib/components/VSparkline/VTrendline.js.map +1 -1
  65. package/lib/components/VTextField/VTextField.js +2 -2
  66. package/lib/components/VTextField/VTextField.js.map +1 -1
  67. package/lib/components/VTextarea/VTextarea.js +4 -2
  68. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  69. package/lib/components/VTimeline/VTimeline.css +22 -0
  70. package/lib/components/VTimeline/VTimeline.sass +12 -0
  71. package/lib/components/VTreeview/VTreeviewItem.css +13 -8
  72. package/lib/components/VTreeview/VTreeviewItem.d.ts +9 -9
  73. package/lib/components/VTreeview/VTreeviewItem.sass +12 -8
  74. package/lib/composables/filter.js +3 -1
  75. package/lib/composables/filter.js.map +1 -1
  76. package/lib/composables/nested/nested.d.ts +1 -1
  77. package/lib/composables/nested/nested.js +5 -2
  78. package/lib/composables/nested/nested.js.map +1 -1
  79. package/lib/composables/rounded.js +3 -3
  80. package/lib/composables/rounded.js.map +1 -1
  81. package/lib/directives/touch/index.js +2 -2
  82. package/lib/directives/touch/index.js.map +1 -1
  83. package/lib/entry-bundler.js +1 -1
  84. package/lib/framework.d.ts +58 -58
  85. package/lib/framework.js +1 -1
  86. package/lib/labs/VDateInput/VDateInput.d.ts +78 -3
  87. package/lib/labs/VDateInput/VDateInput.js +3 -1
  88. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  89. package/lib/labs/VIconBtn/VIconBtn.js +1 -1
  90. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  91. package/lib/labs/VPie/VPie.css +3 -0
  92. package/lib/labs/VPie/VPie.js +71 -29
  93. package/lib/labs/VPie/VPie.js.map +1 -1
  94. package/lib/labs/VPie/VPie.sass +3 -0
  95. package/lib/labs/VPie/VPieSegment.d.ts +25 -2
  96. package/lib/labs/VPie/VPieSegment.js +11 -6
  97. package/lib/labs/VPie/VPieSegment.js.map +1 -1
  98. package/lib/labs/VPie/VPieTooltip.d.ts +10 -0
  99. package/lib/labs/VPie/VPieTooltip.js +4 -22
  100. package/lib/labs/VPie/VPieTooltip.js.map +1 -1
  101. package/lib/labs/VPie/types.d.ts +1 -0
  102. package/lib/labs/VPie/types.js.map +1 -1
  103. package/lib/labs/VVideo/VVideo.css +4 -4
  104. package/lib/labs/VVideo/VVideo.js +24 -33
  105. package/lib/labs/VVideo/VVideo.js.map +1 -1
  106. package/lib/labs/VVideo/VVideo.sass +4 -4
  107. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"VPie.js","names":["makeVPieSegmentProps","VPieSegment","VPieTooltip","VAvatar","VChip","VChipGroup","VDefaultsProvider","useColor","makeDensityProps","computed","shallowRef","toRef","watch","formatTextTemplate","convertToUnit","genericComponent","pick","propsFactory","makeVPieProps","title","String","bgColor","items","type","Array","default","palette","itemKey","itemValue","itemTitle","size","Number","rotate","gaugeCut","legend","Boolean","Object","tooltip","VPie","name","props","setup","_ref","slots","legendConfig","visible","position","textFormat","colorClasses","colorStyles","background","textColorStyles","value","legendAvatarSize","comfortable","compact","density","legendDirection","includes","legendMode","legendTextFormatFunction","item","arcs","filter","map","index","key","color","colorFromPalette","pattern","patternFromPalette","raw","visibleItemsKeys","length","a","immediate","visibleItems","isActive","total","reduce","sum","gaugeOffset","Math","cos","PI","min","rotateDeg","arcOffset","slice","acc","s","arcSize","v","undefined","paletteItem","toggle","x","tooltipItem","tooltipVisible","mouseLeaveTimeout","onMouseenter","clearTimeout","onMouseleave","setTimeout","segmentProps","defaultTooltipTransition","duration","tooltipProps","modelValue","titleFormat","subtitleFormat","transition","offset","legendDefaults","direction","tooltipDefaults","avatarSize","avatarSlot","_ref2","_createVNode","_createElementVNode","_normalizeClass","_normalizeStyle","transform","marginBottom","_mergeProps","center","$event","prepend","slotProps"],"sources":["../../../src/labs/VPie/VPie.tsx"],"sourcesContent":["// Styles\nimport './VPie.sass'\n\n// Components\nimport { makeVPieSegmentProps, VPieSegment } from './VPieSegment'\nimport { VPieTooltip } from './VPieTooltip'\nimport { VAvatar } from '@/components/VAvatar'\nimport { VChip } from '@/components/VChip'\nimport { VChipGroup } from '@/components/VChipGroup'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\n\n// Composables\nimport { useColor } from '@/composables/color'\nimport { makeDensityProps } from '@/composables/density'\n\n// Utilities\nimport { computed, shallowRef, toRef, watch } from 'vue'\nimport { formatTextTemplate } from './utils'\nimport { convertToUnit, genericComponent, pick, propsFactory } from '@/util'\n\n// Types\nimport type { PropType, TransitionProps } from 'vue'\nimport type { PieItem, TextTemplate } from './types'\n\nexport type VPieSlots = {\n center: { total: number }\n legend: {\n isActive: (item: PieItem) => boolean\n toggle: (item: PieItem) => void\n items: PieItem[]\n total: number\n }\n 'legend-text': {\n item: PieItem\n total: number\n }\n title: never\n tooltip: {\n item: PieItem\n total: number\n }\n}\n\nexport const makeVPieProps = propsFactory({\n title: String,\n bgColor: String,\n items: {\n type: Array as PropType<Record<string, any> | { color?: string, pattern?: string }[]>,\n default: () => [],\n },\n palette: {\n type: Array as PropType<({ color?: string, pattern?: string } | string)[]>,\n default: () => [],\n },\n itemKey: {\n type: String,\n default: 'key',\n },\n itemValue: {\n type: String,\n default: 'value',\n },\n itemTitle: {\n type: String,\n default: 'title',\n },\n size: {\n type: [Number, String],\n default: 250,\n },\n rotate: [Number, String],\n gaugeCut: [Number, String],\n legend: {\n type: [Boolean, Object] as PropType<boolean | {\n position?: 'left' | 'top' | 'right' | 'bottom'\n textFormat?: TextTemplate\n }>,\n default: false,\n },\n tooltip: {\n type: [Boolean, Object] as PropType<boolean | {\n titleFormat?: TextTemplate\n subtitleFormat?: TextTemplate\n avatarSize?: number\n transition?: string | boolean | TransitionProps\n offset?: number\n }>,\n default: false,\n },\n\n ...makeDensityProps(),\n ...pick(makeVPieSegmentProps(), [\n 'animation',\n 'gap',\n 'rounded',\n 'innerCut',\n 'hoverScale',\n 'hideSlice',\n 'reveal',\n ]),\n}, 'VPie')\n\nexport const VPie = genericComponent<VPieSlots>()({\n name: 'VPie',\n\n props: makeVPieProps(),\n\n setup (props, { slots }) {\n const legendConfig = computed(() => ({\n visible: !!props.legend,\n position: 'bottom',\n textFormat: '[title]',\n ...(typeof props.legend === 'object' ? props.legend : {}),\n }))\n\n const { colorClasses, colorStyles } = useColor(() => ({ background: props.bgColor }))\n const textColorStyles = toRef(() => pick(colorStyles.value, ['color', 'caretColor']))\n\n const legendAvatarSize = toRef(() => ({ default: 20, comfortable: 18, compact: 16 }[props.density ?? 'default']))\n const legendDirection = toRef(() => ['left', 'right'].includes(legendConfig.value.position) ? 'vertical' : 'horizontal')\n\n const legendMode = toRef(() => !legendConfig.value.visible ? 'hidden' : legendConfig.value.position)\n\n const legendTextFormatFunction = toRef(() => (item: PieItem) => {\n return typeof legendConfig.value.textFormat === 'function'\n ? legendConfig.value.textFormat(item)\n : formatTextTemplate(legendConfig.value.textFormat, item)\n })\n\n const arcs = computed<PieItem[]>(() => {\n // hidden items get (value: 0) to trigger disappearing animation\n return props.items\n .filter(Boolean)\n .map((item: any, index: number) => {\n return {\n key: item[props.itemKey],\n color: item.color ?? colorFromPalette(index),\n value: item[props.itemValue],\n title: String(item[props.itemTitle]),\n pattern: item.pattern ?? patternFromPalette(index),\n raw: item,\n } as PieItem\n })\n })\n\n const visibleItemsKeys = shallowRef<PieItem['key'][]>([])\n\n watch(() => arcs.value.length, () => {\n // reset when number of items changes\n visibleItemsKeys.value = arcs.value.map(a => a.key)\n }, { immediate: true })\n\n const visibleItems = computed(() => {\n // hidden items get (value: 0) to trigger disappearing animation\n return arcs.value.map(item => {\n return isActive(item)\n ? item\n : { ...item, value: 0 }\n })\n })\n\n const total = computed(() => visibleItems.value.reduce((sum, item) => sum + item.value, 0))\n\n const gaugeCut = toRef(() => Number(props.gaugeCut ?? 0))\n const gaugeOffset = computed(() => (1 - Math.cos(Math.PI * Math.min(90, gaugeCut.value / 2) / 180)) / 2)\n const rotateDeg = computed(() => `${gaugeCut.value ? (180 + gaugeCut.value / 2) : (props.rotate ?? 0)}deg`)\n\n function arcOffset (index: number) {\n return visibleItems.value\n .slice(0, index)\n .reduce((acc, s) => acc + (total.value > 0 ? s.value / total.value : 0) * (360 - gaugeCut.value), 0)\n }\n\n function arcSize (v: number) { return v / total.value * (100 - gaugeCut.value / 3.6) }\n\n function colorFromPalette (index: number) {\n if (props.palette.length === 0) return undefined\n const paletteItem = props.palette[index % props.palette.length]\n return typeof paletteItem === 'object' ? paletteItem.color : paletteItem\n }\n\n function patternFromPalette (index: number) {\n if (props.palette.length === 0) return undefined\n const paletteItem = props.palette[index % props.palette.length]\n return typeof paletteItem === 'object' ? paletteItem.pattern : undefined\n }\n\n function isActive (item: PieItem) {\n return visibleItemsKeys.value.includes(item.key)\n }\n\n function toggle (item: PieItem) {\n if (isActive(item)) {\n visibleItemsKeys.value = visibleItemsKeys.value.filter(x => x !== item.key)\n } else {\n visibleItemsKeys.value = [...visibleItemsKeys.value, item.key]\n }\n }\n\n const tooltipItem = shallowRef<PieItem | null>(null)\n const tooltipVisible = shallowRef(false)\n\n let mouseLeaveTimeout = null! as ReturnType<typeof setTimeout>\n\n function onMouseenter (item: PieItem) {\n if (!props.tooltip) return\n\n clearTimeout(mouseLeaveTimeout)\n tooltipVisible.value = true\n tooltipItem.value = item\n }\n\n function onMouseleave () {\n if (!props.tooltip) return\n\n clearTimeout(mouseLeaveTimeout)\n mouseLeaveTimeout = setTimeout(() => {\n tooltipVisible.value = false\n\n // intentionally reusing timeout here\n mouseLeaveTimeout = setTimeout(() => {\n tooltipItem.value = null\n }, 500)\n }, 100)\n }\n\n return () => {\n const segmentProps = pick(props, [\n 'animation',\n 'gap',\n 'rounded',\n 'hideSlice',\n 'reveal',\n 'innerCut',\n 'hoverScale',\n ])\n\n const defaultTooltipTransition = {\n name: 'fade-transition',\n duration: 150,\n }\n\n const tooltipProps = {\n item: tooltipItem.value,\n modelValue: tooltipVisible.value,\n titleFormat: typeof props.tooltip === 'object' ? props.tooltip.titleFormat : '[title]',\n subtitleFormat: typeof props.tooltip === 'object' ? props.tooltip.subtitleFormat : '[value]',\n transition: typeof props.tooltip === 'object' ? props.tooltip.transition : defaultTooltipTransition,\n offset: typeof props.tooltip === 'object' ? props.tooltip.offset : 16,\n }\n\n const legendDefaults = {\n VChipGroup: {\n direction: legendDirection.value,\n },\n VChip: {\n density: props.density,\n },\n VAvatar: {\n size: legendAvatarSize.value,\n },\n }\n\n const tooltipDefaults = {\n VAvatar: {\n size: typeof props.tooltip === 'object' ? props.tooltip.avatarSize : 28,\n },\n }\n\n const avatarSlot = ({ item }: { item: PieItem }) => (\n <VAvatar color={ item.color } start>\n { item.pattern && (\n <svg height=\"40\" width=\"40\">\n <rect width=\"40\" height=\"40\" fill={ item.pattern } />\n </svg>\n )}\n </VAvatar>\n )\n\n return (\n <div\n class={[\n 'v-pie',\n `v-pie--legend-${legendMode.value}`,\n ]}\n style={{\n '--v-pie-size': convertToUnit(props.size),\n }}\n >\n { slots.title?.() ?? (props.title && (<div class=\"v-pie__title\">{ props.title }</div>)) }\n <div\n class={[\n 'v-pie__content',\n colorClasses.value,\n ]}\n style={[\n {\n transform: `rotate(${rotateDeg.value})`,\n marginBottom: `calc(-1 * ${convertToUnit(props.size)} * ${gaugeOffset.value})`,\n },\n textColorStyles.value,\n ]}\n >\n <div\n class={[\n 'v-pie__content-underlay',\n colorClasses.value,\n ]}\n style={ colorStyles.value }\n />\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 100 100\"\n >\n { arcs.value.map((item, index) => (\n <VPieSegment\n { ...segmentProps }\n key={ item.key }\n color={ item.color }\n value={ isActive(item) ? arcSize(item.value) : 0 }\n rotate={ arcOffset(index) }\n pattern={ item.pattern }\n onMouseenter={ () => onMouseenter(item) }\n onMouseleave={ () => onMouseleave() }\n />\n ))}\n </svg>\n\n <div\n class=\"v-pie__center-content\"\n style={{\n transform: `translate(-50%, -50%)\n rotate(-${rotateDeg.value})\n translateY(calc(-100% * ${gaugeOffset.value}))`,\n }}\n >\n <div>\n { slots.center?.({ total: total.value }) }\n </div>\n </div>\n </div>\n\n { legendConfig.value.visible && (\n <VDefaultsProvider key=\"legend\" defaults={ legendDefaults }>\n <div class=\"v-pie__legend\">\n { slots.legend?.({ isActive, toggle, items: arcs.value, total: total.value }) ?? (\n <VChipGroup\n column\n multiple\n v-model={ visibleItemsKeys.value }\n >\n { arcs.value.map(item => (\n <VChip\n value={ item.key }\n v-slots={{\n prepend: () => avatarSlot({ item }),\n default: () => (\n <div class=\"v-pie__legend__text\">\n { slots['legend-text']?.({ item, total: total.value }) ?? legendTextFormatFunction.value(item) }\n </div>\n ),\n }}\n />\n ))}\n </VChipGroup>\n )}\n </div>\n </VDefaultsProvider>\n )}\n { !!props.tooltip && (\n <VDefaultsProvider defaults={ tooltipDefaults }>\n <VPieTooltip\n { ...tooltipProps }\n v-slots={{\n default: slots.tooltip ? slotProps => slots.tooltip?.({ ...slotProps, total: total.value }) : undefined,\n prepend: avatarSlot,\n }}\n />\n </VDefaultsProvider>\n )}\n </div>\n )\n }\n },\n})\n\nexport type VPie = InstanceType<typeof VPie>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VPie.js","names":["makeVPieSegmentProps","VPieSegment","VPieTooltip","VAvatar","VChip","VChipGroup","VDefaultsProvider","useColor","makeDensityProps","vClickOutside","computed","shallowRef","toRef","watch","formatTextTemplate","convertToUnit","genericComponent","pick","propsFactory","makeVPieProps","title","String","bgColor","items","type","Array","default","palette","itemKey","itemValue","itemTitle","size","Number","rotate","gaugeCut","legend","Boolean","Object","tooltip","VPie","name","directives","props","setup","_ref","slots","legendConfig","visible","position","textFormat","colorClasses","colorStyles","background","textColorStyles","value","legendAvatarSize","comfortable","compact","density","legendDirection","includes","legendMode","legendTextFormatFunction","item","arcs","filter","map","index","key","color","colorFromPalette","pattern","patternFromPalette","raw","visibleItemsKeys","length","a","immediate","visibleItems","isVisible","total","reduce","sum","gaugeOffset","Math","cos","PI","min","rotateDeg","arcOffset","slice","acc","s","arcSize","v","undefined","paletteItem","toggle","x","tooltipItem","tooltipVisible","tooltipTarget","mouseLeaveTimeout","setItemActive","active","forEach","isActive","setTooltip","clearTimeout","setTimeout","frame","onSvgMousemove","_ref2","clientX","clientY","cancelAnimationFrame","requestAnimationFrame","onSvgTouchstart","_ref3","touches","onSvgClickOutside","segmentProps","defaultTooltipTransition","duration","tooltipProps","modelValue","titleFormat","subtitleFormat","transition","offset","target","legendDefaults","direction","tooltipDefaults","avatarSize","avatarSlot","_ref4","_createVNode","_createElementVNode","_normalizeClass","_normalizeStyle","transform","marginBottom","_withDirectives","_mergeProps","val","onTouchend","handler","center","$event","prepend","slotProps"],"sources":["../../../src/labs/VPie/VPie.tsx"],"sourcesContent":["// Styles\nimport './VPie.sass'\n\n// Components\nimport { makeVPieSegmentProps, VPieSegment } from './VPieSegment'\nimport { VPieTooltip } from './VPieTooltip'\nimport { VAvatar } from '@/components/VAvatar'\nimport { VChip } from '@/components/VChip'\nimport { VChipGroup } from '@/components/VChipGroup'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\n\n// Composables\nimport { useColor } from '@/composables/color'\nimport { makeDensityProps } from '@/composables/density'\n\n// Directives\nimport vClickOutside from '@/directives/click-outside'\n\n// Utilities\nimport { computed, shallowRef, toRef, watch } from 'vue'\nimport { formatTextTemplate } from './utils'\nimport { convertToUnit, genericComponent, pick, propsFactory } from '@/util'\n\n// Types\nimport type { PropType, TransitionProps } from 'vue'\nimport type { PieItem, TextTemplate } from './types'\n\nexport type VPieSlots = {\n center: { total: number }\n legend: {\n isActive: (item: PieItem) => boolean\n toggle: (item: PieItem) => void\n items: PieItem[]\n total: number\n }\n 'legend-text': {\n item: PieItem\n total: number\n }\n title: never\n tooltip: {\n item: PieItem\n total: number\n }\n}\n\nexport const makeVPieProps = propsFactory({\n title: String,\n bgColor: String,\n items: {\n type: Array as PropType<Record<string, any> | { color?: string, pattern?: string }[]>,\n default: () => [],\n },\n palette: {\n type: Array as PropType<({ color?: string, pattern?: string } | string)[]>,\n default: () => [],\n },\n itemKey: {\n type: String,\n default: 'key',\n },\n itemValue: {\n type: String,\n default: 'value',\n },\n itemTitle: {\n type: String,\n default: 'title',\n },\n size: {\n type: [Number, String],\n default: 250,\n },\n rotate: [Number, String],\n gaugeCut: [Number, String],\n legend: {\n type: [Boolean, Object] as PropType<boolean | {\n position?: 'left' | 'top' | 'right' | 'bottom'\n textFormat?: TextTemplate\n }>,\n default: false,\n },\n tooltip: {\n type: [Boolean, Object] as PropType<boolean | {\n titleFormat?: TextTemplate\n subtitleFormat?: TextTemplate\n avatarSize?: number\n transition?: string | boolean | TransitionProps\n offset?: number\n }>,\n default: false,\n },\n\n ...makeDensityProps(),\n ...pick(makeVPieSegmentProps(), [\n 'animation',\n 'gap',\n 'rounded',\n 'innerCut',\n 'hoverScale',\n 'hideSlice',\n 'reveal',\n ]),\n}, 'VPie')\n\nexport const VPie = genericComponent<VPieSlots>()({\n name: 'VPie',\n\n directives: { vClickOutside },\n\n props: makeVPieProps(),\n\n setup (props, { slots }) {\n const legendConfig = computed(() => ({\n visible: !!props.legend,\n position: 'bottom',\n textFormat: '[title]',\n ...(typeof props.legend === 'object' ? props.legend : {}),\n }))\n\n const { colorClasses, colorStyles } = useColor(() => ({ background: props.bgColor }))\n const textColorStyles = toRef(() => pick(colorStyles.value, ['color', 'caretColor']))\n\n const legendAvatarSize = toRef(() => ({ default: 20, comfortable: 18, compact: 16 }[props.density ?? 'default']))\n const legendDirection = toRef(() => ['left', 'right'].includes(legendConfig.value.position) ? 'vertical' : 'horizontal')\n\n const legendMode = toRef(() => !legendConfig.value.visible ? 'hidden' : legendConfig.value.position)\n\n const legendTextFormatFunction = toRef(() => (item: PieItem) => {\n return typeof legendConfig.value.textFormat === 'function'\n ? legendConfig.value.textFormat(item)\n : formatTextTemplate(legendConfig.value.textFormat, item)\n })\n\n const arcs = computed<PieItem[]>(() => {\n // hidden items get (value: 0) to trigger disappearing animation\n return props.items\n .filter(Boolean)\n .map((item: any, index: number) => {\n return {\n key: item[props.itemKey],\n color: item.color ?? colorFromPalette(index),\n value: item[props.itemValue],\n title: String(item[props.itemTitle]),\n pattern: item.pattern ?? patternFromPalette(index),\n raw: item,\n } as PieItem\n })\n })\n\n const visibleItemsKeys = shallowRef<PieItem['key'][]>([])\n\n watch(() => arcs.value.length, () => {\n // reset when number of items changes\n visibleItemsKeys.value = arcs.value.map(a => a.key)\n }, { immediate: true })\n\n const visibleItems = computed(() => {\n // hidden items get (value: 0) to trigger disappearing animation\n return arcs.value.map(item => {\n return isVisible(item)\n ? item\n : { ...item, value: 0 }\n })\n })\n\n const total = computed(() => visibleItems.value.reduce((sum, item) => sum + item.value, 0))\n\n const gaugeCut = toRef(() => Number(props.gaugeCut ?? 0))\n const gaugeOffset = computed(() => (1 - Math.cos(Math.PI * Math.min(90, gaugeCut.value / 2) / 180)) / 2)\n const rotateDeg = computed(() => `${gaugeCut.value ? (180 + gaugeCut.value / 2) : (props.rotate ?? 0)}deg`)\n\n function arcOffset (index: number) {\n return visibleItems.value\n .slice(0, index)\n .reduce((acc, s) => acc + (total.value > 0 ? s.value / total.value : 0) * (360 - gaugeCut.value), 0)\n }\n\n function arcSize (v: number) { return v / total.value * (100 - gaugeCut.value / 3.6) }\n\n function colorFromPalette (index: number) {\n if (props.palette.length === 0) return undefined\n const paletteItem = props.palette[index % props.palette.length]\n return typeof paletteItem === 'object' ? paletteItem.color : paletteItem\n }\n\n function patternFromPalette (index: number) {\n if (props.palette.length === 0) return undefined\n const paletteItem = props.palette[index % props.palette.length]\n return typeof paletteItem === 'object' ? paletteItem.pattern : undefined\n }\n\n function isVisible (item: PieItem) {\n return visibleItemsKeys.value.includes(item.key)\n }\n\n function toggle (item: PieItem) {\n if (isVisible(item)) {\n visibleItemsKeys.value = visibleItemsKeys.value.filter(x => x !== item.key)\n } else {\n visibleItemsKeys.value = [...visibleItemsKeys.value, item.key]\n }\n }\n\n const tooltipItem = shallowRef<PieItem | null>(null)\n const tooltipVisible = shallowRef(false)\n const tooltipTarget = shallowRef<[x: number, y: number]>([0, 0])\n\n let mouseLeaveTimeout = null! as ReturnType<typeof setTimeout>\n\n function setItemActive (item: PieItem, active: boolean) {\n arcs.value.forEach(a => a.isActive = a.key === item.key && active)\n\n if (props.tooltip) {\n setTooltip(item, active)\n }\n }\n\n function setTooltip (item: PieItem, active: boolean) {\n clearTimeout(mouseLeaveTimeout)\n\n if (active) {\n tooltipVisible.value = true\n tooltipItem.value = item\n } else {\n mouseLeaveTimeout = setTimeout(() => {\n tooltipVisible.value = false\n\n // intentionally reusing timeout here\n mouseLeaveTimeout = setTimeout(() => {\n tooltipItem.value = null\n }, 500)\n }, 100)\n }\n }\n\n let frame = -1\n function onSvgMousemove ({ clientX, clientY }: MouseEvent) {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n tooltipTarget.value = [clientX, clientY]\n })\n }\n\n function onSvgTouchstart ({ touches }: TouchEvent) {\n if (!touches) return\n const { clientX, clientY } = touches[0]\n tooltipTarget.value = [clientX, clientY]\n }\n\n function onSvgClickOutside () {\n arcs.value.forEach(a => a.isActive = false)\n tooltipVisible.value = false\n }\n\n return () => {\n const segmentProps = pick(props, [\n 'animation',\n 'gap',\n 'rounded',\n 'hideSlice',\n 'reveal',\n 'innerCut',\n 'hoverScale',\n ])\n\n const defaultTooltipTransition = {\n name: 'fade-transition',\n duration: 150,\n }\n\n const tooltipProps = {\n item: tooltipItem.value,\n modelValue: tooltipVisible.value,\n titleFormat: typeof props.tooltip === 'object' ? props.tooltip.titleFormat : '[title]',\n subtitleFormat: typeof props.tooltip === 'object' ? props.tooltip.subtitleFormat : '[value]',\n transition: typeof props.tooltip === 'object' ? props.tooltip.transition : defaultTooltipTransition,\n offset: typeof props.tooltip === 'object' ? props.tooltip.offset : 16,\n target: tooltipTarget.value,\n }\n\n const legendDefaults = {\n VChipGroup: {\n direction: legendDirection.value,\n },\n VChip: {\n density: props.density,\n },\n VAvatar: {\n size: legendAvatarSize.value,\n },\n }\n\n const tooltipDefaults = {\n VAvatar: {\n size: typeof props.tooltip === 'object' ? props.tooltip.avatarSize : 28,\n },\n }\n\n const avatarSlot = ({ item }: { item: PieItem }) => (\n <VAvatar color={ item.color } start>\n { item.pattern && (\n <svg height=\"40\" width=\"40\">\n <rect width=\"40\" height=\"40\" fill={ item.pattern } />\n </svg>\n )}\n </VAvatar>\n )\n\n return (\n <div\n class={[\n 'v-pie',\n `v-pie--legend-${legendMode.value}`,\n ]}\n style={{\n '--v-pie-size': convertToUnit(props.size),\n }}\n >\n { slots.title?.() ?? (props.title && (<div class=\"v-pie__title\">{ props.title }</div>)) }\n <div\n class={[\n 'v-pie__content',\n colorClasses.value,\n ]}\n style={[\n {\n transform: `rotate(${rotateDeg.value})`,\n marginBottom: `calc(-1 * ${convertToUnit(props.size)} * ${gaugeOffset.value})`,\n },\n textColorStyles.value,\n ]}\n >\n <div\n class={[\n 'v-pie__content-underlay',\n colorClasses.value,\n ]}\n style={ colorStyles.value }\n />\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 100 100\"\n class=\"v-pie__segments\"\n onMousemove={ onSvgMousemove }\n onTouchstart={ onSvgTouchstart }\n v-click-outside={{ handler: onSvgClickOutside }}\n >\n { arcs.value.map((item, index) => (\n <VPieSegment\n { ...segmentProps }\n key={ item.key }\n active={ item.isActive }\n color={ item.color }\n value={ isVisible(item) ? arcSize(item.value) : 0 }\n rotate={ arcOffset(index) }\n pattern={ item.pattern }\n onUpdate:active={ val => setItemActive(item, val) }\n onTouchend={ () => setItemActive(item, true) }\n />\n ))}\n </svg>\n\n <div\n class=\"v-pie__center-content\"\n style={{\n transform: `translate(-50%, -50%)\n rotate(-${rotateDeg.value})\n translateY(calc(-100% * ${gaugeOffset.value}))`,\n }}\n >\n <div>\n { slots.center?.({ total: total.value }) }\n </div>\n </div>\n </div>\n\n { legendConfig.value.visible && (\n <VDefaultsProvider key=\"legend\" defaults={ legendDefaults }>\n <div class=\"v-pie__legend\">\n { slots.legend?.({ isActive: isVisible, toggle, items: arcs.value, total: total.value }) ?? (\n <VChipGroup\n column\n multiple\n v-model={ visibleItemsKeys.value }\n >\n { arcs.value.map(item => (\n <VChip\n value={ item.key }\n v-slots={{\n prepend: () => avatarSlot({ item }),\n default: () => (\n <div class=\"v-pie__legend__text\">\n { slots['legend-text']?.({ item, total: total.value }) ?? legendTextFormatFunction.value(item) }\n </div>\n ),\n }}\n />\n ))}\n </VChipGroup>\n )}\n </div>\n </VDefaultsProvider>\n )}\n { !!props.tooltip && (\n <VDefaultsProvider defaults={ tooltipDefaults }>\n <VPieTooltip\n { ...tooltipProps }\n v-slots={{\n default: slots.tooltip ? slotProps => slots.tooltip?.({ ...slotProps, total: total.value }) : undefined,\n prepend: avatarSlot,\n }}\n />\n </VDefaultsProvider>\n )}\n </div>\n )\n }\n },\n})\n\nexport type VPie = InstanceType<typeof VPie>\n"],"mappings":"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","ignoreList":[]}
@@ -43,6 +43,9 @@
43
43
  .v-overlay__content
44
44
  pointer-events: none !important
45
45
 
46
+ &__segments
47
+ border-radius: 50%
48
+
46
49
  &__content-underlay
47
50
  border-radius: 50%
48
51
  position: absolute
@@ -2,6 +2,7 @@ import { easingPatterns } from "../../util/index.js";
2
2
  import type { PropType } from 'vue';
3
3
  export declare const makeVPieSegmentProps: <Defaults extends {
4
4
  reveal?: unknown;
5
+ active?: unknown;
5
6
  rotate?: unknown;
6
7
  value?: unknown;
7
8
  color?: unknown;
@@ -35,6 +36,10 @@ export declare const makeVPieSegmentProps: <Defaults extends {
35
36
  duration?: number;
36
37
  }> | Defaults["reveal"];
37
38
  };
39
+ active: unknown extends Defaults["active"] ? BooleanConstructor : {
40
+ type: PropType<unknown extends Defaults["active"] ? boolean : boolean | Defaults["active"]>;
41
+ default: unknown extends Defaults["active"] ? boolean : boolean | Defaults["active"];
42
+ };
38
43
  rotate: unknown extends Defaults["rotate"] ? (StringConstructor | NumberConstructor)[] : {
39
44
  type: PropType<unknown extends Defaults["rotate"] ? string | number : string | number | Defaults["rotate"]>;
40
45
  default: unknown extends Defaults["rotate"] ? string | number : NonNullable<string | number> | Defaults["rotate"];
@@ -114,6 +119,7 @@ export declare const makeVPieSegmentProps: <Defaults extends {
114
119
  };
115
120
  export declare const VPieSegment: {
116
121
  new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{
122
+ active: boolean;
117
123
  animation: boolean | {
118
124
  duration?: number;
119
125
  easing?: keyof typeof easingPatterns;
@@ -142,7 +148,12 @@ export declare const VPieSegment: {
142
148
  } | undefined;
143
149
  } & {
144
150
  "v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
145
- }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
151
+ } & {
152
+ "onUpdate:active"?: ((val: boolean) => any) | undefined;
153
+ }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
154
+ 'update:active': (val: boolean) => true;
155
+ }, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
156
+ active: boolean;
146
157
  animation: boolean | {
147
158
  duration?: number;
148
159
  easing?: keyof typeof easingPatterns;
@@ -163,6 +174,7 @@ export declare const VPieSegment: {
163
174
  M: {};
164
175
  Defaults: {};
165
176
  }, {
177
+ active: boolean;
166
178
  animation: boolean | {
167
179
  duration?: number;
168
180
  easing?: keyof typeof easingPatterns;
@@ -191,7 +203,10 @@ export declare const VPieSegment: {
191
203
  } | undefined;
192
204
  } & {
193
205
  "v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
206
+ } & {
207
+ "onUpdate:active"?: ((val: boolean) => any) | undefined;
194
208
  }, () => JSX.Element, {}, {}, {}, {
209
+ active: boolean;
195
210
  animation: boolean | {
196
211
  duration?: number;
197
212
  easing?: keyof typeof easingPatterns;
@@ -207,6 +222,7 @@ export declare const VPieSegment: {
207
222
  __isTeleport?: never;
208
223
  __isSuspense?: never;
209
224
  } & import("vue").ComponentOptionsBase<{
225
+ active: boolean;
210
226
  animation: boolean | {
211
227
  duration?: number;
212
228
  easing?: keyof typeof easingPatterns;
@@ -235,7 +251,12 @@ export declare const VPieSegment: {
235
251
  } | undefined;
236
252
  } & {
237
253
  "v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
238
- }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
254
+ } & {
255
+ "onUpdate:active"?: ((val: boolean) => any) | undefined;
256
+ }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
257
+ 'update:active': (val: boolean) => true;
258
+ }, string, {
259
+ active: boolean;
239
260
  animation: boolean | {
240
261
  duration?: number;
241
262
  easing?: keyof typeof easingPatterns;
@@ -255,6 +276,7 @@ export declare const VPieSegment: {
255
276
  }>;
256
277
  default: boolean;
257
278
  };
279
+ active: BooleanConstructor;
258
280
  rotate: (StringConstructor | NumberConstructor)[];
259
281
  value: {
260
282
  type: NumberConstructor;
@@ -284,6 +306,7 @@ export declare const VPieSegment: {
284
306
  }>;
285
307
  default: boolean;
286
308
  };
309
+ active: BooleanConstructor;
287
310
  rotate: (StringConstructor | NumberConstructor)[];
288
311
  value: {
289
312
  type: NumberConstructor;
@@ -1,10 +1,12 @@
1
1
  import { createElementVNode as _createElementVNode } from "vue";
2
2
  // Composables
3
+ import { useProxiedModel } from "../../composables/proxiedModel.js";
3
4
  import { makeRevealProps, useReveal } from "../../composables/reveal.js"; // Utilities
4
- import { computed, shallowRef, toRef } from 'vue';
5
+ import { computed, toRef } from 'vue';
5
6
  import { useInnerSlicePath, useOuterSlicePath, usePieArc } from "./utils.js";
6
7
  import { easingPatterns, genericComponent, propsFactory, useTransition } from "../../util/index.js"; // Types
7
8
  export const makeVPieSegmentProps = propsFactory({
9
+ active: Boolean,
8
10
  rotate: [Number, String],
9
11
  value: {
10
12
  type: Number,
@@ -29,8 +31,11 @@ export const makeVPieSegmentProps = propsFactory({
29
31
  export const VPieSegment = genericComponent()({
30
32
  name: 'VPieSegment',
31
33
  props: makeVPieSegmentProps(),
34
+ emits: {
35
+ 'update:active': val => true
36
+ },
32
37
  setup(props) {
33
- const isHovering = shallowRef(false);
38
+ const isActive = useProxiedModel(props, 'active');
34
39
  const {
35
40
  state: revealState,
36
41
  duration: revealDuration
@@ -51,12 +56,12 @@ export const VPieSegment = genericComponent()({
51
56
  outerX,
52
57
  outerY,
53
58
  arcWidth
54
- } = usePieArc(props, isHovering);
59
+ } = usePieArc(props, isActive);
55
60
  const arcSize = toRef(() => revealState.value === 'initial' ? 0 : normalizedValue.value);
56
61
  const currentArcSize = useTransition(arcSize, transitionConfig);
57
62
  const angle = toRef(() => revealState.value === 'initial' ? 0 : Number(props.rotate ?? 0) + Number(props.gap ?? 0) / 2);
58
63
  const currentAngle = useTransition(angle, transitionConfig);
59
- const arcRadius = toRef(() => 50 * (isHovering.value ? 1 : 1 - hoverZoomRatio.value));
64
+ const arcRadius = toRef(() => 50 * (isActive.value ? 1 : 1 - hoverZoomRatio.value));
60
65
  const currentArcRadius = useTransition(arcRadius, transitionConfig);
61
66
  const currentArcWidth = useTransition(arcWidth, transitionConfig);
62
67
  const outerSlicePath = useOuterSlicePath({
@@ -95,8 +100,8 @@ export const VPieSegment = genericComponent()({
95
100
  "transform": `rotate(${currentAngle.value} 50 50)`,
96
101
  "class": "v-pie-segment__overlay",
97
102
  "d": overlayPath.value,
98
- "onMouseenter": () => isHovering.value = true,
99
- "onMouseleave": () => isHovering.value = false
103
+ "onMouseenter": () => isActive.value = true,
104
+ "onMouseleave": () => isActive.value = false
100
105
  }, null)]);
101
106
  }
102
107
  });
@@ -1 +1 @@
1
- {"version":3,"file":"VPieSegment.js","names":["makeRevealProps","useReveal","computed","shallowRef","toRef","useInnerSlicePath","useOuterSlicePath","usePieArc","easingPatterns","genericComponent","propsFactory","useTransition","makeVPieSegmentProps","rotate","Number","String","value","type","default","color","innerCut","hoverScale","gap","rounded","animation","Boolean","Object","pattern","hideSlice","VPieSegment","name","props","setup","isHovering","state","revealState","duration","revealDuration","transitionConfig","defaultEasing","defaultDuration","easingName","easing","includes","transition","hoverZoomRatio","normalizedValue","normalizedInnerCut","outerX","outerY","arcWidth","arcSize","currentArcSize","angle","currentAngle","arcRadius","currentArcRadius","currentArcWidth","outerSlicePath","radius","size","width","innerSlicePath","overlayPath","_createElementVNode","onMouseenter","onMouseleave"],"sources":["../../../src/labs/VPie/VPieSegment.tsx"],"sourcesContent":["// Composables\nimport { makeRevealProps, useReveal } from '@/composables/reveal'\n\n// Utilities\nimport { computed, shallowRef, toRef } from 'vue'\nimport { useInnerSlicePath, useOuterSlicePath, usePieArc } from './utils'\nimport { easingPatterns, genericComponent, propsFactory, useTransition } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVPieSegmentProps = propsFactory({\n rotate: [Number, String],\n value: {\n type: Number,\n default: 0,\n },\n color: String,\n innerCut: [Number, String],\n hoverScale: {\n type: [Number, String],\n default: 0.05,\n },\n gap: [Number, String],\n rounded: [Number, String],\n animation: {\n type: [Boolean, Object] as PropType<boolean | {\n duration?: number\n easing?: keyof typeof easingPatterns\n }>,\n default: false,\n },\n pattern: String,\n hideSlice: Boolean,\n ...makeRevealProps(),\n}, 'VPieSegment')\n\nexport const VPieSegment = genericComponent()({\n name: 'VPieSegment',\n\n props: makeVPieSegmentProps(),\n\n setup (props) {\n const isHovering = shallowRef(false)\n\n const { state: revealState, duration: revealDuration } = useReveal(props)\n\n const transitionConfig = computed(() => {\n const defaultEasing = 'easeInOutCubic'\n const defaultDuration = 400\n\n const easingName = typeof props.animation === 'object'\n ? props.animation.easing ?? defaultEasing\n : defaultEasing\n\n return {\n duration: ['initial', 'pending'].includes(revealState.value)\n ? revealDuration.value\n : typeof props.animation === 'object'\n ? props.animation.duration\n : (props.animation ? defaultDuration : 0),\n transition: easingPatterns[easingName],\n }\n })\n\n const {\n hoverZoomRatio,\n normalizedValue,\n normalizedInnerCut,\n outerX,\n outerY,\n arcWidth,\n } = usePieArc(props, isHovering)\n\n const arcSize = toRef(() => revealState.value === 'initial' ? 0 : normalizedValue.value)\n const currentArcSize = useTransition(arcSize, transitionConfig)\n\n const angle = toRef(() => revealState.value === 'initial' ? 0 : (Number(props.rotate ?? 0) + Number(props.gap ?? 0) / 2))\n const currentAngle = useTransition(angle, transitionConfig)\n\n const arcRadius = toRef(() => 50 * (isHovering.value ? 1 : (1 - hoverZoomRatio.value)))\n const currentArcRadius = useTransition(arcRadius, transitionConfig)\n const currentArcWidth = useTransition(arcWidth, transitionConfig)\n\n const outerSlicePath = useOuterSlicePath({\n angle: currentAngle,\n radius: currentArcRadius,\n size: currentArcSize,\n width: currentArcWidth,\n rounded: () => Number(props.rounded ?? 0),\n })\n\n const innerSlicePath = useInnerSlicePath({\n angle: currentAngle,\n radius: () => currentArcRadius.value - currentArcWidth.value,\n size: currentArcSize,\n })\n\n const overlayPath = toRef(() => `M 50 0 A 50 50 0 ${normalizedValue.value > 50 ? 1 : 0} 1 ${outerX.value} ${outerY.value} L 50 50`)\n\n return () => (\n <g\n class=\"v-pie-segment\"\n style={{ color: props.color }}\n >\n <path\n key=\"outer-slice\"\n fill=\"currentColor\"\n shape-rendering=\"geometricPrecision\"\n d={ outerSlicePath.value }\n />\n { props.pattern && (\n <path\n key=\"pattern-overlay\"\n shape-rendering=\"geometricPrecision\"\n fill={ props.pattern }\n d={ outerSlicePath.value }\n />\n )}\n { !props.hideSlice && normalizedInnerCut.value > 0 && (\n <path\n key=\"inner-slice\"\n fill=\"oklch(from currentColor l c h / calc(alpha / 2))\"\n d={ innerSlicePath.value }\n />\n )}\n {['disabled', 'done'].includes(revealState.value) && (\n <path\n transform={ `rotate(${currentAngle.value} 50 50)` }\n class=\"v-pie-segment__overlay\"\n d={ overlayPath.value }\n onMouseenter={ () => isHovering.value = true }\n onMouseleave={ () => isHovering.value = false }\n />\n )}\n </g>\n )\n },\n})\n\nexport type VPieSegment = InstanceType<typeof VPieSegment>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VPieSegment.js","names":["useProxiedModel","makeRevealProps","useReveal","computed","toRef","useInnerSlicePath","useOuterSlicePath","usePieArc","easingPatterns","genericComponent","propsFactory","useTransition","makeVPieSegmentProps","active","Boolean","rotate","Number","String","value","type","default","color","innerCut","hoverScale","gap","rounded","animation","Object","pattern","hideSlice","VPieSegment","name","props","emits","val","setup","isActive","state","revealState","duration","revealDuration","transitionConfig","defaultEasing","defaultDuration","easingName","easing","includes","transition","hoverZoomRatio","normalizedValue","normalizedInnerCut","outerX","outerY","arcWidth","arcSize","currentArcSize","angle","currentAngle","arcRadius","currentArcRadius","currentArcWidth","outerSlicePath","radius","size","width","innerSlicePath","overlayPath","_createElementVNode","onMouseenter","onMouseleave"],"sources":["../../../src/labs/VPie/VPieSegment.tsx"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRevealProps, useReveal } from '@/composables/reveal'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { useInnerSlicePath, useOuterSlicePath, usePieArc } from './utils'\nimport { easingPatterns, genericComponent, propsFactory, useTransition } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVPieSegmentProps = propsFactory({\n active: Boolean,\n rotate: [Number, String],\n value: {\n type: Number,\n default: 0,\n },\n color: String,\n innerCut: [Number, String],\n hoverScale: {\n type: [Number, String],\n default: 0.05,\n },\n gap: [Number, String],\n rounded: [Number, String],\n animation: {\n type: [Boolean, Object] as PropType<boolean | {\n duration?: number\n easing?: keyof typeof easingPatterns\n }>,\n default: false,\n },\n pattern: String,\n hideSlice: Boolean,\n ...makeRevealProps(),\n}, 'VPieSegment')\n\nexport const VPieSegment = genericComponent()({\n name: 'VPieSegment',\n\n props: makeVPieSegmentProps(),\n\n emits: {\n 'update:active': (val: boolean) => true,\n },\n\n setup (props) {\n const isActive = useProxiedModel(props, 'active')\n\n const { state: revealState, duration: revealDuration } = useReveal(props)\n\n const transitionConfig = computed(() => {\n const defaultEasing = 'easeInOutCubic'\n const defaultDuration = 400\n\n const easingName = typeof props.animation === 'object'\n ? props.animation.easing ?? defaultEasing\n : defaultEasing\n\n return {\n duration: ['initial', 'pending'].includes(revealState.value)\n ? revealDuration.value\n : typeof props.animation === 'object'\n ? props.animation.duration\n : (props.animation ? defaultDuration : 0),\n transition: easingPatterns[easingName],\n }\n })\n\n const {\n hoverZoomRatio,\n normalizedValue,\n normalizedInnerCut,\n outerX,\n outerY,\n arcWidth,\n } = usePieArc(props, isActive)\n\n const arcSize = toRef(() => revealState.value === 'initial' ? 0 : normalizedValue.value)\n const currentArcSize = useTransition(arcSize, transitionConfig)\n\n const angle = toRef(() => revealState.value === 'initial' ? 0 : (Number(props.rotate ?? 0) + Number(props.gap ?? 0) / 2))\n const currentAngle = useTransition(angle, transitionConfig)\n\n const arcRadius = toRef(() => 50 * (isActive.value ? 1 : (1 - hoverZoomRatio.value)))\n const currentArcRadius = useTransition(arcRadius, transitionConfig)\n const currentArcWidth = useTransition(arcWidth, transitionConfig)\n\n const outerSlicePath = useOuterSlicePath({\n angle: currentAngle,\n radius: currentArcRadius,\n size: currentArcSize,\n width: currentArcWidth,\n rounded: () => Number(props.rounded ?? 0),\n })\n\n const innerSlicePath = useInnerSlicePath({\n angle: currentAngle,\n radius: () => currentArcRadius.value - currentArcWidth.value,\n size: currentArcSize,\n })\n\n const overlayPath = toRef(() => `M 50 0 A 50 50 0 ${normalizedValue.value > 50 ? 1 : 0} 1 ${outerX.value} ${outerY.value} L 50 50`)\n\n return () => (\n <g\n class=\"v-pie-segment\"\n style={{ color: props.color }}\n >\n <path\n key=\"outer-slice\"\n fill=\"currentColor\"\n shape-rendering=\"geometricPrecision\"\n d={ outerSlicePath.value }\n />\n { props.pattern && (\n <path\n key=\"pattern-overlay\"\n shape-rendering=\"geometricPrecision\"\n fill={ props.pattern }\n d={ outerSlicePath.value }\n />\n )}\n { !props.hideSlice && normalizedInnerCut.value > 0 && (\n <path\n key=\"inner-slice\"\n fill=\"oklch(from currentColor l c h / calc(alpha / 2))\"\n d={ innerSlicePath.value }\n />\n )}\n {['disabled', 'done'].includes(revealState.value) && (\n <path\n transform={ `rotate(${currentAngle.value} 50 50)` }\n class=\"v-pie-segment__overlay\"\n d={ overlayPath.value }\n onMouseenter={ () => isActive.value = true }\n onMouseleave={ () => isActive.value = false }\n />\n )}\n </g>\n )\n },\n})\n\nexport type VPieSegment = InstanceType<typeof VPieSegment>\n"],"mappings":";AAAA;AAAA,SACSA,eAAe;AAAA,SACfC,eAAe,EAAEC,SAAS,uCAEnC;AACA,SAASC,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC5BC,iBAAiB,EAAEC,iBAAiB,EAAEC,SAAS;AAAA,SAC/CC,cAAc,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,aAAa,+BAEtE;AAGA,OAAO,MAAMC,oBAAoB,GAAGF,YAAY,CAAC;EAC/CG,MAAM,EAAEC,OAAO;EACfC,MAAM,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;EACxBC,KAAK,EAAE;IACLC,IAAI,EAAEH,MAAM;IACZI,OAAO,EAAE;EACX,CAAC;EACDC,KAAK,EAAEJ,MAAM;EACbK,QAAQ,EAAE,CAACN,MAAM,EAAEC,MAAM,CAAC;EAC1BM,UAAU,EAAE;IACVJ,IAAI,EAAE,CAACH,MAAM,EAAEC,MAAM,CAAC;IACtBG,OAAO,EAAE;EACX,CAAC;EACDI,GAAG,EAAE,CAACR,MAAM,EAAEC,MAAM,CAAC;EACrBQ,OAAO,EAAE,CAACT,MAAM,EAAEC,MAAM,CAAC;EACzBS,SAAS,EAAE;IACTP,IAAI,EAAE,CAACL,OAAO,EAAEa,MAAM,CAGpB;IACFP,OAAO,EAAE;EACX,CAAC;EACDQ,OAAO,EAAEX,MAAM;EACfY,SAAS,EAAEf,OAAO;EAClB,GAAGb,eAAe,CAAC;AACrB,CAAC,EAAE,aAAa,CAAC;AAEjB,OAAO,MAAM6B,WAAW,GAAGrB,gBAAgB,CAAC,CAAC,CAAC;EAC5CsB,IAAI,EAAE,aAAa;EAEnBC,KAAK,EAAEpB,oBAAoB,CAAC,CAAC;EAE7BqB,KAAK,EAAE;IACL,eAAe,EAAGC,GAAY,IAAK;EACrC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAE;IACZ,MAAMI,QAAQ,GAAGpC,eAAe,CAACgC,KAAK,EAAE,QAAQ,CAAC;IAEjD,MAAM;MAAEK,KAAK,EAAEC,WAAW;MAAEC,QAAQ,EAAEC;IAAe,CAAC,GAAGtC,SAAS,CAAC8B,KAAK,CAAC;IAEzE,MAAMS,gBAAgB,GAAGtC,QAAQ,CAAC,MAAM;MACtC,MAAMuC,aAAa,GAAG,gBAAgB;MACtC,MAAMC,eAAe,GAAG,GAAG;MAE3B,MAAMC,UAAU,GAAG,OAAOZ,KAAK,CAACN,SAAS,KAAK,QAAQ,GAClDM,KAAK,CAACN,SAAS,CAACmB,MAAM,IAAIH,aAAa,GACvCA,aAAa;MAEjB,OAAO;QACLH,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAACO,QAAQ,CAACR,WAAW,CAACpB,KAAK,CAAC,GACxDsB,cAAc,CAACtB,KAAK,GACpB,OAAOc,KAAK,CAACN,SAAS,KAAK,QAAQ,GACjCM,KAAK,CAACN,SAAS,CAACa,QAAQ,GACvBP,KAAK,CAACN,SAAS,GAAGiB,eAAe,GAAG,CAAE;QAC7CI,UAAU,EAAEvC,cAAc,CAACoC,UAAU;MACvC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM;MACJI,cAAc;MACdC,eAAe;MACfC,kBAAkB;MAClBC,MAAM;MACNC,MAAM;MACNC;IACF,CAAC,GAAG9C,SAAS,CAACyB,KAAK,EAAEI,QAAQ,CAAC;IAE9B,MAAMkB,OAAO,GAAGlD,KAAK,CAAC,MAAMkC,WAAW,CAACpB,KAAK,KAAK,SAAS,GAAG,CAAC,GAAG+B,eAAe,CAAC/B,KAAK,CAAC;IACxF,MAAMqC,cAAc,GAAG5C,aAAa,CAAC2C,OAAO,EAAEb,gBAAgB,CAAC;IAE/D,MAAMe,KAAK,GAAGpD,KAAK,CAAC,MAAMkC,WAAW,CAACpB,KAAK,KAAK,SAAS,GAAG,CAAC,GAAIF,MAAM,CAACgB,KAAK,CAACjB,MAAM,IAAI,CAAC,CAAC,GAAGC,MAAM,CAACgB,KAAK,CAACR,GAAG,IAAI,CAAC,CAAC,GAAG,CAAE,CAAC;IACzH,MAAMiC,YAAY,GAAG9C,aAAa,CAAC6C,KAAK,EAAEf,gBAAgB,CAAC;IAE3D,MAAMiB,SAAS,GAAGtD,KAAK,CAAC,MAAM,EAAE,IAAIgC,QAAQ,CAAClB,KAAK,GAAG,CAAC,GAAI,CAAC,GAAG8B,cAAc,CAAC9B,KAAM,CAAC,CAAC;IACrF,MAAMyC,gBAAgB,GAAGhD,aAAa,CAAC+C,SAAS,EAAEjB,gBAAgB,CAAC;IACnE,MAAMmB,eAAe,GAAGjD,aAAa,CAAC0C,QAAQ,EAAEZ,gBAAgB,CAAC;IAEjE,MAAMoB,cAAc,GAAGvD,iBAAiB,CAAC;MACvCkD,KAAK,EAAEC,YAAY;MACnBK,MAAM,EAAEH,gBAAgB;MACxBI,IAAI,EAAER,cAAc;MACpBS,KAAK,EAAEJ,eAAe;MACtBnC,OAAO,EAAEA,CAAA,KAAMT,MAAM,CAACgB,KAAK,CAACP,OAAO,IAAI,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAMwC,cAAc,GAAG5D,iBAAiB,CAAC;MACvCmD,KAAK,EAAEC,YAAY;MACnBK,MAAM,EAAEA,CAAA,KAAMH,gBAAgB,CAACzC,KAAK,GAAG0C,eAAe,CAAC1C,KAAK;MAC5D6C,IAAI,EAAER;IACR,CAAC,CAAC;IAEF,MAAMW,WAAW,GAAG9D,KAAK,CAAC,MAAM,oBAAoB6C,eAAe,CAAC/B,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,MAAMiC,MAAM,CAACjC,KAAK,IAAIkC,MAAM,CAAClC,KAAK,UAAU,CAAC;IAEnI,OAAO,MAAAiD,mBAAA;MAAA;MAAA,SAGI;QAAE9C,KAAK,EAAEW,KAAK,CAACX;MAAM;IAAC,IAAA8C,mBAAA;MAAA;MAAA;MAAA;MAAA,KAMvBN,cAAc,CAAC3C;IAAK,UAExBc,KAAK,CAACJ,OAAO,IAAAuC,mBAAA;MAAA;MAAA;MAAA,QAIJnC,KAAK,CAACJ,OAAO;MAAA,KAChBiC,cAAc,CAAC3C;IAAK,QAE3B,EACC,CAACc,KAAK,CAACH,SAAS,IAAIqB,kBAAkB,CAAChC,KAAK,GAAG,CAAC,IAAAiD,mBAAA;MAAA;MAAA;MAAA,KAI1CF,cAAc,CAAC/C;IAAK,QAE3B,EACA,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC4B,QAAQ,CAACR,WAAW,CAACpB,KAAK,CAAC,IAAAiD,mBAAA;MAAA,aAEjC,UAAUV,YAAY,CAACvC,KAAK,SAAS;MAAA;MAAA,KAE7CgD,WAAW,CAAChD,KAAK;MAAA,gBACNkD,CAAA,KAAMhC,QAAQ,CAAClB,KAAK,GAAG,IAAI;MAAA,gBAC3BmD,CAAA,KAAMjC,QAAQ,CAAClB,KAAK,GAAG;IAAK,QAE9C,EAEJ;EACH;AACF,CAAC,CAAC","ignoreList":[]}
@@ -12,6 +12,7 @@ export declare const makeVPieTooltipProps: <Defaults extends {
12
12
  offset?: unknown;
13
13
  transition?: unknown;
14
14
  modelValue?: unknown;
15
+ target?: unknown;
15
16
  item?: unknown;
16
17
  titleFormat?: unknown;
17
18
  subtitleFormat?: unknown;
@@ -44,6 +45,10 @@ export declare const makeVPieTooltipProps: <Defaults extends {
44
45
  type: PropType<unknown extends Defaults["modelValue"] ? boolean : boolean | Defaults["modelValue"]>;
45
46
  default: unknown extends Defaults["modelValue"] ? boolean : boolean | Defaults["modelValue"];
46
47
  };
48
+ target: unknown extends Defaults["target"] ? PropType<[x: number, y: number]> : {
49
+ type: PropType<unknown extends Defaults["target"] ? [x: number, y: number] : [x: number, y: number] | Defaults["target"]>;
50
+ default: unknown extends Defaults["target"] ? [x: number, y: number] : [x: number, y: number] | Defaults["target"];
51
+ };
47
52
  item: unknown extends Defaults["item"] ? {
48
53
  type: PropType<PieItem | null>;
49
54
  default: null;
@@ -86,6 +91,7 @@ export declare const VPieTooltip: {
86
91
  transition?: string | boolean | (import("vue").TransitionProps & {
87
92
  component?: import("vue").Component;
88
93
  }) | null | undefined;
94
+ target?: [x: number, y: number] | undefined;
89
95
  } & {
90
96
  $children?: import("vue").VNodeChild | {
91
97
  $stable?: boolean;
@@ -144,6 +150,7 @@ export declare const VPieTooltip: {
144
150
  transition?: string | boolean | (import("vue").TransitionProps & {
145
151
  component?: import("vue").Component;
146
152
  }) | null | undefined;
153
+ target?: [x: number, y: number] | undefined;
147
154
  } & {
148
155
  $children?: import("vue").VNodeChild | {
149
156
  $stable?: boolean;
@@ -192,6 +199,7 @@ export declare const VPieTooltip: {
192
199
  transition?: string | boolean | (import("vue").TransitionProps & {
193
200
  component?: import("vue").Component;
194
201
  }) | null | undefined;
202
+ target?: [x: number, y: number] | undefined;
195
203
  } & {
196
204
  $children?: import("vue").VNodeChild | {
197
205
  $stable?: boolean;
@@ -242,6 +250,7 @@ export declare const VPieTooltip: {
242
250
  component?: import("vue").Component;
243
251
  })>;
244
252
  modelValue: BooleanConstructor;
253
+ target: PropType<[x: number, y: number]>;
245
254
  item: {
246
255
  type: PropType<PieItem | null>;
247
256
  default: null;
@@ -263,6 +272,7 @@ export declare const VPieTooltip: {
263
272
  component?: import("vue").Component;
264
273
  })>;
265
274
  modelValue: BooleanConstructor;
275
+ target: PropType<[x: number, y: number]>;
266
276
  item: {
267
277
  type: PropType<PieItem | null>;
268
278
  default: null;
@@ -3,11 +3,12 @@ import { createVNode as _createVNode } from "vue";
3
3
  import { VListItem } from "../../components/VList/VListItem.js";
4
4
  import { makeVTooltipProps, VTooltip } from "../../components/VTooltip/VTooltip.js"; // Composables
5
5
  import { makeTransitionProps, MaybeTransition } from "../../composables/transition.js"; // Utilities
6
- import { onBeforeUnmount, onMounted, shallowRef, toRef } from 'vue';
6
+ import { toRef } from 'vue';
7
7
  import { formatTextTemplate } from "./utils.js";
8
- import { genericComponent, getCurrentInstance, pick, propsFactory } from "../../util/index.js"; // Types
8
+ import { genericComponent, pick, propsFactory } from "../../util/index.js"; // Types
9
9
  export const makeVPieTooltipProps = propsFactory({
10
10
  modelValue: Boolean,
11
+ target: Object,
11
12
  item: {
12
13
  type: Object,
13
14
  default: null
@@ -30,25 +31,6 @@ export const VPieTooltip = genericComponent()({
30
31
  let {
31
32
  slots
32
33
  } = _ref;
33
- const target = shallowRef([0, 0]);
34
- const vm = getCurrentInstance('VPieTooltip');
35
- let frame = -1;
36
- function onMouseMove(_ref2) {
37
- let {
38
- clientX,
39
- clientY
40
- } = _ref2;
41
- cancelAnimationFrame(frame);
42
- frame = requestAnimationFrame(() => {
43
- target.value = [clientX, clientY];
44
- });
45
- }
46
- onMounted(() => {
47
- vm.proxy.$el.parentNode.addEventListener('mousemove', onMouseMove);
48
- });
49
- onBeforeUnmount(() => {
50
- vm.proxy.$el.parentNode.removeEventListener('mousemove', onMouseMove);
51
- });
52
34
  const tooltipTitleFormatFunction = toRef(() => segment => {
53
35
  return typeof props.titleFormat === 'function' ? props.titleFormat(segment) : formatTextTemplate(props.titleFormat, segment);
54
36
  });
@@ -58,7 +40,7 @@ export const VPieTooltip = genericComponent()({
58
40
  return () => _createVNode(VTooltip, {
59
41
  "offset": props.offset,
60
42
  "modelValue": props.modelValue,
61
- "target": target.value,
43
+ "target": props.target,
62
44
  "contentClass": "v-pie__tooltip-content"
63
45
  }, {
64
46
  default: () => [!!props.item && (slots.default?.({
@@ -1 +1 @@
1
- {"version":3,"file":"VPieTooltip.js","names":["VListItem","makeVTooltipProps","VTooltip","makeTransitionProps","MaybeTransition","onBeforeUnmount","onMounted","shallowRef","toRef","formatTextTemplate","genericComponent","getCurrentInstance","pick","propsFactory","makeVPieTooltipProps","modelValue","Boolean","item","type","Object","default","titleFormat","String","Function","subtitleFormat","VPieTooltip","name","props","setup","_ref","slots","target","vm","frame","onMouseMove","_ref2","clientX","clientY","cancelAnimationFrame","requestAnimationFrame","value","proxy","$el","parentNode","addEventListener","removeEventListener","tooltipTitleFormatFunction","segment","tooltipSubtitleFormatFunction","_createVNode","offset","transition","key","prepend","undefined"],"sources":["../../../src/labs/VPie/VPieTooltip.tsx"],"sourcesContent":["// Components\nimport { VListItem } from '@/components/VList/VListItem'\nimport { makeVTooltipProps, VTooltip } from '@/components/VTooltip/VTooltip'\n\n// Composables\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { onBeforeUnmount, onMounted, shallowRef, toRef } from 'vue'\nimport { formatTextTemplate } from './utils'\nimport { genericComponent, getCurrentInstance, pick, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { PieItem, TextTemplate } from './types'\n\nexport type VPieTooltipSlots = {\n default: { item: PieItem }\n prepend: { item: PieItem }\n}\n\nexport const makeVPieTooltipProps = propsFactory({\n modelValue: Boolean,\n item: {\n type: Object as PropType<PieItem | null>,\n default: null,\n },\n titleFormat: {\n type: [String, Function] as PropType<TextTemplate>,\n default: '[title]',\n },\n subtitleFormat: {\n type: [String, Function] as PropType<TextTemplate>,\n default: '[value]',\n },\n ...makeTransitionProps(),\n ...pick(makeVTooltipProps(), ['offset']),\n}, 'VPieTooltip')\n\nexport const VPieTooltip = genericComponent<VPieTooltipSlots>()({\n name: 'VPieTooltip',\n\n props: makeVPieTooltipProps(),\n\n setup (props, { slots }) {\n const target = shallowRef<[x: number, y: number]>([0, 0])\n const vm = getCurrentInstance('VPieTooltip')\n\n let frame = -1\n function onMouseMove ({ clientX, clientY }: MouseEvent) {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n target.value = [clientX, clientY]\n })\n }\n\n onMounted(() => {\n vm.proxy!.$el.parentNode.addEventListener('mousemove', onMouseMove)\n })\n\n onBeforeUnmount(() => {\n vm.proxy!.$el.parentNode.removeEventListener('mousemove', onMouseMove)\n })\n\n const tooltipTitleFormatFunction = toRef(() => (segment: PieItem) => {\n return typeof props.titleFormat === 'function'\n ? props.titleFormat(segment)\n : formatTextTemplate(props.titleFormat, segment)\n })\n\n const tooltipSubtitleFormatFunction = toRef(() => (segment: PieItem) => {\n return typeof props.subtitleFormat === 'function'\n ? props.subtitleFormat(segment)\n : formatTextTemplate(props.subtitleFormat, segment)\n })\n\n return () => (\n <VTooltip\n offset={ props.offset }\n modelValue={ props.modelValue }\n target={ target.value }\n contentClass=\"v-pie__tooltip-content\"\n >\n { !!props.item && (\n slots.default?.({ item: props.item }) ?? (\n <MaybeTransition transition={ props.transition } mode=\"out-in\">\n <VListItem\n key={ props.item.key }\n density=\"compact\"\n title={ tooltipTitleFormatFunction.value(props.item) }\n subtitle={ tooltipSubtitleFormatFunction.value(props.item) }\n v-slots={{\n prepend: slots.prepend\n ? () => slots.prepend!({ item: props.item! })\n : undefined,\n }}\n />\n </MaybeTransition>\n )\n )}\n </VTooltip>\n )\n },\n})\n\nexport type VPieTooltip = InstanceType<typeof VPieTooltip>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VPieTooltip.js","names":["VListItem","makeVTooltipProps","VTooltip","makeTransitionProps","MaybeTransition","toRef","formatTextTemplate","genericComponent","pick","propsFactory","makeVPieTooltipProps","modelValue","Boolean","target","Object","item","type","default","titleFormat","String","Function","subtitleFormat","VPieTooltip","name","props","setup","_ref","slots","tooltipTitleFormatFunction","segment","tooltipSubtitleFormatFunction","_createVNode","offset","transition","key","value","prepend","undefined"],"sources":["../../../src/labs/VPie/VPieTooltip.tsx"],"sourcesContent":["// Components\nimport { VListItem } from '@/components/VList/VListItem'\nimport { makeVTooltipProps, VTooltip } from '@/components/VTooltip/VTooltip'\n\n// Composables\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { formatTextTemplate } from './utils'\nimport { genericComponent, pick, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { PieItem, TextTemplate } from './types'\n\nexport type VPieTooltipSlots = {\n default: { item: PieItem }\n prepend: { item: PieItem }\n}\n\nexport const makeVPieTooltipProps = propsFactory({\n modelValue: Boolean,\n target: Object as PropType<[x: number, y: number]>,\n item: {\n type: Object as PropType<PieItem | null>,\n default: null,\n },\n titleFormat: {\n type: [String, Function] as PropType<TextTemplate>,\n default: '[title]',\n },\n subtitleFormat: {\n type: [String, Function] as PropType<TextTemplate>,\n default: '[value]',\n },\n ...makeTransitionProps(),\n ...pick(makeVTooltipProps(), ['offset']),\n}, 'VPieTooltip')\n\nexport const VPieTooltip = genericComponent<VPieTooltipSlots>()({\n name: 'VPieTooltip',\n\n props: makeVPieTooltipProps(),\n\n setup (props, { slots }) {\n const tooltipTitleFormatFunction = toRef(() => (segment: PieItem) => {\n return typeof props.titleFormat === 'function'\n ? props.titleFormat(segment)\n : formatTextTemplate(props.titleFormat, segment)\n })\n\n const tooltipSubtitleFormatFunction = toRef(() => (segment: PieItem) => {\n return typeof props.subtitleFormat === 'function'\n ? props.subtitleFormat(segment)\n : formatTextTemplate(props.subtitleFormat, segment)\n })\n\n return () => (\n <VTooltip\n offset={ props.offset }\n modelValue={ props.modelValue }\n target={ props.target }\n contentClass=\"v-pie__tooltip-content\"\n >\n { !!props.item && (\n slots.default?.({ item: props.item }) ?? (\n <MaybeTransition transition={ props.transition } mode=\"out-in\">\n <VListItem\n key={ props.item.key }\n density=\"compact\"\n title={ tooltipTitleFormatFunction.value(props.item) }\n subtitle={ tooltipSubtitleFormatFunction.value(props.item) }\n v-slots={{\n prepend: slots.prepend\n ? () => slots.prepend!({ item: props.item! })\n : undefined,\n }}\n />\n </MaybeTransition>\n )\n )}\n </VTooltip>\n )\n },\n})\n\nexport type VPieTooltip = InstanceType<typeof VPieTooltip>\n"],"mappings":";AAAA;AAAA,SACSA,SAAS;AAAA,SACTC,iBAAiB,EAAEC,QAAQ,iDAEpC;AAAA,SACSC,mBAAmB,EAAEC,eAAe,2CAE7C;AACA,SAASC,KAAK,QAAQ,KAAK;AAAA,SAClBC,kBAAkB;AAAA,SAClBC,gBAAgB,EAAEC,IAAI,EAAEC,YAAY,+BAE7C;AASA,OAAO,MAAMC,oBAAoB,GAAGD,YAAY,CAAC;EAC/CE,UAAU,EAAEC,OAAO;EACnBC,MAAM,EAAEC,MAA0C;EAClDC,IAAI,EAAE;IACJC,IAAI,EAAEF,MAAkC;IACxCG,OAAO,EAAE;EACX,CAAC;EACDC,WAAW,EAAE;IACXF,IAAI,EAAE,CAACG,MAAM,EAAEC,QAAQ,CAA2B;IAClDH,OAAO,EAAE;EACX,CAAC;EACDI,cAAc,EAAE;IACdL,IAAI,EAAE,CAACG,MAAM,EAAEC,QAAQ,CAA2B;IAClDH,OAAO,EAAE;EACX,CAAC;EACD,GAAGd,mBAAmB,CAAC,CAAC;EACxB,GAAGK,IAAI,CAACP,iBAAiB,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;AACzC,CAAC,EAAE,aAAa,CAAC;AAEjB,OAAO,MAAMqB,WAAW,GAAGf,gBAAgB,CAAmB,CAAC,CAAC;EAC9DgB,IAAI,EAAE,aAAa;EAEnBC,KAAK,EAAEd,oBAAoB,CAAC,CAAC;EAE7Be,KAAKA,CAAED,KAAK,EAAAE,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAME,0BAA0B,GAAGvB,KAAK,CAAC,MAAOwB,OAAgB,IAAK;MACnE,OAAO,OAAOL,KAAK,CAACN,WAAW,KAAK,UAAU,GAC1CM,KAAK,CAACN,WAAW,CAACW,OAAO,CAAC,GAC1BvB,kBAAkB,CAACkB,KAAK,CAACN,WAAW,EAAEW,OAAO,CAAC;IACpD,CAAC,CAAC;IAEF,MAAMC,6BAA6B,GAAGzB,KAAK,CAAC,MAAOwB,OAAgB,IAAK;MACtE,OAAO,OAAOL,KAAK,CAACH,cAAc,KAAK,UAAU,GAC7CG,KAAK,CAACH,cAAc,CAACQ,OAAO,CAAC,GAC7BvB,kBAAkB,CAACkB,KAAK,CAACH,cAAc,EAAEQ,OAAO,CAAC;IACvD,CAAC,CAAC;IAEF,OAAO,MAAAE,YAAA,CAAA7B,QAAA;MAAA,UAEMsB,KAAK,CAACQ,MAAM;MAAA,cACRR,KAAK,CAACb,UAAU;MAAA,UACpBa,KAAK,CAACX,MAAM;MAAA;IAAA;MAAAI,OAAA,EAAAA,CAAA,MAGnB,CAAC,CAACO,KAAK,CAACT,IAAI,KACZY,KAAK,CAACV,OAAO,GAAG;QAAEF,IAAI,EAAES,KAAK,CAACT;MAAK,CAAC,CAAC,IAAAgB,YAAA,CAAA3B,eAAA;QAAA,cACLoB,KAAK,CAACS,UAAU;QAAA;MAAA;QAAAhB,OAAA,EAAAA,CAAA,MAAAc,YAAA,CAAA/B,SAAA;UAAA,OAEpCwB,KAAK,CAACT,IAAI,CAACmB,GAAG;UAAA;UAAA,SAEZN,0BAA0B,CAACO,KAAK,CAACX,KAAK,CAACT,IAAI,CAAC;UAAA,YACzCe,6BAA6B,CAACK,KAAK,CAACX,KAAK,CAACT,IAAI;QAAC,GACjD;UACPqB,OAAO,EAAET,KAAK,CAACS,OAAO,GAClB,MAAMT,KAAK,CAACS,OAAO,CAAE;YAAErB,IAAI,EAAES,KAAK,CAACT;UAAM,CAAC,CAAC,GAC3CsB;QACN,CAAC;MAAA,EAGN,CACF;IAAA,EAEJ;EACH;AACF,CAAC,CAAC","ignoreList":[]}
@@ -4,6 +4,7 @@ export interface PieItem {
4
4
  value: number;
5
5
  title: string;
6
6
  pattern?: string;
7
+ isActive: boolean;
7
8
  raw?: Record<string, any>;
8
9
  }
9
10
  export interface PieSegmentProps {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/labs/VPie/types.ts"],"sourcesContent":["export interface PieItem {\n key: string | number | symbol\n color: string\n value: number\n title: string\n pattern?: string\n raw?: Record<string, any>\n}\n\nexport interface PieSegmentProps {\n gap?: number | string\n hoverScale?: number | string\n innerCut?: number | string\n rounded?: number | string\n value: number\n}\n\nexport type TextTemplate = string | ((v: PieItem) => string)\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/labs/VPie/types.ts"],"sourcesContent":["export interface PieItem {\n key: string | number | symbol\n color: string\n value: number\n title: string\n pattern?: string\n isActive: boolean\n raw?: Record<string, any>\n}\n\nexport interface PieSegmentProps {\n gap?: number | string\n hoverScale?: number | string\n innerCut?: number | string\n rounded?: number | string\n value: number\n}\n\nexport type TextTemplate = string | ((v: PieItem) => string)\n"],"mappings":"","ignoreList":[]}
@@ -50,15 +50,15 @@
50
50
  .v-video__content {
51
51
  box-shadow: 0px 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 4px 5px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 1px 10px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
52
52
  }
53
- .v-video:not(.v-video--idle) .v-video__content .v-overlay, .v-video:not(.v-video--idle) .v-video__content .v-overlay > * {
53
+ .v-video:not(.v-video--idle) .v-video__content .v-video__overlay-fill, .v-video:not(.v-video--idle) .v-video__content .v-video__overlay-fill > * {
54
54
  pointer-events: none;
55
55
  }
56
56
  .v-video__overlay-fill {
57
+ position: absolute;
58
+ inset: 0;
57
59
  display: flex;
58
60
  align-items: center;
59
61
  justify-content: center;
60
- width: 100%;
61
- height: 100%;
62
62
  border-radius: inherit;
63
63
  }
64
64
  .v-video__overlay-fill > .v-img {
@@ -155,8 +155,8 @@
155
155
  .v-video--variant-background {
156
156
  outline: none;
157
157
  position: absolute;
158
+ inset: 0;
158
159
  pointer-events: none;
159
- height: 100%;
160
160
  }
161
161
  .v-video--variant-background > .v-video__content {
162
162
  width: 100%;