@omnitend/dashboard-for-laravel 0.10.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/charts/DXBarChart.vue.d.ts +22 -0
- package/dist/components/charts/DXDoughnutChart.vue.d.ts +24 -0
- package/dist/components/charts/DXLineChart.vue.d.ts +22 -0
- package/dist/components/charts/chartTheme.d.ts +32 -0
- package/dist/components/extended/DXDashboard.vue.d.ts +12 -2
- package/dist/components/extended/DXStatCard.vue.d.ts +56 -0
- package/dist/components/extended/DXTable.vue.d.ts +26 -1
- package/dist/dashboard-for-laravel.js +7457 -7034
- package/dist/dashboard-for-laravel.js.map +1 -1
- package/dist/dashboard-for-laravel.umd.cjs +7 -7
- package/dist/dashboard-for-laravel.umd.cjs.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/style.css +1 -1
- package/docs/public/api-reference.json +322 -7
- package/docs/public/docs-map.md +4 -2
- package/docs/public/llms.txt +3 -2
- package/package.json +12 -2
- package/resources/js/components/charts/DXBarChart.vue +79 -0
- package/resources/js/components/charts/DXDoughnutChart.vue +85 -0
- package/resources/js/components/charts/DXLineChart.vue +79 -0
- package/resources/js/components/charts/chartTheme.ts +229 -0
- package/resources/js/components/extended/DXDashboard.vue +18 -3
- package/resources/js/components/extended/DXStatCard.vue +211 -0
- package/resources/js/components/extended/DXTable.vue +137 -8
- package/resources/js/composables/useForm.ts +91 -7
- package/resources/js/index.ts +4 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generated": "2026-07-
|
|
2
|
+
"generated": "2026-07-04T17:33:54.873Z",
|
|
3
3
|
"package": {
|
|
4
4
|
"name": "@omnitend/dashboard-for-laravel",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.13.1"
|
|
6
6
|
},
|
|
7
7
|
"components": {
|
|
8
8
|
"base": [
|
|
@@ -1197,6 +1197,61 @@
|
|
|
1197
1197
|
}
|
|
1198
1198
|
],
|
|
1199
1199
|
"extended": [
|
|
1200
|
+
{
|
|
1201
|
+
"name": "DXBarChart",
|
|
1202
|
+
"category": "extended",
|
|
1203
|
+
"filePath": "resources/js/components/charts/DXBarChart.vue",
|
|
1204
|
+
"description": "A themed bar chart. Thin wrapper around vue-chartjs (chart.js) with the Bootstrap palette applied and dashboard-friendly defaults (no x gridlines, formatted value ticks, responsive, legend hidden for a single series). Pass `labels` + `datasets`; `options` deep-merges over the defaults. Requires the optional peer deps `chart.js` and `vue-chartjs`.",
|
|
1205
|
+
"props": [
|
|
1206
|
+
{
|
|
1207
|
+
"name": "labels",
|
|
1208
|
+
"type": "Array",
|
|
1209
|
+
"required": true,
|
|
1210
|
+
"description": "X-axis category labels."
|
|
1211
|
+
},
|
|
1212
|
+
{
|
|
1213
|
+
"name": "datasets",
|
|
1214
|
+
"type": "Array",
|
|
1215
|
+
"required": true,
|
|
1216
|
+
"description": "Chart.js datasets. Colours are themed when a dataset omits them."
|
|
1217
|
+
},
|
|
1218
|
+
{
|
|
1219
|
+
"name": "options",
|
|
1220
|
+
"type": "Record",
|
|
1221
|
+
"required": false,
|
|
1222
|
+
"description": "Chart.js options; deep-merged over the themed defaults."
|
|
1223
|
+
},
|
|
1224
|
+
{
|
|
1225
|
+
"name": "valueFormat",
|
|
1226
|
+
"type": "ChartValueFormat",
|
|
1227
|
+
"required": false,
|
|
1228
|
+
"description": "Format value-axis ticks and tooltips."
|
|
1229
|
+
},
|
|
1230
|
+
{
|
|
1231
|
+
"name": "currencySymbol",
|
|
1232
|
+
"type": "string",
|
|
1233
|
+
"required": false,
|
|
1234
|
+
"default": "\"£\"",
|
|
1235
|
+
"description": "Currency symbol for valueFormat: \"currency\" (default \"£\")."
|
|
1236
|
+
},
|
|
1237
|
+
{
|
|
1238
|
+
"name": "locale",
|
|
1239
|
+
"type": "string",
|
|
1240
|
+
"required": false,
|
|
1241
|
+
"description": "Locale for number formatting."
|
|
1242
|
+
},
|
|
1243
|
+
{
|
|
1244
|
+
"name": "showLegend",
|
|
1245
|
+
"type": "boolean",
|
|
1246
|
+
"required": false,
|
|
1247
|
+
"default": "undefined",
|
|
1248
|
+
"description": "Show the legend (default: only when there is more than one dataset)."
|
|
1249
|
+
}
|
|
1250
|
+
],
|
|
1251
|
+
"events": [],
|
|
1252
|
+
"slots": [],
|
|
1253
|
+
"methods": []
|
|
1254
|
+
},
|
|
1200
1255
|
{
|
|
1201
1256
|
"name": "DXBasicForm",
|
|
1202
1257
|
"category": "extended",
|
|
@@ -1250,6 +1305,18 @@
|
|
|
1250
1305
|
"default": "''",
|
|
1251
1306
|
"description": "Page title shown in navbar"
|
|
1252
1307
|
},
|
|
1308
|
+
{
|
|
1309
|
+
"name": "fluid",
|
|
1310
|
+
"type": "boolean",
|
|
1311
|
+
"required": false,
|
|
1312
|
+
"description": "Render the page content full-width and left-aligned instead of the default\ncentred, reading-width (`col-xl-10`) column. Use for data-heavy admin pages\n(wide tables)."
|
|
1313
|
+
},
|
|
1314
|
+
{
|
|
1315
|
+
"name": "contentClass",
|
|
1316
|
+
"type": "string",
|
|
1317
|
+
"required": false,
|
|
1318
|
+
"description": "Extra class(es) applied to the content container/column."
|
|
1319
|
+
},
|
|
1253
1320
|
{
|
|
1254
1321
|
"name": "user",
|
|
1255
1322
|
"type": "union",
|
|
@@ -1307,7 +1374,7 @@
|
|
|
1307
1374
|
},
|
|
1308
1375
|
{
|
|
1309
1376
|
"name": "default",
|
|
1310
|
-
"description": "Default slot for the main page content
|
|
1377
|
+
"description": "Default slot for the main page content. Full-width when `fluid`, otherwise a centred reading-width column.",
|
|
1311
1378
|
"bindings": []
|
|
1312
1379
|
}
|
|
1313
1380
|
],
|
|
@@ -1550,6 +1617,67 @@
|
|
|
1550
1617
|
],
|
|
1551
1618
|
"methods": []
|
|
1552
1619
|
},
|
|
1620
|
+
{
|
|
1621
|
+
"name": "DXDoughnutChart",
|
|
1622
|
+
"category": "extended",
|
|
1623
|
+
"filePath": "resources/js/components/charts/DXDoughnutChart.vue",
|
|
1624
|
+
"description": "A themed doughnut chart. Thin wrapper around vue-chartjs (chart.js) with one Bootstrap palette colour per slice and dashboard-friendly defaults. Pass `labels` + either `data` (a number array) or full `datasets`; `options` deep-merges over the defaults. Requires the optional peer deps `chart.js` and `vue-chartjs`.",
|
|
1625
|
+
"props": [
|
|
1626
|
+
{
|
|
1627
|
+
"name": "labels",
|
|
1628
|
+
"type": "Array",
|
|
1629
|
+
"required": true,
|
|
1630
|
+
"description": "Slice labels."
|
|
1631
|
+
},
|
|
1632
|
+
{
|
|
1633
|
+
"name": "data",
|
|
1634
|
+
"type": "Array",
|
|
1635
|
+
"required": false,
|
|
1636
|
+
"description": "Convenience: a single number array (one value per label)."
|
|
1637
|
+
},
|
|
1638
|
+
{
|
|
1639
|
+
"name": "datasets",
|
|
1640
|
+
"type": "Array",
|
|
1641
|
+
"required": false,
|
|
1642
|
+
"description": "Full Chart.js datasets (alternative to `data`)."
|
|
1643
|
+
},
|
|
1644
|
+
{
|
|
1645
|
+
"name": "options",
|
|
1646
|
+
"type": "Record",
|
|
1647
|
+
"required": false,
|
|
1648
|
+
"description": "Chart.js options; deep-merged over the themed defaults."
|
|
1649
|
+
},
|
|
1650
|
+
{
|
|
1651
|
+
"name": "valueFormat",
|
|
1652
|
+
"type": "ChartValueFormat",
|
|
1653
|
+
"required": false,
|
|
1654
|
+
"description": "Format tooltip values."
|
|
1655
|
+
},
|
|
1656
|
+
{
|
|
1657
|
+
"name": "currencySymbol",
|
|
1658
|
+
"type": "string",
|
|
1659
|
+
"required": false,
|
|
1660
|
+
"default": "\"£\"",
|
|
1661
|
+
"description": "Currency symbol for valueFormat: \"currency\" (default \"£\")."
|
|
1662
|
+
},
|
|
1663
|
+
{
|
|
1664
|
+
"name": "locale",
|
|
1665
|
+
"type": "string",
|
|
1666
|
+
"required": false,
|
|
1667
|
+
"description": "Locale for number formatting."
|
|
1668
|
+
},
|
|
1669
|
+
{
|
|
1670
|
+
"name": "showLegend",
|
|
1671
|
+
"type": "boolean",
|
|
1672
|
+
"required": false,
|
|
1673
|
+
"default": "undefined",
|
|
1674
|
+
"description": "Show the legend (default: true — slices need identifying)."
|
|
1675
|
+
}
|
|
1676
|
+
],
|
|
1677
|
+
"events": [],
|
|
1678
|
+
"slots": [],
|
|
1679
|
+
"methods": []
|
|
1680
|
+
},
|
|
1553
1681
|
{
|
|
1554
1682
|
"name": "DXField",
|
|
1555
1683
|
"category": "extended",
|
|
@@ -1912,6 +2040,61 @@
|
|
|
1912
2040
|
],
|
|
1913
2041
|
"methods": []
|
|
1914
2042
|
},
|
|
2043
|
+
{
|
|
2044
|
+
"name": "DXLineChart",
|
|
2045
|
+
"category": "extended",
|
|
2046
|
+
"filePath": "resources/js/components/charts/DXLineChart.vue",
|
|
2047
|
+
"description": "A themed line chart. Thin wrapper around vue-chartjs (chart.js) with the Bootstrap palette applied (themed stroke + translucent fill, smoothed line) and dashboard-friendly defaults. Pass `labels` + `datasets`; `options` deep-merges over the defaults. Requires the optional peer deps `chart.js` and `vue-chartjs`.",
|
|
2048
|
+
"props": [
|
|
2049
|
+
{
|
|
2050
|
+
"name": "labels",
|
|
2051
|
+
"type": "Array",
|
|
2052
|
+
"required": true,
|
|
2053
|
+
"description": "X-axis category labels."
|
|
2054
|
+
},
|
|
2055
|
+
{
|
|
2056
|
+
"name": "datasets",
|
|
2057
|
+
"type": "Array",
|
|
2058
|
+
"required": true,
|
|
2059
|
+
"description": "Chart.js datasets. Colours are themed when a dataset omits them."
|
|
2060
|
+
},
|
|
2061
|
+
{
|
|
2062
|
+
"name": "options",
|
|
2063
|
+
"type": "Record",
|
|
2064
|
+
"required": false,
|
|
2065
|
+
"description": "Chart.js options; deep-merged over the themed defaults."
|
|
2066
|
+
},
|
|
2067
|
+
{
|
|
2068
|
+
"name": "valueFormat",
|
|
2069
|
+
"type": "ChartValueFormat",
|
|
2070
|
+
"required": false,
|
|
2071
|
+
"description": "Format value-axis ticks and tooltips."
|
|
2072
|
+
},
|
|
2073
|
+
{
|
|
2074
|
+
"name": "currencySymbol",
|
|
2075
|
+
"type": "string",
|
|
2076
|
+
"required": false,
|
|
2077
|
+
"default": "\"£\"",
|
|
2078
|
+
"description": "Currency symbol for valueFormat: \"currency\" (default \"£\")."
|
|
2079
|
+
},
|
|
2080
|
+
{
|
|
2081
|
+
"name": "locale",
|
|
2082
|
+
"type": "string",
|
|
2083
|
+
"required": false,
|
|
2084
|
+
"description": "Locale for number formatting."
|
|
2085
|
+
},
|
|
2086
|
+
{
|
|
2087
|
+
"name": "showLegend",
|
|
2088
|
+
"type": "boolean",
|
|
2089
|
+
"required": false,
|
|
2090
|
+
"default": "undefined",
|
|
2091
|
+
"description": "Show the legend (default: only when there is more than one dataset)."
|
|
2092
|
+
}
|
|
2093
|
+
],
|
|
2094
|
+
"events": [],
|
|
2095
|
+
"slots": [],
|
|
2096
|
+
"methods": []
|
|
2097
|
+
},
|
|
1915
2098
|
{
|
|
1916
2099
|
"name": "DXRepeater",
|
|
1917
2100
|
"category": "extended",
|
|
@@ -1994,6 +2177,126 @@
|
|
|
1994
2177
|
],
|
|
1995
2178
|
"methods": []
|
|
1996
2179
|
},
|
|
2180
|
+
{
|
|
2181
|
+
"name": "DXStatCard",
|
|
2182
|
+
"category": "extended",
|
|
2183
|
+
"filePath": "resources/js/components/extended/DXStatCard.vue",
|
|
2184
|
+
"description": "A KPI / stat tile: a big formatted value with a title, optional subtitle, an optional up/down delta badge (auto-coloured + arrowed) versus a comparison, and an optional trend/sparkline slot. Themed with Bootstrap variables.",
|
|
2185
|
+
"props": [
|
|
2186
|
+
{
|
|
2187
|
+
"name": "title",
|
|
2188
|
+
"type": "string",
|
|
2189
|
+
"required": true,
|
|
2190
|
+
"description": "Metric label, e.g. \"Revenue\"."
|
|
2191
|
+
},
|
|
2192
|
+
{
|
|
2193
|
+
"name": "subtitle",
|
|
2194
|
+
"type": "string",
|
|
2195
|
+
"required": false,
|
|
2196
|
+
"description": "Optional secondary line under the title, e.g. \"This week\"."
|
|
2197
|
+
},
|
|
2198
|
+
{
|
|
2199
|
+
"name": "value",
|
|
2200
|
+
"type": "union",
|
|
2201
|
+
"required": true,
|
|
2202
|
+
"description": "The metric value. Numbers are formatted per `format`; strings pass through."
|
|
2203
|
+
},
|
|
2204
|
+
{
|
|
2205
|
+
"name": "format",
|
|
2206
|
+
"type": "StatFormat",
|
|
2207
|
+
"required": false,
|
|
2208
|
+
"default": "\"number\"",
|
|
2209
|
+
"description": "How to format a numeric `value` (default: plain number with grouping)."
|
|
2210
|
+
},
|
|
2211
|
+
{
|
|
2212
|
+
"name": "currencySymbol",
|
|
2213
|
+
"type": "string",
|
|
2214
|
+
"required": false,
|
|
2215
|
+
"default": "\"£\"",
|
|
2216
|
+
"description": "Currency symbol for `format: \"currency\"` (default \"£\")."
|
|
2217
|
+
},
|
|
2218
|
+
{
|
|
2219
|
+
"name": "precision",
|
|
2220
|
+
"type": "number",
|
|
2221
|
+
"required": false,
|
|
2222
|
+
"description": "Decimal places (default: 2 for currency, 0 otherwise)."
|
|
2223
|
+
},
|
|
2224
|
+
{
|
|
2225
|
+
"name": "locale",
|
|
2226
|
+
"type": "string",
|
|
2227
|
+
"required": false,
|
|
2228
|
+
"description": "Locale for number grouping/formatting (default: the runtime's)."
|
|
2229
|
+
},
|
|
2230
|
+
{
|
|
2231
|
+
"name": "delta",
|
|
2232
|
+
"type": "number",
|
|
2233
|
+
"required": false,
|
|
2234
|
+
"description": "Change versus a comparison period. Its sign drives the arrow/colour."
|
|
2235
|
+
},
|
|
2236
|
+
{
|
|
2237
|
+
"name": "deltaFormat",
|
|
2238
|
+
"type": "StatFormat",
|
|
2239
|
+
"required": false,
|
|
2240
|
+
"default": "\"percent\"",
|
|
2241
|
+
"description": "How to format the delta (default \"percent\")."
|
|
2242
|
+
},
|
|
2243
|
+
{
|
|
2244
|
+
"name": "deltaDirection",
|
|
2245
|
+
"type": "DeltaDirection",
|
|
2246
|
+
"required": false,
|
|
2247
|
+
"description": "Force the delta direction instead of deriving it from `delta`'s sign."
|
|
2248
|
+
},
|
|
2249
|
+
{
|
|
2250
|
+
"name": "deltaLabel",
|
|
2251
|
+
"type": "string",
|
|
2252
|
+
"required": false,
|
|
2253
|
+
"description": "Caption beside the delta, e.g. \"vs last week\"."
|
|
2254
|
+
},
|
|
2255
|
+
{
|
|
2256
|
+
"name": "invertDelta",
|
|
2257
|
+
"type": "boolean",
|
|
2258
|
+
"required": false,
|
|
2259
|
+
"default": "false",
|
|
2260
|
+
"description": "Invert the delta colour: by default an up delta is positive (success/green)\nand a down delta negative (danger/red). Set for metrics where down is good\n(costs, bounce rate, …)."
|
|
2261
|
+
}
|
|
2262
|
+
],
|
|
2263
|
+
"events": [],
|
|
2264
|
+
"slots": [
|
|
2265
|
+
{
|
|
2266
|
+
"name": "icon",
|
|
2267
|
+
"description": "Optional icon/visual in the top-right of the card.",
|
|
2268
|
+
"bindings": []
|
|
2269
|
+
},
|
|
2270
|
+
{
|
|
2271
|
+
"name": "value",
|
|
2272
|
+
"description": "Override the rendered value.",
|
|
2273
|
+
"bindings": [
|
|
2274
|
+
{
|
|
2275
|
+
"title": "binding",
|
|
2276
|
+
"type": {
|
|
2277
|
+
"name": "string"
|
|
2278
|
+
},
|
|
2279
|
+
"name": "formatted",
|
|
2280
|
+
"description": "The value formatted per `format`."
|
|
2281
|
+
},
|
|
2282
|
+
{
|
|
2283
|
+
"title": "binding",
|
|
2284
|
+
"type": {
|
|
2285
|
+
"name": "string | number"
|
|
2286
|
+
},
|
|
2287
|
+
"name": "value",
|
|
2288
|
+
"description": "The raw value prop."
|
|
2289
|
+
}
|
|
2290
|
+
]
|
|
2291
|
+
},
|
|
2292
|
+
{
|
|
2293
|
+
"name": "trend",
|
|
2294
|
+
"description": "Trend visual (e.g. a sparkline) shown in the card footer.",
|
|
2295
|
+
"bindings": []
|
|
2296
|
+
}
|
|
2297
|
+
],
|
|
2298
|
+
"methods": []
|
|
2299
|
+
},
|
|
1997
2300
|
{
|
|
1998
2301
|
"name": "DXTable",
|
|
1999
2302
|
"category": "extended",
|
|
@@ -2134,8 +2437,8 @@
|
|
|
2134
2437
|
"name": "striped",
|
|
2135
2438
|
"type": "boolean",
|
|
2136
2439
|
"required": false,
|
|
2137
|
-
"default": "
|
|
2138
|
-
"description": "Striped rows"
|
|
2440
|
+
"default": "false",
|
|
2441
|
+
"description": "Striped (banded) rows. Off by default — banding adds little on short\n tables and can read as noise; opt in with `:striped=\"true\"`."
|
|
2139
2442
|
},
|
|
2140
2443
|
{
|
|
2141
2444
|
"name": "hover",
|
|
@@ -2203,12 +2506,24 @@
|
|
|
2203
2506
|
"required": false,
|
|
2204
2507
|
"description": "API endpoint pattern for updates (e.g., \"/api/products/:id\")"
|
|
2205
2508
|
},
|
|
2509
|
+
{
|
|
2510
|
+
"name": "showUrl",
|
|
2511
|
+
"type": "string",
|
|
2512
|
+
"required": false,
|
|
2513
|
+
"description": "API endpoint pattern to fetch the FULL record for the edit modal\n(e.g., \"/api/products/:id\"). When set, opening a row seeds the form from\nthis fetch (shown with a loading state) instead of the thin list row —\nuse when the list payload omits fields the edit form needs (notes, nested\nrelations, repeater rows, …). The response is unwrapped from `data.data`\n(Laravel API Resource) or used as-is."
|
|
2514
|
+
},
|
|
2206
2515
|
{
|
|
2207
2516
|
"name": "deleteUrl",
|
|
2208
2517
|
"type": "string",
|
|
2209
2518
|
"required": false,
|
|
2210
2519
|
"description": "API endpoint pattern for deletions (e.g., \"/api/products/:id\")"
|
|
2211
2520
|
},
|
|
2521
|
+
{
|
|
2522
|
+
"name": "deleteGuard",
|
|
2523
|
+
"type": "TSFunctionType",
|
|
2524
|
+
"required": false,
|
|
2525
|
+
"description": "Guard run when Delete is clicked, before the confirm dialog and request.\nReturn a message for a non-deletable item to show it immediately (as a\ntoast) and skip both the confirm and the delete request; return\n`null`/`undefined` to proceed with the normal confirm + delete. Lets you\nshort-circuit a doomed delete (e.g. a record with dependents that the\nserver would reject) with an immediate, specific reason."
|
|
2526
|
+
},
|
|
2212
2527
|
{
|
|
2213
2528
|
"name": "createUrl",
|
|
2214
2529
|
"type": "string",
|
|
@@ -2483,8 +2798,8 @@
|
|
|
2483
2798
|
]
|
|
2484
2799
|
},
|
|
2485
2800
|
"stats": {
|
|
2486
|
-
"totalComponents":
|
|
2801
|
+
"totalComponents": 70,
|
|
2487
2802
|
"baseComponents": 57,
|
|
2488
|
-
"extendedComponents":
|
|
2803
|
+
"extendedComponents": 13
|
|
2489
2804
|
}
|
|
2490
2805
|
}
|
package/docs/public/docs-map.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Documentation Map
|
|
2
2
|
|
|
3
3
|
> Auto-generated hierarchical overview of all documentation
|
|
4
|
-
> Last updated: 2026-07-
|
|
4
|
+
> Last updated: 2026-07-04T17:33:54.935Z
|
|
5
5
|
|
|
6
6
|
This file provides a complete map of all available documentation for AI agents and developers.
|
|
7
7
|
|
|
@@ -72,12 +72,14 @@ This file provides a complete map of all available documentation for AI agents a
|
|
|
72
72
|
|
|
73
73
|
### Extended
|
|
74
74
|
|
|
75
|
+
- [Charts](/components/extended/DXChart): Thin, themed wrappers around [Chart.js](https://www.chartjs.org/) via
|
|
75
76
|
- [DXDashboard](/components/extended/DXDashboard): Complete dashboard layout component that combines sidebar navigation, top navbar, and content area.
|
|
76
77
|
- [DXDashboardNavbar](/components/extended/DXDashboardNavbar): A responsive top navigation bar component for Laravel dashboards with user menu, search functionalit
|
|
77
78
|
- [DXDashboardSidebar](/components/extended/DXDashboardSidebar): A collapsible sidebar navigation component for Laravel dashboards with support for navigation groups
|
|
78
79
|
- [DXField](/components/extended/DXField): The single-field renderer that powers `DXForm` and
|
|
79
80
|
- [DXForm](/components/extended/DXForm): The canonical form renderer. Drive it with field definitions; add `tabs` when
|
|
80
81
|
- [DXRepeater](/components/extended/DXRepeater): A repeatable sub-form (field array) primitive for nested, dynamic collections —
|
|
82
|
+
- [DXStatCard](/components/extended/DXStatCard): A KPI / stat tile: a big formatted value with a title, optional subtitle, an
|
|
81
83
|
- [DXTable](/components/extended/DXTable): A comprehensive data table component with built-in pagination, sorting, filtering, and CRUD operatio
|
|
82
84
|
|
|
83
85
|
### Examples
|
|
@@ -97,4 +99,4 @@ This file provides a complete map of all available documentation for AI agents a
|
|
|
97
99
|
|
|
98
100
|
---
|
|
99
101
|
|
|
100
|
-
**Total Pages**:
|
|
102
|
+
**Total Pages**: 75
|
package/docs/public/llms.txt
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Vue 3 dashboard components for Laravel with Bootstrap Vue Next
|
|
4
4
|
>
|
|
5
|
-
> A dual-package library (NPM + Composer) providing
|
|
5
|
+
> A dual-package library (NPM + Composer) providing 67 Vue 3 components for building Laravel dashboards with Bootstrap Vue Next.
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -81,7 +81,7 @@ Lightweight type-safe wrappers around Bootstrap Vue Next components providing AP
|
|
|
81
81
|
- [DToaster](/components/base/dtoaster): Bootstrap Vue Next Toaster wrapper
|
|
82
82
|
- [DTooltip](/components/base/dtooltip): Bootstrap Vue Next Tooltip wrapper
|
|
83
83
|
|
|
84
|
-
## Extended Components (
|
|
84
|
+
## Extended Components (10 components)
|
|
85
85
|
|
|
86
86
|
Custom dashboard components with advanced functionality beyond Bootstrap Vue Next.
|
|
87
87
|
|
|
@@ -93,6 +93,7 @@ Custom dashboard components with advanced functionality beyond Bootstrap Vue Nex
|
|
|
93
93
|
- [DXFieldLabel](/components/extended/dxfieldlabel): Extended dashboard component
|
|
94
94
|
- [DXForm](/components/extended/dxform): Form renderer driven by field definitions, with optional tabs, conditional fields, per-field slots, async options, nested repeaters, and auto error-tab switching
|
|
95
95
|
- [DXRepeater](/components/extended/dxrepeater): Repeatable nested sub-form (field array) primitive
|
|
96
|
+
- [DXStatCard](/components/extended/dxstatcard): Extended dashboard component
|
|
96
97
|
- [DXTable](/components/extended/dxtable): Data table with pagination, filtering, and sorting
|
|
97
98
|
|
|
98
99
|
## Composables
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omnitend/dashboard-for-laravel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.1",
|
|
4
4
|
"description": "Vue 3 dashboard components for Laravel with Bootstrap Vue Next",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/dashboard-for-laravel.umd.cjs",
|
|
@@ -47,7 +47,9 @@
|
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"@inertiajs/vue3": "^2.0.0",
|
|
49
49
|
"axios": "^1.15.3",
|
|
50
|
-
"
|
|
50
|
+
"chart.js": "^4.4.0",
|
|
51
|
+
"vue": "^3.5.13",
|
|
52
|
+
"vue-chartjs": "^5.3.0"
|
|
51
53
|
},
|
|
52
54
|
"peerDependenciesMeta": {
|
|
53
55
|
"axios": {
|
|
@@ -55,6 +57,12 @@
|
|
|
55
57
|
},
|
|
56
58
|
"bootstrap-vue-next": {
|
|
57
59
|
"optional": true
|
|
60
|
+
},
|
|
61
|
+
"chart.js": {
|
|
62
|
+
"optional": true
|
|
63
|
+
},
|
|
64
|
+
"vue-chartjs": {
|
|
65
|
+
"optional": true
|
|
58
66
|
}
|
|
59
67
|
},
|
|
60
68
|
"dependencies": {
|
|
@@ -80,6 +88,7 @@
|
|
|
80
88
|
"@vue/test-utils": "^2.4.6",
|
|
81
89
|
"astro": "^5.15.1",
|
|
82
90
|
"bootstrap": "^5.3.8",
|
|
91
|
+
"chart.js": "^4.5.1",
|
|
83
92
|
"happy-dom": "^20.0.8",
|
|
84
93
|
"pagefind": "^1.4.0",
|
|
85
94
|
"playwright": "^1.56.1",
|
|
@@ -90,6 +99,7 @@
|
|
|
90
99
|
"vite": "^6.4.1",
|
|
91
100
|
"vitest": "^4.1.8",
|
|
92
101
|
"vitest-browser-vue": "^2.0.0",
|
|
102
|
+
"vue-chartjs": "^5.3.3",
|
|
93
103
|
"vue-tsc": "^2.2.12"
|
|
94
104
|
},
|
|
95
105
|
"keywords": [
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
A themed bar chart. Thin wrapper around vue-chartjs (chart.js) with the
|
|
4
|
+
Bootstrap palette applied and dashboard-friendly defaults (no x gridlines,
|
|
5
|
+
formatted value ticks, responsive, legend hidden for a single series). Pass
|
|
6
|
+
`labels` + `datasets`; `options` deep-merges over the defaults.
|
|
7
|
+
|
|
8
|
+
Requires the optional peer deps `chart.js` and `vue-chartjs`.
|
|
9
|
+
-->
|
|
10
|
+
<template>
|
|
11
|
+
<div class="dx-chart">
|
|
12
|
+
<Bar :data="chartData" :options="mergedOptions" />
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<script setup lang="ts">
|
|
17
|
+
import { computed } from "vue";
|
|
18
|
+
import { Bar } from "vue-chartjs";
|
|
19
|
+
import {
|
|
20
|
+
registerCharts,
|
|
21
|
+
baseOptions,
|
|
22
|
+
applyPalette,
|
|
23
|
+
mergeOptions,
|
|
24
|
+
type ChartValueFormat,
|
|
25
|
+
} from "./chartTheme";
|
|
26
|
+
|
|
27
|
+
registerCharts();
|
|
28
|
+
|
|
29
|
+
interface Props {
|
|
30
|
+
/** X-axis category labels. */
|
|
31
|
+
labels: string[];
|
|
32
|
+
/** Chart.js datasets. Colours are themed when a dataset omits them. */
|
|
33
|
+
datasets: any[];
|
|
34
|
+
/** Chart.js options; deep-merged over the themed defaults. */
|
|
35
|
+
options?: Record<string, any>;
|
|
36
|
+
/** Format value-axis ticks and tooltips. */
|
|
37
|
+
valueFormat?: ChartValueFormat;
|
|
38
|
+
/** Currency symbol for valueFormat: "currency" (default "£"). */
|
|
39
|
+
currencySymbol?: string;
|
|
40
|
+
/** Locale for number formatting. */
|
|
41
|
+
locale?: string;
|
|
42
|
+
/** Show the legend (default: only when there is more than one dataset). */
|
|
43
|
+
showLegend?: boolean;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// `showLegend` defaults to `undefined` (not Vue's Boolean-cast `false`) so the
|
|
47
|
+
// `?? datasets.length > 1` default can actually fire when it isn't passed.
|
|
48
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
49
|
+
currencySymbol: "£",
|
|
50
|
+
showLegend: undefined,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const chartData = computed(() => ({
|
|
54
|
+
labels: props.labels,
|
|
55
|
+
datasets: applyPalette(props.datasets, "bar", props.labels.length),
|
|
56
|
+
}));
|
|
57
|
+
|
|
58
|
+
const mergedOptions = computed(() =>
|
|
59
|
+
mergeOptions(
|
|
60
|
+
baseOptions({
|
|
61
|
+
valueFormat: props.valueFormat,
|
|
62
|
+
currencySymbol: props.currencySymbol,
|
|
63
|
+
locale: props.locale,
|
|
64
|
+
showLegend: props.showLegend ?? props.datasets.length > 1,
|
|
65
|
+
hasValueAxis: true,
|
|
66
|
+
}),
|
|
67
|
+
props.options ?? {},
|
|
68
|
+
),
|
|
69
|
+
);
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
<style scoped>
|
|
73
|
+
.dx-chart {
|
|
74
|
+
position: relative;
|
|
75
|
+
width: 100%;
|
|
76
|
+
height: 100%;
|
|
77
|
+
min-height: 240px;
|
|
78
|
+
}
|
|
79
|
+
</style>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
A themed doughnut chart. Thin wrapper around vue-chartjs (chart.js) with one
|
|
4
|
+
Bootstrap palette colour per slice and dashboard-friendly defaults. Pass
|
|
5
|
+
`labels` + either `data` (a number array) or full `datasets`; `options`
|
|
6
|
+
deep-merges over the defaults.
|
|
7
|
+
|
|
8
|
+
Requires the optional peer deps `chart.js` and `vue-chartjs`.
|
|
9
|
+
-->
|
|
10
|
+
<template>
|
|
11
|
+
<div class="dx-chart">
|
|
12
|
+
<Doughnut :data="chartData" :options="mergedOptions" />
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<script setup lang="ts">
|
|
17
|
+
import { computed } from "vue";
|
|
18
|
+
import { Doughnut } from "vue-chartjs";
|
|
19
|
+
import {
|
|
20
|
+
registerCharts,
|
|
21
|
+
baseOptions,
|
|
22
|
+
applyPalette,
|
|
23
|
+
mergeOptions,
|
|
24
|
+
type ChartValueFormat,
|
|
25
|
+
} from "./chartTheme";
|
|
26
|
+
|
|
27
|
+
registerCharts();
|
|
28
|
+
|
|
29
|
+
interface Props {
|
|
30
|
+
/** Slice labels. */
|
|
31
|
+
labels: string[];
|
|
32
|
+
/** Convenience: a single number array (one value per label). */
|
|
33
|
+
data?: number[];
|
|
34
|
+
/** Full Chart.js datasets (alternative to `data`). */
|
|
35
|
+
datasets?: any[];
|
|
36
|
+
/** Chart.js options; deep-merged over the themed defaults. */
|
|
37
|
+
options?: Record<string, any>;
|
|
38
|
+
/** Format tooltip values. */
|
|
39
|
+
valueFormat?: ChartValueFormat;
|
|
40
|
+
/** Currency symbol for valueFormat: "currency" (default "£"). */
|
|
41
|
+
currencySymbol?: string;
|
|
42
|
+
/** Locale for number formatting. */
|
|
43
|
+
locale?: string;
|
|
44
|
+
/** Show the legend (default: true — slices need identifying). */
|
|
45
|
+
showLegend?: boolean;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// `showLegend` defaults to `undefined` (not Vue's Boolean-cast `false`) so the
|
|
49
|
+
// `?? true` default can actually fire when it isn't passed.
|
|
50
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
51
|
+
currencySymbol: "£",
|
|
52
|
+
showLegend: undefined,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const resolvedDatasets = computed(() =>
|
|
56
|
+
props.datasets ?? [{ data: props.data ?? [] }],
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
const chartData = computed(() => ({
|
|
60
|
+
labels: props.labels,
|
|
61
|
+
datasets: applyPalette(resolvedDatasets.value, "doughnut", props.labels.length),
|
|
62
|
+
}));
|
|
63
|
+
|
|
64
|
+
const mergedOptions = computed(() =>
|
|
65
|
+
mergeOptions(
|
|
66
|
+
baseOptions({
|
|
67
|
+
valueFormat: props.valueFormat,
|
|
68
|
+
currencySymbol: props.currencySymbol,
|
|
69
|
+
locale: props.locale,
|
|
70
|
+
showLegend: props.showLegend ?? true,
|
|
71
|
+
hasValueAxis: false,
|
|
72
|
+
}),
|
|
73
|
+
props.options ?? {},
|
|
74
|
+
),
|
|
75
|
+
);
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<style scoped>
|
|
79
|
+
.dx-chart {
|
|
80
|
+
position: relative;
|
|
81
|
+
width: 100%;
|
|
82
|
+
height: 100%;
|
|
83
|
+
min-height: 240px;
|
|
84
|
+
}
|
|
85
|
+
</style>
|