@multiplatform.one/frappe-ui 7.4.1 → 7.6.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/dist/cjs/FileBrowser/AttachLibrary.cjs +111 -0
- package/dist/cjs/FileBrowser/AttachLibrary.native.js +115 -0
- package/dist/cjs/FileBrowser/AttachLibrary.native.js.map +1 -0
- package/dist/cjs/FileBrowser/folderTree.cjs +84 -0
- package/dist/cjs/FileBrowser/folderTree.native.js +94 -0
- package/dist/cjs/FileBrowser/folderTree.native.js.map +1 -0
- package/dist/cjs/FileBrowser/index.cjs +690 -0
- package/dist/cjs/FileBrowser/index.native.js +781 -0
- package/dist/cjs/FileBrowser/index.native.js.map +1 -0
- package/dist/cjs/FileBrowser/types.cjs +18 -0
- package/dist/cjs/FileBrowser/types.native.js +21 -0
- package/dist/cjs/FileBrowser/types.native.js.map +1 -0
- package/dist/cjs/FileBrowser/viewPersistence.cjs +55 -0
- package/dist/cjs/FileBrowser/viewPersistence.native.js +60 -0
- package/dist/cjs/FileBrowser/viewPersistence.native.js.map +1 -0
- package/dist/cjs/FormSidebar.cjs +47 -47
- package/dist/cjs/FormSidebar.native.js +48 -50
- package/dist/cjs/FormSidebar.native.js.map +1 -1
- package/dist/cjs/FrappeAssignment.cjs +18 -13
- package/dist/cjs/FrappeAssignment.native.js +19 -13
- package/dist/cjs/FrappeAssignment.native.js.map +1 -1
- package/dist/cjs/FrappeCalendar.cjs +11 -10
- package/dist/cjs/FrappeCalendar.native.js +11 -10
- package/dist/cjs/FrappeCalendar.native.js.map +1 -1
- package/dist/cjs/FrappeChartCard.cjs +6 -15
- package/dist/cjs/FrappeChartCard.native.js +6 -15
- package/dist/cjs/FrappeChartCard.native.js.map +1 -1
- package/dist/cjs/FrappeDashboard.cjs +12 -9
- package/dist/cjs/FrappeDashboard.native.js +12 -9
- package/dist/cjs/FrappeDashboard.native.js.map +1 -1
- package/dist/cjs/FrappeForm.cjs +36 -25
- package/dist/cjs/FrappeForm.native.js +36 -25
- package/dist/cjs/FrappeForm.native.js.map +1 -1
- package/dist/cjs/FrappeGantt.cjs +7 -5
- package/dist/cjs/FrappeGantt.native.js +7 -5
- package/dist/cjs/FrappeGantt.native.js.map +1 -1
- package/dist/cjs/FrappeImageView.cjs +22 -22
- package/dist/cjs/FrappeImageView.native.js +24 -22
- package/dist/cjs/FrappeImageView.native.js.map +1 -1
- package/dist/cjs/FrappeKPICard.cjs +7 -29
- package/dist/cjs/FrappeKPICard.native.js +7 -29
- package/dist/cjs/FrappeKPICard.native.js.map +1 -1
- package/dist/cjs/FrappeKanban.cjs +11 -13
- package/dist/cjs/FrappeKanban.native.js +11 -13
- package/dist/cjs/FrappeKanban.native.js.map +1 -1
- package/dist/cjs/FrappeLikedBy.cjs +5 -5
- package/dist/cjs/FrappeLikedBy.native.js +6 -6
- package/dist/cjs/FrappeLikedBy.native.js.map +1 -1
- package/dist/cjs/FrappeListView.cjs +32 -33
- package/dist/cjs/FrappeListView.native.js +37 -39
- package/dist/cjs/FrappeListView.native.js.map +1 -1
- package/dist/cjs/FrappeReportBuilder.cjs +30 -46
- package/dist/cjs/FrappeReportBuilder.native.js +30 -42
- package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
- package/dist/cjs/FrappeReportView.cjs +5 -5
- package/dist/cjs/FrappeReportView.native.js +5 -5
- package/dist/cjs/FrappeReportView.native.js.map +1 -1
- package/dist/cjs/FrappeTreeView.cjs +9 -6
- package/dist/cjs/FrappeTreeView.native.js +10 -6
- package/dist/cjs/FrappeTreeView.native.js.map +1 -1
- package/dist/cjs/desk/DeskFormPage.cjs +3 -3
- package/dist/cjs/desk/DeskFormPage.native.js +3 -3
- package/dist/cjs/desk/DeskFormPage.native.js.map +1 -1
- package/dist/cjs/desk/DeskListPage.cjs +2 -2
- package/dist/cjs/desk/DeskListPage.native.js +2 -2
- package/dist/cjs/desk/DeskListPage.native.js.map +1 -1
- package/dist/cjs/desk/DeskShell.cjs +58 -38
- package/dist/cjs/desk/DeskShell.native.js +63 -44
- package/dist/cjs/desk/DeskShell.native.js.map +1 -1
- package/dist/cjs/desk/awesomebar.cjs +28 -16
- package/dist/cjs/desk/awesomebar.native.js +28 -16
- package/dist/cjs/desk/awesomebar.native.js.map +1 -1
- package/dist/cjs/fieldRegistry.cjs +64 -3
- package/dist/cjs/fieldRegistry.native.js +69 -3
- package/dist/cjs/fieldRegistry.native.js.map +1 -1
- package/dist/cjs/fields/Check/index.cjs +1 -1
- package/dist/cjs/fields/Check/index.native.js +1 -1
- package/dist/cjs/fields/Check/index.native.js.map +1 -1
- package/dist/cjs/fields/Color/index.cjs +1 -1
- package/dist/cjs/fields/Color/index.native.js +1 -1
- package/dist/cjs/fields/Color/index.native.js.map +1 -1
- package/dist/cjs/fields/Data/index.native.js.map +1 -1
- package/dist/cjs/fields/Date/index.native.js +47 -34
- package/dist/cjs/fields/Date/index.native.js.map +1 -1
- package/dist/cjs/fields/Date/sheetKeyboard.cjs +54 -0
- package/dist/cjs/fields/Date/sheetKeyboard.native.js +57 -0
- package/dist/cjs/fields/Date/sheetKeyboard.native.js.map +1 -0
- package/dist/cjs/fields/DynamicLink.cjs +37 -128
- package/dist/cjs/fields/DynamicLink.native.js +40 -138
- package/dist/cjs/fields/DynamicLink.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload.cjs +233 -50
- package/dist/cjs/fields/FileUpload.native.js +242 -51
- package/dist/cjs/fields/FileUpload.native.js.map +1 -1
- package/dist/cjs/fields/FileUploadField/index.cjs +53 -20
- package/dist/cjs/fields/FileUploadField/index.native.js +56 -20
- package/dist/cjs/fields/FileUploadField/index.native.js.map +1 -1
- package/dist/cjs/fields/HTML/index.cjs +30 -51
- package/dist/cjs/fields/HTML/index.native.js +30 -51
- package/dist/cjs/fields/HTML/index.native.js.map +1 -1
- package/dist/cjs/fields/Icon/index.cjs +73 -0
- package/dist/cjs/fields/Icon/index.native.js +76 -0
- package/dist/cjs/fields/Icon/index.native.js.map +1 -0
- package/dist/cjs/fields/Link.cjs +34 -8
- package/dist/cjs/fields/Link.native.js +35 -9
- package/dist/cjs/fields/Link.native.js.map +1 -1
- package/dist/cjs/fields/LinkTree.cjs +114 -0
- package/dist/cjs/fields/LinkTree.native.js +125 -0
- package/dist/cjs/fields/LinkTree.native.js.map +1 -0
- package/dist/cjs/fields/LongText/index.cjs +6 -4
- package/dist/cjs/fields/LongText/index.native.js +6 -4
- package/dist/cjs/fields/LongText/index.native.js.map +1 -1
- package/dist/cjs/fields/Numeric/index.native.js.map +1 -1
- package/dist/cjs/fields/Password/index.cjs +178 -16
- package/dist/cjs/fields/Password/index.native.js +186 -16
- package/dist/cjs/fields/Password/index.native.js.map +1 -1
- package/dist/cjs/fields/Phone/index.native.js.map +1 -1
- package/dist/cjs/fields/ReadOnly/index.cjs +34 -48
- package/dist/cjs/fields/ReadOnly/index.native.js +34 -46
- package/dist/cjs/fields/ReadOnly/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.cjs +1 -1
- package/dist/cjs/fields/Select/index.native.js +1 -1
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/SmallText/index.cjs +4 -3
- package/dist/cjs/fields/SmallText/index.native.js +4 -3
- package/dist/cjs/fields/SmallText/index.native.js.map +1 -1
- package/dist/cjs/fields/TableMultiSelect.cjs +39 -150
- package/dist/cjs/fields/TableMultiSelect.native.js +44 -171
- package/dist/cjs/fields/TableMultiSelect.native.js.map +1 -1
- package/dist/cjs/fields/TextEditor/index.cjs +26 -293
- package/dist/cjs/index.cjs +9 -0
- package/dist/cjs/index.native.js +9 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/schemaForm/SchemaWizard.cjs +182 -0
- package/dist/cjs/schemaForm/SchemaWizard.native.js +232 -0
- package/dist/cjs/schemaForm/SchemaWizard.native.js.map +1 -0
- package/dist/cjs/schemaForm/index.cjs +1 -1
- package/dist/cjs/schemaForm/index.native.js +1 -1
- package/dist/cjs/schemaForm/index.native.js.map +1 -1
- package/dist/cjs/shared/useKeyboardInset.cjs +48 -0
- package/dist/cjs/shared/useKeyboardInset.native.js +53 -0
- package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -0
- package/dist/esm/FileBrowser/AttachLibrary.mjs +86 -0
- package/dist/esm/FileBrowser/AttachLibrary.mjs.map +1 -0
- package/dist/esm/FileBrowser/AttachLibrary.native.js +87 -0
- package/dist/esm/FileBrowser/AttachLibrary.native.js.map +1 -0
- package/dist/esm/FileBrowser/folderTree.mjs +52 -0
- package/dist/esm/FileBrowser/folderTree.mjs.map +1 -0
- package/dist/esm/FileBrowser/folderTree.native.js +59 -0
- package/dist/esm/FileBrowser/folderTree.native.js.map +1 -0
- package/dist/esm/FileBrowser/index.mjs +665 -0
- package/dist/esm/FileBrowser/index.mjs.map +1 -0
- package/dist/esm/FileBrowser/index.native.js +753 -0
- package/dist/esm/FileBrowser/index.native.js.map +1 -0
- package/dist/esm/FileBrowser/types.mjs +2 -0
- package/dist/esm/FileBrowser/types.mjs.map +1 -0
- package/dist/esm/FileBrowser/types.native.js +2 -0
- package/dist/esm/FileBrowser/types.native.js.map +1 -0
- package/dist/esm/FileBrowser/viewPersistence.mjs +29 -0
- package/dist/esm/FileBrowser/viewPersistence.mjs.map +1 -0
- package/dist/esm/FileBrowser/viewPersistence.native.js +31 -0
- package/dist/esm/FileBrowser/viewPersistence.native.js.map +1 -0
- package/dist/esm/FormSidebar.mjs +46 -46
- package/dist/esm/FormSidebar.mjs.map +1 -1
- package/dist/esm/FormSidebar.native.js +47 -49
- package/dist/esm/FormSidebar.native.js.map +1 -1
- package/dist/esm/FrappeAssignment.mjs +19 -14
- package/dist/esm/FrappeAssignment.mjs.map +1 -1
- package/dist/esm/FrappeAssignment.native.js +20 -14
- package/dist/esm/FrappeAssignment.native.js.map +1 -1
- package/dist/esm/FrappeCalendar.mjs +12 -11
- package/dist/esm/FrappeCalendar.mjs.map +1 -1
- package/dist/esm/FrappeCalendar.native.js +12 -11
- package/dist/esm/FrappeCalendar.native.js.map +1 -1
- package/dist/esm/FrappeChartCard.mjs +7 -16
- package/dist/esm/FrappeChartCard.mjs.map +1 -1
- package/dist/esm/FrappeChartCard.native.js +7 -16
- package/dist/esm/FrappeChartCard.native.js.map +1 -1
- package/dist/esm/FrappeDashboard.mjs +12 -9
- package/dist/esm/FrappeDashboard.mjs.map +1 -1
- package/dist/esm/FrappeDashboard.native.js +12 -9
- package/dist/esm/FrappeDashboard.native.js.map +1 -1
- package/dist/esm/FrappeForm.mjs +35 -24
- package/dist/esm/FrappeForm.mjs.map +1 -1
- package/dist/esm/FrappeForm.native.js +35 -24
- package/dist/esm/FrappeForm.native.js.map +1 -1
- package/dist/esm/FrappeGantt.mjs +7 -5
- package/dist/esm/FrappeGantt.mjs.map +1 -1
- package/dist/esm/FrappeGantt.native.js +7 -5
- package/dist/esm/FrappeGantt.native.js.map +1 -1
- package/dist/esm/FrappeImageView.mjs +23 -23
- package/dist/esm/FrappeImageView.mjs.map +1 -1
- package/dist/esm/FrappeImageView.native.js +25 -23
- package/dist/esm/FrappeImageView.native.js.map +1 -1
- package/dist/esm/FrappeKPICard.mjs +7 -29
- package/dist/esm/FrappeKPICard.mjs.map +1 -1
- package/dist/esm/FrappeKPICard.native.js +7 -29
- package/dist/esm/FrappeKPICard.native.js.map +1 -1
- package/dist/esm/FrappeKanban.mjs +13 -15
- package/dist/esm/FrappeKanban.mjs.map +1 -1
- package/dist/esm/FrappeKanban.native.js +13 -15
- package/dist/esm/FrappeKanban.native.js.map +1 -1
- package/dist/esm/FrappeLikedBy.mjs +6 -6
- package/dist/esm/FrappeLikedBy.mjs.map +1 -1
- package/dist/esm/FrappeLikedBy.native.js +7 -7
- package/dist/esm/FrappeLikedBy.native.js.map +1 -1
- package/dist/esm/FrappeListView.mjs +33 -34
- package/dist/esm/FrappeListView.mjs.map +1 -1
- package/dist/esm/FrappeListView.native.js +38 -40
- package/dist/esm/FrappeListView.native.js.map +1 -1
- package/dist/esm/FrappeReportBuilder.mjs +27 -43
- package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
- package/dist/esm/FrappeReportBuilder.native.js +27 -39
- package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
- package/dist/esm/FrappeReportView.mjs +6 -6
- package/dist/esm/FrappeReportView.mjs.map +1 -1
- package/dist/esm/FrappeReportView.native.js +6 -6
- package/dist/esm/FrappeReportView.native.js.map +1 -1
- package/dist/esm/FrappeTreeView.mjs +9 -6
- package/dist/esm/FrappeTreeView.mjs.map +1 -1
- package/dist/esm/FrappeTreeView.native.js +10 -6
- package/dist/esm/FrappeTreeView.native.js.map +1 -1
- package/dist/esm/desk/DeskFormPage.mjs +3 -3
- package/dist/esm/desk/DeskFormPage.mjs.map +1 -1
- package/dist/esm/desk/DeskFormPage.native.js +3 -3
- package/dist/esm/desk/DeskFormPage.native.js.map +1 -1
- package/dist/esm/desk/DeskListPage.mjs +2 -2
- package/dist/esm/desk/DeskListPage.mjs.map +1 -1
- package/dist/esm/desk/DeskListPage.native.js +2 -2
- package/dist/esm/desk/DeskListPage.native.js.map +1 -1
- package/dist/esm/desk/DeskShell.mjs +48 -28
- package/dist/esm/desk/DeskShell.mjs.map +1 -1
- package/dist/esm/desk/DeskShell.native.js +52 -33
- package/dist/esm/desk/DeskShell.native.js.map +1 -1
- package/dist/esm/desk/awesomebar.mjs +29 -17
- package/dist/esm/desk/awesomebar.mjs.map +1 -1
- package/dist/esm/desk/awesomebar.native.js +29 -17
- package/dist/esm/desk/awesomebar.native.js.map +1 -1
- package/dist/esm/fieldRegistry.mjs +65 -4
- package/dist/esm/fieldRegistry.mjs.map +1 -1
- package/dist/esm/fieldRegistry.native.js +70 -4
- package/dist/esm/fieldRegistry.native.js.map +1 -1
- package/dist/esm/fields/Check/index.mjs +1 -1
- package/dist/esm/fields/Check/index.mjs.map +1 -1
- package/dist/esm/fields/Check/index.native.js +1 -1
- package/dist/esm/fields/Check/index.native.js.map +1 -1
- package/dist/esm/fields/Color/index.mjs +1 -1
- package/dist/esm/fields/Color/index.mjs.map +1 -1
- package/dist/esm/fields/Color/index.native.js +1 -1
- package/dist/esm/fields/Color/index.native.js.map +1 -1
- package/dist/esm/fields/Data/index.mjs.map +1 -1
- package/dist/esm/fields/Data/index.native.js.map +1 -1
- package/dist/esm/fields/Date/index.native.js +46 -33
- package/dist/esm/fields/Date/index.native.js.map +1 -1
- package/dist/esm/fields/Date/sheetKeyboard.mjs +21 -0
- package/dist/esm/fields/Date/sheetKeyboard.mjs.map +1 -0
- package/dist/esm/fields/Date/sheetKeyboard.native.js +21 -0
- package/dist/esm/fields/Date/sheetKeyboard.native.js.map +1 -0
- package/dist/esm/fields/DynamicLink.mjs +37 -128
- package/dist/esm/fields/DynamicLink.mjs.map +1 -1
- package/dist/esm/fields/DynamicLink.native.js +40 -138
- package/dist/esm/fields/DynamicLink.native.js.map +1 -1
- package/dist/esm/fields/FileUpload.mjs +234 -51
- package/dist/esm/fields/FileUpload.mjs.map +1 -1
- package/dist/esm/fields/FileUpload.native.js +243 -52
- package/dist/esm/fields/FileUpload.native.js.map +1 -1
- package/dist/esm/fields/FileUploadField/index.mjs +55 -22
- package/dist/esm/fields/FileUploadField/index.mjs.map +1 -1
- package/dist/esm/fields/FileUploadField/index.native.js +58 -22
- package/dist/esm/fields/FileUploadField/index.native.js.map +1 -1
- package/dist/esm/fields/HTML/index.mjs +33 -54
- package/dist/esm/fields/HTML/index.mjs.map +1 -1
- package/dist/esm/fields/HTML/index.native.js +33 -54
- package/dist/esm/fields/HTML/index.native.js.map +1 -1
- package/dist/esm/fields/Icon/index.mjs +48 -0
- package/dist/esm/fields/Icon/index.mjs.map +1 -0
- package/dist/esm/fields/Icon/index.native.js +48 -0
- package/dist/esm/fields/Icon/index.native.js.map +1 -0
- package/dist/esm/fields/Link.mjs +35 -9
- package/dist/esm/fields/Link.mjs.map +1 -1
- package/dist/esm/fields/Link.native.js +36 -10
- package/dist/esm/fields/Link.native.js.map +1 -1
- package/dist/esm/fields/LinkTree.mjs +89 -0
- package/dist/esm/fields/LinkTree.mjs.map +1 -0
- package/dist/esm/fields/LinkTree.native.js +97 -0
- package/dist/esm/fields/LinkTree.native.js.map +1 -0
- package/dist/esm/fields/LongText/index.mjs +7 -5
- package/dist/esm/fields/LongText/index.mjs.map +1 -1
- package/dist/esm/fields/LongText/index.native.js +7 -5
- package/dist/esm/fields/LongText/index.native.js.map +1 -1
- package/dist/esm/fields/Numeric/index.mjs.map +1 -1
- package/dist/esm/fields/Numeric/index.native.js.map +1 -1
- package/dist/esm/fields/Password/index.mjs +180 -18
- package/dist/esm/fields/Password/index.mjs.map +1 -1
- package/dist/esm/fields/Password/index.native.js +188 -18
- package/dist/esm/fields/Password/index.native.js.map +1 -1
- package/dist/esm/fields/Phone/index.mjs.map +1 -1
- package/dist/esm/fields/Phone/index.native.js.map +1 -1
- package/dist/esm/fields/ReadOnly/index.mjs +36 -50
- package/dist/esm/fields/ReadOnly/index.mjs.map +1 -1
- package/dist/esm/fields/ReadOnly/index.native.js +36 -48
- package/dist/esm/fields/ReadOnly/index.native.js.map +1 -1
- package/dist/esm/fields/Select/index.mjs +1 -1
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +1 -1
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/SmallText/index.mjs +5 -4
- package/dist/esm/fields/SmallText/index.mjs.map +1 -1
- package/dist/esm/fields/SmallText/index.native.js +5 -4
- package/dist/esm/fields/SmallText/index.native.js.map +1 -1
- package/dist/esm/fields/TableMultiSelect.mjs +41 -152
- package/dist/esm/fields/TableMultiSelect.mjs.map +1 -1
- package/dist/esm/fields/TableMultiSelect.native.js +46 -173
- package/dist/esm/fields/TableMultiSelect.native.js.map +1 -1
- package/dist/esm/fields/TextEditor/index.mjs +28 -284
- package/dist/esm/fields/TextEditor/index.mjs.map +1 -1
- package/dist/esm/index.mjs +5 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +5 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/schemaForm/SchemaWizard.mjs +156 -0
- package/dist/esm/schemaForm/SchemaWizard.mjs.map +1 -0
- package/dist/esm/schemaForm/SchemaWizard.native.js +203 -0
- package/dist/esm/schemaForm/SchemaWizard.native.js.map +1 -0
- package/dist/esm/schemaForm/index.mjs +1 -1
- package/dist/esm/schemaForm/index.mjs.map +1 -1
- package/dist/esm/schemaForm/index.native.js +1 -1
- package/dist/esm/schemaForm/index.native.js.map +1 -1
- package/dist/esm/shared/useKeyboardInset.mjs +23 -0
- package/dist/esm/shared/useKeyboardInset.mjs.map +1 -0
- package/dist/esm/shared/useKeyboardInset.native.js +25 -0
- package/dist/esm/shared/useKeyboardInset.native.js.map +1 -0
- package/dist/jsx/FileBrowser/AttachLibrary.mjs +86 -0
- package/dist/jsx/FileBrowser/AttachLibrary.mjs.map +1 -0
- package/dist/jsx/FileBrowser/AttachLibrary.native.js +115 -0
- package/dist/jsx/FileBrowser/AttachLibrary.native.js.map +1 -0
- package/dist/jsx/FileBrowser/folderTree.mjs +52 -0
- package/dist/jsx/FileBrowser/folderTree.mjs.map +1 -0
- package/dist/jsx/FileBrowser/folderTree.native.js +94 -0
- package/dist/jsx/FileBrowser/folderTree.native.js.map +1 -0
- package/dist/jsx/FileBrowser/index.mjs +665 -0
- package/dist/jsx/FileBrowser/index.mjs.map +1 -0
- package/dist/jsx/FileBrowser/index.native.js +781 -0
- package/dist/jsx/FileBrowser/index.native.js.map +1 -0
- package/dist/jsx/FileBrowser/types.mjs +2 -0
- package/dist/jsx/FileBrowser/types.mjs.map +1 -0
- package/dist/jsx/FileBrowser/types.native.js +21 -0
- package/dist/jsx/FileBrowser/types.native.js.map +1 -0
- package/dist/jsx/FileBrowser/viewPersistence.mjs +29 -0
- package/dist/jsx/FileBrowser/viewPersistence.mjs.map +1 -0
- package/dist/jsx/FileBrowser/viewPersistence.native.js +60 -0
- package/dist/jsx/FileBrowser/viewPersistence.native.js.map +1 -0
- package/dist/jsx/FormSidebar.mjs +46 -46
- package/dist/jsx/FormSidebar.mjs.map +1 -1
- package/dist/jsx/FormSidebar.native.js +48 -50
- package/dist/jsx/FormSidebar.native.js.map +1 -1
- package/dist/jsx/FrappeAssignment.mjs +19 -14
- package/dist/jsx/FrappeAssignment.mjs.map +1 -1
- package/dist/jsx/FrappeAssignment.native.js +19 -13
- package/dist/jsx/FrappeAssignment.native.js.map +1 -1
- package/dist/jsx/FrappeCalendar.mjs +12 -11
- package/dist/jsx/FrappeCalendar.mjs.map +1 -1
- package/dist/jsx/FrappeCalendar.native.js +11 -10
- package/dist/jsx/FrappeCalendar.native.js.map +1 -1
- package/dist/jsx/FrappeChartCard.mjs +7 -16
- package/dist/jsx/FrappeChartCard.mjs.map +1 -1
- package/dist/jsx/FrappeChartCard.native.js +6 -15
- package/dist/jsx/FrappeChartCard.native.js.map +1 -1
- package/dist/jsx/FrappeDashboard.mjs +12 -9
- package/dist/jsx/FrappeDashboard.mjs.map +1 -1
- package/dist/jsx/FrappeDashboard.native.js +12 -9
- package/dist/jsx/FrappeDashboard.native.js.map +1 -1
- package/dist/jsx/FrappeForm.mjs +35 -24
- package/dist/jsx/FrappeForm.mjs.map +1 -1
- package/dist/jsx/FrappeForm.native.js +36 -25
- package/dist/jsx/FrappeForm.native.js.map +1 -1
- package/dist/jsx/FrappeGantt.mjs +7 -5
- package/dist/jsx/FrappeGantt.mjs.map +1 -1
- package/dist/jsx/FrappeGantt.native.js +7 -5
- package/dist/jsx/FrappeGantt.native.js.map +1 -1
- package/dist/jsx/FrappeImageView.mjs +23 -23
- package/dist/jsx/FrappeImageView.mjs.map +1 -1
- package/dist/jsx/FrappeImageView.native.js +24 -22
- package/dist/jsx/FrappeImageView.native.js.map +1 -1
- package/dist/jsx/FrappeKPICard.mjs +7 -29
- package/dist/jsx/FrappeKPICard.mjs.map +1 -1
- package/dist/jsx/FrappeKPICard.native.js +7 -29
- package/dist/jsx/FrappeKPICard.native.js.map +1 -1
- package/dist/jsx/FrappeKanban.mjs +13 -15
- package/dist/jsx/FrappeKanban.mjs.map +1 -1
- package/dist/jsx/FrappeKanban.native.js +11 -13
- package/dist/jsx/FrappeKanban.native.js.map +1 -1
- package/dist/jsx/FrappeLikedBy.mjs +6 -6
- package/dist/jsx/FrappeLikedBy.mjs.map +1 -1
- package/dist/jsx/FrappeLikedBy.native.js +6 -6
- package/dist/jsx/FrappeLikedBy.native.js.map +1 -1
- package/dist/jsx/FrappeListView.mjs +33 -34
- package/dist/jsx/FrappeListView.mjs.map +1 -1
- package/dist/jsx/FrappeListView.native.js +37 -39
- package/dist/jsx/FrappeListView.native.js.map +1 -1
- package/dist/jsx/FrappeReportBuilder.mjs +27 -43
- package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
- package/dist/jsx/FrappeReportBuilder.native.js +30 -42
- package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
- package/dist/jsx/FrappeReportView.mjs +6 -6
- package/dist/jsx/FrappeReportView.mjs.map +1 -1
- package/dist/jsx/FrappeReportView.native.js +5 -5
- package/dist/jsx/FrappeReportView.native.js.map +1 -1
- package/dist/jsx/FrappeTreeView.mjs +9 -6
- package/dist/jsx/FrappeTreeView.mjs.map +1 -1
- package/dist/jsx/FrappeTreeView.native.js +10 -6
- package/dist/jsx/FrappeTreeView.native.js.map +1 -1
- package/dist/jsx/desk/DeskFormPage.mjs +3 -3
- package/dist/jsx/desk/DeskFormPage.mjs.map +1 -1
- package/dist/jsx/desk/DeskFormPage.native.js +3 -3
- package/dist/jsx/desk/DeskFormPage.native.js.map +1 -1
- package/dist/jsx/desk/DeskListPage.mjs +2 -2
- package/dist/jsx/desk/DeskListPage.mjs.map +1 -1
- package/dist/jsx/desk/DeskListPage.native.js +2 -2
- package/dist/jsx/desk/DeskListPage.native.js.map +1 -1
- package/dist/jsx/desk/DeskShell.mjs +48 -28
- package/dist/jsx/desk/DeskShell.mjs.map +1 -1
- package/dist/jsx/desk/DeskShell.native.js +63 -44
- package/dist/jsx/desk/DeskShell.native.js.map +1 -1
- package/dist/jsx/desk/awesomebar.mjs +29 -17
- package/dist/jsx/desk/awesomebar.mjs.map +1 -1
- package/dist/jsx/desk/awesomebar.native.js +28 -16
- package/dist/jsx/desk/awesomebar.native.js.map +1 -1
- package/dist/jsx/fieldRegistry.mjs +65 -4
- package/dist/jsx/fieldRegistry.mjs.map +1 -1
- package/dist/jsx/fieldRegistry.native.js +69 -3
- package/dist/jsx/fieldRegistry.native.js.map +1 -1
- package/dist/jsx/fields/Check/index.mjs +1 -1
- package/dist/jsx/fields/Check/index.mjs.map +1 -1
- package/dist/jsx/fields/Check/index.native.js +1 -1
- package/dist/jsx/fields/Check/index.native.js.map +1 -1
- package/dist/jsx/fields/Color/index.mjs +1 -1
- package/dist/jsx/fields/Color/index.mjs.map +1 -1
- package/dist/jsx/fields/Color/index.native.js +1 -1
- package/dist/jsx/fields/Color/index.native.js.map +1 -1
- package/dist/jsx/fields/Data/index.mjs.map +1 -1
- package/dist/jsx/fields/Data/index.native.js.map +1 -1
- package/dist/jsx/fields/Date/index.native.js +47 -34
- package/dist/jsx/fields/Date/index.native.js.map +1 -1
- package/dist/jsx/fields/Date/sheetKeyboard.mjs +21 -0
- package/dist/jsx/fields/Date/sheetKeyboard.mjs.map +1 -0
- package/dist/jsx/fields/Date/sheetKeyboard.native.js +57 -0
- package/dist/jsx/fields/Date/sheetKeyboard.native.js.map +1 -0
- package/dist/jsx/fields/DynamicLink.mjs +37 -128
- package/dist/jsx/fields/DynamicLink.mjs.map +1 -1
- package/dist/jsx/fields/DynamicLink.native.js +40 -138
- package/dist/jsx/fields/DynamicLink.native.js.map +1 -1
- package/dist/jsx/fields/FileUpload.mjs +234 -51
- package/dist/jsx/fields/FileUpload.mjs.map +1 -1
- package/dist/jsx/fields/FileUpload.native.js +242 -51
- package/dist/jsx/fields/FileUpload.native.js.map +1 -1
- package/dist/jsx/fields/FileUploadField/index.mjs +55 -22
- package/dist/jsx/fields/FileUploadField/index.mjs.map +1 -1
- package/dist/jsx/fields/FileUploadField/index.native.js +56 -20
- package/dist/jsx/fields/FileUploadField/index.native.js.map +1 -1
- package/dist/jsx/fields/HTML/index.mjs +33 -54
- package/dist/jsx/fields/HTML/index.mjs.map +1 -1
- package/dist/jsx/fields/HTML/index.native.js +30 -51
- package/dist/jsx/fields/HTML/index.native.js.map +1 -1
- package/dist/jsx/fields/Icon/index.mjs +48 -0
- package/dist/jsx/fields/Icon/index.mjs.map +1 -0
- package/dist/jsx/fields/Icon/index.native.js +76 -0
- package/dist/jsx/fields/Icon/index.native.js.map +1 -0
- package/dist/jsx/fields/Link.mjs +35 -9
- package/dist/jsx/fields/Link.mjs.map +1 -1
- package/dist/jsx/fields/Link.native.js +35 -9
- package/dist/jsx/fields/Link.native.js.map +1 -1
- package/dist/jsx/fields/LinkTree.mjs +89 -0
- package/dist/jsx/fields/LinkTree.mjs.map +1 -0
- package/dist/jsx/fields/LinkTree.native.js +125 -0
- package/dist/jsx/fields/LinkTree.native.js.map +1 -0
- package/dist/jsx/fields/LongText/index.mjs +7 -5
- package/dist/jsx/fields/LongText/index.mjs.map +1 -1
- package/dist/jsx/fields/LongText/index.native.js +6 -4
- package/dist/jsx/fields/LongText/index.native.js.map +1 -1
- package/dist/jsx/fields/Numeric/index.mjs.map +1 -1
- package/dist/jsx/fields/Numeric/index.native.js.map +1 -1
- package/dist/jsx/fields/Password/index.mjs +180 -18
- package/dist/jsx/fields/Password/index.mjs.map +1 -1
- package/dist/jsx/fields/Password/index.native.js +186 -16
- package/dist/jsx/fields/Password/index.native.js.map +1 -1
- package/dist/jsx/fields/Phone/index.mjs.map +1 -1
- package/dist/jsx/fields/Phone/index.native.js.map +1 -1
- package/dist/jsx/fields/ReadOnly/index.mjs +36 -50
- package/dist/jsx/fields/ReadOnly/index.mjs.map +1 -1
- package/dist/jsx/fields/ReadOnly/index.native.js +34 -46
- package/dist/jsx/fields/ReadOnly/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +1 -1
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +1 -1
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/fields/SmallText/index.mjs +5 -4
- package/dist/jsx/fields/SmallText/index.mjs.map +1 -1
- package/dist/jsx/fields/SmallText/index.native.js +4 -3
- package/dist/jsx/fields/SmallText/index.native.js.map +1 -1
- package/dist/jsx/fields/TableMultiSelect.mjs +41 -152
- package/dist/jsx/fields/TableMultiSelect.mjs.map +1 -1
- package/dist/jsx/fields/TableMultiSelect.native.js +44 -171
- package/dist/jsx/fields/TableMultiSelect.native.js.map +1 -1
- package/dist/jsx/fields/TextEditor/index.mjs +28 -284
- package/dist/jsx/fields/TextEditor/index.mjs.map +1 -1
- package/dist/jsx/index.js +5 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +5 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +9 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/schemaForm/SchemaWizard.mjs +156 -0
- package/dist/jsx/schemaForm/SchemaWizard.mjs.map +1 -0
- package/dist/jsx/schemaForm/SchemaWizard.native.js +232 -0
- package/dist/jsx/schemaForm/SchemaWizard.native.js.map +1 -0
- package/dist/jsx/schemaForm/index.mjs +1 -1
- package/dist/jsx/schemaForm/index.mjs.map +1 -1
- package/dist/jsx/schemaForm/index.native.js +1 -1
- package/dist/jsx/schemaForm/index.native.js.map +1 -1
- package/dist/jsx/shared/useKeyboardInset.mjs +23 -0
- package/dist/jsx/shared/useKeyboardInset.mjs.map +1 -0
- package/dist/jsx/shared/useKeyboardInset.native.js +53 -0
- package/dist/jsx/shared/useKeyboardInset.native.js.map +1 -0
- package/package.json +16 -16
- package/src/FileBrowser/AttachLibrary.tsx +90 -0
- package/src/FileBrowser/FileBrowser.spec.tsx +273 -0
- package/src/FileBrowser/FileBrowser.stories.tsx +97 -0
- package/src/FileBrowser/folderTree.ts +62 -0
- package/src/FileBrowser/index.tsx +765 -0
- package/src/FileBrowser/types.ts +61 -0
- package/src/FileBrowser/viewPersistence.ts +37 -0
- package/src/FormSidebar.stories.tsx +82 -25
- package/src/FormSidebar.tsx +51 -37
- package/src/FrappeAssignment.stories.tsx +158 -12
- package/src/FrappeAssignment.tsx +11 -9
- package/src/FrappeCalendar.stories.tsx +85 -9
- package/src/FrappeCalendar.tsx +9 -9
- package/src/FrappeChartCard.stories.tsx +107 -14
- package/src/FrappeChartCard.tsx +5 -12
- package/src/FrappeDashboard.stories.tsx +79 -9
- package/src/FrappeDashboard.tsx +8 -8
- package/src/FrappeForm.tsx +36 -24
- package/src/FrappeGantt.stories.tsx +73 -4
- package/src/FrappeGantt.tsx +7 -4
- package/src/FrappeImageView.tsx +23 -22
- package/src/FrappeKPICard.stories.tsx +110 -10
- package/src/FrappeKPICard.tsx +6 -22
- package/src/FrappeKanban.stories.tsx +115 -9
- package/src/FrappeKanban.tsx +10 -9
- package/src/FrappeLikedBy.stories.tsx +82 -10
- package/src/FrappeLikedBy.tsx +6 -6
- package/src/FrappeList.stories.tsx +85 -8
- package/src/FrappeListView.spec.tsx +59 -0
- package/src/FrappeListView.tsx +27 -30
- package/src/FrappeProvider.stories.tsx +53 -2
- package/src/FrappeReportBuilder.tsx +21 -34
- package/src/FrappeReportView.tsx +4 -4
- package/src/FrappeTreeView.tsx +8 -4
- package/src/components/attachments.stories.tsx +79 -7
- package/src/components/tags.stories.tsx +131 -6
- package/src/components/timeline.stories.tsx +128 -7
- package/src/desk/Awesomebar.stories.tsx +3 -2
- package/src/desk/DeskFormPage.tsx +3 -2
- package/src/desk/DeskListPage.tsx +2 -1
- package/src/desk/DeskShell.stories.tsx +21 -2
- package/src/desk/DeskShell.tsx +56 -39
- package/src/desk/awesomebar.tsx +33 -22
- package/src/fieldRegistry.spec.tsx +131 -1
- package/src/fieldRegistry.ts +100 -4
- package/src/fields/Barcode/Barcode.stories.tsx +32 -0
- package/src/fields/Check/Check.spec.tsx +27 -0
- package/src/fields/Check/Check.stories.tsx +58 -0
- package/src/fields/Check/index.tsx +7 -1
- package/src/fields/CodeEditor/CodeEditor.stories.tsx +32 -0
- package/src/fields/Color/Color.spec.tsx +21 -0
- package/src/fields/Color/Color.stories.tsx +33 -0
- package/src/fields/Color/index.tsx +7 -1
- package/src/fields/Data/Data.spec.tsx +26 -0
- package/src/fields/Data/Data.stories.tsx +58 -0
- package/src/fields/Data/index.tsx +6 -0
- package/src/fields/Date/Date.stories.tsx +32 -0
- package/src/fields/Date/Datetime.stories.tsx +32 -0
- package/src/fields/Date/index.native.tsx +45 -33
- package/src/fields/Date/nativePresentation.spec.tsx +20 -0
- package/src/fields/Date/sheetKeyboard.spec.ts +51 -0
- package/src/fields/Date/sheetKeyboard.ts +37 -0
- package/src/fields/DateRange/DateRange.stories.tsx +41 -0
- package/src/fields/Duration/Duration.stories.tsx +32 -0
- package/src/fields/DynamicLink.stories.tsx +115 -14
- package/src/fields/DynamicLink.tsx +43 -125
- package/src/fields/FileUpload.tsx +273 -54
- package/src/fields/FileUploadField/FileUploadField.stories.tsx +87 -0
- package/src/fields/FileUploadField/index.tsx +73 -25
- package/src/fields/FrappeFileUpload.stories.tsx +32 -0
- package/src/fields/Geolocation/Geolocation.stories.tsx +33 -0
- package/src/fields/HTML/Html.stories.tsx +59 -0
- package/src/fields/HTML/index.tsx +25 -34
- package/src/fields/Heading/Heading.stories.tsx +63 -2
- package/src/fields/Icon/index.tsx +90 -0
- package/src/fields/Link.spec.tsx +10 -0
- package/src/fields/Link.stories.tsx +161 -2
- package/src/fields/Link.tree.spec.tsx +111 -0
- package/src/fields/Link.tsx +36 -19
- package/src/fields/LinkTree.tsx +102 -0
- package/src/fields/LongText/LongText.stories.tsx +66 -0
- package/src/fields/LongText/index.tsx +13 -5
- package/src/fields/MarkdownEditor/MarkdownEditor.stories.tsx +36 -0
- package/src/fields/MentionInput/MentionInput.stories.tsx +44 -0
- package/src/fields/Numeric/Numeric.spec.tsx +7 -0
- package/src/fields/Numeric/Numeric.stories.tsx +32 -0
- package/src/fields/Numeric/index.tsx +7 -0
- package/src/fields/OTPInput/OTPInput.stories.tsx +33 -0
- package/src/fields/Password/Password.spec.tsx +119 -0
- package/src/fields/Password/Password.stories.tsx +58 -0
- package/src/fields/Password/index.tsx +234 -23
- package/src/fields/Phone/Phone.stories.tsx +33 -0
- package/src/fields/Phone/index.tsx +4 -0
- package/src/fields/Progress/Progress.stories.tsx +32 -0
- package/src/fields/RadioGroup/RadioGroup.stories.tsx +37 -0
- package/src/fields/Rating/Rating.stories.tsx +33 -0
- package/src/fields/ReadOnly/ReadOnly.stories.tsx +54 -0
- package/src/fields/ReadOnly/index.tsx +41 -55
- package/src/fields/Select/Select.stories.tsx +43 -0
- package/src/fields/Select/index.tsx +5 -1
- package/src/fields/Signature/Signature.stories.tsx +32 -0
- package/src/fields/Slider/Slider.stories.tsx +32 -0
- package/src/fields/SmallText/SmallText.stories.tsx +58 -0
- package/src/fields/SmallText/index.tsx +9 -4
- package/src/fields/Switch/Switch.stories.tsx +33 -0
- package/src/fields/TableMultiSelect.spec.tsx +26 -5
- package/src/fields/TableMultiSelect.stories.tsx +90 -14
- package/src/fields/TableMultiSelect.tsx +55 -177
- package/src/fields/TextEditor/TextEditor.spec.tsx +5 -3
- package/src/fields/TextEditor/TextEditor.stories.tsx +66 -0
- package/src/fields/TextEditor/index.tsx +32 -299
- package/src/fields/TimePicker/TimePicker.stories.tsx +32 -0
- package/src/fields/ToggleGroup/ToggleGroup.stories.tsx +35 -0
- package/src/frappeRemainder.designLaw.spec.ts +176 -0
- package/src/frappeViews.designLaw.spec.ts +94 -0
- package/src/index.ts +18 -1
- package/src/schemaForm/SchemaForm.spec.tsx +154 -0
- package/src/schemaForm/SchemaForm.stories.tsx +27 -0
- package/src/schemaForm/SchemaWizard.spec.tsx +134 -0
- package/src/schemaForm/SchemaWizard.stories.tsx +94 -0
- package/src/schemaForm/SchemaWizard.tsx +192 -0
- package/src/schemaForm/index.tsx +3 -4
- package/src/shared/useKeyboardInset.ts +45 -0
- package/types/FileBrowser/AttachLibrary.d.ts +13 -0
- package/types/FileBrowser/AttachLibrary.d.ts.map +1 -0
- package/types/FileBrowser/folderTree.d.ts +15 -0
- package/types/FileBrowser/folderTree.d.ts.map +1 -0
- package/types/FileBrowser/index.d.ts +4 -0
- package/types/FileBrowser/index.d.ts.map +1 -0
- package/types/FileBrowser/types.d.ts +59 -0
- package/types/FileBrowser/types.d.ts.map +1 -0
- package/types/FileBrowser/viewPersistence.d.ts +4 -0
- package/types/FileBrowser/viewPersistence.d.ts.map +1 -0
- package/types/FormSidebar.d.ts.map +1 -1
- package/types/FrappeAssignment.d.ts.map +1 -1
- package/types/FrappeChartCard.d.ts.map +1 -1
- package/types/FrappeDashboard.d.ts.map +1 -1
- package/types/FrappeForm.d.ts.map +1 -1
- package/types/FrappeGantt.d.ts.map +1 -1
- package/types/FrappeImageView.d.ts.map +1 -1
- package/types/FrappeKPICard.d.ts.map +1 -1
- package/types/FrappeKanban.d.ts.map +1 -1
- package/types/FrappeListView.d.ts.map +1 -1
- package/types/FrappeReportBuilder.d.ts.map +1 -1
- package/types/FrappeReportView.d.ts.map +1 -1
- package/types/FrappeTreeView.d.ts.map +1 -1
- package/types/desk/DeskFormPage.d.ts.map +1 -1
- package/types/desk/DeskListPage.d.ts.map +1 -1
- package/types/desk/DeskShell.d.ts +4 -2
- package/types/desk/DeskShell.d.ts.map +1 -1
- package/types/desk/awesomebar.d.ts.map +1 -1
- package/types/fieldRegistry.d.ts.map +1 -1
- package/types/fields/Check/index.d.ts +6 -0
- package/types/fields/Check/index.d.ts.map +1 -1
- package/types/fields/Color/index.d.ts +6 -0
- package/types/fields/Color/index.d.ts.map +1 -1
- package/types/fields/Data/index.d.ts +6 -0
- package/types/fields/Data/index.d.ts.map +1 -1
- package/types/fields/Date/index.native.d.ts +5 -0
- package/types/fields/Date/index.native.d.ts.map +1 -1
- package/types/fields/Date/sheetKeyboard.d.ts +19 -0
- package/types/fields/Date/sheetKeyboard.d.ts.map +1 -0
- package/types/fields/DynamicLink.d.ts.map +1 -1
- package/types/fields/FileUpload.d.ts +11 -1
- package/types/fields/FileUpload.d.ts.map +1 -1
- package/types/fields/FileUploadField/index.d.ts +8 -1
- package/types/fields/FileUploadField/index.d.ts.map +1 -1
- package/types/fields/HTML/index.d.ts.map +1 -1
- package/types/fields/Icon/index.d.ts +15 -0
- package/types/fields/Icon/index.d.ts.map +1 -0
- package/types/fields/Link.d.ts +6 -1
- package/types/fields/Link.d.ts.map +1 -1
- package/types/fields/LinkTree.d.ts +3 -0
- package/types/fields/LinkTree.d.ts.map +1 -0
- package/types/fields/LongText/index.d.ts +4 -0
- package/types/fields/LongText/index.d.ts.map +1 -1
- package/types/fields/Numeric/index.d.ts +7 -0
- package/types/fields/Numeric/index.d.ts.map +1 -1
- package/types/fields/Password/index.d.ts +1 -0
- package/types/fields/Password/index.d.ts.map +1 -1
- package/types/fields/Phone/index.d.ts +4 -0
- package/types/fields/Phone/index.d.ts.map +1 -1
- package/types/fields/ReadOnly/index.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts +4 -0
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/fields/SmallText/index.d.ts +4 -0
- package/types/fields/SmallText/index.d.ts.map +1 -1
- package/types/fields/TableMultiSelect.d.ts +2 -1
- package/types/fields/TableMultiSelect.d.ts.map +1 -1
- package/types/fields/TextEditor/index.d.ts +2 -3
- package/types/fields/TextEditor/index.d.ts.map +1 -1
- package/types/index.d.ts +7 -1
- package/types/index.d.ts.map +1 -1
- package/types/schemaForm/SchemaWizard.d.ts +20 -0
- package/types/schemaForm/SchemaWizard.d.ts.map +1 -0
- package/types/schemaForm/index.d.ts.map +1 -1
- package/types/shared/useKeyboardInset.d.ts +18 -0
- package/types/shared/useKeyboardInset.d.ts.map +1 -0
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
* asserted by inspecting the element they produce (the adapters under test
|
|
9
9
|
* are plain functions without hooks, so calling them directly is safe).
|
|
10
10
|
*/
|
|
11
|
-
import { Combobox, ImageField } from "@multiplatform.one/forms";
|
|
11
|
+
import { Button, Combobox, ImageField } from "@multiplatform.one/forms";
|
|
12
|
+
import type { FrappeFieldType } from "@multiplatform.one/frappe";
|
|
12
13
|
import type React from "react";
|
|
13
14
|
import { describe, expect, it } from "vitest";
|
|
14
15
|
import {
|
|
@@ -18,6 +19,7 @@ import {
|
|
|
18
19
|
type ChildTableFieldDef,
|
|
19
20
|
type FieldRenderProps,
|
|
20
21
|
} from "./fieldRegistry";
|
|
22
|
+
import { Icon } from "./fields/Icon";
|
|
21
23
|
import { Link } from "./fields/Link";
|
|
22
24
|
import { Rating } from "./fields/Rating";
|
|
23
25
|
|
|
@@ -81,6 +83,16 @@ describe("fieldtypeToTableField (cell context)", () => {
|
|
|
81
83
|
expect(element.props.compact).toBe(true);
|
|
82
84
|
});
|
|
83
85
|
|
|
86
|
+
it("maps Icon to the Icon picker cell (compact), honoring render context", () => {
|
|
87
|
+
const render = customRenderOf(fieldtypeToTableField("Icon"));
|
|
88
|
+
const element = render("mail", {}, () => {});
|
|
89
|
+
expect(element.type).toBe(Icon);
|
|
90
|
+
expect(element.props.value).toBe("mail");
|
|
91
|
+
expect(element.props.compact).toBe(true);
|
|
92
|
+
const readOnlyElement = render("mail", {}, () => {}, { readOnly: true, disabled: false });
|
|
93
|
+
expect(readOnlyElement.props.readOnly).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
|
|
84
96
|
it("Rating star count comes from df.options (stock cint(df.options) || 5)", () => {
|
|
85
97
|
const render = customRenderOf(fieldtypeToTableField("Rating", "7"));
|
|
86
98
|
const element = render(0.5, {}, () => {});
|
|
@@ -224,4 +236,122 @@ describe("form adapters (registry context)", () => {
|
|
|
224
236
|
it("unregistered fieldtypes resolve to undefined (SchemaForm renders the honest fallback)", () => {
|
|
225
237
|
expect(getFieldComponent("Some Custom Type")).toBeUndefined();
|
|
226
238
|
});
|
|
239
|
+
|
|
240
|
+
it("Attach and Attach Image forward the library feed (MPO-53 AC-11 clobber guard)", () => {
|
|
241
|
+
// 035867446 rewrote these adapters and silently dropped the
|
|
242
|
+
// library/libraryFiles/libraryFolder pass-through, severing Attach's
|
|
243
|
+
// choose-from-library tab from every schema-driven form. The feed is part
|
|
244
|
+
// of the adapter contract; this pins it.
|
|
245
|
+
const files = [
|
|
246
|
+
{ name: "inv-1", file_name: "invoice.pdf", folder: "Home", file_url: "/files/invoice.pdf" },
|
|
247
|
+
];
|
|
248
|
+
for (const fieldtype of ["Attach", "Attach Image"]) {
|
|
249
|
+
const Component = getFieldComponent(fieldtype)!;
|
|
250
|
+
const element = (Component as Function)(
|
|
251
|
+
propsFor({ value: null, libraryFiles: files, libraryFolder: "Home" }),
|
|
252
|
+
) as InspectableElement;
|
|
253
|
+
expect(element.props.library).toBe(true);
|
|
254
|
+
expect(element.props.libraryFiles).toBe(files);
|
|
255
|
+
expect(element.props.libraryFolder).toBe("Home");
|
|
256
|
+
}
|
|
257
|
+
const AttachComponent = getFieldComponent("Attach")!;
|
|
258
|
+
const disabledTab = (AttachComponent as Function)(
|
|
259
|
+
propsFor({ value: null, library: false }),
|
|
260
|
+
) as InspectableElement;
|
|
261
|
+
expect(disabledTab.props.library).toBe(false);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
it("Icon is registered and adapts to the Icon picker", () => {
|
|
265
|
+
const IconComponent = getFieldComponent("Icon")!;
|
|
266
|
+
expect(IconComponent).toBeDefined();
|
|
267
|
+
const element = (IconComponent as Function)(
|
|
268
|
+
propsFor({
|
|
269
|
+
value: "mail",
|
|
270
|
+
fieldMeta: { type: "Icon", name: "workspace_icon" },
|
|
271
|
+
}),
|
|
272
|
+
) as InspectableElement;
|
|
273
|
+
expect(element.type).toBe(Icon);
|
|
274
|
+
expect(element.props.value).toBe("mail");
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
it("union-minus-registry holds no real fieldtype (layout breaks only)", () => {
|
|
278
|
+
// Every FrappeFieldType member from public/frappe/src/doctype.ts. A real
|
|
279
|
+
// fieldtype missing from the registry renders the unsupported-type string
|
|
280
|
+
// (the MPO-51 Icon hole, reopened once already by 035867446's registry
|
|
281
|
+
// rewrite), so this list is asserted against the registry wholesale.
|
|
282
|
+
const frappeFieldTypes: readonly FrappeFieldType[] = [
|
|
283
|
+
"Autocomplete",
|
|
284
|
+
"Attach",
|
|
285
|
+
"Attach Image",
|
|
286
|
+
"Barcode",
|
|
287
|
+
"Button",
|
|
288
|
+
"Check",
|
|
289
|
+
"Code",
|
|
290
|
+
"Color",
|
|
291
|
+
"Column Break",
|
|
292
|
+
"Currency",
|
|
293
|
+
"Data",
|
|
294
|
+
"Date",
|
|
295
|
+
"Datetime",
|
|
296
|
+
"Duration",
|
|
297
|
+
"Dynamic Link",
|
|
298
|
+
"Float",
|
|
299
|
+
"Geolocation",
|
|
300
|
+
"HTML",
|
|
301
|
+
"HTML Editor",
|
|
302
|
+
"Heading",
|
|
303
|
+
"Icon",
|
|
304
|
+
"Image",
|
|
305
|
+
"Int",
|
|
306
|
+
"JSON",
|
|
307
|
+
"Link",
|
|
308
|
+
"Long Text",
|
|
309
|
+
"Markdown Editor",
|
|
310
|
+
"Password",
|
|
311
|
+
"Percent",
|
|
312
|
+
"Phone",
|
|
313
|
+
"Rating",
|
|
314
|
+
"Read Only",
|
|
315
|
+
"Section Break",
|
|
316
|
+
"Select",
|
|
317
|
+
"Signature",
|
|
318
|
+
"Small Text",
|
|
319
|
+
"Tab Break",
|
|
320
|
+
"Table",
|
|
321
|
+
"Table MultiSelect",
|
|
322
|
+
"Text",
|
|
323
|
+
"Text Editor",
|
|
324
|
+
"Time",
|
|
325
|
+
];
|
|
326
|
+
const unregistered = frappeFieldTypes.filter((fieldtype) => !getFieldComponent(fieldtype));
|
|
327
|
+
// The three layout breaks never get adapters — FormSection / FormGrid /
|
|
328
|
+
// Tabs serve them structurally.
|
|
329
|
+
const layoutBreaks = ["Column Break", "Section Break", "Tab Break"];
|
|
330
|
+
for (const layoutBreak of layoutBreaks) {
|
|
331
|
+
expect(unregistered).toContain(layoutBreak);
|
|
332
|
+
}
|
|
333
|
+
expect(unregistered).not.toContain("Icon");
|
|
334
|
+
// "Button" is transiently tolerated here: its adapter (a8f8f52bd) was
|
|
335
|
+
// reverted by the same 035867446 rewrite and is being restored on
|
|
336
|
+
// lane/MPO-51-button-fieldtype. Drop it from this allowlist when that
|
|
337
|
+
// lands — the Button spec below pins the adapter itself.
|
|
338
|
+
for (const fieldtype of unregistered) {
|
|
339
|
+
expect([...layoutBreaks, "Button"]).toContain(fieldtype);
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
it("Button is in the FrappeFieldType union and adapts to the house Button", () => {
|
|
344
|
+
const fieldtype: FrappeFieldType = "Button";
|
|
345
|
+
expect(fieldtype).toBe("Button");
|
|
346
|
+
const ButtonComponent = getFieldComponent("Button")!;
|
|
347
|
+
expect(ButtonComponent).toBeDefined();
|
|
348
|
+
const element = (ButtonComponent as Function)(
|
|
349
|
+
propsFor({
|
|
350
|
+
label: "Make Payment Entry",
|
|
351
|
+
fieldMeta: { type: "Button", name: "make_payment_entry" },
|
|
352
|
+
}),
|
|
353
|
+
) as InspectableElement;
|
|
354
|
+
expect(element.type).toBe(Button);
|
|
355
|
+
expect(element.props.children).toBe("Make Payment Entry");
|
|
356
|
+
});
|
|
227
357
|
});
|
package/src/fieldRegistry.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import React, { useMemo } from "react";
|
|
10
10
|
import type { ComponentType } from "react";
|
|
11
11
|
import { useDocTypeMeta } from "@multiplatform.one/frappe";
|
|
12
|
-
import { CheckboxGroup, Combobox, ImageField } from "@multiplatform.one/forms";
|
|
12
|
+
import { Button, CheckboxGroup, Combobox, ImageField, Skeleton } from "@multiplatform.one/forms";
|
|
13
13
|
|
|
14
14
|
import { Barcode } from "./fields/Barcode";
|
|
15
15
|
import { useFrappeConfig } from "./FrappeProvider";
|
|
@@ -26,6 +26,7 @@ import { TimePicker } from "./fields/TimePicker";
|
|
|
26
26
|
import { Geolocation } from "./fields/Geolocation";
|
|
27
27
|
import { Heading } from "./fields/Heading";
|
|
28
28
|
import { Html } from "./fields/HTML";
|
|
29
|
+
import { Icon } from "./fields/Icon";
|
|
29
30
|
import { Link } from "./fields/Link";
|
|
30
31
|
import { LongText } from "./fields/LongText";
|
|
31
32
|
import { MarkdownEditorField } from "./fields/MarkdownEditor";
|
|
@@ -165,6 +166,10 @@ function disabledInputBlock(props: FieldRenderProps) {
|
|
|
165
166
|
return props.disabled ? { inputProps: { readOnly: true, tabIndex: -1 } } : undefined;
|
|
166
167
|
}
|
|
167
168
|
|
|
169
|
+
function disabledTextAreaBlock(props: FieldRenderProps) {
|
|
170
|
+
return props.disabled ? { textAreaProps: { readOnly: true, tabIndex: -1 } } : undefined;
|
|
171
|
+
}
|
|
172
|
+
|
|
168
173
|
function DataAdapter(props: FieldRenderProps) {
|
|
169
174
|
return React.createElement(Data, {
|
|
170
175
|
label: props.label,
|
|
@@ -391,6 +396,20 @@ function ColorAdapter(props: FieldRenderProps) {
|
|
|
391
396
|
});
|
|
392
397
|
}
|
|
393
398
|
|
|
399
|
+
function IconAdapter(props: FieldRenderProps) {
|
|
400
|
+
const rawOptions = props.fieldMeta?.options ?? props.options ?? "";
|
|
401
|
+
return React.createElement(Icon, {
|
|
402
|
+
label: props.label,
|
|
403
|
+
value: props.value ?? "",
|
|
404
|
+
onChange: props.onChange,
|
|
405
|
+
disabled: props.disabled,
|
|
406
|
+
required: props.required,
|
|
407
|
+
error: props.error,
|
|
408
|
+
options: typeof rawOptions === "string" ? rawOptions : undefined,
|
|
409
|
+
...passthroughProps(props),
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
|
|
394
413
|
function SmallTextAdapter(props: FieldRenderProps) {
|
|
395
414
|
return React.createElement(SmallText, {
|
|
396
415
|
label: props.label,
|
|
@@ -400,7 +419,7 @@ function SmallTextAdapter(props: FieldRenderProps) {
|
|
|
400
419
|
required: props.required,
|
|
401
420
|
error: props.error,
|
|
402
421
|
...passthroughProps(props),
|
|
403
|
-
...
|
|
422
|
+
...disabledTextAreaBlock(props),
|
|
404
423
|
});
|
|
405
424
|
}
|
|
406
425
|
|
|
@@ -413,14 +432,20 @@ function LongTextAdapter(props: FieldRenderProps) {
|
|
|
413
432
|
required: props.required,
|
|
414
433
|
error: props.error,
|
|
415
434
|
...passthroughProps(props),
|
|
416
|
-
...
|
|
435
|
+
...disabledTextAreaBlock(props),
|
|
417
436
|
});
|
|
418
437
|
}
|
|
419
438
|
|
|
420
439
|
function TextEditorAdapter(props: FieldRenderProps) {
|
|
421
440
|
return React.createElement(
|
|
422
441
|
React.Suspense,
|
|
423
|
-
{
|
|
442
|
+
{
|
|
443
|
+
fallback: React.createElement(Skeleton, {
|
|
444
|
+
width: "100%",
|
|
445
|
+
height: 160,
|
|
446
|
+
"aria-label": "Loading editor",
|
|
447
|
+
}),
|
|
448
|
+
},
|
|
424
449
|
React.createElement(LazyTextEditor, {
|
|
425
450
|
label: props.label,
|
|
426
451
|
value: props.value ?? "",
|
|
@@ -635,6 +660,41 @@ function HeadingAdapter(props: FieldRenderProps) {
|
|
|
635
660
|
});
|
|
636
661
|
}
|
|
637
662
|
|
|
663
|
+
/**
|
|
664
|
+
* Frappe `Button` is an ACTION field: it carries no stored value, so it is
|
|
665
|
+
* not a layout break and must not be swallowed by schemaForm. The house
|
|
666
|
+
* Button is the renderer slot; label copy is the DocField author's
|
|
667
|
+
* (DG-ACT-02) and the adapter never sets `accent`, so a form's own submit
|
|
668
|
+
* keeps the one primary (DG-ACT-01).
|
|
669
|
+
*
|
|
670
|
+
* LC-14: `onChange` is the canonical channel for fields that hold a VALUE.
|
|
671
|
+
* A Button holds none, so the adapter never fires it — a press would
|
|
672
|
+
* otherwise write a doc field that does not exist. Press wiring arrives on
|
|
673
|
+
* `onPress` through a field override (DG-CTRL-06, the eject hatch); with no
|
|
674
|
+
* override the button renders inert rather than inventing a doc write.
|
|
675
|
+
*
|
|
676
|
+
* Restored after the MPO-60 fieldRegistry rewrite (035867446) merged over
|
|
677
|
+
* the MPO-51 registration (a8f8f52bd, gitlab.com !77) and silently dropped
|
|
678
|
+
* it — CI runs only `turbo run build` (MPO-78), so the red spec never
|
|
679
|
+
* surfaced.
|
|
680
|
+
*/
|
|
681
|
+
function ButtonAdapter(props: FieldRenderProps) {
|
|
682
|
+
const disabled = Boolean(props.disabled || props.readOnly);
|
|
683
|
+
const reason =
|
|
684
|
+
(typeof props.disabledReason === "string" && props.disabledReason.trim()) ||
|
|
685
|
+
props.helperText ||
|
|
686
|
+
(typeof props.fieldMeta?.description === "string" ? props.fieldMeta.description : undefined) ||
|
|
687
|
+
(props.readOnly ? "Read only" : undefined);
|
|
688
|
+
return React.createElement(Button, {
|
|
689
|
+
disabled,
|
|
690
|
+
disabledReason: disabled ? String(reason ?? "Unavailable") : undefined,
|
|
691
|
+
skeleton: props.skeleton,
|
|
692
|
+
compact: props.compact,
|
|
693
|
+
onPress: disabled ? undefined : props.onPress,
|
|
694
|
+
children: props.label,
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
|
|
638
698
|
// ---------------------------------------------------------------------------
|
|
639
699
|
// Adapter components — new field types (forms integration)
|
|
640
700
|
// ---------------------------------------------------------------------------
|
|
@@ -770,6 +830,11 @@ function FileUploadAdapter(props: FieldRenderProps) {
|
|
|
770
830
|
disabled: props.disabled,
|
|
771
831
|
required: props.required,
|
|
772
832
|
error: props.error,
|
|
833
|
+
// Attach's choose-from-library tab (FileBrowser, MPO-53 AC-11). The feed
|
|
834
|
+
// rides the registry so schema-driven Attach fields reach the library.
|
|
835
|
+
library: props.library !== false,
|
|
836
|
+
libraryFiles: props.libraryFiles,
|
|
837
|
+
libraryFolder: props.libraryFolder,
|
|
773
838
|
...passthroughProps(props),
|
|
774
839
|
});
|
|
775
840
|
}
|
|
@@ -782,6 +847,9 @@ function FileUploadImageAdapter(props: FieldRenderProps) {
|
|
|
782
847
|
disabled: props.disabled,
|
|
783
848
|
required: props.required,
|
|
784
849
|
error: props.error,
|
|
850
|
+
library: props.library !== false,
|
|
851
|
+
libraryFiles: props.libraryFiles,
|
|
852
|
+
libraryFolder: props.libraryFolder,
|
|
785
853
|
...passthroughProps(props),
|
|
786
854
|
isImage: true,
|
|
787
855
|
});
|
|
@@ -940,6 +1008,25 @@ export function fieldtypeToTableField(
|
|
|
940
1008
|
return { field: "timepicker" };
|
|
941
1009
|
case "Color":
|
|
942
1010
|
return { field: "colorpicker" };
|
|
1011
|
+
case "Icon":
|
|
1012
|
+
return {
|
|
1013
|
+
field: "custom",
|
|
1014
|
+
fieldProps: {
|
|
1015
|
+
render: (
|
|
1016
|
+
value: unknown,
|
|
1017
|
+
_rowData: unknown,
|
|
1018
|
+
onCellChange: (v: unknown) => void,
|
|
1019
|
+
context?: DataTableCellRenderContext,
|
|
1020
|
+
) =>
|
|
1021
|
+
React.createElement(Icon, {
|
|
1022
|
+
value: value === null || value === undefined ? "" : String(value),
|
|
1023
|
+
onChange: onCellChange,
|
|
1024
|
+
compact: true,
|
|
1025
|
+
readOnly: context?.readOnly,
|
|
1026
|
+
disabled: context?.disabled,
|
|
1027
|
+
}),
|
|
1028
|
+
},
|
|
1029
|
+
};
|
|
943
1030
|
case "Rating": {
|
|
944
1031
|
// Frappe stores Rating as a 0–1 fraction of the star count (df.options,
|
|
945
1032
|
// default 5). The generic rating cell treats values as star counts, so
|
|
@@ -1265,6 +1352,12 @@ export function initDefaultRegistry(): void {
|
|
|
1265
1352
|
// Color
|
|
1266
1353
|
registerField("Color", ColorAdapter);
|
|
1267
1354
|
|
|
1355
|
+
// Icon — picker over the DG-IDN-06 drawn set (MPO-51). MPO-22's Icon
|
|
1356
|
+
// line points here instead of restating the gap. Registration was first
|
|
1357
|
+
// landed by 3b0cf9902 and silently reverted by 035867446 (MPO-60), whose
|
|
1358
|
+
// registry rewrite was cut from a pre-MPO-51 base; this restores it.
|
|
1359
|
+
registerField("Icon", IconAdapter);
|
|
1360
|
+
|
|
1268
1361
|
// Text types
|
|
1269
1362
|
registerField("Small Text", SmallTextAdapter);
|
|
1270
1363
|
registerField("Long Text", LongTextAdapter);
|
|
@@ -1298,6 +1391,9 @@ export function initDefaultRegistry(): void {
|
|
|
1298
1391
|
// Heading
|
|
1299
1392
|
registerField("Heading", HeadingAdapter);
|
|
1300
1393
|
|
|
1394
|
+
// Button — desk action field (MPO-51). Not a layout break; not a value.
|
|
1395
|
+
registerField("Button", ButtonAdapter);
|
|
1396
|
+
|
|
1301
1397
|
// Rating
|
|
1302
1398
|
registerField("Rating", RatingAdapter);
|
|
1303
1399
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { action } from "@multiplatform.one/storybook";
|
|
2
|
+
import { DataTable, type DataTableColumn } from "@multiplatform.one/table";
|
|
2
3
|
import { useState } from "react";
|
|
3
4
|
import { YStack } from "tamagui";
|
|
5
|
+
import { fieldtypeToTableField } from "../../fieldRegistry";
|
|
6
|
+
import { FrappeStoryProvider } from "../../frappeStoryTarget";
|
|
4
7
|
import { Barcode, type BarcodeProps } from ".";
|
|
5
8
|
|
|
6
9
|
export default {
|
|
@@ -73,3 +76,32 @@ ContractProbe.args = {
|
|
|
73
76
|
value: "5901234123457",
|
|
74
77
|
enableScan: false,
|
|
75
78
|
} as Partial<StoryProps>;
|
|
79
|
+
|
|
80
|
+
type BarcodeRow = { id: string; label: string; value: string };
|
|
81
|
+
|
|
82
|
+
export const InTable = {
|
|
83
|
+
name: "In table",
|
|
84
|
+
render: function InTableRender() {
|
|
85
|
+
const [data, setData] = useState<BarcodeRow[]>([
|
|
86
|
+
{ id: "1", label: "Alpha", value: "5901234123457" },
|
|
87
|
+
{ id: "2", label: "Beta", value: "0123456789012" },
|
|
88
|
+
{ id: "3", label: "Gamma", value: "" },
|
|
89
|
+
]);
|
|
90
|
+
const columns: DataTableColumn<BarcodeRow>[] = [
|
|
91
|
+
{ accessorKey: "label", header: "Row" },
|
|
92
|
+
{ accessorKey: "value", header: "SKU", ...fieldtypeToTableField("Barcode") },
|
|
93
|
+
];
|
|
94
|
+
return (
|
|
95
|
+
<FrappeStoryProvider>
|
|
96
|
+
<YStack width="100%" height={320}>
|
|
97
|
+
<DataTable
|
|
98
|
+
data={data}
|
|
99
|
+
columns={columns}
|
|
100
|
+
enablePagination={false}
|
|
101
|
+
onDataChange={setData}
|
|
102
|
+
/>
|
|
103
|
+
</YStack>
|
|
104
|
+
</FrappeStoryProvider>
|
|
105
|
+
);
|
|
106
|
+
},
|
|
107
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Design-law: Check is a thin Checkbox adapter. Never circular at any radius.
|
|
2
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
3
|
+
import { cleanup } from "@testing-library/react";
|
|
4
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
6
|
+
import { Check } from "./index";
|
|
7
|
+
|
|
8
|
+
afterEach(cleanup);
|
|
9
|
+
|
|
10
|
+
describe("Check design-law — compose forms Checkbox", () => {
|
|
11
|
+
it("renders the house checkbox glyph box", () => {
|
|
12
|
+
const result = renderWithProviders(<Check label="Accept" />);
|
|
13
|
+
expect(result.container.querySelector("[data-checkbox-box='true']")).toBeTruthy();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it("stays non-circular at radius=full (checkbox override)", () => {
|
|
17
|
+
const result = renderWithProviders(
|
|
18
|
+
<Preset overrides={{ borderRadius: "full" }}>
|
|
19
|
+
<Check label="Accept" value />
|
|
20
|
+
</Preset>,
|
|
21
|
+
);
|
|
22
|
+
const box = result.container.querySelector("[data-checkbox-box='true']") as HTMLElement | null;
|
|
23
|
+
expect(box).toBeTruthy();
|
|
24
|
+
const radius = box?.style.borderRadius || getComputedStyle(box as Element).borderRadius;
|
|
25
|
+
expect(radius).not.toMatch(/50%|9999|999px/);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { action } from "@multiplatform.one/storybook";
|
|
2
|
+
import { DataTable, type DataTableColumn } from "@multiplatform.one/table";
|
|
2
3
|
import { useState } from "react";
|
|
3
4
|
import { YStack } from "tamagui";
|
|
5
|
+
import { fieldtypeToTableField } from "../../fieldRegistry";
|
|
6
|
+
import { FrappeStoryProvider } from "../../frappeStoryTarget";
|
|
4
7
|
import { Check, type CheckProps } from ".";
|
|
5
8
|
|
|
6
9
|
export default {
|
|
@@ -58,3 +61,58 @@ AllStates.parameters = {
|
|
|
58
61
|
},
|
|
59
62
|
},
|
|
60
63
|
};
|
|
64
|
+
|
|
65
|
+
interface CheckCellRow {
|
|
66
|
+
id: string;
|
|
67
|
+
label: string;
|
|
68
|
+
value: boolean;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const checkCellRows: CheckCellRow[] = [
|
|
72
|
+
{ id: "1", label: "Alpha", value: true },
|
|
73
|
+
{ id: "2", label: "Beta", value: false },
|
|
74
|
+
{ id: "3", label: "Gamma", value: false },
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
const checkCellColumns: DataTableColumn<CheckCellRow>[] = [
|
|
78
|
+
{ accessorKey: "label", header: "Row" },
|
|
79
|
+
{
|
|
80
|
+
accessorKey: "value",
|
|
81
|
+
header: "Check",
|
|
82
|
+
...fieldtypeToTableField("Check"),
|
|
83
|
+
} as DataTableColumn<CheckCellRow>,
|
|
84
|
+
];
|
|
85
|
+
|
|
86
|
+
function InTableStory() {
|
|
87
|
+
const [data, setData] = useState(checkCellRows);
|
|
88
|
+
return (
|
|
89
|
+
<YStack width="100%" height={280}>
|
|
90
|
+
<DataTable
|
|
91
|
+
data={data}
|
|
92
|
+
columns={checkCellColumns as DataTableColumn<Record<string, any>>[]}
|
|
93
|
+
enablePagination={false}
|
|
94
|
+
onDataChange={(next: Record<string, any>[]) => {
|
|
95
|
+
setData(next as CheckCellRow[]);
|
|
96
|
+
action("onDataChange")(next);
|
|
97
|
+
}}
|
|
98
|
+
aria-label="Check cell editor table"
|
|
99
|
+
/>
|
|
100
|
+
</YStack>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** 3-row DataTable mapped through fieldtypeToTableField("Check") — in-cell checkbox. */
|
|
105
|
+
export const InTable = () => (
|
|
106
|
+
<FrappeStoryProvider>
|
|
107
|
+
<InTableStory />
|
|
108
|
+
</FrappeStoryProvider>
|
|
109
|
+
);
|
|
110
|
+
InTable.storyName = "In table";
|
|
111
|
+
InTable.parameters = {
|
|
112
|
+
docs: {
|
|
113
|
+
description: {
|
|
114
|
+
story:
|
|
115
|
+
"Check inside a table cell: the registry maps the fieldtype to an in-cell checkbox. Three rows of mock DocType data; toggles commit through onDataChange.",
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
};
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frappe Check field — thin adapter over forms Checkbox.
|
|
3
|
+
*
|
|
4
|
+
* Design-law lives on this file: compose Checkbox, do not fork its chrome.
|
|
5
|
+
* Radius stays NEVER circular (Checkbox clamp / per-component override).
|
|
6
|
+
*/
|
|
1
7
|
import type { FormFieldProps, FieldComponentProps } from "@multiplatform.one/forms";
|
|
2
8
|
import { Checkbox as FormsCheckbox } from "@multiplatform.one/forms";
|
|
3
9
|
import type { DeepKeys } from "@tanstack/form-core";
|
|
@@ -75,7 +81,7 @@ export function Check<
|
|
|
75
81
|
id={fieldProps.id}
|
|
76
82
|
size={fieldProps.size}
|
|
77
83
|
checked={value}
|
|
78
|
-
|
|
84
|
+
onChange={(checked) => onChange?.(checked === true)}
|
|
79
85
|
onBlur={onBlur}
|
|
80
86
|
disabled={disabled}
|
|
81
87
|
checkboxProps={checkboxProps as any}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { Form, type AnyFormApi } from "@multiplatform.one/forms";
|
|
2
2
|
import { action } from "@multiplatform.one/storybook";
|
|
3
|
+
import { DataTable, type DataTableColumn } from "@multiplatform.one/table";
|
|
3
4
|
import { useForm } from "@tanstack/react-form";
|
|
4
5
|
import { useState } from "react";
|
|
5
6
|
import { Theme, YStack } from "tamagui";
|
|
7
|
+
import { fieldtypeToTableField } from "../../fieldRegistry";
|
|
8
|
+
import { FrappeStoryProvider } from "../../frappeStoryTarget";
|
|
6
9
|
import { CodeEditorField, frappeCodeLanguage, type CodeEditorFieldProps } from ".";
|
|
7
10
|
|
|
8
11
|
const PYTHON_FIXTURE = `import frappe
|
|
@@ -141,3 +144,32 @@ DarkScheme.args = {
|
|
|
141
144
|
value: PYTHON_FIXTURE,
|
|
142
145
|
language: "python",
|
|
143
146
|
} as Partial<StoryProps>;
|
|
147
|
+
|
|
148
|
+
type CodeRow = { id: string; label: string; value: string };
|
|
149
|
+
|
|
150
|
+
export const InTable = {
|
|
151
|
+
name: "In table",
|
|
152
|
+
render: function InTableRender() {
|
|
153
|
+
const [data, setData] = useState<CodeRow[]>([
|
|
154
|
+
{ id: "1", label: "Alpha", value: PYTHON_FIXTURE },
|
|
155
|
+
{ id: "2", label: "Beta", value: JSON_FIXTURE },
|
|
156
|
+
{ id: "3", label: "Gamma", value: "" },
|
|
157
|
+
]);
|
|
158
|
+
const columns: DataTableColumn<CodeRow>[] = [
|
|
159
|
+
{ accessorKey: "label", header: "Row" },
|
|
160
|
+
{ accessorKey: "value", header: "Script", ...fieldtypeToTableField("Code") },
|
|
161
|
+
];
|
|
162
|
+
return (
|
|
163
|
+
<FrappeStoryProvider>
|
|
164
|
+
<YStack width="100%" height={320}>
|
|
165
|
+
<DataTable
|
|
166
|
+
data={data}
|
|
167
|
+
columns={columns}
|
|
168
|
+
enablePagination={false}
|
|
169
|
+
onDataChange={setData}
|
|
170
|
+
/>
|
|
171
|
+
</YStack>
|
|
172
|
+
</FrappeStoryProvider>
|
|
173
|
+
);
|
|
174
|
+
},
|
|
175
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Design-law: Color is a thin ColorPicker adapter. Do not fork picker chrome.
|
|
2
|
+
import { cleanup, screen } from "@testing-library/react";
|
|
3
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
5
|
+
import { Color } from "./index";
|
|
6
|
+
|
|
7
|
+
afterEach(cleanup);
|
|
8
|
+
|
|
9
|
+
describe("Color design-law — compose forms ColorPicker", () => {
|
|
10
|
+
it("renders the house color field (hex input, no forked chrome)", () => {
|
|
11
|
+
const result = renderWithProviders(<Color label="Brand" value="#10B981" onChange={vi.fn()} />);
|
|
12
|
+
const input = result.container.querySelector("input") as HTMLInputElement | null;
|
|
13
|
+
expect(input).toBeTruthy();
|
|
14
|
+
expect(screen.getByText("Brand")).toBeTruthy();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("forwards skeleton and hides the input", () => {
|
|
18
|
+
const result = renderWithProviders(<Color label="Brand" skeleton />);
|
|
19
|
+
expect(result.container.querySelector("input")).toBeNull();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { action } from "@multiplatform.one/storybook";
|
|
2
|
+
import { DataTable, type DataTableColumn } from "@multiplatform.one/table";
|
|
2
3
|
import { useState } from "react";
|
|
3
4
|
import { YStack } from "tamagui";
|
|
5
|
+
import { fieldtypeToTableField } from "../../fieldRegistry";
|
|
6
|
+
import { FrappeStoryProvider } from "../../frappeStoryTarget";
|
|
4
7
|
import { Color, type ColorProps } from ".";
|
|
5
8
|
|
|
6
9
|
export default {
|
|
@@ -68,3 +71,33 @@ AllStates.parameters = {
|
|
|
68
71
|
},
|
|
69
72
|
},
|
|
70
73
|
};
|
|
74
|
+
|
|
75
|
+
interface ColorRow {
|
|
76
|
+
id: string;
|
|
77
|
+
label: string;
|
|
78
|
+
value: string;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export const InTable = () => {
|
|
82
|
+
const [data, setData] = useState<ColorRow[]>([
|
|
83
|
+
{ id: "1", label: "Alpha", value: "#10B981" },
|
|
84
|
+
{ id: "2", label: "Beta", value: "#F59E0B" },
|
|
85
|
+
{ id: "3", label: "Gamma", value: "" },
|
|
86
|
+
]);
|
|
87
|
+
const columns: DataTableColumn<ColorRow>[] = [
|
|
88
|
+
{ accessorKey: "label", header: "Row" },
|
|
89
|
+
{
|
|
90
|
+
accessorKey: "value",
|
|
91
|
+
header: "Color",
|
|
92
|
+
...fieldtypeToTableField("Color"),
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
return (
|
|
96
|
+
<FrappeStoryProvider>
|
|
97
|
+
<YStack width="100%" height={280}>
|
|
98
|
+
<DataTable data={data} columns={columns} enablePagination={false} onDataChange={setData} />
|
|
99
|
+
</YStack>
|
|
100
|
+
</FrappeStoryProvider>
|
|
101
|
+
);
|
|
102
|
+
};
|
|
103
|
+
InTable.storyName = "In table";
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frappe Color field — thin adapter over forms ColorPicker.
|
|
3
|
+
*
|
|
4
|
+
* Design-law lives on this file: compose ColorPicker, do not fork its chrome.
|
|
5
|
+
* Canonical change is `onChange` (LC-14); a chosen hex is value data.
|
|
6
|
+
*/
|
|
1
7
|
import type { FormFieldProps, FieldComponentProps } from "@multiplatform.one/forms";
|
|
2
8
|
import { ColorPicker as FormsColorPicker } from "@multiplatform.one/forms";
|
|
3
9
|
import type { DeepKeys } from "@tanstack/form-core";
|
|
@@ -68,7 +74,7 @@ export function Color<
|
|
|
68
74
|
form={form}
|
|
69
75
|
validators={validators}
|
|
70
76
|
value={value as string | undefined}
|
|
71
|
-
|
|
77
|
+
onChange={onChange as ((v: string) => void) | undefined}
|
|
72
78
|
defaultValue={defaultValue as string}
|
|
73
79
|
label={fieldProps.label}
|
|
74
80
|
labelProps={fieldProps.labelProps}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Design-law: Data is a thin Input adapter. Do not fork Input chrome.
|
|
2
|
+
import { cleanup } from "@testing-library/react";
|
|
3
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
4
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
5
|
+
import { Data } from "./index";
|
|
6
|
+
|
|
7
|
+
afterEach(cleanup);
|
|
8
|
+
|
|
9
|
+
describe("Data design-law — compose forms Input", () => {
|
|
10
|
+
it("renders the house Input box (data-ring-target=box)", () => {
|
|
11
|
+
const result = renderWithProviders(<Data label="Name" />);
|
|
12
|
+
expect(result.container.querySelector("input")).toBeTruthy();
|
|
13
|
+
expect(result.container.querySelector("[data-ring-target='box']")).toBeTruthy();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it("forwards skeleton and hides the input", () => {
|
|
17
|
+
const result = renderWithProviders(<Data label="Name" skeleton />);
|
|
18
|
+
expect(result.container.querySelector("input")).toBeNull();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it("forwards readOnly onto the input", () => {
|
|
22
|
+
const result = renderWithProviders(<Data label="Name" readOnly value="locked" />);
|
|
23
|
+
const input = result.container.querySelector("input") as HTMLInputElement | null;
|
|
24
|
+
expect(input?.readOnly || input?.getAttribute("aria-readonly")).toBeTruthy();
|
|
25
|
+
});
|
|
26
|
+
});
|