gw-admin 0.1.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.
Files changed (166) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/LICENSE +21 -0
  3. package/README.md +569 -0
  4. package/dist/account/admin-logout-button.d.ts +21 -0
  5. package/dist/account/admin-logout-button.d.ts.map +1 -0
  6. package/dist/account/admin-logout-button.js +57 -0
  7. package/dist/account/admin-logout-button.js.map +1 -0
  8. package/dist/account/index.d.ts +2 -0
  9. package/dist/account/index.d.ts.map +1 -0
  10. package/dist/account/index.js +3 -0
  11. package/dist/account/index.js.map +1 -0
  12. package/dist/attachments/admin-attachment-list.d.ts +12 -0
  13. package/dist/attachments/admin-attachment-list.d.ts.map +1 -0
  14. package/dist/attachments/admin-attachment-list.js +11 -0
  15. package/dist/attachments/admin-attachment-list.js.map +1 -0
  16. package/dist/attachments/admin-file-attachments.d.ts +33 -0
  17. package/dist/attachments/admin-file-attachments.d.ts.map +1 -0
  18. package/dist/attachments/admin-file-attachments.js +94 -0
  19. package/dist/attachments/admin-file-attachments.js.map +1 -0
  20. package/dist/attachments/index.d.ts +4 -0
  21. package/dist/attachments/index.d.ts.map +1 -0
  22. package/dist/attachments/index.js +3 -0
  23. package/dist/attachments/index.js.map +1 -0
  24. package/dist/attachments/types.d.ts +12 -0
  25. package/dist/attachments/types.d.ts.map +1 -0
  26. package/dist/attachments/types.js +2 -0
  27. package/dist/attachments/types.js.map +1 -0
  28. package/dist/crud/form/admin-crud-form.d.ts +41 -0
  29. package/dist/crud/form/admin-crud-form.d.ts.map +1 -0
  30. package/dist/crud/form/admin-crud-form.js +56 -0
  31. package/dist/crud/form/admin-crud-form.js.map +1 -0
  32. package/dist/crud/form/form-state.d.ts +12 -0
  33. package/dist/crud/form/form-state.d.ts.map +1 -0
  34. package/dist/crud/form/form-state.js +48 -0
  35. package/dist/crud/form/form-state.js.map +1 -0
  36. package/dist/crud/form/index.d.ts +3 -0
  37. package/dist/crud/form/index.d.ts.map +1 -0
  38. package/dist/crud/form/index.js +3 -0
  39. package/dist/crud/form/index.js.map +1 -0
  40. package/dist/crud/index.d.ts +3 -0
  41. package/dist/crud/index.d.ts.map +1 -0
  42. package/dist/crud/index.js +3 -0
  43. package/dist/crud/index.js.map +1 -0
  44. package/dist/crud/pages/admin-crud-detail-page.d.ts +33 -0
  45. package/dist/crud/pages/admin-crud-detail-page.d.ts.map +1 -0
  46. package/dist/crud/pages/admin-crud-detail-page.js +39 -0
  47. package/dist/crud/pages/admin-crud-detail-page.js.map +1 -0
  48. package/dist/crud/pages/admin-crud-form-pages.d.ts +27 -0
  49. package/dist/crud/pages/admin-crud-form-pages.d.ts.map +1 -0
  50. package/dist/crud/pages/admin-crud-form-pages.js +44 -0
  51. package/dist/crud/pages/admin-crud-form-pages.js.map +1 -0
  52. package/dist/crud/pages/admin-crud-list-page.d.ts +27 -0
  53. package/dist/crud/pages/admin-crud-list-page.d.ts.map +1 -0
  54. package/dist/crud/pages/admin-crud-list-page.js +33 -0
  55. package/dist/crud/pages/admin-crud-list-page.js.map +1 -0
  56. package/dist/crud/pages/admin-delete-form.d.ts +12 -0
  57. package/dist/crud/pages/admin-delete-form.d.ts.map +1 -0
  58. package/dist/crud/pages/admin-delete-form.js +15 -0
  59. package/dist/crud/pages/admin-delete-form.js.map +1 -0
  60. package/dist/crud/pages/format-admin-value.d.ts +5 -0
  61. package/dist/crud/pages/format-admin-value.d.ts.map +1 -0
  62. package/dist/crud/pages/format-admin-value.js +38 -0
  63. package/dist/crud/pages/format-admin-value.js.map +1 -0
  64. package/dist/crud/pages/index.d.ts +6 -0
  65. package/dist/crud/pages/index.d.ts.map +1 -0
  66. package/dist/crud/pages/index.js +6 -0
  67. package/dist/crud/pages/index.js.map +1 -0
  68. package/dist/crud/preset/client.d.ts +2 -0
  69. package/dist/crud/preset/client.d.ts.map +1 -0
  70. package/dist/crud/preset/client.js +3 -0
  71. package/dist/crud/preset/client.js.map +1 -0
  72. package/dist/crud/preset/create-admin-crud-form.d.ts +41 -0
  73. package/dist/crud/preset/create-admin-crud-form.d.ts.map +1 -0
  74. package/dist/crud/preset/create-admin-crud-form.js +68 -0
  75. package/dist/crud/preset/create-admin-crud-form.js.map +1 -0
  76. package/dist/crud/preset/create-admin-crud-pages.d.ts +29 -0
  77. package/dist/crud/preset/create-admin-crud-pages.d.ts.map +1 -0
  78. package/dist/crud/preset/create-admin-crud-pages.js +46 -0
  79. package/dist/crud/preset/create-admin-crud-pages.js.map +1 -0
  80. package/dist/crud/preset/create-admin-crud-route-page.d.ts +18 -0
  81. package/dist/crud/preset/create-admin-crud-route-page.d.ts.map +1 -0
  82. package/dist/crud/preset/create-admin-crud-route-page.js +26 -0
  83. package/dist/crud/preset/create-admin-crud-route-page.js.map +1 -0
  84. package/dist/crud/preset/index.d.ts +3 -0
  85. package/dist/crud/preset/index.d.ts.map +1 -0
  86. package/dist/crud/preset/index.js +3 -0
  87. package/dist/crud/preset/index.js.map +1 -0
  88. package/dist/header/admin-page-header.d.ts +15 -0
  89. package/dist/header/admin-page-header.d.ts.map +1 -0
  90. package/dist/header/admin-page-header.js +10 -0
  91. package/dist/header/admin-page-header.js.map +1 -0
  92. package/dist/header/index.d.ts +2 -0
  93. package/dist/header/index.d.ts.map +1 -0
  94. package/dist/header/index.js +2 -0
  95. package/dist/header/index.js.map +1 -0
  96. package/dist/index.d.ts +7 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +7 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/internal/class-names.d.ts +5 -0
  101. package/dist/internal/class-names.d.ts.map +1 -0
  102. package/dist/internal/class-names.js +7 -0
  103. package/dist/internal/class-names.js.map +1 -0
  104. package/dist/layout/admin-layout.d.ts +16 -0
  105. package/dist/layout/admin-layout.d.ts.map +1 -0
  106. package/dist/layout/admin-layout.js +17 -0
  107. package/dist/layout/admin-layout.js.map +1 -0
  108. package/dist/layout/admin-shell.d.ts +12 -0
  109. package/dist/layout/admin-shell.d.ts.map +1 -0
  110. package/dist/layout/admin-shell.js +10 -0
  111. package/dist/layout/admin-shell.js.map +1 -0
  112. package/dist/layout/admin-sidebar.d.ts +11 -0
  113. package/dist/layout/admin-sidebar.d.ts.map +1 -0
  114. package/dist/layout/admin-sidebar.js +10 -0
  115. package/dist/layout/admin-sidebar.js.map +1 -0
  116. package/dist/layout/index.d.ts +4 -0
  117. package/dist/layout/index.d.ts.map +1 -0
  118. package/dist/layout/index.js +4 -0
  119. package/dist/layout/index.js.map +1 -0
  120. package/dist/layout/mobile.d.ts +15 -0
  121. package/dist/layout/mobile.d.ts.map +1 -0
  122. package/dist/layout/mobile.js +32 -0
  123. package/dist/layout/mobile.js.map +1 -0
  124. package/dist/navigation/admin-navigation.d.ts +21 -0
  125. package/dist/navigation/admin-navigation.d.ts.map +1 -0
  126. package/dist/navigation/admin-navigation.js +22 -0
  127. package/dist/navigation/admin-navigation.js.map +1 -0
  128. package/dist/navigation/index.d.ts +2 -0
  129. package/dist/navigation/index.d.ts.map +1 -0
  130. package/dist/navigation/index.js +2 -0
  131. package/dist/navigation/index.js.map +1 -0
  132. package/dist/pages/admin-account-page.d.ts +13 -0
  133. package/dist/pages/admin-account-page.d.ts.map +1 -0
  134. package/dist/pages/admin-account-page.js +11 -0
  135. package/dist/pages/admin-account-page.js.map +1 -0
  136. package/dist/pages/admin-dashboard-page.d.ts +15 -0
  137. package/dist/pages/admin-dashboard-page.d.ts.map +1 -0
  138. package/dist/pages/admin-dashboard-page.js +8 -0
  139. package/dist/pages/admin-dashboard-page.js.map +1 -0
  140. package/dist/pages/index.d.ts +3 -0
  141. package/dist/pages/index.d.ts.map +1 -0
  142. package/dist/pages/index.js +3 -0
  143. package/dist/pages/index.js.map +1 -0
  144. package/dist/rich-text/admin-rich-text-editor.d.ts +27 -0
  145. package/dist/rich-text/admin-rich-text-editor.d.ts.map +1 -0
  146. package/dist/rich-text/admin-rich-text-editor.js +102 -0
  147. package/dist/rich-text/admin-rich-text-editor.js.map +1 -0
  148. package/dist/rich-text/admin-rich-text-file.d.ts +24 -0
  149. package/dist/rich-text/admin-rich-text-file.d.ts.map +1 -0
  150. package/dist/rich-text/admin-rich-text-file.js +80 -0
  151. package/dist/rich-text/admin-rich-text-file.js.map +1 -0
  152. package/dist/rich-text/admin-rich-text-view.d.ts +9 -0
  153. package/dist/rich-text/admin-rich-text-view.d.ts.map +1 -0
  154. package/dist/rich-text/admin-rich-text-view.js +9 -0
  155. package/dist/rich-text/admin-rich-text-view.js.map +1 -0
  156. package/dist/rich-text/index.d.ts +5 -0
  157. package/dist/rich-text/index.d.ts.map +1 -0
  158. package/dist/rich-text/index.js +5 -0
  159. package/dist/rich-text/index.js.map +1 -0
  160. package/dist/rich-text/plain-text.d.ts +9 -0
  161. package/dist/rich-text/plain-text.d.ts.map +1 -0
  162. package/dist/rich-text/plain-text.js +24 -0
  163. package/dist/rich-text/plain-text.js.map +1 -0
  164. package/package.json +163 -0
  165. package/rich-text.css +1 -0
  166. package/styles.css +901 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-rich-text-file.d.ts","sourceRoot":"","sources":["../../src/rich-text/admin-rich-text-file.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAgBjE;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;UAMnB,MAAM,GAAG,IAAI;;EAgC7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;UAlCb,MAAM,GAAG,IAAI;;GAkCsC,CAAC;AAEtE,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,aAAa,KACnB,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,yBAAyB,GACpC,aAAa,CAqCf"}
@@ -0,0 +1,80 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { defineEditorElement, imageElement, videoElement, } from "gw-rich-text-editor/unstyled";
4
+ function parseNullableNumber(value) {
5
+ if (!value) {
6
+ return null;
7
+ }
8
+ const number = Number(value);
9
+ return Number.isFinite(number) ? number : null;
10
+ }
11
+ function metadataNumber(metadata, key) {
12
+ const value = metadata?.[key];
13
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
14
+ }
15
+ /**
16
+ * A downloadable file node shared by the editor and read-only renderer.
17
+ */
18
+ export const adminRichTextFileElement = defineEditorElement({
19
+ type: "file",
20
+ display: "block",
21
+ attributes: {
22
+ href: "",
23
+ name: "",
24
+ size: null,
25
+ mimeType: "",
26
+ },
27
+ selector: 'a[data-gw-admin-editor-file="true"], a[data-editor-element="file"]',
28
+ parse(element) {
29
+ return {
30
+ href: element.getAttribute("href") || "",
31
+ name: element.dataset.name || element.textContent || "",
32
+ size: parseNullableNumber(element.dataset.size),
33
+ mimeType: element.dataset.mimeType || "",
34
+ };
35
+ },
36
+ render({ href, name, size, mimeType }) {
37
+ return (_jsxs("a", { href: href, download: name, "data-gw-admin-editor-file": "true", "data-editor-element": "file", "data-name": name, "data-size": size ?? undefined, "data-mime-type": mimeType, className: "gw-admin-rich-text-file", children: [_jsx("span", { "aria-hidden": "true", children: "\u2193" }), _jsx("span", { children: name }), size !== null && (_jsxs("small", { children: [Math.max(1, Math.ceil(size / 1024)).toLocaleString("ko-KR"), " KB"] }))] }));
38
+ },
39
+ });
40
+ export const adminRichTextNodes = [adminRichTextFileElement];
41
+ /**
42
+ * Adapts an application-owned uploader to image, video, and downloadable file
43
+ * nodes understood by gw-rich-text-editor.
44
+ */
45
+ export function createAdminRichTextUploadAdapter(uploadFile) {
46
+ return {
47
+ async upload(file, context) {
48
+ const uploadedFile = await uploadFile(file, context);
49
+ const width = metadataNumber(uploadedFile.metadata, "width");
50
+ const height = metadataNumber(uploadedFile.metadata, "height");
51
+ if (file.type.startsWith("image/")) {
52
+ return imageElement.create({
53
+ src: uploadedFile.url,
54
+ alt: uploadedFile.name,
55
+ title: uploadedFile.name,
56
+ width,
57
+ height,
58
+ srcSet: null,
59
+ sizes: null,
60
+ });
61
+ }
62
+ if (file.type.startsWith("video/")) {
63
+ return videoElement.create({
64
+ src: uploadedFile.url,
65
+ title: uploadedFile.name,
66
+ width,
67
+ height,
68
+ poster: null,
69
+ });
70
+ }
71
+ return adminRichTextFileElement.create({
72
+ href: uploadedFile.url,
73
+ name: uploadedFile.name,
74
+ size: uploadedFile.size ?? null,
75
+ mimeType: uploadedFile.type ?? "",
76
+ });
77
+ },
78
+ };
79
+ }
80
+ //# sourceMappingURL=admin-rich-text-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-rich-text-file.js","sourceRoot":"","sources":["../../src/rich-text/admin-rich-text-file.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type AdminRichTextViewProps = {
2
+ value: string;
3
+ className?: string;
4
+ };
5
+ /**
6
+ * Renders saved editor HTML through gw-rich-text-editor's sanitized viewer.
7
+ */
8
+ export declare function AdminRichTextView({ value, className }: AdminRichTextViewProps): import("react").JSX.Element;
9
+ //# sourceMappingURL=admin-rich-text-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-rich-text-view.d.ts","sourceRoot":"","sources":["../../src/rich-text/admin-rich-text-view.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,sBAAsB,+BAO7E"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { TextEditorView } from "gw-rich-text-editor/view";
3
+ /**
4
+ * Renders saved editor HTML through gw-rich-text-editor's sanitized viewer.
5
+ */
6
+ export function AdminRichTextView({ value, className }) {
7
+ return (_jsx(TextEditorView, { value: value, className: ["gw-admin-rich-text-view", className].filter(Boolean).join(" ") }));
8
+ }
9
+ //# sourceMappingURL=admin-rich-text-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-rich-text-view.js","sourceRoot":"","sources":["../../src/rich-text/admin-rich-text-view.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAO1D;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,KAAK,EAAE,SAAS,EAA0B;IAC5E,OAAO,CACL,KAAC,cAAc,IACb,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAC3E,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { AdminRichTextEditor, type AdminEditorCommand, type AdminRichTextEditorProps, type AdminRichTextToolbarItem, } from "./admin-rich-text-editor.js";
2
+ export { AdminRichTextView, type AdminRichTextViewProps, } from "./admin-rich-text-view.js";
3
+ export { adminRichTextFileElement, adminRichTextNodes, createAdminRichTextUploadAdapter, type AdminRichTextFileUploader, } from "./admin-rich-text-file.js";
4
+ export { getRichTextPlainText, hasRichTextContent } from "./plain-text.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rich-text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,gCAAgC,EAChC,KAAK,yBAAyB,GAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { AdminRichTextEditor, } from "./admin-rich-text-editor.js";
2
+ export { AdminRichTextView, } from "./admin-rich-text-view.js";
3
+ export { adminRichTextFileElement, adminRichTextNodes, createAdminRichTextUploadAdapter, } from "./admin-rich-text-file.js";
4
+ export { getRichTextPlainText, hasRichTextContent } from "./plain-text.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rich-text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,GAIpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,GAElB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,gCAAgC,GAEjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Converts editor HTML to normalized text for validation and summaries.
3
+ */
4
+ export declare function getRichTextPlainText(value: string): string;
5
+ /**
6
+ * Reports whether editor HTML contains user-visible text.
7
+ */
8
+ export declare function hasRichTextContent(value: string): boolean;
9
+ //# sourceMappingURL=plain-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain-text.d.ts","sourceRoot":"","sources":["../../src/rich-text/plain-text.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,UAUjD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,WAE/C"}
@@ -0,0 +1,24 @@
1
+ const blockClosingTagPattern = /<\/(?:blockquote|div|h[1-6]|li|ol|p|pre|ul)>/gi;
2
+ const lineBreakPattern = /<br\s*\/?>/gi;
3
+ const htmlTagPattern = /<[^>]*>/g;
4
+ /**
5
+ * Converts editor HTML to normalized text for validation and summaries.
6
+ */
7
+ export function getRichTextPlainText(value) {
8
+ return value
9
+ .replace(lineBreakPattern, "\n")
10
+ .replace(blockClosingTagPattern, "\n")
11
+ .replace(htmlTagPattern, "")
12
+ .replace(/&nbsp;|&#160;/gi, " ")
13
+ .replace(/&amp;/gi, "&")
14
+ .replace(/&lt;/gi, "<")
15
+ .replace(/&gt;/gi, ">")
16
+ .trim();
17
+ }
18
+ /**
19
+ * Reports whether editor HTML contains user-visible text.
20
+ */
21
+ export function hasRichTextContent(value) {
22
+ return getRichTextPlainText(value).length > 0;
23
+ }
24
+ //# sourceMappingURL=plain-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain-text.js","sourceRoot":"","sources":["../../src/rich-text/plain-text.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAG,gDAAgD,CAAC;AAChF,MAAM,gBAAgB,GAAG,cAAc,CAAC;AACxC,MAAM,cAAc,GAAG,UAAU,CAAC;AAElC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,KAAK;SACT,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;SAC/B,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;SACrC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;SAC/B,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,163 @@
1
+ {
2
+ "name": "gw-admin",
3
+ "version": "0.1.0",
4
+ "description": "Composable administration UI for the Next.js App Router and next-headless-crud.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "sideEffects": [
10
+ "*.css"
11
+ ],
12
+ "files": [
13
+ "dist",
14
+ "styles.css",
15
+ "rich-text.css",
16
+ "README.md",
17
+ "CHANGELOG.md",
18
+ "LICENSE"
19
+ ],
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
24
+ },
25
+ "./layout": {
26
+ "types": "./dist/layout/index.d.ts",
27
+ "import": "./dist/layout/index.js"
28
+ },
29
+ "./layout/mobile": {
30
+ "types": "./dist/layout/mobile.d.ts",
31
+ "import": "./dist/layout/mobile.js"
32
+ },
33
+ "./header": {
34
+ "types": "./dist/header/index.d.ts",
35
+ "import": "./dist/header/index.js"
36
+ },
37
+ "./navigation": {
38
+ "types": "./dist/navigation/index.d.ts",
39
+ "import": "./dist/navigation/index.js"
40
+ },
41
+ "./account": {
42
+ "types": "./dist/account/index.d.ts",
43
+ "import": "./dist/account/index.js"
44
+ },
45
+ "./pages": {
46
+ "types": "./dist/pages/index.d.ts",
47
+ "import": "./dist/pages/index.js"
48
+ },
49
+ "./crud": {
50
+ "types": "./dist/crud/index.d.ts",
51
+ "import": "./dist/crud/index.js"
52
+ },
53
+ "./crud/pages": {
54
+ "types": "./dist/crud/pages/index.d.ts",
55
+ "import": "./dist/crud/pages/index.js"
56
+ },
57
+ "./crud/form": {
58
+ "types": "./dist/crud/form/index.d.ts",
59
+ "import": "./dist/crud/form/index.js"
60
+ },
61
+ "./crud/preset": {
62
+ "types": "./dist/crud/preset/index.d.ts",
63
+ "import": "./dist/crud/preset/index.js"
64
+ },
65
+ "./crud/preset/client": {
66
+ "types": "./dist/crud/preset/client.d.ts",
67
+ "import": "./dist/crud/preset/client.js"
68
+ },
69
+ "./attachments": {
70
+ "types": "./dist/attachments/index.d.ts",
71
+ "import": "./dist/attachments/index.js"
72
+ },
73
+ "./rich-text": {
74
+ "types": "./dist/rich-text/index.d.ts",
75
+ "import": "./dist/rich-text/index.js"
76
+ },
77
+ "./styles.css": "./styles.css",
78
+ "./rich-text.css": "./rich-text.css"
79
+ },
80
+ "scripts": {
81
+ "clean": "rimraf dist",
82
+ "build": "npm run clean && tsc -p tsconfig.build.json",
83
+ "typecheck": "tsc --noEmit",
84
+ "test": "vitest run",
85
+ "check": "npm run typecheck && npm test && npm run build",
86
+ "pack:check": "npm pack --dry-run",
87
+ "prepublishOnly": "npm run check"
88
+ },
89
+ "repository": {
90
+ "type": "git",
91
+ "url": "git+https://github.com/gawonsoft/gw-admin.git"
92
+ },
93
+ "author": "oh-jinsu",
94
+ "license": "MIT",
95
+ "bugs": {
96
+ "url": "https://github.com/gawonsoft/gw-admin/issues"
97
+ },
98
+ "homepage": "https://github.com/gawonsoft/gw-admin#readme",
99
+ "keywords": [
100
+ "admin",
101
+ "crud",
102
+ "nextjs",
103
+ "react",
104
+ "react-server-components",
105
+ "typescript"
106
+ ],
107
+ "engines": {
108
+ "node": ">=20"
109
+ },
110
+ "publishConfig": {
111
+ "access": "public"
112
+ },
113
+ "dependencies": {
114
+ "react-icons": "^5.7.0"
115
+ },
116
+ "peerDependencies": {
117
+ "gw-react-file-input": "^0.1.0",
118
+ "gw-rich-text-editor": "^0.1.4",
119
+ "gw-store": "^0.1.1",
120
+ "next": ">=15.0.0",
121
+ "next-headless-crud": "^0.1.0",
122
+ "react": ">=19.0.0",
123
+ "react-dom": ">=19.0.0",
124
+ "react-store-input": "^0.2.6"
125
+ },
126
+ "peerDependenciesMeta": {
127
+ "gw-react-file-input": {
128
+ "optional": true
129
+ },
130
+ "gw-rich-text-editor": {
131
+ "optional": true
132
+ },
133
+ "gw-store": {
134
+ "optional": true
135
+ },
136
+ "next-headless-crud": {
137
+ "optional": true
138
+ },
139
+ "react-store-input": {
140
+ "optional": true
141
+ }
142
+ },
143
+ "devDependencies": {
144
+ "@types/node": "^24.10.1",
145
+ "@types/react": "^19.2.1",
146
+ "@types/react-dom": "^19.2.1",
147
+ "gw-react-file-input": "^0.1.0",
148
+ "gw-rich-text-editor": "^0.1.4",
149
+ "gw-store": "^0.1.1",
150
+ "next": "^16.2.12",
151
+ "next-headless-crud": "^0.1.0",
152
+ "react": "19.2.4",
153
+ "react-dom": "19.2.4",
154
+ "react-store-input": "^0.2.6",
155
+ "rimraf": "^6.1.2",
156
+ "typescript": "^5.9.3",
157
+ "vitest": "^4.1.0"
158
+ },
159
+ "overrides": {
160
+ "postcss": "8.5.25",
161
+ "sharp": "0.35.3"
162
+ }
163
+ }
package/rich-text.css ADDED
@@ -0,0 +1 @@
1
+ @import "gw-rich-text-editor/styles.css";