ss6-futuristic-component 1.2.0 → 1.3.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 +25 -0
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -7
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +179 -106
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 1.3.0 (2026-10-13)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- **Header:** mobile layout under 768px: the center title panel, title and shortcut tabs are hidden, the side slots and menu arrow stay, and the drop-down menu stacks into one column.
|
|
10
|
+
- **Header:** a glowing yellow streak now sweeps along the bar's bottom edge (static under `prefers-reduced-motion`), replacing the two fixed yellow ticks.
|
|
11
|
+
- **Tooltip:** restyled as a chamfered glass chip with a 1px accent edge and a glowing yellow tick; fades in on hover and keyboard focus.
|
|
12
|
+
- **Aligned controls:** new `--control-h` token (40px) gives TextInput, SingleSelect, MultiSelect, Button, the Expandable bar, Navigation.URL and Toast.Inline the same outer height, so they line up in one row.
|
|
13
|
+
|
|
14
|
+
### Changes
|
|
15
|
+
|
|
16
|
+
- **Header:** the title is rendered in uppercase.
|
|
17
|
+
- **Header.Menu:** tiles never overflow narrow screens (`minmax(min(300px, 100%), 1fr)`); drawer height uses `100dvh` for mobile browser bars.
|
|
18
|
+
|
|
19
|
+
## 1.2.1 (2026-10-11)
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
- **Header.Menu:** long page lists now scroll inside the drawer (title and search stay pinned) instead of scrolling the page; the page behind is locked while the drawer is open.
|
|
24
|
+
|
|
25
|
+
### Changes
|
|
26
|
+
|
|
27
|
+
- No component forces uppercase any more (Header title, tabs, menu title, page names, group headings): text renders exactly as passed.
|
|
28
|
+
- **Header.Menu:** page tiles are wider (min 300px) and shorter (min 60px).
|
|
29
|
+
|
|
5
30
|
## 1.2.0 (2026-10-11)
|
|
6
31
|
|
|
7
32
|
### Features
|
package/dist/index.js
CHANGED
|
@@ -353,10 +353,10 @@ function Tooltip({
|
|
|
353
353
|
}
|
|
354
354
|
return /* @__PURE__ */ import_react5.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "peer" }, children), /* @__PURE__ */ import_react5.default.createElement("span", { className: `tooltip-text ${getAccent()}` }, text));
|
|
355
355
|
}
|
|
356
|
-
var top = "bottom-full translate-y-[-
|
|
357
|
-
var bottom = "right-0 top-full translate-y-[
|
|
358
|
-
var right = "left-full w-[max-content] translate-x-[0.6rem]
|
|
359
|
-
var left = "right-full w-[max-content] translate-x-[-0.6rem] top-[-0.2rem]
|
|
356
|
+
var top = "bottom-full translate-y-[-6px] right-0";
|
|
357
|
+
var bottom = "right-0 top-full translate-y-[6px]";
|
|
358
|
+
var right = "left-full w-[max-content] translate-x-[0.6rem] top-[-0.2rem]";
|
|
359
|
+
var left = "right-full w-[max-content] translate-x-[-0.6rem] top-[-0.2rem]";
|
|
360
360
|
|
|
361
361
|
// src/components/NavTabClient.tsx
|
|
362
362
|
var import_react6 = __toESM(require("react"));
|
|
@@ -770,7 +770,7 @@ function HeaderMenu({
|
|
|
770
770
|
outerclass: "ph-menu__search",
|
|
771
771
|
onChange: (e) => setKeyword(e.target.value)
|
|
772
772
|
}
|
|
773
|
-
), /* @__PURE__ */ import_react18.default.createElement("span", { className: "ph__count" }, String(total).padStart(2, "0"), " PAGES"))), total === 0 && /* @__PURE__ */ import_react18.default.createElement("p", { className: "ph-menu__empty" }, 'No menu matches "', keyword, '"'), groups.map(([group, list2]) => /* @__PURE__ */ import_react18.default.createElement("section", { key: group || "_", className: "ph-menu__group" }, group && /* @__PURE__ */ import_react18.default.createElement("h3", { className: "ph-menu__group-title" }, group), /* @__PURE__ */ import_react18.default.createElement("div", { className: "ph__grid" }, list2.map(({ label, href, icon }) => /* @__PURE__ */ import_react18.default.createElement(
|
|
773
|
+
), /* @__PURE__ */ import_react18.default.createElement("span", { className: "ph__count" }, String(total).padStart(2, "0"), " PAGES"))), /* @__PURE__ */ import_react18.default.createElement("div", { className: "ph-menu__list" }, total === 0 && /* @__PURE__ */ import_react18.default.createElement("p", { className: "ph-menu__empty" }, 'No menu matches "', keyword, '"'), groups.map(([group, list2]) => /* @__PURE__ */ import_react18.default.createElement("section", { key: group || "_", className: "ph-menu__group" }, group && /* @__PURE__ */ import_react18.default.createElement("h3", { className: "ph-menu__group-title" }, group), /* @__PURE__ */ import_react18.default.createElement("div", { className: "ph__grid" }, list2.map(({ label, href, icon }) => /* @__PURE__ */ import_react18.default.createElement(
|
|
774
774
|
Link,
|
|
775
775
|
{
|
|
776
776
|
key: href,
|
|
@@ -781,7 +781,7 @@ function HeaderMenu({
|
|
|
781
781
|
},
|
|
782
782
|
icon && /* @__PURE__ */ import_react18.default.createElement("span", { className: "ph-page__icon" }, /* @__PURE__ */ import_react18.default.createElement(import_react_fontawesome10.FontAwesomeIcon, { icon })),
|
|
783
783
|
/* @__PURE__ */ import_react18.default.createElement("span", { className: "ph-page__name" }, label)
|
|
784
|
-
))))));
|
|
784
|
+
)))))));
|
|
785
785
|
}
|
|
786
786
|
|
|
787
787
|
// src/components/Header.tsx
|
|
@@ -851,7 +851,7 @@ function Header({
|
|
|
851
851
|
strokeLinecap: "round"
|
|
852
852
|
}
|
|
853
853
|
)
|
|
854
|
-
), /* @__PURE__ */ import_react19.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_react19.default.createElement("div", { className: "ph__slot ph__slot--left" }, left2), right2 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "ph__slot ph__slot--right" }, right2), menu && /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement(
|
|
854
|
+
), /* @__PURE__ */ import_react19.default.createElement("h1", { className: "ph__title" }, title == null ? void 0 : title.toUpperCase()), tabs.length > 0 && renderTabs(tabs.slice(0, half), "l"), tabs.length > 1 && renderTabs(tabs.slice(half), "r"), left2 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "ph__slot ph__slot--left" }, left2), right2 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "ph__slot ph__slot--right" }, right2), menu && /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement(
|
|
855
855
|
"input",
|
|
856
856
|
{
|
|
857
857
|
id: menuId,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/Button.tsx","../src/components/TextInput.tsx","../src/components/Slider.tsx","../src/components/SingleSelect.tsx","../src/components/Tooltip.tsx","../src/components/NavTabClient.tsx","../src/components/Card.tsx","../src/components/Toast.tsx","../src/components/Expandable.tsx","../src/components/MultiSelect.tsx","../src/components/ThemeToggle.tsx","../src/components/Dashboard.tsx","../src/components/Badge.tsx","../src/components/Skeleton.tsx","../src/components/Navigation.tsx","../src/components/Confirmation.tsx","../src/components/ProgressBar.tsx","../src/components/Header.tsx","../src/components/HeaderMenu.tsx","../src/components/Footer.tsx"],"sourcesContent":["export { default as Button } from \"./components/Button\";\nexport { default as TextInput } from \"./components/TextInput\";\nexport { default as Slider } from \"./components/Slider\";\nexport { default as SingleSelect } from \"./components/SingleSelect\";\nexport { default as Tooltip } from \"./components/Tooltip\";\nexport { default as NavTabClient } from \"./components/NavTabClient\";\nexport { default as Card } from \"./components/Card\";\nexport { default as Toast } from \"./components/Toast\";\nexport { default as Expandable } from \"./components/Expandable\";\nexport { default as MultiSelect } from \"./components/MultiSelect\";\nexport { default as ThemeToggle } from \"./components/ThemeToggle\";\nexport { default as Dashboard } from \"./components/Dashboard\";\nexport { default as Badge } from \"./components/Badge\";\nexport { default as Skeleton } from \"./components/Skeleton\";\nexport { default as Navigation } from \"./components/Navigation\";\nexport { default as Confirmation } from \"./components/Confirmation\";\nexport { default as ProgressBar } from \"./components/ProgressBar\";\nexport { default as Header } from \"./components/Header\";\nexport { default as Footer } from \"./components/Footer\";\n","import React from \"react\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCircleNotch } from \"@fortawesome/free-solid-svg-icons\";\n\ntype Button = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"color\"> & {\n label?: string;\n icon?: IconProp;\n isnotif?: boolean;\n isLoading?: boolean;\n color?: \"primary\" | \"danger\" | \"warn\" | \"info\" | \"success\";\n btnType?: \"outline\" | \"primary\" | \"muted\";\n};\n\nexport default function Button({\n label,\n icon,\n isLoading,\n btnType = \"primary\",\n color = \"primary\",\n className = \"\",\n ...rest\n}: Readonly<Button>) {\n const disabled = rest.disabled || isLoading;\n const buttonIcon = isLoading ? faCircleNotch : icon;\n const loadingLabel = label && isLoading ? \"Memproses ...\" : \"\";\n\n return (\n <button\n {...rest}\n disabled={disabled}\n className={`fx fx--${disabled ? \"muted\" : btnType} fx--color-${color} ${className}`}\n >\n <span className=\"fx__face flex gap-2\">\n {buttonIcon && (isLoading || icon) && (\n <FontAwesomeIcon\n icon={buttonIcon}\n className={`text-[1.2rem] ${label && \"mr-[0.3rem]\"} ${\n isLoading ? \"animate-spin\" : \"\"\n }`}\n />\n )}\n {isLoading ? loadingLabel : label}\n </span>\n </button>\n );\n}\n\nconst IconButton = ({\n label,\n icon,\n isLoading,\n btnType: _btnType,\n isnotif: _isnotif,\n color = \"primary\",\n className = \"\",\n ...rest\n}: Readonly<Button>) => {\n const disabled = rest.disabled || isLoading;\n const btnIcon = isLoading ? faCircleNotch : icon;\n return (\n <button\n {...rest}\n disabled={disabled}\n className={`fx fx--rounded fx--${disabled ? \"muted\" : \"soft\"} fx--color-${color} ${className}`}\n >\n <span className={`fx__face gap-4 ${label ? \"\" : \"fx__face--icon\"}`}>\n {btnIcon && (\n <FontAwesomeIcon\n icon={btnIcon}\n className={isLoading ? \"animate-spin\" : \"\"}\n />\n )}\n {label}\n </span>\n </button>\n );\n};\n\nconst IconButtonGroup = ({ list }: { list: Button[] }) => {\n return (\n <div className=\"fg\">\n <span className=\"fg__glow fg__glow--tl\" aria-hidden=\"true\"></span>\n <span className=\"fg__glow fg__glow--br\" aria-hidden=\"true\"></span>\n {list.map(\n (\n {\n icon,\n isLoading,\n isnotif,\n label: _label,\n btnType: _btnType,\n color: _color,\n className = \"\",\n ...rest\n },\n idx,\n ) => {\n const btnIcon = isLoading ? faCircleNotch : icon;\n return (\n <button\n type=\"button\"\n {...rest}\n key={idx + 1}\n disabled={rest.disabled || isLoading}\n className={`fg__item ${className}`}\n >\n {btnIcon && (\n <FontAwesomeIcon\n icon={btnIcon}\n className={isLoading ? \"animate-spin\" : \"\"}\n />\n )}\n {isnotif && <span className=\"btn__notif_badge\"></span>}\n </button>\n );\n },\n )}\n </div>\n );\n};\n\nButton.IconButton = IconButton;\nButton.IconButtonGroup = IconButtonGroup;\n","import React from \"react\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport default function TextInput({\n label,\n labelFor,\n icon,\n outerclass,\n inputclass,\n ...attr\n}: Readonly<\n React.InputHTMLAttributes<HTMLInputElement> & {\n label?: string;\n labelFor?: string;\n icon?: IconProp;\n outerclass?: string;\n inputclass?: string;\n }\n>) {\n return (\n <div className={`${outerclass} w-full`}>\n {label && (\n <label htmlFor={labelFor} className=\"text-input__label fi__label\">\n {label}\n </label>\n )}\n <div className={`fi fi--text ${attr.className ?? \"\"}`}>\n <span className=\"fi__glow\" aria-hidden=\"true\"></span>\n {icon && <FontAwesomeIcon icon={icon} className=\"fi__lead\" />}\n <input\n {...attr}\n className={`text-input w-full ${icon ? \"!pl-[0.6rem]\" : \"\"} ${inputclass ?? \"\"}`}\n />\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { faCircle, faPowerOff } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport default function Slider(\n attr: Readonly<React.InputHTMLAttributes<HTMLInputElement>>,\n) {\n return (\n <div className=\"flex items-center h-[3rem]\">\n <label className=\"fs\">\n <input type=\"checkbox\" className=\"fs__input\" {...attr} />\n <span className=\"fs__track\" aria-hidden=\"true\">\n <span className=\"fs__knob\"></span>\n <FontAwesomeIcon icon={faCircle} className=\"fs__icon fs__icon--off\" />\n <FontAwesomeIcon\n icon={faPowerOff}\n className=\"fs__icon fs__icon--on\"\n />\n </span>\n </label>\n </div>\n );\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCaretRight, faCheck } from \"@fortawesome/free-solid-svg-icons\";\n\ntype Option = { label: string; value: string };\n\ntype SingleSelect = React.InputHTMLAttributes<HTMLInputElement> & {\n label?: string;\n labelHtml?: string;\n placeholder?: string;\n outerclass?: string;\n options?: Option[];\n stringOptions?: string[];\n stateaction?: (param: string | Option) => void;\n};\n\nexport default function SingleSelect(attr: Readonly<SingleSelect>) {\n const { options = [], stringOptions = [], ...attrInput } = attr;\n const inputValue = attrInput.value;\n const [keyword, setKeyword] = useState(\"\");\n const [selected, setSelected] = useState<{ label: string; value: any }>({\n label: \"\",\n value: \"\",\n });\n\n function selectItem(\n { label, value }: { label: string; value: any },\n e: React.MouseEvent<HTMLButtonElement>,\n ) {\n const triggerManual = attrInput.onChange;\n if (triggerManual) {\n triggerManual?.({\n target: { value, name: attrInput.name },\n } as React.ChangeEvent<HTMLInputElement>);\n }\n setSelected({ label, value });\n\n if (attr.stateaction) {\n if (options?.length > 0) attr.stateaction({ label, value });\n if (stringOptions?.length > 0) attr.stateaction(value);\n }\n\n setKeyword(\"\");\n e.currentTarget.blur();\n }\n\n function autoUpdateValue(updatedValue: string) {\n if (updatedValue) {\n const filtered = availableOptions.find(\n ({ value }) => value == updatedValue,\n );\n if (filtered) setSelected(filtered);\n }\n }\n\n const availableOptions = useMemo(() => {\n let defaultOptions = options && options.length > 0;\n if (!defaultOptions)\n return stringOptions.map((opt) => ({ label: opt, value: opt }));\n return options;\n }, [options, stringOptions]);\n\n const filteredOptions = useMemo(() => {\n return availableOptions.filter(\n ({ label, value }) =>\n (label + \"\").toLowerCase().includes(keyword.toLowerCase()) ||\n (value + \"\").toLowerCase().includes(keyword.toLowerCase()),\n );\n }, [keyword, availableOptions]);\n\n useEffect(() => {\n inputValue && autoUpdateValue(inputValue as string);\n }, [inputValue, availableOptions]);\n\n return (\n <div className={`w-full ${attr.outerclass}`}>\n {attrInput.label && (\n <label\n className=\"text-input__label fi__label\"\n htmlFor={attrInput.labelHtml}\n >\n {attrInput.label}\n </label>\n )}\n <div className={`fi ${attrInput.className ?? \"\"}`}>\n <span className=\"fi__glow\" aria-hidden=\"true\"></span>\n <input\n type=\"hidden\"\n {...attrInput}\n {...(attrInput.onChange ? { onChange: attrInput.onChange } : {})}\n value={attrInput.value ?? selected.value}\n />\n <input\n type=\"search\"\n value={keyword}\n autoComplete=\"off\"\n onChange={(e) => setKeyword(e.target.value)}\n className={`${attrInput.name}-keyword ${input} ${selected.value ? \"fi__input--filled\" : \"\"}`}\n placeholder={selected.value ? selected.label : attrInput.placeholder}\n />\n <div className=\"select-item__wrapper fi__menu\">\n {filteredOptions.length == 0 && keyword != \"\" && (\n <button disabled className=\"select-item fi__empty\">\n Tidak ada Item\n </button>\n )}\n {filteredOptions.map(({ label, value }) => (\n <button\n key={value}\n type=\"button\"\n className=\"select-item fi__item\"\n onClick={(e) => selectItem({ label, value }, e)}\n >\n {label}\n {selected.value == value && (\n <FontAwesomeIcon icon={faCheck} className=\"fi__check\" />\n )}\n </button>\n ))}\n </div>\n <FontAwesomeIcon icon={faCaretRight} className=\"fi__icon\" />\n </div>\n </div>\n );\n}\n\nSingleSelect.autoFill = autoFillInput;\n\nfunction autoFillInput(\n value: string,\n elName: string,\n list: { label: string; value: string }[],\n) {\n const inp = document.querySelector(`[name=\"${elName}\"]`) as HTMLInputElement;\n inp.value = `${value || \"\"}`;\n const filtered = list.find((item) => item.value == value);\n const el = document.querySelector(`.${elName}-keyword`);\n el?.setAttribute(\"placeholder\", `${filtered?.label}`);\n}\n\nconst input = \"text-input peer w-full\";\n","import React from \"react\";\n\ntype Tooltip = {\n children: React.ReactNode;\n text: string;\n position: \"top\" | \"bottom\" | \"right\" | \"left\";\n};\n\nexport default function Tooltip({\n children,\n text,\n position = \"top\",\n}: Readonly<Tooltip>) {\n function getAccent() {\n const mapping = {\n top,\n bottom,\n left,\n right,\n };\n return mapping[position];\n }\n return (\n <div className=\"relative\">\n <div className=\"peer\">{children}</div>\n <span className={`tooltip-text ${getAccent()}`}>{text}</span>\n </div>\n );\n}\n\nconst top =\n \"bottom-full translate-y-[-0.3rem] right-0 after:bottom-0 after:translate-y-[0.25rem] \";\nconst bottom =\n \"right-0 top-full translate-y-[0.3rem] after:top-[-0.4rem] after:translate-y-[0.2rem] \";\nconst right =\n \"left-full w-[max-content] translate-x-[0.6rem] after:left-[-0.2rem] top-[-0.2rem] after:top-[0.6rem]\";\nconst left =\n \"right-full w-[max-content] translate-x-[-0.6rem] top-[-0.2rem] after:right-[-0.2rem] after:top-[0.6rem]\";\n","import React from \"react\";\n\ntype Option = {\n label: string;\n value: string;\n};\n\nexport default function NavTabClient({\n items,\n state,\n}: Readonly<{\n items: Option[];\n state: {\n active: string;\n setActive: (val: string) => void;\n };\n}>) {\n return (\n <nav className=\"fn\" role=\"tablist\">\n {items.map(({ label, value }) => (\n <button\n role=\"tab\"\n key={value}\n type=\"button\"\n aria-selected={state.active == value}\n className={`fn__item ${state.active == value ? \"fn__item--active\" : \"\"}`}\n onClick={() => state.setActive(value)}\n >\n {label}\n </button>\n ))}\n </nav>\n );\n}\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { faCaretRight } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport React from \"react\";\n\ntype Card = {\n cardClass?: string;\n title?: string;\n icon?: IconProp;\n footer?: React.ReactNode;\n titleChild?: React.ReactNode;\n children: React.ReactNode;\n};\n\n/* frame is pure CSS (see .nc in futuristic.css), so Card renders on the server */\nexport default function Card({\n title,\n icon,\n footer,\n children,\n cardClass = \"\",\n titleChild,\n}: Readonly<Card>) {\n return (\n <article className={`nc ${cardClass}`}>\n <div className=\"nc__edge\" aria-hidden=\"true\"></div>\n <div className=\"nc__glass\" aria-hidden=\"true\"></div>\n <span className=\"nc__corner nc__corner--tl\" aria-hidden=\"true\"></span>\n <span className=\"nc__corner nc__corner--br\" aria-hidden=\"true\"></span>\n <span className=\"nc__notch\" aria-hidden=\"true\"></span>\n <span className=\"nc__bars\" aria-hidden=\"true\">\n <i className=\"on\"></i>\n <i className=\"on\"></i>\n <i className=\"on\"></i>\n <i className=\"on\"></i>\n <i></i>\n <i></i>\n </span>\n <div className=\"nc__header\">\n <div className=\"nc__head-row\">\n <div className=\"nc__title-wrap\">\n {icon && <FontAwesomeIcon icon={faCaretRight} />}\n <h3 className=\"nc__title\">{title}</h3>\n </div>\n {titleChild}\n </div>\n <div className=\"nc__rule mt-4\"></div>\n </div>\n <div className=\"nc__body\">{children}</div>\n {footer && <div className=\"nc__footer\">{footer}</div>}\n </article>\n );\n}\n\nconst SimpleCard = ({\n icon,\n title,\n footer,\n children,\n titleChild,\n cardClass = \"\",\n}: Card) => {\n return (\n <article className={`nc nc--simple ${cardClass}`}>\n <div className=\"nc__edge\" aria-hidden=\"true\"></div>\n <div className=\"nc__glass\" aria-hidden=\"true\"></div>\n <span className=\"nc__corner nc__corner--tl\" aria-hidden=\"true\"></span>\n <span className=\"nc__corner nc__corner--br\" aria-hidden=\"true\"></span>\n {(title || titleChild) && (\n <div className=\"nc__header\">\n <div className=\"nc__head-row\">\n <div className=\"nc__title-wrap\">\n {icon && <FontAwesomeIcon icon={faCaretRight} />}\n <h3 className=\"nc__title\">{title}</h3>\n </div>\n {titleChild}\n </div>\n <div className=\"nc__rule mt-4\"></div>\n </div>\n )}\n <div className=\"nc__body pt-0!\">{children}</div>\n {footer && <div className=\"nc__footer\">{footer}</div>}\n </article>\n );\n};\n\nCard.Simple = SimpleCard;\n\nconst Footer = ({\n className,\n children,\n}: {\n className?: string;\n children?: React.ReactNode;\n}) => {\n return (\n <div\n className={`${className} border-t border-t-[var(--ss6f-color-border)]`}\n >\n {children}\n </div>\n );\n};\n\nCard.Footer = Footer;\n","import React from \"react\";\nimport iconInfo from \"../../assets/icon-info.svg\";\nimport iconError from \"../../assets/icon-error.svg\";\nimport iconWarning from \"../../assets/icon-warning.svg\";\nimport iconSuccess from \"../../assets/icon-success.svg\";\nimport simpleInfo from \"../../assets/simple-info-icon.svg\";\nimport simpleError from \"../../assets/simple-error-icon.svg\";\nimport simpleWarning from \"../../assets/simple-warning-icon.svg\";\nimport simpleSuccess from \"../../assets/simple-success-icon.svg\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\ntype ToastType = \"warning\" | \"success\" | \"info\" | \"danger\";\ntype Toast = {\n title: string;\n className?: string;\n description: string;\n type: ToastType;\n};\n\nexport const statusIcons: Record<ToastType, string> = {\n info: iconInfo,\n warning: iconWarning,\n success: iconSuccess,\n danger: iconError,\n};\n\n// lighter icon set for the compact inline toast\nconst simpleIcons: Record<ToastType, string> = {\n info: simpleInfo,\n warning: simpleWarning,\n success: simpleSuccess,\n danger: simpleError,\n};\n\nexport default function Toast({\n title,\n description,\n type = \"info\",\n className,\n}: Readonly<Toast>) {\n return (\n <div className={`toast__wrapper ft ft--${type} ${className ?? \"\"}`}>\n <span className=\"ft__corner ft__corner--tl\" aria-hidden=\"true\"></span>\n <span className=\"ft__corner ft__corner--tr\" aria-hidden=\"true\"></span>\n <div className=\"ft__body\">\n <img src={statusIcons[type]} alt=\"\" className=\"ft__icon\" />\n <div>\n <p className=\"ft__title\">{title}</p>\n <p className=\"ft__desc\">{description}</p>\n </div>\n </div>\n <p className=\"ft__bar toast-bar-animate\"></p>\n </div>\n );\n}\n\nconst Inline = ({\n className,\n text,\n type,\n icon = undefined,\n}: {\n className?: string;\n text: string;\n type: ToastType;\n icon?: IconProp;\n}) => {\n return (\n <div className={`ft-inline ft--${type} ${className ?? \"\"}`}>\n {icon ? (\n <FontAwesomeIcon icon={icon} className=\"ft-inline__fa\" />\n ) : (\n <img src={simpleIcons[type]} alt=\"\" className=\"ft-inline__icon\" />\n )}\n <p>{text}</p>\n </div>\n );\n};\n\nToast.Inline = Inline;\n","import React from \"react\";\nimport { faCaretRight } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\ntype Expandable = {\n children: React.ReactNode;\n title: string;\n className?: string;\n isOpen?: boolean;\n};\n\nexport default function Expandable({\n children,\n title,\n className,\n isOpen,\n}: Readonly<Expandable>) {\n const name = title.replace(/\\s+/g, \"\");\n return (\n <div className={`expandable fe ${className ?? \"\"}`}>\n <span className=\"fe__glow\" aria-hidden=\"true\"></span>\n <input\n id={name}\n type=\"checkbox\"\n defaultChecked={isOpen}\n className=\"opacity-[0] peer absolute top-0 ex-title\"\n />\n <FontAwesomeIcon icon={faCaretRight} className=\"expandable__icon\" />\n <label htmlFor={name} className=\"expandable__title\">\n {title}\n </label>\n <div className=\"expandable__body\">\n <div className=\"p-[0.75rem] px-[1rem]\">{children}</div>\n </div>\n </div>\n );\n}\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCheck, faListCheck } from \"@fortawesome/free-solid-svg-icons\";\n\ntype Option = {\n value: string;\n label: string;\n};\n\ntype MultiSelect = {\n label?: string;\n labelHtml?: string;\n outerclass?: string;\n options?: Option[];\n stringOptions?: string[];\n state: {\n value: Option[];\n select: React.Dispatch<React.SetStateAction<Option[]>>;\n };\n};\n\nexport default function MultiSelect({\n state,\n label,\n labelHtml,\n ...attr\n}: Readonly<MultiSelect>) {\n const { options = [], stringOptions = [] } = attr;\n const [keyword, setKeyword] = useState(\"\");\n\n const availableOptions = useMemo(() => {\n const isDefaultOption = options && options.length > 0;\n if (!isDefaultOption)\n return stringOptions.map((opt) => ({ label: opt, value: opt }));\n return options;\n }, [options, stringOptions]);\n\n function getFiltered() {\n return availableOptions.filter(\n ({ label, value }) =>\n (label + \"\").toLowerCase().includes(keyword.toLowerCase()) ||\n (value + \"\").toLowerCase().includes(keyword.toLowerCase()),\n );\n }\n\n function selectItem({ label, value }: { label: string; value: string }) {\n state.select((prev) => {\n const isItemExist = prev.some((item: Option) => item.value == value);\n if (isItemExist) {\n return prev.filter((item: Option) => item.value != value);\n }\n return [...prev, { label, value }];\n });\n }\n\n function isItemExist(value: string) {\n return state.value.find((item: any) => item.value == value);\n }\n\n const selectUnSelectAll = useCallback(() => {\n const isAllSelected = state.value.length == availableOptions.length;\n state.select(isAllSelected ? [] : availableOptions);\n }, [state.value, availableOptions]);\n\n return (\n <div className={`w-full ${attr.outerclass}`}>\n {label && (\n <label htmlFor={labelHtml} className=\"text-input__label fi__label\">\n {label}\n </label>\n )}\n <div className=\"fi\">\n <span className=\"fi__glow\" aria-hidden=\"true\"></span>\n <input\n type=\"search\"\n value={keyword}\n autoComplete=\"off\"\n className={`${input} ${state.value.length > 0 ? \"fi__input--filled\" : \"\"}`}\n onChange={(e) => setKeyword(e.target.value)}\n placeholder={`${state.value.length} Dipilih`}\n />\n <div className=\"select-item__wrapper select-multiple__wrapper fi__menu\">\n {getFiltered().length == 0 && keyword != \"\" && (\n <button disabled className=\"select-item fi__empty\">\n Tidak ada Item\n </button>\n )}\n {getFiltered().map(({ label, value }) => (\n <button\n key={value}\n type=\"button\"\n onClick={() => selectItem({ label, value })}\n className=\"select-item fi__item\"\n >\n {label}\n {isItemExist(value) && (\n <FontAwesomeIcon icon={faCheck} className=\"fi__check\" />\n )}\n </button>\n ))}\n </div>\n <button type=\"button\" className=\"fi__icon\" onClick={selectUnSelectAll}>\n <FontAwesomeIcon icon={faListCheck} />\n </button>\n </div>\n </div>\n );\n}\nconst input = \"text-input peer w-full\";\n","import React from \"react\";\nimport { faMoon, faSun } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport default function ThemeToggle(\n attr: Readonly<React.InputHTMLAttributes<HTMLInputElement>>,\n) {\n return (\n <div className=\"flex items-center h-[3rem]\">\n <label className=\"fs fs--theme\">\n <input type=\"checkbox\" className=\"fs__input\" {...attr} />\n <span className=\"fs__track\" aria-hidden=\"true\">\n <span className=\"fs__knob\">\n <FontAwesomeIcon icon={faMoon} className=\"fs__moon\" />\n <FontAwesomeIcon icon={faSun} className=\"fs__sun\" />\n </span>\n </span>\n </label>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport MultiSelect from \"./MultiSelect\";\nimport SingleSelect from \"./SingleSelect\";\n\nconst list = [\n { label: \"Option 1\", value: \"option1\" },\n { label: \"Option 2\", value: \"option2\" },\n { label: \"Option 3\", value: \"option3\" },\n];\nconst stringList = [\"option1\", \"option2\", \"option3\"];\n\nexport default function Dashboard() {\n const [selectedItem, setSelectedItem] = useState<\n { label: string; value: string }[]\n >([]);\n const [sel, setSel] = useState({ label: \"\", value: \"\" });\n\n function updateState(item: string) {\n const filtered = list.find(({ value }) => value == item);\n filtered && setSel(filtered);\n }\n\n return (\n <div className=\"flex items-center gap-[1rem]\">\n <MultiSelect\n label=\"Multi Select\"\n stringOptions={stringList}\n state={{ value: selectedItem, select: setSelectedItem }}\n />\n <SingleSelect\n label=\"Single Select\"\n name=\"newinput\"\n stringOptions={stringList}\n placeholder=\"-- Pilih Status --\"\n value={sel.value}\n />\n </div>\n );\n}\n","import React from \"react\";\nexport default function Badge({\n text,\n type,\n className,\n}: Readonly<{\n text: string;\n type: \"success\" | \"danger\" | \"warning\" | \"info\";\n className?: string;\n}>) {\n return (\n <div className=\"badge__wrapper\">\n {/* ft--{type} supplies the status color (--t), shared with Toast */}\n <span className={`fb ft--${type} ${className ?? \"\"}`}>{text}</span>\n </div>\n );\n}\n","import React from \"react\";\nexport default function Skeleton({ className }: { className?: string }) {\n return (\n <div className={`${className} skeleton`}>\n <span className=\"skeleton__item skeleton-slide\"></span>\n </div>\n );\n}\n","import React from \"react\";\n\nexport default function Navigation() {\n return <nav></nav>;\n}\n\nconst URLNavigation = (props: {\n list: { label: string; href: string }[];\n activeUrl: string;\n outerclass?: string;\n CustomComponent?: React.ElementType;\n}) => {\n const Component = props.CustomComponent || \"a\";\n\n return (\n <nav className={`fnav ${props.outerclass ?? \"\"}`}>\n <span className=\"fnav__glow fnav__glow--tr\" aria-hidden=\"true\"></span>\n <span className=\"fnav__glow fnav__glow--bl\" aria-hidden=\"true\"></span>\n {props.list.map(({ label, href }) => {\n const isActive = href === props.activeUrl;\n return (\n <Component\n key={href}\n href={href}\n aria-current={isActive ? \"page\" : undefined}\n className={`fnav__item ${isActive ? \"fnav__item--active\" : \"\"}`}\n >\n {label}\n </Component>\n );\n })}\n </nav>\n );\n};\n\nNavigation.URL = URLNavigation;\n","import React from \"react\";\nimport Card from \"./Card\";\nimport Button from \"./Button\";\nimport { statusIcons } from \"./Toast\";\n\ntype ConfirmationType = \"info\" | \"warning\" | \"danger\" | \"success\";\n\nconst buttonColor = {\n info: \"info\",\n warning: \"warn\",\n danger: \"danger\",\n success: \"success\",\n} as const;\n\nexport default function Confirmation({\n type = \"warning\",\n text,\n title,\n secondaryAction,\n secondaryLabel = \"Tidak\",\n mainAction,\n mainLabel = \"Ya\",\n}: {\n mainAction: () => void;\n secondaryAction?: () => void;\n mainLabel?: string;\n secondaryLabel?: string;\n title: string;\n text: string;\n type?: ConfirmationType;\n}) {\n return (\n <div className=\"confirmation__outer\">\n <Card\n title={title}\n cardClass=\"fc\"\n footer={\n <div className=\"fc__actions\">\n {secondaryAction && (\n <Button\n type=\"button\"\n btnType=\"outline\"\n color={buttonColor[type]}\n label={secondaryLabel}\n onClick={secondaryAction}\n />\n )}\n <Button\n type=\"button\"\n btnType=\"primary\"\n color={buttonColor[type]}\n label={mainLabel}\n onClick={mainAction}\n />\n </div>\n }\n >\n <div className=\"fc__content\">\n <img src={statusIcons[type]} alt=\"\" className=\"fc__icon\" />\n <p>{text}</p>\n </div>\n </Card>\n </div>\n );\n}\n","import React from \"react\";\n\ntype ProgressBar = {\n value: number;\n max?: number;\n label?: string;\n showValue?: boolean;\n color?: \"primary\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n className?: string;\n};\n\nexport default function ProgressBar({\n value,\n max = 100,\n label,\n showValue = true,\n color = \"primary\",\n className = \"\",\n}: Readonly<ProgressBar>) {\n const percent = Math.min(100, Math.max(0, Math.round((value / max) * 100)));\n // non-primary colors reuse the status palette (ft--{type} sets --t), shared with Toast/Badge\n const colorClass = color === \"primary\" ? \"\" : `ft--${color}`;\n\n return (\n <div className={`fp ${colorClass} ${className}`}>\n {(label || showValue) && (\n <div className=\"fp__head\">\n <span className=\"fp__label\">{label}</span>\n {showValue && <span className=\"fp__value\">{percent}%</span>}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={100}\n className=\"fp__track\"\n aria-valuenow={percent}\n >\n <div className=\"fp__fill\" style={{ width: `${percent}%` }}></div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport HeaderMenu from \"./HeaderMenu\";\n\ntype HeaderLink = { label: string; href: string };\n\ntype Header = {\n title: string;\n /** shortcut tabs; first half sits left of the title, the rest on the right */\n tabs?: HeaderLink[];\n /** drop-down menu content, usually <Header.Menu /> (the yellow arrow appears only when given) */\n menu?: React.ReactNode;\n activeUrl?: string;\n left?: React.ReactNode;\n right?: React.ReactNode;\n /** link component, e.g. Next.js Link; defaults to <a> */\n CustomComponent?: React.ElementType;\n /** id of the hidden toggle; change it if a page renders more than one Header */\n menuId?: string;\n className?: string;\n};\n\n/* server component: the drawer opens via a hidden checkbox (CSS only).\n its content (search + grouped pages) is the client component Header.Menu, passed via `menu` */\nexport default function Header({\n title,\n tabs = [],\n menu,\n activeUrl,\n left,\n right,\n CustomComponent,\n menuId = \"ph-menu\",\n className = \"\",\n}: Readonly<Header>) {\n const Link = CustomComponent || \"a\";\n const current = (href: string) => (href === activeUrl ? \"page\" : undefined);\n const half = Math.ceil(tabs.length / 2);\n\n // yellow slashes ride on the outer end of each tab group, so they never overlap wider tabs.\n // gradients ph-fadeL / ph-fadeR live in the decoration svg's <defs>\n const slashes = (side: \"l\" | \"r\") => (\n <svg\n className={`ph__slash ph__slash--${side}`}\n width=\"48\"\n height=\"14\"\n viewBox=\"0 0 48 14\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={\n side === \"l\"\n ? \"M8 14l-8-14 M18 14l-8-14 M28 14l-8-14 M38 14l-8-14 M48 14l-8-14\"\n : \"M0 14l8-14 M10 14l8-14 M20 14l8-14 M30 14l8-14 M40 14l8-14\"\n }\n stroke={`url(#ph-fade${side === \"l\" ? \"L\" : \"R\"})`}\n strokeWidth=\"3\"\n />\n </svg>\n );\n\n const renderTabs = (list: HeaderLink[], side: \"l\" | \"r\") => (\n <nav className={`ph__tabs ph__tabs--${side}`} aria-label=\"Shortcuts\">\n {slashes(side)}\n {list.map(({ label, href }) => (\n <Link\n key={href}\n href={href}\n aria-current={current(href)}\n className={`ph-tab ${side === \"r\" ? \"ph-tab--r\" : \"\"}`}\n >\n {label}\n </Link>\n ))}\n </nav>\n );\n\n return (\n <header className={`ph ${className}`}>\n <div className=\"ph__bar\" aria-hidden=\"true\"></div>\n <svg\n className=\"ph__deco\"\n width=\"840\"\n height=\"64\"\n viewBox=\"300 0 840 64\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <defs>\n <linearGradient id=\"ph-title\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" className=\"ph__stop-panel-top\" />\n <stop offset=\"1\" className=\"ph__stop-panel-bottom\" />\n </linearGradient>\n <linearGradient id=\"ph-inner\" x1=\"0\" y1=\"1\" x2=\"0\" y2=\"0\">\n <stop offset=\"0\" className=\"ph__stop-accent\" stopOpacity=\".32\" />\n <stop offset=\".6\" className=\"ph__stop-accent\" stopOpacity=\"0\" />\n </linearGradient>\n <linearGradient id=\"ph-fadeL\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0\" className=\"ph__stop-yellow\" stopOpacity=\"0\" />\n <stop offset=\"1\" className=\"ph__stop-yellow\" />\n </linearGradient>\n <linearGradient id=\"ph-fadeR\" x1=\"1\" y1=\"0\" x2=\"0\" y2=\"0\">\n <stop offset=\"0\" className=\"ph__stop-yellow\" stopOpacity=\"0\" />\n <stop offset=\"1\" className=\"ph__stop-yellow\" />\n </linearGradient>\n </defs>\n <path d=\"M540 0H900L866 56H574Z\" fill=\"url(#ph-title)\" />\n <path d=\"M540 0H900L866 56H574Z\" fill=\"url(#ph-inner)\" />\n <path\n className=\"ph__deco-corners\"\n d=\"M562 35L574.5 55H612 M878 35L865.5 55H828\"\n strokeWidth=\"2.5\"\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </svg>\n\n <h1 className=\"ph__title\">{title}</h1>\n\n {tabs.length > 0 && renderTabs(tabs.slice(0, half), \"l\")}\n {tabs.length > 1 && renderTabs(tabs.slice(half), \"r\")}\n\n {left && <div className=\"ph__slot ph__slot--left\">{left}</div>}\n {right && <div className=\"ph__slot ph__slot--right\">{right}</div>}\n\n {menu && (\n <>\n <input\n id={menuId}\n type=\"checkbox\"\n className=\"ph__toggle\"\n aria-label=\"Show all pages\"\n />\n <span className=\"ph__arrow-glow\">\n <label\n htmlFor={menuId}\n className=\"ph__arrow\"\n aria-hidden=\"true\"\n ></label>\n {/* glowing dash orbiting the arrow (pathLength=100 keeps the dash math simple) */}\n <svg\n className=\"ph__arrow-ring\"\n width=\"44\"\n height=\"26\"\n viewBox=\"0 0 44 26\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <polygon\n className=\"ph__arrow-track\"\n points=\"1,1 43,1 22,25\"\n pathLength=\"100\"\n />\n <polygon\n className=\"ph__arrow-dash\"\n points=\"1,1 43,1 22,25\"\n pathLength=\"100\"\n />\n </svg>\n </span>\n <div className=\"ph__drawer\">\n <label\n htmlFor={menuId}\n className=\"ph__backdrop\"\n aria-hidden=\"true\"\n ></label>\n <section className=\"ph__panel\" aria-label=\"Menu\">\n {menu}\n </section>\n </div>\n </>\n )}\n </header>\n );\n}\n\nHeader.Menu = HeaderMenu;\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faMagnifyingGlass } from \"@fortawesome/free-solid-svg-icons\";\nimport TextInput from \"./TextInput\";\n\ntype HeaderMenuPage = {\n label: string;\n href: string;\n /** group name: pages sharing a description are listed under one heading */\n description?: string;\n icon?: IconProp;\n};\n\ntype HeaderMenu = {\n pages: HeaderMenuPage[];\n activeUrl?: string;\n title?: string;\n searchPlaceholder?: string;\n /** link component, e.g. Next.js Link; defaults to <a> */\n CustomComponent?: React.ElementType;\n};\n\n/* client component (uses state): render it from a \"use client\" file and pass it to <Header menu={...} /> */\nexport default function HeaderMenu({\n pages,\n activeUrl,\n title = \"All Pages\",\n searchPlaceholder = \"Search menu ...\",\n CustomComponent,\n}: Readonly<HeaderMenu>) {\n const Link = CustomComponent || \"a\";\n const [keyword, setKeyword] = useState(\"\");\n const ref = useRef<HTMLDivElement>(null);\n\n // close the drawer by unchecking Header's hidden toggle\n function close() {\n const toggle = ref.current\n ?.closest(\".ph\")\n ?.querySelector<HTMLInputElement>(\".ph__toggle\");\n if (toggle) toggle.checked = false;\n }\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && close();\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, []);\n\n // filter by page label or group name, then group in first-seen order\n const groups = useMemo(() => {\n const q = keyword.trim().toLowerCase();\n const map = new Map<string, HeaderMenuPage[]>();\n pages\n .filter(\n ({ label, description = \"\" }) =>\n label.toLowerCase().includes(q) ||\n description.toLowerCase().includes(q),\n )\n .forEach((page) => {\n const key = page.description ?? \"\";\n map.set(key, [...(map.get(key) ?? []), page]);\n });\n return [...map.entries()];\n }, [pages, keyword]);\n\n const total = groups.reduce((n, [, list]) => n + list.length, 0);\n\n return (\n <div ref={ref} className=\"ph-menu\">\n <div className=\"ph__panel-head\">\n <div>\n <span className=\"ph__kicker\">// NAVIGATE</span>\n <h2 className=\"ph__panel-title\">{title}</h2>\n </div>\n <div className=\"ph-menu__tools\">\n <TextInput\n type=\"search\"\n icon={faMagnifyingGlass}\n value={keyword}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n outerclass=\"ph-menu__search\"\n onChange={(e) => setKeyword(e.target.value)}\n />\n <span className=\"ph__count\">\n {String(total).padStart(2, \"0\")} PAGES\n </span>\n </div>\n </div>\n\n {total === 0 && <p className=\"ph-menu__empty\">No menu matches \"{keyword}\"</p>}\n\n {groups.map(([group, list]) => (\n <section key={group || \"_\"} className=\"ph-menu__group\">\n {group && <h3 className=\"ph-menu__group-title\">{group}</h3>}\n <div className=\"ph__grid\">\n {list.map(({ label, href, icon }) => (\n <Link\n key={href}\n href={href}\n aria-current={href === activeUrl ? \"page\" : undefined}\n className=\"ph-page\"\n onClick={close}\n >\n {icon && (\n <span className=\"ph-page__icon\">\n <FontAwesomeIcon icon={icon} />\n </span>\n )}\n <span className=\"ph-page__name\">{label}</span>\n </Link>\n ))}\n </div>\n </section>\n ))}\n </div>\n );\n}\n","import React from \"react\";\n\ntype Footer = {\n text: React.ReactNode;\n className?: string;\n};\n\n/* corner lines and slashes follow the panel's slant (20px inset over 44px height).\n glass bar along the bottom 16px, with a center panel that auto-fits the text.\n SVG colors reuse Header's .ph__stop-* / .ph__deco-corners classes */\nexport default function Footer({ text, className = \"\" }: Readonly<Footer>) {\n return (\n <footer className={`pf ${className}`}>\n <div className=\"pf__panel\">\n <p className=\"pf__text\">{text}</p>\n\n <svg\n className=\"pf__corner pf__corner--l\"\n width=\"56\"\n height=\"16\"\n viewBox=\"0 0 56 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n className=\"ph__deco-corners\"\n d=\"M13.2 15L19.8 0.5H56\"\n strokeWidth=\"2.5\"\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </svg>\n <svg\n className=\"pf__corner pf__corner--r\"\n width=\"56\"\n height=\"16\"\n viewBox=\"0 0 56 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n className=\"ph__deco-corners\"\n d=\"M42.8 15L36.2 0.5H0\"\n strokeWidth=\"2.5\"\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </svg>\n\n <svg\n className=\"pf__slash pf__slash--l\"\n width=\"47\"\n height=\"12\"\n viewBox=\"0 0 47 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <defs>\n <linearGradient id=\"pf-fadeL\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0\" className=\"ph__stop-yellow\" stopOpacity=\"0\" />\n <stop offset=\"1\" className=\"ph__stop-yellow\" />\n </linearGradient>\n </defs>\n <path\n d=\"M0 12l5.5-12 M10 12l5.5-12 M20 12l5.5-12 M30 12l5.5-12 M40 12l5.5-12\"\n stroke=\"url(#pf-fadeL)\"\n strokeWidth=\"3\"\n />\n </svg>\n <svg\n className=\"pf__slash pf__slash--r\"\n width=\"47\"\n height=\"12\"\n viewBox=\"0 0 47 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <defs>\n <linearGradient id=\"pf-fadeR\" x1=\"1\" y1=\"0\" x2=\"0\" y2=\"0\">\n <stop offset=\"0\" className=\"ph__stop-yellow\" stopOpacity=\"0\" />\n <stop offset=\"1\" className=\"ph__stop-yellow\" />\n </linearGradient>\n </defs>\n <path\n d=\"M1.5 0l5.5 12 M11.5 0l5.5 12 M21.5 0l5.5 12 M31.5 0l5.5 12 M41.5 0l5.5 12\"\n stroke=\"url(#pf-fadeR)\"\n strokeWidth=\"3\"\n />\n </svg>\n </div>\n </footer>\n );\n}\n"],"mappings":"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","names":["Footer","React","list","import_react","import_react_fontawesome","_a","React","import_react","import_free_solid_svg_icons","import_react_fontawesome","React","import_react","import_react_fontawesome","import_free_solid_svg_icons","React","list","import_react","React","import_react","React","import_free_solid_svg_icons","import_react_fontawesome","import_react","React","import_react","import_react_fontawesome","React","import_react","import_free_solid_svg_icons","import_react_fontawesome","React","import_react","import_react_fontawesome","import_free_solid_svg_icons","label","isItemExist","React","input","import_react","import_free_solid_svg_icons","import_react_fontawesome","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","import_react","import_react_fontawesome","import_free_solid_svg_icons","list","React","left","right","React","list","import_react","Footer","React"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/Button.tsx","../src/components/TextInput.tsx","../src/components/Slider.tsx","../src/components/SingleSelect.tsx","../src/components/Tooltip.tsx","../src/components/NavTabClient.tsx","../src/components/Card.tsx","../src/components/Toast.tsx","../src/components/Expandable.tsx","../src/components/MultiSelect.tsx","../src/components/ThemeToggle.tsx","../src/components/Dashboard.tsx","../src/components/Badge.tsx","../src/components/Skeleton.tsx","../src/components/Navigation.tsx","../src/components/Confirmation.tsx","../src/components/ProgressBar.tsx","../src/components/Header.tsx","../src/components/HeaderMenu.tsx","../src/components/Footer.tsx"],"sourcesContent":["export { default as Button } from \"./components/Button\";\nexport { default as TextInput } from \"./components/TextInput\";\nexport { default as Slider } from \"./components/Slider\";\nexport { default as SingleSelect } from \"./components/SingleSelect\";\nexport { default as Tooltip } from \"./components/Tooltip\";\nexport { default as NavTabClient } from \"./components/NavTabClient\";\nexport { default as Card } from \"./components/Card\";\nexport { default as Toast } from \"./components/Toast\";\nexport { default as Expandable } from \"./components/Expandable\";\nexport { default as MultiSelect } from \"./components/MultiSelect\";\nexport { default as ThemeToggle } from \"./components/ThemeToggle\";\nexport { default as Dashboard } from \"./components/Dashboard\";\nexport { default as Badge } from \"./components/Badge\";\nexport { default as Skeleton } from \"./components/Skeleton\";\nexport { default as Navigation } from \"./components/Navigation\";\nexport { default as Confirmation } from \"./components/Confirmation\";\nexport { default as ProgressBar } from \"./components/ProgressBar\";\nexport { default as Header } from \"./components/Header\";\nexport { default as Footer } from \"./components/Footer\";\n","import React from \"react\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCircleNotch } from \"@fortawesome/free-solid-svg-icons\";\n\ntype Button = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"color\"> & {\n label?: string;\n icon?: IconProp;\n isnotif?: boolean;\n isLoading?: boolean;\n color?: \"primary\" | \"danger\" | \"warn\" | \"info\" | \"success\";\n btnType?: \"outline\" | \"primary\" | \"muted\";\n};\n\nexport default function Button({\n label,\n icon,\n isLoading,\n btnType = \"primary\",\n color = \"primary\",\n className = \"\",\n ...rest\n}: Readonly<Button>) {\n const disabled = rest.disabled || isLoading;\n const buttonIcon = isLoading ? faCircleNotch : icon;\n const loadingLabel = label && isLoading ? \"Memproses ...\" : \"\";\n\n return (\n <button\n {...rest}\n disabled={disabled}\n className={`fx fx--${disabled ? \"muted\" : btnType} fx--color-${color} ${className}`}\n >\n <span className=\"fx__face flex gap-2\">\n {buttonIcon && (isLoading || icon) && (\n <FontAwesomeIcon\n icon={buttonIcon}\n className={`text-[1.2rem] ${label && \"mr-[0.3rem]\"} ${\n isLoading ? \"animate-spin\" : \"\"\n }`}\n />\n )}\n {isLoading ? loadingLabel : label}\n </span>\n </button>\n );\n}\n\nconst IconButton = ({\n label,\n icon,\n isLoading,\n btnType: _btnType,\n isnotif: _isnotif,\n color = \"primary\",\n className = \"\",\n ...rest\n}: Readonly<Button>) => {\n const disabled = rest.disabled || isLoading;\n const btnIcon = isLoading ? faCircleNotch : icon;\n return (\n <button\n {...rest}\n disabled={disabled}\n className={`fx fx--rounded fx--${disabled ? \"muted\" : \"soft\"} fx--color-${color} ${className}`}\n >\n <span className={`fx__face gap-4 ${label ? \"\" : \"fx__face--icon\"}`}>\n {btnIcon && (\n <FontAwesomeIcon\n icon={btnIcon}\n className={isLoading ? \"animate-spin\" : \"\"}\n />\n )}\n {label}\n </span>\n </button>\n );\n};\n\nconst IconButtonGroup = ({ list }: { list: Button[] }) => {\n return (\n <div className=\"fg\">\n <span className=\"fg__glow fg__glow--tl\" aria-hidden=\"true\"></span>\n <span className=\"fg__glow fg__glow--br\" aria-hidden=\"true\"></span>\n {list.map(\n (\n {\n icon,\n isLoading,\n isnotif,\n label: _label,\n btnType: _btnType,\n color: _color,\n className = \"\",\n ...rest\n },\n idx,\n ) => {\n const btnIcon = isLoading ? faCircleNotch : icon;\n return (\n <button\n type=\"button\"\n {...rest}\n key={idx + 1}\n disabled={rest.disabled || isLoading}\n className={`fg__item ${className}`}\n >\n {btnIcon && (\n <FontAwesomeIcon\n icon={btnIcon}\n className={isLoading ? \"animate-spin\" : \"\"}\n />\n )}\n {isnotif && <span className=\"btn__notif_badge\"></span>}\n </button>\n );\n },\n )}\n </div>\n );\n};\n\nButton.IconButton = IconButton;\nButton.IconButtonGroup = IconButtonGroup;\n","import React from \"react\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport default function TextInput({\n label,\n labelFor,\n icon,\n outerclass,\n inputclass,\n ...attr\n}: Readonly<\n React.InputHTMLAttributes<HTMLInputElement> & {\n label?: string;\n labelFor?: string;\n icon?: IconProp;\n outerclass?: string;\n inputclass?: string;\n }\n>) {\n return (\n <div className={`${outerclass} w-full`}>\n {label && (\n <label htmlFor={labelFor} className=\"text-input__label fi__label\">\n {label}\n </label>\n )}\n <div className={`fi fi--text ${attr.className ?? \"\"}`}>\n <span className=\"fi__glow\" aria-hidden=\"true\"></span>\n {icon && <FontAwesomeIcon icon={icon} className=\"fi__lead\" />}\n <input\n {...attr}\n className={`text-input w-full ${icon ? \"!pl-[0.6rem]\" : \"\"} ${inputclass ?? \"\"}`}\n />\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { faCircle, faPowerOff } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport default function Slider(\n attr: Readonly<React.InputHTMLAttributes<HTMLInputElement>>,\n) {\n return (\n <div className=\"flex items-center h-[3rem]\">\n <label className=\"fs\">\n <input type=\"checkbox\" className=\"fs__input\" {...attr} />\n <span className=\"fs__track\" aria-hidden=\"true\">\n <span className=\"fs__knob\"></span>\n <FontAwesomeIcon icon={faCircle} className=\"fs__icon fs__icon--off\" />\n <FontAwesomeIcon\n icon={faPowerOff}\n className=\"fs__icon fs__icon--on\"\n />\n </span>\n </label>\n </div>\n );\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCaretRight, faCheck } from \"@fortawesome/free-solid-svg-icons\";\n\ntype Option = { label: string; value: string };\n\ntype SingleSelect = React.InputHTMLAttributes<HTMLInputElement> & {\n label?: string;\n labelHtml?: string;\n placeholder?: string;\n outerclass?: string;\n options?: Option[];\n stringOptions?: string[];\n stateaction?: (param: string | Option) => void;\n};\n\nexport default function SingleSelect(attr: Readonly<SingleSelect>) {\n const { options = [], stringOptions = [], ...attrInput } = attr;\n const inputValue = attrInput.value;\n const [keyword, setKeyword] = useState(\"\");\n const [selected, setSelected] = useState<{ label: string; value: any }>({\n label: \"\",\n value: \"\",\n });\n\n function selectItem(\n { label, value }: { label: string; value: any },\n e: React.MouseEvent<HTMLButtonElement>,\n ) {\n const triggerManual = attrInput.onChange;\n if (triggerManual) {\n triggerManual?.({\n target: { value, name: attrInput.name },\n } as React.ChangeEvent<HTMLInputElement>);\n }\n setSelected({ label, value });\n\n if (attr.stateaction) {\n if (options?.length > 0) attr.stateaction({ label, value });\n if (stringOptions?.length > 0) attr.stateaction(value);\n }\n\n setKeyword(\"\");\n e.currentTarget.blur();\n }\n\n function autoUpdateValue(updatedValue: string) {\n if (updatedValue) {\n const filtered = availableOptions.find(\n ({ value }) => value == updatedValue,\n );\n if (filtered) setSelected(filtered);\n }\n }\n\n const availableOptions = useMemo(() => {\n let defaultOptions = options && options.length > 0;\n if (!defaultOptions)\n return stringOptions.map((opt) => ({ label: opt, value: opt }));\n return options;\n }, [options, stringOptions]);\n\n const filteredOptions = useMemo(() => {\n return availableOptions.filter(\n ({ label, value }) =>\n (label + \"\").toLowerCase().includes(keyword.toLowerCase()) ||\n (value + \"\").toLowerCase().includes(keyword.toLowerCase()),\n );\n }, [keyword, availableOptions]);\n\n useEffect(() => {\n inputValue && autoUpdateValue(inputValue as string);\n }, [inputValue, availableOptions]);\n\n return (\n <div className={`w-full ${attr.outerclass}`}>\n {attrInput.label && (\n <label\n className=\"text-input__label fi__label\"\n htmlFor={attrInput.labelHtml}\n >\n {attrInput.label}\n </label>\n )}\n <div className={`fi ${attrInput.className ?? \"\"}`}>\n <span className=\"fi__glow\" aria-hidden=\"true\"></span>\n <input\n type=\"hidden\"\n {...attrInput}\n {...(attrInput.onChange ? { onChange: attrInput.onChange } : {})}\n value={attrInput.value ?? selected.value}\n />\n <input\n type=\"search\"\n value={keyword}\n autoComplete=\"off\"\n onChange={(e) => setKeyword(e.target.value)}\n className={`${attrInput.name}-keyword ${input} ${selected.value ? \"fi__input--filled\" : \"\"}`}\n placeholder={selected.value ? selected.label : attrInput.placeholder}\n />\n <div className=\"select-item__wrapper fi__menu\">\n {filteredOptions.length == 0 && keyword != \"\" && (\n <button disabled className=\"select-item fi__empty\">\n Tidak ada Item\n </button>\n )}\n {filteredOptions.map(({ label, value }) => (\n <button\n key={value}\n type=\"button\"\n className=\"select-item fi__item\"\n onClick={(e) => selectItem({ label, value }, e)}\n >\n {label}\n {selected.value == value && (\n <FontAwesomeIcon icon={faCheck} className=\"fi__check\" />\n )}\n </button>\n ))}\n </div>\n <FontAwesomeIcon icon={faCaretRight} className=\"fi__icon\" />\n </div>\n </div>\n );\n}\n\nSingleSelect.autoFill = autoFillInput;\n\nfunction autoFillInput(\n value: string,\n elName: string,\n list: { label: string; value: string }[],\n) {\n const inp = document.querySelector(`[name=\"${elName}\"]`) as HTMLInputElement;\n inp.value = `${value || \"\"}`;\n const filtered = list.find((item) => item.value == value);\n const el = document.querySelector(`.${elName}-keyword`);\n el?.setAttribute(\"placeholder\", `${filtered?.label}`);\n}\n\nconst input = \"text-input peer w-full\";\n","import React from \"react\";\n\ntype Tooltip = {\n children: React.ReactNode;\n text: string;\n position: \"top\" | \"bottom\" | \"right\" | \"left\";\n};\n\nexport default function Tooltip({\n children,\n text,\n position = \"top\",\n}: Readonly<Tooltip>) {\n function getAccent() {\n const mapping = {\n top,\n bottom,\n left,\n right,\n };\n return mapping[position];\n }\n return (\n <div className=\"relative\">\n <div className=\"peer\">{children}</div>\n <span className={`tooltip-text ${getAccent()}`}>{text}</span>\n </div>\n );\n}\n\nconst top = \"bottom-full translate-y-[-6px] right-0\";\nconst bottom = \"right-0 top-full translate-y-[6px]\";\nconst right = \"left-full w-[max-content] translate-x-[0.6rem] top-[-0.2rem]\";\nconst left = \"right-full w-[max-content] translate-x-[-0.6rem] top-[-0.2rem]\";\n","import React from \"react\";\n\ntype Option = {\n label: string;\n value: string;\n};\n\nexport default function NavTabClient({\n items,\n state,\n}: Readonly<{\n items: Option[];\n state: {\n active: string;\n setActive: (val: string) => void;\n };\n}>) {\n return (\n <nav className=\"fn\" role=\"tablist\">\n {items.map(({ label, value }) => (\n <button\n role=\"tab\"\n key={value}\n type=\"button\"\n aria-selected={state.active == value}\n className={`fn__item ${state.active == value ? \"fn__item--active\" : \"\"}`}\n onClick={() => state.setActive(value)}\n >\n {label}\n </button>\n ))}\n </nav>\n );\n}\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { faCaretRight } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport React from \"react\";\n\ntype Card = {\n cardClass?: string;\n title?: string;\n icon?: IconProp;\n footer?: React.ReactNode;\n titleChild?: React.ReactNode;\n children: React.ReactNode;\n};\n\n/* frame is pure CSS (see .nc in futuristic.css), so Card renders on the server */\nexport default function Card({\n title,\n icon,\n footer,\n children,\n cardClass = \"\",\n titleChild,\n}: Readonly<Card>) {\n return (\n <article className={`nc ${cardClass}`}>\n <div className=\"nc__edge\" aria-hidden=\"true\"></div>\n <div className=\"nc__glass\" aria-hidden=\"true\"></div>\n <span className=\"nc__corner nc__corner--tl\" aria-hidden=\"true\"></span>\n <span className=\"nc__corner nc__corner--br\" aria-hidden=\"true\"></span>\n <span className=\"nc__notch\" aria-hidden=\"true\"></span>\n <span className=\"nc__bars\" aria-hidden=\"true\">\n <i className=\"on\"></i>\n <i className=\"on\"></i>\n <i className=\"on\"></i>\n <i className=\"on\"></i>\n <i></i>\n <i></i>\n </span>\n <div className=\"nc__header\">\n <div className=\"nc__head-row\">\n <div className=\"nc__title-wrap\">\n {icon && <FontAwesomeIcon icon={faCaretRight} />}\n <h3 className=\"nc__title\">{title}</h3>\n </div>\n {titleChild}\n </div>\n <div className=\"nc__rule mt-4\"></div>\n </div>\n <div className=\"nc__body\">{children}</div>\n {footer && <div className=\"nc__footer\">{footer}</div>}\n </article>\n );\n}\n\nconst SimpleCard = ({\n icon,\n title,\n footer,\n children,\n titleChild,\n cardClass = \"\",\n}: Card) => {\n return (\n <article className={`nc nc--simple ${cardClass}`}>\n <div className=\"nc__edge\" aria-hidden=\"true\"></div>\n <div className=\"nc__glass\" aria-hidden=\"true\"></div>\n <span className=\"nc__corner nc__corner--tl\" aria-hidden=\"true\"></span>\n <span className=\"nc__corner nc__corner--br\" aria-hidden=\"true\"></span>\n {(title || titleChild) && (\n <div className=\"nc__header\">\n <div className=\"nc__head-row\">\n <div className=\"nc__title-wrap\">\n {icon && <FontAwesomeIcon icon={faCaretRight} />}\n <h3 className=\"nc__title\">{title}</h3>\n </div>\n {titleChild}\n </div>\n <div className=\"nc__rule mt-4\"></div>\n </div>\n )}\n <div className=\"nc__body pt-0!\">{children}</div>\n {footer && <div className=\"nc__footer\">{footer}</div>}\n </article>\n );\n};\n\nCard.Simple = SimpleCard;\n\nconst Footer = ({\n className,\n children,\n}: {\n className?: string;\n children?: React.ReactNode;\n}) => {\n return (\n <div\n className={`${className} border-t border-t-[var(--ss6f-color-border)]`}\n >\n {children}\n </div>\n );\n};\n\nCard.Footer = Footer;\n","import React from \"react\";\nimport iconInfo from \"../../assets/icon-info.svg\";\nimport iconError from \"../../assets/icon-error.svg\";\nimport iconWarning from \"../../assets/icon-warning.svg\";\nimport iconSuccess from \"../../assets/icon-success.svg\";\nimport simpleInfo from \"../../assets/simple-info-icon.svg\";\nimport simpleError from \"../../assets/simple-error-icon.svg\";\nimport simpleWarning from \"../../assets/simple-warning-icon.svg\";\nimport simpleSuccess from \"../../assets/simple-success-icon.svg\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\ntype ToastType = \"warning\" | \"success\" | \"info\" | \"danger\";\ntype Toast = {\n title: string;\n className?: string;\n description: string;\n type: ToastType;\n};\n\nexport const statusIcons: Record<ToastType, string> = {\n info: iconInfo,\n warning: iconWarning,\n success: iconSuccess,\n danger: iconError,\n};\n\n// lighter icon set for the compact inline toast\nconst simpleIcons: Record<ToastType, string> = {\n info: simpleInfo,\n warning: simpleWarning,\n success: simpleSuccess,\n danger: simpleError,\n};\n\nexport default function Toast({\n title,\n description,\n type = \"info\",\n className,\n}: Readonly<Toast>) {\n return (\n <div className={`toast__wrapper ft ft--${type} ${className ?? \"\"}`}>\n <span className=\"ft__corner ft__corner--tl\" aria-hidden=\"true\"></span>\n <span className=\"ft__corner ft__corner--tr\" aria-hidden=\"true\"></span>\n <div className=\"ft__body\">\n <img src={statusIcons[type]} alt=\"\" className=\"ft__icon\" />\n <div>\n <p className=\"ft__title\">{title}</p>\n <p className=\"ft__desc\">{description}</p>\n </div>\n </div>\n <p className=\"ft__bar toast-bar-animate\"></p>\n </div>\n );\n}\n\nconst Inline = ({\n className,\n text,\n type,\n icon = undefined,\n}: {\n className?: string;\n text: string;\n type: ToastType;\n icon?: IconProp;\n}) => {\n return (\n <div className={`ft-inline ft--${type} ${className ?? \"\"}`}>\n {icon ? (\n <FontAwesomeIcon icon={icon} className=\"ft-inline__fa\" />\n ) : (\n <img src={simpleIcons[type]} alt=\"\" className=\"ft-inline__icon\" />\n )}\n <p>{text}</p>\n </div>\n );\n};\n\nToast.Inline = Inline;\n","import React from \"react\";\nimport { faCaretRight } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\ntype Expandable = {\n children: React.ReactNode;\n title: string;\n className?: string;\n isOpen?: boolean;\n};\n\nexport default function Expandable({\n children,\n title,\n className,\n isOpen,\n}: Readonly<Expandable>) {\n const name = title.replace(/\\s+/g, \"\");\n return (\n <div className={`expandable fe ${className ?? \"\"}`}>\n <span className=\"fe__glow\" aria-hidden=\"true\"></span>\n <input\n id={name}\n type=\"checkbox\"\n defaultChecked={isOpen}\n className=\"opacity-[0] peer absolute top-0 ex-title\"\n />\n <FontAwesomeIcon icon={faCaretRight} className=\"expandable__icon\" />\n <label htmlFor={name} className=\"expandable__title\">\n {title}\n </label>\n <div className=\"expandable__body\">\n <div className=\"p-[0.75rem] px-[1rem]\">{children}</div>\n </div>\n </div>\n );\n}\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCheck, faListCheck } from \"@fortawesome/free-solid-svg-icons\";\n\ntype Option = {\n value: string;\n label: string;\n};\n\ntype MultiSelect = {\n label?: string;\n labelHtml?: string;\n outerclass?: string;\n options?: Option[];\n stringOptions?: string[];\n state: {\n value: Option[];\n select: React.Dispatch<React.SetStateAction<Option[]>>;\n };\n};\n\nexport default function MultiSelect({\n state,\n label,\n labelHtml,\n ...attr\n}: Readonly<MultiSelect>) {\n const { options = [], stringOptions = [] } = attr;\n const [keyword, setKeyword] = useState(\"\");\n\n const availableOptions = useMemo(() => {\n const isDefaultOption = options && options.length > 0;\n if (!isDefaultOption)\n return stringOptions.map((opt) => ({ label: opt, value: opt }));\n return options;\n }, [options, stringOptions]);\n\n function getFiltered() {\n return availableOptions.filter(\n ({ label, value }) =>\n (label + \"\").toLowerCase().includes(keyword.toLowerCase()) ||\n (value + \"\").toLowerCase().includes(keyword.toLowerCase()),\n );\n }\n\n function selectItem({ label, value }: { label: string; value: string }) {\n state.select((prev) => {\n const isItemExist = prev.some((item: Option) => item.value == value);\n if (isItemExist) {\n return prev.filter((item: Option) => item.value != value);\n }\n return [...prev, { label, value }];\n });\n }\n\n function isItemExist(value: string) {\n return state.value.find((item: any) => item.value == value);\n }\n\n const selectUnSelectAll = useCallback(() => {\n const isAllSelected = state.value.length == availableOptions.length;\n state.select(isAllSelected ? [] : availableOptions);\n }, [state.value, availableOptions]);\n\n return (\n <div className={`w-full ${attr.outerclass}`}>\n {label && (\n <label htmlFor={labelHtml} className=\"text-input__label fi__label\">\n {label}\n </label>\n )}\n <div className=\"fi\">\n <span className=\"fi__glow\" aria-hidden=\"true\"></span>\n <input\n type=\"search\"\n value={keyword}\n autoComplete=\"off\"\n className={`${input} ${state.value.length > 0 ? \"fi__input--filled\" : \"\"}`}\n onChange={(e) => setKeyword(e.target.value)}\n placeholder={`${state.value.length} Dipilih`}\n />\n <div className=\"select-item__wrapper select-multiple__wrapper fi__menu\">\n {getFiltered().length == 0 && keyword != \"\" && (\n <button disabled className=\"select-item fi__empty\">\n Tidak ada Item\n </button>\n )}\n {getFiltered().map(({ label, value }) => (\n <button\n key={value}\n type=\"button\"\n onClick={() => selectItem({ label, value })}\n className=\"select-item fi__item\"\n >\n {label}\n {isItemExist(value) && (\n <FontAwesomeIcon icon={faCheck} className=\"fi__check\" />\n )}\n </button>\n ))}\n </div>\n <button type=\"button\" className=\"fi__icon\" onClick={selectUnSelectAll}>\n <FontAwesomeIcon icon={faListCheck} />\n </button>\n </div>\n </div>\n );\n}\nconst input = \"text-input peer w-full\";\n","import React from \"react\";\nimport { faMoon, faSun } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport default function ThemeToggle(\n attr: Readonly<React.InputHTMLAttributes<HTMLInputElement>>,\n) {\n return (\n <div className=\"flex items-center h-[3rem]\">\n <label className=\"fs fs--theme\">\n <input type=\"checkbox\" className=\"fs__input\" {...attr} />\n <span className=\"fs__track\" aria-hidden=\"true\">\n <span className=\"fs__knob\">\n <FontAwesomeIcon icon={faMoon} className=\"fs__moon\" />\n <FontAwesomeIcon icon={faSun} className=\"fs__sun\" />\n </span>\n </span>\n </label>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport MultiSelect from \"./MultiSelect\";\nimport SingleSelect from \"./SingleSelect\";\n\nconst list = [\n { label: \"Option 1\", value: \"option1\" },\n { label: \"Option 2\", value: \"option2\" },\n { label: \"Option 3\", value: \"option3\" },\n];\nconst stringList = [\"option1\", \"option2\", \"option3\"];\n\nexport default function Dashboard() {\n const [selectedItem, setSelectedItem] = useState<\n { label: string; value: string }[]\n >([]);\n const [sel, setSel] = useState({ label: \"\", value: \"\" });\n\n function updateState(item: string) {\n const filtered = list.find(({ value }) => value == item);\n filtered && setSel(filtered);\n }\n\n return (\n <div className=\"flex items-center gap-[1rem]\">\n <MultiSelect\n label=\"Multi Select\"\n stringOptions={stringList}\n state={{ value: selectedItem, select: setSelectedItem }}\n />\n <SingleSelect\n label=\"Single Select\"\n name=\"newinput\"\n stringOptions={stringList}\n placeholder=\"-- Pilih Status --\"\n value={sel.value}\n />\n </div>\n );\n}\n","import React from \"react\";\nexport default function Badge({\n text,\n type,\n className,\n}: Readonly<{\n text: string;\n type: \"success\" | \"danger\" | \"warning\" | \"info\";\n className?: string;\n}>) {\n return (\n <div className=\"badge__wrapper\">\n {/* ft--{type} supplies the status color (--t), shared with Toast */}\n <span className={`fb ft--${type} ${className ?? \"\"}`}>{text}</span>\n </div>\n );\n}\n","import React from \"react\";\nexport default function Skeleton({ className }: { className?: string }) {\n return (\n <div className={`${className} skeleton`}>\n <span className=\"skeleton__item skeleton-slide\"></span>\n </div>\n );\n}\n","import React from \"react\";\n\nexport default function Navigation() {\n return <nav></nav>;\n}\n\nconst URLNavigation = (props: {\n list: { label: string; href: string }[];\n activeUrl: string;\n outerclass?: string;\n CustomComponent?: React.ElementType;\n}) => {\n const Component = props.CustomComponent || \"a\";\n\n return (\n <nav className={`fnav ${props.outerclass ?? \"\"}`}>\n <span className=\"fnav__glow fnav__glow--tr\" aria-hidden=\"true\"></span>\n <span className=\"fnav__glow fnav__glow--bl\" aria-hidden=\"true\"></span>\n {props.list.map(({ label, href }) => {\n const isActive = href === props.activeUrl;\n return (\n <Component\n key={href}\n href={href}\n aria-current={isActive ? \"page\" : undefined}\n className={`fnav__item ${isActive ? \"fnav__item--active\" : \"\"}`}\n >\n {label}\n </Component>\n );\n })}\n </nav>\n );\n};\n\nNavigation.URL = URLNavigation;\n","import React from \"react\";\nimport Card from \"./Card\";\nimport Button from \"./Button\";\nimport { statusIcons } from \"./Toast\";\n\ntype ConfirmationType = \"info\" | \"warning\" | \"danger\" | \"success\";\n\nconst buttonColor = {\n info: \"info\",\n warning: \"warn\",\n danger: \"danger\",\n success: \"success\",\n} as const;\n\nexport default function Confirmation({\n type = \"warning\",\n text,\n title,\n secondaryAction,\n secondaryLabel = \"Tidak\",\n mainAction,\n mainLabel = \"Ya\",\n}: {\n mainAction: () => void;\n secondaryAction?: () => void;\n mainLabel?: string;\n secondaryLabel?: string;\n title: string;\n text: string;\n type?: ConfirmationType;\n}) {\n return (\n <div className=\"confirmation__outer\">\n <Card\n title={title}\n cardClass=\"fc\"\n footer={\n <div className=\"fc__actions\">\n {secondaryAction && (\n <Button\n type=\"button\"\n btnType=\"outline\"\n color={buttonColor[type]}\n label={secondaryLabel}\n onClick={secondaryAction}\n />\n )}\n <Button\n type=\"button\"\n btnType=\"primary\"\n color={buttonColor[type]}\n label={mainLabel}\n onClick={mainAction}\n />\n </div>\n }\n >\n <div className=\"fc__content\">\n <img src={statusIcons[type]} alt=\"\" className=\"fc__icon\" />\n <p>{text}</p>\n </div>\n </Card>\n </div>\n );\n}\n","import React from \"react\";\n\ntype ProgressBar = {\n value: number;\n max?: number;\n label?: string;\n showValue?: boolean;\n color?: \"primary\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n className?: string;\n};\n\nexport default function ProgressBar({\n value,\n max = 100,\n label,\n showValue = true,\n color = \"primary\",\n className = \"\",\n}: Readonly<ProgressBar>) {\n const percent = Math.min(100, Math.max(0, Math.round((value / max) * 100)));\n // non-primary colors reuse the status palette (ft--{type} sets --t), shared with Toast/Badge\n const colorClass = color === \"primary\" ? \"\" : `ft--${color}`;\n\n return (\n <div className={`fp ${colorClass} ${className}`}>\n {(label || showValue) && (\n <div className=\"fp__head\">\n <span className=\"fp__label\">{label}</span>\n {showValue && <span className=\"fp__value\">{percent}%</span>}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={100}\n className=\"fp__track\"\n aria-valuenow={percent}\n >\n <div className=\"fp__fill\" style={{ width: `${percent}%` }}></div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport HeaderMenu from \"./HeaderMenu\";\n\ntype HeaderLink = { label: string; href: string };\n\ntype Header = {\n title: string;\n /** shortcut tabs; first half sits left of the title, the rest on the right */\n tabs?: HeaderLink[];\n /** drop-down menu content, usually <Header.Menu /> (the yellow arrow appears only when given) */\n menu?: React.ReactNode;\n activeUrl?: string;\n left?: React.ReactNode;\n right?: React.ReactNode;\n /** link component, e.g. Next.js Link; defaults to <a> */\n CustomComponent?: React.ElementType;\n /** id of the hidden toggle; change it if a page renders more than one Header */\n menuId?: string;\n className?: string;\n};\n\n/* server component: the drawer opens via a hidden checkbox (CSS only).\n its content (search + grouped pages) is the client component Header.Menu, passed via `menu` */\nexport default function Header({\n title,\n tabs = [],\n menu,\n activeUrl,\n left,\n right,\n CustomComponent,\n menuId = \"ph-menu\",\n className = \"\",\n}: Readonly<Header>) {\n const Link = CustomComponent || \"a\";\n const current = (href: string) => (href === activeUrl ? \"page\" : undefined);\n const half = Math.ceil(tabs.length / 2);\n\n // yellow slashes ride on the outer end of each tab group, so they never overlap wider tabs.\n // gradients ph-fadeL / ph-fadeR live in the decoration svg's <defs>\n const slashes = (side: \"l\" | \"r\") => (\n <svg\n className={`ph__slash ph__slash--${side}`}\n width=\"48\"\n height=\"14\"\n viewBox=\"0 0 48 14\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={\n side === \"l\"\n ? \"M8 14l-8-14 M18 14l-8-14 M28 14l-8-14 M38 14l-8-14 M48 14l-8-14\"\n : \"M0 14l8-14 M10 14l8-14 M20 14l8-14 M30 14l8-14 M40 14l8-14\"\n }\n stroke={`url(#ph-fade${side === \"l\" ? \"L\" : \"R\"})`}\n strokeWidth=\"3\"\n />\n </svg>\n );\n\n const renderTabs = (list: HeaderLink[], side: \"l\" | \"r\") => (\n <nav className={`ph__tabs ph__tabs--${side}`} aria-label=\"Shortcuts\">\n {slashes(side)}\n {list.map(({ label, href }) => (\n <Link\n key={href}\n href={href}\n aria-current={current(href)}\n className={`ph-tab ${side === \"r\" ? \"ph-tab--r\" : \"\"}`}\n >\n {label}\n </Link>\n ))}\n </nav>\n );\n\n return (\n <header className={`ph ${className}`}>\n <div className=\"ph__bar\" aria-hidden=\"true\"></div>\n <svg\n className=\"ph__deco\"\n width=\"840\"\n height=\"64\"\n viewBox=\"300 0 840 64\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <defs>\n <linearGradient id=\"ph-title\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" className=\"ph__stop-panel-top\" />\n <stop offset=\"1\" className=\"ph__stop-panel-bottom\" />\n </linearGradient>\n <linearGradient id=\"ph-inner\" x1=\"0\" y1=\"1\" x2=\"0\" y2=\"0\">\n <stop offset=\"0\" className=\"ph__stop-accent\" stopOpacity=\".32\" />\n <stop offset=\".6\" className=\"ph__stop-accent\" stopOpacity=\"0\" />\n </linearGradient>\n <linearGradient id=\"ph-fadeL\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0\" className=\"ph__stop-yellow\" stopOpacity=\"0\" />\n <stop offset=\"1\" className=\"ph__stop-yellow\" />\n </linearGradient>\n <linearGradient id=\"ph-fadeR\" x1=\"1\" y1=\"0\" x2=\"0\" y2=\"0\">\n <stop offset=\"0\" className=\"ph__stop-yellow\" stopOpacity=\"0\" />\n <stop offset=\"1\" className=\"ph__stop-yellow\" />\n </linearGradient>\n </defs>\n <path d=\"M540 0H900L866 56H574Z\" fill=\"url(#ph-title)\" />\n <path d=\"M540 0H900L866 56H574Z\" fill=\"url(#ph-inner)\" />\n <path\n className=\"ph__deco-corners\"\n d=\"M562 35L574.5 55H612 M878 35L865.5 55H828\"\n strokeWidth=\"2.5\"\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </svg>\n\n <h1 className=\"ph__title\">{title?.toUpperCase()}</h1>\n\n {tabs.length > 0 && renderTabs(tabs.slice(0, half), \"l\")}\n {tabs.length > 1 && renderTabs(tabs.slice(half), \"r\")}\n\n {left && <div className=\"ph__slot ph__slot--left\">{left}</div>}\n {right && <div className=\"ph__slot ph__slot--right\">{right}</div>}\n\n {menu && (\n <>\n <input\n id={menuId}\n type=\"checkbox\"\n className=\"ph__toggle\"\n aria-label=\"Show all pages\"\n />\n <span className=\"ph__arrow-glow\">\n <label\n htmlFor={menuId}\n className=\"ph__arrow\"\n aria-hidden=\"true\"\n ></label>\n {/* glowing dash orbiting the arrow (pathLength=100 keeps the dash math simple) */}\n <svg\n className=\"ph__arrow-ring\"\n width=\"44\"\n height=\"26\"\n viewBox=\"0 0 44 26\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <polygon\n className=\"ph__arrow-track\"\n points=\"1,1 43,1 22,25\"\n pathLength=\"100\"\n />\n <polygon\n className=\"ph__arrow-dash\"\n points=\"1,1 43,1 22,25\"\n pathLength=\"100\"\n />\n </svg>\n </span>\n <div className=\"ph__drawer\">\n <label\n htmlFor={menuId}\n className=\"ph__backdrop\"\n aria-hidden=\"true\"\n ></label>\n <section className=\"ph__panel\" aria-label=\"Menu\">\n {menu}\n </section>\n </div>\n </>\n )}\n </header>\n );\n}\n\nHeader.Menu = HeaderMenu;\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faMagnifyingGlass } from \"@fortawesome/free-solid-svg-icons\";\nimport TextInput from \"./TextInput\";\n\ntype HeaderMenuPage = {\n label: string;\n href: string;\n /** group name: pages sharing a description are listed under one heading */\n description?: string;\n icon?: IconProp;\n};\n\ntype HeaderMenu = {\n pages: HeaderMenuPage[];\n activeUrl?: string;\n title?: string;\n searchPlaceholder?: string;\n /** link component, e.g. Next.js Link; defaults to <a> */\n CustomComponent?: React.ElementType;\n};\n\n/* client component (uses state): render it from a \"use client\" file and pass it to <Header menu={...} /> */\nexport default function HeaderMenu({\n pages,\n activeUrl,\n title = \"All Pages\",\n searchPlaceholder = \"Search menu ...\",\n CustomComponent,\n}: Readonly<HeaderMenu>) {\n const Link = CustomComponent || \"a\";\n const [keyword, setKeyword] = useState(\"\");\n const ref = useRef<HTMLDivElement>(null);\n\n // close the drawer by unchecking Header's hidden toggle\n function close() {\n const toggle = ref.current\n ?.closest(\".ph\")\n ?.querySelector<HTMLInputElement>(\".ph__toggle\");\n if (toggle) toggle.checked = false;\n }\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && close();\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, []);\n\n // filter by page label or group name, then group in first-seen order\n const groups = useMemo(() => {\n const q = keyword.trim().toLowerCase();\n const map = new Map<string, HeaderMenuPage[]>();\n pages\n .filter(\n ({ label, description = \"\" }) =>\n label.toLowerCase().includes(q) ||\n description.toLowerCase().includes(q),\n )\n .forEach((page) => {\n const key = page.description ?? \"\";\n map.set(key, [...(map.get(key) ?? []), page]);\n });\n return [...map.entries()];\n }, [pages, keyword]);\n\n const total = groups.reduce((n, [, list]) => n + list.length, 0);\n\n return (\n <div ref={ref} className=\"ph-menu\">\n <div className=\"ph__panel-head\">\n <div>\n <span className=\"ph__kicker\">// NAVIGATE</span>\n <h2 className=\"ph__panel-title\">{title}</h2>\n </div>\n <div className=\"ph-menu__tools\">\n <TextInput\n type=\"search\"\n icon={faMagnifyingGlass}\n value={keyword}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n outerclass=\"ph-menu__search\"\n onChange={(e) => setKeyword(e.target.value)}\n />\n <span className=\"ph__count\">\n {String(total).padStart(2, \"0\")} PAGES\n </span>\n </div>\n </div>\n\n {/* only this list scrolls; title and search stay pinned */}\n <div className=\"ph-menu__list\">\n {total === 0 && (\n <p className=\"ph-menu__empty\">No menu matches \"{keyword}\"</p>\n )}\n\n {groups.map(([group, list]) => (\n <section key={group || \"_\"} className=\"ph-menu__group\">\n {group && <h3 className=\"ph-menu__group-title\">{group}</h3>}\n <div className=\"ph__grid\">\n {list.map(({ label, href, icon }) => (\n <Link\n key={href}\n href={href}\n aria-current={href === activeUrl ? \"page\" : undefined}\n className=\"ph-page\"\n onClick={close}\n >\n {icon && (\n <span className=\"ph-page__icon\">\n <FontAwesomeIcon icon={icon} />\n </span>\n )}\n <span className=\"ph-page__name\">{label}</span>\n </Link>\n ))}\n </div>\n </section>\n ))}\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\ntype Footer = {\n text: React.ReactNode;\n className?: string;\n};\n\n/* corner lines and slashes follow the panel's slant (20px inset over 44px height).\n glass bar along the bottom 16px, with a center panel that auto-fits the text.\n SVG colors reuse Header's .ph__stop-* / .ph__deco-corners classes */\nexport default function Footer({ text, className = \"\" }: Readonly<Footer>) {\n return (\n <footer className={`pf ${className}`}>\n <div className=\"pf__panel\">\n <p className=\"pf__text\">{text}</p>\n\n <svg\n className=\"pf__corner pf__corner--l\"\n width=\"56\"\n height=\"16\"\n viewBox=\"0 0 56 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n className=\"ph__deco-corners\"\n d=\"M13.2 15L19.8 0.5H56\"\n strokeWidth=\"2.5\"\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </svg>\n <svg\n className=\"pf__corner pf__corner--r\"\n width=\"56\"\n height=\"16\"\n viewBox=\"0 0 56 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n className=\"ph__deco-corners\"\n d=\"M42.8 15L36.2 0.5H0\"\n strokeWidth=\"2.5\"\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </svg>\n\n <svg\n className=\"pf__slash pf__slash--l\"\n width=\"47\"\n height=\"12\"\n viewBox=\"0 0 47 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <defs>\n <linearGradient id=\"pf-fadeL\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0\" className=\"ph__stop-yellow\" stopOpacity=\"0\" />\n <stop offset=\"1\" className=\"ph__stop-yellow\" />\n </linearGradient>\n </defs>\n <path\n d=\"M0 12l5.5-12 M10 12l5.5-12 M20 12l5.5-12 M30 12l5.5-12 M40 12l5.5-12\"\n stroke=\"url(#pf-fadeL)\"\n strokeWidth=\"3\"\n />\n </svg>\n <svg\n className=\"pf__slash pf__slash--r\"\n width=\"47\"\n height=\"12\"\n viewBox=\"0 0 47 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <defs>\n <linearGradient id=\"pf-fadeR\" x1=\"1\" y1=\"0\" x2=\"0\" y2=\"0\">\n <stop offset=\"0\" className=\"ph__stop-yellow\" stopOpacity=\"0\" />\n <stop offset=\"1\" className=\"ph__stop-yellow\" />\n </linearGradient>\n </defs>\n <path\n d=\"M1.5 0l5.5 12 M11.5 0l5.5 12 M21.5 0l5.5 12 M31.5 0l5.5 12 M41.5 0l5.5 12\"\n stroke=\"url(#pf-fadeR)\"\n strokeWidth=\"3\"\n />\n </svg>\n </div>\n </footer>\n );\n}\n"],"mappings":"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","names":["Footer","React","list","import_react","import_react_fontawesome","_a","React","import_react","import_free_solid_svg_icons","import_react_fontawesome","React","import_react","import_react_fontawesome","import_free_solid_svg_icons","React","list","import_react","React","import_react","React","import_free_solid_svg_icons","import_react_fontawesome","import_react","React","import_react","import_react_fontawesome","React","import_react","import_free_solid_svg_icons","import_react_fontawesome","React","import_react","import_react_fontawesome","import_free_solid_svg_icons","label","isItemExist","React","input","import_react","import_free_solid_svg_icons","import_react_fontawesome","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","import_react","import_react_fontawesome","import_free_solid_svg_icons","list","React","left","right","React","list","import_react","Footer","React"]}
|
package/dist/index.mjs
CHANGED
|
@@ -302,10 +302,10 @@ function Tooltip({
|
|
|
302
302
|
}
|
|
303
303
|
return /* @__PURE__ */ React5.createElement("div", { className: "relative" }, /* @__PURE__ */ React5.createElement("div", { className: "peer" }, children), /* @__PURE__ */ React5.createElement("span", { className: `tooltip-text ${getAccent()}` }, text));
|
|
304
304
|
}
|
|
305
|
-
var top = "bottom-full translate-y-[-
|
|
306
|
-
var bottom = "right-0 top-full translate-y-[
|
|
307
|
-
var right = "left-full w-[max-content] translate-x-[0.6rem]
|
|
308
|
-
var left = "right-full w-[max-content] translate-x-[-0.6rem] top-[-0.2rem]
|
|
305
|
+
var top = "bottom-full translate-y-[-6px] right-0";
|
|
306
|
+
var bottom = "right-0 top-full translate-y-[6px]";
|
|
307
|
+
var right = "left-full w-[max-content] translate-x-[0.6rem] top-[-0.2rem]";
|
|
308
|
+
var left = "right-full w-[max-content] translate-x-[-0.6rem] top-[-0.2rem]";
|
|
309
309
|
|
|
310
310
|
// src/components/NavTabClient.tsx
|
|
311
311
|
import React6 from "react";
|
|
@@ -719,7 +719,7 @@ function HeaderMenu({
|
|
|
719
719
|
outerclass: "ph-menu__search",
|
|
720
720
|
onChange: (e) => setKeyword(e.target.value)
|
|
721
721
|
}
|
|
722
|
-
), /* @__PURE__ */ React18.createElement("span", { className: "ph__count" }, String(total).padStart(2, "0"), " PAGES"))), total === 0 && /* @__PURE__ */ React18.createElement("p", { className: "ph-menu__empty" }, 'No menu matches "', keyword, '"'), groups.map(([group, list2]) => /* @__PURE__ */ React18.createElement("section", { key: group || "_", className: "ph-menu__group" }, group && /* @__PURE__ */ React18.createElement("h3", { className: "ph-menu__group-title" }, group), /* @__PURE__ */ React18.createElement("div", { className: "ph__grid" }, list2.map(({ label, href, icon }) => /* @__PURE__ */ React18.createElement(
|
|
722
|
+
), /* @__PURE__ */ React18.createElement("span", { className: "ph__count" }, String(total).padStart(2, "0"), " PAGES"))), /* @__PURE__ */ React18.createElement("div", { className: "ph-menu__list" }, total === 0 && /* @__PURE__ */ React18.createElement("p", { className: "ph-menu__empty" }, 'No menu matches "', keyword, '"'), groups.map(([group, list2]) => /* @__PURE__ */ React18.createElement("section", { key: group || "_", className: "ph-menu__group" }, group && /* @__PURE__ */ React18.createElement("h3", { className: "ph-menu__group-title" }, group), /* @__PURE__ */ React18.createElement("div", { className: "ph__grid" }, list2.map(({ label, href, icon }) => /* @__PURE__ */ React18.createElement(
|
|
723
723
|
Link,
|
|
724
724
|
{
|
|
725
725
|
key: href,
|
|
@@ -730,7 +730,7 @@ function HeaderMenu({
|
|
|
730
730
|
},
|
|
731
731
|
icon && /* @__PURE__ */ React18.createElement("span", { className: "ph-page__icon" }, /* @__PURE__ */ React18.createElement(FontAwesomeIcon10, { icon })),
|
|
732
732
|
/* @__PURE__ */ React18.createElement("span", { className: "ph-page__name" }, label)
|
|
733
|
-
))))));
|
|
733
|
+
)))))));
|
|
734
734
|
}
|
|
735
735
|
|
|
736
736
|
// src/components/Header.tsx
|
|
@@ -800,7 +800,7 @@ function Header({
|
|
|
800
800
|
strokeLinecap: "round"
|
|
801
801
|
}
|
|
802
802
|
)
|
|
803
|
-
), /* @__PURE__ */ React19.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__ */ React19.createElement("div", { className: "ph__slot ph__slot--left" }, left2), right2 && /* @__PURE__ */ React19.createElement("div", { className: "ph__slot ph__slot--right" }, right2), menu && /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(
|
|
803
|
+
), /* @__PURE__ */ React19.createElement("h1", { className: "ph__title" }, title == null ? void 0 : title.toUpperCase()), tabs.length > 0 && renderTabs(tabs.slice(0, half), "l"), tabs.length > 1 && renderTabs(tabs.slice(half), "r"), left2 && /* @__PURE__ */ React19.createElement("div", { className: "ph__slot ph__slot--left" }, left2), right2 && /* @__PURE__ */ React19.createElement("div", { className: "ph__slot ph__slot--right" }, right2), menu && /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(
|
|
804
804
|
"input",
|
|
805
805
|
{
|
|
806
806
|
id: menuId,
|