@flipdish/ui-library 0.17.0 → 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 (80) 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-list.cjs +4 -2
  50. package/dist/components/organisms/HeaderNavigation/components/nav-list.cjs.map +1 -1
  51. package/dist/components/organisms/HeaderNavigation/components/nav-list.d.ts.map +1 -1
  52. package/dist/components/organisms/HeaderNavigation/components/nav-list.js +4 -2
  53. package/dist/components/organisms/HeaderNavigation/components/nav-list.js.map +1 -1
  54. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.cjs +7 -2
  55. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.cjs.map +1 -1
  56. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.d.ts.map +1 -1
  57. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.js +7 -2
  58. package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.js.map +1 -1
  59. package/dist/components/organisms/TextEditor/components/text-editor-extensions.cjs +19 -2
  60. package/dist/components/organisms/TextEditor/components/text-editor-extensions.cjs.map +1 -1
  61. package/dist/components/organisms/TextEditor/components/text-editor-extensions.d.ts.map +1 -1
  62. package/dist/components/organisms/TextEditor/components/text-editor-extensions.js +19 -2
  63. package/dist/components/organisms/TextEditor/components/text-editor-extensions.js.map +1 -1
  64. package/dist/components/organisms/TextEditor/index.cjs +24 -5
  65. package/dist/components/organisms/TextEditor/index.cjs.map +1 -1
  66. package/dist/components/organisms/TextEditor/index.d.ts.map +1 -1
  67. package/dist/components/organisms/TextEditor/index.js +24 -5
  68. package/dist/components/organisms/TextEditor/index.js.map +1 -1
  69. package/dist/components/organisms/TextEditor/textEditor.utils.cjs +32 -0
  70. package/dist/components/organisms/TextEditor/textEditor.utils.cjs.map +1 -0
  71. package/dist/components/organisms/TextEditor/textEditor.utils.d.ts +14 -0
  72. package/dist/components/organisms/TextEditor/textEditor.utils.d.ts.map +1 -0
  73. package/dist/components/organisms/TextEditor/textEditor.utils.js +29 -0
  74. package/dist/components/organisms/TextEditor/textEditor.utils.js.map +1 -0
  75. package/dist/hooks/useClipboard/index.cjs +10 -3
  76. package/dist/hooks/useClipboard/index.cjs.map +1 -1
  77. package/dist/hooks/useClipboard/index.d.ts.map +1 -1
  78. package/dist/hooks/useClipboard/index.js +10 -3
  79. package/dist/hooks/useClipboard/index.js.map +1 -1
  80. package/package.json +1 -1
@@ -12,6 +12,7 @@ import { createContext, useId, useEffect, useContext } from 'react';
12
12
  import { CharacterCount } from './components/text-editor-character-count.js';
13
13
  import { TextEditorToolbar } from './components/text-editor-toolbar.js';
14
14
  import { TextEditorTooltip } from './components/text-editor-tooltip.js';
15
+ import { isAllowedLinkUri, sanitizeLinkUrl } from './textEditor.utils.js';
15
16
 
16
17
  // Creates a data URL for an SVG resize handle with a given color.
17
18
  const getResizeHandleBg = (color) => {
@@ -54,6 +55,9 @@ const TextEditorRoot = ({ className, inputClassName, children, isInvalid, isDisa
54
55
  openOnClick: false,
55
56
  autolink: true,
56
57
  defaultProtocol: 'https',
58
+ // Narrow tiptap's default protocol policy (ftp/callto/sms/cid/xmpp also pass
59
+ // upstream) to this design system's http/https/mailto/tel allowlist.
60
+ isAllowedUri: (uri) => isAllowedLinkUri(uri),
57
61
  HTMLAttributes: {
58
62
  class: 'text-primary underline',
59
63
  },
@@ -116,18 +120,33 @@ const TextEditorRoot = ({ className, inputClassName, children, isInvalid, isDisa
116
120
  editor.chain().focus().extendMarkRange('link').unsetLink().run();
117
121
  return;
118
122
  }
123
+ // Strip control characters and reject non-allowlisted schemes (javascript: et al.).
124
+ const safeUrl = sanitizeLinkUrl(url);
125
+ if (safeUrl === null) {
126
+ return;
127
+ }
128
+ // Whitespace/control-only input sanitises to '' — treat it as removal like the
129
+ // raw-empty branch above, instead of setting an empty href.
130
+ if (safeUrl === '') {
131
+ editor.chain().focus().extendMarkRange('link').unsetLink().run();
132
+ return;
133
+ }
119
134
  // Update link.
120
- editor.chain().focus().extendMarkRange('link').setLink({ href: url }).run();
135
+ editor.chain().focus().extendMarkRange('link').setLink({ href: safeUrl }).run();
121
136
  };
122
- // Add a keyboard shortcut listener to handle link clicks
137
+ // Cmd+K (macOS) / Ctrl+K (Windows/Linux) opens the link prompt. Listen on the
138
+ // editor's own element, not `document`, so the shortcut only fires for the
139
+ // focused editor — not every mounted TextEditor on the page.
123
140
  const handleKeyDown = (event) => {
124
- if (event.metaKey && event.key === 'k') {
141
+ if ((event.metaKey || event.ctrlKey) && event.key === 'k') {
142
+ event.preventDefault();
125
143
  setLink();
126
144
  }
127
145
  };
128
- document.addEventListener('keydown', handleKeyDown);
146
+ const editorElement = editor?.view.dom;
147
+ editorElement?.addEventListener('keydown', handleKeyDown);
129
148
  return () => {
130
- document.removeEventListener('keydown', handleKeyDown);
149
+ editorElement?.removeEventListener('keydown', handleKeyDown);
131
150
  };
132
151
  }, [editor]);
133
152
  if (!editor) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/organisms/TextEditor/index.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/organisms/TextEditor/index.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ const ALLOWED_LINK_PROTOCOLS = ['http:', 'https:', 'mailto:', 'tel:'];
4
+ // Tiptap strips control characters for validation but stores the original href, so
5
+ // `f\ntp://example.test` would pass a naive scheme check yet persist with its
6
+ // control character intact — strip them before validating AND storing.
7
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: removing control characters is the point
8
+ const CONTROL_CHARACTERS = /[\u0000-\u001F\u007F]/g;
9
+ /**
10
+ * Sanitizes a user-entered link URL: removes ASCII control characters, then rejects
11
+ * any explicit scheme outside http/https/mailto/tel (blocks `javascript:` et al.).
12
+ * Scheme-less values are treated as relative URLs and allowed.
13
+ *
14
+ * @returns the cleaned URL, or `null` when the URL is not allowed.
15
+ */
16
+ const sanitizeLinkUrl = (url) => {
17
+ const cleaned = url.replace(CONTROL_CHARACTERS, '').trim();
18
+ const scheme = /^[a-z][a-z0-9+.-]*:/i.exec(cleaned)?.[0].toLowerCase();
19
+ if (scheme && !ALLOWED_LINK_PROTOCOLS.includes(scheme)) {
20
+ return null;
21
+ }
22
+ return cleaned;
23
+ };
24
+ /**
25
+ * Tiptap `isAllowedUri` narrowing its default protocol policy (which also admits
26
+ * ftp/ftps/callto/sms/cid/xmpp) to the four protocols this design system allows.
27
+ */
28
+ const isAllowedLinkUri = (uri) => sanitizeLinkUrl(uri) !== null;
29
+
30
+ exports.isAllowedLinkUri = isAllowedLinkUri;
31
+ exports.sanitizeLinkUrl = sanitizeLinkUrl;
32
+ //# sourceMappingURL=textEditor.utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textEditor.utils.cjs","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;;;;;"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Sanitizes a user-entered link URL: removes ASCII control characters, then rejects
3
+ * any explicit scheme outside http/https/mailto/tel (blocks `javascript:` et al.).
4
+ * Scheme-less values are treated as relative URLs and allowed.
5
+ *
6
+ * @returns the cleaned URL, or `null` when the URL is not allowed.
7
+ */
8
+ export declare const sanitizeLinkUrl: (url: string) => string | null;
9
+ /**
10
+ * Tiptap `isAllowedUri` narrowing its default protocol policy (which also admits
11
+ * ftp/ftps/callto/sms/cid/xmpp) to the four protocols this design system allows.
12
+ */
13
+ export declare const isAllowedLinkUri: (uri: string) => boolean;
14
+ //# sourceMappingURL=textEditor.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textEditor.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/TextEditor/textEditor.utils.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAOtD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,OAAwC,CAAC"}
@@ -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.17.0",
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": [