@carlonicora/nextjs-jsonapi 1.18.0 → 1.19.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 (76) hide show
  1. package/dist/{BlockNoteEditor-6TWTNHNZ.mjs → BlockNoteEditor-BQ5WWVUF.mjs} +2 -2
  2. package/dist/{BlockNoteEditor-C3WWGGT6.js → BlockNoteEditor-IZR6TESC.js} +6 -6
  3. package/dist/{BlockNoteEditor-C3WWGGT6.js.map → BlockNoteEditor-IZR6TESC.js.map} +1 -1
  4. package/dist/{chunk-6U6QCSJK.js → chunk-FB535VUS.js} +39 -22
  5. package/dist/chunk-FB535VUS.js.map +1 -0
  6. package/dist/{chunk-UZDAPWJG.mjs → chunk-MVNVXOC6.mjs} +39 -22
  7. package/dist/chunk-MVNVXOC6.mjs.map +1 -0
  8. package/dist/client/index.js +2 -2
  9. package/dist/client/index.mjs +1 -1
  10. package/dist/components/index.js +2 -2
  11. package/dist/components/index.mjs +1 -1
  12. package/dist/contexts/index.js +2 -2
  13. package/dist/contexts/index.mjs +1 -1
  14. package/dist/scripts/generate-web-module/generator.d.ts.map +1 -1
  15. package/dist/scripts/generate-web-module/generator.js +5 -71
  16. package/dist/scripts/generate-web-module/generator.js.map +1 -1
  17. package/dist/scripts/generate-web-module/templates/components/selector.template.d.ts.map +1 -1
  18. package/dist/scripts/generate-web-module/templates/components/selector.template.js +1 -0
  19. package/dist/scripts/generate-web-module/templates/components/selector.template.js.map +1 -1
  20. package/dist/scripts/generate-web-module/templates/index.d.ts +0 -8
  21. package/dist/scripts/generate-web-module/templates/index.d.ts.map +1 -1
  22. package/dist/scripts/generate-web-module/templates/index.js +1 -18
  23. package/dist/scripts/generate-web-module/templates/index.js.map +1 -1
  24. package/package.json +1 -1
  25. package/scripts/generate-web-module/generator.ts +23 -111
  26. package/scripts/generate-web-module/templates/components/selector.template.ts +1 -0
  27. package/scripts/generate-web-module/templates/index.ts +0 -10
  28. package/src/features/role/components/forms/UserRoleAdd.tsx +1 -1
  29. package/src/features/user/components/forms/UserSelector.tsx +5 -1
  30. package/src/features/user/components/lists/UserListInAdd.tsx +1 -1
  31. package/src/features/user/components/widgets/UserSearchPopover.tsx +5 -1
  32. package/src/hooks/useDataListRetriever.ts +1 -0
  33. package/src/shadcnui/custom/multi-select.tsx +58 -55
  34. package/dist/chunk-6U6QCSJK.js.map +0 -1
  35. package/dist/chunk-UZDAPWJG.mjs.map +0 -1
  36. package/dist/scripts/generate-web-module/templates/project/bootstrapper.template.d.ts +0 -7
  37. package/dist/scripts/generate-web-module/templates/project/bootstrapper.template.d.ts.map +0 -1
  38. package/dist/scripts/generate-web-module/templates/project/bootstrapper.template.js +0 -141
  39. package/dist/scripts/generate-web-module/templates/project/bootstrapper.template.js.map +0 -1
  40. package/dist/scripts/generate-web-module/templates/project/env.template.d.ts +0 -7
  41. package/dist/scripts/generate-web-module/templates/project/env.template.d.ts.map +0 -1
  42. package/dist/scripts/generate-web-module/templates/project/env.template.js +0 -110
  43. package/dist/scripts/generate-web-module/templates/project/env.template.js.map +0 -1
  44. package/dist/scripts/generate-web-module/templates/project/main-layout.template.d.ts +0 -7
  45. package/dist/scripts/generate-web-module/templates/project/main-layout.template.d.ts.map +0 -1
  46. package/dist/scripts/generate-web-module/templates/project/main-layout.template.js +0 -101
  47. package/dist/scripts/generate-web-module/templates/project/main-layout.template.js.map +0 -1
  48. package/dist/scripts/generate-web-module/templates/project/middleware-env.template.d.ts +0 -7
  49. package/dist/scripts/generate-web-module/templates/project/middleware-env.template.d.ts.map +0 -1
  50. package/dist/scripts/generate-web-module/templates/project/middleware-env.template.js +0 -66
  51. package/dist/scripts/generate-web-module/templates/project/middleware-env.template.js.map +0 -1
  52. package/dist/scripts/generate-web-module/templates/project/settings-container.template.d.ts +0 -7
  53. package/dist/scripts/generate-web-module/templates/project/settings-container.template.d.ts.map +0 -1
  54. package/dist/scripts/generate-web-module/templates/project/settings-container.template.js +0 -257
  55. package/dist/scripts/generate-web-module/templates/project/settings-container.template.js.map +0 -1
  56. package/dist/scripts/generate-web-module/templates/project/settings-context.template.d.ts +0 -7
  57. package/dist/scripts/generate-web-module/templates/project/settings-context.template.d.ts.map +0 -1
  58. package/dist/scripts/generate-web-module/templates/project/settings-context.template.js +0 -124
  59. package/dist/scripts/generate-web-module/templates/project/settings-context.template.js.map +0 -1
  60. package/dist/scripts/generate-web-module/templates/project/settings-module-page.template.d.ts +0 -7
  61. package/dist/scripts/generate-web-module/templates/project/settings-module-page.template.d.ts.map +0 -1
  62. package/dist/scripts/generate-web-module/templates/project/settings-module-page.template.js +0 -78
  63. package/dist/scripts/generate-web-module/templates/project/settings-module-page.template.js.map +0 -1
  64. package/dist/scripts/generate-web-module/templates/project/settings-page.template.d.ts +0 -7
  65. package/dist/scripts/generate-web-module/templates/project/settings-page.template.d.ts.map +0 -1
  66. package/dist/scripts/generate-web-module/templates/project/settings-page.template.js +0 -75
  67. package/dist/scripts/generate-web-module/templates/project/settings-page.template.js.map +0 -1
  68. package/scripts/generate-web-module/templates/project/bootstrapper.template.ts +0 -108
  69. package/scripts/generate-web-module/templates/project/env.template.ts +0 -77
  70. package/scripts/generate-web-module/templates/project/main-layout.template.tsx +0 -68
  71. package/scripts/generate-web-module/templates/project/middleware-env.template.ts +0 -33
  72. package/scripts/generate-web-module/templates/project/settings-container.template.tsx +0 -224
  73. package/scripts/generate-web-module/templates/project/settings-context.template.tsx +0 -91
  74. package/scripts/generate-web-module/templates/project/settings-module-page.template.tsx +0 -45
  75. package/scripts/generate-web-module/templates/project/settings-page.template.tsx +0 -42
  76. /package/dist/{BlockNoteEditor-6TWTNHNZ.mjs.map → BlockNoteEditor-BQ5WWVUF.mjs.map} +0 -0
@@ -113,7 +113,7 @@ export function UserRoleAdd({ user, refresh }: UserRoleAddProps) {
113
113
  <CommandEmpty>{t(`generic.search.no_results`, { type: t(`types.roles`, { count: 1 }) })}</CommandEmpty>
114
114
  {roles.map((role: RoleInterface) => (
115
115
  <CommandItem
116
- className="cursor-pointer"
116
+ className="cursor-pointer hover:bg-muted data-selected:hover:bg-muted bg-transparent data-selected:bg-transparent"
117
117
  key={role.id}
118
118
  onSelect={() => addUserToRole(role)}
119
119
  onClick={() => addUserToRole(role)}
@@ -167,7 +167,11 @@ export function UserSelector({ id, form, label, placeholder, onChange, isRequire
167
167
  {data.data &&
168
168
  data.data.length > 0 &&
169
169
  (data.data as UserInterface[]).map((user: UserInterface) => (
170
- <CommandItem className="cursor-pointer" key={user.id} onSelect={() => setUser(user)}>
170
+ <CommandItem
171
+ className="cursor-pointer hover:bg-muted data-selected:hover:bg-muted bg-transparent data-selected:bg-transparent"
172
+ key={user.id}
173
+ onSelect={() => setUser(user)}
174
+ >
171
175
  <UserAvatar user={user} className={`mr-2 h-4 w-4`} />
172
176
  <span className="">{user.name}</span>
173
177
  </CommandItem>
@@ -26,7 +26,7 @@ export function UserListInAdd({ data, existingUsers, setSelectedUser, setLevelOp
26
26
  return (
27
27
  <React.Fragment key={user.id}>
28
28
  <CommandItem
29
- className="cursor-pointer"
29
+ className="cursor-pointer hover:bg-muted data-selected:hover:bg-muted bg-transparent data-selected:bg-transparent"
30
30
  key={user.id}
31
31
  onClick={(e) => {
32
32
  setSelectedUser(user);
@@ -69,7 +69,11 @@ export const UserSearchPopover = ({ children, onSelect, align = "start", classNa
69
69
  <CommandList>
70
70
  {users.length > 0 ? (
71
71
  users.map((user) => (
72
- <CommandItem key={user.id} className="cursor-pointer" onSelect={() => handleSelectUser(user.id)}>
72
+ <CommandItem
73
+ key={user.id}
74
+ className="cursor-pointer hover:bg-muted data-selected:hover:bg-muted bg-transparent data-selected:bg-transparent"
75
+ onSelect={() => handleSelectUser(user.id)}
76
+ >
73
77
  <UserAvatar user={user} className="mr-2 h-4 w-4" showLink={false} />
74
78
  <span>{user.name}</span>
75
79
  </CommandItem>
@@ -316,6 +316,7 @@ export function useDataListRetriever<T>(params: {
316
316
  const refresh = useCallback(async () => {
317
317
  setNextPage(undefined);
318
318
  setPreviousPage(undefined);
319
+ setData(undefined); // Clear stale data immediately before fetching new data
319
320
  fetchData({ isRefresh: true });
320
321
  }, [fetchData]);
321
322
 
@@ -4,6 +4,7 @@ import { cva, type VariantProps } from "class-variance-authority";
4
4
  import { CheckIcon, ChevronDown, WandSparkles, XCircle, XIcon } from "lucide-react";
5
5
  import * as React from "react";
6
6
 
7
+ import { cn } from "../../utils/cn";
7
8
  import { Badge } from "../ui/badge";
8
9
  import {
9
10
  Command,
@@ -16,7 +17,6 @@ import {
16
17
  } from "../ui/command";
17
18
  import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover";
18
19
  import { Separator } from "../ui/separator";
19
- import { cn } from "../../utils/cn";
20
20
 
21
21
  /**
22
22
  * Variants for the multi-select component to handle different styles.
@@ -43,8 +43,7 @@ const multiSelectVariants = cva(
43
43
  * Props for MultiSelect component
44
44
  */
45
45
  interface MultiSelectProps
46
- extends React.ButtonHTMLAttributes<HTMLButtonElement>,
47
- VariantProps<typeof multiSelectVariants> {
46
+ extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof multiSelectVariants> {
48
47
  /**
49
48
  * An array of option objects to be displayed in the multi-select component.
50
49
  * Each option object has a label, value, and an optional icon.
@@ -223,68 +222,68 @@ export const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>
223
222
  className,
224
223
  )}
225
224
  >
226
- {selectedValues.length > 0 ? (
227
- <div className="flex w-full items-center justify-between">
228
- <div className="flex flex-wrap items-center">
229
- {selectedValues.slice(0, maxCount).map((value) => {
230
- const option = options.find((o) => o.value === value);
231
- const IconComponent = option?.icon;
232
- return (
233
- <Badge
234
- key={value}
235
- className={cn(isAnimating ? "animate-bounce" : "", multiSelectVariants({ variant }))}
236
- style={{ animationDuration: `${animation}s` }}
237
- >
238
- {IconComponent && <IconComponent className="mr-2 h-4 w-4" />}
239
- {option?.label}
240
- <XCircle
241
- className="ml-2 h-4 w-4 cursor-pointer"
242
- onClick={(event) => {
243
- event.stopPropagation();
244
- toggleOption(value);
245
- }}
246
- />
247
- </Badge>
248
- );
249
- })}
250
- {selectedValues.length > maxCount && (
225
+ {selectedValues.length > 0 ? (
226
+ <div className="flex w-full items-center justify-between">
227
+ <div className="flex flex-wrap items-center">
228
+ {selectedValues.slice(0, maxCount).map((value) => {
229
+ const option = options.find((o) => o.value === value);
230
+ const IconComponent = option?.icon;
231
+ return (
251
232
  <Badge
252
- className={cn(
253
- "text-foreground border-foreground/1 bg-transparent hover:bg-transparent",
254
- isAnimating ? "animate-bounce" : "",
255
- multiSelectVariants({ variant }),
256
- )}
233
+ key={value}
234
+ className={cn(isAnimating ? "animate-bounce" : "", multiSelectVariants({ variant }))}
257
235
  style={{ animationDuration: `${animation}s` }}
258
236
  >
259
- {`+ ${selectedValues.length - maxCount} more`}
237
+ {IconComponent && <IconComponent className="mr-2 h-4 w-4" />}
238
+ {option?.label}
260
239
  <XCircle
261
240
  className="ml-2 h-4 w-4 cursor-pointer"
262
241
  onClick={(event) => {
263
242
  event.stopPropagation();
264
- clearExtraOptions();
243
+ toggleOption(value);
265
244
  }}
266
245
  />
267
246
  </Badge>
268
- )}
269
- </div>
270
- <div className="flex items-center justify-between">
271
- <XIcon
272
- className="text-muted-foreground mx-2 h-4 cursor-pointer"
273
- onClick={(event) => {
274
- event.stopPropagation();
275
- handleClear();
276
- }}
277
- />
278
- <Separator orientation="vertical" className="flex h-full min-h-6" />
279
- <ChevronDown className="text-muted-foreground mx-2 h-4 cursor-pointer" />
280
- </div>
247
+ );
248
+ })}
249
+ {selectedValues.length > maxCount && (
250
+ <Badge
251
+ className={cn(
252
+ "text-foreground border-foreground/1 bg-transparent hover:bg-transparent",
253
+ isAnimating ? "animate-bounce" : "",
254
+ multiSelectVariants({ variant }),
255
+ )}
256
+ style={{ animationDuration: `${animation}s` }}
257
+ >
258
+ {`+ ${selectedValues.length - maxCount} more`}
259
+ <XCircle
260
+ className="ml-2 h-4 w-4 cursor-pointer"
261
+ onClick={(event) => {
262
+ event.stopPropagation();
263
+ clearExtraOptions();
264
+ }}
265
+ />
266
+ </Badge>
267
+ )}
281
268
  </div>
282
- ) : (
283
- <div className="mx-auto flex w-full items-center justify-between">
284
- <span className="text-muted-foreground mx-3 text-sm">{placeholder}</span>
269
+ <div className="flex items-center justify-between">
270
+ <XIcon
271
+ className="text-muted-foreground mx-2 h-4 cursor-pointer"
272
+ onClick={(event) => {
273
+ event.stopPropagation();
274
+ handleClear();
275
+ }}
276
+ />
277
+ <Separator orientation="vertical" className="flex h-full min-h-6" />
285
278
  <ChevronDown className="text-muted-foreground mx-2 h-4 cursor-pointer" />
286
279
  </div>
287
- )}
280
+ </div>
281
+ ) : (
282
+ <div className="mx-auto flex w-full items-center justify-between">
283
+ <span className="text-muted-foreground mx-3 text-sm">{placeholder}</span>
284
+ <ChevronDown className="text-muted-foreground mx-2 h-4 cursor-pointer" />
285
+ </div>
286
+ )}
288
287
  </PopoverTrigger>
289
288
  <PopoverContent className="w-auto p-0" align="start">
290
289
  <Command>
@@ -297,7 +296,11 @@ export const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>
297
296
  <CommandList>
298
297
  <CommandEmpty>No results found.</CommandEmpty>
299
298
  <CommandGroup>
300
- <CommandItem key="all" onSelect={toggleAll} className="cursor-pointer">
299
+ <CommandItem
300
+ key="all"
301
+ onSelect={toggleAll}
302
+ className="cursor-pointer hover:bg-muted data-selected:hover:bg-muted bg-transparent data-selected:bg-transparent"
303
+ >
301
304
  <div
302
305
  className={cn(
303
306
  "border-primary mr-2 flex h-4 w-4 items-center justify-center rounded-sm border",
@@ -316,7 +319,7 @@ export const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>
316
319
  <CommandItem
317
320
  key={option.value}
318
321
  onSelect={() => toggleOption(option.value)}
319
- className="cursor-pointer"
322
+ className="cursor-pointer hover:bg-muted data-selected:hover:bg-muted bg-transparent data-selected:bg-transparent"
320
323
  >
321
324
  <div
322
325
  className={cn(
@@ -345,7 +348,7 @@ export const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>
345
348
  )}
346
349
  <CommandItem
347
350
  onSelect={() => setIsPopoverOpen(false)}
348
- className="max-w-full flex-1 cursor-pointer justify-center"
351
+ className="max-w-full flex-1 cursor-pointer justify-center hover:bg-muted data-selected:hover:bg-muted bg-transparent data-selected:bg-transparent"
349
352
  >
350
353
  Close
351
354
  </CommandItem>