@multiplatform.one/components 7.8.0 → 7.11.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/README.md +98 -0
- package/dist/cjs/Accordion/index.cjs +3 -3
- package/dist/cjs/Accordion/index.native.js +4 -4
- package/dist/cjs/Accordion/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.cjs +1 -1
- package/dist/cjs/Chip/index.native.js +1 -1
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/ContextMenu/index.cjs +3 -3
- package/dist/cjs/ContextMenu/index.native.js +3 -3
- package/dist/cjs/ContextMenu/index.native.js.map +1 -1
- package/dist/cjs/DropdownMenu/index.cjs +3 -3
- package/dist/cjs/DropdownMenu/index.native.js +3 -3
- package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
- package/dist/cjs/Meter/index.cjs +3 -2
- package/dist/cjs/Meter/index.native.js +3 -2
- package/dist/cjs/Meter/index.native.js.map +1 -1
- package/dist/cjs/Meter/meter.cjs +1 -2
- package/dist/cjs/Meter/meter.native.js +1 -2
- package/dist/cjs/Meter/meter.native.js.map +1 -1
- package/dist/cjs/Pagination.cjs +2 -2
- package/dist/cjs/Pagination.native.js +2 -2
- package/dist/cjs/Pagination.native.js.map +1 -1
- package/dist/cjs/ProgressSteps/index.cjs +3 -3
- package/dist/cjs/ProgressSteps/index.native.js +3 -3
- package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
- package/dist/cjs/Quote/index.cjs +1 -2
- package/dist/cjs/Quote/index.native.js +1 -2
- package/dist/cjs/Quote/index.native.js.map +1 -1
- package/dist/cjs/SheetModal/index.cjs +22 -3
- package/dist/cjs/SheetModal/index.native.js +50 -10
- package/dist/cjs/SheetModal/index.native.js.map +1 -1
- package/dist/cjs/Tabs/index.cjs +34 -13
- package/dist/cjs/Tabs/index.native.js +38 -13
- package/dist/cjs/Tabs/index.native.js.map +1 -1
- package/dist/cjs/Toast/index.cjs +4 -5
- package/dist/cjs/Toast/index.native.js +4 -5
- package/dist/cjs/Toast/index.native.js.map +1 -1
- package/dist/cjs/TreeSelect/index.cjs +46 -7
- package/dist/cjs/TreeSelect/index.native.js +58 -7
- package/dist/cjs/TreeSelect/index.native.js.map +1 -1
- package/dist/cjs/charts/PieChart.cjs +1 -2
- package/dist/cjs/charts/PieChart.native.js +1 -2
- package/dist/cjs/charts/PieChart.native.js.map +1 -1
- package/dist/cjs/code/HighlightedCode/index.cjs +1 -1
- package/dist/cjs/code/HighlightedCode/index.native.js +1 -1
- package/dist/cjs/code/HighlightedCode/index.native.js.map +1 -1
- package/dist/cjs/componentColors.cjs +6 -4
- package/dist/cjs/componentColors.native.js +6 -4
- package/dist/cjs/componentColors.native.js.map +1 -1
- package/dist/cjs/images/Image/ImageFrame.cjs +4 -2
- package/dist/cjs/images/Image/ImageFrame.native.js +4 -2
- package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -1
- package/dist/cjs/layouts/AsyncBoundary.cjs +1 -2
- package/dist/cjs/layouts/AsyncBoundary.native.js +1 -2
- package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/cjs/layouts/EmptyState.cjs +6 -2
- package/dist/cjs/layouts/EmptyState.native.js +10 -6
- package/dist/cjs/layouts/EmptyState.native.js.map +1 -1
- package/dist/cjs/layouts/attachments.cjs +4 -4
- package/dist/cjs/layouts/attachments.native.js +4 -4
- package/dist/cjs/layouts/attachments.native.js.map +1 -1
- package/dist/cjs/layouts/breadcrumbs.cjs +1 -2
- package/dist/cjs/layouts/breadcrumbs.native.js +1 -2
- package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/cjs/layouts/page.cjs +2 -2
- package/dist/cjs/layouts/page.native.js +2 -2
- package/dist/cjs/layouts/page.native.js.map +1 -1
- package/dist/cjs/layouts/sidebar.cjs +2 -2
- package/dist/cjs/layouts/sidebar.native.js +2 -2
- package/dist/cjs/layouts/sidebar.native.js.map +1 -1
- package/dist/cjs/layouts/tags.cjs +6 -7
- package/dist/cjs/layouts/tags.native.js +6 -9
- package/dist/cjs/layouts/tags.native.js.map +1 -1
- package/dist/cjs/layouts/timeline.cjs +5 -5
- package/dist/cjs/layouts/timeline.native.js +5 -5
- package/dist/cjs/layouts/timeline.native.js.map +1 -1
- package/dist/cjs/surfaces.cjs +1 -0
- package/dist/cjs/surfaces.native.js +1 -0
- package/dist/cjs/surfaces.native.js.map +1 -1
- package/dist/cjs/views/Calendar.cjs +11 -8
- package/dist/cjs/views/Calendar.native.js +11 -8
- package/dist/cjs/views/Calendar.native.js.map +1 -1
- package/dist/cjs/views/Dashboard.cjs +6 -6
- package/dist/cjs/views/Dashboard.native.js +7 -7
- package/dist/cjs/views/Dashboard.native.js.map +1 -1
- package/dist/cjs/views/Gantt.cjs +3 -3
- package/dist/cjs/views/Gantt.native.js +3 -3
- package/dist/cjs/views/Gantt.native.js.map +1 -1
- package/dist/cjs/views/Kanban.cjs +2 -2
- package/dist/cjs/views/Kanban.native.js +2 -2
- package/dist/cjs/views/Kanban.native.js.map +1 -1
- package/dist/cjs/views/ReportBuilder.cjs +4 -4
- package/dist/cjs/views/ReportBuilder.native.js +4 -4
- package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
- package/dist/cjs/views/TreeView.cjs +248 -19
- package/dist/cjs/views/TreeView.native.js +264 -20
- package/dist/cjs/views/TreeView.native.js.map +1 -1
- package/dist/cjs/views/treeViewReveal.cjs +55 -0
- package/dist/cjs/views/treeViewReveal.native.js +80 -0
- package/dist/cjs/views/treeViewReveal.native.js.map +1 -0
- package/dist/esm/Accordion/index.mjs +3 -3
- package/dist/esm/Accordion/index.mjs.map +1 -1
- package/dist/esm/Accordion/index.native.js +4 -4
- package/dist/esm/Accordion/index.native.js.map +1 -1
- package/dist/esm/Chip/index.mjs +1 -1
- package/dist/esm/Chip/index.mjs.map +1 -1
- package/dist/esm/Chip/index.native.js +1 -1
- package/dist/esm/Chip/index.native.js.map +1 -1
- package/dist/esm/ContextMenu/index.mjs +3 -3
- package/dist/esm/ContextMenu/index.mjs.map +1 -1
- package/dist/esm/ContextMenu/index.native.js +3 -3
- package/dist/esm/ContextMenu/index.native.js.map +1 -1
- package/dist/esm/DropdownMenu/index.mjs +3 -3
- package/dist/esm/DropdownMenu/index.mjs.map +1 -1
- package/dist/esm/DropdownMenu/index.native.js +3 -3
- package/dist/esm/DropdownMenu/index.native.js.map +1 -1
- package/dist/esm/Meter/index.mjs +3 -2
- package/dist/esm/Meter/index.mjs.map +1 -1
- package/dist/esm/Meter/index.native.js +3 -2
- package/dist/esm/Meter/index.native.js.map +1 -1
- package/dist/esm/Meter/meter.mjs +1 -2
- package/dist/esm/Meter/meter.mjs.map +1 -1
- package/dist/esm/Meter/meter.native.js +1 -2
- package/dist/esm/Meter/meter.native.js.map +1 -1
- package/dist/esm/Pagination.mjs +2 -2
- package/dist/esm/Pagination.mjs.map +1 -1
- package/dist/esm/Pagination.native.js +2 -2
- package/dist/esm/Pagination.native.js.map +1 -1
- package/dist/esm/ProgressSteps/index.mjs +3 -3
- package/dist/esm/ProgressSteps/index.mjs.map +1 -1
- package/dist/esm/ProgressSteps/index.native.js +3 -3
- package/dist/esm/ProgressSteps/index.native.js.map +1 -1
- package/dist/esm/Quote/index.mjs +1 -2
- package/dist/esm/Quote/index.mjs.map +1 -1
- package/dist/esm/Quote/index.native.js +1 -2
- package/dist/esm/Quote/index.native.js.map +1 -1
- package/dist/esm/SheetModal/index.mjs +22 -3
- package/dist/esm/SheetModal/index.mjs.map +1 -1
- package/dist/esm/SheetModal/index.native.js +51 -11
- package/dist/esm/SheetModal/index.native.js.map +1 -1
- package/dist/esm/Tabs/index.mjs +34 -13
- package/dist/esm/Tabs/index.mjs.map +1 -1
- package/dist/esm/Tabs/index.native.js +38 -13
- package/dist/esm/Tabs/index.native.js.map +1 -1
- package/dist/esm/Toast/index.mjs +4 -5
- package/dist/esm/Toast/index.mjs.map +1 -1
- package/dist/esm/Toast/index.native.js +4 -5
- package/dist/esm/Toast/index.native.js.map +1 -1
- package/dist/esm/TreeSelect/index.mjs +46 -7
- package/dist/esm/TreeSelect/index.mjs.map +1 -1
- package/dist/esm/TreeSelect/index.native.js +58 -7
- package/dist/esm/TreeSelect/index.native.js.map +1 -1
- package/dist/esm/charts/PieChart.mjs +1 -2
- package/dist/esm/charts/PieChart.mjs.map +1 -1
- package/dist/esm/charts/PieChart.native.js +1 -2
- package/dist/esm/charts/PieChart.native.js.map +1 -1
- package/dist/esm/code/HighlightedCode/index.mjs +1 -1
- package/dist/esm/code/HighlightedCode/index.mjs.map +1 -1
- package/dist/esm/code/HighlightedCode/index.native.js +1 -1
- package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
- package/dist/esm/componentColors.mjs +6 -4
- package/dist/esm/componentColors.mjs.map +1 -1
- package/dist/esm/componentColors.native.js +6 -4
- package/dist/esm/componentColors.native.js.map +1 -1
- package/dist/esm/images/Image/ImageFrame.mjs +4 -2
- package/dist/esm/images/Image/ImageFrame.mjs.map +1 -1
- package/dist/esm/images/Image/ImageFrame.native.js +4 -2
- package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
- package/dist/esm/layouts/AsyncBoundary.mjs +1 -2
- package/dist/esm/layouts/AsyncBoundary.mjs.map +1 -1
- package/dist/esm/layouts/AsyncBoundary.native.js +1 -2
- package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/esm/layouts/EmptyState.mjs +7 -3
- package/dist/esm/layouts/EmptyState.mjs.map +1 -1
- package/dist/esm/layouts/EmptyState.native.js +11 -7
- package/dist/esm/layouts/EmptyState.native.js.map +1 -1
- package/dist/esm/layouts/attachments.mjs +4 -4
- package/dist/esm/layouts/attachments.mjs.map +1 -1
- package/dist/esm/layouts/attachments.native.js +4 -4
- package/dist/esm/layouts/attachments.native.js.map +1 -1
- package/dist/esm/layouts/breadcrumbs.mjs +1 -2
- package/dist/esm/layouts/breadcrumbs.mjs.map +1 -1
- package/dist/esm/layouts/breadcrumbs.native.js +1 -2
- package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/esm/layouts/page.mjs +2 -2
- package/dist/esm/layouts/page.mjs.map +1 -1
- package/dist/esm/layouts/page.native.js +2 -2
- package/dist/esm/layouts/page.native.js.map +1 -1
- package/dist/esm/layouts/sidebar.mjs +2 -2
- package/dist/esm/layouts/sidebar.mjs.map +1 -1
- package/dist/esm/layouts/sidebar.native.js +2 -2
- package/dist/esm/layouts/sidebar.native.js.map +1 -1
- package/dist/esm/layouts/tags.mjs +6 -7
- package/dist/esm/layouts/tags.mjs.map +1 -1
- package/dist/esm/layouts/tags.native.js +6 -9
- package/dist/esm/layouts/tags.native.js.map +1 -1
- package/dist/esm/layouts/timeline.mjs +5 -5
- package/dist/esm/layouts/timeline.mjs.map +1 -1
- package/dist/esm/layouts/timeline.native.js +5 -5
- package/dist/esm/layouts/timeline.native.js.map +1 -1
- package/dist/esm/surfaces.mjs +1 -0
- package/dist/esm/surfaces.mjs.map +1 -1
- package/dist/esm/surfaces.native.js +1 -0
- package/dist/esm/surfaces.native.js.map +1 -1
- package/dist/esm/views/Calendar.mjs +11 -8
- package/dist/esm/views/Calendar.mjs.map +1 -1
- package/dist/esm/views/Calendar.native.js +11 -8
- package/dist/esm/views/Calendar.native.js.map +1 -1
- package/dist/esm/views/Dashboard.mjs +6 -6
- package/dist/esm/views/Dashboard.mjs.map +1 -1
- package/dist/esm/views/Dashboard.native.js +7 -7
- package/dist/esm/views/Dashboard.native.js.map +1 -1
- package/dist/esm/views/Gantt.mjs +3 -3
- package/dist/esm/views/Gantt.mjs.map +1 -1
- package/dist/esm/views/Gantt.native.js +3 -3
- package/dist/esm/views/Gantt.native.js.map +1 -1
- package/dist/esm/views/Kanban.mjs +2 -2
- package/dist/esm/views/Kanban.mjs.map +1 -1
- package/dist/esm/views/Kanban.native.js +2 -2
- package/dist/esm/views/Kanban.native.js.map +1 -1
- package/dist/esm/views/ReportBuilder.mjs +4 -4
- package/dist/esm/views/ReportBuilder.mjs.map +1 -1
- package/dist/esm/views/ReportBuilder.native.js +4 -4
- package/dist/esm/views/ReportBuilder.native.js.map +1 -1
- package/dist/esm/views/TreeView.mjs +249 -20
- package/dist/esm/views/TreeView.mjs.map +1 -1
- package/dist/esm/views/TreeView.native.js +265 -21
- package/dist/esm/views/TreeView.native.js.map +1 -1
- package/dist/esm/views/treeViewReveal.mjs +29 -0
- package/dist/esm/views/treeViewReveal.mjs.map +1 -0
- package/dist/esm/views/treeViewReveal.native.js +51 -0
- package/dist/esm/views/treeViewReveal.native.js.map +1 -0
- package/dist/jsx/Accordion/index.mjs +3 -3
- package/dist/jsx/Accordion/index.mjs.map +1 -1
- package/dist/jsx/Accordion/index.native.js +4 -4
- package/dist/jsx/Accordion/index.native.js.map +1 -1
- package/dist/jsx/Chip/index.mjs +1 -1
- package/dist/jsx/Chip/index.mjs.map +1 -1
- package/dist/jsx/Chip/index.native.js +1 -1
- package/dist/jsx/Chip/index.native.js.map +1 -1
- package/dist/jsx/ContextMenu/index.mjs +3 -3
- package/dist/jsx/ContextMenu/index.mjs.map +1 -1
- package/dist/jsx/ContextMenu/index.native.js +3 -3
- package/dist/jsx/ContextMenu/index.native.js.map +1 -1
- package/dist/jsx/DropdownMenu/index.mjs +3 -3
- package/dist/jsx/DropdownMenu/index.mjs.map +1 -1
- package/dist/jsx/DropdownMenu/index.native.js +3 -3
- package/dist/jsx/DropdownMenu/index.native.js.map +1 -1
- package/dist/jsx/Meter/index.mjs +3 -2
- package/dist/jsx/Meter/index.mjs.map +1 -1
- package/dist/jsx/Meter/index.native.js +3 -2
- package/dist/jsx/Meter/index.native.js.map +1 -1
- package/dist/jsx/Meter/meter.mjs +1 -2
- package/dist/jsx/Meter/meter.mjs.map +1 -1
- package/dist/jsx/Meter/meter.native.js +1 -2
- package/dist/jsx/Meter/meter.native.js.map +1 -1
- package/dist/jsx/Pagination.mjs +2 -2
- package/dist/jsx/Pagination.mjs.map +1 -1
- package/dist/jsx/Pagination.native.js +2 -2
- package/dist/jsx/Pagination.native.js.map +1 -1
- package/dist/jsx/ProgressSteps/index.mjs +3 -3
- package/dist/jsx/ProgressSteps/index.mjs.map +1 -1
- package/dist/jsx/ProgressSteps/index.native.js +3 -3
- package/dist/jsx/ProgressSteps/index.native.js.map +1 -1
- package/dist/jsx/Quote/index.mjs +1 -2
- package/dist/jsx/Quote/index.mjs.map +1 -1
- package/dist/jsx/Quote/index.native.js +1 -2
- package/dist/jsx/Quote/index.native.js.map +1 -1
- package/dist/jsx/SheetModal/index.mjs +22 -3
- package/dist/jsx/SheetModal/index.mjs.map +1 -1
- package/dist/jsx/SheetModal/index.native.js +50 -10
- package/dist/jsx/SheetModal/index.native.js.map +1 -1
- package/dist/jsx/Tabs/index.mjs +34 -13
- package/dist/jsx/Tabs/index.mjs.map +1 -1
- package/dist/jsx/Tabs/index.native.js +38 -13
- package/dist/jsx/Tabs/index.native.js.map +1 -1
- package/dist/jsx/Toast/index.mjs +4 -5
- package/dist/jsx/Toast/index.mjs.map +1 -1
- package/dist/jsx/Toast/index.native.js +4 -5
- package/dist/jsx/Toast/index.native.js.map +1 -1
- package/dist/jsx/TreeSelect/index.mjs +46 -7
- package/dist/jsx/TreeSelect/index.mjs.map +1 -1
- package/dist/jsx/TreeSelect/index.native.js +58 -7
- package/dist/jsx/TreeSelect/index.native.js.map +1 -1
- package/dist/jsx/charts/PieChart.mjs +1 -2
- package/dist/jsx/charts/PieChart.mjs.map +1 -1
- package/dist/jsx/charts/PieChart.native.js +1 -2
- package/dist/jsx/charts/PieChart.native.js.map +1 -1
- package/dist/jsx/code/HighlightedCode/index.mjs +1 -1
- package/dist/jsx/code/HighlightedCode/index.mjs.map +1 -1
- package/dist/jsx/code/HighlightedCode/index.native.js +1 -1
- package/dist/jsx/code/HighlightedCode/index.native.js.map +1 -1
- package/dist/jsx/componentColors.mjs +6 -4
- package/dist/jsx/componentColors.mjs.map +1 -1
- package/dist/jsx/componentColors.native.js +6 -4
- package/dist/jsx/componentColors.native.js.map +1 -1
- package/dist/jsx/images/Image/ImageFrame.mjs +4 -2
- package/dist/jsx/images/Image/ImageFrame.mjs.map +1 -1
- package/dist/jsx/images/Image/ImageFrame.native.js +4 -2
- package/dist/jsx/images/Image/ImageFrame.native.js.map +1 -1
- package/dist/jsx/layouts/AsyncBoundary.mjs +1 -2
- package/dist/jsx/layouts/AsyncBoundary.mjs.map +1 -1
- package/dist/jsx/layouts/AsyncBoundary.native.js +1 -2
- package/dist/jsx/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/jsx/layouts/EmptyState.mjs +7 -3
- package/dist/jsx/layouts/EmptyState.mjs.map +1 -1
- package/dist/jsx/layouts/EmptyState.native.js +10 -6
- package/dist/jsx/layouts/EmptyState.native.js.map +1 -1
- package/dist/jsx/layouts/attachments.mjs +4 -4
- package/dist/jsx/layouts/attachments.mjs.map +1 -1
- package/dist/jsx/layouts/attachments.native.js +4 -4
- package/dist/jsx/layouts/attachments.native.js.map +1 -1
- package/dist/jsx/layouts/breadcrumbs.mjs +1 -2
- package/dist/jsx/layouts/breadcrumbs.mjs.map +1 -1
- package/dist/jsx/layouts/breadcrumbs.native.js +1 -2
- package/dist/jsx/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/jsx/layouts/page.mjs +2 -2
- package/dist/jsx/layouts/page.mjs.map +1 -1
- package/dist/jsx/layouts/page.native.js +2 -2
- package/dist/jsx/layouts/page.native.js.map +1 -1
- package/dist/jsx/layouts/sidebar.mjs +2 -2
- package/dist/jsx/layouts/sidebar.mjs.map +1 -1
- package/dist/jsx/layouts/sidebar.native.js +2 -2
- package/dist/jsx/layouts/sidebar.native.js.map +1 -1
- package/dist/jsx/layouts/tags.mjs +6 -7
- package/dist/jsx/layouts/tags.mjs.map +1 -1
- package/dist/jsx/layouts/tags.native.js +6 -9
- package/dist/jsx/layouts/tags.native.js.map +1 -1
- package/dist/jsx/layouts/timeline.mjs +5 -5
- package/dist/jsx/layouts/timeline.mjs.map +1 -1
- package/dist/jsx/layouts/timeline.native.js +5 -5
- package/dist/jsx/layouts/timeline.native.js.map +1 -1
- package/dist/jsx/surfaces.mjs +1 -0
- package/dist/jsx/surfaces.mjs.map +1 -1
- package/dist/jsx/surfaces.native.js +1 -0
- package/dist/jsx/surfaces.native.js.map +1 -1
- package/dist/jsx/views/Calendar.mjs +11 -8
- package/dist/jsx/views/Calendar.mjs.map +1 -1
- package/dist/jsx/views/Calendar.native.js +11 -8
- package/dist/jsx/views/Calendar.native.js.map +1 -1
- package/dist/jsx/views/Dashboard.mjs +6 -6
- package/dist/jsx/views/Dashboard.mjs.map +1 -1
- package/dist/jsx/views/Dashboard.native.js +7 -7
- package/dist/jsx/views/Dashboard.native.js.map +1 -1
- package/dist/jsx/views/Gantt.mjs +3 -3
- package/dist/jsx/views/Gantt.mjs.map +1 -1
- package/dist/jsx/views/Gantt.native.js +3 -3
- package/dist/jsx/views/Gantt.native.js.map +1 -1
- package/dist/jsx/views/Kanban.mjs +2 -2
- package/dist/jsx/views/Kanban.mjs.map +1 -1
- package/dist/jsx/views/Kanban.native.js +2 -2
- package/dist/jsx/views/Kanban.native.js.map +1 -1
- package/dist/jsx/views/ReportBuilder.mjs +4 -4
- package/dist/jsx/views/ReportBuilder.mjs.map +1 -1
- package/dist/jsx/views/ReportBuilder.native.js +4 -4
- package/dist/jsx/views/ReportBuilder.native.js.map +1 -1
- package/dist/jsx/views/TreeView.mjs +249 -20
- package/dist/jsx/views/TreeView.mjs.map +1 -1
- package/dist/jsx/views/TreeView.native.js +264 -20
- package/dist/jsx/views/TreeView.native.js.map +1 -1
- package/dist/jsx/views/treeViewReveal.mjs +29 -0
- package/dist/jsx/views/treeViewReveal.mjs.map +1 -0
- package/dist/jsx/views/treeViewReveal.native.js +80 -0
- package/dist/jsx/views/treeViewReveal.native.js.map +1 -0
- package/package.json +11 -11
- package/src/Accordion/index.tsx +4 -6
- package/src/Chip/index.tsx +1 -1
- package/src/ContextMenu/index.tsx +3 -3
- package/src/DropdownMenu/index.tsx +3 -3
- package/src/Meter/Meter.spec.tsx +12 -4
- package/src/Meter/index.tsx +3 -2
- package/src/Meter/meter.ts +6 -1
- package/src/Pagination.tsx +2 -2
- package/src/ProgressSteps/index.tsx +3 -3
- package/src/Quote/index.tsx +1 -3
- package/src/SheetModal/SheetModal.fill.spec.tsx +147 -0
- package/src/SheetModal/SheetModal.ownedBody.spec.tsx +200 -0
- package/src/SheetModal/SheetModal.stories.spec.tsx +23 -2
- package/src/SheetModal/SheetModal.stories.tsx +275 -2
- package/src/SheetModal/index.native.tsx +50 -6
- package/src/SheetModal/index.tsx +40 -3
- package/src/Tabs/Tabs.lifecycle.spec.tsx +123 -0
- package/src/Tabs/Tabs.measurement.spec.tsx +186 -0
- package/src/Tabs/Tabs.stories.tsx +43 -0
- package/src/Tabs/index.tsx +44 -15
- package/src/Toast/Toast.spec.tsx +120 -48
- package/src/Toast/index.tsx +5 -3
- package/src/TreeSelect/index.tsx +61 -1
- package/src/charts/PieChart.tsx +1 -2
- package/src/code/HighlightedCode/index.tsx +1 -1
- package/src/componentColors.ts +6 -4
- package/src/images/Image/ImageFrame.tsx +2 -2
- package/src/layouts/AsyncBoundary.tsx +1 -2
- package/src/layouts/EmptyState.spec.tsx +58 -1
- package/src/layouts/EmptyState.tsx +11 -7
- package/src/layouts/KeyboardAvoidingWrapper/KeyboardAvoidingWrapper.stories.tsx +3 -3
- package/src/layouts/PaneScaffold.stories.tsx +3 -8
- package/src/layouts/SafeAreaWrapper/SafeAreaWrapper.stories.tsx +3 -3
- package/src/layouts/attachments.tsx +4 -4
- package/src/layouts/breadcrumbs.tsx +1 -2
- package/src/layouts/page.tsx +2 -2
- package/src/layouts/sidebar.tsx +2 -2
- package/src/layouts/tags-trigger.spec.tsx +32 -0
- package/src/layouts/tags.tsx +7 -9
- package/src/layouts/timeline.tsx +5 -5
- package/src/surfaces.spec.tsx +97 -3
- package/src/surfaces.tsx +4 -2
- package/src/textAccentSecondary.spec.tsx +187 -0
- package/src/views/Calendar.tsx +9 -8
- package/src/views/Dashboard.tsx +13 -8
- package/src/views/Gantt.tsx +3 -3
- package/src/views/Kanban.native.tsx +2 -2
- package/src/views/Kanban.tsx +2 -2
- package/src/views/ReportBuilder.tsx +4 -4
- package/src/views/TreeView.reveal.spec.tsx +174 -0
- package/src/views/TreeView.reveal.stories.tsx +249 -0
- package/src/views/TreeView.scroll-index.spec.tsx +246 -0
- package/src/views/TreeView.scroll.spec.tsx +857 -0
- package/src/views/TreeView.spec.tsx +1 -1
- package/src/views/TreeView.tsx +353 -29
- package/src/views/treeViewReveal.spec.ts +83 -0
- package/src/views/treeViewReveal.ts +45 -0
- package/src/views/views.spec.tsx +13 -12
- package/types/Accordion/index.d.ts.map +1 -1
- package/types/Meter/index.d.ts.map +1 -1
- package/types/Meter/meter.d.ts +5 -1
- package/types/Meter/meter.d.ts.map +1 -1
- package/types/Quote/index.d.ts.map +1 -1
- package/types/SheetModal/index.d.ts +8 -1
- package/types/SheetModal/index.d.ts.map +1 -1
- package/types/SheetModal/index.native.d.ts +1 -1
- package/types/SheetModal/index.native.d.ts.map +1 -1
- package/types/Tabs/index.d.ts.map +1 -1
- package/types/Toast/index.d.ts.map +1 -1
- package/types/TreeSelect/index.d.ts +9 -1
- package/types/TreeSelect/index.d.ts.map +1 -1
- package/types/charts/PieChart.d.ts.map +1 -1
- package/types/componentColors.d.ts +1 -4
- package/types/componentColors.d.ts.map +1 -1
- package/types/images/Image/ImageFrame.d.ts.map +1 -1
- package/types/layouts/AsyncBoundary.d.ts.map +1 -1
- package/types/layouts/EmptyState.d.ts.map +1 -1
- package/types/layouts/breadcrumbs.d.ts.map +1 -1
- package/types/layouts/tags.d.ts.map +1 -1
- package/types/surfaces.d.ts.map +1 -1
- package/types/views/Calendar.d.ts.map +1 -1
- package/types/views/Dashboard.d.ts +7 -3
- package/types/views/Dashboard.d.ts.map +1 -1
- package/types/views/TreeView.d.ts +19 -1
- package/types/views/TreeView.d.ts.map +1 -1
- package/types/views/treeViewReveal.d.ts +11 -0
- package/types/views/treeViewReveal.d.ts.map +1 -0
package/src/TreeSelect/index.tsx
CHANGED
|
@@ -66,6 +66,14 @@ export interface TreeSelectProps extends Omit<GetProps<typeof YStack>, "children
|
|
|
66
66
|
open?: boolean;
|
|
67
67
|
onOpenChange?: (open: boolean) => void;
|
|
68
68
|
defaultExpandedIds?: string[];
|
|
69
|
+
/**
|
|
70
|
+
* MPO-283 — accessible name for the trigger. `GetProps<typeof YStack>`
|
|
71
|
+
* already admitted this prop, but it landed on the outer wrapper, which is
|
|
72
|
+
* not an accessibility element on iOS, so nothing read it. It is routed to
|
|
73
|
+
* the trigger now. `aria-label` is accepted as an alias.
|
|
74
|
+
*/
|
|
75
|
+
accessibilityLabel?: string;
|
|
76
|
+
"aria-label"?: string;
|
|
69
77
|
}
|
|
70
78
|
|
|
71
79
|
function defaultNodeIcon(hasChildren: boolean, isExpanded: boolean, iconSize: number) {
|
|
@@ -134,6 +142,24 @@ function TreeSelectRows({
|
|
|
134
142
|
aria-expanded={hasChildren ? isExpanded : undefined}
|
|
135
143
|
aria-selected={isSelected}
|
|
136
144
|
aria-level={depth + 1}
|
|
145
|
+
// MPO-283: the aria-* above are web-only. Without the RN spellings
|
|
146
|
+
// a row is not an accessibility element on iOS, so the whole tree
|
|
147
|
+
// came back as loose StaticText with no role and no selected state.
|
|
148
|
+
// `role` is overridden too: RN prefers it over accessibilityRole,
|
|
149
|
+
// and `treeitem` leaves the element out of the iOS tree the same
|
|
150
|
+
// way `radio` does (measured, iOS 26.2).
|
|
151
|
+
{...(!isWeb
|
|
152
|
+
? {
|
|
153
|
+
accessible: true,
|
|
154
|
+
role: "button" as const,
|
|
155
|
+
accessibilityRole: "button" as const,
|
|
156
|
+
accessibilityLabel: node.label,
|
|
157
|
+
accessibilityState: {
|
|
158
|
+
selected: isSelected,
|
|
159
|
+
...(hasChildren ? { expanded: isExpanded } : undefined),
|
|
160
|
+
},
|
|
161
|
+
}
|
|
162
|
+
: undefined)}
|
|
137
163
|
data-treeselect-row={node.id}
|
|
138
164
|
data-treeselect-index={String(index)}
|
|
139
165
|
data-depth={String(depth)}
|
|
@@ -181,6 +207,16 @@ function TreeSelectRows({
|
|
|
181
207
|
? t("Collapse {{label}}", { label: node.label })
|
|
182
208
|
: t("Expand {{label}}", { label: node.label })
|
|
183
209
|
}
|
|
210
|
+
// MPO-283: the aria-label above never reaches native.
|
|
211
|
+
{...(!isWeb
|
|
212
|
+
? {
|
|
213
|
+
accessible: true,
|
|
214
|
+
accessibilityRole: "button" as const,
|
|
215
|
+
accessibilityLabel: isExpanded
|
|
216
|
+
? t("Collapse {{label}}", { label: node.label })
|
|
217
|
+
: t("Expand {{label}}", { label: node.label }),
|
|
218
|
+
}
|
|
219
|
+
: undefined)}
|
|
184
220
|
width={expandIconSize}
|
|
185
221
|
height={expandIconSize}
|
|
186
222
|
alignItems="center"
|
|
@@ -321,6 +357,7 @@ function Trigger({
|
|
|
321
357
|
triggerRef,
|
|
322
358
|
sizeToken,
|
|
323
359
|
borderRadius,
|
|
360
|
+
accessibilityLabel,
|
|
324
361
|
}: {
|
|
325
362
|
display?: string;
|
|
326
363
|
placeholder: string;
|
|
@@ -328,6 +365,7 @@ function Trigger({
|
|
|
328
365
|
disabled: boolean;
|
|
329
366
|
id?: string;
|
|
330
367
|
labelled: boolean;
|
|
368
|
+
accessibilityLabel?: string;
|
|
331
369
|
onToggle: () => void;
|
|
332
370
|
triggerRef: (node: HTMLElement | null) => void;
|
|
333
371
|
sizeToken: string;
|
|
@@ -349,8 +387,21 @@ function Trigger({
|
|
|
349
387
|
role="combobox"
|
|
350
388
|
aria-haspopup="tree"
|
|
351
389
|
aria-expanded={open}
|
|
352
|
-
aria-label={labelled ? undefined : placeholder}
|
|
390
|
+
aria-label={accessibilityLabel ?? (labelled ? undefined : placeholder)}
|
|
353
391
|
id={id}
|
|
392
|
+
// MPO-283 (same family as ToggleGroup / RadioGroup): every semantic on
|
|
393
|
+
// this trigger above is a web attribute, and tamagui does not map any
|
|
394
|
+
// of them onto React Native, so on iOS the control reached the
|
|
395
|
+
// accessibility tree with no role, no name and no expanded state.
|
|
396
|
+
{...(!isWeb
|
|
397
|
+
? {
|
|
398
|
+
accessible: true,
|
|
399
|
+
role: "button" as const,
|
|
400
|
+
accessibilityRole: "button" as const,
|
|
401
|
+
accessibilityLabel: accessibilityLabel ?? display ?? placeholder,
|
|
402
|
+
accessibilityState: { disabled, expanded: open },
|
|
403
|
+
}
|
|
404
|
+
: undefined)}
|
|
354
405
|
tabIndex={disabled || open ? -1 : 0}
|
|
355
406
|
disabled={disabled}
|
|
356
407
|
cursor={disabled ? "not-allowed" : "pointer"}
|
|
@@ -582,6 +633,7 @@ function FloatingTreeSelect({
|
|
|
582
633
|
sizeToken,
|
|
583
634
|
borderRadius,
|
|
584
635
|
loading,
|
|
636
|
+
accessibilityLabel,
|
|
585
637
|
}: {
|
|
586
638
|
nodes: TreeNode[];
|
|
587
639
|
value?: string;
|
|
@@ -599,6 +651,7 @@ function FloatingTreeSelect({
|
|
|
599
651
|
sizeToken: string;
|
|
600
652
|
borderRadius: number | string;
|
|
601
653
|
loading?: boolean;
|
|
654
|
+
accessibilityLabel?: string;
|
|
602
655
|
}) {
|
|
603
656
|
const treeId = useId();
|
|
604
657
|
const searchRef = useRef<HTMLInputElement | null>(null);
|
|
@@ -695,6 +748,7 @@ function FloatingTreeSelect({
|
|
|
695
748
|
triggerRef={panel.setReferenceRef}
|
|
696
749
|
sizeToken={sizeToken}
|
|
697
750
|
borderRadius={borderRadius}
|
|
751
|
+
accessibilityLabel={accessibilityLabel}
|
|
698
752
|
/>
|
|
699
753
|
{panel.mounted && (
|
|
700
754
|
<FloatingFocusManager context={panel.context} modal={false} initialFocus={-1}>
|
|
@@ -772,6 +826,7 @@ function SheetTreeSelect({
|
|
|
772
826
|
sizeToken,
|
|
773
827
|
borderRadius,
|
|
774
828
|
loading,
|
|
829
|
+
accessibilityLabel,
|
|
775
830
|
}: {
|
|
776
831
|
nodes: TreeNode[];
|
|
777
832
|
value?: string;
|
|
@@ -789,6 +844,7 @@ function SheetTreeSelect({
|
|
|
789
844
|
sizeToken: string;
|
|
790
845
|
borderRadius: number | string;
|
|
791
846
|
loading?: boolean;
|
|
847
|
+
accessibilityLabel?: string;
|
|
792
848
|
}) {
|
|
793
849
|
const treeId = useId();
|
|
794
850
|
const searchRef = useRef<HTMLInputElement | null>(null);
|
|
@@ -844,6 +900,7 @@ function SheetTreeSelect({
|
|
|
844
900
|
}}
|
|
845
901
|
sizeToken={sizeToken}
|
|
846
902
|
borderRadius={borderRadius}
|
|
903
|
+
accessibilityLabel={accessibilityLabel}
|
|
847
904
|
/>
|
|
848
905
|
}
|
|
849
906
|
header={
|
|
@@ -902,6 +959,8 @@ export function TreeSelect({
|
|
|
902
959
|
onOpenChange,
|
|
903
960
|
defaultExpandedIds,
|
|
904
961
|
id: idProp,
|
|
962
|
+
accessibilityLabel,
|
|
963
|
+
"aria-label": ariaLabel,
|
|
905
964
|
...stackProps
|
|
906
965
|
}: TreeSelectProps) {
|
|
907
966
|
if (isWeb) ensureKeyboardModalityTracking();
|
|
@@ -965,6 +1024,7 @@ export function TreeSelect({
|
|
|
965
1024
|
sizeToken: String(knobProps.sizeToken),
|
|
966
1025
|
borderRadius: knobProps.borderRadius.borderRadius,
|
|
967
1026
|
loading,
|
|
1027
|
+
accessibilityLabel: accessibilityLabel ?? ariaLabel,
|
|
968
1028
|
};
|
|
969
1029
|
|
|
970
1030
|
const core = shouldUseSheet ? (
|
package/src/charts/PieChart.tsx
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
2
2
|
import { useTranslation } from "../shared/i18n";
|
|
3
3
|
import { Text, XStack, YStack, type YStackProps } from "tamagui";
|
|
4
|
-
import { componentColors } from "../componentColors";
|
|
5
4
|
import { ChartDataFrame } from "./ChartDataView";
|
|
6
5
|
import { ChartSurface } from "./ChartSurface";
|
|
7
6
|
import { chartDatumText, describeChart, describeDatum } from "./accessibility";
|
|
@@ -169,7 +168,7 @@ export function PieChart({
|
|
|
169
168
|
{...chartWebProps({ "data-mpo-chart-datum-label": "true" })}
|
|
170
169
|
{...knobProps.body}
|
|
171
170
|
fontSize="$2"
|
|
172
|
-
color={
|
|
171
|
+
color={knobProps.textAccentColor}
|
|
173
172
|
flex={1}
|
|
174
173
|
numberOfLines={1}
|
|
175
174
|
>
|
package/src/componentColors.ts
CHANGED
|
@@ -30,15 +30,17 @@ export const componentColors = {
|
|
|
30
30
|
border: "$color7",
|
|
31
31
|
},
|
|
32
32
|
|
|
33
|
-
/** Text color levels.
|
|
34
|
-
* step that keeps secondary text AA-readable on color1/2 surfaces. */
|
|
33
|
+
/** Text color levels. */
|
|
35
34
|
text: {
|
|
36
35
|
// MPO-19 X5: was `$color12`, a second answer to what `resolveKnobs`'
|
|
37
36
|
// `textAccent: high` already resolves to. `$color` IS the theme's ink,
|
|
38
37
|
// and it tracks a sub-theme where the raw ramp step does not.
|
|
39
38
|
primary: "$color",
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
// MPO-154: `secondary` and `muted` were the same mistake one tier down —
|
|
40
|
+
// a static `$color11` read into 85 `color` props, which pinned every
|
|
41
|
+
// helper, caption and inactive label dim at `textAccent: high`. Secondary
|
|
42
|
+
// text takes `useResolvedKnobs().knobProps.textAccentColor`, which is
|
|
43
|
+
// `$color11` at low/medium (the AA floor) and `$color` at high.
|
|
42
44
|
subtle: "$color8",
|
|
43
45
|
},
|
|
44
46
|
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
type GroupPosition,
|
|
12
12
|
} from "@multiplatform.one/theme";
|
|
13
13
|
import { Image as TamaguiImage, View, isWeb } from "tamagui";
|
|
14
|
-
import { componentColors } from "../../componentColors";
|
|
15
14
|
import { Skeleton } from "../../Skeleton";
|
|
16
15
|
import { isThumbnailSize, thumbnailPx as resolveThumbnailPx } from "./shared";
|
|
17
16
|
import type { ImagePlaceholder, ImageProps } from "./types";
|
|
@@ -51,6 +50,7 @@ function glyphSize(px: number): number {
|
|
|
51
50
|
}
|
|
52
51
|
|
|
53
52
|
function DefaultFallback({ px }: { px: number }) {
|
|
53
|
+
const { knobProps } = useResolvedKnobs();
|
|
54
54
|
return (
|
|
55
55
|
<View
|
|
56
56
|
data-image-fallback=""
|
|
@@ -61,7 +61,7 @@ function DefaultFallback({ px }: { px: number }) {
|
|
|
61
61
|
justifyContent="center"
|
|
62
62
|
backgroundColor="$color3"
|
|
63
63
|
>
|
|
64
|
-
<ImageIcon size={glyphSize(px)} color={
|
|
64
|
+
<ImageIcon size={glyphSize(px)} color={knobProps.textAccentColor} />
|
|
65
65
|
</View>
|
|
66
66
|
);
|
|
67
67
|
}
|
|
@@ -18,7 +18,6 @@ import { createContext, useContext, useEffect, useRef, type ReactNode } from "re
|
|
|
18
18
|
import { useTranslation } from "../shared/i18n";
|
|
19
19
|
import { XStack, YStack, type YStackProps } from "tamagui";
|
|
20
20
|
import { Alert } from "../Alert";
|
|
21
|
-
import { componentColors } from "../componentColors";
|
|
22
21
|
import { Skeleton } from "../Skeleton";
|
|
23
22
|
import { Text } from "../Text";
|
|
24
23
|
import { EmptyState } from "./page";
|
|
@@ -320,7 +319,7 @@ function AsyncPendingBar() {
|
|
|
320
319
|
{...knobProps.gap}
|
|
321
320
|
>
|
|
322
321
|
<Spinner size="small" aria-hidden />
|
|
323
|
-
<Text {...knobProps.label} color={
|
|
322
|
+
<Text {...knobProps.label} color={knobProps.textAccentColor}>
|
|
324
323
|
{t("Updating...")}
|
|
325
324
|
</Text>
|
|
326
325
|
</XStack>
|
|
@@ -1,6 +1,20 @@
|
|
|
1
|
+
import { cleanup, screen } from "@testing-library/react";
|
|
1
2
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
2
|
-
import {
|
|
3
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
4
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
3
5
|
import { EmptyState } from "./EmptyState";
|
|
6
|
+
import { KPICard } from "../views/Dashboard";
|
|
7
|
+
|
|
8
|
+
afterEach(cleanup);
|
|
9
|
+
|
|
10
|
+
const RADIUS_STOPS = ["none", "small", "medium", "large", "full"] as const;
|
|
11
|
+
|
|
12
|
+
function radiusAtoms(el: Element): string[] {
|
|
13
|
+
return String(el.className || "")
|
|
14
|
+
.split(" ")
|
|
15
|
+
.filter((c) => /^_(btlr|btrr|bbrr|bblr)-/.test(c))
|
|
16
|
+
.sort();
|
|
17
|
+
}
|
|
4
18
|
|
|
5
19
|
describe("EmptyState", () => {
|
|
6
20
|
it("does not pin compact, so the density knob restyles the frame", () => {
|
|
@@ -28,3 +42,46 @@ describe("EmptyState", () => {
|
|
|
28
42
|
expect(container.textContent).toContain("Records you add will show up here.");
|
|
29
43
|
});
|
|
30
44
|
});
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* RULINGS-2026-08-28 R2e (MPO-106 D4): an icon well rides the radius scale
|
|
48
|
+
* (DEFAULT); R-PILL is reserved for a well that IS a count badge. EmptyState
|
|
49
|
+
* declared R-PILL and painted 1000, so its well stayed a circle at every
|
|
50
|
+
* stop while KPICard's well — the dialect the ruling picked — rode the scale.
|
|
51
|
+
*/
|
|
52
|
+
describe("EmptyState icon well radius (R2e)", () => {
|
|
53
|
+
it.each(RADIUS_STOPS)("at radius %s the well matches KPICard's well", (borderRadius) => {
|
|
54
|
+
renderWithProviders(
|
|
55
|
+
<Preset overrides={{ borderRadius }}>
|
|
56
|
+
<>
|
|
57
|
+
<EmptyState title="Nothing here" icon={<span data-testid="empty-icon">i</span>} />
|
|
58
|
+
<KPICard
|
|
59
|
+
config={{ id: "k", title: "K", value: 1, icon: <span data-testid="kpi-icon">i</span> }}
|
|
60
|
+
/>
|
|
61
|
+
</>
|
|
62
|
+
</Preset>,
|
|
63
|
+
);
|
|
64
|
+
const emptyWell = screen.getByTestId("empty-icon").parentElement as HTMLElement;
|
|
65
|
+
const kpiWell = screen.getByTestId("kpi-icon").parentElement as HTMLElement;
|
|
66
|
+
expect(radiusAtoms(emptyWell)).not.toHaveLength(0);
|
|
67
|
+
expect(radiusAtoms(emptyWell)).toEqual(radiusAtoms(kpiWell));
|
|
68
|
+
// A knob-immunity declaration is what licensed the circle; the well is
|
|
69
|
+
// not immune, so it must carry none.
|
|
70
|
+
expect(emptyWell.getAttribute("data-radius-class")).toBeNull();
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("squares at radius none rather than staying a circle", () => {
|
|
74
|
+
renderWithProviders(
|
|
75
|
+
<Preset overrides={{ borderRadius: "none" }}>
|
|
76
|
+
<EmptyState title="Nothing here" icon={<span data-testid="empty-icon">i</span>} />
|
|
77
|
+
</Preset>,
|
|
78
|
+
);
|
|
79
|
+
const well = screen.getByTestId("empty-icon").parentElement as HTMLElement;
|
|
80
|
+
expect(radiusAtoms(well)).toEqual([
|
|
81
|
+
"_bblr-t-radius-0",
|
|
82
|
+
"_bbrr-t-radius-0",
|
|
83
|
+
"_btlr-t-radius-0",
|
|
84
|
+
"_btrr-t-radius-0",
|
|
85
|
+
]);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import {
|
|
11
11
|
Intent,
|
|
12
|
-
radiusClassProps,
|
|
13
12
|
readingWidthStyle,
|
|
14
13
|
useResolvedKnobs,
|
|
15
14
|
warnBannedErrorWords,
|
|
@@ -69,18 +68,23 @@ export function EmptyState({
|
|
|
69
68
|
warnBannedErrorWords(description, { component: "EmptyState" });
|
|
70
69
|
}
|
|
71
70
|
|
|
71
|
+
const {
|
|
72
|
+
borderColor: _wellEdgeColor,
|
|
73
|
+
borderWidth: _wellEdgeWidth,
|
|
74
|
+
...wellRadius
|
|
75
|
+
} = knobProps.borderRadius;
|
|
76
|
+
|
|
72
77
|
const well = icon ? (
|
|
73
78
|
<YStack
|
|
74
79
|
alignItems="center"
|
|
75
80
|
justifyContent="center"
|
|
76
81
|
backgroundColor={componentColors.interactive.background}
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
// the
|
|
80
|
-
//
|
|
81
|
-
{...
|
|
82
|
+
// R2e: an icon well rides the radius scale (DEFAULT), the same
|
|
83
|
+
// resolution KPICard's well takes. Only the radius half of the
|
|
84
|
+
// fragment applies — the well paints no edge. Its inset still scales
|
|
85
|
+
// with the size knob (spec: empty icon well consumes sizeToken).
|
|
86
|
+
{...wellRadius}
|
|
82
87
|
padding={knobProps.sizeToken as any}
|
|
83
|
-
borderRadius={1000}
|
|
84
88
|
aria-hidden
|
|
85
89
|
{...(!isWeb ? { accessibilityElementsHidden: true } : null)}
|
|
86
90
|
>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
2
2
|
import { Input } from "@multiplatform.one/forms";
|
|
3
3
|
import { Paragraph, YStack } from "tamagui";
|
|
4
|
-
import {
|
|
4
|
+
import { Text } from "../../Text";
|
|
5
5
|
import { KeyboardAvoidingWrapper } from "./index";
|
|
6
6
|
|
|
7
7
|
const meta: Meta<typeof KeyboardAvoidingWrapper> = {
|
|
@@ -27,10 +27,10 @@ export const Default: Story = {
|
|
|
27
27
|
<KeyboardAvoidingWrapper>
|
|
28
28
|
<YStack>
|
|
29
29
|
<Paragraph>Content inside KeyboardAvoidingWrapper</Paragraph>
|
|
30
|
-
<
|
|
30
|
+
<Text>
|
|
31
31
|
On native, this shifts content when the keyboard appears. On web, it is a simple
|
|
32
32
|
passthrough wrapper.
|
|
33
|
-
</
|
|
33
|
+
</Text>
|
|
34
34
|
<Input label="Test input" placeholder="Focus to test keyboard avoidance" />
|
|
35
35
|
</YStack>
|
|
36
36
|
</KeyboardAvoidingWrapper>
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from "@multiplatform.one/theme";
|
|
9
9
|
import type { ReactNode } from "react";
|
|
10
10
|
import { Paragraph, Text, YStack } from "tamagui";
|
|
11
|
+
import { Text as HouseText } from "../Text";
|
|
11
12
|
import { componentColors } from "../componentColors";
|
|
12
13
|
import {
|
|
13
14
|
FeedLayout,
|
|
@@ -43,11 +44,7 @@ function PaneFill({ label, hint, muted }: { label: string; hint?: string; muted?
|
|
|
43
44
|
gap="$2"
|
|
44
45
|
>
|
|
45
46
|
<Paragraph fontWeight="600">{label}</Paragraph>
|
|
46
|
-
{hint ?
|
|
47
|
-
<Text color={componentColors.text.muted} fontSize="$2">
|
|
48
|
-
{hint}
|
|
49
|
-
</Text>
|
|
50
|
-
) : null}
|
|
47
|
+
{hint ? <HouseText fontSize="$2">{hint}</HouseText> : null}
|
|
51
48
|
</YStack>
|
|
52
49
|
);
|
|
53
50
|
}
|
|
@@ -274,9 +271,7 @@ export const ProseReadingWidth: StoryObj<typeof ReadingWidth> = {
|
|
|
274
271
|
</Paragraph>
|
|
275
272
|
</ReadingWidth>
|
|
276
273
|
<ReadingWidth measure="none">
|
|
277
|
-
<
|
|
278
|
-
Ejected measure (full width of parent).
|
|
279
|
-
</Paragraph>
|
|
274
|
+
<HouseText>Ejected measure (full width of parent).</HouseText>
|
|
280
275
|
</ReadingWidth>
|
|
281
276
|
</YStack>
|
|
282
277
|
),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
2
2
|
import { Paragraph, YStack } from "tamagui";
|
|
3
|
-
import {
|
|
3
|
+
import { Text } from "../../Text";
|
|
4
4
|
import { SafeAreaWrapper } from "./index";
|
|
5
5
|
|
|
6
6
|
const meta: Meta<typeof SafeAreaWrapper> = {
|
|
@@ -26,10 +26,10 @@ export const Default: Story = {
|
|
|
26
26
|
<SafeAreaWrapper>
|
|
27
27
|
<YStack>
|
|
28
28
|
<Paragraph>Content inside SafeAreaWrapper</Paragraph>
|
|
29
|
-
<
|
|
29
|
+
<Text>
|
|
30
30
|
On native, this respects device safe area insets. On web, it is a simple passthrough
|
|
31
31
|
wrapper.
|
|
32
|
-
</
|
|
32
|
+
</Text>
|
|
33
33
|
</YStack>
|
|
34
34
|
</SafeAreaWrapper>
|
|
35
35
|
),
|
|
@@ -454,7 +454,7 @@ function AttachmentRow({
|
|
|
454
454
|
{attachment.fileName}
|
|
455
455
|
</Text>
|
|
456
456
|
<XStack gap="$2" alignItems="center">
|
|
457
|
-
<Text fontSize="$2" color={
|
|
457
|
+
<Text fontSize="$2" color={knobProps.textAccentColor}>
|
|
458
458
|
{attachment.formattedSize || formatFileSize(attachment.fileSize)}
|
|
459
459
|
</Text>
|
|
460
460
|
{ext ? (
|
|
@@ -627,7 +627,7 @@ export function Attachments({
|
|
|
627
627
|
{...dropHandlers}
|
|
628
628
|
>
|
|
629
629
|
<PaperclipIcon size={compact ? 20 : 28} />
|
|
630
|
-
<Text color={
|
|
630
|
+
<Text color={knobProps.textAccentColor} fontSize={compact ? "$2" : "$3"} marginTop="$2">
|
|
631
631
|
{noAttachmentsLabel}
|
|
632
632
|
</Text>
|
|
633
633
|
</YStack>
|
|
@@ -657,7 +657,7 @@ export function Attachments({
|
|
|
657
657
|
{label}
|
|
658
658
|
{/* Count hides on error so the badge can't lie (DG-ST-04) */}
|
|
659
659
|
{maxAttachments > 0 && !hasError && (
|
|
660
|
-
<Text color={
|
|
660
|
+
<Text color={knobProps.textAccentColor} fontSize="$2">
|
|
661
661
|
{" "}
|
|
662
662
|
({items.length}/{maxAttachments})
|
|
663
663
|
</Text>
|
|
@@ -766,7 +766,7 @@ export function Attachments({
|
|
|
766
766
|
) : previewFile ? (
|
|
767
767
|
<YStack alignItems="center" {...knobProps.gap} paddingVertical="$4">
|
|
768
768
|
{getFileIcon(previewFile, 40)}
|
|
769
|
-
<Text color={
|
|
769
|
+
<Text color={knobProps.textAccentColor} textAlign="center">
|
|
770
770
|
{previewUnavailableLabel}
|
|
771
771
|
</Text>
|
|
772
772
|
</YStack>
|
|
@@ -23,7 +23,6 @@ import {
|
|
|
23
23
|
import React, { useMemo, useState } from "react";
|
|
24
24
|
import { useTranslation } from "react-i18next";
|
|
25
25
|
import { Anchor, Text, XStack, isWeb } from "tamagui";
|
|
26
|
-
import { componentColors } from "../componentColors";
|
|
27
26
|
import { withInterp } from "../shared/t";
|
|
28
27
|
|
|
29
28
|
/** Approx medium body line box before press-target padding (DG-LAY-04). */
|
|
@@ -240,7 +239,7 @@ export function Breadcrumbs({ items, onNavigate, label, maxVisible }: Breadcrumb
|
|
|
240
239
|
) : (
|
|
241
240
|
<Text
|
|
242
241
|
{...knobProps.body}
|
|
243
|
-
color={
|
|
242
|
+
color={knobProps.textAccentColor}
|
|
244
243
|
fontSize={textSize}
|
|
245
244
|
fontWeight="400"
|
|
246
245
|
{...(slot.isCurrent ? { "aria-current": "page" as const } : null)}
|
package/src/layouts/page.tsx
CHANGED
|
@@ -298,7 +298,7 @@ export function PageHeader({
|
|
|
298
298
|
{titleNode}
|
|
299
299
|
{subtitle ? (
|
|
300
300
|
// T-HELPER on the shared body fragment — not a local size map.
|
|
301
|
-
<Paragraph margin={0} {...knobProps.body} color={
|
|
301
|
+
<Paragraph margin={0} {...knobProps.body} color={knobProps.textAccentColor}>
|
|
302
302
|
{subtitle}
|
|
303
303
|
</Paragraph>
|
|
304
304
|
) : null}
|
|
@@ -404,7 +404,7 @@ export function PageSection({
|
|
|
404
404
|
<YStack gap="$2">
|
|
405
405
|
{headingNode}
|
|
406
406
|
{description ? (
|
|
407
|
-
<Paragraph margin={0} {...knobProps.body} color={
|
|
407
|
+
<Paragraph margin={0} {...knobProps.body} color={knobProps.textAccentColor}>
|
|
408
408
|
{description}
|
|
409
409
|
</Paragraph>
|
|
410
410
|
) : null}
|
package/src/layouts/sidebar.tsx
CHANGED
|
@@ -103,7 +103,7 @@ export function Sidebar({
|
|
|
103
103
|
fontSize="$2"
|
|
104
104
|
fontWeight="400"
|
|
105
105
|
textTransform="uppercase"
|
|
106
|
-
color={
|
|
106
|
+
color={knobProps.textAccentColor}
|
|
107
107
|
// Align with row text (LC-02): the inset rides as MARGIN so
|
|
108
108
|
// the caption's box starts at the shared row text edge —
|
|
109
109
|
// padding-based insets left the box at the panel edge, which
|
|
@@ -125,7 +125,7 @@ export function Sidebar({
|
|
|
125
125
|
const corners = stackRadiusProps(position, knobProps.borderRadius.borderRadius);
|
|
126
126
|
const itemKey = `${sectionIdx}:${String(item.value ?? item.label)}`;
|
|
127
127
|
const ink = item.active && onAccent ? onAccent : componentColors.text.primary;
|
|
128
|
-
const metaInk = item.active && onAccent ? onAccent :
|
|
128
|
+
const metaInk = item.active && onAccent ? onAccent : knobProps.textAccentColor;
|
|
129
129
|
const kbFocused = kbFocusKey === itemKey;
|
|
130
130
|
const pressable = Boolean(item.onPress);
|
|
131
131
|
const kbRing = kbFocused
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
// asserts on the atomic classes (same approach as timeline-radius.spec.tsx).
|
|
11
11
|
import { cleanup, fireEvent, screen, waitFor } from "@testing-library/react";
|
|
12
12
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
13
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
13
14
|
import * as React from "react";
|
|
14
15
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
15
16
|
import { Tags } from "./tags";
|
|
@@ -72,6 +73,37 @@ describe("Tags Add Tag trigger (chip-scale)", () => {
|
|
|
72
73
|
expect(classesByPrefix(pill, borderPrefixes).length).toBeGreaterThan(0);
|
|
73
74
|
});
|
|
74
75
|
|
|
76
|
+
/**
|
|
77
|
+
* DG-BOR-01 (MPO-106 D3): the RESOLVER owns the outlined hairline floor —
|
|
78
|
+
* `outlined` + `none` draws the enumerated `small` stop, 0.5 — and a
|
|
79
|
+
* component adds no second `Math.max(..., 1)` on top. A local floor made
|
|
80
|
+
* `small` measure the same as `medium` here and nowhere else, so the Tags
|
|
81
|
+
* row was the one outlined control the borderWidth knob could not thin.
|
|
82
|
+
*/
|
|
83
|
+
it.each([
|
|
84
|
+
["none", "0--5px"],
|
|
85
|
+
["small", "0--5px"],
|
|
86
|
+
["medium", "1px"],
|
|
87
|
+
["large", "2px"],
|
|
88
|
+
] as const)(
|
|
89
|
+
"outlined borderWidth %s resolves to %s, floored only by the resolver",
|
|
90
|
+
(borderWidth, px) => {
|
|
91
|
+
renderWithProviders(
|
|
92
|
+
<Preset overrides={{ borderWidth, fillStyle: "outlined" }}>
|
|
93
|
+
<Tags tags={tags} onAdd={vi.fn()} onRemove={vi.fn()} />
|
|
94
|
+
</Preset>,
|
|
95
|
+
);
|
|
96
|
+
const pill = triggerPillOf(screen.getByLabelText("Add Tag"));
|
|
97
|
+
const chip = chipFrameOf(screen.getByText("urgent"));
|
|
98
|
+
const edges = ["_btw-", "_bbw-", "_blw-", "_brw-"];
|
|
99
|
+
const expected = edges.map((edge) => `${edge}${px}`).sort();
|
|
100
|
+
expect(classesByPrefix(pill, edges)).toEqual(expected);
|
|
101
|
+
// The trigger and the chips it sits beside share one box at every stop;
|
|
102
|
+
// a floor on only one of them is what pulled their heights apart.
|
|
103
|
+
expect(classesByPrefix(chip, edges)).toEqual(expected);
|
|
104
|
+
},
|
|
105
|
+
);
|
|
106
|
+
|
|
75
107
|
it("trigger wrapper carries the D-02 44px press-floor (minHeight class)", () => {
|
|
76
108
|
renderTags();
|
|
77
109
|
const trigger = screen.getByLabelText("Add Tag");
|
package/src/layouts/tags.tsx
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
XStack,
|
|
21
21
|
YStack,
|
|
22
22
|
isWeb,
|
|
23
|
+
type InputProps,
|
|
23
24
|
type YStackProps,
|
|
24
25
|
} from "tamagui";
|
|
25
26
|
import {
|
|
@@ -331,7 +332,7 @@ export function Tags({
|
|
|
331
332
|
) : (
|
|
332
333
|
<XStack alignItems="center" gap="$2" opacity={0.5}>
|
|
333
334
|
<TagIcon size={compact ? 14 : 16} />
|
|
334
|
-
<Text color={
|
|
335
|
+
<Text color={knobProps.textAccentColor} fontSize={compact ? "$1" : "$2"} {...knobProps.body}>
|
|
335
336
|
{noTagsLabel}
|
|
336
337
|
</Text>
|
|
337
338
|
</XStack>
|
|
@@ -473,7 +474,7 @@ export function Tags({
|
|
|
473
474
|
{suggestionOptions.length > 0 && (
|
|
474
475
|
<Text
|
|
475
476
|
fontSize="$1"
|
|
476
|
-
color={
|
|
477
|
+
color={knobProps.textAccentColor}
|
|
477
478
|
paddingHorizontal="$3"
|
|
478
479
|
paddingVertical="$1.5"
|
|
479
480
|
>
|
|
@@ -484,7 +485,7 @@ export function Tags({
|
|
|
484
485
|
{showEmptyMessage && (
|
|
485
486
|
<Text
|
|
486
487
|
fontSize="$2"
|
|
487
|
-
color={
|
|
488
|
+
color={knobProps.textAccentColor}
|
|
488
489
|
textAlign="center"
|
|
489
490
|
padding="$3"
|
|
490
491
|
{...knobProps.body}
|
|
@@ -580,9 +581,6 @@ export function Tags({
|
|
|
580
581
|
variant="outline"
|
|
581
582
|
backgroundColor="transparent"
|
|
582
583
|
{...knobProps.borderRadius}
|
|
583
|
-
// Same border width the Chip paints for every tone, so the
|
|
584
|
-
// trigger's box matches the tag chips it sits beside.
|
|
585
|
-
borderWidth={Math.max(knobProps.borderRadius.borderWidth, 1)}
|
|
586
584
|
borderColor={componentColors.interactive.border}
|
|
587
585
|
gap={compact ? 0 : "$1"}
|
|
588
586
|
hoverStyle={{ backgroundColor: componentColors.interactive.hover }}
|
|
@@ -590,7 +588,7 @@ export function Tags({
|
|
|
590
588
|
{...(addKbFocus ? ensureFocusVisibleRing() : { outlineWidth: 0 })}
|
|
591
589
|
>
|
|
592
590
|
<PlusIcon size={chipIconSize(chipSize)} />
|
|
593
|
-
<ChipText size={chipSize} color={
|
|
591
|
+
<ChipText size={chipSize} color={knobProps.textAccentColor}>
|
|
594
592
|
{compact ? "\u200B" : addTagLabel}
|
|
595
593
|
</ChipText>
|
|
596
594
|
</ChipFrame>
|
|
@@ -625,7 +623,7 @@ export function Tags({
|
|
|
625
623
|
// sat off the chips' optical line.
|
|
626
624
|
fontSize={chipTextSize(chipSize)}
|
|
627
625
|
color={componentColors.text.primary}
|
|
628
|
-
placeholderTextColor={
|
|
626
|
+
placeholderTextColor={knobProps.textAccentColor as InputProps["placeholderTextColor"]}
|
|
629
627
|
autoComplete="off"
|
|
630
628
|
role="combobox"
|
|
631
629
|
aria-autocomplete="list"
|
|
@@ -644,7 +642,7 @@ export function Tags({
|
|
|
644
642
|
<Label {...knobProps.label} fontWeight="400">
|
|
645
643
|
{label}
|
|
646
644
|
{maxTags > 0 && (
|
|
647
|
-
<Text color={
|
|
645
|
+
<Text color={knobProps.textAccentColor} fontSize="$2">
|
|
648
646
|
{" "}
|
|
649
647
|
({tags.length}/{maxTags})
|
|
650
648
|
</Text>
|