payload-intl 0.0.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 (101) hide show
  1. package/README.md +67 -0
  2. package/dist/components/MessageController.d.ts +14 -0
  3. package/dist/components/MessageController.js +64 -0
  4. package/dist/components/MessageController.js.map +1 -0
  5. package/dist/components/MessagesForm.d.ts +11 -0
  6. package/dist/components/MessagesForm.js +91 -0
  7. package/dist/components/MessagesForm.js.map +1 -0
  8. package/dist/components/actions/JsonImport.d.ts +1 -0
  9. package/dist/components/actions/Move.d.ts +3 -0
  10. package/dist/components/inputs/InputWrapper.d.ts +7 -0
  11. package/dist/components/inputs/InputWrapper.js +23 -0
  12. package/dist/components/inputs/InputWrapper.js.map +1 -0
  13. package/dist/components/inputs/MessageInput.d.ts +10 -0
  14. package/dist/components/inputs/MessageInput.js +52 -0
  15. package/dist/components/inputs/MessageInput.js.map +1 -0
  16. package/dist/components/inputs/RichTextInput.d.ts +8 -0
  17. package/dist/components/inputs/RichTextInput.js +81 -0
  18. package/dist/components/inputs/RichTextInput.js.map +1 -0
  19. package/dist/components/inputs/toolbar/AlignmentControls.d.ts +5 -0
  20. package/dist/components/inputs/toolbar/AlignmentControls.js +59 -0
  21. package/dist/components/inputs/toolbar/AlignmentControls.js.map +1 -0
  22. package/dist/components/inputs/toolbar/BlockElementSelect.d.ts +5 -0
  23. package/dist/components/inputs/toolbar/BlockElementSelect.js +129 -0
  24. package/dist/components/inputs/toolbar/BlockElementSelect.js.map +1 -0
  25. package/dist/components/inputs/toolbar/LinkEditor.d.ts +58 -0
  26. package/dist/components/inputs/toolbar/LinkEditor.js +230 -0
  27. package/dist/components/inputs/toolbar/LinkEditor.js.map +1 -0
  28. package/dist/components/inputs/toolbar/MarkControls.d.ts +5 -0
  29. package/dist/components/inputs/toolbar/MarkControls.js +47 -0
  30. package/dist/components/inputs/toolbar/MarkControls.js.map +1 -0
  31. package/dist/components/inputs/toolbar/RichTextToolbar.d.ts +6 -0
  32. package/dist/components/inputs/toolbar/RichTextToolbar.js +32 -0
  33. package/dist/components/inputs/toolbar/RichTextToolbar.js.map +1 -0
  34. package/dist/components/inputs/variables/VariableChip.d.ts +2 -0
  35. package/dist/components/inputs/variables/VariableChip.js +60 -0
  36. package/dist/components/inputs/variables/VariableChip.js.map +1 -0
  37. package/dist/components/inputs/variables/VariableSuggestion.d.ts +8 -0
  38. package/dist/components/inputs/variables/VariableSuggestion.js +40 -0
  39. package/dist/components/inputs/variables/VariableSuggestion.js.map +1 -0
  40. package/dist/components/inputs/variables/editors/DateVariableEditor.d.ts +9 -0
  41. package/dist/components/inputs/variables/editors/PluralVariableEditor.d.ts +9 -0
  42. package/dist/components/inputs/variables/editors/PluralVariableEditor.js +149 -0
  43. package/dist/components/inputs/variables/editors/PluralVariableEditor.js.map +1 -0
  44. package/dist/components/inputs/variables/editors/SelectVariableEditor.d.ts +6 -0
  45. package/dist/components/inputs/variables/editors/SelectVariableEditor.js +42 -0
  46. package/dist/components/inputs/variables/editors/SelectVariableEditor.js.map +1 -0
  47. package/dist/components/inputs/variables/editors/TagVariableEditor.d.ts +6 -0
  48. package/dist/components/inputs/variables/editors/TagVariableEditor.js +32 -0
  49. package/dist/components/inputs/variables/editors/TagVariableEditor.js.map +1 -0
  50. package/dist/components/inputs/variables/editors/TimeVariableEditor.d.ts +9 -0
  51. package/dist/components/inputs/variables/extension.d.ts +3 -0
  52. package/dist/components/inputs/variables/extension.js +93 -0
  53. package/dist/components/inputs/variables/extension.js.map +1 -0
  54. package/dist/components/inputs/variables/pickers/NumericVariablePicker.d.ts +6 -0
  55. package/dist/components/inputs/variables/pickers/NumericVariablePicker.js +49 -0
  56. package/dist/components/inputs/variables/pickers/NumericVariablePicker.js.map +1 -0
  57. package/dist/components/inputs/variables/pickers/TemporalElementEditor.d.ts +6 -0
  58. package/dist/components/layout/MessageField.d.ts +9 -0
  59. package/dist/components/layout/MessageField.js +46 -0
  60. package/dist/components/layout/MessageField.js.map +1 -0
  61. package/dist/components/layout/MessagesTabs.d.ts +8 -0
  62. package/dist/components/layout/MessagesTabs.js +43 -0
  63. package/dist/components/layout/MessagesTabs.js.map +1 -0
  64. package/dist/components/layout/MessagesTree.d.ts +9 -0
  65. package/dist/components/layout/MessagesTree.js +67 -0
  66. package/dist/components/layout/MessagesTree.js.map +1 -0
  67. package/dist/context/messages-form.d.ts +30 -0
  68. package/dist/endpoints/get-messages.d.ts +2 -0
  69. package/dist/endpoints/get-messages.js +13 -0
  70. package/dist/endpoints/get-messages.js.map +1 -0
  71. package/dist/endpoints/set-messages.d.ts +2 -0
  72. package/dist/endpoints/set-messages.js +47 -0
  73. package/dist/endpoints/set-messages.js.map +1 -0
  74. package/dist/exports/link.d.ts +7 -0
  75. package/dist/exports/link.js +20 -0
  76. package/dist/exports/link.js.map +1 -0
  77. package/dist/exports/rsc.d.ts +2 -0
  78. package/dist/exports/rsc.js +7 -0
  79. package/dist/exports/rsc.js.map +1 -0
  80. package/dist/exports/view.d.ts +10 -0
  81. package/dist/exports/view.js +56 -0
  82. package/dist/exports/view.js.map +1 -0
  83. package/dist/index.d.ts +5 -0
  84. package/dist/index.js +76 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/requests/fetchMessages.d.ts +3 -0
  87. package/dist/requests/fetchMessages.js +29 -0
  88. package/dist/requests/fetchMessages.js.map +1 -0
  89. package/dist/styles.css +1 -0
  90. package/dist/types.d.ts +48 -0
  91. package/dist/utils/cn.d.ts +2 -0
  92. package/dist/utils/config.d.ts +11 -0
  93. package/dist/utils/config.js +19 -0
  94. package/dist/utils/config.js.map +1 -0
  95. package/dist/utils/format.d.ts +3 -0
  96. package/dist/utils/guards.d.ts +4 -0
  97. package/dist/utils/icu-tranform.d.ts +30 -0
  98. package/dist/utils/sanitize.d.ts +15 -0
  99. package/dist/utils/schema.d.ts +9 -0
  100. package/dist/utils/validate.d.ts +5 -0
  101. package/package.json +131 -0
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-medium:500;--radius-sm:var(--style-radius-s);--radius-md:var(--style-radius-m);--color-border:var(--theme-border-color);--color-background:var(--theme-bg);--color-input:var(--theme-input-bg);--color-elevation-0:var(--theme-elevation-0);--color-elevation-50:var(--theme-elevation-50);--color-elevation-100:var(--theme-elevation-100);--color-elevation-250:var(--theme-elevation-250);--color-elevation-400:var(--theme-elevation-400);--color-elevation-600:var(--theme-elevation-600);--color-elevation-800:var(--theme-elevation-800)}}@layer base,components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.z-10{z-index:10}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.my-0{margin-block:calc(var(--spacing)*0)}.my-1{margin-block:calc(var(--spacing)*1)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-2{margin-left:calc(var(--spacing)*-2)}.ml-auto{margin-left:auto}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.h-7{height:calc(var(--spacing)*7)}.h-10{height:calc(var(--spacing)*10)}.h-\[calc\(100vh-var\(--app-header-height\)\)\]{height:calc(100vh - var(--app-header-height))}.h-px{height:1px}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-8{min-height:calc(var(--spacing)*8)}.w-8{width:calc(var(--spacing)*8)}.w-34{width:calc(var(--spacing)*34)}.w-40{width:calc(var(--spacing)*40)}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[8rem\]{min-width:8rem}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.flex-grow-0{flex-grow:0}.basis-auto{flex-basis:auto}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-hover-card-content-transform-origin\){transform-origin:var(--radix-hover-card-content-transform-origin)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[3rem_8rem_1\.5rem\]{grid-template-columns:3rem 8rem 1.5rem}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-x-none{overscroll-behavior-x:none}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.border-error{border-style:var(--tw-border-style);border-width:1px;border-color:var(--theme-error-400)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-none{--tw-border-style:none;border-style:none}.border-border{border-color:var(--color-border)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--color-background)}.bg-border{background-color:var(--color-border)}.bg-elevation-50{background-color:var(--color-elevation-50)}.bg-elevation-100{background-color:var(--color-elevation-100)}.bg-elevation-250{background-color:var(--color-elevation-250)}.bg-elevation-600{background-color:var(--color-elevation-600)}.bg-elevation-800{background-color:var(--color-elevation-800)}.bg-error{background-color:var(--theme-error-100)}.bg-input{background-color:var(--color-input)}.bg-transparent{background-color:#0000}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-1{padding-block:calc(var(--spacing)*1)}.pt-8{padding-top:calc(var(--spacing)*8)}.pr-0{padding-right:calc(var(--spacing)*0)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pl-2{padding-left:calc(var(--spacing)*2)}.text-center{text-align:center}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-nowrap{text-wrap:nowrap}.text-elevation-0{color:var(--color-elevation-0)}.text-error{color:var(--theme-error-400)}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.running{animation-play-state:running}.slide-in-from-top-2{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.empty\:hidden:empty{display:none}.focus-within\:border-elevation-400:focus-within{border-color:var(--color-elevation-400)}.focus-within\:border-elevation-600:focus-within{border-color:var(--color-elevation-600)}@media (hover:hover){.hover\:bg-elevation-250:hover{background-color:var(--color-elevation-250)}.hover\:bg-elevation-400:hover{background-color:var(--color-elevation-400)}.hover\:bg-elevation-600:hover{background-color:var(--color-elevation-600)}.hover\:text-error:hover{color:var(--theme-error-400)}.hover\:outline-none:hover{--tw-outline-style:none;outline-style:none}}.focus\:relative:focus{position:relative}.focus\:border-border:focus{border-color:var(--color-border)}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:bg-transparent:disabled{background-color:#0000}.disabled\:text-elevation-250:disabled{color:var(--color-elevation-250)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[state\=checked\]\:pointer-events-none[data-state=checked]{pointer-events:none}.data-\[state\=checked\]\:bg-elevation-800[data-state=checked]{background-color:var(--color-elevation-800)}.data-\[state\=checked\]\:text-elevation-0[data-state=checked]{color:var(--color-elevation-0)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=off\]\:cursor-pointer[data-state=off]{cursor:pointer}.data-\[state\=off\]\:opacity-50[data-state=off]{opacity:.5}@media (hover:hover){.data-\[state\=off\]\:hover\:opacity-100[data-state=off]:hover{opacity:1}}.data-\[state\=on\]\:bg-elevation-600[data-state=on]{background-color:var(--color-elevation-600)}.data-\[state\=on\]\:bg-elevation-800[data-state=on]{background-color:var(--color-elevation-800)}.data-\[state\=on\]\:text-elevation-0[data-state=on]{color:var(--color-elevation-0)}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}.tiptap-editor{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.tiptap-editor>.ProseMirror{color:var(--tw-prose-body);max-width:65ch}.tiptap-editor>.ProseMirror :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.tiptap-editor>.ProseMirror :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.tiptap-editor>.ProseMirror :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.tiptap-editor>.ProseMirror :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.tiptap-editor>.ProseMirror :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.tiptap-editor>.ProseMirror :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.tiptap-editor>.ProseMirror :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.tiptap-editor>.ProseMirror :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.tiptap-editor>.ProseMirror :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.tiptap-editor>.ProseMirror :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.tiptap-editor>.ProseMirror :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.tiptap-editor>.ProseMirror :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.tiptap-editor>.ProseMirror :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.tiptap-editor>.ProseMirror :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.tiptap-editor>.ProseMirror :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.tiptap-editor>.ProseMirror :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.tiptap-editor>.ProseMirror :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.tiptap-editor>.ProseMirror :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.tiptap-editor>.ProseMirror :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.tiptap-editor>.ProseMirror :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.tiptap-editor>.ProseMirror :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.tiptap-editor>.ProseMirror :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.tiptap-editor>.ProseMirror :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.tiptap-editor>.ProseMirror :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.tiptap-editor>.ProseMirror :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.tiptap-editor>.ProseMirror :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.tiptap-editor>.ProseMirror :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.tiptap-editor>.ProseMirror :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.tiptap-editor>.ProseMirror :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.tiptap-editor>.ProseMirror :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.tiptap-editor>.ProseMirror :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.tiptap-editor>.ProseMirror :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px rgb(var(--tw-prose-kbd-shadows)/10%);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.tiptap-editor>.ProseMirror :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.tiptap-editor>.ProseMirror :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.tiptap-editor>.ProseMirror :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.tiptap-editor>.ProseMirror :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.tiptap-editor>.ProseMirror :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.tiptap-editor>.ProseMirror :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.tiptap-editor>.ProseMirror :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.tiptap-editor>.ProseMirror :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.tiptap-editor>.ProseMirror :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.tiptap-editor>.ProseMirror :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.tiptap-editor>.ProseMirror :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.tiptap-editor>.ProseMirror :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.tiptap-editor>.ProseMirror :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.tiptap-editor>.ProseMirror :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.tiptap-editor>.ProseMirror :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.tiptap-editor>.ProseMirror :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.tiptap-editor>.ProseMirror :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.tiptap-editor>.ProseMirror :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.tiptap-editor>.ProseMirror :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.tiptap-editor>.ProseMirror :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.tiptap-editor>.ProseMirror :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.tiptap-editor>.ProseMirror{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:NaN NaN NaN;--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.tiptap-editor>.ProseMirror :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.tiptap-editor>.ProseMirror :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.tiptap-editor>.ProseMirror :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.tiptap-editor>.ProseMirror :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.tiptap-editor>.ProseMirror :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.tiptap-editor>.ProseMirror :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.tiptap-editor>.ProseMirror :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.tiptap-editor>.ProseMirror{font-size:1.125rem;line-height:1.77778}.tiptap-editor>.ProseMirror :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em}.tiptap-editor>.ProseMirror :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.09091em;margin-bottom:1.09091em;font-size:1.22222em;line-height:1.45455}.tiptap-editor>.ProseMirror :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.66667em;margin-bottom:1.66667em;padding-inline-start:1em}.tiptap-editor>.ProseMirror :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.833333em;font-size:2.66667em;line-height:1}.tiptap-editor>.ProseMirror :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.86667em;margin-bottom:1.06667em;font-size:1.66667em;line-height:1.33333}.tiptap-editor>.ProseMirror :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.66667em;margin-bottom:.666667em;font-size:1.33333em;line-height:1.5}.tiptap-editor>.ProseMirror :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.77778em;margin-bottom:.444444em;line-height:1.55556}.tiptap-editor>.ProseMirror :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.77778em;margin-bottom:1.77778em}.tiptap-editor>.ProseMirror :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.tiptap-editor>.ProseMirror :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.77778em;margin-bottom:1.77778em}.tiptap-editor>.ProseMirror :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.222222em;padding-inline-end:.444444em;padding-bottom:.222222em;border-radius:.3125rem;padding-inline-start:.444444em;font-size:.888889em}.tiptap-editor>.ProseMirror :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.888889em}.tiptap-editor>.ProseMirror :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.866667em}.tiptap-editor>.ProseMirror :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.tiptap-editor>.ProseMirror :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:1em;padding-inline-end:1.5em;padding-bottom:1em;border-radius:.375rem;margin-top:2em;margin-bottom:2em;padding-inline-start:1.5em;font-size:.888889em;line-height:1.75}.tiptap-editor>.ProseMirror :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em;padding-inline-start:1.55556em}.tiptap-editor>.ProseMirror :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.666667em;margin-bottom:.666667em}.tiptap-editor>.ProseMirror :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.444444em}.tiptap-editor>.ProseMirror :where(.prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.888889em;margin-bottom:.888889em}.tiptap-editor>.ProseMirror :where(.prose-lg>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em}.tiptap-editor>.ProseMirror :where(.prose-lg>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.33333em}.tiptap-editor>.ProseMirror :where(.prose-lg>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em}.tiptap-editor>.ProseMirror :where(.prose-lg>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.33333em}.tiptap-editor>.ProseMirror :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.888889em;margin-bottom:.888889em}.tiptap-editor>.ProseMirror :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em}.tiptap-editor>.ProseMirror :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em}.tiptap-editor>.ProseMirror :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.666667em;padding-inline-start:1.55556em}.tiptap-editor>.ProseMirror :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:3.11111em;margin-bottom:3.11111em}.tiptap-editor>.ProseMirror :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.tiptap-editor>.ProseMirror :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.tiptap-editor>.ProseMirror :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.888889em;line-height:1.5}.tiptap-editor>.ProseMirror :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-inline-start:.75em}.tiptap-editor>.ProseMirror :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.tiptap-editor>.ProseMirror :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.tiptap-editor>.ProseMirror :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.75em;padding-inline-end:.75em;padding-bottom:.75em;padding-inline-start:.75em}.tiptap-editor>.ProseMirror :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.tiptap-editor>.ProseMirror :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.tiptap-editor>.ProseMirror :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.77778em;margin-bottom:1.77778em}.tiptap-editor>.ProseMirror :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.tiptap-editor>.ProseMirror :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1em;font-size:.888889em;line-height:1.5}.tiptap-editor>.ProseMirror :where(.prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.tiptap-editor>.ProseMirror :where(.prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.tiptap-editor>.ProseMirror:focus{--tw-outline-style:none;outline-style:none}.tiptap-editor>.ProseMirror:where([data-theme=dark],[data-theme=dark] *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.tiptap-editor>.ProseMirror:focus{outline:none}.tiptap-editor>.ProseMirror>:first-child{margin-top:calc(var(--spacing)*0)}.tiptap-editor>.ProseMirror>:last-child{margin-bottom:calc(var(--spacing)*0)}.messages-tree-collapsible{overflow:clip}.messages-tree-collapsible>.collapsible__toggle-wrap{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);top:calc(var(--nesting-level)*40px - 26px);z-index:calc(9 - var(--nesting-level));position:sticky}.messages-tree-collapsible .collapsible__content{padding:calc(var(--spacing)*3)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}
@@ -0,0 +1,48 @@
1
+ import { LiteralElement, MessageFormatElement, PoundElement } from '@formatjs/icu-messageformat-parser';
2
+ import { HeadingOptions } from '@tiptap/extension-heading';
3
+ import { CollectionConfig, PayloadRequest } from 'payload';
4
+ import { DeepPartial } from 'react-hook-form';
5
+ export interface MessagesPluginConfig {
6
+ hooks?: MessagesHooks;
7
+ schema: MessagesSchema;
8
+ tabs?: boolean;
9
+ /**
10
+ * The slug of the collection to use for the messages.
11
+ *
12
+ * @default `messages`
13
+ */
14
+ collectionSlug?: string;
15
+ /**
16
+ * Access control for allowing to edit the messages.
17
+ *
18
+ * @default `(req) => req.user !== null // Authenticated users only`
19
+ */
20
+ editorAccess?: MessagesGuard;
21
+ /**
22
+ * The options for the rich text editor.
23
+ */
24
+ richTextEditorOptions?: RichTextEditorOptions;
25
+ }
26
+ export type MessagesHooks = {
27
+ afterUpdate?: () => Promise<void> | void;
28
+ } & CollectionConfig["hooks"];
29
+ export type MessagesGuard = (req: PayloadRequest) => boolean | Promise<boolean>;
30
+ export type RichTextEditorOptions = {
31
+ heading?: Partial<HeadingOptions> | false;
32
+ };
33
+ type Locale = string;
34
+ export type Locales = [Locale, ...Locale[]];
35
+ export type Translations<T> = Record<Locale, T>;
36
+ export type Messages<T = string> = {
37
+ [key: string]: Messages<T> | T;
38
+ };
39
+ export type MessageSchema = (string & {}) | "$RICH$";
40
+ export type MessagesSchema = Messages<MessageSchema>;
41
+ export interface VariableMentionNodeAttrs {
42
+ name: string;
43
+ label: string;
44
+ icu: string;
45
+ }
46
+ export { DeepPartial };
47
+ export type TemplateVariable = Exclude<MessageFormatElement, LiteralElement | PoundElement>;
48
+ export type { LiteralElement, ArgumentElement, NumberElement, PluralElement, SelectElement, TagElement, TimeElement, DateElement, } from '@formatjs/icu-messageformat-parser';
@@ -0,0 +1,2 @@
1
+ import { ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
@@ -0,0 +1,11 @@
1
+ import { Locales } from '../types.ts';
2
+ import { Config, LocalizationConfig, SanitizedConfig } from 'payload';
3
+ import { z } from 'zod/v4-mini';
4
+ export declare const getSupportedLocales: (localization: false | LocalizationConfig | undefined) => Locales;
5
+ declare const pluginContextSchema: z.ZodMiniObject<{
6
+ collectionSlug: z.ZodMiniString<string>;
7
+ }, z.core.$strip>;
8
+ type PluginContext = z.infer<typeof pluginContextSchema>;
9
+ export declare const attachPluginContext: (config: Config, context: PluginContext) => void;
10
+ export declare const getPluginContext: (config: SanitizedConfig) => PluginContext;
11
+ export {};
@@ -0,0 +1,19 @@
1
+ import { z as o } from "zod/v4-mini";
2
+ const u = (t) => {
3
+ if (!t)
4
+ throw new Error(
5
+ 'You need to enable "localization" in your Payload config.'
6
+ );
7
+ return t.locales.length === 0 ? [t.defaultLocale] : t.locales.map((e) => typeof e == "string" ? e : e.code);
8
+ }, r = "intl-plugin";
9
+ o.object({
10
+ collectionSlug: o.string()
11
+ });
12
+ const c = (t, e) => {
13
+ t.custom ??= {}, t.custom[r] = e;
14
+ };
15
+ export {
16
+ c as attachPluginContext,
17
+ u as getSupportedLocales
18
+ };
19
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sources":["../../src/utils/config.ts"],"sourcesContent":["import type { Locales } from \"@/types\";\nimport type { Config, LocalizationConfig, SanitizedConfig } from \"payload\";\nimport { z } from \"zod/v4-mini\";\n\nexport const getSupportedLocales = (\n localization: false | LocalizationConfig | undefined,\n): Locales => {\n if (!localization) {\n throw new Error(\n 'You need to enable \"localization\" in your Payload config.',\n );\n }\n if (localization.locales.length === 0) {\n return [localization.defaultLocale];\n }\n return localization.locales.map((locale) => {\n if (typeof locale === \"string\") {\n return locale;\n }\n return locale.code;\n }) as Locales;\n};\n\nconst PLUGIN_KEY = \"intl-plugin\";\nconst pluginContextSchema = z.object({\n collectionSlug: z.string(),\n});\ntype PluginContext = z.infer<typeof pluginContextSchema>;\n\nexport const attachPluginContext = (config: Config, context: PluginContext) => {\n config.custom ??= {};\n config.custom[PLUGIN_KEY] = context;\n};\n\nexport const getPluginContext = (config: SanitizedConfig): PluginContext =>\n pluginContextSchema.parse(config.custom?.[PLUGIN_KEY]);\n"],"names":["getSupportedLocales","localization","locale","PLUGIN_KEY","z","attachPluginContext","config","context"],"mappings":";AAIO,MAAMA,IAAsB,CACjCC,MACY;AACZ,MAAI,CAACA;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAIA,EAAa,QAAQ,WAAW,IAC3B,CAACA,EAAa,aAAa,IAE7BA,EAAa,QAAQ,IAAI,CAACC,MAC3B,OAAOA,KAAW,WACbA,IAEFA,EAAO,IACf;AACH,GAEMC,IAAa;AACSC,EAAE,OAAO;AAAA,EACnC,gBAAgBA,EAAE,OAAA;AACpB,CAAC;AAGM,MAAMC,IAAsB,CAACC,GAAgBC,MAA2B;AAC7E,EAAAD,EAAO,WAAW,CAAA,GAClBA,EAAO,OAAOH,CAAU,IAAII;AAC9B;"}
@@ -0,0 +1,3 @@
1
+ import { TemplateVariable } from '../types.ts';
2
+ export declare const toWords: (inputString: string, joinWords?: boolean) => string;
3
+ export declare const formatVariableLabel: (variable: TemplateVariable) => string;
@@ -0,0 +1,4 @@
1
+ import { DateElement, MessageFormatElement, NumberElement, PluralElement, TimeElement, isArgumentElement, isDateElement, isLiteralElement, isNumberElement, isPluralElement, isSelectElement, isTagElement, isTimeElement } from '@formatjs/icu-messageformat-parser';
2
+ export declare const isNumericElement: (element: MessageFormatElement) => element is NumberElement | PluralElement;
3
+ export declare const isTemporalElement: (element: MessageFormatElement) => element is DateElement | TimeElement;
4
+ export { isLiteralElement, isArgumentElement, isNumberElement, isSelectElement, isPluralElement, isDateElement, isTimeElement, isTagElement, };
@@ -0,0 +1,30 @@
1
+ import { VariableMentionNodeAttrs } from '../types.ts';
2
+ import { MessageFormatElement } from '@formatjs/icu-messageformat-parser';
3
+ /**
4
+ * Parse an ICU message string into a AST array
5
+ */
6
+ export declare const parseICUMessage: (message: string) => MessageFormatElement[];
7
+ /**
8
+ * Serialize an ICU message AST array into a ICU message string
9
+ */
10
+ export declare const serializeICUMessage: (elements: MessageFormatElement[]) => string;
11
+ type TextContent = {
12
+ type: "text";
13
+ text: string;
14
+ };
15
+ type VariableContent = {
16
+ type: "variable";
17
+ attrs: VariableMentionNodeAttrs;
18
+ };
19
+ type ProseMirrorJSONRepresentation = {
20
+ type: "doc";
21
+ content: {
22
+ type: "paragraph";
23
+ content: (TextContent | VariableContent)[];
24
+ }[];
25
+ };
26
+ /**
27
+ * Parse an ICU message string into a ProseMirror JSON representation
28
+ */
29
+ export declare const parseIcuToProseMirrorJSON: (icuMessage: string) => ProseMirrorJSONRepresentation;
30
+ export {};
@@ -0,0 +1,15 @@
1
+ import { DeepPartial, Messages } from '../types.ts';
2
+ /**
3
+ * Sanitize messages data to match the schema.
4
+ * Stored messages might contain keys that are not in the config.
5
+ * This happens when messages in the config were (re)moved.
6
+ *
7
+ * Keep exactly the keys from `shape`, fill values from `source` when present.
8
+ * - Leaf present as string -> included
9
+ * - Leaf missing/non-string -> omitted
10
+ * - Empty nested groups -> omitted
11
+ */
12
+ /**
13
+
14
+ */
15
+ export declare function sanitizeMessages(config: Messages, data: unknown): DeepPartial<Messages>;
@@ -0,0 +1,9 @@
1
+ import { MessageSchema, TemplateVariable } from '../types.ts';
2
+ export declare const parseMessageSchema: (schema: MessageSchema) => MessageConfig;
3
+ export declare const extractTemplateVariables: (schema: MessageSchema) => TemplateVariable[];
4
+ export type MessageType = "rich" | "icu";
5
+ export type MessageConfig = {
6
+ description: string | undefined;
7
+ type: MessageType;
8
+ variables: TemplateVariable[];
9
+ };
@@ -0,0 +1,5 @@
1
+ import { ValidateResult } from 'react-hook-form';
2
+ import { TemplateVariable } from '../types.ts';
3
+ export declare const validateMessage: (value: unknown, variables: TemplateVariable[]) => ValidateResult;
4
+ export declare const createValidator: (variables: TemplateVariable[]) => MessageValidator;
5
+ export type MessageValidator = (value: unknown) => ValidateResult;
package/package.json ADDED
@@ -0,0 +1,131 @@
1
+ {
2
+ "name": "payload-intl",
3
+ "version": "0.0.1",
4
+ "description": "Payload Plugin for I18N using ICU Messages",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./rsc": {
14
+ "import": "./dist/exports/rsc.js",
15
+ "types": "./dist/exports/rsc.d.ts",
16
+ "default": "./dist/exports/rsc.js"
17
+ }
18
+ },
19
+ "main": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "devDependencies": {
25
+ "@eslint/eslintrc": "^3.2.0",
26
+ "@ianvs/prettier-plugin-sort-imports": "^4.5.1",
27
+ "@payloadcms/db-postgres": "3.49.1",
28
+ "@payloadcms/eslint-config": "3.9.0",
29
+ "@payloadcms/next": "3.49.1",
30
+ "@payloadcms/richtext-lexical": "3.49.1",
31
+ "@payloadcms/storage-uploadthing": "3.49.1",
32
+ "@payloadcms/ui": "3.49.1",
33
+ "@playwright/test": "^1.52.0",
34
+ "@tailwindcss/typography": "^0.5.16",
35
+ "@tailwindcss/vite": "^4.1.11",
36
+ "@tiptap/suggestion": "^3.0.9",
37
+ "@types/lodash-es": "^4.17.12",
38
+ "@types/node": "^22.5.4",
39
+ "@types/react": "19.1.0",
40
+ "@types/react-dom": "19.1.2",
41
+ "concurrently": "^9.2.0",
42
+ "cross-env": "^7.0.3",
43
+ "eslint": "^9.23.0",
44
+ "eslint-config-next": "15.3.0",
45
+ "graphql": "^16.8.1",
46
+ "next": "15.3.0",
47
+ "next-intl": "^4.3.4",
48
+ "open": "^10.1.0",
49
+ "payload": "3.49.1",
50
+ "prettier": "^3.4.2",
51
+ "prettier-plugin-tailwindcss": "^0.6.14",
52
+ "react": "19.1.0",
53
+ "react-dom": "19.1.0",
54
+ "rollup-preserve-directives": "^1.1.3",
55
+ "sharp": "0.32.6",
56
+ "sort-package-json": "^2.10.0",
57
+ "tailwindcss": "^4.1.11",
58
+ "tw-animate-css": "^1.3.6",
59
+ "typescript": "5.7.3",
60
+ "vite": "^7.0.6",
61
+ "vite-plugin-dts": "^4.5.4",
62
+ "vite-tsconfig-paths": "^5.1.4",
63
+ "vitest": "^3.1.2"
64
+ },
65
+ "peerDependencies": {
66
+ "@payloadcms/next": ">=3.37.0",
67
+ "@payloadcms/ui": ">=3.37.0",
68
+ "next": ">=15.2.3",
69
+ "payload": ">=3.37.0"
70
+ },
71
+ "engines": {
72
+ "node": "^18.20.2 || >=20.9.0",
73
+ "pnpm": "^9 || ^10"
74
+ },
75
+ "registry": "https://registry.npmjs.org/",
76
+ "dependencies": {
77
+ "@floating-ui/dom": "^1.7.3",
78
+ "@formatjs/icu-messageformat-parser": "^2.11.2",
79
+ "@radix-ui/react-dropdown-menu": "^2.1.15",
80
+ "@radix-ui/react-hover-card": "^1.1.14",
81
+ "@radix-ui/react-popover": "^1.1.14",
82
+ "@radix-ui/react-select": "^2.2.5",
83
+ "@radix-ui/react-toggle-group": "^1.1.10",
84
+ "@radix-ui/react-toolbar": "^1.1.10",
85
+ "@tabler/icons-react": "^3.34.0",
86
+ "@tiptap/extension-blockquote": "^3.0.9",
87
+ "@tiptap/extension-bold": "^3.0.9",
88
+ "@tiptap/extension-code-block": "^3.0.9",
89
+ "@tiptap/extension-document": "^3.0.9",
90
+ "@tiptap/extension-hard-break": "^3.0.9",
91
+ "@tiptap/extension-heading": "^3.0.9",
92
+ "@tiptap/extension-highlight": "^3.0.9",
93
+ "@tiptap/extension-horizontal-rule": "^3.0.9",
94
+ "@tiptap/extension-italic": "^3.0.9",
95
+ "@tiptap/extension-link": "^3.0.9",
96
+ "@tiptap/extension-list": "^3.0.9",
97
+ "@tiptap/extension-mention": "^3.0.9",
98
+ "@tiptap/extension-paragraph": "^3.0.9",
99
+ "@tiptap/extension-strike": "^3.0.9",
100
+ "@tiptap/extension-text": "^3.0.9",
101
+ "@tiptap/extension-text-align": "^3.0.9",
102
+ "@tiptap/extension-typography": "^3.0.9",
103
+ "@tiptap/extension-underline": "^3.0.9",
104
+ "@tiptap/extensions": "^3.0.9",
105
+ "@tiptap/react": "^3.0.9",
106
+ "@tiptap/starter-kit": "^3.0.9",
107
+ "clsx": "^2.1.1",
108
+ "lodash-es": "^4.17.21",
109
+ "radix-ui": "^1.4.2",
110
+ "react-hook-form": "^7.58.1",
111
+ "sonner": "^2.0.6",
112
+ "tailwind-merge": "^3.3.1",
113
+ "zod": "^4.0.14"
114
+ },
115
+ "scripts": {
116
+ "build": "vite build",
117
+ "dev": "pnpm build && cd dev && next dev --turbo",
118
+ "dev:watch": "pnpm build --watch & cd dev && next dev --turbo",
119
+ "dev:generate-importmap": "pnpm dev:payload generate:importmap",
120
+ "dev:generate-types": "pnpm dev:payload generate:types",
121
+ "dev:payload": "cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload",
122
+ "typecheck": "tsc --noEmit",
123
+ "format": "prettier --write \"**/*.{ts,tsx,js,jsx,mdx}\" --cache",
124
+ "lint": "eslint",
125
+ "lint:fix": "eslint ./src --fix",
126
+ "release": "pnpm publish --access public",
127
+ "test": "pnpm test:int && pnpm test:e2e",
128
+ "test:e2e": "playwright test",
129
+ "test:int": "vitest"
130
+ }
131
+ }