@asteby/metacore-ui 2.5.2 → 2.6.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.
@@ -3,6 +3,7 @@ export { AppSidebar, OrganizationCard } from './app-sidebar';
3
3
  export { Header } from './header';
4
4
  export { NavUser } from './nav-user';
5
5
  export { NavGroup, type NavLinkComponent, type NavGroupProps } from './nav-group';
6
+ export { checkIsActive, splitHref, declaredFiltersMatch, VIEW_PARAMS, type SplitHref, } from './nav-active';
6
7
  export { TeamSwitcher } from './team-switcher';
7
8
  export { ProfileDropdown } from './profile-dropdown';
8
9
  export { resolveIconName, humanizeNavKey, translateNavTitle, addonGroupToCollapsibleItem, FALLBACK_GROUP_ICON, FALLBACK_ITEM_ICON, type AddonNavItemLike, type AddonNavGroupLike, } from './addon-nav';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AACjF,OAAO,EACL,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,KAAK,SAAS,GACf,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAA"}
@@ -3,6 +3,7 @@ export { AppSidebar, OrganizationCard } from './app-sidebar';
3
3
  export { Header } from './header';
4
4
  export { NavUser } from './nav-user';
5
5
  export { NavGroup } from './nav-group';
6
+ export { checkIsActive, splitHref, declaredFiltersMatch, VIEW_PARAMS, } from './nav-active';
6
7
  export { TeamSwitcher } from './team-switcher';
7
8
  export { ProfileDropdown } from './profile-dropdown';
8
9
  export { resolveIconName, humanizeNavKey, translateNavTitle, addonGroupToCollapsibleItem, FALLBACK_GROUP_ICON, FALLBACK_ITEM_ICON, } from './addon-nav';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,QAAQ,EAA6C,MAAM,aAAa,CAAA;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,QAAQ,EAA6C,MAAM,aAAa,CAAA;AACjF,OAAO,EACL,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,WAAW,GAEZ,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,aAAa,CAAA"}
@@ -0,0 +1,56 @@
1
+ import type { NavItem } from './types';
2
+ /**
3
+ * Query params that select WHICH surface a model renders (table vs board) and
4
+ * how it's grouped. They are the *identity* of a view-style nav item: two navs
5
+ * over the same model/path (e.g. "Board" `?view=kanban&group_by=stage` and
6
+ * "Issues" `?view=list`) are mutually exclusive, so exactly one may be active.
7
+ * Kept separate from transient query (page/sort/search) and from `f_` filters.
8
+ */
9
+ export declare const VIEW_PARAMS: Set<string>;
10
+ export interface SplitHref {
11
+ path: string;
12
+ view: string;
13
+ query: string;
14
+ filters: string;
15
+ }
16
+ /**
17
+ * Splits a URL into its path and three normalized, sorted query buckets:
18
+ * - `view` — the `view`/`group_by` surface-identity params (exclusive).
19
+ * - `filters` — the `f_` filter params (subset/refinement semantics).
20
+ * - `query` — everything else (transient: page/sort/search).
21
+ * Sorting each bucket makes equivalent strings compare equal regardless of
22
+ * param order.
23
+ *
24
+ * The split lets the matcher treat each class with the right semantics: `view`
25
+ * params must match EXACTLY in both directions (so a query-less default item
26
+ * does NOT stay lit when a sibling board is open, and vice-versa); `f_` params
27
+ * a base nav item omits are ignored (a manually-filtered table still highlights
28
+ * its base item) while a per-status entry that DECLARES `f_` uses them as its
29
+ * identity; transient `query` is ignored unless the item itself declares it.
30
+ */
31
+ export declare function splitHref(url: string): SplitHref;
32
+ /**
33
+ * True when every `f_` filter the item declares is present (same value) in the
34
+ * current href's filters. An item that declares no filters always passes, so it
35
+ * keeps highlighting regardless of transient table filtering.
36
+ */
37
+ export declare function declaredFiltersMatch(curFilters: string, targetFilters: string): boolean;
38
+ /**
39
+ * Active-state matcher for a nav item against the current href.
40
+ *
41
+ * View-aware, query-aware AND filter-aware so sibling navs over the same model
42
+ * light up ONE at a time:
43
+ * - `view`/`group_by` surface params must match EXACTLY in both directions.
44
+ * This is what keeps "Board" (`?view=kanban&group_by=stage`) and "Issues"
45
+ * (`?view=list`, or a query-less default) mutually exclusive — only the item
46
+ * whose view identity equals the current href stays active.
47
+ * - Other non-`f_` query params (page/sort/search) must match EXACTLY only
48
+ * when the item declares them — transient query never un-highlights a plain
49
+ * link.
50
+ * - `f_` filter params the item DECLARES in its own URL are its identity: they
51
+ * must all be present in the current href. An item that declares NO filters
52
+ * matches on path alone (a manually-filtered table still highlights its base
53
+ * item), preserving the prior behaviour for plain links.
54
+ */
55
+ export declare function checkIsActive(href: string, item: NavItem, mainNav?: boolean): boolean;
56
+ //# sourceMappingURL=nav-active.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-active.d.ts","sourceRoot":"","sources":["../../src/layout/nav-active.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAA;AAEvE;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,aAAgC,CAAA;AAExD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CA0BhD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAIT;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,UAAQ,GAAG,OAAO,CAiDnF"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Query params that select WHICH surface a model renders (table vs board) and
3
+ * how it's grouped. They are the *identity* of a view-style nav item: two navs
4
+ * over the same model/path (e.g. "Board" `?view=kanban&group_by=stage` and
5
+ * "Issues" `?view=list`) are mutually exclusive, so exactly one may be active.
6
+ * Kept separate from transient query (page/sort/search) and from `f_` filters.
7
+ */
8
+ export const VIEW_PARAMS = new Set(['view', 'group_by']);
9
+ /**
10
+ * Splits a URL into its path and three normalized, sorted query buckets:
11
+ * - `view` — the `view`/`group_by` surface-identity params (exclusive).
12
+ * - `filters` — the `f_` filter params (subset/refinement semantics).
13
+ * - `query` — everything else (transient: page/sort/search).
14
+ * Sorting each bucket makes equivalent strings compare equal regardless of
15
+ * param order.
16
+ *
17
+ * The split lets the matcher treat each class with the right semantics: `view`
18
+ * params must match EXACTLY in both directions (so a query-less default item
19
+ * does NOT stay lit when a sibling board is open, and vice-versa); `f_` params
20
+ * a base nav item omits are ignored (a manually-filtered table still highlights
21
+ * its base item) while a per-status entry that DECLARES `f_` uses them as its
22
+ * identity; transient `query` is ignored unless the item itself declares it.
23
+ */
24
+ export function splitHref(url) {
25
+ const qIndex = url.indexOf('?');
26
+ if (qIndex === -1)
27
+ return { path: url, view: '', query: '', filters: '' };
28
+ const path = url.slice(0, qIndex);
29
+ const params = new URLSearchParams(url.slice(qIndex + 1));
30
+ const entries = [];
31
+ const viewEntries = [];
32
+ const filterEntries = [];
33
+ for (const [k, v] of params.entries()) {
34
+ if (k.startsWith('f_'))
35
+ filterEntries.push([k, v]);
36
+ else if (VIEW_PARAMS.has(k))
37
+ viewEntries.push([k, v]);
38
+ else
39
+ entries.push([k, v]);
40
+ }
41
+ const norm = (e) => e
42
+ .sort((a, b) => a[0] === b[0] ? (a[1] < b[1] ? -1 : 1) : a[0] < b[0] ? -1 : 1)
43
+ .map(([k, v]) => `${k}=${v}`)
44
+ .join('&');
45
+ return {
46
+ path,
47
+ view: norm(viewEntries),
48
+ query: norm(entries),
49
+ filters: norm(filterEntries),
50
+ };
51
+ }
52
+ /**
53
+ * True when every `f_` filter the item declares is present (same value) in the
54
+ * current href's filters. An item that declares no filters always passes, so it
55
+ * keeps highlighting regardless of transient table filtering.
56
+ */
57
+ export function declaredFiltersMatch(curFilters, targetFilters) {
58
+ if (!targetFilters)
59
+ return true;
60
+ const cur = new Set(curFilters ? curFilters.split('&') : []);
61
+ return targetFilters.split('&').every((f) => cur.has(f));
62
+ }
63
+ /**
64
+ * Active-state matcher for a nav item against the current href.
65
+ *
66
+ * View-aware, query-aware AND filter-aware so sibling navs over the same model
67
+ * light up ONE at a time:
68
+ * - `view`/`group_by` surface params must match EXACTLY in both directions.
69
+ * This is what keeps "Board" (`?view=kanban&group_by=stage`) and "Issues"
70
+ * (`?view=list`, or a query-less default) mutually exclusive — only the item
71
+ * whose view identity equals the current href stays active.
72
+ * - Other non-`f_` query params (page/sort/search) must match EXACTLY only
73
+ * when the item declares them — transient query never un-highlights a plain
74
+ * link.
75
+ * - `f_` filter params the item DECLARES in its own URL are its identity: they
76
+ * must all be present in the current href. An item that declares NO filters
77
+ * matches on path alone (a manually-filtered table still highlights its base
78
+ * item), preserving the prior behaviour for plain links.
79
+ */
80
+ export function checkIsActive(href, item, mainNav = false) {
81
+ const hasItems = 'items' in item && Array.isArray(item.items);
82
+ const cur = splitHref(href);
83
+ const target = splitHref(item.url);
84
+ // Same path: this item matches only when the view-identity (view/group_by)
85
+ // matches exactly (sibling surfaces are mutually exclusive), transient query
86
+ // matches when declared, and declared f_ filters are all present. A same-path
87
+ // item that DOESN'T match falls through (a collapsible parent can still be
88
+ // active via a matching child below) rather than returning early.
89
+ if (cur.path === target.path &&
90
+ cur.view === target.view &&
91
+ (!target.query || cur.query === target.query) &&
92
+ declaredFiltersMatch(cur.filters, target.filters)) {
93
+ return true;
94
+ }
95
+ if (hasItems &&
96
+ item.items.some((i) => checkIsActive(href, i))) {
97
+ return true;
98
+ }
99
+ if (mainNav) {
100
+ const hrefParts = cur.path.split('/');
101
+ const itemParts = target.path.split('/');
102
+ const depth = hrefParts.length >= 3 && hrefParts[1] === 'm' ? 3 : 2;
103
+ const hrefPrefix = hrefParts.slice(0, depth).join('/');
104
+ const itemPrefix = itemParts.slice(0, depth).join('/');
105
+ if (hrefPrefix !== '' && hrefPrefix === itemPrefix) {
106
+ return true;
107
+ }
108
+ if (hasItems) {
109
+ for (const sub of item.items) {
110
+ const subParts = splitHref(sub.url ?? '').path.split('/');
111
+ if (subParts.slice(0, depth).join('/') === hrefPrefix) {
112
+ return true;
113
+ }
114
+ }
115
+ }
116
+ }
117
+ return false;
118
+ }
119
+ //# sourceMappingURL=nav-active.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-active.js","sourceRoot":"","sources":["../../src/layout/nav-active.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;AASxD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;IACzE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;IACzD,MAAM,OAAO,GAAuB,EAAE,CAAA;IACtC,MAAM,WAAW,GAAuB,EAAE,CAAA;IAC1C,MAAM,aAAa,GAAuB,EAAE,CAAA;IAC5C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;aAC7C,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC3B,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAqB,EAAE,EAAE,CACrC,CAAC;SACE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACb,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9D;SACA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B,IAAI,CAAC,GAAG,CAAC,CAAA;IACd,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;QACvB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;QACpB,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC;KAC7B,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAkB,EAClB,aAAqB;IAErB,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAA;IAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC5D,OAAO,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAAa,EAAE,OAAO,GAAG,KAAK;IACxE,MAAM,QAAQ,GAAG,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAE7D,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAElC,2EAA2E;IAC3E,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,kEAAkE;IAClE,IACE,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QACxB,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QACxB,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;QAC7C,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EACjD,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IACE,QAAQ;QACP,IAA2B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAc,EAAE,EAAE,CACzD,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CACvB,EACD,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACrC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACnE,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtD,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YACnD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,GAAG,IAAK,IAA2B,CAAC,KAAK,EAAE,CAAC;gBACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACzD,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC;oBACtD,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import type { NavGroupData } from './types';
3
+ export { checkIsActive, splitHref, declaredFiltersMatch, VIEW_PARAMS } from './nav-active';
4
+ export type { SplitHref } from './nav-active';
3
5
  export type NavLinkComponent = React.ComponentType<React.AnchorHTMLAttributes<HTMLAnchorElement> & {
4
6
  to: string;
5
7
  children?: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"nav-group.d.ts","sourceRoot":"","sources":["../../src/layout/nav-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA4B9B,OAAO,KAAK,EAAE,YAAY,EAA4C,MAAM,SAAS,CAAA;AAErF,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAChD,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC9C,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,CACF,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,aAAa,EAAE,gBAAgB,CAAA;IAC/B,sEAAsE;IACtE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAa,EACb,WAAW,GACZ,EAAE,aAAa,4BAgDf"}
1
+ {"version":3,"file":"nav-group.d.ts","sourceRoot":"","sources":["../../src/layout/nav-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA4B9B,OAAO,KAAK,EAAE,YAAY,EAA4C,MAAM,SAAS,CAAA;AAGrF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1F,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAChD,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC9C,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,CACF,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,aAAa,EAAE,gBAAgB,CAAA;IAC/B,sEAAsE;IACtE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAa,EACb,WAAW,GACZ,EAAE,aAAa,4BAgDf"}
@@ -6,6 +6,8 @@ import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '../primiti
6
6
  import { SidebarGroup, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, useSidebar, } from '../primitives/sidebar';
7
7
  import { Badge } from '../primitives/badge';
8
8
  import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '../primitives/dropdown-menu';
9
+ import { checkIsActive } from './nav-active';
10
+ export { checkIsActive, splitHref, declaredFiltersMatch, VIEW_PARAMS } from './nav-active';
9
11
  export function NavGroup({ title, items, currentHref, LinkComponent, onItemHover, }) {
10
12
  const { state, isMobile } = useSidebar();
11
13
  if (items.length === 0)
@@ -44,95 +46,4 @@ function SidebarMenuCollapsible({ item, href, LinkComponent, onItemHover, }) {
44
46
  function SidebarMenuCollapsedDropdown({ item, href, LinkComponent, onItemHover, }) {
45
47
  return (_jsx(SidebarMenuItem, { children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { tooltip: item.title, isActive: checkIsActive(href, item), children: [item.icon && _jsx(item.icon, {}), _jsx("span", { children: item.title }), hasBadge(item.badge) && _jsx(NavBadge, { children: item.badge }), _jsx(ChevronRight, { className: 'ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90' })] }) }), _jsxs(DropdownMenuContent, { side: 'right', align: 'start', sideOffset: 4, children: [_jsxs(DropdownMenuLabel, { children: [item.title, " ", item.badge ? `(${item.badge})` : ''] }), _jsx(DropdownMenuSeparator, {}), item.items.map((sub) => (_jsx(DropdownMenuItem, { asChild: true, children: _jsxs(LinkComponent, { to: sub.url, className: `${checkIsActive(href, sub) ? 'bg-secondary' : ''}`, onMouseEnter: () => onItemHover?.(sub.url), children: [sub.icon && _jsx(sub.icon, {}), _jsx("span", { className: 'max-w-52 text-wrap', children: sub.title }), hasBadge(sub.badge) && (_jsx("span", { className: 'ms-auto text-xs', children: sub.badge }))] }) }, `${sub.title}-${sub.url}`)))] })] }) }));
46
48
  }
47
- /**
48
- * Splits a URL into its path, a normalized non-`f_` query-string, and its
49
- * normalized `f_` filter params (kept separate). Both query parts are sorted so
50
- * equivalent strings compare equal regardless of param order.
51
- *
52
- * `f_` params are split out rather than discarded: a base nav item (no `f_` in
53
- * its own URL) still ignores them — so a manually-filtered table highlights its
54
- * base item — but a per-status nav item that DECLARES `f_` params in its URL
55
- * (e.g. `/m/orders?f_status=eq:reception`) uses them as its identity so sibling
56
- * status entries light up one at a time instead of all together.
57
- */
58
- function splitHref(url) {
59
- const qIndex = url.indexOf('?');
60
- if (qIndex === -1)
61
- return { path: url, query: '', filters: '' };
62
- const path = url.slice(0, qIndex);
63
- const params = new URLSearchParams(url.slice(qIndex + 1));
64
- const entries = [];
65
- const filterEntries = [];
66
- for (const [k, v] of params.entries()) {
67
- if (k.startsWith('f_'))
68
- filterEntries.push([k, v]);
69
- else
70
- entries.push([k, v]);
71
- }
72
- const norm = (e) => e
73
- .sort((a, b) => a[0] === b[0] ? (a[1] < b[1] ? -1 : 1) : a[0] < b[0] ? -1 : 1)
74
- .map(([k, v]) => `${k}=${v}`)
75
- .join('&');
76
- return { path, query: norm(entries), filters: norm(filterEntries) };
77
- }
78
- /**
79
- * True when every `f_` filter the item declares is present (same value) in the
80
- * current href's filters. An item that declares no filters always passes, so it
81
- * keeps highlighting regardless of transient table filtering.
82
- */
83
- function declaredFiltersMatch(curFilters, targetFilters) {
84
- if (!targetFilters)
85
- return true;
86
- const cur = new Set(curFilters ? curFilters.split('&') : []);
87
- return targetFilters.split('&').every((f) => cur.has(f));
88
- }
89
- /**
90
- * Active-state matcher for a nav item against the current href.
91
- *
92
- * Query-aware AND filter-aware so order-status style items that share a path
93
- * but differ only by a filter param (`/m/orders?f_status=eq:reception` vs
94
- * `?f_status=eq:delivered`) light up ONE at a time instead of all together:
95
- * - Non-`f_` query params (real navigation intent) must match EXACTLY when the
96
- * item declares them — a different (or absent) query is not a match.
97
- * - `f_` filter params the item DECLARES in its own URL are its identity: they
98
- * must all be present in the current href. An item that declares NO filters
99
- * matches on path alone (a manually-filtered table still highlights its base
100
- * item), preserving the prior behaviour for plain links.
101
- */
102
- function checkIsActive(href, item, mainNav = false) {
103
- const hasItems = 'items' in item && Array.isArray(item.items);
104
- const cur = splitHref(href);
105
- const target = splitHref(item.url);
106
- // Same path: real (non-f_) query must match exactly when declared; declared
107
- // f_ filters must all be present in the current href; an item with neither
108
- // matches the path regardless of the current href's query/filters.
109
- if (cur.path === target.path) {
110
- if (target.query && cur.query !== target.query)
111
- return false;
112
- return declaredFiltersMatch(cur.filters, target.filters);
113
- }
114
- if (hasItems &&
115
- item.items.some((i) => checkIsActive(href, i))) {
116
- return true;
117
- }
118
- if (mainNav) {
119
- const hrefParts = cur.path.split('/');
120
- const itemParts = target.path.split('/');
121
- const depth = hrefParts.length >= 3 && hrefParts[1] === 'm' ? 3 : 2;
122
- const hrefPrefix = hrefParts.slice(0, depth).join('/');
123
- const itemPrefix = itemParts.slice(0, depth).join('/');
124
- if (hrefPrefix !== '' && hrefPrefix === itemPrefix) {
125
- return true;
126
- }
127
- if (hasItems) {
128
- for (const sub of item.items) {
129
- const subParts = splitHref(sub.url ?? '').path.split('/');
130
- if (subParts.slice(0, depth).join('/') === hrefPrefix) {
131
- return true;
132
- }
133
- }
134
- }
135
- }
136
- return false;
137
- }
138
49
  //# sourceMappingURL=nav-group.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nav-group.js","sourceRoot":"","sources":["../../src/layout/nav-group.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nav-group.js","sourceRoot":"","sources":["../../src/layout/nav-group.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asteby/metacore-ui",
3
- "version": "2.5.2",
3
+ "version": "2.6.0",
4
4
  "description": "Metacore UI kit — data-table, layout shell, command-menu, hooks y primitives shadcn reutilizables",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -73,14 +73,14 @@
73
73
  }
74
74
  },
75
75
  "peerDependencies": {
76
+ "@tanstack/react-query": ">=5",
77
+ "@tanstack/react-router": ">=1.100",
78
+ "@tanstack/react-table": ">=8",
79
+ "date-fns": ">=3",
76
80
  "react": ">=18",
77
81
  "react-dom": ">=18",
78
82
  "react-hook-form": ">=7",
79
83
  "react-i18next": ">=13",
80
- "@tanstack/react-table": ">=8",
81
- "@tanstack/react-query": ">=5",
82
- "@tanstack/react-router": ">=1.100",
83
- "date-fns": ">=3",
84
84
  "tailwindcss": ">=4"
85
85
  },
86
86
  "peerDependenciesMeta": {
@@ -130,16 +130,17 @@
130
130
  "devDependencies": {
131
131
  "@tanstack/react-query": "^5.95.0",
132
132
  "@tanstack/react-router": "^1.168.0",
133
- "date-fns": "^4.1.0",
134
133
  "@tanstack/react-table": "^8.20.0",
135
134
  "@types/react": "^19.0.0",
136
135
  "@types/react-dom": "^19.0.0",
136
+ "date-fns": "^4.1.0",
137
137
  "react": "^19.2.4",
138
138
  "react-dom": "^19.2.4",
139
139
  "react-hook-form": "^7.54.0",
140
140
  "react-i18next": "^17.0.0",
141
141
  "tsc-alias": "^1.8.10",
142
- "typescript": "^6.0.0"
142
+ "typescript": "^6.0.0",
143
+ "vitest": "4.1.8"
143
144
  },
144
145
  "publishConfig": {
145
146
  "access": "public"
@@ -148,6 +149,7 @@
148
149
  "build": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
149
150
  "dev": "tsc -w -p tsconfig.json",
150
151
  "typecheck": "tsc -p tsconfig.json --noEmit",
152
+ "test": "vitest run",
151
153
  "clean": "rm -rf dist"
152
154
  }
153
155
  }