@flipdish/ui-library 0.16.1 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/components/atoms/BackgroundPattern/components/grid-check.cjs +2 -1
  2. package/dist/components/atoms/BackgroundPattern/components/grid-check.cjs.map +1 -1
  3. package/dist/components/atoms/BackgroundPattern/components/grid-check.d.ts.map +1 -1
  4. package/dist/components/atoms/BackgroundPattern/components/grid-check.js +2 -1
  5. package/dist/components/atoms/BackgroundPattern/components/grid-check.js.map +1 -1
  6. package/dist/components/atoms/BackgroundPattern/index.cjs +4 -1
  7. package/dist/components/atoms/BackgroundPattern/index.cjs.map +1 -1
  8. package/dist/components/atoms/BackgroundPattern/index.d.ts +8 -3
  9. package/dist/components/atoms/BackgroundPattern/index.d.ts.map +1 -1
  10. package/dist/components/atoms/BackgroundPattern/index.js +4 -1
  11. package/dist/components/atoms/BackgroundPattern/index.js.map +1 -1
  12. package/dist/components/molecules/EmptyState/index.cjs +4 -1
  13. package/dist/components/molecules/EmptyState/index.cjs.map +1 -1
  14. package/dist/components/molecules/EmptyState/index.d.ts.map +1 -1
  15. package/dist/components/molecules/EmptyState/index.js +4 -1
  16. package/dist/components/molecules/EmptyState/index.js.map +1 -1
  17. package/dist/components/molecules/Pagination/index.cjs +2 -2
  18. package/dist/components/molecules/Pagination/index.cjs.map +1 -1
  19. package/dist/components/molecules/Pagination/index.d.ts +1 -1
  20. package/dist/components/molecules/Pagination/index.d.ts.map +1 -1
  21. package/dist/components/molecules/Pagination/index.js +2 -2
  22. package/dist/components/molecules/Pagination/index.js.map +1 -1
  23. package/dist/components/organisms/Calendar/calendar.utils.cjs +16 -0
  24. package/dist/components/organisms/Calendar/calendar.utils.cjs.map +1 -0
  25. package/dist/components/organisms/Calendar/calendar.utils.d.ts +6 -0
  26. package/dist/components/organisms/Calendar/calendar.utils.d.ts.map +1 -0
  27. package/dist/components/organisms/Calendar/calendar.utils.js +14 -0
  28. package/dist/components/organisms/Calendar/calendar.utils.js.map +1 -0
  29. package/dist/components/organisms/Calendar/components/calendar-header.cjs +2 -1
  30. package/dist/components/organisms/Calendar/components/calendar-header.cjs.map +1 -1
  31. package/dist/components/organisms/Calendar/components/calendar-header.d.ts.map +1 -1
  32. package/dist/components/organisms/Calendar/components/calendar-header.js +2 -1
  33. package/dist/components/organisms/Calendar/components/calendar-header.js.map +1 -1
  34. package/dist/components/organisms/Calendar/index.cjs +13 -7
  35. package/dist/components/organisms/Calendar/index.cjs.map +1 -1
  36. package/dist/components/organisms/Calendar/index.d.ts.map +1 -1
  37. package/dist/components/organisms/Calendar/index.js +13 -7
  38. package/dist/components/organisms/Calendar/index.js.map +1 -1
  39. package/dist/components/organisms/Charts/components/charts-base.cjs +4 -0
  40. package/dist/components/organisms/Charts/components/charts-base.cjs.map +1 -1
  41. package/dist/components/organisms/Charts/components/charts-base.d.ts.map +1 -1
  42. package/dist/components/organisms/Charts/components/charts-base.js +4 -0
  43. package/dist/components/organisms/Charts/components/charts-base.js.map +1 -1
  44. package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.cjs +6 -0
  45. package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.cjs.map +1 -1
  46. package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.d.ts.map +1 -1
  47. package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.js +6 -0
  48. package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.js.map +1 -1
  49. package/dist/components/organisms/HeaderNavigation/components/nav-account-card.cjs.map +1 -1
  50. package/dist/components/organisms/HeaderNavigation/components/nav-account-card.d.ts.map +1 -1
  51. package/dist/components/organisms/HeaderNavigation/components/nav-account-card.js.map +1 -1
  52. package/dist/components/organisms/HeaderNavigation/components/nav-list.cjs +4 -2
  53. package/dist/components/organisms/HeaderNavigation/components/nav-list.cjs.map +1 -1
  54. package/dist/components/organisms/HeaderNavigation/components/nav-list.d.ts.map +1 -1
  55. package/dist/components/organisms/HeaderNavigation/components/nav-list.js +4 -2
  56. package/dist/components/organisms/HeaderNavigation/components/nav-list.js.map +1 -1
  57. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.cjs +3 -3
  58. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.cjs.map +1 -1
  59. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.d.ts +3 -1
  60. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.d.ts.map +1 -1
  61. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.js +3 -3
  62. package/dist/components/organisms/SidebarNavigation/components/nav-account-card.js.map +1 -1
  63. package/dist/components/organisms/SidebarNavigation/components/nav-button.cjs +10 -2
  64. package/dist/components/organisms/SidebarNavigation/components/nav-button.cjs.map +1 -1
  65. package/dist/components/organisms/SidebarNavigation/components/nav-button.d.ts +4 -2
  66. package/dist/components/organisms/SidebarNavigation/components/nav-button.d.ts.map +1 -1
  67. package/dist/components/organisms/SidebarNavigation/components/nav-button.js +12 -4
  68. package/dist/components/organisms/SidebarNavigation/components/nav-button.js.map +1 -1
  69. package/dist/components/organisms/SidebarNavigation/components/nav-item.cjs +6 -1
  70. package/dist/components/organisms/SidebarNavigation/components/nav-item.cjs.map +1 -1
  71. package/dist/components/organisms/SidebarNavigation/components/nav-item.d.ts +2 -2
  72. package/dist/components/organisms/SidebarNavigation/components/nav-item.d.ts.map +1 -1
  73. package/dist/components/organisms/SidebarNavigation/components/nav-item.js +7 -2
  74. package/dist/components/organisms/SidebarNavigation/components/nav-item.js.map +1 -1
  75. package/dist/components/organisms/SidebarNavigation/components/nav-list.cjs +6 -2
  76. package/dist/components/organisms/SidebarNavigation/components/nav-list.cjs.map +1 -1
  77. package/dist/components/organisms/SidebarNavigation/components/nav-list.d.ts.map +1 -1
  78. package/dist/components/organisms/SidebarNavigation/components/nav-list.js +6 -2
  79. package/dist/components/organisms/SidebarNavigation/components/nav-list.js.map +1 -1
  80. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.cjs +15 -0
  81. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.cjs.map +1 -0
  82. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.d.ts +13 -0
  83. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.d.ts.map +1 -0
  84. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.js +13 -0
  85. package/dist/components/organisms/SidebarNavigation/components/nav-section-toggle.js.map +1 -0
  86. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.cjs +7 -2
  87. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.cjs.map +1 -1
  88. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.d.ts.map +1 -1
  89. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.js +7 -2
  90. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.js.map +1 -1
  91. package/dist/components/organisms/SidebarNavigation/index.cjs +26 -6
  92. package/dist/components/organisms/SidebarNavigation/index.cjs.map +1 -1
  93. package/dist/components/organisms/SidebarNavigation/index.d.ts +1 -0
  94. package/dist/components/organisms/SidebarNavigation/index.d.ts.map +1 -1
  95. package/dist/components/organisms/SidebarNavigation/index.js +26 -6
  96. package/dist/components/organisms/SidebarNavigation/index.js.map +1 -1
  97. package/dist/components/organisms/SidebarNavigation/sidebarNavigation.types.d.ts +20 -0
  98. package/dist/components/organisms/SidebarNavigation/sidebarNavigation.types.d.ts.map +1 -1
  99. package/dist/components/organisms/TextEditor/components/text-editor-extensions.cjs +19 -2
  100. package/dist/components/organisms/TextEditor/components/text-editor-extensions.cjs.map +1 -1
  101. package/dist/components/organisms/TextEditor/components/text-editor-extensions.d.ts.map +1 -1
  102. package/dist/components/organisms/TextEditor/components/text-editor-extensions.js +19 -2
  103. package/dist/components/organisms/TextEditor/components/text-editor-extensions.js.map +1 -1
  104. package/dist/components/organisms/TextEditor/index.cjs +24 -5
  105. package/dist/components/organisms/TextEditor/index.cjs.map +1 -1
  106. package/dist/components/organisms/TextEditor/index.d.ts.map +1 -1
  107. package/dist/components/organisms/TextEditor/index.js +24 -5
  108. package/dist/components/organisms/TextEditor/index.js.map +1 -1
  109. package/dist/components/organisms/TextEditor/textEditor.utils.cjs +32 -0
  110. package/dist/components/organisms/TextEditor/textEditor.utils.cjs.map +1 -0
  111. package/dist/components/organisms/TextEditor/textEditor.utils.d.ts +14 -0
  112. package/dist/components/organisms/TextEditor/textEditor.utils.d.ts.map +1 -0
  113. package/dist/components/organisms/TextEditor/textEditor.utils.js +29 -0
  114. package/dist/components/organisms/TextEditor/textEditor.utils.js.map +1 -0
  115. package/dist/hooks/useClipboard/index.cjs +10 -3
  116. package/dist/hooks/useClipboard/index.cjs.map +1 -1
  117. package/dist/hooks/useClipboard/index.d.ts.map +1 -1
  118. package/dist/hooks/useClipboard/index.js +10 -3
  119. package/dist/hooks/useClipboard/index.js.map +1 -1
  120. package/package.json +6 -6
@@ -0,0 +1,29 @@
1
+ const ALLOWED_LINK_PROTOCOLS = ['http:', 'https:', 'mailto:', 'tel:'];
2
+ // Tiptap strips control characters for validation but stores the original href, so
3
+ // `f\ntp://example.test` would pass a naive scheme check yet persist with its
4
+ // control character intact — strip them before validating AND storing.
5
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: removing control characters is the point
6
+ const CONTROL_CHARACTERS = /[\u0000-\u001F\u007F]/g;
7
+ /**
8
+ * Sanitizes a user-entered link URL: removes ASCII control characters, then rejects
9
+ * any explicit scheme outside http/https/mailto/tel (blocks `javascript:` et al.).
10
+ * Scheme-less values are treated as relative URLs and allowed.
11
+ *
12
+ * @returns the cleaned URL, or `null` when the URL is not allowed.
13
+ */
14
+ const sanitizeLinkUrl = (url) => {
15
+ const cleaned = url.replace(CONTROL_CHARACTERS, '').trim();
16
+ const scheme = /^[a-z][a-z0-9+.-]*:/i.exec(cleaned)?.[0].toLowerCase();
17
+ if (scheme && !ALLOWED_LINK_PROTOCOLS.includes(scheme)) {
18
+ return null;
19
+ }
20
+ return cleaned;
21
+ };
22
+ /**
23
+ * Tiptap `isAllowedUri` narrowing its default protocol policy (which also admits
24
+ * ftp/ftps/callto/sms/cid/xmpp) to the four protocols this design system allows.
25
+ */
26
+ const isAllowedLinkUri = (uri) => sanitizeLinkUrl(uri) !== null;
27
+
28
+ export { isAllowedLinkUri, sanitizeLinkUrl };
29
+ //# sourceMappingURL=textEditor.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textEditor.utils.js","sources":["../../../../src/components/organisms/TextEditor/textEditor.utils.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;AAErE;AACA;AACA;AACA;AACA,MAAM,kBAAkB,GAAG,wBAAwB;AAEnD;;;;;;AAMG;AACI,MAAM,eAAe,GAAG,CAAC,GAAW,KAAmB;AAC5D,IAAA,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;AAC1D,IAAA,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;IACtE,IAAI,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACtD,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,OAAO;AAChB;AAEA;;;AAGG;AACI,MAAM,gBAAgB,GAAG,CAAC,GAAW,KAAc,eAAe,CAAC,GAAG,CAAC,KAAK;;;;"}
@@ -11,13 +11,18 @@ const DEFAULT_TIMEOUT = 2000;
11
11
  const useClipboard = () => {
12
12
  const [copied, setCopied] = React.useState(false);
13
13
  const resetTimerRef = React.useRef(null);
14
+ // `copy` awaits the async clipboard API; guard its post-await setState so a copy
15
+ // resolving after unmount doesn't set state on an unmounted component.
16
+ const isMountedRef = React.useRef(true);
14
17
  const scheduleReset = () => {
15
18
  if (resetTimerRef.current)
16
19
  clearTimeout(resetTimerRef.current);
17
20
  resetTimerRef.current = setTimeout(() => setCopied(false), DEFAULT_TIMEOUT);
18
21
  };
19
22
  React.useEffect(() => {
23
+ isMountedRef.current = true;
20
24
  return () => {
25
+ isMountedRef.current = false;
21
26
  if (resetTimerRef.current)
22
27
  clearTimeout(resetTimerRef.current);
23
28
  };
@@ -33,7 +38,7 @@ const useClipboard = () => {
33
38
  try {
34
39
  textArea.select();
35
40
  const success = document.execCommand('copy');
36
- if (success) {
41
+ if (success && isMountedRef.current) {
37
42
  setCopied(id || true);
38
43
  scheduleReset();
39
44
  }
@@ -55,8 +60,10 @@ const useClipboard = () => {
55
60
  if (navigator.clipboard && window.isSecureContext) {
56
61
  try {
57
62
  await navigator.clipboard.writeText(text);
58
- setCopied(id || true);
59
- scheduleReset();
63
+ if (isMountedRef.current) {
64
+ setCopied(id || true);
65
+ scheduleReset();
66
+ }
60
67
  return { success: true };
61
68
  }
62
69
  catch (_err) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/hooks/useClipboard/index.ts"],"sourcesContent":[null],"names":["useState","useRef","useEffect","useCallback"],"mappings":";;;;AAIA,MAAM,eAAe,GAAG,IAAI;AAqB5B;;;;AAIG;AACI,MAAM,YAAY,GAAG,MAA6B;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGA,cAAQ,CAAmB,KAAK,CAAC;AAC7D,IAAA,MAAM,aAAa,GAAGC,YAAM,CAAuC,IAAI,CAAC;IAExE,MAAM,aAAa,GAAG,MAAK;QACzB,IAAI,aAAa,CAAC,OAAO;AAAE,YAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9D,QAAA,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;AAC7E,IAAA,CAAC;IAEDC,eAAS,CAAC,MAAK;AACb,QAAA,OAAO,MAAK;YACV,IAAI,aAAa,CAAC,OAAO;AAAE,gBAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;AAChE,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;;AAGN,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAW,KAAI;;QAE7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,QAAA,QAAQ,CAAC,KAAK,GAAG,IAAI;AACrB,QAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AACpC,QAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU;AAEhC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAEnC,QAAA,IAAI;YACF,QAAQ,CAAC,MAAM,EAAE;YAEjB,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;YAE5C,IAAI,OAAO,EAAE;AACX,gBAAA,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC;AACrB,gBAAA,aAAa,EAAE;YACjB;YAEA,OAAO,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,4BAA4B,CAAC,EAAE;QACzG;QAAE,OAAO,GAAG,EAAE;YACZ,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,sBAAsB,CAAC;aACtE;QACH;gBAAU;;YAER,QAAQ,CAAC,MAAM,EAAE;QACnB;AACF,IAAA,CAAC;;IAGD,MAAM,IAAI,GAAGC,iBAAW,CAAC,OAAO,IAAY,EAAE,EAAW,KAAI;QAC3D,IAAI,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,eAAe,EAAE;AACjD,YAAA,IAAI;gBACF,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;AAEzC,gBAAA,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC;AACrB,gBAAA,aAAa,EAAE;AAEf,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1B;YAAE,OAAO,IAAI,EAAE;;AAEb,gBAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3B;QACF;AACA,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;AACzB;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/hooks/useClipboard/index.ts"],"sourcesContent":[null],"names":["useState","useRef","useEffect","useCallback"],"mappings":";;;;AAIA,MAAM,eAAe,GAAG,IAAI;AAqB5B;;;;AAIG;AACI,MAAM,YAAY,GAAG,MAA6B;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGA,cAAQ,CAAmB,KAAK,CAAC;AAC7D,IAAA,MAAM,aAAa,GAAGC,YAAM,CAAuC,IAAI,CAAC;;;AAGxE,IAAA,MAAM,YAAY,GAAGA,YAAM,CAAC,IAAI,CAAC;IAEjC,MAAM,aAAa,GAAG,MAAK;QACzB,IAAI,aAAa,CAAC,OAAO;AAAE,YAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9D,QAAA,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;AAC7E,IAAA,CAAC;IAEDC,eAAS,CAAC,MAAK;AACb,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI;AAC3B,QAAA,OAAO,MAAK;AACV,YAAA,YAAY,CAAC,OAAO,GAAG,KAAK;YAC5B,IAAI,aAAa,CAAC,OAAO;AAAE,gBAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;AAChE,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;;AAGN,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAW,KAAI;;QAE7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,QAAA,QAAQ,CAAC,KAAK,GAAG,IAAI;AACrB,QAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AACpC,QAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU;AAEhC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAEnC,QAAA,IAAI;YACF,QAAQ,CAAC,MAAM,EAAE;YAEjB,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;AAE5C,YAAA,IAAI,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE;AACnC,gBAAA,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC;AACrB,gBAAA,aAAa,EAAE;YACjB;YAEA,OAAO,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,4BAA4B,CAAC,EAAE;QACzG;QAAE,OAAO,GAAG,EAAE;YACZ,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,sBAAsB,CAAC;aACtE;QACH;gBAAU;;YAER,QAAQ,CAAC,MAAM,EAAE;QACnB;AACF,IAAA,CAAC;;IAGD,MAAM,IAAI,GAAGC,iBAAW,CAAC,OAAO,IAAY,EAAE,EAAW,KAAI;QAC3D,IAAI,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,eAAe,EAAE;AACjD,YAAA,IAAI;gBACF,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;AAEzC,gBAAA,IAAI,YAAY,CAAC,OAAO,EAAE;AACxB,oBAAA,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC;AACrB,oBAAA,aAAa,EAAE;gBACjB;AAEA,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1B;YAAE,OAAO,IAAI,EAAE;;AAEb,gBAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3B;QACF;AACA,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;AACzB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useClipboard/index.ts"],"names":[],"mappings":"AAMA,KAAK,sBAAsB,GAAG;IAC5B;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB;;;;;;;;;OASG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;CACnF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAO,sBAkE/B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useClipboard/index.ts"],"names":[],"mappings":"AAMA,KAAK,sBAAsB,GAAG;IAC5B;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB;;;;;;;;;OASG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;CACnF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAO,sBAyE/B,CAAC"}
@@ -9,13 +9,18 @@ const DEFAULT_TIMEOUT = 2000;
9
9
  const useClipboard = () => {
10
10
  const [copied, setCopied] = useState(false);
11
11
  const resetTimerRef = useRef(null);
12
+ // `copy` awaits the async clipboard API; guard its post-await setState so a copy
13
+ // resolving after unmount doesn't set state on an unmounted component.
14
+ const isMountedRef = useRef(true);
12
15
  const scheduleReset = () => {
13
16
  if (resetTimerRef.current)
14
17
  clearTimeout(resetTimerRef.current);
15
18
  resetTimerRef.current = setTimeout(() => setCopied(false), DEFAULT_TIMEOUT);
16
19
  };
17
20
  useEffect(() => {
21
+ isMountedRef.current = true;
18
22
  return () => {
23
+ isMountedRef.current = false;
19
24
  if (resetTimerRef.current)
20
25
  clearTimeout(resetTimerRef.current);
21
26
  };
@@ -31,7 +36,7 @@ const useClipboard = () => {
31
36
  try {
32
37
  textArea.select();
33
38
  const success = document.execCommand('copy');
34
- if (success) {
39
+ if (success && isMountedRef.current) {
35
40
  setCopied(id || true);
36
41
  scheduleReset();
37
42
  }
@@ -53,8 +58,10 @@ const useClipboard = () => {
53
58
  if (navigator.clipboard && window.isSecureContext) {
54
59
  try {
55
60
  await navigator.clipboard.writeText(text);
56
- setCopied(id || true);
57
- scheduleReset();
61
+ if (isMountedRef.current) {
62
+ setCopied(id || true);
63
+ scheduleReset();
64
+ }
58
65
  return { success: true };
59
66
  }
60
67
  catch (_err) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/hooks/useClipboard/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA,MAAM,eAAe,GAAG,IAAI;AAqB5B;;;;AAIG;AACI,MAAM,YAAY,GAAG,MAA6B;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAmB,KAAK,CAAC;AAC7D,IAAA,MAAM,aAAa,GAAG,MAAM,CAAuC,IAAI,CAAC;IAExE,MAAM,aAAa,GAAG,MAAK;QACzB,IAAI,aAAa,CAAC,OAAO;AAAE,YAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9D,QAAA,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;AAC7E,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;AACb,QAAA,OAAO,MAAK;YACV,IAAI,aAAa,CAAC,OAAO;AAAE,gBAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;AAChE,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;;AAGN,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAW,KAAI;;QAE7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,QAAA,QAAQ,CAAC,KAAK,GAAG,IAAI;AACrB,QAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AACpC,QAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU;AAEhC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAEnC,QAAA,IAAI;YACF,QAAQ,CAAC,MAAM,EAAE;YAEjB,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;YAE5C,IAAI,OAAO,EAAE;AACX,gBAAA,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC;AACrB,gBAAA,aAAa,EAAE;YACjB;YAEA,OAAO,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,4BAA4B,CAAC,EAAE;QACzG;QAAE,OAAO,GAAG,EAAE;YACZ,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,sBAAsB,CAAC;aACtE;QACH;gBAAU;;YAER,QAAQ,CAAC,MAAM,EAAE;QACnB;AACF,IAAA,CAAC;;IAGD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,IAAY,EAAE,EAAW,KAAI;QAC3D,IAAI,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,eAAe,EAAE;AACjD,YAAA,IAAI;gBACF,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;AAEzC,gBAAA,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC;AACrB,gBAAA,aAAa,EAAE;AAEf,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1B;YAAE,OAAO,IAAI,EAAE;;AAEb,gBAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3B;QACF;AACA,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;AACzB;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/hooks/useClipboard/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA,MAAM,eAAe,GAAG,IAAI;AAqB5B;;;;AAIG;AACI,MAAM,YAAY,GAAG,MAA6B;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAmB,KAAK,CAAC;AAC7D,IAAA,MAAM,aAAa,GAAG,MAAM,CAAuC,IAAI,CAAC;;;AAGxE,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;IAEjC,MAAM,aAAa,GAAG,MAAK;QACzB,IAAI,aAAa,CAAC,OAAO;AAAE,YAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9D,QAAA,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;AAC7E,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;AACb,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI;AAC3B,QAAA,OAAO,MAAK;AACV,YAAA,YAAY,CAAC,OAAO,GAAG,KAAK;YAC5B,IAAI,aAAa,CAAC,OAAO;AAAE,gBAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;AAChE,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;;AAGN,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAW,KAAI;;QAE7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,QAAA,QAAQ,CAAC,KAAK,GAAG,IAAI;AACrB,QAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AACpC,QAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU;AAEhC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAEnC,QAAA,IAAI;YACF,QAAQ,CAAC,MAAM,EAAE;YAEjB,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;AAE5C,YAAA,IAAI,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE;AACnC,gBAAA,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC;AACrB,gBAAA,aAAa,EAAE;YACjB;YAEA,OAAO,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,4BAA4B,CAAC,EAAE;QACzG;QAAE,OAAO,GAAG,EAAE;YACZ,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,sBAAsB,CAAC;aACtE;QACH;gBAAU;;YAER,QAAQ,CAAC,MAAM,EAAE;QACnB;AACF,IAAA,CAAC;;IAGD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,IAAY,EAAE,EAAW,KAAI;QAC3D,IAAI,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,eAAe,EAAE;AACjD,YAAA,IAAI;gBACF,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;AAEzC,gBAAA,IAAI,YAAY,CAAC,OAAO,EAAE;AACxB,oBAAA,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC;AACrB,oBAAA,aAAa,EAAE;gBACjB;AAEA,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1B;YAAE,OAAO,IAAI,EAAE;;AAEb,gBAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3B;QACF;AACA,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;AACzB;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flipdish/ui-library",
3
- "version": "0.16.1",
3
+ "version": "0.18.0",
4
4
  "description": "Flipdish Design System — atomic-design component library (Tailwind v4 + UntitledUI + React Aria).",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -219,11 +219,11 @@
219
219
  },
220
220
  "devDependencies": {
221
221
  "@figma/code-connect": "^1.4.8",
222
- "@storybook/addon-a11y": "^10.5.3",
223
- "@storybook/addon-docs": "^10.5.3",
222
+ "@storybook/addon-a11y": "^10.5.8",
223
+ "@storybook/addon-docs": "^10.5.8",
224
224
  "@storybook/addon-mcp": "^0.7.0",
225
- "@storybook/addon-vitest": "10.5.3",
226
- "@storybook/react-vite": "^10.5.3",
225
+ "@storybook/addon-vitest": "10.5.8",
226
+ "@storybook/react-vite": "^10.5.8",
227
227
  "@tailwindcss/vite": "^4.3.1",
228
228
  "@testing-library/jest-dom": "^6.9.1",
229
229
  "@testing-library/react": "^16.3.2",
@@ -263,7 +263,7 @@
263
263
  "remark-gfm": "^4.0.1",
264
264
  "rimraf": "^6.1.3",
265
265
  "shiki": "^4.2.0",
266
- "storybook": "^10.5.3",
266
+ "storybook": "^10.5.8",
267
267
  "tailwind-merge": "^3.6.0",
268
268
  "tailwind-variants": "^3.2.2",
269
269
  "tailwindcss": "^4.3.1",