import { FFormArray } from "../components/f-form-array/f-form-array"; import { FFormObject } from "../components/f-form-object/f-form-object"; import { FFormBuilder } from "../components/f-form-builder/f-form-builder"; import { LitElement, nothing, html, CSSResult, unsafeCSS, TemplateResult } from "lit"; import { FormBuilderButtonField, FormBuilderField, FormBuilderHiddenField, FormBuilderSeparatorField } from "./../types"; import { FDiv, FText, FForm, FInput, FCheckbox, FFormGroup, FRadio, FButton, FDateTimePicker, FEmojiPicker, FDivider, FFileUpload, FIconButton, FSelect, FSuggest, FSwitch, FTextArea, FColorPicker } from "@nonfx/flow-core"; import checkboxGroupGlobalStyles from "./../components/f-checkbox-group/f-checkbox-group-global.scss?inline"; import radioGroupGlobalStyles from "./../components/f-radio-group/f-radio-group-global.scss?inline"; import fieldSeparatorGlobalStyles from "./../components/f-field-separator/f-field-separator-global.scss?inline"; import formObjectGlobalStyles from "./../components/f-form-object/f-form-object-global.scss?inline"; import { ifDefined } from "lit/directives/if-defined.js"; export async function propogateProperties(element: FFormArray | FFormObject | FFormBuilder) { const inputElements = element.shadowRoot?.querySelectorAll( "f-input,f-form-object,f-form-array,f-button,f-checkbox-group,f-radio-group,f-select,f-switch,f-text-area,f-file-upload,f-suggest,f-field-separator" ); if (!inputElements) { return; } await Promise.allSettled( Array.from(inputElements).map(async inputElement => { await inputElement.updateComplete; if ( inputElement.getAttribute("size") === null || inputElement.getAttribute("size") === "medium" || inputElement.getAttribute("size") === "null" ) { inputElement.setAttribute("size", element.getAttribute("size") as string); } if ( inputElement.getAttribute("variant") === null || inputElement.getAttribute("variant") === "curved" || inputElement.getAttribute("variant") === "null" ) { inputElement.setAttribute("variant", element.getAttribute("variant") as string); } if ( inputElement.getAttribute("category") === null || inputElement.getAttribute("category") === "fill" || inputElement.getAttribute("category") === "null" ) { inputElement.setAttribute("category", element.getAttribute("category") as string); } if (inputElement instanceof FFormArray || inputElement instanceof FFormObject) { inputElement.setAttribute("gap", element.getAttribute("gap") as string); inputElement.requestUpdate(); } }) ); } export function getSubTitle( field: Exclude< FormBuilderField, FormBuilderSeparatorField | FormBuilderHiddenField | FormBuilderButtonField > ) { const subTitle = field.label?.subTitle; if (subTitle && typeof subTitle === "string") { return html` ${subTitle} `; } else if (subTitle && typeof subTitle === "object") { return html` ${subTitle} `; } return nothing; } export function getSlots( name: string, field: Exclude< FormBuilderField, FormBuilderSeparatorField | FormBuilderHiddenField | FormBuilderButtonField > ) { const title = field.label?.title ? html` ${field.label.title}` : name ? html`${name}` : nothing; const description = field.label?.description ? html` ${field.label.description}` : nothing; const iconTooltip = field.label?.iconTooltip ? html` ` : nothing; const subTitle = getSubTitle(field); let label = html`${title}${description}${iconTooltip}`; if (field.layout === "label-left") { label = html`${nothing}`; } return html` ${label}${subTitle} ${field.helperText ? html`${field.helperText} ` : nothing}`; } export function getLabelLeftLayout( field: Exclude< FormBuilderField, FormBuilderSeparatorField | FormBuilderHiddenField | FormBuilderButtonField >, fieldHtml: TemplateResult<1> ) { const description = field.label?.description ? html`${field.label.description}` : nothing; const iconTooltip = field.label?.iconTooltip ? html` ` : nothing; const title = typeof field.label?.title === "object" ? field.label?.title : html` ${field.label?.title} `; const label = html` ${title}${iconTooltip} ${description} `; return html` ${label} ${fieldHtml} `; } export function getEssentialFlowCoreStyles(): CSSResult[] { return [ ...FDiv.styles, ...FText.styles, ...FForm.styles, ...FInput.styles, ...FCheckbox.styles, ...FFormGroup.styles, ...FRadio.styles, ...FButton.styles, ...FDateTimePicker.styles, ...FEmojiPicker.styles, ...FDivider.styles, ...FFileUpload.styles, ...FIconButton.styles, ...FSelect.styles, ...FSuggest.styles, ...FSwitch.styles, ...FTextArea.styles, ...FColorPicker.styles, unsafeCSS(checkboxGroupGlobalStyles), unsafeCSS(radioGroupGlobalStyles), unsafeCSS(fieldSeparatorGlobalStyles), unsafeCSS(formObjectGlobalStyles) ] as CSSResult[]; }