{"version":3,"file":"VStepperItem.mjs","names":["VAvatar","VIcon","makeGroupItemProps","useGroupItem","Ripple","computed","VStepperSymbol","genericComponent","propsFactory","useRender","makeVStepperItemProps","color","String","title","subtitle","complete","Boolean","completeIcon","type","default","editable","editIcon","error","errorIcon","icon","ripple","Object","rules","Array","VStepperItem","name","directives","props","emits","val","setup","_ref","slots","group","step","value","isValid","every","handler","canEdit","disabled","hasError","hasCompleted","length","slotProps","hasColor","isSelected","hasTitle","hasSubtitle","onClick","toggle","_withDirectives","_createVNode","selectedClass","undefined","_resolveDirective"],"sources":["../../../src/components/VStepper/VStepperItem.tsx"],"sourcesContent":["// Styles\nimport './VStepperItem.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar/VAvatar'\nimport { VIcon } from '@/components/VIcon/VIcon'\n\n// Composables\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed } from 'vue'\nimport { VStepperSymbol } from './VStepper'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { RippleDirectiveBinding } from '@/directives/ripple'\n\nexport type StepperItemSlot = {\n  canEdit: boolean\n  hasError: boolean\n  hasCompleted: boolean\n  title?: string | number\n  subtitle?: string | number\n  step: any\n}\n\nexport type VStepperItemSlots = {\n  default: StepperItemSlot\n  icon: StepperItemSlot\n  title: StepperItemSlot\n  subtitle: StepperItemSlot\n}\n\nexport type ValidationRule = () => string | boolean\n\nexport const makeVStepperItemProps = propsFactory({\n  color: String,\n  title: String,\n  subtitle: String,\n  complete: Boolean,\n  completeIcon: {\n    type: String,\n    default: '$complete',\n  },\n  editable: Boolean,\n  editIcon: {\n    type: String,\n    default: '$edit',\n  },\n  error: Boolean,\n  errorIcon: {\n    type: String,\n    default: '$error',\n  },\n  icon: String,\n  ripple: {\n    type: [Boolean, Object] as PropType<RippleDirectiveBinding['value']>,\n    default: true,\n  },\n  rules: {\n    type: Array as PropType<readonly ValidationRule[]>,\n    default: () => ([]),\n  },\n\n  ...makeGroupItemProps(),\n}, 'VStepperItem')\n\nexport const VStepperItem = genericComponent<VStepperItemSlots>()({\n  name: 'VStepperItem',\n\n  directives: { Ripple },\n\n  props: makeVStepperItemProps(),\n\n  emits: {\n    'group:selected': (val: { value: boolean }) => true,\n  },\n\n  setup (props, { slots }) {\n    const group = useGroupItem(props, VStepperSymbol, true)\n    const step = computed(() => group?.value.value ?? props.value)\n    const isValid = computed(() => props.rules.every(handler => handler() === true))\n    const canEdit = computed(() => !props.disabled && props.editable)\n    const hasError = computed(() => props.error || !isValid.value)\n    const hasCompleted = computed(() => props.complete || (props.rules.length > 0 && isValid.value))\n    const icon = computed(() => {\n      if (hasError.value) return props.errorIcon\n      if (hasCompleted.value) return props.completeIcon\n      if (props.editable) return props.editIcon\n\n      return props.icon\n    })\n    const slotProps = computed(() => ({\n      canEdit: canEdit.value,\n      hasError: hasError.value,\n      hasCompleted: hasCompleted.value,\n      title: props.title,\n      subtitle: props.subtitle,\n      step: step.value,\n      value: props.value,\n    }))\n\n    useRender(() => {\n      const hasColor = (\n        !group ||\n        group.isSelected.value ||\n        hasCompleted.value ||\n        canEdit.value\n      ) && (\n        !hasError.value &&\n        !props.disabled\n      )\n      const hasTitle = !!(props.title != null || slots.title)\n      const hasSubtitle = !!(props.subtitle != null || slots.subtitle)\n\n      function onClick () {\n        group?.toggle()\n      }\n\n      return (\n        <button\n          class={[\n            'v-stepper-item',\n            {\n              'v-stepper-item--complete': hasCompleted.value,\n              'v-stepper-item--disabled': props.disabled,\n              'v-stepper-item--error': hasError.value,\n            },\n            group?.selectedClass.value,\n          ]}\n          disabled={ !props.editable }\n          v-ripple={[\n            props.ripple && props.editable,\n            null,\n            null,\n          ]}\n          onClick={ onClick }\n        >\n          <VAvatar\n            key=\"stepper-avatar\"\n            class=\"v-stepper-item__avatar\"\n            color={ hasColor ? props.color : undefined }\n            size={ 24 }\n          >\n            { slots.icon?.(slotProps.value) ?? (\n              icon.value ? (\n                <VIcon icon={ icon.value }></VIcon>\n              ) : step.value\n            )}\n          </VAvatar>\n\n          <div class=\"v-stepper-item__content\">\n            { hasTitle && (\n              <div\n                key=\"title\"\n                class=\"v-stepper-item__title\"\n              >\n                { slots.title?.(slotProps.value) ?? props.title }\n              </div>\n            )}\n\n            { hasSubtitle && (\n              <div\n                key=\"subtitle\"\n                class=\"v-stepper-item__subtitle\"\n              >\n                { slots.subtitle?.(slotProps.value) ?? props.subtitle }\n              </div>\n            )}\n\n            { slots.default?.(slotProps.value) }\n          </div>\n        </button>\n      )\n    })\n    return {}\n  },\n})\n\nexport type VStepperItem = InstanceType<typeof VStepperItem>\n"],"mappings":"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"}