UNPKG

@oruga-ui/oruga-next

Version:

UI components for Vue.js and CSS framework agnostic

1 lines 4.18 kB
{"version":3,"file":"fieldInjection-D83UnufB.mjs","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":[],"mappings":";;;AA+BA,MAAM,YAAyC,OAAO,UAAU;AAMzD,SAAS,aAAa,MAA2B;AACpD,UAAQ,WAAW,IAAI;AAC3B;AAGO,SAAS,cAKd;AACE,QAAM,cAAc;AAAA,IAChB;AAAA,IACA,SAAS,MAAM,MAAS;AAAA,EAAA;AAI5B,QAAM,gBAAgB,SAAwC,MAAM;AAChE,QACK,MAAM,QAAQ,aAAa,OAAO,OAAO,KACtC,CAAC,aAAa,OAAO,QAAQ,UAChC,CAAC,MAAM,QAAQ,aAAa,OAAO,OAAO,KACvC,CAAC,aAAa,OAAO;AAEzB,aAAO;AACX,WAAO,aAAa,MAAM;AAAA,EAC9B,CAAC;AAGD,QAAM,gBAAgB,SAA6B,MAAM;AACrD,QAAI,CAAC,aAAa,OAAO,QAAS,QAAO;AACzC,QAAI,OAAO,YAAY,MAAM,YAAY;AACrC,aAAO,YAAY,MAAM;AAC7B,QAAI,MAAM,QAAQ,YAAY,MAAM,OAAO,GAAG;AAC1C,iBAAW,OAAO,YAAY,MAAM,SAAgB;AAChD,YAAI,YAAY,MAAM,QAAQ,GAAG,EAAG,QAAO;AAAA,MAC/C;AAAA,IACJ;AACA,WAAO;AAAA,EACX,CAAC;AAED,QAAM,0BAA0B,UAAU,qBAAqB;AAAA,IAC3D,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EAAA,CACZ;AAGD,QAAM,oBAAoB,SAAiB,MAAM;AAC7C,QAAI,CAAC,cAAc,SAAS,CAAC,wBAAyB,QAAO;AAC7D,WAAO,wBAAwB,cAAc,KAAK,KAAK;AAAA,EAC3D,CAAC;AAED,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}