@multiplatform.one/frappe-ui 7.4.0 → 7.5.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 +661 -0
- package/dist/cjs/FileBrowser/index.native.js +735 -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 +15 -3
- package/dist/cjs/fieldRegistry.native.js +15 -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 +197 -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 +636 -0
- package/dist/esm/FileBrowser/index.mjs.map +1 -0
- package/dist/esm/FileBrowser/index.native.js +707 -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 +16 -4
- package/dist/esm/fieldRegistry.mjs.map +1 -1
- package/dist/esm/fieldRegistry.native.js +16 -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 +199 -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 +636 -0
- package/dist/jsx/FileBrowser/index.mjs.map +1 -0
- package/dist/jsx/FileBrowser/index.native.js +735 -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 +16 -4
- package/dist/jsx/fieldRegistry.mjs.map +1 -1
- package/dist/jsx/fieldRegistry.native.js +15 -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 +197 -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 +268 -0
- package/src/FileBrowser/FileBrowser.stories.tsx +93 -0
- package/src/FileBrowser/folderTree.ts +62 -0
- package/src/FileBrowser/index.tsx +724 -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 +17 -1
- package/src/fieldRegistry.ts +14 -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 +243 -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
|
@@ -2,6 +2,7 @@ import { InMemoryFixtureProvider } from "@multiplatform.one/frappe";
|
|
|
2
2
|
import { action } from "@multiplatform.one/storybook";
|
|
3
3
|
import { formatAbsoluteDateTime } from "@multiplatform.one/theme";
|
|
4
4
|
import { FrappeProvider } from "../FrappeProvider";
|
|
5
|
+
import { FrappeStoryProvider } from "../frappeStoryTarget";
|
|
5
6
|
import { Timeline, type FrappeComment, type FrappeVersion } from "./timeline";
|
|
6
7
|
|
|
7
8
|
export default {
|
|
@@ -13,12 +14,99 @@ export default {
|
|
|
13
14
|
docs: {
|
|
14
15
|
description: {
|
|
15
16
|
component:
|
|
16
|
-
"Frappe bridge for the generic Timeline: merges Comment and Version documents into TimelineEntry[], sorted newest-first,
|
|
17
|
+
"Frappe bridge for the generic Timeline: merges Comment and Version documents into TimelineEntry[], sorted newest-first. Fixture stories are network-hermetic (G-15/D-05): documents come from InMemoryFixtureProvider and DocType meta from an in-story fetch mock, so nothing leaves the machine. The separately-named Live story is the live-bench arm — it targets STORYBOOK_FRAPPE_URL when reachable and falls back to fixtures otherwise.",
|
|
17
18
|
},
|
|
18
19
|
},
|
|
19
20
|
},
|
|
20
21
|
};
|
|
21
22
|
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Hermetic story host (G-15 story honesty / D-05).
|
|
25
|
+
//
|
|
26
|
+
// Fixture-backed stories previously pointed at https://demo.frappe.cloud. The
|
|
27
|
+
// fixture provider serves the *collection*, but DocType meta still resolves
|
|
28
|
+
// over HTTP — so those stories fired a real cross-origin request the browser
|
|
29
|
+
// rejected with CORS. MOCK_HOST keeps the same code path (real fetch, real
|
|
30
|
+
// meta shape) without leaving the machine.
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
|
|
33
|
+
const MOCK_HOST = "https://frappetimeline.mock.test";
|
|
34
|
+
|
|
35
|
+
function commentMetaRaw(name: string) {
|
|
36
|
+
return {
|
|
37
|
+
name,
|
|
38
|
+
module: "Core",
|
|
39
|
+
title_field: "content",
|
|
40
|
+
fields: [
|
|
41
|
+
{ fieldname: "comment_type", fieldtype: "Select", label: "Comment Type" },
|
|
42
|
+
{ fieldname: "content", fieldtype: "Text Editor", label: "Content" },
|
|
43
|
+
{ fieldname: "comment_by", fieldtype: "Data", label: "Comment By" },
|
|
44
|
+
{ fieldname: "reference_doctype", fieldtype: "Link", label: "Reference Document Type" },
|
|
45
|
+
{ fieldname: "reference_name", fieldtype: "Dynamic Link", label: "Reference Name" },
|
|
46
|
+
{ fieldname: "creation", fieldtype: "Datetime", label: "Created On" },
|
|
47
|
+
],
|
|
48
|
+
permissions: [{ role: "All", read: 1, write: 1, create: 1 }],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function versionMetaRaw(name: string) {
|
|
53
|
+
return {
|
|
54
|
+
name,
|
|
55
|
+
module: "Core",
|
|
56
|
+
fields: [
|
|
57
|
+
{ fieldname: "ref_doctype", fieldtype: "Link", label: "Reference Document Type" },
|
|
58
|
+
{ fieldname: "docname", fieldtype: "Dynamic Link", label: "Document Name" },
|
|
59
|
+
{ fieldname: "data", fieldtype: "Code", label: "Data" },
|
|
60
|
+
{ fieldname: "creation", fieldtype: "Datetime", label: "Created On" },
|
|
61
|
+
],
|
|
62
|
+
permissions: [{ role: "All", read: 1 }],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function metaFor(doctype: string) {
|
|
67
|
+
if (doctype === "Version") return versionMetaRaw(doctype);
|
|
68
|
+
return commentMetaRaw(doctype);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function jsonResponse(body: unknown, status = 200): Response {
|
|
72
|
+
return new Response(JSON.stringify(body), {
|
|
73
|
+
status,
|
|
74
|
+
headers: { "Content-Type": "application/json" },
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
(() => {
|
|
79
|
+
if (typeof window === "undefined") return;
|
|
80
|
+
const w = window as unknown as Record<string, unknown>;
|
|
81
|
+
if (w.__frappeTimelineMockFetch) return;
|
|
82
|
+
w.__frappeTimelineMockFetch = true;
|
|
83
|
+
const realFetch = window.fetch.bind(window);
|
|
84
|
+
window.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
|
|
85
|
+
const urlStr =
|
|
86
|
+
typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
|
|
87
|
+
if (urlStr.startsWith(MOCK_HOST)) {
|
|
88
|
+
const url = new URL(urlStr);
|
|
89
|
+
if (url.pathname === "/api/method/frappe.desk.form.load.getdoctype") {
|
|
90
|
+
const doctype = url.searchParams.get("doctype") || "Comment";
|
|
91
|
+
return jsonResponse({ docs: [metaFor(doctype)] });
|
|
92
|
+
}
|
|
93
|
+
const metaMatch = url.pathname.match(/^\/api\/resource\/DocType\/(.+)$/);
|
|
94
|
+
if (metaMatch) return jsonResponse({ data: metaFor(decodeURIComponent(metaMatch[1])) });
|
|
95
|
+
if (url.pathname === "/api/resource/DocType") {
|
|
96
|
+
return jsonResponse({
|
|
97
|
+
data: [
|
|
98
|
+
{ name: "Comment", module: "Core" },
|
|
99
|
+
{ name: "Version", module: "Core" },
|
|
100
|
+
],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// Everything else (guest field-peek, counts): empty, never the network.
|
|
104
|
+
return jsonResponse({ data: [] });
|
|
105
|
+
}
|
|
106
|
+
return realFetch(input as RequestInfo, init);
|
|
107
|
+
};
|
|
108
|
+
})();
|
|
109
|
+
|
|
22
110
|
const now = Date.now();
|
|
23
111
|
const iso = (minutesAgo: number) => new Date(now - minutesAgo * 60_000).toISOString();
|
|
24
112
|
|
|
@@ -93,7 +181,7 @@ const makeFixtures = () =>
|
|
|
93
181
|
new InMemoryFixtureProvider({ Comment: commentFixtures, Version: versionFixtures });
|
|
94
182
|
|
|
95
183
|
export const Main = () => (
|
|
96
|
-
<FrappeProvider baseURL=
|
|
184
|
+
<FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
|
|
97
185
|
<Timeline
|
|
98
186
|
doctype="Task"
|
|
99
187
|
docname="TASK-001"
|
|
@@ -107,7 +195,7 @@ Main.storyName = "Main";
|
|
|
107
195
|
|
|
108
196
|
/** Version/attachment/assignment entries hidden; only plain comments remain. */
|
|
109
197
|
export const CommentsOnly = () => (
|
|
110
|
-
<FrappeProvider baseURL=
|
|
198
|
+
<FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
|
|
111
199
|
<Timeline
|
|
112
200
|
doctype="Task"
|
|
113
201
|
docname="TASK-001"
|
|
@@ -122,7 +210,7 @@ export const CommentsOnly = () => (
|
|
|
122
210
|
|
|
123
211
|
/** No entries at all: base Timeline empty state plus comment input. */
|
|
124
212
|
export const Empty = () => (
|
|
125
|
-
<FrappeProvider baseURL=
|
|
213
|
+
<FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
|
|
126
214
|
<Timeline
|
|
127
215
|
doctype="Task"
|
|
128
216
|
docname="TASK-EMPTY"
|
|
@@ -134,7 +222,7 @@ export const Empty = () => (
|
|
|
134
222
|
|
|
135
223
|
/** enableAddComment=false must remove the comment composer. */
|
|
136
224
|
export const ReadOnly = () => (
|
|
137
|
-
<FrappeProvider baseURL=
|
|
225
|
+
<FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
|
|
138
226
|
<Timeline doctype="Task" docname="TASK-001" label="Activity" enableAddComment={false} />
|
|
139
227
|
</FrappeProvider>
|
|
140
228
|
);
|
|
@@ -145,7 +233,7 @@ export const ReadOnly = () => (
|
|
|
145
233
|
* (LC-12: even an ejected formatter speaks a human register, never raw ISO).
|
|
146
234
|
*/
|
|
147
235
|
export const AbsoluteTimestamps = () => (
|
|
148
|
-
<FrappeProvider baseURL=
|
|
236
|
+
<FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
|
|
149
237
|
<Timeline
|
|
150
238
|
doctype="Task"
|
|
151
239
|
docname="TASK-001"
|
|
@@ -157,7 +245,40 @@ export const AbsoluteTimestamps = () => (
|
|
|
157
245
|
|
|
158
246
|
/** Compact mode forwards to the base component. */
|
|
159
247
|
export const Compact = () => (
|
|
160
|
-
<FrappeProvider baseURL=
|
|
248
|
+
<FrappeProvider baseURL={MOCK_HOST} fixtures={makeFixtures()}>
|
|
161
249
|
<Timeline doctype="Task" docname="TASK-001" label="Activity" compact />
|
|
162
250
|
</FrappeProvider>
|
|
163
251
|
);
|
|
252
|
+
|
|
253
|
+
// ---------------------------------------------------------------------------
|
|
254
|
+
// Live bench story — real Comment/Version documents over the live data path
|
|
255
|
+
// ---------------------------------------------------------------------------
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Live timeline against the real bench (STORYBOOK_FRAPPE_URL, default the
|
|
259
|
+
* local dev bench proxied by the Storybook dev server). Subscribes to
|
|
260
|
+
* Comment and Version filtered by the target document so desk comments and
|
|
261
|
+
* version rows appear in place. Falls back to fixtures when the bench is
|
|
262
|
+
* unreachable.
|
|
263
|
+
*/
|
|
264
|
+
export const Live = (args: { doctype?: string; docname?: string }) => (
|
|
265
|
+
<FrappeStoryProvider fixtures={makeFixtures()}>
|
|
266
|
+
<Timeline
|
|
267
|
+
doctype={args.doctype || "Task"}
|
|
268
|
+
docname={args.docname || "TASK-001"}
|
|
269
|
+
label="Activity"
|
|
270
|
+
onAddComment={action("onAddComment")}
|
|
271
|
+
onEntryClick={action("onEntryClick")}
|
|
272
|
+
/>
|
|
273
|
+
</FrappeStoryProvider>
|
|
274
|
+
);
|
|
275
|
+
Live.args = { doctype: "", docname: "" };
|
|
276
|
+
Live.argTypes = { doctype: { control: "text" }, docname: { control: "text" } };
|
|
277
|
+
Live.parameters = {
|
|
278
|
+
docs: {
|
|
279
|
+
description: {
|
|
280
|
+
story:
|
|
281
|
+
"Live Comment/Version feed over the real bench: realtime list_update events insert/evict rows in place. Fixture fallback (Task/TASK-001) when the bench is down.",
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
};
|
|
@@ -4,7 +4,7 @@ import { YStack } from "tamagui";
|
|
|
4
4
|
import { FrappeProvider } from "../FrappeProvider";
|
|
5
5
|
import { Awesomebar } from "./awesomebar";
|
|
6
6
|
|
|
7
|
-
export
|
|
7
|
+
export const meta = {
|
|
8
8
|
title: "FrappeUI/Desk/Awesomebar",
|
|
9
9
|
component: Awesomebar,
|
|
10
10
|
tags: ["!test"],
|
|
@@ -13,7 +13,7 @@ export default {
|
|
|
13
13
|
docs: {
|
|
14
14
|
description: {
|
|
15
15
|
component:
|
|
16
|
-
"Global desk search: navigation results (DocType catalog), document results (global_search), inline math, and commands. Backed here by an in-story fetch mock. Try typing 'sales', 'todo', '2+2' or 'settings'.",
|
|
16
|
+
"Global desk search: navigation results (DocType catalog), document results (global_search), inline math, and commands. Trigger height comes from the LC-65 size recipe; radius=full is a pill. Backed here by an in-story fetch mock. Try typing 'sales', 'todo', '2+2' or 'settings'.",
|
|
17
17
|
},
|
|
18
18
|
},
|
|
19
19
|
},
|
|
@@ -21,6 +21,7 @@ export default {
|
|
|
21
21
|
basePath: { control: "text" },
|
|
22
22
|
},
|
|
23
23
|
};
|
|
24
|
+
export default meta;
|
|
24
25
|
|
|
25
26
|
const MOCK_HOST = "https://awesomebar.mock.test";
|
|
26
27
|
const ERR_HOST = "https://forbidden.awesomebar.mock.test";
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
|
|
19
19
|
import React, { useEffect } from "react";
|
|
20
20
|
import { useTranslation } from "react-i18next";
|
|
21
|
-
import { Button,
|
|
21
|
+
import { Button, formCommonColors } from "@multiplatform.one/forms";
|
|
22
|
+
import { Text, YStack } from "tamagui";
|
|
22
23
|
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
23
24
|
import { ArrowLeftIcon } from "@phosphor-icons/react";
|
|
24
25
|
import { DeskShell } from "./DeskShell";
|
|
@@ -82,7 +83,7 @@ export function DeskFormPage({ doctype, name, onNavigate }: DeskFormPageProps) {
|
|
|
82
83
|
{...knobProps.containerRadius}
|
|
83
84
|
{...knobProps.gap}
|
|
84
85
|
>
|
|
85
|
-
<Text color=
|
|
86
|
+
<Text color={formCommonColors.muted} {...knobProps.body}>
|
|
86
87
|
{t("No DocType specified")}
|
|
87
88
|
</Text>
|
|
88
89
|
</YStack>
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
import React from "react";
|
|
14
14
|
import { useTranslation } from "react-i18next";
|
|
15
|
+
import { formCommonColors } from "@multiplatform.one/forms";
|
|
15
16
|
import { Text, YStack } from "tamagui";
|
|
16
17
|
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
17
18
|
import { DeskShell } from "./DeskShell";
|
|
@@ -60,7 +61,7 @@ export function DeskListPage({ doctype, onNavigate }: DeskListPageProps) {
|
|
|
60
61
|
{...knobProps.containerRadius}
|
|
61
62
|
{...knobProps.gap}
|
|
62
63
|
>
|
|
63
|
-
<Text color=
|
|
64
|
+
<Text color={formCommonColors.muted} {...knobProps.body}>
|
|
64
65
|
{t("No DocType specified")}
|
|
65
66
|
</Text>
|
|
66
67
|
</YStack>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { InMemoryFixtureProvider } from "@multiplatform.one/frappe";
|
|
2
2
|
import { action } from "@multiplatform.one/storybook";
|
|
3
|
-
import { Text, YStack } from "
|
|
3
|
+
import { Text, YStack } from "@multiplatform.one/components";
|
|
4
4
|
import { FrappeProvider } from "../FrappeProvider";
|
|
5
5
|
import { DeskShell } from "./DeskShell";
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ export default {
|
|
|
14
14
|
docs: {
|
|
15
15
|
description: {
|
|
16
16
|
component:
|
|
17
|
-
"Top-level desk layout: Awesomebar header, DeskSidebar nav, breadcrumbs and main content. Navigation search is served by an in-story fetch mock.",
|
|
17
|
+
"Top-level desk layout: Awesomebar header, DeskSidebar nav, breadcrumbs and main content. Navigation search is served by an in-story fetch mock. Shell chrome rides house Button, phosphor icons, and surface/heading/gap/panelPadding knobs (R-NONE inverted-L).",
|
|
18
18
|
},
|
|
19
19
|
},
|
|
20
20
|
},
|
|
@@ -140,3 +140,22 @@ export const Bare = () => (
|
|
|
140
140
|
<DeskShell onNavigate={action("onNavigate")}>{content(1)}</DeskShell>
|
|
141
141
|
</YStack>
|
|
142
142
|
);
|
|
143
|
+
|
|
144
|
+
/** Compact viewport: rail collapses to a phosphor toggle + overlay drawer. */
|
|
145
|
+
export const Narrow = () => (
|
|
146
|
+
<FrappeProvider baseURL={MOCK_HOST} fixtures={new InMemoryFixtureProvider({})}>
|
|
147
|
+
<YStack height={640}>
|
|
148
|
+
<DeskShell
|
|
149
|
+
breadcrumbs={[{ label: "Desk", href: "/desk" }, { label: "Todo" }]}
|
|
150
|
+
onNavigate={action("onNavigate")}
|
|
151
|
+
activePath="/desk/Todo"
|
|
152
|
+
>
|
|
153
|
+
{content(3)}
|
|
154
|
+
</DeskShell>
|
|
155
|
+
</YStack>
|
|
156
|
+
</FrappeProvider>
|
|
157
|
+
);
|
|
158
|
+
Narrow.parameters = {
|
|
159
|
+
viewport: { defaultViewport: "mobile1" },
|
|
160
|
+
};
|
|
161
|
+
Narrow.storyName = "Narrow";
|
package/src/desk/DeskShell.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* DeskShell - Top-level layout component for Frappe Desk.
|
|
3
3
|
*
|
|
4
|
-
* Composes the Awesomebar (top), DeskSidebar (
|
|
4
|
+
* Composes the Awesomebar (top), DeskSidebar (start-edge), Breadcrumbs,
|
|
5
5
|
* and a main content area into a full-page desk layout.
|
|
6
6
|
*
|
|
7
7
|
* Uses semantic HTML elements via Tamagui's `tag` prop for accessibility:
|
|
@@ -11,23 +11,31 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Narrow viewports (<640px): sidebar becomes an overlay drawer so main
|
|
13
13
|
* content keeps the full width (SB-M-1706). Banner bottom border follows
|
|
14
|
-
* the surface borderWidth knob (SB-M-1708).
|
|
14
|
+
* the surface borderWidth knob (SB-M-1708). Shell chrome is R-NONE (no
|
|
15
|
+
* radius on the inverted-L) and consumes house Button / phosphor icons
|
|
16
|
+
* so knobs and DG-IDN-06 reach the banner.
|
|
15
17
|
*/
|
|
16
18
|
|
|
17
19
|
import { useHotkey } from "@tanstack/react-hotkeys";
|
|
18
20
|
import type React from "react";
|
|
19
21
|
import { useCallback, useEffect, useState } from "react";
|
|
20
22
|
import { useTranslation } from "react-i18next";
|
|
21
|
-
import {
|
|
22
|
-
import { NARROW_BREAKPOINT, useLayoutSizeClass, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
23
|
-
import { Awesomebar } from "./awesomebar";
|
|
23
|
+
import { ListIcon, XIcon } from "@phosphor-icons/react";
|
|
24
24
|
import {
|
|
25
25
|
Breadcrumbs,
|
|
26
|
+
Button,
|
|
26
27
|
CONTENT_MAX_WIDTH,
|
|
27
28
|
PageHeadingScope,
|
|
29
|
+
SizableText,
|
|
30
|
+
SkipLink,
|
|
31
|
+
XStack,
|
|
32
|
+
YStack,
|
|
33
|
+
isWeb,
|
|
28
34
|
useDocumentTitle,
|
|
29
35
|
type BreadcrumbItem,
|
|
30
36
|
} from "@multiplatform.one/components";
|
|
37
|
+
import { NARROW_BREAKPOINT, useLayoutSizeClass, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
38
|
+
import { Awesomebar } from "./awesomebar";
|
|
31
39
|
import { DeskSidebar } from "./DeskSidebar";
|
|
32
40
|
|
|
33
41
|
// ---------------------------------------------------------------------------
|
|
@@ -67,6 +75,13 @@ function useIsNarrowDesk(): boolean {
|
|
|
67
75
|
return useLayoutSizeClass() === "compact";
|
|
68
76
|
}
|
|
69
77
|
|
|
78
|
+
/** Size token is a HEIGHT key — map the banner min-height from it, never fontSize. */
|
|
79
|
+
function bannerMinHeight(sizeToken: string): "$5" | "$6" | "$7" {
|
|
80
|
+
if (sizeToken === "$5") return "$7";
|
|
81
|
+
if (sizeToken === "$3") return "$5";
|
|
82
|
+
return "$6";
|
|
83
|
+
}
|
|
84
|
+
|
|
70
85
|
// ---------------------------------------------------------------------------
|
|
71
86
|
// Component
|
|
72
87
|
// ---------------------------------------------------------------------------
|
|
@@ -80,7 +95,7 @@ export function DeskShell({
|
|
|
80
95
|
showAwesomebar = true,
|
|
81
96
|
}: DeskShellProps) {
|
|
82
97
|
const { t } = useTranslation();
|
|
83
|
-
const { knobProps } = useResolvedKnobs();
|
|
98
|
+
const { knobProps } = useResolvedKnobs({ component: "DeskShell" });
|
|
84
99
|
const isNarrow = useIsNarrowDesk();
|
|
85
100
|
const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
|
|
86
101
|
|
|
@@ -105,6 +120,7 @@ export function DeskShell({
|
|
|
105
120
|
useHotkey(
|
|
106
121
|
"Mod+K",
|
|
107
122
|
() => {
|
|
123
|
+
if (typeof document === "undefined") return;
|
|
108
124
|
const input = document.querySelector<HTMLInputElement>("[data-awesomebar-input]");
|
|
109
125
|
if (input) input.focus();
|
|
110
126
|
},
|
|
@@ -118,6 +134,7 @@ export function DeskShell({
|
|
|
118
134
|
setMobileSidebarOpen(false);
|
|
119
135
|
return;
|
|
120
136
|
}
|
|
137
|
+
if (typeof document === "undefined") return;
|
|
121
138
|
if (document.activeElement instanceof HTMLElement) {
|
|
122
139
|
document.activeElement.blur();
|
|
123
140
|
}
|
|
@@ -127,51 +144,48 @@ export function DeskShell({
|
|
|
127
144
|
|
|
128
145
|
const surfaceBorderWidth = knobProps.surface.borderWidth;
|
|
129
146
|
const showMobileToggle = showSidebar && isNarrow;
|
|
147
|
+
const drawerEdge = isWeb ? { insetInlineStart: 0 } : { start: 0 };
|
|
130
148
|
|
|
131
149
|
const toggleButton = showMobileToggle ? (
|
|
132
150
|
<Button
|
|
133
|
-
size="$3"
|
|
134
151
|
chromeless
|
|
135
152
|
circular
|
|
153
|
+
icon={mobileSidebarOpen ? XIcon : ListIcon}
|
|
136
154
|
aria-label={t("Toggle sidebar")}
|
|
137
155
|
aria-expanded={mobileSidebarOpen}
|
|
138
156
|
aria-controls="desk-sidebar"
|
|
139
157
|
onPress={() => setMobileSidebarOpen((open) => !open)}
|
|
140
|
-
marginEnd="$2"
|
|
141
158
|
data-testid="desk-sidebar-toggle"
|
|
142
|
-
|
|
143
|
-
<Text fontSize="$5" lineHeight="$5">
|
|
144
|
-
{mobileSidebarOpen ? "\u2715" : "\u2630"}
|
|
145
|
-
</Text>
|
|
146
|
-
</Button>
|
|
159
|
+
/>
|
|
147
160
|
) : null;
|
|
148
161
|
|
|
162
|
+
const chromeBorder = {
|
|
163
|
+
borderWidth: 0,
|
|
164
|
+
borderRadius: 0,
|
|
165
|
+
borderBottomWidth: surfaceBorderWidth,
|
|
166
|
+
borderBottomColor: knobProps.surface.borderColor,
|
|
167
|
+
} as const;
|
|
168
|
+
|
|
149
169
|
return (
|
|
150
170
|
<YStack flex={1} height="100%" width="100%" overflow="hidden" data-testid="desk-shell">
|
|
151
|
-
{
|
|
171
|
+
{isWeb ? <SkipLink targetId="desk-main">{t("Skip to content")}</SkipLink> : null}
|
|
172
|
+
|
|
173
|
+
{/* Header with Awesomebar — R-NONE full-bleed chrome; knobs own pad/gap/type. */}
|
|
152
174
|
{showAwesomebar && (
|
|
153
175
|
<XStack
|
|
154
176
|
role="banner"
|
|
155
177
|
{...knobProps.surface}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
borderBottomColor={knobProps.surface.borderColor}
|
|
161
|
-
height={knobProps.sizeToken === "$5" ? "$7" : knobProps.sizeToken === "$3" ? "$5" : "$6"}
|
|
178
|
+
{...knobProps.gap}
|
|
179
|
+
{...knobProps.panelPadding}
|
|
180
|
+
{...chromeBorder}
|
|
181
|
+
minHeight={bannerMinHeight(knobProps.sizeToken)}
|
|
162
182
|
alignItems="center"
|
|
163
|
-
paddingHorizontal="$4"
|
|
164
183
|
flexShrink={0}
|
|
165
184
|
>
|
|
166
185
|
{toggleButton}
|
|
167
|
-
<
|
|
168
|
-
fontSize={knobProps.sizeToken}
|
|
169
|
-
marginEnd="$4"
|
|
170
|
-
{...knobProps.heading}
|
|
171
|
-
fontWeight="700"
|
|
172
|
-
>
|
|
186
|
+
<SizableText {...knobProps.heading} {...knobProps.controlType} flexShrink={0}>
|
|
173
187
|
{t("Desk")}
|
|
174
|
-
</
|
|
188
|
+
</SizableText>
|
|
175
189
|
<Awesomebar onNavigate={handleNavigate} flex={1} minWidth={0} />
|
|
176
190
|
</XStack>
|
|
177
191
|
)}
|
|
@@ -179,11 +193,11 @@ export function DeskShell({
|
|
|
179
193
|
{/* Narrow + no awesomebar: still expose the drawer toggle */}
|
|
180
194
|
{!showAwesomebar && showMobileToggle && (
|
|
181
195
|
<XStack
|
|
196
|
+
{...knobProps.surface}
|
|
197
|
+
{...knobProps.gap}
|
|
198
|
+
{...knobProps.panelPadding}
|
|
199
|
+
{...chromeBorder}
|
|
182
200
|
alignItems="center"
|
|
183
|
-
paddingHorizontal="$3"
|
|
184
|
-
paddingVertical="$2"
|
|
185
|
-
borderBottomWidth={surfaceBorderWidth}
|
|
186
|
-
borderBottomColor={knobProps.surface.borderColor}
|
|
187
201
|
flexShrink={0}
|
|
188
202
|
>
|
|
189
203
|
{toggleButton}
|
|
@@ -191,7 +205,7 @@ export function DeskShell({
|
|
|
191
205
|
)}
|
|
192
206
|
|
|
193
207
|
<XStack flex={1} minWidth={0} position="relative" overflow="hidden">
|
|
194
|
-
{/* Desktop nav sidebar — in flow */}
|
|
208
|
+
{/* Desktop nav sidebar — in flow. Sidebar owns the painted surface. */}
|
|
195
209
|
{showSidebar && !isNarrow && (
|
|
196
210
|
<YStack
|
|
197
211
|
role="navigation"
|
|
@@ -212,7 +226,8 @@ export function DeskShell({
|
|
|
212
226
|
left={0}
|
|
213
227
|
right={0}
|
|
214
228
|
bottom={0}
|
|
215
|
-
backgroundColor="
|
|
229
|
+
backgroundColor="$shadowColor"
|
|
230
|
+
opacity={0.5}
|
|
216
231
|
zIndex={10}
|
|
217
232
|
onPress={() => setMobileSidebarOpen(false)}
|
|
218
233
|
data-testid="desk-sidebar-scrim"
|
|
@@ -222,10 +237,11 @@ export function DeskShell({
|
|
|
222
237
|
id="desk-sidebar"
|
|
223
238
|
position="absolute"
|
|
224
239
|
top={0}
|
|
225
|
-
left={0}
|
|
226
240
|
bottom={0}
|
|
227
241
|
zIndex={11}
|
|
228
|
-
|
|
242
|
+
{...drawerEdge}
|
|
243
|
+
{...knobProps.surface}
|
|
244
|
+
borderRadius={0}
|
|
229
245
|
data-testid="desk-sidebar-drawer"
|
|
230
246
|
>
|
|
231
247
|
<DeskSidebar onNavigate={handleNavigate} activePath={activePath} />
|
|
@@ -234,15 +250,16 @@ export function DeskShell({
|
|
|
234
250
|
)}
|
|
235
251
|
|
|
236
252
|
{/* Main content */}
|
|
237
|
-
<YStack role="main" flex={1} minWidth={0}>
|
|
253
|
+
<YStack role="main" id="desk-main" tabIndex={-1} flex={1} minWidth={0} minHeight={0}>
|
|
238
254
|
{/* DG-A11Y-02: one h1 budget per desk page (multiple-h1 DEV warn). */}
|
|
239
255
|
<PageHeadingScope name="DeskShell">
|
|
240
256
|
{/* Breadcrumbs — LC-35 WAYFINDING-CHROMELESS / Axiom 16: the
|
|
241
257
|
chromeless trail sits ON the page column's alignment line.
|
|
242
258
|
The shell renders above the page scaffold, so it mirrors
|
|
243
259
|
Screen's content column (max-width cap + centering +
|
|
244
|
-
panelPadding inset) to share the exact x
|
|
245
|
-
give headings and content.
|
|
260
|
+
panelPadding inset on the inline axis) to share the exact x
|
|
261
|
+
that page templates give headings and content. Vertical pad
|
|
262
|
+
stays 0 so the trail does not inflate above the page. */}
|
|
246
263
|
{breadcrumbs && breadcrumbs.length > 0 && (
|
|
247
264
|
<YStack
|
|
248
265
|
width="100%"
|
package/src/desk/awesomebar.tsx
CHANGED
|
@@ -20,11 +20,11 @@ import {
|
|
|
20
20
|
import { useHotkey } from "@tanstack/react-hotkeys";
|
|
21
21
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
22
22
|
import { useTranslation } from "react-i18next";
|
|
23
|
-
import {
|
|
24
|
-
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
25
|
-
import { Combobox, type ComboboxOption } from "@multiplatform.one/forms";
|
|
23
|
+
import { Combobox, formCommonColors, type ComboboxOption } from "@multiplatform.one/forms";
|
|
26
24
|
import { writeToClipboard } from "@multiplatform.one/platform";
|
|
27
25
|
import { storage } from "@multiplatform.one/store";
|
|
26
|
+
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
27
|
+
import { Text, View, XStack, isWeb, type XStackProps } from "tamagui";
|
|
28
28
|
import { useFrappeConfig } from "../FrappeProvider";
|
|
29
29
|
|
|
30
30
|
// ---------------------------------------------------------------------------
|
|
@@ -133,7 +133,7 @@ function matchingCommands(query: string): Array<{ label: string; path: string }>
|
|
|
133
133
|
|
|
134
134
|
export function Awesomebar({ onNavigate, basePath = "/desk", ...stackProps }: AwesomebarProps) {
|
|
135
135
|
const { t } = useTranslation();
|
|
136
|
-
const { knobProps } = useResolvedKnobs();
|
|
136
|
+
const { knobProps, control } = useResolvedKnobs();
|
|
137
137
|
const config = useFrappeConfig();
|
|
138
138
|
const [query, setQuery] = useState("");
|
|
139
139
|
const [docResults, setDocResults] = useState<DocSearchResult[]>([]);
|
|
@@ -311,34 +311,39 @@ export function Awesomebar({ onNavigate, basePath = "/desk", ...stackProps }: Aw
|
|
|
311
311
|
useHotkey(
|
|
312
312
|
"Mod+K",
|
|
313
313
|
() => {
|
|
314
|
-
|
|
315
|
-
const trigger = document.querySelector("[data-awesomebar-trigger]") as HTMLElement;
|
|
314
|
+
if (!isWeb || typeof document === "undefined") return;
|
|
315
|
+
const trigger = document.querySelector("[data-awesomebar-trigger]") as HTMLElement | null;
|
|
316
316
|
trigger?.click();
|
|
317
317
|
},
|
|
318
318
|
{ conflictBehavior: "allow" },
|
|
319
319
|
);
|
|
320
320
|
|
|
321
|
-
//
|
|
322
|
-
// to collapse Tamagui `height` — pin via style
|
|
323
|
-
|
|
321
|
+
// Height from the LC-65 size recipe (not a private px map). Combobox's
|
|
322
|
+
// custom-trigger wrapper used to collapse Tamagui `height` — pin via style
|
|
323
|
+
// + outer shell (SB-M-1703).
|
|
324
|
+
const triggerHeight = knobProps.control.height;
|
|
324
325
|
|
|
325
|
-
// Custom trigger that shows the search input
|
|
326
326
|
const renderTrigger = useCallback(
|
|
327
327
|
(_selected: ComboboxOption | ComboboxOption[] | undefined, open: boolean) => (
|
|
328
328
|
<XStack
|
|
329
329
|
data-awesomebar-trigger
|
|
330
330
|
width="100%"
|
|
331
331
|
alignItems="center"
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
paddingHorizontal={knobProps.sizeToken}
|
|
336
|
-
backgroundColor={open ? "$background" : "$color2"}
|
|
332
|
+
cursor="text"
|
|
333
|
+
backgroundColor={knobProps.inputBackground}
|
|
334
|
+
{...knobProps.control}
|
|
337
335
|
{...knobProps.inputSurface}
|
|
338
336
|
{...knobProps.borderRadius}
|
|
339
|
-
borderColor={open ? "$
|
|
340
|
-
|
|
341
|
-
|
|
337
|
+
borderColor={open ? "$borderColorFocus" : "$borderColor"}
|
|
338
|
+
hoverStyle={{
|
|
339
|
+
borderColor: "$borderColorHover",
|
|
340
|
+
...control.hoverKnobProps,
|
|
341
|
+
}}
|
|
342
|
+
pressStyle={{ ...control.pressKnobProps }}
|
|
343
|
+
focusVisibleStyle={{
|
|
344
|
+
borderColor: "$borderColorFocus",
|
|
345
|
+
...control.focusVisibleKnobProps,
|
|
346
|
+
}}
|
|
342
347
|
// Inline style wins over flex-shrink collapse of the Combobox wrapper.
|
|
343
348
|
style={{
|
|
344
349
|
height: triggerHeight,
|
|
@@ -352,10 +357,10 @@ export function Awesomebar({ onNavigate, basePath = "/desk", ...stackProps }: Aw
|
|
|
352
357
|
>
|
|
353
358
|
<Text
|
|
354
359
|
flex={1}
|
|
355
|
-
fontSize={knobProps.sizeToken}
|
|
356
|
-
color="$color10"
|
|
357
360
|
numberOfLines={1}
|
|
361
|
+
color={formCommonColors.muted}
|
|
358
362
|
{...knobProps.body}
|
|
363
|
+
{...knobProps.controlType}
|
|
359
364
|
>
|
|
360
365
|
{t("Search or type a command...")}
|
|
361
366
|
</Text>
|
|
@@ -364,14 +369,20 @@ export function Awesomebar({ onNavigate, basePath = "/desk", ...stackProps }: Aw
|
|
|
364
369
|
paddingVertical="$1"
|
|
365
370
|
backgroundColor="$color3"
|
|
366
371
|
{...knobProps.borderRadius}
|
|
372
|
+
borderWidth={0}
|
|
367
373
|
>
|
|
368
|
-
<Text
|
|
374
|
+
<Text
|
|
375
|
+
fontFamily="$mono"
|
|
376
|
+
color={formCommonColors.muted}
|
|
377
|
+
{...knobProps.controlType}
|
|
378
|
+
{...knobProps.textWeight}
|
|
379
|
+
>
|
|
369
380
|
⌘K
|
|
370
381
|
</Text>
|
|
371
382
|
</View>
|
|
372
383
|
</XStack>
|
|
373
384
|
),
|
|
374
|
-
[knobProps, t, triggerHeight],
|
|
385
|
+
[control, knobProps, t, triggerHeight],
|
|
375
386
|
);
|
|
376
387
|
|
|
377
388
|
return (
|
|
@@ -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 {
|
|
@@ -224,4 +225,19 @@ describe("form adapters (registry context)", () => {
|
|
|
224
225
|
it("unregistered fieldtypes resolve to undefined (SchemaForm renders the honest fallback)", () => {
|
|
225
226
|
expect(getFieldComponent("Some Custom Type")).toBeUndefined();
|
|
226
227
|
});
|
|
228
|
+
|
|
229
|
+
it("Button is in the FrappeFieldType union and adapts to the house Button", () => {
|
|
230
|
+
const fieldtype: FrappeFieldType = "Button";
|
|
231
|
+
expect(fieldtype).toBe("Button");
|
|
232
|
+
const ButtonComponent = getFieldComponent("Button")!;
|
|
233
|
+
expect(ButtonComponent).toBeDefined();
|
|
234
|
+
const element = (ButtonComponent as Function)(
|
|
235
|
+
propsFor({
|
|
236
|
+
label: "Make Payment Entry",
|
|
237
|
+
fieldMeta: { type: "Button", name: "make_payment_entry" },
|
|
238
|
+
}),
|
|
239
|
+
) as InspectableElement;
|
|
240
|
+
expect(element.type).toBe(Button);
|
|
241
|
+
expect(element.props.children).toBe("Make Payment Entry");
|
|
242
|
+
});
|
|
227
243
|
});
|