@verbb/plugin-kit-react 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/LICENSE.md +21 -0
- package/README.md +31 -0
- package/dist/_virtual/_rolldown/runtime.js +34 -0
- package/dist/components/Button.d.ts +26 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +148 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/ButtonGroup.d.ts +11 -0
- package/dist/components/ButtonGroup.d.ts.map +1 -0
- package/dist/components/ButtonGroup.js +59 -0
- package/dist/components/ButtonGroup.js.map +1 -0
- package/dist/components/Calendar.d.ts +11 -0
- package/dist/components/Calendar.d.ts.map +1 -0
- package/dist/components/Calendar.js +133 -0
- package/dist/components/Calendar.js.map +1 -0
- package/dist/components/Checkbox.d.ts +5 -0
- package/dist/components/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox.js +41 -0
- package/dist/components/Checkbox.js.map +1 -0
- package/dist/components/CheckboxInput.d.ts +14 -0
- package/dist/components/CheckboxInput.d.ts.map +1 -0
- package/dist/components/CheckboxInput.js +31 -0
- package/dist/components/CheckboxInput.js.map +1 -0
- package/dist/components/CheckboxSelect.d.ts +19 -0
- package/dist/components/CheckboxSelect.d.ts.map +1 -0
- package/dist/components/CheckboxSelect.js +63 -0
- package/dist/components/CheckboxSelect.js.map +1 -0
- package/dist/components/ColorInput.d.ts +14 -0
- package/dist/components/ColorInput.d.ts.map +1 -0
- package/dist/components/ColorInput.js +148 -0
- package/dist/components/ColorInput.js.map +1 -0
- package/dist/components/Combobox.d.ts +40 -0
- package/dist/components/Combobox.d.ts.map +1 -0
- package/dist/components/Combobox.js +393 -0
- package/dist/components/Combobox.js.map +1 -0
- package/dist/components/ComboboxInput.d.ts +28 -0
- package/dist/components/ComboboxInput.d.ts.map +1 -0
- package/dist/components/ComboboxInput.js +165 -0
- package/dist/components/ComboboxInput.js.map +1 -0
- package/dist/components/Command.d.ts +26 -0
- package/dist/components/Command.d.ts.map +1 -0
- package/dist/components/Command.js +94 -0
- package/dist/components/Command.js.map +1 -0
- package/dist/components/CopyButton.d.ts +9 -0
- package/dist/components/CopyButton.d.ts.map +1 -0
- package/dist/components/CopyButton.js +40 -0
- package/dist/components/CopyButton.js.map +1 -0
- package/dist/components/DatePicker.d.ts +9 -0
- package/dist/components/DatePicker.d.ts.map +1 -0
- package/dist/components/DatePicker.js +46 -0
- package/dist/components/DatePicker.js.map +1 -0
- package/dist/components/Dialog.d.ts +21 -0
- package/dist/components/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog.js +179 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/components/DropdownMenu.d.ts +47 -0
- package/dist/components/DropdownMenu.d.ts.map +1 -0
- package/dist/components/DropdownMenu.js +240 -0
- package/dist/components/DropdownMenu.js.map +1 -0
- package/dist/components/EditableTable.d.ts +28 -0
- package/dist/components/EditableTable.d.ts.map +1 -0
- package/dist/components/EditableTable.js +145 -0
- package/dist/components/EditableTable.js.map +1 -0
- package/dist/components/FadeIn.d.ts +12 -0
- package/dist/components/FadeIn.d.ts.map +1 -0
- package/dist/components/FadeIn.js +24 -0
- package/dist/components/FadeIn.js.map +1 -0
- package/dist/components/Input.d.ts +9 -0
- package/dist/components/Input.d.ts.map +1 -0
- package/dist/components/Input.js +43 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/InputGroup.d.ts +20 -0
- package/dist/components/InputGroup.d.ts.map +1 -0
- package/dist/components/InputGroup.js +111 -0
- package/dist/components/InputGroup.js.map +1 -0
- package/dist/components/Label.d.ts +4 -0
- package/dist/components/Label.d.ts.map +1 -0
- package/dist/components/Label.js +15 -0
- package/dist/components/Label.js.map +1 -0
- package/dist/components/Lightswitch.d.ts +9 -0
- package/dist/components/Lightswitch.d.ts.map +1 -0
- package/dist/components/Lightswitch.js +56 -0
- package/dist/components/Lightswitch.js.map +1 -0
- package/dist/components/Markdown.d.ts +11 -0
- package/dist/components/Markdown.d.ts.map +1 -0
- package/dist/components/Markdown.js +46 -0
- package/dist/components/Markdown.js.map +1 -0
- package/dist/components/MenuButton.d.ts +40 -0
- package/dist/components/MenuButton.d.ts.map +1 -0
- package/dist/components/MenuButton.js +122 -0
- package/dist/components/MenuButton.js.map +1 -0
- package/dist/components/ModalTabs.d.ts +8 -0
- package/dist/components/ModalTabs.d.ts.map +1 -0
- package/dist/components/ModalTabs.js +37 -0
- package/dist/components/ModalTabs.js.map +1 -0
- package/dist/components/PaneTabs.d.ts +8 -0
- package/dist/components/PaneTabs.d.ts.map +1 -0
- package/dist/components/PaneTabs.js +37 -0
- package/dist/components/PaneTabs.js.map +1 -0
- package/dist/components/Popover.d.ts +12 -0
- package/dist/components/Popover.d.ts.map +1 -0
- package/dist/components/Popover.js +70 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/RadioGroup.d.ts +6 -0
- package/dist/components/RadioGroup.d.ts.map +1 -0
- package/dist/components/RadioGroup.js +34 -0
- package/dist/components/RadioGroup.js.map +1 -0
- package/dist/components/ScrollArea.d.ts +16 -0
- package/dist/components/ScrollArea.d.ts.map +1 -0
- package/dist/components/ScrollArea.js +47 -0
- package/dist/components/ScrollArea.js.map +1 -0
- package/dist/components/Select.d.ts +23 -0
- package/dist/components/Select.d.ts.map +1 -0
- package/dist/components/Select.js +205 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/SelectInput.d.ts +33 -0
- package/dist/components/SelectInput.d.ts.map +1 -0
- package/dist/components/SelectInput.js +85 -0
- package/dist/components/SelectInput.js.map +1 -0
- package/dist/components/Separator.d.ts +4 -0
- package/dist/components/Separator.d.ts.map +1 -0
- package/dist/components/Separator.js +17 -0
- package/dist/components/Separator.js.map +1 -0
- package/dist/components/SlideUp.d.ts +12 -0
- package/dist/components/SlideUp.d.ts.map +1 -0
- package/dist/components/SlideUp.js +36 -0
- package/dist/components/SlideUp.js.map +1 -0
- package/dist/components/Slot.d.ts +6 -0
- package/dist/components/Slot.d.ts.map +1 -0
- package/dist/components/Slot.js +52 -0
- package/dist/components/Slot.js.map +1 -0
- package/dist/components/Spinner.d.ts +9 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +43 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/Status.d.ts +8 -0
- package/dist/components/Status.d.ts.map +1 -0
- package/dist/components/Status.js +55 -0
- package/dist/components/Status.js.map +1 -0
- package/dist/components/Table.d.ts +10 -0
- package/dist/components/Table.d.ts.map +1 -0
- package/dist/components/Table.js +64 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/Tabs.d.ts +8 -0
- package/dist/components/Tabs.d.ts.map +1 -0
- package/dist/components/Tabs.js +37 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/Textarea.d.ts +8 -0
- package/dist/components/Textarea.d.ts.map +1 -0
- package/dist/components/Textarea.js +26 -0
- package/dist/components/Textarea.js.map +1 -0
- package/dist/components/TimePicker.d.ts +9 -0
- package/dist/components/TimePicker.d.ts.map +1 -0
- package/dist/components/TimePicker.js +40 -0
- package/dist/components/TimePicker.js.map +1 -0
- package/dist/components/TiptapContent.d.ts +9 -0
- package/dist/components/TiptapContent.d.ts.map +1 -0
- package/dist/components/TiptapContent.js +24 -0
- package/dist/components/TiptapContent.js.map +1 -0
- package/dist/components/TiptapEditor.d.ts +41 -0
- package/dist/components/TiptapEditor.d.ts.map +1 -0
- package/dist/components/TiptapEditor.js +555 -0
- package/dist/components/TiptapEditor.js.map +1 -0
- package/dist/components/TiptapInput.d.ts +15 -0
- package/dist/components/TiptapInput.d.ts.map +1 -0
- package/dist/components/TiptapInput.js +138 -0
- package/dist/components/TiptapInput.js.map +1 -0
- package/dist/components/Toggle.d.ts +9 -0
- package/dist/components/Toggle.d.ts.map +1 -0
- package/dist/components/Toggle.js +48 -0
- package/dist/components/Toggle.js.map +1 -0
- package/dist/components/ToggleGroup.d.ts +11 -0
- package/dist/components/ToggleGroup.d.ts.map +1 -0
- package/dist/components/ToggleGroup.js +70 -0
- package/dist/components/ToggleGroup.js.map +1 -0
- package/dist/components/Tooltip.d.ts +9 -0
- package/dist/components/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip.js +51 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/components/VirtualizedScrollArea.d.ts +25 -0
- package/dist/components/VirtualizedScrollArea.d.ts.map +1 -0
- package/dist/components/VirtualizedScrollArea.js +80 -0
- package/dist/components/VirtualizedScrollArea.js.map +1 -0
- package/dist/components/editable-table/RowDataCells.d.ts +3 -0
- package/dist/components/editable-table/RowDataCells.d.ts.map +1 -0
- package/dist/components/editable-table/RowDataCells.js +33 -0
- package/dist/components/editable-table/RowDataCells.js.map +1 -0
- package/dist/components/editable-table/TableCell.d.ts +13 -0
- package/dist/components/editable-table/TableCell.d.ts.map +1 -0
- package/dist/components/editable-table/TableCell.js +415 -0
- package/dist/components/editable-table/TableCell.js.map +1 -0
- package/dist/components/editable-table/TableRow.d.ts +3 -0
- package/dist/components/editable-table/TableRow.d.ts.map +1 -0
- package/dist/components/editable-table/TableRow.js +163 -0
- package/dist/components/editable-table/TableRow.js.map +1 -0
- package/dist/components/editable-table/helpers.d.ts +12 -0
- package/dist/components/editable-table/helpers.d.ts.map +1 -0
- package/dist/components/editable-table/helpers.js +23 -0
- package/dist/components/editable-table/helpers.js.map +1 -0
- package/dist/components/editable-table/index.d.ts +4 -0
- package/dist/components/editable-table/index.d.ts.map +1 -0
- package/dist/components/editable-table/index.js +4 -0
- package/dist/components/editable-table/types.d.ts +43 -0
- package/dist/components/editable-table/types.d.ts.map +1 -0
- package/dist/components/editable-table/types.js +0 -0
- package/dist/components/editable-table/useEditableTableCellChange.d.ts +17 -0
- package/dist/components/editable-table/useEditableTableCellChange.d.ts.map +1 -0
- package/dist/components/editable-table/useEditableTableCellChange.js +152 -0
- package/dist/components/editable-table/useEditableTableCellChange.js.map +1 -0
- package/dist/components/editable-table/useEditableTableDnd.d.ts +18 -0
- package/dist/components/editable-table/useEditableTableDnd.d.ts.map +1 -0
- package/dist/components/editable-table/useEditableTableDnd.js +55 -0
- package/dist/components/editable-table/useEditableTableDnd.js.map +1 -0
- package/dist/components/editable-table/useEditableTableRows.d.ts +17 -0
- package/dist/components/editable-table/useEditableTableRows.d.ts.map +1 -0
- package/dist/components/editable-table/useEditableTableRows.js +108 -0
- package/dist/components/editable-table/useEditableTableRows.js.map +1 -0
- package/dist/components/index.d.ts +45 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +45 -0
- package/dist/components/tiptap/InlineVariablePickerPopover.d.ts +24 -0
- package/dist/components/tiptap/InlineVariablePickerPopover.d.ts.map +1 -0
- package/dist/components/tiptap/InlineVariablePickerPopover.js +63 -0
- package/dist/components/tiptap/InlineVariablePickerPopover.js.map +1 -0
- package/dist/components/tiptap/InsertLinkDialog.d.ts +14 -0
- package/dist/components/tiptap/InsertLinkDialog.d.ts.map +1 -0
- package/dist/components/tiptap/InsertLinkDialog.js +145 -0
- package/dist/components/tiptap/InsertLinkDialog.js.map +1 -0
- package/dist/components/tiptap/LinkBubbleMenu.d.ts +10 -0
- package/dist/components/tiptap/LinkBubbleMenu.d.ts.map +1 -0
- package/dist/components/tiptap/LinkBubbleMenu.js +106 -0
- package/dist/components/tiptap/LinkBubbleMenu.js.map +1 -0
- package/dist/components/tiptap/LinkDropdown.d.ts +53 -0
- package/dist/components/tiptap/LinkDropdown.d.ts.map +1 -0
- package/dist/components/tiptap/LinkDropdown.js +155 -0
- package/dist/components/tiptap/LinkDropdown.js.map +1 -0
- package/dist/components/tiptap/VariableCommandList.d.ts +37 -0
- package/dist/components/tiptap/VariableCommandList.d.ts.map +1 -0
- package/dist/components/tiptap/VariableCommandList.js +166 -0
- package/dist/components/tiptap/VariableCommandList.js.map +1 -0
- package/dist/components/tiptap/VariableDropdown.d.ts +33 -0
- package/dist/components/tiptap/VariableDropdown.d.ts.map +1 -0
- package/dist/components/tiptap/VariableDropdown.js +121 -0
- package/dist/components/tiptap/VariableDropdown.js.map +1 -0
- package/dist/components/tiptap/VariablePickerContext.d.ts +38 -0
- package/dist/components/tiptap/VariablePickerContext.d.ts.map +1 -0
- package/dist/components/tiptap/VariablePickerContext.js +30 -0
- package/dist/components/tiptap/VariablePickerContext.js.map +1 -0
- package/dist/components/tiptap/VariableTag.d.ts +6 -0
- package/dist/components/tiptap/VariableTag.d.ts.map +1 -0
- package/dist/components/tiptap/VariableTag.js +153 -0
- package/dist/components/tiptap/VariableTag.js.map +1 -0
- package/dist/components/tiptap/VariableTagView.d.ts +3 -0
- package/dist/components/tiptap/VariableTagView.d.ts.map +1 -0
- package/dist/components/tiptap/VariableTagView.js +445 -0
- package/dist/components/tiptap/VariableTagView.js.map +1 -0
- package/dist/components/tiptap/VariableTransformControls.d.ts +37 -0
- package/dist/components/tiptap/VariableTransformControls.d.ts.map +1 -0
- package/dist/components/tiptap/VariableTransformControls.js +157 -0
- package/dist/components/tiptap/VariableTransformControls.js.map +1 -0
- package/dist/components/tiptap/editorConfig.d.ts +15 -0
- package/dist/components/tiptap/editorConfig.d.ts.map +1 -0
- package/dist/components/tiptap/editorConfig.js +191 -0
- package/dist/components/tiptap/editorConfig.js.map +1 -0
- package/dist/components/tiptap/useInlineVariablePicker.d.ts +34 -0
- package/dist/components/tiptap/useInlineVariablePicker.d.ts.map +1 -0
- package/dist/components/tiptap/useInlineVariablePicker.js +240 -0
- package/dist/components/tiptap/useInlineVariablePicker.js.map +1 -0
- package/dist/components/tiptap/useVariablePicker.d.ts +28 -0
- package/dist/components/tiptap/useVariablePicker.d.ts.map +1 -0
- package/dist/components/tiptap/useVariablePicker.js +122 -0
- package/dist/components/tiptap/useVariablePicker.js.map +1 -0
- package/dist/components/tiptap/variablePickerUtils.d.ts +11 -0
- package/dist/components/tiptap/variablePickerUtils.d.ts.map +1 -0
- package/dist/components/tiptap/variablePickerUtils.js +63 -0
- package/dist/components/tiptap/variablePickerUtils.js.map +1 -0
- package/dist/components/tiptap/variableSerialization.d.ts +49 -0
- package/dist/components/tiptap/variableSerialization.d.ts.map +1 -0
- package/dist/components/tiptap/variableSerialization.js +250 -0
- package/dist/components/tiptap/variableSerialization.js.map +1 -0
- package/dist/css/core.css +288 -0
- package/dist/css/style.css +295 -0
- package/dist/forms/Field.d.ts +37 -0
- package/dist/forms/Field.d.ts.map +1 -0
- package/dist/forms/Field.js +159 -0
- package/dist/forms/Field.js.map +1 -0
- package/dist/forms/SchemaFormEngine.d.ts +23 -0
- package/dist/forms/SchemaFormEngine.d.ts.map +1 -0
- package/dist/forms/SchemaFormEngine.js +444 -0
- package/dist/forms/SchemaFormEngine.js.map +1 -0
- package/dist/forms/components/FieldWrap.d.ts +11 -0
- package/dist/forms/components/FieldWrap.d.ts.map +1 -0
- package/dist/forms/components/FieldWrap.js +84 -0
- package/dist/forms/components/FieldWrap.js.map +1 -0
- package/dist/forms/components/ModalTabs.d.ts +21 -0
- package/dist/forms/components/ModalTabs.d.ts.map +1 -0
- package/dist/forms/components/ModalTabs.js +84 -0
- package/dist/forms/components/ModalTabs.js.map +1 -0
- package/dist/forms/components/index.d.ts +3 -0
- package/dist/forms/components/index.d.ts.map +1 -0
- package/dist/forms/components/index.js +3 -0
- package/dist/forms/contexts/VariableCategoriesContext.d.ts +17 -0
- package/dist/forms/contexts/VariableCategoriesContext.d.ts.map +1 -0
- package/dist/forms/contexts/VariableCategoriesContext.js +18 -0
- package/dist/forms/contexts/VariableCategoriesContext.js.map +1 -0
- package/dist/forms/engine/FormStateStore.d.ts +24 -0
- package/dist/forms/engine/FormStateStore.d.ts.map +1 -0
- package/dist/forms/engine/FormStateStore.js +97 -0
- package/dist/forms/engine/FormStateStore.js.map +1 -0
- package/dist/forms/engine/SchemaIndex.d.ts +33 -0
- package/dist/forms/engine/SchemaIndex.d.ts.map +1 -0
- package/dist/forms/engine/SchemaIndex.js +21 -0
- package/dist/forms/engine/SchemaIndex.js.map +1 -0
- package/dist/forms/engine/ValidationEngine.d.ts +13 -0
- package/dist/forms/engine/ValidationEngine.d.ts.map +1 -0
- package/dist/forms/engine/ValidationEngine.js +155 -0
- package/dist/forms/engine/ValidationEngine.js.map +1 -0
- package/dist/forms/engine/buildGroupedMessage.d.ts +2 -0
- package/dist/forms/engine/buildGroupedMessage.d.ts.map +1 -0
- package/dist/forms/engine/buildGroupedMessage.js +20 -0
- package/dist/forms/engine/buildGroupedMessage.js.map +1 -0
- package/dist/forms/engine/context.d.ts +60 -0
- package/dist/forms/engine/context.d.ts.map +1 -0
- package/dist/forms/engine/context.js +12 -0
- package/dist/forms/engine/context.js.map +1 -0
- package/dist/forms/engine/rules/email.d.ts +2 -0
- package/dist/forms/engine/rules/email.d.ts.map +1 -0
- package/dist/forms/engine/rules/email.js +11 -0
- package/dist/forms/engine/rules/email.js.map +1 -0
- package/dist/forms/engine/rules/emailOrVariable.d.ts +2 -0
- package/dist/forms/engine/rules/emailOrVariable.d.ts.map +1 -0
- package/dist/forms/engine/rules/emailOrVariable.js +13 -0
- package/dist/forms/engine/rules/emailOrVariable.js.map +1 -0
- package/dist/forms/engine/rules/handle.d.ts +2 -0
- package/dist/forms/engine/rules/handle.d.ts.map +1 -0
- package/dist/forms/engine/rules/handle.js +12 -0
- package/dist/forms/engine/rules/handle.js.map +1 -0
- package/dist/forms/engine/rules/index.d.ts +9 -0
- package/dist/forms/engine/rules/index.d.ts.map +1 -0
- package/dist/forms/engine/rules/index.js +35 -0
- package/dist/forms/engine/rules/index.js.map +1 -0
- package/dist/forms/engine/rules/max.d.ts +2 -0
- package/dist/forms/engine/rules/max.d.ts.map +1 -0
- package/dist/forms/engine/rules/max.js +16 -0
- package/dist/forms/engine/rules/max.js.map +1 -0
- package/dist/forms/engine/rules/min.d.ts +2 -0
- package/dist/forms/engine/rules/min.d.ts.map +1 -0
- package/dist/forms/engine/rules/min.js +16 -0
- package/dist/forms/engine/rules/min.js.map +1 -0
- package/dist/forms/engine/rules/required.d.ts +2 -0
- package/dist/forms/engine/rules/required.d.ts.map +1 -0
- package/dist/forms/engine/rules/required.js +11 -0
- package/dist/forms/engine/rules/required.js.map +1 -0
- package/dist/forms/engine/rules/uniqueHandle.d.ts +9 -0
- package/dist/forms/engine/rules/uniqueHandle.d.ts.map +1 -0
- package/dist/forms/engine/rules/uniqueHandle.js +95 -0
- package/dist/forms/engine/rules/uniqueHandle.js.map +1 -0
- package/dist/forms/engine/rules/utils.d.ts +3 -0
- package/dist/forms/engine/rules/utils.d.ts.map +1 -0
- package/dist/forms/engine/rules/utils.js +21 -0
- package/dist/forms/engine/rules/utils.js.map +1 -0
- package/dist/forms/fields/CalculationsField.d.ts +24 -0
- package/dist/forms/fields/CalculationsField.d.ts.map +1 -0
- package/dist/forms/fields/CalculationsField.js +215 -0
- package/dist/forms/fields/CalculationsField.js.map +1 -0
- package/dist/forms/fields/CalculationsToolbar.d.ts +17 -0
- package/dist/forms/fields/CalculationsToolbar.d.ts.map +1 -0
- package/dist/forms/fields/CalculationsToolbar.js +130 -0
- package/dist/forms/fields/CalculationsToolbar.js.map +1 -0
- package/dist/forms/fields/CheckboxSelectField.d.ts +19 -0
- package/dist/forms/fields/CheckboxSelectField.d.ts.map +1 -0
- package/dist/forms/fields/CheckboxSelectField.js +30 -0
- package/dist/forms/fields/CheckboxSelectField.js.map +1 -0
- package/dist/forms/fields/ColorField.d.ts +15 -0
- package/dist/forms/fields/ColorField.d.ts.map +1 -0
- package/dist/forms/fields/ColorField.js +30 -0
- package/dist/forms/fields/ColorField.js.map +1 -0
- package/dist/forms/fields/ComboboxField.d.ts +23 -0
- package/dist/forms/fields/ComboboxField.d.ts.map +1 -0
- package/dist/forms/fields/ComboboxField.js +38 -0
- package/dist/forms/fields/ComboboxField.js.map +1 -0
- package/dist/forms/fields/DateTimeField.d.ts +14 -0
- package/dist/forms/fields/DateTimeField.d.ts.map +1 -0
- package/dist/forms/fields/DateTimeField.js +53 -0
- package/dist/forms/fields/DateTimeField.js.map +1 -0
- package/dist/forms/fields/EditableTableField.d.ts +22 -0
- package/dist/forms/fields/EditableTableField.d.ts.map +1 -0
- package/dist/forms/fields/EditableTableField.js +37 -0
- package/dist/forms/fields/EditableTableField.js.map +1 -0
- package/dist/forms/fields/ElementSelectField.d.ts +20 -0
- package/dist/forms/fields/ElementSelectField.d.ts.map +1 -0
- package/dist/forms/fields/ElementSelectField.js +215 -0
- package/dist/forms/fields/ElementSelectField.js.map +1 -0
- package/dist/forms/fields/GroupField.d.ts +19 -0
- package/dist/forms/fields/GroupField.d.ts.map +1 -0
- package/dist/forms/fields/GroupField.js +50 -0
- package/dist/forms/fields/GroupField.js.map +1 -0
- package/dist/forms/fields/HandleField.d.ts +20 -0
- package/dist/forms/fields/HandleField.d.ts.map +1 -0
- package/dist/forms/fields/HandleField.js +70 -0
- package/dist/forms/fields/HandleField.js.map +1 -0
- package/dist/forms/fields/LightswitchField.d.ts +14 -0
- package/dist/forms/fields/LightswitchField.d.ts.map +1 -0
- package/dist/forms/fields/LightswitchField.js +29 -0
- package/dist/forms/fields/LightswitchField.js.map +1 -0
- package/dist/forms/fields/ListField.d.ts +17 -0
- package/dist/forms/fields/ListField.d.ts.map +1 -0
- package/dist/forms/fields/ListField.js +51 -0
- package/dist/forms/fields/ListField.js.map +1 -0
- package/dist/forms/fields/NumberField.d.ts +17 -0
- package/dist/forms/fields/NumberField.d.ts.map +1 -0
- package/dist/forms/fields/NumberField.js +33 -0
- package/dist/forms/fields/NumberField.js.map +1 -0
- package/dist/forms/fields/RadioGroupField.d.ts +25 -0
- package/dist/forms/fields/RadioGroupField.d.ts.map +1 -0
- package/dist/forms/fields/RadioGroupField.js +102 -0
- package/dist/forms/fields/RadioGroupField.js.map +1 -0
- package/dist/forms/fields/RichTextField.d.ts +23 -0
- package/dist/forms/fields/RichTextField.d.ts.map +1 -0
- package/dist/forms/fields/RichTextField.js +50 -0
- package/dist/forms/fields/RichTextField.js.map +1 -0
- package/dist/forms/fields/SelectField.d.ts +25 -0
- package/dist/forms/fields/SelectField.d.ts.map +1 -0
- package/dist/forms/fields/SelectField.js +73 -0
- package/dist/forms/fields/SelectField.js.map +1 -0
- package/dist/forms/fields/StaticTableField.d.ts +34 -0
- package/dist/forms/fields/StaticTableField.d.ts.map +1 -0
- package/dist/forms/fields/StaticTableField.js +128 -0
- package/dist/forms/fields/StaticTableField.js.map +1 -0
- package/dist/forms/fields/TextField.d.ts +16 -0
- package/dist/forms/fields/TextField.d.ts.map +1 -0
- package/dist/forms/fields/TextField.js +31 -0
- package/dist/forms/fields/TextField.js.map +1 -0
- package/dist/forms/fields/TextareaField.d.ts +17 -0
- package/dist/forms/fields/TextareaField.d.ts.map +1 -0
- package/dist/forms/fields/TextareaField.js +32 -0
- package/dist/forms/fields/TextareaField.js.map +1 -0
- package/dist/forms/fields/VariablePickerField.d.ts +21 -0
- package/dist/forms/fields/VariablePickerField.d.ts.map +1 -0
- package/dist/forms/fields/VariablePickerField.js +49 -0
- package/dist/forms/fields/VariablePickerField.js.map +1 -0
- package/dist/forms/index.d.ts +8 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/index.js +10 -0
- package/dist/forms/registry.d.ts +8 -0
- package/dist/forms/registry.d.ts.map +1 -0
- package/dist/forms/registry.js +76 -0
- package/dist/forms/registry.js.map +1 -0
- package/dist/forms/store/element-store.d.ts +11 -0
- package/dist/forms/store/element-store.d.ts.map +1 -0
- package/dist/forms/store/element-store.js +41 -0
- package/dist/forms/store/element-store.js.map +1 -0
- package/dist/forms/useEditableTableFieldBinding.d.ts +13 -0
- package/dist/forms/useEditableTableFieldBinding.d.ts.map +1 -0
- package/dist/forms/useEditableTableFieldBinding.js +91 -0
- package/dist/forms/useEditableTableFieldBinding.js.map +1 -0
- package/dist/forms/useEngineField.d.ts +9 -0
- package/dist/forms/useEngineField.d.ts.map +1 -0
- package/dist/forms/useEngineField.js +32 -0
- package/dist/forms/useEngineField.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts +14 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +67 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/hooks/useTranslation.d.ts +3 -0
- package/dist/hooks/useTranslation.d.ts.map +1 -0
- package/dist/hooks/useTranslation.js +12 -0
- package/dist/hooks/useTranslation.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/node_modules/@babel/runtime/helpers/arrayLikeToArray.js +15 -0
- package/dist/node_modules/@babel/runtime/helpers/arrayLikeToArray.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js +15 -0
- package/dist/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/classCallCheck.js +13 -0
- package/dist/node_modules/@babel/runtime/helpers/classCallCheck.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/createClass.js +21 -0
- package/dist/node_modules/@babel/runtime/helpers/createClass.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/defineProperty.js +20 -0
- package/dist/node_modules/@babel/runtime/helpers/defineProperty.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/interopRequireDefault.js +13 -0
- package/dist/node_modules/@babel/runtime/helpers/interopRequireDefault.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/iterableToArray.js +13 -0
- package/dist/node_modules/@babel/runtime/helpers/iterableToArray.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/nonIterableSpread.js +13 -0
- package/dist/node_modules/@babel/runtime/helpers/nonIterableSpread.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/toConsumableArray.js +21 -0
- package/dist/node_modules/@babel/runtime/helpers/toConsumableArray.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/toPrimitive.js +22 -0
- package/dist/node_modules/@babel/runtime/helpers/toPrimitive.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/toPropertyKey.js +18 -0
- package/dist/node_modules/@babel/runtime/helpers/toPropertyKey.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/typeof.js +18 -0
- package/dist/node_modules/@babel/runtime/helpers/typeof.js.map +1 -0
- package/dist/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js +19 -0
- package/dist/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js.map +1 -0
- package/dist/node_modules/jexl/dist/Expression.js +84 -0
- package/dist/node_modules/jexl/dist/Expression.js.map +1 -0
- package/dist/node_modules/jexl/dist/Jexl.js +165 -0
- package/dist/node_modules/jexl/dist/Jexl.js.map +1 -0
- package/dist/node_modules/jexl/dist/Lexer.js +152 -0
- package/dist/node_modules/jexl/dist/Lexer.js.map +1 -0
- package/dist/node_modules/jexl/dist/PromiseSync.js +87 -0
- package/dist/node_modules/jexl/dist/PromiseSync.js.map +1 -0
- package/dist/node_modules/jexl/dist/evaluator/Evaluator.js +98 -0
- package/dist/node_modules/jexl/dist/evaluator/Evaluator.js.map +1 -0
- package/dist/node_modules/jexl/dist/evaluator/handlers.js +162 -0
- package/dist/node_modules/jexl/dist/evaluator/handlers.js.map +1 -0
- package/dist/node_modules/jexl/dist/grammar.js +195 -0
- package/dist/node_modules/jexl/dist/grammar.js.map +1 -0
- package/dist/node_modules/jexl/dist/parser/Parser.js +135 -0
- package/dist/node_modules/jexl/dist/parser/Parser.js.map +1 -0
- package/dist/node_modules/jexl/dist/parser/handlers.js +205 -0
- package/dist/node_modules/jexl/dist/parser/handlers.js.map +1 -0
- package/dist/node_modules/jexl/dist/parser/states.js +158 -0
- package/dist/node_modules/jexl/dist/parser/states.js.map +1 -0
- package/dist/types/global.d.d.ts +1 -0
- package/dist/types/global.d.js +0 -0
- package/dist/utils/classes.d.ts +18 -0
- package/dist/utils/classes.d.ts.map +1 -0
- package/dist/utils/classes.js +25 -0
- package/dist/utils/classes.js.map +1 -0
- package/dist/utils/config.d.ts +14 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +16 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/craftHostBridge.d.ts +16 -0
- package/dist/utils/craftHostBridge.d.ts.map +1 -0
- package/dist/utils/craftHostBridge.js +28 -0
- package/dist/utils/craftHostBridge.js.map +1 -0
- package/dist/utils/handle.d.ts +10 -0
- package/dist/utils/handle.d.ts.map +1 -0
- package/dist/utils/handle.js +51 -0
- package/dist/utils/handle.js.map +1 -0
- package/dist/utils/hostBridge.d.ts +40 -0
- package/dist/utils/hostBridge.d.ts.map +1 -0
- package/dist/utils/hostBridge.js +35 -0
- package/dist/utils/hostBridge.js.map +1 -0
- package/dist/utils/index.d.ts +18 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +66 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/portal.d.ts +17 -0
- package/dist/utils/portal.d.ts.map +1 -0
- package/dist/utils/portal.js +51 -0
- package/dist/utils/portal.js.map +1 -0
- package/dist/utils/schema.d.ts +17 -0
- package/dist/utils/schema.d.ts.map +1 -0
- package/dist/utils/schema.js +56 -0
- package/dist/utils/schema.js.map +1 -0
- package/dist/utils/schemaFieldNames.d.ts +2 -0
- package/dist/utils/schemaFieldNames.d.ts.map +1 -0
- package/dist/utils/schemaFieldNames.js +16 -0
- package/dist/utils/schemaFieldNames.js.map +1 -0
- package/dist/utils/schemaIndex.d.ts +6 -0
- package/dist/utils/schemaIndex.d.ts.map +1 -0
- package/dist/utils/schemaIndex.js +31 -0
- package/dist/utils/schemaIndex.js.map +1 -0
- package/dist/utils/schemaIndexCache.d.ts +6 -0
- package/dist/utils/schemaIndexCache.d.ts.map +1 -0
- package/dist/utils/schemaIndexCache.js +32 -0
- package/dist/utils/schemaIndexCache.js.map +1 -0
- package/dist/utils/schemaNormalize.d.ts +13 -0
- package/dist/utils/schemaNormalize.d.ts.map +1 -0
- package/dist/utils/schemaNormalize.js +17 -0
- package/dist/utils/schemaNormalize.js.map +1 -0
- package/dist/utils/store.d.ts +7 -0
- package/dist/utils/store.d.ts.map +1 -0
- package/dist/utils/store.js +6 -0
- package/dist/utils/store.js.map +1 -0
- package/dist/utils/timeOptions.d.ts +6 -0
- package/dist/utils/timeOptions.d.ts.map +1 -0
- package/dist/utils/timeOptions.js +42 -0
- package/dist/utils/timeOptions.js.map +1 -0
- package/dist/utils/tiptap.d.ts +13 -0
- package/dist/utils/tiptap.d.ts.map +1 -0
- package/dist/utils/tiptap.js +39 -0
- package/dist/utils/tiptap.js.map +1 -0
- package/dist/utils/translation.d.ts +5 -0
- package/dist/utils/translation.d.ts.map +1 -0
- package/dist/utils/translation.js +21 -0
- package/dist/utils/translation.js.map +1 -0
- package/dist/utils/validation.d.ts +4 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +253 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +167 -0
- package/vite-dev.mjs +56 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { DatePicker } from "../../components/DatePicker.js";
|
|
2
|
+
import { TimePicker } from "../../components/TimePicker.js";
|
|
3
|
+
import "../../components/index.js";
|
|
4
|
+
import { FieldLayout } from "../Field.js";
|
|
5
|
+
import { useEngineField } from "../useEngineField.js";
|
|
6
|
+
import { useEffect, useState } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
//#region src/forms/fields/DateTimeField.tsx
|
|
9
|
+
var DateTimeField = ({ form, field }) => {
|
|
10
|
+
const { value, setValue, errors } = useEngineField(form, field.name);
|
|
11
|
+
const initialDate = value ? new Date(String(value)) : null;
|
|
12
|
+
const initialTime = initialDate ? initialDate.toTimeString().slice(0, 5) : "";
|
|
13
|
+
const [dateValue, setDateValue] = useState(initialDate);
|
|
14
|
+
const [timeValue, setTimeValue] = useState(initialTime);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
let nextValue = "";
|
|
17
|
+
if (dateValue && timeValue) nextValue = (/* @__PURE__ */ new Date(`${dateValue.toISOString().split("T")[0]}T${timeValue}`)).toISOString();
|
|
18
|
+
else if (dateValue) nextValue = (/* @__PURE__ */ new Date(`${dateValue.toISOString().split("T")[0]}T00:00:00`)).toISOString();
|
|
19
|
+
if (String(value ?? "") !== nextValue) setValue(nextValue);
|
|
20
|
+
}, [
|
|
21
|
+
dateValue,
|
|
22
|
+
timeValue,
|
|
23
|
+
setValue,
|
|
24
|
+
value
|
|
25
|
+
]);
|
|
26
|
+
return /* @__PURE__ */ jsx(FieldLayout, {
|
|
27
|
+
name: field.name,
|
|
28
|
+
label: field.label,
|
|
29
|
+
instructions: field.instructions,
|
|
30
|
+
warning: field.warning,
|
|
31
|
+
required: field.required,
|
|
32
|
+
errors,
|
|
33
|
+
withControl: false,
|
|
34
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
35
|
+
className: "flex gap-2",
|
|
36
|
+
children: [/* @__PURE__ */ jsx(DatePicker, {
|
|
37
|
+
value: dateValue,
|
|
38
|
+
onValueChange: (nextValue) => {
|
|
39
|
+
setDateValue(nextValue ?? null);
|
|
40
|
+
},
|
|
41
|
+
isInvalid: errors.length > 0
|
|
42
|
+
}), /* @__PURE__ */ jsx(TimePicker, {
|
|
43
|
+
value: timeValue,
|
|
44
|
+
onValueChange: setTimeValue,
|
|
45
|
+
isInvalid: errors.length > 0
|
|
46
|
+
})]
|
|
47
|
+
})
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
51
|
+
export { DateTimeField };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=DateTimeField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateTimeField.js","names":[],"sources":["../../../src/forms/fields/DateTimeField.tsx"],"sourcesContent":["import { DatePicker, TimePicker } from '@verbb/plugin-kit-react/components';\nimport { useEffect, useState } from 'react';\nimport { FieldLayout } from '../Field';\nimport type { SchemaFormEngineApi } from '../engine/context';\nimport { useEngineField } from '../useEngineField';\n\ntype DateTimeFieldProps = {\n form: SchemaFormEngineApi;\n field: {\n name: string;\n label?: string;\n instructions?: string;\n warning?: string;\n required?: boolean;\n };\n};\n\nexport const DateTimeField = ({ form, field }: DateTimeFieldProps) => {\n const { value, setValue, errors } = useEngineField(form, field.name);\n const initialDate = value ? new Date(String(value)) : null;\n const initialTime = initialDate ? initialDate.toTimeString().slice(0, 5) : '';\n\n const [dateValue, setDateValue] = useState<Date | null>(initialDate);\n const [timeValue, setTimeValue] = useState<string>(initialTime);\n\n useEffect(() => {\n let nextValue = '';\n\n if (dateValue && timeValue) {\n const combinedDateTime = new Date(`${dateValue.toISOString().split('T')[0]}T${timeValue}`);\n nextValue = combinedDateTime.toISOString();\n } else if (dateValue) {\n const dateOnly = new Date(`${dateValue.toISOString().split('T')[0]}T00:00:00`);\n nextValue = dateOnly.toISOString();\n }\n\n if (String(value ?? '') !== nextValue) {\n setValue(nextValue);\n }\n }, [dateValue, timeValue, setValue, value]);\n\n return (\n <FieldLayout\n name={field.name}\n label={field.label}\n instructions={field.instructions}\n warning={field.warning}\n required={field.required}\n errors={errors}\n withControl={false}\n >\n <div className=\"flex gap-2\">\n <DatePicker\n value={dateValue}\n onValueChange={(nextValue) => { setDateValue(nextValue ?? null); }}\n isInvalid={errors.length > 0}\n />\n <TimePicker\n value={timeValue}\n onValueChange={setTimeValue}\n isInvalid={errors.length > 0}\n />\n </div>\n </FieldLayout>\n );\n};\n"],"mappings":";;;;;;;;AAiBA,IAAa,iBAAiB,EAAE,MAAM,YAAgC;CAClE,MAAM,EAAE,OAAO,UAAU,WAAW,eAAe,MAAM,MAAM,KAAK;CACpE,MAAM,cAAc,QAAQ,IAAI,KAAK,OAAO,MAAM,CAAC,GAAG;CACtD,MAAM,cAAc,cAAc,YAAY,cAAc,CAAC,MAAM,GAAG,EAAE,GAAG;CAE3E,MAAM,CAAC,WAAW,gBAAgB,SAAsB,YAAY;CACpE,MAAM,CAAC,WAAW,gBAAgB,SAAiB,YAAY;AAE/D,iBAAgB;EACZ,IAAI,YAAY;AAEhB,MAAI,aAAa,UAEb,8BAAY,IADiB,KAAK,GAAG,UAAU,aAAa,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,YAClE,EAAiB,aAAa;WACnC,UAEP,8BAAY,IADS,KAAK,GAAG,UAAU,aAAa,CAAC,MAAM,IAAI,CAAC,GAAG,WACvD,EAAS,aAAa;AAGtC,MAAI,OAAO,SAAS,GAAG,KAAK,UACxB,UAAS,UAAU;IAExB;EAAC;EAAW;EAAW;EAAU;EAAM,CAAC;AAE3C,QACI,oBAAC,aAAD;EACI,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,cAAc,MAAM;EACpB,SAAS,MAAM;EACf,UAAU,MAAM;EACR;EACR,aAAa;YAEb,qBAAC,OAAD;GAAK,WAAU;aAAf,CACI,oBAAC,YAAD;IACI,OAAO;IACP,gBAAgB,cAAc;AAAE,kBAAa,aAAa,KAAK;;IAC/D,WAAW,OAAO,SAAS;IAC7B,CAAA,EACF,oBAAC,YAAD;IACI,OAAO;IACP,eAAe;IACf,WAAW,OAAO,SAAS;IAC7B,CAAA,CACA;;EACI,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { EditableTable } from '../../components';
|
|
2
|
+
import { ComponentProps } from 'react';
|
|
3
|
+
import { SchemaFormEngineApi } from '../engine/context';
|
|
4
|
+
type EditableTableFieldProps = {
|
|
5
|
+
form: SchemaFormEngineApi;
|
|
6
|
+
field: {
|
|
7
|
+
name: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
instructions?: string;
|
|
10
|
+
warning?: string;
|
|
11
|
+
required?: boolean;
|
|
12
|
+
columns: ComponentProps<typeof EditableTable>['columns'];
|
|
13
|
+
addRowLabel?: string;
|
|
14
|
+
allowReorder?: boolean;
|
|
15
|
+
allowAdd?: boolean;
|
|
16
|
+
allowDelete?: boolean;
|
|
17
|
+
newRowDefaults?: Record<string, unknown>;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export declare const EditableTableField: ({ form, field }: EditableTableFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=EditableTableField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditableTableField.d.ts","sourceRoot":"","sources":["../../../src/forms/fields/EditableTableField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,KAAK,uBAAuB,GAAG;IAC3B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC;QACzD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,CAAC;CACL,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,iBAAiB,uBAAuB,4CAoC1E,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { EditableTable } from "../../components/EditableTable.js";
|
|
2
|
+
import "../../components/index.js";
|
|
3
|
+
import { FieldLayout } from "../Field.js";
|
|
4
|
+
import { useEditableTableFieldBinding } from "../useEditableTableFieldBinding.js";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
//#region src/forms/fields/EditableTableField.tsx
|
|
7
|
+
var EditableTableField = ({ form, field }) => {
|
|
8
|
+
const { rows, setRows, errors, cellErrors, handleCellChange } = useEditableTableFieldBinding(form, field.name);
|
|
9
|
+
return /* @__PURE__ */ jsx(FieldLayout, {
|
|
10
|
+
name: field.name,
|
|
11
|
+
label: field.label,
|
|
12
|
+
instructions: field.instructions,
|
|
13
|
+
warning: field.warning,
|
|
14
|
+
required: field.required,
|
|
15
|
+
errors,
|
|
16
|
+
withControl: false,
|
|
17
|
+
children: /* @__PURE__ */ jsx(EditableTable, {
|
|
18
|
+
columns: field.columns,
|
|
19
|
+
rows,
|
|
20
|
+
onChange: setRows,
|
|
21
|
+
onCellChange: handleCellChange,
|
|
22
|
+
addRowLabel: field.addRowLabel,
|
|
23
|
+
allowReorder: field.allowReorder,
|
|
24
|
+
allowAdd: field.allowAdd,
|
|
25
|
+
allowDelete: field.allowDelete,
|
|
26
|
+
newRowDefaults: field.newRowDefaults,
|
|
27
|
+
className: "",
|
|
28
|
+
fieldName: field.name,
|
|
29
|
+
cellErrors,
|
|
30
|
+
modifyColumn: void 0
|
|
31
|
+
})
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
//#endregion
|
|
35
|
+
export { EditableTableField };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=EditableTableField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditableTableField.js","names":[],"sources":["../../../src/forms/fields/EditableTableField.tsx"],"sourcesContent":["import { EditableTable } from '@verbb/plugin-kit-react/components';\nimport type { ComponentProps } from 'react';\nimport { FieldLayout } from '../Field';\nimport type { SchemaFormEngineApi } from '../engine/context';\nimport { useEditableTableFieldBinding } from '../useEditableTableFieldBinding';\n\ntype EditableTableFieldProps = {\n form: SchemaFormEngineApi;\n field: {\n name: string;\n label?: string;\n instructions?: string;\n warning?: string;\n required?: boolean;\n columns: ComponentProps<typeof EditableTable>['columns'];\n addRowLabel?: string;\n allowReorder?: boolean;\n allowAdd?: boolean;\n allowDelete?: boolean;\n newRowDefaults?: Record<string, unknown>;\n };\n};\n\nexport const EditableTableField = ({ form, field }: EditableTableFieldProps) => {\n const {\n rows,\n setRows,\n errors,\n cellErrors,\n handleCellChange,\n } = useEditableTableFieldBinding(form, field.name);\n\n return (\n <FieldLayout\n name={field.name}\n label={field.label}\n instructions={field.instructions}\n warning={field.warning}\n required={field.required}\n errors={errors}\n withControl={false}\n >\n <EditableTable\n columns={field.columns}\n rows={rows}\n onChange={setRows}\n onCellChange={handleCellChange}\n addRowLabel={field.addRowLabel}\n allowReorder={field.allowReorder}\n allowAdd={field.allowAdd}\n allowDelete={field.allowDelete}\n newRowDefaults={field.newRowDefaults}\n className=\"\"\n fieldName={field.name}\n cellErrors={cellErrors}\n modifyColumn={undefined}\n />\n </FieldLayout>\n );\n};\n"],"mappings":";;;;;;AAuBA,IAAa,sBAAsB,EAAE,MAAM,YAAqC;CAC5E,MAAM,EACF,MACA,SACA,QACA,YACA,qBACA,6BAA6B,MAAM,MAAM,KAAK;AAElD,QACI,oBAAC,aAAD;EACI,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,cAAc,MAAM;EACpB,SAAS,MAAM;EACf,UAAU,MAAM;EACR;EACR,aAAa;YAEb,oBAAC,eAAD;GACI,SAAS,MAAM;GACT;GACN,UAAU;GACV,cAAc;GACd,aAAa,MAAM;GACnB,cAAc,MAAM;GACpB,UAAU,MAAM;GAChB,aAAa,MAAM;GACnB,gBAAgB,MAAM;GACtB,WAAU;GACV,WAAW,MAAM;GACL;GACZ,cAAc,KAAA;GAChB,CAAA;EACQ,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SchemaFormEngineApi } from '../engine/context';
|
|
2
|
+
type ElementSelectFieldProps = {
|
|
3
|
+
form: SchemaFormEngineApi;
|
|
4
|
+
field: {
|
|
5
|
+
name: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
instructions?: string;
|
|
8
|
+
warning?: string;
|
|
9
|
+
required?: boolean;
|
|
10
|
+
elementType?: string;
|
|
11
|
+
sources?: string[];
|
|
12
|
+
criteria?: Record<string, unknown>;
|
|
13
|
+
limit?: number;
|
|
14
|
+
elementSelectOptionsAction?: string;
|
|
15
|
+
elementSelectStorageKeyPrefix?: string;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export declare const ElementSelectField: ({ form, field }: ElementSelectFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=ElementSelectField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElementSelectField.d.ts","sourceRoot":"","sources":["../../../src/forms/fields/ElementSelectField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAW7D,KAAK,uBAAuB,GAAG;IAC3B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,6BAA6B,CAAC,EAAE,MAAM,CAAC;KAC1C,CAAC;CACL,CAAC;AAkEF,eAAO,MAAM,kBAAkB,GAAI,iBAAiB,uBAAuB,4CAsL1E,CAAC"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { cn } from "../../utils/classes.js";
|
|
2
|
+
import { hostOpenElementSelector, hostRequest } from "../../utils/hostBridge.js";
|
|
3
|
+
import "../../utils/index.js";
|
|
4
|
+
import { useTranslation } from "../../hooks/useTranslation.js";
|
|
5
|
+
import "../../hooks/index.js";
|
|
6
|
+
import { Spinner } from "../../components/Spinner.js";
|
|
7
|
+
import { Status } from "../../components/Status.js";
|
|
8
|
+
import "../../components/index.js";
|
|
9
|
+
import { Button } from "../../components/Button.js";
|
|
10
|
+
import { FieldLayout } from "../Field.js";
|
|
11
|
+
import useElementStoreV2 from "../store/element-store.js";
|
|
12
|
+
import { useEffect, useState } from "react";
|
|
13
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
15
|
+
import { faPlus, faXmark } from "@fortawesome/pro-solid-svg-icons";
|
|
16
|
+
//#region src/forms/fields/ElementSelectField.tsx
|
|
17
|
+
var isRecord = (value) => {
|
|
18
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
19
|
+
};
|
|
20
|
+
var isElementReference = (value) => {
|
|
21
|
+
return isRecord(value) && typeof value.id === "number" && typeof value.siteId === "number";
|
|
22
|
+
};
|
|
23
|
+
var normalizeSelectedElement = (element, elementType) => {
|
|
24
|
+
const url = typeof element.$element?.data === "function" ? element.$element.data("cp-url") : null;
|
|
25
|
+
return {
|
|
26
|
+
id: element.id,
|
|
27
|
+
siteId: element.siteId,
|
|
28
|
+
label: element.label,
|
|
29
|
+
url: typeof url === "string" ? url : null,
|
|
30
|
+
status: element.status ?? null,
|
|
31
|
+
elementType
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
var normalizeStoredElement = (value, elementType) => {
|
|
35
|
+
if (!isRecord(value) || typeof value.id !== "number" || typeof value.siteId !== "number") return null;
|
|
36
|
+
return {
|
|
37
|
+
id: value.id,
|
|
38
|
+
siteId: value.siteId,
|
|
39
|
+
label: typeof value.label === "string" ? value.label : `Element ${value.id}`,
|
|
40
|
+
url: typeof value.url === "string" ? value.url : null,
|
|
41
|
+
status: typeof value.status === "string" ? value.status : null,
|
|
42
|
+
elementType: typeof value.elementType === "string" ? value.elementType : elementType
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
var ElementSelectField = ({ form, field }) => {
|
|
46
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
47
|
+
const { getElementData, setElementData, hasElementData } = useElementStoreV2();
|
|
48
|
+
const t = useTranslation();
|
|
49
|
+
const selectedElements = getElementData(field.name) || [];
|
|
50
|
+
const errors = form?.getErrorMapFields?.()[field.name] || [];
|
|
51
|
+
const { elementSelectOptionsAction } = field;
|
|
52
|
+
const { elementSelectStorageKeyPrefix } = field;
|
|
53
|
+
const handleButtonClick = () => {
|
|
54
|
+
const elementType = field.elementType || "craft\\elements\\Entry";
|
|
55
|
+
if (!elementSelectStorageKeyPrefix) throw new Error(`ElementSelectField requires "elementSelectStorageKeyPrefix" for "${field.name}".`);
|
|
56
|
+
hostOpenElementSelector(elementType, {
|
|
57
|
+
storageKey: `${elementSelectStorageKeyPrefix}.${field.name}.${elementType}`,
|
|
58
|
+
sources: field.sources || ["*"],
|
|
59
|
+
criteria: field.criteria || {},
|
|
60
|
+
multiSelect: field.limit ? false : true,
|
|
61
|
+
limit: field.limit || null,
|
|
62
|
+
autoFocusSearchBox: false,
|
|
63
|
+
onShow: () => {
|
|
64
|
+
document.body.style.pointerEvents = "";
|
|
65
|
+
},
|
|
66
|
+
onSelect: (elements) => {
|
|
67
|
+
const newElements = elements.map((element) => {
|
|
68
|
+
return normalizeSelectedElement(element, elementType);
|
|
69
|
+
});
|
|
70
|
+
const updatedElements = [...selectedElements, ...newElements];
|
|
71
|
+
setElementData(field.name, updatedElements);
|
|
72
|
+
const formValue = updatedElements.map((element) => {
|
|
73
|
+
return {
|
|
74
|
+
id: element.id,
|
|
75
|
+
siteId: element.siteId
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
form.setFieldValue(field.name, formValue);
|
|
79
|
+
},
|
|
80
|
+
closeOtherModals: false
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
const removeElement = (elementId) => {
|
|
84
|
+
const updatedElements = selectedElements.filter((el) => {
|
|
85
|
+
return el.id !== elementId;
|
|
86
|
+
});
|
|
87
|
+
setElementData(field.name, updatedElements);
|
|
88
|
+
const formValue = updatedElements.map((element) => {
|
|
89
|
+
return {
|
|
90
|
+
id: element.id,
|
|
91
|
+
siteId: element.siteId
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
form.setFieldValue(field.name, formValue);
|
|
95
|
+
};
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
const loadElements = async () => {
|
|
98
|
+
if (field.name && !hasElementData(field.name)) {
|
|
99
|
+
const currentValue = form.getFieldValue(field.name);
|
|
100
|
+
if (currentValue && Array.isArray(currentValue) && currentValue.length > 0) {
|
|
101
|
+
const currentReferences = currentValue.filter(isElementReference);
|
|
102
|
+
if (!currentReferences.length) return;
|
|
103
|
+
setIsLoading(true);
|
|
104
|
+
try {
|
|
105
|
+
if (!elementSelectOptionsAction) throw new Error(`ElementSelectField requires "elementSelectOptionsAction" for "${field.name}".`);
|
|
106
|
+
const response = await hostRequest("POST", elementSelectOptionsAction, { data: { elements: currentReferences } });
|
|
107
|
+
if (response.data && Array.isArray(response.data)) {
|
|
108
|
+
const normalizedElements = response.data.map((item) => {
|
|
109
|
+
return normalizeStoredElement(item, field.elementType || "craft\\elements\\Entry");
|
|
110
|
+
}).filter((item) => {
|
|
111
|
+
return item !== null;
|
|
112
|
+
});
|
|
113
|
+
setElementData(field.name, normalizedElements);
|
|
114
|
+
}
|
|
115
|
+
} catch {
|
|
116
|
+
const fallbackElements = currentReferences.map((item) => {
|
|
117
|
+
return {
|
|
118
|
+
id: item.id,
|
|
119
|
+
siteId: item.siteId,
|
|
120
|
+
label: `Element ${item.id}`,
|
|
121
|
+
url: null,
|
|
122
|
+
status: null,
|
|
123
|
+
elementType: field.elementType || "craft\\elements\\Entry"
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
setElementData(field.name, fallbackElements);
|
|
127
|
+
} finally {
|
|
128
|
+
setIsLoading(false);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
loadElements();
|
|
134
|
+
}, [
|
|
135
|
+
form,
|
|
136
|
+
field.name,
|
|
137
|
+
field.elementType,
|
|
138
|
+
elementSelectOptionsAction,
|
|
139
|
+
getElementData,
|
|
140
|
+
setElementData,
|
|
141
|
+
hasElementData
|
|
142
|
+
]);
|
|
143
|
+
return /* @__PURE__ */ jsx(FieldLayout, {
|
|
144
|
+
name: field.name,
|
|
145
|
+
label: field.label,
|
|
146
|
+
instructions: field.instructions,
|
|
147
|
+
warning: field.warning,
|
|
148
|
+
required: field.required,
|
|
149
|
+
errors,
|
|
150
|
+
withControl: false,
|
|
151
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
152
|
+
className: "space-y-3",
|
|
153
|
+
children: [
|
|
154
|
+
isLoading && /* @__PURE__ */ jsxs("div", {
|
|
155
|
+
className: "relative flex items-center text-sm text-gray-500 min-h-[34px]",
|
|
156
|
+
children: [/* @__PURE__ */ jsx(Spinner, {
|
|
157
|
+
size: "xs",
|
|
158
|
+
variant: "default",
|
|
159
|
+
className: "absolute left-0"
|
|
160
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
161
|
+
className: "ml-6",
|
|
162
|
+
children: t("Loading elements...")
|
|
163
|
+
})]
|
|
164
|
+
}),
|
|
165
|
+
selectedElements.length > 0 && /* @__PURE__ */ jsx("div", {
|
|
166
|
+
className: "flex flex-wrap gap-2",
|
|
167
|
+
children: selectedElements.map((element) => {
|
|
168
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
169
|
+
className: cn("flex items-center gap-1.5", "border border-gray-200 rounded-lg text-sm", "px-2 py-1.5", "bg-[rgb(243,247,252)]", "shadow-sm"),
|
|
170
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
171
|
+
className: "flex items-center gap-2",
|
|
172
|
+
children: [element.status && /* @__PURE__ */ jsx(Status, { status: element.status }), /* @__PURE__ */ jsx("a", {
|
|
173
|
+
href: element.url,
|
|
174
|
+
children: /* @__PURE__ */ jsx("span", { children: element.label })
|
|
175
|
+
})]
|
|
176
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
177
|
+
type: "button",
|
|
178
|
+
variant: "transparent",
|
|
179
|
+
size: "xs",
|
|
180
|
+
onClick: () => {
|
|
181
|
+
return removeElement(element.id);
|
|
182
|
+
},
|
|
183
|
+
className: cn("-mr-1"),
|
|
184
|
+
"aria-label": t("Remove element"),
|
|
185
|
+
children: /* @__PURE__ */ jsx(FontAwesomeIcon, {
|
|
186
|
+
icon: faXmark,
|
|
187
|
+
className: "size-[15px]"
|
|
188
|
+
})
|
|
189
|
+
})]
|
|
190
|
+
}, `${element.id}-${element.siteId}`);
|
|
191
|
+
})
|
|
192
|
+
}),
|
|
193
|
+
(!field.limit || selectedElements.length < field.limit) && !isLoading && /* @__PURE__ */ jsxs(Button, {
|
|
194
|
+
type: "button",
|
|
195
|
+
variant: "dashed",
|
|
196
|
+
"aria-label": t("Choose"),
|
|
197
|
+
className: cn("pl-1.5", errors.length > 0 && ["border-rose-600!", "focus-visible:shadow-[0_0_0_1px_var(--color-rose-600),0_0_4px_0_hsl(from_var(--color-rose-600)_h_s_l/0.7)]!"]),
|
|
198
|
+
onClick: handleButtonClick,
|
|
199
|
+
children: [
|
|
200
|
+
/* @__PURE__ */ jsx(FontAwesomeIcon, {
|
|
201
|
+
icon: faPlus,
|
|
202
|
+
className: "size-[16px]"
|
|
203
|
+
}),
|
|
204
|
+
" ",
|
|
205
|
+
t("Choose")
|
|
206
|
+
]
|
|
207
|
+
})
|
|
208
|
+
]
|
|
209
|
+
})
|
|
210
|
+
});
|
|
211
|
+
};
|
|
212
|
+
//#endregion
|
|
213
|
+
export { ElementSelectField };
|
|
214
|
+
|
|
215
|
+
//# sourceMappingURL=ElementSelectField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElementSelectField.js","names":[],"sources":["../../../src/forms/fields/ElementSelectField.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { Button, Spinner, Status } from '@verbb/plugin-kit-react/components';\nimport { FieldLayout } from '../Field';\nimport type { SchemaFormEngineApi } from '../engine/context';\nimport useElementStore from '../store/element-store';\nimport { useTranslation } from '@verbb/plugin-kit-react/hooks';\nimport {\n cn,\n hostOpenElementSelector,\n hostRequest,\n} from '@verbb/plugin-kit-react/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faPlus, faXmark } from '@fortawesome/pro-solid-svg-icons';\n\ntype ElementSelectFieldProps = {\n form: SchemaFormEngineApi;\n field: {\n name: string;\n label?: string;\n instructions?: string;\n warning?: string;\n required?: boolean;\n elementType?: string;\n sources?: string[];\n criteria?: Record<string, unknown>;\n limit?: number;\n elementSelectOptionsAction?: string;\n elementSelectStorageKeyPrefix?: string;\n };\n};\n\ntype Element = {\n id: number;\n siteId: number;\n label: string;\n url: string | null;\n status: string | null;\n elementType: string;\n};\n\ntype ElementReference = {\n id: number;\n siteId: number;\n};\n\ntype HostElementDataAccessor = {\n data: (key: string) => unknown;\n};\n\ntype HostSelectedElement = {\n id: number;\n siteId: number;\n label: string;\n status?: string | null;\n $element?: HostElementDataAccessor;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n};\n\nconst isElementReference = (value: unknown): value is ElementReference => {\n return isRecord(value) && typeof value.id === 'number' && typeof value.siteId === 'number';\n};\n\nconst normalizeSelectedElement = (element: HostSelectedElement, elementType: string): Element => {\n const url = typeof element.$element?.data === 'function'\n ? element.$element.data('cp-url')\n : null;\n\n return {\n id: element.id,\n siteId: element.siteId,\n label: element.label,\n url: typeof url === 'string' ? url : null,\n status: element.status ?? null,\n elementType,\n };\n};\n\nconst normalizeStoredElement = (value: unknown, elementType: string): Element | null => {\n if (!isRecord(value) || typeof value.id !== 'number' || typeof value.siteId !== 'number') {\n return null;\n }\n\n return {\n id: value.id,\n siteId: value.siteId,\n label: typeof value.label === 'string' ? value.label : `Element ${value.id}`,\n url: typeof value.url === 'string' ? value.url : null,\n status: typeof value.status === 'string' ? value.status : null,\n elementType: typeof value.elementType === 'string' ? value.elementType : elementType,\n };\n};\n\nexport const ElementSelectField = ({ form, field }: ElementSelectFieldProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const { getElementData, setElementData, hasElementData } = useElementStore();\n const t = useTranslation();\n const selectedElements = getElementData<Element[]>(field.name) || [];\n const errors = form?.getErrorMapFields?.()[field.name] || [];\n const { elementSelectOptionsAction } = field;\n const { elementSelectStorageKeyPrefix } = field;\n\n const handleButtonClick = () => {\n const elementType = field.elementType || 'craft\\\\elements\\\\Entry';\n\n if (!elementSelectStorageKeyPrefix) {\n throw new Error(`ElementSelectField requires \"elementSelectStorageKeyPrefix\" for \"${field.name}\".`);\n }\n\n hostOpenElementSelector(elementType, {\n storageKey: `${elementSelectStorageKeyPrefix}.${field.name}.${elementType}`,\n sources: field.sources || ['*'],\n criteria: field.criteria || {},\n multiSelect: field.limit ? false : true,\n limit: field.limit || null,\n autoFocusSearchBox: false,\n onShow: () => {\n document.body.style.pointerEvents = '';\n },\n onSelect: (elements: HostSelectedElement[]) => {\n const newElements = elements.map((element) => {\n return normalizeSelectedElement(element, elementType);\n });\n\n const updatedElements = [...selectedElements, ...newElements];\n setElementData(field.name, updatedElements);\n\n const formValue = updatedElements.map((element) => {\n return { id: element.id, siteId: element.siteId };\n });\n\n form.setFieldValue(field.name, formValue);\n },\n closeOtherModals: false,\n });\n };\n\n const removeElement = (elementId: number) => {\n const updatedElements = selectedElements.filter((el) => { return el.id !== elementId; });\n setElementData(field.name, updatedElements);\n\n const formValue = updatedElements.map((element) => {\n return { id: element.id, siteId: element.siteId };\n });\n\n form.setFieldValue(field.name, formValue);\n };\n\n useEffect(() => {\n const loadElements = async() => {\n if (field.name && !hasElementData(field.name)) {\n const currentValue = form.getFieldValue(field.name);\n\n if (currentValue && Array.isArray(currentValue) && currentValue.length > 0) {\n const currentReferences = currentValue.filter(isElementReference);\n if (!currentReferences.length) {\n return;\n }\n\n setIsLoading(true);\n\n try {\n if (!elementSelectOptionsAction) {\n throw new Error(`ElementSelectField requires \"elementSelectOptionsAction\" for \"${field.name}\".`);\n }\n\n const response = await hostRequest('POST', elementSelectOptionsAction, {\n data: { elements: currentReferences },\n });\n\n if (response.data && Array.isArray(response.data)) {\n const normalizedElements = response.data\n .map((item) => { return normalizeStoredElement(item, field.elementType || 'craft\\\\elements\\\\Entry'); })\n .filter((item): item is Element => {\n return item !== null;\n });\n setElementData(field.name, normalizedElements);\n }\n } catch {\n const fallbackElements: Element[] = currentReferences.map((item) => {\n return {\n id: item.id,\n siteId: item.siteId,\n label: `Element ${item.id}`,\n url: null,\n status: null,\n elementType: field.elementType || 'craft\\\\elements\\\\Entry',\n };\n });\n setElementData(field.name, fallbackElements);\n } finally {\n setIsLoading(false);\n }\n }\n }\n };\n\n loadElements();\n }, [form, field.name, field.elementType, elementSelectOptionsAction, getElementData, setElementData, hasElementData]);\n\n return (\n <FieldLayout\n name={field.name}\n label={field.label}\n instructions={field.instructions}\n warning={field.warning}\n required={field.required}\n errors={errors}\n withControl={false}\n >\n <div className=\"space-y-3\">\n {isLoading && (\n <div className=\"relative flex items-center text-sm text-gray-500 min-h-[34px]\">\n <Spinner size=\"xs\" variant=\"default\" className=\"absolute left-0\" />\n <span className=\"ml-6\">{t('Loading elements...')}</span>\n </div>\n )}\n\n {selectedElements.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {selectedElements.map((element) => {\n return (\n <div\n key={`${element.id}-${element.siteId}`}\n className={cn(\n 'flex items-center gap-1.5',\n 'border border-gray-200 rounded-lg text-sm',\n 'px-2 py-1.5',\n 'bg-[rgb(243,247,252)]',\n 'shadow-sm',\n )}\n >\n <div className=\"flex items-center gap-2\">\n {element.status && <Status status={element.status} />}\n <a href={element.url}>\n <span>{element.label}</span>\n </a>\n </div>\n\n <Button\n type=\"button\"\n variant=\"transparent\"\n size=\"xs\"\n onClick={() => { return removeElement(element.id); }}\n className={cn('-mr-1')}\n aria-label={t('Remove element')}\n >\n <FontAwesomeIcon icon={faXmark} className=\"size-[15px]\" />\n </Button>\n </div>\n );\n })}\n </div>\n )}\n\n {(!field.limit || selectedElements.length < field.limit) && !isLoading && (\n <Button\n type=\"button\"\n variant=\"dashed\"\n aria-label={t('Choose')}\n className={cn(\n 'pl-1.5',\n errors.length > 0 && [\n 'border-rose-600!',\n 'focus-visible:shadow-[0_0_0_1px_var(--color-rose-600),0_0_4px_0_hsl(from_var(--color-rose-600)_h_s_l/0.7)]!',\n ],\n )}\n onClick={handleButtonClick}\n >\n <FontAwesomeIcon icon={faPlus} className=\"size-[16px]\" /> {t('Choose')}\n </Button>\n )}\n </div>\n </FieldLayout>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SchemaFormEngineApi } from '../engine/context';
|
|
3
|
+
import { SchemaRenderable } from '../engine/SchemaIndex';
|
|
4
|
+
type GroupFieldProps = {
|
|
5
|
+
form: SchemaFormEngineApi;
|
|
6
|
+
field: {
|
|
7
|
+
name?: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
instructions?: string;
|
|
10
|
+
warning?: string;
|
|
11
|
+
required?: boolean;
|
|
12
|
+
schema?: SchemaRenderable;
|
|
13
|
+
children?: SchemaRenderable;
|
|
14
|
+
};
|
|
15
|
+
children?: ReactNode;
|
|
16
|
+
};
|
|
17
|
+
export declare const GroupField: ({ form, field, children }: GroupFieldProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=GroupField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupField.d.ts","sourceRoot":"","sources":["../../../src/forms/fields/GroupField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE1E,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,gBAAgB,CAAC;QAC1B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAsCF,eAAO,MAAM,UAAU,GAAI,2BAA2B,eAAe,mDAsCpE,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { FieldLayout } from "../Field.js";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/forms/fields/GroupField.tsx
|
|
5
|
+
var prefixGroupSchema = (schema, prefix, scopePath) => {
|
|
6
|
+
if (Array.isArray(schema)) return schema.map((item) => {
|
|
7
|
+
return prefixGroupSchema(item, prefix, scopePath);
|
|
8
|
+
});
|
|
9
|
+
if (!schema || typeof schema !== "object") return schema;
|
|
10
|
+
const nextSchema = { ...schema };
|
|
11
|
+
if (typeof scopePath === "string" && scopePath && !nextSchema._scopePath) nextSchema._scopePath = scopePath;
|
|
12
|
+
if (typeof nextSchema.name === "string" && nextSchema.name && nextSchema.$field) nextSchema.name = `${prefix}${nextSchema.name}`;
|
|
13
|
+
if (nextSchema.$field !== "group") {
|
|
14
|
+
if (Array.isArray(nextSchema.schema)) nextSchema.schema = prefixGroupSchema(nextSchema.schema, prefix, scopePath);
|
|
15
|
+
if (Array.isArray(nextSchema.children)) nextSchema.children = prefixGroupSchema(nextSchema.children, prefix, scopePath);
|
|
16
|
+
}
|
|
17
|
+
return nextSchema;
|
|
18
|
+
};
|
|
19
|
+
var GroupField = ({ form, field, children }) => {
|
|
20
|
+
const Renderer = form?.SchemaRenderer;
|
|
21
|
+
const prefix = field.name ? `${field.name}.` : "";
|
|
22
|
+
const scopedSchema = useMemo(() => {
|
|
23
|
+
const schema = field.schema ?? field.children ?? children ?? [];
|
|
24
|
+
if (!prefix) return schema;
|
|
25
|
+
return prefixGroupSchema(schema, prefix, field.name || "");
|
|
26
|
+
}, [
|
|
27
|
+
children,
|
|
28
|
+
field.children,
|
|
29
|
+
field.name,
|
|
30
|
+
field.schema,
|
|
31
|
+
prefix
|
|
32
|
+
]);
|
|
33
|
+
if (!Renderer) return null;
|
|
34
|
+
const errors = field.name ? form?.getGroupedErrorsForPath?.(field.name) ?? form?.getErrorMapFields?.()[field.name] ?? [] : [];
|
|
35
|
+
if (field.label || field.instructions || field.warning) return /* @__PURE__ */ jsx(FieldLayout, {
|
|
36
|
+
name: field.name || "group",
|
|
37
|
+
label: field.label,
|
|
38
|
+
instructions: field.instructions,
|
|
39
|
+
warning: field.warning,
|
|
40
|
+
required: field.required,
|
|
41
|
+
errors,
|
|
42
|
+
withControl: false,
|
|
43
|
+
children: /* @__PURE__ */ jsx(Renderer, { schema: scopedSchema })
|
|
44
|
+
});
|
|
45
|
+
return /* @__PURE__ */ jsx(Renderer, { schema: scopedSchema });
|
|
46
|
+
};
|
|
47
|
+
//#endregion
|
|
48
|
+
export { GroupField };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=GroupField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupField.js","names":[],"sources":["../../../src/forms/fields/GroupField.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport { FieldLayout } from '../Field';\nimport type { SchemaFormEngineApi } from '../engine/context';\nimport type { SchemaNode, SchemaRenderable } from '../engine/SchemaIndex';\n\ntype GroupFieldProps = {\n form: SchemaFormEngineApi;\n field: {\n name?: string;\n label?: string;\n instructions?: string;\n warning?: string;\n required?: boolean;\n schema?: SchemaRenderable;\n children?: SchemaRenderable;\n };\n children?: ReactNode;\n};\n\nconst prefixGroupSchema = (schema: SchemaRenderable, prefix: string, scopePath: string): SchemaRenderable => {\n if (Array.isArray(schema)) {\n return schema.map((item) => {\n return prefixGroupSchema(item, prefix, scopePath);\n });\n }\n\n if (!schema || typeof schema !== 'object') {\n return schema;\n }\n\n const nextSchema: SchemaNode = { ...schema };\n const hasScope = typeof scopePath === 'string' && scopePath;\n\n if (hasScope && !nextSchema._scopePath) {\n nextSchema._scopePath = scopePath;\n }\n\n if (typeof nextSchema.name === 'string' && nextSchema.name && nextSchema.$field) {\n nextSchema.name = `${prefix}${nextSchema.name}`;\n }\n\n // Let nested group fields scope their own descendants to avoid double-prefixing.\n if (nextSchema.$field !== 'group') {\n if (Array.isArray(nextSchema.schema)) {\n nextSchema.schema = prefixGroupSchema(nextSchema.schema, prefix, scopePath);\n }\n\n if (Array.isArray(nextSchema.children)) {\n nextSchema.children = prefixGroupSchema(nextSchema.children, prefix, scopePath);\n }\n }\n\n return nextSchema;\n};\n\nexport const GroupField = ({ form, field, children }: GroupFieldProps) => {\n const Renderer = form?.SchemaRenderer;\n const prefix = field.name ? `${field.name}.` : '';\n const scopedSchema = useMemo(() => {\n const schema = field.schema ?? field.children ?? children ?? [];\n\n if (!prefix) {\n return schema;\n }\n\n return prefixGroupSchema(schema, prefix, field.name || '');\n }, [children, field.children, field.name, field.schema, prefix]);\n\n if (!Renderer) {\n return null;\n }\n\n const errors = field.name\n ? form?.getGroupedErrorsForPath?.(field.name) ?? form?.getErrorMapFields?.()[field.name] ?? []\n : [];\n\n if (field.label || field.instructions || field.warning) {\n return (\n <FieldLayout\n name={field.name || 'group'}\n label={field.label}\n instructions={field.instructions}\n warning={field.warning}\n required={field.required}\n errors={errors}\n withControl={false}\n >\n <Renderer schema={scopedSchema} />\n </FieldLayout>\n );\n }\n\n return <Renderer schema={scopedSchema} />;\n};\n"],"mappings":";;;;AAoBA,IAAM,qBAAqB,QAA0B,QAAgB,cAAwC;AACzG,KAAI,MAAM,QAAQ,OAAO,CACrB,QAAO,OAAO,KAAK,SAAS;AACxB,SAAO,kBAAkB,MAAM,QAAQ,UAAU;GACnD;AAGN,KAAI,CAAC,UAAU,OAAO,WAAW,SAC7B,QAAO;CAGX,MAAM,aAAyB,EAAE,GAAG,QAAQ;AAG5C,KAFiB,OAAO,cAAc,YAAY,aAElC,CAAC,WAAW,WACxB,YAAW,aAAa;AAG5B,KAAI,OAAO,WAAW,SAAS,YAAY,WAAW,QAAQ,WAAW,OACrE,YAAW,OAAO,GAAG,SAAS,WAAW;AAI7C,KAAI,WAAW,WAAW,SAAS;AAC/B,MAAI,MAAM,QAAQ,WAAW,OAAO,CAChC,YAAW,SAAS,kBAAkB,WAAW,QAAQ,QAAQ,UAAU;AAG/E,MAAI,MAAM,QAAQ,WAAW,SAAS,CAClC,YAAW,WAAW,kBAAkB,WAAW,UAAU,QAAQ,UAAU;;AAIvF,QAAO;;AAGX,IAAa,cAAc,EAAE,MAAM,OAAO,eAAgC;CACtE,MAAM,WAAW,MAAM;CACvB,MAAM,SAAS,MAAM,OAAO,GAAG,MAAM,KAAK,KAAK;CAC/C,MAAM,eAAe,cAAc;EAC/B,MAAM,SAAS,MAAM,UAAU,MAAM,YAAY,YAAY,EAAE;AAE/D,MAAI,CAAC,OACD,QAAO;AAGX,SAAO,kBAAkB,QAAQ,QAAQ,MAAM,QAAQ,GAAG;IAC3D;EAAC;EAAU,MAAM;EAAU,MAAM;EAAM,MAAM;EAAQ;EAAO,CAAC;AAEhE,KAAI,CAAC,SACD,QAAO;CAGX,MAAM,SAAS,MAAM,OACf,MAAM,0BAA0B,MAAM,KAAK,IAAI,MAAM,qBAAqB,CAAC,MAAM,SAAS,EAAE,GAC5F,EAAE;AAER,KAAI,MAAM,SAAS,MAAM,gBAAgB,MAAM,QAC3C,QACI,oBAAC,aAAD;EACI,MAAM,MAAM,QAAQ;EACpB,OAAO,MAAM;EACb,cAAc,MAAM;EACpB,SAAS,MAAM;EACf,UAAU,MAAM;EACR;EACR,aAAa;YAEb,oBAAC,UAAD,EAAU,QAAQ,cAAgB,CAAA;EACxB,CAAA;AAItB,QAAO,oBAAC,UAAD,EAAU,QAAQ,cAAgB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SchemaFormEngineApi } from '../engine/context';
|
|
2
|
+
type HandleFieldProps = {
|
|
3
|
+
form: SchemaFormEngineApi;
|
|
4
|
+
field: {
|
|
5
|
+
name: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
instructions?: string;
|
|
8
|
+
warning?: string;
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
source?: string;
|
|
11
|
+
reservedHandles?: string[];
|
|
12
|
+
reservedFieldValues?: string[];
|
|
13
|
+
maxLength?: number;
|
|
14
|
+
required?: boolean;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export declare const HandleField: ({ form, field }: HandleFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=HandleField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HandleField.d.ts","sourceRoot":"","sources":["../../../src/forms/fields/HandleField.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,KAAK,gBAAgB,GAAG;IACpB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;CACL,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,iBAAiB,gBAAgB,4CAqE5D,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { cn } from "../../utils/classes.js";
|
|
2
|
+
import { buildUniqueHandleFromSource } from "../../utils/handle.js";
|
|
3
|
+
import "../../utils/index.js";
|
|
4
|
+
import { Input } from "../../components/Input.js";
|
|
5
|
+
import "../../components/index.js";
|
|
6
|
+
import { FieldLayout } from "../Field.js";
|
|
7
|
+
import { useEngineField } from "../useEngineField.js";
|
|
8
|
+
import { useState } from "react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
//#region src/forms/fields/HandleField.tsx
|
|
11
|
+
var HandleField = ({ form, field }) => {
|
|
12
|
+
const { value, setValue, setTouched, errors, isInvalid } = useEngineField(form, field.name);
|
|
13
|
+
const [rotate, setRotate] = useState(0);
|
|
14
|
+
const refreshHandle = (e) => {
|
|
15
|
+
e.preventDefault();
|
|
16
|
+
if (field.disabled) return;
|
|
17
|
+
setRotate((current) => {
|
|
18
|
+
return current + 180;
|
|
19
|
+
});
|
|
20
|
+
if (!field.source) return;
|
|
21
|
+
setValue(buildUniqueHandleFromSource({
|
|
22
|
+
sourceValue: form.getFieldValue(field.source),
|
|
23
|
+
values: form.store.state.values ?? {},
|
|
24
|
+
reservedHandles: field.reservedHandles || [],
|
|
25
|
+
reservedFieldValues: field.reservedFieldValues || [],
|
|
26
|
+
maxLength: field.maxLength
|
|
27
|
+
}));
|
|
28
|
+
};
|
|
29
|
+
return /* @__PURE__ */ jsx(FieldLayout, {
|
|
30
|
+
name: field.name,
|
|
31
|
+
label: field.label,
|
|
32
|
+
instructions: field.instructions,
|
|
33
|
+
warning: field.warning,
|
|
34
|
+
required: field.required,
|
|
35
|
+
errors,
|
|
36
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
37
|
+
className: "relative",
|
|
38
|
+
children: [/* @__PURE__ */ jsx(Input, {
|
|
39
|
+
value: String(value ?? ""),
|
|
40
|
+
onChange: (event) => {
|
|
41
|
+
return setValue(event.target.value);
|
|
42
|
+
},
|
|
43
|
+
onBlur: setTouched,
|
|
44
|
+
placeholder: field.placeholder,
|
|
45
|
+
disabled: field.disabled,
|
|
46
|
+
"aria-invalid": isInvalid,
|
|
47
|
+
className: "font-mono text-[13px]"
|
|
48
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
49
|
+
className: cn("absolute top-1/2 right-0 p-[7px_10px]", field.disabled ? "opacity-30 cursor-not-allowed" : "opacity-50 hover:opacity-100", "text-[#606d7b]", "transition-all duration-200 ease-in-out", "select-none", "transform", "transition-transform duration-500 ease-in-out", "[&>svg]:w-3.5 [&>svg]:h-3.5 [&>svg]:block"),
|
|
50
|
+
style: { transform: `translateY(-50%) rotate(${rotate}deg)` },
|
|
51
|
+
onClick: refreshHandle,
|
|
52
|
+
children: /* @__PURE__ */ jsx("svg", {
|
|
53
|
+
"aria-hidden": "true",
|
|
54
|
+
focusable: "false",
|
|
55
|
+
role: "img",
|
|
56
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
57
|
+
viewBox: "0 0 512 512",
|
|
58
|
+
children: /* @__PURE__ */ jsx("path", {
|
|
59
|
+
fill: "currentColor",
|
|
60
|
+
d: "M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z"
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
})]
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { HandleField };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=HandleField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HandleField.js","names":[],"sources":["../../../src/forms/fields/HandleField.tsx"],"sourcesContent":["import { Input } from '@verbb/plugin-kit-react/components';\nimport { buildUniqueHandleFromSource, cn } from '@verbb/plugin-kit-react/utils';\nimport { MouseEvent, useState } from 'react';\nimport { FieldLayout } from '../Field';\nimport type { SchemaFormEngineApi } from '../engine/context';\nimport { useEngineField } from '../useEngineField';\n\ntype HandleFieldProps = {\n form: SchemaFormEngineApi;\n field: {\n name: string;\n label?: string;\n instructions?: string;\n warning?: string;\n placeholder?: string;\n source?: string;\n reservedHandles?: string[];\n reservedFieldValues?: string[];\n maxLength?: number;\n required?: boolean;\n disabled?: boolean;\n };\n};\n\nexport const HandleField = ({ form, field }: HandleFieldProps) => {\n const {\n value, setValue, setTouched, errors, isInvalid,\n } = useEngineField(form, field.name);\n const [rotate, setRotate] = useState(0);\n\n const refreshHandle = (e: MouseEvent) => {\n e.preventDefault();\n\n if (field.disabled) {\n return;\n }\n\n setRotate((current) => { return current + 180; });\n\n if (!field.source) {\n return;\n }\n\n const uniqueHandle = buildUniqueHandleFromSource({\n sourceValue: form.getFieldValue(field.source),\n values: form.store.state.values ?? {},\n reservedHandles: field.reservedHandles || [],\n reservedFieldValues: field.reservedFieldValues || [],\n maxLength: field.maxLength,\n });\n setValue(uniqueHandle);\n };\n\n return (\n <FieldLayout\n name={field.name}\n label={field.label}\n instructions={field.instructions}\n warning={field.warning}\n required={field.required}\n errors={errors}\n >\n <div className=\"relative\">\n <Input\n value={String(value ?? '')}\n onChange={(event) => { return setValue(event.target.value); }}\n onBlur={setTouched}\n placeholder={field.placeholder}\n disabled={field.disabled}\n aria-invalid={isInvalid}\n className=\"font-mono text-[13px]\"\n />\n <div\n className={cn(\n 'absolute top-1/2 right-0 p-[7px_10px]',\n field.disabled ? 'opacity-30 cursor-not-allowed' : 'opacity-50 hover:opacity-100',\n 'text-[#606d7b]',\n 'transition-all duration-200 ease-in-out',\n 'select-none',\n 'transform',\n 'transition-transform duration-500 ease-in-out',\n '[&>svg]:w-3.5 [&>svg]:h-3.5 [&>svg]:block',\n )}\n style={{ transform: `translateY(-50%) rotate(${rotate}deg)` }}\n onClick={refreshHandle}\n >\n <svg aria-hidden=\"true\" focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z\" />\n </svg>\n </div>\n </div>\n </FieldLayout>\n );\n};\n"],"mappings":";;;;;;;;;;AAwBA,IAAa,eAAe,EAAE,MAAM,YAA8B;CAC9D,MAAM,EACF,OAAO,UAAU,YAAY,QAAQ,cACrC,eAAe,MAAM,MAAM,KAAK;CACpC,MAAM,CAAC,QAAQ,aAAa,SAAS,EAAE;CAEvC,MAAM,iBAAiB,MAAkB;AACrC,IAAE,gBAAgB;AAElB,MAAI,MAAM,SACN;AAGJ,aAAW,YAAY;AAAE,UAAO,UAAU;IAAO;AAEjD,MAAI,CAAC,MAAM,OACP;AAUJ,WAPqB,4BAA4B;GAC7C,aAAa,KAAK,cAAc,MAAM,OAAO;GAC7C,QAAQ,KAAK,MAAM,MAAM,UAAU,EAAE;GACrC,iBAAiB,MAAM,mBAAmB,EAAE;GAC5C,qBAAqB,MAAM,uBAAuB,EAAE;GACpD,WAAW,MAAM;GACpB,CACQ,CAAa;;AAG1B,QACI,oBAAC,aAAD;EACI,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,cAAc,MAAM;EACpB,SAAS,MAAM;EACf,UAAU,MAAM;EACR;YAER,qBAAC,OAAD;GAAK,WAAU;aAAf,CACI,oBAAC,OAAD;IACI,OAAO,OAAO,SAAS,GAAG;IAC1B,WAAW,UAAU;AAAE,YAAO,SAAS,MAAM,OAAO,MAAM;;IAC1D,QAAQ;IACR,aAAa,MAAM;IACnB,UAAU,MAAM;IAChB,gBAAc;IACd,WAAU;IACZ,CAAA,EACF,oBAAC,OAAD;IACI,WAAW,GACP,yCACA,MAAM,WAAW,kCAAkC,gCACnD,kBACA,2CACA,eACA,aACA,iDACA,4CACH;IACD,OAAO,EAAE,WAAW,2BAA2B,OAAO,OAAO;IAC7D,SAAS;cAET,oBAAC,OAAD;KAAK,eAAY;KAAO,WAAU;KAAQ,MAAK;KAAM,OAAM;KAA6B,SAAQ;eAC5F,oBAAC,QAAD;MAAM,MAAK;MAAe,GAAE;MAAwnB,CAAA;KAClpB,CAAA;IACJ,CAAA,CACJ;;EACI,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SchemaFormEngineApi } from '../engine/context';
|
|
2
|
+
type LightswitchFieldProps = {
|
|
3
|
+
form: SchemaFormEngineApi;
|
|
4
|
+
field: {
|
|
5
|
+
name: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
instructions?: string;
|
|
8
|
+
warning?: string;
|
|
9
|
+
required?: boolean;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare const LightswitchField: ({ form, field }: LightswitchFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=LightswitchField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LightswitchField.d.ts","sourceRoot":"","sources":["../../../src/forms/fields/LightswitchField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,KAAK,qBAAqB,GAAG;IACzB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;CACL,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,iBAAiB,qBAAqB,4CAoBtE,CAAC"}
|