@zccz14/ux 0.1.3 → 0.1.5
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.
- package/dist/index.js +115 -108
- package/dist/styles.css +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { Dialog as
|
|
4
|
-
import { Tooltip as
|
|
5
|
-
import { useLinkit as
|
|
6
|
-
import { useLocation as
|
|
7
|
-
const
|
|
1
|
+
import { jsxs as l, jsx as e, Fragment as w } from "react/jsx-runtime";
|
|
2
|
+
import { useState as g, useCallback as x, useEffect as M, useSyncExternalStore as L } from "react";
|
|
3
|
+
import { Dialog as m } from "@base-ui/react/dialog";
|
|
4
|
+
import { Tooltip as h } from "@base-ui/react/tooltip";
|
|
5
|
+
import { useLinkit as N, LinkitMyInfo as S } from "linkit-react-components";
|
|
6
|
+
import { useLocation as k, NavLink as C } from "react-router-dom";
|
|
7
|
+
const O = {
|
|
8
8
|
closeNavigation: "Close navigation",
|
|
9
9
|
navigation: "Navigation",
|
|
10
10
|
toggleSidebar: "Toggle sidebar"
|
|
11
|
-
},
|
|
11
|
+
}, P = {
|
|
12
12
|
closeNavigation: "关闭导航",
|
|
13
13
|
navigation: "导航",
|
|
14
14
|
toggleSidebar: "切换侧边栏"
|
|
15
15
|
};
|
|
16
|
-
function
|
|
17
|
-
return
|
|
16
|
+
function I(a) {
|
|
17
|
+
return a.toLowerCase().startsWith("zh") ? P : O;
|
|
18
18
|
}
|
|
19
19
|
function T() {
|
|
20
|
-
return /* @__PURE__ */
|
|
20
|
+
return /* @__PURE__ */ l(
|
|
21
21
|
"svg",
|
|
22
22
|
{
|
|
23
23
|
"aria-hidden": "true",
|
|
@@ -35,7 +35,7 @@ function T() {
|
|
|
35
35
|
);
|
|
36
36
|
}
|
|
37
37
|
function E() {
|
|
38
|
-
return /* @__PURE__ */
|
|
38
|
+
return /* @__PURE__ */ l(
|
|
39
39
|
"svg",
|
|
40
40
|
{
|
|
41
41
|
"aria-hidden": "true",
|
|
@@ -52,164 +52,171 @@ function E() {
|
|
|
52
52
|
}
|
|
53
53
|
);
|
|
54
54
|
}
|
|
55
|
-
const
|
|
56
|
-
function
|
|
57
|
-
const
|
|
58
|
-
return
|
|
55
|
+
const b = "sidebar_state", W = 3600 * 24 * 7, _ = "(max-width: 767px)";
|
|
56
|
+
function $() {
|
|
57
|
+
const a = document.cookie.split("; ").find((n) => n.startsWith(`${b}=`));
|
|
58
|
+
return a ? a.slice(b.length + 1) !== "false" : !0;
|
|
59
59
|
}
|
|
60
|
-
function
|
|
61
|
-
document.cookie = `${
|
|
60
|
+
function j(a) {
|
|
61
|
+
document.cookie = `${b}=${a}; path=/; max-age=${W}`;
|
|
62
62
|
}
|
|
63
|
-
function
|
|
64
|
-
const
|
|
65
|
-
return
|
|
63
|
+
function B(a) {
|
|
64
|
+
const n = window.matchMedia(_);
|
|
65
|
+
return n.addEventListener("change", a), () => n.removeEventListener("change", a);
|
|
66
66
|
}
|
|
67
|
-
function
|
|
68
|
-
return
|
|
69
|
-
|
|
70
|
-
() => window.matchMedia(
|
|
67
|
+
function A() {
|
|
68
|
+
return L(
|
|
69
|
+
B,
|
|
70
|
+
() => window.matchMedia(_).matches,
|
|
71
71
|
() => !1
|
|
72
72
|
);
|
|
73
73
|
}
|
|
74
|
-
function
|
|
75
|
-
const
|
|
76
|
-
t(
|
|
77
|
-
}, []), u =
|
|
78
|
-
if (
|
|
79
|
-
|
|
74
|
+
function D() {
|
|
75
|
+
const a = A(), [n, t] = g($), [c, i] = g(!1), d = x((r) => {
|
|
76
|
+
t(r), j(r);
|
|
77
|
+
}, []), u = x(() => {
|
|
78
|
+
if (a) {
|
|
79
|
+
i((r) => !r);
|
|
80
80
|
return;
|
|
81
81
|
}
|
|
82
|
-
d(!
|
|
83
|
-
}, [
|
|
84
|
-
return
|
|
85
|
-
function
|
|
86
|
-
(
|
|
82
|
+
d(!n);
|
|
83
|
+
}, [a, n, d]);
|
|
84
|
+
return M(() => {
|
|
85
|
+
function r(s) {
|
|
86
|
+
(s.metaKey || s.ctrlKey) && s.key === "b" && (s.preventDefault(), u());
|
|
87
87
|
}
|
|
88
|
-
return window.addEventListener("keydown",
|
|
89
|
-
}, [u]), { isMobile:
|
|
88
|
+
return window.addEventListener("keydown", r), () => window.removeEventListener("keydown", r);
|
|
89
|
+
}, [u]), { isMobile: a, open: n, openMobile: c, setOpenMobile: i, toggleSidebar: u };
|
|
90
90
|
}
|
|
91
|
-
function
|
|
91
|
+
function y(a, n) {
|
|
92
92
|
let t;
|
|
93
|
-
for (const c of
|
|
94
|
-
for (const
|
|
95
|
-
(
|
|
93
|
+
for (const c of a)
|
|
94
|
+
for (const i of c.items)
|
|
95
|
+
(i.to === "/" ? n === "/" : n === i.to || n.startsWith(`${i.to}/`)) && (!t || i.to.length > t.to.length) && (t = i);
|
|
96
96
|
return t;
|
|
97
97
|
}
|
|
98
98
|
function K({
|
|
99
|
-
collapsed:
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
collapsed: a,
|
|
100
|
+
end: n,
|
|
101
|
+
item: t,
|
|
102
|
+
onNavigate: c
|
|
102
103
|
}) {
|
|
103
|
-
return /* @__PURE__ */
|
|
104
|
-
/* @__PURE__ */
|
|
105
|
-
|
|
104
|
+
return /* @__PURE__ */ l(h.Root, { children: [
|
|
105
|
+
/* @__PURE__ */ l(
|
|
106
|
+
h.Trigger,
|
|
106
107
|
{
|
|
107
108
|
render: /* @__PURE__ */ e(
|
|
108
|
-
|
|
109
|
+
C,
|
|
109
110
|
{
|
|
110
111
|
className: "ux-nav-item",
|
|
111
|
-
end:
|
|
112
|
-
onClick:
|
|
113
|
-
to:
|
|
112
|
+
end: n,
|
|
113
|
+
onClick: c,
|
|
114
|
+
to: t.to
|
|
114
115
|
}
|
|
115
116
|
),
|
|
116
117
|
children: [
|
|
117
|
-
/* @__PURE__ */ e("span", { className: "ux-nav-item__icon", children:
|
|
118
|
-
/* @__PURE__ */ e("span", { className: "ux-nav-item__text", children:
|
|
118
|
+
/* @__PURE__ */ e("span", { className: "ux-nav-item__icon", children: t.icon }),
|
|
119
|
+
/* @__PURE__ */ e("span", { className: "ux-nav-item__text", children: t.label })
|
|
119
120
|
]
|
|
120
121
|
}
|
|
121
122
|
),
|
|
122
|
-
/* @__PURE__ */ e(
|
|
123
|
-
|
|
123
|
+
/* @__PURE__ */ e(h.Portal, { children: /* @__PURE__ */ e(
|
|
124
|
+
h.Positioner,
|
|
124
125
|
{
|
|
125
126
|
className: "ux-tooltip-positioner",
|
|
126
127
|
side: "right",
|
|
127
128
|
sideOffset: 6,
|
|
128
|
-
children: /* @__PURE__ */ e(
|
|
129
|
+
children: /* @__PURE__ */ e(h.Popup, { className: "ux-tooltip", hidden: !a, children: t.label })
|
|
129
130
|
}
|
|
130
131
|
) })
|
|
131
132
|
] });
|
|
132
133
|
}
|
|
133
|
-
function
|
|
134
|
-
copy:
|
|
135
|
-
logo:
|
|
134
|
+
function v({
|
|
135
|
+
copy: a,
|
|
136
|
+
logo: n,
|
|
136
137
|
nav: t,
|
|
137
138
|
onNavigate: c,
|
|
138
|
-
state:
|
|
139
|
+
state: i,
|
|
139
140
|
title: d
|
|
140
141
|
}) {
|
|
141
|
-
const { resolvedTheme: u } =
|
|
142
|
-
return /* @__PURE__ */
|
|
143
|
-
/* @__PURE__ */
|
|
144
|
-
/* @__PURE__ */ e("span", { className: "ux-sidebar__logo", children: u === "dark" ?
|
|
142
|
+
const { resolvedTheme: u } = N(), { pathname: r } = k(), s = y(t, r);
|
|
143
|
+
return /* @__PURE__ */ l(w, { children: [
|
|
144
|
+
/* @__PURE__ */ l("div", { className: "ux-sidebar__header", children: [
|
|
145
|
+
/* @__PURE__ */ e("span", { className: "ux-sidebar__logo", children: u === "dark" ? n.dark : n.light }),
|
|
145
146
|
/* @__PURE__ */ e("span", { className: "ux-sidebar__title", children: d })
|
|
146
147
|
] }),
|
|
147
|
-
/* @__PURE__ */ e("nav", { "aria-label":
|
|
148
|
-
/* @__PURE__ */ e("div", { className: "ux-nav-group__label", children:
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
148
|
+
/* @__PURE__ */ e("nav", { "aria-label": a.navigation, className: "ux-sidebar__nav", children: t.map((o) => /* @__PURE__ */ l("div", { className: "ux-nav-group", children: [
|
|
149
|
+
/* @__PURE__ */ e("div", { className: "ux-nav-group__label", children: o.label }),
|
|
150
|
+
o.items.map((p) => (
|
|
151
|
+
// NavLink would mark a parent section current on its children's
|
|
152
|
+
// routes; follow matchActiveItem instead so only the deepest
|
|
153
|
+
// match (or the exact path) stays marked.
|
|
154
|
+
/* @__PURE__ */ e(
|
|
155
|
+
K,
|
|
156
|
+
{
|
|
157
|
+
collapsed: i === "collapsed",
|
|
158
|
+
end: p !== s || p.to === r,
|
|
159
|
+
item: p,
|
|
160
|
+
onNavigate: c
|
|
161
|
+
},
|
|
162
|
+
p.to
|
|
163
|
+
)
|
|
157
164
|
))
|
|
158
|
-
] },
|
|
165
|
+
] }, o.label)) })
|
|
159
166
|
] });
|
|
160
167
|
}
|
|
161
168
|
function H({
|
|
162
|
-
children:
|
|
163
|
-
headerSlot:
|
|
169
|
+
children: a,
|
|
170
|
+
headerSlot: n,
|
|
164
171
|
logo: t,
|
|
165
172
|
nav: c,
|
|
166
|
-
pageTitle:
|
|
173
|
+
pageTitle: i,
|
|
167
174
|
title: d
|
|
168
175
|
}) {
|
|
169
|
-
var
|
|
170
|
-
const { pathname: u } =
|
|
171
|
-
return /* @__PURE__ */ e(
|
|
176
|
+
var f;
|
|
177
|
+
const { pathname: u } = k(), { lang: r } = N(), s = I(r), o = D(), p = i ?? ((f = y(c, u)) == null ? void 0 : f.label);
|
|
178
|
+
return /* @__PURE__ */ e(h.Provider, { delay: 0, children: /* @__PURE__ */ l(
|
|
172
179
|
"div",
|
|
173
180
|
{
|
|
174
181
|
className: "ux-app-layout",
|
|
175
|
-
"data-state":
|
|
182
|
+
"data-state": o.open ? "expanded" : "collapsed",
|
|
176
183
|
children: [
|
|
177
184
|
/* @__PURE__ */ e("aside", { className: "ux-sidebar", children: /* @__PURE__ */ e(
|
|
178
|
-
|
|
185
|
+
v,
|
|
179
186
|
{
|
|
180
|
-
copy:
|
|
187
|
+
copy: s,
|
|
181
188
|
logo: t,
|
|
182
189
|
nav: c,
|
|
183
|
-
state:
|
|
190
|
+
state: o.open ? "expanded" : "collapsed",
|
|
184
191
|
title: d
|
|
185
192
|
}
|
|
186
193
|
) }),
|
|
187
|
-
|
|
188
|
-
|
|
194
|
+
o.isMobile ? /* @__PURE__ */ e(
|
|
195
|
+
m.Root,
|
|
189
196
|
{
|
|
190
|
-
open:
|
|
191
|
-
onOpenChange:
|
|
192
|
-
children: /* @__PURE__ */
|
|
193
|
-
/* @__PURE__ */ e(
|
|
194
|
-
/* @__PURE__ */
|
|
195
|
-
/* @__PURE__ */ e(
|
|
197
|
+
open: o.openMobile,
|
|
198
|
+
onOpenChange: o.setOpenMobile,
|
|
199
|
+
children: /* @__PURE__ */ l(m.Portal, { children: [
|
|
200
|
+
/* @__PURE__ */ e(m.Backdrop, { className: "ux-drawer-backdrop" }),
|
|
201
|
+
/* @__PURE__ */ l(m.Popup, { className: "ux-drawer", children: [
|
|
202
|
+
/* @__PURE__ */ e(m.Title, { className: "ux-visually-hidden", children: s.navigation }),
|
|
196
203
|
/* @__PURE__ */ e(
|
|
197
204
|
"button",
|
|
198
205
|
{
|
|
199
|
-
"aria-label":
|
|
206
|
+
"aria-label": s.closeNavigation,
|
|
200
207
|
className: "ux-drawer__close",
|
|
201
208
|
type: "button",
|
|
202
|
-
onClick: () =>
|
|
209
|
+
onClick: () => o.setOpenMobile(!1),
|
|
203
210
|
children: /* @__PURE__ */ e(T, {})
|
|
204
211
|
}
|
|
205
212
|
),
|
|
206
213
|
/* @__PURE__ */ e(
|
|
207
|
-
|
|
214
|
+
v,
|
|
208
215
|
{
|
|
209
|
-
copy:
|
|
216
|
+
copy: s,
|
|
210
217
|
logo: t,
|
|
211
218
|
nav: c,
|
|
212
|
-
onNavigate: () =>
|
|
219
|
+
onNavigate: () => o.setOpenMobile(!1),
|
|
213
220
|
state: "expanded",
|
|
214
221
|
title: d
|
|
215
222
|
}
|
|
@@ -218,25 +225,25 @@ function H({
|
|
|
218
225
|
] })
|
|
219
226
|
}
|
|
220
227
|
) : null,
|
|
221
|
-
/* @__PURE__ */
|
|
222
|
-
/* @__PURE__ */
|
|
228
|
+
/* @__PURE__ */ l("div", { className: "ux-shell", children: [
|
|
229
|
+
/* @__PURE__ */ l("header", { className: "ux-app-header", children: [
|
|
223
230
|
/* @__PURE__ */ e(
|
|
224
231
|
"button",
|
|
225
232
|
{
|
|
226
|
-
"aria-expanded":
|
|
227
|
-
"aria-label":
|
|
233
|
+
"aria-expanded": o.isMobile ? o.openMobile : o.open,
|
|
234
|
+
"aria-label": s.toggleSidebar,
|
|
228
235
|
className: "ux-app-header__trigger",
|
|
229
236
|
type: "button",
|
|
230
|
-
onClick:
|
|
237
|
+
onClick: o.toggleSidebar,
|
|
231
238
|
children: /* @__PURE__ */ e(E, {})
|
|
232
239
|
}
|
|
233
240
|
),
|
|
234
241
|
/* @__PURE__ */ e("span", { "aria-hidden": "true", className: "ux-app-header__separator" }),
|
|
235
|
-
/* @__PURE__ */ e("p", { className: "ux-app-header__title", children:
|
|
236
|
-
/* @__PURE__ */ e("div", { className: "ux-app-header__slot", children:
|
|
237
|
-
/* @__PURE__ */ e(
|
|
242
|
+
/* @__PURE__ */ e("p", { className: "ux-app-header__title", children: p }),
|
|
243
|
+
/* @__PURE__ */ e("div", { className: "ux-app-header__slot", children: n }),
|
|
244
|
+
/* @__PURE__ */ e(S, {})
|
|
238
245
|
] }),
|
|
239
|
-
/* @__PURE__ */ e("main", { className: "ux-main", children:
|
|
246
|
+
/* @__PURE__ */ e("main", { className: "ux-main", children: a })
|
|
240
247
|
] })
|
|
241
248
|
]
|
|
242
249
|
}
|
package/dist/styles.css
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zccz14/ux",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Unified AppLayout shell for the NTNL app family: one animated icon sidebar, a fixed-size dark/light logo, and the Linkit-integrated AppHeader.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|