@particle-academy/react-fancy 5.69.0 → 5.70.1

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 (132) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/dist/autocomplete.cjs +3 -2
  3. package/dist/autocomplete.js +2 -1
  4. package/dist/chunk-2C64OVOZ.cjs +18 -0
  5. package/dist/chunk-2C64OVOZ.cjs.map +1 -0
  6. package/dist/{chunk-BX7EDTL4.js → chunk-37D5PYEF.js} +4 -3
  7. package/dist/chunk-37D5PYEF.js.map +1 -0
  8. package/dist/{chunk-UJRMY54A.cjs → chunk-3QCAOD2W.cjs} +4 -2
  9. package/dist/chunk-3QCAOD2W.cjs.map +1 -0
  10. package/dist/{chunk-KSU6RYWU.cjs → chunk-3T3LBIQA.cjs} +4 -2
  11. package/dist/chunk-3T3LBIQA.cjs.map +1 -0
  12. package/dist/{chunk-O4KZYGGC.cjs → chunk-5YRSYS2F.cjs} +10 -10
  13. package/dist/{chunk-O4KZYGGC.cjs.map → chunk-5YRSYS2F.cjs.map} +1 -1
  14. package/dist/{chunk-2PSHIUM7.cjs → chunk-6EA3DSPT.cjs} +14 -13
  15. package/dist/chunk-6EA3DSPT.cjs.map +1 -0
  16. package/dist/{chunk-4WIPWJYD.js → chunk-6PRXG7L6.js} +4 -3
  17. package/dist/chunk-6PRXG7L6.js.map +1 -0
  18. package/dist/{chunk-WKPBCB67.cjs → chunk-6QAF35AJ.cjs} +4 -2
  19. package/dist/chunk-6QAF35AJ.cjs.map +1 -0
  20. package/dist/chunk-6V44RRSB.cjs +11 -0
  21. package/dist/chunk-6V44RRSB.cjs.map +1 -0
  22. package/dist/{chunk-G35XN5WV.js → chunk-CDW7MFPG.js} +4 -2
  23. package/dist/chunk-CDW7MFPG.js.map +1 -0
  24. package/dist/{chunk-U4PWNLOH.js → chunk-EZL5DILH.js} +7 -6
  25. package/dist/chunk-EZL5DILH.js.map +1 -0
  26. package/dist/{chunk-ARO2DNGS.js → chunk-EZZKHMR4.js} +4 -2
  27. package/dist/chunk-EZZKHMR4.js.map +1 -0
  28. package/dist/{chunk-LLVYCACC.js → chunk-F4GMOMUT.js} +3 -3
  29. package/dist/{chunk-LLVYCACC.js.map → chunk-F4GMOMUT.js.map} +1 -1
  30. package/dist/{chunk-R6URPHEP.cjs → chunk-FHRVSYJU.cjs} +4 -3
  31. package/dist/chunk-FHRVSYJU.cjs.map +1 -0
  32. package/dist/{chunk-HRZDEZSE.js → chunk-FYUEDPST.js} +95 -23
  33. package/dist/chunk-FYUEDPST.js.map +1 -0
  34. package/dist/{chunk-4UEIMGHZ.js → chunk-GDH43QH6.js} +59 -11
  35. package/dist/chunk-GDH43QH6.js.map +1 -0
  36. package/dist/{chunk-J5TFVYYM.cjs → chunk-HNJXBMHI.cjs} +6 -6
  37. package/dist/{chunk-J5TFVYYM.cjs.map → chunk-HNJXBMHI.cjs.map} +1 -1
  38. package/dist/chunk-I3LAFKJU.js +16 -0
  39. package/dist/chunk-I3LAFKJU.js.map +1 -0
  40. package/dist/chunk-J6IQHJET.js +76 -0
  41. package/dist/chunk-J6IQHJET.js.map +1 -0
  42. package/dist/chunk-JKD6CFIP.cjs +78 -0
  43. package/dist/chunk-JKD6CFIP.cjs.map +1 -0
  44. package/dist/{chunk-YJETQ76J.cjs → chunk-KKYILQTG.cjs} +4 -3
  45. package/dist/chunk-KKYILQTG.cjs.map +1 -0
  46. package/dist/{chunk-FVI4JDLA.js → chunk-M6UAVA2I.js} +4 -2
  47. package/dist/chunk-M6UAVA2I.js.map +1 -0
  48. package/dist/{chunk-Z6RA37IC.js → chunk-NAYXNVNU.js} +3 -15
  49. package/dist/chunk-NAYXNVNU.js.map +1 -0
  50. package/dist/{chunk-FPFQBYKJ.cjs → chunk-NPSKZ7ZB.cjs} +65 -17
  51. package/dist/chunk-NPSKZ7ZB.cjs.map +1 -0
  52. package/dist/{chunk-G5DMYAWL.cjs → chunk-O5ORO2RX.cjs} +5 -2
  53. package/dist/chunk-O5ORO2RX.cjs.map +1 -0
  54. package/dist/{chunk-YEGFOMJB.js → chunk-PJNUGSKI.js} +3 -3
  55. package/dist/{chunk-YEGFOMJB.js.map → chunk-PJNUGSKI.js.map} +1 -1
  56. package/dist/{chunk-ISNS4GAW.cjs → chunk-PS7C6GKI.cjs} +100 -28
  57. package/dist/chunk-PS7C6GKI.cjs.map +1 -0
  58. package/dist/{chunk-KGJ2ORY6.cjs → chunk-R3EJNGJV.cjs} +4 -16
  59. package/dist/chunk-R3EJNGJV.cjs.map +1 -0
  60. package/dist/chunk-S42OGG43.js +9 -0
  61. package/dist/chunk-S42OGG43.js.map +1 -0
  62. package/dist/{chunk-VZNBTCGA.js → chunk-TCMOD3WW.js} +4 -3
  63. package/dist/chunk-TCMOD3WW.js.map +1 -0
  64. package/dist/{chunk-6MXFZ3B5.cjs → chunk-UK6BGM74.cjs} +4 -3
  65. package/dist/chunk-UK6BGM74.cjs.map +1 -0
  66. package/dist/{chunk-XS3EIQFP.js → chunk-WZAKEJDL.js} +5 -2
  67. package/dist/chunk-WZAKEJDL.js.map +1 -0
  68. package/dist/command.cjs +4 -3
  69. package/dist/command.js +2 -1
  70. package/dist/composer.cjs +7 -4
  71. package/dist/composer.d.cts +45 -2
  72. package/dist/composer.d.ts +45 -2
  73. package/dist/composer.js +5 -2
  74. package/dist/content-renderer.cjs +5 -4
  75. package/dist/content-renderer.js +2 -1
  76. package/dist/editor.cjs +5 -4
  77. package/dist/editor.js +3 -2
  78. package/dist/file-browser.cjs +6 -5
  79. package/dist/file-browser.js +2 -1
  80. package/dist/{index-BQi_n6eS.d.ts → index-B8OkuYSt.d.ts} +49 -2
  81. package/dist/{index-n_4_OZK_.d.cts → index-BMVQnKTH.d.cts} +49 -2
  82. package/dist/index.cjs +61 -58
  83. package/dist/index.cjs.map +1 -1
  84. package/dist/index.d.cts +2 -1
  85. package/dist/index.d.ts +2 -1
  86. package/dist/index.js +16 -13
  87. package/dist/index.js.map +1 -1
  88. package/dist/input-tag.cjs +7 -6
  89. package/dist/input-tag.js +2 -1
  90. package/dist/input.cjs +4 -3
  91. package/dist/input.js +3 -2
  92. package/dist/inputs.cjs +6 -5
  93. package/dist/inputs.js +4 -3
  94. package/dist/json-editor.cjs +16 -15
  95. package/dist/json-editor.js +5 -4
  96. package/dist/paste-pills.cjs +15 -14
  97. package/dist/paste-pills.js +2 -1
  98. package/dist/pillbox.cjs +3 -2
  99. package/dist/pillbox.js +2 -1
  100. package/dist/prompt-input.cjs +8 -5
  101. package/dist/prompt-input.d.cts +2 -1
  102. package/dist/prompt-input.d.ts +2 -1
  103. package/dist/prompt-input.js +5 -2
  104. package/dist/select.cjs +3 -2
  105. package/dist/select.js +2 -1
  106. package/dist/use-acknowledged-submit-7nC0vSCP.d.cts +12 -0
  107. package/dist/use-acknowledged-submit-7nC0vSCP.d.ts +12 -0
  108. package/docs/Composer.md +65 -2
  109. package/docs/PromptInput.md +70 -4
  110. package/package.json +1 -1
  111. package/dist/chunk-2PSHIUM7.cjs.map +0 -1
  112. package/dist/chunk-4UEIMGHZ.js.map +0 -1
  113. package/dist/chunk-4WIPWJYD.js.map +0 -1
  114. package/dist/chunk-6MXFZ3B5.cjs.map +0 -1
  115. package/dist/chunk-ARO2DNGS.js.map +0 -1
  116. package/dist/chunk-BX7EDTL4.js.map +0 -1
  117. package/dist/chunk-FPFQBYKJ.cjs.map +0 -1
  118. package/dist/chunk-FVI4JDLA.js.map +0 -1
  119. package/dist/chunk-G35XN5WV.js.map +0 -1
  120. package/dist/chunk-G5DMYAWL.cjs.map +0 -1
  121. package/dist/chunk-HRZDEZSE.js.map +0 -1
  122. package/dist/chunk-ISNS4GAW.cjs.map +0 -1
  123. package/dist/chunk-KGJ2ORY6.cjs.map +0 -1
  124. package/dist/chunk-KSU6RYWU.cjs.map +0 -1
  125. package/dist/chunk-R6URPHEP.cjs.map +0 -1
  126. package/dist/chunk-U4PWNLOH.js.map +0 -1
  127. package/dist/chunk-UJRMY54A.cjs.map +0 -1
  128. package/dist/chunk-VZNBTCGA.js.map +0 -1
  129. package/dist/chunk-WKPBCB67.cjs.map +0 -1
  130. package/dist/chunk-XS3EIQFP.js.map +0 -1
  131. package/dist/chunk-YJETQ76J.cjs.map +0 -1
  132. package/dist/chunk-Z6RA37IC.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme-tokens.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Semantic theme tokens — the small set of colours the kit's DOM components\n * read, so a host can repaint the whole kit with its own palette WITHOUT\n * remapping Tailwind's `zinc` or `violet`.\n *\n * Each role is two CSS custom properties, one per mode:\n *\n * --fancy-surface the light value\n * --fancy-surface-dark the dark value\n *\n * Components read them through their var() FALLBACK, which is the colour the\n * component used before these existed:\n *\n * bg-[color:var(--fancy-surface,var(--color-white))]\n * dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\n *\n * So:\n * - **Set nothing and nothing changes.** An unset custom property resolves to\n * its fallback, which is the exact declaration the old `bg-white` produced.\n * - **Set one and every surface follows**, wherever the variable is in scope:\n * `:root`, `body`, or any wrapper element. No selector to match, no layer or\n * specificity to win — a custom property is inherited, not cascaded against.\n * - **Both modes are stated, not derived.** The dark value is a separate\n * variable rather than a flip under `.dark`, so which one applies is decided\n * by the host's own `dark:` variant — the same switch that drives every\n * other `dark:` utility in the kit. (See `dark-variant.css` for a variant\n * that follows `[data-theme=\"dark\"]` as well as `.dark`.)\n *\n * NOT covered, deliberately: colours that ENCODE DATA — chart series,\n * file-type marks, mood and confidence scales, event kinds. Repainting those\n * with a host's neutral palette would erase what they mean. A component's\n * explicit `color` prop (Badge, Button, Callout …) is also untouched: that is\n * the host choosing a hue, not the kit choosing one for it.\n *\n * `light` / `dark` are the defaults exactly as components write them in their\n * fallbacks. `tests/theme-tokens.test.tsx` fails if a component's fallback\n * disagrees with this table, so the table is the contract rather than a\n * description of it.\n */\nexport const THEME_TOKENS = {\n surface: {\n variable: \"--fancy-surface\",\n darkVariable: \"--fancy-surface-dark\",\n light: \"var(--color-white)\",\n dark: \"var(--color-zinc-900)\",\n description: \"Panels, cards, overlays (menus, modals, popovers, toasts), sidebars and navbars.\",\n },\n \"surface-muted\": {\n variable: \"--fancy-surface-muted\",\n darkVariable: \"--fancy-surface-muted-dark\",\n light: \"var(--color-zinc-100)\",\n dark: \"var(--color-zinc-800)\",\n description: \"Hovered and selected rows, chips, inset wells, toolbar buttons.\",\n },\n border: {\n variable: \"--fancy-border\",\n darkVariable: \"--fancy-border-dark\",\n light: \"var(--color-zinc-200)\",\n dark: \"var(--color-zinc-700)\",\n description: \"Outlines, dividers, separators and tracks (skeletons, progress, sliders).\",\n },\n \"border-strong\": {\n variable: \"--fancy-border-strong\",\n darkVariable: \"--fancy-border-strong-dark\",\n light: \"var(--color-zinc-300)\",\n dark: \"var(--color-zinc-700)\",\n description: \"The firmer outline on form controls (inputs, checkboxes, radios) and keycaps.\",\n },\n input: {\n variable: \"--fancy-input\",\n darkVariable: \"--fancy-input-dark\",\n light: \"var(--color-white)\",\n dark: \"#1e1e24\",\n description: \"The field surface of text inputs, checkboxes, radios, OTP cells and pickers.\",\n },\n text: {\n variable: \"--fancy-text\",\n darkVariable: \"--fancy-text-dark\",\n light: \"var(--color-zinc-900)\",\n dark: \"var(--color-zinc-100)\",\n description: \"Strongest foreground: headings, values, field text, active items.\",\n },\n \"text-soft\": {\n variable: \"--fancy-text-soft\",\n darkVariable: \"--fancy-text-soft-dark\",\n light: \"var(--color-zinc-700)\",\n dark: \"var(--color-zinc-300)\",\n description: \"Body copy and menu items: readable, one step back from text.\",\n },\n \"text-muted\": {\n variable: \"--fancy-text-muted\",\n darkVariable: \"--fancy-text-muted-dark\",\n light: \"var(--color-zinc-500)\",\n dark: \"var(--color-zinc-400)\",\n description: \"Descriptions, captions, secondary labels, axis labels.\",\n },\n \"text-faint\": {\n variable: \"--fancy-text-faint\",\n darkVariable: \"--fancy-text-faint-dark\",\n light: \"var(--color-zinc-400)\",\n dark: \"var(--color-zinc-500)\",\n description: \"Placeholders, disabled hints, decorative icons.\",\n },\n \"text-subtle\": {\n variable: \"--fancy-text-subtle\",\n darkVariable: \"--fancy-text-subtle-dark\",\n light: \"var(--color-zinc-600)\",\n dark: \"var(--color-zinc-400)\",\n description: \"Inactive nav labels (Sidebar, Menu, Navbar, MultiSwitch) and secondary prose. Added 5.53.1.\",\n },\n \"surface-hover\": {\n variable: \"--fancy-surface-hover\",\n darkVariable: \"--fancy-surface-hover-dark\",\n light: \"var(--color-zinc-50)\",\n // Tailwind's `bg-zinc-800/50`, written out so a host's value is used as-is.\n dark: \"color-mix(in oklab, var(--color-zinc-800) 50%, transparent)\",\n description: \"The hover fill on nav items, list options and table rows. Added 5.53.1.\",\n },\n focus: {\n variable: \"--fancy-focus\",\n darkVariable: \"--fancy-focus-dark\",\n light: \"var(--color-blue-500)\",\n dark: \"var(--color-blue-400)\",\n description: \"The focus border and ring on form controls.\",\n },\n} as const;\n\nexport type ThemeTokenRole = keyof typeof THEME_TOKENS;\n"]}
1
+ {"version":3,"sources":["../src/theme-tokens.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Semantic theme tokens — the small set of colours the kit's DOM components\n * read, so a host can repaint the whole kit with its own palette WITHOUT\n * remapping Tailwind's `zinc` or `violet`.\n *\n * Each role is two CSS custom properties, one per mode:\n *\n * --fancy-surface the light value\n * --fancy-surface-dark the dark value\n *\n * Components read them through their var() FALLBACK, which is the colour the\n * component used before these existed:\n *\n * bg-[color:var(--fancy-surface,var(--color-white))]\n * dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\n *\n * So:\n * - **Set nothing and nothing changes.** An unset custom property resolves to\n * its fallback, which is the exact declaration the old `bg-white` produced.\n * - **Set one and every surface follows**, wherever the variable is in scope:\n * `:root`, `body`, or any wrapper element. No selector to match, no layer or\n * specificity to win — a custom property is inherited, not cascaded against.\n * - **Both modes are stated, not derived.** The dark value is a separate\n * variable rather than a flip under `.dark`, so which one applies is decided\n * by the host's own `dark:` variant — the same switch that drives every\n * other `dark:` utility in the kit. (See `dark-variant.css` for a variant\n * that follows `[data-theme=\"dark\"]` as well as `.dark`.)\n *\n * NOT covered, deliberately: colours that ENCODE DATA — chart series,\n * file-type marks, mood and confidence scales, event kinds. Repainting those\n * with a host's neutral palette would erase what they mean. A component's\n * explicit `color` prop (Badge, Button, Callout …) is also untouched: that is\n * the host choosing a hue, not the kit choosing one for it.\n *\n * `light` / `dark` are the defaults exactly as components write them in their\n * fallbacks. `tests/theme-tokens.test.tsx` fails if a component's fallback\n * disagrees with this table, so the table is the contract rather than a\n * description of it.\n */\nexport const THEME_TOKENS = {\n surface: {\n variable: \"--fancy-surface\",\n darkVariable: \"--fancy-surface-dark\",\n light: \"var(--color-white)\",\n dark: \"var(--color-zinc-900)\",\n description: \"Panels, cards, overlays (menus, modals, popovers, toasts), sidebars and navbars.\",\n },\n \"surface-muted\": {\n variable: \"--fancy-surface-muted\",\n darkVariable: \"--fancy-surface-muted-dark\",\n light: \"var(--color-zinc-100)\",\n dark: \"var(--color-zinc-800)\",\n description: \"Hovered and selected rows, chips, inset wells, toolbar buttons.\",\n },\n border: {\n variable: \"--fancy-border\",\n darkVariable: \"--fancy-border-dark\",\n light: \"var(--color-zinc-200)\",\n dark: \"var(--color-zinc-700)\",\n description: \"Outlines, dividers, separators and tracks (skeletons, progress, sliders).\",\n },\n \"border-strong\": {\n variable: \"--fancy-border-strong\",\n darkVariable: \"--fancy-border-strong-dark\",\n light: \"var(--color-zinc-300)\",\n dark: \"var(--color-zinc-700)\",\n description: \"The firmer outline on form controls (inputs, checkboxes, radios) and keycaps.\",\n },\n input: {\n variable: \"--fancy-input\",\n darkVariable: \"--fancy-input-dark\",\n light: \"var(--color-white)\",\n dark: \"#1e1e24\",\n description: \"The field surface of text inputs, checkboxes, radios, OTP cells and pickers.\",\n },\n text: {\n variable: \"--fancy-text\",\n darkVariable: \"--fancy-text-dark\",\n light: \"var(--color-zinc-900)\",\n dark: \"var(--color-zinc-100)\",\n description: \"Strongest foreground: headings, values, field text, active items.\",\n },\n \"text-soft\": {\n variable: \"--fancy-text-soft\",\n darkVariable: \"--fancy-text-soft-dark\",\n light: \"var(--color-zinc-700)\",\n dark: \"var(--color-zinc-300)\",\n description: \"Body copy and menu items: readable, one step back from text.\",\n },\n \"text-muted\": {\n variable: \"--fancy-text-muted\",\n darkVariable: \"--fancy-text-muted-dark\",\n light: \"var(--color-zinc-500)\",\n dark: \"var(--color-zinc-400)\",\n description: \"Descriptions, captions, secondary labels, axis labels.\",\n },\n \"text-faint\": {\n variable: \"--fancy-text-faint\",\n darkVariable: \"--fancy-text-faint-dark\",\n light: \"var(--color-zinc-400)\",\n dark: \"var(--color-zinc-500)\",\n description: \"Placeholders, disabled hints, decorative icons.\",\n },\n \"text-subtle\": {\n variable: \"--fancy-text-subtle\",\n darkVariable: \"--fancy-text-subtle-dark\",\n light: \"var(--color-zinc-600)\",\n dark: \"var(--color-zinc-400)\",\n description: \"Inactive nav labels (Sidebar, Menu, Navbar, MultiSwitch) and secondary prose. Added 5.53.1.\",\n },\n \"surface-hover\": {\n variable: \"--fancy-surface-hover\",\n darkVariable: \"--fancy-surface-hover-dark\",\n light: \"var(--color-zinc-50)\",\n // Tailwind's `bg-zinc-800/50`, written out so a host's value is used as-is.\n dark: \"color-mix(in oklab, var(--color-zinc-800) 50%, transparent)\",\n description: \"The hover fill on nav items, list options and table rows. Added 5.53.1.\",\n },\n focus: {\n variable: \"--fancy-focus\",\n darkVariable: \"--fancy-focus-dark\",\n light: \"var(--color-blue-500)\",\n dark: \"var(--color-blue-400)\",\n description: \"The focus border and ring on form controls.\",\n },\n} as const;\n\nexport type ThemeTokenRole = keyof typeof THEME_TOKENS;\n"]}
@@ -1,28 +1,29 @@
1
1
  'use strict';
2
2
 
3
- var chunk6MXFZ3B5_cjs = require('./chunk-6MXFZ3B5.cjs');
3
+ var chunkUK6BGM74_cjs = require('./chunk-UK6BGM74.cjs');
4
+ require('./chunk-6V44RRSB.cjs');
4
5
 
5
6
 
6
7
 
7
8
  Object.defineProperty(exports, "InputTag", {
8
9
  enumerable: true,
9
- get: function () { return chunk6MXFZ3B5_cjs.InputTag; }
10
+ get: function () { return chunkUK6BGM74_cjs.InputTag; }
10
11
  });
11
12
  Object.defineProperty(exports, "contentEditableAdapter", {
12
13
  enumerable: true,
13
- get: function () { return chunk6MXFZ3B5_cjs.contentEditableAdapter; }
14
+ get: function () { return chunkUK6BGM74_cjs.contentEditableAdapter; }
14
15
  });
15
16
  Object.defineProperty(exports, "controlledAdapter", {
16
17
  enumerable: true,
17
- get: function () { return chunk6MXFZ3B5_cjs.controlledAdapter; }
18
+ get: function () { return chunkUK6BGM74_cjs.controlledAdapter; }
18
19
  });
19
20
  Object.defineProperty(exports, "inputAdapter", {
20
21
  enumerable: true,
21
- get: function () { return chunk6MXFZ3B5_cjs.inputAdapter; }
22
+ get: function () { return chunkUK6BGM74_cjs.inputAdapter; }
22
23
  });
23
24
  Object.defineProperty(exports, "textareaAdapter", {
24
25
  enumerable: true,
25
- get: function () { return chunk6MXFZ3B5_cjs.textareaAdapter; }
26
+ get: function () { return chunkUK6BGM74_cjs.textareaAdapter; }
26
27
  });
27
28
  //# sourceMappingURL=input-tag.cjs.map
28
29
  //# sourceMappingURL=input-tag.cjs.map
package/dist/input-tag.js CHANGED
@@ -1,3 +1,4 @@
1
- export { InputTag, contentEditableAdapter, controlledAdapter, inputAdapter, textareaAdapter } from './chunk-BX7EDTL4.js';
1
+ export { InputTag, contentEditableAdapter, controlledAdapter, inputAdapter, textareaAdapter } from './chunk-37D5PYEF.js';
2
+ import './chunk-S42OGG43.js';
2
3
  //# sourceMappingURL=input-tag.js.map
3
4
  //# sourceMappingURL=input-tag.js.map
package/dist/input.cjs CHANGED
@@ -1,16 +1,17 @@
1
1
  'use strict';
2
2
 
3
3
  require('./chunk-QGPMVFZJ.cjs');
4
- var chunkJ5TFVYYM_cjs = require('./chunk-J5TFVYYM.cjs');
4
+ var chunkHNJXBMHI_cjs = require('./chunk-HNJXBMHI.cjs');
5
5
  require('./chunk-MRZXTL46.cjs');
6
6
  require('./chunk-P53432AK.cjs');
7
7
  require('./chunk-QF7CD4JH.cjs');
8
8
  require('./chunk-O3F6DYWR.cjs');
9
- require('./chunk-YJETQ76J.cjs');
9
+ require('./chunk-KKYILQTG.cjs');
10
10
  require('./chunk-MKGWHSNV.cjs');
11
11
  require('./chunk-KJ22KE56.cjs');
12
12
  require('./chunk-L3V3BYVS.cjs');
13
13
  require('./chunk-J2DI6RMR.cjs');
14
+ require('./chunk-6V44RRSB.cjs');
14
15
  require('./chunk-MKHYENKR.cjs');
15
16
  require('./chunk-TI7D4QDM.cjs');
16
17
  require('./chunk-57FQGQJK.cjs');
@@ -22,7 +23,7 @@ require('./chunk-ZU5Q77OT.cjs');
22
23
 
23
24
  Object.defineProperty(exports, "Input", {
24
25
  enumerable: true,
25
- get: function () { return chunkJ5TFVYYM_cjs.Input; }
26
+ get: function () { return chunkHNJXBMHI_cjs.Input; }
26
27
  });
27
28
  //# sourceMappingURL=input.cjs.map
28
29
  //# sourceMappingURL=input.cjs.map
package/dist/input.js CHANGED
@@ -1,14 +1,15 @@
1
1
  import './chunk-SHDSKHCC.js';
2
- export { Input } from './chunk-YEGFOMJB.js';
2
+ export { Input } from './chunk-PJNUGSKI.js';
3
3
  import './chunk-KXYMMNNV.js';
4
4
  import './chunk-WX5XYDVN.js';
5
5
  import './chunk-5WQ6FPSP.js';
6
6
  import './chunk-USWQAMI3.js';
7
- import './chunk-4WIPWJYD.js';
7
+ import './chunk-6PRXG7L6.js';
8
8
  import './chunk-QTS4Q2NK.js';
9
9
  import './chunk-OL53XYHF.js';
10
10
  import './chunk-NRXK42LO.js';
11
11
  import './chunk-MQ6VGG62.js';
12
+ import './chunk-S42OGG43.js';
12
13
  import './chunk-5VMILVWD.js';
13
14
  import './chunk-RBCMKPBX.js';
14
15
  import './chunk-RGANGU7X.js';
package/dist/inputs.cjs CHANGED
@@ -15,18 +15,19 @@ require('./chunk-HXLSEBAL.cjs');
15
15
  require('./chunk-I27K6NLX.cjs');
16
16
  var chunk2O5UXH5R_cjs = require('./chunk-2O5UXH5R.cjs');
17
17
  var chunkTLRFXSPA_cjs = require('./chunk-TLRFXSPA.cjs');
18
- var chunkJ5TFVYYM_cjs = require('./chunk-J5TFVYYM.cjs');
19
- var chunkWKPBCB67_cjs = require('./chunk-WKPBCB67.cjs');
18
+ var chunkHNJXBMHI_cjs = require('./chunk-HNJXBMHI.cjs');
19
+ var chunk6QAF35AJ_cjs = require('./chunk-6QAF35AJ.cjs');
20
20
  var chunkMAZEX4EZ_cjs = require('./chunk-MAZEX4EZ.cjs');
21
21
  require('./chunk-MRZXTL46.cjs');
22
22
  var chunkP53432AK_cjs = require('./chunk-P53432AK.cjs');
23
23
  var chunkQF7CD4JH_cjs = require('./chunk-QF7CD4JH.cjs');
24
24
  require('./chunk-O3F6DYWR.cjs');
25
- require('./chunk-YJETQ76J.cjs');
25
+ require('./chunk-KKYILQTG.cjs');
26
26
  require('./chunk-MKGWHSNV.cjs');
27
27
  var chunkKJ22KE56_cjs = require('./chunk-KJ22KE56.cjs');
28
28
  var chunkL3V3BYVS_cjs = require('./chunk-L3V3BYVS.cjs');
29
29
  require('./chunk-J2DI6RMR.cjs');
30
+ require('./chunk-6V44RRSB.cjs');
30
31
  require('./chunk-MKHYENKR.cjs');
31
32
  require('./chunk-TI7D4QDM.cjs');
32
33
  require('./chunk-57FQGQJK.cjs');
@@ -74,11 +75,11 @@ Object.defineProperty(exports, "DatePicker", {
74
75
  });
75
76
  Object.defineProperty(exports, "Input", {
76
77
  enumerable: true,
77
- get: function () { return chunkJ5TFVYYM_cjs.Input; }
78
+ get: function () { return chunkHNJXBMHI_cjs.Input; }
78
79
  });
79
80
  Object.defineProperty(exports, "Select", {
80
81
  enumerable: true,
81
- get: function () { return chunkWKPBCB67_cjs.Select; }
82
+ get: function () { return chunk6QAF35AJ_cjs.Select; }
82
83
  });
83
84
  Object.defineProperty(exports, "Textarea", {
84
85
  enumerable: true,
package/dist/inputs.js CHANGED
@@ -13,18 +13,19 @@ import './chunk-GNHQVPZP.js';
13
13
  import './chunk-SV5BW3IA.js';
14
14
  export { Switch } from './chunk-DXZCKDYS.js';
15
15
  export { DatePicker } from './chunk-2UTN3EFK.js';
16
- export { Input } from './chunk-YEGFOMJB.js';
17
- export { Select } from './chunk-FVI4JDLA.js';
16
+ export { Input } from './chunk-PJNUGSKI.js';
17
+ export { Select } from './chunk-M6UAVA2I.js';
18
18
  export { Textarea } from './chunk-UVUBV4VZ.js';
19
19
  import './chunk-KXYMMNNV.js';
20
20
  export { DisplayValue } from './chunk-WX5XYDVN.js';
21
21
  export { Field } from './chunk-5WQ6FPSP.js';
22
22
  import './chunk-USWQAMI3.js';
23
- import './chunk-4WIPWJYD.js';
23
+ import './chunk-6PRXG7L6.js';
24
24
  import './chunk-QTS4Q2NK.js';
25
25
  export { useInlineEdit } from './chunk-OL53XYHF.js';
26
26
  export { FieldModeContext, useFieldMode } from './chunk-NRXK42LO.js';
27
27
  import './chunk-MQ6VGG62.js';
28
+ import './chunk-S42OGG43.js';
28
29
  import './chunk-5VMILVWD.js';
29
30
  import './chunk-RBCMKPBX.js';
30
31
  import './chunk-RGANGU7X.js';
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunk2PSHIUM7_cjs = require('./chunk-2PSHIUM7.cjs');
3
+ var chunk6EA3DSPT_cjs = require('./chunk-6EA3DSPT.cjs');
4
4
  require('./chunk-2O5UXH5R.cjs');
5
5
  require('./chunk-TLRFXSPA.cjs');
6
- require('./chunk-J5TFVYYM.cjs');
7
- require('./chunk-WKPBCB67.cjs');
6
+ require('./chunk-HNJXBMHI.cjs');
7
+ require('./chunk-6QAF35AJ.cjs');
8
8
  require('./chunk-MAZEX4EZ.cjs');
9
9
  require('./chunk-MRZXTL46.cjs');
10
10
  require('./chunk-P53432AK.cjs');
@@ -12,11 +12,12 @@ require('./chunk-QF7CD4JH.cjs');
12
12
  require('./chunk-O3F6DYWR.cjs');
13
13
  require('./chunk-4XMBXG4K.cjs');
14
14
  require('./chunk-GKLETY7D.cjs');
15
- require('./chunk-YJETQ76J.cjs');
15
+ require('./chunk-KKYILQTG.cjs');
16
16
  require('./chunk-MKGWHSNV.cjs');
17
17
  require('./chunk-KJ22KE56.cjs');
18
18
  require('./chunk-L3V3BYVS.cjs');
19
19
  require('./chunk-J2DI6RMR.cjs');
20
+ require('./chunk-6V44RRSB.cjs');
20
21
  require('./chunk-MKHYENKR.cjs');
21
22
  require('./chunk-TI7D4QDM.cjs');
22
23
  require('./chunk-MOU6O324.cjs');
@@ -33,47 +34,47 @@ require('./chunk-ZU5Q77OT.cjs');
33
34
 
34
35
  Object.defineProperty(exports, "JsonEditor", {
35
36
  enumerable: true,
36
- get: function () { return chunk2PSHIUM7_cjs.JsonEditor; }
37
+ get: function () { return chunk6EA3DSPT_cjs.JsonEditor; }
37
38
  });
38
39
  Object.defineProperty(exports, "applyJsonEdit", {
39
40
  enumerable: true,
40
- get: function () { return chunk2PSHIUM7_cjs.applyJsonEdit; }
41
+ get: function () { return chunk6EA3DSPT_cjs.applyJsonEdit; }
41
42
  });
42
43
  Object.defineProperty(exports, "describeEdit", {
43
44
  enumerable: true,
44
- get: function () { return chunk2PSHIUM7_cjs.describeEdit; }
45
+ get: function () { return chunk6EA3DSPT_cjs.describeEdit; }
45
46
  });
46
47
  Object.defineProperty(exports, "findJsonConflicts", {
47
48
  enumerable: true,
48
- get: function () { return chunk2PSHIUM7_cjs.findJsonConflicts; }
49
+ get: function () { return chunk6EA3DSPT_cjs.findJsonConflicts; }
49
50
  });
50
51
  Object.defineProperty(exports, "getAtPath", {
51
52
  enumerable: true,
52
- get: function () { return chunk2PSHIUM7_cjs.getAtPath; }
53
+ get: function () { return chunk6EA3DSPT_cjs.getAtPath; }
53
54
  });
54
55
  Object.defineProperty(exports, "inferType", {
55
56
  enumerable: true,
56
- get: function () { return chunk2PSHIUM7_cjs.inferType; }
57
+ get: function () { return chunk6EA3DSPT_cjs.inferType; }
57
58
  });
58
59
  Object.defineProperty(exports, "parseKeyMap", {
59
60
  enumerable: true,
60
- get: function () { return chunk2PSHIUM7_cjs.parseKeyMap; }
61
+ get: function () { return chunk6EA3DSPT_cjs.parseKeyMap; }
61
62
  });
62
63
  Object.defineProperty(exports, "parsePath", {
63
64
  enumerable: true,
64
- get: function () { return chunk2PSHIUM7_cjs.parsePath; }
65
+ get: function () { return chunk6EA3DSPT_cjs.parsePath; }
65
66
  });
66
67
  Object.defineProperty(exports, "pathToString", {
67
68
  enumerable: true,
68
- get: function () { return chunk2PSHIUM7_cjs.pathToString; }
69
+ get: function () { return chunk6EA3DSPT_cjs.pathToString; }
69
70
  });
70
71
  Object.defineProperty(exports, "resolveKeyRule", {
71
72
  enumerable: true,
72
- get: function () { return chunk2PSHIUM7_cjs.resolveKeyRule; }
73
+ get: function () { return chunk6EA3DSPT_cjs.resolveKeyRule; }
73
74
  });
74
75
  Object.defineProperty(exports, "typeMatches", {
75
76
  enumerable: true,
76
- get: function () { return chunk2PSHIUM7_cjs.typeMatches; }
77
+ get: function () { return chunk6EA3DSPT_cjs.typeMatches; }
77
78
  });
78
79
  //# sourceMappingURL=json-editor.cjs.map
79
80
  //# sourceMappingURL=json-editor.cjs.map
@@ -1,8 +1,8 @@
1
- export { JsonEditor, applyJsonEdit, describeEdit, findJsonConflicts, getAtPath, inferType, parseKeyMap, parsePath, pathToString, resolveKeyRule, typeMatches } from './chunk-U4PWNLOH.js';
1
+ export { JsonEditor, applyJsonEdit, describeEdit, findJsonConflicts, getAtPath, inferType, parseKeyMap, parsePath, pathToString, resolveKeyRule, typeMatches } from './chunk-EZL5DILH.js';
2
2
  import './chunk-DXZCKDYS.js';
3
3
  import './chunk-2UTN3EFK.js';
4
- import './chunk-YEGFOMJB.js';
5
- import './chunk-FVI4JDLA.js';
4
+ import './chunk-PJNUGSKI.js';
5
+ import './chunk-M6UAVA2I.js';
6
6
  import './chunk-UVUBV4VZ.js';
7
7
  import './chunk-KXYMMNNV.js';
8
8
  import './chunk-WX5XYDVN.js';
@@ -10,11 +10,12 @@ import './chunk-5WQ6FPSP.js';
10
10
  import './chunk-USWQAMI3.js';
11
11
  import './chunk-XM3V3RSU.js';
12
12
  import './chunk-SVSQXKFL.js';
13
- import './chunk-4WIPWJYD.js';
13
+ import './chunk-6PRXG7L6.js';
14
14
  import './chunk-QTS4Q2NK.js';
15
15
  import './chunk-OL53XYHF.js';
16
16
  import './chunk-NRXK42LO.js';
17
17
  import './chunk-MQ6VGG62.js';
18
+ import './chunk-S42OGG43.js';
18
19
  import './chunk-5VMILVWD.js';
19
20
  import './chunk-RBCMKPBX.js';
20
21
  import './chunk-6FCQD2KQ.js';
@@ -1,8 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkYJETQ76J_cjs = require('./chunk-YJETQ76J.cjs');
3
+ var chunkKKYILQTG_cjs = require('./chunk-KKYILQTG.cjs');
4
4
  require('./chunk-MKGWHSNV.cjs');
5
5
  require('./chunk-J2DI6RMR.cjs');
6
+ require('./chunk-6V44RRSB.cjs');
6
7
  require('./chunk-MKHYENKR.cjs');
7
8
  require('./chunk-TI7D4QDM.cjs');
8
9
  require('./chunk-57FQGQJK.cjs');
@@ -14,55 +15,55 @@ require('./chunk-ZU5Q77OT.cjs');
14
15
 
15
16
  Object.defineProperty(exports, "HOST_ATTR", {
16
17
  enumerable: true,
17
- get: function () { return chunkYJETQ76J_cjs.HOST_ATTR; }
18
+ get: function () { return chunkKKYILQTG_cjs.HOST_ATTR; }
18
19
  });
19
20
  Object.defineProperty(exports, "InlinePasteEditor", {
20
21
  enumerable: true,
21
- get: function () { return chunkYJETQ76J_cjs.InlinePasteEditor; }
22
+ get: function () { return chunkKKYILQTG_cjs.InlinePasteEditor; }
22
23
  });
23
24
  Object.defineProperty(exports, "InlinePill", {
24
25
  enumerable: true,
25
- get: function () { return chunkYJETQ76J_cjs.InlinePill; }
26
+ get: function () { return chunkKKYILQTG_cjs.InlinePill; }
26
27
  });
27
28
  Object.defineProperty(exports, "PILL_MARK", {
28
29
  enumerable: true,
29
- get: function () { return chunkYJETQ76J_cjs.PILL_MARK; }
30
+ get: function () { return chunkKKYILQTG_cjs.PILL_MARK; }
30
31
  });
31
32
  Object.defineProperty(exports, "PastedFilesInput", {
32
33
  enumerable: true,
33
- get: function () { return chunkYJETQ76J_cjs.PastedFilesInput; }
34
+ get: function () { return chunkKKYILQTG_cjs.PastedFilesInput; }
34
35
  });
35
36
  Object.defineProperty(exports, "endsOf", {
36
37
  enumerable: true,
37
- get: function () { return chunkYJETQ76J_cjs.endsOf; }
38
+ get: function () { return chunkKKYILQTG_cjs.endsOf; }
38
39
  });
39
40
  Object.defineProperty(exports, "expandMarkers", {
40
41
  enumerable: true,
41
- get: function () { return chunkYJETQ76J_cjs.expandMarkers; }
42
+ get: function () { return chunkKKYILQTG_cjs.expandMarkers; }
42
43
  });
43
44
  Object.defineProperty(exports, "markedIds", {
44
45
  enumerable: true,
45
- get: function () { return chunkYJETQ76J_cjs.markedIds; }
46
+ get: function () { return chunkKKYILQTG_cjs.markedIds; }
46
47
  });
47
48
  Object.defineProperty(exports, "pasteMarker", {
48
49
  enumerable: true,
49
- get: function () { return chunkYJETQ76J_cjs.pasteMarker; }
50
+ get: function () { return chunkKKYILQTG_cjs.pasteMarker; }
50
51
  });
51
52
  Object.defineProperty(exports, "segmentValue", {
52
53
  enumerable: true,
53
- get: function () { return chunkYJETQ76J_cjs.segmentValue; }
54
+ get: function () { return chunkKKYILQTG_cjs.segmentValue; }
54
55
  });
55
56
  Object.defineProperty(exports, "useInlinePaste", {
56
57
  enumerable: true,
57
- get: function () { return chunkYJETQ76J_cjs.useInlinePaste; }
58
+ get: function () { return chunkKKYILQTG_cjs.useInlinePaste; }
58
59
  });
59
60
  Object.defineProperty(exports, "usePastePills", {
60
61
  enumerable: true,
61
- get: function () { return chunkYJETQ76J_cjs.usePastePills; }
62
+ get: function () { return chunkKKYILQTG_cjs.usePastePills; }
62
63
  });
63
64
  Object.defineProperty(exports, "withSeparators", {
64
65
  enumerable: true,
65
- get: function () { return chunkYJETQ76J_cjs.withSeparators; }
66
+ get: function () { return chunkKKYILQTG_cjs.withSeparators; }
66
67
  });
67
68
  //# sourceMappingURL=paste-pills.cjs.map
68
69
  //# sourceMappingURL=paste-pills.cjs.map
@@ -1,6 +1,7 @@
1
- export { HOST_ATTR, InlinePasteEditor, InlinePill, PILL_MARK, PastedFilesInput, endsOf, expandMarkers, markedIds, pasteMarker, segmentValue, useInlinePaste, usePastePills, withSeparators } from './chunk-4WIPWJYD.js';
1
+ export { HOST_ATTR, InlinePasteEditor, InlinePill, PILL_MARK, PastedFilesInput, endsOf, expandMarkers, markedIds, pasteMarker, segmentValue, useInlinePaste, usePastePills, withSeparators } from './chunk-6PRXG7L6.js';
2
2
  import './chunk-QTS4Q2NK.js';
3
3
  import './chunk-MQ6VGG62.js';
4
+ import './chunk-S42OGG43.js';
4
5
  import './chunk-5VMILVWD.js';
5
6
  import './chunk-RBCMKPBX.js';
6
7
  import './chunk-RGANGU7X.js';
package/dist/pillbox.cjs CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkKSU6RYWU_cjs = require('./chunk-KSU6RYWU.cjs');
3
+ var chunk3T3LBIQA_cjs = require('./chunk-3T3LBIQA.cjs');
4
+ require('./chunk-6V44RRSB.cjs');
4
5
  require('./chunk-SNHU2AI4.cjs');
5
6
  require('./chunk-ZU5Q77OT.cjs');
6
7
 
@@ -8,7 +9,7 @@ require('./chunk-ZU5Q77OT.cjs');
8
9
 
9
10
  Object.defineProperty(exports, "Pillbox", {
10
11
  enumerable: true,
11
- get: function () { return chunkKSU6RYWU_cjs.Pillbox; }
12
+ get: function () { return chunk3T3LBIQA_cjs.Pillbox; }
12
13
  });
13
14
  //# sourceMappingURL=pillbox.cjs.map
14
15
  //# sourceMappingURL=pillbox.cjs.map
package/dist/pillbox.js CHANGED
@@ -1,4 +1,5 @@
1
- export { Pillbox } from './chunk-G35XN5WV.js';
1
+ export { Pillbox } from './chunk-CDW7MFPG.js';
2
+ import './chunk-S42OGG43.js';
2
3
  import './chunk-EDYAXGUM.js';
3
4
  import './chunk-MMW2JGKZ.js';
4
5
  //# sourceMappingURL=pillbox.js.map
@@ -1,12 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var chunkISNS4GAW_cjs = require('./chunk-ISNS4GAW.cjs');
3
+ var chunkPS7C6GKI_cjs = require('./chunk-PS7C6GKI.cjs');
4
4
  require('./chunk-OASSZI6M.cjs');
5
5
  require('./chunk-I27K6NLX.cjs');
6
6
  require('./chunk-AIA5UNQ5.cjs');
7
- require('./chunk-YJETQ76J.cjs');
7
+ require('./chunk-JKD6CFIP.cjs');
8
+ require('./chunk-KKYILQTG.cjs');
8
9
  require('./chunk-MKGWHSNV.cjs');
10
+ require('./chunk-2C64OVOZ.cjs');
9
11
  require('./chunk-J2DI6RMR.cjs');
12
+ require('./chunk-6V44RRSB.cjs');
10
13
  require('./chunk-MKHYENKR.cjs');
11
14
  require('./chunk-TI7D4QDM.cjs');
12
15
  require('./chunk-57FQGQJK.cjs');
@@ -22,15 +25,15 @@ require('./chunk-ZU5Q77OT.cjs');
22
25
 
23
26
  Object.defineProperty(exports, "PromptInput", {
24
27
  enumerable: true,
25
- get: function () { return chunkISNS4GAW_cjs.PromptInput; }
28
+ get: function () { return chunkPS7C6GKI_cjs.PromptInput; }
26
29
  });
27
30
  Object.defineProperty(exports, "promptDataUrlToFile", {
28
31
  enumerable: true,
29
- get: function () { return chunkISNS4GAW_cjs.promptDataUrlToFile; }
32
+ get: function () { return chunkPS7C6GKI_cjs.promptDataUrlToFile; }
30
33
  });
31
34
  Object.defineProperty(exports, "promptFileToDataUrl", {
32
35
  enumerable: true,
33
- get: function () { return chunkISNS4GAW_cjs.promptFileToDataUrl; }
36
+ get: function () { return chunkPS7C6GKI_cjs.promptFileToDataUrl; }
34
37
  });
35
38
  //# sourceMappingURL=prompt-input.cjs.map
36
39
  //# sourceMappingURL=prompt-input.cjs.map
@@ -1,3 +1,4 @@
1
- export { a as PromptAttachment, b as PromptCmd, c as PromptDraft, d as PromptDraftFile, e as PromptDraftPill, f as PromptFocusOptions, g as PromptInput, h as PromptInputHandle, i as PromptInputProps, j as PromptMention, k as PromptSetDraftOptions, p as promptDataUrlToFile, o as promptFileToDataUrl } from './index-n_4_OZK_.cjs';
1
+ export { a as PromptAttachment, b as PromptCmd, c as PromptDraft, d as PromptDraftFile, e as PromptDraftPill, f as PromptFocusOptions, g as PromptInput, h as PromptInputHandle, i as PromptInputProps, j as PromptMention, k as PromptSetDraftOptions, p as promptDataUrlToFile, o as promptFileToDataUrl } from './index-BMVQnKTH.cjs';
2
+ export { S as SubmitRejection, a as SubmitResult } from './use-acknowledged-submit-7nC0vSCP.cjs';
2
3
  import 'react';
3
4
  import './PastePills.types-CpXzsuwJ.cjs';
@@ -1,3 +1,4 @@
1
- export { a as PromptAttachment, b as PromptCmd, c as PromptDraft, d as PromptDraftFile, e as PromptDraftPill, f as PromptFocusOptions, g as PromptInput, h as PromptInputHandle, i as PromptInputProps, j as PromptMention, k as PromptSetDraftOptions, p as promptDataUrlToFile, o as promptFileToDataUrl } from './index-BQi_n6eS.js';
1
+ export { a as PromptAttachment, b as PromptCmd, c as PromptDraft, d as PromptDraftFile, e as PromptDraftPill, f as PromptFocusOptions, g as PromptInput, h as PromptInputHandle, i as PromptInputProps, j as PromptMention, k as PromptSetDraftOptions, p as promptDataUrlToFile, o as promptFileToDataUrl } from './index-B8OkuYSt.js';
2
+ export { S as SubmitRejection, a as SubmitResult } from './use-acknowledged-submit-7nC0vSCP.js';
2
3
  import 'react';
3
4
  import './PastePills.types-CpXzsuwJ.js';
@@ -1,10 +1,13 @@
1
- export { PromptInput, promptDataUrlToFile, promptFileToDataUrl } from './chunk-HRZDEZSE.js';
1
+ export { PromptInput, promptDataUrlToFile, promptFileToDataUrl } from './chunk-FYUEDPST.js';
2
2
  import './chunk-GR2WKBER.js';
3
3
  import './chunk-SV5BW3IA.js';
4
4
  import './chunk-TJ66S5K6.js';
5
- import './chunk-4WIPWJYD.js';
5
+ import './chunk-J6IQHJET.js';
6
+ import './chunk-6PRXG7L6.js';
6
7
  import './chunk-QTS4Q2NK.js';
8
+ import './chunk-I3LAFKJU.js';
7
9
  import './chunk-MQ6VGG62.js';
10
+ import './chunk-S42OGG43.js';
8
11
  import './chunk-5VMILVWD.js';
9
12
  import './chunk-RBCMKPBX.js';
10
13
  import './chunk-RGANGU7X.js';
package/dist/select.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  require('./chunk-HXLSEBAL.cjs');
4
- var chunkWKPBCB67_cjs = require('./chunk-WKPBCB67.cjs');
4
+ var chunk6QAF35AJ_cjs = require('./chunk-6QAF35AJ.cjs');
5
5
  require('./chunk-MRZXTL46.cjs');
6
6
  require('./chunk-P53432AK.cjs');
7
7
  require('./chunk-QF7CD4JH.cjs');
@@ -9,6 +9,7 @@ require('./chunk-O3F6DYWR.cjs');
9
9
  require('./chunk-KJ22KE56.cjs');
10
10
  require('./chunk-L3V3BYVS.cjs');
11
11
  require('./chunk-J2DI6RMR.cjs');
12
+ require('./chunk-6V44RRSB.cjs');
12
13
  require('./chunk-MKHYENKR.cjs');
13
14
  require('./chunk-TI7D4QDM.cjs');
14
15
  require('./chunk-57FQGQJK.cjs');
@@ -19,7 +20,7 @@ require('./chunk-ZU5Q77OT.cjs');
19
20
 
20
21
  Object.defineProperty(exports, "Select", {
21
22
  enumerable: true,
22
- get: function () { return chunkWKPBCB67_cjs.Select; }
23
+ get: function () { return chunk6QAF35AJ_cjs.Select; }
23
24
  });
24
25
  //# sourceMappingURL=select.cjs.map
25
26
  //# sourceMappingURL=select.cjs.map
package/dist/select.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import './chunk-GNHQVPZP.js';
2
- export { Select } from './chunk-FVI4JDLA.js';
2
+ export { Select } from './chunk-M6UAVA2I.js';
3
3
  import './chunk-KXYMMNNV.js';
4
4
  import './chunk-WX5XYDVN.js';
5
5
  import './chunk-5WQ6FPSP.js';
@@ -7,6 +7,7 @@ import './chunk-USWQAMI3.js';
7
7
  import './chunk-OL53XYHF.js';
8
8
  import './chunk-NRXK42LO.js';
9
9
  import './chunk-MQ6VGG62.js';
10
+ import './chunk-S42OGG43.js';
10
11
  import './chunk-5VMILVWD.js';
11
12
  import './chunk-RBCMKPBX.js';
12
13
  import './chunk-RGANGU7X.js';
@@ -0,0 +1,12 @@
1
+ /** What an `onSubmit` Promise resolves to when the host refuses the send. */
2
+ type SubmitRejection = {
3
+ ok: false;
4
+ error?: string;
5
+ };
6
+ /**
7
+ * What an `onSubmit` Promise may resolve to. Anything other than a
8
+ * `SubmitRejection` (including `undefined`) means the send was accepted.
9
+ */
10
+ type SubmitResult = void | SubmitRejection;
11
+
12
+ export type { SubmitRejection as S, SubmitResult as a };
@@ -0,0 +1,12 @@
1
+ /** What an `onSubmit` Promise resolves to when the host refuses the send. */
2
+ type SubmitRejection = {
3
+ ok: false;
4
+ error?: string;
5
+ };
6
+ /**
7
+ * What an `onSubmit` Promise may resolve to. Anything other than a
8
+ * `SubmitRejection` (including `undefined`) means the send was accepted.
9
+ */
10
+ type SubmitResult = void | SubmitRejection;
11
+
12
+ export type { SubmitRejection as S, SubmitResult as a };
package/docs/Composer.md CHANGED
@@ -24,12 +24,75 @@ import { Composer } from "@particle-academy/react-fancy";
24
24
  | value | `string` | - | Controlled input value |
25
25
  | defaultValue | `string` | `""` | Default value (uncontrolled) |
26
26
  | onChange | `(value: string) => void` | - | Callback on input change |
27
- | onSubmit | `(value: string) => void` | - | Callback when Enter is pressed (without Shift) |
27
+ | onSubmit | `(value, extras) => void \| Promise<SubmitResult>` | - | Called on Enter (without Shift, and not while an IME composition is being confirmed) or the send button. Return a Promise to hold the message until the send is acknowledged; see [Acknowledged send](#acknowledged-send) |
28
+ | onSubmitError | `(error: unknown) => void` | - | Called when a Promise from `onSubmit` rejects (with the reason) or resolves `{ ok: false }` (with its `error`). The message is kept |
28
29
  | placeholder | `string` | `"Type a message..."` | Textarea placeholder |
29
30
  | actions | `ReactNode` | - | Custom action buttons rendered in the bottom toolbar |
30
- | disabled | `boolean` | `false` | Disable input and submit |
31
+ | disabled | `boolean` | `false` | Disable the text, the pills and the send |
32
+ | sendDisabled | `boolean` | `false` | Disable only the send. The text stays editable; Enter does not send |
33
+ | name | `string` | - | Form field name for the text. On the textarea; with `pastePlacement="inline"`, on a hidden input carrying the expanded text |
34
+ | inputId | `string` | - | `id` of the text field, in either placement |
31
35
  | className | `string` | - | Additional CSS classes |
32
36
 
37
+ ## Acknowledged send
38
+
39
+ Return a Promise from `onSubmit` and the message stays until the send is
40
+ acknowledged. While it is pending the send button is disabled and
41
+ `aria-busy`, a second send is refused, and the root carries
42
+ `data-submit-state="submitting"`. The text stays editable.
43
+
44
+ - **Resolves** (to anything but `{ ok: false }`): the message clears, exactly
45
+ as a void `onSubmit` clears it, but only if the message is still the revision
46
+ that was sent. If the text, a held paste or a held image changed while the
47
+ send was in flight (the person typing, even typing and then deleting; a
48
+ paste; a host moving a controlled `value` / `heldPastes` / `heldImages`), the
49
+ newer message is kept whole rather than discarded.
50
+ - **Rejects, or resolves `{ ok: false, error? }`**: the text and held pastes
51
+ are kept, `onSubmitError` is called, the root carries
52
+ `data-submit-state="error"`, and a visually hidden `role="alert"`
53
+ (`[data-react-fancy-composer-error]`) announces the failure. The next send
54
+ clears it.
55
+
56
+ ```tsx
57
+ <Composer
58
+ name="message"
59
+ inputId="chat-message"
60
+ sendDisabled={agentIsAnswering}
61
+ onSubmit={async (text) => {
62
+ const res = await fetch("/api/messages", {
63
+ method: "POST",
64
+ body: JSON.stringify({ text }),
65
+ });
66
+ if (!res.ok) return { ok: false, error: "The server did not accept it." };
67
+ }}
68
+ onSubmitError={(error) => toast.error(String(error ?? "Message not sent"))}
69
+ />
70
+ ```
71
+
72
+ A void `onSubmit` behaves exactly as it always has: the message clears at once.
73
+ An `onSubmit` that was ALREADY `async` now waits for its Promise before
74
+ clearing, and keeps the message if it rejects.
75
+
76
+ **Controlled `value`:** the clear is an `onChange("")` like any other, so the
77
+ host still decides. Clearing the value yourself inside `onSubmit` also still
78
+ works; with an async send, clear it after the `await` so a failure keeps it.
79
+
80
+ **Why the text stays editable while sending:** the person can start the next
81
+ message, and nothing they type is lost — only the draft that was sent is
82
+ cleared. Locking the field would buy nothing: the sent text is already in
83
+ flight, so editing it cannot change what was sent.
84
+
85
+ ## Stable handles
86
+
87
+ | Selector | What |
88
+ |----------|------|
89
+ | `[data-react-fancy-composer]` | Root. `data-submit-state` is `submitting` or `error` when not idle |
90
+ | `[data-react-fancy-composer-textarea]` | The text field, default placement |
91
+ | `[data-react-fancy-composer-input]` | The text field, `pastePlacement="inline"` (a contenteditable) |
92
+ | `#<inputId>` | The text field, either placement |
93
+ | `[data-react-fancy-composer-send]` | The send button |
94
+ | `[data-react-fancy-composer-error]` | The failure announcement, while there is one |
95
+
33
96
  ## With Actions
34
97
 
35
98
  ```tsx