@omnitend/dashboard-for-laravel 0.28.0 → 0.29.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/charts.d.ts +19 -0
- package/dist/charts.js +225 -0
- package/dist/charts.js.map +1 -0
- package/dist/charts.umd.cjs +2 -0
- package/dist/charts.umd.cjs.map +1 -0
- package/dist/components/base/DAlert.vue.d.ts +6 -1
- package/dist/components/base/DFormCheckboxGroup.vue.d.ts +12 -0
- package/dist/components/extended/DXDashboardSidebar.vue.d.ts +2 -2
- package/dist/components/extended/DXField.vue.d.ts +4 -4
- package/dist/components/extended/DXForm.vue.d.ts +1 -1
- package/dist/dashboard-for-laravel.js +4371 -4554
- 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 +1 -3
- package/dist/style.css +1 -1
- package/dist/types/index.d.ts +1 -1
- package/docs/public/api-reference.json +33 -4
- package/docs/public/docs-map.md +1 -1
- package/docs/public/llms.txt +3 -2
- package/package.json +11 -5
- package/resources/css/theme.scss +21 -7
- package/resources/js/charts.ts +19 -0
- package/resources/js/components/base/DAlert.vue +19 -1
- package/resources/js/components/base/DFormCheckboxGroup.vue +22 -0
- package/resources/js/components/charts/DXBarChart.vue +0 -9
- package/resources/js/components/charts/DXDoughnutChart.vue +0 -9
- package/resources/js/components/charts/DXLineChart.vue +0 -9
- package/resources/js/components/extended/DXField.vue +12 -0
- package/resources/js/composables/useForm.ts +10 -1
- package/resources/js/index.ts +4 -3
- package/resources/js/types/index.ts +1 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generated": "2026-07-
|
|
2
|
+
"generated": "2026-07-19T09:16:53.630Z",
|
|
3
3
|
"package": {
|
|
4
4
|
"name": "@omnitend/dashboard-for-laravel",
|
|
5
5
|
"version": "0.28.0"
|
|
@@ -53,7 +53,15 @@
|
|
|
53
53
|
"category": "base",
|
|
54
54
|
"filePath": "resources/js/components/base/DAlert.vue",
|
|
55
55
|
"description": "",
|
|
56
|
-
"props": [
|
|
56
|
+
"props": [
|
|
57
|
+
{
|
|
58
|
+
"name": "modelValue",
|
|
59
|
+
"type": "union",
|
|
60
|
+
"required": false,
|
|
61
|
+
"default": "true",
|
|
62
|
+
"description": ""
|
|
63
|
+
}
|
|
64
|
+
],
|
|
57
65
|
"events": [],
|
|
58
66
|
"slots": [
|
|
59
67
|
{
|
|
@@ -481,6 +489,27 @@
|
|
|
481
489
|
],
|
|
482
490
|
"methods": []
|
|
483
491
|
},
|
|
492
|
+
{
|
|
493
|
+
"name": "DFormCheckboxGroup",
|
|
494
|
+
"category": "base",
|
|
495
|
+
"filePath": "resources/js/components/base/DFormCheckboxGroup.vue",
|
|
496
|
+
"description": "Type-safe wrapper around Bootstrap Vue Next BFormCheckboxGroup component. Renders a group of checkboxes from an `options` array (or slot content); the `v-model` is the ARRAY of checked option values (\"pick any of N\").",
|
|
497
|
+
"props": [],
|
|
498
|
+
"events": [],
|
|
499
|
+
"slots": [
|
|
500
|
+
{
|
|
501
|
+
"name": "name",
|
|
502
|
+
"description": "",
|
|
503
|
+
"bindings": [
|
|
504
|
+
{
|
|
505
|
+
"name": "name",
|
|
506
|
+
"title": "binding"
|
|
507
|
+
}
|
|
508
|
+
]
|
|
509
|
+
}
|
|
510
|
+
],
|
|
511
|
+
"methods": []
|
|
512
|
+
},
|
|
484
513
|
{
|
|
485
514
|
"name": "DFormGroup",
|
|
486
515
|
"category": "base",
|
|
@@ -3481,8 +3510,8 @@
|
|
|
3481
3510
|
]
|
|
3482
3511
|
},
|
|
3483
3512
|
"stats": {
|
|
3484
|
-
"totalComponents":
|
|
3485
|
-
"baseComponents":
|
|
3513
|
+
"totalComponents": 76,
|
|
3514
|
+
"baseComponents": 57,
|
|
3486
3515
|
"extendedComponents": 19
|
|
3487
3516
|
}
|
|
3488
3517
|
}
|
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-19T09:16:53.689Z
|
|
5
5
|
|
|
6
6
|
This file provides a complete map of all available documentation for AI agents and developers.
|
|
7
7
|
|
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 69 Vue 3 components for building Laravel dashboards with Bootstrap Vue Next.
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
- [Theming](/guide/theming): Customize appearance with CSS variables
|
|
20
20
|
- [TypeScript](/guide/typescript): TypeScript types and best practices
|
|
21
21
|
|
|
22
|
-
## Base Components (
|
|
22
|
+
## Base Components (57 components)
|
|
23
23
|
|
|
24
24
|
Lightweight type-safe wrappers around Bootstrap Vue Next components providing API stability and consistent theming.
|
|
25
25
|
|
|
@@ -43,6 +43,7 @@ Lightweight type-safe wrappers around Bootstrap Vue Next components providing AP
|
|
|
43
43
|
- [DDropdownItem](/components/base/ddropdownitem): Bootstrap Vue Next DropdownItem wrapper
|
|
44
44
|
- [DForm](/components/base/dform): Bootstrap Vue Next Form wrapper
|
|
45
45
|
- [DFormCheckbox](/components/base/dformcheckbox): Bootstrap Vue Next FormCheckbox wrapper
|
|
46
|
+
- [DFormCheckboxGroup](/components/base/dformcheckboxgroup): Bootstrap Vue Next FormCheckboxGroup wrapper
|
|
46
47
|
- [DFormGroup](/components/base/dformgroup): Bootstrap Vue Next FormGroup wrapper
|
|
47
48
|
- [DFormInput](/components/base/dforminput): Bootstrap Vue Next FormInput wrapper
|
|
48
49
|
- [DFormInvalidFeedback](/components/base/dforminvalidfeedback): Bootstrap Vue Next FormInvalidFeedback wrapper
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omnitend/dashboard-for-laravel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.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",
|
|
@@ -15,6 +15,11 @@
|
|
|
15
15
|
"import": "./dist/dashboard-for-laravel.js",
|
|
16
16
|
"require": "./dist/dashboard-for-laravel.umd.cjs"
|
|
17
17
|
},
|
|
18
|
+
"./charts": {
|
|
19
|
+
"types": "./dist/charts.d.ts",
|
|
20
|
+
"import": "./dist/charts.js",
|
|
21
|
+
"require": "./dist/charts.umd.cjs"
|
|
22
|
+
},
|
|
18
23
|
"./style.css": "./dist/style.css",
|
|
19
24
|
"./theme.css": "./dist/style.css",
|
|
20
25
|
"./theme.scss": "./resources/css/theme.scss"
|
|
@@ -29,13 +34,14 @@
|
|
|
29
34
|
],
|
|
30
35
|
"scripts": {
|
|
31
36
|
"dev": "vite build --watch",
|
|
32
|
-
"build": "vite build && node scripts/extract-icon-font.mjs
|
|
37
|
+
"build:lib": "vite build && vite build --config vite.config.charts.ts && node scripts/extract-icon-font.mjs",
|
|
38
|
+
"build": "npm run build:lib && vue-tsc --declaration --emitDeclarationOnly --outDir dist",
|
|
33
39
|
"typecheck": "vue-tsc --noEmit",
|
|
34
|
-
"pretest": "
|
|
40
|
+
"pretest": "npm run build:lib",
|
|
35
41
|
"test": "vitest",
|
|
36
|
-
"pretest:ui": "
|
|
42
|
+
"pretest:ui": "npm run build:lib",
|
|
37
43
|
"test:ui": "vitest --ui",
|
|
38
|
-
"pretest:headless": "
|
|
44
|
+
"pretest:headless": "npm run build:lib",
|
|
39
45
|
"test:headless": "vitest --run --browser.headless",
|
|
40
46
|
"docs:dev": "astro dev",
|
|
41
47
|
"docs:build": "npm run docs:generate:ai && astro build && node scripts/check-docs-base-links.mjs",
|
package/resources/css/theme.scss
CHANGED
|
@@ -436,14 +436,17 @@ $bootstrap-icons-font-src: url("bootstrap-icons/font/fonts/bootstrap-icons.woff2
|
|
|
436
436
|
|
|
437
437
|
// Semantic variants: subtle tinted surface, driven through the CSS variable
|
|
438
438
|
// the base `.toast` rule (above, and Bootstrap's own) already reads.
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
)
|
|
439
|
+
//
|
|
440
|
+
// Sourced from each variant's `soft-bg` in $dx-variants (#143) — the same
|
|
441
|
+
// vivid-derived soft family badges/alerts use — so the toast hue tracks the
|
|
442
|
+
// palette and editing a `soft-bg` moves toasts too. Previously these mixed the
|
|
443
|
+
// dark *emphasis* base colours (greyer success/warning) and danger's saturated
|
|
444
|
+
// red (a pink, not the soft system's plum). Mixed 50% with white so a large
|
|
445
|
+
// toast surface stays fainter than a small badge while keeping the hue.
|
|
446
|
+
@each $name in ("success", "danger", "warning", "info") {
|
|
447
|
+
$variant: map.get($dx-variants, $name);
|
|
445
448
|
&.toast-#{$name} {
|
|
446
|
-
--bs-toast-bg: #{color.mix($
|
|
449
|
+
--bs-toast-bg: #{color.mix(map.get($variant, "soft-bg"), $white, 50%)};
|
|
447
450
|
}
|
|
448
451
|
}
|
|
449
452
|
}
|
|
@@ -581,6 +584,17 @@ $dx-chart-palette: (#2563eb, #65a30d, #7c3aed, #0d9488, #ea580c, #0891b2, #d9770
|
|
|
581
584
|
}
|
|
582
585
|
}
|
|
583
586
|
|
|
587
|
+
// The chart container used by DXBarChart/DXLineChart/DXDoughnutChart (shipped
|
|
588
|
+
// from the `@omnitend/dashboard-for-laravel/charts` entry, #142). Global rather
|
|
589
|
+
// than a component scoped style so the charts entry emits NO CSS — chart
|
|
590
|
+
// consumers already import this stylesheet for the theme + palette variables.
|
|
591
|
+
.dx-chart {
|
|
592
|
+
position: relative;
|
|
593
|
+
width: 100%;
|
|
594
|
+
height: 100%;
|
|
595
|
+
min-height: 240px;
|
|
596
|
+
}
|
|
597
|
+
|
|
584
598
|
// ----------------------------------------------------------------------------
|
|
585
599
|
// Autocomplete
|
|
586
600
|
// ----------------------------------------------------------------------------
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chart entry point — `@omnitend/dashboard-for-laravel/charts` (#142).
|
|
3
|
+
*
|
|
4
|
+
* The chart components are the ONLY ones that need `chart.js` / `vue-chartjs`,
|
|
5
|
+
* so they live behind this separate subpath entry. The main entry
|
|
6
|
+
* (`@omnitend/dashboard-for-laravel`) never references the chart libraries, so
|
|
7
|
+
* they are genuinely OPTIONAL peers: a consumer that renders no charts installs
|
|
8
|
+
* neither and their build no longer fails resolving them.
|
|
9
|
+
*
|
|
10
|
+
* import { DXBarChart } from '@omnitend/dashboard-for-laravel/charts';
|
|
11
|
+
*
|
|
12
|
+
* Chart containers are styled by `.dx-chart` in the main stylesheet
|
|
13
|
+
* (`@omnitend/dashboard-for-laravel/style.css`), which chart consumers already
|
|
14
|
+
* import for the theme and the `--dx-chart-*` palette variables — so this entry
|
|
15
|
+
* ships no CSS of its own.
|
|
16
|
+
*/
|
|
17
|
+
export { default as DXBarChart } from "./components/charts/DXBarChart.vue";
|
|
18
|
+
export { default as DXLineChart } from "./components/charts/DXLineChart.vue";
|
|
19
|
+
export { default as DXDoughnutChart } from "./components/charts/DXDoughnutChart.vue";
|
|
@@ -2,11 +2,29 @@
|
|
|
2
2
|
import { BAlert } from "bootstrap-vue-next";
|
|
3
3
|
import { useSlots } from "vue";
|
|
4
4
|
|
|
5
|
+
/*
|
|
6
|
+
* bootstrap-vue-next's BAlert defaults `modelValue` to `false`, so a bare static
|
|
7
|
+
* `<DAlert variant="info">…</DAlert>` silently renders NOTHING — a footgun that
|
|
8
|
+
* bit our own docs repeatedly (#144). Default it to `true` (visible) at the
|
|
9
|
+
* wrapper; every call site that already passes `v-model`/`:model-value` is
|
|
10
|
+
* unaffected — only the bare-static case (which was always a bug) changes.
|
|
11
|
+
*
|
|
12
|
+
* Care (see DIVERGENCES.md): declaring `modelValue` as a prop strips it from
|
|
13
|
+
* `$attrs`, so it is re-bound explicitly below. `emits` is left UNDECLARED so an
|
|
14
|
+
* `update:modelValue` listener keeps flowing through `$attrs` to BAlert — that's
|
|
15
|
+
* what lets `v-model` dismissal (and the auto-dismiss countdown) still
|
|
16
|
+
* round-trip. The type stays `boolean | number` (a number is the auto-dismiss
|
|
17
|
+
* duration in ms) — don't narrow it.
|
|
18
|
+
*/
|
|
19
|
+
const props = withDefaults(defineProps<{ modelValue?: boolean | number }>(), {
|
|
20
|
+
modelValue: true,
|
|
21
|
+
});
|
|
22
|
+
|
|
5
23
|
const slots = useSlots();
|
|
6
24
|
</script>
|
|
7
25
|
|
|
8
26
|
<template>
|
|
9
|
-
<BAlert v-bind="$attrs">
|
|
27
|
+
<BAlert :model-value="props.modelValue" v-bind="$attrs">
|
|
10
28
|
<template v-for="(_, name) in slots" :key="name" #[name]>
|
|
11
29
|
<slot :name="name" />
|
|
12
30
|
</template>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @component
|
|
3
|
+
* Type-safe wrapper around Bootstrap Vue Next BFormCheckboxGroup component.
|
|
4
|
+
* Renders a group of checkboxes from an `options` array (or slot content); the
|
|
5
|
+
* `v-model` is the ARRAY of checked option values ("pick any of N").
|
|
6
|
+
*/
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import { BFormCheckboxGroup } from "bootstrap-vue-next";
|
|
9
|
+
|
|
10
|
+
defineOptions({
|
|
11
|
+
inheritAttrs: false,
|
|
12
|
+
});
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<BFormCheckboxGroup v-bind="$attrs">
|
|
17
|
+
<!-- Dynamically pass through all named slots with their props -->
|
|
18
|
+
<template v-for="(_, name) in $slots" :key="name" #[name]="slotProps">
|
|
19
|
+
<slot :name="name" v-bind="slotProps" />
|
|
20
|
+
</template>
|
|
21
|
+
</BFormCheckboxGroup>
|
|
22
|
+
</template>
|
|
@@ -370,6 +370,17 @@
|
|
|
370
370
|
v-bind="controlPropsWithGuards"
|
|
371
371
|
/>
|
|
372
372
|
|
|
373
|
+
<!-- Checkbox group: "pick any of N" — the model is an ARRAY of the
|
|
374
|
+
checked option values (default the field to []). -->
|
|
375
|
+
<DFormCheckboxGroup
|
|
376
|
+
v-else-if="field.type === 'checkbox-group'"
|
|
377
|
+
v-model="fieldValue"
|
|
378
|
+
:options="resolvedOptions"
|
|
379
|
+
:state="fieldState"
|
|
380
|
+
:disabled="isDisabled || isReadonly || isPlaintext"
|
|
381
|
+
v-bind="controlPropsWithGuards"
|
|
382
|
+
/>
|
|
383
|
+
|
|
373
384
|
<!-- File / image upload -->
|
|
374
385
|
<div v-else-if="field.type === 'image' || field.type === 'file'">
|
|
375
386
|
<DFormInput
|
|
@@ -554,6 +565,7 @@ import DFormInput from "../base/DFormInput.vue";
|
|
|
554
565
|
import DFormTextarea from "../base/DFormTextarea.vue";
|
|
555
566
|
import DFormSelect from "../base/DFormSelect.vue";
|
|
556
567
|
import DFormRadioGroup from "../base/DFormRadioGroup.vue";
|
|
568
|
+
import DFormCheckboxGroup from "../base/DFormCheckboxGroup.vue";
|
|
557
569
|
import DFormCheckbox from "../base/DFormCheckbox.vue";
|
|
558
570
|
import DXSwitch from "./DXSwitch.vue";
|
|
559
571
|
import DFormInvalidFeedback from "../base/DFormInvalidFeedback.vue";
|
|
@@ -255,7 +255,16 @@ export function useForm<TData extends Record<string, any>>(
|
|
|
255
255
|
|
|
256
256
|
const payloadRaw = (
|
|
257
257
|
options.transform
|
|
258
|
-
?
|
|
258
|
+
? // Give `transform` a COPY of the form data (#150), so a transform
|
|
259
|
+
// that MUTATES what it receives — `data.allergens = assemble();
|
|
260
|
+
// return data` — shapes the outbound payload WITHOUT corrupting
|
|
261
|
+
// form state. (This is why consumers reach for a transform instead
|
|
262
|
+
// of mutating `form.data` in a validation guard.) A shallow copy:
|
|
263
|
+
// returning a new object is still the tidiest style, and a
|
|
264
|
+
// deeply-nested field should be replaced, not mutated in place.
|
|
265
|
+
options.transform({
|
|
266
|
+
...(toRaw(state.data) as Record<string, any>),
|
|
267
|
+
} as TData)
|
|
259
268
|
: (state.data as TData)
|
|
260
269
|
) as any;
|
|
261
270
|
|
package/resources/js/index.ts
CHANGED
|
@@ -11,9 +11,9 @@ export { default as DXField } from "./components/extended/DXField.vue";
|
|
|
11
11
|
export { default as DXFieldLabel } from "./components/extended/DXFieldLabel.vue";
|
|
12
12
|
export { default as DXSwitch } from "./components/extended/DXSwitch.vue";
|
|
13
13
|
export { default as DXStatCard } from "./components/extended/DXStatCard.vue";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
// Chart components moved to the `@omnitend/dashboard-for-laravel/charts` entry
|
|
15
|
+
// (#142) so chart.js / vue-chartjs stay genuinely optional peers — the main
|
|
16
|
+
// entry no longer references them. See resources/js/charts.ts.
|
|
17
17
|
export { default as DXRepeater } from "./components/extended/DXRepeater.vue";
|
|
18
18
|
/**
|
|
19
19
|
* @deprecated Use `DXForm`. `DXBasicForm` is a thin wrapper around `DXForm`
|
|
@@ -53,6 +53,7 @@ export { default as DDropdownDivider } from "./components/base/DDropdownDivider.
|
|
|
53
53
|
export { default as DDropdownItem } from "./components/base/DDropdownItem.vue";
|
|
54
54
|
export { default as DForm } from "./components/base/DForm.vue";
|
|
55
55
|
export { default as DFormCheckbox } from "./components/base/DFormCheckbox.vue";
|
|
56
|
+
export { default as DFormCheckboxGroup } from "./components/base/DFormCheckboxGroup.vue";
|
|
56
57
|
export { default as DFormGroup } from "./components/base/DFormGroup.vue";
|
|
57
58
|
export { default as DFormInput } from "./components/base/DFormInput.vue";
|
|
58
59
|
export { default as DFormInvalidFeedback } from "./components/base/DFormInvalidFeedback.vue";
|