betterstart-cli 0.0.13 → 0.0.15
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/assets/adapters/next/plugins/blog/schemas/menus.json +51 -11
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar.tsx +7 -1
- package/dist/assets/adapters/next/templates/init/components/layouts/sidebar-branding.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid.tsx +107 -0
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table.tsx +58 -45
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/lifecycle-hooks-tab.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/snippets-tab.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog-content.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/sort-indicator.tsx +7 -3
- package/dist/assets/adapters/next/templates/init/data/navigation.ts +2 -0
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-table-button.ts +85 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/get-audit-logs.ts +41 -16
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/index.ts +2 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/types.ts +5 -0
- package/dist/assets/adapters/next/templates/init/lib/lifecycle-hooks/runner.ts +2 -1
- package/dist/assets/adapters/next/templates/init/lib/lifecycle-hooks/types.ts +2 -1
- package/dist/assets/adapters/next/templates/init/pages/audit-log/audit-log-detail-drawer.tsx +51 -43
- package/dist/assets/adapters/next/templates/init/pages/audit-log/audit-log-detail-row.tsx +2 -4
- package/dist/assets/adapters/next/templates/init/pages/audit-log/audit-log-page-content.tsx +465 -179
- package/dist/assets/adapters/next/templates/init/pages/audit-log/audit-log-page-skeleton.tsx +3 -15
- package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/forgot-password-page-skeleton.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/login-page-skeleton.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/reset-password-page-skeleton.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/users/users-page-content.tsx +83 -2
- package/dist/assets/adapters/next/templates/init/pages/users/users-table.tsx +126 -78
- package/dist/assets/adapters/next/templates/init/utils/editor/tiptap.ts +7 -8
- package/dist/assets/adapters/next/templates/init/utils/form/list-field.ts +17 -0
- package/dist/assets/adapters/next/templates/init/utils/user/user.ts +70 -0
- package/dist/assets/shared-assets/react-admin/custom/content-editor/math-bubble-menu.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +0 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/table-button.tsx +17 -65
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-control-popover.tsx +3 -8
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-popover.tsx +1 -2
- package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/dynamic-list-field.tsx +20 -8
- package/dist/assets/shared-assets/react-admin/custom/gallery-field.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/media-gallery-field.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +211 -0
- package/dist/assets/shared-assets/react-admin/custom/placeholder-card.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/placeholder.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/sortable-gallery-item.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/schema.json +136 -0
- package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/alert.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/card.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/chart.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/command.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +6 -6
- package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +6 -6
- package/dist/assets/shared-assets/react-admin/ui/empty.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/field.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/form.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/hover-card.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/item.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +7 -7
- package/dist/assets/shared-assets/react-admin/ui/navigation-menu.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/ui/popover.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/resizable.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/select.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/skeleton.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +1 -1
- package/dist/cli.js +2701 -1654
- package/dist/cli.js.map +1 -1
- package/package.json +10 -2
- package/dist/assets/adapters/next/templates/init/pages/audit-log/audit-log-filters.tsx +0 -152
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "betterstart-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.15",
|
|
4
4
|
"description": "Scaffold a plugin-based Admin into any Next.js 16 application",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -21,11 +21,14 @@
|
|
|
21
21
|
"build": "tsup",
|
|
22
22
|
"dev": "tsup --watch",
|
|
23
23
|
"test": "vitest run",
|
|
24
|
+
"test:e2e": "pnpm build && vitest run --config vitest.e2e.config.ts",
|
|
25
|
+
"test:coverage": "node scripts/run-coverage.mjs",
|
|
26
|
+
"test:all": "pnpm test:coverage",
|
|
24
27
|
"check:boundaries": "tsx ../../scripts/check-cli-boundaries.ts",
|
|
25
28
|
"typecheck": "tsc --noEmit && pnpm check:boundaries",
|
|
26
29
|
"lint": "biome check",
|
|
27
30
|
"lint:fix": "biome check --write --unsafe",
|
|
28
|
-
"release": "pnpm lint && pnpm typecheck && pnpm
|
|
31
|
+
"release": "pnpm lint && pnpm typecheck && pnpm build && npm version patch --no-git-tag-version && npm publish"
|
|
29
32
|
},
|
|
30
33
|
"keywords": [
|
|
31
34
|
"admin",
|
|
@@ -67,6 +70,11 @@
|
|
|
67
70
|
"devDependencies": {
|
|
68
71
|
"@types/fs-extra": "^11.0.4",
|
|
69
72
|
"@types/node": "^25.0.3",
|
|
73
|
+
"@vitest/coverage-v8": "^4.1.6",
|
|
74
|
+
"c8": "^11.0.0",
|
|
75
|
+
"istanbul-lib-coverage": "^3.2.2",
|
|
76
|
+
"istanbul-lib-report": "^3.0.1",
|
|
77
|
+
"istanbul-reports": "^3.2.0",
|
|
70
78
|
"tsup": "^8.5.1",
|
|
71
79
|
"typescript": "^5.9.3",
|
|
72
80
|
"vitest": "^4.1.6"
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
AUDIT_LOG_ACTIONS,
|
|
5
|
-
AUDIT_LOG_CATEGORIES,
|
|
6
|
-
type AuditLogAction,
|
|
7
|
-
type AuditLogCategory
|
|
8
|
-
} from '@admin/actions/audit/types'
|
|
9
|
-
import { Button } from '@admin/components/ui/button'
|
|
10
|
-
import { Input } from '@admin/components/ui/input'
|
|
11
|
-
import {
|
|
12
|
-
Select,
|
|
13
|
-
SelectContent,
|
|
14
|
-
SelectItem,
|
|
15
|
-
SelectTrigger,
|
|
16
|
-
SelectValue
|
|
17
|
-
} from '@admin/components/ui/select'
|
|
18
|
-
import { RotateCcw } from 'lucide-react'
|
|
19
|
-
|
|
20
|
-
const ALL_FILTER_VALUE = '_all'
|
|
21
|
-
|
|
22
|
-
interface AuditLogFiltersProps {
|
|
23
|
-
search: string
|
|
24
|
-
category: string
|
|
25
|
-
action: string
|
|
26
|
-
targetType: string
|
|
27
|
-
actor: string
|
|
28
|
-
createdAtFrom: string
|
|
29
|
-
createdAtTo: string
|
|
30
|
-
activeFilterCount: number
|
|
31
|
-
onSearchChange: (value: string) => void
|
|
32
|
-
onCategoryChange: (value: AuditLogCategory | '') => void
|
|
33
|
-
onActionChange: (value: AuditLogAction | '') => void
|
|
34
|
-
onTargetTypeChange: (value: string) => void
|
|
35
|
-
onActorChange: (value: string) => void
|
|
36
|
-
onCreatedAtFromChange: (value: string) => void
|
|
37
|
-
onCreatedAtToChange: (value: string) => void
|
|
38
|
-
onClear: () => void
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function formatFilterLabel(value: string): string {
|
|
42
|
-
return value
|
|
43
|
-
.split('_')
|
|
44
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
45
|
-
.join(' ')
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function AuditLogFilters({
|
|
49
|
-
search,
|
|
50
|
-
category,
|
|
51
|
-
action,
|
|
52
|
-
targetType,
|
|
53
|
-
actor,
|
|
54
|
-
createdAtFrom,
|
|
55
|
-
createdAtTo,
|
|
56
|
-
activeFilterCount,
|
|
57
|
-
onSearchChange,
|
|
58
|
-
onCategoryChange,
|
|
59
|
-
onActionChange,
|
|
60
|
-
onTargetTypeChange,
|
|
61
|
-
onActorChange,
|
|
62
|
-
onCreatedAtFromChange,
|
|
63
|
-
onCreatedAtToChange,
|
|
64
|
-
onClear
|
|
65
|
-
}: AuditLogFiltersProps) {
|
|
66
|
-
return (
|
|
67
|
-
<div className="flex flex-col gap-2 border-b border-border bg-background px-4 py-3">
|
|
68
|
-
<div className="grid gap-2 md:grid-cols-[minmax(180px,1.2fr)_repeat(5,minmax(132px,1fr))_auto]">
|
|
69
|
-
<Input
|
|
70
|
-
value={search}
|
|
71
|
-
onChange={(event) => onSearchChange(event.target.value)}
|
|
72
|
-
placeholder="Search logs"
|
|
73
|
-
className="h-8"
|
|
74
|
-
/>
|
|
75
|
-
<Select
|
|
76
|
-
value={category || ALL_FILTER_VALUE}
|
|
77
|
-
onValueChange={(value) =>
|
|
78
|
-
onCategoryChange(value === ALL_FILTER_VALUE ? '' : (value as AuditLogCategory))
|
|
79
|
-
}
|
|
80
|
-
>
|
|
81
|
-
<SelectTrigger className="h-8">
|
|
82
|
-
<SelectValue placeholder="Category" />
|
|
83
|
-
</SelectTrigger>
|
|
84
|
-
<SelectContent>
|
|
85
|
-
<SelectItem value={ALL_FILTER_VALUE}>All categories</SelectItem>
|
|
86
|
-
{AUDIT_LOG_CATEGORIES.map((value) => (
|
|
87
|
-
<SelectItem key={value} value={value}>
|
|
88
|
-
{formatFilterLabel(value)}
|
|
89
|
-
</SelectItem>
|
|
90
|
-
))}
|
|
91
|
-
</SelectContent>
|
|
92
|
-
</Select>
|
|
93
|
-
<Select
|
|
94
|
-
value={action || ALL_FILTER_VALUE}
|
|
95
|
-
onValueChange={(value) =>
|
|
96
|
-
onActionChange(value === ALL_FILTER_VALUE ? '' : (value as AuditLogAction))
|
|
97
|
-
}
|
|
98
|
-
>
|
|
99
|
-
<SelectTrigger className="h-8">
|
|
100
|
-
<SelectValue placeholder="Action" />
|
|
101
|
-
</SelectTrigger>
|
|
102
|
-
<SelectContent>
|
|
103
|
-
<SelectItem value={ALL_FILTER_VALUE}>All actions</SelectItem>
|
|
104
|
-
{AUDIT_LOG_ACTIONS.map((value) => (
|
|
105
|
-
<SelectItem key={value} value={value}>
|
|
106
|
-
{formatFilterLabel(value)}
|
|
107
|
-
</SelectItem>
|
|
108
|
-
))}
|
|
109
|
-
</SelectContent>
|
|
110
|
-
</Select>
|
|
111
|
-
<Input
|
|
112
|
-
value={targetType}
|
|
113
|
-
onChange={(event) => onTargetTypeChange(event.target.value)}
|
|
114
|
-
placeholder="Target type"
|
|
115
|
-
className="h-8"
|
|
116
|
-
/>
|
|
117
|
-
<Input
|
|
118
|
-
value={actor}
|
|
119
|
-
onChange={(event) => onActorChange(event.target.value)}
|
|
120
|
-
placeholder="Actor"
|
|
121
|
-
className="h-8"
|
|
122
|
-
/>
|
|
123
|
-
<div className="grid grid-cols-2 gap-2 md:col-span-2">
|
|
124
|
-
<Input
|
|
125
|
-
type="date"
|
|
126
|
-
value={createdAtFrom}
|
|
127
|
-
onChange={(event) => onCreatedAtFromChange(event.target.value)}
|
|
128
|
-
className="h-8"
|
|
129
|
-
aria-label="Audit log start date"
|
|
130
|
-
/>
|
|
131
|
-
<Input
|
|
132
|
-
type="date"
|
|
133
|
-
value={createdAtTo}
|
|
134
|
-
onChange={(event) => onCreatedAtToChange(event.target.value)}
|
|
135
|
-
className="h-8"
|
|
136
|
-
aria-label="Audit log end date"
|
|
137
|
-
/>
|
|
138
|
-
</div>
|
|
139
|
-
<Button
|
|
140
|
-
type="button"
|
|
141
|
-
variant="outline"
|
|
142
|
-
size="icon-sm"
|
|
143
|
-
disabled={activeFilterCount === 0}
|
|
144
|
-
onClick={onClear}
|
|
145
|
-
aria-label="Clear audit log filters"
|
|
146
|
-
>
|
|
147
|
-
<RotateCcw />
|
|
148
|
-
</Button>
|
|
149
|
-
</div>
|
|
150
|
-
</div>
|
|
151
|
-
)
|
|
152
|
-
}
|