@omnitend/dashboard-for-laravel 0.19.2 → 0.21.0
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/extended/DXDashboard.vue.d.ts +8 -2
- package/dist/components/extended/DXFieldLabel.vue.d.ts +11 -1
- package/dist/components/extended/DXFormField.vue.d.ts +41 -0
- package/dist/components/extended/DXSwitch.vue.d.ts +30 -0
- package/dist/components/extended/dxFieldContext.d.ts +11 -0
- package/dist/dashboard-for-laravel.js +10930 -10862
- package/dist/dashboard-for-laravel.js.map +1 -1
- package/dist/dashboard-for-laravel.umd.cjs +8 -8
- package/dist/dashboard-for-laravel.umd.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/style.css +1 -1
- package/dist/types/index.d.ts +4 -1
- package/dist/utils/api.d.ts +1 -1
- package/docs/public/api-reference.json +211 -93
- package/docs/public/docs-map.md +3 -2
- package/docs/public/llms.txt +3 -2
- package/package.json +6 -5
- package/resources/css/theme.scss +5 -1
- package/resources/js/components/extended/DXDashboard.vue +13 -3
- package/resources/js/components/extended/DXField.vue +66 -77
- package/resources/js/components/extended/DXFieldLabel.vue +18 -3
- package/resources/js/components/extended/DXForm.vue +31 -109
- package/resources/js/components/extended/DXFormField.vue +98 -0
- package/resources/js/components/extended/DXSwitch.vue +153 -0
- package/resources/js/components/extended/dxFieldContext.ts +14 -0
- package/resources/js/composables/useForm.ts +10 -3
- package/resources/js/index.ts +1 -0
- package/resources/js/types/index.ts +4 -1
- package/resources/js/utils/api.ts +19 -2
package/dist/types/index.d.ts
CHANGED
|
@@ -123,7 +123,10 @@ export interface FieldDefinition {
|
|
|
123
123
|
* Longer help text revealed in a popover from a small info affordance
|
|
124
124
|
* on the field's label (on hover/focus). Complements `hint` (which is
|
|
125
125
|
* always-visible muted text below the control). May be a function of
|
|
126
|
-
* the model.
|
|
126
|
+
* the model. Plain text only — for a rich popover body (lists, bold,
|
|
127
|
+
* paragraphs) use the `#info-popover(<key>)` slot. Note the separate
|
|
128
|
+
* `#info(<key>)` slot renders an always-visible block below the control,
|
|
129
|
+
* not popover content.
|
|
127
130
|
*/
|
|
128
131
|
info?: MaybeFn<string>;
|
|
129
132
|
/**
|
package/dist/utils/api.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ declare class ApiClient {
|
|
|
24
24
|
post<T = unknown>(url: string, data?: any, options?: Omit<RequestOptions, "method" | "body">): Promise<ApiResponse<T>>;
|
|
25
25
|
put<T = unknown>(url: string, data?: any, options?: Omit<RequestOptions, "method" | "body">): Promise<ApiResponse<T>>;
|
|
26
26
|
patch<T = unknown>(url: string, data?: any, options?: Omit<RequestOptions, "method" | "body">): Promise<ApiResponse<T>>;
|
|
27
|
-
delete<T = unknown>(url: string, options?: Omit<RequestOptions, "method">): Promise<ApiResponse<T>>;
|
|
27
|
+
delete<T = unknown>(url: string, data?: any, options?: Omit<RequestOptions, "method" | "body">): Promise<ApiResponse<T>>;
|
|
28
28
|
}
|
|
29
29
|
export declare const api: ApiClient;
|
|
30
30
|
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generated": "2026-07-
|
|
2
|
+
"generated": "2026-07-10T09:19:45.286Z",
|
|
3
3
|
"package": {
|
|
4
4
|
"name": "@omnitend/dashboard-for-laravel",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.19.2"
|
|
6
6
|
},
|
|
7
7
|
"components": {
|
|
8
8
|
"base": [
|
|
@@ -205,19 +205,19 @@
|
|
|
205
205
|
"type": "boolean",
|
|
206
206
|
"required": false,
|
|
207
207
|
"default": "false",
|
|
208
|
-
"description": "Show an in-flight state: the button is disabled immediately and, after\n`spinnerDelay`, a trailing spinner appears (and the label swaps to\n`loadingText` if given)."
|
|
208
|
+
"description": "Show an in-flight state: the button is disabled immediately and, after\n`spinnerDelay`, a trailing spinner appears (and the label swaps to\n`loadingText` if given).\n\nDiverges from bvn: `BButton` has a native `loading`/`loadingText` that\nshows its spinner immediately. We intercept both and render our own\nanti-flash spinner instead, so bvn's native loading never fires. See\nDIVERGENCES.md."
|
|
209
209
|
},
|
|
210
210
|
{
|
|
211
211
|
"name": "loadingText",
|
|
212
212
|
"type": "string",
|
|
213
213
|
"required": false,
|
|
214
|
-
"description": "Label shown in place of the default slot while the spinner is visible.\nOmit to keep the original label alongside the spinner."
|
|
214
|
+
"description": "Label shown in place of the default slot while the spinner is visible.\nOmit to keep the original label alongside the spinner. (See `loading` re:\nthe bvn divergence.)"
|
|
215
215
|
},
|
|
216
216
|
{
|
|
217
217
|
"name": "icon",
|
|
218
218
|
"type": "string",
|
|
219
219
|
"required": false,
|
|
220
|
-
"description": "Leading Bootstrap Icons glyph name, rendered as `<i class=\"bi bi-{icon}\">`.\ne.g. `icon=\"save\"`. Hidden while the loading spinner is visible."
|
|
220
|
+
"description": "Leading Bootstrap Icons glyph name, rendered as `<i class=\"bi bi-{icon}\">`.\ne.g. `icon=\"save\"`. Hidden while the loading spinner is visible.\n\nDiverges from bvn: `BButton`'s native `icon` is a `boolean` (icon-button\nstyling mode). We redefine it as a glyph-name `string`, so bvn's boolean\nicon mode is unreachable through `DButton`. See DIVERGENCES.md."
|
|
221
221
|
},
|
|
222
222
|
{
|
|
223
223
|
"name": "block",
|
|
@@ -600,9 +600,42 @@
|
|
|
600
600
|
"name": "DFormSelect",
|
|
601
601
|
"category": "base",
|
|
602
602
|
"filePath": "resources/js/components/base/DFormSelect.vue",
|
|
603
|
-
"description": "",
|
|
604
|
-
"props": [
|
|
605
|
-
|
|
603
|
+
"description": "Type-safe wrapper around Bootstrap Vue Next BFormSelect. Adds one behaviour BVN lacks: a `select` option whose value is `null` round-trips correctly. BVN renders each option's value as a plain HTML `value` attribute, so when that value is `null` Vue omits the attribute and the browser falls back to using the option's *text* as its DOM value — a model bound to `null` then matches no option and the select renders blank. We map a `null` option value (and a `null` model) to a private string sentinel so BVN renders a real value attribute, while keeping the consumer's model and emitted value as `null`. Legacy Bootstrap-Vue (BS4) handled this; BVN does not. (Radios likely need the same treatment — see #81.)",
|
|
604
|
+
"props": [
|
|
605
|
+
{
|
|
606
|
+
"name": "modelValue",
|
|
607
|
+
"type": "union",
|
|
608
|
+
"required": false,
|
|
609
|
+
"description": ""
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
"name": "options",
|
|
613
|
+
"type": "TSTypeOperator",
|
|
614
|
+
"required": false,
|
|
615
|
+
"description": ""
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
"name": "valueField",
|
|
619
|
+
"type": "string",
|
|
620
|
+
"required": false,
|
|
621
|
+
"default": "\"value\"",
|
|
622
|
+
"description": "Key on object options that holds the value (BVN default: \"value\")."
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
"name": "optionsField",
|
|
626
|
+
"type": "string",
|
|
627
|
+
"required": false,
|
|
628
|
+
"default": "\"options\"",
|
|
629
|
+
"description": "Key on object options that holds nested options / groups (BVN default: \"options\")."
|
|
630
|
+
}
|
|
631
|
+
],
|
|
632
|
+
"events": [
|
|
633
|
+
{
|
|
634
|
+
"name": "update:modelValue",
|
|
635
|
+
"description": "",
|
|
636
|
+
"properties": []
|
|
637
|
+
}
|
|
638
|
+
],
|
|
606
639
|
"slots": [
|
|
607
640
|
{
|
|
608
641
|
"name": "name",
|
|
@@ -1782,7 +1815,7 @@
|
|
|
1782
1815
|
"name": "hideLabel",
|
|
1783
1816
|
"type": "boolean",
|
|
1784
1817
|
"required": false,
|
|
1785
|
-
"description": "Skip rendering the field's own label
|
|
1818
|
+
"description": "Skip rendering the field's own (outer) label. Applies to the standard\nlabelled-field branch and to the checkbox/switch/repeater branches. In\nhorizontal layout no label column is reserved either, so the control\nspans the full width (a switch/checkbox self-label then lines up with\nsibling row labels). Used by DXRepeater's `table` layout (a column\nheader already names the field) and by consumers hiding the redundant\nrow label on a switch/checkbox, which render their own label inside the\ncontrol (#78)."
|
|
1786
1819
|
}
|
|
1787
1820
|
],
|
|
1788
1821
|
"events": [],
|
|
@@ -1826,8 +1859,8 @@
|
|
|
1826
1859
|
]
|
|
1827
1860
|
},
|
|
1828
1861
|
{
|
|
1829
|
-
"name": "
|
|
1830
|
-
"description": "
|
|
1862
|
+
"name": "hint",
|
|
1863
|
+
"description": "Overrides the field's hint text shown below the control.",
|
|
1831
1864
|
"bindings": [
|
|
1832
1865
|
{
|
|
1833
1866
|
"title": "binding",
|
|
@@ -1844,28 +1877,12 @@
|
|
|
1844
1877
|
},
|
|
1845
1878
|
"name": "model",
|
|
1846
1879
|
"description": "The model passed to field predicates (defaults to the live form data)."
|
|
1847
|
-
},
|
|
1848
|
-
{
|
|
1849
|
-
"title": "binding",
|
|
1850
|
-
"type": {
|
|
1851
|
-
"name": "any"
|
|
1852
|
-
},
|
|
1853
|
-
"name": "value",
|
|
1854
|
-
"description": "The current field value."
|
|
1855
|
-
},
|
|
1856
|
-
{
|
|
1857
|
-
"title": "binding",
|
|
1858
|
-
"type": {
|
|
1859
|
-
"name": "(value: any) => void"
|
|
1860
|
-
},
|
|
1861
|
-
"name": "update",
|
|
1862
|
-
"description": "Setter that writes the value back and clears the field's validation error."
|
|
1863
1880
|
}
|
|
1864
1881
|
]
|
|
1865
1882
|
},
|
|
1866
1883
|
{
|
|
1867
|
-
"name": "
|
|
1868
|
-
"description": "
|
|
1884
|
+
"name": "value",
|
|
1885
|
+
"description": "Replaces the built-in control with a custom value editor.",
|
|
1869
1886
|
"bindings": [
|
|
1870
1887
|
{
|
|
1871
1888
|
"title": "binding",
|
|
@@ -1882,12 +1899,28 @@
|
|
|
1882
1899
|
},
|
|
1883
1900
|
"name": "model",
|
|
1884
1901
|
"description": "The model passed to field predicates (defaults to the live form data)."
|
|
1902
|
+
},
|
|
1903
|
+
{
|
|
1904
|
+
"title": "binding",
|
|
1905
|
+
"type": {
|
|
1906
|
+
"name": "any"
|
|
1907
|
+
},
|
|
1908
|
+
"name": "value",
|
|
1909
|
+
"description": "The current field value."
|
|
1910
|
+
},
|
|
1911
|
+
{
|
|
1912
|
+
"title": "binding",
|
|
1913
|
+
"type": {
|
|
1914
|
+
"name": "(value: any) => void"
|
|
1915
|
+
},
|
|
1916
|
+
"name": "update",
|
|
1917
|
+
"description": "Setter that writes the value back and clears the field's validation error."
|
|
1885
1918
|
}
|
|
1886
1919
|
]
|
|
1887
1920
|
},
|
|
1888
1921
|
{
|
|
1889
|
-
"name": "
|
|
1890
|
-
"description": "
|
|
1922
|
+
"name": "info",
|
|
1923
|
+
"description": "Rich info block rendered below the control.",
|
|
1891
1924
|
"bindings": [
|
|
1892
1925
|
{
|
|
1893
1926
|
"title": "binding",
|
|
@@ -2078,34 +2111,18 @@
|
|
|
2078
2111
|
]
|
|
2079
2112
|
},
|
|
2080
2113
|
{
|
|
2081
|
-
"name": "
|
|
2082
|
-
"description": "
|
|
2114
|
+
"name": "name",
|
|
2115
|
+
"description": "",
|
|
2083
2116
|
"bindings": [
|
|
2084
2117
|
{
|
|
2085
2118
|
"name": "name",
|
|
2086
2119
|
"title": "binding"
|
|
2087
|
-
},
|
|
2088
|
-
{
|
|
2089
|
-
"title": "binding",
|
|
2090
|
-
"type": {
|
|
2091
|
-
"name": "FieldDefinition"
|
|
2092
|
-
},
|
|
2093
|
-
"name": "field",
|
|
2094
|
-
"description": "The field definition being replaced."
|
|
2095
|
-
},
|
|
2096
|
-
{
|
|
2097
|
-
"title": "binding",
|
|
2098
|
-
"type": {
|
|
2099
|
-
"name": "object"
|
|
2100
|
-
},
|
|
2101
|
-
"name": "model",
|
|
2102
|
-
"description": "Live form data merged with `context`, for predicates."
|
|
2103
2120
|
}
|
|
2104
2121
|
]
|
|
2105
2122
|
},
|
|
2106
2123
|
{
|
|
2107
|
-
"name": "`
|
|
2108
|
-
"description": "Content inserted
|
|
2124
|
+
"name": "`tab-after(${tab.key})`",
|
|
2125
|
+
"description": "Content inserted below a tab's fields, keyed by tab (slot name `tab-after(<tabKey>)`).",
|
|
2109
2126
|
"bindings": [
|
|
2110
2127
|
{
|
|
2111
2128
|
"name": "name",
|
|
@@ -2114,10 +2131,10 @@
|
|
|
2114
2131
|
{
|
|
2115
2132
|
"title": "binding",
|
|
2116
2133
|
"type": {
|
|
2117
|
-
"name": "
|
|
2134
|
+
"name": "FormTab"
|
|
2118
2135
|
},
|
|
2119
|
-
"name": "
|
|
2120
|
-
"description": "The
|
|
2136
|
+
"name": "tab",
|
|
2137
|
+
"description": "The tab definition being rendered."
|
|
2121
2138
|
},
|
|
2122
2139
|
{
|
|
2123
2140
|
"title": "binding",
|
|
@@ -2130,78 +2147,122 @@
|
|
|
2130
2147
|
]
|
|
2131
2148
|
},
|
|
2132
2149
|
{
|
|
2133
|
-
"name": "
|
|
2134
|
-
"description": "
|
|
2150
|
+
"name": "footer",
|
|
2151
|
+
"description": "Content rendered below the submit button (e.g. a cancel link or secondary actions).",
|
|
2135
2152
|
"bindings": [
|
|
2136
2153
|
{
|
|
2137
|
-
"
|
|
2138
|
-
"
|
|
2154
|
+
"title": "binding",
|
|
2155
|
+
"type": {
|
|
2156
|
+
"name": "UseFormReturn"
|
|
2157
|
+
},
|
|
2158
|
+
"name": "form",
|
|
2159
|
+
"description": "The resolved form instance (state, errors, submit helpers)."
|
|
2139
2160
|
}
|
|
2140
2161
|
]
|
|
2162
|
+
}
|
|
2163
|
+
],
|
|
2164
|
+
"methods": []
|
|
2165
|
+
},
|
|
2166
|
+
{
|
|
2167
|
+
"name": "DXFormField",
|
|
2168
|
+
"category": "extended",
|
|
2169
|
+
"filePath": "resources/js/components/extended/DXFormField.vue",
|
|
2170
|
+
"description": "DXFormField — internal per-field renderer for DXForm. Owns the single per-field render block that DXForm's tabbed and flat layouts both need: the `field(<key>)` full-replacement slot, the `field-before(<key>)`/`field-after(<key>)` wrapper slots, and the `<DXField>` element with its `value`/`span`/`info`/`hint`/`repeater-row` slot forwarding. Extracted so those per-field props/slots are wired in ONE place — before this, DXForm carried two near-identical copies (tabbed + flat) and a new per-field prop had to be added to both, which was easy to miss (see #78/#83). DXForm forwards all of its slots into each instance; this component only reads the ones matching its field's key. Internal: not exported from the package index — consumers use DXForm.",
|
|
2171
|
+
"props": [
|
|
2172
|
+
{
|
|
2173
|
+
"name": "field",
|
|
2174
|
+
"type": "FieldDefinition",
|
|
2175
|
+
"required": true,
|
|
2176
|
+
"description": "The field to render."
|
|
2141
2177
|
},
|
|
2142
2178
|
{
|
|
2143
|
-
"name": "
|
|
2144
|
-
"
|
|
2179
|
+
"name": "form",
|
|
2180
|
+
"type": "UseFormReturn",
|
|
2181
|
+
"required": true,
|
|
2182
|
+
"description": "The resolved form instance (state, errors, submit helpers)."
|
|
2183
|
+
},
|
|
2184
|
+
{
|
|
2185
|
+
"name": "model",
|
|
2186
|
+
"type": "Record",
|
|
2187
|
+
"required": true,
|
|
2188
|
+
"description": "Live form data merged with context, for slot bindings/predicates."
|
|
2189
|
+
},
|
|
2190
|
+
{
|
|
2191
|
+
"name": "layout",
|
|
2192
|
+
"type": "union",
|
|
2193
|
+
"required": false,
|
|
2194
|
+
"description": "Form-level layout; overridden per-field by `field.layout`."
|
|
2195
|
+
},
|
|
2196
|
+
{
|
|
2197
|
+
"name": "labelCols",
|
|
2198
|
+
"type": "LabelCols",
|
|
2199
|
+
"required": false,
|
|
2200
|
+
"description": "Form-level label column width; overridden per-field by `field.labelCols`."
|
|
2201
|
+
}
|
|
2202
|
+
],
|
|
2203
|
+
"events": [],
|
|
2204
|
+
"slots": [
|
|
2205
|
+
{
|
|
2206
|
+
"name": "`field(${field.key})`",
|
|
2207
|
+
"description": "",
|
|
2145
2208
|
"bindings": [
|
|
2146
2209
|
{
|
|
2147
2210
|
"name": "name",
|
|
2148
2211
|
"title": "binding"
|
|
2149
2212
|
},
|
|
2150
2213
|
{
|
|
2151
|
-
"title": "binding",
|
|
2152
|
-
"type": {
|
|
2153
|
-
"name": "FieldDefinition"
|
|
2154
|
-
},
|
|
2155
2214
|
"name": "field",
|
|
2156
|
-
"
|
|
2215
|
+
"title": "binding"
|
|
2157
2216
|
},
|
|
2158
2217
|
{
|
|
2159
|
-
"title": "binding",
|
|
2160
|
-
"type": {
|
|
2161
|
-
"name": "object"
|
|
2162
|
-
},
|
|
2163
2218
|
"name": "model",
|
|
2164
|
-
"
|
|
2219
|
+
"title": "binding"
|
|
2165
2220
|
}
|
|
2166
2221
|
]
|
|
2167
2222
|
},
|
|
2168
2223
|
{
|
|
2169
|
-
"name": "`
|
|
2170
|
-
"description": "
|
|
2224
|
+
"name": "`field-before(${field.key})`",
|
|
2225
|
+
"description": "",
|
|
2171
2226
|
"bindings": [
|
|
2172
2227
|
{
|
|
2173
2228
|
"name": "name",
|
|
2174
2229
|
"title": "binding"
|
|
2175
2230
|
},
|
|
2176
2231
|
{
|
|
2177
|
-
"
|
|
2178
|
-
"
|
|
2179
|
-
"name": "FormTab"
|
|
2180
|
-
},
|
|
2181
|
-
"name": "tab",
|
|
2182
|
-
"description": "The tab definition being rendered."
|
|
2232
|
+
"name": "field",
|
|
2233
|
+
"title": "binding"
|
|
2183
2234
|
},
|
|
2184
2235
|
{
|
|
2185
|
-
"title": "binding",
|
|
2186
|
-
"type": {
|
|
2187
|
-
"name": "object"
|
|
2188
|
-
},
|
|
2189
2236
|
"name": "model",
|
|
2190
|
-
"
|
|
2237
|
+
"title": "binding"
|
|
2191
2238
|
}
|
|
2192
2239
|
]
|
|
2193
2240
|
},
|
|
2194
2241
|
{
|
|
2195
|
-
"name": "
|
|
2196
|
-
"description": "
|
|
2242
|
+
"name": "slotName",
|
|
2243
|
+
"description": "",
|
|
2197
2244
|
"bindings": [
|
|
2198
2245
|
{
|
|
2199
|
-
"
|
|
2200
|
-
"
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2246
|
+
"name": "name",
|
|
2247
|
+
"title": "binding"
|
|
2248
|
+
}
|
|
2249
|
+
]
|
|
2250
|
+
},
|
|
2251
|
+
{
|
|
2252
|
+
"name": "`field-after(${field.key})`",
|
|
2253
|
+
"description": "",
|
|
2254
|
+
"bindings": [
|
|
2255
|
+
{
|
|
2256
|
+
"name": "name",
|
|
2257
|
+
"title": "binding"
|
|
2258
|
+
},
|
|
2259
|
+
{
|
|
2260
|
+
"name": "field",
|
|
2261
|
+
"title": "binding"
|
|
2262
|
+
},
|
|
2263
|
+
{
|
|
2264
|
+
"name": "model",
|
|
2265
|
+
"title": "binding"
|
|
2205
2266
|
}
|
|
2206
2267
|
]
|
|
2207
2268
|
}
|
|
@@ -2465,6 +2526,63 @@
|
|
|
2465
2526
|
],
|
|
2466
2527
|
"methods": []
|
|
2467
2528
|
},
|
|
2529
|
+
{
|
|
2530
|
+
"name": "DXSwitch",
|
|
2531
|
+
"category": "extended",
|
|
2532
|
+
"filePath": "resources/js/components/extended/DXSwitch.vue",
|
|
2533
|
+
"description": "DXSwitch — a \"filled box\" toggle switch. An opinionated switch built on `DFormCheckbox` (`switch`): a bordered box sized like a `.form-control` with the label on the left and the toggle on the right, colour-coding its state (a neutral box when off, a filled primary box when on). Used standalone or, internally, by `DXField`'s `switch` field type so a form switch and a lone switch share one look. Usage: ```vue <DXSwitch v-model=\"isCurrent\" label=\"Product is current\" /> ``` For a form field, prefer a `DXField`/`DXForm` `type: 'switch'`; reach for `DXSwitch` directly when you want the styled toggle outside a form. Pass a `label` prop for simple text, or the default slot for richer label content.",
|
|
2534
|
+
"props": [
|
|
2535
|
+
{
|
|
2536
|
+
"name": "modelValue",
|
|
2537
|
+
"type": "boolean",
|
|
2538
|
+
"required": false,
|
|
2539
|
+
"default": "false",
|
|
2540
|
+
"description": "Whether the switch is on."
|
|
2541
|
+
},
|
|
2542
|
+
{
|
|
2543
|
+
"name": "label",
|
|
2544
|
+
"type": "string",
|
|
2545
|
+
"required": false,
|
|
2546
|
+
"description": "Static text beside the toggle; the fallback when no contextual text applies."
|
|
2547
|
+
},
|
|
2548
|
+
{
|
|
2549
|
+
"name": "textWhenTrue",
|
|
2550
|
+
"type": "string",
|
|
2551
|
+
"required": false,
|
|
2552
|
+
"description": "Text shown when on — overrides `label` in the on state (e.g. \"Product is current\")."
|
|
2553
|
+
},
|
|
2554
|
+
{
|
|
2555
|
+
"name": "textWhenFalse",
|
|
2556
|
+
"type": "string",
|
|
2557
|
+
"required": false,
|
|
2558
|
+
"description": "Text shown when off — overrides `label` in the off state (e.g. \"Product is not current\")."
|
|
2559
|
+
}
|
|
2560
|
+
],
|
|
2561
|
+
"events": [
|
|
2562
|
+
{
|
|
2563
|
+
"name": "update:modelValue",
|
|
2564
|
+
"description": "",
|
|
2565
|
+
"properties": []
|
|
2566
|
+
}
|
|
2567
|
+
],
|
|
2568
|
+
"slots": [
|
|
2569
|
+
{
|
|
2570
|
+
"name": "default",
|
|
2571
|
+
"description": "Label content shown beside the toggle. Falls back to the contextual",
|
|
2572
|
+
"bindings": [
|
|
2573
|
+
{
|
|
2574
|
+
"title": "binding",
|
|
2575
|
+
"type": {
|
|
2576
|
+
"name": "boolean"
|
|
2577
|
+
},
|
|
2578
|
+
"name": "on",
|
|
2579
|
+
"description": "Whether the switch is currently on."
|
|
2580
|
+
}
|
|
2581
|
+
]
|
|
2582
|
+
}
|
|
2583
|
+
],
|
|
2584
|
+
"methods": []
|
|
2585
|
+
},
|
|
2468
2586
|
{
|
|
2469
2587
|
"name": "DXTable",
|
|
2470
2588
|
"category": "extended",
|
|
@@ -3002,8 +3120,8 @@
|
|
|
3002
3120
|
]
|
|
3003
3121
|
},
|
|
3004
3122
|
"stats": {
|
|
3005
|
-
"totalComponents":
|
|
3123
|
+
"totalComponents": 73,
|
|
3006
3124
|
"baseComponents": 57,
|
|
3007
|
-
"extendedComponents":
|
|
3125
|
+
"extendedComponents": 16
|
|
3008
3126
|
}
|
|
3009
3127
|
}
|
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-10T09:19:45.350Z
|
|
5
5
|
|
|
6
6
|
This file provides a complete map of all available documentation for AI agents and developers.
|
|
7
7
|
|
|
@@ -80,6 +80,7 @@ This file provides a complete map of all available documentation for AI agents a
|
|
|
80
80
|
- [DXForm](/components/extended/DXForm): The canonical form renderer. Drive it with field definitions; add `tabs` when
|
|
81
81
|
- [DXRepeater](/components/extended/DXRepeater): A repeatable sub-form (field array) primitive for nested, dynamic collections —
|
|
82
82
|
- [DXStatCard](/components/extended/DXStatCard): A KPI / stat tile: a big formatted value with a title, optional subtitle, an
|
|
83
|
+
- [DXSwitch](/components/extended/DXSwitch): A "filled box" toggle switch built on `DFormCheckbox`: a bordered box sized like
|
|
83
84
|
- [DXTable](/components/extended/DXTable): A comprehensive data table component with built-in pagination, sorting, filtering, and CRUD operatio
|
|
84
85
|
|
|
85
86
|
### Examples
|
|
@@ -99,4 +100,4 @@ This file provides a complete map of all available documentation for AI agents a
|
|
|
99
100
|
|
|
100
101
|
---
|
|
101
102
|
|
|
102
|
-
**Total Pages**:
|
|
103
|
+
**Total Pages**: 76
|
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 68 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 (11 components)
|
|
85
85
|
|
|
86
86
|
Custom dashboard components with advanced functionality beyond Bootstrap Vue Next.
|
|
87
87
|
|
|
@@ -94,6 +94,7 @@ Custom dashboard components with advanced functionality beyond Bootstrap Vue Nex
|
|
|
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
96
|
- [DXStatCard](/components/extended/dxstatcard): Extended dashboard component
|
|
97
|
+
- [DXSwitch](/components/extended/dxswitch): Extended dashboard component
|
|
97
98
|
- [DXTable](/components/extended/dxtable): Data table with pagination, filtering, and sorting
|
|
98
99
|
|
|
99
100
|
## Composables
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omnitend/dashboard-for-laravel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
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",
|
|
@@ -75,9 +75,10 @@
|
|
|
75
75
|
"vue-docgen-api": "^4.79.2"
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
|
-
"@astrojs/
|
|
79
|
-
"@astrojs/
|
|
80
|
-
"@astrojs/
|
|
78
|
+
"@astrojs/markdown-remark": "^7.2.0",
|
|
79
|
+
"@astrojs/mdx": "^7.0.1",
|
|
80
|
+
"@astrojs/sitemap": "^3.7.3",
|
|
81
|
+
"@astrojs/vue": "^7.0.1",
|
|
81
82
|
"@iconify-json/lucide": "^1.2.71",
|
|
82
83
|
"@iconify/json": "^2.2.397",
|
|
83
84
|
"@inertiajs/vue3": "^2.2.15",
|
|
@@ -86,7 +87,7 @@
|
|
|
86
87
|
"@vitest/browser": "^4.1.8",
|
|
87
88
|
"@vitest/browser-playwright": "^4.1.8",
|
|
88
89
|
"@vue/test-utils": "^2.4.6",
|
|
89
|
-
"astro": "
|
|
90
|
+
"astro": "7.0.5",
|
|
90
91
|
"bootstrap": "^5.3.8",
|
|
91
92
|
"bootstrap-icons": "^1.13.1",
|
|
92
93
|
"chart.js": "^4.5.1",
|
package/resources/css/theme.scss
CHANGED
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
// Custom Bootstrap theme for the Laravel Dashboard library
|
|
5
5
|
// Override Bootstrap variables BEFORE importing Bootstrap
|
|
6
6
|
|
|
7
|
+
// The Sass module for `color.mix()` etc. `@use` must precede all other
|
|
8
|
+
// statements (variable overrides, `@import`), so it stays at the very top.
|
|
9
|
+
@use "sass:color";
|
|
10
|
+
|
|
7
11
|
// ----------------------------------------------------------------------------
|
|
8
12
|
// Colors
|
|
9
13
|
// ----------------------------------------------------------------------------
|
|
@@ -349,7 +353,7 @@ $bootstrap-icons-font-src: url("bootstrap-icons/font/fonts/bootstrap-icons.woff2
|
|
|
349
353
|
"info": $info
|
|
350
354
|
) {
|
|
351
355
|
&.toast-#{$name} {
|
|
352
|
-
--bs-toast-bg: #{mix($color, $white, 8%)};
|
|
356
|
+
--bs-toast-bg: #{color.mix($color, $white, 8%)};
|
|
353
357
|
}
|
|
354
358
|
}
|
|
355
359
|
}
|
|
@@ -60,7 +60,10 @@
|
|
|
60
60
|
</DContainer>
|
|
61
61
|
<DContainer v-else fluid>
|
|
62
62
|
<DRow class="justify-content-center">
|
|
63
|
-
|
|
63
|
+
<!-- A genuine max-width cap (not the proportional col-xl-10), so the
|
|
64
|
+
reading column doesn't stretch to ~2000px on a wide display. The
|
|
65
|
+
centred row handles the horizontal centring. -->
|
|
66
|
+
<DCol cols="12" :style="{ maxWidth: contentMaxWidth }" :class="contentClass">
|
|
64
67
|
<slot />
|
|
65
68
|
</DCol>
|
|
66
69
|
</DRow>
|
|
@@ -96,11 +99,17 @@ interface Props {
|
|
|
96
99
|
|
|
97
100
|
/**
|
|
98
101
|
* Render the page content full-width and left-aligned instead of the default
|
|
99
|
-
* centred, reading-width
|
|
100
|
-
* (wide tables).
|
|
102
|
+
* centred, reading-width column. Use for data-heavy admin pages (wide tables).
|
|
101
103
|
*/
|
|
102
104
|
fluid?: boolean;
|
|
103
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Max width of the centred content column (any CSS length). A genuine cap, so
|
|
108
|
+
* forms and text-heavy pages don't stretch to ~2000px on a wide display.
|
|
109
|
+
* Ignored when `fluid`. Set a large value (or use `fluid`) for full width.
|
|
110
|
+
*/
|
|
111
|
+
contentMaxWidth?: string;
|
|
112
|
+
|
|
104
113
|
/** Extra class(es) applied to the content container/column. */
|
|
105
114
|
contentClass?: string;
|
|
106
115
|
|
|
@@ -143,6 +152,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
143
152
|
autoCollapseInactiveGroups: true,
|
|
144
153
|
storageKey: 'dashboard-sidebar-hidden',
|
|
145
154
|
dashboardId: '',
|
|
155
|
+
contentMaxWidth: '1140px',
|
|
146
156
|
});
|
|
147
157
|
|
|
148
158
|
const collapsed = ref(false);
|