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.
Files changed (88) hide show
  1. package/INTEGRATION.md +6 -0
  2. package/LICENSE +65 -0
  3. package/README.md +166 -21
  4. package/docs/ReportViewer.md +581 -0
  5. package/docs/fetchReportData.md +379 -0
  6. package/docs/printLayout.md +405 -0
  7. package/package.json +29 -1
  8. package/src/lib/index.js +14 -0
  9. package/src/lib/muiTheme.js +655 -0
  10. package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +45 -1
  11. package/src/pages/_app.js +1 -0
  12. package/src/pages/printBuilder/index.jsx +26 -19
  13. package/src/pages/viewBuilder/index.jsx +29 -19
  14. package/training/00-index.md +168 -0
  15. package/training/01-input.md +144 -0
  16. package/training/02-checkbox.md +107 -0
  17. package/training/03-dropdown.md +135 -0
  18. package/training/04-datepicker.md +139 -0
  19. package/training/05-radio.md +123 -0
  20. package/training/06-number.md +133 -0
  21. package/training/07-textarea.md +114 -0
  22. package/training/08-richtext.md +112 -0
  23. package/training/09-tag.md +110 -0
  24. package/training/10-time.md +107 -0
  25. package/training/11-toggle.md +108 -0
  26. package/training/12-signature.md +107 -0
  27. package/training/13-autocomplete.md +134 -0
  28. package/training/14-button.md +168 -0
  29. package/training/15-label.md +138 -0
  30. package/training/16-header.md +128 -0
  31. package/training/17-divider.md +96 -0
  32. package/training/18-image.md +105 -0
  33. package/training/19-link.md +108 -0
  34. package/training/20-banner.md +122 -0
  35. package/training/21-progress-circle.md +101 -0
  36. package/training/22-progress-line.md +93 -0
  37. package/training/23-menu.md +139 -0
  38. package/training/24-popover.md +114 -0
  39. package/training/25-layout.md +116 -0
  40. package/training/26-layout-cell.md +143 -0
  41. package/training/27-card.md +87 -0
  42. package/training/28-wizard.md +126 -0
  43. package/training/29-wizard-step.md +92 -0
  44. package/training/30-repeater.md +123 -0
  45. package/training/31-dialog.md +131 -0
  46. package/training/32-breadcrumb.md +121 -0
  47. package/training/33-dataGrid.md +129 -0
  48. package/training/34-dataTableViewer.md +115 -0
  49. package/training/35-reportViewer.md +673 -0
  50. package/training/36-viewRenderer.md +110 -0
  51. package/training/37-treeView.md +170 -0
  52. package/training/38-kpi-metric.md +148 -0
  53. package/training/39-kpi-trend.md +105 -0
  54. package/training/40-kpi-badge.md +112 -0
  55. package/training/41-kpi-statusDot.md +118 -0
  56. package/training/42-kpi-iconBox.md +114 -0
  57. package/training/43-kpi-gauge.md +143 -0
  58. package/training/44-kpi-bulletChart.md +126 -0
  59. package/training/45-kpi-colorScale.md +143 -0
  60. package/training/46-kpi-rating.md +125 -0
  61. package/training/47-kpi-countdown.md +151 -0
  62. package/training/48-fetchReportData.md +276 -0
  63. package/training/49-printLayout.md +215 -0
  64. package/training/examples/01-login-form.json +176 -0
  65. package/training/examples/02-contact-form.json +141 -0
  66. package/training/examples/03-kpi-cards-row.json +123 -0
  67. package/training/examples/04-settings-toggles.json +153 -0
  68. package/training/examples/05-user-profile-card.json +136 -0
  69. package/training/examples/06-date-range-filter.json +108 -0
  70. package/training/examples/07-search-bar-results.json +130 -0
  71. package/training/examples/08-notification-settings.json +131 -0
  72. package/training/examples/09-employee-profile-form.json +259 -0
  73. package/training/examples/10-invoice-form.json +241 -0
  74. package/training/examples/11-dashboard-overview.json +251 -0
  75. package/training/examples/12-registration-wizard.json +154 -0
  76. package/training/examples/13-product-catalog.json +168 -0
  77. package/training/examples/14-data-table-with-filters.json +180 -0
  78. package/training/examples/15-tabbed-profile.json +92 -0
  79. package/training/examples/16-kpi-full-row.json +203 -0
  80. package/training/examples/17-tree-detail-view.json +139 -0
  81. package/training/examples/18-employee-management.json +233 -0
  82. package/training/examples/19-sales-dashboard.json +272 -0
  83. package/training/examples/20-checkout-wizard.json +225 -0
  84. package/training/examples/21-analytics-page.json +222 -0
  85. package/training/examples/22-hr-onboarding.json +222 -0
  86. package/training/examples/23-document-browser.json +241 -0
  87. package/training/examples/24-order-management.json +290 -0
  88. 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
+ ```