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.
- package/README.md +67 -0
- package/dist/components/MessageController.d.ts +14 -0
- package/dist/components/MessageController.js +64 -0
- package/dist/components/MessageController.js.map +1 -0
- package/dist/components/MessagesForm.d.ts +11 -0
- package/dist/components/MessagesForm.js +91 -0
- package/dist/components/MessagesForm.js.map +1 -0
- package/dist/components/actions/JsonImport.d.ts +1 -0
- package/dist/components/actions/Move.d.ts +3 -0
- package/dist/components/inputs/InputWrapper.d.ts +7 -0
- package/dist/components/inputs/InputWrapper.js +23 -0
- package/dist/components/inputs/InputWrapper.js.map +1 -0
- package/dist/components/inputs/MessageInput.d.ts +10 -0
- package/dist/components/inputs/MessageInput.js +52 -0
- package/dist/components/inputs/MessageInput.js.map +1 -0
- package/dist/components/inputs/RichTextInput.d.ts +8 -0
- package/dist/components/inputs/RichTextInput.js +81 -0
- package/dist/components/inputs/RichTextInput.js.map +1 -0
- package/dist/components/inputs/toolbar/AlignmentControls.d.ts +5 -0
- package/dist/components/inputs/toolbar/AlignmentControls.js +59 -0
- package/dist/components/inputs/toolbar/AlignmentControls.js.map +1 -0
- package/dist/components/inputs/toolbar/BlockElementSelect.d.ts +5 -0
- package/dist/components/inputs/toolbar/BlockElementSelect.js +129 -0
- package/dist/components/inputs/toolbar/BlockElementSelect.js.map +1 -0
- package/dist/components/inputs/toolbar/LinkEditor.d.ts +58 -0
- package/dist/components/inputs/toolbar/LinkEditor.js +230 -0
- package/dist/components/inputs/toolbar/LinkEditor.js.map +1 -0
- package/dist/components/inputs/toolbar/MarkControls.d.ts +5 -0
- package/dist/components/inputs/toolbar/MarkControls.js +47 -0
- package/dist/components/inputs/toolbar/MarkControls.js.map +1 -0
- package/dist/components/inputs/toolbar/RichTextToolbar.d.ts +6 -0
- package/dist/components/inputs/toolbar/RichTextToolbar.js +32 -0
- package/dist/components/inputs/toolbar/RichTextToolbar.js.map +1 -0
- package/dist/components/inputs/variables/VariableChip.d.ts +2 -0
- package/dist/components/inputs/variables/VariableChip.js +60 -0
- package/dist/components/inputs/variables/VariableChip.js.map +1 -0
- package/dist/components/inputs/variables/VariableSuggestion.d.ts +8 -0
- package/dist/components/inputs/variables/VariableSuggestion.js +40 -0
- package/dist/components/inputs/variables/VariableSuggestion.js.map +1 -0
- package/dist/components/inputs/variables/editors/DateVariableEditor.d.ts +9 -0
- package/dist/components/inputs/variables/editors/PluralVariableEditor.d.ts +9 -0
- package/dist/components/inputs/variables/editors/PluralVariableEditor.js +149 -0
- package/dist/components/inputs/variables/editors/PluralVariableEditor.js.map +1 -0
- package/dist/components/inputs/variables/editors/SelectVariableEditor.d.ts +6 -0
- package/dist/components/inputs/variables/editors/SelectVariableEditor.js +42 -0
- package/dist/components/inputs/variables/editors/SelectVariableEditor.js.map +1 -0
- package/dist/components/inputs/variables/editors/TagVariableEditor.d.ts +6 -0
- package/dist/components/inputs/variables/editors/TagVariableEditor.js +32 -0
- package/dist/components/inputs/variables/editors/TagVariableEditor.js.map +1 -0
- package/dist/components/inputs/variables/editors/TimeVariableEditor.d.ts +9 -0
- package/dist/components/inputs/variables/extension.d.ts +3 -0
- package/dist/components/inputs/variables/extension.js +93 -0
- package/dist/components/inputs/variables/extension.js.map +1 -0
- package/dist/components/inputs/variables/pickers/NumericVariablePicker.d.ts +6 -0
- package/dist/components/inputs/variables/pickers/NumericVariablePicker.js +49 -0
- package/dist/components/inputs/variables/pickers/NumericVariablePicker.js.map +1 -0
- package/dist/components/inputs/variables/pickers/TemporalElementEditor.d.ts +6 -0
- package/dist/components/layout/MessageField.d.ts +9 -0
- package/dist/components/layout/MessageField.js +46 -0
- package/dist/components/layout/MessageField.js.map +1 -0
- package/dist/components/layout/MessagesTabs.d.ts +8 -0
- package/dist/components/layout/MessagesTabs.js +43 -0
- package/dist/components/layout/MessagesTabs.js.map +1 -0
- package/dist/components/layout/MessagesTree.d.ts +9 -0
- package/dist/components/layout/MessagesTree.js +67 -0
- package/dist/components/layout/MessagesTree.js.map +1 -0
- package/dist/context/messages-form.d.ts +30 -0
- package/dist/endpoints/get-messages.d.ts +2 -0
- package/dist/endpoints/get-messages.js +13 -0
- package/dist/endpoints/get-messages.js.map +1 -0
- package/dist/endpoints/set-messages.d.ts +2 -0
- package/dist/endpoints/set-messages.js +47 -0
- package/dist/endpoints/set-messages.js.map +1 -0
- package/dist/exports/link.d.ts +7 -0
- package/dist/exports/link.js +20 -0
- package/dist/exports/link.js.map +1 -0
- package/dist/exports/rsc.d.ts +2 -0
- package/dist/exports/rsc.js +7 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/exports/view.d.ts +10 -0
- package/dist/exports/view.js +56 -0
- package/dist/exports/view.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/requests/fetchMessages.d.ts +3 -0
- package/dist/requests/fetchMessages.js +29 -0
- package/dist/requests/fetchMessages.js.map +1 -0
- package/dist/styles.css +1 -0
- package/dist/types.d.ts +48 -0
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/config.d.ts +11 -0
- package/dist/utils/config.js +19 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/format.d.ts +3 -0
- package/dist/utils/guards.d.ts +4 -0
- package/dist/utils/icu-tranform.d.ts +30 -0
- package/dist/utils/sanitize.d.ts +15 -0
- package/dist/utils/schema.d.ts +9 -0
- package/dist/utils/validate.d.ts +5 -0
- package/package.json +131 -0
package/dist/styles.css
ADDED
|
@@ -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))}}
|
package/dist/types.d.ts
ADDED
|
@@ -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,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,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
|
+
}
|