@simplysm/solid 13.0.23 → 13.0.24

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.
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarUser.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/sidebar/SidebarUser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAqB,KAAK,GAAG,EAAoB,MAAM,UAAU,CAAC;AAGzF,OAAO,KAAK,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA2B1E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3F;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,gBAAgB,CAuDnD,CAAC"}
1
+ {"version":3,"file":"SidebarUser.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/sidebar/SidebarUser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAqB,KAAK,GAAG,EAAoB,MAAM,UAAU,CAAC;AAGzF,OAAO,KAAK,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA6B1E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3F;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,gBAAgB,CAuDnD,CAAC"}
@@ -9,7 +9,7 @@ import { className as _$className } from "solid-js/web";
9
9
  import { use as _$use } from "solid-js/web";
10
10
  import { spread as _$spread } from "solid-js/web";
11
11
  import { mergeProps as _$mergeProps } from "solid-js/web";
12
- var _tmpl$ = /* @__PURE__ */ _$template(`<div class="flex flex-col"><span class=font-semibold></span><span>`), _tmpl$2 = /* @__PURE__ */ _$template(`<div><button type=button><div class="relative flex flex-1 items-center gap-3"><div>`), _tmpl$3 = /* @__PURE__ */ _$template(`<span class=font-semibold>`);
12
+ var _tmpl$ = /* @__PURE__ */ _$template(`<div class="flex flex-col"><span class=font-semibold></span><span>`), _tmpl$2 = /* @__PURE__ */ _$template(`<hr>`), _tmpl$3 = /* @__PURE__ */ _$template(`<div><button type=button><div class="relative flex flex-1 items-center gap-3"><div>`), _tmpl$4 = /* @__PURE__ */ _$template(`<span class=font-semibold>`);
13
13
  import { createSignal, For, Show, splitProps } from "solid-js";
14
14
  import clsx from "clsx";
15
15
  import { twMerge } from "tailwind-merge";
@@ -21,7 +21,7 @@ import { ListItem } from "../../data/list/ListItem.js";
21
21
  import { Icon } from "../../display/Icon.js";
22
22
  void ripple;
23
23
  const containerClass = clsx("m-2 flex flex-col overflow-hidden rounded bg-white dark:bg-base-800");
24
- const headerClass = clsx("flex", "items-center", "p-2", "text-left", "cursor-pointer", "transition-colors", "hover:bg-base-100", "dark:hover:bg-base-700");
24
+ const headerClass = clsx("flex", "items-center", "p-2", "m-1", "rounded-md", "text-left", "cursor-pointer", "transition-colors", "hover:bg-base-500/10", "dark:hover:bg-base-700");
25
25
  const headerReadonlyClass = clsx("cursor-default hover:bg-transparent dark:hover:bg-transparent");
26
26
  const avatarClass = clsx("flex size-10 items-center justify-center rounded-full", "bg-primary-500 text-white");
27
27
  const SidebarUser = (props) => {
@@ -37,10 +37,10 @@ const SidebarUser = (props) => {
37
37
  setOpen(false);
38
38
  menu.onClick();
39
39
  };
40
- const getHeaderClassName = () => twMerge(headerClass, !hasMenus() && headerReadonlyClass, open() && "border-b border-b-base-50");
40
+ const getHeaderClassName = () => twMerge(headerClass, !hasMenus() && headerReadonlyClass);
41
41
  const getContainerClassName = () => twMerge(containerClass, local.class);
42
42
  return (() => {
43
- var _el$ = _tmpl$2(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
43
+ var _el$ = _tmpl$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
44
44
  _$spread(_el$, _$mergeProps(rest, {
45
45
  "data-sidebar-user": "",
46
46
  get ["class"]() {
@@ -62,9 +62,9 @@ const SidebarUser = (props) => {
62
62
  },
63
63
  get fallback() {
64
64
  return (() => {
65
- var _el$8 = _tmpl$3();
66
- _$insert(_el$8, () => local.name);
67
- return _el$8;
65
+ var _el$9 = _tmpl$4();
66
+ _$insert(_el$9, () => local.name);
67
+ return _el$9;
68
68
  })();
69
69
  },
70
70
  get children() {
@@ -85,7 +85,11 @@ const SidebarUser = (props) => {
85
85
  return open();
86
86
  },
87
87
  get children() {
88
- return _$createComponent(List, {
88
+ return [(() => {
89
+ var _el$8 = _tmpl$2();
90
+ _$effect(() => _$className(_el$8, clsx("border-base-200 dark:border-base-700")));
91
+ return _el$8;
92
+ })(), _$createComponent(List, {
89
93
  inset: true,
90
94
  get children() {
91
95
  return _$createComponent(For, {
@@ -100,7 +104,7 @@ const SidebarUser = (props) => {
100
104
  })
101
105
  });
102
106
  }
103
- });
107
+ })];
104
108
  }
105
109
  });
106
110
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/layout/sidebar/SidebarUser.tsx"],
4
- "mappings": "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",
5
- "names": ["createSignal", "For", "Show", "splitProps", "clsx", "twMerge", "IconUser", "ripple", "Collapse", "List", "ListItem", "Icon", "containerClass", "headerClass", "headerReadonlyClass", "avatarClass", "SidebarUser", "props", "local", "rest", "open", "setOpen", "hasMenus", "menus", "undefined", "length", "handleClick", "v", "handleMenuClick", "menu", "onClick", "getHeaderClassName", "getContainerClassName", "class", "_el$", "_tmpl$2", "_el$2", "firstChild", "_el$3", "_el$4", "_$spread", "_$mergeProps", "$$click", "_$use", "_$className", "_$insert", "_$createComponent", "icon", "when", "description", "fallback", "_el$8", "_tmpl$3", "name", "children", "_el$5", "_tmpl$", "_el$6", "_el$7", "nextSibling", "_$effect", "inset", "each", "title", "_p$", "_v$", "_v$2", "e", "t", "_$setAttribute", "_$delegateEvents"]
4
+ "mappings": ";;;;;;;;;;;;AAAA,SAAyBA,cAAcC,KAAeC,MAAMC,kBAAkB;AAC9E,OAAOC,UAAU;AACjB,SAASC,eAAe;AAExB,SAASC,gBAAgB;AACzB,SAASC,cAAc;AACvB,SAASC,gBAAgB;AACzB,SAASC,YAAY;AACrB,SAASC,gBAAgB;AACzB,SAASC,YAAY;AAErB,KAAKJ;AAEL,MAAMK,iBAAiBR,KAAK,qEAAqE;AAEjG,MAAMS,cAAcT,KAClB,QACA,gBACA,OACA,OACA,cACA,aACA,kBACA,qBACA,wBACA,wBACF;AAEA,MAAMU,sBAAsBV,KAAK,+DAA+D;AAEhG,MAAMW,cAAcX,KAAK,yDAAyD,2BAA2B;AAmDtG,MAAMY,cAA4CC,WAAU;AACjE,QAAM,CAACC,OAAOC,IAAI,IAAIhB,WAAWc,OAAO,CAAC,QAAQ,QAAQ,eAAe,SAAS,OAAO,CAAC;AAEzF,QAAM,CAACG,MAAMC,OAAO,IAAIrB,aAAa,KAAK;AAE1C,QAAMsB,WAAWA,MAAMJ,MAAMK,UAAUC,UAAaN,MAAMK,MAAME,SAAS;AAEzE,QAAMC,cAAcA,MAAM;AACxB,QAAIJ,SAAS,GAAG;AACdD,cAASM,OAAM,CAACA,CAAC;IACnB;EACF;AAEA,QAAMC,kBAAmBC,UAA0B;AACjDR,YAAQ,KAAK;AACbQ,SAAKC,QAAQ;EACf;AAEA,QAAMC,qBAAqBA,MAAM1B,QAAQQ,aAAa,CAACS,SAAS,KAAKR,mBAAmB;AAExF,QAAMkB,wBAAwBA,MAAM3B,QAAQO,gBAAgBM,MAAMe,KAAK;AAEvE,UAAA,MAAA;AAAA,QAAAC,OAAAC,QAAA,GAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAC,YAAAE,QAAAD,MAAAD;AAAAG,aAAAN,MAAAO,aACWtB,MAAI;MAAA,qBAAA;MAAA,KAAA,OAAA,IAAA;AAAA,eAA2Ba,sBAAsB;MAAC;IAAA,CAAA,GAAA,OAAA,IAAA;AAAAI,UAAAM,UAKlDhB;AAAWiB,UAFhBpC,QAAM6B,OAAA,MAAEd,SAAS,CAAC;AAAAsB,gBAAAL,OAMRxB,WAAW;AAAA8B,aAAAN,OAAAO,kBACpBnC,MAAI;MAAA,IAACoC,OAAI;AAAA,eAAE7B,MAAM6B,QAAQzC;MAAQ;MAAA,SAAA;IAAA,CAAA,CAAA;AAAAuC,aAAAP,OAAAQ,kBAEnC5C,MAAI;MAAA,IAAC8C,OAAI;AAAA,eAAE9B,MAAM+B;MAAW;MAAA,IAAEC,WAAQ;AAAA,gBAAA,MAAA;AAAA,cAAAC,QAAAC,QAAA;AAAAP,mBAAAM,OAAA,MAA+BjC,MAAMmC,IAAI;AAAA,iBAAAF;QAAA,GAAA;MAAA;MAAA,IAAAG,WAAA;AAAA,YAAAC,QAAAC,OAAA,GAAAC,QAAAF,MAAAlB,YAAAqB,QAAAD,MAAAE;AAAAd,iBAAAY,OAAA,MAE/CvC,MAAMmC,IAAI;AAAAR,iBAAAa,OAAA,MAC4BxC,MAAM+B,WAAW;AAAAW,iBAAA,MAAAhB,YAAAc,OAAvEtD,KAAK,WAAW,kCAAkC,CAAC,CAAA;AAAA,eAAAmD;MAAA;IAAA,CAAA,GAAA,IAAA;AAAAV,aAAAX,MAAAY,kBAKvE5C,MAAI;MAAA,IAAC8C,OAAI;AAAA,eAAE1B,SAAS;MAAC;MAAA,IAAAgC,WAAA;AAAA,eAAAR,kBACnBtC,UAAQ;UAAA,IAACY,OAAI;AAAA,mBAAEA,KAAK;UAAC;UAAA,IAAAkC,WAAA;AAAA,mBAAA,EAAA,MAAA;AAAA,kBAAAO,QAAAC,QAAA;AAAAF,uBAAA,MAAAhB,YAAAiB,OACTzD,KAAK,sCAAsC,CAAC,CAAA;AAAA,qBAAAyD;YAAA,GAAA,GAAAf,kBACtDrC,MAAI;cAACsD,OAAK;cAAA,IAAAT,WAAA;AAAA,uBAAAR,kBACR7C,KAAG;kBAAA,IAAC+D,OAAI;AAAA,2BAAE9C,MAAMK;kBAAK;kBAAA+B,UAClBzB,UAAIiB,kBAAMpC,UAAQ;oBAACoB,SAASA,MAAMF,gBAAgBC,IAAI;oBAAC,IAAAyB,WAAA;AAAA,6BAAGzB,KAAKoC;oBAAK;kBAAA,CAAA;gBAAY,CAAA;cAAA;YAAA,CAAA,CAAA;UAAA;QAAA,CAAA;MAAA;IAAA,CAAA,GAAA,IAAA;AAAAL,aAAAM,SAAA;AAAA,UAAAC,MArBjFpC,mBAAmB,GAACqC,OAEZ9C,SAAS,IAAIF,KAAK,IAAII;AAAS2C,cAAAD,IAAAG,KAAAzB,YAAAR,OAAA8B,IAAAG,IAAAF,GAAA;AAAAC,eAAAF,IAAAI,KAAAC,eAAAnC,OAAA,iBAAA8B,IAAAI,IAAAF,IAAA;AAAA,aAAAF;IAAA,GAAA;MAAAG,GAAA7C;MAAA8C,GAAA9C;IAAA,CAAA;AAAA,WAAAU;EAAA,GAAA;AA0BtD;AAAEsC,iBAAA,CAAA,OAAA,CAAA;",
5
+ "names": ["createSignal", "For", "Show", "splitProps", "clsx", "twMerge", "IconUser", "ripple", "Collapse", "List", "ListItem", "Icon", "containerClass", "headerClass", "headerReadonlyClass", "avatarClass", "SidebarUser", "props", "local", "rest", "open", "setOpen", "hasMenus", "menus", "undefined", "length", "handleClick", "v", "handleMenuClick", "menu", "onClick", "getHeaderClassName", "getContainerClassName", "class", "_el$", "_tmpl$3", "_el$2", "firstChild", "_el$3", "_el$4", "_$spread", "_$mergeProps", "$$click", "_$use", "_$className", "_$insert", "_$createComponent", "icon", "when", "description", "fallback", "_el$9", "_tmpl$4", "name", "children", "_el$5", "_tmpl$", "_el$6", "_el$7", "nextSibling", "_$effect", "_el$8", "_tmpl$2", "inset", "each", "title", "_p$", "_v$", "_v$2", "e", "t", "_$setAttribute", "_$delegateEvents"]
6
6
  }
@@ -43,6 +43,7 @@ export interface AppStructure<TModule> {
43
43
  usableMenus: Accessor<SidebarMenuItem[]>;
44
44
  usableFlatMenus: Accessor<AppFlatMenu[]>;
45
45
  permRecord: Accessor<Record<string, boolean>>;
46
+ getTitleChainByHref(href: string): string[];
46
47
  }
47
48
  export declare function createAppStructure<TModule>(opts: {
48
49
  items: AppStructureItem<TModule>[];
@@ -1 +1 @@
1
- {"version":3,"file":"createAppStructure.d.ts","sourceRoot":"","sources":["../../src/helpers/createAppStructure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAIhF,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB,CAAC,OAAO;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAEvG,MAAM,WAAW,mBAAmB,CAAC,OAAO;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,KAAK,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAC3B;AAID,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY,CAAC,OAAO;IACnC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,WAAW,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACzC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC/C;AAkGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE;IAChD,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAChD,GAAG,YAAY,CAAC,OAAO,CAAC,CAwBxB"}
1
+ {"version":3,"file":"createAppStructure.d.ts","sourceRoot":"","sources":["../../src/helpers/createAppStructure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAIhF,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB,CAAC,OAAO;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAEvG,MAAM,WAAW,mBAAmB,CAAC,OAAO;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,KAAK,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAC3B;AAID,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY,CAAC,OAAO;IACnC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,WAAW,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACzC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC7C;AAmHD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE;IAChD,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAChD,GAAG,YAAY,CAAC,OAAO,CAAC,CA4BxB"}
@@ -65,6 +65,17 @@ function flattenMenus(menus, titleChain = []) {
65
65
  }
66
66
  return result;
67
67
  }
68
+ function findItemChainByCodes(items, codes) {
69
+ const result = [];
70
+ let currentItems = items;
71
+ for (const code of codes) {
72
+ const found = currentItems.find((item) => item.code === code);
73
+ if (found === void 0) break;
74
+ result.push(found);
75
+ currentItems = isGroupItem(found) ? found.children : [];
76
+ }
77
+ return result;
78
+ }
68
79
  function createAppStructure(opts) {
69
80
  const permRecord = () => {
70
81
  var _a;
@@ -87,7 +98,11 @@ function createAppStructure(opts) {
87
98
  routes,
88
99
  usableMenus,
89
100
  usableFlatMenus,
90
- permRecord
101
+ permRecord,
102
+ getTitleChainByHref(href) {
103
+ const codes = href.split("/").filter(Boolean);
104
+ return findItemChainByCodes(opts.items, codes).map((item) => item.title);
105
+ }
91
106
  };
92
107
  }
93
108
  export {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/helpers/createAppStructure.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/docs/hooks.md CHANGED
@@ -311,3 +311,22 @@ interface AppStructureLeafItem<TModule> {
311
311
 
312
312
  type AppStructureItem<TModule> = AppStructureGroupItem<TModule> | AppStructureLeafItem<TModule>;
313
313
  ```
314
+
315
+ #### getTitleChainByHref
316
+
317
+ Retrieves the breadcrumb title chain for a given href path. Works on raw items (including `isNotMenu` items).
318
+
319
+ ```tsx
320
+ import { createAppStructure } from "@simplysm/solid";
321
+
322
+ const appStructure = createAppStructure({ items });
323
+
324
+ // Returns ["Sales", "Invoice"] for /home/sales/invoice
325
+ const titles = appStructure.getTitleChainByHref("/home/sales/invoice");
326
+
327
+ // Use with router for dynamic breadcrumb
328
+ import { useLocation } from "@solidjs/router";
329
+
330
+ const location = useLocation();
331
+ const breadcrumb = () => appStructure.getTitleChainByHref(location.pathname);
332
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/solid",
3
- "version": "13.0.23",
3
+ "version": "13.0.24",
4
4
  "description": "심플리즘 패키지 - SolidJS 라이브러리",
5
5
  "author": "김석래",
6
6
  "license": "Apache-2.0",
@@ -49,8 +49,8 @@
49
49
  "solid-tiptap": "^0.8.0",
50
50
  "tailwind-merge": "^3.4.1",
51
51
  "tailwindcss": "^3.4.19",
52
- "@simplysm/core-browser": "13.0.23",
53
- "@simplysm/core-common": "13.0.23"
52
+ "@simplysm/core-browser": "13.0.24",
53
+ "@simplysm/core-common": "13.0.24"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@solidjs/testing-library": "^0.8.10"
@@ -17,10 +17,12 @@ const headerClass = clsx(
17
17
  "flex",
18
18
  "items-center",
19
19
  "p-2",
20
+ "m-1",
21
+ "rounded-md",
20
22
  "text-left",
21
23
  "cursor-pointer",
22
24
  "transition-colors",
23
- "hover:bg-base-100",
25
+ "hover:bg-base-500/10",
24
26
  "dark:hover:bg-base-700",
25
27
  );
26
28
 
@@ -95,8 +97,7 @@ export const SidebarUser: Component<SidebarUserProps> = (props) => {
95
97
  menu.onClick();
96
98
  };
97
99
 
98
- const getHeaderClassName = () =>
99
- twMerge(headerClass, !hasMenus() && headerReadonlyClass, open() && "border-b border-b-base-50");
100
+ const getHeaderClassName = () => twMerge(headerClass, !hasMenus() && headerReadonlyClass);
100
101
 
101
102
  const getContainerClassName = () => twMerge(containerClass, local.class);
102
103
 
@@ -123,6 +124,7 @@ export const SidebarUser: Component<SidebarUserProps> = (props) => {
123
124
  </button>
124
125
  <Show when={hasMenus()}>
125
126
  <Collapse open={open()}>
127
+ <hr class={clsx("border-base-200 dark:border-base-700")} />
126
128
  <List inset>
127
129
  <For each={local.menus}>
128
130
  {(menu) => <ListItem onClick={() => handleMenuClick(menu)}>{menu.title}</ListItem>}
@@ -54,6 +54,7 @@ export interface AppStructure<TModule> {
54
54
  usableMenus: Accessor<SidebarMenuItem[]>;
55
55
  usableFlatMenus: Accessor<AppFlatMenu[]>;
56
56
  permRecord: Accessor<Record<string, boolean>>;
57
+ getTitleChainByHref(href: string): string[];
57
58
  }
58
59
 
59
60
  // ── 내부 헬퍼 ──
@@ -150,6 +151,23 @@ function flattenMenus(menus: SidebarMenuItem[], titleChain: string[] = []): AppF
150
151
  return result;
151
152
  }
152
153
 
154
+ function findItemChainByCodes<TModule>(
155
+ items: AppStructureItem<TModule>[],
156
+ codes: string[],
157
+ ): AppStructureItem<TModule>[] {
158
+ const result: AppStructureItem<TModule>[] = [];
159
+
160
+ let currentItems = items;
161
+ for (const code of codes) {
162
+ const found = currentItems.find((item) => item.code === code);
163
+ if (found === undefined) break;
164
+ result.push(found);
165
+ currentItems = isGroupItem(found) ? found.children : [];
166
+ }
167
+
168
+ return result;
169
+ }
170
+
153
171
  // ── 메인 함수 ──
154
172
 
155
173
  export function createAppStructure<TModule>(opts: {
@@ -179,5 +197,9 @@ export function createAppStructure<TModule>(opts: {
179
197
  usableMenus,
180
198
  usableFlatMenus,
181
199
  permRecord,
200
+ getTitleChainByHref(href: string): string[] {
201
+ const codes = href.split("/").filter(Boolean);
202
+ return findItemChainByCodes(opts.items, codes).map((item) => item.title);
203
+ },
182
204
  };
183
205
  }
@@ -45,7 +45,7 @@ export default {
45
45
  },
46
46
  },
47
47
  },
48
- content: [`${__dirname}src/**/*.{ts,tsx}`],
48
+ content: [`${__dirname}src/**/*.{ts,tsx}`, `${__dirname}dist/**/*.js`],
49
49
  corePlugins: {
50
50
  aspectRatio: false, // Chrome 84 미지원
51
51
  },