@bigbinary/neeto-atoms 1.1.6 → 1.1.8

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 (73) hide show
  1. package/dist/{HelpIcon-DAi3_HhO.js → HelpIcon-BvXEVZzs.js} +6 -4
  2. package/dist/HelpIcon-BvXEVZzs.js.map +1 -0
  3. package/dist/{Label-CEujas4-.js → Label-jlfqsDPq.js} +2 -2
  4. package/dist/{Label-CEujas4-.js.map → Label-jlfqsDPq.js.map} +1 -1
  5. package/dist/{Toastr-Dhl8V1V2.js → Toastr-BGdPHnlj.js} +81 -59
  6. package/dist/Toastr-BGdPHnlj.js.map +1 -0
  7. package/dist/cjs/{HelpIcon-f8_h5Eap.js → HelpIcon-CFJ50mnY.js} +6 -4
  8. package/dist/cjs/HelpIcon-CFJ50mnY.js.map +1 -0
  9. package/dist/cjs/{Label-C8u4fXTy.js → Label-D9LErMf5.js} +2 -2
  10. package/dist/cjs/{Label-C8u4fXTy.js.map → Label-D9LErMf5.js.map} +1 -1
  11. package/dist/cjs/{Toastr-DgllCbfd.js → Toastr-ByL66sV-.js} +80 -58
  12. package/dist/cjs/Toastr-ByL66sV-.js.map +1 -0
  13. package/dist/cjs/components/Checkbox.js +1 -1
  14. package/dist/cjs/components/DatePicker.js +1 -1
  15. package/dist/cjs/components/Input.js +1 -1
  16. package/dist/cjs/components/Label.js +2 -2
  17. package/dist/cjs/components/MultiEmailInput.js +1 -1
  18. package/dist/cjs/components/RadioGroup.js +1 -1
  19. package/dist/cjs/components/Select.js +1 -1
  20. package/dist/cjs/components/Slider.js +1 -1
  21. package/dist/cjs/components/Switch.js +1 -1
  22. package/dist/cjs/components/Textarea.js +1 -1
  23. package/dist/cjs/components/TimePicker.js +1 -1
  24. package/dist/cjs/components/Toastr.js +2 -1
  25. package/dist/cjs/components/Toastr.js.map +1 -1
  26. package/dist/cjs/components/TreeSelect.js +1 -1
  27. package/dist/cjs/components/index.js +3 -3
  28. package/dist/cjs/formik/Checkbox.js +1 -1
  29. package/dist/cjs/formik/Input.js +1 -1
  30. package/dist/cjs/formik/MultiEmailInput.js +1 -1
  31. package/dist/cjs/formik/RadioGroup.js +1 -1
  32. package/dist/cjs/formik/Select.js +1 -1
  33. package/dist/cjs/formik/Slider.js +1 -1
  34. package/dist/cjs/formik/Switch.js +1 -1
  35. package/dist/cjs/formik/Textarea.js +1 -1
  36. package/dist/cjs/formik/TreeSelect.js +1 -1
  37. package/dist/cjs/formik/index.js +1 -1
  38. package/dist/cjs/index.js +3 -3
  39. package/dist/cjs/primitives/Field.js +1 -1
  40. package/dist/cjs/primitives/index.js +1 -1
  41. package/dist/components/Checkbox.js +1 -1
  42. package/dist/components/DatePicker.js +1 -1
  43. package/dist/components/Input.js +1 -1
  44. package/dist/components/Label.js +2 -2
  45. package/dist/components/MultiEmailInput.js +1 -1
  46. package/dist/components/RadioGroup.js +1 -1
  47. package/dist/components/Select.js +1 -1
  48. package/dist/components/Slider.js +1 -1
  49. package/dist/components/Switch.js +1 -1
  50. package/dist/components/Textarea.js +1 -1
  51. package/dist/components/TimePicker.js +1 -1
  52. package/dist/components/Toastr.js +2 -1
  53. package/dist/components/Toastr.js.map +1 -1
  54. package/dist/components/TreeSelect.js +1 -1
  55. package/dist/components/index.js +3 -3
  56. package/dist/formik/Checkbox.js +1 -1
  57. package/dist/formik/Input.js +1 -1
  58. package/dist/formik/MultiEmailInput.js +1 -1
  59. package/dist/formik/RadioGroup.js +1 -1
  60. package/dist/formik/Select.js +1 -1
  61. package/dist/formik/Slider.js +1 -1
  62. package/dist/formik/Switch.js +1 -1
  63. package/dist/formik/Textarea.js +1 -1
  64. package/dist/formik/TreeSelect.js +1 -1
  65. package/dist/formik/index.js +1 -1
  66. package/dist/index.js +3 -3
  67. package/dist/primitives/Field.js +1 -1
  68. package/dist/primitives/index.js +1 -1
  69. package/package.json +1 -1
  70. package/dist/HelpIcon-DAi3_HhO.js.map +0 -1
  71. package/dist/Toastr-Dhl8V1V2.js.map +0 -1
  72. package/dist/cjs/HelpIcon-f8_h5Eap.js.map +0 -1
  73. package/dist/cjs/Toastr-DgllCbfd.js.map +0 -1
@@ -34,8 +34,7 @@ const HelpIcon = (helpIconProps) => {
34
34
  "span",
35
35
  {
36
36
  className: cn(
37
- "inline-flex cursor-help text-muted-foreground transition-colors hover:text-foreground",
38
- helpIconProps.onClick && "cursor-pointer",
37
+ "inline-flex cursor-pointer text-muted-foreground transition-colors hover:text-foreground",
39
38
  helpIconProps.className
40
39
  ),
41
40
  "data-testid": helpIconProps["data-testid"],
@@ -61,7 +60,10 @@ const HelpIcon = (helpIconProps) => {
61
60
  variant: "link",
62
61
  "data-testid": "help-popover-link-button",
63
62
  ...helpLinkProps,
64
- className: cn("mt-1 h-auto self-start p-0", helpLinkProps.className)
63
+ className: cn(
64
+ "mt-1 h-auto self-start p-0",
65
+ helpLinkProps.className
66
+ )
65
67
  }
66
68
  )
67
69
  ] });
@@ -77,4 +79,4 @@ const HelpIcon = (helpIconProps) => {
77
79
  };
78
80
 
79
81
  export { HelpIcon as H };
80
- //# sourceMappingURL=HelpIcon-DAi3_HhO.js.map
82
+ //# sourceMappingURL=HelpIcon-BvXEVZzs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpIcon-BvXEVZzs.js","sources":["../node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../src/shared/HelpIcon.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","import type React from \"react\";\n\nimport { CircleHelpIcon } from \"lucide-react\";\n\nimport { Button, type ButtonProps } from \"src/components/Button\";\nimport { Popover } from \"src/components/Popover\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\nimport { renderIcon, type IconProp } from \"src/shared/renderIcon\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nconst SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n auto: \"top\",\n};\n\nexport interface HelpIconTooltipProps {\n /** Tooltip content. */\n content?: React.ReactNode;\n /** Tooltip position. */\n position?: string;\n}\n\nexport interface HelpIconPopoverProps {\n /** Popover title. */\n title?: React.ReactNode;\n /** Popover description. */\n description?: React.ReactNode;\n /** Props for an optional help link button inside the popover. */\n helpLinkProps?: ButtonProps;\n}\n\nexport interface HelpIconProps {\n /** Click handler on the help icon. */\n onClick?: () => void;\n /** Custom icon. Defaults to CircleHelpIcon. */\n icon?: IconProp;\n /** Show a tooltip on hover. */\n tooltipProps?: HelpIconTooltipProps;\n /** Show a popover on hover with title, description, and optional link. */\n popoverProps?: HelpIconPopoverProps;\n /** Additional class name for the help icon. */\n className?: string;\n /** `data-testid` for the help icon. */\n \"data-testid\"?: string;\n}\n\nexport const HelpIcon = (helpIconProps: HelpIconProps) => {\n const icon = helpIconProps.icon ?? CircleHelpIcon;\n\n const iconElement = (\n <span\n className={cn(\n \"inline-flex cursor-pointer text-muted-foreground transition-colors hover:text-foreground\",\n helpIconProps.className\n )}\n data-testid={helpIconProps[\"data-testid\"]}\n onClick={helpIconProps.onClick}\n >\n {renderIcon(icon, \"size-4\")}\n </span>\n );\n\n if (helpIconProps.popoverProps) {\n const { title, description, helpLinkProps } = helpIconProps.popoverProps;\n\n return (\n <Popover trigger={iconElement}>\n {title && (\n <Popover.Title data-testid=\"help-popover-title\">\n {title}\n </Popover.Title>\n )}\n {description && (\n <p\n className=\"text-[15px] leading-normal text-muted-foreground\"\n data-testid=\"help-popover-description\"\n >\n {description}\n </p>\n )}\n {helpLinkProps && (\n <Button\n variant=\"link\"\n data-testid=\"help-popover-link-button\"\n {...helpLinkProps}\n className={cn(\n \"mt-1 h-auto self-start p-0\",\n helpLinkProps.className\n )}\n />\n )}\n </Popover>\n );\n }\n\n if (helpIconProps.tooltipProps?.content) {\n const side =\n SIDE_MAP[helpIconProps.tooltipProps.position ?? \"auto\"] ?? \"top\";\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{iconElement}</TooltipTrigger>\n <TooltipContent side={side}>\n {helpIconProps.tooltipProps.content}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return iconElement;\n};\n"],"names":["CircleHelpIcon"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAM,UAAU,GAAG;AACnB,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5D,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,sCAAsC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACxE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC7C,CAAC;AACD,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,sBAAsB,EAAE,UAAU,CAAC;;ACC/E,MAAM,QAAA,GAAgE;AAAA,EACpE,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AAiCO,MAAM,QAAA,GAAW,CAAC,aAAA,KAAiC;AACxD,EAAA,MAAM,IAAA,GAAO,cAAc,IAAA,IAAQA,kBAAA;AAEnC,EAAA,MAAM,WAAA,mBACJ,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,0FAAA;AAAA,QACA,aAAA,CAAc;AAAA,OAChB;AAAA,MACA,aAAA,EAAa,cAAc,aAAa,CAAA;AAAA,MACxC,SAAS,aAAA,CAAc,OAAA;AAAA,MAEtB,QAAA,EAAA,UAAA,CAAW,MAAM,QAAQ;AAAA;AAAA,GAC5B;AAGF,EAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,aAAA,KAAkB,aAAA,CAAc,YAAA;AAE5D,IAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAQ,OAAA,EAAS,WAAA,EACf,QAAA,EAAA;AAAA,MAAA,KAAA,wBACE,OAAA,CAAQ,KAAA,EAAR,EAAc,aAAA,EAAY,sBACxB,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MAED,WAAA,oBACC,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,kDAAA;AAAA,UACV,aAAA,EAAY,0BAAA;AAAA,UAEX,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,MAED,aAAA,oBACC,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,MAAA;AAAA,UACR,aAAA,EAAY,0BAAA;AAAA,UACX,GAAG,aAAA;AAAA,UACJ,SAAA,EAAW,EAAA;AAAA,YACT,4BAAA;AAAA,YACA,aAAA,CAAc;AAAA;AAChB;AAAA;AACF,KAAA,EAEJ,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,aAAA,CAAc,cAAc,OAAA,EAAS;AACvC,IAAA,MAAM,OACJ,QAAA,CAAS,aAAA,CAAc,YAAA,CAAa,QAAA,IAAY,MAAM,CAAA,IAAK,KAAA;AAE7D,IAAA,uBACE,GAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,sBACrC,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EACb,QAAA,EAAA,aAAA,CAAc,aAAa,OAAA,EAC9B;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,WAAA;AACT;;;;","x_google_ignoreList":[0]}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { forwardRef } from 'react';
3
- import { H as HelpIcon } from './HelpIcon-DAi3_HhO.js';
3
+ import { H as HelpIcon } from './HelpIcon-BvXEVZzs.js';
4
4
  import { Label as Label$1 } from './primitives/Label.js';
5
5
  import { c as cn } from './utils-BJnb9o5c.js';
6
6
 
@@ -14,4 +14,4 @@ const Label = forwardRef(
14
14
  Label.displayName = "Label";
15
15
 
16
16
  export { Label as L };
17
- //# sourceMappingURL=Label-CEujas4-.js.map
17
+ //# sourceMappingURL=Label-jlfqsDPq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Label-CEujas4-.js","sources":["../src/components/Label/Label.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { HelpIcon, type HelpIconProps } from \"src/shared/HelpIcon\";\nimport { Label as PrimitiveLabel } from \"src/primitives/Label\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nexport type { HelpIconProps };\n\nexport interface LabelProps extends React.ComponentProps<\n typeof PrimitiveLabel\n> {\n /** Shows a red asterisk after the label text. */\n required?: boolean;\n /** Props for the help icon (tooltip or popover mode). */\n helpIconProps?: HelpIconProps;\n /** Additional CSS class names. */\n className?: string;\n}\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ required, helpIconProps, className, children, ...otherProps }, ref) => (\n <PrimitiveLabel ref={ref} className={cn(className)} {...otherProps}>\n {children}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n {helpIconProps && <HelpIcon {...helpIconProps} />}\n </PrimitiveLabel>\n )\n);\n\nLabel.displayName = \"Label\";\n\nexport { Label };\n"],"names":["PrimitiveLabel"],"mappings":";;;;;;AAmBA,MAAM,KAAA,GAAQ,UAAA;AAAA,EACZ,CAAC,EAAE,QAAA,EAAU,eAAe,SAAA,EAAW,QAAA,EAAU,GAAG,UAAA,EAAW,EAAG,GAAA,qBAChE,IAAA,CAACA,WAAe,GAAA,EAAU,SAAA,EAAW,GAAG,SAAS,CAAA,EAAI,GAAG,UAAA,EACrD,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,4BACC,GAAA,CAAC,MAAA,EAAA,EAAK,eAAY,MAAA,EAAO,SAAA,EAAU,oBAAmB,QAAA,EAAA,GAAA,EAEtD,CAAA;AAAA,IAED,aAAA,oBAAiB,GAAA,CAAC,QAAA,EAAA,EAAU,GAAG,aAAA,EAAe;AAAA,GAAA,EACjD;AAEJ;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;;;;"}
1
+ {"version":3,"file":"Label-jlfqsDPq.js","sources":["../src/components/Label/Label.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { HelpIcon, type HelpIconProps } from \"src/shared/HelpIcon\";\nimport { Label as PrimitiveLabel } from \"src/primitives/Label\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nexport type { HelpIconProps };\n\nexport interface LabelProps extends React.ComponentProps<\n typeof PrimitiveLabel\n> {\n /** Shows a red asterisk after the label text. */\n required?: boolean;\n /** Props for the help icon (tooltip or popover mode). */\n helpIconProps?: HelpIconProps;\n /** Additional CSS class names. */\n className?: string;\n}\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ required, helpIconProps, className, children, ...otherProps }, ref) => (\n <PrimitiveLabel ref={ref} className={cn(className)} {...otherProps}>\n {children}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n {helpIconProps && <HelpIcon {...helpIconProps} />}\n </PrimitiveLabel>\n )\n);\n\nLabel.displayName = \"Label\";\n\nexport { Label };\n"],"names":["PrimitiveLabel"],"mappings":";;;;;;AAmBA,MAAM,KAAA,GAAQ,UAAA;AAAA,EACZ,CAAC,EAAE,QAAA,EAAU,eAAe,SAAA,EAAW,QAAA,EAAU,GAAG,UAAA,EAAW,EAAG,GAAA,qBAChE,IAAA,CAACA,WAAe,GAAA,EAAU,SAAA,EAAW,GAAG,SAAS,CAAA,EAAI,GAAG,UAAA,EACrD,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,4BACC,GAAA,CAAC,MAAA,EAAA,EAAK,eAAY,MAAA,EAAO,SAAA,EAAU,oBAAmB,QAAA,EAAA,GAAA,EAEtD,CAAA;AAAA,IAED,aAAA,oBAAiB,GAAA,CAAC,QAAA,EAAA,EAAU,GAAG,aAAA,EAAe;AAAA,GAAA,EACjD;AAEJ;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;;;;"}
@@ -1,4 +1,4 @@
1
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { O as OctagonX, C as CircleCheck, t as toast } from './index-CDo_esrR.js';
3
3
  import { isValidElement, useState, useRef, useEffect } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
@@ -6,8 +6,24 @@ import { c as cn } from './utils-BJnb9o5c.js';
6
6
  import i18n from 'i18next';
7
7
  import { T as TriangleAlert } from './triangle-alert-C434HydH.js';
8
8
  import { I as Info } from './info-BlwkmMZr.js';
9
+ import { C as Check } from './check-Cpkv29p1.js';
10
+ import { c as createLucideIcon } from './createLucideIcon-C8ycilSN.js';
9
11
  import { X } from './x-_o2T3n6D.js';
10
12
 
13
+ /**
14
+ * @license lucide-react v0.577.0 - ISC
15
+ *
16
+ * This source code is licensed under the ISC license.
17
+ * See the LICENSE file in the root directory of this source tree.
18
+ */
19
+
20
+
21
+ const __iconNode = [
22
+ ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
23
+ ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
24
+ ];
25
+ const Copy = createLucideIcon("copy", __iconNode);
26
+
11
27
  const activeToasts = /* @__PURE__ */ new Set();
12
28
  function toastKey(type, message, buttonLabel) {
13
29
  if (typeof message !== "string") return null;
@@ -125,6 +141,7 @@ const ToastrBody = ({
125
141
  void 0
126
142
  );
127
143
  useEffect(() => () => clearTimeout(copiedTimeoutRef.current), []);
144
+ const copyLabel = isCopied ? t("neetoatoms.toastr.copied", "Copied!") : t("neetoatoms.toastr.copyMessage", "Copy this error message");
128
145
  const handleCopy = async () => {
129
146
  if (!copyableMessage || !await copyToClipboard(copyableMessage)) return;
130
147
  setIsCopied(true);
@@ -134,64 +151,69 @@ const ToastrBody = ({
134
151
  COPIED_FEEDBACK_DURATION_MS
135
152
  );
136
153
  };
137
- return /* @__PURE__ */ jsxs(
138
- "div",
139
- {
140
- role: type === "error" || type === "warning" ? "alert" : "status",
141
- "data-testid": `toastr-${type}-container`,
142
- className: cn(
143
- "flex w-full items-center gap-3 rounded-md border px-4 py-3 text-sm shadow-lg",
144
- VARIANT_CLASSES[type]
145
- ),
146
- children: [
147
- showIcon && /* @__PURE__ */ jsx(
148
- Icon,
149
- {
150
- "aria-hidden": true,
151
- "data-testid": `${type}-toast-icon`,
152
- className: "size-4 shrink-0"
153
- }
154
- ),
155
- /* @__PURE__ */ jsxs("span", { className: "flex-1", children: [
156
- message,
157
- copyableMessage && /* @__PURE__ */ jsxs(Fragment, { children: [
158
- " ",
159
- /* @__PURE__ */ jsx(
160
- "button",
161
- {
162
- type: "button",
163
- "data-testid": `toastr-${type}-copy-button`,
164
- className: "text-xs italic underline-offset-2 opacity-80 transition-opacity hover:underline hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
165
- onClick: handleCopy,
166
- children: isCopied ? t("neetoatoms.toastr.copied", "Copied!") : t("neetoatoms.toastr.copyMessage", "Copy this error message")
167
- }
168
- )
169
- ] })
170
- ] }),
171
- buttonLabel && /* @__PURE__ */ jsx(
172
- "button",
173
- {
174
- type: "button",
175
- onClick: onAction,
176
- "data-testid": `toastr-${type}-button`,
177
- className: "shrink-0 text-sm font-medium underline-offset-2 hover:underline",
178
- children: buttonLabel
179
- }
154
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
155
+ copyableMessage && /* @__PURE__ */ jsx("span", { role: "status", className: "sr-only", children: isCopied && t("neetoatoms.toastr.copied", "Copied!") }),
156
+ /* @__PURE__ */ jsxs(
157
+ "div",
158
+ {
159
+ role: type === "error" || type === "warning" ? "alert" : "status",
160
+ "data-testid": `toastr-${type}-container`,
161
+ className: cn(
162
+ "flex w-full items-center gap-3 rounded-md border px-4 py-3 text-sm shadow-lg",
163
+ VARIANT_CLASSES[type]
180
164
  ),
181
- dismissible && /* @__PURE__ */ jsx(
182
- "button",
183
- {
184
- type: "button",
185
- "aria-label": "Dismiss",
186
- onClick: onDismiss,
187
- "data-testid": "toastr-close-button",
188
- className: "shrink-0 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
189
- children: /* @__PURE__ */ jsx(X, { "aria-hidden": true, className: "size-4" })
190
- }
191
- )
192
- ]
193
- }
194
- );
165
+ children: [
166
+ showIcon && /* @__PURE__ */ jsx(
167
+ Icon,
168
+ {
169
+ "aria-hidden": true,
170
+ "data-testid": `${type}-toast-icon`,
171
+ className: "size-4 shrink-0"
172
+ }
173
+ ),
174
+ /* @__PURE__ */ jsxs("span", { className: "flex-1", children: [
175
+ message,
176
+ copyableMessage && /* @__PURE__ */ jsxs(Fragment, { children: [
177
+ " ",
178
+ /* @__PURE__ */ jsx(
179
+ "button",
180
+ {
181
+ type: "button",
182
+ "aria-label": copyLabel,
183
+ "data-testid": `toastr-${type}-copy-button`,
184
+ title: copyLabel,
185
+ className: "-my-1 inline-flex rounded-sm p-1 align-middle opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
186
+ onClick: handleCopy,
187
+ children: isCopied ? /* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "size-4" }) : /* @__PURE__ */ jsx(Copy, { "aria-hidden": true, className: "size-4" })
188
+ }
189
+ )
190
+ ] })
191
+ ] }),
192
+ buttonLabel && /* @__PURE__ */ jsx(
193
+ "button",
194
+ {
195
+ type: "button",
196
+ onClick: onAction,
197
+ "data-testid": `toastr-${type}-button`,
198
+ className: "shrink-0 text-sm font-medium underline-offset-2 hover:underline",
199
+ children: buttonLabel
200
+ }
201
+ ),
202
+ dismissible && /* @__PURE__ */ jsx(
203
+ "button",
204
+ {
205
+ type: "button",
206
+ "aria-label": "Dismiss",
207
+ onClick: onDismiss,
208
+ "data-testid": "toastr-close-button",
209
+ className: "shrink-0 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
210
+ children: /* @__PURE__ */ jsx(X, { "aria-hidden": true, className: "size-4" })
211
+ }
212
+ )
213
+ ]
214
+ }
215
+ )
216
+ ] });
195
217
  };
196
218
 
197
219
  function showToast(type, message, config) {
@@ -266,4 +288,4 @@ const Toastr = {
266
288
  };
267
289
 
268
290
  export { Toastr as T };
269
- //# sourceMappingURL=Toastr-Dhl8V1V2.js.map
291
+ //# sourceMappingURL=Toastr-BGdPHnlj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toastr-BGdPHnlj.js","sources":["../node_modules/lucide-react/dist/esm/icons/copy.js","../src/components/Toastr/utils.ts","../src/components/Toastr/ToastrBody.tsx","../src/components/Toastr/Toastr.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n","import i18next from \"i18next\";\nimport { isValidElement, type ReactNode } from \"react\";\n\nimport type { ToastrConfig, ToastrErrorInput, ToastrMessage } from \"./Toastr\";\n\nconst activeToasts = new Set<string>();\n\nfunction toastKey(\n type: string,\n message: ReactNode,\n buttonLabel?: string\n): string | null {\n if (typeof message !== \"string\") return null;\n return `${type}::${message}::${buttonLabel ?? \"\"}`;\n}\n\nfunction getContentDir(): \"ltr\" | \"rtl\" {\n if (typeof document === \"undefined\") return \"ltr\";\n return (\n (document.documentElement.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n (document.body.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n \"ltr\"\n );\n}\n\n// A `noticeCode` payload carries the interpolation values the key expects\n// alongside it, e.g. `{ noticeCode: \"resource.clone\", entity: \"Form\" }` for\n// \"{{entity}} has been cloned successfully.\"\n//\n// `replace` scopes the payload to interpolation, so a backend field that\n// collides with an i18next option (`ns` forces a namespace and resolves the\n// key to nothing, `lng` forces a language) cannot alter key resolution.\n// `count` is the one option that still has to be promoted, since pluralised\n// keys resolve their `_one`/`_other` suffix from it.\nfunction translateNoticeCode(\n noticeCode: string,\n values: Record<string, unknown>\n): string {\n return i18next.t(noticeCode, { count: values.count, replace: values });\n}\n\nfunction resolveMessage(message: ToastrMessage): ReactNode {\n if (typeof message === \"string\") return message;\n if (isValidElement(message)) return message;\n // Arrays of ReactNodes (e.g. [<a/>, \" \", <b/>]) render natively via {message}.\n if (Array.isArray(message)) return message;\n if (message && typeof message === \"object\") {\n const obj = message as {\n noticeCode?: string;\n customMessage?: string;\n notice?: string;\n };\n if (obj.customMessage) return obj.customMessage;\n if (obj.notice) return obj.notice;\n if (obj.noticeCode) {\n return translateNoticeCode(\n obj.noticeCode,\n obj as Record<string, unknown>\n );\n }\n }\n return String(message);\n}\n\nfunction resolveErrorMessage(errorObject: ToastrErrorInput): ReactNode {\n if (typeof errorObject === \"string\") return errorObject;\n\n if (errorObject && typeof errorObject === \"object\") {\n // Axios-style error\n const axiosLike = errorObject as {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n };\n\n if (axiosLike.response?.data) {\n const data = axiosLike.response.data;\n // Not stringified: callers pass React elements here to embed links in an\n // error toast, and the copy affordance already skips non-string messages.\n if (data.customMessage) return data.customMessage as ReactNode;\n if (data.error) return String(data.error);\n if (Array.isArray(data.errors)) return data.errors.join(\"\\n\");\n if (data.noticeCode)\n return translateNoticeCode(String(data.noticeCode), data);\n if (Array.isArray(data.errorCodes)) {\n const message = data.errorCodes\n .filter((code): code is string => typeof code === \"string\")\n .map(code => translateNoticeCode(code, data))\n .join(\"\\n\");\n\n if (message) return message;\n }\n }\n\n if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;\n\n // Native Error\n if (errorObject instanceof Error) return errorObject.message;\n\n // ToastrMessage (string, React element, array, or notice-shape object)\n return resolveMessage(errorObject as ToastrMessage);\n }\n\n return \"Something went wrong.\";\n}\n\nasync function copyToClipboard(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n\n return true;\n } catch {\n // Clipboard API is unavailable in insecure contexts; fall back to execCommand.\n try {\n const textArea = document.createElement(\"textarea\");\n textArea.value = text;\n textArea.style.position = \"fixed\";\n textArea.style.opacity = \"0\";\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n const isCopied = document.execCommand(\"copy\");\n textArea.remove();\n\n return isCopied;\n } catch {\n return false;\n }\n }\n}\n\nfunction parseConfig(args: unknown[]): ToastrConfig {\n if (args.length === 0) return {};\n\n const first = args[0];\n if (typeof first === \"object\" && first !== null && !Array.isArray(first)) {\n return first as ToastrConfig;\n }\n\n // Legacy positional args: buttonLabel, onClick, customConfig, showIcon\n const [buttonLabel, onClick, customConfig, showIcon] = args as [\n string?,\n (() => void)?,\n Record<string, unknown>?,\n boolean?,\n ];\n\n return {\n ...(buttonLabel ? { buttonLabel } : {}),\n ...(onClick ? { onClick } : {}),\n ...(showIcon !== undefined ? { showIcon } : {}),\n ...(customConfig ?? {}),\n };\n}\n\nexport {\n activeToasts,\n copyToClipboard,\n getContentDir,\n parseConfig,\n resolveErrorMessage,\n resolveMessage,\n toastKey,\n};\n","import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n CheckIcon,\n CircleCheckIcon,\n CopyIcon,\n InfoIcon,\n OctagonXIcon,\n TriangleAlertIcon,\n XIcon,\n type LucideIcon,\n} from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { copyToClipboard } from \"./utils\";\n\ntype ToastrType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nconst ICONS: Record<ToastrType, LucideIcon> = {\n success: CircleCheckIcon,\n info: InfoIcon,\n warning: TriangleAlertIcon,\n error: OctagonXIcon,\n};\n\nconst VARIANT_CLASSES: Record<ToastrType, string> = {\n success:\n \"bg-success-solid text-success-solid-foreground border-success-solid/30\",\n error: \"bg-error-solid text-error-solid-foreground border-error-solid/30\",\n warning:\n \"bg-warning-solid text-warning-solid-foreground border-warning-solid/30\",\n info: \"bg-info-solid text-info-solid-foreground border-info-solid/30\",\n};\n\nexport interface ToastrBodyProps {\n type: ToastrType;\n message: ReactNode;\n /** Plain-text version of the message; renders a copy-to-clipboard affordance when set. */\n copyableMessage?: string;\n showIcon?: boolean;\n dismissible?: boolean;\n buttonLabel?: string;\n onAction?: () => void;\n onDismiss: () => void;\n}\n\nconst COPIED_FEEDBACK_DURATION_MS = 2000;\n\nconst ToastrBody = ({\n type,\n message,\n copyableMessage,\n showIcon = true,\n dismissible = true,\n buttonLabel,\n onAction,\n onDismiss,\n}: ToastrBodyProps) => {\n const Icon = ICONS[type];\n const { t } = useTranslation();\n const [isCopied, setIsCopied] = useState(false);\n const copiedTimeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined\n );\n\n useEffect(() => () => clearTimeout(copiedTimeoutRef.current), []);\n\n const copyLabel = isCopied\n ? t(\"neetoatoms.toastr.copied\", \"Copied!\")\n : t(\"neetoatoms.toastr.copyMessage\", \"Copy this error message\");\n\n const handleCopy = async () => {\n if (!copyableMessage || !(await copyToClipboard(copyableMessage))) return;\n\n setIsCopied(true);\n clearTimeout(copiedTimeoutRef.current);\n copiedTimeoutRef.current = setTimeout(\n () => setIsCopied(false),\n COPIED_FEEDBACK_DURATION_MS\n );\n };\n\n return (\n <>\n {/* Sits outside the alert so the confirmation doesn't re-announce the whole message. */}\n {copyableMessage && (\n <span role=\"status\" className=\"sr-only\">\n {isCopied && t(\"neetoatoms.toastr.copied\", \"Copied!\")}\n </span>\n )}\n <div\n role={type === \"error\" || type === \"warning\" ? \"alert\" : \"status\"}\n data-testid={`toastr-${type}-container`}\n className={cn(\n \"flex w-full items-center gap-3 rounded-md border px-4 py-3 text-sm shadow-lg\",\n VARIANT_CLASSES[type]\n )}\n >\n {showIcon && (\n <Icon\n aria-hidden\n data-testid={`${type}-toast-icon`}\n className=\"size-4 shrink-0\"\n />\n )}\n <span className=\"flex-1\">\n {message}\n {copyableMessage && (\n <>\n {\" \"}\n <button\n type=\"button\"\n aria-label={copyLabel}\n data-testid={`toastr-${type}-copy-button`}\n title={copyLabel}\n className=\"-my-1 inline-flex rounded-sm p-1 align-middle opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n onClick={handleCopy}\n >\n {isCopied ? (\n <CheckIcon aria-hidden className=\"size-4\" />\n ) : (\n <CopyIcon aria-hidden className=\"size-4\" />\n )}\n </button>\n </>\n )}\n </span>\n {buttonLabel && (\n <button\n type=\"button\"\n onClick={onAction}\n data-testid={`toastr-${type}-button`}\n className=\"shrink-0 text-sm font-medium underline-offset-2 hover:underline\"\n >\n {buttonLabel}\n </button>\n )}\n {dismissible && (\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={onDismiss}\n data-testid=\"toastr-close-button\"\n className=\"shrink-0 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n >\n <XIcon aria-hidden className=\"size-4\" />\n </button>\n )}\n </div>\n </>\n );\n};\n\nexport { ToastrBody };\n","import type { ReactNode } from \"react\";\nimport { toast } from \"sonner\";\n\nimport { ToastrBody } from \"./ToastrBody\";\nimport {\n activeToasts,\n getContentDir,\n parseConfig,\n resolveErrorMessage,\n resolveMessage,\n toastKey,\n} from \"./utils\";\n\nexport interface ToastrConfig {\n /** Label for an action button inside the toast. */\n buttonLabel?: string;\n /** Callback when the action button is clicked. */\n onClick?: () => void;\n /** Whether to show the type icon in the toast. */\n showIcon?: boolean;\n /** Whether the toast can be dismissed (shows X button + enables swipe). Defaults to true. */\n dismissible?: boolean;\n /** Whether to show the copy-to-clipboard affordance in error toasts. Defaults to true. */\n showCopyButton?: boolean;\n /** Additional sonner toast options (duration, position, etc.). */\n [key: string]: unknown;\n}\n\nexport type ToastrMessage =\n | ReactNode\n | { noticeCode?: string; customMessage?: string; notice?: string };\n\nexport type ToastrErrorInput =\n | string\n | Error\n | {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n }\n | ToastrMessage;\n\ntype SonnerType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nfunction showToast(\n type: SonnerType,\n message: ReactNode,\n config?: ToastrConfig\n): string | number | undefined {\n const {\n buttonLabel,\n onClick,\n showIcon,\n dismissible = true,\n showCopyButton = true,\n onDismiss: userOnDismiss,\n onAutoClose: userOnAutoClose,\n ...restConfig\n } = config ?? {};\n\n const key = toastKey(type, message, buttonLabel);\n\n if (key !== null && activeToasts.has(key)) return undefined;\n if (key !== null) activeToasts.add(key);\n\n // Error toasts stay until dismissed so the message can be read and copied.\n const options: Record<string, unknown> = {\n ...(type === \"error\" && { duration: Infinity }),\n ...restConfig,\n position: getContentDir() === \"rtl\" ? \"bottom-right\" : \"bottom-left\",\n dismissible,\n onDismiss: (t: unknown) => {\n if (key !== null) activeToasts.delete(key);\n (userOnDismiss as ((t: unknown) => void) | undefined)?.(t);\n },\n onAutoClose: (t: unknown) => {\n if (key !== null) activeToasts.delete(key);\n (userOnAutoClose as ((t: unknown) => void) | undefined)?.(t);\n },\n };\n\n const copyableMessage =\n showCopyButton && type === \"error\" && typeof message === \"string\"\n ? message\n : undefined;\n\n return toast.custom(\n id => (\n <ToastrBody\n buttonLabel={buttonLabel}\n copyableMessage={copyableMessage}\n dismissible={dismissible}\n message={message}\n showIcon={showIcon}\n type={type}\n onAction={() => {\n try {\n onClick?.();\n } finally {\n toast.dismiss(id);\n }\n }}\n onDismiss={() => toast.dismiss(id)}\n />\n ),\n options\n );\n}\n\nconst Toastr = {\n success(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"success\", resolveMessage(message), parseConfig(args));\n },\n\n info(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n show(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n warning(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"warning\", resolveMessage(message), parseConfig(args));\n },\n\n error(errorObject: ToastrErrorInput, ...args: unknown[]) {\n const msg = resolveErrorMessage(errorObject);\n return showToast(\"error\", msg, parseConfig(args));\n },\n};\n\nexport { Toastr };\n"],"names":["i18next","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","CheckIcon","CopyIcon","XIcon"],"mappings":"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","x_google_ignoreList":[0]}
@@ -36,8 +36,7 @@ const HelpIcon = (helpIconProps) => {
36
36
  "span",
37
37
  {
38
38
  className: utils.cn(
39
- "inline-flex cursor-help text-muted-foreground transition-colors hover:text-foreground",
40
- helpIconProps.onClick && "cursor-pointer",
39
+ "inline-flex cursor-pointer text-muted-foreground transition-colors hover:text-foreground",
41
40
  helpIconProps.className
42
41
  ),
43
42
  "data-testid": helpIconProps["data-testid"],
@@ -63,7 +62,10 @@ const HelpIcon = (helpIconProps) => {
63
62
  variant: "link",
64
63
  "data-testid": "help-popover-link-button",
65
64
  ...helpLinkProps,
66
- className: utils.cn("mt-1 h-auto self-start p-0", helpLinkProps.className)
65
+ className: utils.cn(
66
+ "mt-1 h-auto self-start p-0",
67
+ helpLinkProps.className
68
+ )
67
69
  }
68
70
  )
69
71
  ] });
@@ -79,4 +81,4 @@ const HelpIcon = (helpIconProps) => {
79
81
  };
80
82
 
81
83
  exports.HelpIcon = HelpIcon;
82
- //# sourceMappingURL=HelpIcon-f8_h5Eap.js.map
84
+ //# sourceMappingURL=HelpIcon-CFJ50mnY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpIcon-CFJ50mnY.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../../src/shared/HelpIcon.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","import type React from \"react\";\n\nimport { CircleHelpIcon } from \"lucide-react\";\n\nimport { Button, type ButtonProps } from \"src/components/Button\";\nimport { Popover } from \"src/components/Popover\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\nimport { renderIcon, type IconProp } from \"src/shared/renderIcon\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nconst SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n auto: \"top\",\n};\n\nexport interface HelpIconTooltipProps {\n /** Tooltip content. */\n content?: React.ReactNode;\n /** Tooltip position. */\n position?: string;\n}\n\nexport interface HelpIconPopoverProps {\n /** Popover title. */\n title?: React.ReactNode;\n /** Popover description. */\n description?: React.ReactNode;\n /** Props for an optional help link button inside the popover. */\n helpLinkProps?: ButtonProps;\n}\n\nexport interface HelpIconProps {\n /** Click handler on the help icon. */\n onClick?: () => void;\n /** Custom icon. Defaults to CircleHelpIcon. */\n icon?: IconProp;\n /** Show a tooltip on hover. */\n tooltipProps?: HelpIconTooltipProps;\n /** Show a popover on hover with title, description, and optional link. */\n popoverProps?: HelpIconPopoverProps;\n /** Additional class name for the help icon. */\n className?: string;\n /** `data-testid` for the help icon. */\n \"data-testid\"?: string;\n}\n\nexport const HelpIcon = (helpIconProps: HelpIconProps) => {\n const icon = helpIconProps.icon ?? CircleHelpIcon;\n\n const iconElement = (\n <span\n className={cn(\n \"inline-flex cursor-pointer text-muted-foreground transition-colors hover:text-foreground\",\n helpIconProps.className\n )}\n data-testid={helpIconProps[\"data-testid\"]}\n onClick={helpIconProps.onClick}\n >\n {renderIcon(icon, \"size-4\")}\n </span>\n );\n\n if (helpIconProps.popoverProps) {\n const { title, description, helpLinkProps } = helpIconProps.popoverProps;\n\n return (\n <Popover trigger={iconElement}>\n {title && (\n <Popover.Title data-testid=\"help-popover-title\">\n {title}\n </Popover.Title>\n )}\n {description && (\n <p\n className=\"text-[15px] leading-normal text-muted-foreground\"\n data-testid=\"help-popover-description\"\n >\n {description}\n </p>\n )}\n {helpLinkProps && (\n <Button\n variant=\"link\"\n data-testid=\"help-popover-link-button\"\n {...helpLinkProps}\n className={cn(\n \"mt-1 h-auto self-start p-0\",\n helpLinkProps.className\n )}\n />\n )}\n </Popover>\n );\n }\n\n if (helpIconProps.tooltipProps?.content) {\n const side =\n SIDE_MAP[helpIconProps.tooltipProps.position ?? \"auto\"] ?? \"top\";\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{iconElement}</TooltipTrigger>\n <TooltipContent side={side}>\n {helpIconProps.tooltipProps.content}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return iconElement;\n};\n"],"names":["createLucideIcon","CircleHelpIcon","jsx","cn","renderIcon","jsxs","Popover","Button","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAM,UAAU,GAAG;AACnB,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5D,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,sCAAsC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACxE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC7C,CAAC;AACD,MAAM,kBAAkB,GAAGA,iCAAgB,CAAC,sBAAsB,EAAE,UAAU,CAAC;;ACC/E,MAAM,QAAA,GAAgE;AAAA,EACpE,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AAiCO,MAAM,QAAA,GAAW,CAAC,aAAA,KAAiC;AACxD,EAAA,MAAM,IAAA,GAAO,cAAc,IAAA,IAAQC,kBAAA;AAEnC,EAAA,MAAM,WAAA,mBACJC,cAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,QAAA;AAAA,QACT,0FAAA;AAAA,QACA,aAAA,CAAc;AAAA,OAChB;AAAA,MACA,aAAA,EAAa,cAAc,aAAa,CAAA;AAAA,MACxC,SAAS,aAAA,CAAc,OAAA;AAAA,MAEtB,QAAA,EAAAC,qBAAA,CAAW,MAAM,QAAQ;AAAA;AAAA,GAC5B;AAGF,EAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,aAAA,KAAkB,aAAA,CAAc,YAAA;AAE5D,IAAA,uBACEC,eAAA,CAACC,eAAA,EAAA,EAAQ,OAAA,EAAS,WAAA,EACf,QAAA,EAAA;AAAA,MAAA,KAAA,mCACEA,eAAA,CAAQ,KAAA,EAAR,EAAc,aAAA,EAAY,sBACxB,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MAED,WAAA,oBACCJ,cAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,kDAAA;AAAA,UACV,aAAA,EAAY,0BAAA;AAAA,UAEX,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,MAED,aAAA,oBACCA,cAAA;AAAA,QAACK,aAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,MAAA;AAAA,UACR,aAAA,EAAY,0BAAA;AAAA,UACX,GAAG,aAAA;AAAA,UACJ,SAAA,EAAWJ,QAAA;AAAA,YACT,4BAAA;AAAA,YACA,aAAA,CAAc;AAAA;AAChB;AAAA;AACF,KAAA,EAEJ,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,aAAA,CAAc,cAAc,OAAA,EAAS;AACvC,IAAA,MAAM,OACJ,QAAA,CAAS,aAAA,CAAc,YAAA,CAAa,QAAA,IAAY,MAAM,CAAA,IAAK,KAAA;AAE7D,IAAA,uBACED,cAAA,CAACM,kCAAA,EAAA,EACC,QAAA,kBAAAH,eAAA,CAACI,0BAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAP,cAAA,CAACQ,iCAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,sBACrCR,cAAA,CAACS,iCAAA,EAAA,EAAe,IAAA,EACb,QAAA,EAAA,aAAA,CAAc,aAAa,OAAA,EAC9B;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,WAAA;AACT;;;;","x_google_ignoreList":[0]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
- var HelpIcon = require('./HelpIcon-f8_h5Eap.js');
5
+ var HelpIcon = require('./HelpIcon-CFJ50mnY.js');
6
6
  var primitives_Label = require('./primitives/Label.js');
7
7
  var utils = require('./utils-BhM0B89p.js');
8
8
 
@@ -16,4 +16,4 @@ const Label = React.forwardRef(
16
16
  Label.displayName = "Label";
17
17
 
18
18
  exports.Label = Label;
19
- //# sourceMappingURL=Label-C8u4fXTy.js.map
19
+ //# sourceMappingURL=Label-D9LErMf5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Label-C8u4fXTy.js","sources":["../../src/components/Label/Label.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { HelpIcon, type HelpIconProps } from \"src/shared/HelpIcon\";\nimport { Label as PrimitiveLabel } from \"src/primitives/Label\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nexport type { HelpIconProps };\n\nexport interface LabelProps extends React.ComponentProps<\n typeof PrimitiveLabel\n> {\n /** Shows a red asterisk after the label text. */\n required?: boolean;\n /** Props for the help icon (tooltip or popover mode). */\n helpIconProps?: HelpIconProps;\n /** Additional CSS class names. */\n className?: string;\n}\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ required, helpIconProps, className, children, ...otherProps }, ref) => (\n <PrimitiveLabel ref={ref} className={cn(className)} {...otherProps}>\n {children}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n {helpIconProps && <HelpIcon {...helpIconProps} />}\n </PrimitiveLabel>\n )\n);\n\nLabel.displayName = \"Label\";\n\nexport { Label };\n"],"names":["forwardRef","jsxs","PrimitiveLabel","cn","jsx","HelpIcon"],"mappings":";;;;;;;;AAmBA,MAAM,KAAA,GAAQA,gBAAA;AAAA,EACZ,CAAC,EAAE,QAAA,EAAU,eAAe,SAAA,EAAW,QAAA,EAAU,GAAG,UAAA,EAAW,EAAG,GAAA,qBAChEC,eAAA,CAACC,0BAAe,GAAA,EAAU,SAAA,EAAWC,SAAG,SAAS,CAAA,EAAI,GAAG,UAAA,EACrD,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,4BACCC,cAAA,CAAC,MAAA,EAAA,EAAK,eAAY,MAAA,EAAO,SAAA,EAAU,oBAAmB,QAAA,EAAA,GAAA,EAEtD,CAAA;AAAA,IAED,aAAA,oBAAiBA,cAAA,CAACC,iBAAA,EAAA,EAAU,GAAG,aAAA,EAAe;AAAA,GAAA,EACjD;AAEJ;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;;;;"}
1
+ {"version":3,"file":"Label-D9LErMf5.js","sources":["../../src/components/Label/Label.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { HelpIcon, type HelpIconProps } from \"src/shared/HelpIcon\";\nimport { Label as PrimitiveLabel } from \"src/primitives/Label\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nexport type { HelpIconProps };\n\nexport interface LabelProps extends React.ComponentProps<\n typeof PrimitiveLabel\n> {\n /** Shows a red asterisk after the label text. */\n required?: boolean;\n /** Props for the help icon (tooltip or popover mode). */\n helpIconProps?: HelpIconProps;\n /** Additional CSS class names. */\n className?: string;\n}\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ required, helpIconProps, className, children, ...otherProps }, ref) => (\n <PrimitiveLabel ref={ref} className={cn(className)} {...otherProps}>\n {children}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n {helpIconProps && <HelpIcon {...helpIconProps} />}\n </PrimitiveLabel>\n )\n);\n\nLabel.displayName = \"Label\";\n\nexport { Label };\n"],"names":["forwardRef","jsxs","PrimitiveLabel","cn","jsx","HelpIcon"],"mappings":";;;;;;;;AAmBA,MAAM,KAAA,GAAQA,gBAAA;AAAA,EACZ,CAAC,EAAE,QAAA,EAAU,eAAe,SAAA,EAAW,QAAA,EAAU,GAAG,UAAA,EAAW,EAAG,GAAA,qBAChEC,eAAA,CAACC,0BAAe,GAAA,EAAU,SAAA,EAAWC,SAAG,SAAS,CAAA,EAAI,GAAG,UAAA,EACrD,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,4BACCC,cAAA,CAAC,MAAA,EAAA,EAAK,eAAY,MAAA,EAAO,SAAA,EAAU,oBAAmB,QAAA,EAAA,GAAA,EAEtD,CAAA;AAAA,IAED,aAAA,oBAAiBA,cAAA,CAACC,iBAAA,EAAA,EAAU,GAAG,aAAA,EAAe;AAAA,GAAA,EACjD;AAEJ;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;;;;"}
@@ -8,12 +8,28 @@ var utils = require('./utils-BhM0B89p.js');
8
8
  var i18n = require('i18next');
9
9
  var triangleAlert = require('./triangle-alert-CC-cck8p.js');
10
10
  var info = require('./info-DGfDptn1.js');
11
+ var check = require('./check-BQgcDXys.js');
12
+ var createLucideIcon = require('./createLucideIcon-D0tRgV6l.js');
11
13
  var x = require('./x-Brw3FJst.js');
12
14
 
13
15
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
16
 
15
17
  var i18n__default = /*#__PURE__*/_interopDefault(i18n);
16
18
 
19
+ /**
20
+ * @license lucide-react v0.577.0 - ISC
21
+ *
22
+ * This source code is licensed under the ISC license.
23
+ * See the LICENSE file in the root directory of this source tree.
24
+ */
25
+
26
+
27
+ const __iconNode = [
28
+ ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
29
+ ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
30
+ ];
31
+ const Copy = createLucideIcon.createLucideIcon("copy", __iconNode);
32
+
17
33
  const activeToasts = /* @__PURE__ */ new Set();
18
34
  function toastKey(type, message, buttonLabel) {
19
35
  if (typeof message !== "string") return null;
@@ -131,6 +147,7 @@ const ToastrBody = ({
131
147
  void 0
132
148
  );
133
149
  React.useEffect(() => () => clearTimeout(copiedTimeoutRef.current), []);
150
+ const copyLabel = isCopied ? t("neetoatoms.toastr.copied", "Copied!") : t("neetoatoms.toastr.copyMessage", "Copy this error message");
134
151
  const handleCopy = async () => {
135
152
  if (!copyableMessage || !await copyToClipboard(copyableMessage)) return;
136
153
  setIsCopied(true);
@@ -140,64 +157,69 @@ const ToastrBody = ({
140
157
  COPIED_FEEDBACK_DURATION_MS
141
158
  );
142
159
  };
143
- return /* @__PURE__ */ jsxRuntime.jsxs(
144
- "div",
145
- {
146
- role: type === "error" || type === "warning" ? "alert" : "status",
147
- "data-testid": `toastr-${type}-container`,
148
- className: utils.cn(
149
- "flex w-full items-center gap-3 rounded-md border px-4 py-3 text-sm shadow-lg",
150
- VARIANT_CLASSES[type]
151
- ),
152
- children: [
153
- showIcon && /* @__PURE__ */ jsxRuntime.jsx(
154
- Icon,
155
- {
156
- "aria-hidden": true,
157
- "data-testid": `${type}-toast-icon`,
158
- className: "size-4 shrink-0"
159
- }
160
- ),
161
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex-1", children: [
162
- message,
163
- copyableMessage && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
164
- " ",
165
- /* @__PURE__ */ jsxRuntime.jsx(
166
- "button",
167
- {
168
- type: "button",
169
- "data-testid": `toastr-${type}-copy-button`,
170
- className: "text-xs italic underline-offset-2 opacity-80 transition-opacity hover:underline hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
171
- onClick: handleCopy,
172
- children: isCopied ? t("neetoatoms.toastr.copied", "Copied!") : t("neetoatoms.toastr.copyMessage", "Copy this error message")
173
- }
174
- )
175
- ] })
176
- ] }),
177
- buttonLabel && /* @__PURE__ */ jsxRuntime.jsx(
178
- "button",
179
- {
180
- type: "button",
181
- onClick: onAction,
182
- "data-testid": `toastr-${type}-button`,
183
- className: "shrink-0 text-sm font-medium underline-offset-2 hover:underline",
184
- children: buttonLabel
185
- }
160
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
161
+ copyableMessage && /* @__PURE__ */ jsxRuntime.jsx("span", { role: "status", className: "sr-only", children: isCopied && t("neetoatoms.toastr.copied", "Copied!") }),
162
+ /* @__PURE__ */ jsxRuntime.jsxs(
163
+ "div",
164
+ {
165
+ role: type === "error" || type === "warning" ? "alert" : "status",
166
+ "data-testid": `toastr-${type}-container`,
167
+ className: utils.cn(
168
+ "flex w-full items-center gap-3 rounded-md border px-4 py-3 text-sm shadow-lg",
169
+ VARIANT_CLASSES[type]
186
170
  ),
187
- dismissible && /* @__PURE__ */ jsxRuntime.jsx(
188
- "button",
189
- {
190
- type: "button",
191
- "aria-label": "Dismiss",
192
- onClick: onDismiss,
193
- "data-testid": "toastr-close-button",
194
- className: "shrink-0 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
195
- children: /* @__PURE__ */ jsxRuntime.jsx(x.X, { "aria-hidden": true, className: "size-4" })
196
- }
197
- )
198
- ]
199
- }
200
- );
171
+ children: [
172
+ showIcon && /* @__PURE__ */ jsxRuntime.jsx(
173
+ Icon,
174
+ {
175
+ "aria-hidden": true,
176
+ "data-testid": `${type}-toast-icon`,
177
+ className: "size-4 shrink-0"
178
+ }
179
+ ),
180
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex-1", children: [
181
+ message,
182
+ copyableMessage && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
183
+ " ",
184
+ /* @__PURE__ */ jsxRuntime.jsx(
185
+ "button",
186
+ {
187
+ type: "button",
188
+ "aria-label": copyLabel,
189
+ "data-testid": `toastr-${type}-copy-button`,
190
+ title: copyLabel,
191
+ className: "-my-1 inline-flex rounded-sm p-1 align-middle opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
192
+ onClick: handleCopy,
193
+ children: isCopied ? /* @__PURE__ */ jsxRuntime.jsx(check.Check, { "aria-hidden": true, className: "size-4" }) : /* @__PURE__ */ jsxRuntime.jsx(Copy, { "aria-hidden": true, className: "size-4" })
194
+ }
195
+ )
196
+ ] })
197
+ ] }),
198
+ buttonLabel && /* @__PURE__ */ jsxRuntime.jsx(
199
+ "button",
200
+ {
201
+ type: "button",
202
+ onClick: onAction,
203
+ "data-testid": `toastr-${type}-button`,
204
+ className: "shrink-0 text-sm font-medium underline-offset-2 hover:underline",
205
+ children: buttonLabel
206
+ }
207
+ ),
208
+ dismissible && /* @__PURE__ */ jsxRuntime.jsx(
209
+ "button",
210
+ {
211
+ type: "button",
212
+ "aria-label": "Dismiss",
213
+ onClick: onDismiss,
214
+ "data-testid": "toastr-close-button",
215
+ className: "shrink-0 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
216
+ children: /* @__PURE__ */ jsxRuntime.jsx(x.X, { "aria-hidden": true, className: "size-4" })
217
+ }
218
+ )
219
+ ]
220
+ }
221
+ )
222
+ ] });
201
223
  };
202
224
 
203
225
  function showToast(type, message, config) {
@@ -272,4 +294,4 @@ const Toastr = {
272
294
  };
273
295
 
274
296
  exports.Toastr = Toastr;
275
- //# sourceMappingURL=Toastr-DgllCbfd.js.map
297
+ //# sourceMappingURL=Toastr-ByL66sV-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toastr-ByL66sV-.js","sources":["../../node_modules/lucide-react/dist/esm/icons/copy.js","../../src/components/Toastr/utils.ts","../../src/components/Toastr/ToastrBody.tsx","../../src/components/Toastr/Toastr.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n","import i18next from \"i18next\";\nimport { isValidElement, type ReactNode } from \"react\";\n\nimport type { ToastrConfig, ToastrErrorInput, ToastrMessage } from \"./Toastr\";\n\nconst activeToasts = new Set<string>();\n\nfunction toastKey(\n type: string,\n message: ReactNode,\n buttonLabel?: string\n): string | null {\n if (typeof message !== \"string\") return null;\n return `${type}::${message}::${buttonLabel ?? \"\"}`;\n}\n\nfunction getContentDir(): \"ltr\" | \"rtl\" {\n if (typeof document === \"undefined\") return \"ltr\";\n return (\n (document.documentElement.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n (document.body.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n \"ltr\"\n );\n}\n\n// A `noticeCode` payload carries the interpolation values the key expects\n// alongside it, e.g. `{ noticeCode: \"resource.clone\", entity: \"Form\" }` for\n// \"{{entity}} has been cloned successfully.\"\n//\n// `replace` scopes the payload to interpolation, so a backend field that\n// collides with an i18next option (`ns` forces a namespace and resolves the\n// key to nothing, `lng` forces a language) cannot alter key resolution.\n// `count` is the one option that still has to be promoted, since pluralised\n// keys resolve their `_one`/`_other` suffix from it.\nfunction translateNoticeCode(\n noticeCode: string,\n values: Record<string, unknown>\n): string {\n return i18next.t(noticeCode, { count: values.count, replace: values });\n}\n\nfunction resolveMessage(message: ToastrMessage): ReactNode {\n if (typeof message === \"string\") return message;\n if (isValidElement(message)) return message;\n // Arrays of ReactNodes (e.g. [<a/>, \" \", <b/>]) render natively via {message}.\n if (Array.isArray(message)) return message;\n if (message && typeof message === \"object\") {\n const obj = message as {\n noticeCode?: string;\n customMessage?: string;\n notice?: string;\n };\n if (obj.customMessage) return obj.customMessage;\n if (obj.notice) return obj.notice;\n if (obj.noticeCode) {\n return translateNoticeCode(\n obj.noticeCode,\n obj as Record<string, unknown>\n );\n }\n }\n return String(message);\n}\n\nfunction resolveErrorMessage(errorObject: ToastrErrorInput): ReactNode {\n if (typeof errorObject === \"string\") return errorObject;\n\n if (errorObject && typeof errorObject === \"object\") {\n // Axios-style error\n const axiosLike = errorObject as {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n };\n\n if (axiosLike.response?.data) {\n const data = axiosLike.response.data;\n // Not stringified: callers pass React elements here to embed links in an\n // error toast, and the copy affordance already skips non-string messages.\n if (data.customMessage) return data.customMessage as ReactNode;\n if (data.error) return String(data.error);\n if (Array.isArray(data.errors)) return data.errors.join(\"\\n\");\n if (data.noticeCode)\n return translateNoticeCode(String(data.noticeCode), data);\n if (Array.isArray(data.errorCodes)) {\n const message = data.errorCodes\n .filter((code): code is string => typeof code === \"string\")\n .map(code => translateNoticeCode(code, data))\n .join(\"\\n\");\n\n if (message) return message;\n }\n }\n\n if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;\n\n // Native Error\n if (errorObject instanceof Error) return errorObject.message;\n\n // ToastrMessage (string, React element, array, or notice-shape object)\n return resolveMessage(errorObject as ToastrMessage);\n }\n\n return \"Something went wrong.\";\n}\n\nasync function copyToClipboard(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n\n return true;\n } catch {\n // Clipboard API is unavailable in insecure contexts; fall back to execCommand.\n try {\n const textArea = document.createElement(\"textarea\");\n textArea.value = text;\n textArea.style.position = \"fixed\";\n textArea.style.opacity = \"0\";\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n const isCopied = document.execCommand(\"copy\");\n textArea.remove();\n\n return isCopied;\n } catch {\n return false;\n }\n }\n}\n\nfunction parseConfig(args: unknown[]): ToastrConfig {\n if (args.length === 0) return {};\n\n const first = args[0];\n if (typeof first === \"object\" && first !== null && !Array.isArray(first)) {\n return first as ToastrConfig;\n }\n\n // Legacy positional args: buttonLabel, onClick, customConfig, showIcon\n const [buttonLabel, onClick, customConfig, showIcon] = args as [\n string?,\n (() => void)?,\n Record<string, unknown>?,\n boolean?,\n ];\n\n return {\n ...(buttonLabel ? { buttonLabel } : {}),\n ...(onClick ? { onClick } : {}),\n ...(showIcon !== undefined ? { showIcon } : {}),\n ...(customConfig ?? {}),\n };\n}\n\nexport {\n activeToasts,\n copyToClipboard,\n getContentDir,\n parseConfig,\n resolveErrorMessage,\n resolveMessage,\n toastKey,\n};\n","import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n CheckIcon,\n CircleCheckIcon,\n CopyIcon,\n InfoIcon,\n OctagonXIcon,\n TriangleAlertIcon,\n XIcon,\n type LucideIcon,\n} from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { copyToClipboard } from \"./utils\";\n\ntype ToastrType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nconst ICONS: Record<ToastrType, LucideIcon> = {\n success: CircleCheckIcon,\n info: InfoIcon,\n warning: TriangleAlertIcon,\n error: OctagonXIcon,\n};\n\nconst VARIANT_CLASSES: Record<ToastrType, string> = {\n success:\n \"bg-success-solid text-success-solid-foreground border-success-solid/30\",\n error: \"bg-error-solid text-error-solid-foreground border-error-solid/30\",\n warning:\n \"bg-warning-solid text-warning-solid-foreground border-warning-solid/30\",\n info: \"bg-info-solid text-info-solid-foreground border-info-solid/30\",\n};\n\nexport interface ToastrBodyProps {\n type: ToastrType;\n message: ReactNode;\n /** Plain-text version of the message; renders a copy-to-clipboard affordance when set. */\n copyableMessage?: string;\n showIcon?: boolean;\n dismissible?: boolean;\n buttonLabel?: string;\n onAction?: () => void;\n onDismiss: () => void;\n}\n\nconst COPIED_FEEDBACK_DURATION_MS = 2000;\n\nconst ToastrBody = ({\n type,\n message,\n copyableMessage,\n showIcon = true,\n dismissible = true,\n buttonLabel,\n onAction,\n onDismiss,\n}: ToastrBodyProps) => {\n const Icon = ICONS[type];\n const { t } = useTranslation();\n const [isCopied, setIsCopied] = useState(false);\n const copiedTimeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined\n );\n\n useEffect(() => () => clearTimeout(copiedTimeoutRef.current), []);\n\n const copyLabel = isCopied\n ? t(\"neetoatoms.toastr.copied\", \"Copied!\")\n : t(\"neetoatoms.toastr.copyMessage\", \"Copy this error message\");\n\n const handleCopy = async () => {\n if (!copyableMessage || !(await copyToClipboard(copyableMessage))) return;\n\n setIsCopied(true);\n clearTimeout(copiedTimeoutRef.current);\n copiedTimeoutRef.current = setTimeout(\n () => setIsCopied(false),\n COPIED_FEEDBACK_DURATION_MS\n );\n };\n\n return (\n <>\n {/* Sits outside the alert so the confirmation doesn't re-announce the whole message. */}\n {copyableMessage && (\n <span role=\"status\" className=\"sr-only\">\n {isCopied && t(\"neetoatoms.toastr.copied\", \"Copied!\")}\n </span>\n )}\n <div\n role={type === \"error\" || type === \"warning\" ? \"alert\" : \"status\"}\n data-testid={`toastr-${type}-container`}\n className={cn(\n \"flex w-full items-center gap-3 rounded-md border px-4 py-3 text-sm shadow-lg\",\n VARIANT_CLASSES[type]\n )}\n >\n {showIcon && (\n <Icon\n aria-hidden\n data-testid={`${type}-toast-icon`}\n className=\"size-4 shrink-0\"\n />\n )}\n <span className=\"flex-1\">\n {message}\n {copyableMessage && (\n <>\n {\" \"}\n <button\n type=\"button\"\n aria-label={copyLabel}\n data-testid={`toastr-${type}-copy-button`}\n title={copyLabel}\n className=\"-my-1 inline-flex rounded-sm p-1 align-middle opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n onClick={handleCopy}\n >\n {isCopied ? (\n <CheckIcon aria-hidden className=\"size-4\" />\n ) : (\n <CopyIcon aria-hidden className=\"size-4\" />\n )}\n </button>\n </>\n )}\n </span>\n {buttonLabel && (\n <button\n type=\"button\"\n onClick={onAction}\n data-testid={`toastr-${type}-button`}\n className=\"shrink-0 text-sm font-medium underline-offset-2 hover:underline\"\n >\n {buttonLabel}\n </button>\n )}\n {dismissible && (\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={onDismiss}\n data-testid=\"toastr-close-button\"\n className=\"shrink-0 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n >\n <XIcon aria-hidden className=\"size-4\" />\n </button>\n )}\n </div>\n </>\n );\n};\n\nexport { ToastrBody };\n","import type { ReactNode } from \"react\";\nimport { toast } from \"sonner\";\n\nimport { ToastrBody } from \"./ToastrBody\";\nimport {\n activeToasts,\n getContentDir,\n parseConfig,\n resolveErrorMessage,\n resolveMessage,\n toastKey,\n} from \"./utils\";\n\nexport interface ToastrConfig {\n /** Label for an action button inside the toast. */\n buttonLabel?: string;\n /** Callback when the action button is clicked. */\n onClick?: () => void;\n /** Whether to show the type icon in the toast. */\n showIcon?: boolean;\n /** Whether the toast can be dismissed (shows X button + enables swipe). Defaults to true. */\n dismissible?: boolean;\n /** Whether to show the copy-to-clipboard affordance in error toasts. Defaults to true. */\n showCopyButton?: boolean;\n /** Additional sonner toast options (duration, position, etc.). */\n [key: string]: unknown;\n}\n\nexport type ToastrMessage =\n | ReactNode\n | { noticeCode?: string; customMessage?: string; notice?: string };\n\nexport type ToastrErrorInput =\n | string\n | Error\n | {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n }\n | ToastrMessage;\n\ntype SonnerType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nfunction showToast(\n type: SonnerType,\n message: ReactNode,\n config?: ToastrConfig\n): string | number | undefined {\n const {\n buttonLabel,\n onClick,\n showIcon,\n dismissible = true,\n showCopyButton = true,\n onDismiss: userOnDismiss,\n onAutoClose: userOnAutoClose,\n ...restConfig\n } = config ?? {};\n\n const key = toastKey(type, message, buttonLabel);\n\n if (key !== null && activeToasts.has(key)) return undefined;\n if (key !== null) activeToasts.add(key);\n\n // Error toasts stay until dismissed so the message can be read and copied.\n const options: Record<string, unknown> = {\n ...(type === \"error\" && { duration: Infinity }),\n ...restConfig,\n position: getContentDir() === \"rtl\" ? \"bottom-right\" : \"bottom-left\",\n dismissible,\n onDismiss: (t: unknown) => {\n if (key !== null) activeToasts.delete(key);\n (userOnDismiss as ((t: unknown) => void) | undefined)?.(t);\n },\n onAutoClose: (t: unknown) => {\n if (key !== null) activeToasts.delete(key);\n (userOnAutoClose as ((t: unknown) => void) | undefined)?.(t);\n },\n };\n\n const copyableMessage =\n showCopyButton && type === \"error\" && typeof message === \"string\"\n ? message\n : undefined;\n\n return toast.custom(\n id => (\n <ToastrBody\n buttonLabel={buttonLabel}\n copyableMessage={copyableMessage}\n dismissible={dismissible}\n message={message}\n showIcon={showIcon}\n type={type}\n onAction={() => {\n try {\n onClick?.();\n } finally {\n toast.dismiss(id);\n }\n }}\n onDismiss={() => toast.dismiss(id)}\n />\n ),\n options\n );\n}\n\nconst Toastr = {\n success(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"success\", resolveMessage(message), parseConfig(args));\n },\n\n info(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n show(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n warning(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"warning\", resolveMessage(message), parseConfig(args));\n },\n\n error(errorObject: ToastrErrorInput, ...args: unknown[]) {\n const msg = resolveErrorMessage(errorObject);\n return showToast(\"error\", msg, parseConfig(args));\n },\n};\n\nexport { Toastr };\n"],"names":["createLucideIcon","i18next","isValidElement","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","useTranslation","useState","useRef","useEffect","jsxs","Fragment","jsx","cn","CheckIcon","CopyIcon","XIcon","toast"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAM,UAAU,GAAG;AACnB,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC1F,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,yDAAyD,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC1F,CAAC;AACD,MAAM,IAAI,GAAGA,iCAAgB,CAAC,MAAM,EAAE,UAAU,CAAC;;ACRjD,MAAM,YAAA,uBAAmB,GAAA,EAAY;AAErC,SAAS,QAAA,CACP,IAAA,EACA,OAAA,EACA,WAAA,EACe;AACf,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,IAAA;AACxC,EAAA,OAAO,GAAG,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,EAAA,EAAK,eAAe,EAAE,CAAA,CAAA;AAClD;AAEA,SAAS,aAAA,GAA+B;AACtC,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,KAAA;AAC5C,EAAA,OACG,QAAA,CAAS,gBAAgB,YAAA,CAAa,KAAK,KAC3C,QAAA,CAAS,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA,IACjC,KAAA;AAEJ;AAWA,SAAS,mBAAA,CACP,YACA,MAAA,EACQ;AACR,EAAA,OAAOC,qBAAA,CAAQ,EAAE,UAAA,EAAY,EAAE,OAAO,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,CAAA;AACvE;AAEA,SAAS,eAAe,OAAA,EAAmC;AACzD,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,EAAA,IAAIC,oBAAA,CAAe,OAAO,CAAA,EAAG,OAAO,OAAA;AAEpC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,OAAA;AACnC,EAAA,IAAI,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC1C,IAAA,MAAM,GAAA,GAAM,OAAA;AAKZ,IAAA,IAAI,GAAA,CAAI,aAAA,EAAe,OAAO,GAAA,CAAI,aAAA;AAClC,IAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,OAAO,GAAA,CAAI,MAAA;AAC3B,IAAA,IAAI,IAAI,UAAA,EAAY;AAClB,MAAA,OAAO,mBAAA;AAAA,QACL,GAAA,CAAI,UAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAO,OAAO,CAAA;AACvB;AAEA,SAAS,oBAAoB,WAAA,EAA0C;AACrE,EAAA,IAAI,OAAO,WAAA,KAAgB,QAAA,EAAU,OAAO,WAAA;AAE5C,EAAA,IAAI,WAAA,IAAe,OAAO,WAAA,KAAgB,QAAA,EAAU;AAElD,IAAA,MAAM,SAAA,GAAY,WAAA;AAMlB,IAAA,IAAI,SAAA,CAAU,UAAU,IAAA,EAAM;AAC5B,MAAA,MAAM,IAAA,GAAO,UAAU,QAAA,CAAS,IAAA;AAGhC,MAAA,IAAI,IAAA,CAAK,aAAA,EAAe,OAAO,IAAA,CAAK,aAAA;AACpC,MAAA,IAAI,IAAA,CAAK,KAAA,EAAO,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA;AACxC,MAAA,IAAI,KAAA,CAAM,QAAQ,IAAA,CAAK,MAAM,GAAG,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC5D,MAAA,IAAI,IAAA,CAAK,UAAA;AACP,QAAA,OAAO,mBAAA,CAAoB,MAAA,CAAO,IAAA,CAAK,UAAU,GAAG,IAAI,CAAA;AAC1D,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG;AAClC,QAAA,MAAM,UAAU,IAAA,CAAK,UAAA,CAClB,OAAO,CAAC,IAAA,KAAyB,OAAO,IAAA,KAAS,QAAQ,CAAA,CACzD,GAAA,CAAI,UAAQ,mBAAA,CAAoB,IAAA,EAAM,IAAI,CAAC,CAAA,CAC3C,KAAK,IAAI,CAAA;AAEZ,QAAA,IAAI,SAAS,OAAO,OAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,CAAU,YAAA,IAAgB,SAAA,CAAU,OAAA,SAAgB,SAAA,CAAU,OAAA;AAGlE,IAAA,IAAI,WAAA,YAAuB,KAAA,EAAO,OAAO,WAAA,CAAY,OAAA;AAGrD,IAAA,OAAO,eAAe,WAA4B,CAAA;AAAA,EACpD;AAEA,EAAA,OAAO,uBAAA;AACT;AAEA,eAAe,gBAAgB,IAAA,EAAgC;AAC7D,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AAExC,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AAEN,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,MAAA,QAAA,CAAS,KAAA,GAAQ,IAAA;AACjB,MAAA,QAAA,CAAS,MAAM,QAAA,GAAW,OAAA;AAC1B,MAAA,QAAA,CAAS,MAAM,OAAA,GAAU,GAAA;AACzB,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,QAAQ,CAAA;AAClC,MAAA,QAAA,CAAS,KAAA,EAAM;AACf,MAAA,QAAA,CAAS,MAAA,EAAO;AAEhB,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,WAAA,CAAY,MAAM,CAAA;AAC5C,MAAA,QAAA,CAAS,MAAA,EAAO;AAEhB,MAAA,OAAO,QAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,YAAY,IAAA,EAA+B;AAClD,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAE/B,EAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxE,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,MAAM,CAAC,WAAA,EAAa,OAAA,EAAS,YAAA,EAAc,QAAQ,CAAA,GAAI,IAAA;AAOvD,EAAA,OAAO;AAAA,IACL,GAAI,WAAA,GAAc,EAAE,WAAA,KAAgB,EAAC;AAAA,IACrC,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY,EAAC;AAAA,IAC7B,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,KAAa,EAAC;AAAA,IAC7C,GAAI,gBAAgB;AAAC,GACvB;AACF;;ACvIA,MAAM,KAAA,GAAwC;AAAA,EAC5C,OAAA,EAASC,iBAAA;AAAA,EACT,IAAA,EAAMC,SAAA;AAAA,EACN,OAAA,EAASC,2BAAA;AAAA,EACT,KAAA,EAAOC;AACT,CAAA;AAEA,MAAM,eAAA,GAA8C;AAAA,EAClD,OAAA,EACE,wEAAA;AAAA,EACF,KAAA,EAAO,kEAAA;AAAA,EACP,OAAA,EACE,wEAAA;AAAA,EACF,IAAA,EAAM;AACR,CAAA;AAcA,MAAM,2BAAA,GAA8B,GAAA;AAEpC,MAAM,aAAa,CAAC;AAAA,EAClB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAuB;AACrB,EAAA,MAAM,IAAA,GAAO,MAAM,IAAI,CAAA;AACvB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAIC,2BAAA,EAAe;AAC7B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,gBAAA,GAAmBC,YAAA;AAAA,IACvB;AAAA,GACF;AAEA,EAAAC,eAAA,CAAU,MAAM,MAAM,YAAA,CAAa,iBAAiB,OAAO,CAAA,EAAG,EAAE,CAAA;AAEhE,EAAA,MAAM,SAAA,GAAY,WACd,CAAA,CAAE,0BAAA,EAA4B,SAAS,CAAA,GACvC,CAAA,CAAE,iCAAiC,yBAAyB,CAAA;AAEhE,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,IAAI,CAAC,eAAA,IAAmB,CAAE,MAAM,eAAA,CAAgB,eAAe,CAAA,EAAI;AAEnE,IAAA,WAAA,CAAY,IAAI,CAAA;AAChB,IAAA,YAAA,CAAa,iBAAiB,OAAO,CAAA;AACrC,IAAA,gBAAA,CAAiB,OAAA,GAAU,UAAA;AAAA,MACzB,MAAM,YAAY,KAAK,CAAA;AAAA,MACvB;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EAEG,QAAA,EAAA;AAAA,IAAA,eAAA,oBACCC,cAAA,CAAC,MAAA,EAAA,EAAK,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,WAC3B,QAAA,EAAA,QAAA,IAAY,CAAA,CAAE,0BAAA,EAA4B,SAAS,CAAA,EACtD,CAAA;AAAA,oBAEFF,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,YAAY,OAAA,GAAU,QAAA;AAAA,QACzD,aAAA,EAAa,UAAU,IAAI,CAAA,UAAA,CAAA;AAAA,QAC3B,SAAA,EAAWG,QAAA;AAAA,UACT,8EAAA;AAAA,UACA,gBAAgB,IAAI;AAAA,SACtB;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,QAAA,oBACCD,cAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAW,IAAA;AAAA,cACX,aAAA,EAAa,GAAG,IAAI,CAAA,WAAA,CAAA;AAAA,cACpB,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BAEFF,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,YAAA,OAAA;AAAA,YACA,mCACCA,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,8BACDC,cAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,YAAA,EAAY,SAAA;AAAA,kBACZ,aAAA,EAAa,UAAU,IAAI,CAAA,YAAA,CAAA;AAAA,kBAC3B,KAAA,EAAO,SAAA;AAAA,kBACP,SAAA,EAAU,4KAAA;AAAA,kBACV,OAAA,EAAS,UAAA;AAAA,kBAER,QAAA,EAAA,QAAA,mBACCA,cAAA,CAACE,WAAA,EAAA,EAAU,aAAA,EAAW,IAAA,EAAC,SAAA,EAAU,QAAA,EAAS,CAAA,mBAE1CF,cAAA,CAACG,IAAA,EAAA,EAAS,aAAA,EAAW,IAAA,EAAC,WAAU,QAAA,EAAS;AAAA;AAAA;AAE7C,aAAA,EACF;AAAA,WAAA,EAEJ,CAAA;AAAA,UACC,WAAA,oBACCH,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,QAAA;AAAA,cACT,aAAA,EAAa,UAAU,IAAI,CAAA,OAAA,CAAA;AAAA,cAC3B,SAAA,EAAU,iEAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAED,WAAA,oBACCA,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAW,SAAA;AAAA,cACX,OAAA,EAAS,SAAA;AAAA,cACT,aAAA,EAAY,qBAAA;AAAA,cACZ,SAAA,EAAU,kJAAA;AAAA,cAEV,QAAA,kBAAAA,cAAA,CAACI,GAAA,EAAA,EAAM,aAAA,EAAW,IAAA,EAAC,WAAU,QAAA,EAAS;AAAA;AAAA;AACxC;AAAA;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ,CAAA;;AC5GA,SAAS,SAAA,CACP,IAAA,EACA,OAAA,EACA,MAAA,EAC6B;AAC7B,EAAA,MAAM;AAAA,IACJ,WAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA,GAAc,IAAA;AAAA,IACd,cAAA,GAAiB,IAAA;AAAA,IACjB,SAAA,EAAW,aAAA;AAAA,IACX,WAAA,EAAa,eAAA;AAAA,IACb,GAAG;AAAA,GACL,GAAI,UAAU,EAAC;AAEf,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,IAAA,EAAM,OAAA,EAAS,WAAW,CAAA;AAE/C,EAAA,IAAI,QAAQ,IAAA,IAAQ,YAAA,CAAa,GAAA,CAAI,GAAG,GAAG,OAAO,MAAA;AAClD,EAAA,IAAI,GAAA,KAAQ,IAAA,EAAM,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAGtC,EAAA,MAAM,OAAA,GAAmC;AAAA,IACvC,GAAI,IAAA,KAAS,OAAA,IAAW,EAAE,UAAU,QAAA,EAAS;AAAA,IAC7C,GAAG,UAAA;AAAA,IACH,QAAA,EAAU,aAAA,EAAc,KAAM,KAAA,GAAQ,cAAA,GAAiB,aAAA;AAAA,IACvD,WAAA;AAAA,IACA,SAAA,EAAW,CAAC,CAAA,KAAe;AACzB,MAAA,IAAI,GAAA,KAAQ,IAAA,EAAM,YAAA,CAAa,MAAA,CAAO,GAAG,CAAA;AACzC,MAAC,gBAAuD,CAAC,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,WAAA,EAAa,CAAC,CAAA,KAAe;AAC3B,MAAA,IAAI,GAAA,KAAQ,IAAA,EAAM,YAAA,CAAa,MAAA,CAAO,GAAG,CAAA;AACzC,MAAC,kBAAyD,CAAC,CAAA;AAAA,IAC7D;AAAA,GACF;AAEA,EAAA,MAAM,kBACJ,cAAA,IAAkB,IAAA,KAAS,WAAW,OAAO,OAAA,KAAY,WACrD,OAAA,GACA,MAAA;AAEN,EAAA,OAAOC,WAAA,CAAM,MAAA;AAAA,IACX,CAAA,EAAA,qBACEL,cAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,WAAA;AAAA,QACA,eAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAA;AAAA,QACA,UAAU,MAAM;AACd,UAAA,IAAI;AACF,YAAA,OAAA,IAAU;AAAA,UACZ,CAAA,SAAE;AACA,YAAAK,WAAA,CAAM,QAAQ,EAAE,CAAA;AAAA,UAClB;AAAA,QACF,CAAA;AAAA,QACA,SAAA,EAAW,MAAMA,WAAA,CAAM,OAAA,CAAQ,EAAE;AAAA;AAAA,KACnC;AAAA,IAEF;AAAA,GACF;AACF;AAEA,MAAM,MAAA,GAAS;AAAA,EACb,OAAA,CAAQ,YAA2B,IAAA,EAAiB;AAClD,IAAA,OAAO,UAAU,SAAA,EAAW,cAAA,CAAe,OAAO,CAAA,EAAG,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,EACxE,CAAA;AAAA,EAEA,IAAA,CAAK,YAA2B,IAAA,EAAiB;AAC/C,IAAA,OAAO,UAAU,MAAA,EAAQ,cAAA,CAAe,OAAO,CAAA,EAAG,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,EACrE,CAAA;AAAA,EAEA,IAAA,CAAK,YAA2B,IAAA,EAAiB;AAC/C,IAAA,OAAO,UAAU,MAAA,EAAQ,cAAA,CAAe,OAAO,CAAA,EAAG,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,EACrE,CAAA;AAAA,EAEA,OAAA,CAAQ,YAA2B,IAAA,EAAiB;AAClD,IAAA,OAAO,UAAU,SAAA,EAAW,cAAA,CAAe,OAAO,CAAA,EAAG,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,EACxE,CAAA;AAAA,EAEA,KAAA,CAAM,gBAAkC,IAAA,EAAiB;AACvD,IAAA,MAAM,GAAA,GAAM,oBAAoB,WAAW,CAAA;AAC3C,IAAA,OAAO,SAAA,CAAU,OAAA,EAAS,GAAA,EAAK,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,EAClD;AACF;;;;","x_google_ignoreList":[0]}
@@ -20,7 +20,7 @@ require('react-dom');
20
20
  require('../fieldIds-DiVU6GVS.js');
21
21
  require('../hyphenize-BTrVNVv3.js');
22
22
  require('../primitives/Field.js');
23
- require('../HelpIcon-f8_h5Eap.js');
23
+ require('../HelpIcon-CFJ50mnY.js');
24
24
  require('../primitives/Tooltip.js');
25
25
  require('../tooltip-BFE6UArF.js');
26
26
  require('../index-Bvu9MiFi.js');
@@ -38,7 +38,7 @@ require('../fieldIds-DiVU6GVS.js');
38
38
  require('../hyphenize-BTrVNVv3.js');
39
39
  require('../primitives/Button.js');
40
40
  require('../primitives/Field.js');
41
- require('../HelpIcon-f8_h5Eap.js');
41
+ require('../HelpIcon-CFJ50mnY.js');
42
42
  require('../primitives/Tooltip.js');
43
43
  require('../tooltip-BFE6UArF.js');
44
44
  require('../index-CB9xFokC.js');