@thesquad-components/sqd-module-template 0.1.2 → 0.1.3
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/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -86,6 +86,8 @@ var ActivityGaugeLg = ({
|
|
|
86
86
|
data = radialData,
|
|
87
87
|
maxValue = 1e3
|
|
88
88
|
}) => {
|
|
89
|
+
var _a, _b;
|
|
90
|
+
const ringClassName = (_b = (_a = data[0]) == null ? void 0 : _a.className) != null ? _b : "text-utility-brand-700";
|
|
89
91
|
return /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { height: 356, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
90
92
|
recharts.RadialBarChart,
|
|
91
93
|
{
|
|
@@ -112,6 +114,7 @@ var ActivityGaugeLg = ({
|
|
|
112
114
|
dataKey: "value",
|
|
113
115
|
cornerRadius: 99,
|
|
114
116
|
fill: "currentColor",
|
|
117
|
+
className: ringClassName,
|
|
115
118
|
background: {
|
|
116
119
|
className: "fill-utility-gray-100"
|
|
117
120
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cx.ts","../src/components/application/charts/charts-base.tsx","../src/components/application/charts/activity-gauge-lg.tsx","../src/api/tasks.ts","../src/utils/is-react-component.ts","../src/components/base/buttons/button.tsx","../src/components/base/input/hint-text.tsx","../src/components/base/tooltip/tooltip.tsx","../src/components/base/input/label.tsx","../src/components/base/input/input.tsx","../src/components/application/charts/tasks-activity-gauge.tsx"],"names":["extendTailwindMerge","jsxs","jsx","ResponsiveContainer","RadialBarChart","PolarAngleAxis","Tooltip","RadialBar","AriaLink","AriaButton","isValidElement","AriaText","AriaTooltipTrigger","AriaTooltip","AriaOverlayArrow","AriaLabel","HelpCircle","useContext","AriaGroup","isDisabled","isInvalid","AriaInput","InfoCircle","createContext","AriaTextField","Fragment","useState","useMemo","useCallback","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\nimport type { TooltipProps } from \"recharts\";\n\nimport { cx } from \"@/utils/cx\";\n\ntype LegendPayload = {\n value?: string;\n payload?: {\n className?: string;\n };\n};\n\ntype LegendProps = {\n payload?: LegendPayload[];\n};\n\nexport const ChartLegendContent = ({ payload = [] }: LegendProps) => {\n if (payload.length === 0) {\n return null;\n }\n\n return (\n <div className=\"flex flex-wrap items-center justify-center gap-x-4 gap-y-2\">\n {payload.map((entry, index) => (\n <div key={`${entry.value ?? \"item\"}-${index}`} className=\"flex items-center gap-2\">\n <span\n className={cx(\n \"size-2 rounded-full bg-utility-gray-300\",\n entry.payload?.className ? entry.payload.className.replace(\"text-\", \"bg-\") : undefined,\n )}\n />\n <span className=\"text-xs font-medium text-secondary\">{entry.value}</span>\n </div>\n ))}\n </div>\n );\n};\n\ntype ChartTooltipContentProps = TooltipProps<number, string> & {\n isRadialChart?: boolean;\n};\n\nexport const ChartTooltipContent = ({ active, payload, label, isRadialChart }: ChartTooltipContentProps) => {\n if (!active || !payload || payload.length === 0) {\n return null;\n }\n\n return (\n <div className=\"rounded-lg border border-secondary bg-primary px-3 py-2 shadow-sm\">\n {label && <div className=\"text-xs font-medium text-tertiary\">{label}</div>}\n <div className=\"mt-1 space-y-1\">\n {payload.map((entry, index) => (\n <div key={`${entry.name ?? \"value\"}-${index}`} className=\"flex items-center gap-2 text-xs\">\n <span\n className={cx(\n \"size-2 rounded-full bg-utility-gray-300\",\n entry.payload?.className ? entry.payload.className.replace(\"text-\", \"bg-\") : undefined,\n )}\n />\n <span className=\"text-secondary\">{entry.name ?? (isRadialChart ? \"Value\" : label)}</span>\n <span className=\"ml-auto font-medium text-primary\">{entry.value}</span>\n </div>\n ))}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport { PolarAngleAxis, RadialBar, RadialBarChart, ResponsiveContainer, Tooltip } from \"recharts\";\n\nimport { ChartTooltipContent } from \"@/components/application/charts/charts-base\";\nimport { cx } from \"@/utils/cx\";\n\nexport type ActivityGaugeDatum = {\n name: string;\n value: number;\n className?: string;\n};\n\nexport type ActivityGaugeProps = {\n title?: string;\n subtitle?: string;\n data?: ActivityGaugeDatum[];\n maxValue?: number;\n};\n\nconst radialData: ActivityGaugeDatum[] = [\n {\n name: \"Tasks\",\n value: 1000,\n className: \"text-utility-brand-700\",\n },\n];\n\nexport const ActivityGaugeLg = ({\n title = \"1,000\",\n subtitle = \"Active users\",\n data = radialData,\n maxValue = 1000,\n}: ActivityGaugeProps) => {\n return (\n <ResponsiveContainer height={356}>\n <RadialBarChart\n data={data}\n accessibilityLayer\n innerRadius={84}\n outerRadius={154}\n startAngle={90}\n endAngle={360 + 90}\n className=\"font-medium text-tertiary [&_.recharts-polar-grid]:text-utility-gray-100 [&_.recharts-text]:text-sm\"\n margin={{\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n }}\n >\n <PolarAngleAxis tick={false} domain={[0, maxValue]} type=\"number\" reversed />\n\n <Tooltip content={<ChartTooltipContent isRadialChart />} />\n\n <RadialBar\n isAnimationActive={false}\n dataKey=\"value\"\n cornerRadius={99}\n fill=\"currentColor\"\n background={{\n className: \"fill-utility-gray-100\",\n }}\n />\n\n {(title || subtitle) && (\n <text x=\"50%\" y=\"50%\" textAnchor=\"middle\" dominantBaseline=\"middle\">\n {subtitle && (\n <tspan\n x=\"50%\"\n dy={title ? \"-1.4em\" : \"1%\"}\n className={cx(\"fill-current text-tertiary\", \"text-sm font-medium\")}\n >\n {subtitle}\n </tspan>\n )}\n {title && (\n <tspan\n x=\"50%\"\n dy={subtitle ? \"1em\" : \"1%\"}\n className={cx(\"fill-current text-primary\", \"text-display-md font-semibold\")}\n >\n {title}\n </tspan>\n )}\n </text>\n )}\n </RadialBarChart>\n </ResponsiveContainer>\n );\n};\n","export type TasksCountResponse = {\n count: number;\n daysBack: number;\n since: string;\n};\n\ntype GetTasksCountOptions = {\n baseUrl?: string;\n moduleKey?: string;\n signal?: AbortSignal;\n};\n\nconst DEFAULT_API_BASE_URL = \"https://api.thesqd.com\";\nconst DEFAULT_MODULE_KEY = \"e166f127e73167b6646eeaeff8837566d3c27d4002fb122bc49d4fb06d97d67e\";\n\nexport const getTasksCount = async (daysBack: number, options: GetTasksCountOptions = {}) => {\n const resolvedDaysBack = Number.isFinite(daysBack) && daysBack > 0 ? Math.floor(daysBack) : 7;\n const baseUrl = options.baseUrl ?? process.env.NEXT_PUBLIC_SQD_API_BASE_URL ?? DEFAULT_API_BASE_URL;\n const moduleKey = options.moduleKey ?? process.env.NEXT_PUBLIC_SQD_MODULE_KEY ?? DEFAULT_MODULE_KEY;\n const url = new URL(\"/module-template/task-count\", baseUrl);\n\n url.searchParams.set(\"daysBack\", String(resolvedDaysBack));\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sqd-module-key\": moduleKey,\n },\n cache: \"no-store\",\n signal: options.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch tasks count (${response.status})`);\n }\n\n const payload = (await response.json()) as TasksCountResponse;\n\n return payload.count ?? 0;\n};\n","/* We cannot use type `unknown` instead of `any` here because it will break the type assertion `isReactComponent` function is providing. */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type React from \"react\";\n\ntype ReactComponent = React.FC<any> | React.ComponentClass<any, any>;\n\n/**\n * Checks if a given value is a function component.\n */\nexport const isFunctionComponent = (component: any): component is React.FC<any> => {\n return typeof component === \"function\";\n};\n\n/**\n * Checks if a given value is a class component.\n */\nexport const isClassComponent = (component: any): component is React.ComponentClass<any, any> => {\n return typeof component === \"function\" && component.prototype && (!!component.prototype.isReactComponent || !!component.prototype.render);\n};\n\n/**\n * Checks if a given value is a forward ref component.\n */\nexport const isForwardRefComponent = (component: any): component is React.ForwardRefExoticComponent<any> => {\n return typeof component === \"object\" && component !== null && component.$$typeof.toString() === \"Symbol(react.forward_ref)\";\n};\n\n/**\n * Checks if a given value is a valid React component.\n */\nexport const isReactComponent = (component: any): component is ReactComponent => {\n return isFunctionComponent(component) || isForwardRefComponent(component) || isClassComponent(component);\n};\n","\"use client\";\n\nimport type { AnchorHTMLAttributes, ButtonHTMLAttributes, DetailedHTMLProps, FC, ReactNode } from \"react\";\nimport React, { isValidElement } from \"react\";\nimport type { ButtonProps as AriaButtonProps } from \"react-aria-components\";\nimport { Button as AriaButton, Link as AriaLink } from \"react-aria-components\";\nimport { cx, sortCx } from \"@/utils/cx\";\nimport { isReactComponent } from \"@/utils/is-react-component\";\n\nexport const styles = sortCx({\n common: {\n root: [\n \"group relative inline-flex h-max cursor-pointer items-center justify-center whitespace-nowrap outline-brand transition duration-100 ease-linear before:absolute focus-visible:outline-2 focus-visible:outline-offset-2\",\n // When button is used within `InputGroup`\n \"in-data-input-wrapper:shadow-xs in-data-input-wrapper:focus:!z-50 in-data-input-wrapper:in-data-leading:-mr-px in-data-input-wrapper:in-data-leading:rounded-r-none in-data-input-wrapper:in-data-leading:before:rounded-r-none in-data-input-wrapper:in-data-trailing:-ml-px in-data-input-wrapper:in-data-trailing:rounded-l-none in-data-input-wrapper:in-data-trailing:before:rounded-l-none\",\n // Disabled styles\n \"disabled:cursor-not-allowed disabled:text-fg-disabled\",\n // Icon styles\n \"disabled:*:data-icon:text-fg-disabled_subtle\",\n // Same as `icon` but for SSR icons that cannot be passed to the client as functions.\n \"*:data-icon:pointer-events-none *:data-icon:size-5 *:data-icon:shrink-0 *:data-icon:transition-inherit-all\",\n ].join(\" \"),\n icon: \"pointer-events-none size-5 shrink-0 transition-inherit-all\",\n },\n sizes: {\n sm: {\n root: [\n \"gap-1 rounded-lg px-3 py-2 text-sm font-semibold before:rounded-[7px] data-icon-only:p-2\",\n \"in-data-input-wrapper:px-3.5 in-data-input-wrapper:py-2.5 in-data-input-wrapper:data-icon-only:p-2.5\",\n ].join(\" \"),\n linkRoot: \"gap-1\",\n },\n md: {\n root: [\n \"gap-1 rounded-lg px-3.5 py-2.5 text-sm font-semibold before:rounded-[7px] data-icon-only:p-2.5\",\n \"in-data-input-wrapper:gap-1.5 in-data-input-wrapper:px-4 in-data-input-wrapper:text-md in-data-input-wrapper:data-icon-only:p-3\",\n ].join(\" \"),\n linkRoot: \"gap-1\",\n },\n lg: {\n root: \"gap-1.5 rounded-lg px-4 py-2.5 text-md font-semibold before:rounded-[7px] data-icon-only:p-3\",\n linkRoot: \"gap-1.5\",\n },\n xl: {\n root: \"gap-1.5 rounded-lg px-4.5 py-3 text-md font-semibold before:rounded-[7px] data-icon-only:p-3.5\",\n linkRoot: \"gap-1.5\",\n },\n },\n\n colors: {\n primary: {\n root: [\n \"bg-brand-solid text-white shadow-xs-skeumorphic ring-1 ring-transparent ring-inset hover:bg-brand-solid_hover data-loading:bg-brand-solid_hover\",\n // Inner border gradient\n \"before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%\",\n // Disabled styles\n \"disabled:bg-disabled disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-button-primary-icon hover:*:data-icon:text-button-primary-icon_hover\",\n ].join(\" \"),\n },\n secondary: {\n root: [\n \"bg-primary text-secondary shadow-xs-skeumorphic ring-1 ring-primary ring-inset hover:bg-primary_hover hover:text-secondary_hover data-loading:bg-primary_hover\",\n // Disabled styles\n \"disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n tertiary: {\n root: [\n \"text-tertiary hover:bg-primary_hover hover:text-tertiary_hover data-loading:bg-primary_hover\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n \"link-gray\": {\n root: [\n \"justify-normal rounded p-0! text-tertiary hover:text-tertiary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n \"link-color\": {\n root: [\n \"justify-normal rounded p-0! text-brand-secondary hover:text-brand-secondary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-brand-secondary_alt hover:*:data-icon:text-fg-brand-secondary_hover\",\n ].join(\" \"),\n },\n \"primary-destructive\": {\n root: [\n \"bg-error-solid text-white shadow-xs-skeumorphic ring-1 ring-transparent outline-error ring-inset hover:bg-error-solid_hover data-loading:bg-error-solid_hover\",\n // Inner border gradient\n \"before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%\",\n // Disabled styles\n \"disabled:bg-disabled disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-button-destructive-primary-icon hover:*:data-icon:text-button-destructive-primary-icon_hover\",\n ].join(\" \"),\n },\n \"secondary-destructive\": {\n root: [\n \"bg-primary text-error-primary shadow-xs-skeumorphic ring-1 ring-error_subtle outline-error ring-inset hover:bg-error-primary hover:text-error-primary_hover data-loading:bg-error-primary\",\n // Disabled styles\n \"disabled:bg-primary disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n \"tertiary-destructive\": {\n root: [\n \"text-error-primary outline-error hover:bg-error-primary hover:text-error-primary_hover data-loading:bg-error-primary\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n \"link-destructive\": {\n root: [\n \"justify-normal rounded p-0! text-error-primary outline-error hover:text-error-primary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n },\n});\n\n/**\n * Common props shared between button and anchor variants\n */\nexport interface CommonProps {\n /** Disables the button and shows a disabled state */\n isDisabled?: boolean;\n /** Shows a loading spinner and disables the button */\n isLoading?: boolean;\n /** The size variant of the button */\n size?: keyof typeof styles.sizes;\n /** The color variant of the button */\n color?: keyof typeof styles.colors;\n /** Icon component or element to show before the text */\n iconLeading?: FC<{ className?: string }> | ReactNode;\n /** Icon component or element to show after the text */\n iconTrailing?: FC<{ className?: string }> | ReactNode;\n /** Removes horizontal padding from the text content */\n noTextPadding?: boolean;\n /** When true, keeps the text visible during loading state */\n showTextWhileLoading?: boolean;\n}\n\n/**\n * Props for the button variant (non-link)\n */\nexport interface ButtonProps extends CommonProps, DetailedHTMLProps<Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\" | \"slot\">, HTMLButtonElement> {\n /** Slot name for react-aria component */\n slot?: AriaButtonProps[\"slot\"];\n}\n\n/**\n * Props for the link variant (anchor tag)\n */\ninterface LinkProps extends CommonProps, DetailedHTMLProps<Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">, HTMLAnchorElement> {}\n\n/** Union type of button and link props */\nexport type Props = ButtonProps | LinkProps;\n\nexport const Button = ({\n size = \"sm\",\n color = \"primary\",\n children,\n className,\n noTextPadding,\n iconLeading: IconLeading,\n iconTrailing: IconTrailing,\n isDisabled: disabled,\n isLoading: loading,\n showTextWhileLoading,\n ...otherProps\n}: Props) => {\n const href = \"href\" in otherProps ? otherProps.href : undefined;\n const Component = href ? AriaLink : AriaButton;\n\n const isIcon = (IconLeading || IconTrailing) && !children;\n const isLinkType = [\"link-gray\", \"link-color\", \"link-destructive\"].includes(color);\n\n noTextPadding = isLinkType || noTextPadding;\n\n let props = {};\n\n if (href) {\n props = {\n ...otherProps,\n\n href: disabled ? undefined : href,\n };\n } else {\n props = {\n ...otherProps,\n\n type: otherProps.type || \"button\",\n isPending: loading,\n };\n }\n\n return (\n <Component\n data-loading={loading ? true : undefined}\n data-icon-only={isIcon ? true : undefined}\n {...props}\n isDisabled={disabled}\n className={cx(\n styles.common.root,\n styles.sizes[size].root,\n styles.colors[color].root,\n isLinkType && styles.sizes[size].linkRoot,\n (loading || (href && (disabled || loading))) && \"pointer-events-none\",\n // If in `loading` state, hide everything except the loading icon (and text if `showTextWhileLoading` is true).\n loading && (showTextWhileLoading ? \"[&>*:not([data-icon=loading]):not([data-text])]:hidden\" : \"[&>*:not([data-icon=loading])]:invisible\"),\n className,\n )}\n >\n {/* Leading icon */}\n {isValidElement(IconLeading) && IconLeading}\n {isReactComponent(IconLeading) && <IconLeading data-icon=\"leading\" className={styles.common.icon} />}\n\n {loading && (\n <svg\n fill=\"none\"\n data-icon=\"loading\"\n viewBox=\"0 0 20 20\"\n className={cx(styles.common.icon, !showTextWhileLoading && \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\")}\n >\n {/* Background circle */}\n <circle className=\"stroke-current opacity-30\" cx=\"10\" cy=\"10\" r=\"8\" fill=\"none\" strokeWidth=\"2\" />\n {/* Spinning circle */}\n <circle\n className=\"origin-center animate-spin stroke-current\"\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n fill=\"none\"\n strokeWidth=\"2\"\n strokeDasharray=\"12.5 50\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n\n {children && (\n <span data-text className={cx(\"transition-inherit-all\", !noTextPadding && \"px-0.5\")}>\n {children}\n </span>\n )}\n\n {/* Trailing icon */}\n {isValidElement(IconTrailing) && IconTrailing}\n {isReactComponent(IconTrailing) && <IconTrailing data-icon=\"trailing\" className={styles.common.icon} />}\n </Component>\n );\n};\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport type { TextProps as AriaTextProps } from \"react-aria-components\";\nimport { Text as AriaText } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface HintTextProps extends AriaTextProps {\n /** Indicates that the hint text is an error message. */\n isInvalid?: boolean;\n ref?: Ref<HTMLElement>;\n children: ReactNode;\n}\n\nexport const HintText = ({ isInvalid, className, ...props }: HintTextProps) => {\n return (\n <AriaText\n {...props}\n slot={isInvalid ? \"errorMessage\" : \"description\"}\n className={cx(\n \"text-sm text-tertiary\",\n\n // Invalid state\n isInvalid && \"text-error-primary\",\n \"group-invalid:text-error-primary\",\n\n className,\n )}\n />\n );\n};\n\nHintText.displayName = \"HintText\";\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type {\n ButtonProps as AriaButtonProps,\n TooltipProps as AriaTooltipProps,\n TooltipTriggerComponentProps as AriaTooltipTriggerComponentProps,\n} from \"react-aria-components\";\nimport { Button as AriaButton, OverlayArrow as AriaOverlayArrow, Tooltip as AriaTooltip, TooltipTrigger as AriaTooltipTrigger } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface TooltipProps extends AriaTooltipTriggerComponentProps, Omit<AriaTooltipProps, \"children\"> {\n /**\n * The title of the tooltip.\n */\n title: ReactNode;\n /**\n * The description of the tooltip.\n */\n description?: ReactNode;\n /**\n * Whether to show the arrow on the tooltip.\n *\n * @default false\n */\n arrow?: boolean;\n /**\n * Delay in milliseconds before the tooltip is shown.\n *\n * @default 300\n */\n delay?: number;\n}\n\nexport const Tooltip = ({\n title,\n description,\n children,\n arrow = false,\n delay = 300,\n closeDelay = 0,\n trigger,\n isDisabled,\n isOpen,\n defaultOpen,\n offset = 6,\n crossOffset,\n placement = \"top\",\n onOpenChange,\n ...tooltipProps\n}: TooltipProps) => {\n const isTopOrBottomLeft = [\"top left\", \"top end\", \"bottom left\", \"bottom end\"].includes(placement);\n const isTopOrBottomRight = [\"top right\", \"top start\", \"bottom right\", \"bottom start\"].includes(placement);\n // Set negative cross offset for left and right placement to visually balance the tooltip.\n const calculatedCrossOffset = isTopOrBottomLeft ? -12 : isTopOrBottomRight ? 12 : 0;\n\n return (\n <AriaTooltipTrigger {...{ trigger, delay, closeDelay, isDisabled, isOpen, defaultOpen, onOpenChange }}>\n {children}\n\n <AriaTooltip\n {...tooltipProps}\n offset={offset}\n placement={placement}\n crossOffset={crossOffset ?? calculatedCrossOffset}\n className={({ isEntering, isExiting }) => cx(isEntering && \"ease-out animate-in\", isExiting && \"ease-in animate-out\")}\n >\n {({ isEntering, isExiting }) => (\n <div\n className={cx(\n \"z-50 flex max-w-xs origin-(--trigger-anchor-point) flex-col items-start gap-1 rounded-lg bg-primary-solid px-3 shadow-lg will-change-transform\",\n description ? \"py-3\" : \"py-2\",\n\n isEntering &&\n \"ease-out animate-in fade-in zoom-in-95 in-placement-left:slide-in-from-right-0.5 in-placement-right:slide-in-from-left-0.5 in-placement-top:slide-in-from-bottom-0.5 in-placement-bottom:slide-in-from-top-0.5\",\n isExiting &&\n \"ease-in animate-out fade-out zoom-out-95 in-placement-left:slide-out-to-right-0.5 in-placement-right:slide-out-to-left-0.5 in-placement-top:slide-out-to-bottom-0.5 in-placement-bottom:slide-out-to-top-0.5\",\n )}\n >\n <span className=\"text-xs font-semibold text-white\">{title}</span>\n\n {description && <span className=\"text-xs font-medium text-tooltip-supporting-text\">{description}</span>}\n\n {arrow && (\n <AriaOverlayArrow>\n <svg\n viewBox=\"0 0 100 100\"\n className=\"size-2.5 fill-bg-primary-solid in-placement-left:-rotate-90 in-placement-right:rotate-90 in-placement-top:rotate-0 in-placement-bottom:rotate-180\"\n >\n <path d=\"M0,0 L35.858,35.858 Q50,50 64.142,35.858 L100,0 Z\" />\n </svg>\n </AriaOverlayArrow>\n )}\n </div>\n )}\n </AriaTooltip>\n </AriaTooltipTrigger>\n );\n};\n\ninterface TooltipTriggerProps extends AriaButtonProps {}\n\nexport const TooltipTrigger = ({ children, className, ...buttonProps }: TooltipTriggerProps) => {\n return (\n <AriaButton {...buttonProps} className={(values) => cx(\"h-max w-max outline-hidden\", typeof className === \"function\" ? className(values) : className)}>\n {children}\n </AriaButton>\n );\n};\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport { HelpCircle } from \"@untitledui/icons\";\nimport type { LabelProps as AriaLabelProps } from \"react-aria-components\";\nimport { Label as AriaLabel } from \"react-aria-components\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx } from \"@/utils/cx\";\n\ninterface LabelProps extends AriaLabelProps {\n children: ReactNode;\n isRequired?: boolean;\n tooltip?: string;\n tooltipDescription?: string;\n ref?: Ref<HTMLLabelElement>;\n}\n\nexport const Label = ({ isRequired, tooltip, tooltipDescription, className, ...props }: LabelProps) => {\n return (\n <AriaLabel\n // Used for conditionally hiding/showing the label element via CSS:\n // <Input label=\"Visible only on mobile\" className=\"lg:**:data-label:hidden\" />\n // or\n // <Input label=\"Visible only on mobile\" className=\"lg:label:hidden\" />\n data-label=\"true\"\n {...props}\n className={cx(\"flex cursor-default items-center gap-0.5 text-sm font-medium text-secondary\", className)}\n >\n {props.children}\n\n <span className={cx(\"hidden text-brand-tertiary\", isRequired && \"block\", typeof isRequired === \"undefined\" && \"group-required:block\")}>*</span>\n\n {tooltip && (\n <Tooltip title={tooltip} description={tooltipDescription} placement=\"top\">\n <TooltipTrigger\n // `TooltipTrigger` inherits the disabled state from the parent form field\n // but we don't that. We want the tooltip be enabled even if the parent\n // field is disabled.\n isDisabled={false}\n className=\"cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\"\n >\n <HelpCircle className=\"size-4\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n </AriaLabel>\n );\n};\n\nLabel.displayName = \"Label\";\n","\"use client\";\n\nimport { type ComponentType, type HTMLAttributes, type ReactNode, type Ref, createContext, useContext } from \"react\";\nimport { HelpCircle, InfoCircle } from \"@untitledui/icons\";\nimport type { InputProps as AriaInputProps, TextFieldProps as AriaTextFieldProps } from \"react-aria-components\";\nimport { Group as AriaGroup, Input as AriaInput, TextField as AriaTextField } from \"react-aria-components\";\nimport { HintText } from \"@/components/base/input/hint-text\";\nimport { Label } from \"@/components/base/input/label\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx, sortCx } from \"@/utils/cx\";\n\nexport interface InputBaseProps extends TextFieldProps {\n /** Tooltip message on hover. */\n tooltip?: string;\n /**\n * Input size.\n * @default \"sm\"\n */\n size?: \"sm\" | \"md\";\n /** Placeholder text. */\n placeholder?: string;\n /** Class name for the icon. */\n iconClassName?: string;\n /** Class name for the input. */\n inputClassName?: string;\n /** Class name for the input wrapper. */\n wrapperClassName?: string;\n /** Class name for the tooltip. */\n tooltipClassName?: string;\n /** Keyboard shortcut to display. */\n shortcut?: string | boolean;\n ref?: Ref<HTMLInputElement>;\n groupRef?: Ref<HTMLDivElement>;\n /** Icon component to display on the left side of the input. */\n icon?: ComponentType<HTMLAttributes<HTMLOrSVGElement>>;\n}\n\nexport const InputBase = ({\n ref,\n tooltip,\n shortcut,\n groupRef,\n size = \"sm\",\n isInvalid,\n isDisabled,\n icon: Icon,\n placeholder,\n wrapperClassName,\n tooltipClassName,\n inputClassName,\n iconClassName,\n // Omit this prop to avoid invalid HTML attribute warning\n isRequired: _isRequired,\n ...inputProps\n}: Omit<InputBaseProps, \"label\" | \"hint\">) => {\n // Check if the input has a leading icon or tooltip\n const hasTrailingIcon = tooltip || isInvalid;\n const hasLeadingIcon = Icon;\n\n // If the input is inside a `TextFieldContext`, use its context to simplify applying styles\n const context = useContext(TextFieldContext);\n\n const inputSize = context?.size || size;\n\n const sizes = sortCx({\n sm: {\n root: cx(\"px-3 py-2\", hasTrailingIcon && \"pr-9\", hasLeadingIcon && \"pl-10\"),\n iconLeading: \"left-3\",\n iconTrailing: \"right-3\",\n shortcut: \"pr-2.5\",\n },\n md: {\n root: cx(\"px-3.5 py-2.5\", hasTrailingIcon && \"pr-9.5\", hasLeadingIcon && \"pl-10.5\"),\n iconLeading: \"left-3.5\",\n iconTrailing: \"right-3.5\",\n shortcut: \"pr-3\",\n },\n });\n\n return (\n <AriaGroup\n {...{ isDisabled, isInvalid }}\n ref={groupRef}\n className={({ isFocusWithin, isDisabled, isInvalid }) =>\n cx(\n \"relative flex w-full flex-row place-content-center place-items-center rounded-lg bg-primary shadow-xs ring-1 ring-primary transition-shadow duration-100 ease-linear ring-inset\",\n\n isFocusWithin && !isDisabled && \"ring-2 ring-brand\",\n\n // Disabled state styles\n isDisabled && \"cursor-not-allowed bg-disabled_subtle ring-disabled\",\n \"group-disabled:cursor-not-allowed group-disabled:bg-disabled_subtle group-disabled:ring-disabled\",\n\n // Invalid state styles\n isInvalid && \"ring-error_subtle\",\n \"group-invalid:ring-error_subtle\",\n\n // Invalid state with focus-within styles\n isInvalid && isFocusWithin && \"ring-2 ring-error\",\n isFocusWithin && \"group-invalid:ring-2 group-invalid:ring-error\",\n\n context?.wrapperClassName,\n wrapperClassName,\n )\n }\n >\n {/* Leading icon and Payment icon */}\n {Icon && (\n <Icon\n className={cx(\n \"pointer-events-none absolute size-5 text-fg-quaternary\",\n isDisabled && \"text-fg-disabled\",\n sizes[inputSize].iconLeading,\n context?.iconClassName,\n iconClassName,\n )}\n />\n )}\n\n {/* Input field */}\n <AriaInput\n {...(inputProps as AriaInputProps)}\n ref={ref}\n placeholder={placeholder}\n className={cx(\n \"m-0 w-full bg-transparent text-md text-primary ring-0 outline-hidden placeholder:text-placeholder autofill:rounded-lg autofill:text-primary\",\n isDisabled && \"cursor-not-allowed text-disabled\",\n sizes[inputSize].root,\n context?.inputClassName,\n inputClassName,\n )}\n />\n\n {/* Tooltip and help icon */}\n {tooltip && !isInvalid && (\n <Tooltip title={tooltip} placement=\"top\">\n <TooltipTrigger\n className={cx(\n \"absolute cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\",\n sizes[inputSize].iconTrailing,\n context?.tooltipClassName,\n tooltipClassName,\n )}\n >\n <HelpCircle className=\"size-4\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n\n {/* Invalid icon */}\n {isInvalid && (\n <InfoCircle\n className={cx(\n \"pointer-events-none absolute size-4 text-fg-error-secondary\",\n sizes[inputSize].iconTrailing,\n context?.tooltipClassName,\n tooltipClassName,\n )}\n />\n )}\n\n {/* Shortcut */}\n {shortcut && (\n <div\n className={cx(\n \"pointer-events-none absolute inset-y-0.5 right-0.5 z-10 flex items-center rounded-r-[inherit] bg-linear-to-r from-transparent to-bg-primary to-40% pl-8\",\n sizes[inputSize].shortcut,\n )}\n >\n <span\n className={cx(\n \"pointer-events-none rounded px-1 py-px text-xs font-medium text-quaternary ring-1 ring-secondary select-none ring-inset\",\n isDisabled && \"bg-transparent text-disabled\",\n )}\n aria-hidden=\"true\"\n >\n {typeof shortcut === \"string\" ? shortcut : \"⌘K\"}\n </span>\n </div>\n )}\n </AriaGroup>\n );\n};\n\nInputBase.displayName = \"InputBase\";\n\ninterface BaseProps {\n /** Label text for the input */\n label?: string;\n /** Helper text displayed below the input */\n hint?: ReactNode;\n}\n\ninterface TextFieldProps\n extends BaseProps,\n AriaTextFieldProps,\n Pick<InputBaseProps, \"size\" | \"wrapperClassName\" | \"inputClassName\" | \"iconClassName\" | \"tooltipClassName\"> {\n ref?: Ref<HTMLDivElement>;\n}\n\nconst TextFieldContext = createContext<TextFieldProps>({});\n\nexport const TextField = ({ className, ...props }: TextFieldProps) => {\n return (\n <TextFieldContext.Provider value={props}>\n <AriaTextField\n {...props}\n data-input-wrapper\n className={(state) =>\n cx(\"group flex h-max w-full flex-col items-start justify-start gap-1.5\", typeof className === \"function\" ? className(state) : className)\n }\n />\n </TextFieldContext.Provider>\n );\n};\n\nTextField.displayName = \"TextField\";\n\ninterface InputProps extends InputBaseProps, BaseProps {\n /** Whether to hide required indicator from label */\n hideRequiredIndicator?: boolean;\n}\n\nexport const Input = ({\n size = \"sm\",\n placeholder,\n icon: Icon,\n label,\n hint,\n shortcut,\n hideRequiredIndicator,\n className,\n ref,\n groupRef,\n tooltip,\n iconClassName,\n inputClassName,\n wrapperClassName,\n tooltipClassName,\n ...props\n}: InputProps) => {\n return (\n <TextField aria-label={!label ? placeholder : undefined} {...props} className={className}>\n {({ isRequired, isInvalid }) => (\n <>\n {label && <Label isRequired={hideRequiredIndicator ? !hideRequiredIndicator : isRequired}>{label}</Label>}\n\n <InputBase\n {...{\n ref,\n groupRef,\n size,\n placeholder,\n icon: Icon,\n shortcut,\n iconClassName,\n inputClassName,\n wrapperClassName,\n tooltipClassName,\n tooltip,\n }}\n />\n\n {hint && <HintText isInvalid={isInvalid}>{hint}</HintText>}\n </>\n )}\n </TextField>\n );\n};\n\nInput.displayName = \"Input\";\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { getTasksCount } from \"@/api/tasks\";\nimport { ActivityGaugeLg, type ActivityGaugeDatum } from \"@/components/application/charts/activity-gauge-lg\";\nimport { Button } from \"@/components/base/buttons/button\";\nimport { Input } from \"@/components/base/input/input\";\n\nexport type TasksActivityGaugeProps = {\n daysBack?: number;\n maxValue?: number;\n};\n\nexport const TasksActivityGauge = ({ daysBack = 14, maxValue = 1000 }: TasksActivityGaugeProps) => {\n const [count, setCount] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [daysBackValue, setDaysBackValue] = useState(daysBack.toString());\n const [activeDaysBack, setActiveDaysBack] = useState(daysBack);\n\n const subtitle = useMemo(() => `Tasks last ${activeDaysBack} days`, [activeDaysBack]);\n\n const fetchCount = useCallback(\n async (value: number) => {\n setIsLoading(true);\n setError(null);\n try {\n const total = await getTasksCount(value);\n setCount(total);\n } catch (err: unknown) {\n setError(err instanceof Error ? err.message : \"Failed to load tasks count\");\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n useEffect(() => {\n let isActive = true;\n\n setIsLoading(true);\n setError(null);\n setCount(null);\n\n getTasksCount(activeDaysBack)\n .then((total) => {\n if (isActive) {\n setCount(total);\n }\n })\n .catch((err: unknown) => {\n if (isActive) {\n setError(err instanceof Error ? err.message : \"Failed to load tasks count\");\n }\n })\n .finally(() => {\n if (isActive) {\n setIsLoading(false);\n }\n });\n\n return () => {\n isActive = false;\n };\n }, [activeDaysBack]);\n\n const title = error ? \"—\" : count === null ? \"…\" : count.toLocaleString();\n const gaugeValue = count ?? 0;\n const computedMax = Math.max(maxValue, gaugeValue, 1);\n const gaugeData: ActivityGaugeDatum[] = [\n {\n name: \"Tasks\",\n value: gaugeValue,\n className: \"text-utility-brand-700\",\n },\n ];\n\n const handleDaysBackChange = (value: string) => {\n setDaysBackValue(value);\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed > 0) {\n setActiveDaysBack(Math.floor(parsed));\n }\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-wrap items-end justify-between gap-3\">\n <div className=\"min-w-[180px]\">\n <Input\n label=\"Days back\"\n type=\"number\"\n value={daysBackValue}\n onChange={handleDaysBackChange}\n size=\"sm\"\n placeholder=\"14\"\n />\n </div>\n <Button\n color=\"primary\"\n size=\"sm\"\n isLoading={isLoading}\n showTextWhileLoading\n onClick={() => fetchCount(activeDaysBack)}\n >\n Refresh\n </Button>\n </div>\n <ActivityGaugeLg title={title} subtitle={subtitle} data={gaugeData} maxValue={computedMax} />\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/cx.ts","../src/components/application/charts/charts-base.tsx","../src/components/application/charts/activity-gauge-lg.tsx","../src/api/tasks.ts","../src/utils/is-react-component.ts","../src/components/base/buttons/button.tsx","../src/components/base/input/hint-text.tsx","../src/components/base/tooltip/tooltip.tsx","../src/components/base/input/label.tsx","../src/components/base/input/input.tsx","../src/components/application/charts/tasks-activity-gauge.tsx"],"names":["extendTailwindMerge","jsxs","jsx","ResponsiveContainer","RadialBarChart","PolarAngleAxis","Tooltip","RadialBar","AriaLink","AriaButton","isValidElement","AriaText","AriaTooltipTrigger","AriaTooltip","AriaOverlayArrow","AriaLabel","HelpCircle","useContext","AriaGroup","isDisabled","isInvalid","AriaInput","InfoCircle","createContext","AriaTextField","Fragment","useState","useMemo","useCallback","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\nimport type { TooltipProps } from \"recharts\";\n\nimport { cx } from \"@/utils/cx\";\n\ntype LegendPayload = {\n value?: string;\n payload?: {\n className?: string;\n };\n};\n\ntype LegendProps = {\n payload?: LegendPayload[];\n};\n\nexport const ChartLegendContent = ({ payload = [] }: LegendProps) => {\n if (payload.length === 0) {\n return null;\n }\n\n return (\n <div className=\"flex flex-wrap items-center justify-center gap-x-4 gap-y-2\">\n {payload.map((entry, index) => (\n <div key={`${entry.value ?? \"item\"}-${index}`} className=\"flex items-center gap-2\">\n <span\n className={cx(\n \"size-2 rounded-full bg-utility-gray-300\",\n entry.payload?.className ? entry.payload.className.replace(\"text-\", \"bg-\") : undefined,\n )}\n />\n <span className=\"text-xs font-medium text-secondary\">{entry.value}</span>\n </div>\n ))}\n </div>\n );\n};\n\ntype ChartTooltipContentProps = TooltipProps<number, string> & {\n isRadialChart?: boolean;\n};\n\nexport const ChartTooltipContent = ({ active, payload, label, isRadialChart }: ChartTooltipContentProps) => {\n if (!active || !payload || payload.length === 0) {\n return null;\n }\n\n return (\n <div className=\"rounded-lg border border-secondary bg-primary px-3 py-2 shadow-sm\">\n {label && <div className=\"text-xs font-medium text-tertiary\">{label}</div>}\n <div className=\"mt-1 space-y-1\">\n {payload.map((entry, index) => (\n <div key={`${entry.name ?? \"value\"}-${index}`} className=\"flex items-center gap-2 text-xs\">\n <span\n className={cx(\n \"size-2 rounded-full bg-utility-gray-300\",\n entry.payload?.className ? entry.payload.className.replace(\"text-\", \"bg-\") : undefined,\n )}\n />\n <span className=\"text-secondary\">{entry.name ?? (isRadialChart ? \"Value\" : label)}</span>\n <span className=\"ml-auto font-medium text-primary\">{entry.value}</span>\n </div>\n ))}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport { PolarAngleAxis, RadialBar, RadialBarChart, ResponsiveContainer, Tooltip } from \"recharts\";\n\nimport { ChartTooltipContent } from \"@/components/application/charts/charts-base\";\nimport { cx } from \"@/utils/cx\";\n\nexport type ActivityGaugeDatum = {\n name: string;\n value: number;\n className?: string;\n};\n\nexport type ActivityGaugeProps = {\n title?: string;\n subtitle?: string;\n data?: ActivityGaugeDatum[];\n maxValue?: number;\n};\n\nconst radialData: ActivityGaugeDatum[] = [\n {\n name: \"Tasks\",\n value: 1000,\n className: \"text-utility-brand-700\",\n },\n];\n\nexport const ActivityGaugeLg = ({\n title = \"1,000\",\n subtitle = \"Active users\",\n data = radialData,\n maxValue = 1000,\n}: ActivityGaugeProps) => {\n const ringClassName = data[0]?.className ?? \"text-utility-brand-700\";\n\n return (\n <ResponsiveContainer height={356}>\n <RadialBarChart\n data={data}\n accessibilityLayer\n innerRadius={84}\n outerRadius={154}\n startAngle={90}\n endAngle={360 + 90}\n className=\"font-medium text-tertiary [&_.recharts-polar-grid]:text-utility-gray-100 [&_.recharts-text]:text-sm\"\n margin={{\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n }}\n >\n <PolarAngleAxis tick={false} domain={[0, maxValue]} type=\"number\" reversed />\n\n <Tooltip content={<ChartTooltipContent isRadialChart />} />\n\n <RadialBar\n isAnimationActive={false}\n dataKey=\"value\"\n cornerRadius={99}\n fill=\"currentColor\"\n className={ringClassName}\n background={{\n className: \"fill-utility-gray-100\",\n }}\n />\n\n {(title || subtitle) && (\n <text x=\"50%\" y=\"50%\" textAnchor=\"middle\" dominantBaseline=\"middle\">\n {subtitle && (\n <tspan\n x=\"50%\"\n dy={title ? \"-1.4em\" : \"1%\"}\n className={cx(\"fill-current text-tertiary\", \"text-sm font-medium\")}\n >\n {subtitle}\n </tspan>\n )}\n {title && (\n <tspan\n x=\"50%\"\n dy={subtitle ? \"1em\" : \"1%\"}\n className={cx(\"fill-current text-primary\", \"text-display-md font-semibold\")}\n >\n {title}\n </tspan>\n )}\n </text>\n )}\n </RadialBarChart>\n </ResponsiveContainer>\n );\n};\n","export type TasksCountResponse = {\n count: number;\n daysBack: number;\n since: string;\n};\n\ntype GetTasksCountOptions = {\n baseUrl?: string;\n moduleKey?: string;\n signal?: AbortSignal;\n};\n\nconst DEFAULT_API_BASE_URL = \"https://api.thesqd.com\";\nconst DEFAULT_MODULE_KEY = \"e166f127e73167b6646eeaeff8837566d3c27d4002fb122bc49d4fb06d97d67e\";\n\nexport const getTasksCount = async (daysBack: number, options: GetTasksCountOptions = {}) => {\n const resolvedDaysBack = Number.isFinite(daysBack) && daysBack > 0 ? Math.floor(daysBack) : 7;\n const baseUrl = options.baseUrl ?? process.env.NEXT_PUBLIC_SQD_API_BASE_URL ?? DEFAULT_API_BASE_URL;\n const moduleKey = options.moduleKey ?? process.env.NEXT_PUBLIC_SQD_MODULE_KEY ?? DEFAULT_MODULE_KEY;\n const url = new URL(\"/module-template/task-count\", baseUrl);\n\n url.searchParams.set(\"daysBack\", String(resolvedDaysBack));\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sqd-module-key\": moduleKey,\n },\n cache: \"no-store\",\n signal: options.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch tasks count (${response.status})`);\n }\n\n const payload = (await response.json()) as TasksCountResponse;\n\n return payload.count ?? 0;\n};\n","/* We cannot use type `unknown` instead of `any` here because it will break the type assertion `isReactComponent` function is providing. */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type React from \"react\";\n\ntype ReactComponent = React.FC<any> | React.ComponentClass<any, any>;\n\n/**\n * Checks if a given value is a function component.\n */\nexport const isFunctionComponent = (component: any): component is React.FC<any> => {\n return typeof component === \"function\";\n};\n\n/**\n * Checks if a given value is a class component.\n */\nexport const isClassComponent = (component: any): component is React.ComponentClass<any, any> => {\n return typeof component === \"function\" && component.prototype && (!!component.prototype.isReactComponent || !!component.prototype.render);\n};\n\n/**\n * Checks if a given value is a forward ref component.\n */\nexport const isForwardRefComponent = (component: any): component is React.ForwardRefExoticComponent<any> => {\n return typeof component === \"object\" && component !== null && component.$$typeof.toString() === \"Symbol(react.forward_ref)\";\n};\n\n/**\n * Checks if a given value is a valid React component.\n */\nexport const isReactComponent = (component: any): component is ReactComponent => {\n return isFunctionComponent(component) || isForwardRefComponent(component) || isClassComponent(component);\n};\n","\"use client\";\n\nimport type { AnchorHTMLAttributes, ButtonHTMLAttributes, DetailedHTMLProps, FC, ReactNode } from \"react\";\nimport React, { isValidElement } from \"react\";\nimport type { ButtonProps as AriaButtonProps } from \"react-aria-components\";\nimport { Button as AriaButton, Link as AriaLink } from \"react-aria-components\";\nimport { cx, sortCx } from \"@/utils/cx\";\nimport { isReactComponent } from \"@/utils/is-react-component\";\n\nexport const styles = sortCx({\n common: {\n root: [\n \"group relative inline-flex h-max cursor-pointer items-center justify-center whitespace-nowrap outline-brand transition duration-100 ease-linear before:absolute focus-visible:outline-2 focus-visible:outline-offset-2\",\n // When button is used within `InputGroup`\n \"in-data-input-wrapper:shadow-xs in-data-input-wrapper:focus:!z-50 in-data-input-wrapper:in-data-leading:-mr-px in-data-input-wrapper:in-data-leading:rounded-r-none in-data-input-wrapper:in-data-leading:before:rounded-r-none in-data-input-wrapper:in-data-trailing:-ml-px in-data-input-wrapper:in-data-trailing:rounded-l-none in-data-input-wrapper:in-data-trailing:before:rounded-l-none\",\n // Disabled styles\n \"disabled:cursor-not-allowed disabled:text-fg-disabled\",\n // Icon styles\n \"disabled:*:data-icon:text-fg-disabled_subtle\",\n // Same as `icon` but for SSR icons that cannot be passed to the client as functions.\n \"*:data-icon:pointer-events-none *:data-icon:size-5 *:data-icon:shrink-0 *:data-icon:transition-inherit-all\",\n ].join(\" \"),\n icon: \"pointer-events-none size-5 shrink-0 transition-inherit-all\",\n },\n sizes: {\n sm: {\n root: [\n \"gap-1 rounded-lg px-3 py-2 text-sm font-semibold before:rounded-[7px] data-icon-only:p-2\",\n \"in-data-input-wrapper:px-3.5 in-data-input-wrapper:py-2.5 in-data-input-wrapper:data-icon-only:p-2.5\",\n ].join(\" \"),\n linkRoot: \"gap-1\",\n },\n md: {\n root: [\n \"gap-1 rounded-lg px-3.5 py-2.5 text-sm font-semibold before:rounded-[7px] data-icon-only:p-2.5\",\n \"in-data-input-wrapper:gap-1.5 in-data-input-wrapper:px-4 in-data-input-wrapper:text-md in-data-input-wrapper:data-icon-only:p-3\",\n ].join(\" \"),\n linkRoot: \"gap-1\",\n },\n lg: {\n root: \"gap-1.5 rounded-lg px-4 py-2.5 text-md font-semibold before:rounded-[7px] data-icon-only:p-3\",\n linkRoot: \"gap-1.5\",\n },\n xl: {\n root: \"gap-1.5 rounded-lg px-4.5 py-3 text-md font-semibold before:rounded-[7px] data-icon-only:p-3.5\",\n linkRoot: \"gap-1.5\",\n },\n },\n\n colors: {\n primary: {\n root: [\n \"bg-brand-solid text-white shadow-xs-skeumorphic ring-1 ring-transparent ring-inset hover:bg-brand-solid_hover data-loading:bg-brand-solid_hover\",\n // Inner border gradient\n \"before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%\",\n // Disabled styles\n \"disabled:bg-disabled disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-button-primary-icon hover:*:data-icon:text-button-primary-icon_hover\",\n ].join(\" \"),\n },\n secondary: {\n root: [\n \"bg-primary text-secondary shadow-xs-skeumorphic ring-1 ring-primary ring-inset hover:bg-primary_hover hover:text-secondary_hover data-loading:bg-primary_hover\",\n // Disabled styles\n \"disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n tertiary: {\n root: [\n \"text-tertiary hover:bg-primary_hover hover:text-tertiary_hover data-loading:bg-primary_hover\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n \"link-gray\": {\n root: [\n \"justify-normal rounded p-0! text-tertiary hover:text-tertiary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n \"link-color\": {\n root: [\n \"justify-normal rounded p-0! text-brand-secondary hover:text-brand-secondary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-brand-secondary_alt hover:*:data-icon:text-fg-brand-secondary_hover\",\n ].join(\" \"),\n },\n \"primary-destructive\": {\n root: [\n \"bg-error-solid text-white shadow-xs-skeumorphic ring-1 ring-transparent outline-error ring-inset hover:bg-error-solid_hover data-loading:bg-error-solid_hover\",\n // Inner border gradient\n \"before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%\",\n // Disabled styles\n \"disabled:bg-disabled disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-button-destructive-primary-icon hover:*:data-icon:text-button-destructive-primary-icon_hover\",\n ].join(\" \"),\n },\n \"secondary-destructive\": {\n root: [\n \"bg-primary text-error-primary shadow-xs-skeumorphic ring-1 ring-error_subtle outline-error ring-inset hover:bg-error-primary hover:text-error-primary_hover data-loading:bg-error-primary\",\n // Disabled styles\n \"disabled:bg-primary disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n \"tertiary-destructive\": {\n root: [\n \"text-error-primary outline-error hover:bg-error-primary hover:text-error-primary_hover data-loading:bg-error-primary\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n \"link-destructive\": {\n root: [\n \"justify-normal rounded p-0! text-error-primary outline-error hover:text-error-primary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n },\n});\n\n/**\n * Common props shared between button and anchor variants\n */\nexport interface CommonProps {\n /** Disables the button and shows a disabled state */\n isDisabled?: boolean;\n /** Shows a loading spinner and disables the button */\n isLoading?: boolean;\n /** The size variant of the button */\n size?: keyof typeof styles.sizes;\n /** The color variant of the button */\n color?: keyof typeof styles.colors;\n /** Icon component or element to show before the text */\n iconLeading?: FC<{ className?: string }> | ReactNode;\n /** Icon component or element to show after the text */\n iconTrailing?: FC<{ className?: string }> | ReactNode;\n /** Removes horizontal padding from the text content */\n noTextPadding?: boolean;\n /** When true, keeps the text visible during loading state */\n showTextWhileLoading?: boolean;\n}\n\n/**\n * Props for the button variant (non-link)\n */\nexport interface ButtonProps extends CommonProps, DetailedHTMLProps<Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\" | \"slot\">, HTMLButtonElement> {\n /** Slot name for react-aria component */\n slot?: AriaButtonProps[\"slot\"];\n}\n\n/**\n * Props for the link variant (anchor tag)\n */\ninterface LinkProps extends CommonProps, DetailedHTMLProps<Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">, HTMLAnchorElement> {}\n\n/** Union type of button and link props */\nexport type Props = ButtonProps | LinkProps;\n\nexport const Button = ({\n size = \"sm\",\n color = \"primary\",\n children,\n className,\n noTextPadding,\n iconLeading: IconLeading,\n iconTrailing: IconTrailing,\n isDisabled: disabled,\n isLoading: loading,\n showTextWhileLoading,\n ...otherProps\n}: Props) => {\n const href = \"href\" in otherProps ? otherProps.href : undefined;\n const Component = href ? AriaLink : AriaButton;\n\n const isIcon = (IconLeading || IconTrailing) && !children;\n const isLinkType = [\"link-gray\", \"link-color\", \"link-destructive\"].includes(color);\n\n noTextPadding = isLinkType || noTextPadding;\n\n let props = {};\n\n if (href) {\n props = {\n ...otherProps,\n\n href: disabled ? undefined : href,\n };\n } else {\n props = {\n ...otherProps,\n\n type: otherProps.type || \"button\",\n isPending: loading,\n };\n }\n\n return (\n <Component\n data-loading={loading ? true : undefined}\n data-icon-only={isIcon ? true : undefined}\n {...props}\n isDisabled={disabled}\n className={cx(\n styles.common.root,\n styles.sizes[size].root,\n styles.colors[color].root,\n isLinkType && styles.sizes[size].linkRoot,\n (loading || (href && (disabled || loading))) && \"pointer-events-none\",\n // If in `loading` state, hide everything except the loading icon (and text if `showTextWhileLoading` is true).\n loading && (showTextWhileLoading ? \"[&>*:not([data-icon=loading]):not([data-text])]:hidden\" : \"[&>*:not([data-icon=loading])]:invisible\"),\n className,\n )}\n >\n {/* Leading icon */}\n {isValidElement(IconLeading) && IconLeading}\n {isReactComponent(IconLeading) && <IconLeading data-icon=\"leading\" className={styles.common.icon} />}\n\n {loading && (\n <svg\n fill=\"none\"\n data-icon=\"loading\"\n viewBox=\"0 0 20 20\"\n className={cx(styles.common.icon, !showTextWhileLoading && \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\")}\n >\n {/* Background circle */}\n <circle className=\"stroke-current opacity-30\" cx=\"10\" cy=\"10\" r=\"8\" fill=\"none\" strokeWidth=\"2\" />\n {/* Spinning circle */}\n <circle\n className=\"origin-center animate-spin stroke-current\"\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n fill=\"none\"\n strokeWidth=\"2\"\n strokeDasharray=\"12.5 50\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n\n {children && (\n <span data-text className={cx(\"transition-inherit-all\", !noTextPadding && \"px-0.5\")}>\n {children}\n </span>\n )}\n\n {/* Trailing icon */}\n {isValidElement(IconTrailing) && IconTrailing}\n {isReactComponent(IconTrailing) && <IconTrailing data-icon=\"trailing\" className={styles.common.icon} />}\n </Component>\n );\n};\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport type { TextProps as AriaTextProps } from \"react-aria-components\";\nimport { Text as AriaText } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface HintTextProps extends AriaTextProps {\n /** Indicates that the hint text is an error message. */\n isInvalid?: boolean;\n ref?: Ref<HTMLElement>;\n children: ReactNode;\n}\n\nexport const HintText = ({ isInvalid, className, ...props }: HintTextProps) => {\n return (\n <AriaText\n {...props}\n slot={isInvalid ? \"errorMessage\" : \"description\"}\n className={cx(\n \"text-sm text-tertiary\",\n\n // Invalid state\n isInvalid && \"text-error-primary\",\n \"group-invalid:text-error-primary\",\n\n className,\n )}\n />\n );\n};\n\nHintText.displayName = \"HintText\";\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type {\n ButtonProps as AriaButtonProps,\n TooltipProps as AriaTooltipProps,\n TooltipTriggerComponentProps as AriaTooltipTriggerComponentProps,\n} from \"react-aria-components\";\nimport { Button as AriaButton, OverlayArrow as AriaOverlayArrow, Tooltip as AriaTooltip, TooltipTrigger as AriaTooltipTrigger } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface TooltipProps extends AriaTooltipTriggerComponentProps, Omit<AriaTooltipProps, \"children\"> {\n /**\n * The title of the tooltip.\n */\n title: ReactNode;\n /**\n * The description of the tooltip.\n */\n description?: ReactNode;\n /**\n * Whether to show the arrow on the tooltip.\n *\n * @default false\n */\n arrow?: boolean;\n /**\n * Delay in milliseconds before the tooltip is shown.\n *\n * @default 300\n */\n delay?: number;\n}\n\nexport const Tooltip = ({\n title,\n description,\n children,\n arrow = false,\n delay = 300,\n closeDelay = 0,\n trigger,\n isDisabled,\n isOpen,\n defaultOpen,\n offset = 6,\n crossOffset,\n placement = \"top\",\n onOpenChange,\n ...tooltipProps\n}: TooltipProps) => {\n const isTopOrBottomLeft = [\"top left\", \"top end\", \"bottom left\", \"bottom end\"].includes(placement);\n const isTopOrBottomRight = [\"top right\", \"top start\", \"bottom right\", \"bottom start\"].includes(placement);\n // Set negative cross offset for left and right placement to visually balance the tooltip.\n const calculatedCrossOffset = isTopOrBottomLeft ? -12 : isTopOrBottomRight ? 12 : 0;\n\n return (\n <AriaTooltipTrigger {...{ trigger, delay, closeDelay, isDisabled, isOpen, defaultOpen, onOpenChange }}>\n {children}\n\n <AriaTooltip\n {...tooltipProps}\n offset={offset}\n placement={placement}\n crossOffset={crossOffset ?? calculatedCrossOffset}\n className={({ isEntering, isExiting }) => cx(isEntering && \"ease-out animate-in\", isExiting && \"ease-in animate-out\")}\n >\n {({ isEntering, isExiting }) => (\n <div\n className={cx(\n \"z-50 flex max-w-xs origin-(--trigger-anchor-point) flex-col items-start gap-1 rounded-lg bg-primary-solid px-3 shadow-lg will-change-transform\",\n description ? \"py-3\" : \"py-2\",\n\n isEntering &&\n \"ease-out animate-in fade-in zoom-in-95 in-placement-left:slide-in-from-right-0.5 in-placement-right:slide-in-from-left-0.5 in-placement-top:slide-in-from-bottom-0.5 in-placement-bottom:slide-in-from-top-0.5\",\n isExiting &&\n \"ease-in animate-out fade-out zoom-out-95 in-placement-left:slide-out-to-right-0.5 in-placement-right:slide-out-to-left-0.5 in-placement-top:slide-out-to-bottom-0.5 in-placement-bottom:slide-out-to-top-0.5\",\n )}\n >\n <span className=\"text-xs font-semibold text-white\">{title}</span>\n\n {description && <span className=\"text-xs font-medium text-tooltip-supporting-text\">{description}</span>}\n\n {arrow && (\n <AriaOverlayArrow>\n <svg\n viewBox=\"0 0 100 100\"\n className=\"size-2.5 fill-bg-primary-solid in-placement-left:-rotate-90 in-placement-right:rotate-90 in-placement-top:rotate-0 in-placement-bottom:rotate-180\"\n >\n <path d=\"M0,0 L35.858,35.858 Q50,50 64.142,35.858 L100,0 Z\" />\n </svg>\n </AriaOverlayArrow>\n )}\n </div>\n )}\n </AriaTooltip>\n </AriaTooltipTrigger>\n );\n};\n\ninterface TooltipTriggerProps extends AriaButtonProps {}\n\nexport const TooltipTrigger = ({ children, className, ...buttonProps }: TooltipTriggerProps) => {\n return (\n <AriaButton {...buttonProps} className={(values) => cx(\"h-max w-max outline-hidden\", typeof className === \"function\" ? className(values) : className)}>\n {children}\n </AriaButton>\n );\n};\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport { HelpCircle } from \"@untitledui/icons\";\nimport type { LabelProps as AriaLabelProps } from \"react-aria-components\";\nimport { Label as AriaLabel } from \"react-aria-components\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx } from \"@/utils/cx\";\n\ninterface LabelProps extends AriaLabelProps {\n children: ReactNode;\n isRequired?: boolean;\n tooltip?: string;\n tooltipDescription?: string;\n ref?: Ref<HTMLLabelElement>;\n}\n\nexport const Label = ({ isRequired, tooltip, tooltipDescription, className, ...props }: LabelProps) => {\n return (\n <AriaLabel\n // Used for conditionally hiding/showing the label element via CSS:\n // <Input label=\"Visible only on mobile\" className=\"lg:**:data-label:hidden\" />\n // or\n // <Input label=\"Visible only on mobile\" className=\"lg:label:hidden\" />\n data-label=\"true\"\n {...props}\n className={cx(\"flex cursor-default items-center gap-0.5 text-sm font-medium text-secondary\", className)}\n >\n {props.children}\n\n <span className={cx(\"hidden text-brand-tertiary\", isRequired && \"block\", typeof isRequired === \"undefined\" && \"group-required:block\")}>*</span>\n\n {tooltip && (\n <Tooltip title={tooltip} description={tooltipDescription} placement=\"top\">\n <TooltipTrigger\n // `TooltipTrigger` inherits the disabled state from the parent form field\n // but we don't that. We want the tooltip be enabled even if the parent\n // field is disabled.\n isDisabled={false}\n className=\"cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\"\n >\n <HelpCircle className=\"size-4\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n </AriaLabel>\n );\n};\n\nLabel.displayName = \"Label\";\n","\"use client\";\n\nimport { type ComponentType, type HTMLAttributes, type ReactNode, type Ref, createContext, useContext } from \"react\";\nimport { HelpCircle, InfoCircle } from \"@untitledui/icons\";\nimport type { InputProps as AriaInputProps, TextFieldProps as AriaTextFieldProps } from \"react-aria-components\";\nimport { Group as AriaGroup, Input as AriaInput, TextField as AriaTextField } from \"react-aria-components\";\nimport { HintText } from \"@/components/base/input/hint-text\";\nimport { Label } from \"@/components/base/input/label\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx, sortCx } from \"@/utils/cx\";\n\nexport interface InputBaseProps extends TextFieldProps {\n /** Tooltip message on hover. */\n tooltip?: string;\n /**\n * Input size.\n * @default \"sm\"\n */\n size?: \"sm\" | \"md\";\n /** Placeholder text. */\n placeholder?: string;\n /** Class name for the icon. */\n iconClassName?: string;\n /** Class name for the input. */\n inputClassName?: string;\n /** Class name for the input wrapper. */\n wrapperClassName?: string;\n /** Class name for the tooltip. */\n tooltipClassName?: string;\n /** Keyboard shortcut to display. */\n shortcut?: string | boolean;\n ref?: Ref<HTMLInputElement>;\n groupRef?: Ref<HTMLDivElement>;\n /** Icon component to display on the left side of the input. */\n icon?: ComponentType<HTMLAttributes<HTMLOrSVGElement>>;\n}\n\nexport const InputBase = ({\n ref,\n tooltip,\n shortcut,\n groupRef,\n size = \"sm\",\n isInvalid,\n isDisabled,\n icon: Icon,\n placeholder,\n wrapperClassName,\n tooltipClassName,\n inputClassName,\n iconClassName,\n // Omit this prop to avoid invalid HTML attribute warning\n isRequired: _isRequired,\n ...inputProps\n}: Omit<InputBaseProps, \"label\" | \"hint\">) => {\n // Check if the input has a leading icon or tooltip\n const hasTrailingIcon = tooltip || isInvalid;\n const hasLeadingIcon = Icon;\n\n // If the input is inside a `TextFieldContext`, use its context to simplify applying styles\n const context = useContext(TextFieldContext);\n\n const inputSize = context?.size || size;\n\n const sizes = sortCx({\n sm: {\n root: cx(\"px-3 py-2\", hasTrailingIcon && \"pr-9\", hasLeadingIcon && \"pl-10\"),\n iconLeading: \"left-3\",\n iconTrailing: \"right-3\",\n shortcut: \"pr-2.5\",\n },\n md: {\n root: cx(\"px-3.5 py-2.5\", hasTrailingIcon && \"pr-9.5\", hasLeadingIcon && \"pl-10.5\"),\n iconLeading: \"left-3.5\",\n iconTrailing: \"right-3.5\",\n shortcut: \"pr-3\",\n },\n });\n\n return (\n <AriaGroup\n {...{ isDisabled, isInvalid }}\n ref={groupRef}\n className={({ isFocusWithin, isDisabled, isInvalid }) =>\n cx(\n \"relative flex w-full flex-row place-content-center place-items-center rounded-lg bg-primary shadow-xs ring-1 ring-primary transition-shadow duration-100 ease-linear ring-inset\",\n\n isFocusWithin && !isDisabled && \"ring-2 ring-brand\",\n\n // Disabled state styles\n isDisabled && \"cursor-not-allowed bg-disabled_subtle ring-disabled\",\n \"group-disabled:cursor-not-allowed group-disabled:bg-disabled_subtle group-disabled:ring-disabled\",\n\n // Invalid state styles\n isInvalid && \"ring-error_subtle\",\n \"group-invalid:ring-error_subtle\",\n\n // Invalid state with focus-within styles\n isInvalid && isFocusWithin && \"ring-2 ring-error\",\n isFocusWithin && \"group-invalid:ring-2 group-invalid:ring-error\",\n\n context?.wrapperClassName,\n wrapperClassName,\n )\n }\n >\n {/* Leading icon and Payment icon */}\n {Icon && (\n <Icon\n className={cx(\n \"pointer-events-none absolute size-5 text-fg-quaternary\",\n isDisabled && \"text-fg-disabled\",\n sizes[inputSize].iconLeading,\n context?.iconClassName,\n iconClassName,\n )}\n />\n )}\n\n {/* Input field */}\n <AriaInput\n {...(inputProps as AriaInputProps)}\n ref={ref}\n placeholder={placeholder}\n className={cx(\n \"m-0 w-full bg-transparent text-md text-primary ring-0 outline-hidden placeholder:text-placeholder autofill:rounded-lg autofill:text-primary\",\n isDisabled && \"cursor-not-allowed text-disabled\",\n sizes[inputSize].root,\n context?.inputClassName,\n inputClassName,\n )}\n />\n\n {/* Tooltip and help icon */}\n {tooltip && !isInvalid && (\n <Tooltip title={tooltip} placement=\"top\">\n <TooltipTrigger\n className={cx(\n \"absolute cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\",\n sizes[inputSize].iconTrailing,\n context?.tooltipClassName,\n tooltipClassName,\n )}\n >\n <HelpCircle className=\"size-4\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n\n {/* Invalid icon */}\n {isInvalid && (\n <InfoCircle\n className={cx(\n \"pointer-events-none absolute size-4 text-fg-error-secondary\",\n sizes[inputSize].iconTrailing,\n context?.tooltipClassName,\n tooltipClassName,\n )}\n />\n )}\n\n {/* Shortcut */}\n {shortcut && (\n <div\n className={cx(\n \"pointer-events-none absolute inset-y-0.5 right-0.5 z-10 flex items-center rounded-r-[inherit] bg-linear-to-r from-transparent to-bg-primary to-40% pl-8\",\n sizes[inputSize].shortcut,\n )}\n >\n <span\n className={cx(\n \"pointer-events-none rounded px-1 py-px text-xs font-medium text-quaternary ring-1 ring-secondary select-none ring-inset\",\n isDisabled && \"bg-transparent text-disabled\",\n )}\n aria-hidden=\"true\"\n >\n {typeof shortcut === \"string\" ? shortcut : \"⌘K\"}\n </span>\n </div>\n )}\n </AriaGroup>\n );\n};\n\nInputBase.displayName = \"InputBase\";\n\ninterface BaseProps {\n /** Label text for the input */\n label?: string;\n /** Helper text displayed below the input */\n hint?: ReactNode;\n}\n\ninterface TextFieldProps\n extends BaseProps,\n AriaTextFieldProps,\n Pick<InputBaseProps, \"size\" | \"wrapperClassName\" | \"inputClassName\" | \"iconClassName\" | \"tooltipClassName\"> {\n ref?: Ref<HTMLDivElement>;\n}\n\nconst TextFieldContext = createContext<TextFieldProps>({});\n\nexport const TextField = ({ className, ...props }: TextFieldProps) => {\n return (\n <TextFieldContext.Provider value={props}>\n <AriaTextField\n {...props}\n data-input-wrapper\n className={(state) =>\n cx(\"group flex h-max w-full flex-col items-start justify-start gap-1.5\", typeof className === \"function\" ? className(state) : className)\n }\n />\n </TextFieldContext.Provider>\n );\n};\n\nTextField.displayName = \"TextField\";\n\ninterface InputProps extends InputBaseProps, BaseProps {\n /** Whether to hide required indicator from label */\n hideRequiredIndicator?: boolean;\n}\n\nexport const Input = ({\n size = \"sm\",\n placeholder,\n icon: Icon,\n label,\n hint,\n shortcut,\n hideRequiredIndicator,\n className,\n ref,\n groupRef,\n tooltip,\n iconClassName,\n inputClassName,\n wrapperClassName,\n tooltipClassName,\n ...props\n}: InputProps) => {\n return (\n <TextField aria-label={!label ? placeholder : undefined} {...props} className={className}>\n {({ isRequired, isInvalid }) => (\n <>\n {label && <Label isRequired={hideRequiredIndicator ? !hideRequiredIndicator : isRequired}>{label}</Label>}\n\n <InputBase\n {...{\n ref,\n groupRef,\n size,\n placeholder,\n icon: Icon,\n shortcut,\n iconClassName,\n inputClassName,\n wrapperClassName,\n tooltipClassName,\n tooltip,\n }}\n />\n\n {hint && <HintText isInvalid={isInvalid}>{hint}</HintText>}\n </>\n )}\n </TextField>\n );\n};\n\nInput.displayName = \"Input\";\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { getTasksCount } from \"@/api/tasks\";\nimport { ActivityGaugeLg, type ActivityGaugeDatum } from \"@/components/application/charts/activity-gauge-lg\";\nimport { Button } from \"@/components/base/buttons/button\";\nimport { Input } from \"@/components/base/input/input\";\n\nexport type TasksActivityGaugeProps = {\n daysBack?: number;\n maxValue?: number;\n};\n\nexport const TasksActivityGauge = ({ daysBack = 14, maxValue = 1000 }: TasksActivityGaugeProps) => {\n const [count, setCount] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [daysBackValue, setDaysBackValue] = useState(daysBack.toString());\n const [activeDaysBack, setActiveDaysBack] = useState(daysBack);\n\n const subtitle = useMemo(() => `Tasks last ${activeDaysBack} days`, [activeDaysBack]);\n\n const fetchCount = useCallback(\n async (value: number) => {\n setIsLoading(true);\n setError(null);\n try {\n const total = await getTasksCount(value);\n setCount(total);\n } catch (err: unknown) {\n setError(err instanceof Error ? err.message : \"Failed to load tasks count\");\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n useEffect(() => {\n let isActive = true;\n\n setIsLoading(true);\n setError(null);\n setCount(null);\n\n getTasksCount(activeDaysBack)\n .then((total) => {\n if (isActive) {\n setCount(total);\n }\n })\n .catch((err: unknown) => {\n if (isActive) {\n setError(err instanceof Error ? err.message : \"Failed to load tasks count\");\n }\n })\n .finally(() => {\n if (isActive) {\n setIsLoading(false);\n }\n });\n\n return () => {\n isActive = false;\n };\n }, [activeDaysBack]);\n\n const title = error ? \"—\" : count === null ? \"…\" : count.toLocaleString();\n const gaugeValue = count ?? 0;\n const computedMax = Math.max(maxValue, gaugeValue, 1);\n const gaugeData: ActivityGaugeDatum[] = [\n {\n name: \"Tasks\",\n value: gaugeValue,\n className: \"text-utility-brand-700\",\n },\n ];\n\n const handleDaysBackChange = (value: string) => {\n setDaysBackValue(value);\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed > 0) {\n setActiveDaysBack(Math.floor(parsed));\n }\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-wrap items-end justify-between gap-3\">\n <div className=\"min-w-[180px]\">\n <Input\n label=\"Days back\"\n type=\"number\"\n value={daysBackValue}\n onChange={handleDaysBackChange}\n size=\"sm\"\n placeholder=\"14\"\n />\n </div>\n <Button\n color=\"primary\"\n size=\"sm\"\n isLoading={isLoading}\n showTextWhileLoading\n onClick={() => fetchCount(activeDaysBack)}\n >\n Refresh\n </Button>\n </div>\n <ActivityGaugeLg title={title} subtitle={subtitle} data={gaugeData} maxValue={computedMax} />\n </div>\n );\n};\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -84,6 +84,8 @@ var ActivityGaugeLg = ({
|
|
|
84
84
|
data = radialData,
|
|
85
85
|
maxValue = 1e3
|
|
86
86
|
}) => {
|
|
87
|
+
var _a, _b;
|
|
88
|
+
const ringClassName = (_b = (_a = data[0]) == null ? void 0 : _a.className) != null ? _b : "text-utility-brand-700";
|
|
87
89
|
return /* @__PURE__ */ jsx(ResponsiveContainer, { height: 356, children: /* @__PURE__ */ jsxs(
|
|
88
90
|
RadialBarChart,
|
|
89
91
|
{
|
|
@@ -110,6 +112,7 @@ var ActivityGaugeLg = ({
|
|
|
110
112
|
dataKey: "value",
|
|
111
113
|
cornerRadius: 99,
|
|
112
114
|
fill: "currentColor",
|
|
115
|
+
className: ringClassName,
|
|
113
116
|
background: {
|
|
114
117
|
className: "fill-utility-gray-100"
|
|
115
118
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cx.ts","../src/components/application/charts/charts-base.tsx","../src/components/application/charts/activity-gauge-lg.tsx","../src/api/tasks.ts","../src/utils/is-react-component.ts","../src/components/base/buttons/button.tsx","../src/components/base/input/hint-text.tsx","../src/components/base/tooltip/tooltip.tsx","../src/components/base/input/label.tsx","../src/components/base/input/input.tsx","../src/components/application/charts/tasks-activity-gauge.tsx"],"names":["jsx","jsxs","AriaLink","AriaButton","AriaText","Tooltip","AriaTooltipTrigger","AriaTooltip","AriaOverlayArrow","AriaLabel","AriaGroup","isDisabled","isInvalid","AriaInput","HelpCircle","AriaTextField"],"mappings":"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","file":"index.mjs","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\nimport type { TooltipProps } from \"recharts\";\n\nimport { cx } from \"@/utils/cx\";\n\ntype LegendPayload = {\n value?: string;\n payload?: {\n className?: string;\n };\n};\n\ntype LegendProps = {\n payload?: LegendPayload[];\n};\n\nexport const ChartLegendContent = ({ payload = [] }: LegendProps) => {\n if (payload.length === 0) {\n return null;\n }\n\n return (\n <div className=\"flex flex-wrap items-center justify-center gap-x-4 gap-y-2\">\n {payload.map((entry, index) => (\n <div key={`${entry.value ?? \"item\"}-${index}`} className=\"flex items-center gap-2\">\n <span\n className={cx(\n \"size-2 rounded-full bg-utility-gray-300\",\n entry.payload?.className ? entry.payload.className.replace(\"text-\", \"bg-\") : undefined,\n )}\n />\n <span className=\"text-xs font-medium text-secondary\">{entry.value}</span>\n </div>\n ))}\n </div>\n );\n};\n\ntype ChartTooltipContentProps = TooltipProps<number, string> & {\n isRadialChart?: boolean;\n};\n\nexport const ChartTooltipContent = ({ active, payload, label, isRadialChart }: ChartTooltipContentProps) => {\n if (!active || !payload || payload.length === 0) {\n return null;\n }\n\n return (\n <div className=\"rounded-lg border border-secondary bg-primary px-3 py-2 shadow-sm\">\n {label && <div className=\"text-xs font-medium text-tertiary\">{label}</div>}\n <div className=\"mt-1 space-y-1\">\n {payload.map((entry, index) => (\n <div key={`${entry.name ?? \"value\"}-${index}`} className=\"flex items-center gap-2 text-xs\">\n <span\n className={cx(\n \"size-2 rounded-full bg-utility-gray-300\",\n entry.payload?.className ? entry.payload.className.replace(\"text-\", \"bg-\") : undefined,\n )}\n />\n <span className=\"text-secondary\">{entry.name ?? (isRadialChart ? \"Value\" : label)}</span>\n <span className=\"ml-auto font-medium text-primary\">{entry.value}</span>\n </div>\n ))}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport { PolarAngleAxis, RadialBar, RadialBarChart, ResponsiveContainer, Tooltip } from \"recharts\";\n\nimport { ChartTooltipContent } from \"@/components/application/charts/charts-base\";\nimport { cx } from \"@/utils/cx\";\n\nexport type ActivityGaugeDatum = {\n name: string;\n value: number;\n className?: string;\n};\n\nexport type ActivityGaugeProps = {\n title?: string;\n subtitle?: string;\n data?: ActivityGaugeDatum[];\n maxValue?: number;\n};\n\nconst radialData: ActivityGaugeDatum[] = [\n {\n name: \"Tasks\",\n value: 1000,\n className: \"text-utility-brand-700\",\n },\n];\n\nexport const ActivityGaugeLg = ({\n title = \"1,000\",\n subtitle = \"Active users\",\n data = radialData,\n maxValue = 1000,\n}: ActivityGaugeProps) => {\n return (\n <ResponsiveContainer height={356}>\n <RadialBarChart\n data={data}\n accessibilityLayer\n innerRadius={84}\n outerRadius={154}\n startAngle={90}\n endAngle={360 + 90}\n className=\"font-medium text-tertiary [&_.recharts-polar-grid]:text-utility-gray-100 [&_.recharts-text]:text-sm\"\n margin={{\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n }}\n >\n <PolarAngleAxis tick={false} domain={[0, maxValue]} type=\"number\" reversed />\n\n <Tooltip content={<ChartTooltipContent isRadialChart />} />\n\n <RadialBar\n isAnimationActive={false}\n dataKey=\"value\"\n cornerRadius={99}\n fill=\"currentColor\"\n background={{\n className: \"fill-utility-gray-100\",\n }}\n />\n\n {(title || subtitle) && (\n <text x=\"50%\" y=\"50%\" textAnchor=\"middle\" dominantBaseline=\"middle\">\n {subtitle && (\n <tspan\n x=\"50%\"\n dy={title ? \"-1.4em\" : \"1%\"}\n className={cx(\"fill-current text-tertiary\", \"text-sm font-medium\")}\n >\n {subtitle}\n </tspan>\n )}\n {title && (\n <tspan\n x=\"50%\"\n dy={subtitle ? \"1em\" : \"1%\"}\n className={cx(\"fill-current text-primary\", \"text-display-md font-semibold\")}\n >\n {title}\n </tspan>\n )}\n </text>\n )}\n </RadialBarChart>\n </ResponsiveContainer>\n );\n};\n","export type TasksCountResponse = {\n count: number;\n daysBack: number;\n since: string;\n};\n\ntype GetTasksCountOptions = {\n baseUrl?: string;\n moduleKey?: string;\n signal?: AbortSignal;\n};\n\nconst DEFAULT_API_BASE_URL = \"https://api.thesqd.com\";\nconst DEFAULT_MODULE_KEY = \"e166f127e73167b6646eeaeff8837566d3c27d4002fb122bc49d4fb06d97d67e\";\n\nexport const getTasksCount = async (daysBack: number, options: GetTasksCountOptions = {}) => {\n const resolvedDaysBack = Number.isFinite(daysBack) && daysBack > 0 ? Math.floor(daysBack) : 7;\n const baseUrl = options.baseUrl ?? process.env.NEXT_PUBLIC_SQD_API_BASE_URL ?? DEFAULT_API_BASE_URL;\n const moduleKey = options.moduleKey ?? process.env.NEXT_PUBLIC_SQD_MODULE_KEY ?? DEFAULT_MODULE_KEY;\n const url = new URL(\"/module-template/task-count\", baseUrl);\n\n url.searchParams.set(\"daysBack\", String(resolvedDaysBack));\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sqd-module-key\": moduleKey,\n },\n cache: \"no-store\",\n signal: options.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch tasks count (${response.status})`);\n }\n\n const payload = (await response.json()) as TasksCountResponse;\n\n return payload.count ?? 0;\n};\n","/* We cannot use type `unknown` instead of `any` here because it will break the type assertion `isReactComponent` function is providing. */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type React from \"react\";\n\ntype ReactComponent = React.FC<any> | React.ComponentClass<any, any>;\n\n/**\n * Checks if a given value is a function component.\n */\nexport const isFunctionComponent = (component: any): component is React.FC<any> => {\n return typeof component === \"function\";\n};\n\n/**\n * Checks if a given value is a class component.\n */\nexport const isClassComponent = (component: any): component is React.ComponentClass<any, any> => {\n return typeof component === \"function\" && component.prototype && (!!component.prototype.isReactComponent || !!component.prototype.render);\n};\n\n/**\n * Checks if a given value is a forward ref component.\n */\nexport const isForwardRefComponent = (component: any): component is React.ForwardRefExoticComponent<any> => {\n return typeof component === \"object\" && component !== null && component.$$typeof.toString() === \"Symbol(react.forward_ref)\";\n};\n\n/**\n * Checks if a given value is a valid React component.\n */\nexport const isReactComponent = (component: any): component is ReactComponent => {\n return isFunctionComponent(component) || isForwardRefComponent(component) || isClassComponent(component);\n};\n","\"use client\";\n\nimport type { AnchorHTMLAttributes, ButtonHTMLAttributes, DetailedHTMLProps, FC, ReactNode } from \"react\";\nimport React, { isValidElement } from \"react\";\nimport type { ButtonProps as AriaButtonProps } from \"react-aria-components\";\nimport { Button as AriaButton, Link as AriaLink } from \"react-aria-components\";\nimport { cx, sortCx } from \"@/utils/cx\";\nimport { isReactComponent } from \"@/utils/is-react-component\";\n\nexport const styles = sortCx({\n common: {\n root: [\n \"group relative inline-flex h-max cursor-pointer items-center justify-center whitespace-nowrap outline-brand transition duration-100 ease-linear before:absolute focus-visible:outline-2 focus-visible:outline-offset-2\",\n // When button is used within `InputGroup`\n \"in-data-input-wrapper:shadow-xs in-data-input-wrapper:focus:!z-50 in-data-input-wrapper:in-data-leading:-mr-px in-data-input-wrapper:in-data-leading:rounded-r-none in-data-input-wrapper:in-data-leading:before:rounded-r-none in-data-input-wrapper:in-data-trailing:-ml-px in-data-input-wrapper:in-data-trailing:rounded-l-none in-data-input-wrapper:in-data-trailing:before:rounded-l-none\",\n // Disabled styles\n \"disabled:cursor-not-allowed disabled:text-fg-disabled\",\n // Icon styles\n \"disabled:*:data-icon:text-fg-disabled_subtle\",\n // Same as `icon` but for SSR icons that cannot be passed to the client as functions.\n \"*:data-icon:pointer-events-none *:data-icon:size-5 *:data-icon:shrink-0 *:data-icon:transition-inherit-all\",\n ].join(\" \"),\n icon: \"pointer-events-none size-5 shrink-0 transition-inherit-all\",\n },\n sizes: {\n sm: {\n root: [\n \"gap-1 rounded-lg px-3 py-2 text-sm font-semibold before:rounded-[7px] data-icon-only:p-2\",\n \"in-data-input-wrapper:px-3.5 in-data-input-wrapper:py-2.5 in-data-input-wrapper:data-icon-only:p-2.5\",\n ].join(\" \"),\n linkRoot: \"gap-1\",\n },\n md: {\n root: [\n \"gap-1 rounded-lg px-3.5 py-2.5 text-sm font-semibold before:rounded-[7px] data-icon-only:p-2.5\",\n \"in-data-input-wrapper:gap-1.5 in-data-input-wrapper:px-4 in-data-input-wrapper:text-md in-data-input-wrapper:data-icon-only:p-3\",\n ].join(\" \"),\n linkRoot: \"gap-1\",\n },\n lg: {\n root: \"gap-1.5 rounded-lg px-4 py-2.5 text-md font-semibold before:rounded-[7px] data-icon-only:p-3\",\n linkRoot: \"gap-1.5\",\n },\n xl: {\n root: \"gap-1.5 rounded-lg px-4.5 py-3 text-md font-semibold before:rounded-[7px] data-icon-only:p-3.5\",\n linkRoot: \"gap-1.5\",\n },\n },\n\n colors: {\n primary: {\n root: [\n \"bg-brand-solid text-white shadow-xs-skeumorphic ring-1 ring-transparent ring-inset hover:bg-brand-solid_hover data-loading:bg-brand-solid_hover\",\n // Inner border gradient\n \"before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%\",\n // Disabled styles\n \"disabled:bg-disabled disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-button-primary-icon hover:*:data-icon:text-button-primary-icon_hover\",\n ].join(\" \"),\n },\n secondary: {\n root: [\n \"bg-primary text-secondary shadow-xs-skeumorphic ring-1 ring-primary ring-inset hover:bg-primary_hover hover:text-secondary_hover data-loading:bg-primary_hover\",\n // Disabled styles\n \"disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n tertiary: {\n root: [\n \"text-tertiary hover:bg-primary_hover hover:text-tertiary_hover data-loading:bg-primary_hover\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n \"link-gray\": {\n root: [\n \"justify-normal rounded p-0! text-tertiary hover:text-tertiary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n \"link-color\": {\n root: [\n \"justify-normal rounded p-0! text-brand-secondary hover:text-brand-secondary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-brand-secondary_alt hover:*:data-icon:text-fg-brand-secondary_hover\",\n ].join(\" \"),\n },\n \"primary-destructive\": {\n root: [\n \"bg-error-solid text-white shadow-xs-skeumorphic ring-1 ring-transparent outline-error ring-inset hover:bg-error-solid_hover data-loading:bg-error-solid_hover\",\n // Inner border gradient\n \"before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%\",\n // Disabled styles\n \"disabled:bg-disabled disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-button-destructive-primary-icon hover:*:data-icon:text-button-destructive-primary-icon_hover\",\n ].join(\" \"),\n },\n \"secondary-destructive\": {\n root: [\n \"bg-primary text-error-primary shadow-xs-skeumorphic ring-1 ring-error_subtle outline-error ring-inset hover:bg-error-primary hover:text-error-primary_hover data-loading:bg-error-primary\",\n // Disabled styles\n \"disabled:bg-primary disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n \"tertiary-destructive\": {\n root: [\n \"text-error-primary outline-error hover:bg-error-primary hover:text-error-primary_hover data-loading:bg-error-primary\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n \"link-destructive\": {\n root: [\n \"justify-normal rounded p-0! text-error-primary outline-error hover:text-error-primary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n },\n});\n\n/**\n * Common props shared between button and anchor variants\n */\nexport interface CommonProps {\n /** Disables the button and shows a disabled state */\n isDisabled?: boolean;\n /** Shows a loading spinner and disables the button */\n isLoading?: boolean;\n /** The size variant of the button */\n size?: keyof typeof styles.sizes;\n /** The color variant of the button */\n color?: keyof typeof styles.colors;\n /** Icon component or element to show before the text */\n iconLeading?: FC<{ className?: string }> | ReactNode;\n /** Icon component or element to show after the text */\n iconTrailing?: FC<{ className?: string }> | ReactNode;\n /** Removes horizontal padding from the text content */\n noTextPadding?: boolean;\n /** When true, keeps the text visible during loading state */\n showTextWhileLoading?: boolean;\n}\n\n/**\n * Props for the button variant (non-link)\n */\nexport interface ButtonProps extends CommonProps, DetailedHTMLProps<Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\" | \"slot\">, HTMLButtonElement> {\n /** Slot name for react-aria component */\n slot?: AriaButtonProps[\"slot\"];\n}\n\n/**\n * Props for the link variant (anchor tag)\n */\ninterface LinkProps extends CommonProps, DetailedHTMLProps<Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">, HTMLAnchorElement> {}\n\n/** Union type of button and link props */\nexport type Props = ButtonProps | LinkProps;\n\nexport const Button = ({\n size = \"sm\",\n color = \"primary\",\n children,\n className,\n noTextPadding,\n iconLeading: IconLeading,\n iconTrailing: IconTrailing,\n isDisabled: disabled,\n isLoading: loading,\n showTextWhileLoading,\n ...otherProps\n}: Props) => {\n const href = \"href\" in otherProps ? otherProps.href : undefined;\n const Component = href ? AriaLink : AriaButton;\n\n const isIcon = (IconLeading || IconTrailing) && !children;\n const isLinkType = [\"link-gray\", \"link-color\", \"link-destructive\"].includes(color);\n\n noTextPadding = isLinkType || noTextPadding;\n\n let props = {};\n\n if (href) {\n props = {\n ...otherProps,\n\n href: disabled ? undefined : href,\n };\n } else {\n props = {\n ...otherProps,\n\n type: otherProps.type || \"button\",\n isPending: loading,\n };\n }\n\n return (\n <Component\n data-loading={loading ? true : undefined}\n data-icon-only={isIcon ? true : undefined}\n {...props}\n isDisabled={disabled}\n className={cx(\n styles.common.root,\n styles.sizes[size].root,\n styles.colors[color].root,\n isLinkType && styles.sizes[size].linkRoot,\n (loading || (href && (disabled || loading))) && \"pointer-events-none\",\n // If in `loading` state, hide everything except the loading icon (and text if `showTextWhileLoading` is true).\n loading && (showTextWhileLoading ? \"[&>*:not([data-icon=loading]):not([data-text])]:hidden\" : \"[&>*:not([data-icon=loading])]:invisible\"),\n className,\n )}\n >\n {/* Leading icon */}\n {isValidElement(IconLeading) && IconLeading}\n {isReactComponent(IconLeading) && <IconLeading data-icon=\"leading\" className={styles.common.icon} />}\n\n {loading && (\n <svg\n fill=\"none\"\n data-icon=\"loading\"\n viewBox=\"0 0 20 20\"\n className={cx(styles.common.icon, !showTextWhileLoading && \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\")}\n >\n {/* Background circle */}\n <circle className=\"stroke-current opacity-30\" cx=\"10\" cy=\"10\" r=\"8\" fill=\"none\" strokeWidth=\"2\" />\n {/* Spinning circle */}\n <circle\n className=\"origin-center animate-spin stroke-current\"\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n fill=\"none\"\n strokeWidth=\"2\"\n strokeDasharray=\"12.5 50\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n\n {children && (\n <span data-text className={cx(\"transition-inherit-all\", !noTextPadding && \"px-0.5\")}>\n {children}\n </span>\n )}\n\n {/* Trailing icon */}\n {isValidElement(IconTrailing) && IconTrailing}\n {isReactComponent(IconTrailing) && <IconTrailing data-icon=\"trailing\" className={styles.common.icon} />}\n </Component>\n );\n};\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport type { TextProps as AriaTextProps } from \"react-aria-components\";\nimport { Text as AriaText } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface HintTextProps extends AriaTextProps {\n /** Indicates that the hint text is an error message. */\n isInvalid?: boolean;\n ref?: Ref<HTMLElement>;\n children: ReactNode;\n}\n\nexport const HintText = ({ isInvalid, className, ...props }: HintTextProps) => {\n return (\n <AriaText\n {...props}\n slot={isInvalid ? \"errorMessage\" : \"description\"}\n className={cx(\n \"text-sm text-tertiary\",\n\n // Invalid state\n isInvalid && \"text-error-primary\",\n \"group-invalid:text-error-primary\",\n\n className,\n )}\n />\n );\n};\n\nHintText.displayName = \"HintText\";\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type {\n ButtonProps as AriaButtonProps,\n TooltipProps as AriaTooltipProps,\n TooltipTriggerComponentProps as AriaTooltipTriggerComponentProps,\n} from \"react-aria-components\";\nimport { Button as AriaButton, OverlayArrow as AriaOverlayArrow, Tooltip as AriaTooltip, TooltipTrigger as AriaTooltipTrigger } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface TooltipProps extends AriaTooltipTriggerComponentProps, Omit<AriaTooltipProps, \"children\"> {\n /**\n * The title of the tooltip.\n */\n title: ReactNode;\n /**\n * The description of the tooltip.\n */\n description?: ReactNode;\n /**\n * Whether to show the arrow on the tooltip.\n *\n * @default false\n */\n arrow?: boolean;\n /**\n * Delay in milliseconds before the tooltip is shown.\n *\n * @default 300\n */\n delay?: number;\n}\n\nexport const Tooltip = ({\n title,\n description,\n children,\n arrow = false,\n delay = 300,\n closeDelay = 0,\n trigger,\n isDisabled,\n isOpen,\n defaultOpen,\n offset = 6,\n crossOffset,\n placement = \"top\",\n onOpenChange,\n ...tooltipProps\n}: TooltipProps) => {\n const isTopOrBottomLeft = [\"top left\", \"top end\", \"bottom left\", \"bottom end\"].includes(placement);\n const isTopOrBottomRight = [\"top right\", \"top start\", \"bottom right\", \"bottom start\"].includes(placement);\n // Set negative cross offset for left and right placement to visually balance the tooltip.\n const calculatedCrossOffset = isTopOrBottomLeft ? -12 : isTopOrBottomRight ? 12 : 0;\n\n return (\n <AriaTooltipTrigger {...{ trigger, delay, closeDelay, isDisabled, isOpen, defaultOpen, onOpenChange }}>\n {children}\n\n <AriaTooltip\n {...tooltipProps}\n offset={offset}\n placement={placement}\n crossOffset={crossOffset ?? calculatedCrossOffset}\n className={({ isEntering, isExiting }) => cx(isEntering && \"ease-out animate-in\", isExiting && \"ease-in animate-out\")}\n >\n {({ isEntering, isExiting }) => (\n <div\n className={cx(\n \"z-50 flex max-w-xs origin-(--trigger-anchor-point) flex-col items-start gap-1 rounded-lg bg-primary-solid px-3 shadow-lg will-change-transform\",\n description ? \"py-3\" : \"py-2\",\n\n isEntering &&\n \"ease-out animate-in fade-in zoom-in-95 in-placement-left:slide-in-from-right-0.5 in-placement-right:slide-in-from-left-0.5 in-placement-top:slide-in-from-bottom-0.5 in-placement-bottom:slide-in-from-top-0.5\",\n isExiting &&\n \"ease-in animate-out fade-out zoom-out-95 in-placement-left:slide-out-to-right-0.5 in-placement-right:slide-out-to-left-0.5 in-placement-top:slide-out-to-bottom-0.5 in-placement-bottom:slide-out-to-top-0.5\",\n )}\n >\n <span className=\"text-xs font-semibold text-white\">{title}</span>\n\n {description && <span className=\"text-xs font-medium text-tooltip-supporting-text\">{description}</span>}\n\n {arrow && (\n <AriaOverlayArrow>\n <svg\n viewBox=\"0 0 100 100\"\n className=\"size-2.5 fill-bg-primary-solid in-placement-left:-rotate-90 in-placement-right:rotate-90 in-placement-top:rotate-0 in-placement-bottom:rotate-180\"\n >\n <path d=\"M0,0 L35.858,35.858 Q50,50 64.142,35.858 L100,0 Z\" />\n </svg>\n </AriaOverlayArrow>\n )}\n </div>\n )}\n </AriaTooltip>\n </AriaTooltipTrigger>\n );\n};\n\ninterface TooltipTriggerProps extends AriaButtonProps {}\n\nexport const TooltipTrigger = ({ children, className, ...buttonProps }: TooltipTriggerProps) => {\n return (\n <AriaButton {...buttonProps} className={(values) => cx(\"h-max w-max outline-hidden\", typeof className === \"function\" ? className(values) : className)}>\n {children}\n </AriaButton>\n );\n};\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport { HelpCircle } from \"@untitledui/icons\";\nimport type { LabelProps as AriaLabelProps } from \"react-aria-components\";\nimport { Label as AriaLabel } from \"react-aria-components\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx } from \"@/utils/cx\";\n\ninterface LabelProps extends AriaLabelProps {\n children: ReactNode;\n isRequired?: boolean;\n tooltip?: string;\n tooltipDescription?: string;\n ref?: Ref<HTMLLabelElement>;\n}\n\nexport const Label = ({ isRequired, tooltip, tooltipDescription, className, ...props }: LabelProps) => {\n return (\n <AriaLabel\n // Used for conditionally hiding/showing the label element via CSS:\n // <Input label=\"Visible only on mobile\" className=\"lg:**:data-label:hidden\" />\n // or\n // <Input label=\"Visible only on mobile\" className=\"lg:label:hidden\" />\n data-label=\"true\"\n {...props}\n className={cx(\"flex cursor-default items-center gap-0.5 text-sm font-medium text-secondary\", className)}\n >\n {props.children}\n\n <span className={cx(\"hidden text-brand-tertiary\", isRequired && \"block\", typeof isRequired === \"undefined\" && \"group-required:block\")}>*</span>\n\n {tooltip && (\n <Tooltip title={tooltip} description={tooltipDescription} placement=\"top\">\n <TooltipTrigger\n // `TooltipTrigger` inherits the disabled state from the parent form field\n // but we don't that. We want the tooltip be enabled even if the parent\n // field is disabled.\n isDisabled={false}\n className=\"cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\"\n >\n <HelpCircle className=\"size-4\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n </AriaLabel>\n );\n};\n\nLabel.displayName = \"Label\";\n","\"use client\";\n\nimport { type ComponentType, type HTMLAttributes, type ReactNode, type Ref, createContext, useContext } from \"react\";\nimport { HelpCircle, InfoCircle } from \"@untitledui/icons\";\nimport type { InputProps as AriaInputProps, TextFieldProps as AriaTextFieldProps } from \"react-aria-components\";\nimport { Group as AriaGroup, Input as AriaInput, TextField as AriaTextField } from \"react-aria-components\";\nimport { HintText } from \"@/components/base/input/hint-text\";\nimport { Label } from \"@/components/base/input/label\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx, sortCx } from \"@/utils/cx\";\n\nexport interface InputBaseProps extends TextFieldProps {\n /** Tooltip message on hover. */\n tooltip?: string;\n /**\n * Input size.\n * @default \"sm\"\n */\n size?: \"sm\" | \"md\";\n /** Placeholder text. */\n placeholder?: string;\n /** Class name for the icon. */\n iconClassName?: string;\n /** Class name for the input. */\n inputClassName?: string;\n /** Class name for the input wrapper. */\n wrapperClassName?: string;\n /** Class name for the tooltip. */\n tooltipClassName?: string;\n /** Keyboard shortcut to display. */\n shortcut?: string | boolean;\n ref?: Ref<HTMLInputElement>;\n groupRef?: Ref<HTMLDivElement>;\n /** Icon component to display on the left side of the input. */\n icon?: ComponentType<HTMLAttributes<HTMLOrSVGElement>>;\n}\n\nexport const InputBase = ({\n ref,\n tooltip,\n shortcut,\n groupRef,\n size = \"sm\",\n isInvalid,\n isDisabled,\n icon: Icon,\n placeholder,\n wrapperClassName,\n tooltipClassName,\n inputClassName,\n iconClassName,\n // Omit this prop to avoid invalid HTML attribute warning\n isRequired: _isRequired,\n ...inputProps\n}: Omit<InputBaseProps, \"label\" | \"hint\">) => {\n // Check if the input has a leading icon or tooltip\n const hasTrailingIcon = tooltip || isInvalid;\n const hasLeadingIcon = Icon;\n\n // If the input is inside a `TextFieldContext`, use its context to simplify applying styles\n const context = useContext(TextFieldContext);\n\n const inputSize = context?.size || size;\n\n const sizes = sortCx({\n sm: {\n root: cx(\"px-3 py-2\", hasTrailingIcon && \"pr-9\", hasLeadingIcon && \"pl-10\"),\n iconLeading: \"left-3\",\n iconTrailing: \"right-3\",\n shortcut: \"pr-2.5\",\n },\n md: {\n root: cx(\"px-3.5 py-2.5\", hasTrailingIcon && \"pr-9.5\", hasLeadingIcon && \"pl-10.5\"),\n iconLeading: \"left-3.5\",\n iconTrailing: \"right-3.5\",\n shortcut: \"pr-3\",\n },\n });\n\n return (\n <AriaGroup\n {...{ isDisabled, isInvalid }}\n ref={groupRef}\n className={({ isFocusWithin, isDisabled, isInvalid }) =>\n cx(\n \"relative flex w-full flex-row place-content-center place-items-center rounded-lg bg-primary shadow-xs ring-1 ring-primary transition-shadow duration-100 ease-linear ring-inset\",\n\n isFocusWithin && !isDisabled && \"ring-2 ring-brand\",\n\n // Disabled state styles\n isDisabled && \"cursor-not-allowed bg-disabled_subtle ring-disabled\",\n \"group-disabled:cursor-not-allowed group-disabled:bg-disabled_subtle group-disabled:ring-disabled\",\n\n // Invalid state styles\n isInvalid && \"ring-error_subtle\",\n \"group-invalid:ring-error_subtle\",\n\n // Invalid state with focus-within styles\n isInvalid && isFocusWithin && \"ring-2 ring-error\",\n isFocusWithin && \"group-invalid:ring-2 group-invalid:ring-error\",\n\n context?.wrapperClassName,\n wrapperClassName,\n )\n }\n >\n {/* Leading icon and Payment icon */}\n {Icon && (\n <Icon\n className={cx(\n \"pointer-events-none absolute size-5 text-fg-quaternary\",\n isDisabled && \"text-fg-disabled\",\n sizes[inputSize].iconLeading,\n context?.iconClassName,\n iconClassName,\n )}\n />\n )}\n\n {/* Input field */}\n <AriaInput\n {...(inputProps as AriaInputProps)}\n ref={ref}\n placeholder={placeholder}\n className={cx(\n \"m-0 w-full bg-transparent text-md text-primary ring-0 outline-hidden placeholder:text-placeholder autofill:rounded-lg autofill:text-primary\",\n isDisabled && \"cursor-not-allowed text-disabled\",\n sizes[inputSize].root,\n context?.inputClassName,\n inputClassName,\n )}\n />\n\n {/* Tooltip and help icon */}\n {tooltip && !isInvalid && (\n <Tooltip title={tooltip} placement=\"top\">\n <TooltipTrigger\n className={cx(\n \"absolute cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\",\n sizes[inputSize].iconTrailing,\n context?.tooltipClassName,\n tooltipClassName,\n )}\n >\n <HelpCircle className=\"size-4\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n\n {/* Invalid icon */}\n {isInvalid && (\n <InfoCircle\n className={cx(\n \"pointer-events-none absolute size-4 text-fg-error-secondary\",\n sizes[inputSize].iconTrailing,\n context?.tooltipClassName,\n tooltipClassName,\n )}\n />\n )}\n\n {/* Shortcut */}\n {shortcut && (\n <div\n className={cx(\n \"pointer-events-none absolute inset-y-0.5 right-0.5 z-10 flex items-center rounded-r-[inherit] bg-linear-to-r from-transparent to-bg-primary to-40% pl-8\",\n sizes[inputSize].shortcut,\n )}\n >\n <span\n className={cx(\n \"pointer-events-none rounded px-1 py-px text-xs font-medium text-quaternary ring-1 ring-secondary select-none ring-inset\",\n isDisabled && \"bg-transparent text-disabled\",\n )}\n aria-hidden=\"true\"\n >\n {typeof shortcut === \"string\" ? shortcut : \"⌘K\"}\n </span>\n </div>\n )}\n </AriaGroup>\n );\n};\n\nInputBase.displayName = \"InputBase\";\n\ninterface BaseProps {\n /** Label text for the input */\n label?: string;\n /** Helper text displayed below the input */\n hint?: ReactNode;\n}\n\ninterface TextFieldProps\n extends BaseProps,\n AriaTextFieldProps,\n Pick<InputBaseProps, \"size\" | \"wrapperClassName\" | \"inputClassName\" | \"iconClassName\" | \"tooltipClassName\"> {\n ref?: Ref<HTMLDivElement>;\n}\n\nconst TextFieldContext = createContext<TextFieldProps>({});\n\nexport const TextField = ({ className, ...props }: TextFieldProps) => {\n return (\n <TextFieldContext.Provider value={props}>\n <AriaTextField\n {...props}\n data-input-wrapper\n className={(state) =>\n cx(\"group flex h-max w-full flex-col items-start justify-start gap-1.5\", typeof className === \"function\" ? className(state) : className)\n }\n />\n </TextFieldContext.Provider>\n );\n};\n\nTextField.displayName = \"TextField\";\n\ninterface InputProps extends InputBaseProps, BaseProps {\n /** Whether to hide required indicator from label */\n hideRequiredIndicator?: boolean;\n}\n\nexport const Input = ({\n size = \"sm\",\n placeholder,\n icon: Icon,\n label,\n hint,\n shortcut,\n hideRequiredIndicator,\n className,\n ref,\n groupRef,\n tooltip,\n iconClassName,\n inputClassName,\n wrapperClassName,\n tooltipClassName,\n ...props\n}: InputProps) => {\n return (\n <TextField aria-label={!label ? placeholder : undefined} {...props} className={className}>\n {({ isRequired, isInvalid }) => (\n <>\n {label && <Label isRequired={hideRequiredIndicator ? !hideRequiredIndicator : isRequired}>{label}</Label>}\n\n <InputBase\n {...{\n ref,\n groupRef,\n size,\n placeholder,\n icon: Icon,\n shortcut,\n iconClassName,\n inputClassName,\n wrapperClassName,\n tooltipClassName,\n tooltip,\n }}\n />\n\n {hint && <HintText isInvalid={isInvalid}>{hint}</HintText>}\n </>\n )}\n </TextField>\n );\n};\n\nInput.displayName = \"Input\";\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { getTasksCount } from \"@/api/tasks\";\nimport { ActivityGaugeLg, type ActivityGaugeDatum } from \"@/components/application/charts/activity-gauge-lg\";\nimport { Button } from \"@/components/base/buttons/button\";\nimport { Input } from \"@/components/base/input/input\";\n\nexport type TasksActivityGaugeProps = {\n daysBack?: number;\n maxValue?: number;\n};\n\nexport const TasksActivityGauge = ({ daysBack = 14, maxValue = 1000 }: TasksActivityGaugeProps) => {\n const [count, setCount] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [daysBackValue, setDaysBackValue] = useState(daysBack.toString());\n const [activeDaysBack, setActiveDaysBack] = useState(daysBack);\n\n const subtitle = useMemo(() => `Tasks last ${activeDaysBack} days`, [activeDaysBack]);\n\n const fetchCount = useCallback(\n async (value: number) => {\n setIsLoading(true);\n setError(null);\n try {\n const total = await getTasksCount(value);\n setCount(total);\n } catch (err: unknown) {\n setError(err instanceof Error ? err.message : \"Failed to load tasks count\");\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n useEffect(() => {\n let isActive = true;\n\n setIsLoading(true);\n setError(null);\n setCount(null);\n\n getTasksCount(activeDaysBack)\n .then((total) => {\n if (isActive) {\n setCount(total);\n }\n })\n .catch((err: unknown) => {\n if (isActive) {\n setError(err instanceof Error ? err.message : \"Failed to load tasks count\");\n }\n })\n .finally(() => {\n if (isActive) {\n setIsLoading(false);\n }\n });\n\n return () => {\n isActive = false;\n };\n }, [activeDaysBack]);\n\n const title = error ? \"—\" : count === null ? \"…\" : count.toLocaleString();\n const gaugeValue = count ?? 0;\n const computedMax = Math.max(maxValue, gaugeValue, 1);\n const gaugeData: ActivityGaugeDatum[] = [\n {\n name: \"Tasks\",\n value: gaugeValue,\n className: \"text-utility-brand-700\",\n },\n ];\n\n const handleDaysBackChange = (value: string) => {\n setDaysBackValue(value);\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed > 0) {\n setActiveDaysBack(Math.floor(parsed));\n }\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-wrap items-end justify-between gap-3\">\n <div className=\"min-w-[180px]\">\n <Input\n label=\"Days back\"\n type=\"number\"\n value={daysBackValue}\n onChange={handleDaysBackChange}\n size=\"sm\"\n placeholder=\"14\"\n />\n </div>\n <Button\n color=\"primary\"\n size=\"sm\"\n isLoading={isLoading}\n showTextWhileLoading\n onClick={() => fetchCount(activeDaysBack)}\n >\n Refresh\n </Button>\n </div>\n <ActivityGaugeLg title={title} subtitle={subtitle} data={gaugeData} maxValue={computedMax} />\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/cx.ts","../src/components/application/charts/charts-base.tsx","../src/components/application/charts/activity-gauge-lg.tsx","../src/api/tasks.ts","../src/utils/is-react-component.ts","../src/components/base/buttons/button.tsx","../src/components/base/input/hint-text.tsx","../src/components/base/tooltip/tooltip.tsx","../src/components/base/input/label.tsx","../src/components/base/input/input.tsx","../src/components/application/charts/tasks-activity-gauge.tsx"],"names":["jsx","jsxs","AriaLink","AriaButton","AriaText","Tooltip","AriaTooltipTrigger","AriaTooltip","AriaOverlayArrow","AriaLabel","AriaGroup","isDisabled","isInvalid","AriaInput","HelpCircle","AriaTextField"],"mappings":"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","file":"index.mjs","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\nimport type { TooltipProps } from \"recharts\";\n\nimport { cx } from \"@/utils/cx\";\n\ntype LegendPayload = {\n value?: string;\n payload?: {\n className?: string;\n };\n};\n\ntype LegendProps = {\n payload?: LegendPayload[];\n};\n\nexport const ChartLegendContent = ({ payload = [] }: LegendProps) => {\n if (payload.length === 0) {\n return null;\n }\n\n return (\n <div className=\"flex flex-wrap items-center justify-center gap-x-4 gap-y-2\">\n {payload.map((entry, index) => (\n <div key={`${entry.value ?? \"item\"}-${index}`} className=\"flex items-center gap-2\">\n <span\n className={cx(\n \"size-2 rounded-full bg-utility-gray-300\",\n entry.payload?.className ? entry.payload.className.replace(\"text-\", \"bg-\") : undefined,\n )}\n />\n <span className=\"text-xs font-medium text-secondary\">{entry.value}</span>\n </div>\n ))}\n </div>\n );\n};\n\ntype ChartTooltipContentProps = TooltipProps<number, string> & {\n isRadialChart?: boolean;\n};\n\nexport const ChartTooltipContent = ({ active, payload, label, isRadialChart }: ChartTooltipContentProps) => {\n if (!active || !payload || payload.length === 0) {\n return null;\n }\n\n return (\n <div className=\"rounded-lg border border-secondary bg-primary px-3 py-2 shadow-sm\">\n {label && <div className=\"text-xs font-medium text-tertiary\">{label}</div>}\n <div className=\"mt-1 space-y-1\">\n {payload.map((entry, index) => (\n <div key={`${entry.name ?? \"value\"}-${index}`} className=\"flex items-center gap-2 text-xs\">\n <span\n className={cx(\n \"size-2 rounded-full bg-utility-gray-300\",\n entry.payload?.className ? entry.payload.className.replace(\"text-\", \"bg-\") : undefined,\n )}\n />\n <span className=\"text-secondary\">{entry.name ?? (isRadialChart ? \"Value\" : label)}</span>\n <span className=\"ml-auto font-medium text-primary\">{entry.value}</span>\n </div>\n ))}\n </div>\n </div>\n );\n};\n","\"use client\";\n\nimport { PolarAngleAxis, RadialBar, RadialBarChart, ResponsiveContainer, Tooltip } from \"recharts\";\n\nimport { ChartTooltipContent } from \"@/components/application/charts/charts-base\";\nimport { cx } from \"@/utils/cx\";\n\nexport type ActivityGaugeDatum = {\n name: string;\n value: number;\n className?: string;\n};\n\nexport type ActivityGaugeProps = {\n title?: string;\n subtitle?: string;\n data?: ActivityGaugeDatum[];\n maxValue?: number;\n};\n\nconst radialData: ActivityGaugeDatum[] = [\n {\n name: \"Tasks\",\n value: 1000,\n className: \"text-utility-brand-700\",\n },\n];\n\nexport const ActivityGaugeLg = ({\n title = \"1,000\",\n subtitle = \"Active users\",\n data = radialData,\n maxValue = 1000,\n}: ActivityGaugeProps) => {\n const ringClassName = data[0]?.className ?? \"text-utility-brand-700\";\n\n return (\n <ResponsiveContainer height={356}>\n <RadialBarChart\n data={data}\n accessibilityLayer\n innerRadius={84}\n outerRadius={154}\n startAngle={90}\n endAngle={360 + 90}\n className=\"font-medium text-tertiary [&_.recharts-polar-grid]:text-utility-gray-100 [&_.recharts-text]:text-sm\"\n margin={{\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n }}\n >\n <PolarAngleAxis tick={false} domain={[0, maxValue]} type=\"number\" reversed />\n\n <Tooltip content={<ChartTooltipContent isRadialChart />} />\n\n <RadialBar\n isAnimationActive={false}\n dataKey=\"value\"\n cornerRadius={99}\n fill=\"currentColor\"\n className={ringClassName}\n background={{\n className: \"fill-utility-gray-100\",\n }}\n />\n\n {(title || subtitle) && (\n <text x=\"50%\" y=\"50%\" textAnchor=\"middle\" dominantBaseline=\"middle\">\n {subtitle && (\n <tspan\n x=\"50%\"\n dy={title ? \"-1.4em\" : \"1%\"}\n className={cx(\"fill-current text-tertiary\", \"text-sm font-medium\")}\n >\n {subtitle}\n </tspan>\n )}\n {title && (\n <tspan\n x=\"50%\"\n dy={subtitle ? \"1em\" : \"1%\"}\n className={cx(\"fill-current text-primary\", \"text-display-md font-semibold\")}\n >\n {title}\n </tspan>\n )}\n </text>\n )}\n </RadialBarChart>\n </ResponsiveContainer>\n );\n};\n","export type TasksCountResponse = {\n count: number;\n daysBack: number;\n since: string;\n};\n\ntype GetTasksCountOptions = {\n baseUrl?: string;\n moduleKey?: string;\n signal?: AbortSignal;\n};\n\nconst DEFAULT_API_BASE_URL = \"https://api.thesqd.com\";\nconst DEFAULT_MODULE_KEY = \"e166f127e73167b6646eeaeff8837566d3c27d4002fb122bc49d4fb06d97d67e\";\n\nexport const getTasksCount = async (daysBack: number, options: GetTasksCountOptions = {}) => {\n const resolvedDaysBack = Number.isFinite(daysBack) && daysBack > 0 ? Math.floor(daysBack) : 7;\n const baseUrl = options.baseUrl ?? process.env.NEXT_PUBLIC_SQD_API_BASE_URL ?? DEFAULT_API_BASE_URL;\n const moduleKey = options.moduleKey ?? process.env.NEXT_PUBLIC_SQD_MODULE_KEY ?? DEFAULT_MODULE_KEY;\n const url = new URL(\"/module-template/task-count\", baseUrl);\n\n url.searchParams.set(\"daysBack\", String(resolvedDaysBack));\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sqd-module-key\": moduleKey,\n },\n cache: \"no-store\",\n signal: options.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch tasks count (${response.status})`);\n }\n\n const payload = (await response.json()) as TasksCountResponse;\n\n return payload.count ?? 0;\n};\n","/* We cannot use type `unknown` instead of `any` here because it will break the type assertion `isReactComponent` function is providing. */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type React from \"react\";\n\ntype ReactComponent = React.FC<any> | React.ComponentClass<any, any>;\n\n/**\n * Checks if a given value is a function component.\n */\nexport const isFunctionComponent = (component: any): component is React.FC<any> => {\n return typeof component === \"function\";\n};\n\n/**\n * Checks if a given value is a class component.\n */\nexport const isClassComponent = (component: any): component is React.ComponentClass<any, any> => {\n return typeof component === \"function\" && component.prototype && (!!component.prototype.isReactComponent || !!component.prototype.render);\n};\n\n/**\n * Checks if a given value is a forward ref component.\n */\nexport const isForwardRefComponent = (component: any): component is React.ForwardRefExoticComponent<any> => {\n return typeof component === \"object\" && component !== null && component.$$typeof.toString() === \"Symbol(react.forward_ref)\";\n};\n\n/**\n * Checks if a given value is a valid React component.\n */\nexport const isReactComponent = (component: any): component is ReactComponent => {\n return isFunctionComponent(component) || isForwardRefComponent(component) || isClassComponent(component);\n};\n","\"use client\";\n\nimport type { AnchorHTMLAttributes, ButtonHTMLAttributes, DetailedHTMLProps, FC, ReactNode } from \"react\";\nimport React, { isValidElement } from \"react\";\nimport type { ButtonProps as AriaButtonProps } from \"react-aria-components\";\nimport { Button as AriaButton, Link as AriaLink } from \"react-aria-components\";\nimport { cx, sortCx } from \"@/utils/cx\";\nimport { isReactComponent } from \"@/utils/is-react-component\";\n\nexport const styles = sortCx({\n common: {\n root: [\n \"group relative inline-flex h-max cursor-pointer items-center justify-center whitespace-nowrap outline-brand transition duration-100 ease-linear before:absolute focus-visible:outline-2 focus-visible:outline-offset-2\",\n // When button is used within `InputGroup`\n \"in-data-input-wrapper:shadow-xs in-data-input-wrapper:focus:!z-50 in-data-input-wrapper:in-data-leading:-mr-px in-data-input-wrapper:in-data-leading:rounded-r-none in-data-input-wrapper:in-data-leading:before:rounded-r-none in-data-input-wrapper:in-data-trailing:-ml-px in-data-input-wrapper:in-data-trailing:rounded-l-none in-data-input-wrapper:in-data-trailing:before:rounded-l-none\",\n // Disabled styles\n \"disabled:cursor-not-allowed disabled:text-fg-disabled\",\n // Icon styles\n \"disabled:*:data-icon:text-fg-disabled_subtle\",\n // Same as `icon` but for SSR icons that cannot be passed to the client as functions.\n \"*:data-icon:pointer-events-none *:data-icon:size-5 *:data-icon:shrink-0 *:data-icon:transition-inherit-all\",\n ].join(\" \"),\n icon: \"pointer-events-none size-5 shrink-0 transition-inherit-all\",\n },\n sizes: {\n sm: {\n root: [\n \"gap-1 rounded-lg px-3 py-2 text-sm font-semibold before:rounded-[7px] data-icon-only:p-2\",\n \"in-data-input-wrapper:px-3.5 in-data-input-wrapper:py-2.5 in-data-input-wrapper:data-icon-only:p-2.5\",\n ].join(\" \"),\n linkRoot: \"gap-1\",\n },\n md: {\n root: [\n \"gap-1 rounded-lg px-3.5 py-2.5 text-sm font-semibold before:rounded-[7px] data-icon-only:p-2.5\",\n \"in-data-input-wrapper:gap-1.5 in-data-input-wrapper:px-4 in-data-input-wrapper:text-md in-data-input-wrapper:data-icon-only:p-3\",\n ].join(\" \"),\n linkRoot: \"gap-1\",\n },\n lg: {\n root: \"gap-1.5 rounded-lg px-4 py-2.5 text-md font-semibold before:rounded-[7px] data-icon-only:p-3\",\n linkRoot: \"gap-1.5\",\n },\n xl: {\n root: \"gap-1.5 rounded-lg px-4.5 py-3 text-md font-semibold before:rounded-[7px] data-icon-only:p-3.5\",\n linkRoot: \"gap-1.5\",\n },\n },\n\n colors: {\n primary: {\n root: [\n \"bg-brand-solid text-white shadow-xs-skeumorphic ring-1 ring-transparent ring-inset hover:bg-brand-solid_hover data-loading:bg-brand-solid_hover\",\n // Inner border gradient\n \"before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%\",\n // Disabled styles\n \"disabled:bg-disabled disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-button-primary-icon hover:*:data-icon:text-button-primary-icon_hover\",\n ].join(\" \"),\n },\n secondary: {\n root: [\n \"bg-primary text-secondary shadow-xs-skeumorphic ring-1 ring-primary ring-inset hover:bg-primary_hover hover:text-secondary_hover data-loading:bg-primary_hover\",\n // Disabled styles\n \"disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n tertiary: {\n root: [\n \"text-tertiary hover:bg-primary_hover hover:text-tertiary_hover data-loading:bg-primary_hover\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n \"link-gray\": {\n root: [\n \"justify-normal rounded p-0! text-tertiary hover:text-tertiary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-quaternary hover:*:data-icon:text-fg-quaternary_hover\",\n ].join(\" \"),\n },\n \"link-color\": {\n root: [\n \"justify-normal rounded p-0! text-brand-secondary hover:text-brand-secondary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-brand-secondary_alt hover:*:data-icon:text-fg-brand-secondary_hover\",\n ].join(\" \"),\n },\n \"primary-destructive\": {\n root: [\n \"bg-error-solid text-white shadow-xs-skeumorphic ring-1 ring-transparent outline-error ring-inset hover:bg-error-solid_hover data-loading:bg-error-solid_hover\",\n // Inner border gradient\n \"before:absolute before:inset-px before:border before:border-white/12 before:mask-b-from-0%\",\n // Disabled styles\n \"disabled:bg-disabled disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-button-destructive-primary-icon hover:*:data-icon:text-button-destructive-primary-icon_hover\",\n ].join(\" \"),\n },\n \"secondary-destructive\": {\n root: [\n \"bg-primary text-error-primary shadow-xs-skeumorphic ring-1 ring-error_subtle outline-error ring-inset hover:bg-error-primary hover:text-error-primary_hover data-loading:bg-error-primary\",\n // Disabled styles\n \"disabled:bg-primary disabled:shadow-xs disabled:ring-disabled_subtle\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n \"tertiary-destructive\": {\n root: [\n \"text-error-primary outline-error hover:bg-error-primary hover:text-error-primary_hover data-loading:bg-error-primary\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n \"link-destructive\": {\n root: [\n \"justify-normal rounded p-0! text-error-primary outline-error hover:text-error-primary_hover\",\n // Inner text underline\n \"*:data-text:underline *:data-text:decoration-transparent *:data-text:underline-offset-2 hover:*:data-text:decoration-current\",\n // Icon styles\n \"*:data-icon:text-fg-error-secondary hover:*:data-icon:text-fg-error-primary\",\n ].join(\" \"),\n },\n },\n});\n\n/**\n * Common props shared between button and anchor variants\n */\nexport interface CommonProps {\n /** Disables the button and shows a disabled state */\n isDisabled?: boolean;\n /** Shows a loading spinner and disables the button */\n isLoading?: boolean;\n /** The size variant of the button */\n size?: keyof typeof styles.sizes;\n /** The color variant of the button */\n color?: keyof typeof styles.colors;\n /** Icon component or element to show before the text */\n iconLeading?: FC<{ className?: string }> | ReactNode;\n /** Icon component or element to show after the text */\n iconTrailing?: FC<{ className?: string }> | ReactNode;\n /** Removes horizontal padding from the text content */\n noTextPadding?: boolean;\n /** When true, keeps the text visible during loading state */\n showTextWhileLoading?: boolean;\n}\n\n/**\n * Props for the button variant (non-link)\n */\nexport interface ButtonProps extends CommonProps, DetailedHTMLProps<Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\" | \"slot\">, HTMLButtonElement> {\n /** Slot name for react-aria component */\n slot?: AriaButtonProps[\"slot\"];\n}\n\n/**\n * Props for the link variant (anchor tag)\n */\ninterface LinkProps extends CommonProps, DetailedHTMLProps<Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">, HTMLAnchorElement> {}\n\n/** Union type of button and link props */\nexport type Props = ButtonProps | LinkProps;\n\nexport const Button = ({\n size = \"sm\",\n color = \"primary\",\n children,\n className,\n noTextPadding,\n iconLeading: IconLeading,\n iconTrailing: IconTrailing,\n isDisabled: disabled,\n isLoading: loading,\n showTextWhileLoading,\n ...otherProps\n}: Props) => {\n const href = \"href\" in otherProps ? otherProps.href : undefined;\n const Component = href ? AriaLink : AriaButton;\n\n const isIcon = (IconLeading || IconTrailing) && !children;\n const isLinkType = [\"link-gray\", \"link-color\", \"link-destructive\"].includes(color);\n\n noTextPadding = isLinkType || noTextPadding;\n\n let props = {};\n\n if (href) {\n props = {\n ...otherProps,\n\n href: disabled ? undefined : href,\n };\n } else {\n props = {\n ...otherProps,\n\n type: otherProps.type || \"button\",\n isPending: loading,\n };\n }\n\n return (\n <Component\n data-loading={loading ? true : undefined}\n data-icon-only={isIcon ? true : undefined}\n {...props}\n isDisabled={disabled}\n className={cx(\n styles.common.root,\n styles.sizes[size].root,\n styles.colors[color].root,\n isLinkType && styles.sizes[size].linkRoot,\n (loading || (href && (disabled || loading))) && \"pointer-events-none\",\n // If in `loading` state, hide everything except the loading icon (and text if `showTextWhileLoading` is true).\n loading && (showTextWhileLoading ? \"[&>*:not([data-icon=loading]):not([data-text])]:hidden\" : \"[&>*:not([data-icon=loading])]:invisible\"),\n className,\n )}\n >\n {/* Leading icon */}\n {isValidElement(IconLeading) && IconLeading}\n {isReactComponent(IconLeading) && <IconLeading data-icon=\"leading\" className={styles.common.icon} />}\n\n {loading && (\n <svg\n fill=\"none\"\n data-icon=\"loading\"\n viewBox=\"0 0 20 20\"\n className={cx(styles.common.icon, !showTextWhileLoading && \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\")}\n >\n {/* Background circle */}\n <circle className=\"stroke-current opacity-30\" cx=\"10\" cy=\"10\" r=\"8\" fill=\"none\" strokeWidth=\"2\" />\n {/* Spinning circle */}\n <circle\n className=\"origin-center animate-spin stroke-current\"\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n fill=\"none\"\n strokeWidth=\"2\"\n strokeDasharray=\"12.5 50\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n\n {children && (\n <span data-text className={cx(\"transition-inherit-all\", !noTextPadding && \"px-0.5\")}>\n {children}\n </span>\n )}\n\n {/* Trailing icon */}\n {isValidElement(IconTrailing) && IconTrailing}\n {isReactComponent(IconTrailing) && <IconTrailing data-icon=\"trailing\" className={styles.common.icon} />}\n </Component>\n );\n};\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport type { TextProps as AriaTextProps } from \"react-aria-components\";\nimport { Text as AriaText } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface HintTextProps extends AriaTextProps {\n /** Indicates that the hint text is an error message. */\n isInvalid?: boolean;\n ref?: Ref<HTMLElement>;\n children: ReactNode;\n}\n\nexport const HintText = ({ isInvalid, className, ...props }: HintTextProps) => {\n return (\n <AriaText\n {...props}\n slot={isInvalid ? \"errorMessage\" : \"description\"}\n className={cx(\n \"text-sm text-tertiary\",\n\n // Invalid state\n isInvalid && \"text-error-primary\",\n \"group-invalid:text-error-primary\",\n\n className,\n )}\n />\n );\n};\n\nHintText.displayName = \"HintText\";\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type {\n ButtonProps as AriaButtonProps,\n TooltipProps as AriaTooltipProps,\n TooltipTriggerComponentProps as AriaTooltipTriggerComponentProps,\n} from \"react-aria-components\";\nimport { Button as AriaButton, OverlayArrow as AriaOverlayArrow, Tooltip as AriaTooltip, TooltipTrigger as AriaTooltipTrigger } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface TooltipProps extends AriaTooltipTriggerComponentProps, Omit<AriaTooltipProps, \"children\"> {\n /**\n * The title of the tooltip.\n */\n title: ReactNode;\n /**\n * The description of the tooltip.\n */\n description?: ReactNode;\n /**\n * Whether to show the arrow on the tooltip.\n *\n * @default false\n */\n arrow?: boolean;\n /**\n * Delay in milliseconds before the tooltip is shown.\n *\n * @default 300\n */\n delay?: number;\n}\n\nexport const Tooltip = ({\n title,\n description,\n children,\n arrow = false,\n delay = 300,\n closeDelay = 0,\n trigger,\n isDisabled,\n isOpen,\n defaultOpen,\n offset = 6,\n crossOffset,\n placement = \"top\",\n onOpenChange,\n ...tooltipProps\n}: TooltipProps) => {\n const isTopOrBottomLeft = [\"top left\", \"top end\", \"bottom left\", \"bottom end\"].includes(placement);\n const isTopOrBottomRight = [\"top right\", \"top start\", \"bottom right\", \"bottom start\"].includes(placement);\n // Set negative cross offset for left and right placement to visually balance the tooltip.\n const calculatedCrossOffset = isTopOrBottomLeft ? -12 : isTopOrBottomRight ? 12 : 0;\n\n return (\n <AriaTooltipTrigger {...{ trigger, delay, closeDelay, isDisabled, isOpen, defaultOpen, onOpenChange }}>\n {children}\n\n <AriaTooltip\n {...tooltipProps}\n offset={offset}\n placement={placement}\n crossOffset={crossOffset ?? calculatedCrossOffset}\n className={({ isEntering, isExiting }) => cx(isEntering && \"ease-out animate-in\", isExiting && \"ease-in animate-out\")}\n >\n {({ isEntering, isExiting }) => (\n <div\n className={cx(\n \"z-50 flex max-w-xs origin-(--trigger-anchor-point) flex-col items-start gap-1 rounded-lg bg-primary-solid px-3 shadow-lg will-change-transform\",\n description ? \"py-3\" : \"py-2\",\n\n isEntering &&\n \"ease-out animate-in fade-in zoom-in-95 in-placement-left:slide-in-from-right-0.5 in-placement-right:slide-in-from-left-0.5 in-placement-top:slide-in-from-bottom-0.5 in-placement-bottom:slide-in-from-top-0.5\",\n isExiting &&\n \"ease-in animate-out fade-out zoom-out-95 in-placement-left:slide-out-to-right-0.5 in-placement-right:slide-out-to-left-0.5 in-placement-top:slide-out-to-bottom-0.5 in-placement-bottom:slide-out-to-top-0.5\",\n )}\n >\n <span className=\"text-xs font-semibold text-white\">{title}</span>\n\n {description && <span className=\"text-xs font-medium text-tooltip-supporting-text\">{description}</span>}\n\n {arrow && (\n <AriaOverlayArrow>\n <svg\n viewBox=\"0 0 100 100\"\n className=\"size-2.5 fill-bg-primary-solid in-placement-left:-rotate-90 in-placement-right:rotate-90 in-placement-top:rotate-0 in-placement-bottom:rotate-180\"\n >\n <path d=\"M0,0 L35.858,35.858 Q50,50 64.142,35.858 L100,0 Z\" />\n </svg>\n </AriaOverlayArrow>\n )}\n </div>\n )}\n </AriaTooltip>\n </AriaTooltipTrigger>\n );\n};\n\ninterface TooltipTriggerProps extends AriaButtonProps {}\n\nexport const TooltipTrigger = ({ children, className, ...buttonProps }: TooltipTriggerProps) => {\n return (\n <AriaButton {...buttonProps} className={(values) => cx(\"h-max w-max outline-hidden\", typeof className === \"function\" ? className(values) : className)}>\n {children}\n </AriaButton>\n );\n};\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport { HelpCircle } from \"@untitledui/icons\";\nimport type { LabelProps as AriaLabelProps } from \"react-aria-components\";\nimport { Label as AriaLabel } from \"react-aria-components\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx } from \"@/utils/cx\";\n\ninterface LabelProps extends AriaLabelProps {\n children: ReactNode;\n isRequired?: boolean;\n tooltip?: string;\n tooltipDescription?: string;\n ref?: Ref<HTMLLabelElement>;\n}\n\nexport const Label = ({ isRequired, tooltip, tooltipDescription, className, ...props }: LabelProps) => {\n return (\n <AriaLabel\n // Used for conditionally hiding/showing the label element via CSS:\n // <Input label=\"Visible only on mobile\" className=\"lg:**:data-label:hidden\" />\n // or\n // <Input label=\"Visible only on mobile\" className=\"lg:label:hidden\" />\n data-label=\"true\"\n {...props}\n className={cx(\"flex cursor-default items-center gap-0.5 text-sm font-medium text-secondary\", className)}\n >\n {props.children}\n\n <span className={cx(\"hidden text-brand-tertiary\", isRequired && \"block\", typeof isRequired === \"undefined\" && \"group-required:block\")}>*</span>\n\n {tooltip && (\n <Tooltip title={tooltip} description={tooltipDescription} placement=\"top\">\n <TooltipTrigger\n // `TooltipTrigger` inherits the disabled state from the parent form field\n // but we don't that. We want the tooltip be enabled even if the parent\n // field is disabled.\n isDisabled={false}\n className=\"cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\"\n >\n <HelpCircle className=\"size-4\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n </AriaLabel>\n );\n};\n\nLabel.displayName = \"Label\";\n","\"use client\";\n\nimport { type ComponentType, type HTMLAttributes, type ReactNode, type Ref, createContext, useContext } from \"react\";\nimport { HelpCircle, InfoCircle } from \"@untitledui/icons\";\nimport type { InputProps as AriaInputProps, TextFieldProps as AriaTextFieldProps } from \"react-aria-components\";\nimport { Group as AriaGroup, Input as AriaInput, TextField as AriaTextField } from \"react-aria-components\";\nimport { HintText } from \"@/components/base/input/hint-text\";\nimport { Label } from \"@/components/base/input/label\";\nimport { Tooltip, TooltipTrigger } from \"@/components/base/tooltip/tooltip\";\nimport { cx, sortCx } from \"@/utils/cx\";\n\nexport interface InputBaseProps extends TextFieldProps {\n /** Tooltip message on hover. */\n tooltip?: string;\n /**\n * Input size.\n * @default \"sm\"\n */\n size?: \"sm\" | \"md\";\n /** Placeholder text. */\n placeholder?: string;\n /** Class name for the icon. */\n iconClassName?: string;\n /** Class name for the input. */\n inputClassName?: string;\n /** Class name for the input wrapper. */\n wrapperClassName?: string;\n /** Class name for the tooltip. */\n tooltipClassName?: string;\n /** Keyboard shortcut to display. */\n shortcut?: string | boolean;\n ref?: Ref<HTMLInputElement>;\n groupRef?: Ref<HTMLDivElement>;\n /** Icon component to display on the left side of the input. */\n icon?: ComponentType<HTMLAttributes<HTMLOrSVGElement>>;\n}\n\nexport const InputBase = ({\n ref,\n tooltip,\n shortcut,\n groupRef,\n size = \"sm\",\n isInvalid,\n isDisabled,\n icon: Icon,\n placeholder,\n wrapperClassName,\n tooltipClassName,\n inputClassName,\n iconClassName,\n // Omit this prop to avoid invalid HTML attribute warning\n isRequired: _isRequired,\n ...inputProps\n}: Omit<InputBaseProps, \"label\" | \"hint\">) => {\n // Check if the input has a leading icon or tooltip\n const hasTrailingIcon = tooltip || isInvalid;\n const hasLeadingIcon = Icon;\n\n // If the input is inside a `TextFieldContext`, use its context to simplify applying styles\n const context = useContext(TextFieldContext);\n\n const inputSize = context?.size || size;\n\n const sizes = sortCx({\n sm: {\n root: cx(\"px-3 py-2\", hasTrailingIcon && \"pr-9\", hasLeadingIcon && \"pl-10\"),\n iconLeading: \"left-3\",\n iconTrailing: \"right-3\",\n shortcut: \"pr-2.5\",\n },\n md: {\n root: cx(\"px-3.5 py-2.5\", hasTrailingIcon && \"pr-9.5\", hasLeadingIcon && \"pl-10.5\"),\n iconLeading: \"left-3.5\",\n iconTrailing: \"right-3.5\",\n shortcut: \"pr-3\",\n },\n });\n\n return (\n <AriaGroup\n {...{ isDisabled, isInvalid }}\n ref={groupRef}\n className={({ isFocusWithin, isDisabled, isInvalid }) =>\n cx(\n \"relative flex w-full flex-row place-content-center place-items-center rounded-lg bg-primary shadow-xs ring-1 ring-primary transition-shadow duration-100 ease-linear ring-inset\",\n\n isFocusWithin && !isDisabled && \"ring-2 ring-brand\",\n\n // Disabled state styles\n isDisabled && \"cursor-not-allowed bg-disabled_subtle ring-disabled\",\n \"group-disabled:cursor-not-allowed group-disabled:bg-disabled_subtle group-disabled:ring-disabled\",\n\n // Invalid state styles\n isInvalid && \"ring-error_subtle\",\n \"group-invalid:ring-error_subtle\",\n\n // Invalid state with focus-within styles\n isInvalid && isFocusWithin && \"ring-2 ring-error\",\n isFocusWithin && \"group-invalid:ring-2 group-invalid:ring-error\",\n\n context?.wrapperClassName,\n wrapperClassName,\n )\n }\n >\n {/* Leading icon and Payment icon */}\n {Icon && (\n <Icon\n className={cx(\n \"pointer-events-none absolute size-5 text-fg-quaternary\",\n isDisabled && \"text-fg-disabled\",\n sizes[inputSize].iconLeading,\n context?.iconClassName,\n iconClassName,\n )}\n />\n )}\n\n {/* Input field */}\n <AriaInput\n {...(inputProps as AriaInputProps)}\n ref={ref}\n placeholder={placeholder}\n className={cx(\n \"m-0 w-full bg-transparent text-md text-primary ring-0 outline-hidden placeholder:text-placeholder autofill:rounded-lg autofill:text-primary\",\n isDisabled && \"cursor-not-allowed text-disabled\",\n sizes[inputSize].root,\n context?.inputClassName,\n inputClassName,\n )}\n />\n\n {/* Tooltip and help icon */}\n {tooltip && !isInvalid && (\n <Tooltip title={tooltip} placement=\"top\">\n <TooltipTrigger\n className={cx(\n \"absolute cursor-pointer text-fg-quaternary transition duration-200 hover:text-fg-quaternary_hover focus:text-fg-quaternary_hover\",\n sizes[inputSize].iconTrailing,\n context?.tooltipClassName,\n tooltipClassName,\n )}\n >\n <HelpCircle className=\"size-4\" />\n </TooltipTrigger>\n </Tooltip>\n )}\n\n {/* Invalid icon */}\n {isInvalid && (\n <InfoCircle\n className={cx(\n \"pointer-events-none absolute size-4 text-fg-error-secondary\",\n sizes[inputSize].iconTrailing,\n context?.tooltipClassName,\n tooltipClassName,\n )}\n />\n )}\n\n {/* Shortcut */}\n {shortcut && (\n <div\n className={cx(\n \"pointer-events-none absolute inset-y-0.5 right-0.5 z-10 flex items-center rounded-r-[inherit] bg-linear-to-r from-transparent to-bg-primary to-40% pl-8\",\n sizes[inputSize].shortcut,\n )}\n >\n <span\n className={cx(\n \"pointer-events-none rounded px-1 py-px text-xs font-medium text-quaternary ring-1 ring-secondary select-none ring-inset\",\n isDisabled && \"bg-transparent text-disabled\",\n )}\n aria-hidden=\"true\"\n >\n {typeof shortcut === \"string\" ? shortcut : \"⌘K\"}\n </span>\n </div>\n )}\n </AriaGroup>\n );\n};\n\nInputBase.displayName = \"InputBase\";\n\ninterface BaseProps {\n /** Label text for the input */\n label?: string;\n /** Helper text displayed below the input */\n hint?: ReactNode;\n}\n\ninterface TextFieldProps\n extends BaseProps,\n AriaTextFieldProps,\n Pick<InputBaseProps, \"size\" | \"wrapperClassName\" | \"inputClassName\" | \"iconClassName\" | \"tooltipClassName\"> {\n ref?: Ref<HTMLDivElement>;\n}\n\nconst TextFieldContext = createContext<TextFieldProps>({});\n\nexport const TextField = ({ className, ...props }: TextFieldProps) => {\n return (\n <TextFieldContext.Provider value={props}>\n <AriaTextField\n {...props}\n data-input-wrapper\n className={(state) =>\n cx(\"group flex h-max w-full flex-col items-start justify-start gap-1.5\", typeof className === \"function\" ? className(state) : className)\n }\n />\n </TextFieldContext.Provider>\n );\n};\n\nTextField.displayName = \"TextField\";\n\ninterface InputProps extends InputBaseProps, BaseProps {\n /** Whether to hide required indicator from label */\n hideRequiredIndicator?: boolean;\n}\n\nexport const Input = ({\n size = \"sm\",\n placeholder,\n icon: Icon,\n label,\n hint,\n shortcut,\n hideRequiredIndicator,\n className,\n ref,\n groupRef,\n tooltip,\n iconClassName,\n inputClassName,\n wrapperClassName,\n tooltipClassName,\n ...props\n}: InputProps) => {\n return (\n <TextField aria-label={!label ? placeholder : undefined} {...props} className={className}>\n {({ isRequired, isInvalid }) => (\n <>\n {label && <Label isRequired={hideRequiredIndicator ? !hideRequiredIndicator : isRequired}>{label}</Label>}\n\n <InputBase\n {...{\n ref,\n groupRef,\n size,\n placeholder,\n icon: Icon,\n shortcut,\n iconClassName,\n inputClassName,\n wrapperClassName,\n tooltipClassName,\n tooltip,\n }}\n />\n\n {hint && <HintText isInvalid={isInvalid}>{hint}</HintText>}\n </>\n )}\n </TextField>\n );\n};\n\nInput.displayName = \"Input\";\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { getTasksCount } from \"@/api/tasks\";\nimport { ActivityGaugeLg, type ActivityGaugeDatum } from \"@/components/application/charts/activity-gauge-lg\";\nimport { Button } from \"@/components/base/buttons/button\";\nimport { Input } from \"@/components/base/input/input\";\n\nexport type TasksActivityGaugeProps = {\n daysBack?: number;\n maxValue?: number;\n};\n\nexport const TasksActivityGauge = ({ daysBack = 14, maxValue = 1000 }: TasksActivityGaugeProps) => {\n const [count, setCount] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [daysBackValue, setDaysBackValue] = useState(daysBack.toString());\n const [activeDaysBack, setActiveDaysBack] = useState(daysBack);\n\n const subtitle = useMemo(() => `Tasks last ${activeDaysBack} days`, [activeDaysBack]);\n\n const fetchCount = useCallback(\n async (value: number) => {\n setIsLoading(true);\n setError(null);\n try {\n const total = await getTasksCount(value);\n setCount(total);\n } catch (err: unknown) {\n setError(err instanceof Error ? err.message : \"Failed to load tasks count\");\n } finally {\n setIsLoading(false);\n }\n },\n [],\n );\n\n useEffect(() => {\n let isActive = true;\n\n setIsLoading(true);\n setError(null);\n setCount(null);\n\n getTasksCount(activeDaysBack)\n .then((total) => {\n if (isActive) {\n setCount(total);\n }\n })\n .catch((err: unknown) => {\n if (isActive) {\n setError(err instanceof Error ? err.message : \"Failed to load tasks count\");\n }\n })\n .finally(() => {\n if (isActive) {\n setIsLoading(false);\n }\n });\n\n return () => {\n isActive = false;\n };\n }, [activeDaysBack]);\n\n const title = error ? \"—\" : count === null ? \"…\" : count.toLocaleString();\n const gaugeValue = count ?? 0;\n const computedMax = Math.max(maxValue, gaugeValue, 1);\n const gaugeData: ActivityGaugeDatum[] = [\n {\n name: \"Tasks\",\n value: gaugeValue,\n className: \"text-utility-brand-700\",\n },\n ];\n\n const handleDaysBackChange = (value: string) => {\n setDaysBackValue(value);\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed > 0) {\n setActiveDaysBack(Math.floor(parsed));\n }\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-wrap items-end justify-between gap-3\">\n <div className=\"min-w-[180px]\">\n <Input\n label=\"Days back\"\n type=\"number\"\n value={daysBackValue}\n onChange={handleDaysBackChange}\n size=\"sm\"\n placeholder=\"14\"\n />\n </div>\n <Button\n color=\"primary\"\n size=\"sm\"\n isLoading={isLoading}\n showTextWhileLoading\n onClick={() => fetchCount(activeDaysBack)}\n >\n Refresh\n </Button>\n </div>\n <ActivityGaugeLg title={title} subtitle={subtitle} data={gaugeData} maxValue={computedMax} />\n </div>\n );\n};\n"]}
|