robobyte-front-builder 1.0.26 → 1.0.28
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/INTEGRATION.md +6 -0
- package/LICENSE +65 -0
- package/README.md +166 -21
- package/docs/ReportViewer.md +581 -0
- package/docs/fetchReportData.md +379 -0
- package/docs/printLayout.md +405 -0
- package/package.json +29 -1
- package/src/lib/index.js +14 -0
- package/src/lib/muiTheme.js +655 -0
- package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +45 -1
- package/src/pages/_app.js +1 -0
- package/src/pages/printBuilder/index.jsx +26 -19
- package/src/pages/viewBuilder/index.jsx +29 -19
- package/training/00-index.md +168 -0
- package/training/01-input.md +144 -0
- package/training/02-checkbox.md +107 -0
- package/training/03-dropdown.md +135 -0
- package/training/04-datepicker.md +139 -0
- package/training/05-radio.md +123 -0
- package/training/06-number.md +133 -0
- package/training/07-textarea.md +114 -0
- package/training/08-richtext.md +112 -0
- package/training/09-tag.md +110 -0
- package/training/10-time.md +107 -0
- package/training/11-toggle.md +108 -0
- package/training/12-signature.md +107 -0
- package/training/13-autocomplete.md +134 -0
- package/training/14-button.md +168 -0
- package/training/15-label.md +138 -0
- package/training/16-header.md +128 -0
- package/training/17-divider.md +96 -0
- package/training/18-image.md +105 -0
- package/training/19-link.md +108 -0
- package/training/20-banner.md +122 -0
- package/training/21-progress-circle.md +101 -0
- package/training/22-progress-line.md +93 -0
- package/training/23-menu.md +139 -0
- package/training/24-popover.md +114 -0
- package/training/25-layout.md +116 -0
- package/training/26-layout-cell.md +143 -0
- package/training/27-card.md +87 -0
- package/training/28-wizard.md +126 -0
- package/training/29-wizard-step.md +92 -0
- package/training/30-repeater.md +123 -0
- package/training/31-dialog.md +131 -0
- package/training/32-breadcrumb.md +121 -0
- package/training/33-dataGrid.md +129 -0
- package/training/34-dataTableViewer.md +115 -0
- package/training/35-reportViewer.md +673 -0
- package/training/36-viewRenderer.md +110 -0
- package/training/37-treeView.md +170 -0
- package/training/38-kpi-metric.md +148 -0
- package/training/39-kpi-trend.md +105 -0
- package/training/40-kpi-badge.md +112 -0
- package/training/41-kpi-statusDot.md +118 -0
- package/training/42-kpi-iconBox.md +114 -0
- package/training/43-kpi-gauge.md +143 -0
- package/training/44-kpi-bulletChart.md +126 -0
- package/training/45-kpi-colorScale.md +143 -0
- package/training/46-kpi-rating.md +125 -0
- package/training/47-kpi-countdown.md +151 -0
- package/training/48-fetchReportData.md +276 -0
- package/training/49-printLayout.md +215 -0
- package/training/examples/01-login-form.json +176 -0
- package/training/examples/02-contact-form.json +141 -0
- package/training/examples/03-kpi-cards-row.json +123 -0
- package/training/examples/04-settings-toggles.json +153 -0
- package/training/examples/05-user-profile-card.json +136 -0
- package/training/examples/06-date-range-filter.json +108 -0
- package/training/examples/07-search-bar-results.json +130 -0
- package/training/examples/08-notification-settings.json +131 -0
- package/training/examples/09-employee-profile-form.json +259 -0
- package/training/examples/10-invoice-form.json +241 -0
- package/training/examples/11-dashboard-overview.json +251 -0
- package/training/examples/12-registration-wizard.json +154 -0
- package/training/examples/13-product-catalog.json +168 -0
- package/training/examples/14-data-table-with-filters.json +180 -0
- package/training/examples/15-tabbed-profile.json +92 -0
- package/training/examples/16-kpi-full-row.json +203 -0
- package/training/examples/17-tree-detail-view.json +139 -0
- package/training/examples/18-employee-management.json +233 -0
- package/training/examples/19-sales-dashboard.json +272 -0
- package/training/examples/20-checkout-wizard.json +225 -0
- package/training/examples/21-analytics-page.json +222 -0
- package/training/examples/22-hr-onboarding.json +222 -0
- package/training/examples/23-document-browser.json +241 -0
- package/training/examples/24-order-management.json +290 -0
- package/training/examples/25-crm-contact-page.json +272 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Component: link
|
|
2
|
+
|
|
3
|
+
A styled clickable hyperlink using MUI's Link component. Can navigate externally or trigger in-app navigation.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Props — Main Tab
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Options / Notes |
|
|
10
|
+
|------|------|-----------------|
|
|
11
|
+
| `text` | expression | Link display text, e.g. `"View Details"` or `data.label`. |
|
|
12
|
+
| `href` | expression | Target URL, e.g. `"/users/data.id"` or `"https://example.com"`. |
|
|
13
|
+
| `target` | select | `_self` — current tab. `_blank` — new tab. `_parent` · `_top` — frame contexts. |
|
|
14
|
+
| `rel` | text | `rel` attribute for security, e.g. `"noopener noreferrer"` when using `_blank`. |
|
|
15
|
+
| `variant` | select | Typography variant: `body1` · `body2` · `button` · `caption` · `h1` · `h2` · `h3` · `h4` · `h5` · `h6` |
|
|
16
|
+
| `color` | select | `primary` · `secondary` · `error` · `warning` · `info` · `success` · `inherit` · `textPrimary` · `textSecondary` |
|
|
17
|
+
| `underline` | select | `none` — never underlined. `hover` — underline on hover. `always` — always underlined. |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Props — Style Tab
|
|
22
|
+
|
|
23
|
+
No dedicated style tab. Use parent layout-cell style for spacing.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Props — Actions Tab
|
|
28
|
+
|
|
29
|
+
No action events. Use `href` for navigation. For click-handler behavior use `button` instead.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Use Cases
|
|
34
|
+
|
|
35
|
+
**When to use:**
|
|
36
|
+
- Navigating to an external URL.
|
|
37
|
+
- In-app navigation using a URL path.
|
|
38
|
+
- Inline hyperlinks within text content.
|
|
39
|
+
- "View more", "See details", "Download" type text links.
|
|
40
|
+
|
|
41
|
+
**When NOT to use:**
|
|
42
|
+
- Click triggers without navigation (open dialog, call API) → use `button`.
|
|
43
|
+
- Navigation that requires passing state → use `button` with custom action.
|
|
44
|
+
- Tab navigation → use `menu`.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Schema Examples
|
|
49
|
+
|
|
50
|
+
### External link opening in new tab
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"type": "link",
|
|
54
|
+
"props": {
|
|
55
|
+
"text": "Visit Website",
|
|
56
|
+
"href": "data.company.website",
|
|
57
|
+
"target": "_blank",
|
|
58
|
+
"rel": "noopener noreferrer",
|
|
59
|
+
"color": "primary",
|
|
60
|
+
"underline": "hover"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### In-app navigation link
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"type": "link",
|
|
69
|
+
"props": {
|
|
70
|
+
"text": "View Profile",
|
|
71
|
+
"href": "'/users/' + data.user.id",
|
|
72
|
+
"target": "_self",
|
|
73
|
+
"color": "primary",
|
|
74
|
+
"variant": "body2",
|
|
75
|
+
"underline": "none"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Download link
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"type": "link",
|
|
84
|
+
"props": {
|
|
85
|
+
"text": "Download Report",
|
|
86
|
+
"href": "data.report.downloadUrl",
|
|
87
|
+
"target": "_blank",
|
|
88
|
+
"color": "secondary",
|
|
89
|
+
"variant": "button",
|
|
90
|
+
"underline": "hover"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Inline caption link
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"type": "link",
|
|
99
|
+
"props": {
|
|
100
|
+
"text": "Terms & Conditions",
|
|
101
|
+
"href": "/terms",
|
|
102
|
+
"target": "_blank",
|
|
103
|
+
"variant": "caption",
|
|
104
|
+
"color": "textSecondary",
|
|
105
|
+
"underline": "always"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Component: banner
|
|
2
|
+
|
|
3
|
+
An alert/notification banner (MUI Alert). Displays informational, success, warning, or error messages. Can be dismissed.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Props — Main Tab
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Options / Notes |
|
|
10
|
+
|------|------|-----------------|
|
|
11
|
+
| `key` | expression | Unique identifier, used to reference the banner's open state. |
|
|
12
|
+
| `message` | expression | Primary message text shown in the banner. |
|
|
13
|
+
| `title` | expression | Optional bold title above the message. |
|
|
14
|
+
| `severity` | select | `info` · `success` · `warning` · `error` — Sets color scheme and default icon. |
|
|
15
|
+
| `variant` | select | `standard` — colored text on light tinted background. `filled` — solid color background with white text. `outlined` — bordered with colored text. |
|
|
16
|
+
| `open` | expression | Controlled visibility. Bind to `data.showBanner` to show/hide programmatically. Leave blank for the component to manage its own state. |
|
|
17
|
+
| `dismissible` | boolean | Shows an × close button so the user can dismiss the banner. |
|
|
18
|
+
| `icon` | boolean | `true` shows the default severity icon (info/check/warning/error). `false` hides it. |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Props — Style Tab
|
|
23
|
+
|
|
24
|
+
No dedicated style tab. Control wrapper through parent layout-cell style.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Props — Actions Tab
|
|
29
|
+
|
|
30
|
+
| Event | Type | Notes |
|
|
31
|
+
|-------|------|-------|
|
|
32
|
+
| `onClose` | action | Fires when the user clicks the dismiss (×) button. Use to reset `data.showBanner` or clear error state. |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Use Cases
|
|
37
|
+
|
|
38
|
+
**When to use:**
|
|
39
|
+
- System notifications: success after saving, errors from APIs.
|
|
40
|
+
- Form-level validation errors (e.g. "Please fix the errors below").
|
|
41
|
+
- Contextual information banners: "This record is in read-only mode".
|
|
42
|
+
- Dismissible alerts that the user can close.
|
|
43
|
+
|
|
44
|
+
**When NOT to use:**
|
|
45
|
+
- Toast/snackbar messages (ephemeral, auto-dismiss) → handle via action code.
|
|
46
|
+
- Single-field validation → use field-level error states.
|
|
47
|
+
- Status indicators → use `kpi-badge` or `kpi-status-dot`.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Schema Examples
|
|
52
|
+
|
|
53
|
+
### Always-visible info banner
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"type": "banner",
|
|
57
|
+
"props": {
|
|
58
|
+
"message": "This form is in draft mode. Changes are not saved automatically.",
|
|
59
|
+
"severity": "info",
|
|
60
|
+
"variant": "standard",
|
|
61
|
+
"icon": true
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Dismissible error banner controlled by data
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"type": "banner",
|
|
70
|
+
"props": {
|
|
71
|
+
"key": "errorBanner",
|
|
72
|
+
"title": "Error",
|
|
73
|
+
"message": "data.apiError",
|
|
74
|
+
"severity": "error",
|
|
75
|
+
"variant": "filled",
|
|
76
|
+
"open": "!!data.apiError",
|
|
77
|
+
"dismissible": true
|
|
78
|
+
},
|
|
79
|
+
"actions": {
|
|
80
|
+
"onClose": {
|
|
81
|
+
"type": "custom",
|
|
82
|
+
"code": "setData({ apiError: null })"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Success confirmation
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"type": "banner",
|
|
92
|
+
"props": {
|
|
93
|
+
"key": "successBanner",
|
|
94
|
+
"title": "Saved",
|
|
95
|
+
"message": "Your changes have been saved successfully.",
|
|
96
|
+
"severity": "success",
|
|
97
|
+
"variant": "outlined",
|
|
98
|
+
"open": "data.saved",
|
|
99
|
+
"dismissible": true
|
|
100
|
+
},
|
|
101
|
+
"actions": {
|
|
102
|
+
"onClose": {
|
|
103
|
+
"type": "custom",
|
|
104
|
+
"code": "setData({ saved: false })"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Warning about missing data
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"type": "banner",
|
|
114
|
+
"props": {
|
|
115
|
+
"message": "Some required fields are incomplete.",
|
|
116
|
+
"severity": "warning",
|
|
117
|
+
"variant": "standard",
|
|
118
|
+
"open": "data.hasValidationErrors",
|
|
119
|
+
"icon": true
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Component: progress-circle
|
|
2
|
+
|
|
3
|
+
A circular progress indicator. Determinate (shows a specific % value) or indeterminate (spinning animation).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Props — Main Tab
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Options / Notes |
|
|
10
|
+
|------|------|-----------------|
|
|
11
|
+
| `value` | expression | Progress value from `0` to `100`. Only used when `variant: determinate`. Can be bound to data: `data.uploadProgress`. |
|
|
12
|
+
| `variant` | select | `determinate` — fills arc based on `value`. `indeterminate` — continuous spinning animation. |
|
|
13
|
+
| `color` | select | `primary` · `secondary` · `error` · `info` · `success` · `warning` · `inherit` |
|
|
14
|
+
| `size` | number | Diameter of the circle in pixels. Default: `40`. |
|
|
15
|
+
| `thickness` | number | Stroke thickness of the arc. Default: `3.6`. |
|
|
16
|
+
| `showValue` | boolean | `true` displays the numeric percentage in the center of the circle. |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Props — Style Tab
|
|
21
|
+
|
|
22
|
+
No dedicated style tab. Position/spacing via parent layout-cell style.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Props — Actions Tab
|
|
27
|
+
|
|
28
|
+
No actions. Progress circle is display-only.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Use Cases
|
|
33
|
+
|
|
34
|
+
**When to use:**
|
|
35
|
+
- Loading indicators while waiting for an API call.
|
|
36
|
+
- File upload progress (bind `value` to `data.uploadPercent`).
|
|
37
|
+
- Task completion percentage in a card.
|
|
38
|
+
- Score or rating displayed as a filled arc (e.g. 75% completion).
|
|
39
|
+
|
|
40
|
+
**When NOT to use:**
|
|
41
|
+
- Horizontal progress bar → use `progress-line`.
|
|
42
|
+
- Numeric-only value display → use `kpi-metric`.
|
|
43
|
+
- Complex gauge with min/max → use `kpi-gauge`.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Schema Examples
|
|
48
|
+
|
|
49
|
+
### Indeterminate loading spinner
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"type": "progress-circle",
|
|
53
|
+
"props": {
|
|
54
|
+
"variant": "indeterminate",
|
|
55
|
+
"color": "primary",
|
|
56
|
+
"size": 48
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Upload progress with percentage label
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"type": "progress-circle",
|
|
65
|
+
"props": {
|
|
66
|
+
"value": "data.uploadProgress",
|
|
67
|
+
"variant": "determinate",
|
|
68
|
+
"color": "success",
|
|
69
|
+
"size": 80,
|
|
70
|
+
"thickness": 5,
|
|
71
|
+
"showValue": true
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Completion indicator in a card
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"type": "progress-circle",
|
|
80
|
+
"props": {
|
|
81
|
+
"value": "data.task.completionPercent",
|
|
82
|
+
"variant": "determinate",
|
|
83
|
+
"color": "primary",
|
|
84
|
+
"size": 60,
|
|
85
|
+
"showValue": true
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Small inline loading
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"type": "progress-circle",
|
|
94
|
+
"props": {
|
|
95
|
+
"variant": "indeterminate",
|
|
96
|
+
"color": "inherit",
|
|
97
|
+
"size": 20,
|
|
98
|
+
"thickness": 4
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Component: progress-line
|
|
2
|
+
|
|
3
|
+
A horizontal progress bar. Determinate (value-driven), indeterminate (animation), buffer, or query variants.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Props — Main Tab
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Options / Notes |
|
|
10
|
+
|------|------|-----------------|
|
|
11
|
+
| `value` | expression | Progress value from `0` to `100`. Used for `determinate` and `buffer` variants. |
|
|
12
|
+
| `variant` | select | `determinate` — fills based on `value`. `indeterminate` — continuous moving animation. `buffer` — shows primary fill + secondary buffer fill. `query` — reverse animation (for query in progress). |
|
|
13
|
+
| `color` | select | `primary` · `secondary` · `error` · `info` · `success` · `warning` · `inherit` |
|
|
14
|
+
| `showValue` | boolean | `true` displays the percentage as text above/below the bar. |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Props — Style Tab
|
|
19
|
+
|
|
20
|
+
No dedicated style tab. Control wrapper through parent layout-cell style.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Props — Actions Tab
|
|
25
|
+
|
|
26
|
+
No actions. Progress-line is display-only.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Use Cases
|
|
31
|
+
|
|
32
|
+
**When to use:**
|
|
33
|
+
- File upload progress bar.
|
|
34
|
+
- Form step completion indicator.
|
|
35
|
+
- Loading state for a data fetch.
|
|
36
|
+
- Skill/proficiency level bars in a profile.
|
|
37
|
+
|
|
38
|
+
**When NOT to use:**
|
|
39
|
+
- Circular loading → use `progress-circle`.
|
|
40
|
+
- Complex gauge with min/max labels → use `kpi-gauge` or `kpi-bullet`.
|
|
41
|
+
- Horizontal bar chart → use `kpi-bullet` or a chart component.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Schema Examples
|
|
46
|
+
|
|
47
|
+
### Simple upload progress bar
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"type": "progress-line",
|
|
51
|
+
"props": {
|
|
52
|
+
"value": "data.uploadPercent",
|
|
53
|
+
"variant": "determinate",
|
|
54
|
+
"color": "primary",
|
|
55
|
+
"showValue": true
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Indeterminate loading
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"type": "progress-line",
|
|
64
|
+
"props": {
|
|
65
|
+
"variant": "indeterminate",
|
|
66
|
+
"color": "primary"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Skill level bar (static or data-driven)
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"type": "progress-line",
|
|
75
|
+
"props": {
|
|
76
|
+
"value": "data.skill.level",
|
|
77
|
+
"variant": "determinate",
|
|
78
|
+
"color": "success"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Buffer variant
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"type": "progress-line",
|
|
87
|
+
"props": {
|
|
88
|
+
"value": "data.downloaded",
|
|
89
|
+
"variant": "buffer",
|
|
90
|
+
"color": "secondary"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Component: menu
|
|
2
|
+
|
|
3
|
+
A tab/navigation bar component. Children (wizard-steps or panels) are shown based on the active tab. Supports horizontal tabs, vertical tabs, and nav-style menus.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Props — Main Tab
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Options / Notes |
|
|
10
|
+
|------|------|-----------------|
|
|
11
|
+
| `key` | expression | Unique identifier. Active tab key is stored in `data[key]`. |
|
|
12
|
+
| `activeKey` | expression | Controlled active tab key. Bind to `data.activeTab` to drive active tab externally. |
|
|
13
|
+
| `appearance` | select | `default` — standard MUI Tabs. `subtle` — minimal underline style. `tabs` — standard tab appearance. |
|
|
14
|
+
| `items` | items-editor | Static list of `{ key, label, icon? }` tab definitions. |
|
|
15
|
+
| `justified` | boolean | Tabs stretch to fill the full width equally. |
|
|
16
|
+
| `reversed` | boolean | Reverses the order of tabs. |
|
|
17
|
+
| `vertical` | boolean | Renders tabs in a vertical column on the left side. |
|
|
18
|
+
| `itemsAs` | expression | Expression driving dynamic tab list from data. |
|
|
19
|
+
| `tabs` | tabs-editor | Advanced tab configuration with panel content per tab. |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Props — Style Tab
|
|
24
|
+
|
|
25
|
+
| Prop | Type | Options / Notes |
|
|
26
|
+
|------|------|-----------------|
|
|
27
|
+
| `variant` | select | `standard` · `scrollable` · `fullWidth` — Controls how tabs distribute horizontally. |
|
|
28
|
+
| `textColor` | select | `primary` · `secondary` · `inherit` — Color of tab label text. |
|
|
29
|
+
| `indicatorColor` | select | `primary` · `secondary` — Color of the active tab underline indicator. |
|
|
30
|
+
| `scrollButtons` | select | `auto` · `desktop` · `on` · `off` — When to show scroll arrows for overflowing tabs. |
|
|
31
|
+
| `centered` | boolean | Centers the tabs in the tab bar (only for `standard` variant). |
|
|
32
|
+
| `gap` | expression | Gap between tab panel content and next element. |
|
|
33
|
+
| `display` | expression | CSS display. |
|
|
34
|
+
| `width` | expression | Tab bar width. |
|
|
35
|
+
| `height` | expression | Tab bar height. |
|
|
36
|
+
| `margin` | expression | Outer margin. |
|
|
37
|
+
| `padding` | expression | Inner padding. |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Props — Actions Tab
|
|
42
|
+
|
|
43
|
+
| Event | Type | Notes |
|
|
44
|
+
|-------|------|-------|
|
|
45
|
+
| `onTabChange` | expression | Expression/code run when the active tab changes. Receives the new tab key. |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Use Cases
|
|
50
|
+
|
|
51
|
+
**When to use:**
|
|
52
|
+
- Multi-section forms where each section is on a tab (Personal Info, Contact, Documents).
|
|
53
|
+
- Dashboard views with multiple data areas accessible by tab.
|
|
54
|
+
- Settings pages with categories (General, Security, Notifications).
|
|
55
|
+
- Navigation within a page without URL change.
|
|
56
|
+
|
|
57
|
+
**When NOT to use:**
|
|
58
|
+
- Step-by-step forms with validation per step → use `wizard`.
|
|
59
|
+
- Simple show/hide toggle → use conditional rendering via `enabled`/`disabled`.
|
|
60
|
+
- Breadcrumb or wizard-style flow → use `breadcrumb` or `wizard`.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Schema Examples
|
|
65
|
+
|
|
66
|
+
### Basic tab menu
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"type": "menu",
|
|
70
|
+
"props": {
|
|
71
|
+
"key": "mainTabs",
|
|
72
|
+
"appearance": "default",
|
|
73
|
+
"items": [
|
|
74
|
+
{ "key": "overview", "label": "Overview" },
|
|
75
|
+
{ "key": "details", "label": "Details" },
|
|
76
|
+
{ "key": "history", "label": "History" }
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
"style": {
|
|
80
|
+
"variant": "standard",
|
|
81
|
+
"textColor": "primary",
|
|
82
|
+
"indicatorColor": "primary"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Full-width justified tabs
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"type": "menu",
|
|
91
|
+
"props": {
|
|
92
|
+
"key": "settingsTabs",
|
|
93
|
+
"appearance": "tabs",
|
|
94
|
+
"justified": true,
|
|
95
|
+
"items": [
|
|
96
|
+
{ "key": "general", "label": "General" },
|
|
97
|
+
{ "key": "security", "label": "Security" },
|
|
98
|
+
{ "key": "notifications", "label": "Notifications" }
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
"style": {
|
|
102
|
+
"variant": "fullWidth",
|
|
103
|
+
"textColor": "primary",
|
|
104
|
+
"indicatorColor": "secondary"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Vertical tabs
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"type": "menu",
|
|
113
|
+
"props": {
|
|
114
|
+
"key": "sideNav",
|
|
115
|
+
"vertical": true,
|
|
116
|
+
"appearance": "subtle",
|
|
117
|
+
"items": [
|
|
118
|
+
{ "key": "profile", "label": "Profile" },
|
|
119
|
+
{ "key": "billing", "label": "Billing" },
|
|
120
|
+
{ "key": "api", "label": "API Keys" }
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Controlled by data with onTabChange
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"type": "menu",
|
|
130
|
+
"props": {
|
|
131
|
+
"key": "reportTabs",
|
|
132
|
+
"activeKey": "data.activeReport",
|
|
133
|
+
"items": "data.reportTabs"
|
|
134
|
+
},
|
|
135
|
+
"actions": {
|
|
136
|
+
"onTabChange": "setData({ activeReport: newKey }); loadReport(newKey)"
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
```
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Component: popover
|
|
2
|
+
|
|
3
|
+
A floating panel triggered by a button, icon-button, or text. Contains arbitrary child components dropped into it. Useful for contextual actions, filters, or detail panels.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Props — Main Tab
|
|
8
|
+
|
|
9
|
+
| Prop | Type | Options / Notes |
|
|
10
|
+
|------|------|-----------------|
|
|
11
|
+
| `key` | expression | Unique identifier for referencing with `openPopover(key)` / `closePopover(key)`. |
|
|
12
|
+
| `triggerType` | select | `button` · `icon-button` · `text` — The type of trigger element. |
|
|
13
|
+
| `triggerLabel` | expression | Label shown on the trigger button/text. |
|
|
14
|
+
| `triggerVariant` | select | `text` · `outlined` · `contained` — Button variant (applies to `button` trigger). |
|
|
15
|
+
| `triggerColor` | select | `primary` · `secondary` · `success` · `error` · `warning` · `info` · `inherit` |
|
|
16
|
+
| `triggerSize` | select | `small` · `medium` · `large` |
|
|
17
|
+
| `triggerIcon` | select | One of: `MoreVertOutlined` · `SettingsOutlined` · `TuneOutlined` · `FilterListOutlined` · `SearchOutlined` · `InfoOutlined` · `AddOutlined` · `EditOutlined` · `DeleteOutlined` · `DownloadOutlined` · `ExpandMoreOutlined` · `CheckOutlined` · `CloseOutlined` · `RefreshOutlined` · `StarOutlined` · `LockOutlined` · `LockOpenOutlined` · _(empty)_ |
|
|
18
|
+
| `triggerFullWidth` | boolean | Makes the trigger stretch to full width. |
|
|
19
|
+
| `title` | expression | Optional title shown at the top of the popover panel. |
|
|
20
|
+
| `placement` | select | `bottom-start` · `bottom` · `bottom-end` · `top-start` · `top` · `top-end` · `left` · `right` |
|
|
21
|
+
| `triggerOn` | select | `click` · `hover` — How the popover opens. |
|
|
22
|
+
| `open` | expression | Controlled open state. Bind to `data.popoverOpen` for programmatic control. |
|
|
23
|
+
| `maxWidth` | expression | Max width of the popover panel, e.g. `"320px"`. |
|
|
24
|
+
| `maxHeight` | expression | Max height, e.g. `"400px"` (panel scrolls if content is taller). |
|
|
25
|
+
| `contentPadding` | expression | Padding inside the popover panel, e.g. `"16px"`. |
|
|
26
|
+
| `closeOnContentClick` | boolean | Closes the popover when a child inside it is clicked. |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Props — Style Tab
|
|
31
|
+
|
|
32
|
+
No dedicated style tab.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Props — Actions Tab
|
|
37
|
+
|
|
38
|
+
No dedicated action events. Child components inside the popover handle their own actions.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Use Cases
|
|
43
|
+
|
|
44
|
+
**When to use:**
|
|
45
|
+
- "More options" menus triggered by a `MoreVertOutlined` icon-button.
|
|
46
|
+
- Filter panels triggered by a `FilterListOutlined` button.
|
|
47
|
+
- Quick-edit forms that pop up alongside a row/item.
|
|
48
|
+
- Info tooltips with rich content (not just text).
|
|
49
|
+
- Color pickers, date range filters, column selectors.
|
|
50
|
+
|
|
51
|
+
**When NOT to use:**
|
|
52
|
+
- Full-screen or large content → use `dialog`.
|
|
53
|
+
- Simple text tooltip → use button's `tooltip` prop.
|
|
54
|
+
- Permanent side panel → use a layout with a sidebar cell.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Schema Examples
|
|
59
|
+
|
|
60
|
+
### "More options" icon popover
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"type": "popover",
|
|
64
|
+
"props": {
|
|
65
|
+
"key": "rowActions",
|
|
66
|
+
"triggerType": "icon-button",
|
|
67
|
+
"triggerIcon": "MoreVertOutlined",
|
|
68
|
+
"triggerColor": "inherit",
|
|
69
|
+
"placement": "bottom-end",
|
|
70
|
+
"triggerOn": "click",
|
|
71
|
+
"maxWidth": "200px",
|
|
72
|
+
"contentPadding": "8px",
|
|
73
|
+
"closeOnContentClick": true
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Filter panel button
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"type": "popover",
|
|
82
|
+
"props": {
|
|
83
|
+
"key": "filterPanel",
|
|
84
|
+
"triggerType": "button",
|
|
85
|
+
"triggerLabel": "Filters",
|
|
86
|
+
"triggerIcon": "FilterListOutlined",
|
|
87
|
+
"triggerVariant": "outlined",
|
|
88
|
+
"triggerColor": "primary",
|
|
89
|
+
"placement": "bottom-start",
|
|
90
|
+
"triggerOn": "click",
|
|
91
|
+
"title": "Filter Options",
|
|
92
|
+
"maxWidth": "320px",
|
|
93
|
+
"contentPadding": "16px"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Hover info popover
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"type": "popover",
|
|
102
|
+
"props": {
|
|
103
|
+
"key": "helpInfo",
|
|
104
|
+
"triggerType": "icon-button",
|
|
105
|
+
"triggerIcon": "InfoOutlined",
|
|
106
|
+
"triggerColor": "info",
|
|
107
|
+
"triggerSize": "small",
|
|
108
|
+
"triggerOn": "hover",
|
|
109
|
+
"placement": "top",
|
|
110
|
+
"maxWidth": "280px",
|
|
111
|
+
"contentPadding": "12px"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
```
|