@pilotiq/tiptap 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -0
  3. package/dist/Block.d.ts +47 -0
  4. package/dist/Block.d.ts.map +1 -0
  5. package/dist/Block.js +56 -0
  6. package/dist/Block.js.map +1 -0
  7. package/dist/MentionProvider.d.ts +97 -0
  8. package/dist/MentionProvider.d.ts.map +1 -0
  9. package/dist/MentionProvider.js +104 -0
  10. package/dist/MentionProvider.js.map +1 -0
  11. package/dist/RichTextField.d.ts +286 -0
  12. package/dist/RichTextField.d.ts.map +1 -0
  13. package/dist/RichTextField.js +369 -0
  14. package/dist/RichTextField.js.map +1 -0
  15. package/dist/extensions/BlockNodeExtension.d.ts +41 -0
  16. package/dist/extensions/BlockNodeExtension.d.ts.map +1 -0
  17. package/dist/extensions/BlockNodeExtension.js +103 -0
  18. package/dist/extensions/BlockNodeExtension.js.map +1 -0
  19. package/dist/extensions/DragHandleExtension.d.ts +19 -0
  20. package/dist/extensions/DragHandleExtension.d.ts.map +1 -0
  21. package/dist/extensions/DragHandleExtension.js +166 -0
  22. package/dist/extensions/DragHandleExtension.js.map +1 -0
  23. package/dist/extensions/GridExtension.d.ts +49 -0
  24. package/dist/extensions/GridExtension.d.ts.map +1 -0
  25. package/dist/extensions/GridExtension.js +105 -0
  26. package/dist/extensions/GridExtension.js.map +1 -0
  27. package/dist/extensions/MentionExtension.d.ts +71 -0
  28. package/dist/extensions/MentionExtension.d.ts.map +1 -0
  29. package/dist/extensions/MentionExtension.js +165 -0
  30. package/dist/extensions/MentionExtension.js.map +1 -0
  31. package/dist/extensions/MergeTagExtension.d.ts +24 -0
  32. package/dist/extensions/MergeTagExtension.d.ts.map +1 -0
  33. package/dist/extensions/MergeTagExtension.js +57 -0
  34. package/dist/extensions/MergeTagExtension.js.map +1 -0
  35. package/dist/extensions/SlashCommandExtension.d.ts +71 -0
  36. package/dist/extensions/SlashCommandExtension.d.ts.map +1 -0
  37. package/dist/extensions/SlashCommandExtension.js +244 -0
  38. package/dist/extensions/SlashCommandExtension.js.map +1 -0
  39. package/dist/extensions/TextSizeMarks.d.ts +33 -0
  40. package/dist/extensions/TextSizeMarks.d.ts.map +1 -0
  41. package/dist/extensions/TextSizeMarks.js +47 -0
  42. package/dist/extensions/TextSizeMarks.js.map +1 -0
  43. package/dist/index.d.ts +8 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +8 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/plugin.d.ts +18 -0
  48. package/dist/plugin.d.ts.map +1 -0
  49. package/dist/plugin.js +25 -0
  50. package/dist/plugin.js.map +1 -0
  51. package/dist/react/BlockNodeView.d.ts +19 -0
  52. package/dist/react/BlockNodeView.d.ts.map +1 -0
  53. package/dist/react/BlockNodeView.js +60 -0
  54. package/dist/react/BlockNodeView.js.map +1 -0
  55. package/dist/react/BlockSidePanel.d.ts +105 -0
  56. package/dist/react/BlockSidePanel.d.ts.map +1 -0
  57. package/dist/react/BlockSidePanel.js +339 -0
  58. package/dist/react/BlockSidePanel.js.map +1 -0
  59. package/dist/react/FloatingToolbar.d.ts +13 -0
  60. package/dist/react/FloatingToolbar.d.ts.map +1 -0
  61. package/dist/react/FloatingToolbar.js +113 -0
  62. package/dist/react/FloatingToolbar.js.map +1 -0
  63. package/dist/react/MentionMenu.d.ts +26 -0
  64. package/dist/react/MentionMenu.d.ts.map +1 -0
  65. package/dist/react/MentionMenu.js +64 -0
  66. package/dist/react/MentionMenu.js.map +1 -0
  67. package/dist/react/Palette.d.ts +26 -0
  68. package/dist/react/Palette.d.ts.map +1 -0
  69. package/dist/react/Palette.js +21 -0
  70. package/dist/react/Palette.js.map +1 -0
  71. package/dist/react/SlashMenu.d.ts +24 -0
  72. package/dist/react/SlashMenu.d.ts.map +1 -0
  73. package/dist/react/SlashMenu.js +74 -0
  74. package/dist/react/SlashMenu.js.map +1 -0
  75. package/dist/react/TableFloatingToolbar.d.ts +7 -0
  76. package/dist/react/TableFloatingToolbar.d.ts.map +1 -0
  77. package/dist/react/TableFloatingToolbar.js +108 -0
  78. package/dist/react/TableFloatingToolbar.js.map +1 -0
  79. package/dist/react/TiptapEditor.d.ts +20 -0
  80. package/dist/react/TiptapEditor.d.ts.map +1 -0
  81. package/dist/react/TiptapEditor.js +398 -0
  82. package/dist/react/TiptapEditor.js.map +1 -0
  83. package/dist/react/Toolbar.d.ts +45 -0
  84. package/dist/react/Toolbar.d.ts.map +1 -0
  85. package/dist/react/Toolbar.js +204 -0
  86. package/dist/react/Toolbar.js.map +1 -0
  87. package/dist/react/toolbarButtons.d.ts +36 -0
  88. package/dist/react/toolbarButtons.d.ts.map +1 -0
  89. package/dist/react/toolbarButtons.js +300 -0
  90. package/dist/react/toolbarButtons.js.map +1 -0
  91. package/dist/register.d.ts +20 -0
  92. package/dist/register.d.ts.map +1 -0
  93. package/dist/register.js +27 -0
  94. package/dist/register.js.map +1 -0
  95. package/dist/render.d.ts +89 -0
  96. package/dist/render.d.ts.map +1 -0
  97. package/dist/render.js +439 -0
  98. package/dist/render.js.map +1 -0
  99. package/package.json +92 -0
  100. package/src/Block.ts +75 -0
  101. package/src/MentionProvider.ts +153 -0
  102. package/src/RichTextField.test.ts +447 -0
  103. package/src/RichTextField.ts +508 -0
  104. package/src/extensions/BlockNodeExtension.ts +134 -0
  105. package/src/extensions/DragHandleExtension.ts +184 -0
  106. package/src/extensions/GridExtension.test.ts +31 -0
  107. package/src/extensions/GridExtension.ts +138 -0
  108. package/src/extensions/MentionExtension.ts +248 -0
  109. package/src/extensions/MergeTagExtension.ts +75 -0
  110. package/src/extensions/SlashCommandExtension.test.ts +147 -0
  111. package/src/extensions/SlashCommandExtension.ts +332 -0
  112. package/src/extensions/TextSizeMarks.ts +73 -0
  113. package/src/index.ts +28 -0
  114. package/src/plugin.test.ts +19 -0
  115. package/src/plugin.ts +26 -0
  116. package/src/react/BlockNodeView.tsx +99 -0
  117. package/src/react/BlockSidePanel.test.ts +412 -0
  118. package/src/react/BlockSidePanel.tsx +451 -0
  119. package/src/react/FloatingToolbar.tsx +304 -0
  120. package/src/react/MentionMenu.tsx +120 -0
  121. package/src/react/Palette.tsx +86 -0
  122. package/src/react/SlashMenu.tsx +129 -0
  123. package/src/react/TableFloatingToolbar.tsx +154 -0
  124. package/src/react/TiptapEditor.tsx +535 -0
  125. package/src/react/Toolbar.tsx +438 -0
  126. package/src/react/toolbarButtons.tsx +579 -0
  127. package/src/register.test.ts +14 -0
  128. package/src/register.ts +27 -0
  129. package/src/render.test.ts +745 -0
  130. package/src/render.ts +480 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbarButtons.js","sourceRoot":"","sources":["../../src/react/toolbarButtons.tsx"],"names":[],"mappings":";AAmCA,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW;IAC3C,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc;IACpC,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,OAAgB,EAAE,cAAc,EAAE,OAAgB;IACjF,aAAa,EAAE,MAAe;CAC/B,CAAA;AAED,0EAA0E;AAC1E,gCAAgC;AAChC,MAAM,KAAK,GAAG;IACZ,IAAI,EAAE,CACJ,kBAAS,UAAU,EAAE,WAAW,EAAE,IAAI,aACpC,eAAM,CAAC,EAAC,0BAA0B,GAAG,EACrC,eAAM,CAAC,EAAC,yBAAyB,GAAG,IAChC,CACP;IACD,MAAM,EAAE,CACN,kBAAS,UAAU,aACjB,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACtC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,GAAG,IAClC,CACP;IACD,SAAS,EAAE,CACT,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,yBAAyB,GAAG,EACpC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,CACP;IACD,MAAM,EAAE,CACN,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,0BAA0B,GAAG,EACrC,eAAM,CAAC,EAAC,wBAAwB,GAAG,EACnC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,CACP;IACD,SAAS,EAAE,CACT,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,WAAW,GAAG,EACtB,eAAM,CAAC,EAAC,YAAY,GAAG,EACvB,eAAM,CAAC,EAAC,oHAAoH,GAAG,IAC3H,CACP;IACD,WAAW,EAAE,CACX,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,YAAY,GAAG,EACvB,eAAM,CAAC,EAAC,aAAa,GAAG,EACxB,eAAM,CAAC,EAAC,kHAAkH,GAAG,IACzH,CACP;IACD,IAAI,EAAE,CACJ,kBAAS,UAAU,aACjB,mBAAU,MAAM,EAAC,kBAAkB,GAAG,EACtC,mBAAU,MAAM,EAAC,eAAe,GAAG,IAC/B,CACP;IACD,SAAS,EAAE,CACT,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,UAAU,GAAG,EACrB,eAAM,CAAC,EAAC,UAAU,GAAG,EACrB,eAAM,CAAC,EAAC,gCAAgC,GAAG,IACvC,CACP;IACD,EAAE,EAAE,eAAM,SAAS,EAAC,oCAAoC,mBAAU;IAClE,EAAE,EAAE,eAAM,SAAS,EAAC,oCAAoC,mBAAU;IAClE,EAAE,EAAE,eAAM,SAAS,EAAC,oCAAoC,mBAAU;IAClE,EAAE,EAAE,eAAM,SAAS,EAAC,oCAAoC,mBAAU;IAClE,EAAE,EAAE,eAAM,SAAS,EAAC,oCAAoC,mBAAU;IAClE,EAAE,EAAE,eAAM,SAAS,EAAC,oCAAoC,mBAAU;IAClE,uEAAuE;IACvE,0EAA0E;IAC1E,IAAI,EAAG,eAAM,SAAS,EAAC,mDAAmD,mBAAU;IACpF,KAAK,EAAE,eAAM,SAAS,EAAC,uDAAuD,mBAAU;IACxF,UAAU,EAAE,CACV,kBAAS,UAAU,aACjB,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACrC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,CACP;IACD,WAAW,EAAE,CACX,kBAAS,UAAU,aACjB,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACrC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,CACP;IACD,QAAQ,EAAE,CACR,kBAAS,UAAU,aACjB,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACrC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,CACP;IACD,YAAY,EAAE,CACZ,kBAAS,UAAU,aACjB,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACrC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,CACP;IACD,UAAU,EAAE,CACV,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,gJAAgJ,GAAG,EAC3J,eAAM,CAAC,EAAC,8HAA8H,GAAG,IACrI,CACP;IACD,SAAS,EAAE,CACT,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,mBAAU,MAAM,EAAC,kBAAkB,GAAG,EACtC,mBAAU,MAAM,EAAC,mBAAmB,GAAG,IACnC,CACP;IACD,UAAU,EAAE,CACV,kBAAS,UAAU,aACjB,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACrC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,IAAI,EAAC,cAAc,GAAG,EAClD,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,IAAI,EAAC,cAAc,GAAG,EACnD,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,IAAI,EAAC,cAAc,GAAG,IAC/C,CACP;IACD,WAAW,EAAE,CACX,kBAAS,UAAU,aACjB,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACtC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,CAAC,EAAC,UAAU,GAAG,EACrB,eAAM,CAAC,EAAC,SAAS,GAAG,EACpB,eAAM,CAAC,EAAC,gCAAgC,GAAG,IACvC,CACP;IACD,cAAc,EAAE,CACd,iBAAS,UAAU,YACjB,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,GACnC,CACP;IACD,eAAe,EAAE,CACf,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,aAAa,GAAG,EACxB,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,GAAG,EACtC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IAClC,CACP;IACD,IAAI,EAAE,CACJ,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,6DAA6D,GAAG,EACxE,eAAM,CAAC,EAAC,8DAA8D,GAAG,IACrE,CACP;IACD,SAAS,EAAE,CACT,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,UAAU,GAAG,EACrB,eAAM,CAAC,EAAC,iBAAiB,GAAG,EAC5B,eAAM,CAAC,EAAC,SAAS,GAAG,IAChB,CACP;IACD,SAAS,EAAE,CACT,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,mBAAmB,GAAG,EAC9B,eAAM,CAAC,EAAC,yBAAyB,GAAG,EACpC,eAAM,CAAC,EAAC,WAAW,GAAG,IAClB,CACP;IACD,WAAW,EAAE,CACX,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,GAAG,EAC9B,eAAM,CAAC,EAAC,iBAAiB,GAAG,IACxB,CACP;IACD,KAAK,EAAE,CACL,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACtC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,CACP;IACD,oBAAoB,EAAE,CACpB,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACnD,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,GAAG,EACtC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,GAAG,IAClC,CACP;IACD,mBAAmB,EAAE,CACnB,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACpC,CACP;IACD,iBAAiB,EAAE,CACjB,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACpC,CACP;IACD,iBAAiB,EAAE,CACjB,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACnD,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACtC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,IAClC,CACP;IACD,gBAAgB,EAAE,CAChB,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACpC,CACP;IACD,cAAc,EAAE,CACd,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACtC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,GAAG,IACpC,CACP;IACD,eAAe,EAAE,CACf,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACtC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACpC,CACP;IACD,cAAc,EAAE,CACd,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACpC,CACP;IACD,oBAAoB,EAAE,CACpB,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,GAAG,EAAE,IAAI,EAAC,cAAc,EAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,GAAG,EAC5F,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACtC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,CACP;IACD,qBAAqB,EAAE,CACrB,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,EAAE,IAAI,EAAC,cAAc,EAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,GAAG,EAC5F,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACtC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACvC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,CACP;IACD,WAAW,EAAE,CACX,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC,IAAI,GAAG,IACpC,CACP;IACD,IAAI,EAAE,CACJ,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,UAAU,GAAG,EACrB,eAAM,CAAC,EAAC,2CAA2C,GAAG,IAClD,CACP;IACD,IAAI,EAAE,CACJ,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,YAAY,GAAG,EACvB,eAAM,CAAC,EAAC,2CAA2C,GAAG,IAClD,CACP;IACD,OAAO,EAAE,CACP,kBAAS,UAAU,aACjB,mBAAU,MAAM,EAAC,gBAAgB,GAAG,EACpC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACrC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,CACP;IACD,IAAI,EAAE,CACJ,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAE,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,IAC9C,CACP;IACD,UAAU,EAAE,CACV,kBAAS,UAAU,aACjB,eAAM,CAAC,EAAC,GAAG,EAAE,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAClD,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,IAClC,CACP;CACF,CAAA;AAED,mDAAmD;AACnD,MAAM,CAAC,MAAM,eAAe,GAA8C;IACxE,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;QAC3E,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC3D;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM;QACjF,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC7D;IACD,SAAS,EAAE;QACT,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS;QAC1F,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAChE;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM;QACzF,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC7D;IACD,SAAS,EAAE;QACT,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS;QAC1F,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAChE;IACD,WAAW,EAAE;QACX,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW;QAChG,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC5C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAClE;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;QAClF,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC3D;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;QAC5D,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,yEAAyE;QACzE,uEAAuE;QACvE,2EAA2E;QAC3E,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACjE;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK;QAC/D,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAClE;IACD,SAAS,EAAE;QACT,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS;QAC3E,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC7D;IACD,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5B,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5B,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5B,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5B,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5B,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5B,UAAU,EAAE,SAAS,CAAC,MAAM,EAAK,YAAY,EAAK,KAAK,CAAC,UAAU,CAAC;IACnE,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,cAAc,EAAG,KAAK,CAAC,WAAW,CAAC;IACpE,QAAQ,EAAE,SAAS,CAAC,OAAO,EAAM,aAAa,EAAI,KAAK,CAAC,QAAQ,CAAC;IACjE,YAAY,EAAE,SAAS,CAAC,SAAS,EAAC,SAAS,EAAO,KAAK,CAAC,YAAY,CAAC;IACrE,UAAU,EAAE;QACV,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU;QACzE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACjE;IACD,SAAS,EAAE;QACT,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS;QAC5E,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAChE;IACD,UAAU,EAAE;QACV,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU;QAC/E,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACjE;IACD,WAAW,EAAE;QACX,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW;QACnF,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC5C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAClE;IACD,cAAc,EAAE;QACd,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc;QACnF,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAClE;IACD,eAAe,EAAE;QACf,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe;QAC9F,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC3E;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM;QAC3F,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,6EAA6E;QAC7E,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;KAClB;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;QAC3E,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE;QACpC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACrD;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;QAC5E,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE;QACpC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACrD;IACD,SAAS,EAAE;QACT,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW;QACjG,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;QACjE,OAAO,EAAG,GAAG,EAAE,GAAE,CAAC;KACnB;IACD,SAAS,EAAE;QACT,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW;QAChG,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1C,OAAO,EAAG,GAAG,EAAE,GAAE,CAAC;KACnB;IACD,WAAW,EAAE;QACX,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa;QACzG,sEAAsE;QACtE,6DAA6D;QAC7D,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;KAClB;IACD,8EAA8E;IAC9E,+EAA+E;IAC/E,yEAAyE;IACzE,4EAA4E;IAC5E,iEAAiE;IACjE,KAAK,EAAE;QACL,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK;QACtE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;YACd,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAA;QACjF,CAAC;KACF;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,oBAAoB;QACzG,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE;QAC/C,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACnE;IACD,mBAAmB,EAAE;QACnB,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,mBAAmB;QACtG,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE;QAC9C,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAClE;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB;QAC/F,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE;QAC5C,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAChE;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB;QAChG,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE;QAC5C,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAChE;IACD,gBAAgB,EAAE;QAChB,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,gBAAgB;QAC7F,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAC3C,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC/D;IACD,cAAc,EAAE;QACd,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc;QACtF,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE;QACzC,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC7D;IACD,eAAe,EAAE;QACf,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe;QACzF,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE;QAC1C,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC9D;IACD,cAAc,EAAE;QACd,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc;QACtF,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE;QACzC,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC7D;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,oBAAoB;QACzG,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE;QAC/C,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACnE;IACD,qBAAqB,EAAE;QACrB,EAAE,EAAE,uBAAuB,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,qBAAqB;QAC5G,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE;QAChD,QAAQ,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC9C,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACpE;IACD,WAAW,EAAE;QACX,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW;QAClF,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAC3C,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC/D;IACD,0EAA0E;IAC1E,uEAAuE;IACvE,wEAAwE;IACxE,qEAAqE;IACrE,OAAO,EAAE;QACP,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO;QAC/E,QAAQ,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1C,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE;QAC1C,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC9D;IACD,yEAAyE;IACzE,qEAAqE;IACrE,uEAAuE;IACvE,oCAAoC;IACpC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;QACrE,QAAQ,EAAI,GAAG,EAAE,CAAC,KAAK;QACvB,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACrD,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACzE;IACD,UAAU,EAAE;QACV,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU;QAC/E,QAAQ,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE;QACzC,OAAO,EAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KAC7D;CACF,CAAA;AAED,SAAS,WAAW,CAAC,KAA4B,EAAE,IAAe;IAChE,OAAO;QACL,EAAE,EAAE,IAAI,KAAK,EAAqB;QAClC,KAAK,EAAE,WAAW,KAAK,EAAE;QACzB,SAAS,EAAE,IAAI;QACf,IAAI;QACJ,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC;QACnD,OAAO,EAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACxE,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAA8C,EAAE,KAAa,EAAE,IAAe;IAC/F,OAAO;QACL,EAAE,EAAE,QAAQ,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAqB;QACxI,KAAK;QACL,SAAS,EAAE,IAAI;QACf,IAAI;QACJ,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACnD,OAAO,EAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAA,CAAC,CAAC;KACnE,CAAA;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Register the Tiptap editor as the pilotiq renderer for `fieldType: 'richtext'`.
3
+ *
4
+ * Call once in your app's client-side entry point:
5
+ *
6
+ * ```ts
7
+ * import { registerTiptap } from '@pilotiq/tiptap'
8
+ * registerTiptap()
9
+ * ```
10
+ *
11
+ * Also wires the read-side renderer (`@pilotiq/pilotiq/richtext`) so that
12
+ * `TextEntry` / `TextColumn` auto-detect Tiptap content and render finished
13
+ * HTML on `ViewPage` / list tables — without shipping the editor parser to
14
+ * display-only pages.
15
+ *
16
+ * Without this call, `RichTextField` form fields render as nothing —
17
+ * pilotiq's SchemaRenderer can't find a renderer for the `'richtext'` type.
18
+ */
19
+ export declare function registerTiptap(): void;
20
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
@@ -0,0 +1,27 @@
1
+ import { registerFieldRenderer } from '@pilotiq/pilotiq/react';
2
+ import { registerRichTextRenderer } from '@pilotiq/pilotiq/richtext';
3
+ import { TiptapEditor } from './react/TiptapEditor.js';
4
+ import { renderRichTextToHtml, isRichTextValue } from './render.js';
5
+ /**
6
+ * Register the Tiptap editor as the pilotiq renderer for `fieldType: 'richtext'`.
7
+ *
8
+ * Call once in your app's client-side entry point:
9
+ *
10
+ * ```ts
11
+ * import { registerTiptap } from '@pilotiq/tiptap'
12
+ * registerTiptap()
13
+ * ```
14
+ *
15
+ * Also wires the read-side renderer (`@pilotiq/pilotiq/richtext`) so that
16
+ * `TextEntry` / `TextColumn` auto-detect Tiptap content and render finished
17
+ * HTML on `ViewPage` / list tables — without shipping the editor parser to
18
+ * display-only pages.
19
+ *
20
+ * Without this call, `RichTextField` form fields render as nothing —
21
+ * pilotiq's SchemaRenderer can't find a renderer for the `'richtext'` type.
22
+ */
23
+ export function registerTiptap() {
24
+ registerFieldRenderer('richtext', TiptapEditor);
25
+ registerRichTextRenderer(renderRichTextToHtml, isRichTextValue);
26
+ }
27
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAEnE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,cAAc;IAC5B,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAC/C,wBAAwB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAA;AACjE,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Server-safe Tiptap renderer.
3
+ *
4
+ * Walks a Tiptap JSON document (or HTML string) and returns an HTML string.
5
+ * Pure function — no DOM, no Tiptap runtime, no React. Safe to call from
6
+ * any server context: route handlers, page-data builders, RSC, edge.
7
+ *
8
+ * Output is intentionally NOT sanitized. Same posture as `Markdown` /
9
+ * `Html` display primes in `@pilotiq/pilotiq` — admin-trusted authors only.
10
+ * Text content gets HTML-escaped, link / image hrefs get scheme-checked,
11
+ * but the surrounding markup is constructed by us, not parsed from user
12
+ * input, so there's no place an unexpected tag can sneak in.
13
+ *
14
+ * Coverage matches what `RichTextField` ships in Phases A-G:
15
+ * nodes — doc / paragraph / heading / blockquote / codeBlock / bulletList
16
+ * / orderedList / listItem / horizontalRule / hardBreak / text
17
+ * / image / table / tableRow / tableCell / tableHeader
18
+ * / details / detailsSummary / detailsContent
19
+ * / grid / gridColumn
20
+ * / mergeTag / mention
21
+ * marks — bold / italic / strike / underline / subscript / superscript
22
+ * / code / link / textStyle (color) / highlight (color)
23
+ * / lead (paragraph emphasis) / small (semantic <small>)
24
+ * attrs — heading.level / orderedList.start / codeBlock.language
25
+ * / paragraph.textAlign + heading.textAlign
26
+ * / image.src + alt + title + width + height
27
+ * / tableCell.colspan + rowspan + colwidth (also tableHeader)
28
+ * / mergeTag.id / mention.id + label + trigger
29
+ * custom blocks — render to `<div data-type="..." data-attrs="...">` so
30
+ * consumers can replay or style by data-type.
31
+ */
32
+ export interface RenderRichTextOptions {
33
+ /**
34
+ * Override the rendering of a custom block (anything that isn't a
35
+ * built-in node). Receives the raw node; return the HTML string.
36
+ * Default emits `<div data-type="..." data-attrs="...">`.
37
+ */
38
+ renderBlock?: (node: TiptapNode) => string;
39
+ /**
40
+ * Substitution map for `{{ tag }}` placeholders inserted via
41
+ * `RichTextField.mergeTags(['name', …])`. When the renderer hits a
42
+ * `mergeTag` node whose `id` is a key in this map, it emits the value
43
+ * (HTML-escaped). Unmatched ids fall back to a styled `<span class="merge-tag">`
44
+ * that preserves the placeholder visually.
45
+ */
46
+ mergeTags?: Record<string, string>;
47
+ /**
48
+ * Override the label rendered inside a mention chip at read time. The
49
+ * editor caches the label on insert (so static snapshots stay self-
50
+ * contained), but rendered surfaces can call back into a directory or
51
+ * cache to refresh stale names. Return `undefined` to fall back to the
52
+ * cached label.
53
+ */
54
+ resolveMention?: (trigger: string, id: string) => string | undefined;
55
+ }
56
+ /** Tiptap JSON node — structural, no runtime dep on `@tiptap/core`. */
57
+ export interface TiptapNode {
58
+ type: string;
59
+ text?: string;
60
+ attrs?: Record<string, unknown>;
61
+ content?: TiptapNode[];
62
+ marks?: TiptapMark[];
63
+ }
64
+ export interface TiptapMark {
65
+ type: string;
66
+ attrs?: Record<string, unknown>;
67
+ }
68
+ /**
69
+ * Render Tiptap content to HTML.
70
+ *
71
+ * Accepts:
72
+ * - a Tiptap JSON document (`{ type: 'doc', content: [...] }`) — walked
73
+ * and converted node-by-node;
74
+ * - a JSON-encoded string of the same — parsed then walked;
75
+ * - a raw HTML string — returned verbatim (the editor was configured
76
+ * with `.storage('html')` and the value is already HTML).
77
+ *
78
+ * Returns `''` on null / undefined / unparseable input.
79
+ */
80
+ export declare function renderRichTextToHtml(content: unknown, opts?: RenderRichTextOptions): string;
81
+ /**
82
+ * Detect whether a value looks like Tiptap rich-text content. Conservative:
83
+ * only matches the canonical document root (`{ type: 'doc', content: [...] }`),
84
+ * either object-form or as a JSON-encoded string. Plain text and arbitrary
85
+ * objects are NOT auto-detected — display surfaces should fall through to
86
+ * their default formatter.
87
+ */
88
+ export declare function isRichTextValue(v: unknown): boolean;
89
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,MAAM,CAAA;IAC1C;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;CACrE;AAED,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAM,MAAM,CAAA;IAChB,IAAI,CAAC,EAAK,MAAM,CAAA;IAChB,KAAK,CAAC,EAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB,KAAK,CAAC,EAAI,UAAU,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAI,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,qBAA0B,GAAG,MAAM,CAmB/F;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAanD"}
package/dist/render.js ADDED
@@ -0,0 +1,439 @@
1
+ /**
2
+ * Server-safe Tiptap renderer.
3
+ *
4
+ * Walks a Tiptap JSON document (or HTML string) and returns an HTML string.
5
+ * Pure function — no DOM, no Tiptap runtime, no React. Safe to call from
6
+ * any server context: route handlers, page-data builders, RSC, edge.
7
+ *
8
+ * Output is intentionally NOT sanitized. Same posture as `Markdown` /
9
+ * `Html` display primes in `@pilotiq/pilotiq` — admin-trusted authors only.
10
+ * Text content gets HTML-escaped, link / image hrefs get scheme-checked,
11
+ * but the surrounding markup is constructed by us, not parsed from user
12
+ * input, so there's no place an unexpected tag can sneak in.
13
+ *
14
+ * Coverage matches what `RichTextField` ships in Phases A-G:
15
+ * nodes — doc / paragraph / heading / blockquote / codeBlock / bulletList
16
+ * / orderedList / listItem / horizontalRule / hardBreak / text
17
+ * / image / table / tableRow / tableCell / tableHeader
18
+ * / details / detailsSummary / detailsContent
19
+ * / grid / gridColumn
20
+ * / mergeTag / mention
21
+ * marks — bold / italic / strike / underline / subscript / superscript
22
+ * / code / link / textStyle (color) / highlight (color)
23
+ * / lead (paragraph emphasis) / small (semantic <small>)
24
+ * attrs — heading.level / orderedList.start / codeBlock.language
25
+ * / paragraph.textAlign + heading.textAlign
26
+ * / image.src + alt + title + width + height
27
+ * / tableCell.colspan + rowspan + colwidth (also tableHeader)
28
+ * / mergeTag.id / mention.id + label + trigger
29
+ * custom blocks — render to `<div data-type="..." data-attrs="...">` so
30
+ * consumers can replay or style by data-type.
31
+ */
32
+ /**
33
+ * Render Tiptap content to HTML.
34
+ *
35
+ * Accepts:
36
+ * - a Tiptap JSON document (`{ type: 'doc', content: [...] }`) — walked
37
+ * and converted node-by-node;
38
+ * - a JSON-encoded string of the same — parsed then walked;
39
+ * - a raw HTML string — returned verbatim (the editor was configured
40
+ * with `.storage('html')` and the value is already HTML).
41
+ *
42
+ * Returns `''` on null / undefined / unparseable input.
43
+ */
44
+ export function renderRichTextToHtml(content, opts = {}) {
45
+ if (content === null || content === undefined)
46
+ return '';
47
+ if (typeof content === 'string') {
48
+ const trimmed = content.trimStart();
49
+ if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
50
+ try {
51
+ const parsed = JSON.parse(content);
52
+ return renderNode(parsed, opts);
53
+ }
54
+ catch {
55
+ return '';
56
+ }
57
+ }
58
+ return content;
59
+ }
60
+ if (typeof content === 'object')
61
+ return renderNode(content, opts);
62
+ return '';
63
+ }
64
+ /**
65
+ * Detect whether a value looks like Tiptap rich-text content. Conservative:
66
+ * only matches the canonical document root (`{ type: 'doc', content: [...] }`),
67
+ * either object-form or as a JSON-encoded string. Plain text and arbitrary
68
+ * objects are NOT auto-detected — display surfaces should fall through to
69
+ * their default formatter.
70
+ */
71
+ export function isRichTextValue(v) {
72
+ if (v === null || v === undefined)
73
+ return false;
74
+ if (typeof v === 'object')
75
+ return isTiptapDoc(v);
76
+ if (typeof v === 'string') {
77
+ const trimmed = v.trimStart();
78
+ if (!trimmed.startsWith('{'))
79
+ return false;
80
+ try {
81
+ return isTiptapDoc(JSON.parse(v));
82
+ }
83
+ catch {
84
+ return false;
85
+ }
86
+ }
87
+ return false;
88
+ }
89
+ function isTiptapDoc(v) {
90
+ return (typeof v === 'object' && v !== null
91
+ && v.type === 'doc'
92
+ && Array.isArray(v.content));
93
+ }
94
+ // ─── Node walker ─────────────────────────────────────────────────────
95
+ function renderNode(node, opts) {
96
+ if (node === null || node === undefined)
97
+ return '';
98
+ if (Array.isArray(node))
99
+ return node.map(n => renderNode(n, opts)).join('');
100
+ if (typeof node !== 'object')
101
+ return '';
102
+ const n = node;
103
+ switch (n.type) {
104
+ case 'doc': return renderChildren(n, opts);
105
+ case 'paragraph': return wrap('p', n, opts, alignStyle(n));
106
+ case 'heading': {
107
+ const level = clampLevel(n.attrs?.['level']);
108
+ return wrap(`h${level}`, n, opts, alignStyle(n));
109
+ }
110
+ case 'blockquote': return wrap('blockquote', n, opts);
111
+ case 'codeBlock': {
112
+ const lang = typeof n.attrs?.['language'] === 'string'
113
+ ? n.attrs['language']
114
+ : undefined;
115
+ const cls = lang ? ` class="language-${escapeAttr(lang)}"` : '';
116
+ return `<pre><code${cls}>${renderChildren(n, opts)}</code></pre>`;
117
+ }
118
+ case 'bulletList': return wrap('ul', n, opts);
119
+ case 'orderedList': {
120
+ const startRaw = n.attrs?.['start'];
121
+ const start = typeof startRaw === 'number' ? startRaw : Number(startRaw);
122
+ const startAttr = Number.isFinite(start) && start !== 1 ? ` start="${Math.trunc(start)}"` : '';
123
+ return `<ol${startAttr}>${renderChildren(n, opts)}</ol>`;
124
+ }
125
+ case 'listItem': return wrap('li', n, opts);
126
+ case 'horizontalRule': return '<hr>';
127
+ case 'hardBreak': return '<br>';
128
+ case 'image': return renderImage(n);
129
+ case 'table': return renderTable(n, opts);
130
+ case 'tableRow': return wrap('tr', n, opts);
131
+ case 'tableCell': return renderCell('td', n, opts);
132
+ case 'tableHeader': return renderCell('th', n, opts);
133
+ case 'details': return renderDetails(n, opts);
134
+ case 'detailsSummary': return wrap('summary', n, opts);
135
+ // The editor's NodeView wraps content in a `<div data-type="detailsContent">`
136
+ // for click handling, but the read-side HTML doesn't need a wrapper —
137
+ // a `<details>` block's content sits directly after the `<summary>` per
138
+ // the platform spec, which matches reader expectations.
139
+ case 'detailsContent': return renderChildren(n, opts);
140
+ case 'grid': return renderGrid(n, opts);
141
+ case 'gridColumn': return wrap('div', n, opts);
142
+ case 'mergeTag': return renderMergeTag(n, opts);
143
+ case 'mention': return renderMention(n, opts);
144
+ case 'text': return renderText(n);
145
+ default:
146
+ if (opts.renderBlock)
147
+ return opts.renderBlock(n);
148
+ return renderCustomBlock(n);
149
+ }
150
+ }
151
+ function renderChildren(n, opts) {
152
+ if (!n.content)
153
+ return '';
154
+ return n.content.map(c => renderNode(c, opts)).join('');
155
+ }
156
+ function wrap(tag, n, opts, extraAttrs = '') {
157
+ return `<${tag}${extraAttrs}>${renderChildren(n, opts)}</${tag}>`;
158
+ }
159
+ function alignStyle(n) {
160
+ const align = n.attrs?.['textAlign'];
161
+ if (typeof align !== 'string' || align === '' || align === 'left')
162
+ return '';
163
+ // `start` / `end` / `center` / `justify` — TextAlign extension allows-list.
164
+ if (!/^[a-z]+$/.test(align))
165
+ return '';
166
+ return ` style="text-align: ${align}"`;
167
+ }
168
+ function clampLevel(raw) {
169
+ const n = typeof raw === 'number' ? raw : Number(raw);
170
+ if (!Number.isFinite(n))
171
+ return 1;
172
+ return Math.min(6, Math.max(1, Math.trunc(n)));
173
+ }
174
+ // ─── Text + marks ────────────────────────────────────────────────────
175
+ function renderText(n) {
176
+ let html = escapeHtml(String(n.text ?? ''));
177
+ const marks = Array.isArray(n.marks) ? n.marks : [];
178
+ // Tiptap stores marks innermost-first in array order; wrap from index
179
+ // 0 outward so the first mark ends up nested deepest — matches Tiptap's
180
+ // own DOM serialization.
181
+ for (const mark of marks)
182
+ html = wrapMark(html, mark);
183
+ return html;
184
+ }
185
+ function wrapMark(inner, mark) {
186
+ if (!mark || typeof mark !== 'object')
187
+ return inner;
188
+ const attrs = (mark.attrs ?? {});
189
+ switch (mark.type) {
190
+ case 'bold': return `<strong>${inner}</strong>`;
191
+ case 'italic': return `<em>${inner}</em>`;
192
+ case 'strike': return `<s>${inner}</s>`;
193
+ case 'underline': return `<u>${inner}</u>`;
194
+ case 'subscript': return `<sub>${inner}</sub>`;
195
+ case 'superscript': return `<sup>${inner}</sup>`;
196
+ case 'code': return `<code>${inner}</code>`;
197
+ case 'lead': return `<span class="lead">${inner}</span>`;
198
+ case 'small': return `<small>${inner}</small>`;
199
+ case 'link': {
200
+ const href = sanitizeUrl(attrs['href']);
201
+ const target = typeof attrs['target'] === 'string'
202
+ ? ` target="${escapeAttr(String(attrs['target']))}"` : '';
203
+ const rel = attrs['target'] === '_blank' ? ' rel="noopener noreferrer"' : '';
204
+ return `<a href="${href}"${target}${rel}>${inner}</a>`;
205
+ }
206
+ case 'textStyle': {
207
+ const color = attrs['color'];
208
+ if (typeof color !== 'string' || color === '')
209
+ return inner;
210
+ const safe = sanitizeColor(color);
211
+ if (!safe)
212
+ return inner;
213
+ return `<span style="color: ${safe}">${inner}</span>`;
214
+ }
215
+ case 'highlight': {
216
+ const color = attrs['color'];
217
+ if (typeof color !== 'string' || color === '')
218
+ return `<mark>${inner}</mark>`;
219
+ const safe = sanitizeColor(color);
220
+ if (!safe)
221
+ return `<mark>${inner}</mark>`;
222
+ return `<mark style="background-color: ${safe}">${inner}</mark>`;
223
+ }
224
+ default:
225
+ return inner;
226
+ }
227
+ }
228
+ // ─── Image ───────────────────────────────────────────────────────────
229
+ function renderImage(n) {
230
+ const attrs = (n.attrs ?? {});
231
+ const src = sanitizeUrl(attrs['src']);
232
+ // Don't emit a broken `<img>` if src couldn't be sanitized to anything
233
+ // meaningful. `sanitizeUrl` returns `'#'` for unsafe inputs — and `<img
234
+ // src="#">` re-fetches the page, which is the worst possible default.
235
+ if (src === '#')
236
+ return '';
237
+ const alt = typeof attrs['alt'] === 'string' ? ` alt="${escapeAttr(String(attrs['alt']))}"` : ' alt=""';
238
+ const title = typeof attrs['title'] === 'string' ? ` title="${escapeAttr(String(attrs['title']))}"` : '';
239
+ const width = pixelAttr('width', attrs['width']);
240
+ const height = pixelAttr('height', attrs['height']);
241
+ return `<img src="${src}"${alt}${title}${width}${height}>`;
242
+ }
243
+ function pixelAttr(name, raw) {
244
+ if (raw === null || raw === undefined || raw === '')
245
+ return '';
246
+ const n = typeof raw === 'number' ? raw : Number(raw);
247
+ if (!Number.isFinite(n) || n <= 0)
248
+ return '';
249
+ return ` ${name}="${Math.trunc(n)}"`;
250
+ }
251
+ // ─── Tables ──────────────────────────────────────────────────────────
252
+ /**
253
+ * Render a Tiptap `table` node. The Tiptap table extension stores per-column
254
+ * widths on individual cells via `colwidth: number[]` — we collect the widths
255
+ * from the first row and emit a `<colgroup>` so read-side renders match the
256
+ * editor's column proportions.
257
+ */
258
+ function renderTable(n, opts) {
259
+ const colgroup = buildColgroup(n);
260
+ return `<table>${colgroup}<tbody>${renderChildren(n, opts)}</tbody></table>`;
261
+ }
262
+ function buildColgroup(table) {
263
+ const firstRow = table.content?.find((c) => c.type === 'tableRow');
264
+ if (!firstRow || !firstRow.content)
265
+ return '';
266
+ const widths = [];
267
+ let hasAnyWidth = false;
268
+ for (const cell of firstRow.content) {
269
+ if (cell.type !== 'tableCell' && cell.type !== 'tableHeader')
270
+ continue;
271
+ const colspan = clampPositiveInt(cell.attrs?.['colspan']) ?? 1;
272
+ const colwidth = cell.attrs?.['colwidth'];
273
+ const widthArr = Array.isArray(colwidth)
274
+ ? colwidth.map((w) => clampPositiveInt(w))
275
+ : [];
276
+ for (let i = 0; i < colspan; i++) {
277
+ const w = widthArr[i] ?? null;
278
+ if (w !== null)
279
+ hasAnyWidth = true;
280
+ widths.push(w);
281
+ }
282
+ }
283
+ // Only emit a colgroup when at least one width is known. Tiptap's table
284
+ // extension only sets colwidth after the user drags a column-resize handle —
285
+ // out-of-the-box tables have no widths, so an always-emitted colgroup would
286
+ // be noise.
287
+ if (!hasAnyWidth)
288
+ return '';
289
+ const cols = widths.map((w) => w !== null ? `<col style="width: ${w}px">` : '<col>');
290
+ return `<colgroup>${cols.join('')}</colgroup>`;
291
+ }
292
+ function renderCell(tag, n, opts) {
293
+ const attrs = (n.attrs ?? {});
294
+ const colspan = clampPositiveInt(attrs['colspan']);
295
+ const rowspan = clampPositiveInt(attrs['rowspan']);
296
+ const span = [
297
+ colspan && colspan !== 1 ? ` colspan="${colspan}"` : '',
298
+ rowspan && rowspan !== 1 ? ` rowspan="${rowspan}"` : '',
299
+ ].join('');
300
+ return `<${tag}${span}>${renderChildren(n, opts)}</${tag}>`;
301
+ }
302
+ function clampPositiveInt(raw) {
303
+ if (raw === null || raw === undefined || raw === '')
304
+ return null;
305
+ const n = typeof raw === 'number' ? raw : Number(raw);
306
+ if (!Number.isFinite(n) || n <= 0)
307
+ return null;
308
+ return Math.trunc(n);
309
+ }
310
+ // ─── Details (collapsible blocks) ────────────────────────────────────
311
+ /**
312
+ * Render a `details` node. The `open` attribute round-trips the editor's
313
+ * open/closed state when `Details.configure({ persist: true })` is set —
314
+ * matches the platform `<details open>` attribute exactly so a reader's
315
+ * snapshot reflects how the author last left it.
316
+ */
317
+ function renderDetails(n, opts) {
318
+ const isOpen = n.attrs?.['open'] === true;
319
+ return `<details${isOpen ? ' open' : ''}>${renderChildren(n, opts)}</details>`;
320
+ }
321
+ // ─── Grid (multi-column layout) ──────────────────────────────────────
322
+ /**
323
+ * Render a `grid` node. The `data-columns` attribute round-trips the
324
+ * editor's column count; class names mirror the editor's `renderHTML` so
325
+ * one stylesheet paints both surfaces (consumer owns the CSS — same
326
+ * posture as `lead` / `small`).
327
+ *
328
+ * Out-of-range column counts (anything other than 2 or 3) clamp to 2 —
329
+ * the schema enforces it on the editor side, but a tampered Tiptap JSON
330
+ * fed straight to the renderer shouldn't paint a `grid-cols-99` class.
331
+ */
332
+ function renderGrid(n, opts) {
333
+ const cols = clampGridColumnsForRender(n.attrs?.['columns']);
334
+ return `<div class="pilotiq-grid pilotiq-grid-cols-${cols}">${renderChildren(n, opts)}</div>`;
335
+ }
336
+ function clampGridColumnsForRender(raw) {
337
+ const n = typeof raw === 'number' ? raw : Number(raw);
338
+ if (!Number.isFinite(n))
339
+ return 2;
340
+ const trunc = Math.trunc(n);
341
+ return trunc === 3 ? 3 : 2;
342
+ }
343
+ // ─── Merge tags + mentions ───────────────────────────────────────────
344
+ /**
345
+ * Render a `mergeTag` atom — either substitute the value from
346
+ * `opts.mergeTags` (HTML-escaped) or fall back to a styled `<span>` that
347
+ * preserves the placeholder visually so server-rendered previews stay
348
+ * informative when no substitution map is supplied.
349
+ */
350
+ function renderMergeTag(n, opts) {
351
+ const id = String((n.attrs ?? {})['id'] ?? '').trim();
352
+ if (id === '')
353
+ return '';
354
+ const map = opts.mergeTags;
355
+ // Only substitute when the map explicitly carries the id — using
356
+ // `Object.prototype.hasOwnProperty` so `null` / empty-string substitutions
357
+ // still win over the fallback span.
358
+ if (map && Object.prototype.hasOwnProperty.call(map, id)) {
359
+ return escapeHtml(String(map[id] ?? ''));
360
+ }
361
+ return `<span class="merge-tag" data-id="${escapeAttr(id)}">{{ ${escapeHtml(id)} }}</span>`;
362
+ }
363
+ /**
364
+ * Render a `mention` atom as a styled `<span>` carrying the cached label.
365
+ * `opts.resolveMention` can override the label per `(trigger, id)` pair —
366
+ * useful for refreshing display names from a directory at render time.
367
+ * Both `id` and `trigger` are required; missing either drops the chip.
368
+ */
369
+ function renderMention(n, opts) {
370
+ const attrs = (n.attrs ?? {});
371
+ const id = String(attrs['id'] ?? '').trim();
372
+ const trigger = String(attrs['trigger'] ?? '').trim();
373
+ if (id === '' || trigger === '')
374
+ return '';
375
+ const cached = String(attrs['label'] ?? '').trim();
376
+ const resolved = opts.resolveMention?.(trigger, id);
377
+ const label = resolved !== undefined ? resolved : (cached !== '' ? cached : id);
378
+ return (`<span class="mention" data-trigger="${escapeAttr(trigger)}" data-id="${escapeAttr(id)}">` +
379
+ escapeHtml(`${trigger}${label}`) +
380
+ `</span>`);
381
+ }
382
+ // ─── Custom blocks ───────────────────────────────────────────────────
383
+ function renderCustomBlock(n) {
384
+ const type = String(n.type ?? '');
385
+ const dataAttrs = n.attrs ? ` data-attrs="${escapeAttr(JSON.stringify(n.attrs))}"` : '';
386
+ const inner = n.content ? renderChildren(n, {}) : '';
387
+ return `<div data-type="${escapeAttr(type)}"${dataAttrs}>${inner}</div>`;
388
+ }
389
+ // ─── Escapers + sanitizers ───────────────────────────────────────────
390
+ function escapeHtml(s) {
391
+ return s.replace(/[&<>"']/g, ch => HTML_ESCAPES[ch] ?? ch);
392
+ }
393
+ const HTML_ESCAPES = {
394
+ '&': '&amp;',
395
+ '<': '&lt;',
396
+ '>': '&gt;',
397
+ '"': '&quot;',
398
+ "'": '&#39;',
399
+ };
400
+ function escapeAttr(s) {
401
+ return escapeHtml(s);
402
+ }
403
+ /**
404
+ * Allowlist for color values. Accepts hex (`#abc` / `#abcdef`), rgb()/rgba(),
405
+ * hsl()/hsla(), oklch(), and named colors (alpha-only). Returns `''` for
406
+ * anything that doesn't match — caller falls back to no inline style.
407
+ */
408
+ function sanitizeColor(raw) {
409
+ const v = raw.trim();
410
+ if (v === '')
411
+ return '';
412
+ if (/^#[0-9a-f]{3,8}$/i.test(v))
413
+ return v;
414
+ if (/^rgba?\([^()<>"']+\)$/i.test(v))
415
+ return v;
416
+ if (/^hsla?\([^()<>"']+\)$/i.test(v))
417
+ return v;
418
+ if (/^oklch\([^()<>"']+\)$/i.test(v))
419
+ return v;
420
+ if (/^[a-z]+$/i.test(v))
421
+ return v;
422
+ return '';
423
+ }
424
+ /**
425
+ * Block dangerous URL schemes. Anything that isn't an absolute http(s),
426
+ * mailto, tel, anchor (#…), root-relative (/…), or relative path falls
427
+ * back to `#`. Output is HTML-escaped.
428
+ */
429
+ function sanitizeUrl(raw) {
430
+ if (typeof raw !== 'string')
431
+ return '#';
432
+ const v = raw.trim();
433
+ if (v === '')
434
+ return '#';
435
+ if (/^(?:javascript|data|vbscript):/i.test(v))
436
+ return '#';
437
+ return escapeAttr(v);
438
+ }
439
+ //# sourceMappingURL=render.js.map