@openrails/contentkit-ui 0.104.0-rc.1 → 0.104.0-rc.3

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 (217) hide show
  1. package/README.md +6 -6
  2. package/dist/client/beacons.js +4 -1
  3. package/dist/client/beacons.js.map +1 -1
  4. package/dist/client/contents.d.ts +9 -1
  5. package/dist/client/contents.js +73 -55
  6. package/dist/client/contents.js.map +1 -1
  7. package/dist/client/discovery.d.ts +6 -2
  8. package/dist/client/discovery.js +1 -1
  9. package/dist/client/discovery.js.map +1 -1
  10. package/dist/client/generated/error-codes.d.ts +1 -1
  11. package/dist/client/generated/error-codes.js +4 -0
  12. package/dist/client/generated/error-codes.js.map +1 -1
  13. package/dist/client/generated/routes.d.ts +43 -30
  14. package/dist/client/generated/routes.js +70 -63
  15. package/dist/client/generated/routes.js.map +1 -1
  16. package/dist/client/generated/wire.d.ts +36 -74
  17. package/dist/client/generated/wire.js.map +1 -1
  18. package/dist/client/index.d.ts +1 -1
  19. package/dist/client/media/windows.d.ts +2 -0
  20. package/dist/client/media/windows.js +4 -1
  21. package/dist/client/media/windows.js.map +1 -1
  22. package/dist/client/stats.d.ts +4 -20
  23. package/dist/client/stats.js +0 -11
  24. package/dist/client/stats.js.map +1 -1
  25. package/dist/client/versions.d.ts +8 -6
  26. package/dist/client/versions.js +15 -10
  27. package/dist/client/versions.js.map +1 -1
  28. package/dist/components/admin/bulk-drafts.d.ts +17 -0
  29. package/dist/components/admin/bulk-drafts.js +41 -0
  30. package/dist/components/admin/bulk-drafts.js.map +1 -0
  31. package/dist/components/admin/content-admin.d.ts +1 -1
  32. package/dist/components/admin/content-admin.js.map +1 -1
  33. package/dist/components/admin/content-manager.d.ts +11 -3
  34. package/dist/components/admin/content-manager.js +739 -380
  35. package/dist/components/admin/content-manager.js.map +1 -1
  36. package/dist/components/admin/group-manager.d.ts +8 -3
  37. package/dist/components/admin/group-manager.js +218 -146
  38. package/dist/components/admin/group-manager.js.map +1 -1
  39. package/dist/components/admin/page-notices.d.ts +16 -0
  40. package/dist/components/admin/page-notices.js +113 -0
  41. package/dist/components/admin/page-notices.js.map +1 -0
  42. package/dist/components/admin/page-picker.d.ts +38 -0
  43. package/dist/components/admin/page-picker.js +159 -0
  44. package/dist/components/admin/page-picker.js.map +1 -0
  45. package/dist/components/admin/reader-content-editor.js +537 -500
  46. package/dist/components/admin/reader-content-editor.js.map +1 -1
  47. package/dist/components/admin/reader-manifest.js +181 -179
  48. package/dist/components/admin/reader-manifest.js.map +1 -1
  49. package/dist/components/admin/shell.d.ts +10 -2
  50. package/dist/components/admin/shell.js +114 -42
  51. package/dist/components/admin/shell.js.map +1 -1
  52. package/dist/components/admin/stats-dashboard.d.ts +4 -9
  53. package/dist/components/admin/stats-dashboard.js +300 -202
  54. package/dist/components/admin/stats-dashboard.js.map +1 -1
  55. package/dist/components/admin/upload-queue.d.ts +14 -0
  56. package/dist/components/admin/upload-queue.js +115 -98
  57. package/dist/components/admin/upload-queue.js.map +1 -1
  58. package/dist/components/content/card.d.ts +31 -3
  59. package/dist/components/content/card.js +324 -158
  60. package/dist/components/content/card.js.map +1 -1
  61. package/dist/components/content/daily-releases.js +14 -12
  62. package/dist/components/content/daily-releases.js.map +1 -1
  63. package/dist/components/content/editor-save.js +27 -25
  64. package/dist/components/content/editor-save.js.map +1 -1
  65. package/dist/components/content/editors.js +274 -253
  66. package/dist/components/content/editors.js.map +1 -1
  67. package/dist/components/content/favorites.d.ts +1 -1
  68. package/dist/components/content/favorites.js +36 -22
  69. package/dist/components/content/favorites.js.map +1 -1
  70. package/dist/components/content/grid.d.ts +11 -4
  71. package/dist/components/content/grid.js +52 -43
  72. package/dist/components/content/grid.js.map +1 -1
  73. package/dist/components/content/history.js +83 -63
  74. package/dist/components/content/history.js.map +1 -1
  75. package/dist/components/content/index.d.ts +5 -3
  76. package/dist/components/content/listing.d.ts +14 -3
  77. package/dist/components/content/listing.js +65 -56
  78. package/dist/components/content/listing.js.map +1 -1
  79. package/dist/components/content/offer-fields.js +6 -6
  80. package/dist/components/content/paged-grid.d.ts +10 -0
  81. package/dist/components/content/paged-grid.js +116 -0
  82. package/dist/components/content/paged-grid.js.map +1 -0
  83. package/dist/components/content/pagination.d.ts +19 -0
  84. package/dist/components/content/pagination.js +97 -0
  85. package/dist/components/content/pagination.js.map +1 -0
  86. package/dist/components/content/paywall.d.ts +9 -0
  87. package/dist/components/content/paywall.js +27 -3
  88. package/dist/components/content/paywall.js.map +1 -1
  89. package/dist/components/content/post-list.d.ts +37 -0
  90. package/dist/components/content/post-list.js +203 -0
  91. package/dist/components/content/post-list.js.map +1 -0
  92. package/dist/components/content/reader-settings.d.ts +2 -0
  93. package/dist/components/content/reader-settings.js +1 -1
  94. package/dist/components/content/reader-settings.js.map +1 -1
  95. package/dist/components/groups/banner.d.ts +6 -2
  96. package/dist/components/groups/banner.js +79 -61
  97. package/dist/components/groups/banner.js.map +1 -1
  98. package/dist/components/groups/directory.d.ts +12 -2
  99. package/dist/components/groups/directory.js +168 -105
  100. package/dist/components/groups/directory.js.map +1 -1
  101. package/dist/components/groups/editor.js +10 -10
  102. package/dist/components/groups/editor.js.map +1 -1
  103. package/dist/components/groups/entity-chips.d.ts +61 -0
  104. package/dist/components/groups/entity-chips.js +382 -0
  105. package/dist/components/groups/entity-chips.js.map +1 -0
  106. package/dist/components/groups/group-members.d.ts +29 -0
  107. package/dist/components/groups/group-members.js +474 -0
  108. package/dist/components/groups/group-members.js.map +1 -0
  109. package/dist/components/groups/header.js +53 -45
  110. package/dist/components/groups/header.js.map +1 -1
  111. package/dist/components/groups/index.d.ts +3 -1
  112. package/dist/components/groups/memberships.d.ts +3 -36
  113. package/dist/components/groups/memberships.js +105 -480
  114. package/dist/components/groups/memberships.js.map +1 -1
  115. package/dist/components/groups/scoped.d.ts +23 -0
  116. package/dist/components/groups/scoped.js +92 -0
  117. package/dist/components/groups/scoped.js.map +1 -0
  118. package/dist/components/media-folder-editor.d.ts +5 -0
  119. package/dist/components/media-folder-editor.js +418 -230
  120. package/dist/components/media-folder-editor.js.map +1 -1
  121. package/dist/components/social/poll.js +57 -48
  122. package/dist/components/social/poll.js.map +1 -1
  123. package/dist/components/sortable-list.d.ts +5 -1
  124. package/dist/components/sortable-list.js +97 -81
  125. package/dist/components/sortable-list.js.map +1 -1
  126. package/dist/index.d.ts +1 -1
  127. package/dist/index.js +41 -37
  128. package/dist/locales/admin/de.js +78 -45
  129. package/dist/locales/admin/de.js.map +1 -1
  130. package/dist/locales/admin/en.d.ts +74 -41
  131. package/dist/locales/admin/en.js +78 -45
  132. package/dist/locales/admin/en.js.map +1 -1
  133. package/dist/locales/admin/es.js +78 -45
  134. package/dist/locales/admin/es.js.map +1 -1
  135. package/dist/locales/admin/ja.js +78 -45
  136. package/dist/locales/admin/ja.js.map +1 -1
  137. package/dist/locales/admin/ko.js +78 -45
  138. package/dist/locales/admin/ko.js.map +1 -1
  139. package/dist/locales/admin/zh.js +78 -45
  140. package/dist/locales/admin/zh.js.map +1 -1
  141. package/dist/locales/de.js +2 -0
  142. package/dist/locales/de.js.map +1 -1
  143. package/dist/locales/discovery/de.js +25 -1
  144. package/dist/locales/discovery/de.js.map +1 -1
  145. package/dist/locales/discovery/en.d.ts +24 -0
  146. package/dist/locales/discovery/en.js +25 -1
  147. package/dist/locales/discovery/en.js.map +1 -1
  148. package/dist/locales/discovery/es.js +25 -1
  149. package/dist/locales/discovery/es.js.map +1 -1
  150. package/dist/locales/discovery/ja.js +25 -1
  151. package/dist/locales/discovery/ja.js.map +1 -1
  152. package/dist/locales/discovery/ko.js +25 -1
  153. package/dist/locales/discovery/ko.js.map +1 -1
  154. package/dist/locales/discovery/zh.js +25 -1
  155. package/dist/locales/discovery/zh.js.map +1 -1
  156. package/dist/locales/en.d.ts +120 -43
  157. package/dist/locales/en.js +2 -0
  158. package/dist/locales/en.js.map +1 -1
  159. package/dist/locales/es.js +2 -0
  160. package/dist/locales/es.js.map +1 -1
  161. package/dist/locales/groups/de.js +22 -4
  162. package/dist/locales/groups/de.js.map +1 -1
  163. package/dist/locales/groups/en.d.ts +20 -2
  164. package/dist/locales/groups/en.js +22 -4
  165. package/dist/locales/groups/en.js.map +1 -1
  166. package/dist/locales/groups/es.js +22 -4
  167. package/dist/locales/groups/es.js.map +1 -1
  168. package/dist/locales/groups/ja.js +22 -4
  169. package/dist/locales/groups/ja.js.map +1 -1
  170. package/dist/locales/groups/ko.js +22 -4
  171. package/dist/locales/groups/ko.js.map +1 -1
  172. package/dist/locales/groups/zh.js +22 -4
  173. package/dist/locales/groups/zh.js.map +1 -1
  174. package/dist/locales/ja.js +2 -0
  175. package/dist/locales/ja.js.map +1 -1
  176. package/dist/locales/ko.js +2 -0
  177. package/dist/locales/ko.js.map +1 -1
  178. package/dist/locales/zh.js +2 -0
  179. package/dist/locales/zh.js.map +1 -1
  180. package/dist/react/contents.js +1 -1
  181. package/dist/react/contents.js.map +1 -1
  182. package/dist/react/discovery.d.ts +16 -0
  183. package/dist/react/discovery.js +69 -37
  184. package/dist/react/discovery.js.map +1 -1
  185. package/dist/react/groups.d.ts +19 -3
  186. package/dist/react/groups.js +49 -22
  187. package/dist/react/groups.js.map +1 -1
  188. package/dist/react/index.d.ts +6 -4
  189. package/dist/react/page-notices.d.ts +13 -0
  190. package/dist/react/page-notices.js +38 -0
  191. package/dist/react/page-notices.js.map +1 -0
  192. package/dist/react/post-reads.d.ts +23 -0
  193. package/dist/react/post-reads.js +90 -0
  194. package/dist/react/post-reads.js.map +1 -0
  195. package/dist/react/remembered-sort.d.ts +5 -0
  196. package/dist/react/remembered-sort.js +29 -0
  197. package/dist/react/remembered-sort.js.map +1 -0
  198. package/dist/react/resources.js +2 -2
  199. package/dist/react/resources.js.map +1 -1
  200. package/dist/react/stats.d.ts +3 -7
  201. package/dist/react/stats.js +2 -6
  202. package/dist/react/stats.js.map +1 -1
  203. package/dist/react/use-engagement.d.ts +2 -0
  204. package/dist/react/use-engagement.js +40 -34
  205. package/dist/react/use-engagement.js.map +1 -1
  206. package/dist/react.js +29 -27
  207. package/dist/styles.css +1 -1
  208. package/dist/urls/index.d.ts +1 -1
  209. package/dist/urls.js +2 -2
  210. package/dist/urls.js.map +1 -1
  211. package/package.json +1 -1
  212. package/dist/components/admin/page-review.d.ts +0 -13
  213. package/dist/components/admin/page-review.js +0 -225
  214. package/dist/components/admin/page-review.js.map +0 -1
  215. package/dist/react/page-review.d.ts +0 -14
  216. package/dist/react/page-review.js +0 -37
  217. package/dist/react/page-review.js.map +0 -1
@@ -1,121 +1,137 @@
1
1
  import { useMessages as e } from "../i18n/context.js";
2
2
  import { ContentKitUiRoot as t } from "../scope.js";
3
- import { useMemo as n, useState as r } from "react";
4
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
- import { cn as o } from "cn";
6
- import { DragDropVerticalIcon as s } from "@hugeicons/core-free-icons";
7
- import { HugeiconsIcon as c } from "@hugeicons/react";
8
- import { DndContext as l, DragOverlay as u, KeyboardSensor as d, PointerSensor as f, closestCenter as p, useSensor as m, useSensors as h } from "@dnd-kit/core";
9
- import { SortableContext as g, sortableKeyboardCoordinates as _, useSortable as v } from "@dnd-kit/sortable";
3
+ import { Fragment as n, useMemo as r, useState as i } from "react";
4
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
+ import { cn as s } from "cn";
6
+ import { DragDropVerticalIcon as c } from "@hugeicons/core-free-icons";
7
+ import { HugeiconsIcon as l } from "@hugeicons/react";
8
+ import { DndContext as u, DragOverlay as d, KeyboardSensor as f, PointerSensor as p, closestCenter as m, useSensor as h, useSensors as g } from "@dnd-kit/core";
9
+ import { SortableContext as _, sortableKeyboardCoordinates as v, useSortable as y } from "@dnd-kit/sortable";
10
10
  //#region src/components/sortable-list.tsx
11
- var y = () => null, b = "inline-flex size-8 shrink-0 cursor-grab touch-none items-center justify-center rounded-md text-muted-foreground outline-none hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring active:cursor-grabbing disabled:cursor-default disabled:opacity-50";
12
- function x({ items: v, id: x, name: C, onMove: w, layout: T = "list", disabled: E, row: D, children: O, className: k, label: A, appearance: j }) {
13
- let { t: M } = e(), N = h(m(f, { activationConstraint: { distance: 4 } }), m(d, { coordinateGetter: _ })), P = n(() => v.map(x), [v, x]), [F, I] = r(null), [L, R] = r(null), z = (e) => P.indexOf(String(e)), B = (e) => {
14
- let t = z(e);
15
- return t < 0 ? "" : C(v[t]);
16
- }, V = P.length, H = {
17
- onDragStart: ({ active: e }) => M("sortable.pickedUp", {
18
- name: B(e.id),
19
- position: z(e.id) + 1,
20
- total: V
11
+ var b = {
12
+ start: ["Space"],
13
+ cancel: ["Escape"],
14
+ end: ["Space"]
15
+ }, x = () => null, S = "inline-flex size-8 shrink-0 cursor-grab touch-none items-center justify-center rounded-md text-muted-foreground outline-none hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring active:cursor-grabbing disabled:cursor-default disabled:opacity-50";
16
+ function C({ items: y, id: C, name: T, onMove: E, layout: D = "list", disabled: O, row: k, children: A, className: j, label: M, appearance: N, wholeItem: P, trailing: F }) {
17
+ let { t: I } = e(), L = g(h(p, { activationConstraint: { distance: 4 } }), h(f, {
18
+ coordinateGetter: v,
19
+ ...P ? { keyboardCodes: b } : {}
20
+ })), R = r(() => y.map(C), [y, C]), [z, B] = i(null), [V, H] = i(null), U = (e) => R.indexOf(String(e)), W = (e) => {
21
+ let t = U(e);
22
+ return t < 0 ? "" : T(y[t]);
23
+ }, G = R.length, K = {
24
+ onDragStart: ({ active: e }) => I("sortable.pickedUp", {
25
+ name: W(e.id),
26
+ position: U(e.id) + 1,
27
+ total: G
21
28
  }),
22
- onDragOver: ({ active: e, over: t }) => t ? M("sortable.over", {
23
- name: B(e.id),
24
- position: z(t.id) + 1,
25
- total: V
29
+ onDragOver: ({ active: e, over: t }) => t ? I("sortable.over", {
30
+ name: W(e.id),
31
+ position: U(t.id) + 1,
32
+ total: G
26
33
  }) : void 0,
27
- onDragEnd: ({ active: e, over: t }) => t ? M("sortable.dropped", {
28
- name: B(e.id),
29
- position: z(t.id) + 1,
30
- total: V
31
- }) : M("sortable.droppedAway", { name: B(e.id) }),
32
- onDragCancel: ({ active: e }) => M("sortable.canceled", { name: B(e.id) })
33
- }, U = { draggable: M("sortable.instructions") }, W = F ? z(F) : -1, G = L ? z(L) : -1, K = W >= 0 ? v[W] : void 0, q = T === "grid", J = (e, t) => /* @__PURE__ */ i("ol", {
34
- className: o(q ? "grid grid-cols-[repeat(auto-fill,minmax(8rem,1fr))] gap-2" : "grid gap-1", k),
35
- "aria-label": t ? void 0 : A,
34
+ onDragEnd: ({ active: e, over: t }) => t ? I("sortable.dropped", {
35
+ name: W(e.id),
36
+ position: U(t.id) + 1,
37
+ total: G
38
+ }) : I("sortable.droppedAway", { name: W(e.id) }),
39
+ onDragCancel: ({ active: e }) => I("sortable.canceled", { name: W(e.id) })
40
+ }, q = { draggable: I(P ? "sortable.instructionsTile" : "sortable.instructions") }, J = z ? U(z) : -1, Y = V ? U(V) : -1, X = J >= 0 ? y[J] : void 0, Z = D === "grid", Q = (e, t) => /* @__PURE__ */ a("ol", {
41
+ className: s(Z ? "grid grid-cols-[repeat(auto-fill,minmax(8rem,1fr))] gap-2" : "grid gap-1", j),
42
+ "aria-label": t ? void 0 : M,
36
43
  "data-ckui": "sortable-list",
37
- "data-layout": T,
44
+ "data-layout": D,
38
45
  "data-overlay": t ? "" : void 0,
39
46
  children: e
40
47
  });
41
- return /* @__PURE__ */ i(t, {
42
- appearance: j,
48
+ return /* @__PURE__ */ a(t, {
49
+ appearance: N,
43
50
  className: "contents",
44
- children: /* @__PURE__ */ a(l, {
45
- sensors: N,
46
- collisionDetection: p,
51
+ children: /* @__PURE__ */ o(u, {
52
+ sensors: L,
53
+ collisionDetection: m,
47
54
  accessibility: {
48
- announcements: H,
49
- screenReaderInstructions: U
55
+ announcements: K,
56
+ screenReaderInstructions: q
50
57
  },
51
- onDragStart: (e) => I(String(e.active.id)),
52
- onDragOver: (e) => R(e.over ? String(e.over.id) : null),
58
+ onDragStart: (e) => B(String(e.active.id)),
59
+ onDragOver: (e) => H(e.over ? String(e.over.id) : null),
53
60
  onDragCancel: () => {
54
- I(null), R(null);
61
+ B(null), H(null);
55
62
  },
56
63
  onDragEnd: (e) => {
57
- I(null), R(null);
58
- let t = z(e.active.id), n = e.over ? z(e.over.id) : -1;
59
- t >= 0 && n >= 0 && t !== n && w(t, n);
64
+ B(null), H(null);
65
+ let t = U(e.active.id), n = e.over ? U(e.over.id) : -1;
66
+ t >= 0 && n >= 0 && t !== n && E(t, n);
60
67
  },
61
- children: [/* @__PURE__ */ i(g, {
62
- items: P,
63
- strategy: y,
64
- disabled: E,
65
- children: J(v.map((e, t) => /* @__PURE__ */ i(S, {
66
- id: P[t],
67
- label: M("sortable.handle", { name: C(e) }),
68
- attrs: D?.(e),
69
- disabled: E,
70
- grid: q,
71
- dragging: t === W,
72
- drop: W >= 0 && t === G && G !== W ? G > W ? "after" : "before" : void 0,
73
- render: (n) => O(e, n, t)
74
- }, P[t])))
75
- }), /* @__PURE__ */ i(u, {
68
+ children: [/* @__PURE__ */ a(_, {
69
+ items: R,
70
+ strategy: x,
71
+ disabled: O,
72
+ children: Q(y.map((e, t) => /* @__PURE__ */ a(w, {
73
+ id: R[t],
74
+ label: I("sortable.handle", { name: T(e) }),
75
+ attrs: k?.(e),
76
+ disabled: O,
77
+ grid: Z,
78
+ whole: P,
79
+ dragging: t === J,
80
+ drop: J >= 0 && t === Y && Y !== J ? Y > J ? "after" : "before" : void 0,
81
+ render: (n) => A(e, n, t)
82
+ }, R[t])).concat(F ? [/* @__PURE__ */ a(n, { children: F }, "trailing")] : []))
83
+ }), /* @__PURE__ */ a(d, {
76
84
  dropAnimation: null,
77
- children: K === void 0 ? null : J(/* @__PURE__ */ i("li", {
78
- ...D?.(K),
79
- className: o(D?.(K).className, "cursor-grabbing rounded-md bg-background shadow-lg ring-1 ring-border"),
80
- children: O(K, /* @__PURE__ */ i("span", {
81
- className: b,
82
- children: /* @__PURE__ */ i(c, {
83
- icon: s,
85
+ children: X === void 0 ? null : Q(/* @__PURE__ */ a("li", {
86
+ ...k?.(X),
87
+ className: s(k?.(X).className, "cursor-grabbing rounded-md bg-background shadow-lg ring-1 ring-border"),
88
+ children: A(X, P ? null : /* @__PURE__ */ a("span", {
89
+ className: S,
90
+ children: /* @__PURE__ */ a(l, {
91
+ icon: c,
84
92
  strokeWidth: 2,
85
93
  className: "size-4.5"
86
94
  })
87
- }), W)
95
+ }), J)
88
96
  }), !0)
89
97
  })]
90
98
  })
91
99
  });
92
100
  }
93
- function S({ id: e, label: t, attrs: n, disabled: r, grid: a, dragging: l, drop: u, render: d }) {
94
- let { attributes: f, listeners: p, setNodeRef: m, setActivatorNodeRef: h } = v({ id: e }), g = /* @__PURE__ */ i("button", {
101
+ function w({ id: e, label: t, attrs: n, disabled: r, grid: i, whole: o, dragging: u, drop: d, render: f }) {
102
+ let { attributes: p, listeners: m, setNodeRef: h, setActivatorNodeRef: g } = y({ id: e }), _ = o ? null : /* @__PURE__ */ a("button", {
95
103
  type: "button",
96
- ref: h,
97
- className: b,
104
+ ref: g,
105
+ className: S,
98
106
  "aria-label": t,
99
107
  disabled: r,
100
108
  "data-ckui": "sort-handle",
101
- ...f,
102
109
  ...p,
103
- children: /* @__PURE__ */ i(c, {
104
- icon: s,
110
+ ...m,
111
+ children: /* @__PURE__ */ a(l, {
112
+ icon: c,
105
113
  strokeWidth: 2,
106
114
  className: "size-4.5"
107
115
  })
108
116
  });
109
- return /* @__PURE__ */ i("li", {
117
+ return /* @__PURE__ */ a("li", {
110
118
  ...n,
111
- ref: m,
112
- className: o(n?.className, "relative data-dragging:opacity-40 before:pointer-events-none before:absolute before:rounded-full before:bg-primary before:opacity-0", a ? "before:inset-y-0 before:w-0.5 data-[drop=before]:before:-left-[5px] data-[drop=before]:before:opacity-100 data-[drop=after]:before:-right-[5px] data-[drop=after]:before:opacity-100" : "before:inset-x-0 before:h-0.5 data-[drop=before]:before:-top-[3px] data-[drop=before]:before:opacity-100 data-[drop=after]:before:-bottom-[3px] data-[drop=after]:before:opacity-100"),
113
- "data-drop": u,
114
- "data-dragging": l || void 0,
115
- children: d(g)
119
+ ...o && !r ? {
120
+ ...p,
121
+ ...m,
122
+ onKeyDown: (e) => {
123
+ m?.onKeyDown?.(e), n?.onKeyDown?.(e);
124
+ },
125
+ "aria-label": t
126
+ } : {},
127
+ ref: h,
128
+ className: s(n?.className, "relative data-dragging:opacity-40 before:pointer-events-none before:absolute before:rounded-full before:bg-primary before:opacity-0", i ? "before:inset-y-0 before:w-0.5 data-[drop=before]:before:-left-[5px] data-[drop=before]:before:opacity-100 data-[drop=after]:before:-right-[5px] data-[drop=after]:before:opacity-100" : "before:inset-x-0 before:h-0.5 data-[drop=before]:before:-top-[3px] data-[drop=before]:before:opacity-100 data-[drop=after]:before:-bottom-[3px] data-[drop=after]:before:opacity-100"),
129
+ "data-drop": d,
130
+ "data-dragging": u || void 0,
131
+ children: f(_)
116
132
  });
117
133
  }
118
134
  //#endregion
119
- export { x as SortableList };
135
+ export { C as SortableList };
120
136
 
121
137
  //# sourceMappingURL=sortable-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sortable-list.js","names":[],"sources":["../../src/components/sortable-list.tsx"],"sourcesContent":["import {\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n useSensor,\n useSensors,\n type Announcements,\n type ScreenReaderInstructions,\n} from \"@dnd-kit/core\";\nimport { SortableContext, sortableKeyboardCoordinates, useSortable } from \"@dnd-kit/sortable\";\nimport { DragDropVerticalIcon } from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { cn } from \"cn\";\nimport { useMemo, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport type { ContentKitUiAppearance } from \"../appearance.js\";\nimport { useMessages } from \"../i18n/context.js\";\nimport { ContentKitUiRoot } from \"../scope.js\";\n\nexport interface SortableListProps<T> {\n items: readonly T[];\n /** A stable key per item. */\n id: (item: T) => string;\n /** The item's spoken name in announcements and the handle's label. */\n name: (item: T) => string;\n /** Called once per drop with the old and new index. */\n onMove: (from: number, to: number) => void;\n /** Rows (default) or a wrapping grid of tiles. */\n layout?: \"list\" | \"grid\";\n disabled?: boolean;\n /** Attributes of an item's `<li>`. */\n row?: (item: T) => HTMLAttributes<HTMLLIElement> & Record<`data-${string}`, unknown>;\n /** An item's content; place `handle` (its drag handle) where it belongs. */\n children: (item: T, handle: ReactNode, index: number) => ReactNode;\n className?: string;\n /** Accessible name of the list. */\n label?: string;\n appearance?: ContentKitUiAppearance;\n}\n\n// Items stay put while dragging; a bar marks where the item will land.\nconst noShift = () => null;\nconst handleClass =\n \"inline-flex size-8 shrink-0 cursor-grab touch-none items-center justify-center rounded-md text-muted-foreground outline-none hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring active:cursor-grabbing disabled:cursor-default disabled:opacity-50\";\n\n/**\n * A reorderable list or grid (dnd-kit): drag an item by its handle with a\n * mouse, a finger or the keyboard (Space or Enter lifts, arrows move, Space\n * or Enter drops, Escape cancels), with localized screen reader\n * announcements. onMove gets the old and new index once, on drop.\n */\nexport function SortableList<T>({ items, id, name, onMove, layout = \"list\", disabled, row, children, className, label, appearance }: SortableListProps<T>) {\n const { t } = useMessages();\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }));\n const ids = useMemo(() => items.map(id), [items, id]);\n const [active, setActive] = useState<string | null>(null);\n const [over, setOver] = useState<string | null>(null);\n const at = (key: unknown) => ids.indexOf(String(key));\n const spoken = (key: unknown) => {\n const i = at(key);\n return i < 0 ? \"\" : name(items[i]!);\n };\n const total = ids.length;\n const announcements: Announcements = {\n onDragStart: ({ active }) => t(\"sortable.pickedUp\", { name: spoken(active.id), position: at(active.id) + 1, total }),\n onDragOver: ({ active, over }) => (over ? t(\"sortable.over\", { name: spoken(active.id), position: at(over.id) + 1, total }) : undefined),\n onDragEnd: ({ active, over }) =>\n over ? t(\"sortable.dropped\", { name: spoken(active.id), position: at(over.id) + 1, total }) : t(\"sortable.droppedAway\", { name: spoken(active.id) }),\n onDragCancel: ({ active }) => t(\"sortable.canceled\", { name: spoken(active.id) }),\n };\n const instructions: ScreenReaderInstructions = { draggable: t(\"sortable.instructions\") };\n const from = active ? at(active) : -1;\n const to = over ? at(over) : -1;\n const dragged = from >= 0 ? items[from] : undefined;\n const grid = layout === \"grid\";\n const list = (inner: ReactNode, overlay?: boolean) => (\n <ol\n className={cn(grid ? \"grid grid-cols-[repeat(auto-fill,minmax(8rem,1fr))] gap-2\" : \"grid gap-1\", className)}\n aria-label={overlay ? undefined : label}\n data-ckui=\"sortable-list\"\n data-layout={layout}\n data-overlay={overlay ? \"\" : undefined}\n >\n {inner}\n </ol>\n );\n return (\n <ContentKitUiRoot appearance={appearance} className=\"contents\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n accessibility={{ announcements, screenReaderInstructions: instructions }}\n onDragStart={(e) => setActive(String(e.active.id))}\n onDragOver={(e) => setOver(e.over ? String(e.over.id) : null)}\n onDragCancel={() => {\n setActive(null);\n setOver(null);\n }}\n onDragEnd={(e) => {\n setActive(null);\n setOver(null);\n const a = at(e.active.id);\n const b = e.over ? at(e.over.id) : -1;\n if (a >= 0 && b >= 0 && a !== b) onMove(a, b);\n }}\n >\n <SortableContext items={ids} strategy={noShift} disabled={disabled}>\n {list(\n items.map((item, i) => (\n <Item\n key={ids[i]}\n id={ids[i]!}\n label={t(\"sortable.handle\", { name: name(item) })}\n attrs={row?.(item)}\n disabled={disabled}\n grid={grid}\n dragging={i === from}\n drop={from >= 0 && i === to && to !== from ? (to > from ? \"after\" : \"before\") : undefined}\n render={(handle) => children(item, handle, i)}\n />\n )),\n )}\n </SortableContext>\n <DragOverlay dropAnimation={null}>\n {dragged !== undefined\n ? list(\n <li {...row?.(dragged)} className={cn(row?.(dragged).className, \"cursor-grabbing rounded-md bg-background shadow-lg ring-1 ring-border\")}>\n {children(\n dragged,\n <span className={handleClass}>\n <HugeiconsIcon icon={DragDropVerticalIcon} strokeWidth={2} className=\"size-4.5\" />\n </span>,\n from,\n )}\n </li>,\n true,\n )\n : null}\n </DragOverlay>\n </DndContext>\n </ContentKitUiRoot>\n );\n}\n\nfunction Item({\n id,\n label,\n attrs,\n disabled,\n grid,\n dragging,\n drop,\n render,\n}: {\n id: string;\n label: string;\n attrs?: HTMLAttributes<HTMLLIElement>;\n disabled?: boolean;\n grid: boolean;\n dragging: boolean;\n drop?: \"before\" | \"after\";\n render: (handle: ReactNode) => ReactNode;\n}) {\n const { attributes, listeners, setNodeRef, setActivatorNodeRef } = useSortable({ id });\n const handle = (\n <button type=\"button\" ref={setActivatorNodeRef} className={handleClass} aria-label={label} disabled={disabled} data-ckui=\"sort-handle\" {...attributes} {...listeners}>\n <HugeiconsIcon icon={DragDropVerticalIcon} strokeWidth={2} className=\"size-4.5\" />\n </button>\n );\n return (\n <li\n {...attrs}\n ref={setNodeRef}\n className={cn(\n attrs?.className,\n \"relative data-dragging:opacity-40 before:pointer-events-none before:absolute before:rounded-full before:bg-primary before:opacity-0\",\n grid\n ? \"before:inset-y-0 before:w-0.5 data-[drop=before]:before:-left-[5px] data-[drop=before]:before:opacity-100 data-[drop=after]:before:-right-[5px] data-[drop=after]:before:opacity-100\"\n : \"before:inset-x-0 before:h-0.5 data-[drop=before]:before:-top-[3px] data-[drop=before]:before:opacity-100 data-[drop=after]:before:-bottom-[3px] data-[drop=after]:before:opacity-100\",\n )}\n data-drop={drop}\n data-dragging={dragging || undefined}\n >\n {render(handle)}\n </li>\n );\n}\n"],"mappings":";;;;;;;;;;AA0CA,IAAM,UAAgB,MAChB,IACJ;AAQF,SAAgB,EAAgB,EAAE,UAAO,OAAI,SAAM,WAAQ,YAAS,QAAQ,aAAU,QAAK,aAAU,cAAW,UAAO,iBAAoC;CACzJ,IAAM,EAAE,SAAM,EAAY,GACpB,IAAU,EAAW,EAAU,GAAe,EAAE,sBAAsB,EAAE,UAAU,EAAE,EAAE,CAAC,GAAG,EAAU,GAAgB,EAAE,kBAAkB,EAA4B,CAAC,CAAC,GACtK,IAAM,QAAc,EAAM,IAAI,CAAE,GAAG,CAAC,GAAO,CAAE,CAAC,GAC9C,CAAC,GAAQ,KAAa,EAAwB,IAAI,GAClD,CAAC,GAAM,KAAW,EAAwB,IAAI,GAC9C,KAAM,MAAiB,EAAI,QAAQ,OAAO,CAAG,CAAC,GAC9C,KAAU,MAAiB;EAC/B,IAAM,IAAI,EAAG,CAAG;EAChB,OAAO,IAAI,IAAI,KAAK,EAAK,EAAM,EAAG;CACpC,GACM,IAAQ,EAAI,QACZ,IAA+B;EACnC,cAAc,EAAE,gBAAa,EAAE,qBAAqB;GAAE,MAAM,EAAO,EAAO,EAAE;GAAG,UAAU,EAAG,EAAO,EAAE,IAAI;GAAG;EAAM,CAAC;EACnH,aAAa,EAAE,WAAQ,cAAY,IAAO,EAAE,iBAAiB;GAAE,MAAM,EAAO,EAAO,EAAE;GAAG,UAAU,EAAG,EAAK,EAAE,IAAI;GAAG;EAAM,CAAC,IAAI,KAAA;EAC9H,YAAY,EAAE,WAAQ,cACpB,IAAO,EAAE,oBAAoB;GAAE,MAAM,EAAO,EAAO,EAAE;GAAG,UAAU,EAAG,EAAK,EAAE,IAAI;GAAG;EAAM,CAAC,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAO,EAAO,EAAE,EAAE,CAAC;EACrJ,eAAe,EAAE,gBAAa,EAAE,qBAAqB,EAAE,MAAM,EAAO,EAAO,EAAE,EAAE,CAAC;CAClF,GACM,IAAyC,EAAE,WAAW,EAAE,uBAAuB,EAAE,GACjF,IAAO,IAAS,EAAG,CAAM,IAAI,IAC7B,IAAK,IAAO,EAAG,CAAI,IAAI,IACvB,IAAU,KAAQ,IAAI,EAAM,KAAQ,KAAA,GACpC,IAAO,MAAW,QAClB,KAAQ,GAAkB,MAC9B,kBAAC,MAAD;EACE,WAAW,EAAG,IAAO,8DAA8D,cAAc,CAAS;EAC1G,cAAY,IAAU,KAAA,IAAY;EAClC,aAAU;EACV,eAAa;EACb,gBAAc,IAAU,KAAK,KAAA;EAE5B,UAAA;CACC,CAAA;CAEN,OACE,kBAAC,GAAD;EAA8B;EAAY,WAAU;EAClD,UAAA,kBAAC,GAAD;GACW;GACT,oBAAoB;GACpB,eAAe;IAAE;IAAe,0BAA0B;GAAa;GACvE,cAAc,MAAM,EAAU,OAAO,EAAE,OAAO,EAAE,CAAC;GACjD,aAAa,MAAM,EAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI;GAC5D,oBAAoB;IAElB,AADA,EAAU,IAAI,GACd,EAAQ,IAAI;GACd;GACA,YAAY,MAAM;IAEhB,AADA,EAAU,IAAI,GACd,EAAQ,IAAI;IACZ,IAAM,IAAI,EAAG,EAAE,OAAO,EAAE,GAClB,IAAI,EAAE,OAAO,EAAG,EAAE,KAAK,EAAE,IAAI;IACnC,AAAI,KAAK,KAAK,KAAK,KAAK,MAAM,KAAG,EAAO,GAAG,CAAC;GAC9C;GAhBF,UAAA,CAkBE,kBAAC,GAAD;IAAiB,OAAO;IAAK,UAAU;IAAmB;IACvD,UAAA,EACC,EAAM,KAAK,GAAM,MACf,kBAAC,GAAD;KAEE,IAAI,EAAI;KACR,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAK,CAAI,EAAE,CAAC;KAChD,OAAO,IAAM,CAAI;KACP;KACJ;KACN,UAAU,MAAM;KAChB,MAAM,KAAQ,KAAK,MAAM,KAAM,MAAO,IAAQ,IAAK,IAAO,UAAU,WAAY,KAAA;KAChF,SAAS,MAAW,EAAS,GAAM,GAAQ,CAAC;IAC7C,GATM,EAAI,EASV,CACF,CACH;GACe,CAAA,GACjB,kBAAC,GAAD;IAAa,eAAe;IACzB,UAAA,MAAY,KAAA,IAaT,OAZA,EACE,kBAAC,MAAD;KAAI,GAAI,IAAM,CAAO;KAAG,WAAW,EAAG,IAAM,CAAO,CAAC,CAAC,WAAW,uEAAuE;KACpI,UAAA,EACC,GACA,kBAAC,QAAD;MAAM,WAAW;MACf,UAAA,kBAAC,GAAD;OAAe,MAAM;OAAsB,aAAa;OAAG,WAAU;MAAY,CAAA;KAC7E,CAAA,GACN,CACF;IACE,CAAA,GACJ,EACF;GAEO,CAAA,CACH;;CACI,CAAA;AAEtB;AAEA,SAAS,EAAK,EACZ,OACA,UACA,UACA,aACA,SACA,aACA,SACA,aAUC;CACD,IAAM,EAAE,eAAY,cAAW,eAAY,2BAAwB,EAAY,EAAE,MAAG,CAAC,GAC/E,IACJ,kBAAC,UAAD;EAAQ,MAAK;EAAS,KAAK;EAAqB,WAAW;EAAa,cAAY;EAAiB;EAAU,aAAU;EAAc,GAAI;EAAY,GAAI;EACzJ,UAAA,kBAAC,GAAD;GAAe,MAAM;GAAsB,aAAa;GAAG,WAAU;EAAY,CAAA;CAC3E,CAAA;CAEV,OACE,kBAAC,MAAD;EACE,GAAI;EACJ,KAAK;EACL,WAAW,EACT,GAAO,WACP,uIACA,IACI,yLACA,sLACN;EACA,aAAW;EACX,iBAAe,KAAY,KAAA;EAE1B,UAAA,EAAO,CAAM;CACZ,CAAA;AAER"}
1
+ {"version":3,"file":"sortable-list.js","names":[],"sources":["../../src/components/sortable-list.tsx"],"sourcesContent":["import {\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n useSensor,\n useSensors,\n type Announcements,\n type ScreenReaderInstructions,\n} from \"@dnd-kit/core\";\nimport { SortableContext, sortableKeyboardCoordinates, useSortable } from \"@dnd-kit/sortable\";\nimport { DragDropVerticalIcon } from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { cn } from \"cn\";\nimport { Fragment, useMemo, useState, type HTMLAttributes, type KeyboardEvent, type ReactNode } from \"react\";\nimport type { ContentKitUiAppearance } from \"../appearance.js\";\nimport { useMessages } from \"../i18n/context.js\";\nimport { ContentKitUiRoot } from \"../scope.js\";\n\nexport interface SortableListProps<T> {\n items: readonly T[];\n /** A stable key per item. */\n id: (item: T) => string;\n /** The item's spoken name in announcements and the handle's label. */\n name: (item: T) => string;\n /** Called once per drop with the old and new index. */\n onMove: (from: number, to: number) => void;\n /** Rows (default) or a wrapping grid of tiles. */\n layout?: \"list\" | \"grid\";\n disabled?: boolean;\n /** Attributes of an item's `<li>`. */\n row?: (item: T) => HTMLAttributes<HTMLLIElement> & Record<`data-${string}`, unknown>;\n /** An item's content; place `handle` (its drag handle) where it belongs. */\n children: (item: T, handle: ReactNode, index: number) => ReactNode;\n className?: string;\n /** Accessible name of the list. */\n label?: string;\n /** The whole item is the drag handle (Space lifts and drops; Enter is left to the item). */\n wholeItem?: boolean;\n /** Unsortable entries after the items, in the same list (e.g. uploads in progress). */\n trailing?: ReactNode;\n appearance?: ContentKitUiAppearance;\n}\n\nconst SPACE_ONLY = { start: [\"Space\"], cancel: [\"Escape\"], end: [\"Space\"] };\n\n// Items stay put while dragging; a bar marks where the item will land.\nconst noShift = () => null;\nconst handleClass =\n \"inline-flex size-8 shrink-0 cursor-grab touch-none items-center justify-center rounded-md text-muted-foreground outline-none hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring active:cursor-grabbing disabled:cursor-default disabled:opacity-50\";\n\n/**\n * A reorderable list or grid (dnd-kit): drag an item by its handle with a\n * mouse, a finger or the keyboard (Space or Enter lifts, arrows move, Space\n * or Enter drops, Escape cancels), with localized screen reader\n * announcements. onMove gets the old and new index once, on drop.\n */\nexport function SortableList<T>({ items, id, name, onMove, layout = \"list\", disabled, row, children, className, label, appearance, wholeItem, trailing }: SortableListProps<T>) {\n const { t } = useMessages();\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates, ...(wholeItem ? { keyboardCodes: SPACE_ONLY } : {}) }),\n );\n const ids = useMemo(() => items.map(id), [items, id]);\n const [active, setActive] = useState<string | null>(null);\n const [over, setOver] = useState<string | null>(null);\n const at = (key: unknown) => ids.indexOf(String(key));\n const spoken = (key: unknown) => {\n const i = at(key);\n return i < 0 ? \"\" : name(items[i]!);\n };\n const total = ids.length;\n const announcements: Announcements = {\n onDragStart: ({ active }) => t(\"sortable.pickedUp\", { name: spoken(active.id), position: at(active.id) + 1, total }),\n onDragOver: ({ active, over }) => (over ? t(\"sortable.over\", { name: spoken(active.id), position: at(over.id) + 1, total }) : undefined),\n onDragEnd: ({ active, over }) =>\n over ? t(\"sortable.dropped\", { name: spoken(active.id), position: at(over.id) + 1, total }) : t(\"sortable.droppedAway\", { name: spoken(active.id) }),\n onDragCancel: ({ active }) => t(\"sortable.canceled\", { name: spoken(active.id) }),\n };\n const instructions: ScreenReaderInstructions = { draggable: t(wholeItem ? \"sortable.instructionsTile\" : \"sortable.instructions\") };\n const from = active ? at(active) : -1;\n const to = over ? at(over) : -1;\n const dragged = from >= 0 ? items[from] : undefined;\n const grid = layout === \"grid\";\n const list = (inner: ReactNode, overlay?: boolean) => (\n <ol\n className={cn(grid ? \"grid grid-cols-[repeat(auto-fill,minmax(8rem,1fr))] gap-2\" : \"grid gap-1\", className)}\n aria-label={overlay ? undefined : label}\n data-ckui=\"sortable-list\"\n data-layout={layout}\n data-overlay={overlay ? \"\" : undefined}\n >\n {inner}\n </ol>\n );\n return (\n <ContentKitUiRoot appearance={appearance} className=\"contents\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n accessibility={{ announcements, screenReaderInstructions: instructions }}\n onDragStart={(e) => setActive(String(e.active.id))}\n onDragOver={(e) => setOver(e.over ? String(e.over.id) : null)}\n onDragCancel={() => {\n setActive(null);\n setOver(null);\n }}\n onDragEnd={(e) => {\n setActive(null);\n setOver(null);\n const a = at(e.active.id);\n const b = e.over ? at(e.over.id) : -1;\n if (a >= 0 && b >= 0 && a !== b) onMove(a, b);\n }}\n >\n <SortableContext items={ids} strategy={noShift} disabled={disabled}>\n {list(\n items.map((item, i) => (\n <Item\n key={ids[i]}\n id={ids[i]!}\n label={t(\"sortable.handle\", { name: name(item) })}\n attrs={row?.(item)}\n disabled={disabled}\n grid={grid}\n whole={wholeItem}\n dragging={i === from}\n drop={from >= 0 && i === to && to !== from ? (to > from ? \"after\" : \"before\") : undefined}\n render={(handle) => children(item, handle, i)}\n />\n )).concat(trailing ? [<Fragment key=\"trailing\">{trailing}</Fragment>] : []),\n )}\n </SortableContext>\n <DragOverlay dropAnimation={null}>\n {dragged !== undefined\n ? list(\n <li {...row?.(dragged)} className={cn(row?.(dragged).className, \"cursor-grabbing rounded-md bg-background shadow-lg ring-1 ring-border\")}>\n {children(\n dragged,\n wholeItem ? null : (\n <span className={handleClass}>\n <HugeiconsIcon icon={DragDropVerticalIcon} strokeWidth={2} className=\"size-4.5\" />\n </span>\n ),\n from,\n )}\n </li>,\n true,\n )\n : null}\n </DragOverlay>\n </DndContext>\n </ContentKitUiRoot>\n );\n}\n\nfunction Item({\n id,\n label,\n attrs,\n disabled,\n grid,\n whole,\n dragging,\n drop,\n render,\n}: {\n id: string;\n label: string;\n attrs?: HTMLAttributes<HTMLLIElement>;\n disabled?: boolean;\n grid: boolean;\n whole?: boolean;\n dragging: boolean;\n drop?: \"before\" | \"after\";\n render: (handle: ReactNode) => ReactNode;\n}) {\n const { attributes, listeners, setNodeRef, setActivatorNodeRef } = useSortable({ id });\n const handle = whole ? null : (\n <button type=\"button\" ref={setActivatorNodeRef} className={handleClass} aria-label={label} disabled={disabled} data-ckui=\"sort-handle\" {...attributes} {...listeners}>\n <HugeiconsIcon icon={DragDropVerticalIcon} strokeWidth={2} className=\"size-4.5\" />\n </button>\n );\n return (\n <li\n {...attrs}\n {...(whole && !disabled\n ? {\n ...attributes,\n ...listeners,\n onKeyDown: (e: KeyboardEvent<HTMLLIElement>) => {\n listeners?.onKeyDown?.(e);\n attrs?.onKeyDown?.(e);\n },\n \"aria-label\": label,\n }\n : {})}\n ref={setNodeRef}\n className={cn(\n attrs?.className,\n \"relative data-dragging:opacity-40 before:pointer-events-none before:absolute before:rounded-full before:bg-primary before:opacity-0\",\n grid\n ? \"before:inset-y-0 before:w-0.5 data-[drop=before]:before:-left-[5px] data-[drop=before]:before:opacity-100 data-[drop=after]:before:-right-[5px] data-[drop=after]:before:opacity-100\"\n : \"before:inset-x-0 before:h-0.5 data-[drop=before]:before:-top-[3px] data-[drop=before]:before:opacity-100 data-[drop=after]:before:-bottom-[3px] data-[drop=after]:before:opacity-100\",\n )}\n data-drop={drop}\n data-dragging={dragging || undefined}\n >\n {render(handle)}\n </li>\n );\n}\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -30,7 +30,7 @@ export { GroupManager, useGroupManagerAccess, type GroupManagerProps } from './c
30
30
  export { MediaItemPanel, VideoMediaEditor, videoPaths, type MediaItemPanelProps, type VideoMediaEditorProps } from './components/admin/media-item-panel.js';
31
31
  export { StatsDashboard, type StatsDashboardProps } from './components/admin/stats-dashboard.js';
32
32
  export { ReaderManifestEditor, type ReaderManifestEditorProps } from './components/admin/reader-manifest.js';
33
- export { PageReview, type PageReviewProps } from './components/admin/page-review.js';
33
+ export { PageNotices, type PageNoticesProps } from './components/admin/page-notices.js';
34
34
  export { UploadQueue, type UploadQueueProps } from './components/admin/upload-queue.js';
35
35
  export { NoAccess, Pager, useConfirm, type AdminFlowProps, type AdminRouteProps, type ConfirmOptions, type ContentKitGuard } from './components/admin/shell.js';
36
36
  export type { AdminNavigation, ContentKitAuth, StaffAccess, StaffArea } from './react/admin.js';