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,131 @@
1
+ # Component: dialog
2
+
3
+ A modal dialog overlay. Opened/closed via `openDialog(key)` / `closeDialog(key)` actions. Can contain inline child components or embed an entire saved view via `viewId`.
4
+
5
+ ---
6
+
7
+ ## Props — Main Tab
8
+
9
+ | Prop | Type | Options / Notes |
10
+ |------|------|-----------------|
11
+ | `key` | expression | **Required.** The key passed to `openDialog(key)` and `closeDialog(key)` in action code. |
12
+ | `viewId` | expression | ID of a saved view to render as the dialog body. Leave blank to use inline dropped children. |
13
+ | `title` | expression | Dialog title shown in the header bar. |
14
+ | `hideTitle` | boolean | `true` hides the entire title bar (including close button). |
15
+ | `maxWidth` | select | `xs` · `sm` · `md` · `lg` · `xl` — Maximum width of the dialog. |
16
+ | `fullWidth` | boolean | Dialog stretches to the full `maxWidth`. |
17
+ | `fullScreen` | boolean | Dialog occupies the entire screen. |
18
+ | `showCloseButton` | boolean | Shows an × close button in the title bar. |
19
+ | `closeOnBackdrop` | boolean | Clicking outside the dialog closes it. |
20
+ | `dialogActions` | actions-config-editor | Buttons rendered in a DialogActions bar at the bottom. Each button has `label`, `color`, `variant`, and custom code. `closeDialog(key)` is available in action code. |
21
+
22
+ ---
23
+
24
+ ## Props — Style Tab
25
+
26
+ No dedicated style tab.
27
+
28
+ ---
29
+
30
+ ## Props — Actions Tab
31
+
32
+ No action tab. Dialog lifecycle is controlled via `openDialog`/`closeDialog` in other components' action code.
33
+
34
+ ---
35
+
36
+ ## How to Open and Close
37
+
38
+ From any action code (e.g. button onClick):
39
+ ```javascript
40
+ openDialog('myDialog') // opens the dialog
41
+ closeDialog('myDialog') // closes the dialog
42
+ ```
43
+
44
+ ---
45
+
46
+ ## Use Cases
47
+
48
+ **When to use:**
49
+ - Confirmation dialogs: "Are you sure you want to delete?"
50
+ - Edit forms in a modal: click a row → open edit dialog.
51
+ - Detail panels: view full record without leaving the page.
52
+ - Multi-step forms inside a dialog.
53
+ - Loading a complex sub-view (via `viewId`).
54
+
55
+ **When NOT to use:**
56
+ - Tooltips or small floating panels → use `popover`.
57
+ - Navigation between pages → use `viewRenderer` or routing.
58
+ - Inline expanding content → use `card` or conditional visibility.
59
+
60
+ ---
61
+
62
+ ## Schema Examples
63
+
64
+ ### Confirmation dialog
65
+ ```json
66
+ {
67
+ "type": "dialog",
68
+ "props": {
69
+ "key": "confirmDelete",
70
+ "title": "Confirm Delete",
71
+ "maxWidth": "sm",
72
+ "fullWidth": true,
73
+ "showCloseButton": true,
74
+ "closeOnBackdrop": false,
75
+ "dialogActions": [
76
+ {
77
+ "label": "Cancel",
78
+ "variant": "text",
79
+ "color": "inherit",
80
+ "code": "closeDialog('confirmDelete')"
81
+ },
82
+ {
83
+ "label": "Delete",
84
+ "variant": "contained",
85
+ "color": "error",
86
+ "code": "deleteRecord({ id: data.selectedId }); closeDialog('confirmDelete')"
87
+ }
88
+ ]
89
+ },
90
+ "children": [
91
+ { "type": "label", "props": { "text": "This action cannot be undone. Are you sure?", "variant": "body1" } }
92
+ ]
93
+ }
94
+ ```
95
+
96
+ ### Edit dialog with embedded view
97
+ ```json
98
+ {
99
+ "type": "dialog",
100
+ "props": {
101
+ "key": "editEmployee",
102
+ "title": "Edit Employee",
103
+ "viewId": "data.editViewId",
104
+ "maxWidth": "md",
105
+ "fullWidth": true,
106
+ "showCloseButton": true,
107
+ "closeOnBackdrop": true,
108
+ "dialogActions": [
109
+ { "label": "Close", "variant": "outlined", "color": "inherit", "code": "closeDialog('editEmployee')" }
110
+ ]
111
+ }
112
+ }
113
+ ```
114
+
115
+ ### Full-screen form dialog
116
+ ```json
117
+ {
118
+ "type": "dialog",
119
+ "props": {
120
+ "key": "newOrderForm",
121
+ "title": "New Order",
122
+ "fullScreen": true,
123
+ "showCloseButton": true,
124
+ "dialogActions": [
125
+ { "label": "Cancel", "variant": "text", "color": "inherit", "code": "closeDialog('newOrderForm')" },
126
+ { "label": "Submit", "variant": "contained", "color": "primary", "code": "submitForm(); closeDialog('newOrderForm')" }
127
+ ]
128
+ },
129
+ "children": []
130
+ }
131
+ ```
@@ -0,0 +1,121 @@
1
+ # Component: breadcrumb
2
+
3
+ A navigation trail or step indicator. Two visual modes: classic breadcrumb links, or a chevron-style step progress bar.
4
+
5
+ ---
6
+
7
+ ## Props — Main Tab
8
+
9
+ | Prop | Type | Options / Notes |
10
+ |------|------|-----------------|
11
+ | `key` | expression | Unique identifier. |
12
+ | `items` | expression | Array of items: `[{ label, href?, disabled? }]`. Last item = current page in breadcrumb mode. |
13
+ | `variant` | select | `breadcrumb` — classic path trail with separator. `chevron` — arrow/step progress bar. |
14
+ | `mode` | select | `link` — items use `href` for navigation. `click` — items call `onClick` code. `none` — display only. |
15
+ | `separator` | expression | Separator character/string for breadcrumb variant, e.g. `"/"`, `">"`. Default: `"/"`. |
16
+ | `maxItems` | number | Maximum items shown before collapsing with an ellipsis (breadcrumb variant). |
17
+ | `linkUnderline` | select | `hover` · `always` · `none` — Link underline behavior. |
18
+ | `currentColor` | select | `text.primary` · `primary.main` · `text.secondary` · `inherit` — Color of the current (last) item. |
19
+ | `activeIndex` | expression | Active step index (chevron variant). Drives which step is highlighted. |
20
+ | `itemSize` | select | `small` · `medium` · `large` — Size of each step (chevron variant). |
21
+ | `fullWidth` | boolean | Chevron steps stretch to fill the full width. |
22
+ | `completedColor` | text | Background color of completed steps (chevron variant), e.g. `"#4caf50"`. |
23
+ | `activeColor` | text | Background color of the active step, e.g. `"#1976d2"`. |
24
+ | `pendingColor` | text | Background color of pending steps, e.g. `"#e0e0e0"`. |
25
+ | `completedTextColor` | text | Text color of completed steps. |
26
+ | `activeTextColor` | text | Text color of the active step. |
27
+ | `pendingTextColor` | text | Text color of pending steps. |
28
+ | `onClick` | code | Code run when an item is clicked (mode: click). Available: `item`, `index`. |
29
+
30
+ ---
31
+
32
+ ## Props — Style Tab
33
+
34
+ No dedicated style tab.
35
+
36
+ ---
37
+
38
+ ## Props — Actions Tab
39
+
40
+ No dedicated action tab. Click behavior via `onClick` code in Main.
41
+
42
+ ---
43
+
44
+ ## Use Cases
45
+
46
+ **When to use (breadcrumb variant):**
47
+ - Navigation trail showing the user's location in an app hierarchy.
48
+ - "Home > Category > Subcategory > Item" trails in detail pages.
49
+
50
+ **When to use (chevron variant):**
51
+ - Visual progress indicator for a multi-step process without built-in navigation.
52
+ - Status display: "Submitted → Under Review → Approved → Completed".
53
+ - Non-interactive pipeline status viewer.
54
+
55
+ **When NOT to use:**
56
+ - Interactive multi-step navigation with form fields per step → use `wizard`.
57
+ - Tab switching → use `menu`.
58
+
59
+ ---
60
+
61
+ ## Schema Examples
62
+
63
+ ### Classic breadcrumb (link mode)
64
+ ```json
65
+ {
66
+ "type": "breadcrumb",
67
+ "props": {
68
+ "key": "navBreadcrumb",
69
+ "variant": "breadcrumb",
70
+ "mode": "link",
71
+ "items": [
72
+ { "label": "Home", "href": "/" },
73
+ { "label": "Employees", "href": "/employees" },
74
+ { "label": "data.employee.name" }
75
+ ],
76
+ "separator": "/",
77
+ "linkUnderline": "hover",
78
+ "currentColor": "text.primary"
79
+ }
80
+ }
81
+ ```
82
+
83
+ ### Chevron status bar (display only)
84
+ ```json
85
+ {
86
+ "type": "breadcrumb",
87
+ "props": {
88
+ "key": "orderStatus",
89
+ "variant": "chevron",
90
+ "mode": "none",
91
+ "items": [
92
+ { "label": "Order Placed" },
93
+ { "label": "Processing" },
94
+ { "label": "Shipped" },
95
+ { "label": "Delivered" }
96
+ ],
97
+ "activeIndex": "data.order.statusIndex",
98
+ "fullWidth": true,
99
+ "completedColor": "#4caf50",
100
+ "activeColor": "#1976d2",
101
+ "pendingColor": "#e0e0e0",
102
+ "completedTextColor": "#ffffff",
103
+ "activeTextColor": "#ffffff",
104
+ "pendingTextColor": "#9e9e9e"
105
+ }
106
+ }
107
+ ```
108
+
109
+ ### Clickable breadcrumb
110
+ ```json
111
+ {
112
+ "type": "breadcrumb",
113
+ "props": {
114
+ "key": "folderNav",
115
+ "variant": "breadcrumb",
116
+ "mode": "click",
117
+ "items": "data.folderPath",
118
+ "onClick": "setData({ currentFolder: item.id }); loadFolder(item.id)"
119
+ }
120
+ }
121
+ ```
@@ -0,0 +1,129 @@
1
+ # Component: dataGrid
2
+
3
+ An AG Grid-powered editable data table. Supports inline editing, row actions, column configuration, add/delete rows, row selection, and pagination. Primarily used for editable grid forms (not just read-only display).
4
+
5
+ > ⚠️ Use `dataGrid` for **editable forms** with tabular data (line items, bulk editing). For read-only data display use `reportViewer`. For simple static tables use `dataTableViewer`.
6
+
7
+ ---
8
+
9
+ ## Props — Main Tab
10
+
11
+ | Prop | Type | Options / Notes |
12
+ |------|------|-----------------|
13
+ | `key` | expression | Unique identifier. Grid data is accessible at `data[key]`. |
14
+ | `dataKey` | expression | Data key pointing to the rows array, e.g. `data.invoiceLines`. |
15
+ | `columns` | expression | Column definitions array (AG Grid colDef format), e.g. `[{ headerName: 'Name', field: 'name' }]`. |
16
+ | `extraCols` | extra-cols-editor | Additional columns defined via the visual editor. Each entry is a full AG Grid colDef object. Useful for computed columns or action columns. |
17
+ | `columnsConfig` | columns-config-editor | Per-field overrides applied to existing columns (matched by field name). E.g. make a field editable, add a custom valueGetter. |
18
+ | `actionsConfig` | actions-config-editor | Row action buttons shown in a popover "Actions" cell. Each action has: `label`, `color`, `variant`, `icon`, `code`, `confirmation?`, `disabled?`. Inside action code, `data.row` is the AG Grid row node. |
19
+ | `addLabel` | expression | Label for the "Add Row" button, e.g. `"+ Add Line"`. |
20
+ | `addRow` | code | Code returning the template object for a new row. E.g. `return { id: uuid(), qty: 1, price: 0 }`. |
21
+ | `readOnly` | expression | Expression that when `true` disables all editing. |
22
+ | `showAddBtn` | boolean | Shows/hides the Add Row button. |
23
+ | `showDeleteCol` | boolean | Shows/hides the delete (×) column on each row. |
24
+ | `height` | expression | Grid height, e.g. `"400px"`, `"60vh"`. |
25
+ | `rowSelection` | select | `none` · `single` · `multiple` — Enables row selection mode. |
26
+ | `pagination` | boolean | Enables pagination controls. |
27
+ | `pageSize` | number | Rows per page when pagination is enabled. Default: `20`. |
28
+
29
+ ---
30
+
31
+ ## Props — Style Tab
32
+
33
+ No dedicated style tab. Control via parent layout-cell.
34
+
35
+ ---
36
+
37
+ ## Props — Actions Tab
38
+
39
+ No dedicated action tab. Row actions are defined in `actionsConfig`.
40
+
41
+ ---
42
+
43
+ ## Use Cases
44
+
45
+ **When to use:**
46
+ - Invoice line items: editable rows with qty, price, description.
47
+ - Bulk data entry: import-like screens with many rows to fill.
48
+ - Editable configuration tables.
49
+ - Any tabular form where users add/edit/delete rows.
50
+
51
+ **When NOT to use:**
52
+ - Read-only server-fetched data displays → use `reportViewer`.
53
+ - Simple static tables without editing → use `dataTableViewer`.
54
+ - Single record forms → use individual form fields.
55
+
56
+ ---
57
+
58
+ ## Schema Examples
59
+
60
+ ### Editable invoice lines
61
+ ```json
62
+ {
63
+ "type": "dataGrid",
64
+ "props": {
65
+ "key": "invoiceLines",
66
+ "dataKey": "data.lines",
67
+ "columns": "[{ headerName: 'Description', field: 'description', editable: true }, { headerName: 'Qty', field: 'qty', editable: true, width: 100 }, { headerName: 'Price', field: 'price', editable: true, width: 120 }]",
68
+ "showAddBtn": true,
69
+ "showDeleteCol": true,
70
+ "addLabel": "+ Add Line",
71
+ "addRow": "return { id: Date.now(), description: '', qty: 1, price: 0 }",
72
+ "height": "350px"
73
+ }
74
+ }
75
+ ```
76
+
77
+ ### Read-only grid with row actions
78
+ ```json
79
+ {
80
+ "type": "dataGrid",
81
+ "props": {
82
+ "key": "employeeTable",
83
+ "dataKey": "data.employees",
84
+ "columns": "data.employeeColumns",
85
+ "readOnly": true,
86
+ "showAddBtn": false,
87
+ "showDeleteCol": false,
88
+ "rowSelection": "single",
89
+ "pagination": true,
90
+ "pageSize": 25,
91
+ "height": "500px",
92
+ "actionsConfig": [
93
+ {
94
+ "label": "Edit",
95
+ "color": "primary",
96
+ "variant": "text",
97
+ "icon": "EditOutlined",
98
+ "code": "setData({ selectedEmployee: data.row.data }); openDialog('editEmployee')"
99
+ },
100
+ {
101
+ "label": "Delete",
102
+ "color": "error",
103
+ "variant": "text",
104
+ "icon": "DeleteOutlined",
105
+ "confirmation": "Are you sure you want to delete this employee?",
106
+ "code": "deleteEmployee({ id: data.row.data.id })"
107
+ }
108
+ ]
109
+ }
110
+ }
111
+ ```
112
+
113
+ ### Multi-select with pagination
114
+ ```json
115
+ {
116
+ "type": "dataGrid",
117
+ "props": {
118
+ "key": "orderItems",
119
+ "dataKey": "data.orders",
120
+ "columns": "data.orderColumns",
121
+ "rowSelection": "multiple",
122
+ "pagination": true,
123
+ "pageSize": 50,
124
+ "height": "600px",
125
+ "showAddBtn": false,
126
+ "showDeleteCol": false
127
+ }
128
+ }
129
+ ```
@@ -0,0 +1,115 @@
1
+ # Component: dataTableViewer
2
+
3
+ A simple read-only HTML table for displaying data arrays. Fully styleable (header, cell, row, border). No editing, no sorting, no pagination.
4
+
5
+ > ⚠️ Use this for **simple display tables** where the data is already loaded in `data`. For server-fetched paginated data use `reportViewer`. For editable rows use `dataGrid`.
6
+
7
+ ---
8
+
9
+ ## Props — Main Tab
10
+
11
+ | Prop | Type | Options / Notes |
12
+ |------|------|-----------------|
13
+ | `dataKey` | expression | Key in page data pointing to the rows array, e.g. `"summaryRows"`. |
14
+ | `columns` | table-columns-editor | Column definitions: `[{ label: 'Column Header', field: 'rowProperty' }]`. `label` = header text, `field` = property key on each row object. |
15
+ | `testData` | expression | JSON array of sample rows used when `data[dataKey]` is empty (preview/edit mode), e.g. `[{ name: "Alice", amount: 100 }]`. |
16
+ | `tableWidth` | expression | Overall table width, e.g. `"100%"` or `"800px"`. |
17
+ | `showHeader` | boolean | Show/hide the header row. Default: `true`. |
18
+ | `headerBgColor` | expression | Header row background color, e.g. `"#1976d2"` or `"primary.main"`. |
19
+ | `headerTextColor` | expression | Header text color. |
20
+ | `headerFontSize` | expression | Header font size in px, e.g. `"14"`. |
21
+ | `headerAlign` | select | `left` · `center` · `right` — Header text alignment. |
22
+ | `headerPaddingH` | expression | Header horizontal padding in px. |
23
+ | `headerPaddingV` | expression | Header vertical padding in px. |
24
+ | `fontSize` | expression | Cell font size in px. |
25
+ | `cellTextColor` | expression | Cell text color. |
26
+ | `cellAlign` | select | `left` · `center` · `right` — Cell text alignment. |
27
+ | `cellPaddingH` | expression | Cell horizontal padding in px. |
28
+ | `cellPaddingV` | expression | Cell vertical padding in px. |
29
+ | `cellVerticalAlign` | select | `top` · `middle` · `bottom` — Vertical alignment of cell content. |
30
+ | `striped` | boolean | Alternating row background colors. |
31
+ | `stripedColor` | expression | Color used for alternating rows, e.g. `"#f5f5f5"`. |
32
+ | `rowHover` | boolean | Highlights rows on mouse hover. |
33
+ | `rowHoverColor` | expression | Hover background color. |
34
+ | `bordered` | boolean | Adds cell borders. |
35
+ | `borderColor` | expression | Border color, e.g. `"#e0e0e0"`. |
36
+ | `borderWidth` | expression | Border thickness in px, e.g. `"1"`. |
37
+
38
+ ---
39
+
40
+ ## Props — Style Tab
41
+
42
+ No dedicated style tab. Use parent layout-cell.
43
+
44
+ ---
45
+
46
+ ## Props — Actions Tab
47
+
48
+ No actions. Table is read-only.
49
+
50
+ ---
51
+
52
+ ## Use Cases
53
+
54
+ **When to use:**
55
+ - Display a summary table from data already available in `data`.
56
+ - Read-only reference tables (pricing tiers, feature comparison).
57
+ - Report sections inside a dashboard.
58
+ - Print-ready data tables.
59
+
60
+ **When NOT to use:**
61
+ - Editable rows → use `dataGrid`.
62
+ - Server-fetched paginated data → use `reportViewer`.
63
+ - Large datasets needing sorting/filtering → use `reportViewer`.
64
+
65
+ ---
66
+
67
+ ## Schema Examples
68
+
69
+ ### Basic data table
70
+ ```json
71
+ {
72
+ "type": "dataTableViewer",
73
+ "props": {
74
+ "dataKey": "summaryData",
75
+ "columns": [
76
+ { "label": "Name", "field": "name" },
77
+ { "label": "Department", "field": "department" },
78
+ { "label": "Salary", "field": "salary" }
79
+ ],
80
+ "showHeader": true,
81
+ "tableWidth": "100%",
82
+ "headerBgColor": "#1976d2",
83
+ "headerTextColor": "#ffffff",
84
+ "striped": true,
85
+ "stripedColor": "#f5f5f5",
86
+ "rowHover": true
87
+ }
88
+ }
89
+ ```
90
+
91
+ ### Styled bordered table
92
+ ```json
93
+ {
94
+ "type": "dataTableViewer",
95
+ "props": {
96
+ "dataKey": "pricingTiers",
97
+ "columns": [
98
+ { "label": "Plan", "field": "plan" },
99
+ { "label": "Price", "field": "price" },
100
+ { "label": "Users", "field": "maxUsers" },
101
+ { "label": "Storage", "field": "storage" }
102
+ ],
103
+ "tableWidth": "100%",
104
+ "headerBgColor": "#263238",
105
+ "headerTextColor": "#ffffff",
106
+ "headerAlign": "center",
107
+ "cellAlign": "center",
108
+ "bordered": true,
109
+ "borderColor": "#cfd8dc",
110
+ "borderWidth": "1",
111
+ "cellPaddingH": "12",
112
+ "cellPaddingV": "10"
113
+ }
114
+ }
115
+ ```