@multiplatform.one/frappe-ui 7.45.1 → 7.47.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/index.cjs +1 -1
- package/dist/cjs/FileBrowser/index.native.js +1 -1
- package/dist/cjs/FileBrowser/index.native.js.map +1 -1
- package/dist/cjs/FrappeCalendar.cjs +2 -2
- package/dist/cjs/FrappeCalendar.native.js +2 -2
- package/dist/cjs/FrappeCalendar.native.js.map +1 -1
- package/dist/cjs/FrappeConnectionIndicator.cjs +2 -1
- package/dist/cjs/FrappeConnectionIndicator.native.js +2 -1
- package/dist/cjs/FrappeConnectionIndicator.native.js.map +1 -1
- package/dist/cjs/FrappeDashboard.cjs +1 -1
- package/dist/cjs/FrappeDashboard.native.js +1 -1
- package/dist/cjs/FrappeDashboard.native.js.map +1 -1
- package/dist/cjs/FrappeForm.cjs +54 -29
- package/dist/cjs/FrappeForm.native.js +56 -28
- package/dist/cjs/FrappeForm.native.js.map +1 -1
- package/dist/cjs/FrappeFormActions.cjs +121 -0
- package/dist/cjs/FrappeFormActions.native.js +123 -0
- package/dist/cjs/FrappeFormActions.native.js.map +1 -1
- package/dist/cjs/FrappeInsights.cjs +4 -1
- package/dist/cjs/FrappeInsights.native.js +4 -6
- package/dist/cjs/FrappeInsights.native.js.map +1 -1
- package/dist/cjs/FrappeKanban.cjs +1 -1
- package/dist/cjs/FrappeKanban.native.js +1 -1
- package/dist/cjs/FrappeKanban.native.js.map +1 -1
- package/dist/cjs/FrappeListView.cjs +1 -1
- package/dist/cjs/FrappeListView.native.js +4 -7
- package/dist/cjs/FrappeListView.native.js.map +1 -1
- package/dist/cjs/FrappeReconnectIndicator.cjs +2 -1
- package/dist/cjs/FrappeReconnectIndicator.native.js +2 -1
- package/dist/cjs/FrappeReconnectIndicator.native.js.map +1 -1
- package/dist/cjs/SyncErrorNotice.cjs +1 -1
- package/dist/cjs/SyncErrorNotice.native.js +1 -1
- package/dist/cjs/SyncErrorNotice.native.js.map +1 -1
- package/dist/cjs/desk/DeskFormPage.cjs +28 -42
- package/dist/cjs/desk/DeskFormPage.native.js +42 -58
- package/dist/cjs/desk/DeskFormPage.native.js.map +1 -1
- package/dist/cjs/desk/DeskShell.cjs +1 -1
- package/dist/cjs/desk/DeskShell.native.js +1 -1
- package/dist/cjs/desk/DeskShell.native.js.map +1 -1
- package/dist/cjs/desk/awesomebar.cjs +1 -1
- package/dist/cjs/desk/awesomebar.native.js +1 -1
- package/dist/cjs/desk/awesomebar.native.js.map +1 -1
- package/dist/cjs/fields/CodeEditor/index.cjs +1 -1
- package/dist/cjs/fields/CodeEditor/index.native.js +1 -1
- package/dist/cjs/fields/CodeEditor/index.native.js.map +1 -1
- package/dist/cjs/fields/Date/index.native.js +5 -4
- package/dist/cjs/fields/Date/index.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload.cjs +10 -8
- package/dist/cjs/fields/FileUpload.native.js +10 -8
- package/dist/cjs/fields/FileUpload.native.js.map +1 -1
- package/dist/cjs/fields/FileUploadField/index.cjs +50 -4
- package/dist/cjs/fields/FileUploadField/index.native.js +54 -5
- package/dist/cjs/fields/FileUploadField/index.native.js.map +1 -1
- package/dist/cjs/fields/Heading/index.cjs +1 -1
- package/dist/cjs/fields/Heading/index.native.js +1 -1
- package/dist/cjs/fields/Heading/index.native.js.map +1 -1
- package/dist/cjs/fields/MarkdownEditor/index.native.js +3 -2
- package/dist/cjs/fields/MarkdownEditor/index.native.js.map +1 -1
- package/dist/cjs/fields/Numeric/index.cjs +3 -2
- package/dist/cjs/fields/Numeric/index.native.js +3 -2
- package/dist/cjs/fields/Numeric/index.native.js.map +1 -1
- package/dist/cjs/fields/Password/index.cjs +18 -62
- package/dist/cjs/fields/Password/index.native.js +18 -65
- package/dist/cjs/fields/Password/index.native.js.map +1 -1
- package/dist/cjs/fields/ReadOnly/index.cjs +2 -1
- package/dist/cjs/fields/ReadOnly/index.native.js +2 -1
- package/dist/cjs/fields/ReadOnly/index.native.js.map +1 -1
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.native.js +2 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/insights/InsightsLeaders.cjs +2 -2
- package/dist/cjs/insights/InsightsLeaders.native.js +2 -2
- package/dist/cjs/insights/InsightsLeaders.native.js.map +1 -1
- package/dist/cjs/insights/InsightsRecords.cjs +2 -2
- package/dist/cjs/insights/InsightsRecords.native.js +2 -2
- package/dist/cjs/insights/InsightsRecords.native.js.map +1 -1
- package/dist/cjs/list/FacetBadge.cjs +4 -3
- package/dist/cjs/list/FacetBadge.native.js +4 -3
- package/dist/cjs/list/FacetBadge.native.js.map +1 -1
- package/dist/cjs/list/ImageWell.cjs +6 -18
- package/dist/cjs/list/ImageWell.native.js +7 -19
- package/dist/cjs/list/ImageWell.native.js.map +1 -1
- package/dist/cjs/list/RecordCard.cjs +2 -2
- package/dist/cjs/list/RecordCard.native.js +2 -2
- package/dist/cjs/list/RecordCard.native.js.map +1 -1
- package/dist/cjs/list/facetBadgeSteps.cjs +32 -0
- package/dist/cjs/list/facetBadgeSteps.native.js +35 -0
- package/dist/cjs/list/facetBadgeSteps.native.js.map +1 -0
- package/dist/cjs/record/RecordHero.cjs +4 -15
- package/dist/cjs/record/RecordHero.native.js +4 -15
- package/dist/cjs/record/RecordHero.native.js.map +1 -1
- package/dist/cjs/record/RecordPage.cjs +4 -4
- package/dist/cjs/record/RecordPage.native.js +7 -10
- package/dist/cjs/record/RecordPage.native.js.map +1 -1
- package/dist/cjs/report/ReportGrid.cjs +6 -6
- package/dist/cjs/report/ReportGrid.native.js +11 -7
- package/dist/cjs/report/ReportGrid.native.js.map +1 -1
- package/dist/cjs/schemaForm/index.cjs +3 -3
- package/dist/cjs/schemaForm/index.native.js +3 -3
- package/dist/cjs/schemaForm/index.native.js.map +1 -1
- package/dist/esm/FileBrowser/index.mjs +8 -8
- package/dist/esm/FileBrowser/index.mjs.map +1 -1
- package/dist/esm/FileBrowser/index.native.js +8 -8
- package/dist/esm/FileBrowser/index.native.js.map +1 -1
- package/dist/esm/FrappeCalendar.mjs +6 -6
- package/dist/esm/FrappeCalendar.mjs.map +1 -1
- package/dist/esm/FrappeCalendar.native.js +6 -6
- package/dist/esm/FrappeCalendar.native.js.map +1 -1
- package/dist/esm/FrappeConnectionIndicator.mjs +2 -1
- package/dist/esm/FrappeConnectionIndicator.mjs.map +1 -1
- package/dist/esm/FrappeConnectionIndicator.native.js +2 -1
- package/dist/esm/FrappeConnectionIndicator.native.js.map +1 -1
- package/dist/esm/FrappeDashboard.mjs +6 -6
- package/dist/esm/FrappeDashboard.mjs.map +1 -1
- package/dist/esm/FrappeDashboard.native.js +6 -6
- package/dist/esm/FrappeDashboard.native.js.map +1 -1
- package/dist/esm/FrappeForm.mjs +52 -27
- package/dist/esm/FrappeForm.mjs.map +1 -1
- package/dist/esm/FrappeForm.native.js +56 -28
- package/dist/esm/FrappeForm.native.js.map +1 -1
- package/dist/esm/FrappeFormActions.mjs +122 -2
- package/dist/esm/FrappeFormActions.mjs.map +1 -1
- package/dist/esm/FrappeFormActions.native.js +124 -2
- package/dist/esm/FrappeFormActions.native.js.map +1 -1
- package/dist/esm/FrappeInsights.mjs +4 -1
- package/dist/esm/FrappeInsights.mjs.map +1 -1
- package/dist/esm/FrappeInsights.native.js +4 -6
- package/dist/esm/FrappeInsights.native.js.map +1 -1
- package/dist/esm/FrappeKanban.mjs +5 -5
- package/dist/esm/FrappeKanban.mjs.map +1 -1
- package/dist/esm/FrappeKanban.native.js +5 -5
- package/dist/esm/FrappeKanban.native.js.map +1 -1
- package/dist/esm/FrappeListView.mjs +1 -1
- package/dist/esm/FrappeListView.mjs.map +1 -1
- package/dist/esm/FrappeListView.native.js +4 -7
- package/dist/esm/FrappeListView.native.js.map +1 -1
- package/dist/esm/FrappeReconnectIndicator.mjs +2 -1
- package/dist/esm/FrappeReconnectIndicator.mjs.map +1 -1
- package/dist/esm/FrappeReconnectIndicator.native.js +2 -1
- package/dist/esm/FrappeReconnectIndicator.native.js.map +1 -1
- package/dist/esm/SyncErrorNotice.mjs +2 -2
- package/dist/esm/SyncErrorNotice.mjs.map +1 -1
- package/dist/esm/SyncErrorNotice.native.js +2 -2
- package/dist/esm/SyncErrorNotice.native.js.map +1 -1
- package/dist/esm/desk/DeskFormPage.mjs +29 -43
- package/dist/esm/desk/DeskFormPage.mjs.map +1 -1
- package/dist/esm/desk/DeskFormPage.native.js +43 -59
- package/dist/esm/desk/DeskFormPage.native.js.map +1 -1
- package/dist/esm/desk/DeskShell.mjs +1 -1
- package/dist/esm/desk/DeskShell.mjs.map +1 -1
- package/dist/esm/desk/DeskShell.native.js +1 -1
- package/dist/esm/desk/DeskShell.native.js.map +1 -1
- package/dist/esm/desk/awesomebar.mjs +1 -1
- package/dist/esm/desk/awesomebar.mjs.map +1 -1
- package/dist/esm/desk/awesomebar.native.js +1 -1
- package/dist/esm/desk/awesomebar.native.js.map +1 -1
- package/dist/esm/fields/CodeEditor/index.mjs +3 -3
- package/dist/esm/fields/CodeEditor/index.mjs.map +1 -1
- package/dist/esm/fields/CodeEditor/index.native.js +3 -3
- package/dist/esm/fields/CodeEditor/index.native.js.map +1 -1
- package/dist/esm/fields/Date/index.native.js +2 -1
- package/dist/esm/fields/Date/index.native.js.map +1 -1
- package/dist/esm/fields/FileUpload.mjs +5 -3
- package/dist/esm/fields/FileUpload.mjs.map +1 -1
- package/dist/esm/fields/FileUpload.native.js +5 -3
- package/dist/esm/fields/FileUpload.native.js.map +1 -1
- package/dist/esm/fields/FileUploadField/index.mjs +52 -6
- package/dist/esm/fields/FileUploadField/index.mjs.map +1 -1
- package/dist/esm/fields/FileUploadField/index.native.js +56 -7
- package/dist/esm/fields/FileUploadField/index.native.js.map +1 -1
- package/dist/esm/fields/Heading/index.mjs +3 -3
- package/dist/esm/fields/Heading/index.mjs.map +1 -1
- package/dist/esm/fields/Heading/index.native.js +3 -3
- package/dist/esm/fields/Heading/index.native.js.map +1 -1
- package/dist/esm/fields/MarkdownEditor/index.native.js +2 -1
- package/dist/esm/fields/MarkdownEditor/index.native.js.map +1 -1
- package/dist/esm/fields/Numeric/index.mjs +2 -1
- package/dist/esm/fields/Numeric/index.mjs.map +1 -1
- package/dist/esm/fields/Numeric/index.native.js +2 -1
- package/dist/esm/fields/Numeric/index.native.js.map +1 -1
- package/dist/esm/fields/Password/index.mjs +16 -60
- package/dist/esm/fields/Password/index.mjs.map +1 -1
- package/dist/esm/fields/Password/index.native.js +16 -63
- package/dist/esm/fields/Password/index.native.js.map +1 -1
- package/dist/esm/fields/ReadOnly/index.mjs +7 -6
- package/dist/esm/fields/ReadOnly/index.mjs.map +1 -1
- package/dist/esm/fields/ReadOnly/index.native.js +7 -6
- package/dist/esm/fields/ReadOnly/index.native.js.map +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/insights/InsightsLeaders.mjs +2 -2
- package/dist/esm/insights/InsightsLeaders.mjs.map +1 -1
- package/dist/esm/insights/InsightsLeaders.native.js +2 -2
- package/dist/esm/insights/InsightsLeaders.native.js.map +1 -1
- package/dist/esm/insights/InsightsRecords.mjs +2 -2
- package/dist/esm/insights/InsightsRecords.mjs.map +1 -1
- package/dist/esm/insights/InsightsRecords.native.js +2 -2
- package/dist/esm/insights/InsightsRecords.native.js.map +1 -1
- package/dist/esm/list/FacetBadge.mjs +4 -3
- package/dist/esm/list/FacetBadge.mjs.map +1 -1
- package/dist/esm/list/FacetBadge.native.js +4 -3
- package/dist/esm/list/FacetBadge.native.js.map +1 -1
- package/dist/esm/list/ImageWell.mjs +8 -20
- package/dist/esm/list/ImageWell.mjs.map +1 -1
- package/dist/esm/list/ImageWell.native.js +9 -21
- package/dist/esm/list/ImageWell.native.js.map +1 -1
- package/dist/esm/list/RecordCard.mjs +2 -2
- package/dist/esm/list/RecordCard.mjs.map +1 -1
- package/dist/esm/list/RecordCard.native.js +2 -2
- package/dist/esm/list/RecordCard.native.js.map +1 -1
- package/dist/esm/list/facetBadgeSteps.mjs +7 -0
- package/dist/esm/list/facetBadgeSteps.mjs.map +1 -0
- package/dist/esm/list/facetBadgeSteps.native.js +7 -0
- package/dist/esm/list/facetBadgeSteps.native.js.map +1 -0
- package/dist/esm/record/RecordHero.mjs +4 -15
- package/dist/esm/record/RecordHero.mjs.map +1 -1
- package/dist/esm/record/RecordHero.native.js +4 -15
- package/dist/esm/record/RecordHero.native.js.map +1 -1
- package/dist/esm/record/RecordPage.mjs +4 -4
- package/dist/esm/record/RecordPage.mjs.map +1 -1
- package/dist/esm/record/RecordPage.native.js +7 -10
- package/dist/esm/record/RecordPage.native.js.map +1 -1
- package/dist/esm/report/ReportGrid.mjs +7 -7
- package/dist/esm/report/ReportGrid.mjs.map +1 -1
- package/dist/esm/report/ReportGrid.native.js +12 -8
- package/dist/esm/report/ReportGrid.native.js.map +1 -1
- package/dist/esm/schemaForm/index.mjs +4 -4
- package/dist/esm/schemaForm/index.mjs.map +1 -1
- package/dist/esm/schemaForm/index.native.js +4 -4
- package/dist/esm/schemaForm/index.native.js.map +1 -1
- package/dist/jsx/FileBrowser/index.mjs +8 -8
- package/dist/jsx/FileBrowser/index.mjs.map +1 -1
- package/dist/jsx/FileBrowser/index.native.js +1 -1
- package/dist/jsx/FileBrowser/index.native.js.map +1 -1
- package/dist/jsx/FrappeCalendar.mjs +6 -6
- package/dist/jsx/FrappeCalendar.mjs.map +1 -1
- package/dist/jsx/FrappeCalendar.native.js +2 -2
- package/dist/jsx/FrappeCalendar.native.js.map +1 -1
- package/dist/jsx/FrappeConnectionIndicator.mjs +2 -1
- package/dist/jsx/FrappeConnectionIndicator.mjs.map +1 -1
- package/dist/jsx/FrappeConnectionIndicator.native.js +2 -1
- package/dist/jsx/FrappeConnectionIndicator.native.js.map +1 -1
- package/dist/jsx/FrappeDashboard.mjs +6 -6
- package/dist/jsx/FrappeDashboard.mjs.map +1 -1
- package/dist/jsx/FrappeDashboard.native.js +1 -1
- package/dist/jsx/FrappeDashboard.native.js.map +1 -1
- package/dist/jsx/FrappeForm.mjs +52 -27
- package/dist/jsx/FrappeForm.mjs.map +1 -1
- package/dist/jsx/FrappeForm.native.js +56 -28
- package/dist/jsx/FrappeForm.native.js.map +1 -1
- package/dist/jsx/FrappeFormActions.mjs +122 -2
- package/dist/jsx/FrappeFormActions.mjs.map +1 -1
- package/dist/jsx/FrappeFormActions.native.js +123 -0
- package/dist/jsx/FrappeFormActions.native.js.map +1 -1
- package/dist/jsx/FrappeInsights.mjs +4 -1
- package/dist/jsx/FrappeInsights.mjs.map +1 -1
- package/dist/jsx/FrappeInsights.native.js +4 -6
- package/dist/jsx/FrappeInsights.native.js.map +1 -1
- package/dist/jsx/FrappeKanban.mjs +5 -5
- package/dist/jsx/FrappeKanban.mjs.map +1 -1
- package/dist/jsx/FrappeKanban.native.js +1 -1
- package/dist/jsx/FrappeKanban.native.js.map +1 -1
- package/dist/jsx/FrappeListView.mjs +1 -1
- package/dist/jsx/FrappeListView.mjs.map +1 -1
- package/dist/jsx/FrappeListView.native.js +4 -7
- package/dist/jsx/FrappeListView.native.js.map +1 -1
- package/dist/jsx/FrappeReconnectIndicator.mjs +2 -1
- package/dist/jsx/FrappeReconnectIndicator.mjs.map +1 -1
- package/dist/jsx/FrappeReconnectIndicator.native.js +2 -1
- package/dist/jsx/FrappeReconnectIndicator.native.js.map +1 -1
- package/dist/jsx/SyncErrorNotice.mjs +2 -2
- package/dist/jsx/SyncErrorNotice.mjs.map +1 -1
- package/dist/jsx/SyncErrorNotice.native.js +1 -1
- package/dist/jsx/SyncErrorNotice.native.js.map +1 -1
- package/dist/jsx/desk/DeskFormPage.mjs +29 -43
- package/dist/jsx/desk/DeskFormPage.mjs.map +1 -1
- package/dist/jsx/desk/DeskFormPage.native.js +42 -58
- package/dist/jsx/desk/DeskFormPage.native.js.map +1 -1
- package/dist/jsx/desk/DeskShell.mjs +1 -1
- package/dist/jsx/desk/DeskShell.mjs.map +1 -1
- package/dist/jsx/desk/DeskShell.native.js +1 -1
- package/dist/jsx/desk/DeskShell.native.js.map +1 -1
- package/dist/jsx/desk/awesomebar.mjs +1 -1
- package/dist/jsx/desk/awesomebar.mjs.map +1 -1
- package/dist/jsx/desk/awesomebar.native.js +1 -1
- package/dist/jsx/desk/awesomebar.native.js.map +1 -1
- package/dist/jsx/fields/CodeEditor/index.mjs +3 -3
- package/dist/jsx/fields/CodeEditor/index.mjs.map +1 -1
- package/dist/jsx/fields/CodeEditor/index.native.js +1 -1
- package/dist/jsx/fields/CodeEditor/index.native.js.map +1 -1
- package/dist/jsx/fields/Date/index.native.js +5 -4
- package/dist/jsx/fields/Date/index.native.js.map +1 -1
- package/dist/jsx/fields/FileUpload.mjs +5 -3
- package/dist/jsx/fields/FileUpload.mjs.map +1 -1
- package/dist/jsx/fields/FileUpload.native.js +10 -8
- package/dist/jsx/fields/FileUpload.native.js.map +1 -1
- package/dist/jsx/fields/FileUploadField/index.mjs +52 -6
- package/dist/jsx/fields/FileUploadField/index.mjs.map +1 -1
- package/dist/jsx/fields/FileUploadField/index.native.js +54 -5
- package/dist/jsx/fields/FileUploadField/index.native.js.map +1 -1
- package/dist/jsx/fields/Heading/index.mjs +3 -3
- package/dist/jsx/fields/Heading/index.mjs.map +1 -1
- package/dist/jsx/fields/Heading/index.native.js +1 -1
- package/dist/jsx/fields/Heading/index.native.js.map +1 -1
- package/dist/jsx/fields/MarkdownEditor/index.native.js +3 -2
- package/dist/jsx/fields/MarkdownEditor/index.native.js.map +1 -1
- package/dist/jsx/fields/Numeric/index.mjs +2 -1
- package/dist/jsx/fields/Numeric/index.mjs.map +1 -1
- package/dist/jsx/fields/Numeric/index.native.js +3 -2
- package/dist/jsx/fields/Numeric/index.native.js.map +1 -1
- package/dist/jsx/fields/Password/index.mjs +16 -60
- package/dist/jsx/fields/Password/index.mjs.map +1 -1
- package/dist/jsx/fields/Password/index.native.js +18 -65
- package/dist/jsx/fields/Password/index.native.js.map +1 -1
- package/dist/jsx/fields/ReadOnly/index.mjs +7 -6
- package/dist/jsx/fields/ReadOnly/index.mjs.map +1 -1
- package/dist/jsx/fields/ReadOnly/index.native.js +2 -1
- package/dist/jsx/fields/ReadOnly/index.native.js.map +1 -1
- package/dist/jsx/index.js +2 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +2 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +2 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/insights/InsightsLeaders.mjs +2 -2
- package/dist/jsx/insights/InsightsLeaders.mjs.map +1 -1
- package/dist/jsx/insights/InsightsLeaders.native.js +2 -2
- package/dist/jsx/insights/InsightsLeaders.native.js.map +1 -1
- package/dist/jsx/insights/InsightsRecords.mjs +2 -2
- package/dist/jsx/insights/InsightsRecords.mjs.map +1 -1
- package/dist/jsx/insights/InsightsRecords.native.js +2 -2
- package/dist/jsx/insights/InsightsRecords.native.js.map +1 -1
- package/dist/jsx/list/FacetBadge.mjs +4 -3
- package/dist/jsx/list/FacetBadge.mjs.map +1 -1
- package/dist/jsx/list/FacetBadge.native.js +4 -3
- package/dist/jsx/list/FacetBadge.native.js.map +1 -1
- package/dist/jsx/list/ImageWell.mjs +8 -20
- package/dist/jsx/list/ImageWell.mjs.map +1 -1
- package/dist/jsx/list/ImageWell.native.js +7 -19
- package/dist/jsx/list/ImageWell.native.js.map +1 -1
- package/dist/jsx/list/RecordCard.mjs +2 -2
- package/dist/jsx/list/RecordCard.mjs.map +1 -1
- package/dist/jsx/list/RecordCard.native.js +2 -2
- package/dist/jsx/list/RecordCard.native.js.map +1 -1
- package/dist/jsx/list/facetBadgeSteps.mjs +7 -0
- package/dist/jsx/list/facetBadgeSteps.mjs.map +1 -0
- package/dist/jsx/list/facetBadgeSteps.native.js +35 -0
- package/dist/jsx/list/facetBadgeSteps.native.js.map +1 -0
- package/dist/jsx/record/RecordHero.mjs +4 -15
- package/dist/jsx/record/RecordHero.mjs.map +1 -1
- package/dist/jsx/record/RecordHero.native.js +4 -15
- package/dist/jsx/record/RecordHero.native.js.map +1 -1
- package/dist/jsx/record/RecordPage.mjs +4 -4
- package/dist/jsx/record/RecordPage.mjs.map +1 -1
- package/dist/jsx/record/RecordPage.native.js +7 -10
- package/dist/jsx/record/RecordPage.native.js.map +1 -1
- package/dist/jsx/report/ReportGrid.mjs +7 -7
- package/dist/jsx/report/ReportGrid.mjs.map +1 -1
- package/dist/jsx/report/ReportGrid.native.js +11 -7
- package/dist/jsx/report/ReportGrid.native.js.map +1 -1
- package/dist/jsx/schemaForm/index.mjs +4 -4
- package/dist/jsx/schemaForm/index.mjs.map +1 -1
- package/dist/jsx/schemaForm/index.native.js +3 -3
- package/dist/jsx/schemaForm/index.native.js.map +1 -1
- package/package.json +16 -16
- package/src/FileBrowser/index.tsx +14 -13
- package/src/FormSidebar.stories.tsx +2 -1
- package/src/FrappeCalendar.stories.tsx +1 -1
- package/src/FrappeCalendar.tsx +10 -9
- package/src/FrappeConnectionIndicator.stories.tsx +2 -1
- package/src/FrappeConnectionIndicator.tsx +2 -1
- package/src/FrappeDashboard.stories.tsx +2 -2
- package/src/FrappeDashboard.tsx +10 -10
- package/src/FrappeForm.lifecycle.spec.tsx +3 -1
- package/src/FrappeForm.tsx +106 -38
- package/src/FrappeFormActions.tsx +160 -1
- package/src/FrappeInsights.spec.tsx +1 -1
- package/src/FrappeInsights.tsx +4 -1
- package/src/FrappeKanban.stories.tsx +2 -1
- package/src/FrappeKanban.tsx +8 -7
- package/src/FrappeList.stories.tsx +11 -10
- package/src/FrappeListView.card.spec.tsx +1 -1
- package/src/FrappeListView.sidebar.spec.tsx +1 -1
- package/src/FrappeListView.tsx +1 -1
- package/src/FrappeProvider.stories.tsx +2 -1
- package/src/FrappeReconnectIndicator.stories.tsx +2 -1
- package/src/FrappeReconnectIndicator.tsx +2 -1
- package/src/SyncErrorNotice.tsx +2 -2
- package/src/desk/DeskFormPage.tsx +42 -62
- package/src/desk/DeskFormSidebar.stories.tsx +4 -2
- package/src/desk/DeskShell.tsx +1 -1
- package/src/desk/awesomebar.tsx +1 -1
- package/src/fields/CodeEditor/index.tsx +4 -4
- package/src/fields/Date/index.native.tsx +2 -1
- package/src/fields/FileUpload.tsx +8 -4
- package/src/fields/FileUploadField/FileUploadField.spec.tsx +86 -1
- package/src/fields/FileUploadField/FileUploadField.stories.tsx +9 -0
- package/src/fields/FileUploadField/index.tsx +67 -6
- package/src/fields/Heading/index.tsx +4 -4
- package/src/fields/MarkdownEditor/index.native.tsx +2 -1
- package/src/fields/Numeric/index.tsx +2 -1
- package/src/fields/Password/index.tsx +14 -70
- package/src/fields/ReadOnly/index.tsx +12 -11
- package/src/fields/TextEditor/TextEditor.stories.tsx +2 -1
- package/src/frappeRemainder.designLaw.spec.ts +3 -2
- package/src/frappeRoutes.spec.tsx +20 -6
- package/src/index.ts +7 -1
- package/src/insights/InsightsLeaders.tsx +2 -2
- package/src/insights/InsightsRecords.tsx +2 -2
- package/src/insights/insightsRecord.ts +2 -2
- package/src/list/FacetBadge.tsx +5 -4
- package/src/list/ImageWell.spec.tsx +47 -0
- package/src/list/ImageWell.tsx +8 -21
- package/src/list/RecordCard.native.tsx +2 -2
- package/src/list/RecordCard.spec.tsx +1 -1
- package/src/list/RecordCard.tsx +4 -4
- package/src/list/facetBadgeSteps.ts +2 -0
- package/src/record/RecordHero.tsx +4 -11
- package/src/record/RecordPage.tsx +4 -4
- package/src/report/ReportGrid.native.spec.tsx +152 -0
- package/src/report/ReportGrid.tsx +20 -9
- package/src/schemaForm/SchemaForm.stories.tsx +2 -1
- package/src/schemaForm/index.tsx +6 -6
- package/types/FileBrowser/index.d.ts.map +1 -1
- package/types/FrappeCalendar.d.ts.map +1 -1
- package/types/FrappeConnectionIndicator.d.ts.map +1 -1
- package/types/FrappeDashboard.d.ts.map +1 -1
- package/types/FrappeForm.d.ts +19 -0
- package/types/FrappeForm.d.ts.map +1 -1
- package/types/FrappeFormActions.d.ts +7 -0
- package/types/FrappeFormActions.d.ts.map +1 -1
- package/types/FrappeInsights.d.ts.map +1 -1
- package/types/FrappeKanban.d.ts.map +1 -1
- package/types/FrappeReconnectIndicator.d.ts.map +1 -1
- package/types/desk/DeskFormPage.d.ts +6 -6
- package/types/desk/DeskFormPage.d.ts.map +1 -1
- package/types/fields/Date/index.native.d.ts.map +1 -1
- package/types/fields/FileUpload.d.ts.map +1 -1
- package/types/fields/FileUploadField/index.d.ts.map +1 -1
- package/types/fields/MarkdownEditor/index.native.d.ts.map +1 -1
- package/types/fields/Numeric/index.d.ts.map +1 -1
- package/types/fields/Password/index.d.ts +13 -0
- package/types/fields/Password/index.d.ts.map +1 -1
- package/types/fields/ReadOnly/index.d.ts.map +1 -1
- package/types/index.d.ts +2 -1
- package/types/index.d.ts.map +1 -1
- package/types/insights/insightsRecord.d.ts +2 -2
- package/types/insights/insightsRecord.d.ts.map +1 -1
- package/types/list/FacetBadge.d.ts +1 -1
- package/types/list/FacetBadge.d.ts.map +1 -1
- package/types/list/ImageWell.d.ts +5 -4
- package/types/list/ImageWell.d.ts.map +1 -1
- package/types/list/RecordCard.d.ts +3 -3
- package/types/list/RecordCard.d.ts.map +1 -1
- package/types/list/RecordCard.native.d.ts +1 -1
- package/types/list/RecordCard.native.d.ts.map +1 -1
- package/types/list/facetBadgeSteps.d.ts +7 -0
- package/types/list/facetBadgeSteps.d.ts.map +1 -0
- package/types/record/RecordHero.d.ts +3 -3
- package/types/record/RecordHero.d.ts.map +1 -1
- package/types/report/ReportGrid.d.ts.map +1 -1
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Chip,
|
|
3
|
+
DropdownMenu,
|
|
4
|
+
PageMenuButton,
|
|
5
|
+
type ChipColor,
|
|
6
|
+
type DropdownMenuEntry,
|
|
7
|
+
} from "@multiplatform.one/components";
|
|
2
8
|
import { Button, zIndex } from "@multiplatform.one/forms";
|
|
3
9
|
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
4
10
|
import {
|
|
@@ -235,6 +241,159 @@ export function FrappeFormActions({
|
|
|
235
241
|
);
|
|
236
242
|
}
|
|
237
243
|
|
|
244
|
+
/**
|
|
245
|
+
* The record's actions in the page's top bar (LC-123, LC-145): the one
|
|
246
|
+
* lifecycle action the document's state offers as the bar's button, and
|
|
247
|
+
* everything else (Delete, Cancel Document, the leave action) in the "…"
|
|
248
|
+
* menu at the trailing edge, so back, the action and "…" share one row.
|
|
249
|
+
*/
|
|
250
|
+
export function FrappeFormHeaderActions({
|
|
251
|
+
action,
|
|
252
|
+
busy,
|
|
253
|
+
disabled,
|
|
254
|
+
onSave,
|
|
255
|
+
onSubmit,
|
|
256
|
+
onCancelDocument,
|
|
257
|
+
onAmend,
|
|
258
|
+
amendedAs,
|
|
259
|
+
onDelete,
|
|
260
|
+
onEdit,
|
|
261
|
+
onClose,
|
|
262
|
+
closeDisabled,
|
|
263
|
+
}: Omit<FrappeFormActionsProps, "indicator" | "placement">) {
|
|
264
|
+
const { t } = useTranslation();
|
|
265
|
+
const { knobProps } = useResolvedKnobs();
|
|
266
|
+
const iconSize = Number(knobProps.controlIcon?.width) || 16;
|
|
267
|
+
const readOnlyReason = t("Form is read-only");
|
|
268
|
+
const blocked = disabled ? { disabledReason: readOnlyReason } : {};
|
|
269
|
+
|
|
270
|
+
const primary =
|
|
271
|
+
action === "save" || action === "update" ? (
|
|
272
|
+
<Button
|
|
273
|
+
accent
|
|
274
|
+
loading={busy}
|
|
275
|
+
disabled={disabled}
|
|
276
|
+
disabledReason={disabled ? readOnlyReason : undefined}
|
|
277
|
+
disabledReasonPlacement="inline"
|
|
278
|
+
onPress={onSave}
|
|
279
|
+
testID="frappe-form-save"
|
|
280
|
+
>
|
|
281
|
+
{busy ? t("Saving...") : action === "update" ? t("Update") : t("Save")}
|
|
282
|
+
</Button>
|
|
283
|
+
) : action === "submit" ? (
|
|
284
|
+
<Button
|
|
285
|
+
accent
|
|
286
|
+
loading={busy}
|
|
287
|
+
disabled={disabled}
|
|
288
|
+
disabledReason={disabled ? readOnlyReason : undefined}
|
|
289
|
+
disabledReasonPlacement="inline"
|
|
290
|
+
onPress={onSubmit}
|
|
291
|
+
testID="frappe-form-submit"
|
|
292
|
+
>
|
|
293
|
+
{t("Submit")}
|
|
294
|
+
</Button>
|
|
295
|
+
) : action === "amend" && onAmend ? (
|
|
296
|
+
<Button
|
|
297
|
+
accent={!amendedAs}
|
|
298
|
+
outlined={Boolean(amendedAs)}
|
|
299
|
+
loading={busy}
|
|
300
|
+
disabled={disabled || Boolean(amendedAs)}
|
|
301
|
+
disabledReason={
|
|
302
|
+
amendedAs
|
|
303
|
+
? t("Already amended as {{name}}", { name: amendedAs })
|
|
304
|
+
: disabled
|
|
305
|
+
? readOnlyReason
|
|
306
|
+
: undefined
|
|
307
|
+
}
|
|
308
|
+
disabledReasonPlacement="inline"
|
|
309
|
+
onPress={onAmend}
|
|
310
|
+
testID="frappe-form-amend"
|
|
311
|
+
>
|
|
312
|
+
{t("Amend")}
|
|
313
|
+
</Button>
|
|
314
|
+
) : onEdit ? (
|
|
315
|
+
<Button
|
|
316
|
+
accent
|
|
317
|
+
disabled={disabled}
|
|
318
|
+
disabledReason={disabled ? readOnlyReason : undefined}
|
|
319
|
+
disabledReasonPlacement="inline"
|
|
320
|
+
onPress={onEdit}
|
|
321
|
+
testID="frappe-form-edit"
|
|
322
|
+
>
|
|
323
|
+
{t("Edit")}
|
|
324
|
+
</Button>
|
|
325
|
+
) : null;
|
|
326
|
+
|
|
327
|
+
const lifecyclePrimary =
|
|
328
|
+
action === "save" ||
|
|
329
|
+
action === "update" ||
|
|
330
|
+
action === "submit" ||
|
|
331
|
+
(action === "amend" && Boolean(onAmend));
|
|
332
|
+
const entries: DropdownMenuEntry[] = [
|
|
333
|
+
...(onEdit && lifecyclePrimary
|
|
334
|
+
? [
|
|
335
|
+
{
|
|
336
|
+
key: "edit",
|
|
337
|
+
label: t("Edit"),
|
|
338
|
+
icon: <PencilSimpleIcon size={iconSize} />,
|
|
339
|
+
disabled,
|
|
340
|
+
...blocked,
|
|
341
|
+
onSelect: onEdit,
|
|
342
|
+
},
|
|
343
|
+
]
|
|
344
|
+
: []),
|
|
345
|
+
...(action === "cancel"
|
|
346
|
+
? [
|
|
347
|
+
{
|
|
348
|
+
key: "cancel-document",
|
|
349
|
+
label: t("Cancel Document"),
|
|
350
|
+
icon: <ProhibitIcon size={iconSize} />,
|
|
351
|
+
destructive: true,
|
|
352
|
+
disabled: disabled || busy,
|
|
353
|
+
...blocked,
|
|
354
|
+
onSelect: onCancelDocument,
|
|
355
|
+
},
|
|
356
|
+
]
|
|
357
|
+
: []),
|
|
358
|
+
...(onClose
|
|
359
|
+
? [
|
|
360
|
+
{
|
|
361
|
+
key: "close",
|
|
362
|
+
label: action === "cancel" ? t("Close") : t("Cancel"),
|
|
363
|
+
icon: <XIcon size={iconSize} />,
|
|
364
|
+
disabled: closeDisabled,
|
|
365
|
+
...(closeDisabled ? { disabledReason: readOnlyReason } : {}),
|
|
366
|
+
onSelect: onClose,
|
|
367
|
+
},
|
|
368
|
+
]
|
|
369
|
+
: []),
|
|
370
|
+
...(onDelete
|
|
371
|
+
? [
|
|
372
|
+
{
|
|
373
|
+
key: "delete",
|
|
374
|
+
label: t("Delete"),
|
|
375
|
+
icon: <TrashIcon size={iconSize} />,
|
|
376
|
+
destructive: true,
|
|
377
|
+
disabled: disabled || busy,
|
|
378
|
+
...blocked,
|
|
379
|
+
onSelect: onDelete,
|
|
380
|
+
},
|
|
381
|
+
]
|
|
382
|
+
: []),
|
|
383
|
+
];
|
|
384
|
+
|
|
385
|
+
return (
|
|
386
|
+
<XStack {...knobProps.gap} alignItems="center" testID="frappe-form-actions">
|
|
387
|
+
{primary}
|
|
388
|
+
{entries.length > 0 ? (
|
|
389
|
+
<DropdownMenu items={entries} placement="bottom-end">
|
|
390
|
+
<PageMenuButton edge="end" testID="frappe-form-menu" />
|
|
391
|
+
</DropdownMenu>
|
|
392
|
+
) : null}
|
|
393
|
+
</XStack>
|
|
394
|
+
);
|
|
395
|
+
}
|
|
396
|
+
|
|
238
397
|
/**
|
|
239
398
|
* Holds the action bar. Sticky, it pins to the bottom of the scrolling page
|
|
240
399
|
* on a page surface with a top hairline, so Save stays in reach on a long
|
|
@@ -66,7 +66,7 @@ const insights: FrappeInsightsProps<RosterPokemon> = {
|
|
|
66
66
|
orderBy: "slot",
|
|
67
67
|
label: "Type",
|
|
68
68
|
options: ["grass", "poison", "fire", "water", "electric", "ghost", "normal"],
|
|
69
|
-
tint: (type) => (type === "fire" ? "
|
|
69
|
+
tint: (type) => (type === "fire" ? "orange" : undefined),
|
|
70
70
|
},
|
|
71
71
|
facetPlural: "Types",
|
|
72
72
|
metrics: [
|
package/src/FrappeInsights.tsx
CHANGED
|
@@ -176,7 +176,10 @@ export function FrappeInsights<TDoc extends { name: string; doctype: string }>({
|
|
|
176
176
|
code: (doc) => latest.current.look?.code?.(doc) || undefined,
|
|
177
177
|
images: (doc) => latest.current.look?.images?.(doc, baseURL) ?? [],
|
|
178
178
|
values: (doc) => values.get(doc.name) ?? [],
|
|
179
|
-
|
|
179
|
+
tint: (doc) => {
|
|
180
|
+
const primary = values.get(doc.name)?.[0];
|
|
181
|
+
return primary === undefined ? undefined : facet?.tint?.(primary);
|
|
182
|
+
},
|
|
180
183
|
valueLabel: (value) => facet?.optionLabel?.(value) ?? value,
|
|
181
184
|
valueTint: (value) => facet?.tint?.(value),
|
|
182
185
|
open: (doc) =>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { InMemoryFixtureProvider } from "@multiplatform.one/frappe";
|
|
2
2
|
import { action } from "@multiplatform.one/storybook";
|
|
3
|
-
import {
|
|
3
|
+
import { YStack } from "tamagui";
|
|
4
4
|
import { FrappeKanban, type KanbanColumn } from "./FrappeKanban";
|
|
5
5
|
import { FrappeProvider } from "./FrappeProvider";
|
|
6
6
|
import { FrappeStoryProvider } from "./frappeStoryTarget";
|
|
7
|
+
import { Text } from "@multiplatform.one/components";
|
|
7
8
|
|
|
8
9
|
// hex-escape: Frappe sends column, event and series colours as hex: fixture data, not paint
|
|
9
10
|
|
package/src/FrappeKanban.tsx
CHANGED
|
@@ -3,12 +3,13 @@ import {
|
|
|
3
3
|
componentColors,
|
|
4
4
|
type KanbanColumn as GenericKanbanColumn,
|
|
5
5
|
type KanbanProps,
|
|
6
|
+
Text,
|
|
6
7
|
} from "@multiplatform.one/components";
|
|
7
8
|
import { Button, formCommonColors } from "@multiplatform.one/forms";
|
|
8
9
|
import { PlusIcon } from "@phosphor-icons/react";
|
|
9
10
|
import React, { useMemo, useCallback, useState } from "react";
|
|
10
11
|
import { useTranslation } from "react-i18next";
|
|
11
|
-
import { Text, XStack, YStack } from "tamagui";
|
|
12
|
+
import { Text as TamaguiText, XStack, YStack } from "tamagui";
|
|
12
13
|
|
|
13
14
|
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
14
15
|
import { FrappeConnectionIndicator } from "./FrappeConnectionIndicator";
|
|
@@ -204,13 +205,13 @@ export function FrappeKanban<TDoc extends { name: string; doctype: string }>({
|
|
|
204
205
|
: undefined;
|
|
205
206
|
return (
|
|
206
207
|
<YStack {...knobProps.panelPadding} {...knobProps.gap}>
|
|
207
|
-
<
|
|
208
|
+
<TamaguiText {...knobProps.label} {...knobProps.textWeight}>
|
|
208
209
|
{(title as React.ReactNode) || item.name}
|
|
209
|
-
</
|
|
210
|
+
</TamaguiText>
|
|
210
211
|
{desc != null && desc !== "" && (
|
|
211
|
-
<
|
|
212
|
+
<TamaguiText color={formCommonColors.muted} {...knobProps.body}>
|
|
212
213
|
{String(desc)}
|
|
213
|
-
</
|
|
214
|
+
</TamaguiText>
|
|
214
215
|
)}
|
|
215
216
|
</YStack>
|
|
216
217
|
);
|
|
@@ -316,9 +317,9 @@ export function FrappeKanban<TDoc extends { name: string; doctype: string }>({
|
|
|
316
317
|
borderWidth={1}
|
|
317
318
|
>
|
|
318
319
|
<Text color={formCommonColors.error}>{t("Action failed")}</Text>
|
|
319
|
-
<
|
|
320
|
+
<TamaguiText color={formCommonColors.muted} {...knobProps.body}>
|
|
320
321
|
{actionError.message}
|
|
321
|
-
</
|
|
322
|
+
</TamaguiText>
|
|
322
323
|
</YStack>
|
|
323
324
|
)}
|
|
324
325
|
<Kanban
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { InMemoryFixtureProvider } from "@multiplatform.one/frappe";
|
|
2
2
|
import { action } from "@multiplatform.one/storybook";
|
|
3
|
-
import {
|
|
3
|
+
import { XStack, YStack } from "tamagui";
|
|
4
4
|
import { FrappeList } from "./FrappeList";
|
|
5
5
|
import { FrappeProvider } from "./FrappeProvider";
|
|
6
6
|
import { FrappeStoryProvider } from "./frappeStoryTarget";
|
|
7
|
+
import { Text } from "@multiplatform.one/components";
|
|
7
8
|
|
|
8
9
|
export default {
|
|
9
10
|
title: "FrappeUI/FrappeList",
|
|
@@ -124,13 +125,13 @@ export const Default = () => (
|
|
|
124
125
|
renderItem={(doc) => (
|
|
125
126
|
<YStack gap="$0.5" paddingVertical="$2" paddingHorizontal="$3">
|
|
126
127
|
<XStack gap="$2" alignItems="center">
|
|
127
|
-
<Text fontSize="$2" color="$color10" minWidth=
|
|
128
|
+
<Text fontSize="$2" color="$color10" minWidth="$8">
|
|
128
129
|
Task:
|
|
129
130
|
</Text>
|
|
130
131
|
<Text fontSize="$3">{doc.description || "-"}</Text>
|
|
131
132
|
</XStack>
|
|
132
133
|
<XStack gap="$2" alignItems="center">
|
|
133
|
-
<Text fontSize="$2" color="$color10" minWidth=
|
|
134
|
+
<Text fontSize="$2" color="$color10" minWidth="$8">
|
|
134
135
|
Status:
|
|
135
136
|
</Text>
|
|
136
137
|
<Text fontSize="$3">{doc.status || "-"}</Text>
|
|
@@ -160,13 +161,13 @@ export const WithCustomFieldRenderer = () => (
|
|
|
160
161
|
renderItem={(doc) => (
|
|
161
162
|
<YStack gap="$0.5" paddingVertical="$2" paddingHorizontal="$3">
|
|
162
163
|
<XStack gap="$2" alignItems="center">
|
|
163
|
-
<Text fontSize="$2" color="$color10" minWidth=
|
|
164
|
+
<Text fontSize="$2" color="$color10" minWidth="$8">
|
|
164
165
|
Task:
|
|
165
166
|
</Text>
|
|
166
167
|
<Text fontSize="$3">{doc.description || "-"}</Text>
|
|
167
168
|
</XStack>
|
|
168
169
|
<XStack gap="$2" alignItems="center">
|
|
169
|
-
<Text fontSize="$2" color="$color10" minWidth=
|
|
170
|
+
<Text fontSize="$2" color="$color10" minWidth="$8">
|
|
170
171
|
Status:
|
|
171
172
|
</Text>
|
|
172
173
|
<Text
|
|
@@ -186,7 +187,7 @@ export const WithCustomFieldRenderer = () => (
|
|
|
186
187
|
</Text>
|
|
187
188
|
</XStack>
|
|
188
189
|
<XStack gap="$2" alignItems="center">
|
|
189
|
-
<Text fontSize="$2" color="$color10" minWidth=
|
|
190
|
+
<Text fontSize="$2" color="$color10" minWidth="$8">
|
|
190
191
|
Priority:
|
|
191
192
|
</Text>
|
|
192
193
|
<Text fontSize="$3">{doc.priority || "-"}</Text>
|
|
@@ -324,25 +325,25 @@ export const VirtualScrolling = () => (
|
|
|
324
325
|
renderItem={(doc) => (
|
|
325
326
|
<YStack gap="$0.5" paddingVertical="$2" paddingHorizontal="$3">
|
|
326
327
|
<XStack gap="$2" alignItems="center">
|
|
327
|
-
<Text fontSize="$2" color="$color10" minWidth=
|
|
328
|
+
<Text fontSize="$2" color="$color10" minWidth="$8">
|
|
328
329
|
ID:
|
|
329
330
|
</Text>
|
|
330
331
|
<Text fontSize="$3">{doc.name || "-"}</Text>
|
|
331
332
|
</XStack>
|
|
332
333
|
<XStack gap="$2" alignItems="center">
|
|
333
|
-
<Text fontSize="$2" color="$color10" minWidth=
|
|
334
|
+
<Text fontSize="$2" color="$color10" minWidth="$8">
|
|
334
335
|
Task:
|
|
335
336
|
</Text>
|
|
336
337
|
<Text fontSize="$3">{doc.description || "-"}</Text>
|
|
337
338
|
</XStack>
|
|
338
339
|
<XStack gap="$2" alignItems="center">
|
|
339
|
-
<Text fontSize="$2" color="$color10" minWidth=
|
|
340
|
+
<Text fontSize="$2" color="$color10" minWidth="$8">
|
|
340
341
|
Status:
|
|
341
342
|
</Text>
|
|
342
343
|
<Text fontSize="$3">{doc.status || "-"}</Text>
|
|
343
344
|
</XStack>
|
|
344
345
|
<XStack gap="$2" alignItems="center">
|
|
345
|
-
<Text fontSize="$2" color="$color10" minWidth=
|
|
346
|
+
<Text fontSize="$2" color="$color10" minWidth="$8">
|
|
346
347
|
Priority:
|
|
347
348
|
</Text>
|
|
348
349
|
<Text fontSize="$3">{doc.priority || "-"}</Text>
|
|
@@ -84,7 +84,7 @@ function renderList(navigate = vi.fn()) {
|
|
|
84
84
|
label: "Type",
|
|
85
85
|
options: ["grass", "poison", "fire", "water", "electric", "ghost", "normal"],
|
|
86
86
|
optionLabel: (value) => `type:${value}`,
|
|
87
|
-
tint: (value) => (value === "grass" ? "
|
|
87
|
+
tint: (value) => (value === "grass" ? "green" : "purple"),
|
|
88
88
|
},
|
|
89
89
|
]}
|
|
90
90
|
/>
|
|
@@ -95,7 +95,7 @@ function renderList(navigate = vi.fn()) {
|
|
|
95
95
|
orderBy: "slot",
|
|
96
96
|
label: "Type",
|
|
97
97
|
options: ["grass", "poison", "fire", "water", "electric", "ghost", "normal"],
|
|
98
|
-
tint: (value) => (value === "grass" ? "
|
|
98
|
+
tint: (value) => (value === "grass" ? "green" : "purple"),
|
|
99
99
|
},
|
|
100
100
|
]}
|
|
101
101
|
bands={[
|
package/src/FrappeListView.tsx
CHANGED
|
@@ -820,7 +820,7 @@ function FrappeListViewBody<TDoc extends { name: string; doctype: string }>({
|
|
|
820
820
|
subtitle={look?.subtitle?.(doc)}
|
|
821
821
|
code={look?.code?.(doc)}
|
|
822
822
|
images={look?.images?.(doc, finalBaseURL) ?? []}
|
|
823
|
-
|
|
823
|
+
tint={values[0] === undefined ? undefined : tintFacet?.tint?.(values[0])}
|
|
824
824
|
badges={values.map((value) => ({
|
|
825
825
|
value,
|
|
826
826
|
label: tintFacet?.optionLabel?.(value) ?? value,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { InMemoryFixtureProvider } from "@multiplatform.one/frappe";
|
|
2
|
-
import {
|
|
2
|
+
import { YStack } from "tamagui";
|
|
3
3
|
import { FrappeProvider, useFrappeConfig } from "./FrappeProvider";
|
|
4
|
+
import { Text } from "@multiplatform.one/components";
|
|
4
5
|
|
|
5
6
|
export default {
|
|
6
7
|
title: "FrappeUI/FrappeProvider",
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { YStack } from "tamagui";
|
|
2
2
|
import {
|
|
3
3
|
FrappeReconnectIndicator,
|
|
4
4
|
type FrappeReconnectIndicatorProps,
|
|
5
5
|
} from "./FrappeReconnectIndicator";
|
|
6
|
+
import { Text } from "@multiplatform.one/components";
|
|
6
7
|
|
|
7
8
|
export default {
|
|
8
9
|
title: "FrappeUI/FrappeReconnectIndicator",
|
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
7
7
|
import { WifiSlashIcon } from "@phosphor-icons/react";
|
|
8
8
|
import { useTranslation } from "react-i18next";
|
|
9
|
-
import {
|
|
9
|
+
import { XStack } from "tamagui";
|
|
10
|
+
import { Text } from "@multiplatform.one/components";
|
|
10
11
|
|
|
11
12
|
export interface FrappeReconnectIndicatorProps {
|
|
12
13
|
/** The connection config the component's live queries sync through. */
|
package/src/SyncErrorNotice.tsx
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Button } from "@multiplatform.one/components";
|
|
1
|
+
import { Button, Text } from "@multiplatform.one/components";
|
|
2
2
|
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
3
3
|
import React from "react";
|
|
4
4
|
import { useTranslation } from "react-i18next";
|
|
5
|
-
import {
|
|
5
|
+
import { XStack } from "tamagui";
|
|
6
6
|
|
|
7
7
|
export interface SyncErrorNoticeProps {
|
|
8
8
|
/** Human-readable failure message (already localized by the caller). */
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* DeskFormPage - Page component for Frappe Desk form views.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* PAGE-TEMPLATE)
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* side-by-side (⅔ / ⅓)
|
|
9
|
-
* compact/medium, never hidden.
|
|
4
|
+
* Renders FrappeForm in its page mode inside DeskShell: the canonical
|
|
5
|
+
* `DetailPageLayout` template (LC-29 PAGE-TEMPLATE) with back, the record's
|
|
6
|
+
* actions and "…" in one top bar (LC-145), the page's single h1
|
|
7
|
+
* (DG-A11Y-02), the schema-driven form as the primary content, and the live
|
|
8
|
+
* document sidebar in the template's `aside` slot — side-by-side (⅔ / ⅓)
|
|
9
|
+
* from `expanded` up, stacked below the form on compact/medium, never hidden.
|
|
10
10
|
*
|
|
11
11
|
* Supports both create mode (no name / name === "new") and edit mode.
|
|
12
12
|
* Accepts `doctype` and `name` as props (route files read params and pass them).
|
|
@@ -18,15 +18,14 @@
|
|
|
18
18
|
|
|
19
19
|
import React, { useEffect } from "react";
|
|
20
20
|
import { useTranslation } from "react-i18next";
|
|
21
|
-
import {
|
|
21
|
+
import { formCommonColors } from "@multiplatform.one/forms";
|
|
22
22
|
import { Text, YStack } from "tamagui";
|
|
23
23
|
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
24
|
-
import { ArrowLeftIcon } from "@phosphor-icons/react";
|
|
25
24
|
import { DeskShell } from "./DeskShell";
|
|
26
25
|
import { DeskFormSidebar } from "./DeskFormSidebar";
|
|
27
26
|
import { FrappeForm } from "../FrappeForm";
|
|
28
27
|
import { addToRecent } from "./DeskSidebar";
|
|
29
|
-
import {
|
|
28
|
+
import type { BreadcrumbItem } from "@multiplatform.one/components";
|
|
30
29
|
|
|
31
30
|
// ---------------------------------------------------------------------------
|
|
32
31
|
// Types
|
|
@@ -106,59 +105,40 @@ export function DeskFormPage({ doctype, name, onNavigate }: DeskFormPageProps) {
|
|
|
106
105
|
onNavigate={handleNavigate}
|
|
107
106
|
activePath={`/desk/${doctype}/${encodeURIComponent(name || "new")}`}
|
|
108
107
|
>
|
|
109
|
-
{/* LC-29 PAGE-TEMPLATE
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
onPress
|
|
122
|
-
aria-label
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
>
|
|
144
|
-
<FrappeForm
|
|
145
|
-
doctype={displayName}
|
|
146
|
-
name={isCreate ? undefined : name}
|
|
147
|
-
showToolbar
|
|
148
|
-
// The desk page owns sidebar placement via the template aside above;
|
|
149
|
-
// FrappeForm's inline rail stays off so the sidebar renders once.
|
|
150
|
-
showSidebar={false}
|
|
151
|
-
showTimeline
|
|
152
|
-
onSave={(doc) => {
|
|
153
|
-
if (isCreate && doc.name) {
|
|
154
|
-
handleNavigate(`/desk/${doctype}/${encodeURIComponent(doc.name)}`);
|
|
155
|
-
}
|
|
156
|
-
}}
|
|
157
|
-
onCancel={() => handleNavigate(`/desk/${doctype}`)}
|
|
158
|
-
onDelete={() => handleNavigate(`/desk/${doctype}`)}
|
|
159
|
-
onAmend={() => handleNavigate(`/desk/${doctype}/new`)}
|
|
160
|
-
/>
|
|
161
|
-
</DetailPageLayout>
|
|
108
|
+
{/* LC-29 PAGE-TEMPLATE through FrappeForm's page mode: back, the
|
|
109
|
+
record's actions and "…" share the top bar (LC-145), the document
|
|
110
|
+
name (or "New <DocType>") is the page's single h1 (DG-A11Y-02), and
|
|
111
|
+
the live document sidebar rides the aside slot, stacked below the
|
|
112
|
+
form on compact/medium, never hidden. Create mode has no doc to
|
|
113
|
+
describe. */}
|
|
114
|
+
<FrappeForm
|
|
115
|
+
doctype={displayName}
|
|
116
|
+
name={isCreate ? undefined : name}
|
|
117
|
+
page={{
|
|
118
|
+
back: {
|
|
119
|
+
label: displayName,
|
|
120
|
+
onPress: () => handleNavigate(`/desk/${doctype}`),
|
|
121
|
+
"aria-label": t("Back to {{doctype}} list", { doctype: displayName }),
|
|
122
|
+
testID: "desk-form-back",
|
|
123
|
+
},
|
|
124
|
+
title: isCreate ? `${t("New")} ${displayName}` : (name ?? displayName),
|
|
125
|
+
aside:
|
|
126
|
+
!isCreate && name ? <DeskFormSidebar doctype={displayName} name={name} /> : undefined,
|
|
127
|
+
}}
|
|
128
|
+
showToolbar
|
|
129
|
+
// The desk page owns sidebar placement via the page aside above;
|
|
130
|
+
// FrappeForm's inline rail stays off so the sidebar renders once.
|
|
131
|
+
showSidebar={false}
|
|
132
|
+
showTimeline
|
|
133
|
+
onSave={(doc) => {
|
|
134
|
+
if (isCreate && doc.name) {
|
|
135
|
+
handleNavigate(`/desk/${doctype}/${encodeURIComponent(doc.name)}`);
|
|
136
|
+
}
|
|
137
|
+
}}
|
|
138
|
+
onCancel={() => handleNavigate(`/desk/${doctype}`)}
|
|
139
|
+
onDelete={() => handleNavigate(`/desk/${doctype}`)}
|
|
140
|
+
onAmend={() => handleNavigate(`/desk/${doctype}/new`)}
|
|
141
|
+
/>
|
|
162
142
|
</DeskShell>
|
|
163
143
|
);
|
|
164
144
|
}
|
|
@@ -29,13 +29,15 @@ const MOCK_HOST = "https://deskformsidebar.mock.test";
|
|
|
29
29
|
* real — the story's window.fetch shim only intercepts fetch(), never an
|
|
30
30
|
* image load — and the story prints ERR_TUNNEL_CONNECTION_FAILED. A data: URI
|
|
31
31
|
* goes through resolveFileUrl untouched and paints without a request, which
|
|
32
|
-
* is what G-15 story honesty asks for (MPO-197).
|
|
32
|
+
* is what G-15 story honesty asks for (MPO-197). The square fills to its
|
|
33
|
+
* edges: corners baked into the picture would hide the frame's knob radius
|
|
34
|
+
* behind transparent pixels (FZ-7742).
|
|
33
35
|
*/
|
|
34
36
|
const storyImage =
|
|
35
37
|
"data:image/svg+xml;utf8," +
|
|
36
38
|
encodeURIComponent(
|
|
37
39
|
'<svg xmlns="http://www.w3.org/2000/svg" width="240" height="240" viewBox="0 0 24 24">' +
|
|
38
|
-
'<rect width="24" height="24"
|
|
40
|
+
'<rect width="24" height="24" fill="#4c6ef5"/>' +
|
|
39
41
|
'<path d="M6 12.5l3.5 3.5L18 8" fill="none" stroke="#fff" stroke-width="2" ' +
|
|
40
42
|
'stroke-linecap="round" stroke-linejoin="round"/></svg>',
|
|
41
43
|
);
|
package/src/desk/DeskShell.tsx
CHANGED
|
@@ -133,7 +133,7 @@ export function DeskShell({
|
|
|
133
133
|
return;
|
|
134
134
|
}
|
|
135
135
|
if (typeof document === "undefined") return;
|
|
136
|
-
if (document.activeElement instanceof HTMLElement) {
|
|
136
|
+
if (typeof HTMLElement !== "undefined" && document.activeElement instanceof HTMLElement) {
|
|
137
137
|
document.activeElement.blur();
|
|
138
138
|
}
|
|
139
139
|
},
|
package/src/desk/awesomebar.tsx
CHANGED
|
@@ -345,7 +345,7 @@ export function Awesomebar({ onNavigate, basePath = "/desk", ...stackProps }: Aw
|
|
|
345
345
|
{...knobProps.control}
|
|
346
346
|
{...knobProps.inputSurface}
|
|
347
347
|
{...knobProps.borderRadius}
|
|
348
|
-
borderColor={open ? "$borderColorFocus" :
|
|
348
|
+
borderColor={open ? "$borderColorFocus" : knobProps.borderRadius.borderColor}
|
|
349
349
|
hoverStyle={{
|
|
350
350
|
borderColor: "$borderColorHover",
|
|
351
351
|
...control.hoverKnobProps,
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* order, chromeless inside table cells (useIsInTableCell).
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { HighlightedCode, useShikiTokens } from "@multiplatform.one/components";
|
|
18
|
+
import { HighlightedCode, useShikiTokens, Paragraph } from "@multiplatform.one/components";
|
|
19
19
|
import {
|
|
20
20
|
Field,
|
|
21
21
|
FieldLayout,
|
|
@@ -33,7 +33,7 @@ import { sizeRecipeForToken, useResolvedKnobs, sizeTokenStep } from "@multiplatf
|
|
|
33
33
|
import { useEffect, useState, type ReactNode } from "react";
|
|
34
34
|
import { useTranslation } from "react-i18next";
|
|
35
35
|
import type { FontSizeTokens, LabelProps, SizeTokens } from "tamagui";
|
|
36
|
-
import { Paragraph, YStack } from "tamagui";
|
|
36
|
+
import { Paragraph as TamaguiParagraph, YStack } from "tamagui";
|
|
37
37
|
import { EditorPreviewPanes, PreviewSurface } from "../shared/EditorPreviewPanes";
|
|
38
38
|
|
|
39
39
|
// ---------------------------------------------------------------------------
|
|
@@ -93,9 +93,9 @@ function CodePreview({ value, language }: CodePreviewProps) {
|
|
|
93
93
|
) : (
|
|
94
94
|
<HighlightedCode tokens={tokens} showLineNumbers={lineCount > 10}>
|
|
95
95
|
{/* Plain-text fallback while shiki loads (or if unavailable). */}
|
|
96
|
-
<
|
|
96
|
+
<TamaguiParagraph size={textSize} fontFamily="$mono" whiteSpace="pre">
|
|
97
97
|
{value}
|
|
98
|
-
</
|
|
98
|
+
</TamaguiParagraph>
|
|
99
99
|
</HighlightedCode>
|
|
100
100
|
)}
|
|
101
101
|
</PreviewSurface>
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
} from "react-native";
|
|
26
26
|
import { SafeAreaInsetsContext, initialWindowMetrics } from "react-native-safe-area-context";
|
|
27
27
|
import { platform } from "@multiplatform.one/platform";
|
|
28
|
-
import {
|
|
28
|
+
import { View, XStack, YStack, useProps, useTheme, useThemeName } from "tamagui";
|
|
29
29
|
import { useKeyboardInset } from "../../shared/useKeyboardInset";
|
|
30
30
|
import { Date as CatalogDate } from "./catalog";
|
|
31
31
|
import {
|
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
import { datePickerHeight, dateSheetBottomPadding, dateSheetMaxHeight } from "./sheetKeyboard";
|
|
37
37
|
import type { DateProps } from "./types";
|
|
38
38
|
import { fromFrappeDateValue, toFrappeDateValue } from "./wire";
|
|
39
|
+
import { Text } from "@multiplatform.one/components";
|
|
39
40
|
|
|
40
41
|
/**
|
|
41
42
|
* Design-law: trigger and sheet actions are house Button. The OS picker stays
|