@tollerud/ui 1.1.5 → 3.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/AGENTS.md +36 -13
- package/CHANGELOG.md +411 -0
- package/COMPONENTS.md +951 -0
- package/GETTING_STARTED.md +159 -0
- package/README.md +51 -43
- package/SKILL.md +59 -24
- package/components.json +18 -0
- package/dist/accordion.d.ts +20 -0
- package/dist/accordion.js +5 -0
- package/dist/accordion.js.map +1 -0
- package/dist/action-diff.d.ts +26 -0
- package/dist/action-diff.js +5 -0
- package/dist/action-diff.js.map +1 -0
- package/dist/action-row.d.ts +36 -0
- package/dist/action-row.js +6 -0
- package/dist/action-row.js.map +1 -0
- package/dist/alert-inbox.d.ts +23 -0
- package/dist/alert-inbox.js +6 -0
- package/dist/alert-inbox.js.map +1 -0
- package/dist/alert.d.ts +33 -0
- package/dist/alert.js +5 -0
- package/dist/alert.js.map +1 -0
- package/dist/approval-card.d.ts +27 -0
- package/dist/approval-card.js +5 -0
- package/dist/approval-card.js.map +1 -0
- package/dist/area-chart.d.ts +10 -0
- package/dist/area-chart.js +5 -0
- package/dist/area-chart.js.map +1 -0
- package/dist/avatar.d.ts +28 -0
- package/dist/avatar.js +5 -0
- package/dist/avatar.js.map +1 -0
- package/dist/backup-status-panel.d.ts +25 -0
- package/dist/backup-status-panel.js +6 -0
- package/dist/backup-status-panel.js.map +1 -0
- package/dist/badge.d.ts +17 -0
- package/dist/badge.js +5 -0
- package/dist/badge.js.map +1 -0
- package/dist/bar-chart.d.ts +15 -0
- package/dist/bar-chart.js +5 -0
- package/dist/bar-chart.js.map +1 -0
- package/dist/bento-dashboard.d.ts +30 -0
- package/dist/bento-dashboard.js +10 -0
- package/dist/bento-dashboard.js.map +1 -0
- package/dist/breadcrumb.d.ts +16 -0
- package/dist/breadcrumb.js +5 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/button.d.ts +29 -0
- package/dist/button.js +5 -0
- package/dist/button.js.map +1 -0
- package/dist/card.d.ts +10 -0
- package/dist/card.js +5 -0
- package/dist/card.js.map +1 -0
- package/dist/checkbox.d.ts +9 -0
- package/dist/checkbox.js +5 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chunk-2QWKOCWF.js +79 -0
- package/dist/chunk-2QWKOCWF.js.map +1 -0
- package/dist/chunk-3LTW224O.js +53 -0
- package/dist/chunk-3LTW224O.js.map +1 -0
- package/dist/chunk-3XTZPDNV.js +94 -0
- package/dist/chunk-3XTZPDNV.js.map +1 -0
- package/dist/chunk-435JHF7G.js +65 -0
- package/dist/chunk-435JHF7G.js.map +1 -0
- package/dist/chunk-4PA2ACNF.js +52 -0
- package/dist/chunk-4PA2ACNF.js.map +1 -0
- package/dist/chunk-5GWHUJ5D.js +29 -0
- package/dist/chunk-5GWHUJ5D.js.map +1 -0
- package/dist/chunk-6FUKJD3W.js +123 -0
- package/dist/chunk-6FUKJD3W.js.map +1 -0
- package/dist/chunk-6IS2AYYG.js +106 -0
- package/dist/chunk-6IS2AYYG.js.map +1 -0
- package/dist/chunk-6PZKU6ZL.js +78 -0
- package/dist/chunk-6PZKU6ZL.js.map +1 -0
- package/dist/chunk-6SKTH45H.js +75 -0
- package/dist/chunk-6SKTH45H.js.map +1 -0
- package/dist/chunk-6UXW5YUC.js +77 -0
- package/dist/chunk-6UXW5YUC.js.map +1 -0
- package/dist/chunk-7EP2T3OW.js +52 -0
- package/dist/chunk-7EP2T3OW.js.map +1 -0
- package/dist/chunk-7J5QXUQN.js +38 -0
- package/dist/chunk-7J5QXUQN.js.map +1 -0
- package/dist/chunk-A6L5C3IJ.js +47 -0
- package/dist/chunk-A6L5C3IJ.js.map +1 -0
- package/dist/chunk-ADE22JSR.js +54 -0
- package/dist/chunk-ADE22JSR.js.map +1 -0
- package/dist/chunk-ANW6J6PV.js +42 -0
- package/dist/chunk-ANW6J6PV.js.map +1 -0
- package/dist/chunk-APFFKNPS.js +80 -0
- package/dist/chunk-APFFKNPS.js.map +1 -0
- package/dist/chunk-AQT3FZRQ.js +23 -0
- package/dist/chunk-AQT3FZRQ.js.map +1 -0
- package/dist/chunk-AZADSX4Z.js +85 -0
- package/dist/chunk-AZADSX4Z.js.map +1 -0
- package/dist/chunk-BPCH5LJ3.js +36 -0
- package/dist/chunk-BPCH5LJ3.js.map +1 -0
- package/dist/chunk-CDI7353B.js +40 -0
- package/dist/chunk-CDI7353B.js.map +1 -0
- package/dist/chunk-CKNWXYMA.js +53 -0
- package/dist/chunk-CKNWXYMA.js.map +1 -0
- package/dist/chunk-DNJI65VQ.js +22 -0
- package/dist/chunk-DNJI65VQ.js.map +1 -0
- package/dist/chunk-DOUDJU4P.js +63 -0
- package/dist/chunk-DOUDJU4P.js.map +1 -0
- package/dist/chunk-DRCMGIQ6.js +64 -0
- package/dist/chunk-DRCMGIQ6.js.map +1 -0
- package/dist/chunk-DZOBXK2S.js +28 -0
- package/dist/chunk-DZOBXK2S.js.map +1 -0
- package/dist/chunk-EN4OJCEF.js +54 -0
- package/dist/chunk-EN4OJCEF.js.map +1 -0
- package/dist/chunk-EVHZFYWX.js +33 -0
- package/dist/chunk-EVHZFYWX.js.map +1 -0
- package/dist/chunk-G2VKWNZA.js +53 -0
- package/dist/chunk-G2VKWNZA.js.map +1 -0
- package/dist/chunk-GTM2DE4C.js +156 -0
- package/dist/chunk-GTM2DE4C.js.map +1 -0
- package/dist/chunk-H3ZVGTJM.js +165 -0
- package/dist/chunk-H3ZVGTJM.js.map +1 -0
- package/dist/chunk-HWAWUEHC.js +28 -0
- package/dist/chunk-HWAWUEHC.js.map +1 -0
- package/dist/chunk-HWJVRTWO.js +36 -0
- package/dist/chunk-HWJVRTWO.js.map +1 -0
- package/dist/chunk-ILADNTUB.js +77 -0
- package/dist/chunk-ILADNTUB.js.map +1 -0
- package/dist/chunk-IUPVQWO5.js +31 -0
- package/dist/chunk-IUPVQWO5.js.map +1 -0
- package/dist/chunk-JFOW2DI5.js +43 -0
- package/dist/chunk-JFOW2DI5.js.map +1 -0
- package/dist/chunk-JRFSUVSO.js +66 -0
- package/dist/chunk-JRFSUVSO.js.map +1 -0
- package/dist/chunk-KI6OTVID.js +91 -0
- package/dist/chunk-KI6OTVID.js.map +1 -0
- package/dist/chunk-LUM2YJBH.js +73 -0
- package/dist/chunk-LUM2YJBH.js.map +1 -0
- package/dist/chunk-NHPISZWS.js +71 -0
- package/dist/chunk-NHPISZWS.js.map +1 -0
- package/dist/chunk-NOLWJJHT.js +52 -0
- package/dist/chunk-NOLWJJHT.js.map +1 -0
- package/dist/chunk-NPVINX3Q.js +20 -0
- package/dist/chunk-NPVINX3Q.js.map +1 -0
- package/dist/chunk-NSMU66ZX.js +47 -0
- package/dist/chunk-NSMU66ZX.js.map +1 -0
- package/dist/chunk-O5SWPHUQ.js +79 -0
- package/dist/chunk-O5SWPHUQ.js.map +1 -0
- package/dist/chunk-OGVSZ7NV.js +53 -0
- package/dist/chunk-OGVSZ7NV.js.map +1 -0
- package/dist/chunk-OLHMMFQ7.js +43 -0
- package/dist/chunk-OLHMMFQ7.js.map +1 -0
- package/dist/chunk-ONMTHBZ4.js +54 -0
- package/dist/chunk-ONMTHBZ4.js.map +1 -0
- package/dist/chunk-OVSIOZHJ.js +56 -0
- package/dist/chunk-OVSIOZHJ.js.map +1 -0
- package/dist/chunk-Q54CVE3W.js +154 -0
- package/dist/chunk-Q54CVE3W.js.map +1 -0
- package/dist/chunk-QEHTPQHL.js +35 -0
- package/dist/chunk-QEHTPQHL.js.map +1 -0
- package/dist/chunk-QEIEWGHA.js +62 -0
- package/dist/chunk-QEIEWGHA.js.map +1 -0
- package/dist/chunk-QQHBEACI.js +88 -0
- package/dist/chunk-QQHBEACI.js.map +1 -0
- package/dist/chunk-RJTDQOT2.js +73 -0
- package/dist/chunk-RJTDQOT2.js.map +1 -0
- package/dist/chunk-RQ3RXKAZ.js +203 -0
- package/dist/chunk-RQ3RXKAZ.js.map +1 -0
- package/dist/chunk-RZK2S2OO.js +126 -0
- package/dist/chunk-RZK2S2OO.js.map +1 -0
- package/dist/chunk-SAP7JSSO.js +106 -0
- package/dist/chunk-SAP7JSSO.js.map +1 -0
- package/dist/chunk-T3TQPOVM.js +79 -0
- package/dist/chunk-T3TQPOVM.js.map +1 -0
- package/dist/chunk-T3UQ7G4T.js +58 -0
- package/dist/chunk-T3UQ7G4T.js.map +1 -0
- package/dist/chunk-T56TTOI6.js +53 -0
- package/dist/chunk-T56TTOI6.js.map +1 -0
- package/dist/chunk-T7EFDE2L.js +36 -0
- package/dist/chunk-T7EFDE2L.js.map +1 -0
- package/dist/chunk-VFS3V3VY.js +91 -0
- package/dist/chunk-VFS3V3VY.js.map +1 -0
- package/dist/chunk-VOARBYVQ.js +44 -0
- package/dist/chunk-VOARBYVQ.js.map +1 -0
- package/dist/chunk-WDANALHD.js +95 -0
- package/dist/chunk-WDANALHD.js.map +1 -0
- package/dist/chunk-WSQNPRGN.js +12 -0
- package/dist/chunk-WSQNPRGN.js.map +1 -0
- package/dist/chunk-YPP7QHYT.js +393 -0
- package/dist/chunk-YPP7QHYT.js.map +1 -0
- package/dist/chunk-YTU7BRDW.js +72 -0
- package/dist/chunk-YTU7BRDW.js.map +1 -0
- package/dist/chunk-YYWODLER.js +111 -0
- package/dist/chunk-YYWODLER.js.map +1 -0
- package/dist/chunk-ZOXO3G3I.js +50 -0
- package/dist/chunk-ZOXO3G3I.js.map +1 -0
- package/dist/chunk-ZTFOR3AN.js +79 -0
- package/dist/chunk-ZTFOR3AN.js.map +1 -0
- package/dist/code-block.d.ts +14 -0
- package/dist/code-block.js +5 -0
- package/dist/code-block.js.map +1 -0
- package/dist/combobox.d.ts +26 -0
- package/dist/combobox.js +5 -0
- package/dist/combobox.js.map +1 -0
- package/dist/command-menu.d.ts +52 -0
- package/dist/command-menu.js +7 -0
- package/dist/command-menu.js.map +1 -0
- package/dist/container.d.ts +9 -0
- package/dist/container.js +5 -0
- package/dist/container.js.map +1 -0
- package/dist/cta-band.d.ts +12 -0
- package/dist/cta-band.js +5 -0
- package/dist/cta-band.js.map +1 -0
- package/dist/data-table.d.ts +58 -0
- package/dist/data-table.js +12 -0
- package/dist/data-table.js.map +1 -0
- package/dist/date-picker.d.ts +20 -0
- package/dist/date-picker.js +5 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/dialog.d.ts +21 -0
- package/dist/dialog.js +5 -0
- package/dist/dialog.js.map +1 -0
- package/dist/divider.d.ts +12 -0
- package/dist/divider.js +5 -0
- package/dist/divider.js.map +1 -0
- package/dist/docker-stack-card.d.ts +21 -0
- package/dist/docker-stack-card.js +6 -0
- package/dist/docker-stack-card.js.map +1 -0
- package/dist/donut.d.ts +15 -0
- package/dist/donut.js +5 -0
- package/dist/donut.js.map +1 -0
- package/dist/dropdown-menu.d.ts +15 -0
- package/dist/dropdown-menu.js +5 -0
- package/dist/dropdown-menu.js.map +1 -0
- package/dist/empty.d.ts +12 -0
- package/dist/empty.js +5 -0
- package/dist/empty.js.map +1 -0
- package/dist/feature-card.d.ts +11 -0
- package/dist/feature-card.js +6 -0
- package/dist/feature-card.js.map +1 -0
- package/dist/file-upload.d.ts +20 -0
- package/dist/file-upload.js +5 -0
- package/dist/file-upload.js.map +1 -0
- package/dist/footer.d.ts +35 -0
- package/dist/footer.js +6 -0
- package/dist/footer.js.map +1 -0
- package/dist/form-row.d.ts +19 -0
- package/dist/form-row.js +5 -0
- package/dist/form-row.js.map +1 -0
- package/dist/glow-card.d.ts +14 -0
- package/dist/glow-card.js +5 -0
- package/dist/glow-card.js.map +1 -0
- package/dist/hero-block.d.ts +16 -0
- package/dist/hero-block.js +7 -0
- package/dist/hero-block.js.map +1 -0
- package/dist/host-card.d.ts +27 -0
- package/dist/host-card.js +6 -0
- package/dist/host-card.js.map +1 -0
- package/dist/incident-card.d.ts +23 -0
- package/dist/incident-card.js +5 -0
- package/dist/incident-card.js.map +1 -0
- package/dist/index.d.ts +77 -960
- package/dist/index.js +69 -3812
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +10 -0
- package/dist/input.js +5 -0
- package/dist/input.js.map +1 -0
- package/dist/kbd.d.ts +24 -0
- package/dist/kbd.js +5 -0
- package/dist/kbd.js.map +1 -0
- package/dist/log-viewer.d.ts +35 -0
- package/dist/log-viewer.js +5 -0
- package/dist/log-viewer.js.map +1 -0
- package/dist/meter.d.ts +23 -0
- package/dist/meter.js +5 -0
- package/dist/meter.js.map +1 -0
- package/dist/monogram.d.ts +20 -0
- package/dist/monogram.js +5 -0
- package/dist/monogram.js.map +1 -0
- package/dist/noir-glow-background.d.ts +56 -0
- package/dist/noir-glow-background.js +4 -0
- package/dist/noir-glow-background.js.map +1 -0
- package/dist/pagination.d.ts +16 -0
- package/dist/pagination.js +5 -0
- package/dist/pagination.js.map +1 -0
- package/dist/panel.d.ts +12 -0
- package/dist/panel.js +5 -0
- package/dist/panel.js.map +1 -0
- package/dist/password-input.d.ts +10 -0
- package/dist/password-input.js +5 -0
- package/dist/password-input.js.map +1 -0
- package/dist/pill.d.ts +17 -0
- package/dist/pill.js +5 -0
- package/dist/pill.js.map +1 -0
- package/dist/pricing-card.d.ts +20 -0
- package/dist/pricing-card.js +6 -0
- package/dist/pricing-card.js.map +1 -0
- package/dist/progress.d.ts +6 -0
- package/dist/progress.js +5 -0
- package/dist/progress.js.map +1 -0
- package/dist/radio-group.d.ts +18 -0
- package/dist/radio-group.js +5 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/rollback-plan.d.ts +23 -0
- package/dist/rollback-plan.js +5 -0
- package/dist/rollback-plan.js.map +1 -0
- package/dist/segmented.d.ts +17 -0
- package/dist/segmented.js +5 -0
- package/dist/segmented.js.map +1 -0
- package/dist/select.d.ts +18 -0
- package/dist/select.js +5 -0
- package/dist/select.js.map +1 -0
- package/dist/service-health-card.d.ts +21 -0
- package/dist/service-health-card.js +6 -0
- package/dist/service-health-card.js.map +1 -0
- package/dist/sheet.d.ts +25 -0
- package/dist/sheet.js +5 -0
- package/dist/sheet.js.map +1 -0
- package/dist/skeleton.d.ts +13 -0
- package/dist/skeleton.js +5 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/slider.d.ts +12 -0
- package/dist/slider.js +5 -0
- package/dist/slider.js.map +1 -0
- package/dist/sparkline.d.ts +16 -0
- package/dist/sparkline.js +5 -0
- package/dist/sparkline.js.map +1 -0
- package/dist/stat-card.d.ts +15 -0
- package/dist/stat-card.js +5 -0
- package/dist/stat-card.js.map +1 -0
- package/dist/status-dot.d.ts +13 -0
- package/dist/status-dot.js +5 -0
- package/dist/status-dot.js.map +1 -0
- package/dist/stepper.d.ts +16 -0
- package/dist/stepper.js +5 -0
- package/dist/stepper.js.map +1 -0
- package/dist/switch.d.ts +9 -0
- package/dist/switch.js +5 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.d.ts +9 -0
- package/dist/tabs.js +5 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tag-input.d.ts +20 -0
- package/dist/tag-input.js +5 -0
- package/dist/tag-input.js.map +1 -0
- package/dist/textarea.d.ts +10 -0
- package/dist/textarea.js +5 -0
- package/dist/textarea.js.map +1 -0
- package/dist/timeline.d.ts +30 -0
- package/dist/timeline.js +5 -0
- package/dist/timeline.js.map +1 -0
- package/dist/toaster.d.ts +10 -0
- package/dist/toaster.js +4 -0
- package/dist/toaster.js.map +1 -0
- package/dist/tooltip.d.ts +12 -0
- package/dist/tooltip.js +5 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.js +4 -0
- package/dist/utils.js.map +1 -0
- package/globals-layers.css +1019 -0
- package/globals-v3.css +17 -0
- package/globals-v4.css +2 -0
- package/globals.css +12 -939
- package/package.json +85 -17
- package/registry.json +936 -0
- package/tailwind.css +9 -0
- package/tokens.css +20 -0
- package/tollerud-avatar-full.png +0 -0
- package/dist/index.cjs +0 -3938
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -960
- /package/{tia-full-figure.svg → tollerud-avatar-full.svg} +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { cn } from './chunk-WSQNPRGN.js';
|
|
3
|
+
import { forwardRef, useId, useState } from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var Switch = forwardRef(
|
|
7
|
+
({ className, label, id: idProp, checked, defaultChecked, onChange, ...props }, ref) => {
|
|
8
|
+
const autoId = useId();
|
|
9
|
+
const id = idProp ?? autoId;
|
|
10
|
+
const isControlled = checked !== void 0;
|
|
11
|
+
const [internalChecked, setInternalChecked] = useState(!!defaultChecked);
|
|
12
|
+
const isOn = isControlled ? checked : internalChecked;
|
|
13
|
+
return /* @__PURE__ */ jsxs(
|
|
14
|
+
"label",
|
|
15
|
+
{
|
|
16
|
+
htmlFor: id,
|
|
17
|
+
className: cn(
|
|
18
|
+
"inline-flex items-center gap-2.5 cursor-pointer select-none group",
|
|
19
|
+
"text-sm text-tollerud-text-primary",
|
|
20
|
+
props.disabled && "opacity-40 pointer-events-none cursor-not-allowed",
|
|
21
|
+
className
|
|
22
|
+
),
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ jsxs(
|
|
25
|
+
"span",
|
|
26
|
+
{
|
|
27
|
+
className: cn(
|
|
28
|
+
"relative inline-flex items-center h-5 w-9 flex-shrink-0 rounded-full",
|
|
29
|
+
"transition-colors duration-200 ease-out",
|
|
30
|
+
isOn ? "bg-tollerud-yellow group-hover:bg-tollerud-yellow-warm" : "bg-tollerud-noir-600 group-hover:bg-tollerud-noir-500"
|
|
31
|
+
),
|
|
32
|
+
children: [
|
|
33
|
+
/* @__PURE__ */ jsx(
|
|
34
|
+
"input",
|
|
35
|
+
{
|
|
36
|
+
ref,
|
|
37
|
+
id,
|
|
38
|
+
type: "checkbox",
|
|
39
|
+
role: "switch",
|
|
40
|
+
checked: isOn,
|
|
41
|
+
className: "absolute inset-0 opacity-0 w-full h-full cursor-pointer z-10",
|
|
42
|
+
onChange: (e) => {
|
|
43
|
+
if (!isControlled) setInternalChecked(e.target.checked);
|
|
44
|
+
onChange?.(e);
|
|
45
|
+
},
|
|
46
|
+
...props
|
|
47
|
+
}
|
|
48
|
+
),
|
|
49
|
+
/* @__PURE__ */ jsx(
|
|
50
|
+
"span",
|
|
51
|
+
{
|
|
52
|
+
className: cn(
|
|
53
|
+
"block h-3.5 w-3.5 rounded-full shadow-sm pointer-events-none",
|
|
54
|
+
"transition-all duration-200 ease-out",
|
|
55
|
+
isOn ? "translate-x-[18px] bg-tollerud-black" : "translate-x-[3px] bg-tollerud-white"
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
),
|
|
62
|
+
label && /* @__PURE__ */ jsx("span", { children: label })
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
Switch.displayName = "Switch";
|
|
69
|
+
|
|
70
|
+
export { Switch };
|
|
71
|
+
//# sourceMappingURL=chunk-YTU7BRDW.js.map
|
|
72
|
+
//# sourceMappingURL=chunk-YTU7BRDW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../components/Switch.tsx"],"names":[],"mappings":";;;;AASA,IAAM,MAAA,GAAS,UAAA;AAAA,EACb,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,OAAA,EAAS,cAAA,EAAgB,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACtF,IAAA,MAAM,SAAS,KAAA,EAAM;AACrB,IAAA,MAAM,KAAK,MAAA,IAAU,MAAA;AACrB,IAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,IAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,IAAI,QAAA,CAAS,CAAC,CAAC,cAAc,CAAA;AACvE,IAAA,MAAM,IAAA,GAAO,eAAe,OAAA,GAAU,eAAA;AAEtC,IAAA,uBACE,IAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,UACT,mEAAA;AAAA,UACA,oCAAA;AAAA,UACA,MAAM,QAAA,IAAY,mDAAA;AAAA,UAClB;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,sEAAA;AAAA,gBACA,yCAAA;AAAA,gBACA,OAAO,wDAAA,GAA2D;AAAA,eACpE;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,GAAA;AAAA,oBACA,EAAA;AAAA,oBACA,IAAA,EAAK,UAAA;AAAA,oBACL,IAAA,EAAK,QAAA;AAAA,oBACL,OAAA,EAAS,IAAA;AAAA,oBACT,SAAA,EAAU,8DAAA;AAAA,oBACV,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,sBAAA,IAAI,CAAC,YAAA,EAAc,kBAAA,CAAmB,CAAA,CAAE,OAAO,OAAO,CAAA;AACtD,sBAAA,QAAA,GAAW,CAAC,CAAA;AAAA,oBACd,CAAA;AAAA,oBACC,GAAG;AAAA;AAAA,iBACN;AAAA,gCACA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,8DAAA;AAAA,sBACA,sCAAA;AAAA,sBACA,OAAO,sCAAA,GAAyC;AAAA;AAClD;AAAA;AACF;AAAA;AAAA,WACF;AAAA,UACC,KAAA,oBAAS,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,KACzB;AAAA,EAEJ;AACF;AACA,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-YTU7BRDW.js","sourcesContent":["'use client'\n\nimport { type InputHTMLAttributes, forwardRef, useId, useState } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string\n}\n\nconst Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, label, id: idProp, checked, defaultChecked, onChange, ...props }, ref) => {\n const autoId = useId()\n const id = idProp ?? autoId\n const isControlled = checked !== undefined\n const [internalChecked, setInternalChecked] = useState(!!defaultChecked)\n const isOn = isControlled ? checked : internalChecked\n\n return (\n <label\n htmlFor={id}\n className={cn(\n 'inline-flex items-center gap-2.5 cursor-pointer select-none group',\n 'text-sm text-tollerud-text-primary',\n props.disabled && 'opacity-40 pointer-events-none cursor-not-allowed',\n className\n )}\n >\n <span\n className={cn(\n 'relative inline-flex items-center h-5 w-9 flex-shrink-0 rounded-full',\n 'transition-colors duration-200 ease-out',\n isOn ? 'bg-tollerud-yellow group-hover:bg-tollerud-yellow-warm' : 'bg-tollerud-noir-600 group-hover:bg-tollerud-noir-500'\n )}\n >\n <input\n ref={ref}\n id={id}\n type=\"checkbox\"\n role=\"switch\"\n checked={isOn}\n className=\"absolute inset-0 opacity-0 w-full h-full cursor-pointer z-10\"\n onChange={(e) => {\n if (!isControlled) setInternalChecked(e.target.checked)\n onChange?.(e)\n }}\n {...props}\n />\n <span\n className={cn(\n 'block h-3.5 w-3.5 rounded-full shadow-sm pointer-events-none',\n 'transition-all duration-200 ease-out',\n isOn ? 'translate-x-[18px] bg-tollerud-black' : 'translate-x-[3px] bg-tollerud-white'\n )}\n />\n </span>\n {label && <span>{label}</span>}\n </label>\n )\n }\n)\nSwitch.displayName = 'Switch'\n\nexport { Switch }\n"]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { cn } from './chunk-WSQNPRGN.js';
|
|
3
|
+
import { createContext, forwardRef, useState, useId, useContext } from 'react';
|
|
4
|
+
import { ChevronDown } from 'lucide-react';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var AccordionContext = createContext(null);
|
|
8
|
+
function useAccordionContext(component) {
|
|
9
|
+
const ctx = useContext(AccordionContext);
|
|
10
|
+
if (!ctx) throw new Error(`<${component}> must be used within <Accordion>`);
|
|
11
|
+
return ctx;
|
|
12
|
+
}
|
|
13
|
+
var Accordion = forwardRef(
|
|
14
|
+
({ className, multiple = false, defaultOpen, children, ...props }, ref) => {
|
|
15
|
+
const [openItems, setOpenItems] = useState(() => {
|
|
16
|
+
if (!defaultOpen) return /* @__PURE__ */ new Set();
|
|
17
|
+
return new Set(Array.isArray(defaultOpen) ? defaultOpen : [defaultOpen]);
|
|
18
|
+
});
|
|
19
|
+
const toggle = (value) => {
|
|
20
|
+
setOpenItems((prev) => {
|
|
21
|
+
const next = multiple ? new Set(prev) : /* @__PURE__ */ new Set();
|
|
22
|
+
if (prev.has(value)) {
|
|
23
|
+
next.delete(value);
|
|
24
|
+
} else {
|
|
25
|
+
next.add(value);
|
|
26
|
+
}
|
|
27
|
+
return next;
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
return /* @__PURE__ */ jsx(AccordionContext.Provider, { value: { openItems, toggle }, children: /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col divide-y divide-tollerud-border rounded-lg border border-tollerud-border", className), ...props, children }) });
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
Accordion.displayName = "Accordion";
|
|
34
|
+
var AccordionItemContext = createContext(null);
|
|
35
|
+
var AccordionItem = forwardRef(
|
|
36
|
+
({ className, value, children, ...props }, ref) => {
|
|
37
|
+
const { openItems } = useAccordionContext("AccordionItem");
|
|
38
|
+
const autoId = useId();
|
|
39
|
+
const open = openItems.has(value);
|
|
40
|
+
return /* @__PURE__ */ jsx(
|
|
41
|
+
AccordionItemContext.Provider,
|
|
42
|
+
{
|
|
43
|
+
value: { value, open, triggerId: `${autoId}-trigger`, contentId: `${autoId}-content` },
|
|
44
|
+
children: /* @__PURE__ */ jsx("div", { ref, className: cn("first:rounded-t-lg last:rounded-b-lg", className), ...props, children })
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
AccordionItem.displayName = "AccordionItem";
|
|
50
|
+
function useAccordionItemContext(component) {
|
|
51
|
+
const ctx = useContext(AccordionItemContext);
|
|
52
|
+
if (!ctx) throw new Error(`<${component}> must be used within <AccordionItem>`);
|
|
53
|
+
return ctx;
|
|
54
|
+
}
|
|
55
|
+
var AccordionTrigger = forwardRef(
|
|
56
|
+
({ className, children, ...props }, ref) => {
|
|
57
|
+
const { toggle } = useAccordionContext("AccordionTrigger");
|
|
58
|
+
const { value, open, triggerId, contentId } = useAccordionItemContext("AccordionTrigger");
|
|
59
|
+
return /* @__PURE__ */ jsxs(
|
|
60
|
+
"button",
|
|
61
|
+
{
|
|
62
|
+
ref,
|
|
63
|
+
id: triggerId,
|
|
64
|
+
type: "button",
|
|
65
|
+
"aria-expanded": open,
|
|
66
|
+
"aria-controls": contentId,
|
|
67
|
+
onClick: () => toggle(value),
|
|
68
|
+
className: cn(
|
|
69
|
+
"flex w-full items-center justify-between gap-4 px-4 py-3.5 text-left text-sm font-medium",
|
|
70
|
+
"text-tollerud-text-primary hover:bg-tollerud-surface-hover transition-colors duration-[150ms]",
|
|
71
|
+
className
|
|
72
|
+
),
|
|
73
|
+
...props,
|
|
74
|
+
children: [
|
|
75
|
+
children,
|
|
76
|
+
/* @__PURE__ */ jsx(
|
|
77
|
+
ChevronDown,
|
|
78
|
+
{
|
|
79
|
+
size: 16,
|
|
80
|
+
className: cn("shrink-0 text-tollerud-text-muted transition-transform duration-[200ms]", open && "rotate-180")
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
AccordionTrigger.displayName = "AccordionTrigger";
|
|
89
|
+
var AccordionContent = forwardRef(
|
|
90
|
+
({ className, children, ...props }, ref) => {
|
|
91
|
+
const { open, triggerId, contentId } = useAccordionItemContext("AccordionContent");
|
|
92
|
+
return /* @__PURE__ */ jsx(
|
|
93
|
+
"div",
|
|
94
|
+
{
|
|
95
|
+
ref,
|
|
96
|
+
id: contentId,
|
|
97
|
+
role: "region",
|
|
98
|
+
"aria-labelledby": triggerId,
|
|
99
|
+
hidden: !open,
|
|
100
|
+
className: cn("px-4 pb-4 text-sm text-tollerud-text-secondary", className),
|
|
101
|
+
...props,
|
|
102
|
+
children
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
AccordionContent.displayName = "AccordionContent";
|
|
108
|
+
|
|
109
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
|
|
110
|
+
//# sourceMappingURL=chunk-YYWODLER.js.map
|
|
111
|
+
//# sourceMappingURL=chunk-YYWODLER.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../components/Accordion.tsx"],"names":[],"mappings":";;;;;AAWA,IAAM,gBAAA,GAAmB,cAA4C,IAAI,CAAA;AAEzE,SAAS,oBAAoB,SAAA,EAAmB;AAC9C,EAAA,MAAM,GAAA,GAAM,WAAW,gBAAgB,CAAA;AACvC,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,CAAA,EAAI,SAAS,CAAA,iCAAA,CAAmC,CAAA;AAC1E,EAAA,OAAO,GAAA;AACT;AASA,IAAM,SAAA,GAAY,UAAA;AAAA,EAChB,CAAC,EAAE,SAAA,EAAW,QAAA,GAAW,KAAA,EAAO,aAAa,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACzE,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAsB,MAAM;AAC5D,MAAA,IAAI,CAAC,WAAA,EAAa,uBAAO,IAAI,GAAA,EAAI;AACjC,MAAA,OAAO,IAAI,IAAI,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,GAAI,WAAA,GAAc,CAAC,WAAW,CAAC,CAAA;AAAA,IACzE,CAAC,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,CAAC,KAAA,KAAkB;AAChC,MAAA,YAAA,CAAa,CAAC,IAAA,KAAS;AACrB,QAAA,MAAM,OAAO,QAAA,GAAW,IAAI,IAAI,IAAI,CAAA,uBAAQ,GAAA,EAAY;AACxD,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AACnB,UAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,QACnB,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,QAChB;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,uBACE,GAAA,CAAC,iBAAiB,QAAA,EAAjB,EAA0B,OAAO,EAAE,SAAA,EAAW,QAAO,EACpD,QAAA,kBAAA,GAAA,CAAC,SAAI,GAAA,EAAU,SAAA,EAAW,GAAG,wFAAA,EAA0F,SAAS,GAAI,GAAG,KAAA,EACpI,UACH,CAAA,EACF,CAAA;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AASxB,IAAM,oBAAA,GAAuB,cAAgD,IAAI,CAAA;AAMjF,IAAM,aAAA,GAAgB,UAAA;AAAA,EACpB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AACjD,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,mBAAA,CAAoB,eAAe,CAAA;AACzD,IAAA,MAAM,SAAS,KAAA,EAAM;AACrB,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA;AAEhC,IAAA,uBACE,GAAA;AAAA,MAAC,oBAAA,CAAqB,QAAA;AAAA,MAArB;AAAA,QACC,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,EAAM,SAAA,EAAW,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA,EAAY,SAAA,EAAW,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA,EAAW;AAAA,QAErF,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,wCAAwC,SAAS,CAAA,EAAI,GAAG,KAAA,EAClF,QAAA,EACH;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,SAAS,wBAAwB,SAAA,EAAmB;AAClD,EAAA,MAAM,GAAA,GAAM,WAAW,oBAAoB,CAAA;AAC3C,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,CAAA,EAAI,SAAS,CAAA,qCAAA,CAAuC,CAAA;AAC9E,EAAA,OAAO,GAAA;AACT;AAIA,IAAM,gBAAA,GAAmB,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,mBAAA,CAAoB,kBAAkB,CAAA;AACzD,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAM,WAAW,SAAA,EAAU,GAAI,wBAAwB,kBAAkB,CAAA;AAExF,IAAA,uBACE,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAK,QAAA;AAAA,QACL,eAAA,EAAe,IAAA;AAAA,QACf,eAAA,EAAe,SAAA;AAAA,QACf,OAAA,EAAS,MAAM,MAAA,CAAO,KAAK,CAAA;AAAA,QAC3B,SAAA,EAAW,EAAA;AAAA,UACT,0FAAA;AAAA,UACA,+FAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,0BACD,GAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,EAAA;AAAA,cACN,SAAA,EAAW,EAAA,CAAG,yEAAA,EAA2E,IAAA,IAAQ,YAAY;AAAA;AAAA;AAC/G;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;AAI/B,IAAM,gBAAA,GAAmB,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,EAAU,GAAI,wBAAwB,kBAAkB,CAAA;AAEjF,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAK,QAAA;AAAA,QACL,iBAAA,EAAiB,SAAA;AAAA,QACjB,QAAQ,CAAC,IAAA;AAAA,QACT,SAAA,EAAW,EAAA,CAAG,gDAAA,EAAkD,SAAS,CAAA;AAAA,QACxE,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"chunk-YYWODLER.js","sourcesContent":["'use client'\n\nimport { type HTMLAttributes, createContext, forwardRef, useContext, useId, useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\ninterface AccordionContextValue {\n openItems: Set<string>\n toggle: (value: string) => void\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null)\n\nfunction useAccordionContext(component: string) {\n const ctx = useContext(AccordionContext)\n if (!ctx) throw new Error(`<${component}> must be used within <Accordion>`)\n return ctx\n}\n\nexport interface AccordionProps extends HTMLAttributes<HTMLDivElement> {\n /** Allow multiple items to be open at once */\n multiple?: boolean\n /** Initially open item value(s) */\n defaultOpen?: string | string[]\n}\n\nconst Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n ({ className, multiple = false, defaultOpen, children, ...props }, ref) => {\n const [openItems, setOpenItems] = useState<Set<string>>(() => {\n if (!defaultOpen) return new Set()\n return new Set(Array.isArray(defaultOpen) ? defaultOpen : [defaultOpen])\n })\n\n const toggle = (value: string) => {\n setOpenItems((prev) => {\n const next = multiple ? new Set(prev) : new Set<string>()\n if (prev.has(value)) {\n next.delete(value)\n } else {\n next.add(value)\n }\n return next\n })\n }\n\n return (\n <AccordionContext.Provider value={{ openItems, toggle }}>\n <div ref={ref} className={cn('flex flex-col divide-y divide-tollerud-border rounded-lg border border-tollerud-border', className)} {...props}>\n {children}\n </div>\n </AccordionContext.Provider>\n )\n }\n)\nAccordion.displayName = 'Accordion'\n\ninterface AccordionItemContextValue {\n value: string\n open: boolean\n triggerId: string\n contentId: string\n}\n\nconst AccordionItemContext = createContext<AccordionItemContextValue | null>(null)\n\nexport interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {\n value: string\n}\n\nconst AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ className, value, children, ...props }, ref) => {\n const { openItems } = useAccordionContext('AccordionItem')\n const autoId = useId()\n const open = openItems.has(value)\n\n return (\n <AccordionItemContext.Provider\n value={{ value, open, triggerId: `${autoId}-trigger`, contentId: `${autoId}-content` }}\n >\n <div ref={ref} className={cn('first:rounded-t-lg last:rounded-b-lg', className)} {...props}>\n {children}\n </div>\n </AccordionItemContext.Provider>\n )\n }\n)\nAccordionItem.displayName = 'AccordionItem'\n\nfunction useAccordionItemContext(component: string) {\n const ctx = useContext(AccordionItemContext)\n if (!ctx) throw new Error(`<${component}> must be used within <AccordionItem>`)\n return ctx\n}\n\nexport type AccordionTriggerProps = HTMLAttributes<HTMLButtonElement>\n\nconst AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({ className, children, ...props }, ref) => {\n const { toggle } = useAccordionContext('AccordionTrigger')\n const { value, open, triggerId, contentId } = useAccordionItemContext('AccordionTrigger')\n\n return (\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n aria-expanded={open}\n aria-controls={contentId}\n onClick={() => toggle(value)}\n className={cn(\n 'flex w-full items-center justify-between gap-4 px-4 py-3.5 text-left text-sm font-medium',\n 'text-tollerud-text-primary hover:bg-tollerud-surface-hover transition-colors duration-[150ms]',\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown\n size={16}\n className={cn('shrink-0 text-tollerud-text-muted transition-transform duration-[200ms]', open && 'rotate-180')}\n />\n </button>\n )\n }\n)\nAccordionTrigger.displayName = 'AccordionTrigger'\n\nexport type AccordionContentProps = HTMLAttributes<HTMLDivElement>\n\nconst AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ className, children, ...props }, ref) => {\n const { open, triggerId, contentId } = useAccordionItemContext('AccordionContent')\n\n return (\n <div\n ref={ref}\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!open}\n className={cn('px-4 pb-4 text-sm text-tollerud-text-secondary', className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nAccordionContent.displayName = 'AccordionContent'\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { cn } from './chunk-WSQNPRGN.js';
|
|
3
|
+
import { useRef, useState } from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function GlowCard({
|
|
7
|
+
children,
|
|
8
|
+
className,
|
|
9
|
+
glowColor = "var(--tollerud-accent, #FFFF00)",
|
|
10
|
+
intensity = 0.15
|
|
11
|
+
}) {
|
|
12
|
+
const ref = useRef(null);
|
|
13
|
+
const [pos, setPos] = useState({ x: 0, y: 0 });
|
|
14
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
15
|
+
const handleMouseMove = (e) => {
|
|
16
|
+
if (!ref.current) return;
|
|
17
|
+
const rect = ref.current.getBoundingClientRect();
|
|
18
|
+
setPos({
|
|
19
|
+
x: (e.clientX - rect.left) / rect.width * 100,
|
|
20
|
+
y: (e.clientY - rect.top) / rect.height * 100
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
return /* @__PURE__ */ jsxs(
|
|
24
|
+
"div",
|
|
25
|
+
{
|
|
26
|
+
ref,
|
|
27
|
+
className: cn("relative overflow-hidden", className),
|
|
28
|
+
onMouseMove: handleMouseMove,
|
|
29
|
+
onMouseEnter: () => setIsHovered(true),
|
|
30
|
+
onMouseLeave: () => setIsHovered(false),
|
|
31
|
+
children: [
|
|
32
|
+
/* @__PURE__ */ jsx(
|
|
33
|
+
"div",
|
|
34
|
+
{
|
|
35
|
+
className: "pointer-events-none absolute inset-0 transition-opacity duration-300",
|
|
36
|
+
style: {
|
|
37
|
+
opacity: isHovered ? 1 : 0,
|
|
38
|
+
background: `radial-gradient(600px circle at ${pos.x}% ${pos.y}%, ${glowColor} ${intensity * 100}%, transparent 70%)`
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
),
|
|
42
|
+
/* @__PURE__ */ jsx("div", { className: "relative z-10", children })
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { GlowCard };
|
|
49
|
+
//# sourceMappingURL=chunk-ZOXO3G3I.js.map
|
|
50
|
+
//# sourceMappingURL=chunk-ZOXO3G3I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../components/GlowCard.tsx"],"names":[],"mappings":";;;;AAgBA,SAAS,QAAA,CAAS;AAAA,EAChB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY,iCAAA;AAAA,EACZ,SAAA,GAAY;AACd,CAAA,EAAkB;AAChB,EAAA,MAAM,GAAA,GAAM,OAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA;AAC7C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAwC;AAC/D,IAAA,IAAI,CAAC,IAAI,OAAA,EAAS;AAClB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,qBAAA,EAAsB;AAC/C,IAAA,MAAA,CAAO;AAAA,MACL,IAAK,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,IAAA,IAAQ,KAAK,KAAA,GAAS,GAAA;AAAA,MAC5C,IAAK,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,GAAA,IAAO,KAAK,MAAA,GAAU;AAAA,KAC7C,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,MACnD,WAAA,EAAa,eAAA;AAAA,MACb,YAAA,EAAc,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MACrC,YAAA,EAAc,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,MAGtC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,sEAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,YAAY,CAAA,GAAI,CAAA;AAAA,cACzB,UAAA,EAAY,CAAA,gCAAA,EAAmC,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,GAAA,EAAM,SAAS,CAAA,CAAA,EAAI,SAAA,GAAY,GAAG,CAAA,mBAAA;AAAA;AAClG;AAAA,SACF;AAAA,wBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAS;AAAA;AAAA;AAAA,GAC3C;AAEJ","file":"chunk-ZOXO3G3I.js","sourcesContent":["'use client'\n\nimport { useRef, useState, type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\n/* ──────────────────── GlowCard (cursor-follow glow wrapper) ──────────────────── */\n\nexport interface GlowCardProps {\n children: ReactNode\n className?: string\n /** Color of the glow. Default: accent yellow */\n glowColor?: string\n /** Glow intensity (0–1). Default: 0.15 */\n intensity?: number\n}\n\nfunction GlowCard({\n children,\n className,\n glowColor = 'var(--tollerud-accent, #FFFF00)',\n intensity = 0.15,\n}: GlowCardProps) {\n const ref = useRef<HTMLDivElement>(null)\n const [pos, setPos] = useState({ x: 0, y: 0 })\n const [isHovered, setIsHovered] = useState(false)\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!ref.current) return\n const rect = ref.current.getBoundingClientRect()\n setPos({\n x: ((e.clientX - rect.left) / rect.width) * 100,\n y: ((e.clientY - rect.top) / rect.height) * 100,\n })\n }\n\n return (\n <div\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n onMouseMove={handleMouseMove}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Follow-cursor glow */}\n <div\n className=\"pointer-events-none absolute inset-0 transition-opacity duration-300\"\n style={{\n opacity: isHovered ? 1 : 0,\n background: `radial-gradient(600px circle at ${pos.x}% ${pos.y}%, ${glowColor} ${intensity * 100}%, transparent 70%)`,\n }}\n />\n {/* Content */}\n <div className=\"relative z-10\">{children}</div>\n </div>\n )\n}\n\nexport { GlowCard }\nexport default GlowCard"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { NoirGlowBackground } from './chunk-QQHBEACI.js';
|
|
3
|
+
import { Pill } from './chunk-JFOW2DI5.js';
|
|
4
|
+
import { cn } from './chunk-WSQNPRGN.js';
|
|
5
|
+
import { forwardRef } from 'react';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var HeroBlock = forwardRef(
|
|
9
|
+
({
|
|
10
|
+
className,
|
|
11
|
+
eyebrow,
|
|
12
|
+
title,
|
|
13
|
+
description,
|
|
14
|
+
actions,
|
|
15
|
+
media,
|
|
16
|
+
minHeight = 280,
|
|
17
|
+
intense = false,
|
|
18
|
+
...props
|
|
19
|
+
}, ref) => {
|
|
20
|
+
const hasMedia = !!media;
|
|
21
|
+
return /* @__PURE__ */ jsxs(
|
|
22
|
+
"div",
|
|
23
|
+
{
|
|
24
|
+
ref,
|
|
25
|
+
className: cn(
|
|
26
|
+
"relative overflow-hidden rounded-xl border border-tollerud-border bg-black",
|
|
27
|
+
className
|
|
28
|
+
),
|
|
29
|
+
style: { minHeight },
|
|
30
|
+
...props,
|
|
31
|
+
children: [
|
|
32
|
+
intense ? /* @__PURE__ */ jsx(NoirGlowBackground, { intensity: "loud", speed: "medium" }) : /* @__PURE__ */ jsx("div", { className: "tollerud-noir-glow-bg absolute inset-0 opacity-50", "aria-hidden": "true" }),
|
|
33
|
+
/* @__PURE__ */ jsx(
|
|
34
|
+
"div",
|
|
35
|
+
{
|
|
36
|
+
className: cn(
|
|
37
|
+
"tollerud-grid-bg absolute inset-0",
|
|
38
|
+
intense ? "opacity-25" : "opacity-50"
|
|
39
|
+
),
|
|
40
|
+
"aria-hidden": "true"
|
|
41
|
+
}
|
|
42
|
+
),
|
|
43
|
+
/* @__PURE__ */ jsxs(
|
|
44
|
+
"div",
|
|
45
|
+
{
|
|
46
|
+
className: cn(
|
|
47
|
+
"relative flex items-center gap-6 px-11 py-12",
|
|
48
|
+
hasMedia ? "grid grid-cols-[1.4fr_1fr]" : "block"
|
|
49
|
+
),
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ jsxs("div", { className: cn(!hasMedia && "max-w-[560px]"), children: [
|
|
52
|
+
eyebrow && /* @__PURE__ */ jsx(Pill, { variant: "outline", className: "mb-0", children: eyebrow }),
|
|
53
|
+
/* @__PURE__ */ jsx(
|
|
54
|
+
"h2",
|
|
55
|
+
{
|
|
56
|
+
className: cn(
|
|
57
|
+
"tollerud-display text-[40px] text-tollerud-text-primary",
|
|
58
|
+
eyebrow && "mt-[18px]"
|
|
59
|
+
),
|
|
60
|
+
children: title
|
|
61
|
+
}
|
|
62
|
+
),
|
|
63
|
+
description && /* @__PURE__ */ jsx("p", { className: "mt-3.5 text-[15.5px] leading-relaxed text-tollerud-text-primary/70", children: description }),
|
|
64
|
+
actions && /* @__PURE__ */ jsx("div", { className: "mt-6 flex flex-wrap items-center gap-3", children: actions })
|
|
65
|
+
] }),
|
|
66
|
+
hasMedia && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center", children: media })
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
HeroBlock.displayName = "HeroBlock";
|
|
76
|
+
|
|
77
|
+
export { HeroBlock };
|
|
78
|
+
//# sourceMappingURL=chunk-ZTFOR3AN.js.map
|
|
79
|
+
//# sourceMappingURL=chunk-ZTFOR3AN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../components/HeroBlock.tsx"],"names":[],"mappings":";;;;;;AAgBA,IAAM,SAAA,GAAY,UAAA;AAAA,EAChB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,GAAY,GAAA;AAAA,IACZ,OAAA,GAAU,KAAA;AAAA,IACV,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,QAAA,GAAW,CAAC,CAAC,KAAA;AAEnB,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,4EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,EAAE,SAAA,EAAU;AAAA,QAClB,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,OAAA,mBACC,GAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAU,MAAA,EAAO,KAAA,EAAM,QAAA,EAAS,CAAA,mBAEpD,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,0BAExF,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,mCAAA;AAAA,gBACA,UAAU,YAAA,GAAe;AAAA,eAC3B;AAAA,cACA,aAAA,EAAY;AAAA;AAAA,WACd;AAAA,0BACA,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,8CAAA;AAAA,gBACA,WAAW,4BAAA,GAA+B;AAAA,eAC5C;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,IAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,CAAC,QAAA,IAAY,eAAe,CAAA,EAC5C,QAAA,EAAA;AAAA,kBAAA,OAAA,wBACE,IAAA,EAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,QAC/B,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,kCAEF,GAAA;AAAA,oBAAC,IAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA;AAAA,wBACT,yDAAA;AAAA,wBACA,OAAA,IAAW;AAAA,uBACb;AAAA,sBAEC,QAAA,EAAA;AAAA;AAAA,mBACH;AAAA,kBACC,WAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sEACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,kBAED,OAAA,oBAAW,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAA0C,QAAA,EAAA,OAAA,EAAQ;AAAA,iBAAA,EAC/E,CAAA;AAAA,gBACC,QAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAoC,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA;AAE7D;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,WAAA","file":"chunk-ZTFOR3AN.js","sourcesContent":["import { type HTMLAttributes, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport { Pill } from './Pill'\nimport { NoirGlowBackground } from './NoirGlowBackground'\n\nexport interface HeroBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n eyebrow?: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n actions?: React.ReactNode\n media?: React.ReactNode\n minHeight?: number\n /** When true, renders the live shader background via NoirGlowBackground. */\n intense?: boolean\n}\n\nconst HeroBlock = forwardRef<HTMLDivElement, HeroBlockProps>(\n (\n {\n className,\n eyebrow,\n title,\n description,\n actions,\n media,\n minHeight = 280,\n intense = false,\n ...props\n },\n ref\n ) => {\n const hasMedia = !!media\n\n return (\n <div\n ref={ref}\n className={cn(\n 'relative overflow-hidden rounded-xl border border-tollerud-border bg-black',\n className\n )}\n style={{ minHeight }}\n {...props}\n >\n {intense ? (\n <NoirGlowBackground intensity=\"loud\" speed=\"medium\" />\n ) : (\n <div className=\"tollerud-noir-glow-bg absolute inset-0 opacity-50\" aria-hidden=\"true\" />\n )}\n <div\n className={cn(\n 'tollerud-grid-bg absolute inset-0',\n intense ? 'opacity-25' : 'opacity-50'\n )}\n aria-hidden=\"true\"\n />\n <div\n className={cn(\n 'relative flex items-center gap-6 px-11 py-12',\n hasMedia ? 'grid grid-cols-[1.4fr_1fr]' : 'block'\n )}\n >\n <div className={cn(!hasMedia && 'max-w-[560px]')}>\n {eyebrow && (\n <Pill variant=\"outline\" className=\"mb-0\">\n {eyebrow}\n </Pill>\n )}\n <h2\n className={cn(\n 'tollerud-display text-[40px] text-tollerud-text-primary',\n eyebrow && 'mt-[18px]'\n )}\n >\n {title}\n </h2>\n {description && (\n <p className=\"mt-3.5 text-[15.5px] leading-relaxed text-tollerud-text-primary/70\">\n {description}\n </p>\n )}\n {actions && <div className=\"mt-6 flex flex-wrap items-center gap-3\">{actions}</div>}\n </div>\n {hasMedia && (\n <div className=\"flex items-center justify-center\">{media}</div>\n )}\n </div>\n </div>\n )\n }\n)\nHeroBlock.displayName = 'HeroBlock'\n\nexport { HeroBlock }\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { HTMLAttributes } from 'react';
|
|
3
|
+
|
|
4
|
+
interface CodeBlockProps extends HTMLAttributes<HTMLPreElement> {
|
|
5
|
+
/** Optional string content to render inside <code> tags */
|
|
6
|
+
code?: string;
|
|
7
|
+
/** When true, prepends a prompt symbol ($) before text content */
|
|
8
|
+
promptPrefix?: boolean;
|
|
9
|
+
/** When false, hides the copy-to-clipboard button (default: true) */
|
|
10
|
+
showCopy?: boolean;
|
|
11
|
+
}
|
|
12
|
+
declare const CodeBlock: react.ForwardRefExoticComponent<CodeBlockProps & react.RefAttributes<HTMLPreElement>>;
|
|
13
|
+
|
|
14
|
+
export { CodeBlock, type CodeBlockProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"code-block.js"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
|
|
3
|
+
interface ComboboxOption {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface ComboboxProps {
|
|
9
|
+
options: ComboboxOption[];
|
|
10
|
+
value?: string;
|
|
11
|
+
defaultValue?: string;
|
|
12
|
+
onChange?: (value: string) => void;
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
label?: string;
|
|
15
|
+
error?: string;
|
|
16
|
+
/** Filter predicate, defaults to a case-insensitive substring match on the label */
|
|
17
|
+
filter?: (option: ComboboxOption, query: string) => boolean;
|
|
18
|
+
className?: string;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
}
|
|
21
|
+
declare function Combobox({ options, value: valueProp, defaultValue, onChange, placeholder, label, error, filter, className, disabled, }: ComboboxProps): react.JSX.Element;
|
|
22
|
+
declare namespace Combobox {
|
|
23
|
+
var displayName: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { Combobox, type ComboboxOption, type ComboboxProps };
|
package/dist/combobox.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"combobox.js"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ActionItem } from './action-row.js';
|
|
3
|
+
|
|
4
|
+
interface CommandGroup {
|
|
5
|
+
/** Group label (e.g. "Servers", "Actions") */
|
|
6
|
+
label: string;
|
|
7
|
+
/** Items in this group */
|
|
8
|
+
items: ActionItem[];
|
|
9
|
+
}
|
|
10
|
+
interface CommandMenuProps {
|
|
11
|
+
/** Whether the menu is open */
|
|
12
|
+
open: boolean;
|
|
13
|
+
/** Called when menu should close */
|
|
14
|
+
onOpenChange: (open: boolean) => void;
|
|
15
|
+
/** Command groups to display */
|
|
16
|
+
groups: CommandGroup[];
|
|
17
|
+
/** Placeholder text for the search input */
|
|
18
|
+
placeholder?: string;
|
|
19
|
+
/** Empty state message when no results */
|
|
20
|
+
emptyMessage?: string;
|
|
21
|
+
/** Custom class for the overlay */
|
|
22
|
+
className?: string;
|
|
23
|
+
/** Keyboard shortcut to toggle (default: "⌘K") */
|
|
24
|
+
toggleShortcut?: string;
|
|
25
|
+
/** Custom search filter override. Return filtered groups. */
|
|
26
|
+
filter?: (query: string, groups: CommandGroup[]) => CommandGroup[];
|
|
27
|
+
/** Callback when an action runs */
|
|
28
|
+
onAction?: (action: ActionItem) => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Command palette — a Raycast-inspired global command menu.
|
|
32
|
+
*
|
|
33
|
+
* ```tsx
|
|
34
|
+
* const [open, setOpen] = useState(false)
|
|
35
|
+
*
|
|
36
|
+
* <CommandMenu
|
|
37
|
+
* open={open}
|
|
38
|
+
* onOpenChange={setOpen}
|
|
39
|
+
* groups={[
|
|
40
|
+
* {
|
|
41
|
+
* label: 'Servers',
|
|
42
|
+
* items: [
|
|
43
|
+
* { id: 'emma', label: 'Emma', icon: <Server />, onSelect: () => {} },
|
|
44
|
+
* ],
|
|
45
|
+
* },
|
|
46
|
+
* ]}
|
|
47
|
+
* />
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
declare const CommandMenu: react.ForwardRefExoticComponent<CommandMenuProps & react.RefAttributes<HTMLDivElement>>;
|
|
51
|
+
|
|
52
|
+
export { type CommandGroup, CommandMenu, type CommandMenuProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"command-menu.js"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { HTMLAttributes } from 'react';
|
|
3
|
+
|
|
4
|
+
interface ContainerProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
as?: 'div' | 'section' | 'article' | 'main' | 'header' | 'footer';
|
|
6
|
+
}
|
|
7
|
+
declare const Container: react.ForwardRefExoticComponent<ContainerProps & react.RefAttributes<HTMLDivElement>>;
|
|
8
|
+
|
|
9
|
+
export { Container, type ContainerProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"container.js"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { HTMLAttributes } from 'react';
|
|
3
|
+
|
|
4
|
+
interface CTABandProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
5
|
+
title: React.ReactNode;
|
|
6
|
+
description?: React.ReactNode;
|
|
7
|
+
actions?: React.ReactNode;
|
|
8
|
+
accentBar?: boolean;
|
|
9
|
+
}
|
|
10
|
+
declare const CTABand: react.ForwardRefExoticComponent<CTABandProps & react.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
|
|
12
|
+
export { CTABand, type CTABandProps };
|
package/dist/cta-band.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"cta-band.js"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface Column<T> {
|
|
5
|
+
key: string;
|
|
6
|
+
label: string;
|
|
7
|
+
sortable?: boolean;
|
|
8
|
+
filterable?: boolean;
|
|
9
|
+
align?: 'left' | 'center' | 'right';
|
|
10
|
+
width?: string;
|
|
11
|
+
render?: (value: unknown, row: T) => ReactNode;
|
|
12
|
+
}
|
|
13
|
+
interface DataTableFilter {
|
|
14
|
+
key: string;
|
|
15
|
+
options?: string[];
|
|
16
|
+
allLabel?: string;
|
|
17
|
+
}
|
|
18
|
+
interface DataTableBulkAction {
|
|
19
|
+
label: string;
|
|
20
|
+
variant?: 'primary' | 'secondary' | 'ghost' | 'destructive' | 'terminal';
|
|
21
|
+
icon?: ReactNode;
|
|
22
|
+
onRun: (selectedIds: (string | number)[], clearSelection: () => void) => void;
|
|
23
|
+
}
|
|
24
|
+
interface DataTableRowMenuItem {
|
|
25
|
+
label: string;
|
|
26
|
+
onSelect?: () => void;
|
|
27
|
+
icon?: ReactNode;
|
|
28
|
+
sep?: boolean;
|
|
29
|
+
heading?: boolean;
|
|
30
|
+
}
|
|
31
|
+
interface DataTableProps<T extends Record<string, unknown>> {
|
|
32
|
+
columns: Column<T>[];
|
|
33
|
+
/** Row data — use `data` or `rows` (alias). */
|
|
34
|
+
data?: T[];
|
|
35
|
+
rows?: T[];
|
|
36
|
+
/** Row key extractor — defaults to `row.id` or `row.key` */
|
|
37
|
+
rowKey?: keyof T | ((row: T) => string | number);
|
|
38
|
+
onRowClick?: (row: T) => void;
|
|
39
|
+
className?: string;
|
|
40
|
+
emptyMessage?: string;
|
|
41
|
+
/** Global search across `searchKeys` (or all column keys). */
|
|
42
|
+
searchable?: boolean;
|
|
43
|
+
searchKeys?: (keyof T | string)[];
|
|
44
|
+
searchPlaceholder?: string;
|
|
45
|
+
/** Segmented filter on a single column value. */
|
|
46
|
+
filter?: DataTableFilter;
|
|
47
|
+
selectable?: boolean;
|
|
48
|
+
pageSize?: number;
|
|
49
|
+
bulkActions?: DataTableBulkAction[];
|
|
50
|
+
rowMenu?: (row: T) => DataTableRowMenuItem[];
|
|
51
|
+
toolbarRight?: ReactNode;
|
|
52
|
+
emptyState?: ReactNode;
|
|
53
|
+
loading?: boolean;
|
|
54
|
+
skeletonRows?: number;
|
|
55
|
+
}
|
|
56
|
+
declare const DataTable: react.ForwardRefExoticComponent<DataTableProps<Record<string, unknown>> & react.RefAttributes<HTMLDivElement>>;
|
|
57
|
+
|
|
58
|
+
export { type Column, DataTable, type DataTableBulkAction, type DataTableFilter, type DataTableProps, type DataTableRowMenuItem };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
export { DataTable } from './chunk-YPP7QHYT.js';
|
|
3
|
+
import './chunk-AQT3FZRQ.js';
|
|
4
|
+
import './chunk-NSMU66ZX.js';
|
|
5
|
+
import './chunk-RJTDQOT2.js';
|
|
6
|
+
import './chunk-435JHF7G.js';
|
|
7
|
+
import './chunk-T3TQPOVM.js';
|
|
8
|
+
import './chunk-QEHTPQHL.js';
|
|
9
|
+
import './chunk-ADE22JSR.js';
|
|
10
|
+
import './chunk-WSQNPRGN.js';
|
|
11
|
+
//# sourceMappingURL=data-table.js.map
|
|
12
|
+
//# sourceMappingURL=data-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"data-table.js"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
|
|
3
|
+
interface DatePickerProps {
|
|
4
|
+
value?: Date | null;
|
|
5
|
+
defaultValue?: Date | null;
|
|
6
|
+
onChange?: (date: Date | null) => void;
|
|
7
|
+
label?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
/** Format a date for display in the input (defaults to locale short date) */
|
|
11
|
+
formatDate?: (date: Date) => string;
|
|
12
|
+
className?: string;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare function DatePicker({ value: valueProp, defaultValue, onChange, label, error, placeholder, formatDate, className, disabled, }: DatePickerProps): react.JSX.Element;
|
|
16
|
+
declare namespace DatePicker {
|
|
17
|
+
var displayName: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { DatePicker, type DatePickerProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"date-picker.js"}
|