@omnitend/dashboard-for-laravel 0.41.2 → 0.42.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.
Files changed (55) hide show
  1. package/README.md +2 -1
  2. package/dist/assets/MavenPro-Bold-35b16f06.woff2 +0 -0
  3. package/dist/assets/MavenPro-Medium-febc8674.woff2 +0 -0
  4. package/dist/assets/MavenPro-Regular-aee3df9e.woff2 +0 -0
  5. package/dist/assets/MavenPro-SemiBold-c555dbfa.woff2 +0 -0
  6. package/dist/assets/Poppins-Medium-5800fa57.woff2 +0 -0
  7. package/dist/assets/Poppins-SemiBold-94a36267.woff2 +0 -0
  8. package/dist/charts.js +148 -130
  9. package/dist/charts.js.map +1 -1
  10. package/dist/charts.umd.cjs +1 -1
  11. package/dist/charts.umd.cjs.map +1 -1
  12. package/dist/components/base/DAutocomplete.vue.d.ts +2 -2
  13. package/dist/components/charts/chartTheme.d.ts +14 -2
  14. package/dist/components/extended/DXField.vue.d.ts +16 -5
  15. package/dist/components/extended/DXForm.vue.d.ts +25 -9
  16. package/dist/components/extended/DXNumberStepper.vue.d.ts +33 -0
  17. package/dist/components/extended/DXSaveButton.vue.d.ts +38 -0
  18. package/dist/components/extended/DXTable.vue.d.ts +6 -2
  19. package/dist/composables/useForm.d.ts +7 -0
  20. package/dist/dashboard-for-laravel.js +9317 -9052
  21. package/dist/dashboard-for-laravel.js.map +1 -1
  22. package/dist/dashboard-for-laravel.umd.cjs +7 -7
  23. package/dist/dashboard-for-laravel.umd.cjs.map +1 -1
  24. package/dist/index.d.ts +2 -0
  25. package/dist/style.css +2 -2
  26. package/dist/types/index.d.ts +20 -3
  27. package/docs/public/api-reference.json +165 -14
  28. package/docs/public/docs-map.md +4 -2
  29. package/docs/public/llms.txt +4 -2
  30. package/package.json +1 -1
  31. package/resources/css/theme.scss +558 -89
  32. package/resources/fonts/maven-pro/MavenPro-Bold.woff2 +0 -0
  33. package/resources/fonts/maven-pro/MavenPro-Medium.woff2 +0 -0
  34. package/resources/fonts/maven-pro/MavenPro-Regular.woff2 +0 -0
  35. package/resources/fonts/maven-pro/MavenPro-SemiBold.woff2 +0 -0
  36. package/resources/fonts/maven-pro/OFL.txt +93 -0
  37. package/resources/fonts/poppins/OFL.txt +93 -0
  38. package/resources/fonts/poppins/Poppins-Medium.woff2 +0 -0
  39. package/resources/fonts/poppins/Poppins-SemiBold.woff2 +0 -0
  40. package/resources/js/components/base/DAutocomplete.vue +73 -2
  41. package/resources/js/components/charts/DXBarChart.vue +2 -1
  42. package/resources/js/components/charts/DXDoughnutChart.vue +2 -1
  43. package/resources/js/components/charts/DXLineChart.vue +2 -1
  44. package/resources/js/components/charts/chartTheme.ts +68 -21
  45. package/resources/js/components/extended/DXDashboard.vue +4 -2
  46. package/resources/js/components/extended/DXDashboardSidebar.vue +52 -20
  47. package/resources/js/components/extended/DXField.vue +59 -28
  48. package/resources/js/components/extended/DXForm.vue +122 -21
  49. package/resources/js/components/extended/DXNumberStepper.vue +243 -0
  50. package/resources/js/components/extended/DXSaveButton.vue +82 -0
  51. package/resources/js/components/extended/DXTable.vue +44 -15
  52. package/resources/js/composables/useForm.ts +11 -0
  53. package/resources/js/composables/useToast.ts +1 -1
  54. package/resources/js/index.ts +2 -0
  55. package/resources/js/types/index.ts +21 -3
@@ -44,8 +44,9 @@ export type OptionsLoader = (model: any) => Promise<FieldOption[]>;
44
44
  * Deliberately excludes `boolean` (which BFormGroup's own `labelCols` prop
45
45
  * accepts): Vue's type-based `defineProps` auto-defaults an omitted prop to
46
46
  * `false` (not `undefined`) whenever its declared type includes `boolean`,
47
- * which would silently break the `field.labelCols ?? formLabelCols ?? 3`
48
- * fallback chain used to resolve this value.
47
+ * which would silently break the `field.labelCols ?? formLabelCols` fallback
48
+ * chain used to resolve this value (`undefined` at the end of it means the
49
+ * default 45% label column, `--dx-form-label-width`).
49
50
  */
50
51
  export type LabelCols = number | {
51
52
  sm?: number;
@@ -187,7 +188,8 @@ export interface FieldDefinition {
187
188
  layout?: "vertical" | "horizontal";
188
189
  /**
189
190
  * Per-field override of DXForm's `labelCols` prop, for horizontal
190
- * layout. Falls back to the form-level `labelCols` when omitted.
191
+ * layout. Falls back to the form-level `labelCols` when omitted, and to
192
+ * the default 45% label column (`--dx-form-label-width`) when neither is set.
191
193
  */
192
194
  labelCols?: LabelCols;
193
195
  /**
@@ -474,4 +476,19 @@ export interface FormTab {
474
476
  /** Lazily mount tab content until first activated */
475
477
  lazy?: boolean;
476
478
  }
479
+ /**
480
+ * The theme's extra colour variant, `pending`: waiting, and the next move is
481
+ * not yours ("awaiting payment", "sent to printer, not yet confirmed").
482
+ * theme.scss paints it everywhere a stock variant is painted (badge, soft and
483
+ * outline button, alert, text, subtle utilities, table row, list-group item,
484
+ * toast). Registering it on bootstrap-vue-next's `BaseColorVariant` adds it to
485
+ * every variant union derived from that interface (`ColorVariant`,
486
+ * `ButtonVariant` incl. `outline-pending`, the `-subtle` and `-emphasis`
487
+ * forms), so `<DBadge variant="pending">` type-checks.
488
+ */
489
+ declare module "bootstrap-vue-next" {
490
+ interface BaseColorVariant {
491
+ pending: unknown;
492
+ }
493
+ }
477
494
  export {};
@@ -1,8 +1,8 @@
1
1
  {
2
- "generated": "2026-09-30T05:13:05.340Z",
2
+ "generated": "2026-10-05T05:06:30.259Z",
3
3
  "package": {
4
4
  "name": "@omnitend/dashboard-for-laravel",
5
- "version": "0.41.2"
5
+ "version": "0.42.1"
6
6
  },
7
7
  "components": {
8
8
  "base": [
@@ -1360,7 +1360,7 @@
1360
1360
  "name": "DXBarChart",
1361
1361
  "category": "extended",
1362
1362
  "filePath": "resources/js/components/charts/DXBarChart.vue",
1363
- "description": "A themed bar chart. Thin wrapper around vue-chartjs (chart.js) with the theme's dedicated chart palette (--dx-chart-1..8) 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`.",
1363
+ "description": "A themed bar chart. Thin wrapper around vue-chartjs (chart.js) with the theme's dedicated chart palette (--dx-chart-1..8 fills, a 1px --dx-chart-edge outline) 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`.",
1364
1364
  "props": [
1365
1365
  {
1366
1366
  "name": "labels",
@@ -1970,7 +1970,7 @@
1970
1970
  "name": "DXDoughnutChart",
1971
1971
  "category": "extended",
1972
1972
  "filePath": "resources/js/components/charts/DXDoughnutChart.vue",
1973
- "description": "A themed doughnut chart. Thin wrapper around vue-chartjs (chart.js) with one chart-palette colour (--dx-chart-1..8) 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`.",
1973
+ "description": "A themed doughnut chart. Thin wrapper around vue-chartjs (chart.js) with one chart-palette colour (--dx-chart-1..8) per slice, a 1px --dx-chart-edge outline, 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`.",
1974
1974
  "props": [
1975
1975
  {
1976
1976
  "name": "labels",
@@ -2073,7 +2073,7 @@
2073
2073
  "name": "labelCols",
2074
2074
  "type": "LabelCols",
2075
2075
  "required": false,
2076
- "description": "Label column width for horizontal layout (mirrors BFormGroup)."
2076
+ "description": "Label column width for horizontal layout (mirrors BFormGroup's\n`labelCols`/`labelCols*`). Omitted: the label takes\n`--dx-form-label-width` (45%) from `sm` up and stacks below."
2077
2077
  },
2078
2078
  {
2079
2079
  "name": "hideLabel",
@@ -2168,7 +2168,7 @@
2168
2168
  },
2169
2169
  {
2170
2170
  "name": "value",
2171
- "description": "Replaces the built-in control with a custom value editor.",
2171
+ "description": "Replaces the built-in control with a custom value editor. On a `plaintext` field the content is wrapped in `.dx-form-plaintext` so display-only content lines up with the label.",
2172
2172
  "bindings": [
2173
2173
  {
2174
2174
  "title": "binding",
@@ -2424,6 +2424,20 @@
2424
2424
  "default": "\"Submitting...\"",
2425
2425
  "description": "Submit button loading text"
2426
2426
  },
2427
+ {
2428
+ "name": "submitSavedText",
2429
+ "type": "string",
2430
+ "required": false,
2431
+ "default": "\"Saved\"",
2432
+ "description": "Submit button label once the form's contents are saved."
2433
+ },
2434
+ {
2435
+ "name": "savedState",
2436
+ "type": "boolean",
2437
+ "required": false,
2438
+ "default": "true",
2439
+ "description": "After a successful submission through the form (`form.post/put/…`,\nread from `form.wasSuccessful`), turn the submit button into a\ndisabled \"✓ Saved\" until any field changes. On by default; set\n`false` for forms whose submit is not a save (search, filter)."
2440
+ },
2427
2441
  {
2428
2442
  "name": "showSubmit",
2429
2443
  "type": "boolean",
@@ -2457,20 +2471,20 @@
2457
2471
  "type": "union",
2458
2472
  "required": false,
2459
2473
  "default": "\"vertical\"",
2460
- "description": "Form-wide field layout:\n\n- `\"vertical\"` (default) — label above input, always.\n- `\"horizontal\"` — label left, input right, always.\n- `\"auto\"` — horizontal when the form's **own container** is at least\n `layoutThreshold` px wide, vertical below that. Container-driven, not\n viewport-driven: a page narrowed by the dashboard sidebar, or a form\n inside a modal, stacks even though the window is wide (which no\n Bootstrap media query can see).\n\nOverridable per-field via `field.layout`. A field with `span: true`\nalways renders full-width, regardless of layout."
2474
+ "description": "Form-wide field layout:\n\n- `\"vertical\"` (default) — label above input, always.\n- `\"horizontal\"` — label left, input right, whatever the container\n width. With the default label column that holds from the `sm`\n viewport breakpoint up (the label stacks on a phone); a numeric\n `labelCols` keeps the split at every width.\n- `\"auto\"` — horizontal when the form's **own container** is at least\n `layoutThreshold` px wide, vertical below that. Container-driven, not\n viewport-driven: a page narrowed by the dashboard sidebar, or a form\n inside a modal, stacks even though the window is wide (which no\n Bootstrap media query can see).\n\nOverridable per-field via `field.layout`. A field with `span: true`\nalways renders full-width, regardless of layout."
2461
2475
  },
2462
2476
  {
2463
2477
  "name": "layoutThreshold",
2464
2478
  "type": "number",
2465
2479
  "required": false,
2466
2480
  "default": "640",
2467
- "description": "Container width (px) at or above which `layout: \"auto\"` goes horizontal.\nIgnored for the explicit `\"vertical\"`/`\"horizontal\"` layouts.\n\nDefault 640, measured rather than guessed: with the default 3-column\nlabel the label's text area is `containerWidth / 4 - 18` px, so 640 gives\nit 142px — enough for a ~20-character label (\"Unit price (ex VAT)\"\nmeasures 128px at the theme's label font) to stay on one line, with the\ncontrol column still 474px. Below ~584px that label starts wrapping,\nwhich is the cramped-label symptom this exists to avoid. Raise it if your\nlabels run longer, or lower `labelCols` instead."
2481
+ "description": "Container width (px) at or above which `layout: \"auto\"` goes horizontal.\nIgnored for the explicit `\"vertical\"`/`\"horizontal\"` layouts.\n\nDefault 640, measured when the default label was 3 columns: that gave\nthe label 142px of text at 640px, just enough for a ~20-character label\n(\"Unit price (ex VAT)\" measures 128px at the theme's label font) to stay\non one line. With the 45% default label column the same 640px gives the\nlabel ~275px and the control ~341px, so the threshold now mostly keeps\nthe control column usable. Raise it if your controls need more room, or\nset a narrower `labelCols`."
2468
2482
  },
2469
2483
  {
2470
2484
  "name": "labelCols",
2471
2485
  "type": "LabelCols",
2472
2486
  "required": false,
2473
- "description": "Label column width for horizontal layout (mirrors BFormGroup's\n`labelCols`/`labelCols*` props). Overridable per-field via\n`field.labelCols`. Ignored when `layout` is \"vertical\"."
2487
+ "description": "Label column width for horizontal layout (mirrors BFormGroup's\n`labelCols`/`labelCols*` props). Overridable per-field via\n`field.labelCols`. Ignored when `layout` is \"vertical\". Omitted (here\nand on the field): the label takes `--dx-form-label-width` (45%) from\n`sm` up and stacks above the input below `sm`."
2474
2488
  }
2475
2489
  ],
2476
2490
  "events": [
@@ -2696,7 +2710,7 @@
2696
2710
  "name": "DXLineChart",
2697
2711
  "category": "extended",
2698
2712
  "filePath": "resources/js/components/charts/DXLineChart.vue",
2699
- "description": "A themed line chart. Thin wrapper around vue-chartjs (chart.js) with the theme's dedicated chart palette applied (--dx-chart-1..8 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`.",
2713
+ "description": "A themed line chart. Thin wrapper around vue-chartjs (chart.js) with the theme's dedicated chart palette applied (--dx-chart-line-1..8 stroke and point outline, --dx-chart-1..8 point centre and translucent area 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`.",
2700
2714
  "props": [
2701
2715
  {
2702
2716
  "name": "labels",
@@ -2788,6 +2802,79 @@
2788
2802
  ],
2789
2803
  "methods": []
2790
2804
  },
2805
+ {
2806
+ "name": "DXNumberStepper",
2807
+ "category": "extended",
2808
+ "filePath": "resources/js/components/extended/DXNumberStepper.vue",
2809
+ "description": "DXNumberStepper — a number input between a decrease and an increase button. `[ − ][ 12 ][ + ]` as one input group, for quantities that are usually nudged rather than typed (cases on an order line, covers on a booking). - The model is a number, or `null` when the input is empty (never `NaN`, never `\"\"`). Every step and every valid keystroke emits `update:modelValue`; debounce on the consumer's side if each change saves. - A step adds or subtracts `step` from the current value and clamps to `min`/`max`. It does not snap to a grid, so 1.05 + 0.1 is 1.15. The sum is rounded to the decimal places of the value and step, so 0.1 three times is 0.3, not 0.30000000000000004. From empty, a step goes to the in-range value nearest zero. - The button at a bound is disabled (decrease at `min`, increase at `max`). - Typing is free: the value is emitted as typed, even out of range, and is CLAMPED ON BLUR to `min`/`max` (emitting the clamped value). Half-typed input the browser cannot parse (\"-\", \"1e\") emits nothing until it parses. - ArrowUp/ArrowDown on the input go through the same step as the buttons (the browser's own spin-button stepping snaps to a grid; this does not). The native spin arrows are hidden. The buttons are `tabindex=\"-1\"`, so a list of steppers is one Tab stop each; keyboard users step with the arrows. - The buttons are square icon buttons at the input's height (never narrower than tall), soft `secondary` like other in-row actions, labelled \"Decrease\"/\"Increase\" plus the input's `aria-label` when it has one. `class` and `style` go on the group; every other attribute (`aria-label`, `name`, `id`, `placeholder`, `required`, `state`, listeners…) goes on the input. Styles live in theme.scss under `.dx-number-stepper`.",
2810
+ "props": [
2811
+ {
2812
+ "name": "modelValue",
2813
+ "type": "union",
2814
+ "required": false,
2815
+ "default": "null",
2816
+ "description": "The value (v-model). `null` when the input is empty."
2817
+ },
2818
+ {
2819
+ "name": "min",
2820
+ "type": "number",
2821
+ "required": false,
2822
+ "default": "undefined",
2823
+ "description": "Lowest value; the decrease button disables here and blur clamps to it."
2824
+ },
2825
+ {
2826
+ "name": "max",
2827
+ "type": "number",
2828
+ "required": false,
2829
+ "default": "undefined",
2830
+ "description": "Highest value; the increase button disables here and blur clamps to it."
2831
+ },
2832
+ {
2833
+ "name": "step",
2834
+ "type": "number",
2835
+ "required": false,
2836
+ "default": "1",
2837
+ "description": "How much one press (or ArrowUp/ArrowDown) changes the value. @default 1"
2838
+ },
2839
+ {
2840
+ "name": "size",
2841
+ "type": "union",
2842
+ "required": false,
2843
+ "default": "\"md\"",
2844
+ "description": "Control size, matching the other inputs. @default 'md'"
2845
+ },
2846
+ {
2847
+ "name": "disabled",
2848
+ "type": "boolean",
2849
+ "required": false,
2850
+ "default": "false",
2851
+ "description": "Disable the input and both buttons."
2852
+ },
2853
+ {
2854
+ "name": "decreaseLabel",
2855
+ "type": "string",
2856
+ "required": false,
2857
+ "default": "undefined",
2858
+ "description": "Override the decrease button's accessible label. Default: \"Decrease\", plus the input's aria-label."
2859
+ },
2860
+ {
2861
+ "name": "increaseLabel",
2862
+ "type": "string",
2863
+ "required": false,
2864
+ "default": "undefined",
2865
+ "description": "Override the increase button's accessible label. Default: \"Increase\", plus the input's aria-label."
2866
+ }
2867
+ ],
2868
+ "events": [
2869
+ {
2870
+ "name": "update:modelValue",
2871
+ "description": "",
2872
+ "properties": []
2873
+ }
2874
+ ],
2875
+ "slots": [],
2876
+ "methods": []
2877
+ },
2791
2878
  {
2792
2879
  "name": "DXNumericField",
2793
2880
  "category": "extended",
@@ -3006,6 +3093,70 @@
3006
3093
  ],
3007
3094
  "methods": []
3008
3095
  },
3096
+ {
3097
+ "name": "DXSaveButton",
3098
+ "category": "extended",
3099
+ "filePath": "resources/js/components/extended/DXSaveButton.vue",
3100
+ "description": "DXSaveButton — a save button that confirms the save in place. Three states, driven by two booleans the consumer owns: - idle (`saving` and `saved` both false) — the normal Save button. - saving (`saving`) — DButton's busy state: disabled at once, spinner after the anti-flash delay, `savingText` if given. - saved (`saved` and not `saving`) — \"✓ Saved\" (tick icon) and genuinely `disabled`, until the consumer clears `saved` (typically on the next edit to the form). The colour does not change: the button keeps its own variant (navy primary by default) at full strength, neither the neutral grey of a disabled button nor a faded one. Only the label and the disabled state say it is saved. `saving` wins over `saved`, so re-saving from the saved state shows busy. The label change is announced: the button itself is a polite live region, and while it is `aria-busy` (saving) announcements wait until it settles, so a screen reader hears \"Saved\" once the save lands. Every other attribute (type, block, size, class, listeners…) passes through to DButton. DXForm uses this for its submit button.",
3101
+ "props": [
3102
+ {
3103
+ "name": "saving",
3104
+ "type": "boolean",
3105
+ "required": false,
3106
+ "default": "false",
3107
+ "description": "A save is in flight: busy/spinner state (DButton's `loading`)."
3108
+ },
3109
+ {
3110
+ "name": "saved",
3111
+ "type": "boolean",
3112
+ "required": false,
3113
+ "default": "false",
3114
+ "description": "The form's current contents have been saved: show `savedText` with a\ntick and disable the button. Clear it when the form changes."
3115
+ },
3116
+ {
3117
+ "name": "savedText",
3118
+ "type": "string",
3119
+ "required": false,
3120
+ "default": "\"Saved\"",
3121
+ "description": "Label for the saved state. @default 'Saved'"
3122
+ },
3123
+ {
3124
+ "name": "savingText",
3125
+ "type": "string",
3126
+ "required": false,
3127
+ "description": "Label shown beside the spinner while saving (DButton's `loadingText`)."
3128
+ },
3129
+ {
3130
+ "name": "variant",
3131
+ "type": "union",
3132
+ "required": false,
3133
+ "default": "\"primary\"",
3134
+ "description": "Variant in every state; the saved state keeps it. @default 'primary'"
3135
+ },
3136
+ {
3137
+ "name": "icon",
3138
+ "type": "string",
3139
+ "required": false,
3140
+ "description": "Leading icon when not saved. The saved state shows `check-lg`."
3141
+ },
3142
+ {
3143
+ "name": "disabled",
3144
+ "type": "boolean",
3145
+ "required": false,
3146
+ "default": "false",
3147
+ "description": "Disable the button regardless of state."
3148
+ }
3149
+ ],
3150
+ "events": [],
3151
+ "slots": [
3152
+ {
3153
+ "name": "default",
3154
+ "description": "",
3155
+ "bindings": []
3156
+ }
3157
+ ],
3158
+ "methods": []
3159
+ },
3009
3160
  {
3010
3161
  "name": "DXStatCard",
3011
3162
  "category": "extended",
@@ -3308,7 +3459,7 @@
3308
3459
  "type": "PaginationData",
3309
3460
  "required": false,
3310
3461
  "default": "() => ({\n current_page: 1,\n per_page: 15,\n total: 0,\n from: 0,\n to: 0,\n})",
3311
- "description": "Pagination data (Inertia mode)"
3462
+ "description": "Pagination data (Inertia mode). Omit it on a plain `items` table and the\nfooter counts the rows given as one page."
3312
3463
  },
3313
3464
  {
3314
3465
  "name": "showPagination",
@@ -3436,7 +3587,7 @@
3436
3587
  "name": "editLabelCols",
3437
3588
  "type": "LabelCols",
3438
3589
  "required": false,
3439
- "description": "Label column width for the edit modal's horizontal layout, forwarded to\n`DXForm`'s `labelCols` (a single width or a per-breakpoint object). Only\nmeaningful when `editLayout` is \"horizontal\"."
3590
+ "description": "Label column width for the edit modal's horizontal layout, forwarded to\n`DXForm`'s `labelCols` (a single width or a per-breakpoint object). Only\nmeaningful when `editLayout` is \"horizontal\". Omitted: DXForm's default\n45% label column."
3440
3591
  },
3441
3592
  {
3442
3593
  "name": "editCard",
@@ -4214,8 +4365,8 @@
4214
4365
  ]
4215
4366
  },
4216
4367
  "stats": {
4217
- "totalComponents": 86,
4368
+ "totalComponents": 88,
4218
4369
  "baseComponents": 60,
4219
- "extendedComponents": 26
4370
+ "extendedComponents": 28
4220
4371
  }
4221
4372
  }
@@ -1,7 +1,7 @@
1
1
  # Documentation Map
2
2
 
3
3
  > Auto-generated hierarchical overview of all documentation
4
- > Last updated: 2026-09-30T05:13:05.394Z
4
+ > Last updated: 2026-10-05T05:06:30.315Z
5
5
 
6
6
  This file provides a complete map of all available documentation for AI agents and developers.
7
7
 
@@ -79,7 +79,9 @@ This file provides a complete map of all available documentation for AI agents a
79
79
  - [DXDashboardSidebar](/components/extended/DXDashboardSidebar): A collapsible sidebar navigation component for Laravel dashboards with support for navigation groups
80
80
  - [DXField](/components/extended/DXField): The single-field renderer that powers `DXForm` and
81
81
  - [DXForm](/components/extended/DXForm): The canonical form renderer. Drive it with field definitions; add `tabs` when
82
+ - [DXNumberStepper](/components/extended/DXNumberStepper): A number input between a decrease and an increase button, `[ − ][ 12 ][ + ]`,
82
83
  - [DXRepeater](/components/extended/DXRepeater): A repeatable sub-form (field array) primitive for nested, dynamic collections —
84
+ - [DXSaveButton](/components/extended/DXSaveButton): A save button that confirms the save in place. While saving it shows
83
85
  - [DXStatCard](/components/extended/DXStatCard): A KPI / stat tile: a big formatted value with a title, optional subtitle, an
84
86
  - [DXSwitch](/components/extended/DXSwitch): A "filled box" toggle switch built on `DFormCheckbox`: a bordered box sized like
85
87
  - [DXTable](/components/extended/DXTable): A comprehensive data table component with built-in pagination, sorting, filtering, and CRUD operatio
@@ -102,4 +104,4 @@ This file provides a complete map of all available documentation for AI agents a
102
104
 
103
105
  ---
104
106
 
105
- **Total Pages**: 78
107
+ **Total Pages**: 80
@@ -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 76 Vue 3 components for building Laravel dashboards with Bootstrap Vue Next.
5
+ > A dual-package library (NPM + Composer) providing 78 Vue 3 components for building Laravel dashboards with Bootstrap Vue Next.
6
6
 
7
7
  ## Installation
8
8
 
@@ -84,7 +84,7 @@ Lightweight type-safe wrappers around Bootstrap Vue Next components providing AP
84
84
  - [DToaster](/components/base/dtoaster): Bootstrap Vue Next Toaster wrapper
85
85
  - [DTooltip](/components/base/dtooltip): Bootstrap Vue Next Tooltip wrapper
86
86
 
87
- ## Extended Components (16 components)
87
+ ## Extended Components (18 components)
88
88
 
89
89
  Custom dashboard components with advanced functionality beyond Bootstrap Vue Next.
90
90
 
@@ -98,7 +98,9 @@ Custom dashboard components with advanced functionality beyond Bootstrap Vue Nex
98
98
  - [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
99
99
  - [DXLoading](/components/extended/dxloading): Extended dashboard component
100
100
  - [DXModalActions](/components/extended/dxmodalactions): Extended dashboard component
101
+ - [DXNumberStepper](/components/extended/dxnumberstepper): Extended dashboard component
101
102
  - [DXRepeater](/components/extended/dxrepeater): Repeatable nested sub-form (field array) primitive
103
+ - [DXSaveButton](/components/extended/dxsavebutton): Extended dashboard component
102
104
  - [DXStatCard](/components/extended/dxstatcard): Extended dashboard component
103
105
  - [DXSwitch](/components/extended/dxswitch): Extended dashboard component
104
106
  - [DXTable](/components/extended/dxtable): Data table with pagination, filtering, and sorting
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnitend/dashboard-for-laravel",
3
- "version": "0.41.2",
3
+ "version": "0.42.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",