{"version":3,"file":"VaTimeline.mjs","sources":["../../../../../src/components/va-timeline/VaTimeline.vue"],"sourcesContent":["<script>\nimport { h, Fragment } from 'vue'\nimport { useComponentPresetProp } from '../../composables/useComponentPreset.ts'\n\nconst getPropsData = (slot) => slot?.props\n\nconst getIsActive = (slot) => !!slot?.props?.active || false\n\n/**\n* Slot can be Vue Fragment generated by v-for.\n* If slot `type` property is Vue Fragment Symbol return true\n*/\nconst isVueFragment = (slot) => slot.type === Fragment\n\nconst isEmptyArray = (arr) => arr && arr.length === 0\n\n/* Returns correct slots without v-for vue fragment */\nfunction getSlots (slots) {\n  const defaultSlots = slots.default?.()\n\n  if (!defaultSlots || isEmptyArray(defaultSlots)) { return [] }\n  if (isVueFragment(defaultSlots[0])) { return defaultSlots[0].children }\n\n  return defaultSlots\n}\n\nconst processSlots = (context) => {\n  const slots = getSlots(context.slots)\n\n  slots.forEach((slot, index) => {\n    if (!getPropsData(slot)) {\n      slot.props = {}\n    }\n\n    const propsData = getPropsData(slot)\n\n    // Pass down vertical prop.\n    propsData.vertical = context.props.vertical\n\n    if (context.props.centered) {\n      // Every second slot will be inverted\n      propsData.inverted = !!(index % 2)\n    }\n\n    if (index === 0) {\n      propsData.isFirst = true\n    }\n    if (index === slots.length - 1) {\n      propsData.isLast = true\n    }\n\n    const currentSlotActive = propsData.active\n\n    // For inactive slot props are default\n    if (!currentSlotActive) {\n      return\n    }\n\n    if (index === 0) {\n      propsData.activePrevious = currentSlotActive\n    }\n\n    if (index === slots.length - 1) {\n      propsData.activeNext = currentSlotActive\n    }\n\n    const previousSlotActive = getIsActive(slots[index - 1])\n    if (previousSlotActive) {\n      propsData.activePrevious = true\n    }\n\n    const nextSlotActive = getIsActive(slots[index + 1])\n    if (nextSlotActive) {\n      propsData.activeNext = true\n    }\n  })\n\n  return slots\n}\n\nconst COMPONENT_NAME = 'va-timeline'\n\nexport default {\n  name: COMPONENT_NAME,\n  props: {\n    ...useComponentPresetProp,\n    vertical: { type: Boolean },\n    centered: { type: Boolean },\n    alignTop: { type: Boolean },\n  },\n  setup (props, { slots }) {\n    return () => h(\n      'div',\n      {\n        class: {\n          [COMPONENT_NAME]: true,\n          [`${COMPONENT_NAME}--vertical`]: props.vertical,\n          [`${COMPONENT_NAME}--align-top`]: props.alignTop,\n        },\n      },\n      processSlots({ props, slots }),\n    )\n  },\n}\n</script>\n\n<style lang=\"scss\">\n@import 'variables';\n\n.va-timeline {\n  display: var(--va-timeline-display);\n  flex-wrap: var(--va-timeline-flex-wrap);\n  font-family: var(--va-font-family);\n\n  &--vertical {\n    flex-direction: var(--va-timeline-vertical-flex-direction);\n    padding-left: var(--va-timeline-vertical-padding-left);\n    padding-right: var(--va-timeline-vertical-padding-right);\n  }\n\n  &--align-top {\n    .va-timeline-item__before,\n    .va-timeline-item__after {\n      flex: 0;\n    }\n  }\n\n  .va-timeline-item {\n    flex: 1;\n  }\n\n  .va-timeline-item--vertical {\n    .va-timeline-separator--vertical .va-timeline-separator__line {\n      &:first-child {\n        flex: 0 0 1rem;\n      }\n    }\n\n    &.va-timeline-item--is-first {\n      .va-timeline-separator--vertical .va-timeline-separator__line {\n        &:first-child {\n          flex-basis: 2rem;\n        }\n      }\n\n      .va-timeline-item__after,\n      .va-timeline-item__before {\n        padding-top: 2rem;\n      }\n    }\n\n    &.va-timeline-item--vertical.va-timeline-item--is-last {\n      .va-timeline-item__after,\n      .va-timeline-item__before {\n        padding-bottom: 2rem;\n      }\n    }\n  }\n}\n</style>\n"],"names":[],"mappings":";;;AAIA,MAAM,eAAe,CAAC,SAAS,6BAAM;AAErC,MAAM,cAAc,CAAC,SAAS;;AAAA,UAAC,GAAC,kCAAM,UAAN,mBAAa,WAAU;AAAA;AAMvD,MAAM,gBAAgB,CAAC,SAAS,KAAK,SAAS;AAE9C,MAAM,eAAe,CAAC,QAAQ,OAAO,IAAI,WAAW;AAGpD,SAAS,SAAU,OAAO;;AACxB,QAAM,gBAAe,WAAM,YAAN;AAErB,MAAI,CAAC,gBAAgB,aAAa,YAAY,GAAG;AAAE,WAAO,CAAA;AAAA,EAAG;AAC7D,MAAI,cAAc,aAAa,CAAC,CAAC,GAAG;AAAE,WAAO,aAAa,CAAC,EAAE;AAAA,EAAS;AAEtE,SAAO;AACT;AAEA,MAAM,eAAe,CAAC,YAAY;AAChC,QAAM,QAAQ,SAAS,QAAQ,KAAK;AAEpC,QAAM,QAAQ,CAAC,MAAM,UAAU;AAC7B,QAAI,CAAC,aAAa,IAAI,GAAG;AACvB,WAAK,QAAQ,CAAC;AAAA,IAChB;AAEA,UAAM,YAAY,aAAa,IAAI;AAGnC,cAAU,WAAW,QAAQ,MAAM;AAEnC,QAAI,QAAQ,MAAM,UAAU;AAE1B,gBAAU,WAAW,CAAC,EAAE,QAAQ;AAAA,IAClC;AAEA,QAAI,UAAU,GAAG;AACf,gBAAU,UAAU;AAAA,IACtB;AACA,QAAI,UAAU,MAAM,SAAS,GAAG;AAC9B,gBAAU,SAAS;AAAA,IACrB;AAEA,UAAM,oBAAoB,UAAU;AAGpC,QAAI,CAAC,mBAAmB;AACtB;AAAA,IACF;AAEA,QAAI,UAAU,GAAG;AACf,gBAAU,iBAAiB;AAAA,IAC7B;AAEA,QAAI,UAAU,MAAM,SAAS,GAAG;AAC9B,gBAAU,aAAa;AAAA,IACzB;AAEA,UAAM,qBAAqB,YAAY,MAAM,QAAQ,CAAC,CAAC;AACvD,QAAI,oBAAoB;AACtB,gBAAU,iBAAiB;AAAA,IAC7B;AAEA,UAAM,iBAAiB,YAAY,MAAM,QAAQ,CAAC,CAAC;AACnD,QAAI,gBAAgB;AAClB,gBAAU,aAAa;AAAA,IACzB;AAAA,GACD;AAED,SAAO;AACT;AAEA,MAAM,iBAAiB;AAElB,MAAA,YAAU;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,EAAE,MAAM,QAAS;AAAA,IAC3B,UAAU,EAAE,MAAM,QAAS;AAAA,IAC3B,UAAU,EAAE,MAAM,QAAS;AAAA,EAC5B;AAAA,EACD,MAAO,OAAO,EAAE,SAAS;AACvB,WAAO,MAAM;AAAA,MACX;AAAA,MACA;AAAA,QACE,OAAO;AAAA,UACL,CAAC,cAAc,GAAG;AAAA,UAClB,CAAC,GAAG,cAAc,YAAY,GAAG,MAAM;AAAA,UACvC,CAAC,GAAG,cAAc,aAAa,GAAG,MAAM;AAAA,QACzC;AAAA,MACF;AAAA,MACD,aAAa,EAAE,OAAO,OAAO;AAAA,IAC/B;AAAA,EACD;AACH;"}