@vuetify/nightly 3.0.0-next-20220107.0 → 3.0.0-next-20220112.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -331,24 +331,8 @@
331
331
  }
332
332
 
333
333
  .v-pagination .v-btn {
334
- box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);
335
334
  border-radius: 4px;
336
335
  }
337
- .v-pagination .v-btn.v-btn--density-default {
338
- height: calc(var(--v-btn-height) + 0px);
339
- width: calc(var(--v-btn-height) + 0px);
340
- }
341
- .v-pagination .v-btn.v-btn--density-comfortable {
342
- height: calc(var(--v-btn-height) + -4px);
343
- width: calc(var(--v-btn-height) + -4px);
344
- }
345
- .v-pagination .v-btn.v-btn--density-compact {
346
- height: calc(var(--v-btn-height) + -8px);
347
- width: calc(var(--v-btn-height) + -8px);
348
- }
349
- .v-pagination__list .v-btn--elevated {
350
- box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);
351
- }
352
336
  .v-pagination__item--is-active .v-btn__overlay {
353
337
  opacity: var(--v-border-opacity);
354
338
  }
@@ -184,13 +184,7 @@
184
184
  // VPagination
185
185
  .v-btn
186
186
  .v-pagination &
187
- @include tools.elevation($button-pagination-elevation)
188
187
  @include tools.rounded($button-pagination-border-radius)
189
- @include button-density('height' 'width', $button-pagination-density)
190
-
191
- &--elevated
192
- .v-pagination__list &
193
- @include tools.elevation($button-pagination-elevation)
194
188
 
195
189
  &__overlay
196
190
  .v-pagination__item--is-active &
@@ -28,7 +28,6 @@ $button-bottom-navigation-text-transform: none !default;
28
28
  $button-bottom-navigation-transition-duration: .2s !default;
29
29
  $button-pagination-active-overlay-opacity: var(--v-border-opacity) !default;
30
30
  $button-pagination-border-radius: settings.$border-radius-root !default;
31
- $button-pagination-elevation: 0 !default;
32
31
  $button-border-color: settings.$border-color-root !default;
33
32
  $button-border-radius: settings.$border-radius-root !default;
34
33
  $button-border-style: settings.$border-style-root !default;
@@ -62,7 +61,6 @@ $button-stacked-width-ratio: 1 !default;
62
61
  $button-density: ('default': 0, 'comfortable': -2, 'compact': -3) !default;
63
62
  $button-stacked-density: ('default': 0, 'comfortable': -4, 'compact': -6) !default;
64
63
  $button-icon-density: ('default': 3, 'comfortable': 0, 'compact': -2) !default;
65
- $button-pagination-density: ('default': 0, 'comfortable': -1, 'compact': -2) !default;
66
64
 
67
65
  $button-border: (
68
66
  $button-border-color,
@@ -106,10 +106,11 @@ export const VInput = genericComponent()({
106
106
  "class": "v-input__details"
107
107
  }, [_createVNode(VMessages, {
108
108
  "active": showMessages,
109
- "value": errorMessages.value || (hasMessages ? props.messages : props.hint)
109
+ "color": isValid.value === false ? 'error' : undefined,
110
+ "value": errorMessages.value.length > 0 ? errorMessages.value : hasMessages ? props.messages : props.hint
110
111
  }, {
111
112
  default: slots.messages
112
- }, 8, ["active", "value"]), (_slots$details = slots.details) == null ? void 0 : _slots$details.call(slots, slotProps.value)])], 2);
113
+ }, 8, ["active", "color", "value"]), (_slots$details = slots.details) == null ? void 0 : _slots$details.call(slots, slotProps.value)])], 2);
113
114
  });
114
115
  return {
115
116
  isValid,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VInput/VInput.tsx"],"names":["VIcon","VMessages","makeDensityProps","useDensity","makeValidationProps","useValidation","computed","provide","toRef","genericComponent","getUid","pick","propsFactory","useRender","VInputSymbol","makeVInputProps","id","String","appendIcon","prependIcon","hideDetails","Boolean","hint","messages","type","Array","default","persistentHint","direction","validator","v","includes","VInput","name","props","focused","emits","val","e","setup","slots","emit","densityClasses","errorMessages","isDisabled","isReadonly","isPristine","isValid","isValidating","reset","resetValidation","validate","validationClasses","uid","isFocused","slotProps","hasPrepend","prepend","hasAppend","append","hasHint","hasMessages","length","value","hasDetails","showMessages","details","filterInputProps","Object","keys"],"mappings":"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","sourcesContent":["// Styles\nimport './VInput.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VMessages } from '@/components/VMessages'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { computed, provide, toRef } from 'vue'\nimport { genericComponent, getUid, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nexport interface VInputSlot {\n id: ComputedRef<string>\n isDisabled: ComputedRef<boolean>\n isFocused: Ref<boolean>\n isReadonly: ComputedRef<boolean>\n isPristine: Ref<boolean>\n isValid: ComputedRef<boolean | null>\n isValidating: Ref<boolean>\n reset: () => void\n resetValidation: () => void\n validate: () => void\n}\n\nexport const VInputSymbol = 'VInput' as any as InjectionKey<ComputedRef<VInputSlot>>\n\nexport const makeVInputProps = propsFactory({\n id: String,\n appendIcon: String,\n prependIcon: String,\n hideDetails: [Boolean, String] as PropType<boolean | 'auto'>,\n hint: String,\n messages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n persistentHint: Boolean,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n validator: (v: any) => ['horizontal', 'vertical'].includes(v),\n },\n\n ...makeDensityProps(),\n ...makeValidationProps(),\n})\n\nexport const VInput = genericComponent<new <T>() => {\n $slots: MakeSlots<{\n default: [VInputSlot]\n prepend: [VInputSlot]\n append: [VInputSlot]\n details: [VInputSlot]\n }>\n}>()({\n name: 'VInput',\n\n props: {\n focused: Boolean,\n\n ...makeVInputProps(),\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n 'click:prepend': (e: MouseEvent) => true,\n 'click:append': (e: MouseEvent) => true,\n },\n\n setup (props, { slots, emit }) {\n const { densityClasses } = useDensity(props)\n const {\n errorMessages,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n } = useValidation(props)\n\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n const isFocused = toRef(props, 'focused')\n\n const slotProps = computed<VInputSlot>(() => ({\n id,\n isDisabled,\n isFocused,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n }))\n\n provide(VInputSymbol, slotProps)\n\n useRender(() => {\n const hasPrepend = (slots.prepend || props.prependIcon)\n const hasAppend = (slots.append || props.appendIcon)\n const hasHint = !!(slots.hint || props.hint)\n const hasMessages = !!(\n slots.messages ||\n props.messages?.length ||\n errorMessages.value.length\n )\n const hasDetails = !props.hideDetails || (\n props.hideDetails === 'auto' &&\n (hasMessages || hasHint)\n )\n const showMessages = hasMessages || (\n hasHint &&\n (props.persistentHint || props.focused)\n )\n\n return (\n <div class={[\n 'v-input',\n `v-input--${props.direction}`,\n densityClasses.value,\n validationClasses.value,\n ]}\n >\n { hasPrepend && (\n <div\n class=\"v-input__prepend\"\n onClick={ e => emit('click:prepend', e) }\n >\n { slots?.prepend?.(slotProps.value) }\n\n { props.prependIcon && (\n <VIcon icon={ props.prependIcon } />\n ) }\n </div>\n ) }\n\n <div class=\"v-input__control\">\n { slots.default?.(slotProps.value) }\n </div>\n\n { hasAppend && (\n <div\n class=\"v-input__append\"\n onClick={ e => emit('click:append', e) }\n >\n { slots?.append?.(slotProps.value) }\n\n { props.appendIcon && (\n <VIcon icon={ props.appendIcon } />\n ) }\n </div>\n ) }\n\n { hasDetails && (\n <div class=\"v-input__details\">\n <VMessages\n active={ showMessages }\n value={ errorMessages.value || (hasMessages ? props.messages : props.hint) }\n v-slots={{ default: slots.messages }}\n />\n\n { slots.details?.(slotProps.value) }\n </div>\n ) }\n </div>\n )\n })\n\n return {\n isValid,\n validate,\n reset,\n resetValidation,\n errorMessages,\n }\n },\n})\n\nexport type VInput = InstanceType<typeof VInput>\n\nexport function filterInputProps (props: ExtractPropTypes<ReturnType<typeof makeVInputProps>>) {\n return pick(props, Object.keys(VInput.props) as any)\n}\n"],"file":"VInput.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VInput/VInput.tsx"],"names":["VIcon","VMessages","makeDensityProps","useDensity","makeValidationProps","useValidation","computed","provide","toRef","genericComponent","getUid","pick","propsFactory","useRender","VInputSymbol","makeVInputProps","id","String","appendIcon","prependIcon","hideDetails","Boolean","hint","messages","type","Array","default","persistentHint","direction","validator","v","includes","VInput","name","props","focused","emits","val","e","setup","slots","emit","densityClasses","errorMessages","isDisabled","isReadonly","isPristine","isValid","isValidating","reset","resetValidation","validate","validationClasses","uid","isFocused","slotProps","hasPrepend","prepend","hasAppend","append","hasHint","hasMessages","length","value","hasDetails","showMessages","undefined","details","filterInputProps","Object","keys"],"mappings":"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","sourcesContent":["// Styles\nimport './VInput.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VMessages } from '@/components/VMessages'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { computed, provide, toRef } from 'vue'\nimport { genericComponent, getUid, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nexport interface VInputSlot {\n id: ComputedRef<string>\n isDisabled: ComputedRef<boolean>\n isFocused: Ref<boolean>\n isReadonly: ComputedRef<boolean>\n isPristine: Ref<boolean>\n isValid: ComputedRef<boolean | null>\n isValidating: Ref<boolean>\n reset: () => void\n resetValidation: () => void\n validate: () => void\n}\n\nexport const VInputSymbol = 'VInput' as any as InjectionKey<ComputedRef<VInputSlot>>\n\nexport const makeVInputProps = propsFactory({\n id: String,\n appendIcon: String,\n prependIcon: String,\n hideDetails: [Boolean, String] as PropType<boolean | 'auto'>,\n hint: String,\n messages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n persistentHint: Boolean,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n validator: (v: any) => ['horizontal', 'vertical'].includes(v),\n },\n\n ...makeDensityProps(),\n ...makeValidationProps(),\n})\n\nexport const VInput = genericComponent<new <T>() => {\n $slots: MakeSlots<{\n default: [VInputSlot]\n prepend: [VInputSlot]\n append: [VInputSlot]\n details: [VInputSlot]\n }>\n}>()({\n name: 'VInput',\n\n props: {\n focused: Boolean,\n\n ...makeVInputProps(),\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n 'click:prepend': (e: MouseEvent) => true,\n 'click:append': (e: MouseEvent) => true,\n },\n\n setup (props, { slots, emit }) {\n const { densityClasses } = useDensity(props)\n const {\n errorMessages,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n } = useValidation(props)\n\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n const isFocused = toRef(props, 'focused')\n\n const slotProps = computed<VInputSlot>(() => ({\n id,\n isDisabled,\n isFocused,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n }))\n\n provide(VInputSymbol, slotProps)\n\n useRender(() => {\n const hasPrepend = (slots.prepend || props.prependIcon)\n const hasAppend = (slots.append || props.appendIcon)\n const hasHint = !!(slots.hint || props.hint)\n const hasMessages = !!(\n slots.messages ||\n props.messages?.length ||\n errorMessages.value.length\n )\n const hasDetails = !props.hideDetails || (\n props.hideDetails === 'auto' &&\n (hasMessages || hasHint)\n )\n const showMessages = hasMessages || (\n hasHint &&\n (props.persistentHint || props.focused)\n )\n\n return (\n <div class={[\n 'v-input',\n `v-input--${props.direction}`,\n densityClasses.value,\n validationClasses.value,\n ]}\n >\n { hasPrepend && (\n <div\n class=\"v-input__prepend\"\n onClick={ e => emit('click:prepend', e) }\n >\n { slots?.prepend?.(slotProps.value) }\n\n { props.prependIcon && (\n <VIcon icon={ props.prependIcon } />\n ) }\n </div>\n ) }\n\n <div class=\"v-input__control\">\n { slots.default?.(slotProps.value) }\n </div>\n\n { hasAppend && (\n <div\n class=\"v-input__append\"\n onClick={ e => emit('click:append', e) }\n >\n { slots?.append?.(slotProps.value) }\n\n { props.appendIcon && (\n <VIcon icon={ props.appendIcon } />\n ) }\n </div>\n ) }\n\n { hasDetails && (\n <div class=\"v-input__details\">\n <VMessages\n active={ showMessages }\n color={ isValid.value === false ? 'error' : undefined }\n value={ errorMessages.value.length > 0\n ? errorMessages.value\n : (hasMessages ? props.messages : props.hint)\n }\n v-slots={{ default: slots.messages }}\n />\n\n { slots.details?.(slotProps.value) }\n </div>\n ) }\n </div>\n )\n })\n\n return {\n isValid,\n validate,\n reset,\n resetValidation,\n errorMessages,\n }\n },\n})\n\nexport type VInput = InstanceType<typeof VInput>\n\nexport function filterInputProps (props: ExtractPropTypes<ReturnType<typeof makeVInputProps>>) {\n return pick(props, Object.keys(VInput.props) as any)\n}\n"],"file":"VInput.mjs"}
@@ -4,7 +4,8 @@ import "./VMessages.css"; // Components
4
4
 
5
5
  import { VSlideYTransition } from "../transitions/index.mjs"; // Composables
6
6
 
7
- import { makeTransitionProps, MaybeTransition } from "../../composables/transition.mjs"; // Utilities
7
+ import { makeTransitionProps, MaybeTransition } from "../../composables/transition.mjs";
8
+ import { useTextColor } from "../../composables/color.mjs"; // Utilities
8
9
 
9
10
  import { defineComponent, wrapInArray } from "../../util/index.mjs";
10
11
  import { computed } from 'vue';
@@ -12,6 +13,7 @@ export const VMessages = defineComponent({
12
13
  name: 'VMessages',
13
14
  props: {
14
15
  active: Boolean,
16
+ color: String,
15
17
  value: {
16
18
  type: [Array, String],
17
19
  default: () => []
@@ -19,6 +21,7 @@ export const VMessages = defineComponent({
19
21
  ...makeTransitionProps({
20
22
  transition: {
21
23
  component: VSlideYTransition,
24
+ leaveAbsolute: true,
22
25
  group: true
23
26
  }
24
27
  })
@@ -29,20 +32,25 @@ export const VMessages = defineComponent({
29
32
  slots
30
33
  } = _ref;
31
34
  const messages = computed(() => wrapInArray(props.value));
35
+ const {
36
+ textColorClasses,
37
+ textColorStyles
38
+ } = useTextColor(computed(() => props.color));
32
39
  return () => {
33
40
  var _slots$default;
34
41
 
35
42
  return _createVNode(MaybeTransition, {
36
43
  "transition": props.transition,
37
44
  "tag": "div",
38
- "class": "v-messages"
45
+ "class": ['v-messages', textColorClasses.value],
46
+ "style": textColorStyles.value
39
47
  }, {
40
48
  default: () => [messages.value.length > 0 && props.active && messages.value.map((message, i) => _createVNode("div", {
41
49
  "class": "v-messages__message",
42
- "key": i
50
+ "key": `${i}-${messages.value}`
43
51
  }, [message])), slots == null ? void 0 : (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)],
44
52
  _: 1
45
- }, 8, ["transition"]);
53
+ }, 8, ["transition", "class", "style"]);
46
54
  };
47
55
  }
48
56
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VMessages/VMessages.tsx"],"names":["VSlideYTransition","makeTransitionProps","MaybeTransition","defineComponent","wrapInArray","computed","VMessages","name","props","active","Boolean","value","type","Array","String","default","transition","component","group","setup","slots","messages","length","map","message","i"],"mappings":";AAAA;AACA,yB,CAEA;;SACSA,iB,oCAET;;SACSC,mB,EAAqBC,e,4CAE9B;;SACSC,e,EAAiBC,W;AAC1B,SAASC,QAAT,QAAyB,KAAzB;AAGA,OAAO,MAAMC,SAAS,GAAGH,eAAe,CAAC;AACvCI,EAAAA,IAAI,EAAE,WADiC;AAGvCC,EAAAA,KAAK,EAAE;AACLC,IAAAA,MAAM,EAAEC,OADH;AAELC,IAAAA,KAAK,EAAE;AACLC,MAAAA,IAAI,EAAE,CAACC,KAAD,EAAQC,MAAR,CADD;AAELC,MAAAA,OAAO,EAAE,MAAO;AAFX,KAFF;AAOL,OAAGd,mBAAmB,CAAC;AACrBe,MAAAA,UAAU,EAAE;AACVC,QAAAA,SAAS,EAAEjB,iBADD;AAEVkB,QAAAA,KAAK,EAAE;AAFG;AADS,KAAD;AAPjB,GAHgC;;AAkBvCC,EAAAA,KAAK,CAAEX,KAAF,QAAoB;AAAA,QAAX;AAAEY,MAAAA;AAAF,KAAW;AACvB,UAAMC,QAAQ,GAAGhB,QAAQ,CAAC,MAAMD,WAAW,CAACI,KAAK,CAACG,KAAP,CAAlB,CAAzB;AAEA,WAAO;AAAA;;AAAA;AAAA,sBAEUH,KAAK,CAACQ,UAFhB;AAAA,eAGC,KAHD;AAAA,iBAIG;AAJH;AAAA,wBAMAK,QAAQ,CAACV,KAAT,CAAeW,MAAf,GAAwB,CAAxB,IAA6Bd,KAAK,CAACC,MAApC,IACAY,QAAQ,CAACV,KAAT,CAAeY,GAAf,CAAmB,CAACC,OAAD,EAAUC,CAAV;AAAA,mBACN,qBADM;AAAA,iBACsBA;AADtB,YAEbD,OAFa,EAAnB,CAPC,EAcDJ,KAdC,sCAcDA,KAAK,CAAEL,OAdN,qBAcD,oBAAAK,KAAK,CAdJ;AAAA;AAAA;AAAA,KAAP;AAiBD;;AAtCsC,CAAD,CAAjC","sourcesContent":["// Styles\nimport './VMessages.sass'\n\n// Components\nimport { VSlideYTransition } from '@/components/transitions'\n\n// Composables\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { defineComponent, wrapInArray } from '@/util'\nimport { computed } from 'vue'\nimport type { PropType } from 'vue'\n\nexport const VMessages = defineComponent({\n name: 'VMessages',\n\n props: {\n active: Boolean,\n value: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n\n ...makeTransitionProps({\n transition: {\n component: VSlideYTransition,\n group: true,\n },\n }),\n },\n\n setup (props, { slots }) {\n const messages = computed(() => wrapInArray(props.value))\n\n return () => (\n <MaybeTransition\n transition={ props.transition }\n tag=\"div\"\n class=\"v-messages\"\n >\n { (messages.value.length > 0 && props.active) && (\n messages.value.map((message, i) => (\n <div class=\"v-messages__message\" key={ i }>\n { message }\n </div>\n ))\n ) }\n\n { slots?.default?.() }\n </MaybeTransition>\n )\n },\n})\n"],"file":"VMessages.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VMessages/VMessages.tsx"],"names":["VSlideYTransition","makeTransitionProps","MaybeTransition","useTextColor","defineComponent","wrapInArray","computed","VMessages","name","props","active","Boolean","color","String","value","type","Array","default","transition","component","leaveAbsolute","group","setup","slots","messages","textColorClasses","textColorStyles","length","map","message","i"],"mappings":";AAAA;AACA,yB,CAEA;;SACSA,iB,oCAET;;SACSC,mB,EAAqBC,e;SACrBC,Y,uCAET;;SACSC,e,EAAiBC,W;AAC1B,SAASC,QAAT,QAAyB,KAAzB;AAGA,OAAO,MAAMC,SAAS,GAAGH,eAAe,CAAC;AACvCI,EAAAA,IAAI,EAAE,WADiC;AAGvCC,EAAAA,KAAK,EAAE;AACLC,IAAAA,MAAM,EAAEC,OADH;AAELC,IAAAA,KAAK,EAAEC,MAFF;AAGLC,IAAAA,KAAK,EAAE;AACLC,MAAAA,IAAI,EAAE,CAACC,KAAD,EAAQH,MAAR,CADD;AAELI,MAAAA,OAAO,EAAE,MAAO;AAFX,KAHF;AAQL,OAAGhB,mBAAmB,CAAC;AACrBiB,MAAAA,UAAU,EAAE;AACVC,QAAAA,SAAS,EAAEnB,iBADD;AAEVoB,QAAAA,aAAa,EAAE,IAFL;AAGVC,QAAAA,KAAK,EAAE;AAHG;AADS,KAAD;AARjB,GAHgC;;AAoBvCC,EAAAA,KAAK,CAAEb,KAAF,QAAoB;AAAA,QAAX;AAAEc,MAAAA;AAAF,KAAW;AACvB,UAAMC,QAAQ,GAAGlB,QAAQ,CAAC,MAAMD,WAAW,CAACI,KAAK,CAACK,KAAP,CAAlB,CAAzB;AACA,UAAM;AAAEW,MAAAA,gBAAF;AAAoBC,MAAAA;AAApB,QAAwCvB,YAAY,CAACG,QAAQ,CAAC,MAAMG,KAAK,CAACG,KAAb,CAAT,CAA1D;AAEA,WAAO;AAAA;;AAAA;AAAA,sBAEUH,KAAK,CAACS,UAFhB;AAAA,eAGC,KAHD;AAAA,iBAII,CACL,YADK,EAELO,gBAAgB,CAACX,KAFZ,CAJJ;AAAA,iBAQKY,eAAe,CAACZ;AARrB;AAAA,wBAUAU,QAAQ,CAACV,KAAT,CAAea,MAAf,GAAwB,CAAxB,IAA6BlB,KAAK,CAACC,MAApC,IACAc,QAAQ,CAACV,KAAT,CAAec,GAAf,CAAmB,CAACC,OAAD,EAAUC,CAAV;AAAA,mBACN,qBADM;AAAA,iBACuB,GAAEA,CAAE,IAAGN,QAAQ,CAACV,KAAM;AAD7C,YAEbe,OAFa,EAAnB,CAXC,EAkBDN,KAlBC,sCAkBDA,KAAK,CAAEN,OAlBN,qBAkBD,oBAAAM,KAAK,CAlBJ;AAAA;AAAA;AAAA,KAAP;AAqBD;;AA7CsC,CAAD,CAAjC","sourcesContent":["// Styles\nimport './VMessages.sass'\n\n// Components\nimport { VSlideYTransition } from '@/components/transitions'\n\n// Composables\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { defineComponent, wrapInArray } from '@/util'\nimport { computed } from 'vue'\nimport type { PropType } from 'vue'\n\nexport const VMessages = defineComponent({\n name: 'VMessages',\n\n props: {\n active: Boolean,\n color: String,\n value: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n\n ...makeTransitionProps({\n transition: {\n component: VSlideYTransition,\n leaveAbsolute: true,\n group: true,\n },\n }),\n },\n\n setup (props, { slots }) {\n const messages = computed(() => wrapInArray(props.value))\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => props.color))\n\n return () => (\n <MaybeTransition\n transition={ props.transition }\n tag=\"div\"\n class={[\n 'v-messages',\n textColorClasses.value,\n ]}\n style={ textColorStyles.value }\n >\n { (messages.value.length > 0 && props.active) && (\n messages.value.map((message, i) => (\n <div class=\"v-messages__message\" key={ `${i}-${messages.value}` }>\n { message }\n </div>\n ))\n ) }\n\n { slots?.default?.() }\n </MaybeTransition>\n )\n },\n})\n"],"file":"VMessages.mjs"}
@@ -94,6 +94,7 @@ export const VOverlay = genericComponent()({
94
94
  }));
95
95
  const {
96
96
  activatorEl,
97
+ activatorRef,
97
98
  activatorEvents
98
99
  } = useActivator(props, isActive);
99
100
  const {
@@ -188,8 +189,7 @@ export const VOverlay = genericComponent()({
188
189
  return _createVNode(_Fragment, null, [(_slots$activator = slots.activator) == null ? void 0 : _slots$activator.call(slots, {
189
190
  isActive: isActive.value,
190
191
  props: mergeProps({
191
- modelValue: isActive.value,
192
- 'onUpdate:modelValue': val => isActive.value = val
192
+ ref: activatorRef
193
193
  }, toHandlers(activatorEvents.value), props.activatorProps)
194
194
  }), _createVNode(Teleport, {
195
195
  "disabled": !teleportTarget.value,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VOverlay/VOverlay.tsx"],"names":["makeActivatorProps","useActivator","makePositionStrategyProps","usePositionStrategies","makeScrollStrategyProps","useScrollStrategies","makeThemeProps","provideTheme","makeTransitionProps","MaybeTransition","useBackButton","useBackgroundColor","useProxiedModel","useRtl","useTeleport","makeDimensionProps","useDimension","makeLazyProps","useLazy","useStack","ClickOutside","convertToUnit","genericComponent","getScrollParent","IN_BROWSER","standardEasing","useRender","computed","mergeProps","ref","Teleport","toHandlers","Transition","watch","Scrim","props","modelValue","color","rest","backgroundColorClasses","value","backgroundColorStyles","VOverlay","name","directives","inheritAttrs","absolute","Boolean","attach","String","Object","contained","contentClass","noClickAnimation","persistent","scrim","type","default","emits","e","setup","slots","attrs","emit","isActive","teleportTarget","themeClasses","rtlClasses","hasContent","onAfterLeave","scrimColor","activatorEl","activatorEvents","dimensionStyles","isTop","root","contentEl","contentStyles","updatePosition","onClickOutside","animateClick","closeConditional","val","window","addEventListener","onKeydown","removeEventListener","immediate","key","next","top","scrollParent","document","scrollingElement","scrollTop","animate","transformOrigin","transform","duration","easing","activator","activatorProps","undefined","transition","handler","include"],"mappings":"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","sourcesContent":["// Styles\nimport './VOverlay.sass'\n\n// Composables\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { makePositionStrategyProps, usePositionStrategies } from './positionStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackButton } from '@/composables/router'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/rtl'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useStack } from '@/composables/stack'\n\n// Directives\nimport { ClickOutside } from '@/directives/click-outside'\n\n// Utilities\nimport {\n convertToUnit,\n genericComponent,\n getScrollParent,\n IN_BROWSER,\n standardEasing,\n useRender,\n} from '@/util'\nimport {\n computed,\n mergeProps,\n ref,\n Teleport,\n toHandlers,\n Transition,\n watch,\n} from 'vue'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { BackgroundColorData } from '@/composables/color'\n\ninterface ScrimProps {\n [key: string]: unknown\n modelValue: boolean\n color: BackgroundColorData\n}\nfunction Scrim (props: ScrimProps) {\n const { modelValue, color, ...rest } = props\n return (\n <Transition name=\"fade-transition\" appear>\n { props.modelValue && (\n <div\n class={[\n 'v-overlay__scrim',\n props.color.backgroundColorClasses.value,\n ]}\n style={ props.color.backgroundColorStyles.value }\n { ...rest }\n />\n )}\n </Transition>\n )\n}\n\nexport type OverlaySlots = MakeSlots<{\n default: [{ isActive: Ref<boolean> }]\n activator: [{ isActive: boolean, props: Record<string, any> }]\n}>\n\nexport const VOverlay = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VOverlay',\n\n directives: { ClickOutside },\n\n inheritAttrs: false,\n\n props: {\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n contained: Boolean,\n contentClass: null,\n noClickAnimation: Boolean,\n modelValue: Boolean,\n persistent: Boolean,\n scrim: {\n type: [String, Boolean],\n default: true,\n },\n\n ...makeActivatorProps(),\n ...makeDimensionProps(),\n ...makePositionStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeThemeProps(),\n ...makeTransitionProps(),\n ...makeLazyProps(),\n },\n\n emits: {\n 'click:outside': (e: MouseEvent) => true,\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots, attrs, emit }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { teleportTarget } = useTeleport(computed(() => props.attach || props.contained))\n const { themeClasses } = provideTheme(props)\n const { rtlClasses } = useRtl()\n const { hasContent, onAfterLeave } = useLazy(props, isActive)\n const scrimColor = useBackgroundColor(computed(() => {\n return typeof props.scrim === 'string' ? props.scrim : null\n }))\n const { activatorEl, activatorEvents } = useActivator(props, isActive)\n const { dimensionStyles } = useDimension(props)\n const { isTop } = useStack(isActive)\n\n const root = ref<HTMLElement>()\n const contentEl = ref<HTMLElement>()\n const { contentStyles, updatePosition } = usePositionStrategies(props, {\n contentEl,\n activatorEl,\n isActive,\n })\n useScrollStrategies(props, {\n root,\n contentEl,\n activatorEl,\n isActive,\n updatePosition,\n })\n\n function onClickOutside (e: MouseEvent) {\n emit('click:outside', e)\n\n if (!props.persistent) isActive.value = false\n else animateClick()\n }\n\n function closeConditional () {\n return isActive.value && isTop.value\n }\n\n IN_BROWSER && watch(isActive, val => {\n if (val) {\n window.addEventListener('keydown', onKeydown)\n } else {\n window.removeEventListener('keydown', onKeydown)\n }\n }, { immediate: true })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key === 'Escape' && isTop.value) {\n if (!props.persistent) {\n isActive.value = false\n } else animateClick()\n }\n }\n\n useBackButton(next => {\n if (isTop.value && isActive.value) {\n next(false)\n if (!props.persistent) isActive.value = false\n else animateClick()\n } else {\n next()\n }\n })\n\n const top = ref<number>()\n watch(() => isActive.value && (props.absolute || props.contained) && teleportTarget.value == null, val => {\n if (val) {\n const scrollParent = getScrollParent(root.value)\n if (scrollParent && scrollParent !== document.scrollingElement) {\n top.value = scrollParent.scrollTop\n }\n }\n })\n\n // Add a quick \"bounce\" animation to the content\n function animateClick () {\n if (props.noClickAnimation) return\n\n contentEl.value?.animate([\n { transformOrigin: 'center' },\n { transform: 'scale(1.03)' },\n { transformOrigin: 'center' },\n ], {\n duration: 150,\n easing: standardEasing,\n })\n }\n\n useRender(() => (\n <>\n { slots.activator?.({\n isActive: isActive.value,\n props: mergeProps({\n modelValue: isActive.value,\n 'onUpdate:modelValue': (val: boolean) => isActive.value = val,\n }, toHandlers(activatorEvents.value), props.activatorProps),\n }) }\n <Teleport\n disabled={ !teleportTarget.value }\n to={ teleportTarget.value }\n >\n { hasContent.value && (\n <div\n class={[\n 'v-overlay',\n {\n 'v-overlay--absolute': props.absolute || props.contained,\n 'v-overlay--active': isActive.value,\n 'v-overlay--contained': props.contained,\n },\n themeClasses.value,\n rtlClasses.value,\n ]}\n style={ top.value != null ? `top: ${convertToUnit(top.value)}` : undefined }\n ref={ root }\n {...attrs}\n >\n <Scrim\n color={ scrimColor }\n modelValue={ isActive.value && !!props.scrim }\n />\n <MaybeTransition\n appear\n onAfterLeave={ onAfterLeave }\n persisted\n transition={ props.transition }\n target={ activatorEl.value }\n >\n <div\n ref={ contentEl }\n v-show={ isActive.value }\n v-click-outside={{ handler: onClickOutside, closeConditional, include: () => [activatorEl.value] }}\n class={[\n 'v-overlay__content',\n props.contentClass,\n ]}\n style={[\n dimensionStyles.value,\n contentStyles.value,\n ]}\n >\n { slots.default?.({ isActive }) }\n </div>\n </MaybeTransition>\n </div>\n )}\n </Teleport>\n </>\n ))\n\n return {\n animateClick,\n contentEl,\n activatorEl,\n }\n },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n"],"file":"VOverlay.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VOverlay/VOverlay.tsx"],"names":["makeActivatorProps","useActivator","makePositionStrategyProps","usePositionStrategies","makeScrollStrategyProps","useScrollStrategies","makeThemeProps","provideTheme","makeTransitionProps","MaybeTransition","useBackButton","useBackgroundColor","useProxiedModel","useRtl","useTeleport","makeDimensionProps","useDimension","makeLazyProps","useLazy","useStack","ClickOutside","convertToUnit","genericComponent","getScrollParent","IN_BROWSER","standardEasing","useRender","computed","mergeProps","ref","Teleport","toHandlers","Transition","watch","Scrim","props","modelValue","color","rest","backgroundColorClasses","value","backgroundColorStyles","VOverlay","name","directives","inheritAttrs","absolute","Boolean","attach","String","Object","contained","contentClass","noClickAnimation","persistent","scrim","type","default","emits","e","setup","slots","attrs","emit","isActive","teleportTarget","themeClasses","rtlClasses","hasContent","onAfterLeave","scrimColor","activatorEl","activatorRef","activatorEvents","dimensionStyles","isTop","root","contentEl","contentStyles","updatePosition","onClickOutside","animateClick","closeConditional","val","window","addEventListener","onKeydown","removeEventListener","immediate","key","next","top","scrollParent","document","scrollingElement","scrollTop","animate","transformOrigin","transform","duration","easing","activator","activatorProps","undefined","transition","handler","include"],"mappings":"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","sourcesContent":["// Styles\nimport './VOverlay.sass'\n\n// Composables\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { makePositionStrategyProps, usePositionStrategies } from './positionStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackButton } from '@/composables/router'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/rtl'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useStack } from '@/composables/stack'\n\n// Directives\nimport { ClickOutside } from '@/directives/click-outside'\n\n// Utilities\nimport {\n convertToUnit,\n genericComponent,\n getScrollParent,\n IN_BROWSER,\n standardEasing,\n useRender,\n} from '@/util'\nimport {\n computed,\n mergeProps,\n ref,\n Teleport,\n toHandlers,\n Transition,\n watch,\n} from 'vue'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { BackgroundColorData } from '@/composables/color'\n\ninterface ScrimProps {\n [key: string]: unknown\n modelValue: boolean\n color: BackgroundColorData\n}\nfunction Scrim (props: ScrimProps) {\n const { modelValue, color, ...rest } = props\n return (\n <Transition name=\"fade-transition\" appear>\n { props.modelValue && (\n <div\n class={[\n 'v-overlay__scrim',\n props.color.backgroundColorClasses.value,\n ]}\n style={ props.color.backgroundColorStyles.value }\n { ...rest }\n />\n )}\n </Transition>\n )\n}\n\nexport type OverlaySlots = MakeSlots<{\n default: [{ isActive: Ref<boolean> }]\n activator: [{ isActive: boolean, props: Record<string, any> }]\n}>\n\nexport const VOverlay = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VOverlay',\n\n directives: { ClickOutside },\n\n inheritAttrs: false,\n\n props: {\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n contained: Boolean,\n contentClass: null,\n noClickAnimation: Boolean,\n modelValue: Boolean,\n persistent: Boolean,\n scrim: {\n type: [String, Boolean],\n default: true,\n },\n\n ...makeActivatorProps(),\n ...makeDimensionProps(),\n ...makePositionStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeThemeProps(),\n ...makeTransitionProps(),\n ...makeLazyProps(),\n },\n\n emits: {\n 'click:outside': (e: MouseEvent) => true,\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots, attrs, emit }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { teleportTarget } = useTeleport(computed(() => props.attach || props.contained))\n const { themeClasses } = provideTheme(props)\n const { rtlClasses } = useRtl()\n const { hasContent, onAfterLeave } = useLazy(props, isActive)\n const scrimColor = useBackgroundColor(computed(() => {\n return typeof props.scrim === 'string' ? props.scrim : null\n }))\n const { activatorEl, activatorRef, activatorEvents } = useActivator(props, isActive)\n const { dimensionStyles } = useDimension(props)\n const { isTop } = useStack(isActive)\n\n const root = ref<HTMLElement>()\n const contentEl = ref<HTMLElement>()\n const { contentStyles, updatePosition } = usePositionStrategies(props, {\n contentEl,\n activatorEl,\n isActive,\n })\n useScrollStrategies(props, {\n root,\n contentEl,\n activatorEl,\n isActive,\n updatePosition,\n })\n\n function onClickOutside (e: MouseEvent) {\n emit('click:outside', e)\n\n if (!props.persistent) isActive.value = false\n else animateClick()\n }\n\n function closeConditional () {\n return isActive.value && isTop.value\n }\n\n IN_BROWSER && watch(isActive, val => {\n if (val) {\n window.addEventListener('keydown', onKeydown)\n } else {\n window.removeEventListener('keydown', onKeydown)\n }\n }, { immediate: true })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key === 'Escape' && isTop.value) {\n if (!props.persistent) {\n isActive.value = false\n } else animateClick()\n }\n }\n\n useBackButton(next => {\n if (isTop.value && isActive.value) {\n next(false)\n if (!props.persistent) isActive.value = false\n else animateClick()\n } else {\n next()\n }\n })\n\n const top = ref<number>()\n watch(() => isActive.value && (props.absolute || props.contained) && teleportTarget.value == null, val => {\n if (val) {\n const scrollParent = getScrollParent(root.value)\n if (scrollParent && scrollParent !== document.scrollingElement) {\n top.value = scrollParent.scrollTop\n }\n }\n })\n\n // Add a quick \"bounce\" animation to the content\n function animateClick () {\n if (props.noClickAnimation) return\n\n contentEl.value?.animate([\n { transformOrigin: 'center' },\n { transform: 'scale(1.03)' },\n { transformOrigin: 'center' },\n ], {\n duration: 150,\n easing: standardEasing,\n })\n }\n\n useRender(() => (\n <>\n { slots.activator?.({\n isActive: isActive.value,\n props: mergeProps({\n ref: activatorRef,\n }, toHandlers(activatorEvents.value), props.activatorProps),\n }) }\n <Teleport\n disabled={ !teleportTarget.value }\n to={ teleportTarget.value }\n >\n { hasContent.value && (\n <div\n class={[\n 'v-overlay',\n {\n 'v-overlay--absolute': props.absolute || props.contained,\n 'v-overlay--active': isActive.value,\n 'v-overlay--contained': props.contained,\n },\n themeClasses.value,\n rtlClasses.value,\n ]}\n style={ top.value != null ? `top: ${convertToUnit(top.value)}` : undefined }\n ref={ root }\n {...attrs}\n >\n <Scrim\n color={ scrimColor }\n modelValue={ isActive.value && !!props.scrim }\n />\n <MaybeTransition\n appear\n onAfterLeave={ onAfterLeave }\n persisted\n transition={ props.transition }\n target={ activatorEl.value }\n >\n <div\n ref={ contentEl }\n v-show={ isActive.value }\n v-click-outside={{ handler: onClickOutside, closeConditional, include: () => [activatorEl.value] }}\n class={[\n 'v-overlay__content',\n props.contentClass,\n ]}\n style={[\n dimensionStyles.value,\n contentStyles.value,\n ]}\n >\n { slots.default?.({ isActive }) }\n </div>\n </MaybeTransition>\n </div>\n )}\n </Teleport>\n </>\n ))\n\n return {\n animateClick,\n contentEl,\n activatorEl,\n }\n },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n"],"file":"VOverlay.mjs"}
@@ -1,7 +1,7 @@
1
1
  // Utilities
2
- import { getCurrentInstance, IN_BROWSER, propsFactory, SUPPORTS_FOCUS_VISIBLE } from "../../util/index.mjs";
2
+ import { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from "../../util/index.mjs";
3
3
  import { makeDelayProps, useDelay } from "../../composables/delay.mjs";
4
- import { computed, effectScope, nextTick, onScopeDispose, ref, watch } from 'vue'; // Types
4
+ import { computed, effectScope, nextTick, onScopeDispose, ref, watch, watchEffect } from 'vue'; // Types
5
5
 
6
6
  export const makeActivatorProps = propsFactory({
7
7
  activator: [String, Object],
@@ -81,6 +81,14 @@ export function useActivator(props, isActive) {
81
81
 
82
82
  return events;
83
83
  });
84
+ const activatorRef = ref();
85
+ watchEffect(() => {
86
+ if (!activatorRef.value) return;
87
+ nextTick(() => {
88
+ const activator = activatorRef.value;
89
+ activatorEl.value = isComponentInstance(activator) ? activator.$el : activator;
90
+ });
91
+ });
84
92
  let scope;
85
93
  watch(() => !!props.activator, val => {
86
94
  if (val && IN_BROWSER) {
@@ -88,6 +96,7 @@ export function useActivator(props, isActive) {
88
96
  scope.run(() => {
89
97
  _useActivator(props, {
90
98
  activatorEl,
99
+ activatorRef,
91
100
  activatorEvents
92
101
  });
93
102
  });
@@ -100,6 +109,7 @@ export function useActivator(props, isActive) {
100
109
  });
101
110
  return {
102
111
  activatorEl,
112
+ activatorRef,
103
113
  activatorEvents
104
114
  };
105
115
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VOverlay/useActivator.tsx"],"names":["getCurrentInstance","IN_BROWSER","propsFactory","SUPPORTS_FOCUS_VISIBLE","makeDelayProps","useDelay","computed","effectScope","nextTick","onScopeDispose","ref","watch","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","useActivator","props","isActive","activatorEl","isHovered","isFocused","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","scope","val","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","vm","selector","proxy","$el","parentNode","document","querySelector","nodeType","Node","ELEMENT_NODE"],"mappings":"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","sourcesContent":["// Utilities\nimport { getCurrentInstance, IN_BROWSER, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport {\n computed,\n effectScope,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\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\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 ...makeDelayProps(),\n})\n\nexport function useActivator (\n props: ActivatorProps,\n isActive: Ref<boolean>\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\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 (value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\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 let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, { activatorEl, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n return { activatorEl, activatorEvents }\n}\n\nfunction _useActivator (props: ActivatorProps, { activatorEl, activatorEvents }: ReturnType<typeof useActivator>) {\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 const vm = getCurrentInstance('useActivator')\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n activator = vm?.proxy?.$el?.parentNode\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"],"file":"useActivator.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VOverlay/useActivator.tsx"],"names":["getCurrentInstance","IN_BROWSER","isComponentInstance","propsFactory","SUPPORTS_FOCUS_VISIBLE","makeDelayProps","useDelay","computed","effectScope","nextTick","onScopeDispose","ref","watch","watchEffect","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","useActivator","props","isActive","activatorEl","isHovered","isFocused","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","activatorRef","$el","scope","val","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","vm","selector","proxy","parentNode","document","querySelector","nodeType","Node","ELEMENT_NODE"],"mappings":"AAAA;SACSA,kB,EAAoBC,U,EAAYC,mB,EAAqBC,Y,EAAcC,sB;SACnEC,c,EAAgBC,Q;AACzB,SACEC,QADF,EAEEC,WAFF,EAGEC,QAHF,EAIEC,cAJF,EAKEC,GALF,EAMEC,KANF,EAOEC,WAPF,QAQO,KARP,C,CAUA;;AAkBA,OAAO,MAAMC,kBAAkB,GAAGX,YAAY,CAAC;AAC7CY,EAAAA,SAAS,EAAE,CAACC,MAAD,EAASC,MAAT,CADkC;AAE7CC,EAAAA,cAAc,EAAE;AACdC,IAAAA,IAAI,EAAEF,MADQ;AAEdG,IAAAA,OAAO,EAAE,OAAO,EAAP;AAFK,GAF6B;AAO7CC,EAAAA,WAAW,EAAE;AACXF,IAAAA,IAAI,EAAEG,OADK;AAEXF,IAAAA,OAAO,EAAEG;AAFE,GAPgC;AAW7CC,EAAAA,WAAW,EAAEF,OAXgC;AAY7CG,EAAAA,WAAW,EAAE;AACXN,IAAAA,IAAI,EAAEG,OADK;AAEXF,IAAAA,OAAO,EAAEG;AAFE,GAZgC;AAiB7C,KAAGlB,cAAc;AAjB4B,CAAD,CAAvC;AAoBP,OAAO,SAASqB,YAAT,CACLC,KADK,EAELC,QAFK,EAGL;AACA,QAAMC,WAAW,GAAGlB,GAAG,EAAvB;AAEA,MAAImB,SAAS,GAAG,KAAhB;AACA,MAAIC,SAAS,GAAG,KAAhB;AAEA,QAAMN,WAAW,GAAGlB,QAAQ,CAAC,MAAMoB,KAAK,CAACF,WAAN,IAAsBE,KAAK,CAACF,WAAN,IAAqB,IAArB,IAA6BE,KAAK,CAACH,WAAhE,CAA5B;AACA,QAAMH,WAAW,GAAGd,QAAQ,CAAC,MAAMoB,KAAK,CAACN,WAAN,IAAsBM,KAAK,CAACN,WAAN,IAAqB,IAArB,IAA6B,CAACM,KAAK,CAACH,WAApC,IAAmD,CAACC,WAAW,CAACO,KAA7F,CAA5B;AAEA,QAAM;AAAEC,IAAAA,YAAF;AAAgBC,IAAAA;AAAhB,MAAkC5B,QAAQ,CAACqB,KAAD,EAAQK,KAAK,IAAI;AAC/D,QAAIA,KAAK,MACNL,KAAK,CAACH,WAAN,IAAqBM,SAAtB,IACCL,WAAW,CAACO,KAAZ,IAAqBD,SAFf,CAAT,EAGG;AACDH,MAAAA,QAAQ,CAACI,KAAT,GAAiBA,KAAjB;AACD;AACF,GAP+C,CAAhD;AASA,QAAMG,eAAe,GAAG;AACtBC,IAAAA,KAAK,EAAGC,CAAD,IAAmB;AACxBA,MAAAA,CAAC,CAACC,eAAF;AACAT,MAAAA,WAAW,CAACG,KAAZ,GAAqBK,CAAC,CAACE,aAAF,IAAmBF,CAAC,CAACG,MAA1C;AACAZ,MAAAA,QAAQ,CAACI,KAAT,GAAiB,CAACJ,QAAQ,CAACI,KAA3B;AACD,KALqB;AAMtBS,IAAAA,UAAU,EAAGJ,CAAD,IAAmB;AAC7BP,MAAAA,SAAS,GAAG,IAAZ;AACAD,MAAAA,WAAW,CAACG,KAAZ,GAAqBK,CAAC,CAACE,aAAF,IAAmBF,CAAC,CAACG,MAA1C;AACAP,MAAAA,YAAY;AACb,KAVqB;AAWtBS,IAAAA,UAAU,EAAGL,CAAD,IAAmB;AAC7BP,MAAAA,SAAS,GAAG,KAAZ;AACAI,MAAAA,aAAa;AACd,KAdqB;AAetBS,IAAAA,KAAK,EAAGN,CAAD,IAAmB;AACxB,UACEjC,sBAAsB,IACtB,CAAEiC,CAAC,CAACG,MAAH,CAA0BI,OAA1B,CAAkC,gBAAlC,CAFH,EAGE;AAEFb,MAAAA,SAAS,GAAG,IAAZ;AACAM,MAAAA,CAAC,CAACC,eAAF;AACAT,MAAAA,WAAW,CAACG,KAAZ,GAAqBK,CAAC,CAACE,aAAF,IAAmBF,CAAC,CAACG,MAA1C;AAEAP,MAAAA,YAAY;AACb,KA1BqB;AA2BtBY,IAAAA,IAAI,EAAGR,CAAD,IAAmB;AACvBN,MAAAA,SAAS,GAAG,KAAZ;AACAM,MAAAA,CAAC,CAACC,eAAF;AAEAJ,MAAAA,aAAa;AACd;AAhCqB,GAAxB;AAmCA,QAAMY,eAAe,GAAGvC,QAAQ,CAAC,MAAM;AACrC,UAAMwC,MAAuC,GAAG,EAAhD;;AAEA,QAAI1B,WAAW,CAACW,KAAhB,EAAuB;AACrBe,MAAAA,MAAM,CAACX,KAAP,GAAeD,eAAe,CAACC,KAA/B;AACD;;AACD,QAAIT,KAAK,CAACH,WAAV,EAAuB;AACrBuB,MAAAA,MAAM,CAACN,UAAP,GAAoBN,eAAe,CAACM,UAApC;AACAM,MAAAA,MAAM,CAACL,UAAP,GAAoBP,eAAe,CAACO,UAApC;AACD;;AACD,QAAIjB,WAAW,CAACO,KAAhB,EAAuB;AACrBe,MAAAA,MAAM,CAACJ,KAAP,GAAeR,eAAe,CAACQ,KAA/B;AACAI,MAAAA,MAAM,CAACF,IAAP,GAAcV,eAAe,CAACU,IAA9B;AACD;;AAED,WAAOE,MAAP;AACD,GAhB+B,CAAhC;AAkBA,QAAMC,YAAY,GAAGrC,GAAG,EAAxB;AACAE,EAAAA,WAAW,CAAC,MAAM;AAChB,QAAI,CAACmC,YAAY,CAAChB,KAAlB,EAAyB;AAEzBvB,IAAAA,QAAQ,CAAC,MAAM;AACb,YAAMM,SAAS,GAAGiC,YAAY,CAAChB,KAA/B;AACAH,MAAAA,WAAW,CAACG,KAAZ,GAAoB9B,mBAAmB,CAACa,SAAD,CAAnB,GAAiCA,SAAS,CAACkC,GAA3C,GAAiDlC,SAArE;AACD,KAHO,CAAR;AAID,GAPU,CAAX;AASA,MAAImC,KAAJ;AACAtC,EAAAA,KAAK,CAAC,MAAM,CAAC,CAACe,KAAK,CAACZ,SAAf,EAA0BoC,GAAG,IAAI;AACpC,QAAIA,GAAG,IAAIlD,UAAX,EAAuB;AACrBiD,MAAAA,KAAK,GAAG1C,WAAW,EAAnB;AACA0C,MAAAA,KAAK,CAACE,GAAN,CAAU,MAAM;AACdC,QAAAA,aAAa,CAAC1B,KAAD,EAAQ;AAAEE,UAAAA,WAAF;AAAemB,UAAAA,YAAf;AAA6BF,UAAAA;AAA7B,SAAR,CAAb;AACD,OAFD;AAGD,KALD,MAKO,IAAII,KAAJ,EAAW;AAChBA,MAAAA,KAAK,CAACI,IAAN;AACD;AACF,GATI,EASF;AAAEC,IAAAA,KAAK,EAAE,MAAT;AAAiBC,IAAAA,SAAS,EAAE;AAA5B,GATE,CAAL;AAWA,SAAO;AAAE3B,IAAAA,WAAF;AAAemB,IAAAA,YAAf;AAA6BF,IAAAA;AAA7B,GAAP;AACD;;AAED,SAASO,aAAT,CAAwB1B,KAAxB,QAAkH;AAAA,MAAnE;AAAEE,IAAAA,WAAF;AAAeiB,IAAAA;AAAf,GAAmE;AAChHlC,EAAAA,KAAK,CAAC,MAAMe,KAAK,CAACZ,SAAb,EAAwB,CAACoC,GAAD,EAAMM,MAAN,KAAiB;AAC5C,QAAIA,MAAM,IAAIN,GAAG,KAAKM,MAAtB,EAA8B;AAC5B,YAAM1C,SAAS,GAAG2C,YAAY,CAACD,MAAD,CAA9B;AACA1C,MAAAA,SAAS,IAAI4C,oBAAoB,CAAC5C,SAAD,CAAjC;AACD;;AACD,QAAIoC,GAAJ,EAAS;AACP1C,MAAAA,QAAQ,CAAC,MAAMmD,kBAAkB,EAAzB,CAAR;AACD;AACF,GARI,EAQF;AAAEJ,IAAAA,SAAS,EAAE;AAAb,GARE,CAAL;AAUA5C,EAAAA,KAAK,CAAC,MAAMe,KAAK,CAACT,cAAb,EAA6B,MAAM;AACtC0C,IAAAA,kBAAkB;AACnB,GAFI,CAAL;AAIAlD,EAAAA,cAAc,CAAC,MAAM;AACnBiD,IAAAA,oBAAoB;AACrB,GAFa,CAAd;;AAIA,WAASC,kBAAT,GAAiF;AAAA,QAApDC,EAAoD,uEAA/CH,YAAY,EAAmC;;AAAA,QAA/BI,MAA+B,uEAAtBnC,KAAK,CAACT,cAAgB;;AAC/E,QAAI,CAAC2C,EAAL,EAAS;AAET5C,IAAAA,MAAM,CAAC8C,OAAP,CAAejB,eAAe,CAACd,KAA/B,EAAsCgC,OAAtC,CAA8C,SAAgB;AAAA,UAAf,CAACC,IAAD,EAAOC,EAAP,CAAe;AAC5DL,MAAAA,EAAE,CAACM,gBAAH,CAAoBF,IAApB,EAA0BC,EAA1B;AACD,KAFD;AAIAjD,IAAAA,MAAM,CAACmD,IAAP,CAAYN,MAAZ,EAAoBE,OAApB,CAA4BK,CAAC,IAAI;AAC/B,UAAIP,MAAM,CAACO,CAAD,CAAN,IAAa,IAAjB,EAAuB;AACrBR,QAAAA,EAAE,CAACS,eAAH,CAAmBD,CAAnB;AACD,OAFD,MAEO;AACLR,QAAAA,EAAE,CAACU,YAAH,CAAgBF,CAAhB,EAAmBP,MAAM,CAACO,CAAD,CAAzB;AACD;AACF,KAND;AAOD;;AAED,WAASV,oBAAT,GAAmF;AAAA,QAApDE,EAAoD,uEAA/CH,YAAY,EAAmC;;AAAA,QAA/BI,MAA+B,uEAAtBnC,KAAK,CAACT,cAAgB;;AACjF,QAAI,CAAC2C,EAAL,EAAS;AAET5C,IAAAA,MAAM,CAAC8C,OAAP,CAAejB,eAAe,CAACd,KAA/B,EAAsCgC,OAAtC,CAA8C,SAAgB;AAAA,UAAf,CAACC,IAAD,EAAOC,EAAP,CAAe;AAC5DL,MAAAA,EAAE,CAACW,mBAAH,CAAuBP,IAAvB,EAA6BC,EAA7B;AACD,KAFD;AAIAjD,IAAAA,MAAM,CAACmD,IAAP,CAAYN,MAAZ,EAAoBE,OAApB,CAA4BK,CAAC,IAAI;AAC/BR,MAAAA,EAAE,CAACS,eAAH,CAAmBD,CAAnB;AACD,KAFD;AAGD;;AAED,QAAMI,EAAE,GAAGzE,kBAAkB,CAAC,cAAD,CAA7B;;AACA,WAAS0D,YAAT,GAA4E;AAAA;;AAAA,QAArDgB,QAAqD,uEAA1C/C,KAAK,CAACZ,SAAoC;AAC1E,QAAIA,SAAJ;;AACA,QAAI2D,QAAJ,EAAc;AACZ,UAAIA,QAAQ,KAAK,QAAjB,EAA2B;AAAA;;AACzB3D,QAAAA,SAAS,GAAG0D,EAAH,iCAAGA,EAAE,CAAEE,KAAP,sCAAG,UAAW1B,GAAd,qBAAG,cAAgB2B,UAA5B;AACD,OAFD,MAEO,IAAI,OAAOF,QAAP,KAAoB,QAAxB,EAAkC;AACvC;AACA3D,QAAAA,SAAS,GAAG8D,QAAQ,CAACC,aAAT,CAAuBJ,QAAvB,CAAZ;AACD,OAHM,MAGA,IAAI,SAASA,QAAb,EAAuB;AAC5B;AACA3D,QAAAA,SAAS,GAAG2D,QAAQ,CAACzB,GAArB;AACD,OAHM,MAGA;AACL;AACAlC,QAAAA,SAAS,GAAG2D,QAAZ;AACD;AACF,KAfyE,CAiB1E;;;AACA7C,IAAAA,WAAW,CAACG,KAAZ,GAAoB,eAAAjB,SAAS,SAAT,uBAAWgE,QAAX,MAAwBC,IAAI,CAACC,YAA7B,GAA4ClE,SAA5C,GAAwD,IAA5E;AAEA,WAAOc,WAAW,CAACG,KAAnB;AACD;AACF","sourcesContent":["// Utilities\nimport { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport {\n computed,\n effectScope,\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 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\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 ...makeDelayProps(),\n})\n\nexport function useActivator (\n props: ActivatorProps,\n isActive: Ref<boolean>\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\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 (value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\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 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 let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, { activatorEl, activatorRef, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n return { activatorEl, activatorRef, activatorEvents }\n}\n\nfunction _useActivator (props: ActivatorProps, { activatorEl, activatorEvents }: ReturnType<typeof useActivator>) {\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 const vm = getCurrentInstance('useActivator')\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n activator = vm?.proxy?.$el?.parentNode\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"],"file":"useActivator.mjs"}
@@ -8,7 +8,6 @@ import { useLocale } from "../../composables/locale.mjs";
8
8
  import { useRtl } from "../../composables/rtl.mjs";
9
9
  import { makeElevationProps } from "../../composables/elevation.mjs";
10
10
  import { makeDensityProps } from "../../composables/density.mjs";
11
- import { makeRoundedProps } from "../../composables/rounded.mjs";
12
11
  import { makeSizeProps } from "../../composables/size.mjs";
13
12
  import { makeThemeProps, provideTheme } from "../../composables/theme.mjs";
14
13
  import { makeVariantProps } from "../../composables/variant.mjs";
@@ -18,7 +17,7 @@ import { useRefs } from "../../composables/refs.mjs";
18
17
  import { useProxiedModel } from "../../composables/proxiedModel.mjs";
19
18
  import { provideDefaults } from "../../composables/defaults.mjs"; // Utilities
20
19
 
21
- import { computed, nextTick, ref } from 'vue';
20
+ import { computed, nextTick, ref, toRef } from 'vue';
22
21
  import { createRange, defineComponent, keyValues } from "../../util/index.mjs"; // Types
23
22
 
24
23
  export const VPagination = defineComponent({
@@ -88,14 +87,13 @@ export const VPagination = defineComponent({
88
87
  default: '...'
89
88
  },
90
89
  showFirstLastPage: Boolean,
90
+ ...makeBorderProps(),
91
+ ...makeDensityProps(),
92
+ ...makeElevationProps(),
93
+ ...makeSizeProps(),
91
94
  ...makeTagProps({
92
95
  tag: 'nav'
93
96
  }),
94
- ...makeElevationProps(),
95
- ...makeDensityProps(),
96
- ...makeRoundedProps(),
97
- ...makeSizeProps(),
98
- ...makeBorderProps(),
99
97
  ...makeThemeProps(),
100
98
  ...makeVariantProps({
101
99
  variant: 'text'
@@ -189,12 +187,15 @@ export const VPagination = defineComponent({
189
187
  refs,
190
188
  updateRef
191
189
  } = useRefs();
190
+ provideDefaults({
191
+ VBtn: {
192
+ border: toRef(props, 'border'),
193
+ density: toRef(props, 'density'),
194
+ size: toRef(props, 'size'),
195
+ variant: toRef(props, 'variant')
196
+ }
197
+ });
192
198
  const items = computed(() => {
193
- const sharedProps = {
194
- density: props.density,
195
- rounded: props.rounded,
196
- size: props.size
197
- };
198
199
  return range.value.map((item, index) => {
199
200
  const ref = e => updateRef(e, index);
200
201
 
@@ -202,13 +203,11 @@ export const VPagination = defineComponent({
202
203
  return {
203
204
  isActive: false,
204
205
  page: item,
205
- props: { ...sharedProps,
206
+ props: {
206
207
  ref,
207
208
  ellipsis: true,
208
209
  icon: true,
209
- disabled: true,
210
- variant: props.variant,
211
- border: props.border
210
+ disabled: true
212
211
  }
213
212
  };
214
213
  } else {
@@ -216,14 +215,12 @@ export const VPagination = defineComponent({
216
215
  return {
217
216
  isActive,
218
217
  page: n(item),
219
- props: { ...sharedProps,
218
+ props: {
220
219
  ref,
221
220
  ellipsis: false,
222
221
  icon: true,
223
222
  disabled: !!props.disabled || props.length < 2,
224
223
  elevation: props.elevation,
225
- variant: props.variant,
226
- border: props.border,
227
224
  color: isActive ? props.color : undefined,
228
225
  ariaCurrent: isActive,
229
226
  ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),
@@ -234,39 +231,31 @@ export const VPagination = defineComponent({
234
231
  });
235
232
  });
236
233
  const controls = computed(() => {
237
- const sharedProps = {
238
- color: undefined,
239
- density: props.density,
240
- rounded: props.rounded,
241
- size: props.size,
242
- variant: props.variant,
243
- border: props.border
244
- };
245
234
  const prevDisabled = !!props.disabled || page.value <= start.value;
246
235
  const nextDisabled = !!props.disabled || page.value >= start.value + length.value - 1;
247
236
  return {
248
- first: props.showFirstLastPage ? { ...sharedProps,
237
+ first: props.showFirstLastPage ? {
249
238
  icon: isRtl.value ? props.lastIcon : props.firstIcon,
250
239
  onClick: e => setValue(e, start.value, 'first'),
251
240
  disabled: prevDisabled,
252
241
  ariaLabel: t(props.firstAriaLabel),
253
242
  ariaDisabled: prevDisabled
254
243
  } : undefined,
255
- prev: { ...sharedProps,
244
+ prev: {
256
245
  icon: isRtl.value ? props.nextIcon : props.prevIcon,
257
246
  onClick: e => setValue(e, page.value - 1, 'prev'),
258
247
  disabled: prevDisabled,
259
248
  ariaLabel: t(props.previousAriaLabel),
260
249
  ariaDisabled: prevDisabled
261
250
  },
262
- next: { ...sharedProps,
251
+ next: {
263
252
  icon: isRtl.value ? props.prevIcon : props.nextIcon,
264
253
  onClick: e => setValue(e, page.value + 1, 'next'),
265
254
  disabled: nextDisabled,
266
255
  ariaLabel: t(props.nextAriaLabel),
267
256
  ariaDisabled: nextDisabled
268
257
  },
269
- last: props.showFirstLastPage ? { ...sharedProps,
258
+ last: props.showFirstLastPage ? {
270
259
  icon: isRtl.value ? props.firstIcon : props.lastIcon,
271
260
  onClick: e => setValue(e, start.value + length.value - 1, 'last'),
272
261
  disabled: nextDisabled,