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,2 @@
1
+ export { AdminPageHeader, type AdminBreadcrumb, type AdminPageHeaderProps, } from "./admin-page-header.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/header/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { AdminPageHeader, } from "./admin-page-header.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/header/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAGhB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { AdminLayout, type AdminLayoutProps } from "./layout/admin-layout.js";
2
+ export { AdminShell, type AdminShellProps } from "./layout/admin-shell.js";
3
+ export { AdminSidebar, type AdminSidebarProps } from "./layout/admin-sidebar.js";
4
+ export { AdminNavigation, type AdminNavigationItem, type AdminNavigationProps, } from "./navigation/admin-navigation.js";
5
+ export { AdminPageHeader, type AdminBreadcrumb, type AdminPageHeaderProps, } from "./header/admin-page-header.js";
6
+ export { AdminAccountPage, AdminDashboardPage, type AdminAccountPageProps, type AdminDashboardItem, type AdminDashboardPageProps, } from "./pages/index.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { AdminLayout } from "./layout/admin-layout.js";
2
+ export { AdminShell } from "./layout/admin-shell.js";
3
+ export { AdminSidebar } from "./layout/admin-sidebar.js";
4
+ export { AdminNavigation, } from "./navigation/admin-navigation.js";
5
+ export { AdminPageHeader, } from "./header/admin-page-header.js";
6
+ export { AdminAccountPage, AdminDashboardPage, } from "./pages/index.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyB,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAwB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAA0B,MAAM,2BAA2B,CAAC;AACjF,OAAO,EACL,eAAe,GAGhB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,eAAe,GAGhB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GAInB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Joins optional class names without adding a styling dependency.
3
+ */
4
+ export declare function classNames(...values: Array<string | false | null | undefined>): string;
5
+ //# sourceMappingURL=class-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-names.d.ts","sourceRoot":"","sources":["../../src/internal/class-names.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,UAE7E"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Joins optional class names without adding a styling dependency.
3
+ */
4
+ export function classNames(...values) {
5
+ return values.filter(Boolean).join(" ");
6
+ }
7
+ //# sourceMappingURL=class-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-names.js","sourceRoot":"","sources":["../../src/internal/class-names.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAG,MAAgD;IAC5E,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ReactNode } from "react";
2
+ import { type AdminNavigationItem } from "../navigation/admin-navigation.js";
3
+ import { type AdminShellProps } from "./admin-shell.js";
4
+ export type AdminLayoutProps = Omit<AdminShellProps, "sidebar" | "mobileHeader"> & {
5
+ brand: ReactNode;
6
+ navigation: readonly AdminNavigationItem[];
7
+ homeHref?: string;
8
+ sidebar?: ReactNode | false;
9
+ mobileHeader?: ReactNode | false;
10
+ };
11
+ /**
12
+ * Provides the complete default responsive admin frame from only a brand and
13
+ * navigation. Either navigation surface remains replaceable or removable.
14
+ */
15
+ export declare function AdminLayout({ brand, navigation, homeHref, sidebar, mobileHeader, ...props }: AdminLayoutProps): import("react").JSX.Element;
16
+ //# sourceMappingURL=admin-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-layout.d.ts","sourceRoot":"","sources":["../../src/layout/admin-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAmB,KAAK,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIpE,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,cAAc,CAAC,GAAG;IACjF,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IAC5B,YAAY,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;CAClC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,UAAU,EACV,QAAmB,EACnB,OAAO,EACP,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAqBlB"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { AdminNavigation } from "../navigation/admin-navigation.js";
3
+ import { AdminShell } from "./admin-shell.js";
4
+ import { AdminSidebar } from "./admin-sidebar.js";
5
+ import { AdminMobileHeader } from "./mobile.js";
6
+ /**
7
+ * Provides the complete default responsive admin frame from only a brand and
8
+ * navigation. Either navigation surface remains replaceable or removable.
9
+ */
10
+ export function AdminLayout({ brand, navigation, homeHref = "/admin", sidebar, mobileHeader, ...props }) {
11
+ const resolvedSidebar = sidebar === false ? undefined :
12
+ sidebar ?? (_jsx(AdminSidebar, { brand: brand, homeHref: homeHref, children: _jsx(AdminNavigation, { items: navigation }) }));
13
+ const resolvedMobileHeader = mobileHeader === false ? undefined :
14
+ mobileHeader ?? (_jsx(AdminMobileHeader, { brand: brand, navigation: navigation, homeHref: homeHref }));
15
+ return (_jsx(AdminShell, { ...props, ...(resolvedSidebar !== undefined ? { sidebar: resolvedSidebar } : {}), ...(resolvedMobileHeader !== undefined ? { mobileHeader: resolvedMobileHeader } : {}) }));
16
+ }
17
+ //# sourceMappingURL=admin-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-layout.js","sourceRoot":"","sources":["../../src/layout/admin-layout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAA4B,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAUhD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,UAAU,EACV,QAAQ,GAAG,QAAQ,EACnB,OAAO,EACP,YAAY,EACZ,GAAG,KAAK,EACS;IACjB,MAAM,eAAe,GACnB,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO,IAAI,CACT,KAAC,YAAY,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,YAC5C,KAAC,eAAe,IAAC,KAAK,EAAE,UAAU,GAAI,GACzB,CAChB,CAAC;IACJ,MAAM,oBAAoB,GACxB,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACpC,YAAY,IAAI,CACd,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAChF,CAAC;IAEJ,OAAO,CACL,KAAC,UAAU,OACL,KAAK,KACL,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACnE,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GACtF,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type AdminShellProps = HTMLAttributes<HTMLDivElement> & {
3
+ sidebar?: ReactNode;
4
+ mobileHeader?: ReactNode;
5
+ contentClassName?: string;
6
+ };
7
+ /**
8
+ * Provides only the admin page frame. Sidebar and mobile header are slots so
9
+ * consumers can use the defaults, replace either one, or opt out completely.
10
+ */
11
+ export declare function AdminShell({ sidebar, mobileHeader, contentClassName, className, children, ...props }: AdminShellProps): import("react").JSX.Element;
12
+ //# sourceMappingURL=admin-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-shell.d.ts","sourceRoot":"","sources":["../../src/layout/admin-shell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAC7D,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,+BAUjB"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { classNames } from "../internal/class-names.js";
3
+ /**
4
+ * Provides only the admin page frame. Sidebar and mobile header are slots so
5
+ * consumers can use the defaults, replace either one, or opt out completely.
6
+ */
7
+ export function AdminShell({ sidebar, mobileHeader, contentClassName, className, children, ...props }) {
8
+ return (_jsxs("div", { className: classNames("gw-admin-shell", className), ...props, children: [mobileHeader, _jsxs("div", { className: "gw-admin-shell__body", children: [sidebar, _jsx("div", { className: classNames("gw-admin-shell__content", contentClassName), children: children })] })] }));
9
+ }
10
+ //# sourceMappingURL=admin-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-shell.js","sourceRoot":"","sources":["../../src/layout/admin-shell.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAQxD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACQ;IAChB,OAAO,CACL,eAAK,SAAS,EAAE,UAAU,CAAC,gBAAgB,EAAE,SAAS,CAAC,KAAM,KAAK,aAC/D,YAAY,EACb,eAAK,SAAS,EAAC,sBAAsB,aAClC,OAAO,EACR,cAAK,SAAS,EAAE,UAAU,CAAC,yBAAyB,EAAE,gBAAgB,CAAC,YAAG,QAAQ,GAAO,IACrF,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type AdminSidebarProps = HTMLAttributes<HTMLElement> & {
3
+ brand: ReactNode;
4
+ homeHref?: string;
5
+ children?: ReactNode;
6
+ };
7
+ /**
8
+ * Renders a desktop sidebar without owning brand assets or navigation data.
9
+ */
10
+ export declare function AdminSidebar({ brand, homeHref, className, children, ...props }: AdminSidebarProps): import("react").JSX.Element;
11
+ //# sourceMappingURL=admin-sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-sidebar.d.ts","sourceRoot":"","sources":["../../src/layout/admin-sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,WAAW,CAAC,GAAG;IAC5D,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAmB,EACnB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,iBAAiB,+BASnB"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Link from "next/link";
3
+ import { classNames } from "../internal/class-names.js";
4
+ /**
5
+ * Renders a desktop sidebar without owning brand assets or navigation data.
6
+ */
7
+ export function AdminSidebar({ brand, homeHref = "/admin", className, children, ...props }) {
8
+ return (_jsxs("aside", { className: classNames("gw-admin-sidebar", className), ...props, children: [_jsx(Link, { href: homeHref, className: "gw-admin-sidebar__brand", "aria-label": "\uAD00\uB9AC\uC790 \uD648", children: brand }), _jsx("div", { className: "gw-admin-sidebar__navigation", children: children })] }));
9
+ }
10
+ //# sourceMappingURL=admin-sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-sidebar.js","sourceRoot":"","sources":["../../src/layout/admin-sidebar.tsx"],"names":[],"mappings":";AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAQxD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,GAAG,QAAQ,EACnB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACU;IAClB,OAAO,CACL,iBAAO,SAAS,EAAE,UAAU,CAAC,kBAAkB,EAAE,SAAS,CAAC,KAAM,KAAK,aACpE,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAC,yBAAyB,gBAAY,2BAAO,YACzE,KAAK,GACD,EACP,cAAK,SAAS,EAAC,8BAA8B,YAAE,QAAQ,GAAO,IACxD,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { AdminLayout, type AdminLayoutProps } from "./admin-layout.js";
2
+ export { AdminShell, type AdminShellProps } from "./admin-shell.js";
3
+ export { AdminSidebar, type AdminSidebarProps } from "./admin-sidebar.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { AdminLayout } from "./admin-layout.js";
2
+ export { AdminShell } from "./admin-shell.js";
3
+ export { AdminSidebar } from "./admin-sidebar.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type ReactNode } from "react";
2
+ import { type AdminNavigationItem } from "../navigation/admin-navigation.js";
3
+ export type AdminMobileHeaderProps = {
4
+ brand: ReactNode;
5
+ navigation: readonly AdminNavigationItem[];
6
+ homeHref?: string;
7
+ menuLabel?: string;
8
+ closeLabel?: string;
9
+ className?: string;
10
+ };
11
+ /**
12
+ * Renders the optional mobile app bar and navigation drawer.
13
+ */
14
+ export declare function AdminMobileHeader({ brand, navigation, homeHref, menuLabel, closeLabel, className, }: AdminMobileHeaderProps): import("react").JSX.Element;
15
+ //# sourceMappingURL=mobile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["../../src/layout/mobile.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,mCAAmC,CAAC;AAG3C,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,UAAU,EACV,QAAmB,EACnB,SAAuB,EACvB,UAAwB,EACxB,SAAS,GACV,EAAE,sBAAsB,+BAkExB"}
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import Link from "next/link";
4
+ import { useEffect, useState } from "react";
5
+ import { MdClose, MdMenu } from "react-icons/md";
6
+ import { AdminNavigation, } from "../navigation/admin-navigation.js";
7
+ import { classNames } from "../internal/class-names.js";
8
+ /**
9
+ * Renders the optional mobile app bar and navigation drawer.
10
+ */
11
+ export function AdminMobileHeader({ brand, navigation, homeHref = "/admin", menuLabel = "관리자 메뉴 열기", closeLabel = "관리자 메뉴 닫기", className, }) {
12
+ const [open, setOpen] = useState(false);
13
+ useEffect(() => {
14
+ if (!open) {
15
+ return;
16
+ }
17
+ const previousOverflow = document.body.style.overflow;
18
+ const closeOnEscape = (event) => {
19
+ if (event.key === "Escape") {
20
+ setOpen(false);
21
+ }
22
+ };
23
+ document.body.style.overflow = "hidden";
24
+ window.addEventListener("keydown", closeOnEscape);
25
+ return () => {
26
+ document.body.style.overflow = previousOverflow;
27
+ window.removeEventListener("keydown", closeOnEscape);
28
+ };
29
+ }, [open]);
30
+ return (_jsxs("header", { className: classNames("gw-admin-mobile-header", className), children: [_jsx(Link, { href: homeHref, className: "gw-admin-mobile-header__brand", "aria-label": "\uAD00\uB9AC\uC790 \uD648", children: brand }), _jsx("button", { type: "button", "aria-label": menuLabel, "aria-expanded": open, "aria-controls": "gw-admin-mobile-drawer", className: "gw-admin-icon-button", onClick: () => setOpen(true), children: _jsx(MdMenu, { "aria-hidden": "true" }) }), _jsx("div", { "aria-hidden": !open, className: classNames("gw-admin-drawer-backdrop", open && "is-open"), onClick: () => setOpen(false) }), _jsxs("div", { id: "gw-admin-mobile-drawer", role: "dialog", "aria-modal": "true", "aria-label": "\uAD00\uB9AC\uC790 \uBA54\uB274", className: classNames("gw-admin-drawer", open && "is-open"), children: [_jsx("div", { className: "gw-admin-drawer__header", children: _jsx("button", { type: "button", "aria-label": closeLabel, className: "gw-admin-icon-button", onClick: () => setOpen(false), children: _jsx(MdClose, { "aria-hidden": "true" }) }) }), _jsx(AdminNavigation, { items: navigation, onNavigate: () => setOpen(false) })] })] }));
31
+ }
32
+ //# sourceMappingURL=mobile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile.js","sourceRoot":"","sources":["../../src/layout/mobile.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,eAAe,GAEhB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAWxD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,UAAU,EACV,QAAQ,GAAG,QAAQ,EACnB,SAAS,GAAG,WAAW,EACvB,UAAU,GAAG,WAAW,EACxB,SAAS,GACc;IACvB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACtD,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC7C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEF,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACxC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAElD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC;YAChD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,CACL,kBAAQ,SAAS,EAAE,UAAU,CAAC,wBAAwB,EAAE,SAAS,CAAC,aAChE,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAC,+BAA+B,gBAAY,2BAAO,YAC/E,KAAK,GACD,EACP,iBACE,IAAI,EAAC,QAAQ,gBACD,SAAS,mBACN,IAAI,mBACL,wBAAwB,EACtC,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YAE5B,KAAC,MAAM,mBAAa,MAAM,GAAG,GACtB,EAET,6BACe,CAAC,IAAI,EAClB,SAAS,EAAE,UAAU,CAAC,0BAA0B,EAAE,IAAI,IAAI,SAAS,CAAC,EACpE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAC7B,EACF,eACE,EAAE,EAAC,wBAAwB,EAC3B,IAAI,EAAC,QAAQ,gBACF,MAAM,gBACN,iCAAQ,EACnB,SAAS,EAAE,UAAU,CAAC,iBAAiB,EAAE,IAAI,IAAI,SAAS,CAAC,aAE3D,cAAK,SAAS,EAAC,yBAAyB,YACtC,iBACE,IAAI,EAAC,QAAQ,gBACD,UAAU,EACtB,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,YAE7B,KAAC,OAAO,mBAAa,MAAM,GAAG,GACvB,GACL,EACN,KAAC,eAAe,IAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAI,IACpE,IACC,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ReactNode } from "react";
2
+ export type AdminNavigationItem = {
3
+ label: string;
4
+ href: string;
5
+ suffix?: ReactNode;
6
+ };
7
+ export type AdminNavigationProps = {
8
+ items: readonly AdminNavigationItem[];
9
+ ariaLabel?: string;
10
+ currentPath?: string;
11
+ onNavigate?: () => void;
12
+ className?: string;
13
+ };
14
+ /**
15
+ * Renders application-owned admin navigation items.
16
+ *
17
+ * Pass `currentPath` only when active-item styling is required. Omitting it
18
+ * keeps this component usable as a Server Component.
19
+ */
20
+ export declare function AdminNavigation({ items, ariaLabel, currentPath, onNavigate, className, }: AdminNavigationProps): import("react").JSX.Element;
21
+ //# sourceMappingURL=admin-navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-navigation.d.ts","sourceRoot":"","sources":["../../src/navigation/admin-navigation.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAUF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,SAAoB,EACpB,WAAW,EACX,UAAU,EACV,SAAS,GACV,EAAE,oBAAoB,+BAwBtB"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Link from "next/link";
3
+ import { classNames } from "../internal/class-names.js";
4
+ function isCurrentPath(currentPath, href) {
5
+ if (!currentPath) {
6
+ return false;
7
+ }
8
+ return currentPath === href || (href !== "/" && currentPath.startsWith(`${href}/`));
9
+ }
10
+ /**
11
+ * Renders application-owned admin navigation items.
12
+ *
13
+ * Pass `currentPath` only when active-item styling is required. Omitting it
14
+ * keeps this component usable as a Server Component.
15
+ */
16
+ export function AdminNavigation({ items, ariaLabel = "관리자 메뉴", currentPath, onNavigate, className, }) {
17
+ return (_jsx("nav", { "aria-label": ariaLabel, className: classNames("gw-admin-navigation", className), children: _jsx("ul", { className: "gw-admin-navigation__list", children: items.map((item) => {
18
+ const current = isCurrentPath(currentPath, item.href);
19
+ return (_jsx("li", { className: "gw-admin-navigation__item", children: _jsxs(Link, { href: item.href, ...(current ? { "aria-current": "page" } : {}), ...(onNavigate ? { onClick: onNavigate } : {}), className: classNames("gw-admin-navigation__link", current && "is-current"), children: [_jsx("span", { children: item.label }), item.suffix] }) }, item.href));
20
+ }) }) }));
21
+ }
22
+ //# sourceMappingURL=admin-navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-navigation.js","sourceRoot":"","sources":["../../src/navigation/admin-navigation.tsx"],"names":[],"mappings":";AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAgBxD,SAAS,aAAa,CAAC,WAA+B,EAAE,IAAY;IAClE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,WAAW,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACtF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,SAAS,GAAG,QAAQ,EACpB,WAAW,EACX,UAAU,EACV,SAAS,GACY;IACrB,OAAO,CACL,4BAAiB,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,qBAAqB,EAAE,SAAS,CAAC,YACjF,aAAI,SAAS,EAAC,2BAA2B,YACtC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAClB,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEtD,OAAO,CACL,aAAoB,SAAS,EAAC,2BAA2B,YACvD,MAAC,IAAI,IACH,IAAI,EAAE,IAAI,CAAC,IAAI,KACX,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC/C,SAAS,EAAE,UAAU,CAAC,2BAA2B,EAAE,OAAO,IAAI,YAAY,CAAC,aAE3E,yBAAO,IAAI,CAAC,KAAK,GAAQ,EACxB,IAAI,CAAC,MAAM,IACP,IATA,IAAI,CAAC,IAAI,CAUb,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { AdminNavigation, type AdminNavigationItem, type AdminNavigationProps, } from "./admin-navigation.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { AdminNavigation, } from "./admin-navigation.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAGhB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from "react";
2
+ import { type AdminLogoutButtonProps } from "../account/admin-logout-button.js";
3
+ import { type AdminBreadcrumb } from "../header/admin-page-header.js";
4
+ export type AdminAccountPageProps = {
5
+ title?: ReactNode;
6
+ breadcrumbs?: readonly AdminBreadcrumb[];
7
+ heading?: ReactNode;
8
+ description?: ReactNode;
9
+ logout?: AdminLogoutButtonProps;
10
+ };
11
+ /** Renders the default account page while keeping the logout flow configurable. */
12
+ export declare function AdminAccountPage({ title, breadcrumbs, heading, description, logout, }: AdminAccountPageProps): import("react").JSX.Element;
13
+ //# sourceMappingURL=admin-account-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-account-page.d.ts","sourceRoot":"","sources":["../../src/pages/admin-account-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEvF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACzC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,EAC/B,KAAY,EACZ,WAGC,EACD,OAAgB,EAChB,WAAiC,EACjC,MAAM,GACP,EAAE,qBAAqB,+BAWvB"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AdminLogoutButton, } from "../account/admin-logout-button.js";
3
+ import { AdminPageHeader } from "../header/admin-page-header.js";
4
+ /** Renders the default account page while keeping the logout flow configurable. */
5
+ export function AdminAccountPage({ title = "계정", breadcrumbs = [
6
+ { label: "관리자", href: "/admin" },
7
+ { label: "계정" },
8
+ ], heading = "로그아웃", description = "현재 관리자 세션을 종료합니다.", logout, }) {
9
+ return (_jsxs("main", { className: "gw-admin-page gw-admin-account-page", children: [_jsx(AdminPageHeader, { title: title, breadcrumbs: breadcrumbs }), _jsxs("section", { className: "gw-admin-account-page__section", children: [_jsx("h2", { children: heading }), _jsx("p", { children: description }), _jsx(AdminLogoutButton, { ...logout })] })] }));
10
+ }
11
+ //# sourceMappingURL=admin-account-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-account-page.js","sourceRoot":"","sources":["../../src/pages/admin-account-page.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,iBAAiB,GAElB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAwB,MAAM,gCAAgC,CAAC;AAUvF,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,GAAG,IAAI,EACZ,WAAW,GAAG;IACZ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;IAChC,EAAE,KAAK,EAAE,IAAI,EAAE;CAChB,EACD,OAAO,GAAG,MAAM,EAChB,WAAW,GAAG,mBAAmB,EACjC,MAAM,GACgB;IACtB,OAAO,CACL,gBAAM,SAAS,EAAC,qCAAqC,aACnD,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,GAAI,EAC3D,mBAAS,SAAS,EAAC,gCAAgC,aACjD,uBAAK,OAAO,GAAM,EAClB,sBAAI,WAAW,GAAK,EACpB,KAAC,iBAAiB,OAAK,MAAM,GAAI,IACzB,IACL,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ReactNode } from "react";
2
+ import { type AdminBreadcrumb } from "../header/admin-page-header.js";
3
+ export type AdminDashboardItem = {
4
+ label: ReactNode;
5
+ href: string;
6
+ description?: ReactNode;
7
+ };
8
+ export type AdminDashboardPageProps = {
9
+ title?: ReactNode;
10
+ breadcrumbs?: readonly AdminBreadcrumb[];
11
+ items: readonly AdminDashboardItem[];
12
+ };
13
+ /** Renders the conventional admin landing page from application-owned links. */
14
+ export declare function AdminDashboardPage({ title, breadcrumbs, items, }: AdminDashboardPageProps): import("react").JSX.Element;
15
+ //# sourceMappingURL=admin-dashboard-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-dashboard-page.d.ts","sourceRoot":"","sources":["../../src/pages/admin-dashboard-page.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEvF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACzC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACtC,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,EACjC,KAAqB,EACrB,WAAW,EACX,KAAK,GACN,EAAE,uBAAuB,+BAczB"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Link from "next/link";
3
+ import { AdminPageHeader } from "../header/admin-page-header.js";
4
+ /** Renders the conventional admin landing page from application-owned links. */
5
+ export function AdminDashboardPage({ title = "안녕하세요, 관리자님", breadcrumbs, items, }) {
6
+ return (_jsxs("main", { className: "gw-admin-page gw-admin-dashboard", children: [_jsx(AdminPageHeader, { title: title, ...(breadcrumbs ? { breadcrumbs } : {}) }), _jsx("div", { className: "gw-admin-dashboard__grid", children: items.map((item) => (_jsxs(Link, { href: item.href, className: "gw-admin-dashboard__item", children: [_jsx("strong", { children: item.label }), item.description && _jsx("span", { children: item.description })] }, item.href))) })] }));
7
+ }
8
+ //# sourceMappingURL=admin-dashboard-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-dashboard-page.js","sourceRoot":"","sources":["../../src/pages/admin-dashboard-page.tsx"],"names":[],"mappings":";AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAwB,MAAM,gCAAgC,CAAC;AAcvF,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,GAAG,aAAa,EACrB,WAAW,EACX,KAAK,GACmB;IACxB,OAAO,CACL,gBAAM,SAAS,EAAC,kCAAkC,aAChD,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,KAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAI,EAC3E,cAAK,SAAS,EAAC,0BAA0B,YACtC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,MAAC,IAAI,IAAiB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAC,0BAA0B,aACzE,2BAAS,IAAI,CAAC,KAAK,GAAU,EAC5B,IAAI,CAAC,WAAW,IAAI,yBAAO,IAAI,CAAC,WAAW,GAAQ,KAF3C,IAAI,CAAC,IAAI,CAGb,CACR,CAAC,GACE,IACD,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { AdminDashboardPage, type AdminDashboardItem, type AdminDashboardPageProps, } from "./admin-dashboard-page.js";
2
+ export { AdminAccountPage, type AdminAccountPageProps } from "./admin-account-page.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { AdminDashboardPage, } from "./admin-dashboard-page.js";
2
+ export { AdminAccountPage } from "./admin-account-page.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAGnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAA8B,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { Store } from "gw-store";
2
+ import { type TextEditorProps, type UploadAdapter } from "gw-rich-text-editor/unstyled";
3
+ import type { IconType } from "react-icons";
4
+ export type AdminEditorCommand = "attachFile" | "bold" | "italic" | "underline" | "heading" | "bulletList" | "orderedList" | "link" | "undo" | "redo";
5
+ export type AdminRichTextToolbarItem = {
6
+ command: AdminEditorCommand;
7
+ label: string;
8
+ icon?: IconType;
9
+ };
10
+ export type AdminRichTextEditorProps<TState extends Record<string, unknown>> = {
11
+ store: Store<TState>;
12
+ name: string;
13
+ placeholder?: string;
14
+ invalid?: boolean;
15
+ describedBy?: string;
16
+ upload?: UploadAdapter;
17
+ nodes?: TextEditorProps["nodes"];
18
+ marks?: TextEditorProps["marks"];
19
+ toolbar?: readonly AdminRichTextToolbarItem[] | false;
20
+ className?: string;
21
+ };
22
+ /**
23
+ * Connects gw-rich-text-editor to one gw-store field. Toolbar entries and
24
+ * upload behavior are independently replaceable or removable.
25
+ */
26
+ export declare function AdminRichTextEditor<TState extends Record<string, unknown>>({ store, name, placeholder, invalid, describedBy, upload, nodes, marks, toolbar, className, }: AdminRichTextEditorProps<TState>): import("react").JSX.Element;
27
+ //# sourceMappingURL=admin-rich-text-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-rich-text-editor.d.ts","sourceRoot":"","sources":["../../src/rich-text/admin-rich-text-editor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AActC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,MAAM,GACN,QAAQ,GACR,WAAW,GACX,SAAS,GACT,YAAY,GACZ,aAAa,GACb,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IAC7E,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,wBAAwB,EAAE,GAAG,KAAK,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAeF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC1E,KAAK,EACL,IAAI,EACJ,WAA4B,EAC5B,OAAe,EACf,WAAW,EACX,MAAM,EACN,KAAK,EACL,KAAK,EACL,OAAwB,EACxB,SAAS,GACV,EAAE,wBAAwB,CAAC,MAAM,CAAC,+BAmJlC"}
@@ -0,0 +1,102 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useRef, useState } from "react";
4
+ import { TextEditor, } from "gw-rich-text-editor/unstyled";
5
+ import { useStoreController } from "react-store-input";
6
+ import { MdFormatBold, MdFormatItalic, MdFormatListBulleted, MdFormatListNumbered, MdFormatUnderlined, MdLink, MdPhoto, MdRedo, MdTitle, MdUndo, } from "react-icons/md";
7
+ const defaultToolbar = [
8
+ { command: "attachFile", label: "파일 첨부", icon: MdPhoto },
9
+ { command: "bold", label: "굵게", icon: MdFormatBold },
10
+ { command: "italic", label: "기울임", icon: MdFormatItalic },
11
+ { command: "underline", label: "밑줄", icon: MdFormatUnderlined },
12
+ { command: "heading", label: "제목", icon: MdTitle },
13
+ { command: "bulletList", label: "글머리 기호 목록", icon: MdFormatListBulleted },
14
+ { command: "orderedList", label: "번호 목록", icon: MdFormatListNumbered },
15
+ { command: "link", label: "링크", icon: MdLink },
16
+ { command: "undo", label: "실행 취소", icon: MdUndo },
17
+ { command: "redo", label: "다시 실행", icon: MdRedo },
18
+ ];
19
+ /**
20
+ * Connects gw-rich-text-editor to one gw-store field. Toolbar entries and
21
+ * upload behavior are independently replaceable or removable.
22
+ */
23
+ export function AdminRichTextEditor({ store, name, placeholder = "내용을 입력해 주세요.", invalid = false, describedBy, upload, nodes, marks, toolbar = defaultToolbar, className, }) {
24
+ const editorRef = useRef(null);
25
+ const fileInputRef = useRef(null);
26
+ const subscribedValueRef = useRef(typeof store.state[name] === "string" ? store.state[name] : "");
27
+ const [uploadError, setUploadError] = useState("");
28
+ const { dispatch } = useStoreController(store, {
29
+ onSubscribe: (state) => {
30
+ const editor = editorRef.current;
31
+ const value = typeof state[name] === "string" ? state[name] : "";
32
+ if (subscribedValueRef.current === value) {
33
+ return;
34
+ }
35
+ subscribedValueRef.current = value;
36
+ if (editor && editor.value !== value) {
37
+ editor.value = value;
38
+ }
39
+ },
40
+ onDispatch: (state) => {
41
+ const value = editorRef.current?.value ?? "";
42
+ subscribedValueRef.current = value;
43
+ state[name] = value;
44
+ },
45
+ });
46
+ const runCommand = (command) => {
47
+ if (command === "attachFile") {
48
+ fileInputRef.current?.click();
49
+ return;
50
+ }
51
+ const commands = editorRef.current?.commands;
52
+ if (!commands) {
53
+ return;
54
+ }
55
+ switch (command) {
56
+ case "bold":
57
+ commands.bold();
58
+ break;
59
+ case "italic":
60
+ commands.italic();
61
+ break;
62
+ case "underline":
63
+ commands.underline();
64
+ break;
65
+ case "heading":
66
+ commands.heading(2);
67
+ break;
68
+ case "bulletList":
69
+ commands.bulletList();
70
+ break;
71
+ case "orderedList":
72
+ commands.orderedList();
73
+ break;
74
+ case "link":
75
+ commands.link();
76
+ break;
77
+ case "undo":
78
+ commands.undo();
79
+ break;
80
+ case "redo":
81
+ commands.redo();
82
+ break;
83
+ }
84
+ };
85
+ const handleFilesSelected = async (event) => {
86
+ const files = Array.from(event.currentTarget.files ?? []);
87
+ event.currentTarget.value = "";
88
+ if (files.length === 0 || !editorRef.current) {
89
+ return;
90
+ }
91
+ setUploadError("");
92
+ await editorRef.current.commands.attachFile(files);
93
+ };
94
+ const visibleToolbar = toolbar === false
95
+ ? []
96
+ : toolbar.filter((item) => item.command !== "attachFile" || Boolean(upload));
97
+ return (_jsxs("div", { className: className, children: [_jsxs("div", { className: "gw-admin-rich-text-editor", "aria-invalid": invalid, "aria-describedby": describedBy, children: [visibleToolbar.length > 0 && (_jsx("div", { className: "gw-admin-rich-text-editor__toolbar", role: "toolbar", "aria-label": "\uBCF8\uBB38 \uC11C\uC2DD", children: visibleToolbar.map((item) => {
98
+ const Icon = item.icon;
99
+ return (_jsx("button", { type: "button", "aria-label": item.label, title: item.label, onClick: () => runCommand(item.command), className: "gw-admin-rich-text-editor__tool", children: Icon ? _jsx(Icon, { "aria-hidden": "true" }) : _jsx("span", { children: item.label }) }, item.command));
100
+ }) })), _jsx(TextEditor, { ref: editorRef, defaultValue: typeof store.state[name] === "string" ? store.state[name] : "", placeholder: placeholder, ...(nodes ? { nodes } : {}), ...(marks ? { marks } : {}), ...(upload ? { upload } : {}), onChange: dispatch, onUploadError: (_error, file) => setUploadError(`${file.name} 업로드에 실패했습니다.`), className: "gw-admin-rich-text-editor__surface" }), upload && (_jsx("input", { ref: fileInputRef, type: "file", multiple: true, className: "gw-admin-visually-hidden", tabIndex: -1, onChange: handleFilesSelected }))] }), uploadError && (_jsx("p", { role: "alert", className: "gw-admin-field-error", children: uploadError }))] }));
101
+ }
102
+ //# sourceMappingURL=admin-rich-text-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-rich-text-editor.js","sourceRoot":"","sources":["../../src/rich-text/admin-rich-text-editor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type UploadAdapter, type UploadContext } from "gw-rich-text-editor/unstyled";
2
+ import type { AdminUploadedFile } from "../attachments/types.js";
3
+ /**
4
+ * A downloadable file node shared by the editor and read-only renderer.
5
+ */
6
+ export declare const adminRichTextFileElement: import("gw-rich-text-editor/unstyled").EditorElement<{
7
+ href: string;
8
+ name: string;
9
+ size: number | null;
10
+ mimeType: string;
11
+ }>;
12
+ export declare const adminRichTextNodes: readonly [import("gw-rich-text-editor/unstyled").EditorElement<{
13
+ href: string;
14
+ name: string;
15
+ size: number | null;
16
+ mimeType: string;
17
+ }>];
18
+ export type AdminRichTextFileUploader = (file: File, context: UploadContext) => Promise<AdminUploadedFile>;
19
+ /**
20
+ * Adapts an application-owned uploader to image, video, and downloadable file
21
+ * nodes understood by gw-rich-text-editor.
22
+ */
23
+ export declare function createAdminRichTextUploadAdapter(uploadFile: AdminRichTextFileUploader): UploadAdapter;
24
+ //# sourceMappingURL=admin-rich-text-file.d.ts.map