ss6-futuristic-component 1.0.0 → 1.1.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.
- package/CHANGELOG.md +23 -0
- package/dist/index.d.mts +47 -4
- package/dist/index.d.ts +47 -4
- package/dist/index.js +211 -31
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +208 -31
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +654 -90
- package/package.json +1 -1
- package/readme.md +7 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 1.1.0 (2026-10-11)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- **Header:** new HUD title bar with a glowing title panel, interlocking shortcut tabs split around the title, `left` / `right` slots for your own components, and a CSS-only drop-down page list (yellow arrow) with tiles that light up on hover. `activeUrl` marks the current tab and page; `CustomComponent` accepts e.g. Next.js `Link`. Server component, no client JS.
|
|
10
|
+
- **Footer:** matching bottom bar with a flipped center panel, accent corner lines, yellow slashes and centered `text`.
|
|
11
|
+
- **Theme:** new `--yellow` / `--yellow-hi` tokens (secondary accent) for both light and dark.
|
|
12
|
+
|
|
13
|
+
## 1.0.1 (2026-10-08)
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
- **ProgressBar:** new component with `value`/`max`, `label`, `showValue` and `primary` | `info` | `success` | `warning` | `danger` colors; chamfered glass track with glowing fill.
|
|
18
|
+
- **Badge:** futuristic status chip (chamfered glass, status tint, pulsing glowing dot).
|
|
19
|
+
- **Confirmation:** dialog rebuilt from `Card` and `Button`, bundled status icons, frosted glass backdrop.
|
|
20
|
+
- **ThemeToggle:** checking it switches the page to dark (pure CSS, works in server components); an explicit `data-theme` on an ancestor still wins.
|
|
21
|
+
- **Button:** white text on filled buttons in light mode.
|
|
22
|
+
|
|
23
|
+
### ⚠ Behavior changes
|
|
24
|
+
|
|
25
|
+
- **Light is now the default theme** (was dark). Set `data-theme="dark"` on `<html>`, or start a `ThemeToggle` with `defaultChecked`, to keep dark.
|
|
26
|
+
- `Confirmation` markup changed: the old `confirmation__card` / `baloon__*` classes are gone.
|
|
27
|
+
|
|
5
28
|
## 1.0.0 (2026-10-08)
|
|
6
29
|
|
|
7
30
|
First release of `ss6-futuristic-component`, forked from `@safestrong/ppa-component-library` 1.11.1 and redesigned with a futuristic HUD look (glass panels, chamfered corners, glowing accents, navy/cyan palette with light theme via `data-theme`).
|
package/dist/index.d.mts
CHANGED
|
@@ -132,11 +132,11 @@ declare function ThemeToggle(attr: Readonly<React.InputHTMLAttributes<HTMLInputE
|
|
|
132
132
|
|
|
133
133
|
declare function Dashboard(): React.JSX.Element;
|
|
134
134
|
|
|
135
|
-
declare function Badge({ text, type, className, }: {
|
|
135
|
+
declare function Badge({ text, type, className, }: Readonly<{
|
|
136
136
|
text: string;
|
|
137
137
|
type: "success" | "danger" | "warning" | "info";
|
|
138
138
|
className?: string;
|
|
139
|
-
}): React.JSX.Element;
|
|
139
|
+
}>): React.JSX.Element;
|
|
140
140
|
|
|
141
141
|
declare function Skeleton({ className }: {
|
|
142
142
|
className?: string;
|
|
@@ -155,6 +155,7 @@ declare namespace Navigation {
|
|
|
155
155
|
}) => React.JSX.Element;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
+
type ConfirmationType = "info" | "warning" | "danger" | "success";
|
|
158
159
|
declare function Confirmation({ type, text, title, secondaryAction, secondaryLabel, mainAction, mainLabel, }: {
|
|
159
160
|
mainAction: () => void;
|
|
160
161
|
secondaryAction?: () => void;
|
|
@@ -162,7 +163,49 @@ declare function Confirmation({ type, text, title, secondaryAction, secondaryLab
|
|
|
162
163
|
secondaryLabel?: string;
|
|
163
164
|
title: string;
|
|
164
165
|
text: string;
|
|
165
|
-
type?:
|
|
166
|
+
type?: ConfirmationType;
|
|
166
167
|
}): React.JSX.Element;
|
|
167
168
|
|
|
168
|
-
|
|
169
|
+
type ProgressBar = {
|
|
170
|
+
value: number;
|
|
171
|
+
max?: number;
|
|
172
|
+
label?: string;
|
|
173
|
+
showValue?: boolean;
|
|
174
|
+
color?: "primary" | "info" | "success" | "warning" | "danger";
|
|
175
|
+
className?: string;
|
|
176
|
+
};
|
|
177
|
+
declare function ProgressBar({ value, max, label, showValue, color, className, }: Readonly<ProgressBar>): React.JSX.Element;
|
|
178
|
+
|
|
179
|
+
type HeaderLink = {
|
|
180
|
+
label: string;
|
|
181
|
+
href: string;
|
|
182
|
+
};
|
|
183
|
+
type HeaderPage = HeaderLink & {
|
|
184
|
+
description?: string;
|
|
185
|
+
icon?: IconProp;
|
|
186
|
+
};
|
|
187
|
+
type Header = {
|
|
188
|
+
title: string;
|
|
189
|
+
/** shortcut tabs; first half sits left of the title, the rest on the right */
|
|
190
|
+
tabs?: HeaderLink[];
|
|
191
|
+
/** pages for the drop-down list (the yellow arrow appears only when given) */
|
|
192
|
+
pages?: HeaderPage[];
|
|
193
|
+
activeUrl?: string;
|
|
194
|
+
left?: React.ReactNode;
|
|
195
|
+
right?: React.ReactNode;
|
|
196
|
+
drawerTitle?: string;
|
|
197
|
+
/** link component, e.g. Next.js Link; defaults to <a> */
|
|
198
|
+
CustomComponent?: React.ElementType;
|
|
199
|
+
/** id of the hidden toggle; change it if a page renders more than one Header */
|
|
200
|
+
menuId?: string;
|
|
201
|
+
className?: string;
|
|
202
|
+
};
|
|
203
|
+
declare function Header({ title, tabs, pages, activeUrl, left, right, drawerTitle, CustomComponent, menuId, className, }: Readonly<Header>): React.JSX.Element;
|
|
204
|
+
|
|
205
|
+
type Footer = {
|
|
206
|
+
text: React.ReactNode;
|
|
207
|
+
className?: string;
|
|
208
|
+
};
|
|
209
|
+
declare function Footer({ text, className }: Readonly<Footer>): React.JSX.Element;
|
|
210
|
+
|
|
211
|
+
export { Badge, Button, Card, Confirmation, Dashboard, Expandable, Footer, Header, MultiSelect, NavTabClient, Navigation, ProgressBar, SingleSelect, Skeleton, Slider, TextInput, ThemeToggle, Toast, Tooltip };
|
package/dist/index.d.ts
CHANGED
|
@@ -132,11 +132,11 @@ declare function ThemeToggle(attr: Readonly<React.InputHTMLAttributes<HTMLInputE
|
|
|
132
132
|
|
|
133
133
|
declare function Dashboard(): React.JSX.Element;
|
|
134
134
|
|
|
135
|
-
declare function Badge({ text, type, className, }: {
|
|
135
|
+
declare function Badge({ text, type, className, }: Readonly<{
|
|
136
136
|
text: string;
|
|
137
137
|
type: "success" | "danger" | "warning" | "info";
|
|
138
138
|
className?: string;
|
|
139
|
-
}): React.JSX.Element;
|
|
139
|
+
}>): React.JSX.Element;
|
|
140
140
|
|
|
141
141
|
declare function Skeleton({ className }: {
|
|
142
142
|
className?: string;
|
|
@@ -155,6 +155,7 @@ declare namespace Navigation {
|
|
|
155
155
|
}) => React.JSX.Element;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
+
type ConfirmationType = "info" | "warning" | "danger" | "success";
|
|
158
159
|
declare function Confirmation({ type, text, title, secondaryAction, secondaryLabel, mainAction, mainLabel, }: {
|
|
159
160
|
mainAction: () => void;
|
|
160
161
|
secondaryAction?: () => void;
|
|
@@ -162,7 +163,49 @@ declare function Confirmation({ type, text, title, secondaryAction, secondaryLab
|
|
|
162
163
|
secondaryLabel?: string;
|
|
163
164
|
title: string;
|
|
164
165
|
text: string;
|
|
165
|
-
type?:
|
|
166
|
+
type?: ConfirmationType;
|
|
166
167
|
}): React.JSX.Element;
|
|
167
168
|
|
|
168
|
-
|
|
169
|
+
type ProgressBar = {
|
|
170
|
+
value: number;
|
|
171
|
+
max?: number;
|
|
172
|
+
label?: string;
|
|
173
|
+
showValue?: boolean;
|
|
174
|
+
color?: "primary" | "info" | "success" | "warning" | "danger";
|
|
175
|
+
className?: string;
|
|
176
|
+
};
|
|
177
|
+
declare function ProgressBar({ value, max, label, showValue, color, className, }: Readonly<ProgressBar>): React.JSX.Element;
|
|
178
|
+
|
|
179
|
+
type HeaderLink = {
|
|
180
|
+
label: string;
|
|
181
|
+
href: string;
|
|
182
|
+
};
|
|
183
|
+
type HeaderPage = HeaderLink & {
|
|
184
|
+
description?: string;
|
|
185
|
+
icon?: IconProp;
|
|
186
|
+
};
|
|
187
|
+
type Header = {
|
|
188
|
+
title: string;
|
|
189
|
+
/** shortcut tabs; first half sits left of the title, the rest on the right */
|
|
190
|
+
tabs?: HeaderLink[];
|
|
191
|
+
/** pages for the drop-down list (the yellow arrow appears only when given) */
|
|
192
|
+
pages?: HeaderPage[];
|
|
193
|
+
activeUrl?: string;
|
|
194
|
+
left?: React.ReactNode;
|
|
195
|
+
right?: React.ReactNode;
|
|
196
|
+
drawerTitle?: string;
|
|
197
|
+
/** link component, e.g. Next.js Link; defaults to <a> */
|
|
198
|
+
CustomComponent?: React.ElementType;
|
|
199
|
+
/** id of the hidden toggle; change it if a page renders more than one Header */
|
|
200
|
+
menuId?: string;
|
|
201
|
+
className?: string;
|
|
202
|
+
};
|
|
203
|
+
declare function Header({ title, tabs, pages, activeUrl, left, right, drawerTitle, CustomComponent, menuId, className, }: Readonly<Header>): React.JSX.Element;
|
|
204
|
+
|
|
205
|
+
type Footer = {
|
|
206
|
+
text: React.ReactNode;
|
|
207
|
+
className?: string;
|
|
208
|
+
};
|
|
209
|
+
declare function Footer({ text, className }: Readonly<Footer>): React.JSX.Element;
|
|
210
|
+
|
|
211
|
+
export { Badge, Button, Card, Confirmation, Dashboard, Expandable, Footer, Header, MultiSelect, NavTabClient, Navigation, ProgressBar, SingleSelect, Skeleton, Slider, TextInput, ThemeToggle, Toast, Tooltip };
|
package/dist/index.js
CHANGED
|
@@ -65,9 +65,12 @@ __export(index_exports, {
|
|
|
65
65
|
Confirmation: () => Confirmation,
|
|
66
66
|
Dashboard: () => Dashboard,
|
|
67
67
|
Expandable: () => Expandable,
|
|
68
|
+
Footer: () => Footer2,
|
|
69
|
+
Header: () => Header,
|
|
68
70
|
MultiSelect: () => MultiSelect,
|
|
69
71
|
NavTabClient: () => NavTabClient,
|
|
70
72
|
Navigation: () => Navigation,
|
|
73
|
+
ProgressBar: () => ProgressBar,
|
|
71
74
|
SingleSelect: () => SingleSelect,
|
|
72
75
|
Skeleton: () => Skeleton,
|
|
73
76
|
Slider: () => Slider,
|
|
@@ -431,7 +434,7 @@ var icon_success_default = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/200
|
|
|
431
434
|
|
|
432
435
|
// src/components/Toast.tsx
|
|
433
436
|
var import_react_fontawesome6 = require("@fortawesome/react-fontawesome");
|
|
434
|
-
var
|
|
437
|
+
var statusIcons = {
|
|
435
438
|
info: icon_info_default,
|
|
436
439
|
warning: icon_warning_default,
|
|
437
440
|
success: icon_success_default,
|
|
@@ -443,7 +446,7 @@ function Toast({
|
|
|
443
446
|
type = "info",
|
|
444
447
|
className
|
|
445
448
|
}) {
|
|
446
|
-
return /* @__PURE__ */ import_react8.default.createElement("div", { className: `toast__wrapper ft ft--${type} ${className != null ? className : ""}` }, /* @__PURE__ */ import_react8.default.createElement("span", { className: "ft__corner ft__corner--tl", "aria-hidden": "true" }), /* @__PURE__ */ import_react8.default.createElement("span", { className: "ft__corner ft__corner--tr", "aria-hidden": "true" }), /* @__PURE__ */ import_react8.default.createElement("div", { className: "ft__body" }, /* @__PURE__ */ import_react8.default.createElement("img", { src:
|
|
449
|
+
return /* @__PURE__ */ import_react8.default.createElement("div", { className: `toast__wrapper ft ft--${type} ${className != null ? className : ""}` }, /* @__PURE__ */ import_react8.default.createElement("span", { className: "ft__corner ft__corner--tl", "aria-hidden": "true" }), /* @__PURE__ */ import_react8.default.createElement("span", { className: "ft__corner ft__corner--tr", "aria-hidden": "true" }), /* @__PURE__ */ import_react8.default.createElement("div", { className: "ft__body" }, /* @__PURE__ */ import_react8.default.createElement("img", { src: statusIcons[type], alt: "", className: "ft__icon" }), /* @__PURE__ */ import_react8.default.createElement("div", null, /* @__PURE__ */ import_react8.default.createElement("p", { className: "ft__title" }, title), /* @__PURE__ */ import_react8.default.createElement("p", { className: "ft__desc" }, description))), /* @__PURE__ */ import_react8.default.createElement("p", { className: "ft__bar toast-bar-animate" }));
|
|
447
450
|
}
|
|
448
451
|
var Inline = ({
|
|
449
452
|
className,
|
|
@@ -451,7 +454,7 @@ var Inline = ({
|
|
|
451
454
|
type,
|
|
452
455
|
icon = void 0
|
|
453
456
|
}) => {
|
|
454
|
-
return /* @__PURE__ */ import_react8.default.createElement("div", { className: `ft-inline ft--${type} ${className != null ? className : ""}` }, icon ? /* @__PURE__ */ import_react8.default.createElement(import_react_fontawesome6.FontAwesomeIcon, { icon, className: "ft-inline__fa" }) : /* @__PURE__ */ import_react8.default.createElement("img", { src:
|
|
457
|
+
return /* @__PURE__ */ import_react8.default.createElement("div", { className: `ft-inline ft--${type} ${className != null ? className : ""}` }, icon ? /* @__PURE__ */ import_react8.default.createElement(import_react_fontawesome6.FontAwesomeIcon, { icon, className: "ft-inline__fa" }) : /* @__PURE__ */ import_react8.default.createElement("img", { src: statusIcons[type], alt: "", className: "ft-inline__icon" }), /* @__PURE__ */ import_react8.default.createElement("p", null, text));
|
|
455
458
|
};
|
|
456
459
|
Toast.Inline = Inline;
|
|
457
460
|
|
|
@@ -593,16 +596,7 @@ function Badge({
|
|
|
593
596
|
type,
|
|
594
597
|
className
|
|
595
598
|
}) {
|
|
596
|
-
return /* @__PURE__ */ import_react13.default.createElement("div", { className: "badge__wrapper" }, /* @__PURE__ */ import_react13.default.createElement(
|
|
597
|
-
"span",
|
|
598
|
-
{
|
|
599
|
-
style: {
|
|
600
|
-
background: `var(--ss6f-color-${type})`
|
|
601
|
-
},
|
|
602
|
-
className: `badge ${className}`
|
|
603
|
-
},
|
|
604
|
-
text
|
|
605
|
-
));
|
|
599
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { className: "badge__wrapper" }, /* @__PURE__ */ import_react13.default.createElement("span", { className: `fb ft--${type} ${className != null ? className : ""}` }, text));
|
|
606
600
|
}
|
|
607
601
|
|
|
608
602
|
// src/components/Skeleton.tsx
|
|
@@ -637,6 +631,12 @@ Navigation.URL = URLNavigation;
|
|
|
637
631
|
|
|
638
632
|
// src/components/Confirmation.tsx
|
|
639
633
|
var import_react16 = __toESM(require("react"));
|
|
634
|
+
var buttonColor = {
|
|
635
|
+
info: "info",
|
|
636
|
+
warning: "warn",
|
|
637
|
+
danger: "danger",
|
|
638
|
+
success: "success"
|
|
639
|
+
};
|
|
640
640
|
function Confirmation({
|
|
641
641
|
type = "warning",
|
|
642
642
|
text,
|
|
@@ -646,30 +646,207 @@ function Confirmation({
|
|
|
646
646
|
mainAction,
|
|
647
647
|
mainLabel = "Ya"
|
|
648
648
|
}) {
|
|
649
|
-
return /* @__PURE__ */ import_react16.default.createElement("div", { className: "confirmation__outer" }, /* @__PURE__ */ import_react16.default.createElement(
|
|
650
|
-
|
|
649
|
+
return /* @__PURE__ */ import_react16.default.createElement("div", { className: "confirmation__outer" }, /* @__PURE__ */ import_react16.default.createElement(
|
|
650
|
+
Card,
|
|
651
651
|
{
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
className: "
|
|
655
|
-
|
|
652
|
+
title,
|
|
653
|
+
cardClass: "fc",
|
|
654
|
+
footer: /* @__PURE__ */ import_react16.default.createElement("div", { className: "fc__actions" }, secondaryAction && /* @__PURE__ */ import_react16.default.createElement(
|
|
655
|
+
Button,
|
|
656
|
+
{
|
|
657
|
+
type: "button",
|
|
658
|
+
btnType: "outline",
|
|
659
|
+
color: buttonColor[type],
|
|
660
|
+
label: secondaryLabel,
|
|
661
|
+
onClick: secondaryAction
|
|
662
|
+
}
|
|
663
|
+
), /* @__PURE__ */ import_react16.default.createElement(
|
|
664
|
+
Button,
|
|
665
|
+
{
|
|
666
|
+
type: "button",
|
|
667
|
+
btnType: "primary",
|
|
668
|
+
color: buttonColor[type],
|
|
669
|
+
label: mainLabel,
|
|
670
|
+
onClick: mainAction
|
|
671
|
+
}
|
|
672
|
+
))
|
|
656
673
|
},
|
|
657
|
-
|
|
658
|
-
)
|
|
659
|
-
|
|
674
|
+
/* @__PURE__ */ import_react16.default.createElement("div", { className: "fc__content" }, /* @__PURE__ */ import_react16.default.createElement("img", { src: statusIcons[type], alt: "", className: "fc__icon" }), /* @__PURE__ */ import_react16.default.createElement("p", null, text))
|
|
675
|
+
));
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
// src/components/ProgressBar.tsx
|
|
679
|
+
var import_react17 = __toESM(require("react"));
|
|
680
|
+
function ProgressBar({
|
|
681
|
+
value,
|
|
682
|
+
max = 100,
|
|
683
|
+
label,
|
|
684
|
+
showValue = true,
|
|
685
|
+
color = "primary",
|
|
686
|
+
className = ""
|
|
687
|
+
}) {
|
|
688
|
+
const percent = Math.min(100, Math.max(0, Math.round(value / max * 100)));
|
|
689
|
+
const colorClass = color === "primary" ? "" : `ft--${color}`;
|
|
690
|
+
return /* @__PURE__ */ import_react17.default.createElement("div", { className: `fp ${colorClass} ${className}` }, (label || showValue) && /* @__PURE__ */ import_react17.default.createElement("div", { className: "fp__head" }, /* @__PURE__ */ import_react17.default.createElement("span", { className: "fp__label" }, label), showValue && /* @__PURE__ */ import_react17.default.createElement("span", { className: "fp__value" }, percent, "%")), /* @__PURE__ */ import_react17.default.createElement(
|
|
691
|
+
"div",
|
|
660
692
|
{
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
693
|
+
role: "progressbar",
|
|
694
|
+
"aria-label": label,
|
|
695
|
+
"aria-valuemin": 0,
|
|
696
|
+
"aria-valuemax": 100,
|
|
697
|
+
className: "fp__track",
|
|
698
|
+
"aria-valuenow": percent
|
|
699
|
+
},
|
|
700
|
+
/* @__PURE__ */ import_react17.default.createElement("div", { className: "fp__fill", style: { width: `${percent}%` } })
|
|
701
|
+
));
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
// src/components/Header.tsx
|
|
705
|
+
var import_react18 = __toESM(require("react"));
|
|
706
|
+
var import_react_fontawesome10 = require("@fortawesome/react-fontawesome");
|
|
707
|
+
function Header({
|
|
708
|
+
title,
|
|
709
|
+
tabs = [],
|
|
710
|
+
pages = [],
|
|
711
|
+
activeUrl,
|
|
712
|
+
left: left2,
|
|
713
|
+
right: right2,
|
|
714
|
+
drawerTitle = "All Pages",
|
|
715
|
+
CustomComponent,
|
|
716
|
+
menuId = "ph-menu",
|
|
717
|
+
className = ""
|
|
718
|
+
}) {
|
|
719
|
+
const Link = CustomComponent || "a";
|
|
720
|
+
const current = (href) => href === activeUrl ? "page" : void 0;
|
|
721
|
+
const half = Math.ceil(tabs.length / 2);
|
|
722
|
+
const renderTabs = (list2, side) => /* @__PURE__ */ import_react18.default.createElement("nav", { className: `ph__tabs ph__tabs--${side}`, "aria-label": "Shortcuts" }, list2.map(({ label, href }) => /* @__PURE__ */ import_react18.default.createElement(
|
|
723
|
+
Link,
|
|
724
|
+
{
|
|
725
|
+
key: href,
|
|
726
|
+
href,
|
|
727
|
+
"aria-current": current(href),
|
|
728
|
+
className: `ph-tab ${side === "r" ? "ph-tab--r" : ""}`
|
|
729
|
+
},
|
|
730
|
+
label
|
|
731
|
+
)));
|
|
732
|
+
return /* @__PURE__ */ import_react18.default.createElement("header", { className: `ph ${className}` }, /* @__PURE__ */ import_react18.default.createElement(
|
|
733
|
+
"svg",
|
|
734
|
+
{
|
|
735
|
+
className: "ph__deco",
|
|
736
|
+
width: "840",
|
|
737
|
+
height: "64",
|
|
738
|
+
viewBox: "300 0 840 64",
|
|
739
|
+
fill: "none",
|
|
740
|
+
"aria-hidden": "true"
|
|
741
|
+
},
|
|
742
|
+
/* @__PURE__ */ import_react18.default.createElement("defs", null, /* @__PURE__ */ import_react18.default.createElement("linearGradient", { id: "ph-title", x1: "0", y1: "0", x2: "0", y2: "1" }, /* @__PURE__ */ import_react18.default.createElement("stop", { offset: "0", className: "ph__stop-panel-top" }), /* @__PURE__ */ import_react18.default.createElement("stop", { offset: "1", className: "ph__stop-panel-bottom" })), /* @__PURE__ */ import_react18.default.createElement("linearGradient", { id: "ph-inner", x1: "0", y1: "1", x2: "0", y2: "0" }, /* @__PURE__ */ import_react18.default.createElement("stop", { offset: "0", className: "ph__stop-accent", stopOpacity: ".32" }), /* @__PURE__ */ import_react18.default.createElement("stop", { offset: ".6", className: "ph__stop-accent", stopOpacity: "0" })), /* @__PURE__ */ import_react18.default.createElement("linearGradient", { id: "ph-fadeL", x1: "0", y1: "0", x2: "1", y2: "0" }, /* @__PURE__ */ import_react18.default.createElement("stop", { offset: "0", className: "ph__stop-yellow", stopOpacity: "0" }), /* @__PURE__ */ import_react18.default.createElement("stop", { offset: "1", className: "ph__stop-yellow" })), /* @__PURE__ */ import_react18.default.createElement("linearGradient", { id: "ph-fadeR", x1: "1", y1: "0", x2: "0", y2: "0" }, /* @__PURE__ */ import_react18.default.createElement("stop", { offset: "0", className: "ph__stop-yellow", stopOpacity: "0" }), /* @__PURE__ */ import_react18.default.createElement("stop", { offset: "1", className: "ph__stop-yellow" }))),
|
|
743
|
+
/* @__PURE__ */ import_react18.default.createElement("path", { d: "M540 0H900L866 56H574Z", fill: "url(#ph-title)" }),
|
|
744
|
+
/* @__PURE__ */ import_react18.default.createElement("path", { d: "M540 0H900L866 56H574Z", fill: "url(#ph-inner)" }),
|
|
745
|
+
/* @__PURE__ */ import_react18.default.createElement(
|
|
746
|
+
"path",
|
|
747
|
+
{
|
|
748
|
+
className: "ph__deco-corners",
|
|
749
|
+
d: "M562 35L574.5 55H612 M878 35L865.5 55H828",
|
|
750
|
+
strokeWidth: "2.5",
|
|
751
|
+
strokeLinejoin: "round",
|
|
752
|
+
strokeLinecap: "round"
|
|
666
753
|
}
|
|
754
|
+
),
|
|
755
|
+
/* @__PURE__ */ import_react18.default.createElement(
|
|
756
|
+
"path",
|
|
757
|
+
{
|
|
758
|
+
d: "M312 40l8-14 M322 40l8-14 M332 40l8-14 M342 40l8-14 M352 40l8-14",
|
|
759
|
+
stroke: "url(#ph-fadeL)",
|
|
760
|
+
strokeWidth: "3"
|
|
761
|
+
}
|
|
762
|
+
),
|
|
763
|
+
/* @__PURE__ */ import_react18.default.createElement(
|
|
764
|
+
"path",
|
|
765
|
+
{
|
|
766
|
+
d: "M1128 40l-8-14 M1118 40l-8-14 M1108 40l-8-14 M1098 40l-8-14 M1088 40l-8-14",
|
|
767
|
+
stroke: "url(#ph-fadeR)",
|
|
768
|
+
strokeWidth: "3"
|
|
769
|
+
}
|
|
770
|
+
)
|
|
771
|
+
), /* @__PURE__ */ import_react18.default.createElement("h1", { className: "ph__title" }, title), tabs.length > 0 && renderTabs(tabs.slice(0, half), "l"), tabs.length > 1 && renderTabs(tabs.slice(half), "r"), left2 && /* @__PURE__ */ import_react18.default.createElement("div", { className: "ph__slot ph__slot--left" }, left2), right2 && /* @__PURE__ */ import_react18.default.createElement("div", { className: "ph__slot ph__slot--right" }, right2), pages.length > 0 && /* @__PURE__ */ import_react18.default.createElement(import_react18.default.Fragment, null, /* @__PURE__ */ import_react18.default.createElement(
|
|
772
|
+
"input",
|
|
773
|
+
{
|
|
774
|
+
id: menuId,
|
|
775
|
+
type: "checkbox",
|
|
776
|
+
className: "ph__toggle",
|
|
777
|
+
"aria-label": "Show all pages"
|
|
778
|
+
}
|
|
779
|
+
), /* @__PURE__ */ import_react18.default.createElement("span", { className: "ph__arrow-glow" }, /* @__PURE__ */ import_react18.default.createElement(
|
|
780
|
+
"label",
|
|
781
|
+
{
|
|
782
|
+
htmlFor: menuId,
|
|
783
|
+
className: "ph__arrow",
|
|
784
|
+
"aria-hidden": "true"
|
|
785
|
+
}
|
|
786
|
+
)), /* @__PURE__ */ import_react18.default.createElement("div", { className: "ph__drawer" }, /* @__PURE__ */ import_react18.default.createElement(
|
|
787
|
+
"label",
|
|
788
|
+
{
|
|
789
|
+
htmlFor: menuId,
|
|
790
|
+
className: "ph__backdrop",
|
|
791
|
+
"aria-hidden": "true"
|
|
792
|
+
}
|
|
793
|
+
), /* @__PURE__ */ import_react18.default.createElement("section", { className: "ph__panel", "aria-label": drawerTitle }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "ph__panel-head" }, /* @__PURE__ */ import_react18.default.createElement("div", null, /* @__PURE__ */ import_react18.default.createElement("span", { className: "ph__kicker" }, "// NAVIGATE"), /* @__PURE__ */ import_react18.default.createElement("h2", { className: "ph__panel-title" }, drawerTitle)), /* @__PURE__ */ import_react18.default.createElement("span", { className: "ph__count" }, String(pages.length).padStart(2, "0"), " PAGES")), /* @__PURE__ */ import_react18.default.createElement("div", { className: "ph__grid" }, pages.map(({ label, href, description, icon }) => /* @__PURE__ */ import_react18.default.createElement(
|
|
794
|
+
Link,
|
|
795
|
+
{
|
|
796
|
+
key: href,
|
|
797
|
+
href,
|
|
798
|
+
"aria-current": current(href),
|
|
799
|
+
className: "ph-page"
|
|
667
800
|
},
|
|
668
|
-
|
|
669
|
-
|
|
801
|
+
icon && /* @__PURE__ */ import_react18.default.createElement("span", { className: "ph-page__icon" }, /* @__PURE__ */ import_react18.default.createElement(import_react_fontawesome10.FontAwesomeIcon, { icon })),
|
|
802
|
+
/* @__PURE__ */ import_react18.default.createElement("span", null, /* @__PURE__ */ import_react18.default.createElement("span", { className: "ph-page__name" }, label), description && /* @__PURE__ */ import_react18.default.createElement("span", { className: "ph-page__desc" }, description))
|
|
803
|
+
)))))));
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
// src/components/Footer.tsx
|
|
807
|
+
var import_react19 = __toESM(require("react"));
|
|
808
|
+
function Footer2({ text, className = "" }) {
|
|
809
|
+
return /* @__PURE__ */ import_react19.default.createElement("footer", { className: `pf ${className}` }, /* @__PURE__ */ import_react19.default.createElement(
|
|
810
|
+
"svg",
|
|
811
|
+
{
|
|
812
|
+
className: "pf__deco",
|
|
813
|
+
width: "480",
|
|
814
|
+
height: "40",
|
|
815
|
+
viewBox: "480 0 480 40",
|
|
816
|
+
fill: "none",
|
|
817
|
+
"aria-hidden": "true"
|
|
818
|
+
},
|
|
819
|
+
/* @__PURE__ */ import_react19.default.createElement("defs", null, /* @__PURE__ */ import_react19.default.createElement("linearGradient", { id: "pf-panel", x1: "0", y1: "1", x2: "0", y2: "0" }, /* @__PURE__ */ import_react19.default.createElement("stop", { offset: "0", className: "ph__stop-panel-top" }), /* @__PURE__ */ import_react19.default.createElement("stop", { offset: "1", className: "ph__stop-panel-bottom" })), /* @__PURE__ */ import_react19.default.createElement("linearGradient", { id: "pf-inner", x1: "0", y1: "0", x2: "0", y2: "1" }, /* @__PURE__ */ import_react19.default.createElement("stop", { offset: "0", className: "ph__stop-accent", stopOpacity: ".28" }), /* @__PURE__ */ import_react19.default.createElement("stop", { offset: ".6", className: "ph__stop-accent", stopOpacity: "0" })), /* @__PURE__ */ import_react19.default.createElement("linearGradient", { id: "pf-fadeL", x1: "0", y1: "0", x2: "1", y2: "0" }, /* @__PURE__ */ import_react19.default.createElement("stop", { offset: "0", className: "ph__stop-yellow", stopOpacity: "0" }), /* @__PURE__ */ import_react19.default.createElement("stop", { offset: "1", className: "ph__stop-yellow" })), /* @__PURE__ */ import_react19.default.createElement("linearGradient", { id: "pf-fadeR", x1: "1", y1: "0", x2: "0", y2: "0" }, /* @__PURE__ */ import_react19.default.createElement("stop", { offset: "0", className: "ph__stop-yellow", stopOpacity: "0" }), /* @__PURE__ */ import_react19.default.createElement("stop", { offset: "1", className: "ph__stop-yellow" }))),
|
|
820
|
+
/* @__PURE__ */ import_react19.default.createElement("path", { d: "M560 40H880L860 8H580Z", fill: "url(#pf-panel)" }),
|
|
821
|
+
/* @__PURE__ */ import_react19.default.createElement("path", { d: "M560 40H880L860 8H580Z", fill: "url(#pf-inner)" }),
|
|
822
|
+
/* @__PURE__ */ import_react19.default.createElement(
|
|
823
|
+
"path",
|
|
824
|
+
{
|
|
825
|
+
className: "ph__deco-corners",
|
|
826
|
+
d: "M572 21L580.5 8.5H612 M868 21L859.5 8.5H828",
|
|
827
|
+
strokeWidth: "2.5",
|
|
828
|
+
strokeLinejoin: "round",
|
|
829
|
+
strokeLinecap: "round"
|
|
830
|
+
}
|
|
831
|
+
),
|
|
832
|
+
/* @__PURE__ */ import_react19.default.createElement(
|
|
833
|
+
"path",
|
|
834
|
+
{
|
|
835
|
+
d: "M492 13l8 14 M502 13l8 14 M512 13l8 14 M522 13l8 14 M532 13l8 14",
|
|
836
|
+
stroke: "url(#pf-fadeL)",
|
|
837
|
+
strokeWidth: "3"
|
|
838
|
+
}
|
|
839
|
+
),
|
|
840
|
+
/* @__PURE__ */ import_react19.default.createElement(
|
|
841
|
+
"path",
|
|
842
|
+
{
|
|
843
|
+
d: "M948 13l-8 14 M938 13l-8 14 M928 13l-8 14 M918 13l-8 14 M908 13l-8 14",
|
|
844
|
+
stroke: "url(#pf-fadeR)",
|
|
845
|
+
strokeWidth: "3"
|
|
846
|
+
}
|
|
847
|
+
)
|
|
848
|
+
), /* @__PURE__ */ import_react19.default.createElement("p", { className: "pf__text" }, text));
|
|
670
849
|
}
|
|
671
|
-
var wrapper = "pt-[0.5rem] pb-[1rem] px-[1.8rem] grid items-center gap-[1.5rem]";
|
|
672
|
-
var confirmation__text = "mt-[0.7rem] w-[90%] text-[var(--ss6f-color-text-secondary)]";
|
|
673
850
|
// Annotate the CommonJS export names for ESM import in node:
|
|
674
851
|
0 && (module.exports = {
|
|
675
852
|
Badge,
|
|
@@ -678,9 +855,12 @@ var confirmation__text = "mt-[0.7rem] w-[90%] text-[var(--ss6f-color-text-second
|
|
|
678
855
|
Confirmation,
|
|
679
856
|
Dashboard,
|
|
680
857
|
Expandable,
|
|
858
|
+
Footer,
|
|
859
|
+
Header,
|
|
681
860
|
MultiSelect,
|
|
682
861
|
NavTabClient,
|
|
683
862
|
Navigation,
|
|
863
|
+
ProgressBar,
|
|
684
864
|
SingleSelect,
|
|
685
865
|
Skeleton,
|
|
686
866
|
Slider,
|