@popgrids/ui 0.0.29 → 0.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/banner-notification.cjs.map +1 -1
- package/dist/banner-notification.js.map +1 -1
- package/dist/button-link.cjs +10 -4
- package/dist/button-link.cjs.map +1 -1
- package/dist/button-link.d.cts +8 -4
- package/dist/button-link.d.ts +8 -4
- package/dist/button-link.js +10 -4
- package/dist/button-link.js.map +1 -1
- package/dist/button.cjs +45 -25
- package/dist/button.cjs.map +1 -1
- package/dist/button.d.cts +2 -2
- package/dist/button.d.ts +2 -2
- package/dist/button.js +45 -25
- package/dist/button.js.map +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.cjs.map +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.js.map +1 -1
- package/dist/content-block.cjs +4 -4
- package/dist/content-block.cjs.map +1 -1
- package/dist/content-block.js +5 -5
- package/dist/content-block.js.map +1 -1
- package/dist/default-header.cjs +59 -0
- package/dist/default-header.cjs.map +1 -0
- package/dist/default-header.d.cts +19 -0
- package/dist/default-header.d.ts +19 -0
- package/dist/default-header.js +57 -0
- package/dist/default-header.js.map +1 -0
- package/dist/dialog.cjs +62 -46
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.js +62 -46
- package/dist/dialog.js.map +1 -1
- package/dist/dropdown-menu-B_GCzleM.d.cts +32 -0
- package/dist/dropdown-menu-B_GCzleM.d.ts +32 -0
- package/dist/dropdown-menu.cjs +17 -32
- package/dist/dropdown-menu.cjs.map +1 -1
- package/dist/dropdown-menu.d.cts +43 -29
- package/dist/dropdown-menu.d.ts +43 -29
- package/dist/dropdown-menu.js +17 -32
- package/dist/dropdown-menu.js.map +1 -1
- package/dist/footer.cjs +35 -155
- package/dist/footer.cjs.map +1 -1
- package/dist/footer.d.cts +7 -6
- package/dist/footer.d.ts +7 -6
- package/dist/footer.js +36 -156
- package/dist/footer.js.map +1 -1
- package/dist/index.cjs +676 -309
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +667 -310
- package/dist/index.js.map +1 -1
- package/dist/input-group.cjs +182 -0
- package/dist/input-group.cjs.map +1 -0
- package/dist/input-group.d.cts +42 -0
- package/dist/input-group.d.ts +42 -0
- package/dist/input-group.js +175 -0
- package/dist/input-group.js.map +1 -0
- package/dist/input.cjs +3 -3
- package/dist/input.cjs.map +1 -1
- package/dist/input.js +3 -3
- package/dist/input.js.map +1 -1
- package/dist/label.cjs +1 -1
- package/dist/label.cjs.map +1 -1
- package/dist/label.js +1 -1
- package/dist/label.js.map +1 -1
- package/dist/loader.cjs +12 -15
- package/dist/loader.cjs.map +1 -1
- package/dist/loader.js +13 -16
- package/dist/loader.js.map +1 -1
- package/dist/logo.cjs +311 -0
- package/dist/logo.cjs.map +1 -0
- package/dist/logo.d.cts +39 -0
- package/dist/logo.d.ts +39 -0
- package/dist/logo.js +309 -0
- package/dist/logo.js.map +1 -0
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/notification-badge.cjs.map +1 -1
- package/dist/notification-badge.js.map +1 -1
- package/dist/section-header.cjs +28 -45
- package/dist/section-header.cjs.map +1 -1
- package/dist/section-header.d.cts +1 -1
- package/dist/section-header.d.ts +1 -1
- package/dist/section-header.js +28 -45
- package/dist/section-header.js.map +1 -1
- package/dist/tag.cjs +6 -6
- package/dist/tag.cjs.map +1 -1
- package/dist/tag.js +6 -6
- package/dist/tag.js.map +1 -1
- package/dist/template-header.cjs +28 -0
- package/dist/template-header.cjs.map +1 -0
- package/dist/template-header.d.cts +13 -0
- package/dist/template-header.d.ts +13 -0
- package/dist/template-header.js +26 -0
- package/dist/template-header.js.map +1 -0
- package/dist/textarea.cjs +27 -0
- package/dist/textarea.cjs.map +1 -0
- package/dist/textarea.d.cts +10 -0
- package/dist/textarea.d.ts +10 -0
- package/dist/textarea.js +25 -0
- package/dist/textarea.js.map +1 -0
- package/dist/theme.css +229 -27
- package/dist/tooltip.cjs +5 -15
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.d.cts +1 -1
- package/dist/tooltip.d.ts +1 -1
- package/dist/tooltip.js +5 -15
- package/dist/tooltip.js.map +1 -1
- package/package.json +63 -3
package/dist/section-header.cjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var icons = require('@untitledui/icons');
|
|
4
|
-
var react = require('react');
|
|
5
4
|
var clsx = require('clsx');
|
|
6
5
|
var tailwindMerge = require('tailwind-merge');
|
|
7
6
|
var tooltip = require('@base-ui/react/tooltip');
|
|
@@ -39,20 +38,20 @@ function TooltipContent({
|
|
|
39
38
|
{
|
|
40
39
|
"data-slot": "tooltip-content",
|
|
41
40
|
className: cn(
|
|
42
|
-
"data-open:
|
|
41
|
+
"data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 w-fit max-w-xs origin-(--transform-origin) rounded-md bg-foreground px-3 py-1.5 text-background text-xs data-[state=delayed-open]:animate-in data-closed:animate-out data-open:animate-in",
|
|
43
42
|
className
|
|
44
43
|
),
|
|
45
44
|
...props,
|
|
46
45
|
children: [
|
|
47
46
|
children,
|
|
48
|
-
/* @__PURE__ */ jsxRuntime.jsx(tooltip.Tooltip.Arrow, { className: "flex data-[side=bottom]:-top-[6px] data-[side=
|
|
47
|
+
/* @__PURE__ */ jsxRuntime.jsx(tooltip.Tooltip.Arrow, { className: "flex data-[side=bottom]:-top-[6px] data-[side=left]:right-[-13px] data-[side=top]:-bottom-[6px] data-[side=right]:left-[-13px] data-[side=bottom]:rotate-0 data-[side=left]:rotate-90 data-[side=right]:-rotate-90 data-[side=top]:rotate-180", children: /* @__PURE__ */ jsxRuntime.jsx(TooltipArrow, {}) })
|
|
49
48
|
]
|
|
50
49
|
}
|
|
51
50
|
)
|
|
52
51
|
}
|
|
53
52
|
) });
|
|
54
53
|
}
|
|
55
|
-
var TooltipArrow = (
|
|
54
|
+
var TooltipArrow = (_props) => {
|
|
56
55
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
57
56
|
"svg",
|
|
58
57
|
{
|
|
@@ -74,43 +73,34 @@ var TooltipArrow = (props) => {
|
|
|
74
73
|
}
|
|
75
74
|
);
|
|
76
75
|
};
|
|
76
|
+
function computeLabelText(required, numberChecked, min, max) {
|
|
77
|
+
if (required) {
|
|
78
|
+
if (numberChecked === 0) {
|
|
79
|
+
return `${min}\u2013${max} Required`;
|
|
80
|
+
}
|
|
81
|
+
return `${numberChecked} selected of ${max}`;
|
|
82
|
+
}
|
|
83
|
+
if (max === 0 && min === 0) {
|
|
84
|
+
return "1 Optional";
|
|
85
|
+
}
|
|
86
|
+
if (numberChecked === 0) {
|
|
87
|
+
return `Up to ${max}`;
|
|
88
|
+
}
|
|
89
|
+
return `${numberChecked} selected of ${max}`;
|
|
90
|
+
}
|
|
77
91
|
function SectionHeader({
|
|
78
92
|
className = void 0,
|
|
79
93
|
flourish = void 0,
|
|
80
94
|
heading = void 0,
|
|
81
95
|
icon = void 0,
|
|
82
|
-
label = void 0,
|
|
96
|
+
label: _label = void 0,
|
|
83
97
|
min = void 0,
|
|
84
98
|
max = void 0,
|
|
85
99
|
required = false,
|
|
86
100
|
description = void 0,
|
|
87
101
|
numberChecked = 0
|
|
88
102
|
}) {
|
|
89
|
-
const
|
|
90
|
-
const updateLabel = react.useCallback(() => {
|
|
91
|
-
if (required) {
|
|
92
|
-
if (numberChecked === 0) {
|
|
93
|
-
setLabelText(`${min}\u2013${max} Required`);
|
|
94
|
-
}
|
|
95
|
-
if (numberChecked > 0) {
|
|
96
|
-
setLabelText(`${numberChecked} selected of ${max}`);
|
|
97
|
-
}
|
|
98
|
-
} else {
|
|
99
|
-
if (max === 0 && min === 0) {
|
|
100
|
-
setLabelText("1 Optional");
|
|
101
|
-
} else {
|
|
102
|
-
if (numberChecked === 0) {
|
|
103
|
-
setLabelText(`Up to ${max}`);
|
|
104
|
-
}
|
|
105
|
-
if (numberChecked > 0) {
|
|
106
|
-
setLabelText(`${numberChecked} selected of ${max}`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}, [required, numberChecked, min, max]);
|
|
111
|
-
react.useEffect(() => {
|
|
112
|
-
updateLabel();
|
|
113
|
-
}, [updateLabel]);
|
|
103
|
+
const labelText = computeLabelText(required, numberChecked, min, max);
|
|
114
104
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
115
105
|
"div",
|
|
116
106
|
{
|
|
@@ -123,24 +113,17 @@ function SectionHeader({
|
|
|
123
113
|
},
|
|
124
114
|
className
|
|
125
115
|
),
|
|
126
|
-
children: flourish ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xl
|
|
127
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1 text-sm
|
|
128
|
-
icon
|
|
116
|
+
children: flourish ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-normal text-xl", children: flourish }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
117
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1 font-semibold text-sm uppercase", children: heading != null && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
118
|
+
icon != null && icon,
|
|
129
119
|
heading
|
|
130
120
|
] }) }),
|
|
131
|
-
min && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
132
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm
|
|
133
|
-
required && numberChecked >= min || !required && numberChecked > 0 ? /* @__PURE__ */ jsxRuntime.jsx(icons.Check, { className: "size-5" }) :
|
|
121
|
+
min != null && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
122
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-normal text-sm", children: labelText }),
|
|
123
|
+
required && numberChecked >= min || !required && numberChecked > 0 ? /* @__PURE__ */ jsxRuntime.jsx(icons.Check, { className: "size-5" }) : description && /* @__PURE__ */ jsxRuntime.jsxs(Tooltip, { children: [
|
|
134
124
|
/* @__PURE__ */ jsxRuntime.jsx(TooltipTrigger, { render: /* @__PURE__ */ jsxRuntime.jsx(icons.InfoCircle, { className: "size-5" }) }),
|
|
135
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
136
|
-
|
|
137
|
-
{
|
|
138
|
-
sideOffset: 2,
|
|
139
|
-
alignOffset: 5,
|
|
140
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: description })
|
|
141
|
-
}
|
|
142
|
-
)
|
|
143
|
-
] }) })
|
|
125
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipContent, { sideOffset: 2, alignOffset: 5, children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: description }) })
|
|
126
|
+
] })
|
|
144
127
|
] })
|
|
145
128
|
] })
|
|
146
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/components/tooltip/tooltip.tsx","../src/components/section-header/section-header.tsx"],"names":["twMerge","clsx","TooltipPrimitive","jsx","jsxs","useState","useCallback","useEffect","Fragment","Check","InfoCircle"],"mappings":"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","file":"section-header.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction TooltipProvider({\n delay = 0,\n ...props\n}: TooltipPrimitive.Provider.Props) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delay}\n {...props}\n />\n )\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<\n TooltipPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n \"data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 bg-foreground text-background z-50 w-fit max-w-xs origin-(--transform-origin) rounded-md px-3 py-1.5 text-xs\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"flex data-[side=bottom]:-top-[6px] data-[side=bottom]:rotate-0 data-[side=left]:right-[-13px] data-[side=left]:rotate-90 data-[side=right]:left-[-13px] data-[side=right]:-rotate-90 data-[side=top]:-bottom-[6px] data-[side=top]:rotate-180\">\n <TooltipArrow />\n </TooltipPrimitive.Arrow>\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport const TooltipArrow = (props: React.ComponentProps<\"svg\">) => {\n return (\n <svg\n width=\"20\"\n height=\"6\"\n viewBox=\"382.134 241.548 20 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Tooltip Arrow</title>\n <path\n className=\"fill-foreground\"\n d=\"M 382.134 247.548 C 390.116 247.548 389.506 241.548 392.134 241.548 C 394.762 241.548 394.152 247.548 402.134 247.548\"\n />\n </svg>\n );\n};\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","\"use client\";\n\nimport { Check, InfoCircle } from \"@untitledui/icons\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../tooltip/tooltip\";\nimport { SectionHeaderProps } from \"./types\";\n\nexport function SectionHeader({\n className = undefined,\n flourish = undefined,\n heading = undefined,\n icon = undefined,\n label = undefined,\n min = undefined,\n max = undefined,\n required = false,\n description = undefined,\n numberChecked = 0,\n}: SectionHeaderProps) {\n const [labelText, setLabelText] = useState(\"\");\n\n const updateLabel = useCallback(() => {\n if (required) {\n // Required\n if (numberChecked === 0) {\n setLabelText(`${min}–${max} Required`);\n }\n if (numberChecked > 0) {\n setLabelText(`${numberChecked} selected of ${max}`);\n }\n } else {\n // Optional\n if (max === 0 && min === 0) {\n setLabelText(\"1 Optional\");\n } else {\n if (numberChecked === 0) {\n setLabelText(`Up to ${max}`);\n }\n if (numberChecked > 0) {\n setLabelText(`${numberChecked} selected of ${max}`);\n }\n }\n }\n }, [required, numberChecked, min, max]);\n\n useEffect(() => {\n updateLabel();\n }, [updateLabel]);\n\n return (\n <div\n className={cn(\n \"flex w-full items-center\",\n {\n \"justify-center py-8\": flourish,\n \"h-[30px] shrink-0 flex-wrap content-center justify-between gap-y-3 pb-1.5\": !flourish,\n \"border-foreground border-b-[0.3px]\": !flourish,\n },\n className,\n )}\n >\n {flourish ? (\n <span className=\"text-xl font-normal\">{flourish}</span>\n ) : (\n <>\n <div className=\"flex items-center gap-1 text-sm font-semibold uppercase\">\n {heading && (\n <>\n {icon && <>{icon}</>}\n {heading}\n </>\n )}\n </div>\n {min && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"text-sm font-normal\">{labelText}</div>\n {(required && numberChecked >= min) || (!required && numberChecked > 0) ? (\n <Check className=\"size-5\" />\n ) : (\n <>\n {description && (\n <Tooltip>\n <TooltipTrigger render={<InfoCircle className=\"size-5\" />} />\n <TooltipContent\n sideOffset={2}\n alignOffset={5}\n >\n <p>{description}</p>\n </TooltipContent>\n </Tooltip>\n )}\n </>\n )}\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/tooltip/tooltip.tsx","../src/components/section-header/section-header.tsx"],"names":["twMerge","clsx","TooltipPrimitive","jsx","jsxs","Fragment","Check","InfoCircle"],"mappings":"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","file":"section-header.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction TooltipProvider({ delay = 0, ...props }: TooltipPrimitive.Provider.Props) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delay={delay} {...props} />;\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<TooltipPrimitive.Positioner.Props, \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\">) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n \"data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 w-fit max-w-xs origin-(--transform-origin) rounded-md bg-foreground px-3 py-1.5 text-background text-xs data-[state=delayed-open]:animate-in data-closed:animate-out data-open:animate-in\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"flex data-[side=bottom]:-top-[6px] data-[side=left]:right-[-13px] data-[side=top]:-bottom-[6px] data-[side=right]:left-[-13px] data-[side=bottom]:rotate-0 data-[side=left]:rotate-90 data-[side=right]:-rotate-90 data-[side=top]:rotate-180\">\n <TooltipArrow />\n </TooltipPrimitive.Arrow>\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport const TooltipArrow = (_props: React.ComponentProps<\"svg\">) => {\n return (\n <svg\n width=\"20\"\n height=\"6\"\n viewBox=\"382.134 241.548 20 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Tooltip Arrow</title>\n <path\n className=\"fill-foreground\"\n d=\"M 382.134 247.548 C 390.116 247.548 389.506 241.548 392.134 241.548 C 394.762 241.548 394.152 247.548 402.134 247.548\"\n />\n </svg>\n );\n};\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","\"use client\";\n\nimport { Check, InfoCircle } from \"@untitledui/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../tooltip/tooltip\";\nimport type { SectionHeaderProps } from \"./types\";\n\nfunction computeLabelText(\n required: boolean,\n numberChecked: number,\n min: number | undefined,\n max: number | undefined,\n): string {\n if (required) {\n if (numberChecked === 0) {\n return `${min}–${max} Required`;\n }\n return `${numberChecked} selected of ${max}`;\n }\n if (max === 0 && min === 0) {\n return \"1 Optional\";\n }\n if (numberChecked === 0) {\n return `Up to ${max}`;\n }\n return `${numberChecked} selected of ${max}`;\n}\n\nexport function SectionHeader({\n className = undefined,\n flourish = undefined,\n heading = undefined,\n icon = undefined,\n label: _label = undefined,\n min = undefined,\n max = undefined,\n required = false,\n description = undefined,\n numberChecked = 0,\n}: SectionHeaderProps) {\n const labelText = computeLabelText(required, numberChecked, min, max);\n\n return (\n <div\n className={cn(\n \"flex w-full items-center\",\n {\n \"justify-center py-8\": flourish,\n \"h-[30px] shrink-0 flex-wrap content-center justify-between gap-y-3 pb-1.5\": !flourish,\n \"border-foreground border-b-[0.3px]\": !flourish,\n },\n className,\n )}\n >\n {flourish ? (\n <span className=\"font-normal text-xl\">{flourish}</span>\n ) : (\n <>\n <div className=\"flex items-center gap-1 font-semibold text-sm uppercase\">\n {heading != null && (\n <>\n {icon != null && icon}\n {heading}\n </>\n )}\n </div>\n {min != null && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"font-normal text-sm\">{labelText}</div>\n {(required && numberChecked >= min) || (!required && numberChecked > 0) ? (\n <Check className=\"size-5\" />\n ) : (\n description && (\n <Tooltip>\n <TooltipTrigger render={<InfoCircle className=\"size-5\" />} />\n <TooltipContent sideOffset={2} alignOffset={5}>\n <p>{description}</p>\n </TooltipContent>\n </Tooltip>\n )\n )}\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -13,6 +13,6 @@ interface SectionHeaderProps {
|
|
|
13
13
|
numberChecked?: number;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
declare function SectionHeader({ className, flourish, heading, icon, label, min, max, required, description, numberChecked, }: SectionHeaderProps): react_jsx_runtime.JSX.Element;
|
|
16
|
+
declare function SectionHeader({ className, flourish, heading, icon, label: _label, min, max, required, description, numberChecked, }: SectionHeaderProps): react_jsx_runtime.JSX.Element;
|
|
17
17
|
|
|
18
18
|
export { SectionHeader, type SectionHeaderProps };
|
package/dist/section-header.d.ts
CHANGED
|
@@ -13,6 +13,6 @@ interface SectionHeaderProps {
|
|
|
13
13
|
numberChecked?: number;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
declare function SectionHeader({ className, flourish, heading, icon, label, min, max, required, description, numberChecked, }: SectionHeaderProps): react_jsx_runtime.JSX.Element;
|
|
16
|
+
declare function SectionHeader({ className, flourish, heading, icon, label: _label, min, max, required, description, numberChecked, }: SectionHeaderProps): react_jsx_runtime.JSX.Element;
|
|
17
17
|
|
|
18
18
|
export { SectionHeader, type SectionHeaderProps };
|
package/dist/section-header.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Check, InfoCircle } from '@untitledui/icons';
|
|
2
|
-
import { useState, useCallback, useEffect } from 'react';
|
|
3
2
|
import { clsx } from 'clsx';
|
|
4
3
|
import { twMerge } from 'tailwind-merge';
|
|
5
4
|
import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
|
|
@@ -37,20 +36,20 @@ function TooltipContent({
|
|
|
37
36
|
{
|
|
38
37
|
"data-slot": "tooltip-content",
|
|
39
38
|
className: cn(
|
|
40
|
-
"data-open:
|
|
39
|
+
"data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 w-fit max-w-xs origin-(--transform-origin) rounded-md bg-foreground px-3 py-1.5 text-background text-xs data-[state=delayed-open]:animate-in data-closed:animate-out data-open:animate-in",
|
|
41
40
|
className
|
|
42
41
|
),
|
|
43
42
|
...props,
|
|
44
43
|
children: [
|
|
45
44
|
children,
|
|
46
|
-
/* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "flex data-[side=bottom]:-top-[6px] data-[side=
|
|
45
|
+
/* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "flex data-[side=bottom]:-top-[6px] data-[side=left]:right-[-13px] data-[side=top]:-bottom-[6px] data-[side=right]:left-[-13px] data-[side=bottom]:rotate-0 data-[side=left]:rotate-90 data-[side=right]:-rotate-90 data-[side=top]:rotate-180", children: /* @__PURE__ */ jsx(TooltipArrow, {}) })
|
|
47
46
|
]
|
|
48
47
|
}
|
|
49
48
|
)
|
|
50
49
|
}
|
|
51
50
|
) });
|
|
52
51
|
}
|
|
53
|
-
var TooltipArrow = (
|
|
52
|
+
var TooltipArrow = (_props) => {
|
|
54
53
|
return /* @__PURE__ */ jsxs(
|
|
55
54
|
"svg",
|
|
56
55
|
{
|
|
@@ -72,43 +71,34 @@ var TooltipArrow = (props) => {
|
|
|
72
71
|
}
|
|
73
72
|
);
|
|
74
73
|
};
|
|
74
|
+
function computeLabelText(required, numberChecked, min, max) {
|
|
75
|
+
if (required) {
|
|
76
|
+
if (numberChecked === 0) {
|
|
77
|
+
return `${min}\u2013${max} Required`;
|
|
78
|
+
}
|
|
79
|
+
return `${numberChecked} selected of ${max}`;
|
|
80
|
+
}
|
|
81
|
+
if (max === 0 && min === 0) {
|
|
82
|
+
return "1 Optional";
|
|
83
|
+
}
|
|
84
|
+
if (numberChecked === 0) {
|
|
85
|
+
return `Up to ${max}`;
|
|
86
|
+
}
|
|
87
|
+
return `${numberChecked} selected of ${max}`;
|
|
88
|
+
}
|
|
75
89
|
function SectionHeader({
|
|
76
90
|
className = void 0,
|
|
77
91
|
flourish = void 0,
|
|
78
92
|
heading = void 0,
|
|
79
93
|
icon = void 0,
|
|
80
|
-
label = void 0,
|
|
94
|
+
label: _label = void 0,
|
|
81
95
|
min = void 0,
|
|
82
96
|
max = void 0,
|
|
83
97
|
required = false,
|
|
84
98
|
description = void 0,
|
|
85
99
|
numberChecked = 0
|
|
86
100
|
}) {
|
|
87
|
-
const
|
|
88
|
-
const updateLabel = useCallback(() => {
|
|
89
|
-
if (required) {
|
|
90
|
-
if (numberChecked === 0) {
|
|
91
|
-
setLabelText(`${min}\u2013${max} Required`);
|
|
92
|
-
}
|
|
93
|
-
if (numberChecked > 0) {
|
|
94
|
-
setLabelText(`${numberChecked} selected of ${max}`);
|
|
95
|
-
}
|
|
96
|
-
} else {
|
|
97
|
-
if (max === 0 && min === 0) {
|
|
98
|
-
setLabelText("1 Optional");
|
|
99
|
-
} else {
|
|
100
|
-
if (numberChecked === 0) {
|
|
101
|
-
setLabelText(`Up to ${max}`);
|
|
102
|
-
}
|
|
103
|
-
if (numberChecked > 0) {
|
|
104
|
-
setLabelText(`${numberChecked} selected of ${max}`);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}, [required, numberChecked, min, max]);
|
|
109
|
-
useEffect(() => {
|
|
110
|
-
updateLabel();
|
|
111
|
-
}, [updateLabel]);
|
|
101
|
+
const labelText = computeLabelText(required, numberChecked, min, max);
|
|
112
102
|
return /* @__PURE__ */ jsx(
|
|
113
103
|
"div",
|
|
114
104
|
{
|
|
@@ -121,24 +111,17 @@ function SectionHeader({
|
|
|
121
111
|
},
|
|
122
112
|
className
|
|
123
113
|
),
|
|
124
|
-
children: flourish ? /* @__PURE__ */ jsx("span", { className: "text-xl
|
|
125
|
-
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1 text-sm
|
|
126
|
-
icon
|
|
114
|
+
children: flourish ? /* @__PURE__ */ jsx("span", { className: "font-normal text-xl", children: flourish }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
115
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1 font-semibold text-sm uppercase", children: heading != null && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
116
|
+
icon != null && icon,
|
|
127
117
|
heading
|
|
128
118
|
] }) }),
|
|
129
|
-
min && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
130
|
-
/* @__PURE__ */ jsx("div", { className: "text-sm
|
|
131
|
-
required && numberChecked >= min || !required && numberChecked > 0 ? /* @__PURE__ */ jsx(Check, { className: "size-5" }) :
|
|
119
|
+
min != null && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
120
|
+
/* @__PURE__ */ jsx("div", { className: "font-normal text-sm", children: labelText }),
|
|
121
|
+
required && numberChecked >= min || !required && numberChecked > 0 ? /* @__PURE__ */ jsx(Check, { className: "size-5" }) : description && /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
132
122
|
/* @__PURE__ */ jsx(TooltipTrigger, { render: /* @__PURE__ */ jsx(InfoCircle, { className: "size-5" }) }),
|
|
133
|
-
/* @__PURE__ */ jsx(
|
|
134
|
-
|
|
135
|
-
{
|
|
136
|
-
sideOffset: 2,
|
|
137
|
-
alignOffset: 5,
|
|
138
|
-
children: /* @__PURE__ */ jsx("p", { children: description })
|
|
139
|
-
}
|
|
140
|
-
)
|
|
141
|
-
] }) })
|
|
123
|
+
/* @__PURE__ */ jsx(TooltipContent, { sideOffset: 2, alignOffset: 5, children: /* @__PURE__ */ jsx("p", { children: description }) })
|
|
124
|
+
] })
|
|
142
125
|
] })
|
|
143
126
|
] })
|
|
144
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/components/tooltip/tooltip.tsx","../src/components/section-header/section-header.tsx"],"names":["TooltipPrimitive","jsx","jsxs"],"mappings":"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","file":"section-header.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction TooltipProvider({\n delay = 0,\n ...props\n}: TooltipPrimitive.Provider.Props) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delay}\n {...props}\n />\n )\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<\n TooltipPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n \"data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 bg-foreground text-background z-50 w-fit max-w-xs origin-(--transform-origin) rounded-md px-3 py-1.5 text-xs\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"flex data-[side=bottom]:-top-[6px] data-[side=bottom]:rotate-0 data-[side=left]:right-[-13px] data-[side=left]:rotate-90 data-[side=right]:left-[-13px] data-[side=right]:-rotate-90 data-[side=top]:-bottom-[6px] data-[side=top]:rotate-180\">\n <TooltipArrow />\n </TooltipPrimitive.Arrow>\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport const TooltipArrow = (props: React.ComponentProps<\"svg\">) => {\n return (\n <svg\n width=\"20\"\n height=\"6\"\n viewBox=\"382.134 241.548 20 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Tooltip Arrow</title>\n <path\n className=\"fill-foreground\"\n d=\"M 382.134 247.548 C 390.116 247.548 389.506 241.548 392.134 241.548 C 394.762 241.548 394.152 247.548 402.134 247.548\"\n />\n </svg>\n );\n};\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","\"use client\";\n\nimport { Check, InfoCircle } from \"@untitledui/icons\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../tooltip/tooltip\";\nimport { SectionHeaderProps } from \"./types\";\n\nexport function SectionHeader({\n className = undefined,\n flourish = undefined,\n heading = undefined,\n icon = undefined,\n label = undefined,\n min = undefined,\n max = undefined,\n required = false,\n description = undefined,\n numberChecked = 0,\n}: SectionHeaderProps) {\n const [labelText, setLabelText] = useState(\"\");\n\n const updateLabel = useCallback(() => {\n if (required) {\n // Required\n if (numberChecked === 0) {\n setLabelText(`${min}–${max} Required`);\n }\n if (numberChecked > 0) {\n setLabelText(`${numberChecked} selected of ${max}`);\n }\n } else {\n // Optional\n if (max === 0 && min === 0) {\n setLabelText(\"1 Optional\");\n } else {\n if (numberChecked === 0) {\n setLabelText(`Up to ${max}`);\n }\n if (numberChecked > 0) {\n setLabelText(`${numberChecked} selected of ${max}`);\n }\n }\n }\n }, [required, numberChecked, min, max]);\n\n useEffect(() => {\n updateLabel();\n }, [updateLabel]);\n\n return (\n <div\n className={cn(\n \"flex w-full items-center\",\n {\n \"justify-center py-8\": flourish,\n \"h-[30px] shrink-0 flex-wrap content-center justify-between gap-y-3 pb-1.5\": !flourish,\n \"border-foreground border-b-[0.3px]\": !flourish,\n },\n className,\n )}\n >\n {flourish ? (\n <span className=\"text-xl font-normal\">{flourish}</span>\n ) : (\n <>\n <div className=\"flex items-center gap-1 text-sm font-semibold uppercase\">\n {heading && (\n <>\n {icon && <>{icon}</>}\n {heading}\n </>\n )}\n </div>\n {min && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"text-sm font-normal\">{labelText}</div>\n {(required && numberChecked >= min) || (!required && numberChecked > 0) ? (\n <Check className=\"size-5\" />\n ) : (\n <>\n {description && (\n <Tooltip>\n <TooltipTrigger render={<InfoCircle className=\"size-5\" />} />\n <TooltipContent\n sideOffset={2}\n alignOffset={5}\n >\n <p>{description}</p>\n </TooltipContent>\n </Tooltip>\n )}\n </>\n )}\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/tooltip/tooltip.tsx","../src/components/section-header/section-header.tsx"],"names":["TooltipPrimitive","jsx","jsxs"],"mappings":"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","file":"section-header.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction TooltipProvider({ delay = 0, ...props }: TooltipPrimitive.Provider.Props) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delay={delay} {...props} />;\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<TooltipPrimitive.Positioner.Props, \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\">) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n \"data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 w-fit max-w-xs origin-(--transform-origin) rounded-md bg-foreground px-3 py-1.5 text-background text-xs data-[state=delayed-open]:animate-in data-closed:animate-out data-open:animate-in\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"flex data-[side=bottom]:-top-[6px] data-[side=left]:right-[-13px] data-[side=top]:-bottom-[6px] data-[side=right]:left-[-13px] data-[side=bottom]:rotate-0 data-[side=left]:rotate-90 data-[side=right]:-rotate-90 data-[side=top]:rotate-180\">\n <TooltipArrow />\n </TooltipPrimitive.Arrow>\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport const TooltipArrow = (_props: React.ComponentProps<\"svg\">) => {\n return (\n <svg\n width=\"20\"\n height=\"6\"\n viewBox=\"382.134 241.548 20 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Tooltip Arrow</title>\n <path\n className=\"fill-foreground\"\n d=\"M 382.134 247.548 C 390.116 247.548 389.506 241.548 392.134 241.548 C 394.762 241.548 394.152 247.548 402.134 247.548\"\n />\n </svg>\n );\n};\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","\"use client\";\n\nimport { Check, InfoCircle } from \"@untitledui/icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../tooltip/tooltip\";\nimport type { SectionHeaderProps } from \"./types\";\n\nfunction computeLabelText(\n required: boolean,\n numberChecked: number,\n min: number | undefined,\n max: number | undefined,\n): string {\n if (required) {\n if (numberChecked === 0) {\n return `${min}–${max} Required`;\n }\n return `${numberChecked} selected of ${max}`;\n }\n if (max === 0 && min === 0) {\n return \"1 Optional\";\n }\n if (numberChecked === 0) {\n return `Up to ${max}`;\n }\n return `${numberChecked} selected of ${max}`;\n}\n\nexport function SectionHeader({\n className = undefined,\n flourish = undefined,\n heading = undefined,\n icon = undefined,\n label: _label = undefined,\n min = undefined,\n max = undefined,\n required = false,\n description = undefined,\n numberChecked = 0,\n}: SectionHeaderProps) {\n const labelText = computeLabelText(required, numberChecked, min, max);\n\n return (\n <div\n className={cn(\n \"flex w-full items-center\",\n {\n \"justify-center py-8\": flourish,\n \"h-[30px] shrink-0 flex-wrap content-center justify-between gap-y-3 pb-1.5\": !flourish,\n \"border-foreground border-b-[0.3px]\": !flourish,\n },\n className,\n )}\n >\n {flourish ? (\n <span className=\"font-normal text-xl\">{flourish}</span>\n ) : (\n <>\n <div className=\"flex items-center gap-1 font-semibold text-sm uppercase\">\n {heading != null && (\n <>\n {icon != null && icon}\n {heading}\n </>\n )}\n </div>\n {min != null && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"font-normal text-sm\">{labelText}</div>\n {(required && numberChecked >= min) || (!required && numberChecked > 0) ? (\n <Check className=\"size-5\" />\n ) : (\n description && (\n <Tooltip>\n <TooltipTrigger render={<InfoCircle className=\"size-5\" />} />\n <TooltipContent sideOffset={2} alignOffset={5}>\n <p>{description}</p>\n </TooltipContent>\n </Tooltip>\n )\n )}\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n"]}
|
package/dist/tag.cjs
CHANGED
|
@@ -14,8 +14,8 @@ var tagVariants = classVarianceAuthority.cva(
|
|
|
14
14
|
{
|
|
15
15
|
variants: {
|
|
16
16
|
selected: {
|
|
17
|
-
false: "text-primary
|
|
18
|
-
true: "bg-primary
|
|
17
|
+
false: "text-primary ring ring-primary ring-offset-0 focus-visible:bg-primary focus-visible:text-primary",
|
|
18
|
+
true: "bg-primary text-primary-foreground dark:text-primary-foreground focus-visible:bg-primary focus-visible:text-primary-foreground dark:focus-visible:bg-primary dark:focus-visible:text-primary-foreground"
|
|
19
19
|
},
|
|
20
20
|
interactive: {
|
|
21
21
|
false: null,
|
|
@@ -41,23 +41,23 @@ var tagVariants = classVarianceAuthority.cva(
|
|
|
41
41
|
{
|
|
42
42
|
interactive: true,
|
|
43
43
|
selected: false,
|
|
44
|
-
class: "hover:ring-2 hover:ring-primary
|
|
44
|
+
class: "hover:ring-2 hover:ring-primary active:ring-1"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
interactive: true,
|
|
48
48
|
selected: true,
|
|
49
|
-
class: "hover:bg-primary
|
|
49
|
+
class: "hover:bg-primary/90"
|
|
50
50
|
},
|
|
51
51
|
// Interactive active states
|
|
52
52
|
{
|
|
53
53
|
interactive: true,
|
|
54
54
|
selected: false,
|
|
55
|
-
class: "active:ring active:ring-primary
|
|
55
|
+
class: "active:ring active:ring-primary"
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
interactive: true,
|
|
59
59
|
selected: true,
|
|
60
|
-
class: "active:bg-primary
|
|
60
|
+
class: "active:bg-primary"
|
|
61
61
|
},
|
|
62
62
|
// Size variants (non-collapsed)
|
|
63
63
|
{
|
package/dist/tag.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/components/tag/tag.tsx"],"names":["twMerge","clsx","cva","jsxs","Fragment","jsx"],"mappings":";;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACEA,IAAM,WAAA,GAAcC,0BAAA;AAAA;AAAA,EAElB,iQAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,QAAA,EAAU;AAAA,QACR,KAAA,EACE,
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/tag/tag.tsx"],"names":["twMerge","clsx","cva","jsxs","Fragment","jsx"],"mappings":"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","file":"tag.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport type { KeyboardEvent } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { TagProps } from \"./types\";\n\nconst tagVariants = cva(\n // Base styles\n \"inline-flex items-center justify-center rounded-full box-border relative font-medium text-sm leading-5 text-center whitespace-nowrap appearance-none focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/60 focus-visible:ring-offset-0\",\n {\n variants: {\n selected: {\n false:\n \"text-primary ring ring-primary ring-offset-0 focus-visible:bg-primary focus-visible:text-primary\",\n true: \"bg-primary text-primary-foreground dark:text-primary-foreground focus-visible:bg-primary focus-visible:text-primary-foreground dark:focus-visible:bg-primary dark:focus-visible:text-primary-foreground\",\n },\n interactive: {\n false: null,\n true: \"cursor-pointer\",\n },\n size: {\n md: null,\n lg: null,\n },\n collapsed: {\n false: null,\n true: null,\n },\n },\n defaultVariants: {\n selected: false,\n interactive: false,\n size: \"md\",\n collapsed: false,\n },\n compoundVariants: [\n // Interactive hover states\n {\n interactive: true,\n selected: false,\n class: \"hover:ring-2 hover:ring-primary active:ring-1\",\n },\n {\n interactive: true,\n selected: true,\n class: \"hover:bg-primary/90\",\n },\n // Interactive active states\n {\n interactive: true,\n selected: false,\n class: \"active:ring active:ring-primary\",\n },\n {\n interactive: true,\n selected: true,\n class: \"active:bg-primary\",\n },\n // Size variants (non-collapsed)\n {\n size: \"md\",\n collapsed: false,\n class: \"px-2 py-1.5 gap-0.5\",\n },\n {\n size: \"lg\",\n collapsed: false,\n class: \"px-3 py-2.5 gap-1\",\n },\n // Collapsed size adjustments\n {\n size: \"md\",\n collapsed: true,\n class: \"p-1.5 w-8 h-8\",\n },\n {\n size: \"lg\",\n collapsed: true,\n class: \"p-2.5 w-10 h-10\",\n },\n ],\n },\n);\n\nexport function Tag({\n size = \"md\",\n selected = false,\n collapsed = false,\n children,\n leading,\n trailing,\n interactive,\n type,\n onClick,\n className = \"\",\n}: TagProps) {\n const handleClick = () => {\n if (onClick) {\n onClick();\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement | HTMLDivElement>) => {\n if (onClick && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n onClick();\n }\n };\n\n const showLeading = leading && !collapsed;\n const showTrailing = trailing && !collapsed;\n\n // Explicit interactive prop takes precedence; otherwise detect from onClick\n const isInteractive = interactive ?? typeof onClick === \"function\";\n const TagElement = isInteractive ? \"button\" : \"div\";\n\n return (\n <TagElement\n className={cn(\n tagVariants({\n size,\n selected,\n collapsed,\n interactive: isInteractive,\n }),\n className,\n )}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n type={isInteractive ? (type ?? \"button\") : undefined}\n >\n {!collapsed && (\n <>\n {showLeading && (\n <div className=\"flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit\">\n {leading}\n </div>\n )}\n <div className=\"flex items-center justify-center px-1 first:pl-0 last:pr-0\">\n {children}\n </div>\n {showTrailing && (\n <div className=\"flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit\">\n {trailing}\n </div>\n )}\n </>\n )}\n\n {collapsed && (\n <div className=\"flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit\">\n {leading || trailing}\n </div>\n )}\n </TagElement>\n );\n}\n"]}
|
package/dist/tag.js
CHANGED
|
@@ -12,8 +12,8 @@ var tagVariants = cva(
|
|
|
12
12
|
{
|
|
13
13
|
variants: {
|
|
14
14
|
selected: {
|
|
15
|
-
false: "text-primary
|
|
16
|
-
true: "bg-primary
|
|
15
|
+
false: "text-primary ring ring-primary ring-offset-0 focus-visible:bg-primary focus-visible:text-primary",
|
|
16
|
+
true: "bg-primary text-primary-foreground dark:text-primary-foreground focus-visible:bg-primary focus-visible:text-primary-foreground dark:focus-visible:bg-primary dark:focus-visible:text-primary-foreground"
|
|
17
17
|
},
|
|
18
18
|
interactive: {
|
|
19
19
|
false: null,
|
|
@@ -39,23 +39,23 @@ var tagVariants = cva(
|
|
|
39
39
|
{
|
|
40
40
|
interactive: true,
|
|
41
41
|
selected: false,
|
|
42
|
-
class: "hover:ring-2 hover:ring-primary
|
|
42
|
+
class: "hover:ring-2 hover:ring-primary active:ring-1"
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
45
|
interactive: true,
|
|
46
46
|
selected: true,
|
|
47
|
-
class: "hover:bg-primary
|
|
47
|
+
class: "hover:bg-primary/90"
|
|
48
48
|
},
|
|
49
49
|
// Interactive active states
|
|
50
50
|
{
|
|
51
51
|
interactive: true,
|
|
52
52
|
selected: false,
|
|
53
|
-
class: "active:ring active:ring-primary
|
|
53
|
+
class: "active:ring active:ring-primary"
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
interactive: true,
|
|
57
57
|
selected: true,
|
|
58
|
-
class: "active:bg-primary
|
|
58
|
+
class: "active:bg-primary"
|
|
59
59
|
},
|
|
60
60
|
// Size variants (non-collapsed)
|
|
61
61
|
{
|
package/dist/tag.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/components/tag/tag.tsx"],"names":[],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACEA,IAAM,WAAA,GAAc,GAAA;AAAA;AAAA,EAElB,iQAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,QAAA,EAAU;AAAA,QACR,KAAA,EACE,
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/tag/tag.tsx"],"names":[],"mappings":"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","file":"tag.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport type { KeyboardEvent } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { TagProps } from \"./types\";\n\nconst tagVariants = cva(\n // Base styles\n \"inline-flex items-center justify-center rounded-full box-border relative font-medium text-sm leading-5 text-center whitespace-nowrap appearance-none focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/60 focus-visible:ring-offset-0\",\n {\n variants: {\n selected: {\n false:\n \"text-primary ring ring-primary ring-offset-0 focus-visible:bg-primary focus-visible:text-primary\",\n true: \"bg-primary text-primary-foreground dark:text-primary-foreground focus-visible:bg-primary focus-visible:text-primary-foreground dark:focus-visible:bg-primary dark:focus-visible:text-primary-foreground\",\n },\n interactive: {\n false: null,\n true: \"cursor-pointer\",\n },\n size: {\n md: null,\n lg: null,\n },\n collapsed: {\n false: null,\n true: null,\n },\n },\n defaultVariants: {\n selected: false,\n interactive: false,\n size: \"md\",\n collapsed: false,\n },\n compoundVariants: [\n // Interactive hover states\n {\n interactive: true,\n selected: false,\n class: \"hover:ring-2 hover:ring-primary active:ring-1\",\n },\n {\n interactive: true,\n selected: true,\n class: \"hover:bg-primary/90\",\n },\n // Interactive active states\n {\n interactive: true,\n selected: false,\n class: \"active:ring active:ring-primary\",\n },\n {\n interactive: true,\n selected: true,\n class: \"active:bg-primary\",\n },\n // Size variants (non-collapsed)\n {\n size: \"md\",\n collapsed: false,\n class: \"px-2 py-1.5 gap-0.5\",\n },\n {\n size: \"lg\",\n collapsed: false,\n class: \"px-3 py-2.5 gap-1\",\n },\n // Collapsed size adjustments\n {\n size: \"md\",\n collapsed: true,\n class: \"p-1.5 w-8 h-8\",\n },\n {\n size: \"lg\",\n collapsed: true,\n class: \"p-2.5 w-10 h-10\",\n },\n ],\n },\n);\n\nexport function Tag({\n size = \"md\",\n selected = false,\n collapsed = false,\n children,\n leading,\n trailing,\n interactive,\n type,\n onClick,\n className = \"\",\n}: TagProps) {\n const handleClick = () => {\n if (onClick) {\n onClick();\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement | HTMLDivElement>) => {\n if (onClick && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n onClick();\n }\n };\n\n const showLeading = leading && !collapsed;\n const showTrailing = trailing && !collapsed;\n\n // Explicit interactive prop takes precedence; otherwise detect from onClick\n const isInteractive = interactive ?? typeof onClick === \"function\";\n const TagElement = isInteractive ? \"button\" : \"div\";\n\n return (\n <TagElement\n className={cn(\n tagVariants({\n size,\n selected,\n collapsed,\n interactive: isInteractive,\n }),\n className,\n )}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n type={isInteractive ? (type ?? \"button\") : undefined}\n >\n {!collapsed && (\n <>\n {showLeading && (\n <div className=\"flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit\">\n {leading}\n </div>\n )}\n <div className=\"flex items-center justify-center px-1 first:pl-0 last:pr-0\">\n {children}\n </div>\n {showTrailing && (\n <div className=\"flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit\">\n {trailing}\n </div>\n )}\n </>\n )}\n\n {collapsed && (\n <div className=\"flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit\">\n {leading || trailing}\n </div>\n )}\n </TagElement>\n );\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
4
|
+
var clsx = require('clsx');
|
|
5
|
+
var tailwindMerge = require('tailwind-merge');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
// src/components/template-header/template-header.tsx
|
|
9
|
+
function cn(...inputs) {
|
|
10
|
+
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
11
|
+
}
|
|
12
|
+
var templateHeaderVariants = classVarianceAuthority.cva(
|
|
13
|
+
"mx-auto flex w-full max-w-2xl flex-col items-center justify-center gap-2.5 py-12"
|
|
14
|
+
);
|
|
15
|
+
function TemplateHeader({ className, image }) {
|
|
16
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
17
|
+
"header",
|
|
18
|
+
{
|
|
19
|
+
"data-slot": "template-header",
|
|
20
|
+
className: cn("drop-shadow-3xl drop-shadow-primary/30", templateHeaderVariants(), className),
|
|
21
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto flex aspect-146/85 max-h-[596px] max-w-2xl shrink-0 items-center justify-between self-stretch", children: image })
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
exports.TemplateHeader = TemplateHeader;
|
|
27
|
+
//# sourceMappingURL=template-header.cjs.map
|
|
28
|
+
//# sourceMappingURL=template-header.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/template-header/template-header.tsx"],"names":["twMerge","clsx","cva","jsx"],"mappings":";;;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACAA,IAAM,sBAAA,GAAyBC,0BAAA;AAAA,EAC7B;AACF,CAAA;AAEO,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,KAAA,EAAM,EAAwB;AACxE,EAAA,uBACEC,cAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,wCAAA,EAA0C,sBAAA,IAA0B,SAAS,CAAA;AAAA,MAE3F,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uGAAA,EACZ,QAAA,EAAA,KAAA,EACH;AAAA;AAAA,GACF;AAEJ","file":"template-header.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cva } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\nimport type { TemplateHeaderProps } from \"./types\";\n\nconst templateHeaderVariants = cva(\n \"mx-auto flex w-full max-w-2xl flex-col items-center justify-center gap-2.5 py-12\",\n);\n\nexport function TemplateHeader({ className, image }: TemplateHeaderProps) {\n return (\n <header\n data-slot=\"template-header\"\n className={cn(\"drop-shadow-3xl drop-shadow-primary/30\", templateHeaderVariants(), className)}\n >\n <div className=\"mx-auto flex aspect-146/85 max-h-[596px] max-w-2xl shrink-0 items-center justify-between self-stretch\">\n {image}\n </div>\n </header>\n );\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
interface TemplateHeaderProps {
|
|
5
|
+
/** Image of the template */
|
|
6
|
+
image: React.ReactNode;
|
|
7
|
+
/** className for consumer overrides */
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare function TemplateHeader({ className, image }: TemplateHeaderProps): react_jsx_runtime.JSX.Element;
|
|
12
|
+
|
|
13
|
+
export { TemplateHeader, type TemplateHeaderProps };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
interface TemplateHeaderProps {
|
|
5
|
+
/** Image of the template */
|
|
6
|
+
image: React.ReactNode;
|
|
7
|
+
/** className for consumer overrides */
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare function TemplateHeader({ className, image }: TemplateHeaderProps): react_jsx_runtime.JSX.Element;
|
|
12
|
+
|
|
13
|
+
export { TemplateHeader, type TemplateHeaderProps };
|