dn-react-router-toolkit 0.7.7 → 0.7.9

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 (93) hide show
  1. package/dist/api/create_api_handler.d.mts +5 -5
  2. package/dist/api/create_api_handler.d.ts +5 -5
  3. package/dist/client/env_loader.d.mts +2 -2
  4. package/dist/client/env_loader.d.ts +2 -2
  5. package/dist/client/env_loader.js +2 -12
  6. package/dist/client/env_loader.mjs +2 -2
  7. package/dist/client/file_input.d.mts +3 -2
  8. package/dist/client/file_input.d.ts +3 -2
  9. package/dist/client/file_input.js +30 -37
  10. package/dist/client/file_input.mjs +33 -28
  11. package/dist/client/index.d.mts +1 -0
  12. package/dist/client/index.d.ts +1 -0
  13. package/dist/client/index.js +38 -44
  14. package/dist/client/index.mjs +39 -33
  15. package/dist/client/store_text_editor.d.mts +2 -2
  16. package/dist/client/store_text_editor.d.ts +2 -2
  17. package/dist/client/store_text_editor.js +3 -12
  18. package/dist/client/store_text_editor.mjs +3 -2
  19. package/dist/crud/crud_form.d.mts +5 -4
  20. package/dist/crud/crud_form.d.ts +5 -4
  21. package/dist/crud/crud_form.js +83 -72
  22. package/dist/crud/crud_form.mjs +88 -62
  23. package/dist/crud/crud_form_provider.d.mts +10 -8
  24. package/dist/crud/crud_form_provider.d.ts +10 -8
  25. package/dist/crud/crud_form_provider.js +2 -12
  26. package/dist/crud/crud_form_provider.mjs +6 -3
  27. package/dist/crud/crud_loader.d.mts +1 -1
  28. package/dist/crud/crud_loader.d.ts +1 -1
  29. package/dist/crud/crud_page.d.mts +10 -6
  30. package/dist/crud/crud_page.d.ts +10 -6
  31. package/dist/crud/crud_page.js +281 -409
  32. package/dist/crud/crud_page.mjs +286 -399
  33. package/dist/crud/generate_pages.d.mts +10 -2
  34. package/dist/crud/generate_pages.d.ts +10 -2
  35. package/dist/crud/generate_pages.js +17 -14
  36. package/dist/crud/generate_pages.mjs +17 -4
  37. package/dist/crud/index.d.mts +2 -1
  38. package/dist/crud/index.d.ts +2 -1
  39. package/dist/crud/index.js +299 -404
  40. package/dist/crud/index.mjs +304 -404
  41. package/dist/form/create_form_component.d.mts +3 -2
  42. package/dist/form/create_form_component.d.ts +3 -2
  43. package/dist/form/create_form_component.js +3 -12
  44. package/dist/form/create_form_component.mjs +3 -2
  45. package/dist/form/form_components.d.mts +5 -4
  46. package/dist/form/form_components.d.ts +5 -4
  47. package/dist/form/form_components.js +3 -12
  48. package/dist/form/form_components.mjs +3 -2
  49. package/dist/form/index.d.mts +1 -0
  50. package/dist/form/index.d.ts +1 -0
  51. package/dist/form/index.js +3 -12
  52. package/dist/form/index.mjs +3 -2
  53. package/dist/post/editor_toolbar.d.mts +4 -3
  54. package/dist/post/editor_toolbar.d.ts +4 -3
  55. package/dist/post/editor_toolbar.js +116 -273
  56. package/dist/post/editor_toolbar.mjs +123 -263
  57. package/dist/post/index.d.mts +1 -0
  58. package/dist/post/index.d.ts +1 -0
  59. package/dist/post/index.js +329 -411
  60. package/dist/post/index.mjs +337 -409
  61. package/dist/post/post_form_page.d.mts +5 -4
  62. package/dist/post/post_form_page.d.ts +5 -4
  63. package/dist/post/post_form_page.js +331 -413
  64. package/dist/post/post_form_page.mjs +337 -409
  65. package/dist/post/thumbnail_picker.d.mts +3 -2
  66. package/dist/post/thumbnail_picker.d.ts +3 -2
  67. package/dist/post/thumbnail_picker.js +14 -23
  68. package/dist/post/thumbnail_picker.mjs +14 -13
  69. package/dist/seo/index.d.mts +1 -1
  70. package/dist/seo/index.d.ts +1 -1
  71. package/dist/seo/index.js +2 -2
  72. package/dist/seo/index.mjs +2 -2
  73. package/dist/seo/seo.d.mts +2 -2
  74. package/dist/seo/seo.d.ts +2 -2
  75. package/dist/seo/seo.js +2 -2
  76. package/dist/seo/seo.mjs +2 -2
  77. package/dist/table/buttons.d.mts +2 -2
  78. package/dist/table/buttons.d.ts +2 -2
  79. package/dist/table/buttons.js +42 -57
  80. package/dist/table/buttons.mjs +42 -47
  81. package/dist/table/index.d.mts +1 -0
  82. package/dist/table/index.d.ts +1 -0
  83. package/dist/table/index.js +185 -338
  84. package/dist/table/index.mjs +185 -328
  85. package/dist/table/page.d.mts +5 -4
  86. package/dist/table/page.d.ts +5 -4
  87. package/dist/table/page.js +185 -338
  88. package/dist/table/page.mjs +185 -328
  89. package/dist/table/table.d.mts +5 -4
  90. package/dist/table/table.d.ts +5 -4
  91. package/dist/table/table.js +77 -237
  92. package/dist/table/table.mjs +77 -227
  93. package/package.json +7 -5
@@ -7609,7 +7609,6 @@ module.exports = __toCommonJS(crud_exports);
7609
7609
  var import_react_router = require("react-router");
7610
7610
  var import_react_store_input = require("react-store-input");
7611
7611
  var import_react = require("react");
7612
- var import_react2 = __toESM(require("react"));
7613
7612
 
7614
7613
  // src/crud/serialize.ts
7615
7614
  function serialize(value) {
@@ -7705,6 +7704,7 @@ function deserialize(data) {
7705
7704
  }
7706
7705
 
7707
7706
  // src/crud/crud_form_provider.tsx
7707
+ var import_jsx_runtime = require("react/jsx-runtime");
7708
7708
  var FormContext = (0, import_react.createContext)({});
7709
7709
  function useFormContext() {
7710
7710
  return (0, import_react.useContext)(FormContext);
@@ -7785,19 +7785,17 @@ function CrudFormProvider({
7785
7785
  delete: deleteItem,
7786
7786
  columns
7787
7787
  };
7788
- return /* @__PURE__ */ import_react2.default.createElement(FormContext.Provider, { value }, children);
7788
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FormContext.Provider, { value, children });
7789
7789
  }
7790
7790
 
7791
- // src/crud/crud_form.tsx
7792
- var import_react8 = __toESM(require("react"));
7793
-
7794
7791
  // src/form/create_form_component.tsx
7795
7792
  var import_utils = require("dn-react-toolkit/utils");
7796
- var import_react3 = __toESM(require("react"));
7793
+ var import_react2 = require("react");
7794
+ var import_jsx_runtime2 = require("react/jsx-runtime");
7797
7795
  function createComponent(tag, options) {
7798
7796
  return function FormComponent({ className, ...props }) {
7799
7797
  const Tag = tag;
7800
- return /* @__PURE__ */ import_react3.default.createElement(Tag, { ...props, className: (0, import_utils.cn)(options.className, className) });
7798
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Tag, { ...props, className: (0, import_utils.cn)(options.className, className) });
7801
7799
  };
7802
7800
  }
7803
7801
 
@@ -7816,12 +7814,12 @@ var FormLabel = createComponent("label", {
7816
7814
  var import_react_store_input3 = require("react-store-input");
7817
7815
 
7818
7816
  // src/client/env_loader.tsx
7819
- var import_react4 = __toESM(require("react"));
7820
7817
  var import_react_router2 = require("react-router");
7818
+ var import_jsx_runtime3 = require("react/jsx-runtime");
7821
7819
 
7822
7820
  // src/client/file_input.tsx
7823
- var import_react5 = require("react");
7824
- var import_react6 = __toESM(require("react"));
7821
+ var import_react3 = require("react");
7822
+ var import_jsx_runtime4 = require("react/jsx-runtime");
7825
7823
 
7826
7824
  // src/client/use_user_agent.tsx
7827
7825
  var import_react_router3 = require("react-router");
@@ -7829,7 +7827,8 @@ var import_react_router3 = require("react-router");
7829
7827
  // src/client/store_text_editor.tsx
7830
7828
  var import_dn_react_text_editor = require("dn-react-text-editor");
7831
7829
  var import_react_store_input2 = require("react-store-input");
7832
- var import_react7 = __toESM(require("react"));
7830
+ var import_react4 = require("react");
7831
+ var import_jsx_runtime5 = require("react/jsx-runtime");
7833
7832
  function StoreTextEditor({
7834
7833
  store,
7835
7834
  name,
@@ -7839,8 +7838,8 @@ function StoreTextEditor({
7839
7838
  ref,
7840
7839
  ...props
7841
7840
  }) {
7842
- const controllerRef = (0, import_react7.useRef)(null);
7843
- (0, import_react7.useImperativeHandle)(
7841
+ const controllerRef = (0, import_react4.useRef)(null);
7842
+ (0, import_react4.useImperativeHandle)(
7844
7843
  ref,
7845
7844
  () => controllerRef.current,
7846
7845
  []
@@ -7888,7 +7887,7 @@ function StoreTextEditor({
7888
7887
  }
7889
7888
  return void 0;
7890
7889
  };
7891
- return /* @__PURE__ */ import_react7.default.createElement(
7890
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
7892
7891
  import_dn_react_text_editor.TextEditor,
7893
7892
  {
7894
7893
  ...props,
@@ -7906,67 +7905,89 @@ function StoreTextEditor({
7906
7905
  var import_client = require("dn-react-toolkit/file/client");
7907
7906
 
7908
7907
  // src/crud/crud_form.tsx
7908
+ var import_jsx_runtime6 = require("react/jsx-runtime");
7909
7909
  function CrudForm({
7910
7910
  AdminHeader
7911
7911
  }) {
7912
7912
  const form = useFormContext();
7913
7913
  const component = (0, import_react_store_input3.useStoreComponent)(form.store);
7914
- return /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, /* @__PURE__ */ import_react8.default.createElement(
7915
- AdminHeader,
7916
- {
7917
- title: `${form.name} ${form.item ? "\uC218\uC815" : "\uCD94\uAC00"}`,
7918
- actions: /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, form.item && /* @__PURE__ */ import_react8.default.createElement(
7919
- "button",
7920
- {
7921
- type: "button",
7922
- className: "button-outline",
7923
- onClick: () => {
7924
- form.delete();
7914
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
7915
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
7916
+ AdminHeader,
7917
+ {
7918
+ title: `${form.name} ${form.item ? "\uC218\uC815" : "\uCD94\uAC00"}`,
7919
+ actions: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
7920
+ form.item && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
7921
+ "button",
7922
+ {
7923
+ type: "button",
7924
+ className: "button-outline",
7925
+ onClick: () => {
7926
+ form.delete();
7927
+ },
7928
+ children: "\uC0AD\uC81C\uD558\uAE30"
7929
+ }
7930
+ ),
7931
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
7932
+ "button",
7933
+ {
7934
+ type: "button",
7935
+ className: "button-primary",
7936
+ onClick: form.submit,
7937
+ children: "\uC800\uC7A5\uD558\uAE30"
7938
+ }
7939
+ )
7940
+ ] })
7941
+ }
7942
+ ),
7943
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "max-w-2xl mx-auto", children: Object.keys(form.columns).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_jsx_runtime6.Fragment, { children: Object.entries(form.columns).map(
7944
+ ([name, value]) => {
7945
+ function InputComponent() {
7946
+ if (value.component) {
7947
+ const Component = value.component;
7948
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Component, { store: form.store, name });
7925
7949
  }
7926
- },
7927
- "\uC0AD\uC81C\uD558\uAE30"
7928
- ), /* @__PURE__ */ import_react8.default.createElement(
7929
- "button",
7930
- {
7931
- type: "button",
7932
- className: "button-primary",
7933
- onClick: form.submit
7934
- },
7935
- "\uC800\uC7A5\uD558\uAE30"
7936
- ))
7937
- }
7938
- ), /* @__PURE__ */ import_react8.default.createElement("div", { className: "max-w-2xl mx-auto" }, Object.keys(form.columns).length > 0 && /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, Object.entries(form.columns).map(
7939
- ([name, value]) => {
7940
- function InputComponent() {
7941
- if (value.type === "textarea") {
7942
- return /* @__PURE__ */ import_react8.default.createElement(
7943
- StoreTextEditor,
7950
+ if (value.type === "textarea") {
7951
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
7952
+ StoreTextEditor,
7953
+ {
7954
+ store: form.store,
7955
+ name,
7956
+ editor: {
7957
+ attributes: {
7958
+ class: "text-editor-form"
7959
+ }
7960
+ }
7961
+ }
7962
+ );
7963
+ }
7964
+ if (value.options) {
7965
+ const Component = value.options;
7966
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(component.select, { name, className: "select-form", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Component, {}) });
7967
+ }
7968
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
7969
+ component.input,
7944
7970
  {
7945
- store: form.store,
7946
- name
7971
+ name,
7972
+ type: value.type,
7973
+ className: "input-form"
7947
7974
  }
7948
7975
  );
7949
7976
  }
7950
- if (value.options) {
7951
- const Component = value.options;
7952
- return /* @__PURE__ */ import_react8.default.createElement(component.select, { name, className: "select-form" }, /* @__PURE__ */ import_react8.default.createElement(Component, null));
7953
- }
7954
- return /* @__PURE__ */ import_react8.default.createElement(
7955
- component.input,
7956
- {
7957
- name,
7958
- type: value.type,
7959
- className: "input-form"
7960
- }
7961
- );
7962
- }
7963
- const v = form.store.state[name];
7964
- if (typeof v === "boolean") {
7965
- return /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex" }, value.label, /* @__PURE__ */ import_react8.default.createElement("div", { className: "ml-auto" }, /* @__PURE__ */ import_react8.default.createElement(InputComponent, null)));
7977
+ const v = form.store.state[name];
7978
+ if (typeof v === "boolean") {
7979
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex", children: [
7980
+ value.label,
7981
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "ml-auto", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(InputComponent, {}) })
7982
+ ] });
7983
+ }
7984
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(FormRow, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(FormEntry, { children: [
7985
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(FormLabel, { children: value.label }, name),
7986
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(InputComponent, {})
7987
+ ] }) });
7966
7988
  }
7967
- return /* @__PURE__ */ import_react8.default.createElement(FormRow, null, /* @__PURE__ */ import_react8.default.createElement(FormEntry, null, /* @__PURE__ */ import_react8.default.createElement(FormLabel, { key: name }, value.label), /* @__PURE__ */ import_react8.default.createElement(InputComponent, null)));
7968
- }
7969
- ))));
7989
+ ) }) })
7990
+ ] });
7970
7991
  }
7971
7992
 
7972
7993
  // src/table/loader.tsx
@@ -8216,160 +8237,12 @@ var import_react_router9 = require("react-router");
8216
8237
 
8217
8238
  // src/table/page.tsx
8218
8239
  var import_react_router8 = require("react-router");
8219
-
8220
- // node_modules/react-icons/lib/iconBase.mjs
8221
- var import_react10 = __toESM(require("react"), 1);
8222
-
8223
- // node_modules/react-icons/lib/iconContext.mjs
8224
- var import_react9 = __toESM(require("react"), 1);
8225
- var DefaultContext = {
8226
- color: void 0,
8227
- size: void 0,
8228
- className: void 0,
8229
- style: void 0,
8230
- attr: void 0
8231
- };
8232
- var IconContext = import_react9.default.createContext && /* @__PURE__ */ import_react9.default.createContext(DefaultContext);
8233
-
8234
- // node_modules/react-icons/lib/iconBase.mjs
8235
- var _excluded = ["attr", "size", "title"];
8236
- function _objectWithoutProperties(source, excluded) {
8237
- if (source == null) return {};
8238
- var target = _objectWithoutPropertiesLoose(source, excluded);
8239
- var key, i;
8240
- if (Object.getOwnPropertySymbols) {
8241
- var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
8242
- for (i = 0; i < sourceSymbolKeys.length; i++) {
8243
- key = sourceSymbolKeys[i];
8244
- if (excluded.indexOf(key) >= 0) continue;
8245
- if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
8246
- target[key] = source[key];
8247
- }
8248
- }
8249
- return target;
8250
- }
8251
- function _objectWithoutPropertiesLoose(source, excluded) {
8252
- if (source == null) return {};
8253
- var target = {};
8254
- for (var key in source) {
8255
- if (Object.prototype.hasOwnProperty.call(source, key)) {
8256
- if (excluded.indexOf(key) >= 0) continue;
8257
- target[key] = source[key];
8258
- }
8259
- }
8260
- return target;
8261
- }
8262
- function _extends() {
8263
- _extends = Object.assign ? Object.assign.bind() : function(target) {
8264
- for (var i = 1; i < arguments.length; i++) {
8265
- var source = arguments[i];
8266
- for (var key in source) {
8267
- if (Object.prototype.hasOwnProperty.call(source, key)) {
8268
- target[key] = source[key];
8269
- }
8270
- }
8271
- }
8272
- return target;
8273
- };
8274
- return _extends.apply(this, arguments);
8275
- }
8276
- function ownKeys(e, r) {
8277
- var t = Object.keys(e);
8278
- if (Object.getOwnPropertySymbols) {
8279
- var o = Object.getOwnPropertySymbols(e);
8280
- r && (o = o.filter(function(r2) {
8281
- return Object.getOwnPropertyDescriptor(e, r2).enumerable;
8282
- })), t.push.apply(t, o);
8283
- }
8284
- return t;
8285
- }
8286
- function _objectSpread(e) {
8287
- for (var r = 1; r < arguments.length; r++) {
8288
- var t = null != arguments[r] ? arguments[r] : {};
8289
- r % 2 ? ownKeys(Object(t), true).forEach(function(r2) {
8290
- _defineProperty(e, r2, t[r2]);
8291
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) {
8292
- Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2));
8293
- });
8294
- }
8295
- return e;
8296
- }
8297
- function _defineProperty(obj, key, value) {
8298
- key = _toPropertyKey(key);
8299
- if (key in obj) {
8300
- Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
8301
- } else {
8302
- obj[key] = value;
8303
- }
8304
- return obj;
8305
- }
8306
- function _toPropertyKey(t) {
8307
- var i = _toPrimitive(t, "string");
8308
- return "symbol" == typeof i ? i : i + "";
8309
- }
8310
- function _toPrimitive(t, r) {
8311
- if ("object" != typeof t || !t) return t;
8312
- var e = t[Symbol.toPrimitive];
8313
- if (void 0 !== e) {
8314
- var i = e.call(t, r || "default");
8315
- if ("object" != typeof i) return i;
8316
- throw new TypeError("@@toPrimitive must return a primitive value.");
8317
- }
8318
- return ("string" === r ? String : Number)(t);
8319
- }
8320
- function Tree2Element(tree) {
8321
- return tree && tree.map((node, i) => /* @__PURE__ */ import_react10.default.createElement(node.tag, _objectSpread({
8322
- key: i
8323
- }, node.attr), Tree2Element(node.child)));
8324
- }
8325
- function GenIcon(data) {
8326
- return (props) => /* @__PURE__ */ import_react10.default.createElement(IconBase, _extends({
8327
- attr: _objectSpread({}, data.attr)
8328
- }, props), Tree2Element(data.child));
8329
- }
8330
- function IconBase(props) {
8331
- var elem = (conf) => {
8332
- var {
8333
- attr,
8334
- size,
8335
- title
8336
- } = props, svgProps = _objectWithoutProperties(props, _excluded);
8337
- var computedSize = size || conf.size || "1em";
8338
- var className;
8339
- if (conf.className) className = conf.className;
8340
- if (props.className) className = (className ? className + " " : "") + props.className;
8341
- return /* @__PURE__ */ import_react10.default.createElement("svg", _extends({
8342
- stroke: "currentColor",
8343
- fill: "currentColor",
8344
- strokeWidth: "0"
8345
- }, conf.attr, attr, svgProps, {
8346
- className,
8347
- style: _objectSpread(_objectSpread({
8348
- color: props.color || conf.color
8349
- }, conf.style), props.style),
8350
- height: computedSize,
8351
- width: computedSize,
8352
- xmlns: "http://www.w3.org/2000/svg"
8353
- }), title && /* @__PURE__ */ import_react10.default.createElement("title", null, title), props.children);
8354
- };
8355
- return IconContext !== void 0 ? /* @__PURE__ */ import_react10.default.createElement(IconContext.Consumer, null, (conf) => elem(conf)) : elem(DefaultContext);
8356
- }
8357
-
8358
- // node_modules/react-icons/go/index.mjs
8359
- function GoArrowDown(props) {
8360
- return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "d": "M4.97 13.22a.75.75 0 0 1 1.06 0L11 18.19V3.75a.75.75 0 0 1 1.5 0v14.44l4.97-4.97a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734l-6.25 6.25a.75.75 0 0 1-1.06 0l-6.25-6.25a.75.75 0 0 1 0-1.06Z" }, "child": [] }] })(props);
8361
- }
8362
- function GoArrowUp(props) {
8363
- return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "d": "M18.655 10.405a.75.75 0 0 1-1.06 0l-4.97-4.97v14.44a.75.75 0 0 1-1.5 0V5.435l-4.97 4.97a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l6.25-6.25a.75.75 0 0 1 1.06 0l6.25 6.25a.75.75 0 0 1 0 1.06Z" }, "child": [] }] })(props);
8364
- }
8365
- function GoSearch(props) {
8366
- return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "d": "M10.25 2a8.25 8.25 0 0 1 6.34 13.53l5.69 5.69a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-5.69-5.69A8.25 8.25 0 1 1 10.25 2ZM3.5 10.25a6.75 6.75 0 1 0 13.5 0 6.75 6.75 0 0 0-13.5 0Z" }, "child": [] }] })(props);
8367
- }
8240
+ var import_go2 = require("react-icons/go");
8368
8241
 
8369
8242
  // src/table/buttons.tsx
8370
8243
  var import_utils2 = require("dn-react-toolkit/utils");
8371
8244
  var import_react_router6 = require("react-router");
8372
- var import_react11 = __toESM(require("react"));
8245
+ var import_jsx_runtime7 = require("react/jsx-runtime");
8373
8246
  function TablePageButtons({
8374
8247
  MAX_PAGES_TO_SHOW,
8375
8248
  total,
@@ -8382,63 +8255,59 @@ function TablePageButtons({
8382
8255
  const currentPage = Math.floor(offset / limit) + 1;
8383
8256
  const startButton = (Math.ceil(currentPage / MAX_PAGES_TO_SHOW) - 1) * MAX_PAGES_TO_SHOW;
8384
8257
  const endButton = Math.min(startButton + MAX_PAGES_TO_SHOW - 1, pages);
8385
- return /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, pages > 1 && /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex justify-center items-center my-8 gap-4 text-neutral-400" }, startButton > 1 && /* @__PURE__ */ import_react11.default.createElement(
8386
- import_react_router6.Link,
8387
- {
8388
- to: (() => {
8389
- searchParams.set(
8390
- "offset",
8391
- String((startButton - 1) * limit)
8392
- );
8393
- return `${pathname}?${searchParams.toString()}`;
8394
- })(),
8395
- className: "w-10 block text-center transition-colors hover:text-primary"
8396
- },
8397
- "\uC774\uC804"
8398
- ), Array.from({
8399
- length: Math.min(
8400
- MAX_PAGES_TO_SHOW,
8401
- pages - startButton
8402
- )
8403
- }).map((_, index2) => {
8404
- return /* @__PURE__ */ import_react11.default.createElement(
8258
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_jsx_runtime7.Fragment, { children: pages > 1 && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex justify-center items-center my-8 gap-4 text-neutral-400", children: [
8259
+ startButton > 1 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
8405
8260
  import_react_router6.Link,
8406
8261
  {
8407
- key: index2,
8408
8262
  to: (() => {
8409
- searchParams.set(
8410
- "offset",
8411
- String((startButton + index2) * limit)
8412
- );
8263
+ searchParams.set("offset", String((startButton - 1) * limit));
8413
8264
  return `${pathname}?${searchParams.toString()}`;
8414
8265
  })(),
8415
- className: (0, import_utils2.cn)(
8416
- "w-6 block text-center transition-colors",
8417
- currentPage === startButton + index2 + 1 ? "font-bold text-primary" : "hover:text-primary"
8418
- )
8419
- },
8420
- startButton + index2 + 1
8421
- );
8422
- }), endButton < pages && /* @__PURE__ */ import_react11.default.createElement(
8423
- import_react_router6.Link,
8424
- {
8425
- to: (() => {
8426
- searchParams.set(
8427
- "offset",
8428
- String((endButton + 1) * limit)
8429
- );
8430
- return `${pathname}?${searchParams.toString()}`;
8431
- })(),
8432
- className: "w-10 block text-center transition-colors hover:text-primary"
8433
- },
8434
- "\uB2E4\uC74C"
8435
- )));
8266
+ className: "w-10 block text-center transition-colors hover:text-primary",
8267
+ children: "\uC774\uC804"
8268
+ }
8269
+ ),
8270
+ Array.from({
8271
+ length: Math.min(MAX_PAGES_TO_SHOW, pages - startButton)
8272
+ }).map((_, index2) => {
8273
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
8274
+ import_react_router6.Link,
8275
+ {
8276
+ to: (() => {
8277
+ searchParams.set(
8278
+ "offset",
8279
+ String((startButton + index2) * limit)
8280
+ );
8281
+ return `${pathname}?${searchParams.toString()}`;
8282
+ })(),
8283
+ className: (0, import_utils2.cn)(
8284
+ "w-6 block text-center transition-colors",
8285
+ currentPage === startButton + index2 + 1 ? "font-bold text-primary" : "hover:text-primary"
8286
+ ),
8287
+ children: startButton + index2 + 1
8288
+ },
8289
+ index2
8290
+ );
8291
+ }),
8292
+ endButton < pages && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
8293
+ import_react_router6.Link,
8294
+ {
8295
+ to: (() => {
8296
+ searchParams.set("offset", String((endButton + 1) * limit));
8297
+ return `${pathname}?${searchParams.toString()}`;
8298
+ })(),
8299
+ className: "w-10 block text-center transition-colors hover:text-primary",
8300
+ children: "\uB2E4\uC74C"
8301
+ }
8302
+ )
8303
+ ] }) });
8436
8304
  }
8437
8305
 
8438
8306
  // src/table/table.tsx
8439
8307
  var import_utils3 = require("dn-react-toolkit/utils");
8308
+ var import_go = require("react-icons/go");
8440
8309
  var import_react_router7 = require("react-router");
8441
- var import_react12 = __toESM(require("react"));
8310
+ var import_jsx_runtime8 = require("react/jsx-runtime");
8442
8311
  function Table({
8443
8312
  className = "min-w-full whitespace-nowrap",
8444
8313
  data,
@@ -8453,95 +8322,92 @@ function Table({
8453
8322
  const keys = Object.entries(columns).filter((entry) => entry[1]).map(([key]) => key);
8454
8323
  const sortedArray = [...data];
8455
8324
  const [_, setSearchParams] = (0, import_react_router7.useSearchParams)();
8456
- return /* @__PURE__ */ import_react12.default.createElement(
8325
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
8457
8326
  "table",
8458
8327
  {
8459
- className: (0, import_utils3.cn)(
8460
- className,
8461
- "text-[15px] border-separate border-spacing-0"
8462
- )
8463
- },
8464
- /* @__PURE__ */ import_react12.default.createElement("thead", null, /* @__PURE__ */ import_react12.default.createElement("tr", null, keys.map((key) => {
8465
- const value = columns[key];
8466
- function getReactNode() {
8467
- if (value && typeof value === "object" && "label" in value) {
8468
- return value.label;
8469
- }
8470
- return value;
8471
- }
8472
- function Head() {
8473
- const reactNode = getReactNode();
8474
- if (typeof reactNode === "string") {
8475
- return /* @__PURE__ */ import_react12.default.createElement(
8476
- "button",
8328
+ className: (0, import_utils3.cn)(className, "text-[15px] border-separate border-spacing-0"),
8329
+ children: [
8330
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("tr", { children: keys.map((key) => {
8331
+ const value = columns[key];
8332
+ function getReactNode() {
8333
+ if (value && typeof value === "object" && "label" in value) {
8334
+ return value.label;
8335
+ }
8336
+ return value;
8337
+ }
8338
+ function Head() {
8339
+ const reactNode = getReactNode();
8340
+ if (typeof reactNode === "string") {
8341
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
8342
+ "button",
8343
+ {
8344
+ className: (0, import_utils3.cn)(
8345
+ orderBy === key ? "text-neutral-900 font-medium" : "text-neutral-500",
8346
+ "px-4 h-14 flex items-center w-full"
8347
+ ),
8348
+ onClick: () => {
8349
+ let newDirection = "asc";
8350
+ if (orderBy === key) {
8351
+ newDirection = direction === "asc" ? "desc" : "asc";
8352
+ }
8353
+ setSearchParams({
8354
+ orderBy: key,
8355
+ direction: newDirection
8356
+ });
8357
+ },
8358
+ children: [
8359
+ reactNode,
8360
+ orderBy === key && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "ml-0.5", children: direction === "asc" ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_go.GoArrowUp, {}) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_go.GoArrowDown, {}) })
8361
+ ]
8362
+ }
8363
+ );
8364
+ }
8365
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_jsx_runtime8.Fragment, { children: reactNode });
8366
+ }
8367
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("th", { className: (0, import_utils3.cn)("border-y font-normal"), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Head, {}) }, key);
8368
+ }) }) }),
8369
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("tbody", { children: [
8370
+ sortedArray.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
8371
+ "td",
8477
8372
  {
8478
- className: (0, import_utils3.cn)(
8479
- orderBy === key ? "text-neutral-900 font-medium" : "text-neutral-500",
8480
- "px-4 h-14 flex items-center w-full"
8481
- ),
8482
- onClick: () => {
8483
- let newDirection = "asc";
8484
- if (orderBy === key) {
8485
- newDirection = direction === "asc" ? "desc" : "asc";
8373
+ colSpan: keys.length,
8374
+ className: "px-4 h-14 text-neutral-400 text-center",
8375
+ children: "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
8376
+ }
8377
+ ) }),
8378
+ sortedArray.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("tr", { className: "hover:bg-gray-50 transition-colors", children: keys.map((key, i2) => {
8379
+ const value = item[key];
8380
+ function Content() {
8381
+ if (key in columns) {
8382
+ const column = columns[key];
8383
+ if (column && typeof column === "object" && "mapper" in column) {
8384
+ const mapper = column.mapper;
8385
+ if (mapper) {
8386
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_jsx_runtime8.Fragment, { children: mapper(item) });
8387
+ }
8486
8388
  }
8487
- setSearchParams({
8488
- orderBy: key,
8489
- direction: newDirection
8490
- });
8491
8389
  }
8492
- },
8493
- reactNode,
8494
- orderBy === key && /* @__PURE__ */ import_react12.default.createElement("div", { className: "ml-0.5" }, direction === "asc" ? /* @__PURE__ */ import_react12.default.createElement(GoArrowUp, null) : /* @__PURE__ */ import_react12.default.createElement(GoArrowDown, null))
8495
- );
8496
- }
8497
- return /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, reactNode);
8498
- }
8499
- return /* @__PURE__ */ import_react12.default.createElement(
8500
- "th",
8501
- {
8502
- key,
8503
- className: (0, import_utils3.cn)("border-y font-normal")
8504
- },
8505
- /* @__PURE__ */ import_react12.default.createElement(Head, null)
8506
- );
8507
- }))),
8508
- /* @__PURE__ */ import_react12.default.createElement("tbody", null, sortedArray.length === 0 && /* @__PURE__ */ import_react12.default.createElement("tr", null, /* @__PURE__ */ import_react12.default.createElement(
8509
- "td",
8510
- {
8511
- colSpan: keys.length,
8512
- className: "px-4 h-14 text-neutral-400 text-center"
8513
- },
8514
- "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
8515
- )), sortedArray.map((item, i) => /* @__PURE__ */ import_react12.default.createElement("tr", { key: i, className: "hover:bg-gray-50 transition-colors" }, keys.map((key, i2) => {
8516
- const value = item[key];
8517
- function Content() {
8518
- if (key in columns) {
8519
- const column = columns[key];
8520
- if (column && typeof column === "object" && "mapper" in column) {
8521
- const mapper = column.mapper;
8522
- if (mapper) {
8523
- return /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, mapper(item));
8390
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_jsx_runtime8.Fragment, { children: String(value) });
8524
8391
  }
8525
- }
8526
- }
8527
- return /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, String(value));
8528
- }
8529
- const linkedContent = getLink ? /* @__PURE__ */ import_react12.default.createElement(
8530
- import_react_router7.Link,
8531
- {
8532
- to: getLink(item),
8533
- className: "block content-center px-4 w-full h-full"
8534
- },
8535
- /* @__PURE__ */ import_react12.default.createElement(Content, null)
8536
- ) : /* @__PURE__ */ import_react12.default.createElement(Content, null);
8537
- const cell = Mapper ? /* @__PURE__ */ import_react12.default.createElement(Mapper, { item, index: i2 }, linkedContent) : linkedContent;
8538
- return /* @__PURE__ */ import_react12.default.createElement("td", { key, className: "px-0 h-14 border-b" }, cell);
8539
- }))))
8392
+ const linkedContent = getLink ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
8393
+ import_react_router7.Link,
8394
+ {
8395
+ to: getLink(item),
8396
+ className: "block content-center px-4 w-full h-full",
8397
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Content, {})
8398
+ }
8399
+ ) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Content, {});
8400
+ const cell = Mapper ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Mapper, { item, index: i2, children: linkedContent }) : linkedContent;
8401
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("td", { className: "px-0 h-14 border-b", children: cell }, key);
8402
+ }) }, i))
8403
+ ] })
8404
+ ]
8405
+ }
8540
8406
  );
8541
8407
  }
8542
8408
 
8543
8409
  // src/table/page.tsx
8544
- var import_react13 = __toESM(require("react"));
8410
+ var import_jsx_runtime9 = require("react/jsx-runtime");
8545
8411
  function createTablePage({
8546
8412
  name,
8547
8413
  columns,
@@ -8561,65 +8427,77 @@ function createTablePage({
8561
8427
  navigate(`${pathname}?${searchParams2.toString()}`);
8562
8428
  };
8563
8429
  const [searchParams] = (0, import_react_router8.useSearchParams)();
8564
- return /* @__PURE__ */ import_react13.default.createElement(import_react13.default.Fragment, null, /* @__PURE__ */ import_react13.default.createElement(
8565
- Header,
8566
- {
8567
- title: name,
8568
- actions: /* @__PURE__ */ import_react13.default.createElement(import_react_router8.Link, { to: `${pathname}/new`, className: "button-primary" }, name, " \uCD94\uAC00")
8569
- }
8570
- ), /* @__PURE__ */ import_react13.default.createElement("div", { className: "max-w-7xl mx-auto w-full overflow-auto" }, searchKey && /* @__PURE__ */ import_react13.default.createElement(
8571
- "form",
8572
- {
8573
- className: "h-18 px-4 flex items-center border-t",
8574
- onSubmit: (e) => {
8575
- e.preventDefault();
8576
- const formData = new FormData(e.currentTarget);
8577
- const query = formData.get("query");
8578
- search(query);
8579
- }
8580
- },
8581
- /* @__PURE__ */ import_react13.default.createElement(
8582
- "button",
8583
- {
8584
- type: "submit",
8585
- className: "w-10 h-10 flex justify-center items-center"
8586
- },
8587
- /* @__PURE__ */ import_react13.default.createElement(GoSearch, { className: "text-xl mr-4" })
8588
- ),
8589
- /* @__PURE__ */ import_react13.default.createElement(
8590
- "input",
8430
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
8431
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
8432
+ Header,
8591
8433
  {
8592
- className: "outline-none h-full flex-1",
8593
- placeholder: "\uC5EC\uAE30\uC5D0 \uAC80\uC0C9\uD558\uC138\uC694...",
8594
- name: "query",
8595
- defaultValue: searchParams.get("query") ?? ""
8434
+ title: name,
8435
+ actions: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_react_router8.Link, { to: `${pathname}/new`, className: "button-primary", children: [
8436
+ name,
8437
+ " \uCD94\uAC00"
8438
+ ] })
8596
8439
  }
8597
- )
8598
- ), /* @__PURE__ */ import_react13.default.createElement(
8599
- Table,
8600
- {
8601
- data: items,
8602
- columns,
8603
- getLink: primaryKey ? (item) => `${pathname}/${item[primaryKey]}` : void 0,
8604
- limit,
8605
- offset,
8606
- orderBy,
8607
- direction
8608
- }
8609
- ), /* @__PURE__ */ import_react13.default.createElement(
8610
- TablePageButtons,
8611
- {
8612
- total,
8613
- limit,
8614
- offset,
8615
- MAX_PAGES_TO_SHOW: 10
8616
- }
8617
- )));
8440
+ ),
8441
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "max-w-7xl mx-auto w-full overflow-auto", children: [
8442
+ searchKey && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
8443
+ "form",
8444
+ {
8445
+ className: "h-18 px-4 flex items-center border-t",
8446
+ onSubmit: (e) => {
8447
+ e.preventDefault();
8448
+ const formData = new FormData(e.currentTarget);
8449
+ const query = formData.get("query");
8450
+ search(query);
8451
+ },
8452
+ children: [
8453
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
8454
+ "button",
8455
+ {
8456
+ type: "submit",
8457
+ className: "w-10 h-10 flex justify-center items-center",
8458
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_go2.GoSearch, { className: "text-xl mr-4" })
8459
+ }
8460
+ ),
8461
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
8462
+ "input",
8463
+ {
8464
+ className: "outline-none h-full flex-1",
8465
+ placeholder: "\uC5EC\uAE30\uC5D0 \uAC80\uC0C9\uD558\uC138\uC694...",
8466
+ name: "query",
8467
+ defaultValue: searchParams.get("query") ?? ""
8468
+ }
8469
+ )
8470
+ ]
8471
+ }
8472
+ ),
8473
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
8474
+ Table,
8475
+ {
8476
+ data: items,
8477
+ columns,
8478
+ getLink: primaryKey ? (item) => `${pathname}/${item[primaryKey]}` : void 0,
8479
+ limit,
8480
+ offset,
8481
+ orderBy,
8482
+ direction
8483
+ }
8484
+ ),
8485
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
8486
+ TablePageButtons,
8487
+ {
8488
+ total,
8489
+ limit,
8490
+ offset,
8491
+ MAX_PAGES_TO_SHOW: 10
8492
+ }
8493
+ )
8494
+ ] })
8495
+ ] });
8618
8496
  };
8619
8497
  }
8620
8498
 
8621
8499
  // src/crud/crud_page.tsx
8622
- var import_react14 = __toESM(require("react"));
8500
+ var import_jsx_runtime10 = require("react/jsx-runtime");
8623
8501
  function crudPage({
8624
8502
  name,
8625
8503
  primaryKey,
@@ -8627,7 +8505,7 @@ function crudPage({
8627
8505
  formOptions,
8628
8506
  header
8629
8507
  }) {
8630
- return (prefix2) => {
8508
+ const create = (prefix2) => {
8631
8509
  return function Page() {
8632
8510
  const data = (0, import_react_router9.useLoaderData)();
8633
8511
  const { pathname } = (0, import_react_router9.useLocation)();
@@ -8636,29 +8514,33 @@ function crudPage({
8636
8514
  ...tablePageOptions,
8637
8515
  name
8638
8516
  });
8639
- return /* @__PURE__ */ import_react14.default.createElement(Component, { header });
8517
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Component, { header });
8640
8518
  }
8641
8519
  if (pathname.startsWith(prefix2)) {
8642
- return /* @__PURE__ */ import_react14.default.createElement(
8520
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
8643
8521
  CrudFormProvider,
8644
8522
  {
8645
8523
  item: data?.item,
8646
8524
  prefix: prefix2,
8647
8525
  name,
8648
8526
  columns: formOptions.columns,
8649
- primaryKey
8650
- },
8651
- formOptions.form ? /* @__PURE__ */ import_react14.default.createElement(FormDelegate, { component: formOptions.form }) : /* @__PURE__ */ import_react14.default.createElement(CrudForm, { AdminHeader: header })
8527
+ primaryKey,
8528
+ children: formOptions.form ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FormDelegate, { component: formOptions.form }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CrudForm, { AdminHeader: header })
8529
+ }
8652
8530
  );
8653
8531
  }
8654
8532
  };
8655
8533
  };
8534
+ return {
8535
+ name,
8536
+ create
8537
+ };
8656
8538
  }
8657
8539
  function FormDelegate({
8658
8540
  component: Component
8659
8541
  }) {
8660
8542
  const form = useFormContext();
8661
- return /* @__PURE__ */ import_react14.default.createElement(Component, { form });
8543
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Component, { form });
8662
8544
  }
8663
8545
 
8664
8546
  // src/crud/generate_handlers.ts
@@ -8675,16 +8557,29 @@ var generateHandlers = (handlers) => {
8675
8557
 
8676
8558
  // src/crud/generate_pages.tsx
8677
8559
  var import_react_router10 = require("react-router");
8678
- var import_react15 = __toESM(require("react"));
8560
+ var import_jsx_runtime11 = require("react/jsx-runtime");
8679
8561
  var generatePages = (pages) => {
8680
- return function Page() {
8562
+ function Page() {
8681
8563
  const { pathname } = (0, import_react_router10.useLocation)();
8682
8564
  for (const route2 of Object.keys(pages)) {
8683
8565
  if (pathname.startsWith(route2)) {
8684
- const Page2 = pages[route2](route2);
8685
- return /* @__PURE__ */ import_react15.default.createElement(Page2, null);
8566
+ const Page2 = pages[route2].create(route2);
8567
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Page2, {});
8686
8568
  }
8687
8569
  }
8570
+ }
8571
+ const routes = Object.keys(pages);
8572
+ const menus = Object.keys(pages).map((path) => {
8573
+ const page = pages[path];
8574
+ return {
8575
+ title: page.name,
8576
+ to: path
8577
+ };
8578
+ });
8579
+ return {
8580
+ Page,
8581
+ routes,
8582
+ menus
8688
8583
  };
8689
8584
  };
8690
8585