UNPKG

@oruga-ui/oruga-next

Version:

UI components for Vue.js and CSS framework agnostic

1 lines 4.32 kB
{"version":3,"file":"fieldInjection-aGL6GpMR.cjs","sources":["../../src/components/field/fieldInjection.ts"],"sourcesContent":["import {\n computed,\n inject,\n provide,\n type ComputedRef,\n type InjectionKey,\n} from \"vue\";\n\nimport { getOption } from \"@/utils/config\";\nimport type { FieldProps } from \"./props\";\n\nexport type FieldData = {\n $el: Element | null;\n props: FieldProps;\n hasInnerField: boolean;\n variant?: string;\n message?: string | string[];\n labelId: string;\n inputAttrs: object;\n addInnerField: () => void;\n setInputId: (value: string) => void;\n setFocus: (value: boolean) => void;\n setFilled: (value: boolean) => void;\n setVariant: (value?: string) => void;\n setMessage: (value?: string | string[]) => void;\n};\n\n/** provide/inject type */\ntype ProvidedField = ComputedRef<FieldData | undefined>;\n\n/** provide/inject key */\nconst $FieldKey: InjectionKey<ProvidedField> = Symbol(\"FielData\");\n\n/**\n * Provide field component data via dependency injection.\n * Provided data is a computed ref to ensure reactivity.\n */\nexport function provideField(data: ProvidedField): void {\n provide($FieldKey, data);\n}\n\n/** Inject parent field component if used inside one. **/\nexport function injectField(): {\n parentField: ComputedRef<FieldData | undefined>;\n statusVariantIcon: ComputedRef<string>;\n statusVariant: ComputedRef<string | undefined>;\n statusMessage: ComputedRef<string | string[] | undefined>;\n} {\n const parentField = inject(\n $FieldKey,\n computed(() => undefined),\n );\n\n /** Get the message prop from parent if it's a Field. */\n const statusMessage = computed<string | string[] | undefined>(() => {\n if (\n (Array.isArray(parentField?.value?.message) &&\n !parentField?.value?.message.length) ||\n (!Array.isArray(parentField?.value?.message) &&\n !parentField?.value?.message)\n )\n return undefined;\n return parentField?.value.message;\n });\n\n /** Get the type prop from parent if it's a Field. */\n const statusVariant = computed<string | undefined>(() => {\n if (!parentField?.value?.variant) return undefined;\n if (typeof parentField.value.variant === \"string\")\n return parentField.value.variant;\n if (Array.isArray(parentField.value.variant)) {\n for (const key in parentField.value.variant as any) {\n if (parentField.value.variant[key]) return key;\n }\n }\n return undefined;\n });\n\n const statusVariantIconConfig = getOption(\"statusVariantIcon\", {\n success: \"check\",\n danger: \"alert-circle\",\n info: \"information\",\n warning: \"alert\",\n });\n\n /** Icon name based on the variant. */\n const statusVariantIcon = computed<string>(() => {\n if (!statusVariant.value || !statusVariantIconConfig) return \"\";\n return statusVariantIconConfig[statusVariant.value] || \"\";\n });\n\n return {\n parentField,\n statusVariant,\n statusVariantIcon,\n statusMessage,\n };\n}\n"],"names":["provide","inject","computed","getOption"],"mappings":";;;;AA+BA,MAAM,YAAyC,OAAO,UAAU;AAMzD,SAAS,aAAa,MAA2B;AACpDA,MAAA,QAAQ,WAAW,IAAI;AAC3B;AAGO,SAAS,cAKd;AACE,QAAM,cAAcC,IAAA;AAAA,IAChB;AAAA,IACAC,IAAAA,SAAS,MAAM,MAAS;AAAA,EAC5B;AAGM,QAAA,gBAAgBA,IAAAA,SAAwC,MAAM;;AAE3D,QAAA,MAAM,SAAQ,gDAAa,UAAb,mBAAoB,OAAO,KACtC,GAAC,gDAAa,UAAb,mBAAoB,QAAQ,WAChC,CAAC,MAAM,SAAQ,gDAAa,UAAb,mBAAoB,OAAO,KACvC,GAAC,gDAAa,UAAb,mBAAoB;AAElB,aAAA;AACX,WAAO,2CAAa,MAAM;AAAA,EAAA,CAC7B;AAGK,QAAA,gBAAgBA,IAAAA,SAA6B,MAAM;;AACrD,QAAI,GAAC,gDAAa,UAAb,mBAAoB,SAAgB,QAAA;AACrC,QAAA,OAAO,YAAY,MAAM,YAAY;AACrC,aAAO,YAAY,MAAM;AAC7B,QAAI,MAAM,QAAQ,YAAY,MAAM,OAAO,GAAG;AAC/B,iBAAA,OAAO,YAAY,MAAM,SAAgB;AAChD,YAAI,YAAY,MAAM,QAAQ,GAAG,EAAU,QAAA;AAAA,MAAA;AAAA,IAC/C;AAEG,WAAA;AAAA,EAAA,CACV;AAEK,QAAA,0BAA0BC,iBAAU,qBAAqB;AAAA,IAC3D,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EAAA,CACZ;AAGK,QAAA,oBAAoBD,IAAAA,SAAiB,MAAM;AAC7C,QAAI,CAAC,cAAc,SAAS,CAAC,wBAAgC,QAAA;AACtD,WAAA,wBAAwB,cAAc,KAAK,KAAK;AAAA,EAAA,CAC1D;AAEM,SAAA;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;;;"}