@omnitend/dashboard-for-laravel 0.11.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/DXStatCard.vue.d.ts +56 -0
- package/dist/components/extended/DXTable.vue.d.ts +11 -1
- package/dist/dashboard-for-laravel.js +7562 -7172
- 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 +303 -6
- 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/DXStatCard.vue +211 -0
- package/resources/js/components/extended/DXTable.vue +108 -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",
|
|
@@ -1562,6 +1617,67 @@
|
|
|
1562
1617
|
],
|
|
1563
1618
|
"methods": []
|
|
1564
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
|
+
},
|
|
1565
1681
|
{
|
|
1566
1682
|
"name": "DXField",
|
|
1567
1683
|
"category": "extended",
|
|
@@ -1924,6 +2040,61 @@
|
|
|
1924
2040
|
],
|
|
1925
2041
|
"methods": []
|
|
1926
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
|
+
},
|
|
1927
2098
|
{
|
|
1928
2099
|
"name": "DXRepeater",
|
|
1929
2100
|
"category": "extended",
|
|
@@ -2006,6 +2177,126 @@
|
|
|
2006
2177
|
],
|
|
2007
2178
|
"methods": []
|
|
2008
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
|
+
},
|
|
2009
2300
|
{
|
|
2010
2301
|
"name": "DXTable",
|
|
2011
2302
|
"category": "extended",
|
|
@@ -2146,8 +2437,8 @@
|
|
|
2146
2437
|
"name": "striped",
|
|
2147
2438
|
"type": "boolean",
|
|
2148
2439
|
"required": false,
|
|
2149
|
-
"default": "
|
|
2150
|
-
"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\"`."
|
|
2151
2442
|
},
|
|
2152
2443
|
{
|
|
2153
2444
|
"name": "hover",
|
|
@@ -2215,6 +2506,12 @@
|
|
|
2215
2506
|
"required": false,
|
|
2216
2507
|
"description": "API endpoint pattern for updates (e.g., \"/api/products/:id\")"
|
|
2217
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
|
+
},
|
|
2218
2515
|
{
|
|
2219
2516
|
"name": "deleteUrl",
|
|
2220
2517
|
"type": "string",
|
|
@@ -2501,8 +2798,8 @@
|
|
|
2501
2798
|
]
|
|
2502
2799
|
},
|
|
2503
2800
|
"stats": {
|
|
2504
|
-
"totalComponents":
|
|
2801
|
+
"totalComponents": 70,
|
|
2505
2802
|
"baseComponents": 57,
|
|
2506
|
-
"extendedComponents":
|
|
2803
|
+
"extendedComponents": 13
|
|
2507
2804
|
}
|
|
2508
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>
|