@burdenoff/fe-libs 2026.926.4 → 2026.926.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/chrome/ProductPickerSheet.d.ts.map +1 -1
- package/dist/chrome/ProductPickerSheet.js +45 -44
- package/dist/chrome/ProductSwitcher.d.ts.map +1 -1
- package/dist/chrome/ProductSwitcher.js +83 -82
- package/dist/shared/config/index.d.ts +3 -1
- package/dist/shared/config/index.d.ts.map +1 -1
- package/dist/shared/config/productSlug.d.ts +36 -0
- package/dist/shared/config/productSlug.d.ts.map +1 -0
- package/dist/shared/config/productSlug.js +23 -0
- package/dist/shared/config/products.d.ts +8 -1
- package/dist/shared/config/products.d.ts.map +1 -1
- package/dist/shared/config/products.js +21 -14
- package/dist/shared/hooks/shell/useProducts.d.ts +8 -0
- package/dist/shared/hooks/shell/useProducts.d.ts.map +1 -1
- package/dist/shared/hooks/shell/useProducts.js +46 -42
- package/dist/shared/providers/AppShellProvider.d.ts.map +1 -1
- package/dist/shared/providers/AppShellProvider.js +228 -227
- package/dist/shared/providers/shell/ThemeProvider.d.ts +1 -1
- package/dist/shared/providers/shell/ThemeProvider.d.ts.map +1 -1
- package/dist/shared/providers/shell/ThemeProvider.js +58 -57
- package/dist/shared/providers/shell/brandAttribute.d.ts +11 -0
- package/dist/shared/providers/shell/brandAttribute.d.ts.map +1 -0
- package/dist/shared/providers/shell/brandAttribute.js +7 -0
- package/dist/shared-config.js +11 -10
- package/dist/shared.js +121 -120
- package/package.json +2 -2
- package/src/vite/types.ts +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductPickerSheet.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductPickerSheet.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ProductPickerSheet.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductPickerSheet.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQ3C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkCD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAuH1D,CAAC"}
|
|
@@ -1,110 +1,111 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { isSameProductSlug as e } from "../shared/config/productSlug.js";
|
|
2
|
+
import { Sheet as t, SheetContent as n, SheetHeader as r, SheetTitle as i } from "../ui/sheet.js";
|
|
3
|
+
import { filterProducts as a, resolveProductLogo as o } from "./ProductSwitcher.js";
|
|
4
|
+
import { useMemo as s, useState as c } from "react";
|
|
5
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
5
6
|
//#region src/chrome/ProductPickerSheet.tsx
|
|
6
|
-
var
|
|
7
|
-
let [t, n] =
|
|
8
|
-
return r && !t ? /* @__PURE__ */
|
|
7
|
+
var d = 6, f = ({ product: e }) => {
|
|
8
|
+
let [t, n] = c(!1), r = o(e);
|
|
9
|
+
return r && !t ? /* @__PURE__ */ l("div", {
|
|
9
10
|
className: "size-10 rounded-lg bg-white p-1 ring-1 ring-border-default dark:ring-border-strong flex items-center justify-center flex-shrink-0 overflow-hidden",
|
|
10
|
-
children: /* @__PURE__ */
|
|
11
|
+
children: /* @__PURE__ */ l("img", {
|
|
11
12
|
src: r,
|
|
12
13
|
alt: e.name,
|
|
13
14
|
className: "size-full object-contain",
|
|
14
15
|
onError: () => n(!0)
|
|
15
16
|
})
|
|
16
|
-
}) : e.icon ? /* @__PURE__ */
|
|
17
|
+
}) : e.icon ? /* @__PURE__ */ l("div", {
|
|
17
18
|
className: "size-10 rounded-lg bg-[var(--color-accent-soft)] flex items-center justify-center flex-shrink-0",
|
|
18
19
|
children: e.icon
|
|
19
|
-
}) : /* @__PURE__ */
|
|
20
|
+
}) : /* @__PURE__ */ l("div", {
|
|
20
21
|
className: "size-10 rounded-lg bg-action-primary-bg flex items-center justify-center flex-shrink-0",
|
|
21
|
-
children: /* @__PURE__ */
|
|
22
|
+
children: /* @__PURE__ */ l("span", {
|
|
22
23
|
className: "text-action-primary-text font-bold text-sm",
|
|
23
24
|
children: e.name.substring(0, 2).toUpperCase()
|
|
24
25
|
})
|
|
25
26
|
});
|
|
26
|
-
},
|
|
27
|
-
let [
|
|
28
|
-
|
|
27
|
+
}, p = ({ open: o, onOpenChange: p, products: m, currentProductId: h, onProductChange: g }) => {
|
|
28
|
+
let [_, v] = c(""), y = m.length > d, b = s(() => a(m, _), [m, _]), x = (e) => {
|
|
29
|
+
g && g(e), p(!1);
|
|
29
30
|
};
|
|
30
|
-
return /* @__PURE__ */
|
|
31
|
-
open:
|
|
31
|
+
return /* @__PURE__ */ l(t, {
|
|
32
|
+
open: o,
|
|
32
33
|
onOpenChange: (e) => {
|
|
33
|
-
e ||
|
|
34
|
+
e || v(""), p(e);
|
|
34
35
|
},
|
|
35
|
-
children: /* @__PURE__ */
|
|
36
|
+
children: /* @__PURE__ */ u(n, {
|
|
36
37
|
side: "bottom",
|
|
37
38
|
className: "h-[60vh] flex flex-col p-0",
|
|
38
39
|
children: [
|
|
39
|
-
/* @__PURE__ */
|
|
40
|
+
/* @__PURE__ */ l(r, {
|
|
40
41
|
className: "px-4 pt-4 pb-2 border-b border-border-subtle",
|
|
41
|
-
children: /* @__PURE__ */
|
|
42
|
+
children: /* @__PURE__ */ l(i, {
|
|
42
43
|
className: "text-text-primary",
|
|
43
44
|
children: "Switch Product"
|
|
44
45
|
})
|
|
45
46
|
}),
|
|
46
|
-
|
|
47
|
+
y && /* @__PURE__ */ u("div", {
|
|
47
48
|
className: "relative px-4 py-2 border-b border-border-subtle",
|
|
48
|
-
children: [/* @__PURE__ */
|
|
49
|
+
children: [/* @__PURE__ */ l("svg", {
|
|
49
50
|
className: "pointer-events-none absolute left-7 top-1/2 -translate-y-1/2 size-4 text-text-muted",
|
|
50
51
|
fill: "none",
|
|
51
52
|
stroke: "currentColor",
|
|
52
53
|
viewBox: "0 0 24 24",
|
|
53
|
-
children: /* @__PURE__ */
|
|
54
|
+
children: /* @__PURE__ */ l("path", {
|
|
54
55
|
strokeLinecap: "round",
|
|
55
56
|
strokeLinejoin: "round",
|
|
56
57
|
strokeWidth: 2,
|
|
57
58
|
d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
|
|
58
59
|
})
|
|
59
|
-
}), /* @__PURE__ */
|
|
60
|
+
}), /* @__PURE__ */ l("input", {
|
|
60
61
|
type: "text",
|
|
61
|
-
value:
|
|
62
|
-
onChange: (e) =>
|
|
62
|
+
value: _,
|
|
63
|
+
onChange: (e) => v(e.target.value),
|
|
63
64
|
placeholder: "Search products…",
|
|
64
65
|
"aria-label": "Search products",
|
|
65
66
|
className: "w-full rounded-md border border-border-subtle bg-bg-surface py-2.5 pl-9 pr-3 text-sm text-text-primary placeholder:text-text-muted focus:border-transparent focus:outline-none focus:ring-2 focus:ring-[var(--color-action-primary-border)]"
|
|
66
67
|
})]
|
|
67
68
|
}),
|
|
68
|
-
/* @__PURE__ */
|
|
69
|
+
/* @__PURE__ */ u("div", {
|
|
69
70
|
className: "flex-1 overflow-y-auto py-2",
|
|
70
|
-
children: [
|
|
71
|
+
children: [b.length === 0 && /* @__PURE__ */ u("p", {
|
|
71
72
|
className: "px-4 py-6 text-center text-body-sm text-text-muted",
|
|
72
73
|
children: [
|
|
73
74
|
"No products match “",
|
|
74
|
-
|
|
75
|
+
_,
|
|
75
76
|
"”"
|
|
76
77
|
]
|
|
77
|
-
}),
|
|
78
|
-
onClick: () =>
|
|
79
|
-
className: `w-full flex items-center gap-4 px-4 py-3.5 text-body-sm transition-colors ${e.id
|
|
78
|
+
}), b.map((t) => /* @__PURE__ */ u("button", {
|
|
79
|
+
onClick: () => x(t),
|
|
80
|
+
className: `w-full flex items-center gap-4 px-4 py-3.5 text-body-sm transition-colors ${e(t.id, h) ? "bg-[var(--color-accent-soft)]" : "hover:bg-bg-sunken"}`,
|
|
80
81
|
children: [
|
|
81
|
-
/* @__PURE__ */
|
|
82
|
-
/* @__PURE__ */
|
|
82
|
+
/* @__PURE__ */ l(f, { product: t }),
|
|
83
|
+
/* @__PURE__ */ u("div", {
|
|
83
84
|
className: "flex-1 text-left min-w-0",
|
|
84
|
-
children: [/* @__PURE__ */
|
|
85
|
+
children: [/* @__PURE__ */ l("p", {
|
|
85
86
|
className: "font-medium text-text-primary",
|
|
86
|
-
children:
|
|
87
|
-
}),
|
|
87
|
+
children: t.name
|
|
88
|
+
}), t.description && /* @__PURE__ */ l("p", {
|
|
88
89
|
className: "text-xs text-text-secondary truncate",
|
|
89
|
-
children:
|
|
90
|
+
children: t.description
|
|
90
91
|
})]
|
|
91
92
|
}),
|
|
92
|
-
e.id
|
|
93
|
+
e(t.id, h) && /* @__PURE__ */ l("svg", {
|
|
93
94
|
className: "size-5 text-action-primary-bg flex-shrink-0",
|
|
94
95
|
fill: "currentColor",
|
|
95
96
|
viewBox: "0 0 20 20",
|
|
96
|
-
children: /* @__PURE__ */
|
|
97
|
+
children: /* @__PURE__ */ l("path", {
|
|
97
98
|
fillRule: "evenodd",
|
|
98
99
|
d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",
|
|
99
100
|
clipRule: "evenodd"
|
|
100
101
|
})
|
|
101
102
|
}),
|
|
102
|
-
|
|
103
|
+
t.url && !e(t.id, h) && /* @__PURE__ */ l("svg", {
|
|
103
104
|
className: "size-4 text-text-muted flex-shrink-0",
|
|
104
105
|
fill: "none",
|
|
105
106
|
stroke: "currentColor",
|
|
106
107
|
viewBox: "0 0 24 24",
|
|
107
|
-
children: /* @__PURE__ */
|
|
108
|
+
children: /* @__PURE__ */ l("path", {
|
|
108
109
|
strokeLinecap: "round",
|
|
109
110
|
strokeLinejoin: "round",
|
|
110
111
|
strokeWidth: 2,
|
|
@@ -112,11 +113,11 @@ var u = 6, d = ({ product: e }) => {
|
|
|
112
113
|
})
|
|
113
114
|
})
|
|
114
115
|
]
|
|
115
|
-
},
|
|
116
|
+
}, t.id))]
|
|
116
117
|
})
|
|
117
118
|
]
|
|
118
119
|
})
|
|
119
120
|
});
|
|
120
121
|
};
|
|
121
122
|
//#endregion
|
|
122
|
-
export {
|
|
123
|
+
export { p as ProductPickerSheet };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductSwitcher.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductSwitcher.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ProductSwitcher.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductSwitcher.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAYhC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,GAAG,SAAS,CAKrB;AA0CD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACzF,QAAQ,EAAE,CAAC,EAAE,EACb,KAAK,EAAE,MAAM,GACZ,CAAC,EAAE,CASL;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EAAE,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,GAAG,SAAS,CAOrB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAgNpD,CAAC"}
|
|
@@ -1,82 +1,83 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { isSameProductSlug as e } from "../shared/config/productSlug.js";
|
|
2
|
+
import { getProductsWithUrls as t } from "../shared/config/products.js";
|
|
3
|
+
import { useShellLabel as n } from "../shared/providers/shell/useShellLabel.js";
|
|
4
|
+
import { useEffect as r, useMemo as i, useRef as a, useState as o } from "react";
|
|
5
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
5
6
|
//#region src/chrome/ProductSwitcher.tsx
|
|
6
|
-
var
|
|
7
|
-
function
|
|
7
|
+
var l = 6;
|
|
8
|
+
function u(e) {
|
|
8
9
|
if (e?.logoUrl) return e.logoUrl;
|
|
9
10
|
let t = e?.url;
|
|
10
11
|
if (!(!t || t === "#")) return `${t.replace(/\/+$/, "")}/icons/icon.svg`;
|
|
11
12
|
}
|
|
12
|
-
var
|
|
13
|
-
let [r, i] =
|
|
14
|
-
return /* @__PURE__ */
|
|
13
|
+
var d = ({ product: e, sizeClass: t, textClass: n }) => {
|
|
14
|
+
let [r, i] = o(!1), a = u(e), c = !!a && !r;
|
|
15
|
+
return /* @__PURE__ */ s("div", {
|
|
15
16
|
className: `${t} rounded-md flex items-center justify-center flex-shrink-0 overflow-hidden ${c ? "bg-white p-0.5 ring-1 ring-border-default dark:ring-border-strong" : `text-text-inverse font-semibold ${n}`}`,
|
|
16
17
|
style: c ? void 0 : { backgroundColor: e?.color || "var(--color-action-primary-bg)" },
|
|
17
|
-
children: c ? /* @__PURE__ */
|
|
18
|
-
src:
|
|
18
|
+
children: c ? /* @__PURE__ */ s("img", {
|
|
19
|
+
src: a,
|
|
19
20
|
alt: e?.name ?? "",
|
|
20
21
|
className: "size-full object-contain",
|
|
21
22
|
onError: () => i(!0)
|
|
22
23
|
}) : e?.icon || e?.name.charAt(0)
|
|
23
24
|
});
|
|
24
25
|
};
|
|
25
|
-
function
|
|
26
|
+
function f(e, t) {
|
|
26
27
|
let n = t.trim().toLowerCase();
|
|
27
28
|
return n ? e.filter((e) => e.name.toLowerCase().includes(n) || e.id.toLowerCase().includes(n) || (e.description ? e.description.toLowerCase().includes(n) : !1)) : e;
|
|
28
29
|
}
|
|
29
|
-
function
|
|
30
|
-
return
|
|
31
|
-
id:
|
|
32
|
-
name:
|
|
30
|
+
function p(n, r) {
|
|
31
|
+
return n.find((t) => e(t.id, r)) || (r ? t().find((t) => e(t.id, r)) || {
|
|
32
|
+
id: r,
|
|
33
|
+
name: r,
|
|
33
34
|
url: "#"
|
|
34
|
-
} :
|
|
35
|
+
} : n[0]);
|
|
35
36
|
}
|
|
36
|
-
var
|
|
37
|
-
let
|
|
38
|
-
|
|
37
|
+
var m = ({ products: t, currentProductId: u, onProductChange: m, compact: h = !1 }) => {
|
|
38
|
+
let g = n(), [_, v] = o(!1), [y, b] = o(""), x = a(null), S = a(null), C = p(t, u), w = t.length > l, T = i(() => f(t, y), [t, y]);
|
|
39
|
+
r(() => {
|
|
39
40
|
let e = (e) => {
|
|
40
|
-
|
|
41
|
+
x.current && !x.current.contains(e.target) && v(!1);
|
|
41
42
|
};
|
|
42
|
-
if (
|
|
43
|
-
}, [
|
|
44
|
-
if (!
|
|
45
|
-
|
|
43
|
+
if (_) return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
44
|
+
}, [_]), r(() => {
|
|
45
|
+
if (!_) {
|
|
46
|
+
b("");
|
|
46
47
|
return;
|
|
47
48
|
}
|
|
48
|
-
if (
|
|
49
|
-
let e = setTimeout(() =>
|
|
49
|
+
if (w) {
|
|
50
|
+
let e = setTimeout(() => S.current?.focus(), 60);
|
|
50
51
|
return () => clearTimeout(e);
|
|
51
52
|
}
|
|
52
|
-
}, [
|
|
53
|
-
let
|
|
54
|
-
e.comingSoon || (
|
|
53
|
+
}, [_, w]);
|
|
54
|
+
let E = (e) => {
|
|
55
|
+
e.comingSoon || (m ? m(e) : window.location.href = e.url, v(!1));
|
|
55
56
|
};
|
|
56
|
-
return /* @__PURE__ */
|
|
57
|
+
return /* @__PURE__ */ c("div", {
|
|
57
58
|
className: "relative",
|
|
58
|
-
ref:
|
|
59
|
-
children: [/* @__PURE__ */
|
|
60
|
-
onClick: () =>
|
|
61
|
-
className: `flex items-center gap-2 px-3 py-2 rounded-button hover:bg-bg-sunken transition-colors ${
|
|
62
|
-
"aria-label":
|
|
63
|
-
"aria-expanded":
|
|
59
|
+
ref: x,
|
|
60
|
+
children: [/* @__PURE__ */ c("button", {
|
|
61
|
+
onClick: () => v(!_),
|
|
62
|
+
className: `flex items-center gap-2 px-3 py-2 rounded-button hover:bg-bg-sunken transition-colors ${_ ? "bg-bg-sunken" : ""}`,
|
|
63
|
+
"aria-label": g("productSwitcher.title", "Switch product"),
|
|
64
|
+
"aria-expanded": _,
|
|
64
65
|
children: [
|
|
65
|
-
/* @__PURE__ */
|
|
66
|
-
product:
|
|
66
|
+
/* @__PURE__ */ s(d, {
|
|
67
|
+
product: C,
|
|
67
68
|
sizeClass: "size-6",
|
|
68
69
|
textClass: "text-xs"
|
|
69
70
|
}),
|
|
70
|
-
!
|
|
71
|
+
!h && /* @__PURE__ */ s("span", {
|
|
71
72
|
className: "text-body-sm font-medium text-text-primary",
|
|
72
|
-
children:
|
|
73
|
+
children: C?.name
|
|
73
74
|
}),
|
|
74
|
-
!
|
|
75
|
-
className: `w-4 h-4 text-text-secondary transition-transform ${
|
|
75
|
+
!h && /* @__PURE__ */ s("svg", {
|
|
76
|
+
className: `w-4 h-4 text-text-secondary transition-transform ${_ ? "rotate-180" : ""}`,
|
|
76
77
|
fill: "none",
|
|
77
78
|
stroke: "currentColor",
|
|
78
79
|
viewBox: "0 0 24 24",
|
|
79
|
-
children: /* @__PURE__ */
|
|
80
|
+
children: /* @__PURE__ */ s("path", {
|
|
80
81
|
strokeLinecap: "round",
|
|
81
82
|
strokeLinejoin: "round",
|
|
82
83
|
strokeWidth: 2,
|
|
@@ -84,54 +85,54 @@ var p = ({ products: e, currentProductId: l, onProductChange: p, compact: m = !1
|
|
|
84
85
|
})
|
|
85
86
|
})
|
|
86
87
|
]
|
|
87
|
-
}),
|
|
88
|
+
}), _ && /* @__PURE__ */ c("div", {
|
|
88
89
|
className: "absolute right-0 mt-2 w-[calc(100vw-1.5rem)] sm:w-72 max-w-72 bg-bg-elevated border border-border-subtle rounded-card shadow-[var(--shadow-elevation-4)] z-50 py-2 overflow-hidden animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-200",
|
|
89
90
|
children: [
|
|
90
|
-
/* @__PURE__ */
|
|
91
|
+
/* @__PURE__ */ s("div", {
|
|
91
92
|
className: "px-4 py-2 border-b border-border-subtle",
|
|
92
|
-
children: /* @__PURE__ */
|
|
93
|
+
children: /* @__PURE__ */ s("p", {
|
|
93
94
|
className: "text-[11px] font-medium text-text-muted uppercase tracking-wider",
|
|
94
|
-
children:
|
|
95
|
+
children: g("productSwitcher.title", "Switch Product")
|
|
95
96
|
})
|
|
96
97
|
}),
|
|
97
|
-
|
|
98
|
+
w && /* @__PURE__ */ c("div", {
|
|
98
99
|
className: "relative px-3 py-2 border-b border-border-subtle",
|
|
99
100
|
children: [
|
|
100
|
-
/* @__PURE__ */
|
|
101
|
+
/* @__PURE__ */ s("svg", {
|
|
101
102
|
className: "pointer-events-none absolute left-6 top-1/2 -translate-y-1/2 size-4 text-text-muted",
|
|
102
103
|
fill: "none",
|
|
103
104
|
stroke: "currentColor",
|
|
104
105
|
viewBox: "0 0 24 24",
|
|
105
|
-
children: /* @__PURE__ */
|
|
106
|
+
children: /* @__PURE__ */ s("path", {
|
|
106
107
|
strokeLinecap: "round",
|
|
107
108
|
strokeLinejoin: "round",
|
|
108
109
|
strokeWidth: 2,
|
|
109
110
|
d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
|
|
110
111
|
})
|
|
111
112
|
}),
|
|
112
|
-
/* @__PURE__ */
|
|
113
|
-
ref:
|
|
113
|
+
/* @__PURE__ */ s("input", {
|
|
114
|
+
ref: S,
|
|
114
115
|
type: "text",
|
|
115
|
-
value:
|
|
116
|
-
onChange: (e) =>
|
|
116
|
+
value: y,
|
|
117
|
+
onChange: (e) => b(e.target.value),
|
|
117
118
|
onKeyDown: (e) => {
|
|
118
|
-
e.key === "Escape" && (
|
|
119
|
+
e.key === "Escape" && (y ? (e.stopPropagation(), b("")) : v(!1));
|
|
119
120
|
},
|
|
120
|
-
placeholder:
|
|
121
|
-
"aria-label":
|
|
121
|
+
placeholder: g("productSwitcher.searchPlaceholder", "Search products…"),
|
|
122
|
+
"aria-label": g("productSwitcher.searchAria", "Search products"),
|
|
122
123
|
className: "w-full rounded-md border border-border-subtle bg-bg-surface py-2 pl-9 pr-8 text-sm text-text-primary placeholder:text-text-muted transition-all duration-200 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-[var(--color-action-primary-border)]"
|
|
123
124
|
}),
|
|
124
|
-
|
|
125
|
+
y && /* @__PURE__ */ s("button", {
|
|
125
126
|
type: "button",
|
|
126
|
-
onClick: () =>
|
|
127
|
-
"aria-label":
|
|
127
|
+
onClick: () => b(""),
|
|
128
|
+
"aria-label": g("common.clearSearch", "Clear search"),
|
|
128
129
|
className: "absolute right-5 top-1/2 -translate-y-1/2 rounded-button p-1 text-text-muted transition-colors hover:bg-bg-sunken hover:text-text-primary",
|
|
129
|
-
children: /* @__PURE__ */
|
|
130
|
+
children: /* @__PURE__ */ s("svg", {
|
|
130
131
|
className: "size-4",
|
|
131
132
|
fill: "none",
|
|
132
133
|
stroke: "currentColor",
|
|
133
134
|
viewBox: "0 0 24 24",
|
|
134
|
-
children: /* @__PURE__ */
|
|
135
|
+
children: /* @__PURE__ */ s("path", {
|
|
135
136
|
strokeLinecap: "round",
|
|
136
137
|
strokeLinejoin: "round",
|
|
137
138
|
strokeWidth: 2,
|
|
@@ -141,50 +142,50 @@ var p = ({ products: e, currentProductId: l, onProductChange: p, compact: m = !1
|
|
|
141
142
|
})
|
|
142
143
|
]
|
|
143
144
|
}),
|
|
144
|
-
/* @__PURE__ */
|
|
145
|
+
/* @__PURE__ */ c("div", {
|
|
145
146
|
className: "py-1 max-h-96 overflow-y-auto",
|
|
146
|
-
children: [
|
|
147
|
+
children: [T.length === 0 && /* @__PURE__ */ c("p", {
|
|
147
148
|
className: "px-4 py-6 text-center text-body-sm text-text-muted",
|
|
148
149
|
children: [
|
|
149
150
|
"No products match “",
|
|
150
|
-
|
|
151
|
+
y,
|
|
151
152
|
"”"
|
|
152
153
|
]
|
|
153
|
-
}),
|
|
154
|
-
onClick: () =>
|
|
155
|
-
disabled:
|
|
156
|
-
"aria-disabled":
|
|
157
|
-
title:
|
|
158
|
-
className: `w-full flex items-center gap-3 px-4 py-2.5 text-body-sm transition-colors ${
|
|
154
|
+
}), T.map((t) => /* @__PURE__ */ c("button", {
|
|
155
|
+
onClick: () => E(t),
|
|
156
|
+
disabled: t.comingSoon,
|
|
157
|
+
"aria-disabled": t.comingSoon,
|
|
158
|
+
title: t.comingSoon ? g("productSwitcher.soon", "Soon") : t.name,
|
|
159
|
+
className: `w-full flex items-center gap-3 px-4 py-2.5 text-body-sm transition-colors ${t.comingSoon ? "text-text-muted cursor-not-allowed opacity-60" : e(t.id, u) ? "bg-[var(--color-accent-soft)] text-text-primary font-medium" : "text-text-primary hover:bg-bg-sunken"}`,
|
|
159
160
|
children: [
|
|
160
|
-
/* @__PURE__ */
|
|
161
|
-
product:
|
|
161
|
+
/* @__PURE__ */ s(d, {
|
|
162
|
+
product: t,
|
|
162
163
|
sizeClass: "size-8",
|
|
163
164
|
textClass: "text-sm"
|
|
164
165
|
}),
|
|
165
|
-
/* @__PURE__ */
|
|
166
|
+
/* @__PURE__ */ s("span", {
|
|
166
167
|
className: "flex-1 text-left leading-tight",
|
|
167
|
-
children:
|
|
168
|
+
children: t.name
|
|
168
169
|
}),
|
|
169
|
-
|
|
170
|
+
t.comingSoon ? /* @__PURE__ */ s("span", {
|
|
170
171
|
className: "shrink-0 whitespace-nowrap rounded-full border border-border-subtle bg-bg-sunken px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-text-secondary",
|
|
171
|
-
children:
|
|
172
|
-
}) : e.id
|
|
172
|
+
children: g("productSwitcher.soon", "Soon")
|
|
173
|
+
}) : e(t.id, u) && /* @__PURE__ */ s("svg", {
|
|
173
174
|
className: "size-5 text-action-primary-bg",
|
|
174
175
|
fill: "currentColor",
|
|
175
176
|
viewBox: "0 0 20 20",
|
|
176
|
-
children: /* @__PURE__ */
|
|
177
|
+
children: /* @__PURE__ */ s("path", {
|
|
177
178
|
fillRule: "evenodd",
|
|
178
179
|
d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",
|
|
179
180
|
clipRule: "evenodd"
|
|
180
181
|
})
|
|
181
182
|
})
|
|
182
183
|
]
|
|
183
|
-
},
|
|
184
|
+
}, t.id))]
|
|
184
185
|
})
|
|
185
186
|
]
|
|
186
187
|
})]
|
|
187
188
|
});
|
|
188
189
|
};
|
|
189
190
|
//#endregion
|
|
190
|
-
export {
|
|
191
|
+
export { m as ProductSwitcher, f as filterProducts, u as resolveProductLogo };
|
|
@@ -68,8 +68,10 @@ export { resolveGatewayUrls } from './gatewayUrls';
|
|
|
68
68
|
export type { RuntimeGatewayUrls } from './gatewayUrls';
|
|
69
69
|
export { resolveAuthBridgeConfig, resolveShellAuthBridgeConfig } from './authBridgeUrls';
|
|
70
70
|
export type { RuntimeAuthBridgeConfig } from './authBridgeUrls';
|
|
71
|
-
export { PRODUCTS, PRODUCT_URLS, getProductUrl, getProductsWithUrls } from './products';
|
|
71
|
+
export { PRODUCTS, PRODUCT_URLS, BOTMANOR_PRODUCT_SLUG, getProductUrl, getProductsWithUrls, findProductConfig, } from './products';
|
|
72
72
|
export type { ProductConfig } from './products';
|
|
73
|
+
export { PRODUCT_SLUG_RENAMES, PRODUCT_SLUG_EMIT, normalizeProductSlug, legacyProductSlug, isSameProductSlug, emitProductSlug, } from './productSlug';
|
|
74
|
+
export type { ProductSlugRename } from './productSlug';
|
|
73
75
|
export { getShellConfig, isShellLessRoute, shouldShowSidebar, shouldShowBreadcrumb, DEFAULT_SHELL_CONFIG, COMMON_SHELL_LESS_ROUTES, } from './shellRoutes';
|
|
74
76
|
export type { ShellRouteConfig } from './shellRoutes';
|
|
75
77
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ;;QAEjB,uCAAuC;;QAEvC,4BAA4B;;QAE5B,6FAA6F;;;;QAI7F,uCAAuC;;QAEvC,4BAA4B;;QAE5B,6FAA6F;;QAE7F,uDAAuD;;;CAGjD,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;AACjD,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,QAAQ,CAAC;AAE5C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAMlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO;IApC7C,uCAAuC;;IAEvC,4BAA4B;;IAE5B,6FAA6F;;;IAI7F,uCAAuC;;IAEvC,4BAA4B;;IAE5B,6FAA6F;;IAE7F,uDAAuD;;EAwB1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAanF;AAYD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AACzF,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ;;QAEjB,uCAAuC;;QAEvC,4BAA4B;;QAE5B,6FAA6F;;;;QAI7F,uCAAuC;;QAEvC,4BAA4B;;QAE5B,6FAA6F;;QAE7F,uDAAuD;;;CAGjD,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;AACjD,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,QAAQ,CAAC;AAE5C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAMlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO;IApC7C,uCAAuC;;IAEvC,4BAA4B;;IAE5B,6FAA6F;;;IAI7F,uCAAuC;;IAEvC,4BAA4B;;IAE5B,6FAA6F;;IAE7F,uDAAuD;;EAwB1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAanF;AAYD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AACzF,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Product slug aliases for products whose machine slug is being renamed
|
|
3
|
+
* (today: `botlit` -> `botmanor`, botmanor-migration PLAN Stage 0 / WP-E).
|
|
4
|
+
*
|
|
5
|
+
* - Readers accept both slugs: compare with {@link isSameProductSlug}, look up
|
|
6
|
+
* keyed maps with `map[slug] ?? map[legacyProductSlug(slug)]`.
|
|
7
|
+
* - Writers emit {@link emitProductSlug}, which follows {@link PRODUCT_SLUG_EMIT}.
|
|
8
|
+
* It stays `"legacy"` until the stage that flips the slug; the flip is that
|
|
9
|
+
* one line plus a release.
|
|
10
|
+
*
|
|
11
|
+
* Local mirror of `@burdenoff/website-sdk`'s `utils/product-slug.ts` (and the
|
|
12
|
+
* product-slug concern of `@burdenoff/be-sdk/product-alias`), so fe-libs does
|
|
13
|
+
* not take a dependency on either SDK for ~20 lines of pure code.
|
|
14
|
+
*
|
|
15
|
+
* @module @burdenoff/fe-libs/shared/config/productSlug
|
|
16
|
+
*/
|
|
17
|
+
/** One product whose slug is being renamed. Both values are lowercase. */
|
|
18
|
+
export interface ProductSlugRename {
|
|
19
|
+
readonly legacy: string;
|
|
20
|
+
readonly current: string;
|
|
21
|
+
}
|
|
22
|
+
/** Every product slug rename in flight. */
|
|
23
|
+
export declare const PRODUCT_SLUG_RENAMES: readonly ProductSlugRename[];
|
|
24
|
+
/** Which slug writers emit: the old one until the rename stage flips it. */
|
|
25
|
+
export declare const PRODUCT_SLUG_EMIT: Readonly<{
|
|
26
|
+
productSlug: 'legacy' | 'current';
|
|
27
|
+
}>;
|
|
28
|
+
/** `botlit` (any case) -> `botmanor`; every other slug is returned unchanged. */
|
|
29
|
+
export declare function normalizeProductSlug(slug: string): string;
|
|
30
|
+
/** Old spelling of a renamed slug (`botmanor` -> `botlit`); every other slug unchanged. */
|
|
31
|
+
export declare function legacyProductSlug(slug: string): string;
|
|
32
|
+
/** True when `a` and `b` are the same product under the rename. */
|
|
33
|
+
export declare function isSameProductSlug(a: string | null | undefined, b: string | null | undefined): boolean;
|
|
34
|
+
/** The slug writers should use today, from either spelling. */
|
|
35
|
+
export declare function emitProductSlug(slug: string): string;
|
|
36
|
+
//# sourceMappingURL=productSlug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"productSlug.d.ts","sourceRoot":"","sources":["../../../src/shared/config/productSlug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,2CAA2C;AAC3C,eAAO,MAAM,oBAAoB,EAAE,SAAS,iBAAiB,EAE3D,CAAC;AAEH,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC;IAAE,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,CAE5E,CAAC;AAOH,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5B,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC3B,OAAO,CAGT;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIpD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/shared/config/productSlug.ts
|
|
2
|
+
var e = Object.freeze([Object.freeze({
|
|
3
|
+
legacy: "botlit",
|
|
4
|
+
current: "botmanor"
|
|
5
|
+
})]), t = Object.freeze({ productSlug: "legacy" });
|
|
6
|
+
function n(t) {
|
|
7
|
+
let n = t.toLowerCase();
|
|
8
|
+
return e.find((e) => e.legacy === n || e.current === n);
|
|
9
|
+
}
|
|
10
|
+
function r(e) {
|
|
11
|
+
return n(e)?.current ?? e;
|
|
12
|
+
}
|
|
13
|
+
function i(e) {
|
|
14
|
+
return n(e)?.legacy ?? e;
|
|
15
|
+
}
|
|
16
|
+
function a(e, t) {
|
|
17
|
+
return e == null || t == null ? e === t : e === t || r(e) === r(t);
|
|
18
|
+
}
|
|
19
|
+
function o(e) {
|
|
20
|
+
return t.productSlug === "current" ? r(e) : i(e);
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { t as PRODUCT_SLUG_EMIT, e as PRODUCT_SLUG_RENAMES, o as emitProductSlug, a as isSameProductSlug, i as legacyProductSlug, r as normalizeProductSlug };
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module @burdenoff/fe-libs/shared/config/products
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* BotManor's product id (slug). Still the legacy `botlit` until the rename
|
|
8
|
+
* stage flips `PRODUCT_SLUG_EMIT`; readers must accept both spellings.
|
|
9
|
+
*/
|
|
10
|
+
export declare const BOTMANOR_PRODUCT_SLUG: string;
|
|
6
11
|
export interface ProductConfig {
|
|
7
12
|
id: string;
|
|
8
13
|
name: string;
|
|
@@ -23,7 +28,7 @@ export declare const PRODUCT_URLS: {
|
|
|
23
28
|
readonly bigconsole: "http://localhost:5148/";
|
|
24
29
|
readonly workspaces: "http://localhost:5149/";
|
|
25
30
|
readonly vibecontrols: "http://localhost:5151/";
|
|
26
|
-
readonly botlit: "http://localhost:
|
|
31
|
+
readonly botlit: "http://localhost:5260/";
|
|
27
32
|
};
|
|
28
33
|
readonly production: {
|
|
29
34
|
readonly fluidgrids: "https://app.fluidgrids.com/";
|
|
@@ -68,6 +73,8 @@ export declare const PRODUCT_URLS: {
|
|
|
68
73
|
};
|
|
69
74
|
export declare const PRODUCTS: ProductConfig[];
|
|
70
75
|
export declare function getProductUrl(productId: string): string;
|
|
76
|
+
/** Catalog entry for a product id, accepting either spelling of a renamed slug. */
|
|
77
|
+
export declare function findProductConfig(productId: string): ProductConfig | undefined;
|
|
71
78
|
/**
|
|
72
79
|
* Absolute logo URL for a product — ALWAYS the production app's
|
|
73
80
|
* `/icons/icon.svg`, regardless of the current environment.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../../src/shared/config/products.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../../src/shared/config/products.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAA8B,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDf,CAAC;AAEX,eAAO,MAAM,QAAQ,EAAE,aAAa,EA+QnC,CAAC;AAYF,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGvE;AAED;;GAEG;AACH,wBAAgB,mBAAmB;;QAxX7B,MAAM;UACJ,MAAM;UACN,MAAM;WACL,MAAM;kBACC,MAAM;IACpB;;;;;OAKG;iBACU,OAAO;IA+WrB"}
|