@baasix/lexical 0.0.2

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 (57) hide show
  1. package/README.md +281 -0
  2. package/dist/DateTimeComponent-4MX2IKXK.css +45 -0
  3. package/dist/DateTimeComponent-4MX2IKXK.css.map +1 -0
  4. package/dist/DateTimeComponent-7V5RW3AE.js +2928 -0
  5. package/dist/DateTimeComponent-7V5RW3AE.js.map +1 -0
  6. package/dist/EquationComponent-3IW3ONJD.js +159 -0
  7. package/dist/EquationComponent-3IW3ONJD.js.map +1 -0
  8. package/dist/EquationComponent-C2C6477P.css +28 -0
  9. package/dist/EquationComponent-C2C6477P.css.map +1 -0
  10. package/dist/ExcalidrawComponent-GZYLHNOY.js +267 -0
  11. package/dist/ExcalidrawComponent-GZYLHNOY.js.map +1 -0
  12. package/dist/ExcalidrawComponent-U6BD7DUB.css +152 -0
  13. package/dist/ExcalidrawComponent-U6BD7DUB.css.map +1 -0
  14. package/dist/ImageComponent-IYUGOT6O.css +73 -0
  15. package/dist/ImageComponent-IYUGOT6O.css.map +1 -0
  16. package/dist/ImageComponent-TTUYUG3M.js +429 -0
  17. package/dist/ImageComponent-TTUYUG3M.js.map +1 -0
  18. package/dist/PollComponent-CWI5UJF5.css +187 -0
  19. package/dist/PollComponent-CWI5UJF5.css.map +1 -0
  20. package/dist/PollComponent-KLJZSW5O.js +199 -0
  21. package/dist/PollComponent-KLJZSW5O.js.map +1 -0
  22. package/dist/StickyComponent-MZSTQF47.css +774 -0
  23. package/dist/StickyComponent-MZSTQF47.css.map +1 -0
  24. package/dist/StickyComponent-ZED6LNTX.js +233 -0
  25. package/dist/StickyComponent-ZED6LNTX.js.map +1 -0
  26. package/dist/chunk-35UCX4ZT.js +168 -0
  27. package/dist/chunk-35UCX4ZT.js.map +1 -0
  28. package/dist/chunk-44LUNGL3.js +16608 -0
  29. package/dist/chunk-44LUNGL3.js.map +1 -0
  30. package/dist/chunk-BHROZTZU.js +42 -0
  31. package/dist/chunk-BHROZTZU.js.map +1 -0
  32. package/dist/chunk-FJ6COZ4H.js +275 -0
  33. package/dist/chunk-FJ6COZ4H.js.map +1 -0
  34. package/dist/chunk-GSFNU3JE.js +211 -0
  35. package/dist/chunk-GSFNU3JE.js.map +1 -0
  36. package/dist/chunk-I43VQAHW.js +918 -0
  37. package/dist/chunk-I43VQAHW.js.map +1 -0
  38. package/dist/chunk-N22RKA5D.js +402 -0
  39. package/dist/chunk-N22RKA5D.js.map +1 -0
  40. package/dist/chunk-OIMMC5C3.js +134 -0
  41. package/dist/chunk-OIMMC5C3.js.map +1 -0
  42. package/dist/chunk-PZ5AY32C.js +10 -0
  43. package/dist/chunk-PZ5AY32C.js.map +1 -0
  44. package/dist/chunk-TVF6V3BJ.js +41 -0
  45. package/dist/chunk-TVF6V3BJ.js.map +1 -0
  46. package/dist/chunk-XTKVR2JI.js +225 -0
  47. package/dist/chunk-XTKVR2JI.js.map +1 -0
  48. package/dist/emoji-list-MUV74SND.js +8 -0
  49. package/dist/emoji-list-MUV74SND.js.map +1 -0
  50. package/dist/index.css +4234 -0
  51. package/dist/index.css.map +1 -0
  52. package/dist/index.d.ts +17 -0
  53. package/dist/index.js +16050 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/landscape-RJWVK6ET.jpg +0 -0
  56. package/dist/yellow-flower-R72KOP74.jpg +0 -0
  57. package/package.json +76 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/nodes/StickyNode.css","../src/themes/StickyEditorTheme.css","../src/themes/PlaygroundEditorTheme.css","../src/ui/ContentEditable.css"],"sourcesContent":["/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n *\r\n */\r\n.StickyNode__contentEditable {\r\n min-height: 20px;\r\n border: 0;\r\n resize: none;\r\n cursor: text;\r\n font-size: 24px;\r\n caret-color: rgb(5, 5, 5);\r\n display: block;\r\n position: relative;\r\n outline: 0;\r\n padding: 10px;\r\n user-select: text;\r\n white-space: pre-wrap;\r\n word-wrap: break-word;\r\n}\r\n.StickyNode__placeholder {\r\n font-size: 24px;\r\n color: #999;\r\n overflow: hidden;\r\n position: absolute;\r\n text-overflow: ellipsis;\r\n top: 30px;\r\n left: 20px;\r\n width: 120px;\r\n user-select: none;\r\n white-space: nowrap;\r\n display: inline-block;\r\n pointer-events: none;\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n *\r\n */\r\n\r\n.StickyEditorTheme__paragraph {\r\n margin: 0;\r\n position: 'relative';\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n *\r\n */\r\n:root {\r\n --lexical-indent-base-value: 40px;\r\n}\r\n.PlaygroundEditorTheme__paragraph {\r\n margin: 0;\r\n position: relative;\r\n}\r\n.PlaygroundEditorTheme__quote {\r\n margin: 0;\r\n margin-left: 20px;\r\n margin-bottom: 10px;\r\n font-size: 15px;\r\n color: rgb(101, 103, 107);\r\n border-left-color: rgb(206, 208, 212);\r\n border-left-width: 4px;\r\n border-left-style: solid;\r\n padding-left: 16px;\r\n}\r\n.PlaygroundEditorTheme__h1 {\r\n font-size: 24px;\r\n color: rgb(5, 5, 5);\r\n font-weight: 400;\r\n margin: 0;\r\n}\r\n.PlaygroundEditorTheme__h2 {\r\n font-size: 15px;\r\n color: rgb(101, 103, 107);\r\n font-weight: 700;\r\n margin: 0;\r\n text-transform: uppercase;\r\n}\r\n.PlaygroundEditorTheme__h3 {\r\n font-size: 12px;\r\n margin: 0;\r\n text-transform: uppercase;\r\n}\r\n.PlaygroundEditorTheme__textBold {\r\n font-weight: bold;\r\n}\r\n.PlaygroundEditorTheme__paragraph mark {\r\n background-color: unset;\r\n}\r\n.PlaygroundEditorTheme__textHighlight {\r\n background: rgba(255, 212, 0, 0.14);\r\n border-bottom: 2px solid rgba(255, 212, 0, 0.3);\r\n}\r\n.PlaygroundEditorTheme__textItalic {\r\n font-style: italic;\r\n}\r\n.PlaygroundEditorTheme__textUnderline {\r\n text-decoration: underline;\r\n}\r\n\r\n.PlaygroundEditorTheme__textStrikethrough {\r\n text-decoration: line-through;\r\n}\r\n\r\n.PlaygroundEditorTheme__textUnderlineStrikethrough {\r\n text-decoration: underline line-through;\r\n}\r\n\r\n.PlaygroundEditorTheme__tabNode {\r\n position: relative;\r\n text-decoration: none;\r\n}\r\n\r\n.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textUnderline::after {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n bottom: 0.15em;\r\n border-bottom: 0.1em solid currentColor;\r\n}\r\n\r\n.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textStrikethrough::before {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n top: 0.69em;\r\n border-top: 0.1em solid currentColor;\r\n}\r\n\r\n.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textUnderlineStrikethrough::before,\r\n.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textUnderlineStrikethrough::after {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n}\r\n\r\n.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textUnderlineStrikethrough::before {\r\n top: 0.69em;\r\n border-top: 0.1em solid currentColor;\r\n}\r\n\r\n.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textUnderlineStrikethrough::after {\r\n bottom: 0.05em;\r\n border-bottom: 0.1em solid currentColor;\r\n}\r\n\r\n.PlaygroundEditorTheme__textSubscript {\r\n font-size: 0.8em;\r\n vertical-align: sub !important;\r\n}\r\n.PlaygroundEditorTheme__textSuperscript {\r\n font-size: 0.8em;\r\n vertical-align: super;\r\n}\r\n.PlaygroundEditorTheme__textCode {\r\n background-color: rgb(240, 242, 245);\r\n padding: 1px 0.25rem;\r\n font-family: Menlo, Consolas, Monaco, monospace;\r\n font-size: 94%;\r\n}\r\n.PlaygroundEditorTheme__textLowercase {\r\n text-transform: lowercase;\r\n}\r\n.PlaygroundEditorTheme__textUppercase {\r\n text-transform: uppercase;\r\n}\r\n.PlaygroundEditorTheme__textCapitalize {\r\n text-transform: capitalize;\r\n}\r\n.PlaygroundEditorTheme__hashtag {\r\n background-color: rgba(88, 144, 255, 0.15);\r\n border-bottom: 1px solid rgba(88, 144, 255, 0.3);\r\n}\r\n.PlaygroundEditorTheme__link {\r\n color: rgb(33, 111, 219);\r\n text-decoration: none;\r\n}\r\n.PlaygroundEditorTheme__link:hover {\r\n text-decoration: underline;\r\n cursor: pointer;\r\n}\r\n.PlaygroundEditorTheme__blockCursor {\r\n display: block;\r\n pointer-events: none;\r\n position: absolute;\r\n}\r\n.PlaygroundEditorTheme__blockCursor:after {\r\n content: '';\r\n display: block;\r\n position: absolute;\r\n top: -2px;\r\n width: 20px;\r\n border-top: 1px solid black;\r\n animation: CursorBlink 1.1s steps(2, start) infinite;\r\n}\r\n@keyframes CursorBlink {\r\n to {\r\n visibility: hidden;\r\n }\r\n}\r\n.PlaygroundEditorTheme__code {\r\n background-color: rgb(240, 242, 245);\r\n font-family: Menlo, Consolas, Monaco, monospace;\r\n display: block;\r\n line-height: 1.53;\r\n font-size: 13px;\r\n padding-top: 8px;\r\n margin: 0;\r\n margin-top: 8px;\r\n margin-bottom: 8px;\r\n overflow-x: auto;\r\n position: relative;\r\n tab-size: 2;\r\n white-space: pre;\r\n max-width: 100%;\r\n box-sizing: border-box;\r\n}\r\n.PlaygroundEditorTheme__code:before {\r\n content: attr(data-gutter);\r\n position: sticky;\r\n background-color: #eee;\r\n left: 0;\r\n float: left;\r\n top: 0;\r\n z-index: 3;\r\n min-height: 100%;\r\n border-right: 1px solid #ccc;\r\n padding: 8px;\r\n color: #777;\r\n white-space: pre-wrap;\r\n text-align: right;\r\n min-width: 25px;\r\n margin-right: 10px;\r\n margin-top: -8px;\r\n padding: 8px;\r\n}\r\n.PlaygroundEditorTheme__tableScrollableWrapper {\r\n overflow-x: auto;\r\n margin: 0px 0px 5px 0px;\r\n}\r\n.PlaygroundEditorTheme__tableScrollRight {\r\n box-shadow: inset -10px 0 10px rgba(0, 0, 0, 0.15);\r\n}\r\n.PlaygroundEditorTheme__tableScrollLeft {\r\n box-shadow: inset 10px 0 10px rgba(0, 0, 0, 0.15);\r\n}\r\n.PlaygroundEditorTheme__tableScrollMiddle {\r\n box-shadow:\r\n inset 10px 0 10px rgba(0, 0, 0, 0.15),\r\n inset -10px 0 10px rgba(0, 0, 0, 0.15);\r\n}\r\n.PlaygroundEditorTheme__tableScrollableWrapper > .PlaygroundEditorTheme__table {\r\n /* Remove the table's vertical margin and put it on the wrapper */\r\n margin-top: 0;\r\n margin-bottom: 0;\r\n}\r\n.PlaygroundEditorTheme__tableAlignmentCenter {\r\n margin-left: auto;\r\n margin-right: auto;\r\n}\r\n.PlaygroundEditorTheme__tableAlignmentRight {\r\n margin-left: auto;\r\n}\r\n.PlaygroundEditorTheme__table {\r\n border-collapse: collapse;\r\n border-spacing: 0;\r\n overflow-y: scroll;\r\n overflow-x: scroll;\r\n table-layout: fixed;\r\n width: fit-content;\r\n margin-top: 25px;\r\n margin-bottom: 30px;\r\n}\r\n.PlaygroundEditorTheme__tableScrollableWrapper.PlaygroundEditorTheme__tableFrozenRow {\r\n /* position:sticky needs overflow:clip or visible\r\n https://github.com/w3c/csswg-drafts/issues/865#issuecomment-350585274 */\r\n overflow-x: clip;\r\n}\r\n.PlaygroundEditorTheme__tableFrozenRow tr:nth-of-type(1) > td {\r\n overflow: clip;\r\n background-color: #ffffff;\r\n position: sticky;\r\n z-index: 2;\r\n top: 44px;\r\n}\r\n.PlaygroundEditorTheme__tableFrozenRow tr:nth-of-type(1) > th {\r\n overflow: clip;\r\n background-color: #f2f3f5;\r\n position: sticky;\r\n z-index: 2;\r\n top: 44px;\r\n}\r\n.PlaygroundEditorTheme__tableFrozenRow tr:nth-of-type(1) > th:after,\r\n.PlaygroundEditorTheme__tableFrozenRow tr:nth-of-type(1) > td:after {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n bottom: 0;\r\n width: 100%;\r\n border-bottom: 1px solid #bbb;\r\n}\r\n.PlaygroundEditorTheme__tableFrozenColumn tr > td:first-child {\r\n background-color: #ffffff;\r\n position: sticky;\r\n z-index: 2;\r\n left: 0;\r\n}\r\n.PlaygroundEditorTheme__tableFrozenColumn tr > th:first-child {\r\n background-color: #f2f3f5;\r\n position: sticky;\r\n z-index: 2;\r\n left: 0;\r\n}\r\n.PlaygroundEditorTheme__tableFrozenColumn tr > :first-child::after {\r\n content: '';\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n height: 100%;\r\n border-right: 1px solid #bbb;\r\n}\r\n.PlaygroundEditorTheme__tableRowStriping tr:nth-child(even),\r\n.PlaygroundEditorTheme__tableFrozenColumn\r\n .PlaygroundEditorTheme__table.PlaygroundEditorTheme__tableRowStriping\r\n tr:nth-child(even)\r\n > td:first-child {\r\n background-color: #f2f5fb;\r\n}\r\n.PlaygroundEditorTheme__tableSelection *::selection {\r\n background-color: transparent;\r\n}\r\n.PlaygroundEditorTheme__tableSelected {\r\n outline: 2px solid rgb(60, 132, 244);\r\n}\r\n.PlaygroundEditorTheme__tableCell {\r\n border: 1px solid #bbb;\r\n width: 75px;\r\n vertical-align: top;\r\n text-align: start;\r\n padding: 6px 8px;\r\n position: relative;\r\n outline: none;\r\n overflow: auto;\r\n}\r\n/*\r\n A firefox workaround to allow scrolling of overflowing table cell\r\n ref: https://bugzilla.mozilla.org/show_bug.cgi?id=1904159\r\n*/\r\n.PlaygroundEditorTheme__tableCell > * {\r\n overflow: inherit;\r\n}\r\n.PlaygroundEditorTheme__tableCellResizer {\r\n position: absolute;\r\n right: -4px;\r\n height: 100%;\r\n width: 8px;\r\n cursor: ew-resize;\r\n z-index: 10;\r\n top: 0;\r\n}\r\n.PlaygroundEditorTheme__tableCellHeader {\r\n background-color: #f2f3f5;\r\n text-align: start;\r\n}\r\n.PlaygroundEditorTheme__tableCellSelected {\r\n caret-color: transparent;\r\n}\r\n.PlaygroundEditorTheme__tableCellSelected::after {\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n top: 0;\r\n background-color: highlight;\r\n mix-blend-mode: multiply;\r\n content: '';\r\n pointer-events: none;\r\n}\r\n.PlaygroundEditorTheme__tableAddColumns {\r\n position: absolute;\r\n background-color: #eee;\r\n height: 100%;\r\n animation: table-controls 0.2s ease;\r\n border: 0;\r\n cursor: pointer;\r\n}\r\n.PlaygroundEditorTheme__tableAddColumns:after {\r\n background-image: url(../images/icons/plus.svg);\r\n background-size: contain;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n display: block;\r\n content: ' ';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n opacity: 0.4;\r\n}\r\n.PlaygroundEditorTheme__tableAddColumns:hover,\r\n.PlaygroundEditorTheme__tableAddRows:hover {\r\n background-color: #c9dbf0;\r\n}\r\n.PlaygroundEditorTheme__tableAddRows {\r\n position: absolute;\r\n width: calc(100% - 25px);\r\n background-color: #eee;\r\n animation: table-controls 0.2s ease;\r\n border: 0;\r\n cursor: pointer;\r\n}\r\n.PlaygroundEditorTheme__tableAddRows:after {\r\n background-image: url(../images/icons/plus.svg);\r\n background-size: contain;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n display: block;\r\n content: ' ';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n opacity: 0.4;\r\n}\r\n@keyframes table-controls {\r\n 0% {\r\n opacity: 0;\r\n }\r\n 100% {\r\n opacity: 1;\r\n }\r\n}\r\n.PlaygroundEditorTheme__tableCellResizeRuler {\r\n display: block;\r\n position: absolute;\r\n width: 1px;\r\n background-color: rgb(60, 132, 244);\r\n height: 100%;\r\n top: 0;\r\n}\r\n.PlaygroundEditorTheme__tableCellActionButtonContainer {\r\n display: block;\r\n right: 5px;\r\n top: 6px;\r\n position: absolute;\r\n z-index: 4;\r\n width: 20px;\r\n height: 20px;\r\n}\r\n.PlaygroundEditorTheme__tableCellActionButton {\r\n background-color: #eee;\r\n display: block;\r\n border: 0;\r\n border-radius: 20px;\r\n width: 20px;\r\n height: 20px;\r\n color: #222;\r\n cursor: pointer;\r\n}\r\n.PlaygroundEditorTheme__tableCellActionButton:hover {\r\n background-color: #ddd;\r\n}\r\n.PlaygroundEditorTheme__characterLimit {\r\n display: inline;\r\n background-color: #ffbbbb !important;\r\n}\r\n.PlaygroundEditorTheme__ol1 {\r\n padding: 0;\r\n margin: 0;\r\n list-style-type: decimal;\r\n list-style-position: outside;\r\n}\r\n.PlaygroundEditorTheme__ol2 {\r\n padding: 0;\r\n margin: 0;\r\n list-style-type: upper-alpha;\r\n list-style-position: outside;\r\n}\r\n.PlaygroundEditorTheme__ol3 {\r\n padding: 0;\r\n margin: 0;\r\n list-style-type: lower-alpha;\r\n list-style-position: outside;\r\n}\r\n.PlaygroundEditorTheme__ol4 {\r\n padding: 0;\r\n margin: 0;\r\n list-style-type: upper-roman;\r\n list-style-position: outside;\r\n}\r\n.PlaygroundEditorTheme__ol5 {\r\n padding: 0;\r\n margin: 0;\r\n list-style-type: lower-roman;\r\n list-style-position: outside;\r\n}\r\n.PlaygroundEditorTheme__ul {\r\n padding: 0;\r\n margin: 0;\r\n list-style-type: disc;\r\n list-style-position: outside;\r\n}\r\n.PlaygroundEditorTheme__listItem {\r\n margin: 0 32px;\r\n font-family: var(--listitem-marker-font-family);\r\n font-size: var(--listitem-marker-font-size);\r\n background-color: var(--listitem-marker-background-color);\r\n}\r\n.PlaygroundEditorTheme__listItem::marker {\r\n color: var(--listitem-marker-color);\r\n background-color: var(--listitem-marker-background-color);\r\n font-family: var(--listitem-marker-font-family);\r\n font-size: var(--listitem-marker-font-size);\r\n}\r\n.PlaygroundEditorTheme__listItemChecked,\r\n.PlaygroundEditorTheme__listItemUnchecked {\r\n position: relative;\r\n margin-left: 0.5em;\r\n margin-right: 0.5em;\r\n padding-left: 1.5em;\r\n padding-right: 1.5em;\r\n list-style-type: none;\r\n outline: none;\r\n display: block;\r\n min-height: 1.5em;\r\n}\r\n.PlaygroundEditorTheme__listItemChecked > *,\r\n.PlaygroundEditorTheme__listItemUnchecked > * {\r\n margin-left: 0.01em;\r\n}\r\n.PlaygroundEditorTheme__listItemUnchecked:before,\r\n.PlaygroundEditorTheme__listItemChecked:before {\r\n content: '\\200B';\r\n width: 0.9em;\r\n height: 0.9em;\r\n top: 50%;\r\n left: 0;\r\n cursor: pointer;\r\n display: block;\r\n background-size: cover;\r\n position: absolute;\r\n transform: translateY(-50%);\r\n}\r\n.PlaygroundEditorTheme__listItemChecked {\r\n text-decoration: line-through;\r\n}\r\n.PlaygroundEditorTheme__listItemUnchecked:focus:before,\r\n.PlaygroundEditorTheme__listItemChecked:focus:before {\r\n box-shadow: 0 0 0 2px #a6cdfe;\r\n border-radius: 2px;\r\n}\r\n.PlaygroundEditorTheme__listItemUnchecked:before {\r\n border: 1px solid #999;\r\n border-radius: 2px;\r\n}\r\n.PlaygroundEditorTheme__listItemChecked:before {\r\n border: 1px solid rgb(61, 135, 245);\r\n border-radius: 2px;\r\n background-color: #3d87f5;\r\n background-repeat: no-repeat;\r\n}\r\n.PlaygroundEditorTheme__listItemChecked:after {\r\n content: '';\r\n cursor: pointer;\r\n border-color: #fff;\r\n border-style: solid;\r\n position: absolute;\r\n display: block;\r\n top: 45%;\r\n width: 0.2em;\r\n left: 0.35em;\r\n height: 0.4em;\r\n transform: translateY(-50%) rotate(45deg);\r\n border-width: 0 0.1em 0.1em 0;\r\n}\r\n.PlaygroundEditorTheme__nestedListItem {\r\n list-style-type: none;\r\n}\r\n.PlaygroundEditorTheme__nestedListItem:before,\r\n.PlaygroundEditorTheme__nestedListItem:after {\r\n display: none;\r\n}\r\n.PlaygroundEditorTheme__tokenComment {\r\n color: slategray;\r\n}\r\n.PlaygroundEditorTheme__tokenDeleted {\r\n border-image: linear-gradient(to right, #ffcecb 50%, #ffebe9 50%) fill 0/0/0\r\n 100vw;\r\n}\r\n.PlaygroundEditorTheme__tokenInserted {\r\n border-image: linear-gradient(to right, #aceebb 50%, #dafbe1 50%) fill 0/0/0\r\n 100vw;\r\n}\r\n.PlaygroundEditorTheme__tokenUnchanged {\r\n border-image: linear-gradient(to right, #ddd 50%, #f0f2f5 50%) fill 0/0/0\r\n 100vw;\r\n}\r\n.PlaygroundEditorTheme__tokenPunctuation {\r\n color: #999;\r\n}\r\n.PlaygroundEditorTheme__tokenProperty {\r\n color: #905;\r\n}\r\n.PlaygroundEditorTheme__tokenSelector {\r\n color: #690;\r\n}\r\n.PlaygroundEditorTheme__tokenOperator {\r\n color: #9a6e3a;\r\n}\r\n.PlaygroundEditorTheme__tokenAttr {\r\n color: #07a;\r\n}\r\n.PlaygroundEditorTheme__tokenVariable {\r\n color: #e90;\r\n}\r\n.PlaygroundEditorTheme__tokenFunction {\r\n color: #dd4a68;\r\n}\r\n.PlaygroundEditorTheme__mark {\r\n background: rgba(255, 212, 0, 0.14);\r\n border-bottom: 2px solid rgba(255, 212, 0, 0.3);\r\n padding-bottom: 2px;\r\n}\r\n.PlaygroundEditorTheme__markOverlap {\r\n background: rgba(255, 212, 0, 0.3);\r\n border-bottom: 2px solid rgba(255, 212, 0, 0.7);\r\n}\r\n.PlaygroundEditorTheme__mark.selected {\r\n background: rgba(255, 212, 0, 0.5);\r\n border-bottom: 2px solid rgba(255, 212, 0, 1);\r\n}\r\n.PlaygroundEditorTheme__markOverlap.selected {\r\n background: rgba(255, 212, 0, 0.7);\r\n border-bottom: 2px solid rgba(255, 212, 0, 0.7);\r\n}\r\n.PlaygroundEditorTheme__embedBlock {\r\n user-select: none;\r\n}\r\n.PlaygroundEditorTheme__embedBlockFocus {\r\n outline: 2px solid rgb(60, 132, 244);\r\n}\r\n.PlaygroundEditorTheme__layoutContainer {\r\n display: grid;\r\n gap: 10px;\r\n margin: 10px 0;\r\n}\r\n.PlaygroundEditorTheme__layoutItem {\r\n border: 1px dashed #ddd;\r\n padding: 8px 16px;\r\n min-width: 0;\r\n max-width: 100%;\r\n}\r\n.PlaygroundEditorTheme__autocomplete {\r\n color: #ccc;\r\n}\r\n.PlaygroundEditorTheme__hr {\r\n padding: 2px 2px;\r\n border: none;\r\n margin: 1em 0;\r\n cursor: pointer;\r\n}\r\n.PlaygroundEditorTheme__hr:after {\r\n content: '';\r\n display: block;\r\n height: 2px;\r\n background-color: #ccc;\r\n line-height: 2px;\r\n}\r\n.PlaygroundEditorTheme__hr.PlaygroundEditorTheme__hrSelected {\r\n outline: 2px solid rgb(60, 132, 244);\r\n user-select: none;\r\n}\r\n\r\n.PlaygroundEditorTheme__specialText {\r\n background-color: yellow;\r\n font-weight: bold;\r\n}\r\n\r\n.PlaygroundEditorTheme__contextMenu {\r\n outline: 0;\r\n background: #fff;\r\n border: 1px solid #ddd;\r\n box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.3);\r\n border-radius: 8px;\r\n}\r\n.PlaygroundEditorTheme__contextMenu button:first-child {\r\n border-radius: 8px 8px 0px 0px;\r\n}\r\n.PlaygroundEditorTheme__contextMenu button:last-child {\r\n border-radius: 0px 0px 8px 8px;\r\n}\r\n.PlaygroundEditorTheme__contextMenuItem {\r\n width: 100%;\r\n display: block;\r\n}\r\n.PlaygroundEditorTheme__contextMenuItem {\r\n display: flex;\r\n justify-content: left;\r\n width: 100%;\r\n background-color: #fff;\r\n color: #050505;\r\n border: 0;\r\n border-radius: 0px;\r\n font-size: 15px;\r\n text-align: left;\r\n line-height: 20px;\r\n padding: 8px;\r\n padding-right: 14px;\r\n outline: 0;\r\n cursor: pointer;\r\n}\r\n.PlaygroundEditorTheme__contextMenuItem.open {\r\n background: #ddd;\r\n}\r\n.PlaygroundEditorTheme__contextMenuItem:focus,\r\n.PlaygroundEditorTheme__contextMenuItem:not([disabled]):active {\r\n background: #eee;\r\n}\r\n.PlaygroundEditorTheme__contextMenuItem:disabled {\r\n background: #fff;\r\n color: #aaa;\r\n cursor: not-allowed;\r\n}\r\n.PlaygroundEditorTheme__contextMenuItemIcon {\r\n width: 20px;\r\n margin-right: 8px;\r\n background-repeat: no-repeat;\r\n background-size: contain;\r\n}\r\n\r\n/* ===== Custom overrides for app integration ===== */\r\n\r\n/* Force editor content area to always be light regardless of app dark mode */\r\n.editor-shell .ContentEditable__root {\r\n background: #fff !important;\r\n color: #000 !important;\r\n}\r\n\r\n/* Ensure editor UI elements appear above Radix Sheet overlays (z-index ~50).\r\n These elements are portaled to document.body by Lexical. */\r\n.floating-text-format-popup,\r\n.link-editor,\r\n.typeahead-popover,\r\n.emoji-menu,\r\n.mentions-menu,\r\n.auto-embed-menu,\r\n.component-picker-menu,\r\n.dropdown,\r\n.color-picker-wrapper,\r\n.Modal__overlay {\r\n z-index: 10000 !important;\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n *\r\n */\r\n.ContentEditable__root {\r\n border: 0;\r\n font-size: 15px;\r\n display: block;\r\n position: relative;\r\n outline: 0;\r\n padding: 8px 46px 40px;\r\n min-height: 150px;\r\n}\r\n@media (max-width: 1025px) {\r\n .ContentEditable__root {\r\n padding-left: 8px;\r\n padding-right: 8px;\r\n }\r\n}\r\n\r\n.ContentEditable__placeholder {\r\n font-size: 15px;\r\n color: #999;\r\n overflow: hidden;\r\n position: absolute;\r\n text-overflow: ellipsis;\r\n top: 8px;\r\n left: 46px;\r\n right: 28px;\r\n user-select: none;\r\n white-space: nowrap;\r\n display: inline-block;\r\n pointer-events: none;\r\n}\r\n@media (max-width: 1025px) {\r\n .ContentEditable__placeholder {\r\n left: 8px;\r\n right: 8px;\r\n }\r\n}\r\n"],"mappings":";AAQA,CAAC;AACC,cAAY;AACZ,UAAQ;AACR,UAAQ;AACR,UAAQ;AACR,aAAW;AACX,eAAa,IAAI,CAAC,EAAE,CAAC,EAAE;AACvB,WAAS;AACT,YAAU;AACV,WAAS;AACT,WAAS;AACT,eAAa;AACb,eAAa;AACb,aAAW;AACb;AACA,CAAC;AACC,aAAW;AACX,SAAO;AACP,YAAU;AACV,YAAU;AACV,iBAAe;AACf,OAAK;AACL,QAAM;AACN,SAAO;AACP,eAAa;AACb,eAAa;AACb,WAAS;AACT,kBAAgB;AAClB;;;AC3BA,CAAC;AACC,UAAQ;AACR,YAAU;AACZ;;;ACJA;AACE,+BAA6B;AAC/B;AACA,CAAC;AACC,UAAQ;AACR,YAAU;AACZ;AACA,CAAC;AACC,UAAQ;AACR,eAAa;AACb,iBAAe;AACf,aAAW;AACX,SAAO,IAAI,GAAG,EAAE,GAAG,EAAE;AACrB,qBAAmB,IAAI,GAAG,EAAE,GAAG,EAAE;AACjC,qBAAmB;AACnB,qBAAmB;AACnB,gBAAc;AAChB;AACA,CAAC;AACC,aAAW;AACX,SAAO,IAAI,CAAC,EAAE,CAAC,EAAE;AACjB,eAAa;AACb,UAAQ;AACV;AACA,CAAC;AACC,aAAW;AACX,SAAO,IAAI,GAAG,EAAE,GAAG,EAAE;AACrB,eAAa;AACb,UAAQ;AACR,kBAAgB;AAClB;AACA,CAAC;AACC,aAAW;AACX,UAAQ;AACR,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa;AACf;AACA,CApCC,iCAoCiC;AAChC,oBAAkB;AACpB;AACA,CAAC;AACC,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC9B,iBAAe,IAAI,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC7C;AACA,CAAC;AACC,cAAY;AACd;AACA,CAAC;AACC,mBAAiB;AACnB;AAEA,CAAC;AACC,mBAAiB;AACnB;AAEA,CAAC;AACC,mBAAiB,UAAU;AAC7B;AAEA,CAAC;AACC,YAAU;AACV,mBAAiB;AACnB;AAEA,CALC,8BAK8B,CAjB9B,oCAiBmE;AAClE,WAAS;AACT,YAAU;AACV,QAAM;AACN,SAAO;AACP,UAAQ;AACR,iBAAe,MAAM,MAAM;AAC7B;AAEA,CAdC,8BAc8B,CAtB9B,wCAsBuE;AACtE,WAAS;AACT,YAAU;AACV,QAAM;AACN,SAAO;AACP,OAAK;AACL,cAAY,MAAM,MAAM;AAC1B;AAEA,CAvBC,8BAuB8B,CA3B9B,iDA2BgF;AACjF,CAxBC,8BAwB8B,CA5B9B,iDA4BgF;AAC/E,WAAS;AACT,YAAU;AACV,QAAM;AACN,SAAO;AACT;AAEA,CA/BC,8BA+B8B,CAnC9B,iDAmCgF;AAC/E,OAAK;AACL,cAAY,MAAM,MAAM;AAC1B;AAEA,CApCC,8BAoC8B,CAxC9B,iDAwCgF;AAC/E,UAAQ;AACR,iBAAe,MAAM,MAAM;AAC7B;AAEA,CAAC;AACC,aAAW;AACX,kBAAgB;AAClB;AACA,CAAC;AACC,aAAW;AACX,kBAAgB;AAClB;AACA,CAAC;AACC,oBAAkB,IAAI,GAAG,EAAE,GAAG,EAAE;AAChC,WAAS,IAAI;AACb;AAAA,IAAa,KAAK;AAAA,IAAE,QAAQ;AAAA,IAAE,MAAM;AAAA,IAAE;AACtC,aAAW;AACb;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAAC;AACC,oBAAkB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AACrC,iBAAe,IAAI,MAAM,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AAC9C;AACA,CAAC;AACC,SAAO,IAAI,EAAE,EAAE,GAAG,EAAE;AACpB,mBAAiB;AACnB;AACA,CAJC,2BAI2B;AAC1B,mBAAiB;AACjB,UAAQ;AACV;AACA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,YAAU;AACZ;AACA,CALC,kCAKkC;AACjC,WAAS;AACT,WAAS;AACT,YAAU;AACV,OAAK;AACL,SAAO;AACP,cAAY,IAAI,MAAM;AACtB,aAAW,YAAY,KAAK,MAAM,CAAC,EAAE,OAAO;AAC9C;AACA,WAFa;AAGX;AACE,gBAAY;AACd;AACF;AACA,CAAC;AACC,oBAAkB,IAAI,GAAG,EAAE,GAAG,EAAE;AAChC;AAAA,IAAa,KAAK;AAAA,IAAE,QAAQ;AAAA,IAAE,MAAM;AAAA,IAAE;AACtC,WAAS;AACT,eAAa;AACb,aAAW;AACX,eAAa;AACb,UAAQ;AACR,cAAY;AACZ,iBAAe;AACf,cAAY;AACZ,YAAU;AACV,YAAU;AACV,eAAa;AACb,aAAW;AACX,cAAY;AACd;AACA,CAjBC,2BAiB2B;AAC1B,WAAS,KAAK;AACd,YAAU;AACV,oBAAkB;AAClB,QAAM;AACN,SAAO;AACP,OAAK;AACL,WAAS;AACT,cAAY;AACZ,gBAAc,IAAI,MAAM;AACxB,WAAS;AACT,SAAO;AACP,eAAa;AACb,cAAY;AACZ,aAAW;AACX,gBAAc;AACd,cAAY;AACZ,WAAS;AACX;AACA,CAAC;AACC,cAAY;AACZ,UAAQ,IAAI,IAAI,IAAI;AACtB;AACA,CAAC;AACC,cAAY,MAAM,MAAM,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC/C;AACA,CAAC;AACC,cAAY,MAAM,KAAK,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC9C;AACA,CAAC;AACC,cACE,MAAM,KAAK,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EACrC,MAAM,MAAM,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACrC;AACA,CAfC,8CAe8C,EAAE,CAAC;AAEhD,cAAY;AACZ,iBAAe;AACjB;AACA,CAAC;AACC,eAAa;AACb,gBAAc;AAChB;AACA,CAAC;AACC,eAAa;AACf;AACA,CAZkD;AAahD,mBAAiB;AACjB,kBAAgB;AAChB,cAAY;AACZ,cAAY;AACZ,gBAAc;AACd,SAAO;AACP,cAAY;AACZ,iBAAe;AACjB;AACA,CArCC,6CAqC6C,CAAC;AAG7C,cAAY;AACd;AACA,CAL+C,sCAKR,EAAE,gBAAgB,EAAE;AACzD,YAAU;AACV,oBAAkB;AAClB,YAAU;AACV,WAAS;AACT,OAAK;AACP;AACA,CAZ+C,sCAYR,EAAE,gBAAgB,EAAE;AACzD,YAAU;AACV,oBAAkB;AAClB,YAAU;AACV,WAAS;AACT,OAAK;AACP;AACA,CAnB+C,sCAmBR,EAAE,gBAAgB,EAAE,EAAE;AAC7D,CApB+C,sCAoBR,EAAE,gBAAgB,EAAE,EAAE;AAC3D,WAAS;AACT,YAAU;AACV,QAAM;AACN,UAAQ;AACR,SAAO;AACP,iBAAe,IAAI,MAAM;AAC3B;AACA,CAAC,yCAAyC,GAAG,EAAE,EAAE;AAC/C,oBAAkB;AAClB,YAAU;AACV,WAAS;AACT,QAAM;AACR;AACA,CANC,yCAMyC,GAAG,EAAE,EAAE;AAC/C,oBAAkB;AAClB,YAAU;AACV,WAAS;AACT,QAAM;AACR;AACA,CAZC,yCAYyC,GAAG,EAAE,YAAY;AACzD,WAAS;AACT,YAAU;AACV,QAAM;AACN,OAAK;AACL,SAAO;AACP,UAAQ;AACR,gBAAc,IAAI,MAAM;AAC1B;AACA,CAAC,wCAAwC,EAAE;AAC3C,CAtBC,yCAuBC,CAzEgD,4BAyEnB,CAF9B,wCAGC,EAAE,iBACF,EAAE,EAAE;AACJ,oBAAkB;AACpB;AACA,CAAC,sCAAsC,CAAC;AACtC,oBAAkB;AACpB;AACA,CAAC;AACC,WAAS,IAAI,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE;AAClC;AACA,CAAC;AACC,UAAQ,IAAI,MAAM;AAClB,SAAO;AACP,kBAAgB;AAChB,cAAY;AACZ,WAAS,IAAI;AACb,YAAU;AACV,WAAS;AACT,YAAU;AACZ;AAKA,CAdC,iCAciC,EAAE;AAClC,YAAU;AACZ;AACA,CAAC;AACC,YAAU;AACV,SAAO;AACP,UAAQ;AACR,SAAO;AACP,UAAQ;AACR,WAAS;AACT,OAAK;AACP;AACA,CAAC;AACC,oBAAkB;AAClB,cAAY;AACd;AACA,CAAC;AACC,eAAa;AACf;AACA,CAHC,wCAGwC;AACvC,YAAU;AACV,QAAM;AACN,SAAO;AACP,UAAQ;AACR,OAAK;AACL,oBAAkB;AAClB,kBAAgB;AAChB,WAAS;AACT,kBAAgB;AAClB;AACA,CAAC;AACC,YAAU;AACV,oBAAkB;AAClB,UAAQ;AACR,aAAW,eAAe,KAAK;AAC/B,UAAQ;AACR,UAAQ;AACV;AACA,CARC,sCAQsC;AACrC,oBAAkB;AAClB,mBAAiB;AACjB,uBAAqB;AACrB,qBAAmB;AACnB,WAAS;AACT,WAAS;AACT,YAAU;AACV,OAAK;AACL,QAAM;AACN,SAAO;AACP,UAAQ;AACR,WAAS;AACX;AACA,CAtBC,sCAsBsC;AACvC,CAAC,mCAAmC;AAClC,oBAAkB;AACpB;AACA,CAHC;AAIC,YAAU;AACV,SAAO,KAAK,KAAK,EAAE;AACnB,oBAAkB;AAClB,aAAW,eAAe,KAAK;AAC/B,UAAQ;AACR,UAAQ;AACV;AACA,CAXC,mCAWmC;AAClC,oBAAkB;AAClB,mBAAiB;AACjB,uBAAqB;AACrB,qBAAmB;AACnB,WAAS;AACT,WAAS;AACT,YAAU;AACV,OAAK;AACL,QAAM;AACN,SAAO;AACP,UAAQ;AACR,WAAS;AACX;AACA,WA5Ca;AA6CX;AACE,aAAS;AACX;AACA;AACE,aAAS;AACX;AACF;AACA,CAAC;AACC,WAAS;AACT,YAAU;AACV,SAAO;AACP,oBAAkB,IAAI,EAAE,EAAE,GAAG,EAAE;AAC/B,UAAQ;AACR,OAAK;AACP;AACA,CAAC;AACC,WAAS;AACT,SAAO;AACP,OAAK;AACL,YAAU;AACV,WAAS;AACT,SAAO;AACP,UAAQ;AACV;AACA,CAAC;AACC,oBAAkB;AAClB,WAAS;AACT,UAAQ;AACR,iBAAe;AACf,SAAO;AACP,UAAQ;AACR,SAAO;AACP,UAAQ;AACV;AACA,CAVC,4CAU4C;AAC3C,oBAAkB;AACpB;AACA,CAAC;AACC,WAAS;AACT,oBAAkB;AACpB;AACA,CAAC;AACC,WAAS;AACT,UAAQ;AACR,mBAAiB;AACjB,uBAAqB;AACvB;AACA,CAAC;AACC,WAAS;AACT,UAAQ;AACR,mBAAiB;AACjB,uBAAqB;AACvB;AACA,CAAC;AACC,WAAS;AACT,UAAQ;AACR,mBAAiB;AACjB,uBAAqB;AACvB;AACA,CAAC;AACC,WAAS;AACT,UAAQ;AACR,mBAAiB;AACjB,uBAAqB;AACvB;AACA,CAAC;AACC,WAAS;AACT,UAAQ;AACR,mBAAiB;AACjB,uBAAqB;AACvB;AACA,CAAC;AACC,WAAS;AACT,UAAQ;AACR,mBAAiB;AACjB,uBAAqB;AACvB;AACA,CAAC;AACC,UAAQ,EAAE;AACV,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,oBAAkB,IAAI;AACxB;AACA,CANC,+BAM+B;AAC9B,SAAO,IAAI;AACX,oBAAkB,IAAI;AACtB,eAAa,IAAI;AACjB,aAAW,IAAI;AACjB;AACA,CAAC;AACD,CAAC;AACC,YAAU;AACV,eAAa;AACb,gBAAc;AACd,gBAAc;AACd,iBAAe;AACf,mBAAiB;AACjB,WAAS;AACT,WAAS;AACT,cAAY;AACd;AACA,CAZC,uCAYuC,EAAE;AAC1C,CAZC,yCAYyC,EAAE;AAC1C,eAAa;AACf;AACA,CAfC,wCAewC;AACzC,CAjBC,sCAiBsC;AACrC,WAAS;AACT,SAAO;AACP,UAAQ;AACR,OAAK;AACL,QAAM;AACN,UAAQ;AACR,WAAS;AACT,mBAAiB;AACjB,YAAU;AACV,aAAW,WAAW;AACxB;AACA,CA7BC;AA8BC,mBAAiB;AACnB;AACA,CA/BC,wCA+BwC,MAAM;AAC/C,CAjCC,sCAiCsC,MAAM;AAC3C,cAAY,EAAE,EAAE,EAAE,IAAI;AACtB,iBAAe;AACjB;AACA,CApCC,wCAoCwC;AACvC,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACjB;AACA,CAzCC,sCAyCsC;AACrC,UAAQ,IAAI,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE;AAC/B,iBAAe;AACf,oBAAkB;AAClB,qBAAmB;AACrB;AACA,CA/CC,sCA+CsC;AACrC,WAAS;AACT,UAAQ;AACR,gBAAc;AACd,gBAAc;AACd,YAAU;AACV,WAAS;AACT,OAAK;AACL,SAAO;AACP,QAAM;AACN,UAAQ;AACR,aAAW,WAAW,MAAM,OAAO;AACnC,gBAAc,EAAE,MAAM,MAAM;AAC9B;AACA,CAAC;AACC,mBAAiB;AACnB;AACA,CAHC,qCAGqC;AACtC,CAJC,qCAIqC;AACpC,WAAS;AACX;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC;AAAA,IAAc;AAAA,MAAgB,GAAG,KAAnB;AAAA,MAA0B,QAAQ,GAAlC;AAAA,MAAuC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EACzE;AACJ;AACA,CAAC;AACC;AAAA,IAAc;AAAA,MAAgB,GAAG,KAAnB;AAAA,MAA0B,QAAQ,GAAlC;AAAA,MAAuC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EACzE;AACJ;AACA,CAAC;AACC;AAAA,IAAc;AAAA,MAAgB,GAAG,KAAnB;AAAA,MAA0B,KAAK,GAA/B;AAAA,MAAoC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EACtE;AACJ;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC9B,iBAAe,IAAI,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC3C,kBAAgB;AAClB;AACA,CAAC;AACC,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC9B,iBAAe,IAAI,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC7C;AACA,CATC,2BAS2B,CAAC;AAC3B,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC9B,iBAAe,IAAI,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC7C;AACA,CARC,kCAQkC,CAJN;AAK3B,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC9B,iBAAe,IAAI,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC7C;AACA,CAAC;AACC,eAAa;AACf;AACA,CAAC;AACC,WAAS,IAAI,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE;AAClC;AACA,CAAC;AACC,WAAS;AACT,OAAK;AACL,UAAQ,KAAK;AACf;AACA,CAAC;AACC,UAAQ,IAAI,OAAO;AACnB,WAAS,IAAI;AACb,aAAW;AACX,aAAW;AACb;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,WAAS,IAAI;AACb,UAAQ;AACR,UAAQ,IAAI;AACZ,UAAQ;AACV;AACA,CANC,yBAMyB;AACxB,WAAS;AACT,WAAS;AACT,UAAQ;AACR,oBAAkB;AAClB,eAAa;AACf;AACA,CAbC,yBAayB,CAAC;AACzB,WAAS,IAAI,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE;AAChC,eAAa;AACf;AAEA,CAAC;AACC,oBAAkB;AAClB,eAAa;AACf;AAEA,CAAC;AACC,WAAS;AACT,cAAY;AACZ,UAAQ,IAAI,MAAM;AAClB,cAAY,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACvC,iBAAe;AACjB;AACA,CAPC,mCAOmC,MAAM;AACxC,iBAAe,IAAI,IAAI,IAAI;AAC7B;AACA,CAVC,mCAUmC,MAAM;AACxC,iBAAe,IAAI,IAAI,IAAI;AAC7B;AACA,CAAC;AACC,SAAO;AACP,WAAS;AACX;AACA,CAJC;AAKC,WAAS;AACT,mBAAiB;AACjB,SAAO;AACP,oBAAkB;AAClB,SAAO;AACP,UAAQ;AACR,iBAAe;AACf,aAAW;AACX,cAAY;AACZ,eAAa;AACb,WAAS;AACT,iBAAe;AACf,WAAS;AACT,UAAQ;AACV;AACA,CApBC,sCAoBsC,CAAC;AACtC,cAAY;AACd;AACA,CAvBC,sCAuBsC;AACvC,CAxBC,sCAwBsC,KAAK,CAAC,UAAU;AACrD,cAAY;AACd;AACA,CA3BC,sCA2BsC;AACrC,cAAY;AACZ,SAAO;AACP,UAAQ;AACV;AACA,CAAC;AACC,SAAO;AACP,gBAAc;AACd,qBAAmB;AACnB,mBAAiB;AACnB;AAKA,CAAC,aAAa,CAAC;AACb,cAAY;AACZ,SAAO;AACT;AAIA,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACC,WAAS;AACX;;;ACtsBA,CAAC;AACC,UAAQ;AACR,aAAW;AACX,WAAS;AACT,YAAU;AACV,WAAS;AACT,WAAS,IAAI,KAAK;AAClB,cAAY;AACd;AACA,QAAO,WAAY;AACjB,GAVD;AAWG,kBAAc;AACd,mBAAe;AACjB;AACF;AAEA,CAAC;AACC,aAAW;AACX,SAAO;AACP,YAAU;AACV,YAAU;AACV,iBAAe;AACf,OAAK;AACL,QAAM;AACN,SAAO;AACP,eAAa;AACb,eAAa;AACb,WAAS;AACT,kBAAgB;AAClB;AACA,QAAO,WAAY;AACjB,GAfD;AAgBG,UAAM;AACN,WAAO;AACT;AACF;","names":[]}
@@ -0,0 +1,233 @@
1
+ import {
2
+ $isStickyNode,
3
+ PlaygroundEditorTheme_default
4
+ } from "./chunk-XTKVR2JI.js";
5
+ import {
6
+ LexicalContentEditable,
7
+ useSharedHistoryContext
8
+ } from "./chunk-BHROZTZU.js";
9
+ import "./chunk-PZ5AY32C.js";
10
+
11
+ // src/nodes/StickyComponent.tsx
12
+ import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
13
+ import { LexicalErrorBoundary } from "@lexical/react/LexicalErrorBoundary";
14
+ import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin";
15
+ import { LexicalNestedComposer } from "@lexical/react/LexicalNestedComposer";
16
+ import { PlainTextPlugin } from "@lexical/react/LexicalPlainTextPlugin";
17
+ import { calculateZoomLevel } from "@lexical/utils";
18
+ import { $getNodeByKey } from "lexical";
19
+ import { useEffect, useLayoutEffect, useRef } from "react";
20
+
21
+ // src/themes/StickyEditorTheme.ts
22
+ var theme = {
23
+ ...PlaygroundEditorTheme_default,
24
+ paragraph: "StickyEditorTheme__paragraph"
25
+ };
26
+ var StickyEditorTheme_default = theme;
27
+
28
+ // src/nodes/StickyComponent.tsx
29
+ import { jsx, jsxs } from "react/jsx-runtime";
30
+ function positionSticky(stickyElem, positioning) {
31
+ const style = stickyElem.style;
32
+ const rootElementRect = positioning.rootElementRect;
33
+ const rectLeft = rootElementRect !== null ? rootElementRect.left : 0;
34
+ const rectTop = rootElementRect !== null ? rootElementRect.top : 0;
35
+ style.top = rectTop + positioning.y + "px";
36
+ style.left = rectLeft + positioning.x + "px";
37
+ }
38
+ function StickyComponent({
39
+ x,
40
+ y,
41
+ nodeKey,
42
+ color,
43
+ caption
44
+ }) {
45
+ const [editor] = useLexicalComposerContext();
46
+ const stickyContainerRef = useRef(null);
47
+ const positioningRef = useRef({
48
+ isDragging: false,
49
+ offsetX: 0,
50
+ offsetY: 0,
51
+ rootElementRect: null,
52
+ x: 0,
53
+ y: 0
54
+ });
55
+ useEffect(() => {
56
+ const position = positioningRef.current;
57
+ position.x = x;
58
+ position.y = y;
59
+ const stickyContainer = stickyContainerRef.current;
60
+ if (stickyContainer !== null) {
61
+ positionSticky(stickyContainer, position);
62
+ }
63
+ }, [x, y]);
64
+ useLayoutEffect(() => {
65
+ const position = positioningRef.current;
66
+ const resizeObserver = new ResizeObserver((entries) => {
67
+ for (let i = 0; i < entries.length; i++) {
68
+ const entry = entries[i];
69
+ const { target } = entry;
70
+ position.rootElementRect = target.getBoundingClientRect();
71
+ const stickyContainer = stickyContainerRef.current;
72
+ if (stickyContainer !== null) {
73
+ positionSticky(stickyContainer, position);
74
+ }
75
+ }
76
+ });
77
+ const removeRootListener = editor.registerRootListener(
78
+ (nextRootElem, prevRootElem) => {
79
+ if (prevRootElem !== null) {
80
+ resizeObserver.unobserve(prevRootElem);
81
+ }
82
+ if (nextRootElem !== null) {
83
+ resizeObserver.observe(nextRootElem);
84
+ }
85
+ }
86
+ );
87
+ const handleWindowResize = () => {
88
+ const rootElement = editor.getRootElement();
89
+ const stickyContainer = stickyContainerRef.current;
90
+ if (rootElement !== null && stickyContainer !== null) {
91
+ position.rootElementRect = rootElement.getBoundingClientRect();
92
+ positionSticky(stickyContainer, position);
93
+ }
94
+ };
95
+ window.addEventListener("resize", handleWindowResize);
96
+ return () => {
97
+ window.removeEventListener("resize", handleWindowResize);
98
+ removeRootListener();
99
+ };
100
+ }, [editor]);
101
+ useEffect(() => {
102
+ const stickyContainer = stickyContainerRef.current;
103
+ if (stickyContainer !== null) {
104
+ setTimeout(() => {
105
+ stickyContainer.style.setProperty(
106
+ "transition",
107
+ "top 0.3s ease 0s, left 0.3s ease 0s"
108
+ );
109
+ }, 500);
110
+ }
111
+ }, []);
112
+ const handlePointerMove = (event) => {
113
+ const stickyContainer = stickyContainerRef.current;
114
+ const positioning = positioningRef.current;
115
+ const rootElementRect = positioning.rootElementRect;
116
+ const zoom = calculateZoomLevel(stickyContainer);
117
+ if (stickyContainer !== null && positioning.isDragging && rootElementRect !== null) {
118
+ positioning.x = event.pageX / zoom - positioning.offsetX - rootElementRect.left;
119
+ positioning.y = event.pageY / zoom - positioning.offsetY - rootElementRect.top;
120
+ positionSticky(stickyContainer, positioning);
121
+ }
122
+ };
123
+ const handlePointerUp = (event) => {
124
+ const stickyContainer = stickyContainerRef.current;
125
+ const positioning = positioningRef.current;
126
+ if (stickyContainer !== null) {
127
+ positioning.isDragging = false;
128
+ stickyContainer.classList.remove("dragging");
129
+ editor.update(() => {
130
+ const node = $getNodeByKey(nodeKey);
131
+ if ($isStickyNode(node)) {
132
+ node.setPosition(positioning.x, positioning.y);
133
+ }
134
+ });
135
+ }
136
+ document.removeEventListener("pointermove", handlePointerMove);
137
+ document.removeEventListener("pointerup", handlePointerUp);
138
+ };
139
+ const handleDelete = () => {
140
+ editor.update(() => {
141
+ const node = $getNodeByKey(nodeKey);
142
+ if ($isStickyNode(node)) {
143
+ node.remove();
144
+ }
145
+ });
146
+ };
147
+ const handleColorChange = () => {
148
+ editor.update(() => {
149
+ const node = $getNodeByKey(nodeKey);
150
+ if ($isStickyNode(node)) {
151
+ node.toggleColor();
152
+ }
153
+ });
154
+ };
155
+ const { historyState } = useSharedHistoryContext();
156
+ return /* @__PURE__ */ jsx("div", { ref: stickyContainerRef, className: "sticky-note-container", children: /* @__PURE__ */ jsxs(
157
+ "div",
158
+ {
159
+ className: `sticky-note ${color}`,
160
+ onPointerDown: (event) => {
161
+ const stickyContainer = stickyContainerRef.current;
162
+ if (stickyContainer == null || event.button === 2 || event.target !== stickyContainer.firstChild) {
163
+ return;
164
+ }
165
+ const stickContainer = stickyContainer;
166
+ const positioning = positioningRef.current;
167
+ if (stickContainer !== null) {
168
+ const { top, left } = stickContainer.getBoundingClientRect();
169
+ const zoom = calculateZoomLevel(stickContainer);
170
+ positioning.offsetX = event.clientX / zoom - left;
171
+ positioning.offsetY = event.clientY / zoom - top;
172
+ positioning.isDragging = true;
173
+ stickContainer.classList.add("dragging");
174
+ document.addEventListener("pointermove", handlePointerMove);
175
+ document.addEventListener("pointerup", handlePointerUp);
176
+ event.preventDefault();
177
+ }
178
+ },
179
+ children: [
180
+ /* @__PURE__ */ jsx(
181
+ "button",
182
+ {
183
+ type: "button",
184
+ onClick: handleDelete,
185
+ className: "delete",
186
+ "aria-label": "Delete sticky note",
187
+ title: "Delete",
188
+ children: "X"
189
+ }
190
+ ),
191
+ /* @__PURE__ */ jsx(
192
+ "button",
193
+ {
194
+ type: "button",
195
+ onClick: handleColorChange,
196
+ className: "color",
197
+ "aria-label": "Change sticky note color",
198
+ title: "Color",
199
+ children: /* @__PURE__ */ jsx("i", { className: "bucket" })
200
+ }
201
+ ),
202
+ /* @__PURE__ */ jsxs(
203
+ LexicalNestedComposer,
204
+ {
205
+ initialEditor: caption,
206
+ initialTheme: StickyEditorTheme_default,
207
+ children: [
208
+ /* @__PURE__ */ jsx(HistoryPlugin, { externalHistoryState: historyState }),
209
+ /* @__PURE__ */ jsx(
210
+ PlainTextPlugin,
211
+ {
212
+ contentEditable: /* @__PURE__ */ jsx(
213
+ LexicalContentEditable,
214
+ {
215
+ placeholder: "What's up?",
216
+ placeholderClassName: "StickyNode__placeholder",
217
+ className: "StickyNode__contentEditable"
218
+ }
219
+ ),
220
+ ErrorBoundary: LexicalErrorBoundary
221
+ }
222
+ )
223
+ ]
224
+ }
225
+ )
226
+ ]
227
+ }
228
+ ) });
229
+ }
230
+ export {
231
+ StickyComponent as default
232
+ };
233
+ //# sourceMappingURL=StickyComponent-ZED6LNTX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/nodes/StickyComponent.tsx","../src/themes/StickyEditorTheme.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type {LexicalEditor, NodeKey} from 'lexical';\nimport type {JSX} from 'react';\n\nimport './StickyNode.css';\n\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';\nimport {LexicalErrorBoundary} from '@lexical/react/LexicalErrorBoundary';\nimport {HistoryPlugin} from '@lexical/react/LexicalHistoryPlugin';\nimport {LexicalNestedComposer} from '@lexical/react/LexicalNestedComposer';\nimport {PlainTextPlugin} from '@lexical/react/LexicalPlainTextPlugin';\nimport {calculateZoomLevel} from '@lexical/utils';\nimport {$getNodeByKey} from 'lexical';\nimport * as React from 'react';\nimport {useEffect, useLayoutEffect, useRef} from 'react';\n\nimport {useSharedHistoryContext} from '../context/SharedHistoryContext';\nimport StickyEditorTheme from '../themes/StickyEditorTheme';\nimport ContentEditable from '../ui/ContentEditable';\nimport {$isStickyNode} from './StickyNode';\n\ntype Positioning = {\n isDragging: boolean;\n offsetX: number;\n offsetY: number;\n rootElementRect: null | ClientRect;\n x: number;\n y: number;\n};\n\nfunction positionSticky(\n stickyElem: HTMLElement,\n positioning: Positioning,\n): void {\n const style = stickyElem.style;\n const rootElementRect = positioning.rootElementRect;\n const rectLeft = rootElementRect !== null ? rootElementRect.left : 0;\n const rectTop = rootElementRect !== null ? rootElementRect.top : 0;\n style.top = rectTop + positioning.y + 'px';\n style.left = rectLeft + positioning.x + 'px';\n}\n\nexport default function StickyComponent({\n x,\n y,\n nodeKey,\n color,\n caption,\n}: {\n caption: LexicalEditor;\n color: 'pink' | 'yellow';\n nodeKey: NodeKey;\n x: number;\n y: number;\n}): JSX.Element {\n const [editor] = useLexicalComposerContext();\n const stickyContainerRef = useRef<null | HTMLDivElement>(null);\n const positioningRef = useRef<Positioning>({\n isDragging: false,\n offsetX: 0,\n offsetY: 0,\n rootElementRect: null,\n x: 0,\n y: 0,\n });\n useEffect(() => {\n const position = positioningRef.current;\n position.x = x;\n position.y = y;\n\n const stickyContainer = stickyContainerRef.current;\n if (stickyContainer !== null) {\n positionSticky(stickyContainer, position);\n }\n }, [x, y]);\n\n useLayoutEffect(() => {\n const position = positioningRef.current;\n const resizeObserver = new ResizeObserver((entries) => {\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n const {target} = entry;\n position.rootElementRect = target.getBoundingClientRect();\n const stickyContainer = stickyContainerRef.current;\n if (stickyContainer !== null) {\n positionSticky(stickyContainer, position);\n }\n }\n });\n\n const removeRootListener = editor.registerRootListener(\n (nextRootElem, prevRootElem) => {\n if (prevRootElem !== null) {\n resizeObserver.unobserve(prevRootElem);\n }\n if (nextRootElem !== null) {\n resizeObserver.observe(nextRootElem);\n }\n },\n );\n\n const handleWindowResize = () => {\n const rootElement = editor.getRootElement();\n const stickyContainer = stickyContainerRef.current;\n if (rootElement !== null && stickyContainer !== null) {\n position.rootElementRect = rootElement.getBoundingClientRect();\n positionSticky(stickyContainer, position);\n }\n };\n\n window.addEventListener('resize', handleWindowResize);\n\n return () => {\n window.removeEventListener('resize', handleWindowResize);\n removeRootListener();\n };\n }, [editor]);\n\n useEffect(() => {\n const stickyContainer = stickyContainerRef.current;\n if (stickyContainer !== null) {\n // Delay adding transition so we don't trigger the\n // transition on load of the sticky.\n setTimeout(() => {\n stickyContainer.style.setProperty(\n 'transition',\n 'top 0.3s ease 0s, left 0.3s ease 0s',\n );\n }, 500);\n }\n }, []);\n\n const handlePointerMove = (event: PointerEvent) => {\n const stickyContainer = stickyContainerRef.current;\n const positioning = positioningRef.current;\n const rootElementRect = positioning.rootElementRect;\n const zoom = calculateZoomLevel(stickyContainer);\n if (\n stickyContainer !== null &&\n positioning.isDragging &&\n rootElementRect !== null\n ) {\n positioning.x =\n event.pageX / zoom - positioning.offsetX - rootElementRect.left;\n positioning.y =\n event.pageY / zoom - positioning.offsetY - rootElementRect.top;\n positionSticky(stickyContainer, positioning);\n }\n };\n\n const handlePointerUp = (event: PointerEvent) => {\n const stickyContainer = stickyContainerRef.current;\n const positioning = positioningRef.current;\n if (stickyContainer !== null) {\n positioning.isDragging = false;\n stickyContainer.classList.remove('dragging');\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if ($isStickyNode(node)) {\n node.setPosition(positioning.x, positioning.y);\n }\n });\n }\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp);\n };\n\n const handleDelete = () => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if ($isStickyNode(node)) {\n node.remove();\n }\n });\n };\n\n const handleColorChange = () => {\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if ($isStickyNode(node)) {\n node.toggleColor();\n }\n });\n };\n\n const {historyState} = useSharedHistoryContext();\n\n return (\n <div ref={stickyContainerRef} className=\"sticky-note-container\">\n <div\n className={`sticky-note ${color}`}\n onPointerDown={(event) => {\n const stickyContainer = stickyContainerRef.current;\n if (\n stickyContainer == null ||\n event.button === 2 ||\n event.target !== stickyContainer.firstChild\n ) {\n // Right click or click on editor should not work\n return;\n }\n const stickContainer = stickyContainer;\n const positioning = positioningRef.current;\n if (stickContainer !== null) {\n const {top, left} = stickContainer.getBoundingClientRect();\n const zoom = calculateZoomLevel(stickContainer);\n positioning.offsetX = event.clientX / zoom - left;\n positioning.offsetY = event.clientY / zoom - top;\n positioning.isDragging = true;\n stickContainer.classList.add('dragging');\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp);\n event.preventDefault();\n }\n }}>\n <button type=\"button\"\n onClick={handleDelete}\n className=\"delete\"\n aria-label=\"Delete sticky note\"\n title=\"Delete\">\n X\n </button>\n <button type=\"button\"\n onClick={handleColorChange}\n className=\"color\"\n aria-label=\"Change sticky note color\"\n title=\"Color\">\n <i className=\"bucket\" />\n </button>\n <LexicalNestedComposer\n initialEditor={caption}\n initialTheme={StickyEditorTheme}>\n <HistoryPlugin externalHistoryState={historyState} />\n <PlainTextPlugin\n contentEditable={\n <ContentEditable\n placeholder=\"What's up?\"\n placeholderClassName=\"StickyNode__placeholder\"\n className=\"StickyNode__contentEditable\"\n />\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n </LexicalNestedComposer>\n </div>\n </div>\n );\n}\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\n\r\nimport type {EditorThemeClasses} from 'lexical';\r\n\r\nimport './StickyEditorTheme.css';\r\n\r\nimport baseTheme from './PlaygroundEditorTheme';\r\n\r\nconst theme: EditorThemeClasses = {\r\n ...baseTheme,\r\n paragraph: 'StickyEditorTheme__paragraph',\r\n};\r\n\r\nexport default theme;\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,168 @@
1
+ // src/nodes/PollNode.tsx
2
+ import {
3
+ $getState,
4
+ $setState,
5
+ buildImportMap,
6
+ createState,
7
+ DecoratorNode
8
+ } from "lexical";
9
+ import * as React from "react";
10
+ import { jsx } from "react/jsx-runtime";
11
+ var PollComponent = React.lazy(() => import("./PollComponent-KLJZSW5O.js"));
12
+ function createUID() {
13
+ return Math.random().toString(36).replace(/[^a-z]+/g, "").substring(0, 5);
14
+ }
15
+ function createPollOption(text = "") {
16
+ return {
17
+ text,
18
+ uid: createUID(),
19
+ votes: []
20
+ };
21
+ }
22
+ function cloneOption(option, text, votes) {
23
+ return {
24
+ text,
25
+ uid: option.uid,
26
+ votes: votes || Array.from(option.votes)
27
+ };
28
+ }
29
+ function $convertPollElement(domNode) {
30
+ const question = domNode.getAttribute("data-lexical-poll-question");
31
+ const options = domNode.getAttribute("data-lexical-poll-options");
32
+ if (question !== null && options !== null) {
33
+ const node = $createPollNode(question, JSON.parse(options));
34
+ return { node };
35
+ }
36
+ return null;
37
+ }
38
+ function parseOptions(json) {
39
+ const options = [];
40
+ if (Array.isArray(json)) {
41
+ for (const row of json) {
42
+ if (row && typeof row.text === "string" && typeof row.uid === "string" && Array.isArray(row.votes) && row.votes.every((v) => typeof v === "string")) {
43
+ options.push(row);
44
+ }
45
+ }
46
+ }
47
+ return options;
48
+ }
49
+ var questionState = createState("question", {
50
+ parse: (v) => typeof v === "string" ? v : ""
51
+ });
52
+ var optionsState = createState("options", {
53
+ isEqual: (a, b) => a.length === b.length && JSON.stringify(a) === JSON.stringify(b),
54
+ parse: parseOptions
55
+ });
56
+ var PollNode = class extends DecoratorNode {
57
+ $config() {
58
+ return this.config("poll", {
59
+ extends: DecoratorNode,
60
+ importDOM: buildImportMap({
61
+ span: (domNode) => domNode.getAttribute("data-lexical-poll-question") !== null ? {
62
+ conversion: $convertPollElement,
63
+ priority: 2
64
+ } : null
65
+ }),
66
+ stateConfigs: [
67
+ { flat: true, stateConfig: questionState },
68
+ { flat: true, stateConfig: optionsState }
69
+ ]
70
+ });
71
+ }
72
+ getQuestion() {
73
+ return $getState(this, questionState);
74
+ }
75
+ setQuestion(valueOrUpdater) {
76
+ return $setState(this, questionState, valueOrUpdater);
77
+ }
78
+ getOptions() {
79
+ return $getState(this, optionsState);
80
+ }
81
+ setOptions(valueOrUpdater) {
82
+ return $setState(this, optionsState, valueOrUpdater);
83
+ }
84
+ addOption(option) {
85
+ return this.setOptions((options) => [...options, option]);
86
+ }
87
+ deleteOption(option) {
88
+ return this.setOptions((prevOptions) => {
89
+ const index = prevOptions.indexOf(option);
90
+ if (index === -1) {
91
+ return prevOptions;
92
+ }
93
+ const options = Array.from(prevOptions);
94
+ options.splice(index, 1);
95
+ return options;
96
+ });
97
+ }
98
+ setOptionText(option, text) {
99
+ return this.setOptions((prevOptions) => {
100
+ const clonedOption = cloneOption(option, text);
101
+ const options = Array.from(prevOptions);
102
+ const index = options.indexOf(option);
103
+ options[index] = clonedOption;
104
+ return options;
105
+ });
106
+ }
107
+ toggleVote(option, username) {
108
+ return this.setOptions((prevOptions) => {
109
+ const index = prevOptions.indexOf(option);
110
+ if (index === -1) {
111
+ return prevOptions;
112
+ }
113
+ const votes = option.votes;
114
+ const votesClone = Array.from(votes);
115
+ const voteIndex = votes.indexOf(username);
116
+ if (voteIndex === -1) {
117
+ votesClone.push(username);
118
+ } else {
119
+ votesClone.splice(voteIndex, 1);
120
+ }
121
+ const clonedOption = cloneOption(option, option.text, votesClone);
122
+ const options = Array.from(prevOptions);
123
+ options[index] = clonedOption;
124
+ return options;
125
+ });
126
+ }
127
+ exportDOM() {
128
+ const element = document.createElement("span");
129
+ element.setAttribute("data-lexical-poll-question", this.getQuestion());
130
+ element.setAttribute(
131
+ "data-lexical-poll-options",
132
+ JSON.stringify(this.getOptions())
133
+ );
134
+ return { element };
135
+ }
136
+ createDOM() {
137
+ const elem = document.createElement("span");
138
+ elem.style.display = "inline-block";
139
+ return elem;
140
+ }
141
+ updateDOM() {
142
+ return false;
143
+ }
144
+ decorate() {
145
+ return /* @__PURE__ */ jsx(
146
+ PollComponent,
147
+ {
148
+ question: this.getQuestion(),
149
+ options: this.getOptions(),
150
+ nodeKey: this.__key
151
+ }
152
+ );
153
+ }
154
+ };
155
+ function $createPollNode(question, options) {
156
+ return new PollNode().setQuestion(question).setOptions(options);
157
+ }
158
+ function $isPollNode(node) {
159
+ return node instanceof PollNode;
160
+ }
161
+
162
+ export {
163
+ createPollOption,
164
+ PollNode,
165
+ $createPollNode,
166
+ $isPollNode
167
+ };
168
+ //# sourceMappingURL=chunk-35UCX4ZT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/nodes/PollNode.tsx"],"sourcesContent":["/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\n\r\nimport type {JSX} from 'react';\r\n\r\nimport {\r\n $getState,\r\n $setState,\r\n buildImportMap,\r\n createState,\r\n DecoratorNode,\r\n DOMConversionOutput,\r\n DOMExportOutput,\r\n LexicalNode,\r\n SerializedLexicalNode,\r\n Spread,\r\n StateConfigValue,\r\n type StateValueOrUpdater,\r\n} from 'lexical';\r\nimport * as React from 'react';\r\n\r\nexport type Options = ReadonlyArray<Option>;\r\n\r\nexport type Option = Readonly<{\r\n text: string;\r\n uid: string;\r\n votes: Array<string>;\r\n}>;\r\n\r\nconst PollComponent = React.lazy(() => import('./PollComponent'));\r\n\r\nfunction createUID(): string {\r\n return Math.random()\r\n .toString(36)\r\n .replace(/[^a-z]+/g, '')\r\n .substring(0, 5);\r\n}\r\n\r\nexport function createPollOption(text = ''): Option {\r\n return {\r\n text,\r\n uid: createUID(),\r\n votes: [],\r\n };\r\n}\r\n\r\nfunction cloneOption(\r\n option: Option,\r\n text: string,\r\n votes?: Array<string>,\r\n): Option {\r\n return {\r\n text,\r\n uid: option.uid,\r\n votes: votes || Array.from(option.votes),\r\n };\r\n}\r\n\r\nexport type SerializedPollNode = Spread<\r\n {\r\n question: string;\r\n options: Options;\r\n },\r\n SerializedLexicalNode\r\n>;\r\n\r\nfunction $convertPollElement(\r\n domNode: HTMLSpanElement,\r\n): DOMConversionOutput | null {\r\n const question = domNode.getAttribute('data-lexical-poll-question');\r\n const options = domNode.getAttribute('data-lexical-poll-options');\r\n if (question !== null && options !== null) {\r\n const node = $createPollNode(question, JSON.parse(options));\r\n return {node};\r\n }\r\n return null;\r\n}\r\n\r\nfunction parseOptions(json: unknown): Options {\r\n const options = [];\r\n if (Array.isArray(json)) {\r\n for (const row of json) {\r\n if (\r\n row &&\r\n typeof row.text === 'string' &&\r\n typeof row.uid === 'string' &&\r\n Array.isArray(row.votes) &&\r\n row.votes.every((v: unknown) => typeof v === 'string')\r\n ) {\r\n options.push(row);\r\n }\r\n }\r\n }\r\n return options;\r\n}\r\n\r\nconst questionState = createState('question', {\r\n parse: (v) => (typeof v === 'string' ? v : ''),\r\n});\r\nconst optionsState = createState('options', {\r\n isEqual: (a, b) =>\r\n a.length === b.length && JSON.stringify(a) === JSON.stringify(b),\r\n parse: parseOptions,\r\n});\r\n\r\nexport class PollNode extends DecoratorNode<JSX.Element> {\r\n $config() {\r\n return this.config('poll', {\r\n extends: DecoratorNode,\r\n importDOM: buildImportMap({\r\n span: (domNode) =>\r\n domNode.getAttribute('data-lexical-poll-question') !== null\r\n ? {\r\n conversion: $convertPollElement,\r\n priority: 2,\r\n }\r\n : null,\r\n }),\r\n stateConfigs: [\r\n {flat: true, stateConfig: questionState},\r\n {flat: true, stateConfig: optionsState},\r\n ],\r\n });\r\n }\r\n\r\n getQuestion(): StateConfigValue<typeof questionState> {\r\n return $getState(this, questionState);\r\n }\r\n setQuestion(valueOrUpdater: StateValueOrUpdater<typeof questionState>): this {\r\n return $setState(this, questionState, valueOrUpdater);\r\n }\r\n getOptions(): StateConfigValue<typeof optionsState> {\r\n return $getState(this, optionsState);\r\n }\r\n setOptions(valueOrUpdater: StateValueOrUpdater<typeof optionsState>): this {\r\n return $setState(this, optionsState, valueOrUpdater);\r\n }\r\n\r\n addOption(option: Option): this {\r\n return this.setOptions((options) => [...options, option]);\r\n }\r\n\r\n deleteOption(option: Option): this {\r\n return this.setOptions((prevOptions) => {\r\n const index = prevOptions.indexOf(option);\r\n if (index === -1) {\r\n return prevOptions;\r\n }\r\n const options = Array.from(prevOptions);\r\n options.splice(index, 1);\r\n return options;\r\n });\r\n }\r\n\r\n setOptionText(option: Option, text: string): this {\r\n return this.setOptions((prevOptions) => {\r\n const clonedOption = cloneOption(option, text);\r\n const options = Array.from(prevOptions);\r\n const index = options.indexOf(option);\r\n options[index] = clonedOption;\r\n return options;\r\n });\r\n }\r\n\r\n toggleVote(option: Option, username: string): this {\r\n return this.setOptions((prevOptions) => {\r\n const index = prevOptions.indexOf(option);\r\n if (index === -1) {\r\n return prevOptions;\r\n }\r\n const votes = option.votes;\r\n const votesClone = Array.from(votes);\r\n const voteIndex = votes.indexOf(username);\r\n if (voteIndex === -1) {\r\n votesClone.push(username);\r\n } else {\r\n votesClone.splice(voteIndex, 1);\r\n }\r\n const clonedOption = cloneOption(option, option.text, votesClone);\r\n const options = Array.from(prevOptions);\r\n options[index] = clonedOption;\r\n return options;\r\n });\r\n }\r\n\r\n exportDOM(): DOMExportOutput {\r\n const element = document.createElement('span');\r\n element.setAttribute('data-lexical-poll-question', this.getQuestion());\r\n element.setAttribute(\r\n 'data-lexical-poll-options',\r\n JSON.stringify(this.getOptions()),\r\n );\r\n return {element};\r\n }\r\n\r\n createDOM(): HTMLElement {\r\n const elem = document.createElement('span');\r\n elem.style.display = 'inline-block';\r\n return elem;\r\n }\r\n\r\n updateDOM(): false {\r\n return false;\r\n }\r\n\r\n decorate(): JSX.Element {\r\n return (\r\n <PollComponent\r\n question={this.getQuestion()}\r\n options={this.getOptions()}\r\n nodeKey={this.__key}\r\n />\r\n );\r\n }\r\n}\r\n\r\nexport function $createPollNode(question: string, options: Options): PollNode {\r\n return new PollNode().setQuestion(question).setOptions(options);\r\n}\r\n\r\nexport function $isPollNode(\r\n node: LexicalNode | null | undefined,\r\n): node is PollNode {\r\n return node instanceof PollNode;\r\n}\r\n"],"mappings":"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","names":[]}