pentatrion-design 1.2.9 → 1.2.10

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.
Files changed (42) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{Button-C953R2Mo.mjs → Button-Dtp-UNzH.mjs} +37 -33
  3. package/dist/Button-Dtp-UNzH.mjs.map +1 -0
  4. package/dist/{Snack-BbIrQslD.mjs → Snack-CoeHh5qF.mjs} +4 -4
  5. package/dist/{Snack-BbIrQslD.mjs.map → Snack-CoeHh5qF.mjs.map} +1 -1
  6. package/dist/{button-CcpvNjuD.mjs → button-CqXVbdMx.mjs} +2 -2
  7. package/dist/{button-CcpvNjuD.mjs.map → button-CqXVbdMx.mjs.map} +1 -1
  8. package/dist/components/autocomplete/index.mjs +3 -3
  9. package/dist/components/button/index.mjs +2 -2
  10. package/dist/components/dropdown-menu-nested/index.mjs +1 -1
  11. package/dist/components/fields/checkbox/index.mjs +2 -2
  12. package/dist/components/fields/color/index.mjs +2 -2
  13. package/dist/components/fields/file/index.mjs +2 -2
  14. package/dist/components/fields/input-button/index.mjs +2 -2
  15. package/dist/components/fields/radio/index.mjs +2 -2
  16. package/dist/components/fields/select/index.mjs +2 -2
  17. package/dist/components/fields/stars/index.mjs +2 -2
  18. package/dist/components/fields/text/index.mjs +1 -1
  19. package/dist/components/fields/wysiwyg/index.mjs +3 -3
  20. package/dist/components/loader/index.d.mts +13 -3
  21. package/dist/components/loader/index.d.mts.map +1 -1
  22. package/dist/components/loader/index.mjs +2 -2
  23. package/dist/components/modal/index.mjs +1 -1
  24. package/dist/components/notification/index.mjs +1 -1
  25. package/dist/components/popover/index.mjs +2 -2
  26. package/dist/components/select-legacy/index.mjs +1 -1
  27. package/dist/components/snack/index.mjs +1 -1
  28. package/dist/components/toast/index.mjs +1 -1
  29. package/dist/{loader-csj5qb99.mjs → loader-CBd61lYX.mjs} +92 -4
  30. package/dist/loader-CBd61lYX.mjs.map +1 -0
  31. package/dist/{modal-Bs1iwE6V.mjs → modal-OMEOCOF0.mjs} +2 -2
  32. package/dist/{modal-Bs1iwE6V.mjs.map → modal-OMEOCOF0.mjs.map} +1 -1
  33. package/dist/{text-Bilm-ddL.mjs → text-Cm7qVcmx.mjs} +3 -3
  34. package/dist/{text-Bilm-ddL.mjs.map → text-Cm7qVcmx.mjs.map} +1 -1
  35. package/package.json +1 -1
  36. package/src/components/button/Button.stories.tsx +9 -1
  37. package/src/components/button/Button.tsx +12 -10
  38. package/src/components/loader/RoundedRectLoader.tsx +61 -0
  39. package/src/components/loader/index.ts +1 -0
  40. package/src/tailwind/theme.css +12 -1
  41. package/dist/Button-C953R2Mo.mjs.map +0 -1
  42. package/dist/loader-csj5qb99.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 1.2.10
2
+
3
+ ### Patch Changes
4
+
5
+ - 4b3bd91: enhance button loader
6
+
1
7
  ## 1.2.9
2
8
 
3
9
  ### Patch Changes
@@ -1,4 +1,4 @@
1
- import { t as Loader } from "./loader-csj5qb99.mjs";
1
+ import { n as Loader, t as RoundedRectLoader } from "./loader-CBd61lYX.mjs";
2
2
  import { h as useRipple } from "./hooks-BQw3Dsve.mjs";
3
3
  import { t as Slot } from "./slot-D8EJRq72.mjs";
4
4
  import { c } from "react/compiler-runtime";
@@ -63,7 +63,7 @@ const buttonVariants = cva("relative box-border inline-flex items-center leading
63
63
  }
64
64
  });
65
65
  function Button(t0) {
66
- const $ = c(42);
66
+ const $ = c(43);
67
67
  let children;
68
68
  let className;
69
69
  let props;
@@ -141,42 +141,46 @@ function Button(t0) {
141
141
  const Comp = asChild ? Slot : "button";
142
142
  const t13 = focusable ? 0 : -1;
143
143
  let t14;
144
- if ($[17] !== className || $[18] !== icon || $[19] !== loading || $[20] !== size || $[21] !== variant || $[22] !== width) {
144
+ if ($[17] !== className || $[18] !== icon || $[19] !== size || $[20] !== variant || $[21] !== width) {
145
145
  t14 = clsx(buttonVariants({
146
146
  variant,
147
147
  size,
148
148
  width,
149
149
  icon: width === "custom" && !icon ? "custom" : icon
150
- }), className, loading && !icon && "text-transparent");
150
+ }), className);
151
151
  $[17] = className;
152
152
  $[18] = icon;
153
- $[19] = loading;
154
- $[20] = size;
155
- $[21] = variant;
156
- $[22] = width;
157
- $[23] = t14;
158
- } else t14 = $[23];
153
+ $[19] = size;
154
+ $[20] = variant;
155
+ $[21] = width;
156
+ $[22] = t14;
157
+ } else t14 = $[22];
159
158
  let t15;
160
- if ($[24] !== disabled) {
161
- t15 = disabled ? { disabled } : {};
162
- $[24] = disabled;
159
+ if ($[23] !== disabled || $[24] !== loading) {
160
+ t15 = disabled || loading ? { disabled } : {};
161
+ $[23] = disabled;
162
+ $[24] = loading;
163
163
  $[25] = t15;
164
164
  } else t15 = $[25];
165
165
  let t16;
166
- if ($[26] !== asChild || $[27] !== children || $[28] !== color || $[29] !== loading) {
167
- t16 = asChild ? children : /* @__PURE__ */ jsxs(Fragment$1, { children: [children, loading && /* @__PURE__ */ jsx(Loader, {
166
+ if ($[26] !== asChild || $[27] !== children || $[28] !== color || $[29] !== icon || $[30] !== loading) {
167
+ t16 = asChild ? children : /* @__PURE__ */ jsxs(Fragment$1, { children: [children, loading && (icon ? /* @__PURE__ */ jsx(Loader, {
168
168
  color: loaderColor(color),
169
169
  className: clsx("top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"),
170
170
  position: "absolute"
171
- })] });
171
+ }) : /* @__PURE__ */ jsx(RoundedRectLoader, {
172
+ color: loaderColor(color),
173
+ className: "absolute inset-0"
174
+ }))] });
172
175
  $[26] = asChild;
173
176
  $[27] = children;
174
177
  $[28] = color;
175
- $[29] = loading;
176
- $[30] = t16;
177
- } else t16 = $[30];
178
+ $[29] = icon;
179
+ $[30] = loading;
180
+ $[31] = t16;
181
+ } else t16 = $[31];
178
182
  let t17;
179
- if ($[31] !== Comp || $[32] !== color || $[33] !== loading || $[34] !== props || $[35] !== selected || $[36] !== t13 || $[37] !== t14 || $[38] !== t15 || $[39] !== t16 || $[40] !== variant) {
183
+ if ($[32] !== Comp || $[33] !== color || $[34] !== loading || $[35] !== props || $[36] !== selected || $[37] !== t13 || $[38] !== t14 || $[39] !== t15 || $[40] !== t16 || $[41] !== variant) {
180
184
  t17 = /* @__PURE__ */ jsx(Comp, {
181
185
  tabIndex: t13,
182
186
  role: "button",
@@ -191,21 +195,21 @@ function Button(t0) {
191
195
  ...props,
192
196
  children: t16
193
197
  });
194
- $[31] = Comp;
195
- $[32] = color;
196
- $[33] = loading;
197
- $[34] = props;
198
- $[35] = selected;
199
- $[36] = t13;
200
- $[37] = t14;
201
- $[38] = t15;
202
- $[39] = t16;
203
- $[40] = variant;
204
- $[41] = t17;
205
- } else t17 = $[41];
198
+ $[32] = Comp;
199
+ $[33] = color;
200
+ $[34] = loading;
201
+ $[35] = props;
202
+ $[36] = selected;
203
+ $[37] = t13;
204
+ $[38] = t14;
205
+ $[39] = t15;
206
+ $[40] = t16;
207
+ $[41] = variant;
208
+ $[42] = t17;
209
+ } else t17 = $[42];
206
210
  return t17;
207
211
  }
208
212
  //#endregion
209
213
  export { buttonVariants as n, Button as t };
210
214
 
211
- //# sourceMappingURL=Button-C953R2Mo.mjs.map
215
+ //# sourceMappingURL=Button-Dtp-UNzH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button-Dtp-UNzH.mjs","names":["ComponentProps","RefObject","useImperativeHandle","useRef","clsx","Loader","RoundedRectLoader","useRipple","Slot","cva","ThemeColor","loaderColor","color","ButtonProps","Omit","withRipple","variant","size","width","loading","disabled","focusable","selected","icon","asChild","ref","HTMLButtonElement","buttonVariants","variants","clickable","true","false","small","medium","large","input","custom","scalable","fit","full","contained","light","outlined","text","ghost","defaultVariants","Button","t0","$","_c","children","className","props","t1","t10","t11","t2","t3","t4","t5","t6","t7","t8","t9","undefined","inputRef","t12","Symbol","for","current","rippleEnabled","includes","Comp","t13","t14","t15","t16","t17"],"sources":["../src/components/button/Button.tsx"],"sourcesContent":["import { ComponentProps, RefObject, useImperativeHandle, useRef } from \"react\";\nimport clsx from \"clsx\";\nimport { Loader, RoundedRectLoader } from \"../loader\";\nimport { useRipple } from \"../../hooks\";\nimport { Slot } from \"../slot\";\nimport { cva } from \"class-variance-authority\";\nimport { ThemeColor } from \"../../types\";\n\nfunction loaderColor(color: ThemeColor): ThemeColor {\n switch (color) {\n case \"yellow-alpha\":\n return \"yellow\";\n case \"gray-alpha\":\n return \"gray\";\n default:\n return color;\n }\n}\n\nexport interface ButtonProps extends Omit<ComponentProps<\"button\">, \"color\"> {\n withRipple?: boolean;\n\n variant?: \"contained\" | \"light\" | \"outlined\" | \"text\" | \"ghost\";\n\n size?: \"small\" | \"medium\" | \"large\" | \"custom\" | \"input\" | \"scalable\";\n\n color?: ThemeColor;\n\n width?: \"fit\" | \"full\" | \"custom\";\n\n loading?: boolean;\n\n disabled?: boolean;\n\n focusable?: boolean;\n /**\n * For a selected item inside a group.\n */\n selected?: boolean;\n\n icon?: boolean;\n\n asChild?: boolean;\n\n ref?: RefObject<HTMLButtonElement>;\n}\n\nexport const buttonVariants = cva(\n \"relative box-border inline-flex items-center leading-5 no-underline focus-visible-has:outline-2\",\n {\n variants: {\n clickable: {\n true: \"cursor-pointer active:translate-y-px focus-visible-has:z-10\",\n false: \"pointer-events-none\",\n },\n size: {\n small: \"[--h-button:1.5rem] h-(--h-button) truncate\",\n medium: \"[--h-button:2rem] h-(--h-button) truncate\",\n large: \"[--h-button:3rem] h-(--h-button) truncate\",\n input: \"[--h-button:calc(var(--h-input)-2px)] h-(--h-button) truncate\",\n custom: \"truncate\",\n scalable: \"\",\n },\n icon: {\n true: \"rounded-[calc(var(--h-button)/2)] min-w-(--h-button) [&_i,&_img,&_svg]:w-(--h-button) justify-center [&_:last-child:not(i,img,svg,strong)]:pr-4\",\n false: \"rounded-2xl px-4\",\n custom: \"\",\n },\n width: {\n fit: \"w-full max-w-fit\",\n full: \"w-full justify-center\",\n custom: \"\",\n },\n variant: {\n /**\n * src/tailwind/plugin.ts\n * addVariant(\"current\", [\n * `&[aria-checked=\"true\"]`,\n * `&[aria-current=\"page\"]`,\n * `&:has(:checked)`\n * ])\n */\n contained:\n \"shadow-lg hover:shadow-xl active:shadow-xl-active outline-offset-0 text-custom-text bg-custom-3 hover:bg-custom-4 current:bg-custom-4 focus-visible-has:outline-custom-5\",\n light:\n \"shadow-lg hover:shadow-xl has-checked:shadow-xl focus:shadow-xl active:shadow-xl-active outline-offset-0 bg-custom-1 text-gray-text hover:text-custom-text hover:bg-custom-3 current:bg-custom-3 focus-visible-has:outline-custom-4\",\n outlined:\n \"bg-custom-0 hover:shadow-sm active:shadow-sm-active text-gray-7 outline-offset-0 border hover:bg-custom-1 border-custom-border focus-visible-has:outline-custom-5 current:bg-custom-3 focus-visible-has:border-transparent\",\n text: \"bg-transparent hover:shadow-sm active:shadow-sm-active outline-offset-0 hover:bg-custom-1 dark:hover:bg-custom-1/50 text-gray-7 hover:text-gray-8 current:bg-custom-3 focus-visible-has:outline-custom-5\",\n ghost: \"outline-offset-0 current:bg-custom-1 focus-visible-has:outline-custom-5\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n icon: false,\n variant: \"contained\",\n clickable: true,\n width: \"fit\",\n },\n },\n);\n\nexport function Button({\n withRipple = true,\n variant = \"contained\",\n loading = false,\n color = \"yellow\",\n size = \"medium\",\n focusable = true,\n className,\n disabled = false,\n children,\n selected = false,\n icon = false,\n asChild = false,\n width = \"fit\",\n ref,\n ...props\n}: ButtonProps) {\n const inputRef = useRef<HTMLButtonElement>(null!);\n\n useImperativeHandle<HTMLButtonElement | null, HTMLButtonElement | null>(\n ref,\n () => inputRef.current,\n );\n\n const rippleEnabled = !loading && !disabled && withRipple;\n\n useRipple(\n inputRef,\n [\"text\", \"outlined\", \"ghost\"].includes(variant) ? true : false,\n rippleEnabled,\n );\n\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n tabIndex={focusable ? 0 : -1}\n role=\"button\"\n ref={inputRef}\n className={clsx(\n buttonVariants({\n variant,\n size,\n width,\n icon: width === \"custom\" && !icon ? \"custom\" : icon,\n }),\n className,\n )}\n data-color={color}\n data-variant={variant}\n aria-checked={selected}\n suppressHydrationWarning\n aria-busy={loading}\n {...(disabled || loading ? { disabled } : {})}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {/* {!notClickable && withRipple && ripples} */}\n {children}\n {loading &&\n (icon ? (\n <Loader\n color={loaderColor(color)}\n className={clsx(\"top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\")}\n position=\"absolute\"\n />\n ) : (\n <RoundedRectLoader color={loaderColor(color)} className=\"absolute inset-0\" />\n ))}\n </>\n )}\n </Comp>\n );\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { t as Loader } from "./loader-csj5qb99.mjs";
2
- import { t as Button } from "./Button-C953R2Mo.mjs";
3
- import "./button-CcpvNjuD.mjs";
1
+ import { n as Loader } from "./loader-CBd61lYX.mjs";
2
+ import { t as Button } from "./Button-Dtp-UNzH.mjs";
3
+ import "./button-CqXVbdMx.mjs";
4
4
  import { t as Dialog } from "./Dialog-CpSdL1-f.mjs";
5
5
  import "./components/dialog/index.mjs";
6
6
  import { c } from "react/compiler-runtime";
@@ -107,4 +107,4 @@ function _temp() {}
107
107
  //#endregion
108
108
  export { Snack as t };
109
109
 
110
- //# sourceMappingURL=Snack-BbIrQslD.mjs.map
110
+ //# sourceMappingURL=Snack-CoeHh5qF.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Snack-BbIrQslD.mjs","names":["clsx","useEffect","Button","Dialog","Loader","Message","SnackProps","Partial","onRemove","Snack","t0","$","_c","expiration","t1","content","t2","color","t3","withLoader","t4","canClose","t5","t6","undefined","_temp","t7","t8","timeoutId","setTimeout","clearTimeout","t9","Symbol","for","t10","t11","t12","t13","t14","t15"],"sources":["../src/components/snack/Snack.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { useEffect } from \"react\";\n\nimport { Button } from \"../button\";\nimport { Dialog } from \"../dialog\";\nimport { Loader } from \"../loader\";\nimport { Message } from \"../../types\";\n\nexport type SnackProps = Partial<Message> & {\n onRemove?: () => void;\n};\n\nexport function Snack({\n expiration = 5000,\n content = \"\",\n color = \"yellow\",\n withLoader = false,\n canClose = false,\n onRemove = () => {},\n}: SnackProps) {\n useEffect(() => {\n if (expiration === -1) {\n return;\n }\n\n const timeoutId = setTimeout(() => onRemove(), expiration);\n return () => void clearTimeout(timeoutId);\n }, [onRemove, expiration]);\n\n return (\n <Dialog\n className={clsx(\"motion-safe:animate-fade-in pointer-events-auto\", \"ll-snack\")}\n placement=\"top\"\n color={color}\n role={color !== \"red\" ? \"status\" : \"alertdialog\"}\n >\n <div className=\"flex w-fit min-w-60 items-center px-2 py-1\">\n <span className=\"flex-1 pr-4\">{content}</span>\n {withLoader && <Loader size=\"small\" color=\"gray\" />}\n\n {canClose && (\n <Button icon variant=\"text\" color=\"gray\" onClick={onRemove}>\n <i className=\"fe-cancel\"></i>\n </Button>\n )}\n </div>\n </Dialog>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Snack-CoeHh5qF.mjs","names":["clsx","useEffect","Button","Dialog","Loader","Message","SnackProps","Partial","onRemove","Snack","t0","$","_c","expiration","t1","content","t2","color","t3","withLoader","t4","canClose","t5","t6","undefined","_temp","t7","t8","timeoutId","setTimeout","clearTimeout","t9","Symbol","for","t10","t11","t12","t13","t14","t15"],"sources":["../src/components/snack/Snack.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { useEffect } from \"react\";\n\nimport { Button } from \"../button\";\nimport { Dialog } from \"../dialog\";\nimport { Loader } from \"../loader\";\nimport { Message } from \"../../types\";\n\nexport type SnackProps = Partial<Message> & {\n onRemove?: () => void;\n};\n\nexport function Snack({\n expiration = 5000,\n content = \"\",\n color = \"yellow\",\n withLoader = false,\n canClose = false,\n onRemove = () => {},\n}: SnackProps) {\n useEffect(() => {\n if (expiration === -1) {\n return;\n }\n\n const timeoutId = setTimeout(() => onRemove(), expiration);\n return () => void clearTimeout(timeoutId);\n }, [onRemove, expiration]);\n\n return (\n <Dialog\n className={clsx(\"motion-safe:animate-fade-in pointer-events-auto\", \"ll-snack\")}\n placement=\"top\"\n color={color}\n role={color !== \"red\" ? \"status\" : \"alertdialog\"}\n >\n <div className=\"flex w-fit min-w-60 items-center px-2 py-1\">\n <span className=\"flex-1 pr-4\">{content}</span>\n {withLoader && <Loader size=\"small\" color=\"gray\" />}\n\n {canClose && (\n <Button icon variant=\"text\" color=\"gray\" onClick={onRemove}>\n <i className=\"fe-cancel\"></i>\n </Button>\n )}\n </div>\n </Dialog>\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { h as useRipple } from "./hooks-BQw3Dsve.mjs";
2
- import { n as buttonVariants } from "./Button-C953R2Mo.mjs";
2
+ import { n as buttonVariants } from "./Button-Dtp-UNzH.mjs";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useImperativeHandle, useRef } from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -146,4 +146,4 @@ function HrefButton(t0) {
146
146
  //#endregion
147
147
  export { ButtonGroup as n, buttonGroupVariants as r, HrefButton as t };
148
148
 
149
- //# sourceMappingURL=button-CcpvNjuD.mjs.map
149
+ //# sourceMappingURL=button-CqXVbdMx.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"button-CcpvNjuD.mjs","names":["ComponentProps","ReactNode","clsx","cva","Props","children","direction","buttonGroupVariants","variants","horizontal","vertical","defaultVariants","ButtonGroup","t0","$","_c","className","t1","undefined","t2","t3","ComponentProps","RefObject","useImperativeHandle","useRef","clsx","useRipple","ButtonProps","buttonVariants","HrefButtonProps","Pick","ref","HTMLAnchorElement","HrefButton","t0","$","_c","children","className","disabled","href","props","t1","t2","t3","t4","t5","t6","t7","withRipple","variant","color","size","width","selected","icon","undefined","anchorRef","t8","Symbol","for","current","ripples","t9","t10","t11"],"sources":["../src/components/button/ButtonGroup.tsx","../src/components/button/HrefButton.tsx"],"sourcesContent":["import { ComponentProps, ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { cva } from \"class-variance-authority\";\n\ninterface Props extends ComponentProps<\"div\"> {\n children: ReactNode;\n direction?: \"horizontal\" | \"vertical\";\n}\n\nexport const buttonGroupVariants = cva(\n \"[&_:not(:first-child)]:rounded-tl-none [&_:not(:last-child)]:rounded-br-none\",\n {\n variants: {\n direction: {\n horizontal:\n \"[&_:not(:first-child)]:rounded-bl-none [&_:not(:last-child)]:rounded-tr-none *:data-[variant='outlined']:mx-[-0.5px] *:shadow-none\",\n vertical:\n \"flex flex-col [&_:not(:first-child)]:rounded-tr-none [&_:not(:last-child)]:rounded-bl-none *:data-[variant='outlined']:my-[-0.5px] *:shadow-none\",\n },\n },\n defaultVariants: {\n direction: \"horizontal\",\n },\n },\n);\n\nexport function ButtonGroup({ children, className, direction = \"horizontal\" }: Props) {\n return <div className={clsx(buttonGroupVariants({ direction }), className)}>{children}</div>;\n}\n","import { ComponentProps, RefObject, useImperativeHandle, useRef } from \"react\";\nimport clsx from \"clsx\";\nimport { useRipple } from \"../../hooks/useRipple\";\nimport { ButtonProps, buttonVariants } from \"./Button\";\n\nexport type HrefButtonProps = ComponentProps<\"a\"> &\n Pick<\n ButtonProps,\n \"withRipple\" | \"variant\" | \"size\" | \"color\" | \"selected\" | \"icon\" | \"disabled\" | \"width\"\n > & { ref?: RefObject<HTMLAnchorElement> };\n\nexport function HrefButton({\n withRipple = true,\n variant = \"contained\",\n color = \"yellow\",\n size = \"medium\",\n width = \"fit\",\n className,\n disabled,\n children,\n selected = false,\n icon = false,\n href,\n ref,\n ...props\n}: HrefButtonProps) {\n const anchorRef = useRef<HTMLAnchorElement>(null!);\n\n useImperativeHandle<HTMLAnchorElement | null, HTMLAnchorElement | null>(\n ref,\n () => anchorRef.current,\n );\n\n const ripples = useRipple(anchorRef);\n\n return (\n <a\n role=\"button\"\n href={href}\n ref={anchorRef}\n className={clsx(\n buttonVariants({ variant, size, width, icon: size === \"custom\" ? \"custom\" : icon }),\n className,\n selected && \"active\",\n )}\n data-color={color}\n data-variant={variant}\n aria-checked={selected}\n aria-disabled={disabled}\n {...props}\n >\n {!disabled && withRipple && ripples}\n {children}\n </a>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"button-CqXVbdMx.mjs","names":["ComponentProps","ReactNode","clsx","cva","Props","children","direction","buttonGroupVariants","variants","horizontal","vertical","defaultVariants","ButtonGroup","t0","$","_c","className","t1","undefined","t2","t3","ComponentProps","RefObject","useImperativeHandle","useRef","clsx","useRipple","ButtonProps","buttonVariants","HrefButtonProps","Pick","ref","HTMLAnchorElement","HrefButton","t0","$","_c","children","className","disabled","href","props","t1","t2","t3","t4","t5","t6","t7","withRipple","variant","color","size","width","selected","icon","undefined","anchorRef","t8","Symbol","for","current","ripples","t9","t10","t11"],"sources":["../src/components/button/ButtonGroup.tsx","../src/components/button/HrefButton.tsx"],"sourcesContent":["import { ComponentProps, ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { cva } from \"class-variance-authority\";\n\ninterface Props extends ComponentProps<\"div\"> {\n children: ReactNode;\n direction?: \"horizontal\" | \"vertical\";\n}\n\nexport const buttonGroupVariants = cva(\n \"[&_:not(:first-child)]:rounded-tl-none [&_:not(:last-child)]:rounded-br-none\",\n {\n variants: {\n direction: {\n horizontal:\n \"[&_:not(:first-child)]:rounded-bl-none [&_:not(:last-child)]:rounded-tr-none *:data-[variant='outlined']:mx-[-0.5px] *:shadow-none\",\n vertical:\n \"flex flex-col [&_:not(:first-child)]:rounded-tr-none [&_:not(:last-child)]:rounded-bl-none *:data-[variant='outlined']:my-[-0.5px] *:shadow-none\",\n },\n },\n defaultVariants: {\n direction: \"horizontal\",\n },\n },\n);\n\nexport function ButtonGroup({ children, className, direction = \"horizontal\" }: Props) {\n return <div className={clsx(buttonGroupVariants({ direction }), className)}>{children}</div>;\n}\n","import { ComponentProps, RefObject, useImperativeHandle, useRef } from \"react\";\nimport clsx from \"clsx\";\nimport { useRipple } from \"../../hooks/useRipple\";\nimport { ButtonProps, buttonVariants } from \"./Button\";\n\nexport type HrefButtonProps = ComponentProps<\"a\"> &\n Pick<\n ButtonProps,\n \"withRipple\" | \"variant\" | \"size\" | \"color\" | \"selected\" | \"icon\" | \"disabled\" | \"width\"\n > & { ref?: RefObject<HTMLAnchorElement> };\n\nexport function HrefButton({\n withRipple = true,\n variant = \"contained\",\n color = \"yellow\",\n size = \"medium\",\n width = \"fit\",\n className,\n disabled,\n children,\n selected = false,\n icon = false,\n href,\n ref,\n ...props\n}: HrefButtonProps) {\n const anchorRef = useRef<HTMLAnchorElement>(null!);\n\n useImperativeHandle<HTMLAnchorElement | null, HTMLAnchorElement | null>(\n ref,\n () => anchorRef.current,\n );\n\n const ripples = useRipple(anchorRef);\n\n return (\n <a\n role=\"button\"\n href={href}\n ref={anchorRef}\n className={clsx(\n buttonVariants({ variant, size, width, icon: size === \"custom\" ? \"custom\" : icon }),\n className,\n selected && \"active\",\n )}\n data-color={color}\n data-variant={variant}\n aria-checked={selected}\n aria-disabled={disabled}\n {...props}\n >\n {!disabled && withRipple && ripples}\n {children}\n </a>\n );\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { t as Loader } from "../../loader-csj5qb99.mjs";
1
+ import { n as Loader } from "../../loader-CBd61lYX.mjs";
2
2
  import { d as useStateDebounce, s as useIsomorphicLayoutEffect } from "../../hooks-BQw3Dsve.mjs";
3
- import { t as Button } from "../../Button-C953R2Mo.mjs";
4
- import "../../button-CcpvNjuD.mjs";
3
+ import { t as Button } from "../../Button-Dtp-UNzH.mjs";
4
+ import "../../button-CqXVbdMx.mjs";
5
5
  import { t as Dialog } from "../../Dialog-CpSdL1-f.mjs";
6
6
  import "../dialog/index.mjs";
7
7
  import { n as inputConfig, r as sizeVariant } from "../../Input-BbXXGsv_.mjs";
@@ -1,3 +1,3 @@
1
- import { n as buttonVariants, t as Button } from "../../Button-C953R2Mo.mjs";
2
- import { n as ButtonGroup, r as buttonGroupVariants, t as HrefButton } from "../../button-CcpvNjuD.mjs";
1
+ import { n as buttonVariants, t as Button } from "../../Button-Dtp-UNzH.mjs";
2
+ import { n as ButtonGroup, r as buttonGroupVariants, t as HrefButton } from "../../button-CqXVbdMx.mjs";
3
3
  export { Button, ButtonGroup, HrefButton, buttonGroupVariants, buttonVariants };
@@ -1,4 +1,4 @@
1
- import { t as Button } from "../../Button-C953R2Mo.mjs";
1
+ import { t as Button } from "../../Button-Dtp-UNzH.mjs";
2
2
  import { t as Dialog } from "../../Dialog-CpSdL1-f.mjs";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { createContext, useContext, useEffect, useRef, useState } from "react";
@@ -1,5 +1,5 @@
1
- import { n as buttonVariants } from "../../../Button-C953R2Mo.mjs";
2
- import "../../../button-CcpvNjuD.mjs";
1
+ import { n as buttonVariants } from "../../../Button-Dtp-UNzH.mjs";
2
+ import "../../../button-CqXVbdMx.mjs";
3
3
  import { t as Field } from "../../../Field-DZmC5a1D.mjs";
4
4
  import { c } from "react/compiler-runtime";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,8 +1,8 @@
1
1
  import { h as useRipple } from "../../../hooks-BQw3Dsve.mjs";
2
- import { t as Button } from "../../../Button-C953R2Mo.mjs";
2
+ import { t as Button } from "../../../Button-Dtp-UNzH.mjs";
3
3
  import { n as useTranslate } from "../../../i18n-B57GZqP3.mjs";
4
4
  import { t as Field } from "../../../Field-DZmC5a1D.mjs";
5
- import { a as ModalContent, n as ModalFooter, o as Modal, r as ModalHeader, t as ModalDescription } from "../../../modal-Bs1iwE6V.mjs";
5
+ import { a as ModalContent, n as ModalFooter, o as Modal, r as ModalHeader, t as ModalDescription } from "../../../modal-OMEOCOF0.mjs";
6
6
  import { c } from "react/compiler-runtime";
7
7
  import { useImperativeHandle, useRef, useState } from "react";
8
8
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
- import { t as Button } from "../../../Button-C953R2Mo.mjs";
1
+ import { t as Button } from "../../../Button-Dtp-UNzH.mjs";
2
2
  import { t as Field } from "../../../Field-DZmC5a1D.mjs";
3
- import { a as ModalContent, n as ModalFooter, o as Modal, r as ModalHeader, t as ModalDescription } from "../../../modal-Bs1iwE6V.mjs";
3
+ import { a as ModalContent, n as ModalFooter, o as Modal, r as ModalHeader, t as ModalDescription } from "../../../modal-OMEOCOF0.mjs";
4
4
  import { n as isMediaImage, t as MediaPreview } from "../../../media-preview-CHOE6JmB.mjs";
5
5
  import { c } from "react/compiler-runtime";
6
6
  import { useState } from "react";
@@ -1,5 +1,5 @@
1
- import { t as Button } from "../../../Button-C953R2Mo.mjs";
2
- import "../../../button-CcpvNjuD.mjs";
1
+ import { t as Button } from "../../../Button-Dtp-UNzH.mjs";
2
+ import "../../../button-CqXVbdMx.mjs";
3
3
  import { n as inputConfig, r as sizeVariant } from "../../../Input-BbXXGsv_.mjs";
4
4
  import { c } from "react/compiler-runtime";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
- import { n as buttonVariants } from "../../../Button-C953R2Mo.mjs";
2
- import { r as buttonGroupVariants } from "../../../button-CcpvNjuD.mjs";
1
+ import { n as buttonVariants } from "../../../Button-Dtp-UNzH.mjs";
2
+ import { r as buttonGroupVariants } from "../../../button-CqXVbdMx.mjs";
3
3
  import { t as Field } from "../../../Field-DZmC5a1D.mjs";
4
4
  import { c } from "react/compiler-runtime";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
- import { t as Button } from "../../../Button-C953R2Mo.mjs";
2
- import "../../../button-CcpvNjuD.mjs";
1
+ import { t as Button } from "../../../Button-Dtp-UNzH.mjs";
2
+ import "../../../button-CqXVbdMx.mjs";
3
3
  import { t as Dialog } from "../../../Dialog-CpSdL1-f.mjs";
4
4
  import "../../dialog/index.mjs";
5
5
  import { r as sizeVariant } from "../../../Input-BbXXGsv_.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as useMergeRefs } from "../../../hooks-BQw3Dsve.mjs";
2
- import { t as Button } from "../../../Button-C953R2Mo.mjs";
3
- import "../../../button-CcpvNjuD.mjs";
2
+ import { t as Button } from "../../../Button-Dtp-UNzH.mjs";
3
+ import "../../../button-CqXVbdMx.mjs";
4
4
  import { c } from "react/compiler-runtime";
5
5
  import { useRef, useState } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,3 +1,3 @@
1
1
  import { n as inputConfig, t as Input } from "../../../Input-BbXXGsv_.mjs";
2
- import { n as PasswordField, r as TextField, t as SlugField } from "../../../text-Bilm-ddL.mjs";
2
+ import { n as PasswordField, r as TextField, t as SlugField } from "../../../text-Cm7qVcmx.mjs";
3
3
  export { Input, PasswordField, SlugField, TextField, inputConfig };
@@ -1,5 +1,5 @@
1
- import { t as Button } from "../../../Button-C953R2Mo.mjs";
2
- import "../../../button-CcpvNjuD.mjs";
1
+ import { t as Button } from "../../../Button-Dtp-UNzH.mjs";
2
+ import "../../../button-CqXVbdMx.mjs";
3
3
  import { t as Dialog } from "../../../Dialog-CpSdL1-f.mjs";
4
4
  import "../../dialog/index.mjs";
5
5
  import { t as Input } from "../../../Input-BbXXGsv_.mjs";
@@ -7,7 +7,7 @@ import { n as DropdownMenu, t as DropdownMenuItem } from "../../../dropdown-menu
7
7
  import { proseLinkVariant } from "../../href/index.mjs";
8
8
  import { n as useTranslate } from "../../../i18n-B57GZqP3.mjs";
9
9
  import { t as Field } from "../../../Field-DZmC5a1D.mjs";
10
- import "../../../text-Bilm-ddL.mjs";
10
+ import "../../../text-Cm7qVcmx.mjs";
11
11
  import { c } from "react/compiler-runtime";
12
12
  import { createContext, useContext, useEffect, useImperativeHandle, useRef, useState } from "react";
13
13
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,7 +1,7 @@
1
1
  import { i as ThemeColor } from "../../types-CbJroQxH.mjs";
2
2
  import { CSSProperties, ComponentPropsWithoutRef, ReactNode } from "react";
3
3
  //#region src/components/loader/Loader.d.ts
4
- interface Props extends ComponentPropsWithoutRef<"div"> {
4
+ interface Props$1 extends ComponentPropsWithoutRef<"div"> {
5
5
  size?: "small" | "medium" | "large" | "input";
6
6
  color?: ThemeColor | "custom";
7
7
  children?: ReactNode;
@@ -9,7 +9,17 @@ interface Props extends ComponentPropsWithoutRef<"div"> {
9
9
  position?: CSSProperties["position"];
10
10
  progression?: number;
11
11
  }
12
- declare function Loader({ size, color, loading, progression, className, position, children, ...rest }: Props): import("react").JSX.Element;
12
+ declare function Loader({ size, color, loading, progression, className, position, children, ...rest }: Props$1): import("react").JSX.Element;
13
13
  //#endregion
14
- export { Loader };
14
+ //#region src/components/loader/RoundedRectLoader.d.ts
15
+ interface Props extends ComponentPropsWithoutRef<"svg"> {
16
+ color?: ThemeColor | "custom";
17
+ /**
18
+ * Matches buttonVariants' rounded-2xl (1rem). Override for other shapes.
19
+ */
20
+ radius?: number;
21
+ }
22
+ declare function RoundedRectLoader({ color, radius, className, ...rest }: Props): import("react").JSX.Element;
23
+ //#endregion
24
+ export { Loader, RoundedRectLoader };
15
25
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/components/loader/Loader.tsx"],"mappings":";;;UAIU,cAAc;EACtB;EACA,QAAQ;EACR,WAAW;EACX;EACA,WAAW;EACX;;iBA2Bc,SACd,MACA,OACA,SACA,aACA,WACA,UACA,aACG,QACF,wBAAK,IAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/components/loader/Loader.tsx","../../../src/components/loader/RoundedRectLoader.tsx"],"mappings":";;;UAIU,gBAAc;EACtB;EACA,QAAQ;EACR,WAAW;EACX;EACA,WAAW;EACX;;iBA2Bc,SACd,MACA,OACA,SACA,aACA,WACA,UACA,aACG,QACF,0BAAK,IAAA;;;UC1CE,cAAc;EACtB,QAAQ;;;;EAIR;;iBAgBc,oBAAoB,OAAgB,QAAa,cAAc,QAAQ,wBAAK,IAAA"}
@@ -1,2 +1,2 @@
1
- import { t as Loader } from "../../loader-csj5qb99.mjs";
2
- export { Loader };
1
+ import { n as Loader, t as RoundedRectLoader } from "../../loader-CBd61lYX.mjs";
2
+ export { Loader, RoundedRectLoader };
@@ -1,2 +1,2 @@
1
- import { a as ModalContent, c as useModalContext, i as ModalTrigger, l as useModal, n as ModalFooter, o as Modal, r as ModalHeader, s as ModalContext, t as ModalDescription } from "../../modal-Bs1iwE6V.mjs";
1
+ import { a as ModalContent, c as useModalContext, i as ModalTrigger, l as useModal, n as ModalFooter, o as Modal, r as ModalHeader, s as ModalContext, t as ModalDescription } from "../../modal-OMEOCOF0.mjs";
2
2
  export { Modal, ModalContent, ModalContext, ModalDescription, ModalFooter, ModalHeader, ModalTrigger, useModal, useModalContext };
@@ -1,5 +1,5 @@
1
1
  import { fetchAPI, parseError } from "../../lib/index.mjs";
2
- import { t as Snack } from "../../Snack-BbIrQslD.mjs";
2
+ import { t as Snack } from "../../Snack-CoeHh5qF.mjs";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { createContext, createElement, useContext, useEffect, useRef, useState } from "react";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
- import { t as Button } from "../../Button-C953R2Mo.mjs";
2
- import "../../button-CcpvNjuD.mjs";
1
+ import { t as Button } from "../../Button-Dtp-UNzH.mjs";
2
+ import "../../button-CqXVbdMx.mjs";
3
3
  import { t as Dialog } from "../../Dialog-CpSdL1-f.mjs";
4
4
  import "../dialog/index.mjs";
5
5
  import { t as computeArrowStyle } from "../../util-CwC8vkQ9.mjs";
@@ -1,4 +1,4 @@
1
- import { t as Button } from "../../Button-C953R2Mo.mjs";
1
+ import { t as Button } from "../../Button-Dtp-UNzH.mjs";
2
2
  import { t as Dialog } from "../../Dialog-CpSdL1-f.mjs";
3
3
  import { r as sizeVariant, t as Input } from "../../Input-BbXXGsv_.mjs";
4
4
  import { t as Badge } from "../../badge-O81gvkSR.mjs";
@@ -1,2 +1,2 @@
1
- import { t as Snack } from "../../Snack-BbIrQslD.mjs";
1
+ import { t as Snack } from "../../Snack-CoeHh5qF.mjs";
2
2
  export { Snack };
@@ -1,5 +1,5 @@
1
1
  import { parseError } from "../../lib/index.mjs";
2
- import { t as Snack } from "../../Snack-BbIrQslD.mjs";
2
+ import { t as Snack } from "../../Snack-CoeHh5qF.mjs";
3
3
  import "../snack/index.mjs";
4
4
  import { c } from "react/compiler-runtime";
5
5
  import { useState } from "react";
@@ -9,7 +9,7 @@ const sizeConfig = {
9
9
  large: "[--h-button:3rem]",
10
10
  input: "[--h-button:calc(var(--h-input)-2px)]"
11
11
  };
12
- const trackStyle = {
12
+ const trackStyle$1 = {
13
13
  strokeLinecap: "round",
14
14
  strokeWidth: 2
15
15
  };
@@ -99,7 +99,7 @@ function Loader(t0) {
99
99
  /* @__PURE__ */ jsx("use", {
100
100
  href: `#${id}`,
101
101
  className: "fill-none stroke-current opacity-25",
102
- style: trackStyle
102
+ style: trackStyle$1
103
103
  }),
104
104
  progression === -1 ? /* @__PURE__ */ jsx("use", {
105
105
  href: `#${id}`,
@@ -147,6 +147,94 @@ function Loader(t0) {
147
147
  return t13;
148
148
  }
149
149
  //#endregion
150
- export { Loader as t };
150
+ //#region src/components/loader/RoundedRectLoader.tsx
151
+ const width = 4;
152
+ const trackStyle = {
153
+ strokeLinecap: "round",
154
+ strokeWidth: width
155
+ };
156
+ const rectStyle = {
157
+ strokeLinecap: "round",
158
+ strokeWidth: width,
159
+ strokeDasharray: "40, 60"
160
+ };
161
+ function RoundedRectLoader(t0) {
162
+ const $ = c(17);
163
+ let className;
164
+ let rest;
165
+ let t1;
166
+ let t2;
167
+ if ($[0] !== t0) {
168
+ ({color: t1, radius: t2, className, ...rest} = t0);
169
+ $[0] = t0;
170
+ $[1] = className;
171
+ $[2] = rest;
172
+ $[3] = t1;
173
+ $[4] = t2;
174
+ } else {
175
+ className = $[1];
176
+ rest = $[2];
177
+ t1 = $[3];
178
+ t2 = $[4];
179
+ }
180
+ const color = t1 === void 0 ? "blue" : t1;
181
+ const rx = (t2 === void 0 ? 16 : t2) - 1;
182
+ const t3 = color !== "custom" && "text-custom-4";
183
+ let t4;
184
+ if ($[5] !== className || $[6] !== t3) {
185
+ t4 = clsx("pointer-events-none h-full w-full", t3, className);
186
+ $[5] = className;
187
+ $[6] = t3;
188
+ $[7] = t4;
189
+ } else t4 = $[7];
190
+ let t5;
191
+ let t6;
192
+ if ($[8] !== rx) {
193
+ t5 = /* @__PURE__ */ jsx("rect", {
194
+ x: width / 2,
195
+ y: width / 2,
196
+ width: `calc(100% - ${width}px)`,
197
+ height: `calc(100% - ${width}px)`,
198
+ rx,
199
+ pathLength: 100,
200
+ className: "fill-none stroke-current opacity-25",
201
+ style: trackStyle
202
+ });
203
+ t6 = /* @__PURE__ */ jsx("rect", {
204
+ x: width / 2,
205
+ y: width / 2,
206
+ width: `calc(100% - ${width}px)`,
207
+ height: `calc(100% - ${width}px)`,
208
+ rx,
209
+ pathLength: 100,
210
+ className: "animate-loader-rect-stroke fill-none stroke-current",
211
+ style: rectStyle
212
+ });
213
+ $[8] = rx;
214
+ $[9] = t5;
215
+ $[10] = t6;
216
+ } else {
217
+ t5 = $[9];
218
+ t6 = $[10];
219
+ }
220
+ let t7;
221
+ if ($[11] !== color || $[12] !== rest || $[13] !== t4 || $[14] !== t5 || $[15] !== t6) {
222
+ t7 = /* @__PURE__ */ jsxs("svg", {
223
+ "data-color": color,
224
+ className: t4,
225
+ ...rest,
226
+ children: [t5, t6]
227
+ });
228
+ $[11] = color;
229
+ $[12] = rest;
230
+ $[13] = t4;
231
+ $[14] = t5;
232
+ $[15] = t6;
233
+ $[16] = t7;
234
+ } else t7 = $[16];
235
+ return t7;
236
+ }
237
+ //#endregion
238
+ export { Loader as n, RoundedRectLoader as t };
151
239
 
152
- //# sourceMappingURL=loader-csj5qb99.mjs.map
240
+ //# sourceMappingURL=loader-CBd61lYX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-CBd61lYX.mjs","names":["CSSProperties","ComponentPropsWithoutRef","ReactNode","useId","ThemeColor","clsx","Props","size","color","children","loading","position","progression","sizeConfig","small","medium","large","input","trackStyle","strokeLinecap","strokeWidth","circleStyle","strokeDasharray","Loader","t0","$","_c","className","rest","t1","t2","t3","t4","t5","undefined","id","t6","Math","sin","PI","t7","cos","t8","x","y","destPoint","t9","t10","t11","t12","t13","CSSProperties","ComponentPropsWithoutRef","ThemeColor","clsx","Props","color","radius","width","trackStyle","strokeLinecap","strokeWidth","rectStyle","strokeDasharray","RoundedRectLoader","t0","$","_c","className","rest","t1","t2","undefined","rx","t3","t4","t5","t6","t7"],"sources":["../src/components/loader/Loader.tsx","../src/components/loader/RoundedRectLoader.tsx"],"sourcesContent":["import { CSSProperties, ComponentPropsWithoutRef, ReactNode, useId } from \"react\";\nimport { ThemeColor } from \"../../types\";\nimport clsx from \"clsx\";\n\ninterface Props extends ComponentPropsWithoutRef<\"div\"> {\n size?: \"small\" | \"medium\" | \"large\" | \"input\";\n color?: ThemeColor | \"custom\";\n children?: ReactNode;\n loading?: boolean;\n position?: CSSProperties[\"position\"];\n progression?: number;\n}\n\nconst sizeConfig = {\n small: \"[--h-button:1.5rem]\",\n medium: \"[--h-button:2rem]\",\n large: \"[--h-button:3rem]\",\n input: \"[--h-button:calc(var(--h-input)-2px)]\",\n};\n\nconst trackStyle: CSSProperties = {\n strokeLinecap: \"round\",\n strokeWidth: 2,\n};\nconst circleStyle: CSSProperties = {\n strokeLinecap: \"round\",\n strokeWidth: 2,\n\n /**\n * $total-length: 43.699; // total length of path, calculated by getTotalLength() in JS\n * $looping-percent: 40;\n * $looping-length: math.div($looping-percent * $total-length, 100) = 17.464;\n * stroke-dasharray: #{$looping-length * 1px}, #{($total-length - $looping-length) * 1px};\n */\n strokeDasharray: \"17.45px, 26.21px\",\n};\n\nexport function Loader({\n size = \"medium\",\n color = \"blue\",\n loading = true,\n progression = -1,\n className,\n position = \"relative\",\n children,\n ...rest\n}: Props) {\n const id = useId();\n\n const destPoint = {\n x: 7 * Math.sin((2 * Math.PI * progression) / 100),\n y: 7 - 7 * Math.cos((2 * Math.PI * progression) / 100),\n };\n\n return (\n <div\n data-color={color}\n className={clsx(\n \"inline-block h-(--h-button) w-(--h-button)\",\n position,\n sizeConfig[size],\n className,\n )}\n {...rest}\n >\n {loading && (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={clsx(\n \"inline-block h-(--h-button) w-(--h-button)\",\n color !== \"custom\" && \"text-custom-4\",\n )}\n viewBox=\"0 0 16 16\"\n >\n <defs>\n <circle id={id} cx=\"8\" cy=\"8\" r=\"7\" />\n </defs>\n <use href={`#${id}`} className=\"fill-none stroke-current opacity-25\" style={trackStyle} />\n {progression === -1 ? (\n <use\n href={`#${id}`}\n className=\"animate-loader-stroke fill-none stroke-current\"\n style={circleStyle}\n />\n ) : (\n <path\n d={`M 8,1 a 7,7 0 ${progression > 50 ? 1 : 0} 1 ${destPoint.x},${destPoint.y}`}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n )}\n </svg>\n )}\n {children && (\n <div className=\"absolute top-0 left-0 inline-flex h-(--h-button) w-(--h-button) items-center justify-center\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","import { CSSProperties, ComponentPropsWithoutRef } from \"react\";\nimport { ThemeColor } from \"../../types\";\nimport clsx from \"clsx\";\n\ninterface Props extends ComponentPropsWithoutRef<\"svg\"> {\n color?: ThemeColor | \"custom\";\n /**\n * Matches buttonVariants' rounded-2xl (1rem). Override for other shapes.\n */\n radius?: number;\n}\n\nconst width = 4;\n\nconst trackStyle: CSSProperties = {\n strokeLinecap: \"round\",\n strokeWidth: width,\n};\nconst rectStyle: CSSProperties = {\n strokeLinecap: \"round\",\n strokeWidth: width,\n // pathLength=100 normalizes the perimeter, so these percentages hold for any button size.\n strokeDasharray: \"40, 60\",\n};\n\nexport function RoundedRectLoader({ color = \"blue\", radius = 16, className, ...rest }: Props) {\n const rx = radius - 1;\n\n return (\n <svg\n data-color={color}\n className={clsx(\n \"pointer-events-none h-full w-full\",\n color !== \"custom\" && \"text-custom-4\",\n className,\n )}\n {...rest}\n >\n <rect\n x={width / 2}\n y={width / 2}\n width={`calc(100% - ${width}px)`}\n height={`calc(100% - ${width}px)`}\n rx={rx}\n pathLength={100}\n className=\"fill-none stroke-current opacity-25\"\n style={trackStyle}\n />\n <rect\n x={width / 2}\n y={width / 2}\n width={`calc(100% - ${width}px)`}\n height={`calc(100% - ${width}px)`}\n rx={rx}\n pathLength={100}\n className=\"animate-loader-rect-stroke fill-none stroke-current\"\n style={rectStyle}\n />\n </svg>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as Button } from "./Button-C953R2Mo.mjs";
1
+ import { t as Button } from "./Button-Dtp-UNzH.mjs";
2
2
  import { t as Dialog } from "./Dialog-CpSdL1-f.mjs";
3
3
  import { t as Scroll } from "./Scroll-B5yxurOQ.mjs";
4
4
  import { c } from "react/compiler-runtime";
@@ -416,4 +416,4 @@ function ModalFooter(t0) {
416
416
  //#endregion
417
417
  export { ModalContent as a, useModalContext as c, ModalTrigger as i, useModal as l, ModalFooter as n, Modal as o, ModalHeader as r, ModalContext as s, ModalDescription as t };
418
418
 
419
- //# sourceMappingURL=modal-Bs1iwE6V.mjs.map
419
+ //# sourceMappingURL=modal-OMEOCOF0.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"modal-Bs1iwE6V.mjs","names":["Dispatch","SetStateAction","useMemo","useState","ModalOptions","useClick","useDismiss","useFloating","UseFloatingReturn","useInteractions","UseInteractionsReturn","useRole","ThemeBaseColor","UseModalReturn","open","setOpen","color","labelId","descriptionId","setLabelId","setDescriptionId","useModal","t0","$","_c","t1","undefined","initialOpen","t2","controlledOpen","onOpen","setControlledOpen","uncontrolledOpen","setUncontrolledOpen","isUncontrolled","t3","onOpenChange","data","context","click","dismiss","role","t4","interactions","t5","createContext","useContext","useModal","ContextType","ReturnType","ModalContext","useModalContext","context","Error","ReactNode","ModalOptions","useModal","ModalContext","Props","children","Modal","t0","$","_c","options","modal","t1","FloatingFocusManager","FloatingOverlay","FloatingPortal","useMergeRefs","ComponentProps","RefObject","useModalContext","clsx","Dialog","Props","ref","HTMLInputElement","zClassName","ModalContent","t0","$","_c","style","className","children","props","context","floatingContext","t1","refs","setFloating","mergedRef","open","T0","T1","t2","t3","t4","t5","_temp","T2","T3","t6","color","t7","t8","labelId","t9","descriptionId","t10","getFloatingProps","t11","t12","t13","t14","t15","event","stopPropagation","cloneElement","isValidElement","useMergeRefs","Button","ButtonProps","useModalContext","Props","asChild","ModalTrigger","children","size","ref","props","context","childrenRef","mergedRefs","refs","setReference","getReferenceProps","open","ComponentProps","useModalContext","clsx","Button","Scroll","ModalHeaderProps","closeButton","ModalHeader","t0","$","_c","children","className","props","t1","undefined","setOpen","t2","t3","t4","t5","t6","ModalDescriptionProps","scrollable","ModalDescription","ModalFooter"],"sources":["../src/components/modal/useModal.ts","../src/components/modal/useModalContext.ts","../src/components/modal/Modal.tsx","../src/components/modal/ModalContent.tsx","../src/components/modal/ModalTrigger.tsx","../src/components/modal/Components.tsx"],"sourcesContent":["import { Dispatch, SetStateAction, useMemo, useState } from \"react\";\nimport { ModalOptions } from \"./interface\";\nimport {\n useClick,\n useDismiss,\n useFloating,\n UseFloatingReturn,\n useInteractions,\n UseInteractionsReturn,\n useRole,\n} from \"@floating-ui/react\";\nimport { ThemeBaseColor } from \"../../types\";\n\nexport type UseModalReturn = {\n open: boolean;\n setOpen: Dispatch<SetStateAction<boolean>>;\n color?: ThemeBaseColor;\n labelId?: string;\n descriptionId?: string;\n setLabelId: Dispatch<SetStateAction<string | undefined>>;\n setDescriptionId: Dispatch<SetStateAction<string | undefined>>;\n} & UseInteractionsReturn &\n UseFloatingReturn;\n\nexport function useModal({\n initialOpen = false,\n open: controlledOpen,\n onOpen: setControlledOpen,\n color,\n}: ModalOptions = {}): UseModalReturn {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(initialOpen);\n const [labelId, setLabelId] = useState<string | undefined>();\n const [descriptionId, setDescriptionId] = useState<string | undefined>();\n\n const isUncontrolled = controlledOpen === null || controlledOpen === undefined;\n const open = isUncontrolled ? uncontrolledOpen : controlledOpen;\n const setOpen = isUncontrolled\n ? setUncontrolledOpen\n : (setControlledOpen as Dispatch<SetStateAction<boolean>>);\n\n const data = useFloating({\n open,\n onOpenChange: setOpen,\n });\n\n const { context } = data;\n\n const click = useClick(context);\n const dismiss = useDismiss(context);\n const role = useRole(context);\n\n const interactions = useInteractions([click, dismiss, role]);\n\n return useMemo(\n () => ({\n open,\n setOpen,\n ...interactions,\n ...data,\n color,\n labelId,\n descriptionId,\n setLabelId,\n setDescriptionId,\n }),\n [open, setOpen, interactions, data, color, labelId, descriptionId],\n );\n}\n","import { createContext, useContext } from \"react\";\nimport { useModal } from \"./useModal\";\n\ntype ContextType = ReturnType<typeof useModal> | null;\n\nexport const ModalContext = createContext<ContextType>(null);\n\nexport function useModalContext() {\n const context = useContext(ModalContext);\n\n if (context === null) {\n throw new Error(\"Modal components must be wrapped in <Modal />\");\n }\n\n return context;\n}\n","import { ReactNode } from \"react\";\nimport { ModalOptions } from \"./interface\";\nimport { useModal } from \"./useModal\";\nimport { ModalContext } from \"./useModalContext\";\n\ninterface Props extends ModalOptions {\n children?: ReactNode;\n}\n\nexport function Modal({ children, ...options }: Props) {\n const modal = useModal(options);\n return <ModalContext.Provider value={modal}>{children}</ModalContext.Provider>;\n}\n","import {\n FloatingFocusManager,\n FloatingOverlay,\n FloatingPortal,\n useMergeRefs,\n} from \"@floating-ui/react\";\nimport { ComponentProps, RefObject } from \"react\";\nimport { useModalContext } from \"./useModalContext\";\nimport clsx from \"clsx\";\nimport { Dialog } from \"../dialog/Dialog\";\n\ninterface Props extends ComponentProps<\"div\"> {\n ref?: RefObject<HTMLInputElement>;\n zClassName?: string;\n}\n\nexport function ModalContent({ zClassName, style, className, children, ref, ...props }: Props) {\n const context = useModalContext();\n const floatingContext = context.context;\n\n const mergedRef = useMergeRefs([context.refs.setFloating, ref]);\n if (!context.open) {\n return null;\n }\n\n return (\n <FloatingPortal>\n <FloatingOverlay\n className={clsx(\n \"flex-center bg-gray-7/40 motion-safe:animate-fade-in-opacity\",\n zClassName ?? \"z-modal-overlay\",\n )}\n lockScroll\n onSubmit={(event) => event.stopPropagation()}\n >\n <FloatingFocusManager context={floatingContext}>\n <Dialog\n color={context.color}\n className={clsx(\"motion-safe:animate-fade-in z-modal mx-4\", className)}\n style={style}\n aria-labelledby={context.labelId}\n aria-describedby={context.descriptionId}\n {...context.getFloatingProps(props)}\n >\n <div ref={mergedRef}>{children}</div>\n </Dialog>\n </FloatingFocusManager>\n </FloatingOverlay>\n </FloatingPortal>\n );\n}\n","import { cloneElement, isValidElement } from \"react\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport { Button, ButtonProps } from \"../button/Button\";\nimport { useModalContext } from \"./useModalContext\";\n\ninterface Props extends ButtonProps {\n asChild?: boolean;\n}\n\nexport function ModalTrigger({ children, asChild = false, size, ref, ...props }: Props) {\n const context = useModalContext();\n const childrenRef = (children as any).ref;\n\n const mergedRefs = useMergeRefs([context.refs.setReference, ref, childrenRef]);\n\n if (asChild && isValidElement(children)) {\n return cloneElement(\n children,\n context.getReferenceProps({\n ref,\n ...props,\n ...(children.props ?? {}),\n // @ts-ignore\n \"data-state\": context.open ? \"open\" : \"closed\",\n }),\n );\n }\n\n return (\n <Button\n type=\"button\"\n ref={mergedRefs as any}\n size={size}\n data-state={context.open ? \"open\" : \"closed\"}\n {...context.getReferenceProps(props)}\n >\n {children}\n </Button>\n );\n}\n","import { ComponentProps } from \"react\";\nimport { useModalContext } from \"./useModalContext\";\nimport clsx from \"clsx\";\nimport { Button } from \"../button/Button\";\nimport { Scroll } from \"../scroll/Scroll\";\n\ninterface ModalHeaderProps extends ComponentProps<\"h2\"> {\n closeButton?: boolean;\n}\nexport function ModalHeader({\n children,\n className,\n closeButton = true,\n ...props\n}: ModalHeaderProps) {\n const { setOpen } = useModalContext();\n\n return (\n <>\n {closeButton && (\n <div className=\"float-right p-1\">\n <Button icon variant=\"text\" color=\"gray\" onClick={() => setOpen(false)}>\n <i className=\"fe-cancel\"></i>\n </Button>\n </div>\n )}\n <header className={clsx(\"flex items-center p-2\", className)} {...props}>\n <h4 className=\"leading-6 font-semibold\">{children}</h4>\n </header>\n </>\n );\n}\n\ninterface ModalDescriptionProps extends ComponentProps<\"div\"> {\n scrollable?: boolean;\n}\nexport function ModalDescription({\n children,\n className,\n scrollable = false,\n ...props\n}: ModalDescriptionProps) {\n if (!scrollable) {\n return (\n <div className={clsx(\"p-2 pt-0 overflow-hidden\", className)} {...props}>\n {children}\n </div>\n );\n }\n return (\n <Scroll className={clsx(\"flex flex-col\", className)} {...props}>\n {children}\n </Scroll>\n );\n}\n\nexport function ModalFooter({ children, className, ...props }: ComponentProps<\"footer\">) {\n return (\n <footer className={clsx(\"relative z-10 p-2\", className)} {...props}>\n {children}\n </footer>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"modal-OMEOCOF0.mjs","names":["Dispatch","SetStateAction","useMemo","useState","ModalOptions","useClick","useDismiss","useFloating","UseFloatingReturn","useInteractions","UseInteractionsReturn","useRole","ThemeBaseColor","UseModalReturn","open","setOpen","color","labelId","descriptionId","setLabelId","setDescriptionId","useModal","t0","$","_c","t1","undefined","initialOpen","t2","controlledOpen","onOpen","setControlledOpen","uncontrolledOpen","setUncontrolledOpen","isUncontrolled","t3","onOpenChange","data","context","click","dismiss","role","t4","interactions","t5","createContext","useContext","useModal","ContextType","ReturnType","ModalContext","useModalContext","context","Error","ReactNode","ModalOptions","useModal","ModalContext","Props","children","Modal","t0","$","_c","options","modal","t1","FloatingFocusManager","FloatingOverlay","FloatingPortal","useMergeRefs","ComponentProps","RefObject","useModalContext","clsx","Dialog","Props","ref","HTMLInputElement","zClassName","ModalContent","t0","$","_c","style","className","children","props","context","floatingContext","t1","refs","setFloating","mergedRef","open","T0","T1","t2","t3","t4","t5","_temp","T2","T3","t6","color","t7","t8","labelId","t9","descriptionId","t10","getFloatingProps","t11","t12","t13","t14","t15","event","stopPropagation","cloneElement","isValidElement","useMergeRefs","Button","ButtonProps","useModalContext","Props","asChild","ModalTrigger","children","size","ref","props","context","childrenRef","mergedRefs","refs","setReference","getReferenceProps","open","ComponentProps","useModalContext","clsx","Button","Scroll","ModalHeaderProps","closeButton","ModalHeader","t0","$","_c","children","className","props","t1","undefined","setOpen","t2","t3","t4","t5","t6","ModalDescriptionProps","scrollable","ModalDescription","ModalFooter"],"sources":["../src/components/modal/useModal.ts","../src/components/modal/useModalContext.ts","../src/components/modal/Modal.tsx","../src/components/modal/ModalContent.tsx","../src/components/modal/ModalTrigger.tsx","../src/components/modal/Components.tsx"],"sourcesContent":["import { Dispatch, SetStateAction, useMemo, useState } from \"react\";\nimport { ModalOptions } from \"./interface\";\nimport {\n useClick,\n useDismiss,\n useFloating,\n UseFloatingReturn,\n useInteractions,\n UseInteractionsReturn,\n useRole,\n} from \"@floating-ui/react\";\nimport { ThemeBaseColor } from \"../../types\";\n\nexport type UseModalReturn = {\n open: boolean;\n setOpen: Dispatch<SetStateAction<boolean>>;\n color?: ThemeBaseColor;\n labelId?: string;\n descriptionId?: string;\n setLabelId: Dispatch<SetStateAction<string | undefined>>;\n setDescriptionId: Dispatch<SetStateAction<string | undefined>>;\n} & UseInteractionsReturn &\n UseFloatingReturn;\n\nexport function useModal({\n initialOpen = false,\n open: controlledOpen,\n onOpen: setControlledOpen,\n color,\n}: ModalOptions = {}): UseModalReturn {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(initialOpen);\n const [labelId, setLabelId] = useState<string | undefined>();\n const [descriptionId, setDescriptionId] = useState<string | undefined>();\n\n const isUncontrolled = controlledOpen === null || controlledOpen === undefined;\n const open = isUncontrolled ? uncontrolledOpen : controlledOpen;\n const setOpen = isUncontrolled\n ? setUncontrolledOpen\n : (setControlledOpen as Dispatch<SetStateAction<boolean>>);\n\n const data = useFloating({\n open,\n onOpenChange: setOpen,\n });\n\n const { context } = data;\n\n const click = useClick(context);\n const dismiss = useDismiss(context);\n const role = useRole(context);\n\n const interactions = useInteractions([click, dismiss, role]);\n\n return useMemo(\n () => ({\n open,\n setOpen,\n ...interactions,\n ...data,\n color,\n labelId,\n descriptionId,\n setLabelId,\n setDescriptionId,\n }),\n [open, setOpen, interactions, data, color, labelId, descriptionId],\n );\n}\n","import { createContext, useContext } from \"react\";\nimport { useModal } from \"./useModal\";\n\ntype ContextType = ReturnType<typeof useModal> | null;\n\nexport const ModalContext = createContext<ContextType>(null);\n\nexport function useModalContext() {\n const context = useContext(ModalContext);\n\n if (context === null) {\n throw new Error(\"Modal components must be wrapped in <Modal />\");\n }\n\n return context;\n}\n","import { ReactNode } from \"react\";\nimport { ModalOptions } from \"./interface\";\nimport { useModal } from \"./useModal\";\nimport { ModalContext } from \"./useModalContext\";\n\ninterface Props extends ModalOptions {\n children?: ReactNode;\n}\n\nexport function Modal({ children, ...options }: Props) {\n const modal = useModal(options);\n return <ModalContext.Provider value={modal}>{children}</ModalContext.Provider>;\n}\n","import {\n FloatingFocusManager,\n FloatingOverlay,\n FloatingPortal,\n useMergeRefs,\n} from \"@floating-ui/react\";\nimport { ComponentProps, RefObject } from \"react\";\nimport { useModalContext } from \"./useModalContext\";\nimport clsx from \"clsx\";\nimport { Dialog } from \"../dialog/Dialog\";\n\ninterface Props extends ComponentProps<\"div\"> {\n ref?: RefObject<HTMLInputElement>;\n zClassName?: string;\n}\n\nexport function ModalContent({ zClassName, style, className, children, ref, ...props }: Props) {\n const context = useModalContext();\n const floatingContext = context.context;\n\n const mergedRef = useMergeRefs([context.refs.setFloating, ref]);\n if (!context.open) {\n return null;\n }\n\n return (\n <FloatingPortal>\n <FloatingOverlay\n className={clsx(\n \"flex-center bg-gray-7/40 motion-safe:animate-fade-in-opacity\",\n zClassName ?? \"z-modal-overlay\",\n )}\n lockScroll\n onSubmit={(event) => event.stopPropagation()}\n >\n <FloatingFocusManager context={floatingContext}>\n <Dialog\n color={context.color}\n className={clsx(\"motion-safe:animate-fade-in z-modal mx-4\", className)}\n style={style}\n aria-labelledby={context.labelId}\n aria-describedby={context.descriptionId}\n {...context.getFloatingProps(props)}\n >\n <div ref={mergedRef}>{children}</div>\n </Dialog>\n </FloatingFocusManager>\n </FloatingOverlay>\n </FloatingPortal>\n );\n}\n","import { cloneElement, isValidElement } from \"react\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport { Button, ButtonProps } from \"../button/Button\";\nimport { useModalContext } from \"./useModalContext\";\n\ninterface Props extends ButtonProps {\n asChild?: boolean;\n}\n\nexport function ModalTrigger({ children, asChild = false, size, ref, ...props }: Props) {\n const context = useModalContext();\n const childrenRef = (children as any).ref;\n\n const mergedRefs = useMergeRefs([context.refs.setReference, ref, childrenRef]);\n\n if (asChild && isValidElement(children)) {\n return cloneElement(\n children,\n context.getReferenceProps({\n ref,\n ...props,\n ...(children.props ?? {}),\n // @ts-ignore\n \"data-state\": context.open ? \"open\" : \"closed\",\n }),\n );\n }\n\n return (\n <Button\n type=\"button\"\n ref={mergedRefs as any}\n size={size}\n data-state={context.open ? \"open\" : \"closed\"}\n {...context.getReferenceProps(props)}\n >\n {children}\n </Button>\n );\n}\n","import { ComponentProps } from \"react\";\nimport { useModalContext } from \"./useModalContext\";\nimport clsx from \"clsx\";\nimport { Button } from \"../button/Button\";\nimport { Scroll } from \"../scroll/Scroll\";\n\ninterface ModalHeaderProps extends ComponentProps<\"h2\"> {\n closeButton?: boolean;\n}\nexport function ModalHeader({\n children,\n className,\n closeButton = true,\n ...props\n}: ModalHeaderProps) {\n const { setOpen } = useModalContext();\n\n return (\n <>\n {closeButton && (\n <div className=\"float-right p-1\">\n <Button icon variant=\"text\" color=\"gray\" onClick={() => setOpen(false)}>\n <i className=\"fe-cancel\"></i>\n </Button>\n </div>\n )}\n <header className={clsx(\"flex items-center p-2\", className)} {...props}>\n <h4 className=\"leading-6 font-semibold\">{children}</h4>\n </header>\n </>\n );\n}\n\ninterface ModalDescriptionProps extends ComponentProps<\"div\"> {\n scrollable?: boolean;\n}\nexport function ModalDescription({\n children,\n className,\n scrollable = false,\n ...props\n}: ModalDescriptionProps) {\n if (!scrollable) {\n return (\n <div className={clsx(\"p-2 pt-0 overflow-hidden\", className)} {...props}>\n {children}\n </div>\n );\n }\n return (\n <Scroll className={clsx(\"flex flex-col\", className)} {...props}>\n {children}\n </Scroll>\n );\n}\n\nexport function ModalFooter({ children, className, ...props }: ComponentProps<\"footer\">) {\n return (\n <footer className={clsx(\"relative z-10 p-2\", className)} {...props}>\n {children}\n </footer>\n );\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { slugify } from "./lib/index.mjs";
2
- import { t as Button } from "./Button-C953R2Mo.mjs";
3
- import "./button-CcpvNjuD.mjs";
2
+ import { t as Button } from "./Button-Dtp-UNzH.mjs";
3
+ import "./button-CqXVbdMx.mjs";
4
4
  import { t as Input } from "./Input-BbXXGsv_.mjs";
5
5
  import { t as Field } from "./Field-DZmC5a1D.mjs";
6
6
  import { c } from "react/compiler-runtime";
@@ -327,4 +327,4 @@ function SlugField({ name, id: forcedId, ...rest }) {
327
327
  //#endregion
328
328
  export { PasswordField as n, TextField as r, SlugField as t };
329
329
 
330
- //# sourceMappingURL=text-Bilm-ddL.mjs.map
330
+ //# sourceMappingURL=text-Cm7qVcmx.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-Bilm-ddL.mjs","names":["FieldName","useField","Field","FieldProps","Input","InputProps","Props","Omit","Pick","name","TextField","t0","$","_c","color","disabled","forcedId","inputClassName","placeholder","prefix","prefixClassName","readOnly","rest","size","suffix","suffixClassName","type","variant","id","field","t1","defaultValue","t2","errors","getPasswordStrength","password","score","length","test","Math","min","gradientVariantFromScore","getFieldValue","useField","useFormData","FieldName","Field","FieldProps","Input","Button","useState","getPasswordStrength","gradientVariantFromScore","clsx","Props","Omit","name","showScore","PasswordField","t0","$","_c","forcedId","rest","t1","id","undefined","field","showPassword","setShowPassword","t2","formData","type","value","formId","T0","T1","t10","t11","t12","t3","t4","t5","t6","t7","t8","t9","defaultValue","errors","passwordScore","t13","Symbol","for","_temp","t14","width","s","useField","useControl","FieldName","Field","FieldProps","Input","slugify","ChangeEvent","Props","Omit","name","SlugField","id","forcedId","rest","field","control","defaultValue","handleChange","e","HTMLInputElement","change","target","value","handleBlur","blur","register","errors"],"sources":["../src/components/fields/text/TextField.tsx","../src/lib/pass-checker.ts","../src/components/fields/text/PasswordField.tsx","../src/components/fields/text/SlugField.tsx"],"sourcesContent":["import { FieldName, useField } from \"@conform-to/react/future\";\nimport { Field, type FieldProps } from \"../field/Field\";\nimport { Input, type InputProps } from \"./Input\";\n\ntype Props = Omit<FieldProps, \"children\" | \"group\"> &\n Pick<\n InputProps,\n | \"type\"\n | \"placeholder\"\n | \"prefix\"\n | \"suffix\"\n | \"variant\"\n | \"color\"\n | \"size\"\n | \"disabled\"\n | \"readOnly\"\n | \"inputClassName\"\n | \"prefixClassName\"\n | \"suffixClassName\"\n > & {\n name: FieldName<string | number | null | undefined>;\n };\n\nexport function TextField({\n name,\n type,\n placeholder,\n prefix,\n suffix,\n variant,\n color,\n size,\n disabled,\n readOnly,\n inputClassName,\n prefixClassName,\n suffixClassName,\n id: forcedId,\n ...rest\n}: Props) {\n const field = useField(name);\n const id = forcedId ?? field.id;\n\n return (\n <Field id={id} errors={field.errors} data-testid={field.name} {...rest}>\n <Input\n name={field.name}\n defaultValue={field.defaultValue}\n type={type}\n placeholder={placeholder}\n prefix={prefix}\n suffix={suffix}\n variant={variant}\n color={color}\n size={size}\n disabled={disabled}\n readOnly={readOnly}\n inputClassName={inputClassName}\n prefixClassName={prefixClassName}\n suffixClassName={suffixClassName}\n />\n </Field>\n );\n}\n","export function getPasswordStrength(password: string = \"\"): number {\n let score = 0;\n const length = password.length;\n\n if (length === 0) {\n return 0;\n }\n\n if (length >= 8) score++; // Baseline minimale\n if (length >= 12) score++; // Longueur robuste\n if (/[a-z]/.test(password) && /[A-Z]/.test(password)) score++; // Majuscules + minuscules\n if (/\\d/.test(password)) score++; // Chiffres\n if (/[^A-Za-z0-9]/.test(password)) score++; // Caractères spéciaux\n\n // Ajustements pour éviter des scores trop élevés avec de faibles critères\n if (length < 8) return 1; // Trop court = très faible sécurité\n if (score === 5 && length < 10) score--; // Évite un score max avec un mot de passe trop court\n\n return Math.min(score, 5);\n}\n\nexport function gradientVariantFromScore(score: number) {\n if (score <= 1) {\n return \"from-red-5 to-red-3\";\n } else if (score <= 2) {\n return \"from-red-4 to-orange-3\";\n } else if (score <= 3) {\n return \"from-red-3 to-green-3\";\n } else if (score <= 4) {\n return \"from-orange-3 to-green-4\";\n } else {\n return \"from-green-4 to-green-4\";\n }\n}\n","import { getFieldValue, useField, useFormData, type FieldName } from \"@conform-to/react/future\";\nimport { Field, type FieldProps } from \"../field/Field\";\nimport { Input } from \"./Input\";\nimport { Button } from \"../../button\";\nimport { useState } from \"react\";\nimport { getPasswordStrength, gradientVariantFromScore } from \"../../../lib/pass-checker\";\nimport clsx from \"clsx\";\n\ninterface Props extends Omit<FieldProps, \"errors\" | \"children\" | \"group\"> {\n name: FieldName<string | undefined | null>;\n showScore?: boolean;\n}\n\nexport function PasswordField({ name, showScore = false, id: forcedId, ...rest }: Props) {\n const field = useField(name);\n const id = forcedId ?? field.id;\n const [showPassword, setShowPassword] = useState(false);\n\n const value = useFormData(field.formId, (formData) =>\n getFieldValue(formData, field.name, { type: \"string\" }),\n );\n\n const passwordScore = getPasswordStrength(value);\n\n return (\n <Field id={id} errors={field.errors} data-testid={field.name} {...rest}>\n <Input\n className=\"relative overflow-hidden\"\n suffix={\n <Button\n size=\"input\"\n type=\"button\"\n withRipple={true}\n icon\n variant=\"ghost\"\n color=\"gray\"\n onClick={() => setShowPassword((s) => !s)}\n >\n <i className={showPassword ? \"fe-eye\" : \"fe-eye-closed\"}></i>\n </Button>\n }\n defaultValue={field.defaultValue}\n name={field.name}\n type={showPassword ? \"text\" : \"password\"}\n >\n {showScore && (\n <div\n className=\"absolute bottom-0 left-0 h-[3px] overflow-hidden\"\n style={{ width: `${passwordScore * 20}%` }}\n >\n <div\n className={clsx(\n \"absolute right-0 -bottom-px left-0 h-[3px] rounded-xs bg-linear-to-r\",\n gradientVariantFromScore(passwordScore),\n )}\n ></div>\n </div>\n )}\n </Input>\n </Field>\n );\n}\n","import { useField, useControl, type FieldName } from \"@conform-to/react/future\";\nimport { Field, type FieldProps } from \"../field/Field\";\nimport { Input } from \"./Input\";\nimport { slugify } from \"../../../lib/strUtil\";\nimport type { ChangeEvent } from \"react\";\n\ninterface Props extends Omit<FieldProps, \"errors\" | \"children\" | \"group\"> {\n name: FieldName<string | null | undefined>;\n}\n\nexport function SlugField({ name, id: forcedId, ...rest }: Props) {\n const field = useField(name);\n const id = forcedId ?? field.id;\n const control = useControl({\n defaultValue: field.defaultValue,\n });\n\n function handleChange(e: ChangeEvent<HTMLInputElement>) {\n control.change(slugify(e.target.value, false, false));\n }\n\n function handleBlur() {\n if (control.value) {\n control.change(slugify(control.value, false));\n }\n control.blur();\n }\n\n return (\n <>\n <input\n type=\"text\"\n hidden\n name={field.name}\n ref={control.register}\n defaultValue={field.defaultValue}\n />\n <Field id={id} errors={field.errors} data-testid={field.name} {...rest}>\n <Input value={control.value ?? \"\"} onBlur={handleBlur} onChange={handleChange} />\n </Field>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"text-Cm7qVcmx.mjs","names":["FieldName","useField","Field","FieldProps","Input","InputProps","Props","Omit","Pick","name","TextField","t0","$","_c","color","disabled","forcedId","inputClassName","placeholder","prefix","prefixClassName","readOnly","rest","size","suffix","suffixClassName","type","variant","id","field","t1","defaultValue","t2","errors","getPasswordStrength","password","score","length","test","Math","min","gradientVariantFromScore","getFieldValue","useField","useFormData","FieldName","Field","FieldProps","Input","Button","useState","getPasswordStrength","gradientVariantFromScore","clsx","Props","Omit","name","showScore","PasswordField","t0","$","_c","forcedId","rest","t1","id","undefined","field","showPassword","setShowPassword","t2","formData","type","value","formId","T0","T1","t10","t11","t12","t3","t4","t5","t6","t7","t8","t9","defaultValue","errors","passwordScore","t13","Symbol","for","_temp","t14","width","s","useField","useControl","FieldName","Field","FieldProps","Input","slugify","ChangeEvent","Props","Omit","name","SlugField","id","forcedId","rest","field","control","defaultValue","handleChange","e","HTMLInputElement","change","target","value","handleBlur","blur","register","errors"],"sources":["../src/components/fields/text/TextField.tsx","../src/lib/pass-checker.ts","../src/components/fields/text/PasswordField.tsx","../src/components/fields/text/SlugField.tsx"],"sourcesContent":["import { FieldName, useField } from \"@conform-to/react/future\";\nimport { Field, type FieldProps } from \"../field/Field\";\nimport { Input, type InputProps } from \"./Input\";\n\ntype Props = Omit<FieldProps, \"children\" | \"group\"> &\n Pick<\n InputProps,\n | \"type\"\n | \"placeholder\"\n | \"prefix\"\n | \"suffix\"\n | \"variant\"\n | \"color\"\n | \"size\"\n | \"disabled\"\n | \"readOnly\"\n | \"inputClassName\"\n | \"prefixClassName\"\n | \"suffixClassName\"\n > & {\n name: FieldName<string | number | null | undefined>;\n };\n\nexport function TextField({\n name,\n type,\n placeholder,\n prefix,\n suffix,\n variant,\n color,\n size,\n disabled,\n readOnly,\n inputClassName,\n prefixClassName,\n suffixClassName,\n id: forcedId,\n ...rest\n}: Props) {\n const field = useField(name);\n const id = forcedId ?? field.id;\n\n return (\n <Field id={id} errors={field.errors} data-testid={field.name} {...rest}>\n <Input\n name={field.name}\n defaultValue={field.defaultValue}\n type={type}\n placeholder={placeholder}\n prefix={prefix}\n suffix={suffix}\n variant={variant}\n color={color}\n size={size}\n disabled={disabled}\n readOnly={readOnly}\n inputClassName={inputClassName}\n prefixClassName={prefixClassName}\n suffixClassName={suffixClassName}\n />\n </Field>\n );\n}\n","export function getPasswordStrength(password: string = \"\"): number {\n let score = 0;\n const length = password.length;\n\n if (length === 0) {\n return 0;\n }\n\n if (length >= 8) score++; // Baseline minimale\n if (length >= 12) score++; // Longueur robuste\n if (/[a-z]/.test(password) && /[A-Z]/.test(password)) score++; // Majuscules + minuscules\n if (/\\d/.test(password)) score++; // Chiffres\n if (/[^A-Za-z0-9]/.test(password)) score++; // Caractères spéciaux\n\n // Ajustements pour éviter des scores trop élevés avec de faibles critères\n if (length < 8) return 1; // Trop court = très faible sécurité\n if (score === 5 && length < 10) score--; // Évite un score max avec un mot de passe trop court\n\n return Math.min(score, 5);\n}\n\nexport function gradientVariantFromScore(score: number) {\n if (score <= 1) {\n return \"from-red-5 to-red-3\";\n } else if (score <= 2) {\n return \"from-red-4 to-orange-3\";\n } else if (score <= 3) {\n return \"from-red-3 to-green-3\";\n } else if (score <= 4) {\n return \"from-orange-3 to-green-4\";\n } else {\n return \"from-green-4 to-green-4\";\n }\n}\n","import { getFieldValue, useField, useFormData, type FieldName } from \"@conform-to/react/future\";\nimport { Field, type FieldProps } from \"../field/Field\";\nimport { Input } from \"./Input\";\nimport { Button } from \"../../button\";\nimport { useState } from \"react\";\nimport { getPasswordStrength, gradientVariantFromScore } from \"../../../lib/pass-checker\";\nimport clsx from \"clsx\";\n\ninterface Props extends Omit<FieldProps, \"errors\" | \"children\" | \"group\"> {\n name: FieldName<string | undefined | null>;\n showScore?: boolean;\n}\n\nexport function PasswordField({ name, showScore = false, id: forcedId, ...rest }: Props) {\n const field = useField(name);\n const id = forcedId ?? field.id;\n const [showPassword, setShowPassword] = useState(false);\n\n const value = useFormData(field.formId, (formData) =>\n getFieldValue(formData, field.name, { type: \"string\" }),\n );\n\n const passwordScore = getPasswordStrength(value);\n\n return (\n <Field id={id} errors={field.errors} data-testid={field.name} {...rest}>\n <Input\n className=\"relative overflow-hidden\"\n suffix={\n <Button\n size=\"input\"\n type=\"button\"\n withRipple={true}\n icon\n variant=\"ghost\"\n color=\"gray\"\n onClick={() => setShowPassword((s) => !s)}\n >\n <i className={showPassword ? \"fe-eye\" : \"fe-eye-closed\"}></i>\n </Button>\n }\n defaultValue={field.defaultValue}\n name={field.name}\n type={showPassword ? \"text\" : \"password\"}\n >\n {showScore && (\n <div\n className=\"absolute bottom-0 left-0 h-[3px] overflow-hidden\"\n style={{ width: `${passwordScore * 20}%` }}\n >\n <div\n className={clsx(\n \"absolute right-0 -bottom-px left-0 h-[3px] rounded-xs bg-linear-to-r\",\n gradientVariantFromScore(passwordScore),\n )}\n ></div>\n </div>\n )}\n </Input>\n </Field>\n );\n}\n","import { useField, useControl, type FieldName } from \"@conform-to/react/future\";\nimport { Field, type FieldProps } from \"../field/Field\";\nimport { Input } from \"./Input\";\nimport { slugify } from \"../../../lib/strUtil\";\nimport type { ChangeEvent } from \"react\";\n\ninterface Props extends Omit<FieldProps, \"errors\" | \"children\" | \"group\"> {\n name: FieldName<string | null | undefined>;\n}\n\nexport function SlugField({ name, id: forcedId, ...rest }: Props) {\n const field = useField(name);\n const id = forcedId ?? field.id;\n const control = useControl({\n defaultValue: field.defaultValue,\n });\n\n function handleChange(e: ChangeEvent<HTMLInputElement>) {\n control.change(slugify(e.target.value, false, false));\n }\n\n function handleBlur() {\n if (control.value) {\n control.change(slugify(control.value, false));\n }\n control.blur();\n }\n\n return (\n <>\n <input\n type=\"text\"\n hidden\n name={field.name}\n ref={control.register}\n defaultValue={field.defaultValue}\n />\n <Field id={id} errors={field.errors} data-testid={field.name} {...rest}>\n <Input value={control.value ?? \"\"} onBlur={handleBlur} onChange={handleChange} />\n </Field>\n </>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pentatrion-design",
3
- "version": "1.2.9",
3
+ "version": "1.2.10",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "Hugues Tavernier",
@@ -92,7 +92,15 @@ export const Context = () => {
92
92
  <div className="flex items-center gap-2">
93
93
  <Button disabled={true}>disabled</Button>
94
94
  <Button loading={false}>isLoading false</Button>
95
- <Button loading={true}>isLoading true</Button>
95
+ <Button loading={true} size="small">
96
+ isLoading true
97
+ </Button>
98
+ <Button loading={true} size="medium" color="gray">
99
+ isLoading true
100
+ </Button>
101
+ <Button loading={true} size="large" color="gray-alpha">
102
+ isLoading true
103
+ </Button>
96
104
  </div>
97
105
  <h3 className="sb-h3">Width</h3>
98
106
  <div className="grid w-lg grid-cols-2 gap-2">
@@ -1,6 +1,6 @@
1
1
  import { ComponentProps, RefObject, useImperativeHandle, useRef } from "react";
2
2
  import clsx from "clsx";
3
- import { Loader } from "../loader";
3
+ import { Loader, RoundedRectLoader } from "../loader";
4
4
  import { useRipple } from "../../hooks";
5
5
  import { Slot } from "../slot";
6
6
  import { cva } from "class-variance-authority";
@@ -147,14 +147,13 @@ export function Button({
147
147
  icon: width === "custom" && !icon ? "custom" : icon,
148
148
  }),
149
149
  className,
150
- loading && !icon && "text-transparent",
151
150
  )}
152
151
  data-color={color}
153
152
  data-variant={variant}
154
153
  aria-checked={selected}
155
154
  suppressHydrationWarning
156
155
  aria-busy={loading}
157
- {...(disabled ? { disabled } : {})}
156
+ {...(disabled || loading ? { disabled } : {})}
158
157
  {...props}
159
158
  >
160
159
  {asChild ? (
@@ -163,13 +162,16 @@ export function Button({
163
162
  <>
164
163
  {/* {!notClickable && withRipple && ripples} */}
165
164
  {children}
166
- {loading && (
167
- <Loader
168
- color={loaderColor(color)}
169
- className={clsx("top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2")}
170
- position="absolute"
171
- />
172
- )}
165
+ {loading &&
166
+ (icon ? (
167
+ <Loader
168
+ color={loaderColor(color)}
169
+ className={clsx("top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2")}
170
+ position="absolute"
171
+ />
172
+ ) : (
173
+ <RoundedRectLoader color={loaderColor(color)} className="absolute inset-0" />
174
+ ))}
173
175
  </>
174
176
  )}
175
177
  </Comp>
@@ -0,0 +1,61 @@
1
+ import { CSSProperties, ComponentPropsWithoutRef } from "react";
2
+ import { ThemeColor } from "../../types";
3
+ import clsx from "clsx";
4
+
5
+ interface Props extends ComponentPropsWithoutRef<"svg"> {
6
+ color?: ThemeColor | "custom";
7
+ /**
8
+ * Matches buttonVariants' rounded-2xl (1rem). Override for other shapes.
9
+ */
10
+ radius?: number;
11
+ }
12
+
13
+ const width = 4;
14
+
15
+ const trackStyle: CSSProperties = {
16
+ strokeLinecap: "round",
17
+ strokeWidth: width,
18
+ };
19
+ const rectStyle: CSSProperties = {
20
+ strokeLinecap: "round",
21
+ strokeWidth: width,
22
+ // pathLength=100 normalizes the perimeter, so these percentages hold for any button size.
23
+ strokeDasharray: "40, 60",
24
+ };
25
+
26
+ export function RoundedRectLoader({ color = "blue", radius = 16, className, ...rest }: Props) {
27
+ const rx = radius - 1;
28
+
29
+ return (
30
+ <svg
31
+ data-color={color}
32
+ className={clsx(
33
+ "pointer-events-none h-full w-full",
34
+ color !== "custom" && "text-custom-4",
35
+ className,
36
+ )}
37
+ {...rest}
38
+ >
39
+ <rect
40
+ x={width / 2}
41
+ y={width / 2}
42
+ width={`calc(100% - ${width}px)`}
43
+ height={`calc(100% - ${width}px)`}
44
+ rx={rx}
45
+ pathLength={100}
46
+ className="fill-none stroke-current opacity-25"
47
+ style={trackStyle}
48
+ />
49
+ <rect
50
+ x={width / 2}
51
+ y={width / 2}
52
+ width={`calc(100% - ${width}px)`}
53
+ height={`calc(100% - ${width}px)`}
54
+ rx={rx}
55
+ pathLength={100}
56
+ className="animate-loader-rect-stroke fill-none stroke-current"
57
+ style={rectStyle}
58
+ />
59
+ </svg>
60
+ );
61
+ }
@@ -1 +1,2 @@
1
1
  export { Loader } from "./Loader";
2
+ export { RoundedRectLoader } from "./RoundedRectLoader";
@@ -188,10 +188,12 @@
188
188
  --animate-fade-in-opacity: fade-in-opacity 250ms ease both;
189
189
  --animate-flash: flash 1000ms ease both infinite;
190
190
  --animate-loader-stroke: loader-stroke 1s linear infinite;
191
+ --animate-loader-rect-stroke: loader-rect-stroke 2s linear infinite;
191
192
 
192
193
  --default-transition-duration: 0.2s;
193
194
 
194
- --breakpoint-3sm: 22.5rem;
195
+ --breakpoint-4sm: 22.5rem;
196
+ --breakpoint-3sm: 26rem;
195
197
  /* 480px mobile landscape */
196
198
  --breakpoint-2sm: 30rem;
197
199
  /* 1920px */
@@ -330,3 +332,12 @@
330
332
  stroke-dashoffset: 0;
331
333
  }
332
334
  }
335
+
336
+ @keyframes loader-rect-stroke {
337
+ from {
338
+ stroke-dashoffset: 100;
339
+ }
340
+ to {
341
+ stroke-dashoffset: 0;
342
+ }
343
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"Button-C953R2Mo.mjs","names":["ComponentProps","RefObject","useImperativeHandle","useRef","clsx","Loader","useRipple","Slot","cva","ThemeColor","loaderColor","color","ButtonProps","Omit","withRipple","variant","size","width","loading","disabled","focusable","selected","icon","asChild","ref","HTMLButtonElement","buttonVariants","variants","clickable","true","false","small","medium","large","input","custom","scalable","fit","full","contained","light","outlined","text","ghost","defaultVariants","Button","t0","$","_c","children","className","props","t1","t10","t11","t2","t3","t4","t5","t6","t7","t8","t9","undefined","inputRef","t12","Symbol","for","current","rippleEnabled","includes","Comp","t13","t14","t15","t16","t17"],"sources":["../src/components/button/Button.tsx"],"sourcesContent":["import { ComponentProps, RefObject, useImperativeHandle, useRef } from \"react\";\nimport clsx from \"clsx\";\nimport { Loader } from \"../loader\";\nimport { useRipple } from \"../../hooks\";\nimport { Slot } from \"../slot\";\nimport { cva } from \"class-variance-authority\";\nimport { ThemeColor } from \"../../types\";\n\nfunction loaderColor(color: ThemeColor): ThemeColor {\n switch (color) {\n case \"yellow-alpha\":\n return \"yellow\";\n case \"gray-alpha\":\n return \"gray\";\n default:\n return color;\n }\n}\n\nexport interface ButtonProps extends Omit<ComponentProps<\"button\">, \"color\"> {\n withRipple?: boolean;\n\n variant?: \"contained\" | \"light\" | \"outlined\" | \"text\" | \"ghost\";\n\n size?: \"small\" | \"medium\" | \"large\" | \"custom\" | \"input\" | \"scalable\";\n\n color?: ThemeColor;\n\n width?: \"fit\" | \"full\" | \"custom\";\n\n loading?: boolean;\n\n disabled?: boolean;\n\n focusable?: boolean;\n /**\n * For a selected item inside a group.\n */\n selected?: boolean;\n\n icon?: boolean;\n\n asChild?: boolean;\n\n ref?: RefObject<HTMLButtonElement>;\n}\n\nexport const buttonVariants = cva(\n \"relative box-border inline-flex items-center leading-5 no-underline focus-visible-has:outline-2\",\n {\n variants: {\n clickable: {\n true: \"cursor-pointer active:translate-y-px focus-visible-has:z-10\",\n false: \"pointer-events-none\",\n },\n size: {\n small: \"[--h-button:1.5rem] h-(--h-button) truncate\",\n medium: \"[--h-button:2rem] h-(--h-button) truncate\",\n large: \"[--h-button:3rem] h-(--h-button) truncate\",\n input: \"[--h-button:calc(var(--h-input)-2px)] h-(--h-button) truncate\",\n custom: \"truncate\",\n scalable: \"\",\n },\n icon: {\n true: \"rounded-[calc(var(--h-button)/2)] min-w-(--h-button) [&_i,&_img,&_svg]:w-(--h-button) justify-center [&_:last-child:not(i,img,svg,strong)]:pr-4\",\n false: \"rounded-2xl px-4\",\n custom: \"\",\n },\n width: {\n fit: \"w-full max-w-fit\",\n full: \"w-full justify-center\",\n custom: \"\",\n },\n variant: {\n /**\n * src/tailwind/plugin.ts\n * addVariant(\"current\", [\n * `&[aria-checked=\"true\"]`,\n * `&[aria-current=\"page\"]`,\n * `&:has(:checked)`\n * ])\n */\n contained:\n \"shadow-lg hover:shadow-xl active:shadow-xl-active outline-offset-0 text-custom-text bg-custom-3 hover:bg-custom-4 current:bg-custom-4 focus-visible-has:outline-custom-5\",\n light:\n \"shadow-lg hover:shadow-xl has-checked:shadow-xl focus:shadow-xl active:shadow-xl-active outline-offset-0 bg-custom-1 text-gray-text hover:text-custom-text hover:bg-custom-3 current:bg-custom-3 focus-visible-has:outline-custom-4\",\n outlined:\n \"bg-custom-0 hover:shadow-sm active:shadow-sm-active text-gray-7 outline-offset-0 border hover:bg-custom-1 border-custom-border focus-visible-has:outline-custom-5 current:bg-custom-3 focus-visible-has:border-transparent\",\n text: \"bg-transparent hover:shadow-sm active:shadow-sm-active outline-offset-0 hover:bg-custom-1 dark:hover:bg-custom-1/50 text-gray-7 hover:text-gray-8 current:bg-custom-3 focus-visible-has:outline-custom-5\",\n ghost: \"outline-offset-0 current:bg-custom-1 focus-visible-has:outline-custom-5\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n icon: false,\n variant: \"contained\",\n clickable: true,\n width: \"fit\",\n },\n },\n);\n\nexport function Button({\n withRipple = true,\n variant = \"contained\",\n loading = false,\n color = \"yellow\",\n size = \"medium\",\n focusable = true,\n className,\n disabled = false,\n children,\n selected = false,\n icon = false,\n asChild = false,\n width = \"fit\",\n ref,\n ...props\n}: ButtonProps) {\n const inputRef = useRef<HTMLButtonElement>(null!);\n\n useImperativeHandle<HTMLButtonElement | null, HTMLButtonElement | null>(\n ref,\n () => inputRef.current,\n );\n\n const rippleEnabled = !loading && !disabled && withRipple;\n\n useRipple(\n inputRef,\n [\"text\", \"outlined\", \"ghost\"].includes(variant) ? true : false,\n rippleEnabled,\n );\n\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n tabIndex={focusable ? 0 : -1}\n role=\"button\"\n ref={inputRef}\n className={clsx(\n buttonVariants({\n variant,\n size,\n width,\n icon: width === \"custom\" && !icon ? \"custom\" : icon,\n }),\n className,\n loading && !icon && \"text-transparent\",\n )}\n data-color={color}\n data-variant={variant}\n aria-checked={selected}\n suppressHydrationWarning\n aria-busy={loading}\n {...(disabled ? { disabled } : {})}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {/* {!notClickable && withRipple && ripples} */}\n {children}\n {loading && (\n <Loader\n color={loaderColor(color)}\n className={clsx(\"top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\")}\n position=\"absolute\"\n />\n )}\n </>\n )}\n </Comp>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader-csj5qb99.mjs","names":["CSSProperties","ComponentPropsWithoutRef","ReactNode","useId","ThemeColor","clsx","Props","size","color","children","loading","position","progression","sizeConfig","small","medium","large","input","trackStyle","strokeLinecap","strokeWidth","circleStyle","strokeDasharray","Loader","t0","$","_c","className","rest","t1","t2","t3","t4","t5","undefined","id","t6","Math","sin","PI","t7","cos","t8","x","y","destPoint","t9","t10","t11","t12","t13"],"sources":["../src/components/loader/Loader.tsx"],"sourcesContent":["import { CSSProperties, ComponentPropsWithoutRef, ReactNode, useId } from \"react\";\nimport { ThemeColor } from \"../../types\";\nimport clsx from \"clsx\";\n\ninterface Props extends ComponentPropsWithoutRef<\"div\"> {\n size?: \"small\" | \"medium\" | \"large\" | \"input\";\n color?: ThemeColor | \"custom\";\n children?: ReactNode;\n loading?: boolean;\n position?: CSSProperties[\"position\"];\n progression?: number;\n}\n\nconst sizeConfig = {\n small: \"[--h-button:1.5rem]\",\n medium: \"[--h-button:2rem]\",\n large: \"[--h-button:3rem]\",\n input: \"[--h-button:calc(var(--h-input)-2px)]\",\n};\n\nconst trackStyle: CSSProperties = {\n strokeLinecap: \"round\",\n strokeWidth: 2,\n};\nconst circleStyle: CSSProperties = {\n strokeLinecap: \"round\",\n strokeWidth: 2,\n\n /**\n * $total-length: 43.699; // total length of path, calculated by getTotalLength() in JS\n * $looping-percent: 40;\n * $looping-length: math.div($looping-percent * $total-length, 100) = 17.464;\n * stroke-dasharray: #{$looping-length * 1px}, #{($total-length - $looping-length) * 1px};\n */\n strokeDasharray: \"17.45px, 26.21px\",\n};\n\nexport function Loader({\n size = \"medium\",\n color = \"blue\",\n loading = true,\n progression = -1,\n className,\n position = \"relative\",\n children,\n ...rest\n}: Props) {\n const id = useId();\n\n const destPoint = {\n x: 7 * Math.sin((2 * Math.PI * progression) / 100),\n y: 7 - 7 * Math.cos((2 * Math.PI * progression) / 100),\n };\n\n return (\n <div\n data-color={color}\n className={clsx(\n \"inline-block h-(--h-button) w-(--h-button)\",\n position,\n sizeConfig[size],\n className,\n )}\n {...rest}\n >\n {loading && (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={clsx(\n \"inline-block h-(--h-button) w-(--h-button)\",\n color !== \"custom\" && \"text-custom-4\",\n )}\n viewBox=\"0 0 16 16\"\n >\n <defs>\n <circle id={id} cx=\"8\" cy=\"8\" r=\"7\" />\n </defs>\n <use href={`#${id}`} className=\"fill-none stroke-current opacity-25\" style={trackStyle} />\n {progression === -1 ? (\n <use\n href={`#${id}`}\n className=\"animate-loader-stroke fill-none stroke-current\"\n style={circleStyle}\n />\n ) : (\n <path\n d={`M 8,1 a 7,7 0 ${progression > 50 ? 1 : 0} 1 ${destPoint.x},${destPoint.y}`}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n )}\n </svg>\n )}\n {children && (\n <div className=\"absolute top-0 left-0 inline-flex h-(--h-button) w-(--h-button) items-center justify-center\">\n {children}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}