payload-intl 1.2.2 → 1.2.3

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 (163) hide show
  1. package/dist/components/MessageFormField.d.ts +15 -0
  2. package/dist/components/MessageFormField.d.ts.map +1 -0
  3. package/dist/components/{MessageController.js → MessageFormField.js} +5 -3
  4. package/dist/components/MessageFormField.js.map +1 -0
  5. package/dist/components/MessagesForm.d.ts +3 -1
  6. package/dist/components/MessagesForm.d.ts.map +1 -1
  7. package/dist/components/MessagesForm.js +25 -36
  8. package/dist/components/MessagesForm.js.map +1 -1
  9. package/dist/components/{MessageFormContext.d.ts → MessagesFormProvider.d.ts} +6 -2
  10. package/dist/components/MessagesFormProvider.d.ts.map +1 -0
  11. package/dist/components/{MessageFormContext.js → MessagesFormProvider.js} +8 -4
  12. package/dist/components/MessagesFormProvider.js.map +1 -0
  13. package/dist/components/MessagesLink.js +5 -2
  14. package/dist/components/MessagesLink.js.map +1 -1
  15. package/dist/components/MessagesView.d.ts +1 -1
  16. package/dist/components/MessagesView.d.ts.map +1 -1
  17. package/dist/components/MessagesView.js +13 -4
  18. package/dist/components/MessagesView.js.map +1 -1
  19. package/dist/components/actions/CopyMessages.d.ts +2 -0
  20. package/dist/components/actions/CopyMessages.d.ts.map +1 -0
  21. package/dist/components/actions/{Move.js → CopyMessages.js} +6 -6
  22. package/dist/components/actions/CopyMessages.js.map +1 -0
  23. package/dist/components/actions/JsonImport.d.ts +4 -1
  24. package/dist/components/actions/JsonImport.d.ts.map +1 -1
  25. package/dist/components/actions/JsonImport.js +7 -25
  26. package/dist/components/actions/JsonImport.js.map +1 -1
  27. package/dist/components/hooks/useHtmlLexicalAdapter.d.ts +12 -0
  28. package/dist/components/hooks/useHtmlLexicalAdapter.d.ts.map +1 -0
  29. package/dist/components/hooks/useHtmlLexicalAdapter.js +63 -0
  30. package/dist/components/hooks/useHtmlLexicalAdapter.js.map +1 -0
  31. package/dist/components/hooks/useMessagesFormSubmit.d.ts +11 -0
  32. package/dist/components/hooks/useMessagesFormSubmit.d.ts.map +1 -0
  33. package/dist/components/hooks/useMessagesFormSubmit.js +44 -0
  34. package/dist/components/hooks/useMessagesFormSubmit.js.map +1 -0
  35. package/dist/components/inputs/FieldWrapper.d.ts +9 -0
  36. package/dist/components/inputs/FieldWrapper.d.ts.map +1 -0
  37. package/dist/components/inputs/FieldWrapper.js +24 -0
  38. package/dist/components/inputs/FieldWrapper.js.map +1 -0
  39. package/dist/components/inputs/{InputWrapper.module.css → FieldWrapper.module.css} +2 -12
  40. package/dist/components/inputs/LexicalInput.d.ts +2 -13
  41. package/dist/components/inputs/LexicalInput.d.ts.map +1 -1
  42. package/dist/components/inputs/LexicalInput.js +4 -63
  43. package/dist/components/inputs/LexicalInput.js.map +1 -1
  44. package/dist/components/inputs/MessageInput.d.ts +6 -3
  45. package/dist/components/inputs/MessageInput.d.ts.map +1 -1
  46. package/dist/components/inputs/MessageInput.js +47 -43
  47. package/dist/components/inputs/MessageInput.js.map +1 -1
  48. package/dist/components/inputs/MessageInput.module.css +23 -4
  49. package/dist/components/inputs/ReferencePopover.d.ts +7 -0
  50. package/dist/components/inputs/ReferencePopover.d.ts.map +1 -0
  51. package/dist/components/inputs/ReferencePopover.js +42 -0
  52. package/dist/components/inputs/ReferencePopover.js.map +1 -0
  53. package/dist/components/inputs/ReferencePopover.module.css +70 -0
  54. package/dist/components/inputs/SingleLinePlugin.d.ts +2 -0
  55. package/dist/components/inputs/SingleLinePlugin.d.ts.map +1 -0
  56. package/dist/components/inputs/SingleLinePlugin.js +24 -0
  57. package/dist/components/inputs/SingleLinePlugin.js.map +1 -0
  58. package/dist/components/inputs/variables/VariableChip.d.ts.map +1 -1
  59. package/dist/components/inputs/variables/VariableChip.js +31 -32
  60. package/dist/components/inputs/variables/VariableChip.js.map +1 -1
  61. package/dist/components/inputs/variables/VariableChip.module.css +3 -3
  62. package/dist/components/inputs/variables/VariableSuggestion.d.ts +4 -0
  63. package/dist/components/inputs/variables/VariableSuggestion.d.ts.map +1 -0
  64. package/dist/components/inputs/variables/VariableSuggestion.js +24 -0
  65. package/dist/components/inputs/variables/VariableSuggestion.js.map +1 -0
  66. package/dist/components/inputs/variables/editors/PluralVariableEditor.d.ts.map +1 -1
  67. package/dist/components/inputs/variables/editors/PluralVariableEditor.js +62 -60
  68. package/dist/components/inputs/variables/editors/PluralVariableEditor.js.map +1 -1
  69. package/dist/components/inputs/variables/editors/PluralVariableEditor.module.css +4 -4
  70. package/dist/components/inputs/variables/editors/TemporalVariableEditor.d.ts +11 -0
  71. package/dist/components/inputs/variables/editors/TemporalVariableEditor.d.ts.map +1 -0
  72. package/dist/components/inputs/variables/editors/{DateVariableEditor.js → TemporalVariableEditor.js} +3 -3
  73. package/dist/components/inputs/variables/editors/TemporalVariableEditor.js.map +1 -0
  74. package/dist/components/inputs/variables/pickers/NumericVariableEditor.d.ts +7 -0
  75. package/dist/components/inputs/variables/pickers/{NumericVariablePicker.d.ts.map → NumericVariableEditor.d.ts.map} +1 -1
  76. package/dist/components/inputs/variables/pickers/{NumericVariablePicker.js → NumericVariableEditor.js} +15 -9
  77. package/dist/components/inputs/variables/pickers/NumericVariableEditor.js.map +1 -0
  78. package/dist/components/inputs/variables/pickers/{NumericVariablePicker.module.css → NumericVariableEditor.module.css} +3 -3
  79. package/dist/components/inputs/variables/pickers/TemporalVariablePicker.d.ts +7 -0
  80. package/dist/components/inputs/variables/pickers/TemporalVariablePicker.d.ts.map +1 -0
  81. package/dist/components/inputs/variables/pickers/TemporalVariablePicker.js +57 -0
  82. package/dist/components/inputs/variables/pickers/TemporalVariablePicker.js.map +1 -0
  83. package/dist/components/inputs/variables/pickers/{TemporalElementEditor.module.css → TemporalVariablePicker.module.css} +3 -3
  84. package/dist/components/layout/GroupStatusDot.d.ts +6 -0
  85. package/dist/components/layout/GroupStatusDot.d.ts.map +1 -0
  86. package/dist/components/layout/GroupStatusDot.js +24 -0
  87. package/dist/components/layout/GroupStatusDot.js.map +1 -0
  88. package/dist/components/layout/MessageField.d.ts +2 -1
  89. package/dist/components/layout/MessageField.d.ts.map +1 -1
  90. package/dist/components/layout/MessageField.js +52 -33
  91. package/dist/components/layout/MessageField.js.map +1 -1
  92. package/dist/components/layout/MessageField.module.css +21 -10
  93. package/dist/components/layout/MessagesTabs.d.ts.map +1 -1
  94. package/dist/components/layout/MessagesTabs.js +3 -5
  95. package/dist/components/layout/MessagesTabs.js.map +1 -1
  96. package/dist/components/layout/MessagesTree.d.ts +1 -1
  97. package/dist/components/layout/MessagesTree.d.ts.map +1 -1
  98. package/dist/components/layout/MessagesTree.js +33 -43
  99. package/dist/components/layout/MessagesTree.js.map +1 -1
  100. package/dist/components/layout/MessagesTree.module.css +10 -5
  101. package/dist/components/layout/StatusDot.d.ts +7 -0
  102. package/dist/components/layout/StatusDot.d.ts.map +1 -0
  103. package/dist/components/layout/StatusDot.js +12 -0
  104. package/dist/components/layout/StatusDot.js.map +1 -0
  105. package/dist/components/layout/StatusDot.module.css +16 -0
  106. package/dist/const.d.ts +2 -2
  107. package/dist/const.js +1 -1
  108. package/dist/entities.js +1 -1
  109. package/dist/internals/index.d.ts.map +1 -0
  110. package/dist/internals/index.js.map +1 -0
  111. package/dist/internals/procedure.d.ts.map +1 -0
  112. package/dist/internals/procedure.js.map +1 -0
  113. package/dist/internals/urls.d.ts.map +1 -0
  114. package/dist/internals/urls.js.map +1 -0
  115. package/dist/internals/utils.d.ts.map +1 -0
  116. package/dist/internals/utils.js.map +1 -0
  117. package/dist/utils/sanitize.d.ts +7 -6
  118. package/dist/utils/sanitize.d.ts.map +1 -1
  119. package/dist/utils/sanitize.js +11 -8
  120. package/dist/utils/sanitize.js.map +1 -1
  121. package/package.json +4 -3
  122. package/dist/_common/index.d.ts.map +0 -1
  123. package/dist/_common/index.js.map +0 -1
  124. package/dist/_common/procedure.d.ts.map +0 -1
  125. package/dist/_common/procedure.js.map +0 -1
  126. package/dist/_common/urls.d.ts.map +0 -1
  127. package/dist/_common/urls.js.map +0 -1
  128. package/dist/_common/utils.d.ts.map +0 -1
  129. package/dist/_common/utils.js.map +0 -1
  130. package/dist/components/MessageController.d.ts +0 -13
  131. package/dist/components/MessageController.d.ts.map +0 -1
  132. package/dist/components/MessageController.js.map +0 -1
  133. package/dist/components/MessageFormContext.d.ts.map +0 -1
  134. package/dist/components/MessageFormContext.js.map +0 -1
  135. package/dist/components/actions/Move.d.ts +0 -2
  136. package/dist/components/actions/Move.d.ts.map +0 -1
  137. package/dist/components/actions/Move.js.map +0 -1
  138. package/dist/components/inputs/InputWrapper.d.ts +0 -8
  139. package/dist/components/inputs/InputWrapper.d.ts.map +0 -1
  140. package/dist/components/inputs/InputWrapper.js +0 -34
  141. package/dist/components/inputs/InputWrapper.js.map +0 -1
  142. package/dist/components/inputs/variables/editors/DateVariableEditor.d.ts +0 -10
  143. package/dist/components/inputs/variables/editors/DateVariableEditor.d.ts.map +0 -1
  144. package/dist/components/inputs/variables/editors/DateVariableEditor.js.map +0 -1
  145. package/dist/components/inputs/variables/editors/TimeVariableEditor.d.ts +0 -10
  146. package/dist/components/inputs/variables/editors/TimeVariableEditor.d.ts.map +0 -1
  147. package/dist/components/inputs/variables/editors/TimeVariableEditor.js +0 -15
  148. package/dist/components/inputs/variables/editors/TimeVariableEditor.js.map +0 -1
  149. package/dist/components/inputs/variables/pickers/NumericVariablePicker.d.ts +0 -7
  150. package/dist/components/inputs/variables/pickers/NumericVariablePicker.js.map +0 -1
  151. package/dist/components/inputs/variables/pickers/TemporalElementEditor.d.ts +0 -7
  152. package/dist/components/inputs/variables/pickers/TemporalElementEditor.d.ts.map +0 -1
  153. package/dist/components/inputs/variables/pickers/TemporalElementEditor.js +0 -58
  154. package/dist/components/inputs/variables/pickers/TemporalElementEditor.js.map +0 -1
  155. /package/dist/components/actions/{Move.module.css → CopyMessages.module.css} +0 -0
  156. /package/dist/{_common → internals}/index.d.ts +0 -0
  157. /package/dist/{_common → internals}/index.js +0 -0
  158. /package/dist/{_common → internals}/procedure.d.ts +0 -0
  159. /package/dist/{_common → internals}/procedure.js +0 -0
  160. /package/dist/{_common → internals}/urls.d.ts +0 -0
  161. /package/dist/{_common → internals}/urls.js +0 -0
  162. /package/dist/{_common → internals}/utils.d.ts +0 -0
  163. /package/dist/{_common → internals}/utils.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/inputs/ReferencePopover.tsx"],"sourcesContent":["import { Popover } from '@base-ui/react/popover';\n\nimport { IconX } from '@tabler/icons-react';\nimport type { ReactElement } from 'react';\n\nimport styles from './ReferencePopover.module.css';\n\nexport interface ReferencePopoverProps {\n reference?: string;\n children: ReactElement;\n}\n\nexport function ReferencePopover({\n reference,\n children,\n}: ReferencePopoverProps) {\n if (!reference) return children;\n return (\n <Popover.Root>\n <Popover.Trigger nativeButton={false} render={children} />\n <Popover.Portal>\n <Popover.Positioner align=\"start\" side=\"top\" sideOffset={4}>\n <Popover.Popup\n className={styles.popup}\n initialFocus={false}\n onMouseDown={(e) => e.preventDefault()}\n >\n <Popover.Close className={styles.dismiss} type=\"button\">\n <IconX size={14} />\n </Popover.Close>\n <p className={styles.text}>{reference}</p>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n"],"names":["Popover","IconX","styles","ReferencePopover","reference","children","Root","Trigger","nativeButton","render","Portal","Positioner","align","side","sideOffset","Popup","className","popup","initialFocus","onMouseDown","e","preventDefault","Close","dismiss","type","size","p","text"],"mappings":";AAAA,SAASA,OAAO,QAAQ,yBAAyB;AAEjD,SAASC,KAAK,QAAQ,sBAAsB;AAG5C,OAAOC,YAAY,gCAAgC;AAOnD,OAAO,SAASC,iBAAiB,EAC/BC,SAAS,EACTC,QAAQ,EACc;IACtB,IAAI,CAACD,WAAW,OAAOC;IACvB,qBACE,MAACL,QAAQM,IAAI;;0BACX,KAACN,QAAQO,OAAO;gBAACC,cAAc;gBAAOC,QAAQJ;;0BAC9C,KAACL,QAAQU,MAAM;0BACb,cAAA,KAACV,QAAQW,UAAU;oBAACC,OAAM;oBAAQC,MAAK;oBAAMC,YAAY;8BACvD,cAAA,MAACd,QAAQe,KAAK;wBACZC,WAAWd,OAAOe,KAAK;wBACvBC,cAAc;wBACdC,aAAa,CAACC,IAAMA,EAAEC,cAAc;;0CAEpC,KAACrB,QAAQsB,KAAK;gCAACN,WAAWd,OAAOqB,OAAO;gCAAEC,MAAK;0CAC7C,cAAA,KAACvB;oCAAMwB,MAAM;;;0CAEf,KAACC;gCAAEV,WAAWd,OAAOyB,IAAI;0CAAGvB;;;;;;;;AAMxC"}
@@ -0,0 +1,70 @@
1
+ .popup {
2
+ z-index: 50;
3
+ position: relative;
4
+ max-height: 8rem;
5
+ overflow-y: auto;
6
+ border-radius: var(--style-radius-m);
7
+ border: 1px solid var(--theme-border-color);
8
+ background-color: var(--theme-elevation-50);
9
+ padding: 0.5rem 2rem 0.5rem 0.75rem;
10
+ box-shadow:
11
+ 0 4px 6px -1px rgb(0 0 0 / 0.1),
12
+ 0 2px 4px -2px rgb(0 0 0 / 0.1);
13
+ }
14
+
15
+ .popup[data-open] {
16
+ animation: popoverIn 150ms ease-out;
17
+ }
18
+
19
+ .popup[data-closed] {
20
+ animation: popoverOut 100ms ease-in;
21
+ }
22
+
23
+ @keyframes popoverIn {
24
+ from {
25
+ opacity: 0;
26
+ transform: translateY(4px);
27
+ }
28
+ to {
29
+ opacity: 1;
30
+ transform: translateY(0);
31
+ }
32
+ }
33
+
34
+ @keyframes popoverOut {
35
+ from {
36
+ opacity: 1;
37
+ transform: translateY(0);
38
+ }
39
+ to {
40
+ opacity: 0;
41
+ transform: translateY(4px);
42
+ }
43
+ }
44
+
45
+ .dismiss {
46
+ position: absolute;
47
+ top: 0.25rem;
48
+ right: 0.25rem;
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ cursor: pointer;
53
+ border: none;
54
+ background: transparent;
55
+ padding: 0.125rem;
56
+ border-radius: var(--style-radius-s);
57
+ color: var(--theme-elevation-500);
58
+ }
59
+
60
+ .dismiss:hover {
61
+ color: var(--theme-elevation-800);
62
+ }
63
+
64
+ .text {
65
+ margin: 0;
66
+ font-size: var(--font-size-small);
67
+ color: var(--theme-elevation-500);
68
+ white-space: pre-wrap;
69
+ word-break: break-word;
70
+ }
@@ -0,0 +1,2 @@
1
+ export declare function SingleLinePlugin(): null;
2
+ //# sourceMappingURL=SingleLinePlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SingleLinePlugin.d.ts","sourceRoot":"","sources":["../../../src/components/inputs/SingleLinePlugin.tsx"],"names":[],"mappings":"AASA,wBAAgB,gBAAgB,SA2B/B"}
@@ -0,0 +1,24 @@
1
+ import { COMMAND_PRIORITY_HIGH, INSERT_LINE_BREAK_COMMAND, INSERT_PARAGRAPH_COMMAND, LineBreakNode } from '@payloadcms/richtext-lexical/lexical';
2
+ import { useLexicalComposerContext } from '@payloadcms/richtext-lexical/lexical/react/LexicalComposerContext';
3
+ import { useEffect } from 'react';
4
+ export function SingleLinePlugin() {
5
+ const [editor] = useLexicalComposerContext();
6
+ useEffect(()=>{
7
+ const unregisterLineBreak = editor.registerCommand(INSERT_LINE_BREAK_COMMAND, ()=>true, COMMAND_PRIORITY_HIGH);
8
+ const unregisterParagraph = editor.registerCommand(INSERT_PARAGRAPH_COMMAND, ()=>true, COMMAND_PRIORITY_HIGH);
9
+ // Catch line breaks inserted via paste or other means
10
+ const unregisterTransform = editor.registerNodeTransform(LineBreakNode, (node)=>{
11
+ node.remove();
12
+ });
13
+ return ()=>{
14
+ unregisterLineBreak();
15
+ unregisterParagraph();
16
+ unregisterTransform();
17
+ };
18
+ }, [
19
+ editor
20
+ ]);
21
+ return null;
22
+ }
23
+
24
+ //# sourceMappingURL=SingleLinePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/inputs/SingleLinePlugin.tsx"],"sourcesContent":["import {\n COMMAND_PRIORITY_HIGH,\n INSERT_LINE_BREAK_COMMAND,\n INSERT_PARAGRAPH_COMMAND,\n LineBreakNode,\n} from '@payloadcms/richtext-lexical/lexical';\nimport { useLexicalComposerContext } from '@payloadcms/richtext-lexical/lexical/react/LexicalComposerContext';\nimport { useEffect } from 'react';\n\nexport function SingleLinePlugin() {\n const [editor] = useLexicalComposerContext();\n useEffect(() => {\n const unregisterLineBreak = editor.registerCommand(\n INSERT_LINE_BREAK_COMMAND,\n () => true,\n COMMAND_PRIORITY_HIGH,\n );\n const unregisterParagraph = editor.registerCommand(\n INSERT_PARAGRAPH_COMMAND,\n () => true,\n COMMAND_PRIORITY_HIGH,\n );\n // Catch line breaks inserted via paste or other means\n const unregisterTransform = editor.registerNodeTransform(\n LineBreakNode,\n (node) => {\n node.remove();\n },\n );\n return () => {\n unregisterLineBreak();\n unregisterParagraph();\n unregisterTransform();\n };\n }, [editor]);\n return null;\n}\n"],"names":["COMMAND_PRIORITY_HIGH","INSERT_LINE_BREAK_COMMAND","INSERT_PARAGRAPH_COMMAND","LineBreakNode","useLexicalComposerContext","useEffect","SingleLinePlugin","editor","unregisterLineBreak","registerCommand","unregisterParagraph","unregisterTransform","registerNodeTransform","node","remove"],"mappings":"AAAA,SACEA,qBAAqB,EACrBC,yBAAyB,EACzBC,wBAAwB,EACxBC,aAAa,QACR,uCAAuC;AAC9C,SAASC,yBAAyB,QAAQ,oEAAoE;AAC9G,SAASC,SAAS,QAAQ,QAAQ;AAElC,OAAO,SAASC;IACd,MAAM,CAACC,OAAO,GAAGH;IACjBC,UAAU;QACR,MAAMG,sBAAsBD,OAAOE,eAAe,CAChDR,2BACA,IAAM,MACND;QAEF,MAAMU,sBAAsBH,OAAOE,eAAe,CAChDP,0BACA,IAAM,MACNF;QAEF,sDAAsD;QACtD,MAAMW,sBAAsBJ,OAAOK,qBAAqB,CACtDT,eACA,CAACU;YACCA,KAAKC,MAAM;QACb;QAEF,OAAO;YACLN;YACAE;YACAC;QACF;IACF,GAAG;QAACJ;KAAO;IACX,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"VariableChip.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/variables/VariableChip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAwBpE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,iBAAiB,2CAkE5E"}
1
+ {"version":3,"file":"VariableChip.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/variables/VariableChip.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAwBpE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,iBAAiB,2CAqE5E"}
@@ -1,15 +1,16 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Popover } from '@base-ui/react/popover';
3
4
  import { $getNodeByKey } from '@payloadcms/richtext-lexical/lexical';
4
5
  import { useLexicalComposerContext } from '@payloadcms/richtext-lexical/lexical/react/LexicalComposerContext';
5
- import { Popover } from 'radix-ui';
6
+ import clsx from 'clsx';
6
7
  import { useMemo } from 'react';
7
8
  import { isArgumentElement, isNumericElement, isSelectElement, isTagElement, isTemporalElement } from '../../../utils/guards';
8
9
  import { parseICUMessage } from '../../../utils/icu-tranform';
9
10
  import { SelectVariableEditor } from './editors/SelectVariableEditor';
10
11
  import { TagVariableEditor } from './editors/TagVariableEditor';
11
- import { NumericVariablePicker } from './pickers/NumericVariablePicker';
12
- import { TemporalElementEditor } from './pickers/TemporalElementEditor';
12
+ import { NumericVariableEditor } from './pickers/NumericVariableEditor';
13
+ import { TemporalVariablePicker } from './pickers/TemporalVariablePicker';
13
14
  import styles from './VariableChip.module.css';
14
15
  const TEMPORAL_ELEMENTS_FLAG = false;
15
16
  // TODO replace popover with portal below input field
@@ -44,42 +45,40 @@ export function VariableChip({ name, label, icu, nodeKey }) {
44
45
  return /*#__PURE__*/ _jsxs(Popover.Root, {
45
46
  children: [
46
47
  /*#__PURE__*/ _jsx(Popover.Trigger, {
47
- asChild: true,
48
- children: /*#__PURE__*/ _jsx("button", {
49
- className: [
50
- styles.chip,
51
- isDisabled ? styles.chipDisabled : undefined
52
- ].filter(Boolean).join(' '),
48
+ render: /*#__PURE__*/ _jsx("button", {
49
+ className: clsx(styles.chip, isDisabled && styles.chipDisabled),
53
50
  "data-icu": icu,
54
51
  "data-variable": name,
55
- type: "button",
56
- children: label
57
- })
52
+ type: "button"
53
+ }),
54
+ children: label
58
55
  }),
59
56
  /*#__PURE__*/ _jsx(Popover.Portal, {
60
- children: /*#__PURE__*/ _jsxs(Popover.Content, {
57
+ children: /*#__PURE__*/ _jsx(Popover.Positioner, {
61
58
  align: "start",
62
- className: styles.popoverContent,
63
59
  side: "bottom",
64
60
  sideOffset: 5,
65
- children: [
66
- isNumericElement(element) && /*#__PURE__*/ _jsx(NumericVariablePicker, {
67
- element: element,
68
- onUpdate: handleUpdate
69
- }),
70
- isSelectElement(element) && /*#__PURE__*/ _jsx(SelectVariableEditor, {
71
- element: element,
72
- onUpdate: handleUpdate
73
- }),
74
- TEMPORAL_ELEMENTS_FLAG && isTemporalElement(element) && /*#__PURE__*/ _jsx(TemporalElementEditor, {
75
- element: element,
76
- onUpdate: handleUpdate
77
- }),
78
- isTagElement(element) && /*#__PURE__*/ _jsx(TagVariableEditor, {
79
- element: element,
80
- onUpdate: handleUpdate
81
- })
82
- ]
61
+ children: /*#__PURE__*/ _jsxs(Popover.Popup, {
62
+ className: styles.popoverContent,
63
+ children: [
64
+ isNumericElement(element) && /*#__PURE__*/ _jsx(NumericVariableEditor, {
65
+ element: element,
66
+ onUpdate: handleUpdate
67
+ }),
68
+ isSelectElement(element) && /*#__PURE__*/ _jsx(SelectVariableEditor, {
69
+ element: element,
70
+ onUpdate: handleUpdate
71
+ }),
72
+ TEMPORAL_ELEMENTS_FLAG && isTemporalElement(element) && /*#__PURE__*/ _jsx(TemporalVariablePicker, {
73
+ element: element,
74
+ onUpdate: handleUpdate
75
+ }),
76
+ isTagElement(element) && /*#__PURE__*/ _jsx(TagVariableEditor, {
77
+ element: element,
78
+ onUpdate: handleUpdate
79
+ })
80
+ ]
81
+ })
83
82
  })
84
83
  })
85
84
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/inputs/variables/VariableChip.tsx"],"sourcesContent":["'use client';\n\nimport type { NodeKey } from '@payloadcms/richtext-lexical/lexical';\nimport { $getNodeByKey } from '@payloadcms/richtext-lexical/lexical';\nimport { useLexicalComposerContext } from '@payloadcms/richtext-lexical/lexical/react/LexicalComposerContext';\nimport type { BeautifulMentionNode } from 'lexical-beautiful-mentions';\nimport { Popover } from 'radix-ui';\nimport { useMemo } from 'react';\n\nimport {\n isArgumentElement,\n isNumericElement,\n isSelectElement,\n isTagElement,\n isTemporalElement,\n} from '@/utils/guards';\nimport { parseICUMessage } from '@/utils/icu-tranform';\n\nimport { SelectVariableEditor } from './editors/SelectVariableEditor';\nimport { TagVariableEditor } from './editors/TagVariableEditor';\nimport { NumericVariablePicker } from './pickers/NumericVariablePicker';\nimport { TemporalElementEditor } from './pickers/TemporalElementEditor';\nimport styles from './VariableChip.module.css';\n\nconst TEMPORAL_ELEMENTS_FLAG = false;\n\nexport interface VariableChipProps {\n name: string;\n label: string;\n icu: string;\n nodeKey: NodeKey;\n}\n\n// TODO replace popover with portal below input field\n\nexport function VariableChip({ name, label, icu, nodeKey }: VariableChipProps) {\n const [editor] = useLexicalComposerContext();\n\n const handleUpdate = (value: string) => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey) as BeautifulMentionNode | null;\n if (node) {\n node.setData({ ...node.getData(), icu: value });\n }\n });\n };\n\n const element = useMemo(() => {\n try {\n const [part] = parseICUMessage(icu);\n if (!part) throw new Error('No part found');\n return part;\n } catch (error) {\n console.error(error);\n throw new Error(`Invalid ICU: ${icu}`, { cause: error });\n }\n }, [icu]);\n\n const isDisabled =\n isArgumentElement(element) ||\n (isTemporalElement(element) && !TEMPORAL_ELEMENTS_FLAG);\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n className={[styles.chip, isDisabled ? styles.chipDisabled : undefined]\n .filter(Boolean)\n .join(' ')}\n data-icu={icu}\n data-variable={name}\n type=\"button\"\n >\n {/* <VariableIcon type={element.type} className=\"size-4\" /> */}\n {label}\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n align=\"start\"\n className={styles.popoverContent}\n side=\"bottom\"\n sideOffset={5}\n >\n {isNumericElement(element) && (\n <NumericVariablePicker element={element} onUpdate={handleUpdate} />\n )}\n {isSelectElement(element) && (\n <SelectVariableEditor element={element} onUpdate={handleUpdate} />\n )}\n {TEMPORAL_ELEMENTS_FLAG && isTemporalElement(element) && (\n <TemporalElementEditor element={element} onUpdate={handleUpdate} />\n )}\n\n {isTagElement(element) && (\n <TagVariableEditor element={element} onUpdate={handleUpdate} />\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n"],"names":["$getNodeByKey","useLexicalComposerContext","Popover","useMemo","isArgumentElement","isNumericElement","isSelectElement","isTagElement","isTemporalElement","parseICUMessage","SelectVariableEditor","TagVariableEditor","NumericVariablePicker","TemporalElementEditor","styles","TEMPORAL_ELEMENTS_FLAG","VariableChip","name","label","icu","nodeKey","editor","handleUpdate","value","update","node","setData","getData","element","part","Error","error","console","cause","isDisabled","Root","Trigger","asChild","button","className","chip","chipDisabled","undefined","filter","Boolean","join","data-icu","data-variable","type","Portal","Content","align","popoverContent","side","sideOffset","onUpdate"],"mappings":"AAAA;;AAGA,SAASA,aAAa,QAAQ,uCAAuC;AACrE,SAASC,yBAAyB,QAAQ,oEAAoE;AAE9G,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,OAAO,QAAQ,QAAQ;AAEhC,SACEC,iBAAiB,EACjBC,gBAAgB,EAChBC,eAAe,EACfC,YAAY,EACZC,iBAAiB,QACZ,iBAAiB;AACxB,SAASC,eAAe,QAAQ,uBAAuB;AAEvD,SAASC,oBAAoB,QAAQ,iCAAiC;AACtE,SAASC,iBAAiB,QAAQ,8BAA8B;AAChE,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,OAAOC,YAAY,4BAA4B;AAE/C,MAAMC,yBAAyB;AAS/B,qDAAqD;AAErD,OAAO,SAASC,aAAa,EAAEC,IAAI,EAAEC,KAAK,EAAEC,GAAG,EAAEC,OAAO,EAAqB;IAC3E,MAAM,CAACC,OAAO,GAAGpB;IAEjB,MAAMqB,eAAe,CAACC;QACpBF,OAAOG,MAAM,CAAC;YACZ,MAAMC,OAAOzB,cAAcoB;YAC3B,IAAIK,MAAM;gBACRA,KAAKC,OAAO,CAAC;oBAAE,GAAGD,KAAKE,OAAO,EAAE;oBAAER,KAAKI;gBAAM;YAC/C;QACF;IACF;IAEA,MAAMK,UAAUzB,QAAQ;QACtB,IAAI;YACF,MAAM,CAAC0B,KAAK,GAAGpB,gBAAgBU;YAC/B,IAAI,CAACU,MAAM,MAAM,IAAIC,MAAM;YAC3B,OAAOD;QACT,EAAE,OAAOE,OAAO;YACdC,QAAQD,KAAK,CAACA;YACd,MAAM,IAAID,MAAM,CAAC,aAAa,EAAEX,KAAK,EAAE;gBAAEc,OAAOF;YAAM;QACxD;IACF,GAAG;QAACZ;KAAI;IAER,MAAMe,aACJ9B,kBAAkBwB,YACjBpB,kBAAkBoB,YAAY,CAACb;IAElC,qBACE,MAACb,QAAQiC,IAAI;;0BACX,KAACjC,QAAQkC,OAAO;gBAACC,OAAO;0BACtB,cAAA,KAACC;oBACCC,WAAW;wBAACzB,OAAO0B,IAAI;wBAAEN,aAAapB,OAAO2B,YAAY,GAAGC;qBAAU,CACnEC,MAAM,CAACC,SACPC,IAAI,CAAC;oBACRC,YAAU3B;oBACV4B,iBAAe9B;oBACf+B,MAAK;8BAGJ9B;;;0BAGL,KAAChB,QAAQ+C,MAAM;0BACb,cAAA,MAAC/C,QAAQgD,OAAO;oBACdC,OAAM;oBACNZ,WAAWzB,OAAOsC,cAAc;oBAChCC,MAAK;oBACLC,YAAY;;wBAEXjD,iBAAiBuB,0BAChB,KAAChB;4BAAsBgB,SAASA;4BAAS2B,UAAUjC;;wBAEpDhB,gBAAgBsB,0BACf,KAAClB;4BAAqBkB,SAASA;4BAAS2B,UAAUjC;;wBAEnDP,0BAA0BP,kBAAkBoB,0BAC3C,KAACf;4BAAsBe,SAASA;4BAAS2B,UAAUjC;;wBAGpDf,aAAaqB,0BACZ,KAACjB;4BAAkBiB,SAASA;4BAAS2B,UAAUjC;;;;;;;AAM3D"}
1
+ {"version":3,"sources":["../../../../src/components/inputs/variables/VariableChip.tsx"],"sourcesContent":["'use client';\n\nimport { Popover } from '@base-ui/react/popover';\nimport type { NodeKey } from '@payloadcms/richtext-lexical/lexical';\nimport { $getNodeByKey } from '@payloadcms/richtext-lexical/lexical';\nimport { useLexicalComposerContext } from '@payloadcms/richtext-lexical/lexical/react/LexicalComposerContext';\nimport clsx from 'clsx';\nimport type { BeautifulMentionNode } from 'lexical-beautiful-mentions';\nimport { useMemo } from 'react';\n\nimport {\n isArgumentElement,\n isNumericElement,\n isSelectElement,\n isTagElement,\n isTemporalElement,\n} from '@/utils/guards';\nimport { parseICUMessage } from '@/utils/icu-tranform';\n\nimport { SelectVariableEditor } from './editors/SelectVariableEditor';\nimport { TagVariableEditor } from './editors/TagVariableEditor';\nimport { NumericVariableEditor } from './pickers/NumericVariableEditor';\nimport { TemporalVariablePicker } from './pickers/TemporalVariablePicker';\nimport styles from './VariableChip.module.css';\n\nconst TEMPORAL_ELEMENTS_FLAG = false;\n\nexport interface VariableChipProps {\n name: string;\n label: string;\n icu: string;\n nodeKey: NodeKey;\n}\n\n// TODO replace popover with portal below input field\n\nexport function VariableChip({ name, label, icu, nodeKey }: VariableChipProps) {\n const [editor] = useLexicalComposerContext();\n\n const handleUpdate = (value: string) => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey) as BeautifulMentionNode | null;\n if (node) {\n node.setData({ ...node.getData(), icu: value });\n }\n });\n };\n\n const element = useMemo(() => {\n try {\n const [part] = parseICUMessage(icu);\n if (!part) throw new Error('No part found');\n return part;\n } catch (error) {\n console.error(error);\n throw new Error(`Invalid ICU: ${icu}`, { cause: error });\n }\n }, [icu]);\n\n const isDisabled =\n isArgumentElement(element) ||\n (isTemporalElement(element) && !TEMPORAL_ELEMENTS_FLAG);\n\n return (\n <Popover.Root>\n <Popover.Trigger\n render={\n <button\n className={clsx(styles.chip, isDisabled && styles.chipDisabled)}\n data-icu={icu}\n data-variable={name}\n type=\"button\"\n />\n }\n >\n {/* <VariableIcon type={element.type} className=\"size-4\" /> */}\n {label}\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Positioner align=\"start\" side=\"bottom\" sideOffset={5}>\n <Popover.Popup className={styles.popoverContent}>\n {isNumericElement(element) && (\n <NumericVariableEditor\n element={element}\n onUpdate={handleUpdate}\n />\n )}\n {isSelectElement(element) && (\n <SelectVariableEditor element={element} onUpdate={handleUpdate} />\n )}\n {TEMPORAL_ELEMENTS_FLAG && isTemporalElement(element) && (\n <TemporalVariablePicker\n element={element}\n onUpdate={handleUpdate}\n />\n )}\n\n {isTagElement(element) && (\n <TagVariableEditor element={element} onUpdate={handleUpdate} />\n )}\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n"],"names":["Popover","$getNodeByKey","useLexicalComposerContext","clsx","useMemo","isArgumentElement","isNumericElement","isSelectElement","isTagElement","isTemporalElement","parseICUMessage","SelectVariableEditor","TagVariableEditor","NumericVariableEditor","TemporalVariablePicker","styles","TEMPORAL_ELEMENTS_FLAG","VariableChip","name","label","icu","nodeKey","editor","handleUpdate","value","update","node","setData","getData","element","part","Error","error","console","cause","isDisabled","Root","Trigger","render","button","className","chip","chipDisabled","data-icu","data-variable","type","Portal","Positioner","align","side","sideOffset","Popup","popoverContent","onUpdate"],"mappings":"AAAA;;AAEA,SAASA,OAAO,QAAQ,yBAAyB;AAEjD,SAASC,aAAa,QAAQ,uCAAuC;AACrE,SAASC,yBAAyB,QAAQ,oEAAoE;AAC9G,OAAOC,UAAU,OAAO;AAExB,SAASC,OAAO,QAAQ,QAAQ;AAEhC,SACEC,iBAAiB,EACjBC,gBAAgB,EAChBC,eAAe,EACfC,YAAY,EACZC,iBAAiB,QACZ,iBAAiB;AACxB,SAASC,eAAe,QAAQ,uBAAuB;AAEvD,SAASC,oBAAoB,QAAQ,iCAAiC;AACtE,SAASC,iBAAiB,QAAQ,8BAA8B;AAChE,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,sBAAsB,QAAQ,mCAAmC;AAC1E,OAAOC,YAAY,4BAA4B;AAE/C,MAAMC,yBAAyB;AAS/B,qDAAqD;AAErD,OAAO,SAASC,aAAa,EAAEC,IAAI,EAAEC,KAAK,EAAEC,GAAG,EAAEC,OAAO,EAAqB;IAC3E,MAAM,CAACC,OAAO,GAAGpB;IAEjB,MAAMqB,eAAe,CAACC;QACpBF,OAAOG,MAAM,CAAC;YACZ,MAAMC,OAAOzB,cAAcoB;YAC3B,IAAIK,MAAM;gBACRA,KAAKC,OAAO,CAAC;oBAAE,GAAGD,KAAKE,OAAO,EAAE;oBAAER,KAAKI;gBAAM;YAC/C;QACF;IACF;IAEA,MAAMK,UAAUzB,QAAQ;QACtB,IAAI;YACF,MAAM,CAAC0B,KAAK,GAAGpB,gBAAgBU;YAC/B,IAAI,CAACU,MAAM,MAAM,IAAIC,MAAM;YAC3B,OAAOD;QACT,EAAE,OAAOE,OAAO;YACdC,QAAQD,KAAK,CAACA;YACd,MAAM,IAAID,MAAM,CAAC,aAAa,EAAEX,KAAK,EAAE;gBAAEc,OAAOF;YAAM;QACxD;IACF,GAAG;QAACZ;KAAI;IAER,MAAMe,aACJ9B,kBAAkBwB,YACjBpB,kBAAkBoB,YAAY,CAACb;IAElC,qBACE,MAAChB,QAAQoC,IAAI;;0BACX,KAACpC,QAAQqC,OAAO;gBACdC,sBACE,KAACC;oBACCC,WAAWrC,KAAKY,OAAO0B,IAAI,EAAEN,cAAcpB,OAAO2B,YAAY;oBAC9DC,YAAUvB;oBACVwB,iBAAe1B;oBACf2B,MAAK;;0BAKR1B;;0BAEH,KAACnB,QAAQ8C,MAAM;0BACb,cAAA,KAAC9C,QAAQ+C,UAAU;oBAACC,OAAM;oBAAQC,MAAK;oBAASC,YAAY;8BAC1D,cAAA,MAAClD,QAAQmD,KAAK;wBAACX,WAAWzB,OAAOqC,cAAc;;4BAC5C9C,iBAAiBuB,0BAChB,KAAChB;gCACCgB,SAASA;gCACTwB,UAAU9B;;4BAGbhB,gBAAgBsB,0BACf,KAAClB;gCAAqBkB,SAASA;gCAASwB,UAAU9B;;4BAEnDP,0BAA0BP,kBAAkBoB,0BAC3C,KAACf;gCACCe,SAASA;gCACTwB,UAAU9B;;4BAIbf,aAAaqB,0BACZ,KAACjB;gCAAkBiB,SAASA;gCAASwB,UAAU9B;;;;;;;;AAO7D"}
@@ -20,7 +20,7 @@
20
20
  .popoverContent {
21
21
  z-index: 50;
22
22
  display: grid;
23
- transform-origin: var(--radix-hover-card-content-transform-origin);
23
+ transform-origin: var(--transform-origin);
24
24
  overflow: clip;
25
25
  border-radius: var(--style-radius-m);
26
26
  border: 1px solid var(--theme-border-color);
@@ -35,11 +35,11 @@
35
35
  display: none;
36
36
  }
37
37
 
38
- .popoverContent[data-state="open"] {
38
+ .popoverContent[data-open] {
39
39
  animation: popoverIn 150ms ease-out;
40
40
  }
41
41
 
42
- .popoverContent[data-state="closed"] {
42
+ .popoverContent[data-closed] {
43
43
  animation: popoverOut 150ms ease-in;
44
44
  }
45
45
 
@@ -0,0 +1,4 @@
1
+ import type { BeautifulMentionsMenuItemProps, BeautifulMentionsMenuProps } from 'lexical-beautiful-mentions';
2
+ export declare const MentionMenu: import("react").ForwardRefExoticComponent<Omit<BeautifulMentionsMenuProps, "ref"> & import("react").RefAttributes<HTMLUListElement>>;
3
+ export declare const MentionMenuItem: import("react").ForwardRefExoticComponent<Omit<BeautifulMentionsMenuItemProps, "ref"> & import("react").RefAttributes<HTMLLIElement>>;
4
+ //# sourceMappingURL=VariableSuggestion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VariableSuggestion.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/variables/VariableSuggestion.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,8BAA8B,EAC9B,0BAA0B,EAC3B,MAAM,4BAA4B,CAAC;AAKpC,eAAO,MAAM,WAAW,sIAKtB,CAAC;AAEH,eAAO,MAAM,eAAe,uIAoB1B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import clsx from 'clsx';
3
+ import { forwardRef } from 'react';
4
+ import styles from './VariableSuggestion.module.css';
5
+ export const MentionMenu = /*#__PURE__*/ forwardRef(({ loading: _, ...props }, ref)=>/*#__PURE__*/ _jsx("ul", {
6
+ ...props,
7
+ className: styles.list,
8
+ ref: ref
9
+ }));
10
+ export const MentionMenuItem = /*#__PURE__*/ forwardRef((props, ref)=>/*#__PURE__*/ _jsx("li", {
11
+ "aria-selected": props.selected,
12
+ className: clsx(styles.item, props.selected && styles.itemSelected),
13
+ onClick: props.onClick,
14
+ onKeyDown: props.onKeyDown,
15
+ onMouseDown: props.onMouseDown,
16
+ onMouseEnter: props.onMouseEnter,
17
+ ref: ref,
18
+ // biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: standard WAI-ARIA listbox/option pattern
19
+ role: "option",
20
+ tabIndex: -1,
21
+ children: typeof props.item.data?.label === 'string' ? props.item.data.label : props.item.displayValue
22
+ }));
23
+
24
+ //# sourceMappingURL=VariableSuggestion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/inputs/variables/VariableSuggestion.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport type {\n BeautifulMentionsMenuItemProps,\n BeautifulMentionsMenuProps,\n} from 'lexical-beautiful-mentions';\nimport { forwardRef } from 'react';\n\nimport styles from './VariableSuggestion.module.css';\n\nexport const MentionMenu = forwardRef<\n HTMLUListElement,\n BeautifulMentionsMenuProps\n>(({ loading: _, ...props }, ref) => (\n <ul {...props} className={styles.list} ref={ref} />\n));\n\nexport const MentionMenuItem = forwardRef<\n HTMLLIElement,\n BeautifulMentionsMenuItemProps\n>((props, ref) => (\n <li\n aria-selected={props.selected}\n className={clsx(styles.item, props.selected && styles.itemSelected)}\n onClick={props.onClick}\n onKeyDown={props.onKeyDown}\n onMouseDown={props.onMouseDown}\n onMouseEnter={props.onMouseEnter}\n ref={ref}\n // biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: standard WAI-ARIA listbox/option pattern\n role=\"option\"\n tabIndex={-1}\n >\n {typeof props.item.data?.label === 'string'\n ? props.item.data.label\n : props.item.displayValue}\n </li>\n));\n"],"names":["clsx","forwardRef","styles","MentionMenu","loading","_","props","ref","ul","className","list","MentionMenuItem","li","aria-selected","selected","item","itemSelected","onClick","onKeyDown","onMouseDown","onMouseEnter","role","tabIndex","data","label","displayValue"],"mappings":";AAAA,OAAOA,UAAU,OAAO;AAKxB,SAASC,UAAU,QAAQ,QAAQ;AAEnC,OAAOC,YAAY,kCAAkC;AAErD,OAAO,MAAMC,4BAAcF,WAGzB,CAAC,EAAEG,SAASC,CAAC,EAAE,GAAGC,OAAO,EAAEC,oBAC3B,KAACC;QAAI,GAAGF,KAAK;QAAEG,WAAWP,OAAOQ,IAAI;QAAEH,KAAKA;QAC3C;AAEH,OAAO,MAAMI,gCAAkBV,WAG7B,CAACK,OAAOC,oBACR,KAACK;QACCC,iBAAeP,MAAMQ,QAAQ;QAC7BL,WAAWT,KAAKE,OAAOa,IAAI,EAAET,MAAMQ,QAAQ,IAAIZ,OAAOc,YAAY;QAClEC,SAASX,MAAMW,OAAO;QACtBC,WAAWZ,MAAMY,SAAS;QAC1BC,aAAab,MAAMa,WAAW;QAC9BC,cAAcd,MAAMc,YAAY;QAChCb,KAAKA;QACL,4GAA4G;QAC5Gc,MAAK;QACLC,UAAU,CAAC;kBAEV,OAAOhB,MAAMS,IAAI,CAACQ,IAAI,EAAEC,UAAU,WAC/BlB,MAAMS,IAAI,CAACQ,IAAI,CAACC,KAAK,GACrBlB,MAAMS,IAAI,CAACU,YAAY;QAE5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"PluralVariableEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/editors/PluralVariableEditor.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAQ7C,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IACnC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;QAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C;AAID,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,OAAO,EACP,GAAG,GACJ,EAAE,yBAAyB,2CAuK3B"}
1
+ {"version":3,"file":"PluralVariableEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/editors/PluralVariableEditor.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAQ7C,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IACnC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;QAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C;AAID,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,OAAO,EACP,GAAG,GACJ,EAAE,yBAAyB,2CAyK3B"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Popover } from '@base-ui/react/popover';
2
3
  import { TYPE } from '@formatjs/icu-messageformat-parser';
3
4
  import { IconX } from '@tabler/icons-react';
4
- import { Popover } from 'radix-ui';
5
5
  import { Fragment, useImperativeHandle, useMemo } from 'react';
6
6
  import { Controller, useFieldArray, useForm } from 'react-hook-form';
7
7
  import { parseICUMessage, serializeICUMessage } from '../../../../utils/icu-tranform';
@@ -121,66 +121,68 @@ export function PluralVariableEditor({ variableName, element, ref }) {
121
121
  children: "Add Option"
122
122
  }),
123
123
  /*#__PURE__*/ _jsx(Popover.Portal, {
124
- children: /*#__PURE__*/ _jsxs(Popover.Content, {
125
- className: styles.popoverContent,
124
+ children: /*#__PURE__*/ _jsx(Popover.Positioner, {
126
125
  sideOffset: 4,
127
- children: [
128
- /*#__PURE__*/ _jsx("div", {
129
- className: styles.optionsList,
130
- children: NAMED_PLURAL_OPTIONS.filter((option)=>options.fields.every((field)=>field.name !== option)).map((option)=>/*#__PURE__*/ _jsx(Popover.Close, {
131
- className: styles.optionItem,
132
- onClick: ()=>{
133
- // TODO ensure the fields are always in the same order as staticPluralOptions
134
- options.append({
135
- name: option,
136
- content: ''
137
- }, {
138
- shouldFocus: true
139
- });
140
- },
141
- children: option
142
- }, option))
143
- }),
144
- /*#__PURE__*/ _jsxs("div", {
145
- className: styles.customInputGroup,
146
- children: [
147
- /*#__PURE__*/ _jsx("label", {
148
- htmlFor: "customValue",
149
- children: "custom"
150
- }),
151
- /*#__PURE__*/ _jsx(Controller, {
152
- control: control,
153
- name: "customValue",
154
- render: ({ field })=>/*#__PURE__*/ _jsx("input", {
155
- className: styles.customInput,
156
- min: 0,
157
- onChange: ({ currentTarget: { value } })=>{
158
- const number = Number(value);
159
- if (Number.isNaN(number)) return;
160
- if (number < 0) return;
161
- field.onChange(number);
162
- },
163
- onKeyDown: (e)=>{
164
- if (e.key !== 'Enter') return;
165
- if (field.value === undefined) return;
166
- const isUnique = !options.fields.some((existingField)=>existingField.name === `=${field.value}`);
167
- if (!isUnique) return; // TODO maybe show error?
168
- options.append({
169
- name: `=${field.value}`,
170
- content: ''
171
- }, {
172
- shouldFocus: true
173
- });
174
- field.onChange(undefined);
175
- },
176
- placeholder: "=0",
177
- type: "numeric",
178
- value: field.value ?? ''
179
- })
180
- })
181
- ]
182
- })
183
- ]
126
+ children: /*#__PURE__*/ _jsxs(Popover.Popup, {
127
+ className: styles.popoverContent,
128
+ children: [
129
+ /*#__PURE__*/ _jsx("div", {
130
+ className: styles.optionsList,
131
+ children: NAMED_PLURAL_OPTIONS.filter((option)=>options.fields.every((field)=>field.name !== option)).map((option)=>/*#__PURE__*/ _jsx(Popover.Close, {
132
+ className: styles.optionItem,
133
+ onClick: ()=>{
134
+ // TODO ensure the fields are always in the same order as staticPluralOptions
135
+ options.append({
136
+ name: option,
137
+ content: ''
138
+ }, {
139
+ shouldFocus: true
140
+ });
141
+ },
142
+ children: option
143
+ }, option))
144
+ }),
145
+ /*#__PURE__*/ _jsxs("div", {
146
+ className: styles.customInputGroup,
147
+ children: [
148
+ /*#__PURE__*/ _jsx("label", {
149
+ htmlFor: "customValue",
150
+ children: "custom"
151
+ }),
152
+ /*#__PURE__*/ _jsx(Controller, {
153
+ control: control,
154
+ name: "customValue",
155
+ render: ({ field })=>/*#__PURE__*/ _jsx("input", {
156
+ className: styles.customInput,
157
+ min: 0,
158
+ onChange: ({ currentTarget: { value } })=>{
159
+ const number = Number(value);
160
+ if (Number.isNaN(number)) return;
161
+ if (number < 0) return;
162
+ field.onChange(number);
163
+ },
164
+ onKeyDown: (e)=>{
165
+ if (e.key !== 'Enter') return;
166
+ if (field.value === undefined) return;
167
+ const isUnique = !options.fields.some((existingField)=>existingField.name === `=${field.value}`);
168
+ if (!isUnique) return; // TODO maybe show error?
169
+ options.append({
170
+ name: `=${field.value}`,
171
+ content: ''
172
+ }, {
173
+ shouldFocus: true
174
+ });
175
+ field.onChange(undefined);
176
+ },
177
+ placeholder: "=0",
178
+ type: "numeric",
179
+ value: field.value ?? ''
180
+ })
181
+ })
182
+ ]
183
+ })
184
+ ]
185
+ })
184
186
  })
185
187
  })
186
188
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/inputs/variables/editors/PluralVariableEditor.tsx"],"sourcesContent":["import { TYPE } from '@formatjs/icu-messageformat-parser';\nimport { IconX } from '@tabler/icons-react';\nimport { Popover } from 'radix-ui';\nimport { Fragment, useImperativeHandle, useMemo } from 'react';\nimport { Controller, useFieldArray, useForm } from 'react-hook-form';\nimport type { PluralElement } from '@/types';\n\nimport { parseICUMessage, serializeICUMessage } from '@/utils/icu-tranform';\n\nimport styles from './PluralVariableEditor.module.css';\n\nconst NAMED_PLURAL_OPTIONS = ['zero', 'one', 'two', 'few', 'many'] as const;\n\nexport interface PluralVariableEditorProps {\n variableName: string;\n element: PluralElement | undefined;\n ref: React.Ref<{ getValue: () => string }>;\n}\n\n// TODO add support for selectordinal (\"pluralType\": \"ordinal\")\n\nexport function PluralVariableEditor({\n variableName,\n element,\n ref,\n}: PluralVariableEditorProps) {\n const config = useMemo<{\n offset: number;\n options: { name: string; content: string }[];\n other: string;\n }>(() => {\n const { other, ...options } = element?.options ?? {};\n return {\n offset: element?.offset ?? 0,\n options: Object.entries(options).map(([name, option]) => ({\n name,\n content: serializeICUMessage(option.value),\n })),\n other: serializeICUMessage(other ? other.value : []),\n };\n }, [element]);\n\n const { control, register, getValues } = useForm<{\n offset: number;\n options: { name: string; content: string }[];\n other: string;\n customValue?: number;\n }>({\n defaultValues: config,\n });\n\n useImperativeHandle(ref, () => ({\n getValue: () => {\n const values = getValues();\n const updatedElement: PluralElement = {\n type: TYPE.plural,\n value: variableName,\n offset: values.offset,\n pluralType: element?.pluralType ?? 'cardinal',\n options: Object.fromEntries(\n values.options.map(({ name, content }) => [\n name,\n { value: parseICUMessage(content) },\n ]),\n ),\n };\n return serializeICUMessage([updatedElement]);\n },\n }));\n\n const options = useFieldArray({\n control,\n name: 'options',\n });\n\n return (\n <div className={styles.root}>\n <fieldset className={styles.optionsFieldset}>\n <legend>Options</legend>\n {options.fields.map((field, index) => (\n <Fragment key={field.id}>\n <label htmlFor={`options.${index}`}>{field.name}</label>\n {/* // TODO add support for variable mentions */}\n <input\n className={styles.input}\n type=\"text\"\n {...register(`options.${index}.content`, { required: true })}\n />\n <button\n className={styles.removeButton}\n onClick={() => options.remove(index)}\n type=\"button\"\n >\n <IconX size={16} />\n </button>\n </Fragment>\n ))}\n\n <label htmlFor=\"other\">other</label>\n {/* // TODO add support for variable mentions */}\n <input\n className={styles.inputSpan2}\n type=\"text\"\n {...register('other', { required: true })}\n />\n </fieldset>\n <div className={styles.controlsGrid}>\n <label className={styles.offsetLabel}>\n offset\n <input\n className={styles.offsetInput}\n placeholder=\"0\"\n type=\"numeric\"\n {...register('offset')}\n />\n </label>\n <Popover.Root>\n <Popover.Trigger>Add Option</Popover.Trigger>\n <Popover.Portal>\n <Popover.Content className={styles.popoverContent} sideOffset={4}>\n <div className={styles.optionsList}>\n {NAMED_PLURAL_OPTIONS.filter((option) =>\n options.fields.every((field) => field.name !== option),\n ).map((option) => (\n <Popover.Close\n className={styles.optionItem}\n key={option}\n onClick={() => {\n // TODO ensure the fields are always in the same order as staticPluralOptions\n options.append(\n {\n name: option,\n content: '',\n },\n {\n shouldFocus: true,\n },\n );\n }}\n >\n {option}\n </Popover.Close>\n ))}\n </div>\n\n <div className={styles.customInputGroup}>\n <label htmlFor=\"customValue\">custom</label>\n <Controller\n control={control}\n name=\"customValue\"\n render={({ field }) => (\n <input\n className={styles.customInput}\n min={0}\n onChange={({ currentTarget: { value } }) => {\n const number = Number(value);\n if (Number.isNaN(number)) return;\n if (number < 0) return;\n field.onChange(number);\n }}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return;\n if (field.value === undefined) return;\n const isUnique = !options.fields.some(\n (existingField) =>\n existingField.name === `=${field.value}`,\n );\n if (!isUnique) return; // TODO maybe show error?\n options.append(\n {\n name: `=${field.value}`,\n content: '',\n },\n {\n shouldFocus: true,\n },\n );\n field.onChange(undefined);\n }}\n placeholder=\"=0\"\n type=\"numeric\"\n value={field.value ?? ''}\n />\n )}\n />\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n </div>\n );\n}\n"],"names":["TYPE","IconX","Popover","Fragment","useImperativeHandle","useMemo","Controller","useFieldArray","useForm","parseICUMessage","serializeICUMessage","styles","NAMED_PLURAL_OPTIONS","PluralVariableEditor","variableName","element","ref","config","other","options","offset","Object","entries","map","name","option","content","value","control","register","getValues","defaultValues","getValue","values","updatedElement","type","plural","pluralType","fromEntries","div","className","root","fieldset","optionsFieldset","legend","fields","field","index","label","htmlFor","input","required","button","removeButton","onClick","remove","size","id","inputSpan2","controlsGrid","offsetLabel","offsetInput","placeholder","Root","Trigger","Portal","Content","popoverContent","sideOffset","optionsList","filter","every","Close","optionItem","append","shouldFocus","customInputGroup","render","customInput","min","onChange","currentTarget","number","Number","isNaN","onKeyDown","e","key","undefined","isUnique","some","existingField"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/components/inputs/variables/editors/PluralVariableEditor.tsx"],"sourcesContent":["import { Popover } from '@base-ui/react/popover';\nimport { TYPE } from '@formatjs/icu-messageformat-parser';\nimport { IconX } from '@tabler/icons-react';\nimport { Fragment, useImperativeHandle, useMemo } from 'react';\nimport { Controller, useFieldArray, useForm } from 'react-hook-form';\nimport type { PluralElement } from '@/types';\n\nimport { parseICUMessage, serializeICUMessage } from '@/utils/icu-tranform';\n\nimport styles from './PluralVariableEditor.module.css';\n\nconst NAMED_PLURAL_OPTIONS = ['zero', 'one', 'two', 'few', 'many'] as const;\n\nexport interface PluralVariableEditorProps {\n variableName: string;\n element: PluralElement | undefined;\n ref: React.Ref<{ getValue: () => string }>;\n}\n\n// TODO add support for selectordinal (\"pluralType\": \"ordinal\")\n\nexport function PluralVariableEditor({\n variableName,\n element,\n ref,\n}: PluralVariableEditorProps) {\n const config = useMemo<{\n offset: number;\n options: { name: string; content: string }[];\n other: string;\n }>(() => {\n const { other, ...options } = element?.options ?? {};\n return {\n offset: element?.offset ?? 0,\n options: Object.entries(options).map(([name, option]) => ({\n name,\n content: serializeICUMessage(option.value),\n })),\n other: serializeICUMessage(other ? other.value : []),\n };\n }, [element]);\n\n const { control, register, getValues } = useForm<{\n offset: number;\n options: { name: string; content: string }[];\n other: string;\n customValue?: number;\n }>({\n defaultValues: config,\n });\n\n useImperativeHandle(ref, () => ({\n getValue: () => {\n const values = getValues();\n const updatedElement: PluralElement = {\n type: TYPE.plural,\n value: variableName,\n offset: values.offset,\n pluralType: element?.pluralType ?? 'cardinal',\n options: Object.fromEntries(\n values.options.map(({ name, content }) => [\n name,\n { value: parseICUMessage(content) },\n ]),\n ),\n };\n return serializeICUMessage([updatedElement]);\n },\n }));\n\n const options = useFieldArray({\n control,\n name: 'options',\n });\n\n return (\n <div className={styles.root}>\n <fieldset className={styles.optionsFieldset}>\n <legend>Options</legend>\n {options.fields.map((field, index) => (\n <Fragment key={field.id}>\n <label htmlFor={`options.${index}`}>{field.name}</label>\n {/* // TODO add support for variable mentions */}\n <input\n className={styles.input}\n type=\"text\"\n {...register(`options.${index}.content`, { required: true })}\n />\n <button\n className={styles.removeButton}\n onClick={() => options.remove(index)}\n type=\"button\"\n >\n <IconX size={16} />\n </button>\n </Fragment>\n ))}\n\n <label htmlFor=\"other\">other</label>\n {/* // TODO add support for variable mentions */}\n <input\n className={styles.inputSpan2}\n type=\"text\"\n {...register('other', { required: true })}\n />\n </fieldset>\n <div className={styles.controlsGrid}>\n <label className={styles.offsetLabel}>\n offset\n <input\n className={styles.offsetInput}\n placeholder=\"0\"\n type=\"numeric\"\n {...register('offset')}\n />\n </label>\n <Popover.Root>\n <Popover.Trigger>Add Option</Popover.Trigger>\n <Popover.Portal>\n <Popover.Positioner sideOffset={4}>\n <Popover.Popup className={styles.popoverContent}>\n <div className={styles.optionsList}>\n {NAMED_PLURAL_OPTIONS.filter((option) =>\n options.fields.every((field) => field.name !== option),\n ).map((option) => (\n <Popover.Close\n className={styles.optionItem}\n key={option}\n onClick={() => {\n // TODO ensure the fields are always in the same order as staticPluralOptions\n options.append(\n {\n name: option,\n content: '',\n },\n {\n shouldFocus: true,\n },\n );\n }}\n >\n {option}\n </Popover.Close>\n ))}\n </div>\n\n <div className={styles.customInputGroup}>\n <label htmlFor=\"customValue\">custom</label>\n <Controller\n control={control}\n name=\"customValue\"\n render={({ field }) => (\n <input\n className={styles.customInput}\n min={0}\n onChange={({ currentTarget: { value } }) => {\n const number = Number(value);\n if (Number.isNaN(number)) return;\n if (number < 0) return;\n field.onChange(number);\n }}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return;\n if (field.value === undefined) return;\n const isUnique = !options.fields.some(\n (existingField) =>\n existingField.name === `=${field.value}`,\n );\n if (!isUnique) return; // TODO maybe show error?\n options.append(\n {\n name: `=${field.value}`,\n content: '',\n },\n {\n shouldFocus: true,\n },\n );\n field.onChange(undefined);\n }}\n placeholder=\"=0\"\n type=\"numeric\"\n value={field.value ?? ''}\n />\n )}\n />\n </div>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n </div>\n </div>\n );\n}\n"],"names":["Popover","TYPE","IconX","Fragment","useImperativeHandle","useMemo","Controller","useFieldArray","useForm","parseICUMessage","serializeICUMessage","styles","NAMED_PLURAL_OPTIONS","PluralVariableEditor","variableName","element","ref","config","other","options","offset","Object","entries","map","name","option","content","value","control","register","getValues","defaultValues","getValue","values","updatedElement","type","plural","pluralType","fromEntries","div","className","root","fieldset","optionsFieldset","legend","fields","field","index","label","htmlFor","input","required","button","removeButton","onClick","remove","size","id","inputSpan2","controlsGrid","offsetLabel","offsetInput","placeholder","Root","Trigger","Portal","Positioner","sideOffset","Popup","popoverContent","optionsList","filter","every","Close","optionItem","append","shouldFocus","customInputGroup","render","customInput","min","onChange","currentTarget","number","Number","isNaN","onKeyDown","e","key","undefined","isUnique","some","existingField"],"mappings":"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"}
@@ -68,9 +68,9 @@
68
68
 
69
69
  .popoverContent {
70
70
  z-index: 50;
71
- max-height: var(--radix-dropdown-menu-content-available-height);
71
+ max-height: var(--available-height);
72
72
  min-width: 8rem;
73
- transform-origin: var(--radix-dropdown-menu-content-transform-origin);
73
+ transform-origin: var(--transform-origin);
74
74
  overflow-y: auto;
75
75
  overflow-x: hidden;
76
76
  border-radius: var(--style-radius-m);
@@ -81,11 +81,11 @@
81
81
  0 2px 4px -2px rgb(0 0 0 / 0.1);
82
82
  }
83
83
 
84
- .popoverContent[data-state="open"] {
84
+ .popoverContent[data-open] {
85
85
  animation: popoverIn 150ms ease-out;
86
86
  }
87
87
 
88
- .popoverContent[data-state="closed"] {
88
+ .popoverContent[data-closed] {
89
89
  animation: popoverOut 150ms ease-in;
90
90
  }
91
91
 
@@ -0,0 +1,11 @@
1
+ import type { DateElement, TimeElement } from '../../../../types';
2
+ export interface TemporalVariableEditorProps {
3
+ type: 'date' | 'time';
4
+ name: string;
5
+ element: DateElement | TimeElement | undefined;
6
+ ref: React.Ref<{
7
+ getValue: () => string;
8
+ }>;
9
+ }
10
+ export declare function TemporalVariableEditor({ type, ref, }: TemporalVariableEditorProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=TemporalVariableEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemporalVariableEditor.d.ts","sourceRoot":"","sources":["../../../../../src/components/inputs/variables/editors/TemporalVariableEditor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/C,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;QAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C;AAED,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,GAAG,GACJ,EAAE,2BAA2B,2CAS7B"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useImperativeHandle } from 'react';
3
- export function DateVariableEditor({ ref }) {
3
+ export function TemporalVariableEditor({ type, ref }) {
4
4
  useImperativeHandle(ref, ()=>({
5
5
  getValue: ()=>{
6
6
  // TODO
@@ -8,8 +8,8 @@ export function DateVariableEditor({ ref }) {
8
8
  }
9
9
  }));
10
10
  return /*#__PURE__*/ _jsx(_Fragment, {
11
- children: "DateElementEditor"
11
+ children: type === 'date' ? 'DateElementEditor' : 'TimeElementEditor'
12
12
  });
13
13
  }
14
14
 
15
- //# sourceMappingURL=DateVariableEditor.js.map
15
+ //# sourceMappingURL=TemporalVariableEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/inputs/variables/editors/TemporalVariableEditor.tsx"],"sourcesContent":["import { useImperativeHandle } from 'react';\nimport type { DateElement, TimeElement } from '@/types';\n\nexport interface TemporalVariableEditorProps {\n type: 'date' | 'time';\n name: string;\n element: DateElement | TimeElement | undefined;\n ref: React.Ref<{ getValue: () => string }>;\n}\n\nexport function TemporalVariableEditor({\n type,\n ref,\n}: TemporalVariableEditorProps) {\n useImperativeHandle(ref, () => ({\n getValue: () => {\n // TODO\n return '';\n },\n }));\n\n return <>{type === 'date' ? 'DateElementEditor' : 'TimeElementEditor'}</>;\n}\n"],"names":["useImperativeHandle","TemporalVariableEditor","type","ref","getValue"],"mappings":";AAAA,SAASA,mBAAmB,QAAQ,QAAQ;AAU5C,OAAO,SAASC,uBAAuB,EACrCC,IAAI,EACJC,GAAG,EACyB;IAC5BH,oBAAoBG,KAAK,IAAO,CAAA;YAC9BC,UAAU;gBACR,OAAO;gBACP,OAAO;YACT;QACF,CAAA;IAEA,qBAAO;kBAAGF,SAAS,SAAS,sBAAsB;;AACpD"}
@@ -0,0 +1,7 @@
1
+ import type { NumberElement, PluralElement } from '../../../../types';
2
+ export interface NumericVariableEditorProps {
3
+ element: NumberElement | PluralElement;
4
+ onUpdate: (value: string) => void;
5
+ }
6
+ export declare function NumericVariableEditor({ element, onUpdate, }: NumericVariableEditorProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=NumericVariableEditor.d.ts.map