@team-monolith/cds 1.119.1 → 1.119.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 (383) hide show
  1. package/@types/emotion.d.ts +160 -160
  2. package/README.md +37 -37
  3. package/dist/CdsProvider.js +4 -4
  4. package/dist/components/AlertDialog/AlertDialog.js +54 -54
  5. package/dist/components/AlertDialog/AlertDialogActions.js +7 -7
  6. package/dist/components/AlertDialog/AlertDialogContent.js +8 -8
  7. package/dist/components/AlertDialog/AlertDialogTitle.js +34 -34
  8. package/dist/components/AnimatedButton.js +32 -32
  9. package/dist/components/Banner.js +51 -51
  10. package/dist/components/Book/Book.js +174 -174
  11. package/dist/components/Button.js +179 -179
  12. package/dist/components/CheckboxInput.js +148 -148
  13. package/dist/components/FileTypeAlertDialog.js +4 -4
  14. package/dist/components/Input.js +53 -53
  15. package/dist/components/InputBase.js +72 -72
  16. package/dist/components/Modal.js +4 -4
  17. package/dist/components/OverflowTooltip.js +4 -4
  18. package/dist/components/Pagination.js +56 -56
  19. package/dist/components/PinInput.js +64 -64
  20. package/dist/components/Popover.js +27 -27
  21. package/dist/components/RadioInput.js +73 -73
  22. package/dist/components/SquareButton.js +109 -109
  23. package/dist/components/Switch.js +69 -69
  24. package/dist/components/SwitchButton.js +107 -107
  25. package/dist/components/Tag.js +72 -72
  26. package/dist/components/Tooltip.js +19 -19
  27. package/dist/foundation/breakpoints.js +16 -16
  28. package/dist/icons/custom/colored/AiHelper.d.ts +1 -1
  29. package/dist/icons/custom/colored/AiHelper.js +1 -1
  30. package/dist/icons/custom/colored/AiQuizColor.d.ts +1 -1
  31. package/dist/icons/custom/colored/AiQuizColor.js +1 -1
  32. package/dist/icons/custom/colored/BadgeColor.d.ts +1 -1
  33. package/dist/icons/custom/colored/BadgeColor.js +1 -1
  34. package/dist/icons/custom/colored/BadgeGold.d.ts +1 -1
  35. package/dist/icons/custom/colored/BadgeGold.js +1 -1
  36. package/dist/icons/custom/colored/BadgeGreen.d.ts +1 -1
  37. package/dist/icons/custom/colored/BadgeGreen.js +1 -1
  38. package/dist/icons/custom/colored/BadgeSilver.d.ts +1 -1
  39. package/dist/icons/custom/colored/BadgeSilver.js +1 -1
  40. package/dist/icons/custom/colored/Basic.d.ts +1 -1
  41. package/dist/icons/custom/colored/Basic.js +1 -1
  42. package/dist/icons/custom/colored/BasicPlus.d.ts +1 -1
  43. package/dist/icons/custom/colored/BasicPlus.js +1 -1
  44. package/dist/icons/custom/colored/BoardColor.d.ts +1 -1
  45. package/dist/icons/custom/colored/BoardColor.js +1 -1
  46. package/dist/icons/custom/colored/CastCloudyColor.d.ts +1 -1
  47. package/dist/icons/custom/colored/CastCloudyColor.js +1 -1
  48. package/dist/icons/custom/colored/CastPartlyColor.d.ts +1 -1
  49. package/dist/icons/custom/colored/CastPartlyColor.js +1 -1
  50. package/dist/icons/custom/colored/CastRainbowColor.d.ts +1 -1
  51. package/dist/icons/custom/colored/CastRainbowColor.js +1 -1
  52. package/dist/icons/custom/colored/CastSunnyColor.d.ts +1 -1
  53. package/dist/icons/custom/colored/CastSunnyColor.js +1 -1
  54. package/dist/icons/custom/colored/ClapBronze.d.ts +1 -1
  55. package/dist/icons/custom/colored/ClapBronze.js +1 -1
  56. package/dist/icons/custom/colored/ClapGold.d.ts +1 -1
  57. package/dist/icons/custom/colored/ClapGold.js +1 -1
  58. package/dist/icons/custom/colored/ClapSilver.d.ts +1 -1
  59. package/dist/icons/custom/colored/ClapSilver.js +1 -1
  60. package/dist/icons/custom/colored/Class.d.ts +1 -1
  61. package/dist/icons/custom/colored/Class.js +1 -1
  62. package/dist/icons/custom/colored/CodapColor.d.ts +1 -1
  63. package/dist/icons/custom/colored/CodapColor.js +1 -1
  64. package/dist/icons/custom/colored/EbookColor.d.ts +1 -1
  65. package/dist/icons/custom/colored/EbookColor.js +1 -1
  66. package/dist/icons/custom/colored/EmbeddedColor.d.ts +1 -1
  67. package/dist/icons/custom/colored/EmbeddedColor.js +1 -1
  68. package/dist/icons/custom/colored/EmoClapColor.d.ts +1 -1
  69. package/dist/icons/custom/colored/EmoClapColor.js +1 -1
  70. package/dist/icons/custom/colored/EmoGoodColor.d.ts +1 -1
  71. package/dist/icons/custom/colored/EmoGoodColor.js +1 -1
  72. package/dist/icons/custom/colored/EmoGreatColor.d.ts +1 -1
  73. package/dist/icons/custom/colored/EmoGreatColor.js +1 -1
  74. package/dist/icons/custom/colored/EmoHeartColor.d.ts +1 -1
  75. package/dist/icons/custom/colored/EmoHeartColor.js +1 -1
  76. package/dist/icons/custom/colored/EmoHundredColor.d.ts +1 -1
  77. package/dist/icons/custom/colored/EmoHundredColor.js +1 -1
  78. package/dist/icons/custom/colored/EmoNeutralColor.d.ts +1 -1
  79. package/dist/icons/custom/colored/EmoNeutralColor.js +1 -1
  80. package/dist/icons/custom/colored/EmoStarsColor.d.ts +1 -1
  81. package/dist/icons/custom/colored/EmoStarsColor.js +1 -1
  82. package/dist/icons/custom/colored/EmoThumbupColor.d.ts +1 -1
  83. package/dist/icons/custom/colored/EmoThumbupColor.js +1 -1
  84. package/dist/icons/custom/colored/Empty.d.ts +1 -1
  85. package/dist/icons/custom/colored/Empty.js +1 -1
  86. package/dist/icons/custom/colored/EntryColor.d.ts +1 -1
  87. package/dist/icons/custom/colored/EntryColor.js +1 -1
  88. package/dist/icons/custom/colored/FilenameAllColor.d.ts +1 -1
  89. package/dist/icons/custom/colored/FilenameAllColor.js +1 -1
  90. package/dist/icons/custom/colored/FilenameDocColor.d.ts +1 -1
  91. package/dist/icons/custom/colored/FilenameDocColor.js +1 -1
  92. package/dist/icons/custom/colored/FilenameHwpColor.d.ts +1 -1
  93. package/dist/icons/custom/colored/FilenameHwpColor.js +1 -1
  94. package/dist/icons/custom/colored/FilenameImgColor.d.ts +1 -1
  95. package/dist/icons/custom/colored/FilenameImgColor.js +1 -1
  96. package/dist/icons/custom/colored/FilenameMp4Color.d.ts +1 -1
  97. package/dist/icons/custom/colored/FilenameMp4Color.js +1 -1
  98. package/dist/icons/custom/colored/FilenamePdfColor.d.ts +1 -1
  99. package/dist/icons/custom/colored/FilenamePdfColor.js +1 -1
  100. package/dist/icons/custom/colored/FilenamePptColor.d.ts +1 -1
  101. package/dist/icons/custom/colored/FilenamePptColor.js +1 -1
  102. package/dist/icons/custom/colored/FilenameXlsColor.d.ts +1 -1
  103. package/dist/icons/custom/colored/FilenameXlsColor.js +1 -1
  104. package/dist/icons/custom/colored/FilenameZipColor.d.ts +1 -1
  105. package/dist/icons/custom/colored/FilenameZipColor.js +1 -1
  106. package/dist/icons/custom/colored/Google.d.ts +1 -1
  107. package/dist/icons/custom/colored/Google.js +1 -1
  108. package/dist/icons/custom/colored/HandFill.d.ts +1 -1
  109. package/dist/icons/custom/colored/HandFill.js +1 -1
  110. package/dist/icons/custom/colored/JudgeColor.d.ts +1 -1
  111. package/dist/icons/custom/colored/JudgeColor.js +1 -1
  112. package/dist/icons/custom/colored/MakecodeColor.d.ts +1 -1
  113. package/dist/icons/custom/colored/MakecodeColor.js +1 -1
  114. package/dist/icons/custom/colored/Master.d.ts +1 -1
  115. package/dist/icons/custom/colored/Master.js +1 -1
  116. package/dist/icons/custom/colored/Material.d.ts +1 -1
  117. package/dist/icons/custom/colored/Material.js +1 -1
  118. package/dist/icons/custom/colored/MedalBronze.d.ts +1 -1
  119. package/dist/icons/custom/colored/MedalBronze.js +1 -1
  120. package/dist/icons/custom/colored/MedalGold.d.ts +1 -1
  121. package/dist/icons/custom/colored/MedalGold.js +1 -1
  122. package/dist/icons/custom/colored/MedalSilver.d.ts +1 -1
  123. package/dist/icons/custom/colored/MedalSilver.js +1 -1
  124. package/dist/icons/custom/colored/Pro.d.ts +1 -1
  125. package/dist/icons/custom/colored/Pro.js +1 -1
  126. package/dist/icons/custom/colored/Problem.d.ts +1 -1
  127. package/dist/icons/custom/colored/Problem.js +1 -1
  128. package/dist/icons/custom/colored/PythonColor.d.ts +1 -1
  129. package/dist/icons/custom/colored/PythonColor.js +1 -1
  130. package/dist/icons/custom/colored/QuizColor.d.ts +1 -1
  131. package/dist/icons/custom/colored/QuizColor.js +1 -1
  132. package/dist/icons/custom/colored/ResourceColor.d.ts +1 -1
  133. package/dist/icons/custom/colored/ResourceColor.js +1 -1
  134. package/dist/icons/custom/colored/ScratchColor.d.ts +1 -1
  135. package/dist/icons/custom/colored/ScratchColor.js +1 -1
  136. package/dist/icons/custom/colored/TypeHelper.d.ts +1 -1
  137. package/dist/icons/custom/colored/TypeHelper.js +1 -1
  138. package/dist/icons/custom/colored/Whale.d.ts +1 -1
  139. package/dist/icons/custom/colored/Whale.js +1 -1
  140. package/dist/icons/custom/colored/WorksheetColor.d.ts +1 -1
  141. package/dist/icons/custom/colored/WorksheetColor.js +1 -1
  142. package/dist/icons/custom/colored/ai-helper.svg +4 -4
  143. package/dist/icons/custom/colored/ai-quiz-color.svg +20 -20
  144. package/dist/icons/custom/colored/badge-color.svg +4 -4
  145. package/dist/icons/custom/colored/badge-gold.svg +11 -11
  146. package/dist/icons/custom/colored/badge-green.svg +11 -11
  147. package/dist/icons/custom/colored/badge-silver.svg +11 -11
  148. package/dist/icons/custom/colored/basic-plus.svg +31 -31
  149. package/dist/icons/custom/colored/basic.svg +3 -3
  150. package/dist/icons/custom/colored/board-color.svg +5 -5
  151. package/dist/icons/custom/colored/cast-cloudy-color.svg +6 -6
  152. package/dist/icons/custom/colored/cast-partly-color.svg +7 -7
  153. package/dist/icons/custom/colored/cast-rainbow-color.svg +13 -13
  154. package/dist/icons/custom/colored/cast-sunny-color.svg +4 -4
  155. package/dist/icons/custom/colored/clap-bronze.svg +8 -8
  156. package/dist/icons/custom/colored/clap-gold.svg +8 -8
  157. package/dist/icons/custom/colored/clap-silver.svg +8 -8
  158. package/dist/icons/custom/colored/class.svg +13 -13
  159. package/dist/icons/custom/colored/codap-color.svg +13 -13
  160. package/dist/icons/custom/colored/ebook-color.svg +5 -5
  161. package/dist/icons/custom/colored/embedded-color.svg +38 -38
  162. package/dist/icons/custom/colored/emo-clap-color.svg +252 -252
  163. package/dist/icons/custom/colored/emo-good-color.svg +68 -68
  164. package/dist/icons/custom/colored/emo-great-color.svg +67 -67
  165. package/dist/icons/custom/colored/emo-heart-color.svg +239 -239
  166. package/dist/icons/custom/colored/emo-hundred-color.svg +194 -194
  167. package/dist/icons/custom/colored/emo-neutral-color.svg +76 -76
  168. package/dist/icons/custom/colored/emo-stars-color.svg +121 -121
  169. package/dist/icons/custom/colored/emo-thumbup-color.svg +238 -238
  170. package/dist/icons/custom/colored/empty.svg +1 -1
  171. package/dist/icons/custom/colored/entry-color.svg +4 -4
  172. package/dist/icons/custom/colored/filename-all-color.svg +4 -4
  173. package/dist/icons/custom/colored/filename-doc-color.svg +5 -5
  174. package/dist/icons/custom/colored/filename-hwp-color.svg +6 -6
  175. package/dist/icons/custom/colored/filename-img-color.svg +6 -6
  176. package/dist/icons/custom/colored/filename-mp4-color.svg +5 -5
  177. package/dist/icons/custom/colored/filename-pdf-color.svg +12 -12
  178. package/dist/icons/custom/colored/filename-ppt-color.svg +6 -6
  179. package/dist/icons/custom/colored/filename-xls-color.svg +5 -5
  180. package/dist/icons/custom/colored/filename-zip-color.svg +5 -5
  181. package/dist/icons/custom/colored/google.svg +13 -13
  182. package/dist/icons/custom/colored/hand-fill.svg +4 -4
  183. package/dist/icons/custom/colored/judge-color.svg +6 -6
  184. package/dist/icons/custom/colored/makecode-color.svg +4 -4
  185. package/dist/icons/custom/colored/master.svg +12 -12
  186. package/dist/icons/custom/colored/material.svg +6 -6
  187. package/dist/icons/custom/colored/medal-bronze.svg +9 -9
  188. package/dist/icons/custom/colored/medal-gold.svg +9 -9
  189. package/dist/icons/custom/colored/medal-silver.svg +9 -9
  190. package/dist/icons/custom/colored/pro.svg +4 -4
  191. package/dist/icons/custom/colored/problem.svg +7 -7
  192. package/dist/icons/custom/colored/python-color.svg +4 -4
  193. package/dist/icons/custom/colored/quiz-color.svg +12 -12
  194. package/dist/icons/custom/colored/resource-color.svg +13 -13
  195. package/dist/icons/custom/colored/scratch-color.svg +6 -6
  196. package/dist/icons/custom/colored/type-helper.svg +9 -9
  197. package/dist/icons/custom/colored/whale.svg +7 -7
  198. package/dist/icons/custom/colored/worksheet-color.svg +5 -5
  199. package/dist/icons/custom/default/AiQuiz.d.ts +1 -1
  200. package/dist/icons/custom/default/AiQuiz.js +1 -1
  201. package/dist/icons/custom/default/Badge.d.ts +1 -1
  202. package/dist/icons/custom/default/Badge.js +1 -1
  203. package/dist/icons/custom/default/Board.d.ts +1 -1
  204. package/dist/icons/custom/default/Board.js +1 -1
  205. package/dist/icons/custom/default/CastCloudy.d.ts +1 -1
  206. package/dist/icons/custom/default/CastCloudy.js +1 -1
  207. package/dist/icons/custom/default/CastPartly.d.ts +1 -1
  208. package/dist/icons/custom/default/CastPartly.js +1 -1
  209. package/dist/icons/custom/default/CastRainbow.d.ts +1 -1
  210. package/dist/icons/custom/default/CastRainbow.js +1 -1
  211. package/dist/icons/custom/default/CastSunny.d.ts +1 -1
  212. package/dist/icons/custom/default/CastSunny.js +1 -1
  213. package/dist/icons/custom/default/Codap.d.ts +1 -1
  214. package/dist/icons/custom/default/Codap.js +1 -1
  215. package/dist/icons/custom/default/Ebook.d.ts +1 -1
  216. package/dist/icons/custom/default/Ebook.js +1 -1
  217. package/dist/icons/custom/default/Embedded.d.ts +1 -1
  218. package/dist/icons/custom/default/Embedded.js +1 -1
  219. package/dist/icons/custom/default/EmoClap.d.ts +1 -1
  220. package/dist/icons/custom/default/EmoClap.js +1 -1
  221. package/dist/icons/custom/default/EmoGood.d.ts +1 -1
  222. package/dist/icons/custom/default/EmoGood.js +1 -1
  223. package/dist/icons/custom/default/EmoGreat.d.ts +1 -1
  224. package/dist/icons/custom/default/EmoGreat.js +1 -1
  225. package/dist/icons/custom/default/EmoHeart.d.ts +1 -1
  226. package/dist/icons/custom/default/EmoHeart.js +1 -1
  227. package/dist/icons/custom/default/EmoHundred.d.ts +1 -1
  228. package/dist/icons/custom/default/EmoHundred.js +1 -1
  229. package/dist/icons/custom/default/EmoNeutral.d.ts +1 -1
  230. package/dist/icons/custom/default/EmoNeutral.js +1 -1
  231. package/dist/icons/custom/default/EmoStars.d.ts +1 -1
  232. package/dist/icons/custom/default/EmoStars.js +1 -1
  233. package/dist/icons/custom/default/EmoThumbup.d.ts +1 -1
  234. package/dist/icons/custom/default/EmoThumbup.js +1 -1
  235. package/dist/icons/custom/default/Entry.d.ts +1 -1
  236. package/dist/icons/custom/default/Entry.js +1 -1
  237. package/dist/icons/custom/default/Fab.d.ts +1 -1
  238. package/dist/icons/custom/default/Fab.js +1 -1
  239. package/dist/icons/custom/default/Grant.d.ts +1 -1
  240. package/dist/icons/custom/default/Grant.js +1 -1
  241. package/dist/icons/custom/default/GrantAlt.d.ts +1 -1
  242. package/dist/icons/custom/default/GrantAlt.js +1 -1
  243. package/dist/icons/custom/default/HandLine.d.ts +1 -1
  244. package/dist/icons/custom/default/HandLine.js +1 -1
  245. package/dist/icons/custom/default/Judge.d.ts +1 -1
  246. package/dist/icons/custom/default/Judge.js +1 -1
  247. package/dist/icons/custom/default/Makecode.d.ts +1 -1
  248. package/dist/icons/custom/default/Makecode.js +1 -1
  249. package/dist/icons/custom/default/Pdf.d.ts +1 -1
  250. package/dist/icons/custom/default/Pdf.js +1 -1
  251. package/dist/icons/custom/default/Python.d.ts +1 -1
  252. package/dist/icons/custom/default/Python.js +1 -1
  253. package/dist/icons/custom/default/Quiz.d.ts +1 -1
  254. package/dist/icons/custom/default/Quiz.js +1 -1
  255. package/dist/icons/custom/default/Resource.d.ts +1 -1
  256. package/dist/icons/custom/default/Resource.js +1 -1
  257. package/dist/icons/custom/default/Scratch.d.ts +1 -1
  258. package/dist/icons/custom/default/Scratch.js +1 -1
  259. package/dist/icons/custom/default/ScrollAlt.d.ts +1 -1
  260. package/dist/icons/custom/default/ScrollAlt.js +1 -1
  261. package/dist/icons/custom/default/ScrollFill.d.ts +1 -1
  262. package/dist/icons/custom/default/ScrollFill.js +1 -1
  263. package/dist/icons/custom/default/ScrollLine.d.ts +1 -1
  264. package/dist/icons/custom/default/ScrollLine.js +1 -1
  265. package/dist/icons/custom/default/Symbol.d.ts +1 -1
  266. package/dist/icons/custom/default/Symbol.js +1 -1
  267. package/dist/icons/custom/default/Worksheet.d.ts +1 -1
  268. package/dist/icons/custom/default/Worksheet.js +1 -1
  269. package/dist/icons/custom/default/ai-quiz.svg +8 -8
  270. package/dist/icons/custom/default/badge.svg +4 -4
  271. package/dist/icons/custom/default/board.svg +5 -5
  272. package/dist/icons/custom/default/cast-cloudy.svg +3 -3
  273. package/dist/icons/custom/default/cast-partly.svg +4 -4
  274. package/dist/icons/custom/default/cast-rainbow.svg +12 -12
  275. package/dist/icons/custom/default/cast-sunny.svg +3 -3
  276. package/dist/icons/custom/default/codap.svg +11 -11
  277. package/dist/icons/custom/default/ebook.svg +3 -3
  278. package/dist/icons/custom/default/embedded.svg +4 -4
  279. package/dist/icons/custom/default/emo-clap.svg +6 -6
  280. package/dist/icons/custom/default/emo-good.svg +12 -12
  281. package/dist/icons/custom/default/emo-great.svg +12 -12
  282. package/dist/icons/custom/default/emo-heart.svg +5 -5
  283. package/dist/icons/custom/default/emo-hundred.svg +3 -3
  284. package/dist/icons/custom/default/emo-neutral.svg +14 -14
  285. package/dist/icons/custom/default/emo-stars.svg +14 -14
  286. package/dist/icons/custom/default/emo-thumbup.svg +3 -3
  287. package/dist/icons/custom/default/entry.svg +4 -4
  288. package/dist/icons/custom/default/fab.svg +10 -10
  289. package/dist/icons/custom/default/grant-alt.svg +5 -5
  290. package/dist/icons/custom/default/grant.svg +4 -4
  291. package/dist/icons/custom/default/hand-line.svg +3 -3
  292. package/dist/icons/custom/default/judge.svg +3 -3
  293. package/dist/icons/custom/default/makecode.svg +5 -5
  294. package/dist/icons/custom/default/pdf.svg +3 -3
  295. package/dist/icons/custom/default/python.svg +7 -7
  296. package/dist/icons/custom/default/quiz.svg +4 -4
  297. package/dist/icons/custom/default/resource.svg +11 -11
  298. package/dist/icons/custom/default/scratch.svg +3 -3
  299. package/dist/icons/custom/default/scroll-alt.svg +5 -5
  300. package/dist/icons/custom/default/scroll-fill.svg +4 -4
  301. package/dist/icons/custom/default/scroll-line.svg +5 -5
  302. package/dist/icons/custom/default/symbol.svg +4 -4
  303. package/dist/icons/custom/default/worksheet.svg +4 -4
  304. package/dist/icons/custom/svgrColoredTemplate.js +27 -27
  305. package/dist/icons/custom/svgrDefaultTemplate.js +27 -27
  306. package/dist/patterns/Accordion.js +20 -20
  307. package/dist/patterns/Dropdown/DropdownItem/DropdownItem.js +60 -60
  308. package/dist/patterns/Dropdown/DropdownMenu/DropdownMenu.js +27 -27
  309. package/dist/patterns/Dropdown/DropdownMenu/style.js +19 -19
  310. package/dist/patterns/LexicalEditor/Plugins.js +38 -37
  311. package/dist/patterns/LexicalEditor/components/FileSelectInput.js +23 -23
  312. package/dist/patterns/LexicalEditor/components/InsertImageDialog/ImagePreview.js +4 -4
  313. package/dist/patterns/LexicalEditor/components/InsertImageDialog/InsertImageDialog.js +15 -15
  314. package/dist/patterns/LexicalEditor/components/InsertVideoDialog/InsertVideoDialog.js +17 -17
  315. package/dist/patterns/LexicalEditor/components/UploadFileDialog/UploadFileDialog.js +2 -2
  316. package/dist/patterns/LexicalEditor/hr.svg +3 -3
  317. package/dist/patterns/LexicalEditor/nodes/FileNode/FileComponent.js +44 -44
  318. package/dist/patterns/LexicalEditor/nodes/FileNode/FileDownloadButton.js +25 -25
  319. package/dist/patterns/LexicalEditor/nodes/ImageNode/ImageComponent.js +8 -8
  320. package/dist/patterns/LexicalEditor/nodes/ImageNode/ImageResizer.js +60 -60
  321. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/InputComponent.js +19 -19
  322. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SegmentedInput.js +49 -49
  323. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/FormSolution.js +7 -7
  324. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/SettingForm.js +73 -73
  325. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/SettingForm/TextTypeDropdown.js +5 -5
  326. package/dist/patterns/LexicalEditor/nodes/ProblemInputNode/TextInput.js +7 -7
  327. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxComponent.js +69 -69
  328. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxEdit.js +3 -3
  329. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectBox/SelectBoxView.js +15 -15
  330. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SelectComponent.js +28 -28
  331. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/FormSelection.js +54 -54
  332. package/dist/patterns/LexicalEditor/nodes/ProblemSelectNode/SettingForm/SettingForm.js +61 -61
  333. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/Evaluation.js +75 -75
  334. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormIconAndLabel.js +17 -17
  335. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormIconAndLabel/FormLabel.js +7 -7
  336. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/FormQuestion.js +28 -28
  337. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/Evaluation/SettingForm/SettingForm.js +52 -52
  338. package/dist/patterns/LexicalEditor/nodes/SelfEvaluationNode/EvaluationComponent/EvaluationComponent.js +7 -7
  339. package/dist/patterns/LexicalEditor/nodes/SheetInputNode/InputComponent.js +25 -25
  340. package/dist/patterns/LexicalEditor/nodes/SheetInputNode/SettingForm.js +53 -53
  341. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectBox/SelectBoxComponent.js +54 -54
  342. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectBox/SelectBoxView.js +5 -5
  343. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SelectComponent.js +21 -21
  344. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/FormSelection.js +42 -42
  345. package/dist/patterns/LexicalEditor/nodes/SheetSelectNode/SelectComponent/SettingForm/SettingForm.js +71 -71
  346. package/dist/patterns/LexicalEditor/nodes/VideoNode/VideoComponent.js +6 -6
  347. package/dist/patterns/LexicalEditor/nodes/index.d.ts +3 -0
  348. package/dist/patterns/LexicalEditor/nodes/index.js +3 -0
  349. package/dist/patterns/LexicalEditor/nodes/nodes.d.ts +4 -2
  350. package/dist/patterns/LexicalEditor/nodes/nodes.js +6 -0
  351. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleContainerNode.d.ts +32 -0
  352. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleContainerNode.js +131 -0
  353. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleContentNode.d.ts +23 -0
  354. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleContentNode.js +88 -0
  355. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleTitleNode.d.ts +24 -0
  356. package/dist/patterns/LexicalEditor/nodes/toggleNodes/ToggleTitleNode.js +105 -0
  357. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdder.js +51 -51
  358. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/ComponentAdderPlugin.js +11 -11
  359. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/menu.svg +7 -7
  360. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/plus.svg +2 -2
  361. package/dist/patterns/LexicalEditor/plugins/ComponentAdderPlugin/useContextMenuOptions.js +67 -2
  362. package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuItem.js +32 -32
  363. package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuList.js +32 -32
  364. package/dist/patterns/LexicalEditor/plugins/ComponentPickerMenuPlugin/ComponentPickerMenuPlugin.js +87 -25
  365. package/dist/patterns/LexicalEditor/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js +49 -49
  366. package/dist/patterns/LexicalEditor/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatPopup.js +36 -36
  367. package/dist/patterns/LexicalEditor/plugins/ParagraphPlaceholderPlugin/index.js +7 -7
  368. package/dist/patterns/LexicalEditor/plugins/TogglePlugin/index.d.ts +9 -0
  369. package/dist/patterns/LexicalEditor/plugins/TogglePlugin/index.js +146 -0
  370. package/dist/patterns/LexicalEditor/theme.d.ts +6 -0
  371. package/dist/patterns/LexicalEditor/theme.js +281 -243
  372. package/dist/patterns/LexicalEditor/utils/toggleUtils.d.ts +9 -0
  373. package/dist/patterns/LexicalEditor/utils/toggleUtils.js +18 -0
  374. package/dist/patterns/SegmentedControl/SegmentedControlButton.js +10 -10
  375. package/dist/patterns/SegmentedControl/SegmentedControlGroup.js +8 -8
  376. package/dist/patterns/SegmentedControl/SegmentedControlSquareButton.js +2 -2
  377. package/dist/patterns/Tabs.js +43 -43
  378. package/dist/patterns/ToggleButtonGroup/ToggleButton.js +40 -40
  379. package/dist/patterns/ToggleButtonGroup/ToggleButtonGroup.js +11 -11
  380. package/dist/utils/hover.js +12 -12
  381. package/dist/utils/reset.js +19 -19
  382. package/dist/utils/visuallyHidden.js +10 -10
  383. package/package.json +110 -110
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ // https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/plugins/CollapsiblePlugin/CollapsibleContainerNode.ts
9
+ // details, summary 구조의 타이틀(summary) 클릭 시 토글 기능의 방지를 위해
10
+ // CHROME 브라우저를 포함한 모든 브라우저에서 div 요소로 그려지도록 수정했습니다.
11
+ import { addClassNamesToElement } from "@lexical/utils";
12
+ import { $getSiblingCaret, $isElementNode, $rewindSiblingCaret, ElementNode, isHTMLElement, } from "lexical";
13
+ import { setDomHiddenUntilFound } from "../../utils/toggleUtils";
14
+ import { DATA_LEXICAL_TOGGLE_ICON_BUTTON } from "./ToggleTitleNode";
15
+ export function $convertToggleContainerElement(domNode) {
16
+ // open 속성이 없으면 기본값 false
17
+ const isOpen = "open" in domNode ? domNode.open : false;
18
+ const node = $createToggleContainerNode(isOpen);
19
+ return {
20
+ node,
21
+ };
22
+ }
23
+ export class ToggleContainerNode extends ElementNode {
24
+ constructor(open, key) {
25
+ super(key);
26
+ this.__open = open;
27
+ }
28
+ static getType() {
29
+ return "toggle-container";
30
+ }
31
+ static clone(node) {
32
+ return new ToggleContainerNode(node.__open, node.__key);
33
+ }
34
+ isShadowRoot() {
35
+ return true;
36
+ }
37
+ collapseAtStart(_selection) {
38
+ // Unwrap the ToggleContainerNode by replacing it with the children
39
+ // of its children (ToggleTitleNode, ToggleContentNode)
40
+ const nodesToInsert = [];
41
+ for (const child of this.getChildren()) {
42
+ if ($isElementNode(child)) {
43
+ nodesToInsert.push(...child.getChildren());
44
+ }
45
+ }
46
+ const caret = $rewindSiblingCaret($getSiblingCaret(this, "previous"));
47
+ caret.splice(1, nodesToInsert);
48
+ // Merge the first child of the ToggleTitleNode with the
49
+ // previous sibling of the ToggleContainerNode
50
+ if (nodesToInsert.length === 0)
51
+ return true;
52
+ const firstChild = nodesToInsert[0];
53
+ firstChild.selectStart().deleteCharacter(true);
54
+ return true;
55
+ }
56
+ // IS_CHROME 분기 제거
57
+ createDOM(config) {
58
+ const dom = document.createElement("div");
59
+ if (this.__open) {
60
+ dom.setAttribute("open", "");
61
+ }
62
+ addClassNamesToElement(dom, config.theme.toggle.container);
63
+ return dom;
64
+ }
65
+ // IS_CHROME 분기 제거
66
+ updateDOM(prevNode, dom) {
67
+ const currentOpen = this.__open;
68
+ if (prevNode.__open !== currentOpen) {
69
+ const contentDom = dom.children[1];
70
+ if (!isHTMLElement(contentDom)) {
71
+ throw new Error("Expected contentDom to be an HTMLElement");
72
+ }
73
+ if (currentOpen) {
74
+ dom.setAttribute("open", "");
75
+ contentDom.hidden = false;
76
+ }
77
+ else {
78
+ dom.removeAttribute("open");
79
+ setDomHiddenUntilFound(contentDom);
80
+ }
81
+ // 토글 버튼 클릭 또는 타이틀 영역의 엔터 키 입력으로 토글되는 경우
82
+ // ToggleTitleNode의 아이콘 버튼의 aria-expanded 속성 업데이트
83
+ const titleDom = dom.children[0];
84
+ if (!isHTMLElement(titleDom)) {
85
+ throw new Error("Expected titleDom to be an HTMLElement");
86
+ }
87
+ const iconButton = titleDom.querySelector(`[${DATA_LEXICAL_TOGGLE_ICON_BUTTON}]`);
88
+ if (iconButton) {
89
+ iconButton.setAttribute("aria-expanded", currentOpen.toString());
90
+ }
91
+ }
92
+ return false;
93
+ }
94
+ static importDOM() {
95
+ return {
96
+ details: (_domNode) => ({
97
+ conversion: $convertToggleContainerElement,
98
+ priority: 1,
99
+ }),
100
+ };
101
+ }
102
+ static importJSON(serializedNode) {
103
+ return $createToggleContainerNode(serializedNode.open).updateFromJSON(serializedNode);
104
+ }
105
+ // className 적용을 위한 editor 파라미터 추가
106
+ exportDOM(editor) {
107
+ const element = document.createElement("details");
108
+ addClassNamesToElement(element, editor._config.theme.toggle.container);
109
+ element.setAttribute("open", this.__open.toString());
110
+ return { element };
111
+ }
112
+ exportJSON() {
113
+ return Object.assign(Object.assign({}, super.exportJSON()), { open: this.__open });
114
+ }
115
+ setOpen(open) {
116
+ const writable = this.getWritable();
117
+ writable.__open = open;
118
+ }
119
+ getOpen() {
120
+ return this.getLatest().__open;
121
+ }
122
+ toggleOpen() {
123
+ this.setOpen(!this.getOpen());
124
+ }
125
+ }
126
+ export function $createToggleContainerNode(isOpen) {
127
+ return new ToggleContainerNode(isOpen);
128
+ }
129
+ export function $isToggleContainerNode(node) {
130
+ return node instanceof ToggleContainerNode;
131
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import { DOMConversionMap, DOMConversionOutput, DOMExportOutput, EditorConfig, ElementNode, LexicalEditor, LexicalNode, SerializedElementNode } from "lexical";
9
+ type SerializedToggleContentNode = SerializedElementNode;
10
+ export declare function $convertToggleContentElement(_domNode: HTMLElement): DOMConversionOutput | null;
11
+ export declare class ToggleContentNode extends ElementNode {
12
+ static getType(): string;
13
+ static clone(node: ToggleContentNode): ToggleContentNode;
14
+ createDOM(config: EditorConfig, editor: LexicalEditor): HTMLElement;
15
+ updateDOM(_prevNode: this, _dom: HTMLElement): boolean;
16
+ static importDOM(): DOMConversionMap | null;
17
+ exportDOM(editor: LexicalEditor): DOMExportOutput;
18
+ static importJSON(serializedNode: SerializedToggleContentNode): ToggleContentNode;
19
+ isShadowRoot(): boolean;
20
+ }
21
+ export declare function $createToggleContentNode(): ToggleContentNode;
22
+ export declare function $isToggleContentNode(node: LexicalNode | null | undefined): node is ToggleContentNode;
23
+ export {};
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ // https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/plugins/CollapsiblePlugin/CollapsibleContentNode.ts
9
+ import { addClassNamesToElement } from "@lexical/utils";
10
+ import { ElementNode, } from "lexical";
11
+ import { $isToggleContainerNode } from "./ToggleContainerNode";
12
+ import { domOnBeforeMatch, setDomHiddenUntilFound, } from "../../utils/toggleUtils";
13
+ const DATA_LEXICAL_TOGGLE_CONTENT = "data-lexical-toggle-content";
14
+ export function $convertToggleContentElement(_domNode) {
15
+ const node = $createToggleContentNode();
16
+ return {
17
+ node,
18
+ };
19
+ }
20
+ export class ToggleContentNode extends ElementNode {
21
+ static getType() {
22
+ return "toggle-content";
23
+ }
24
+ static clone(node) {
25
+ return new ToggleContentNode(node.__key);
26
+ }
27
+ // IS_CHROME 분기 제거
28
+ createDOM(config, editor) {
29
+ const dom = document.createElement("div");
30
+ addClassNamesToElement(dom, config.theme.toggle.content);
31
+ editor.getEditorState().read(() => {
32
+ const containerNode = this.getParentOrThrow();
33
+ if (!$isToggleContainerNode(containerNode)) {
34
+ throw new Error("Expected parent node to be a ToggleContainerNode");
35
+ }
36
+ if (!containerNode.__open) {
37
+ setDomHiddenUntilFound(dom);
38
+ }
39
+ });
40
+ domOnBeforeMatch(dom, () => {
41
+ editor.update(() => {
42
+ const containerNode = this.getParentOrThrow().getLatest();
43
+ if (!$isToggleContainerNode(containerNode)) {
44
+ throw new Error("Expected parent node to be a ToggleContainerNode");
45
+ }
46
+ if (!containerNode.__open) {
47
+ containerNode.toggleOpen();
48
+ }
49
+ });
50
+ });
51
+ return dom;
52
+ }
53
+ updateDOM(_prevNode, _dom) {
54
+ return false;
55
+ }
56
+ static importDOM() {
57
+ return {
58
+ div: (domNode) => {
59
+ if (!domNode.hasAttribute(DATA_LEXICAL_TOGGLE_CONTENT)) {
60
+ return null;
61
+ }
62
+ return {
63
+ conversion: $convertToggleContentElement,
64
+ priority: 2,
65
+ };
66
+ },
67
+ };
68
+ }
69
+ // className 적용을 위한 editor 파라미터 추가
70
+ exportDOM(editor) {
71
+ const element = document.createElement("div");
72
+ addClassNamesToElement(element, editor._config.theme.toggle.content);
73
+ element.setAttribute(DATA_LEXICAL_TOGGLE_CONTENT, "true");
74
+ return { element };
75
+ }
76
+ static importJSON(serializedNode) {
77
+ return $createToggleContentNode().updateFromJSON(serializedNode);
78
+ }
79
+ isShadowRoot() {
80
+ return true;
81
+ }
82
+ }
83
+ export function $createToggleContentNode() {
84
+ return new ToggleContentNode();
85
+ }
86
+ export function $isToggleContentNode(node) {
87
+ return node instanceof ToggleContentNode;
88
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import { DOMConversionOutput, EditorConfig, ElementNode, LexicalEditor, LexicalNode, RangeSelection } from "lexical";
9
+ export declare const DATA_LEXICAL_TOGGLE_ICON_BUTTON = "data-lexical-toggle-icon-button";
10
+ export declare function $convertToggleTitleElement(_domNode: HTMLElement): DOMConversionOutput | null;
11
+ /** @noInheritDoc */
12
+ export declare class ToggleTitleNode extends ElementNode {
13
+ /** @internal */
14
+ $config(): import("lexical").StaticNodeConfigRecord<"toggle-title", {
15
+ $transform(node: ToggleTitleNode): void;
16
+ extends: typeof ElementNode;
17
+ importDOM: import("lexical").DOMConversionMap<HTMLElement>;
18
+ }>;
19
+ createDOM(config: EditorConfig, editor: LexicalEditor): HTMLElement;
20
+ updateDOM(_prevNode: this, _dom: HTMLElement): boolean;
21
+ insertNewAfter(_: RangeSelection, restoreSelection?: boolean): ElementNode;
22
+ }
23
+ export declare function $createToggleTitleNode(): ToggleTitleNode;
24
+ export declare function $isToggleTitleNode(node: LexicalNode | null | undefined): node is ToggleTitleNode;
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ // https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/plugins/CollapsiblePlugin/CollapsibleTitleNode.ts
9
+ import { addClassNamesToElement } from "@lexical/utils";
10
+ import { $createParagraphNode, $isElementNode, buildImportMap, ElementNode, } from "lexical";
11
+ import { $isToggleContainerNode } from "./ToggleContainerNode";
12
+ import { $isToggleContentNode } from "./ToggleContentNode";
13
+ export const DATA_LEXICAL_TOGGLE_ICON_BUTTON = "data-lexical-toggle-icon-button";
14
+ export function $convertToggleTitleElement(_domNode) {
15
+ const node = $createToggleTitleNode();
16
+ return {
17
+ node,
18
+ };
19
+ }
20
+ /** @noInheritDoc */
21
+ export class ToggleTitleNode extends ElementNode {
22
+ /** @internal */
23
+ $config() {
24
+ return this.config("toggle-title", {
25
+ $transform(node) {
26
+ if (node.isEmpty()) {
27
+ node.remove();
28
+ }
29
+ },
30
+ extends: ElementNode,
31
+ importDOM: buildImportMap({
32
+ summary: () => ({
33
+ conversion: $convertToggleTitleElement,
34
+ priority: 1,
35
+ }),
36
+ }),
37
+ });
38
+ }
39
+ // IS_CHROME 분기를 제거하여 모든 브라우저에서 클릭 시 토글 이벤트를 수동으로 처리
40
+ createDOM(config, editor) {
41
+ const dom = document.createElement("summary");
42
+ addClassNamesToElement(dom, config.theme.toggle.title);
43
+ // 토글 동작을 아이콘 버튼에만 적용하도록 iconBtn 요소를 추가
44
+ const iconBtn = document.createElement("div");
45
+ addClassNamesToElement(iconBtn, config.theme.toggle.iconBtn);
46
+ iconBtn.setAttribute("aria-label", "Toggle content");
47
+ iconBtn.setAttribute("contenteditable", "false");
48
+ iconBtn.setAttribute(DATA_LEXICAL_TOGGLE_ICON_BUTTON, "true");
49
+ editor.getEditorState().read(() => {
50
+ const containerNode = this.getParent();
51
+ if ($isToggleContainerNode(containerNode)) {
52
+ iconBtn.setAttribute("aria-expanded", containerNode.getOpen().toString());
53
+ }
54
+ else {
55
+ iconBtn.setAttribute("aria-expanded", "false");
56
+ }
57
+ });
58
+ iconBtn.addEventListener("click", () => {
59
+ editor.update(() => {
60
+ const toggleContainer = this.getLatest().getParentOrThrow();
61
+ if (!$isToggleContainerNode(toggleContainer)) {
62
+ throw new Error("Expected parent node to be a ToggleContainerNode");
63
+ }
64
+ toggleContainer.toggleOpen();
65
+ });
66
+ });
67
+ dom.appendChild(iconBtn);
68
+ return dom;
69
+ }
70
+ updateDOM(_prevNode, _dom) {
71
+ return false;
72
+ }
73
+ insertNewAfter(_, restoreSelection = true) {
74
+ const containerNode = this.getParentOrThrow();
75
+ if (!$isToggleContainerNode(containerNode)) {
76
+ throw new Error("ToggleTitleNode expects to be child of ToggleContainerNode");
77
+ }
78
+ if (containerNode.getOpen()) {
79
+ const contentNode = this.getNextSibling();
80
+ if (!$isToggleContentNode(contentNode)) {
81
+ throw new Error("ToggleTitleNode expects to have ToggleContentNode sibling");
82
+ }
83
+ const firstChild = contentNode.getFirstChild();
84
+ if ($isElementNode(firstChild)) {
85
+ return firstChild;
86
+ }
87
+ else {
88
+ const paragraph = $createParagraphNode();
89
+ contentNode.append(paragraph);
90
+ return paragraph;
91
+ }
92
+ }
93
+ else {
94
+ const paragraph = $createParagraphNode();
95
+ containerNode.insertAfter(paragraph, restoreSelection);
96
+ return paragraph;
97
+ }
98
+ }
99
+ }
100
+ export function $createToggleTitleNode() {
101
+ return new ToggleTitleNode();
102
+ }
103
+ export function $isToggleTitleNode(node) {
104
+ return node instanceof ToggleTitleNode;
105
+ }
@@ -9,59 +9,59 @@ export const ComponentAdder = forwardRef(function ComponentAdder(props, ref) {
9
9
  const [editor] = useLexicalComposerContext();
10
10
  return (_jsxs(Container, { ref: ref, className: className, children: [_jsx(PlusContainer, { onClick: onPlusClick, children: editor._editable && _jsx(PlusIcon, {}) }), _jsx(MenuContainer, { draggable: true, onClick: onMenuClick, onDragStart: onMenuDragStart, onDragEnd: onMenuDragEnd, children: editor._editable && _jsx(MenuIcon, {}) })] }));
11
11
  });
12
- const Container = styled.div `
13
- display: flex;
14
- align-items: flex-start;
15
- gap: 3px;
16
-
17
- position: absolute;
18
- left: 0;
19
- top: 0;
20
- will-change: transform;
12
+ const Container = styled.div `
13
+ display: flex;
14
+ align-items: flex-start;
15
+ gap: 3px;
16
+
17
+ position: absolute;
18
+ left: 0;
19
+ top: 0;
20
+ will-change: transform;
21
21
  `;
22
- const PlusContainer = styled.div `
23
- display: flex;
24
- width: 26px;
25
- height: 26px;
26
- justify-content: center;
27
- align-items: center;
28
- border-radius: 5px;
29
- background: ${({ theme }) => theme.color.foreground.neutralAlt};
30
-
31
- cursor: pointer;
32
-
33
- &:hover {
34
- background-color: #eff2f5;
35
- }
22
+ const PlusContainer = styled.div `
23
+ display: flex;
24
+ width: 26px;
25
+ height: 26px;
26
+ justify-content: center;
27
+ align-items: center;
28
+ border-radius: 5px;
29
+ background: ${({ theme }) => theme.color.foreground.neutralAlt};
30
+
31
+ cursor: pointer;
32
+
33
+ &:hover {
34
+ background-color: #eff2f5;
35
+ }
36
36
  `;
37
- const PlusIcon = styled.div `
38
- width: 24px;
39
- height: 24px;
40
- // svg는 hover 이벤트를 path마다 받아서 불편함
41
- // Lexical에서 동일한 접근법을 사용하고 있음
42
- background-image: url(${plus});
37
+ const PlusIcon = styled.div `
38
+ width: 24px;
39
+ height: 24px;
40
+ // svg는 hover 이벤트를 path마다 받아서 불편함
41
+ // Lexical에서 동일한 접근법을 사용하고 있음
42
+ background-image: url(${plus});
43
43
  `;
44
- const MenuContainer = styled.div `
45
- display: flex;
46
- width: 26px;
47
- height: 26px;
48
- justify-content: center;
49
- align-items: center;
50
- border-radius: 5px;
51
- background: ${({ theme }) => theme.color.foreground.neutralAlt};
52
-
53
- cursor: grab;
54
-
55
- &:active {
56
- cursor: grabbing;
57
- }
58
-
59
- &:hover {
60
- background-color: #eff2f5;
61
- }
44
+ const MenuContainer = styled.div `
45
+ display: flex;
46
+ width: 26px;
47
+ height: 26px;
48
+ justify-content: center;
49
+ align-items: center;
50
+ border-radius: 5px;
51
+ background: ${({ theme }) => theme.color.foreground.neutralAlt};
52
+
53
+ cursor: grab;
54
+
55
+ &:active {
56
+ cursor: grabbing;
57
+ }
58
+
59
+ &:hover {
60
+ background-color: #eff2f5;
61
+ }
62
62
  `;
63
- const MenuIcon = styled.div `
64
- width: 24px;
65
- height: 24px;
66
- background-image: url(${menu});
63
+ const MenuIcon = styled.div `
64
+ width: 24px;
65
+ height: 24px;
66
+ background-image: url(${menu});
67
67
  `;
@@ -171,8 +171,8 @@ export function ComponentAdderPlugin(props) {
171
171
  editor.dispatchCommand(INSERT_VIDEO_COMMAND, props);
172
172
  }, shouldReset: true }), _jsx(UploadFileDialog, { open: fileOpen, onClose: () => setFileOpen(false), onChange: (props) => {
173
173
  editor.dispatchCommand(UPLOAD_FILE_COMMAND, props);
174
- } }), _jsx(LexicalNodeMenuPlugin, { nodeKey: nodeKey, anchorClassName: cssToClassName `
175
- z-index: ${ZINDEX.DIALOG + 1};
174
+ } }), _jsx(LexicalNodeMenuPlugin, { nodeKey: nodeKey, anchorClassName: cssToClassName `
175
+ z-index: ${ZINDEX.DIALOG + 1};
176
176
  `, options: filteredOptions, menuRenderFn: (anchorElementRef, { selectedIndex, selectOptionAndCleanUp, setHighlightedIndex }) => anchorElementRef.current && filteredOptions.length
177
177
  ? ReactDOM.createPortal(_jsx(ComponentPickerMenuList, { options: filteredOptions, selectedIndex: selectedIndex, selectOptionAndCleanUp: selectOptionAndCleanUp, setHighlightedIndex: setHighlightedIndex }), anchorElementRef.current)
178
178
  : null, onSelectOption: onSelectOption, onClose: () => {
@@ -262,13 +262,13 @@ export function ComponentAdderPlugin(props) {
262
262
  }));
263
263
  }), onMenuDragStart: onDragStart, onMenuDragEnd: onDragEnd }), _jsx(TargetLine, { ref: targetLineRef })] }), anchorElem)] }));
264
264
  }
265
- const TargetLine = styled.div `
266
- pointer-events: none;
267
- background: deepskyblue;
268
- height: 4px;
269
- position: absolute;
270
- left: 0;
271
- top: 0;
272
- opacity: 0;
273
- will-change: transform;
265
+ const TargetLine = styled.div `
266
+ pointer-events: none;
267
+ background: deepskyblue;
268
+ height: 4px;
269
+ position: absolute;
270
+ left: 0;
271
+ top: 0;
272
+ opacity: 0;
273
+ will-change: transform;
274
274
  `;
@@ -1,8 +1,8 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
- <path d="M9.41002 7.29999H9.40002" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
3
- <path d="M14.6 7.29999H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
4
- <path d="M9.31004 12H9.30005" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
5
- <path d="M14.6 12H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
6
- <path d="M9.41002 16.7H9.40002" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
7
- <path d="M14.6 16.7H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
+ <path d="M9.41002 7.29999H9.40002" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
3
+ <path d="M14.6 7.29999H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
4
+ <path d="M9.31004 12H9.30005" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
5
+ <path d="M14.6 12H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
6
+ <path d="M9.41002 16.7H9.40002" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
7
+ <path d="M14.6 16.7H14.59" stroke="#363636" stroke-width="2.6" stroke-linecap="round"/>
8
8
  </svg>
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
- <path d="M12 7V12M12 12V17M12 12H17M12 12H7" stroke="#363636" stroke-width="2" stroke-linecap="round"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
+ <path d="M12 7V12M12 12V17M12 12H17M12 12H7" stroke="#363636" stroke-width="2" stroke-linecap="round"/>
3
3
  </svg>
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  /**
3
3
  * Context Menu (:: 버튼)
4
4
  */
5
- import { $createParagraphNode, ParagraphNode, } from "lexical";
5
+ import { $createParagraphNode, $createTextNode, $isElementNode, ParagraphNode, } from "lexical";
6
6
  import { ComponentPickerOption, getBaseOptions, } from "../ComponentPickerMenuPlugin";
7
7
  import { $createHeadingNode, $createQuoteNode, HeadingNode, } from "@lexical/rich-text";
8
8
  import { $setBlocksType } from "@lexical/selection";
@@ -12,7 +12,8 @@ import { H1Icon, H2Icon, H3Icon, CloseFillIcon, ListUnorderedIcon, ListOrderedIc
12
12
  import { $isColoredQuoteNode, } from "../../nodes/ColoredQuoteNode";
13
13
  import { useTheme } from "@emotion/react";
14
14
  import { css } from "@emotion/css";
15
- import { $isFileNode, $isImageNode, $isVideoNode, $isProblemInputNode, } from "../../nodes";
15
+ import { $unwrapNode } from "@lexical/utils";
16
+ import { $isFileNode, $isImageNode, $isVideoNode, $isProblemInputNode, $isToggleContainerNode, $isToggleTitleNode, $isToggleContentNode, } from "../../nodes";
16
17
  import { $isProblemSelectNode, } from "../../nodes/ProblemSelectNode";
17
18
  import { $isSheetInputNode } from "../../nodes/SheetInputNode";
18
19
  import { $isSheetSelectNode, } from "../../nodes/SheetSelectNode";
@@ -163,6 +164,60 @@ function getListContextMenuOptions(editor, theme, node) {
163
164
  }),
164
165
  ];
165
166
  }
167
+ function convertToggleTitleToHeading(container, tag) {
168
+ const titleNode = container.getFirstChild();
169
+ if (!$isToggleTitleNode(titleNode)) {
170
+ return;
171
+ }
172
+ const contentNode = titleNode.getNextSibling();
173
+ if (!$isToggleContentNode(contentNode)) {
174
+ return;
175
+ }
176
+ const headingNode = $createHeadingNode(tag);
177
+ const nodesForHeading = titleNode
178
+ .getChildren()
179
+ .flatMap((child) => $isElementNode(child) ? child.getChildren() : [child]);
180
+ if (nodesForHeading.length > 0) {
181
+ headingNode.append(...nodesForHeading);
182
+ }
183
+ if (headingNode.getChildrenSize() === 0) {
184
+ headingNode.append($createTextNode(""));
185
+ }
186
+ titleNode.replace(headingNode);
187
+ $unwrapNode(contentNode);
188
+ $unwrapNode(container);
189
+ headingNode.selectStart();
190
+ }
191
+ function getToggleContextMenuOptions(editor, container) {
192
+ return [
193
+ ...[1, 2, 3].map((n) => {
194
+ const titleMap = {
195
+ 1: i18n.t("큰 제목", { context: "렉시컬 드롭다운 메뉴" }),
196
+ 2: i18n.t("중간 제목", { context: "렉시컬 드롭다운 메뉴" }),
197
+ 3: i18n.t("작은 제목", { context: "렉시컬 드롭다운 메뉴" }),
198
+ };
199
+ const iconMap = {
200
+ 1: _jsx(H1Icon, {}),
201
+ 2: _jsx(H2Icon, {}),
202
+ 3: _jsx(H3Icon, {}),
203
+ };
204
+ return new ComponentPickerOption(titleMap[n], {
205
+ icon: iconMap[n],
206
+ keywords: ["heading", "header", `h${n}`, titleMap[n]],
207
+ onSelect: () => editor.update(() => {
208
+ convertToggleTitleToHeading(container, `h${n}`);
209
+ }),
210
+ });
211
+ }),
212
+ new ComponentPickerOption(i18n.t("블록 삭제"), {
213
+ icon: _jsx(CloseFillIcon, {}),
214
+ keywords: [],
215
+ onSelect: () => {
216
+ container.remove();
217
+ },
218
+ }),
219
+ ];
220
+ }
166
221
  function getProblemInputContextMenuOptions(node) {
167
222
  return [
168
223
  new ComponentPickerOption(i18n.t("블록 삭제"), {
@@ -360,6 +415,16 @@ export function useContextMenuOptions(props) {
360
415
  else if (node instanceof ListNode || node instanceof ListItemNode) {
361
416
  return getListContextMenuOptions(editor, theme, node);
362
417
  }
418
+ else if ($isToggleContainerNode(node)) {
419
+ return getToggleContextMenuOptions(editor, node);
420
+ }
421
+ else if ($isToggleTitleNode(node) || $isToggleContentNode(node)) {
422
+ const parent = node.getParent();
423
+ if (parent && $isToggleContainerNode(parent)) {
424
+ return getToggleContextMenuOptions(editor, parent);
425
+ }
426
+ return [];
427
+ }
363
428
  else if ($isColoredQuoteNode(node)) {
364
429
  return getColoredQuoteContextMenuOptions(editor, theme, node);
365
430
  }