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.
Files changed (76) hide show
  1. package/dist/assets/adapters/next/plugins/blog/schemas/menus.json +51 -11
  2. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar.tsx +7 -1
  3. package/dist/assets/adapters/next/templates/init/components/layouts/sidebar-branding.tsx +1 -1
  4. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid.tsx +107 -0
  5. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table.tsx +58 -45
  6. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/lifecycle-hooks-tab.tsx +3 -3
  7. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/snippets-tab.tsx +1 -1
  8. package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +1 -1
  9. package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog-content.tsx +2 -2
  10. package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx +1 -1
  11. package/dist/assets/adapters/next/templates/init/components/shared/sort-indicator.tsx +7 -3
  12. package/dist/assets/adapters/next/templates/init/data/navigation.ts +2 -0
  13. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-table-button.ts +85 -0
  14. package/dist/assets/adapters/next/templates/init/lib/actions/audit/get-audit-logs.ts +41 -16
  15. package/dist/assets/adapters/next/templates/init/lib/actions/audit/index.ts +2 -0
  16. package/dist/assets/adapters/next/templates/init/lib/actions/audit/types.ts +5 -0
  17. package/dist/assets/adapters/next/templates/init/lib/lifecycle-hooks/runner.ts +2 -1
  18. package/dist/assets/adapters/next/templates/init/lib/lifecycle-hooks/types.ts +2 -1
  19. package/dist/assets/adapters/next/templates/init/pages/audit-log/audit-log-detail-drawer.tsx +51 -43
  20. package/dist/assets/adapters/next/templates/init/pages/audit-log/audit-log-detail-row.tsx +2 -4
  21. package/dist/assets/adapters/next/templates/init/pages/audit-log/audit-log-page-content.tsx +465 -179
  22. package/dist/assets/adapters/next/templates/init/pages/audit-log/audit-log-page-skeleton.tsx +3 -15
  23. package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +1 -1
  24. package/dist/assets/adapters/next/templates/init/pages/forgot-password-page-skeleton.tsx +1 -1
  25. package/dist/assets/adapters/next/templates/init/pages/login-page-skeleton.tsx +1 -1
  26. package/dist/assets/adapters/next/templates/init/pages/reset-password-page-skeleton.tsx +1 -1
  27. package/dist/assets/adapters/next/templates/init/pages/users/users-page-content.tsx +83 -2
  28. package/dist/assets/adapters/next/templates/init/pages/users/users-table.tsx +126 -78
  29. package/dist/assets/adapters/next/templates/init/utils/editor/tiptap.ts +7 -8
  30. package/dist/assets/adapters/next/templates/init/utils/form/list-field.ts +17 -0
  31. package/dist/assets/adapters/next/templates/init/utils/user/user.ts +70 -0
  32. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-bubble-menu.tsx +1 -1
  33. package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +1 -1
  34. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +0 -2
  35. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-button.tsx +17 -65
  36. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-control-popover.tsx +3 -8
  37. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-popover.tsx +1 -2
  38. package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +1 -1
  39. package/dist/assets/shared-assets/react-admin/custom/dynamic-list-field.tsx +20 -8
  40. package/dist/assets/shared-assets/react-admin/custom/gallery-field.tsx +2 -2
  41. package/dist/assets/shared-assets/react-admin/custom/media-gallery-field.tsx +2 -2
  42. package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +211 -0
  43. package/dist/assets/shared-assets/react-admin/custom/placeholder-card.tsx +1 -1
  44. package/dist/assets/shared-assets/react-admin/custom/placeholder.tsx +1 -1
  45. package/dist/assets/shared-assets/react-admin/custom/sortable-gallery-item.tsx +1 -1
  46. package/dist/assets/shared-assets/react-admin/schema.json +136 -0
  47. package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +1 -1
  48. package/dist/assets/shared-assets/react-admin/ui/alert.tsx +1 -1
  49. package/dist/assets/shared-assets/react-admin/ui/card.tsx +2 -2
  50. package/dist/assets/shared-assets/react-admin/ui/chart.tsx +1 -1
  51. package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +1 -1
  52. package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +2 -2
  53. package/dist/assets/shared-assets/react-admin/ui/command.tsx +1 -1
  54. package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +6 -6
  55. package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +2 -2
  56. package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +6 -6
  57. package/dist/assets/shared-assets/react-admin/ui/empty.tsx +2 -2
  58. package/dist/assets/shared-assets/react-admin/ui/field.tsx +1 -1
  59. package/dist/assets/shared-assets/react-admin/ui/form.tsx +1 -1
  60. package/dist/assets/shared-assets/react-admin/ui/hover-card.tsx +1 -1
  61. package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +1 -1
  62. package/dist/assets/shared-assets/react-admin/ui/item.tsx +2 -2
  63. package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +7 -7
  64. package/dist/assets/shared-assets/react-admin/ui/navigation-menu.tsx +4 -4
  65. package/dist/assets/shared-assets/react-admin/ui/popover.tsx +1 -1
  66. package/dist/assets/shared-assets/react-admin/ui/resizable.tsx +1 -1
  67. package/dist/assets/shared-assets/react-admin/ui/select.tsx +2 -2
  68. package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +3 -3
  69. package/dist/assets/shared-assets/react-admin/ui/skeleton.tsx +1 -1
  70. package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +2 -2
  71. package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +1 -1
  72. package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +1 -1
  73. package/dist/cli.js +2701 -1654
  74. package/dist/cli.js.map +1 -1
  75. package/package.json +10 -2
  76. 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.13",
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 test && pnpm build && npm version patch --no-git-tag-version && npm publish"
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
- }