{"version":3,"file":"nav-bar.mjs","sources":["../../../../../../../packages/components/nav-bar/src/nav-bar.tsx"],"sourcesContent":["import {\n  type CSSProperties,\n  type ExtractPropTypes,\n  defineComponent,\n  ref,\n} from 'vue'\n// Utils\nimport { getZIndexStyle, numericProp, truthProp } from '@xzx-design/utils'\nimport { useNamespace } from '@xzx-design/hooks'\n\nimport Icon from '@xzx-design/components/icon'\nimport { Left } from '@xzx-design/icons-vue'\nimport { usePlaceholder } from './use-placeholder'\n\nexport const HAPTICS_FEEDBACK = 'xzx-haptics-feedback'\n\nconst name = 'XzxNavBar'\n\nexport const navBarProps = {\n  title: String,\n  fixed: Boolean,\n  zIndex: numericProp,\n  border: truthProp,\n  leftText: String,\n  rightText: String,\n  leftDisabled: Boolean,\n  rightDisabled: Boolean,\n  leftArrow: Boolean,\n  placeholder: Boolean,\n  safeAreaInsetTop: Boolean,\n  clickable: truthProp,\n  leftClose: Boolean,\n}\n\nexport type NavBarProps = ExtractPropTypes<typeof navBarProps>\n\nexport default defineComponent({\n  name,\n\n  props: navBarProps,\n\n  emits: ['clickLeft', 'clickRight'],\n\n  setup(props, { emit, slots }) {\n    const { bem } = useNamespace('nav-bar')\n\n    const navBarRef = ref<HTMLElement>()\n    const renderPlaceholder = usePlaceholder(navBarRef, bem)\n\n    const onClickLeft = (event: MouseEvent) => {\n      if (!props.leftDisabled) {\n        emit('clickLeft', event)\n      }\n    }\n    const onClickRight = (event: MouseEvent) => {\n      if (!props.rightDisabled) {\n        emit('clickRight', event)\n      }\n    }\n\n    const renderLeft = () => {\n      if (slots.left) {\n        return slots.left()\n      }\n\n      return [\n        props.leftArrow && (\n          <div class={bem('arrow')}>\n            <Icon>\n              <Left />\n            </Icon>\n          </div>\n        ),\n        props.leftText && <span class={bem('text')}>{props.leftText}</span>,\n      ]\n    }\n\n    const renderRight = () => {\n      if (slots.right) {\n        return slots.right()\n      }\n\n      return <span class={bem('text')}>{props.rightText}</span>\n    }\n\n    const renderNavBar = () => {\n      const { title, fixed, zIndex } = props\n      const style: CSSProperties = getZIndexStyle(zIndex)\n\n      const hasLeft = props.leftArrow || props.leftText || slots.left\n      const hasRight = props.rightText || slots.right\n\n      return (\n        <div\n          ref={navBarRef}\n          style={style}\n          class={[\n            bem({ fixed }),\n            {\n              'xzx-safe-area-top': props.safeAreaInsetTop,\n            },\n          ]}\n        >\n          <div class={bem('content')}>\n            {hasLeft && (\n              <div\n                class={[\n                  bem('left', { disabled: props.leftDisabled }),\n                  props.clickable && !props.leftDisabled\n                    ? HAPTICS_FEEDBACK\n                    : '',\n                ]}\n                onClick={onClickLeft}\n              >\n                {renderLeft()}\n              </div>\n            )}\n            <div class={[bem('title'), 'xzx-ellipsis']}>\n              {slots.title ? slots.title() : title}\n            </div>\n            {hasRight && (\n              <div\n                class={[\n                  bem('right', { disabled: props.rightDisabled }),\n                  props.clickable && !props.rightDisabled\n                    ? HAPTICS_FEEDBACK\n                    : '',\n                ]}\n                onClick={onClickRight}\n              >\n                {renderRight()}\n              </div>\n            )}\n          </div>\n        </div>\n      )\n    }\n\n    return () => {\n      if (props.fixed && props.placeholder) {\n        return renderPlaceholder(renderNavBar)\n      }\n      return renderNavBar()\n    }\n  },\n})\n"],"names":["HAPTICS_FEEDBACK","name","navBarProps","title","String","fixed","Boolean","zIndex","numericProp","border","truthProp","leftText","rightText","leftDisabled","rightDisabled","leftArrow","placeholder","safeAreaInsetTop","clickable","leftClose","defineComponent","props","emits","setup","emit","slots","bem","useNamespace","navBarRef","ref","renderPlaceholder","usePlaceholder","onClickLeft","event","onClickRight","renderLeft","left","_createVNode","Icon","default","Left","renderRight","right","renderNavBar","style","getZIndexStyle","hasLeft","hasRight","disabled"],"mappings":";;;;;;;;;;AAcO,MAAMA,gBAAmB,GAAA,uBAAA;AAEhC,MAAMC,IAAO,GAAA,WAAA,CAAA;AAEN,MAAMC,WAAc,GAAA;AAAA,EACzBC,KAAOC,EAAAA,MAAAA;AAAAA,EACPC,KAAOC,EAAAA,OAAAA;AAAAA,EACPC,MAAQC,EAAAA,WAAAA;AAAAA,EACRC,MAAQC,EAAAA,SAAAA;AAAAA,EACRC,QAAUP,EAAAA,MAAAA;AAAAA,EACVQ,SAAWR,EAAAA,MAAAA;AAAAA,EACXS,YAAcP,EAAAA,OAAAA;AAAAA,EACdQ,aAAeR,EAAAA,OAAAA;AAAAA,EACfS,SAAWT,EAAAA,OAAAA;AAAAA,EACXU,WAAaV,EAAAA,OAAAA;AAAAA,EACbW,gBAAkBX,EAAAA,OAAAA;AAAAA,EAClBY,SAAWR,EAAAA,SAAAA;AAAAA,EACXS,SAAWb,EAAAA,OAAAA;AACb,EAAA;AAIA,cAAec,eAAgB,CAAA;AAAA,EAC7BnB,IAAAA;AAAAA,EAEAoB,KAAOnB,EAAAA,WAAAA;AAAAA,EAEPoB,KAAAA,EAAO,CAAC,WAAA,EAAa,YAAY,CAAA;AAAA,EAEjCC,MAAMF,KAAO,EAAA;AAAA,IAAEG,IAAAA;AAAAA,IAAMC,KAAAA;AAAAA,GAAS,EAAA;AAC5B,IAAM,MAAA;AAAA,MAAEC,GAAAA;AAAAA,KAAI,GAAIC,aAAa,SAAS,CAAA,CAAA;AAEtC,IAAA,MAAMC,YAAYC,GAAiB,EAAA,CAAA;AACnC,IAAMC,MAAAA,iBAAAA,GAAoBC,cAAeH,CAAAA,SAAAA,EAAWF,GAAG,CAAA,CAAA;AAEvD,IAAA,MAAMM,cAAeC,CAAsB,KAAA,KAAA;AACzC,MAAI,IAAA,CAACZ,MAAMR,YAAc,EAAA;AACvBW,QAAAA,IAAAA,CAAK,aAAaS,KAAK,CAAA,CAAA;AAAA,OACzB;AAAA,KACF,CAAA;AACA,IAAA,MAAMC,eAAgBD,CAAsB,KAAA,KAAA;AAC1C,MAAI,IAAA,CAACZ,MAAMP,aAAe,EAAA;AACxBU,QAAAA,IAAAA,CAAK,cAAcS,KAAK,CAAA,CAAA;AAAA,OAC1B;AAAA,KACF,CAAA;AAEA,IAAA,MAAME,aAAaA,MAAM;AACvB,MAAA,IAAIV,MAAMW,IAAM,EAAA;AACd,QAAA,OAAOX,MAAMW,IAAK,EAAA,CAAA;AAAA,OACpB;AAEA,MAAA,OAAO,CACLf,KAAAA,CAAMN,SAASsB,IAAAA,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EACDX,IAAI,OAAO,CAAA;AAAA,OAACW,EAAAA,CAAAA,WAAAC,CAAAA,IAAAA,EAAA,IAAA,EAAA;AAAA,QAAAC,SAAAA,MAAAF,CAAAA,YAAAG,YAAA,EAAA,IAAA,EAAA,IAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA,GAM1BnB,KAAMV,CAAAA,QAAAA,IAAQ0B,YAAA,MAAA,EAAA;AAAA,QAAA,OAAA,EAAiBX,IAAI,MAAM,CAAA;AAAA,OAAC,EAAA,CAAGL,KAAMV,CAAAA,QAAQ,CAAA,CAAQ,CAAA,CAAA;AAAA,KAEvE,CAAA;AAEA,IAAA,MAAM8B,cAAcA,MAAM;AACxB,MAAA,IAAIhB,MAAMiB,KAAO,EAAA;AACf,QAAA,OAAOjB,MAAMiB,KAAM,EAAA,CAAA;AAAA,OACrB;AAEA,MAAA,OAAAL,YAAA,MAAA,EAAA;AAAA,QAAA,OAAA,EAAoBX,IAAI,MAAM,CAAA;AAAA,OAAIL,EAAAA,CAAAA,KAAMT,CAAAA,SAAS,CAAA,CAAA,CAAA;AAAA,KACnD,CAAA;AAEA,IAAA,MAAM+B,eAAeA,MAAM;AACzB,MAAM,MAAA;AAAA,QAAExC,KAAAA;AAAAA,QAAOE,KAAAA;AAAAA,QAAOE,MAAAA;AAAAA,OAAWc,GAAAA,KAAAA,CAAAA;AACjC,MAAMuB,MAAAA,KAAAA,GAAuBC,eAAetC,MAAM,CAAA,CAAA;AAElD,MAAA,MAAMuC,OAAUzB,GAAAA,KAAAA,CAAMN,SAAaM,IAAAA,KAAAA,CAAMV,YAAYc,KAAMW,CAAAA,IAAAA,CAAAA;AAC3D,MAAMW,MAAAA,QAAAA,GAAW1B,KAAMT,CAAAA,SAAAA,IAAaa,KAAMiB,CAAAA,KAAAA,CAAAA;AAE1C,MAAA,OAAAL,YAAA,KAAA,EAAA;AAAA,QAAA,KAEST,EAAAA,SAAAA;AAAAA,QAAS,OACPgB,EAAAA,KAAAA;AAAAA,QAAK,OAAA,EACL,CACLlB,GAAI,CAAA;AAAA,UAAErB,KAAAA;AAAAA,SAAO,CACb,EAAA;AAAA,UACE,qBAAqBgB,KAAMJ,CAAAA,gBAAAA;AAAAA,SAC5B,CAAA;AAAA,OACF,EAAA,CAAAoB,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAEWX,IAAI,SAAS,CAAA;AAAA,OACtBoB,EAAAA,CAAAA,OAAOT,IAAAA,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAEG,CACLX,GAAAA,CAAI,MAAQ,EAAA;AAAA,UAAEsB,UAAU3B,KAAMR,CAAAA,YAAAA;AAAAA,SAAc,GAC5CQ,KAAMH,CAAAA,SAAAA,IAAa,CAACG,KAAMR,CAAAA,YAAAA,GACtBb,mBACA,EAAE,CAAA;AAAA,QACP,SACQgC,EAAAA,WAAAA;AAAAA,SAAW,CAEnBG,UAAAA,EAAY,CAAA,CAAA,EAEhBE,YAAA,KAAA,EAAA;AAAA,QAAA,OACW,EAAA,CAACX,GAAI,CAAA,OAAO,GAAG,cAAc,CAAA;AAAA,OAAC,EAAA,CACvCD,KAAMtB,CAAAA,KAAAA,GAAQsB,KAAMtB,CAAAA,KAAAA,EAAUA,GAAAA,KAAK,CAErC4C,CAAAA,EAAAA,QAAQV,IAAAA,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAEE,CACLX,GAAAA,CAAI,OAAS,EAAA;AAAA,UAAEsB,UAAU3B,KAAMP,CAAAA,aAAAA;AAAAA,SAAe,GAC9CO,KAAMH,CAAAA,SAAAA,IAAa,CAACG,KAAMP,CAAAA,aAAAA,GACtBd,mBACA,EAAE,CAAA;AAAA,QACP,SACQkC,EAAAA,YAAAA;AAAAA,OAAY,EAEpBO,CAAAA,WAAY,EAAC,CAEjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAIT,CAAA;AAEA,IAAA,OAAO,MAAM;AACX,MAAIpB,IAAAA,KAAAA,CAAMhB,KAASgB,IAAAA,KAAAA,CAAML,WAAa,EAAA;AACpC,QAAA,OAAOc,kBAAkBa,YAAY,CAAA,CAAA;AAAA,OACvC;AACA,MAAA,OAAOA,YAAa,EAAA,CAAA;AAAA,KACtB,CAAA;AAAA,GACF;AACF,CAAC,CAAA;;;;"}