kempo-ui 0.4.20 → 0.4.21

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 (569) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/components/Chat.js +10 -10
  3. package/dist/components/CodeEditor.js +23 -24
  4. package/dist/components/ControlGroup.js +17 -0
  5. package/dist/components/HtmlEditor.js +105 -106
  6. package/dist/components/MarkdownEditor.js +49 -49
  7. package/dist/components/Pagination.js +11 -11
  8. package/dist/components/Table.js +1 -1
  9. package/dist/components/controls/AlignCenter.js +1 -0
  10. package/dist/components/controls/AlignJustify.js +1 -0
  11. package/dist/components/controls/AlignLeft.js +1 -0
  12. package/dist/components/controls/AlignRight.js +1 -0
  13. package/dist/components/controls/Bold.js +1 -0
  14. package/dist/components/controls/BulletList.js +1 -0
  15. package/dist/components/controls/ButtonControl.js +33 -0
  16. package/dist/components/controls/CharacterCount.js +4 -0
  17. package/dist/components/controls/ClearFormatting.js +1 -0
  18. package/dist/components/controls/CodeBlock.js +1 -0
  19. package/dist/components/controls/Control.js +12 -0
  20. package/dist/components/controls/CopyCode.js +1 -0
  21. package/dist/components/controls/CreateLink.js +1 -0
  22. package/dist/components/controls/EditorTheme.js +30 -0
  23. package/dist/components/controls/FindReplace.js +1 -0
  24. package/dist/components/controls/FoldAll.js +1 -0
  25. package/dist/components/controls/FontSize.js +8 -0
  26. package/dist/components/controls/FontSizeDecrease.js +1 -0
  27. package/dist/components/controls/FontSizeIncrease.js +1 -0
  28. package/dist/components/controls/FormatBlock.js +8 -0
  29. package/dist/components/controls/FormatCode.js +1 -0
  30. package/dist/components/controls/Fullscreen.js +1 -0
  31. package/dist/components/controls/InlineCode.js +1 -0
  32. package/dist/components/controls/InsertTable.js +1 -0
  33. package/dist/components/controls/Italic.js +1 -0
  34. package/dist/components/controls/Language.js +21 -0
  35. package/dist/components/controls/MdImage.js +23 -0
  36. package/dist/components/controls/MdLink.js +1 -0
  37. package/dist/components/controls/MdSpeechToText.js +10 -0
  38. package/dist/components/controls/MdTable.js +19 -0
  39. package/dist/components/controls/Menu.js +51 -0
  40. package/dist/components/controls/Minimap.js +1 -0
  41. package/dist/components/controls/Mode.js +1 -0
  42. package/dist/components/controls/NumberList.js +1 -0
  43. package/dist/components/controls/PgCount.js +1 -0
  44. package/dist/components/controls/PgFirst.js +1 -0
  45. package/dist/components/controls/PgGotoPage.js +15 -0
  46. package/dist/components/controls/PgItemsPerPage.js +12 -0
  47. package/dist/components/controls/PgLast.js +1 -0
  48. package/dist/components/controls/PgNext.js +1 -0
  49. package/dist/components/controls/PgPageInfo.js +3 -0
  50. package/dist/components/controls/PgPrev.js +1 -0
  51. package/dist/components/controls/Quote.js +1 -0
  52. package/dist/components/controls/Redo.js +1 -0
  53. package/dist/components/{htmlEditorControls/ControlSpacer.js → controls/Spacer.js} +5 -5
  54. package/dist/components/controls/Strikethrough.js +1 -0
  55. package/dist/components/controls/TcDeleteRecord.js +1 -0
  56. package/dist/components/controls/TcDeleteSelected.js +1 -0
  57. package/dist/components/controls/TcEdit.js +12 -0
  58. package/dist/components/controls/TcExportCsv.js +3 -0
  59. package/dist/components/controls/TcExportJson.js +3 -0
  60. package/dist/components/controls/TcFieldSortHide.js +21 -0
  61. package/dist/components/controls/TcFilters.js +34 -0
  62. package/dist/components/controls/TcFirstPage.js +1 -0
  63. package/dist/components/controls/TcHiddenCount.js +1 -0
  64. package/dist/components/controls/TcHide.js +1 -0
  65. package/dist/components/controls/TcLastPage.js +1 -0
  66. package/dist/components/controls/TcNextPage.js +1 -0
  67. package/dist/components/controls/TcPageSelect.js +9 -0
  68. package/dist/components/controls/TcPageSize.js +5 -0
  69. package/dist/components/controls/TcPrevPage.js +1 -0
  70. package/dist/components/controls/TcSearch.js +1 -0
  71. package/dist/components/controls/TcShowAll.js +1 -0
  72. package/dist/components/controls/TextBackgroundColor.js +26 -0
  73. package/dist/components/controls/TextColor.js +26 -0
  74. package/dist/components/controls/Underline.js +1 -0
  75. package/dist/components/controls/Undo.js +1 -0
  76. package/dist/components/controls/WordCount.js +4 -0
  77. package/dist/components/controls/WordWrap.js +1 -0
  78. package/docs/components/code-editor.html +69 -48
  79. package/docs/components/html-editor.html +70 -69
  80. package/docs/components/markdown-editor.html +59 -78
  81. package/docs/components/pagination.html +51 -51
  82. package/docs/components/tableControls.html +5 -5
  83. package/docs/components/tableCustomFields.html +3 -3
  84. package/docs/components/tableFetchRecords.html +13 -13
  85. package/docs/components/tableFieldSortHide.html +4 -4
  86. package/docs/components/tablePagination.html +13 -13
  87. package/docs/components/tablePlaceholder.html +3 -3
  88. package/docs/components/tableRecordEditing.html +4 -4
  89. package/docs/components/tableRecordFiltering.html +5 -5
  90. package/docs/components/tableRecordHiding.html +7 -7
  91. package/docs/components/tableRecordSearching.html +3 -3
  92. package/docs/components/tableRowControls.html +6 -6
  93. package/docs/components/tableServerSync.html +7 -7
  94. package/docs/src/components/Chat.js +10 -10
  95. package/docs/src/components/CodeEditor.js +23 -24
  96. package/docs/src/components/ControlGroup.js +17 -0
  97. package/docs/src/components/HtmlEditor.js +105 -106
  98. package/docs/src/components/MarkdownEditor.js +49 -49
  99. package/docs/src/components/Pagination.js +11 -11
  100. package/docs/src/components/Table.js +1 -1
  101. package/docs/src/components/controls/AlignCenter.js +1 -0
  102. package/docs/src/components/controls/AlignJustify.js +1 -0
  103. package/docs/src/components/controls/AlignLeft.js +1 -0
  104. package/docs/src/components/controls/AlignRight.js +1 -0
  105. package/docs/src/components/controls/Bold.js +1 -0
  106. package/docs/src/components/controls/BulletList.js +1 -0
  107. package/docs/src/components/controls/ButtonControl.js +33 -0
  108. package/docs/src/components/controls/CharacterCount.js +4 -0
  109. package/docs/src/components/controls/ClearFormatting.js +1 -0
  110. package/docs/src/components/controls/CodeBlock.js +1 -0
  111. package/docs/src/components/controls/Control.js +12 -0
  112. package/docs/src/components/controls/CopyCode.js +1 -0
  113. package/docs/src/components/controls/CreateLink.js +1 -0
  114. package/docs/src/components/controls/EditorTheme.js +30 -0
  115. package/docs/src/components/controls/FindReplace.js +1 -0
  116. package/docs/src/components/controls/FoldAll.js +1 -0
  117. package/docs/src/components/controls/FontSize.js +8 -0
  118. package/docs/src/components/controls/FontSizeDecrease.js +1 -0
  119. package/docs/src/components/controls/FontSizeIncrease.js +1 -0
  120. package/docs/src/components/controls/FormatBlock.js +8 -0
  121. package/docs/src/components/controls/FormatCode.js +1 -0
  122. package/docs/src/components/controls/Fullscreen.js +1 -0
  123. package/docs/src/components/controls/InlineCode.js +1 -0
  124. package/docs/src/components/controls/InsertTable.js +1 -0
  125. package/docs/src/components/controls/Italic.js +1 -0
  126. package/docs/src/components/controls/Language.js +21 -0
  127. package/docs/src/components/controls/MdImage.js +23 -0
  128. package/docs/src/components/controls/MdLink.js +1 -0
  129. package/docs/src/components/controls/MdSpeechToText.js +10 -0
  130. package/docs/src/components/controls/MdTable.js +19 -0
  131. package/docs/src/components/controls/Menu.js +51 -0
  132. package/docs/src/components/controls/Minimap.js +1 -0
  133. package/docs/src/components/controls/Mode.js +1 -0
  134. package/docs/src/components/controls/NumberList.js +1 -0
  135. package/docs/src/components/controls/PgCount.js +1 -0
  136. package/docs/src/components/controls/PgFirst.js +1 -0
  137. package/docs/src/components/controls/PgGotoPage.js +15 -0
  138. package/docs/src/components/controls/PgItemsPerPage.js +12 -0
  139. package/docs/src/components/controls/PgLast.js +1 -0
  140. package/docs/src/components/controls/PgNext.js +1 -0
  141. package/docs/src/components/controls/PgPageInfo.js +3 -0
  142. package/docs/src/components/controls/PgPrev.js +1 -0
  143. package/docs/src/components/controls/Quote.js +1 -0
  144. package/docs/src/components/controls/Redo.js +1 -0
  145. package/docs/src/components/{codeEditorControls/ControlSpacer.js → controls/Spacer.js} +5 -5
  146. package/docs/src/components/controls/Strikethrough.js +1 -0
  147. package/docs/src/components/controls/TcDeleteRecord.js +1 -0
  148. package/docs/src/components/controls/TcDeleteSelected.js +1 -0
  149. package/docs/src/components/controls/TcEdit.js +12 -0
  150. package/docs/src/components/controls/TcExportCsv.js +3 -0
  151. package/docs/src/components/controls/TcExportJson.js +3 -0
  152. package/docs/src/components/controls/TcFieldSortHide.js +21 -0
  153. package/docs/src/components/controls/TcFilters.js +34 -0
  154. package/docs/src/components/controls/TcFirstPage.js +1 -0
  155. package/docs/src/components/controls/TcHiddenCount.js +1 -0
  156. package/docs/src/components/controls/TcHide.js +1 -0
  157. package/docs/src/components/controls/TcLastPage.js +1 -0
  158. package/docs/src/components/controls/TcNextPage.js +1 -0
  159. package/docs/src/components/controls/TcPageSelect.js +9 -0
  160. package/docs/src/components/controls/TcPageSize.js +5 -0
  161. package/docs/src/components/controls/TcPrevPage.js +1 -0
  162. package/docs/src/components/controls/TcSearch.js +1 -0
  163. package/docs/src/components/controls/TcShowAll.js +1 -0
  164. package/docs/src/components/controls/TextBackgroundColor.js +26 -0
  165. package/docs/src/components/controls/TextColor.js +26 -0
  166. package/docs/src/components/controls/Underline.js +1 -0
  167. package/docs/src/components/controls/Undo.js +1 -0
  168. package/docs/src/components/controls/WordCount.js +4 -0
  169. package/docs/src/components/controls/WordWrap.js +1 -0
  170. package/docs-src/components/code-editor.page.html +69 -48
  171. package/docs-src/components/html-editor.page.html +70 -69
  172. package/docs-src/components/markdown-editor.page.html +59 -78
  173. package/docs-src/components/pagination.page.html +51 -51
  174. package/docs-src/components/tableControls.page.html +5 -5
  175. package/docs-src/components/tableCustomFields.page.html +3 -3
  176. package/docs-src/components/tableFetchRecords.page.html +13 -13
  177. package/docs-src/components/tableFieldSortHide.page.html +4 -4
  178. package/docs-src/components/tablePagination.page.html +13 -13
  179. package/docs-src/components/tablePlaceholder.page.html +3 -3
  180. package/docs-src/components/tableRecordEditing.page.html +4 -4
  181. package/docs-src/components/tableRecordFiltering.page.html +5 -5
  182. package/docs-src/components/tableRecordHiding.page.html +7 -7
  183. package/docs-src/components/tableRecordSearching.page.html +3 -3
  184. package/docs-src/components/tableRowControls.page.html +6 -6
  185. package/docs-src/components/tableServerSync.page.html +7 -7
  186. package/llms.txt +37 -3
  187. package/package.json +1 -1
  188. package/src/components/Chat.js +14 -14
  189. package/src/components/CodeEditor.js +26 -32
  190. package/src/components/{codeEditorControls/ControlGroup.js → ControlGroup.js} +10 -6
  191. package/src/components/HtmlEditor.js +107 -125
  192. package/src/components/MarkdownEditor.js +117 -59
  193. package/src/components/Pagination.js +18 -23
  194. package/src/components/Table.js +5 -0
  195. package/src/components/controls/AlignCenter.js +19 -0
  196. package/src/components/controls/AlignJustify.js +19 -0
  197. package/src/components/controls/AlignLeft.js +19 -0
  198. package/src/components/controls/AlignRight.js +19 -0
  199. package/src/components/controls/Bold.js +19 -0
  200. package/src/components/controls/BulletList.js +19 -0
  201. package/src/components/controls/ButtonControl.js +114 -0
  202. package/src/components/controls/CharacterCount.js +48 -0
  203. package/src/components/controls/ClearFormatting.js +19 -0
  204. package/src/components/controls/CodeBlock.js +27 -0
  205. package/src/components/controls/Control.js +176 -0
  206. package/src/components/controls/CopyCode.js +19 -0
  207. package/src/components/controls/CreateLink.js +63 -0
  208. package/src/components/controls/EditorTheme.js +71 -0
  209. package/src/components/controls/FindReplace.js +19 -0
  210. package/src/components/controls/FoldAll.js +35 -0
  211. package/src/components/controls/FontSize.js +31 -0
  212. package/src/components/controls/FontSizeDecrease.js +19 -0
  213. package/src/components/controls/FontSizeIncrease.js +19 -0
  214. package/src/components/controls/FormatBlock.js +64 -0
  215. package/src/components/controls/FormatCode.js +19 -0
  216. package/src/components/controls/Fullscreen.js +42 -0
  217. package/src/components/controls/InlineCode.js +19 -0
  218. package/src/components/controls/InsertTable.js +67 -0
  219. package/src/components/controls/Italic.js +19 -0
  220. package/src/components/controls/Language.js +69 -0
  221. package/src/components/controls/MdImage.js +72 -0
  222. package/src/components/controls/MdLink.js +60 -0
  223. package/src/components/controls/MdSpeechToText.js +46 -0
  224. package/src/components/controls/MdTable.js +79 -0
  225. package/src/components/controls/Menu.js +98 -0
  226. package/src/components/controls/Minimap.js +36 -0
  227. package/src/components/controls/Mode.js +30 -0
  228. package/src/components/controls/NumberList.js +19 -0
  229. package/src/components/controls/PgCount.js +12 -0
  230. package/src/components/controls/PgFirst.js +28 -0
  231. package/src/components/controls/PgGotoPage.js +48 -0
  232. package/src/components/controls/PgItemsPerPage.js +36 -0
  233. package/src/components/controls/PgLast.js +28 -0
  234. package/src/components/controls/PgNext.js +25 -0
  235. package/src/components/controls/PgPageInfo.js +22 -0
  236. package/src/components/controls/PgPrev.js +25 -0
  237. package/src/components/controls/Quote.js +19 -0
  238. package/src/components/controls/Redo.js +18 -0
  239. package/src/components/controls/Spacer.js +15 -0
  240. package/src/components/controls/Strikethrough.js +19 -0
  241. package/src/components/controls/TcDeleteRecord.js +30 -0
  242. package/src/components/controls/TcDeleteSelected.js +16 -0
  243. package/src/components/controls/TcEdit.js +73 -0
  244. package/src/components/controls/TcExportCsv.js +60 -0
  245. package/src/components/controls/TcExportJson.js +46 -0
  246. package/src/components/controls/TcFieldSortHide.js +56 -0
  247. package/src/components/controls/TcFilters.js +86 -0
  248. package/src/components/controls/TcFirstPage.js +24 -0
  249. package/src/components/controls/TcHiddenCount.js +39 -0
  250. package/src/components/controls/TcHide.js +30 -0
  251. package/src/components/controls/TcLastPage.js +24 -0
  252. package/src/components/controls/TcNextPage.js +24 -0
  253. package/src/components/controls/TcPageSelect.js +36 -0
  254. package/src/components/controls/TcPageSize.js +23 -0
  255. package/src/components/controls/TcPrevPage.js +24 -0
  256. package/src/components/controls/TcSearch.js +34 -0
  257. package/src/components/controls/TcShowAll.js +18 -0
  258. package/src/components/controls/TextBackgroundColor.js +84 -0
  259. package/src/components/controls/TextColor.js +84 -0
  260. package/src/components/controls/Underline.js +19 -0
  261. package/src/components/controls/Undo.js +18 -0
  262. package/src/components/controls/WordCount.js +48 -0
  263. package/src/components/controls/WordWrap.js +36 -0
  264. package/tasks/released/0007-code-editor-updates/branch-custom-controls.png +0 -0
  265. package/tasks/released/0007-code-editor-updates/branch-toolbar.png +0 -0
  266. package/tasks/released/0007-code-editor-updates/docs-overview.png +0 -0
  267. package/tasks/released/0007-code-editor-updates/form-integration.png +0 -0
  268. package/tasks/released/0007-code-editor-updates/live-builtin-controls.png +0 -0
  269. package/tasks/released/0007-code-editor-updates/live-custom-controls.png +0 -0
  270. package/tasks/released/0007-code-editor-updates/live-toolbar.png +0 -0
  271. package/tasks/released/0007-code-editor-updates/local-builtin-controls.png +0 -0
  272. package/tasks/released/0007-code-editor-updates/local-fixed-builtin.png +0 -0
  273. package/tasks/released/0007-code-editor-updates/theme-selector.png +0 -0
  274. package/tasks/released/0007-code-editor-updates.md +96 -0
  275. package/tests/components/CodeEditor.browser-test.js +0 -42
  276. package/tests/components/HtmlEditor.browser-test.js +0 -88
  277. package/tests/components/MarkdownEditor.browser-test.js +0 -72
  278. package/tests/components/Pagination.browser-test.js +12 -90
  279. package/tests/components/{htmlEditorControls → controls}/Align.browser-test.js +16 -16
  280. package/tests/components/{htmlEditorControls → controls}/Bold.browser-test.js +7 -7
  281. package/tests/components/{htmlEditorControls → controls}/BulletList.browser-test.js +7 -7
  282. package/tests/components/{htmlEditorControls → controls}/CharacterCount.browser-test.js +5 -5
  283. package/tests/components/{htmlEditorControls → controls}/ClearFormatting.browser-test.js +7 -7
  284. package/tests/components/{htmlEditorControls → controls}/CodeBlock.browser-test.js +8 -8
  285. package/tests/components/controls/Control.browser-test.js +147 -0
  286. package/tests/components/{htmlEditorControls → controls}/ControlGroup.browser-test.js +9 -9
  287. package/tests/components/{htmlEditorControls → controls}/ControlSpacer.browser-test.js +4 -4
  288. package/tests/components/{codeEditorControls → controls}/CopyCode.browser-test.js +8 -8
  289. package/tests/components/{htmlEditorControls → controls}/CreateLink.browser-test.js +7 -7
  290. package/tests/components/{htmlEditorControls → controls}/DropdownControl.browser-test.js +8 -8
  291. package/tests/components/{codeEditorControls → controls}/EditorTheme.browser-test.js +4 -4
  292. package/tests/components/{tableControls → controls}/ExportControls.browser-test.js +22 -46
  293. package/tests/components/{tableControls → controls}/FieldSortHide.browser-test.js +14 -26
  294. package/tests/components/{tableControls → controls}/Filters.browser-test.js +15 -27
  295. package/tests/components/{codeEditorControls → controls}/FindReplace.browser-test.js +8 -8
  296. package/tests/components/{codeEditorControls → controls}/FoldAll.browser-test.js +10 -10
  297. package/tests/components/{codeEditorControls → controls}/FontSize.browser-test.js +19 -14
  298. package/tests/components/{htmlEditorControls → controls}/FormatBlock.browser-test.js +9 -9
  299. package/tests/components/{htmlEditorControls → controls}/FormatCode.browser-test.js +17 -18
  300. package/tests/components/{codeEditorControls → controls}/Fullscreen.browser-test.js +11 -32
  301. package/tests/components/{tableControls → controls}/HiddenCount.browser-test.js +4 -4
  302. package/tests/components/{htmlEditorControls → controls}/InlineCode.browser-test.js +7 -7
  303. package/tests/components/{htmlEditorControls → controls}/InsertTable.browser-test.js +7 -7
  304. package/tests/components/{htmlEditorControls → controls}/Italic.browser-test.js +7 -7
  305. package/tests/components/{codeEditorControls → controls}/LanguageSelect.browser-test.js +4 -4
  306. package/tests/components/{codeEditorControls → controls}/Minimap.browser-test.js +8 -8
  307. package/tests/components/{htmlEditorControls → controls}/Mode.browser-test.js +7 -7
  308. package/tests/components/{codeEditorControls → controls}/ModeVisibility.browser-test.js +7 -7
  309. package/tests/components/{htmlEditorControls → controls}/NumberList.browser-test.js +7 -7
  310. package/tests/components/{tableControls → controls}/PaginationControls.browser-test.js +45 -45
  311. package/tests/components/{tableControls → controls}/RecordControls.browser-test.js +24 -60
  312. package/tests/components/{tableControls → controls}/Search.browser-test.js +4 -16
  313. package/tests/components/{htmlEditorControls → controls}/Strikethrough.browser-test.js +7 -7
  314. package/tests/components/{htmlEditorControls → controls}/TextBackgroundColor.browser-test.js +5 -5
  315. package/tests/components/{htmlEditorControls → controls}/TextColor.browser-test.js +5 -5
  316. package/tests/components/{htmlEditorControls → controls}/Underline.browser-test.js +7 -7
  317. package/tests/components/{codeEditorControls → controls}/UndoRedo.browser-test.js +15 -15
  318. package/tests/components/{htmlEditorControls → controls}/WordCount.browser-test.js +5 -5
  319. package/tests/components/{codeEditorControls → controls}/WordWrap.browser-test.js +8 -8
  320. package/dist/components/codeEditorControls/CodeEditorControl.js +0 -17
  321. package/dist/components/codeEditorControls/ControlGroup.js +0 -12
  322. package/dist/components/codeEditorControls/ControlSpacer.js +0 -6
  323. package/dist/components/codeEditorControls/CopyCode.js +0 -9
  324. package/dist/components/codeEditorControls/EditorTheme.js +0 -26
  325. package/dist/components/codeEditorControls/FindReplace.js +0 -7
  326. package/dist/components/codeEditorControls/FoldAll.js +0 -7
  327. package/dist/components/codeEditorControls/FontSize.js +0 -13
  328. package/dist/components/codeEditorControls/FormatCode.js +0 -9
  329. package/dist/components/codeEditorControls/Fullscreen.js +0 -12
  330. package/dist/components/codeEditorControls/LanguageSelect.js +0 -15
  331. package/dist/components/codeEditorControls/Minimap.js +0 -8
  332. package/dist/components/codeEditorControls/Redo.js +0 -7
  333. package/dist/components/codeEditorControls/Undo.js +0 -7
  334. package/dist/components/codeEditorControls/WordWrap.js +0 -8
  335. package/dist/components/htmlEditorControls/AlignCenter.js +0 -12
  336. package/dist/components/htmlEditorControls/AlignJustify.js +0 -12
  337. package/dist/components/htmlEditorControls/AlignLeft.js +0 -12
  338. package/dist/components/htmlEditorControls/AlignRight.js +0 -12
  339. package/dist/components/htmlEditorControls/Bold.js +0 -12
  340. package/dist/components/htmlEditorControls/BulletList.js +0 -12
  341. package/dist/components/htmlEditorControls/CharacterCount.js +0 -18
  342. package/dist/components/htmlEditorControls/ClearFormatting.js +0 -12
  343. package/dist/components/htmlEditorControls/CodeBlock.js +0 -12
  344. package/dist/components/htmlEditorControls/ControlGroup.js +0 -12
  345. package/dist/components/htmlEditorControls/CreateLink.js +0 -15
  346. package/dist/components/htmlEditorControls/DropdownControl.js +0 -57
  347. package/dist/components/htmlEditorControls/FormatBlock.js +0 -12
  348. package/dist/components/htmlEditorControls/FormatCode.js +0 -1
  349. package/dist/components/htmlEditorControls/HtmlEditorControl.js +0 -44
  350. package/dist/components/htmlEditorControls/InlineCode.js +0 -12
  351. package/dist/components/htmlEditorControls/InsertTable.js +0 -15
  352. package/dist/components/htmlEditorControls/Italic.js +0 -12
  353. package/dist/components/htmlEditorControls/Mode.js +0 -9
  354. package/dist/components/htmlEditorControls/NumberList.js +0 -12
  355. package/dist/components/htmlEditorControls/Strikethrough.js +0 -12
  356. package/dist/components/htmlEditorControls/TextBackgroundColor.js +0 -97
  357. package/dist/components/htmlEditorControls/TextColor.js +0 -97
  358. package/dist/components/htmlEditorControls/Underline.js +0 -12
  359. package/dist/components/htmlEditorControls/WordCount.js +0 -18
  360. package/dist/components/markdownEditorControls/Bold.js +0 -11
  361. package/dist/components/markdownEditorControls/BulletList.js +0 -11
  362. package/dist/components/markdownEditorControls/Code.js +0 -11
  363. package/dist/components/markdownEditorControls/FormatBlock.js +0 -30
  364. package/dist/components/markdownEditorControls/Heading.js +0 -11
  365. package/dist/components/markdownEditorControls/Image.js +0 -93
  366. package/dist/components/markdownEditorControls/Italic.js +0 -11
  367. package/dist/components/markdownEditorControls/Link.js +0 -11
  368. package/dist/components/markdownEditorControls/MarkdownEditorControl.js +0 -39
  369. package/dist/components/markdownEditorControls/Menu.js +0 -30
  370. package/dist/components/markdownEditorControls/NumberedList.js +0 -11
  371. package/dist/components/markdownEditorControls/Quote.js +0 -11
  372. package/dist/components/markdownEditorControls/SpeechToText.js +0 -16
  373. package/dist/components/markdownEditorControls/Strikethrough.js +0 -11
  374. package/dist/components/markdownEditorControls/Table.js +0 -80
  375. package/dist/components/paginationControls/FirstPage.js +0 -1
  376. package/dist/components/paginationControls/GotoPage.js +0 -17
  377. package/dist/components/paginationControls/ItemsPerPage.js +0 -15
  378. package/dist/components/paginationControls/LastPage.js +0 -1
  379. package/dist/components/paginationControls/NextPage.js +0 -1
  380. package/dist/components/paginationControls/PageCount.js +0 -1
  381. package/dist/components/paginationControls/PageInfo.js +0 -6
  382. package/dist/components/paginationControls/PaginationButtonControl.js +0 -20
  383. package/dist/components/paginationControls/PaginationControl.js +0 -5
  384. package/dist/components/paginationControls/PrevPage.js +0 -1
  385. package/dist/components/tableControls/DeleteRecord.js +0 -7
  386. package/dist/components/tableControls/DeleteSelected.js +0 -7
  387. package/dist/components/tableControls/Edit.js +0 -18
  388. package/dist/components/tableControls/ExportCSV.js +0 -8
  389. package/dist/components/tableControls/ExportJson.js +0 -8
  390. package/dist/components/tableControls/FieldSortHide.js +0 -25
  391. package/dist/components/tableControls/Filters.js +0 -46
  392. package/dist/components/tableControls/FirstPage.js +0 -9
  393. package/dist/components/tableControls/HiddenCount.js +0 -3
  394. package/dist/components/tableControls/Hide.js +0 -5
  395. package/dist/components/tableControls/LastPage.js +0 -9
  396. package/dist/components/tableControls/NextPage.js +0 -9
  397. package/dist/components/tableControls/PageSelect.js +0 -22
  398. package/dist/components/tableControls/PageSize.js +0 -5
  399. package/dist/components/tableControls/PrevPage.js +0 -9
  400. package/dist/components/tableControls/Search.js +0 -9
  401. package/dist/components/tableControls/ShowAll.js +0 -5
  402. package/dist/components/tableControls/TableControl.js +0 -16
  403. package/docs/src/components/codeEditorControls/CodeEditorControl.js +0 -17
  404. package/docs/src/components/codeEditorControls/ControlGroup.js +0 -12
  405. package/docs/src/components/codeEditorControls/CopyCode.js +0 -9
  406. package/docs/src/components/codeEditorControls/EditorTheme.js +0 -26
  407. package/docs/src/components/codeEditorControls/FindReplace.js +0 -7
  408. package/docs/src/components/codeEditorControls/FoldAll.js +0 -7
  409. package/docs/src/components/codeEditorControls/FontSize.js +0 -13
  410. package/docs/src/components/codeEditorControls/FormatCode.js +0 -9
  411. package/docs/src/components/codeEditorControls/Fullscreen.js +0 -12
  412. package/docs/src/components/codeEditorControls/LanguageSelect.js +0 -15
  413. package/docs/src/components/codeEditorControls/Minimap.js +0 -8
  414. package/docs/src/components/codeEditorControls/Redo.js +0 -7
  415. package/docs/src/components/codeEditorControls/Undo.js +0 -7
  416. package/docs/src/components/codeEditorControls/WordWrap.js +0 -8
  417. package/docs/src/components/htmlEditorControls/AlignCenter.js +0 -12
  418. package/docs/src/components/htmlEditorControls/AlignJustify.js +0 -12
  419. package/docs/src/components/htmlEditorControls/AlignLeft.js +0 -12
  420. package/docs/src/components/htmlEditorControls/AlignRight.js +0 -12
  421. package/docs/src/components/htmlEditorControls/Bold.js +0 -12
  422. package/docs/src/components/htmlEditorControls/BulletList.js +0 -12
  423. package/docs/src/components/htmlEditorControls/CharacterCount.js +0 -18
  424. package/docs/src/components/htmlEditorControls/ClearFormatting.js +0 -12
  425. package/docs/src/components/htmlEditorControls/CodeBlock.js +0 -12
  426. package/docs/src/components/htmlEditorControls/ControlGroup.js +0 -12
  427. package/docs/src/components/htmlEditorControls/ControlSpacer.js +0 -6
  428. package/docs/src/components/htmlEditorControls/CreateLink.js +0 -15
  429. package/docs/src/components/htmlEditorControls/DropdownControl.js +0 -57
  430. package/docs/src/components/htmlEditorControls/FormatBlock.js +0 -12
  431. package/docs/src/components/htmlEditorControls/FormatCode.js +0 -1
  432. package/docs/src/components/htmlEditorControls/HtmlEditorControl.js +0 -44
  433. package/docs/src/components/htmlEditorControls/InlineCode.js +0 -12
  434. package/docs/src/components/htmlEditorControls/InsertTable.js +0 -15
  435. package/docs/src/components/htmlEditorControls/Italic.js +0 -12
  436. package/docs/src/components/htmlEditorControls/Mode.js +0 -9
  437. package/docs/src/components/htmlEditorControls/NumberList.js +0 -12
  438. package/docs/src/components/htmlEditorControls/Strikethrough.js +0 -12
  439. package/docs/src/components/htmlEditorControls/TextBackgroundColor.js +0 -97
  440. package/docs/src/components/htmlEditorControls/TextColor.js +0 -97
  441. package/docs/src/components/htmlEditorControls/Underline.js +0 -12
  442. package/docs/src/components/htmlEditorControls/WordCount.js +0 -18
  443. package/docs/src/components/markdownEditorControls/Bold.js +0 -11
  444. package/docs/src/components/markdownEditorControls/BulletList.js +0 -11
  445. package/docs/src/components/markdownEditorControls/Code.js +0 -11
  446. package/docs/src/components/markdownEditorControls/FormatBlock.js +0 -30
  447. package/docs/src/components/markdownEditorControls/Heading.js +0 -11
  448. package/docs/src/components/markdownEditorControls/Image.js +0 -93
  449. package/docs/src/components/markdownEditorControls/Italic.js +0 -11
  450. package/docs/src/components/markdownEditorControls/Link.js +0 -11
  451. package/docs/src/components/markdownEditorControls/MarkdownEditorControl.js +0 -39
  452. package/docs/src/components/markdownEditorControls/Menu.js +0 -30
  453. package/docs/src/components/markdownEditorControls/NumberedList.js +0 -11
  454. package/docs/src/components/markdownEditorControls/Quote.js +0 -11
  455. package/docs/src/components/markdownEditorControls/SpeechToText.js +0 -16
  456. package/docs/src/components/markdownEditorControls/Strikethrough.js +0 -11
  457. package/docs/src/components/markdownEditorControls/Table.js +0 -80
  458. package/docs/src/components/paginationControls/FirstPage.js +0 -1
  459. package/docs/src/components/paginationControls/GotoPage.js +0 -17
  460. package/docs/src/components/paginationControls/ItemsPerPage.js +0 -15
  461. package/docs/src/components/paginationControls/LastPage.js +0 -1
  462. package/docs/src/components/paginationControls/NextPage.js +0 -1
  463. package/docs/src/components/paginationControls/PageCount.js +0 -1
  464. package/docs/src/components/paginationControls/PageInfo.js +0 -6
  465. package/docs/src/components/paginationControls/PaginationButtonControl.js +0 -20
  466. package/docs/src/components/paginationControls/PaginationControl.js +0 -5
  467. package/docs/src/components/paginationControls/PrevPage.js +0 -1
  468. package/docs/src/components/tableControls/DeleteRecord.js +0 -7
  469. package/docs/src/components/tableControls/DeleteSelected.js +0 -7
  470. package/docs/src/components/tableControls/Edit.js +0 -18
  471. package/docs/src/components/tableControls/ExportCSV.js +0 -8
  472. package/docs/src/components/tableControls/ExportJson.js +0 -8
  473. package/docs/src/components/tableControls/FieldSortHide.js +0 -25
  474. package/docs/src/components/tableControls/Filters.js +0 -46
  475. package/docs/src/components/tableControls/FirstPage.js +0 -9
  476. package/docs/src/components/tableControls/HiddenCount.js +0 -3
  477. package/docs/src/components/tableControls/Hide.js +0 -5
  478. package/docs/src/components/tableControls/LastPage.js +0 -9
  479. package/docs/src/components/tableControls/NextPage.js +0 -9
  480. package/docs/src/components/tableControls/PageSelect.js +0 -22
  481. package/docs/src/components/tableControls/PageSize.js +0 -5
  482. package/docs/src/components/tableControls/PrevPage.js +0 -9
  483. package/docs/src/components/tableControls/Search.js +0 -9
  484. package/docs/src/components/tableControls/ShowAll.js +0 -5
  485. package/docs/src/components/tableControls/TableControl.js +0 -16
  486. package/src/components/codeEditorControls/CodeEditorControl.js +0 -134
  487. package/src/components/codeEditorControls/ControlSpacer.js +0 -23
  488. package/src/components/codeEditorControls/CopyCode.js +0 -37
  489. package/src/components/codeEditorControls/EditorTheme.js +0 -81
  490. package/src/components/codeEditorControls/FindReplace.js +0 -35
  491. package/src/components/codeEditorControls/FoldAll.js +0 -49
  492. package/src/components/codeEditorControls/FontSize.js +0 -45
  493. package/src/components/codeEditorControls/FormatCode.js +0 -37
  494. package/src/components/codeEditorControls/Fullscreen.js +0 -72
  495. package/src/components/codeEditorControls/LanguageSelect.js +0 -74
  496. package/src/components/codeEditorControls/Minimap.js +0 -60
  497. package/src/components/codeEditorControls/Redo.js +0 -35
  498. package/src/components/codeEditorControls/Undo.js +0 -35
  499. package/src/components/codeEditorControls/WordWrap.js +0 -60
  500. package/src/components/htmlEditorControls/AlignCenter.js +0 -63
  501. package/src/components/htmlEditorControls/AlignJustify.js +0 -63
  502. package/src/components/htmlEditorControls/AlignLeft.js +0 -63
  503. package/src/components/htmlEditorControls/AlignRight.js +0 -63
  504. package/src/components/htmlEditorControls/Bold.js +0 -63
  505. package/src/components/htmlEditorControls/BulletList.js +0 -63
  506. package/src/components/htmlEditorControls/CharacterCount.js +0 -75
  507. package/src/components/htmlEditorControls/ClearFormatting.js +0 -63
  508. package/src/components/htmlEditorControls/CodeBlock.js +0 -64
  509. package/src/components/htmlEditorControls/ControlGroup.js +0 -70
  510. package/src/components/htmlEditorControls/ControlSpacer.js +0 -23
  511. package/src/components/htmlEditorControls/CreateLink.js +0 -115
  512. package/src/components/htmlEditorControls/DropdownControl.js +0 -149
  513. package/src/components/htmlEditorControls/FormatBlock.js +0 -106
  514. package/src/components/htmlEditorControls/FormatCode.js +0 -7
  515. package/src/components/htmlEditorControls/HtmlEditorControl.js +0 -164
  516. package/src/components/htmlEditorControls/InlineCode.js +0 -63
  517. package/src/components/htmlEditorControls/InsertTable.js +0 -126
  518. package/src/components/htmlEditorControls/Italic.js +0 -63
  519. package/src/components/htmlEditorControls/Mode.js +0 -68
  520. package/src/components/htmlEditorControls/NumberList.js +0 -63
  521. package/src/components/htmlEditorControls/Strikethrough.js +0 -63
  522. package/src/components/htmlEditorControls/TextBackgroundColor.js +0 -189
  523. package/src/components/htmlEditorControls/TextColor.js +0 -189
  524. package/src/components/htmlEditorControls/Underline.js +0 -63
  525. package/src/components/htmlEditorControls/WordCount.js +0 -76
  526. package/src/components/markdownEditorControls/Bold.js +0 -30
  527. package/src/components/markdownEditorControls/BulletList.js +0 -30
  528. package/src/components/markdownEditorControls/Code.js +0 -39
  529. package/src/components/markdownEditorControls/FormatBlock.js +0 -102
  530. package/src/components/markdownEditorControls/Heading.js +0 -46
  531. package/src/components/markdownEditorControls/Image.js +0 -250
  532. package/src/components/markdownEditorControls/Italic.js +0 -30
  533. package/src/components/markdownEditorControls/Link.js +0 -74
  534. package/src/components/markdownEditorControls/MarkdownEditorControl.js +0 -158
  535. package/src/components/markdownEditorControls/Menu.js +0 -86
  536. package/src/components/markdownEditorControls/NumberedList.js +0 -69
  537. package/src/components/markdownEditorControls/Quote.js +0 -30
  538. package/src/components/markdownEditorControls/SpeechToText.js +0 -65
  539. package/src/components/markdownEditorControls/Strikethrough.js +0 -35
  540. package/src/components/markdownEditorControls/Table.js +0 -165
  541. package/src/components/paginationControls/FirstPage.js +0 -26
  542. package/src/components/paginationControls/GotoPage.js +0 -56
  543. package/src/components/paginationControls/ItemsPerPage.js +0 -44
  544. package/src/components/paginationControls/LastPage.js +0 -26
  545. package/src/components/paginationControls/NextPage.js +0 -26
  546. package/src/components/paginationControls/PageCount.js +0 -10
  547. package/src/components/paginationControls/PageInfo.js +0 -23
  548. package/src/components/paginationControls/PaginationButtonControl.js +0 -76
  549. package/src/components/paginationControls/PaginationControl.js +0 -43
  550. package/src/components/paginationControls/PrevPage.js +0 -26
  551. package/src/components/tableControls/DeleteRecord.js +0 -29
  552. package/src/components/tableControls/DeleteSelected.js +0 -27
  553. package/src/components/tableControls/Edit.js +0 -86
  554. package/src/components/tableControls/ExportCSV.js +0 -71
  555. package/src/components/tableControls/ExportJson.js +0 -55
  556. package/src/components/tableControls/FieldSortHide.js +0 -76
  557. package/src/components/tableControls/Filters.js +0 -113
  558. package/src/components/tableControls/FirstPage.js +0 -65
  559. package/src/components/tableControls/HiddenCount.js +0 -43
  560. package/src/components/tableControls/Hide.js +0 -34
  561. package/src/components/tableControls/LastPage.js +0 -65
  562. package/src/components/tableControls/NextPage.js +0 -65
  563. package/src/components/tableControls/PageSelect.js +0 -101
  564. package/src/components/tableControls/PageSize.js +0 -68
  565. package/src/components/tableControls/PrevPage.js +0 -65
  566. package/src/components/tableControls/Search.js +0 -56
  567. package/src/components/tableControls/ShowAll.js +0 -34
  568. package/src/components/tableControls/TableControl.js +0 -103
  569. package/tests/components/tableControls/TableControl.browser-test.js +0 -300
@@ -1,4 +1,4 @@
1
- import{html as t,css as e,nothing as i}from"../lit-all.min.js";import l from"./ShadowComponent.js";import s from"../utils/renderMarkdown.js";import o,{STRIP_COMPLETELY as a}from"../utils/sanitizeHtml.js";import n from"../utils/debounce.js";import"./Resize.js";import"./Tabs.js";const r=Symbol(),d=Symbol(),h=Symbol(),m=Symbol();export default class c extends l{static formAssociated=!0;static properties={value:{type:String},name:{type:String,reflect:!0},placeholder:{type:String,reflect:!0},disabled:{type:Boolean,reflect:!0},required:{type:Boolean,reflect:!0},readonly:{type:Boolean,reflect:!0},mode:{type:String,reflect:!0},allowedTags:{type:String,reflect:!0,attribute:"allowed-tags"},disallowedTags:{type:String,reflect:!0,attribute:"disallowed-tags"},scriptsEnabled:{type:Boolean,reflect:!0,attribute:"scripts-enabled"},controls:{type:String,reflect:!0}};constructor(){super(),this.internals=this.attachInternals(),this.value="",this.name="",this.placeholder="",this.disabled=!1,this.required=!1,this.readonly=!1,this.mode="write",this.allowedTags="",this.disallowedTags="",this.scriptsEnabled=!1,this.controls="",this[r]="",this[d]=n(()=>this.handleChange(),300)}loadControls(){const t=this.constructor.controlModules[this.controls];if(!t?.length)return;const e=this.constructor.loadedModules,i=new URL("./markdownEditorControls/",import.meta.url).href;t.filter(t=>!e.has(t)).forEach(t=>{e.add(t),import(`${i}${t}.js`)})}connectedCallback(){super.connectedCallback(),this.hasAttribute("value")&&(this[r]=this.getAttribute("value")),!this.value&&this[r]&&(this.value=this[r])}updated(t){super.updated(t),t.has("value")&&this.internals.setFormValue(this.value),t.has("controls")&&this.controls&&"none"!==this.controls&&this.loadControls(),this[m]()}formResetCallback(){this.value=this[r],this.mode="write"}formStateRestoreCallback(t){"string"==typeof t&&(this.value=t)}formDisabledCallback(t){this.disabled=t}focus(){"write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{this.shadowRoot?.querySelector("textarea")?.focus()})}blur(){this.shadowRoot?.querySelector("textarea")?.blur()}clear(){this.value=""}setMode(t){"write"!==t&&"preview"!==t||(this.mode=t)}togglePreview(){this.mode="write"===this.mode?"preview":"write"}get textarea(){return this.shadowRoot?.querySelector("textarea")||null}getSelection(){const t=this.textarea;return t?{start:t.selectionStart,end:t.selectionEnd,text:t.value.substring(t.selectionStart,t.selectionEnd)}:{start:0,end:0,text:""}}replaceSelection(t,{selectInserted:e=!0}={}){const i=this.textarea;i&&("write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{i.focus();const{selectionStart:l,selectionEnd:s}=i,o=i.value.substring(0,l),a=i.value.substring(s),n=o+t+a;i.value=n;const r=l+t.length;i.selectionStart=e?l:r,i.selectionEnd=r,this.value=n,i.dispatchEvent(new Event("input",{bubbles:!0}))}))}wrapSelection(t,e=t,i=""){const l=this.textarea;l?("write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{l.focus();const{selectionStart:s,selectionEnd:o,value:a}=l,n=a.substring(s,o);if(n.length>=t.length+e.length&&n.startsWith(t)&&n.endsWith(e)){const i=n.slice(t.length,n.length-e.length),r=a.substring(0,s)+i+a.substring(o);return l.value=r,l.selectionStart=s,l.selectionEnd=s+i.length,this.value=r,void l.dispatchEvent(new Event("input",{bubbles:!0}))}const r=a.substring(Math.max(0,s-t.length),s),d=a.substring(o,Math.min(a.length,o+e.length));if(r===t&&d===e){const i=a.substring(0,s-t.length)+n+a.substring(o+e.length);return l.value=i,l.selectionStart=s-t.length,l.selectionEnd=l.selectionStart+n.length,this.value=i,void l.dispatchEvent(new Event("input",{bubbles:!0}))}const h=n||i,m=a.substring(0,s)+t+h+e+a.substring(o);l.value=m;const c=s+t.length;l.selectionStart=c,l.selectionEnd=c+h.length,this.value=m,l.dispatchEvent(new Event("input",{bubbles:!0}))})):this.replaceSelection(t+i+e)}insertAtCursor(t){this.replaceSelection(t,{selectInserted:!1})}replaceInSelectedLines(t,e=""){const i=this.textarea;i&&("write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{i.focus();const{selectionStart:l,selectionEnd:s,value:o}=i,a=o.lastIndexOf("\n",l-1)+1,n=o.indexOf("\n",s),r=-1===n?o.length:n,d=o.substring(a,r),h=d.split("\n").map(i=>i.replace(t,e)).join("\n");if(h===d)return;const m=o.substring(0,a)+h+o.substring(r);i.value=m,i.selectionStart=a,i.selectionEnd=a+h.length,this.value=m,i.dispatchEvent(new Event("input",{bubbles:!0}))}))}insertLinePrefix(t,e=null){const i=this.textarea;i&&("write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{i.focus();const{selectionStart:l,selectionEnd:s,value:o}=i,a=o.lastIndexOf("\n",l-1)+1,n=o.indexOf("\n",s),r=-1===n?o.length:n,d=o.substring(a,r).split("\n"),h=d.filter(t=>t.length>0),m=h.length>0&&h.every(e=>e.startsWith(t)),c=d.map(i=>0===i.length?i:m?i.startsWith(t)?i.slice(t.length):i:i.startsWith(t)?i:e&&e.test(i)?i.replace(e,t):t+i).join("\n"),u=o.substring(0,a)+c+o.substring(r);i.value=u,i.selectionStart=a,i.selectionEnd=a+c.length,this.value=u,i.dispatchEvent(new Event("input",{bubbles:!0}))}))}get isEmpty(){return!(this.value||"").trim()}get renderedHtml(){const t={},e=this[h];if(e&&(t.allowedTags=e),this.scriptsEnabled){const e=new Set(a);e.delete("SCRIPT"),t.stripCompletely=e}return o(s(this.value||""),t)}get[h](){const t=(this.allowedTags||"").trim(),e=(this.disallowedTags||"").trim();if(t&&e&&console.warn("[k-markdown-editor] `allowed-tags` and `disallowed-tags` are mutually exclusive; using `allowed-tags`."),t)return"*"===t?{has:()=>!0}:new Set(t.split(",").map(t=>t.trim().toUpperCase()).filter(Boolean));if(e){const t=new Set(e.split(",").map(t=>t.trim().toUpperCase()).filter(Boolean));return{has:e=>!t.has(e)}}return null}[m]=()=>{const t=this.shadowRoot?.querySelector("textarea");this.required&&this.isEmpty?this.internals.setValidity({valueMissing:!0},"Please fill out this field.",t):this.internals.setValidity({})};handleInput=t=>{this.value=t.target.value,this.dispatchEvent(new CustomEvent("input",{detail:{value:this.value},bubbles:!0})),this[d]()};handleChange=()=>{this.dispatchEvent(new CustomEvent("change",{detail:{value:this.value},bubbles:!0}))};handleTabChange=t=>{const e=t.detail?.tab;e&&e!==this.mode&&(this.mode=e,this.dispatchEvent(new CustomEvent("mode-change",{detail:{mode:e},bubbles:!0})))};render(){const e=this.constructor.controlSets[this.controls]??this.constructor.controlSets[""];return t`
1
+ import{html as t,css as e,nothing as i}from"../lit-all.min.js";import s from"./ShadowComponent.js";import l from"../utils/renderMarkdown.js";import o,{STRIP_COMPLETELY as n}from"../utils/sanitizeHtml.js";import a from"../utils/debounce.js";import r from"./controls/Control.js";import"./Resize.js";import"./Tabs.js";const c=Symbol(),h=Symbol(),d=Symbol(),u=Symbol();export default class b extends s{static formAssociated=!0;static properties={value:{type:String},name:{type:String,reflect:!0},placeholder:{type:String,reflect:!0},disabled:{type:Boolean,reflect:!0},required:{type:Boolean,reflect:!0},readonly:{type:Boolean,reflect:!0},mode:{type:String,reflect:!0},allowedTags:{type:String,reflect:!0,attribute:"allowed-tags"},disallowedTags:{type:String,reflect:!0,attribute:"disallowed-tags"},scriptsEnabled:{type:Boolean,reflect:!0,attribute:"scripts-enabled"},controls:{type:String,reflect:!0}};constructor(){super(),this.internals=this.attachInternals(),this.value="",this.name="",this.placeholder="",this.disabled=!1,this.required=!1,this.readonly=!1,this.mode="write",this.allowedTags="",this.disallowedTags="",this.scriptsEnabled=!1,this.controls="",this[c]="",this[h]=a(()=>this.handleChange(),300)}loadControls(){const t=this.constructor.controlSets[this.controls];t&&r.load(Object.values(t))}connectedCallback(){super.connectedCallback(),this.hasAttribute("controlled")||this.setAttribute("controlled",""),this.hasAttribute("value")&&(this[c]=this.getAttribute("value")),!this.value&&this[c]&&(this.value=this[c])}updated(t){super.updated(t),t.has("value")&&this.internals.setFormValue(this.value),t.has("controls")&&this.controls&&"none"!==this.controls&&this.loadControls(),this[u]()}formResetCallback(){this.value=this[c],this.mode="write"}formStateRestoreCallback(t){"string"==typeof t&&(this.value=t)}formDisabledCallback(t){this.disabled=t}focus(){"write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{this.shadowRoot?.querySelector("textarea")?.focus()})}blur(){this.shadowRoot?.querySelector("textarea")?.blur()}clear(){this.value=""}setMode(t){"write"!==t&&"preview"!==t||(this.mode=t)}togglePreview(){this.mode="write"===this.mode?"preview":"write"}get textarea(){return this.shadowRoot?.querySelector("textarea")||null}getSelection(){const t=this.textarea;return t?{start:t.selectionStart,end:t.selectionEnd,text:t.value.substring(t.selectionStart,t.selectionEnd)}:{start:0,end:0,text:""}}replaceSelection(t,{selectInserted:e=!0}={}){const i=this.textarea;i&&("write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{i.focus();const{selectionStart:s,selectionEnd:l}=i,o=i.value.substring(0,s),n=i.value.substring(l),a=o+t+n;i.value=a;const r=s+t.length;i.selectionStart=e?s:r,i.selectionEnd=r,this.value=a,i.dispatchEvent(new Event("input",{bubbles:!0}))}))}wrapSelection(t,e=t,i=""){const s=this.textarea;s?("write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{s.focus();const{selectionStart:l,selectionEnd:o,value:n}=s,a=n.substring(l,o);if(a.length>=t.length+e.length&&a.startsWith(t)&&a.endsWith(e)){const i=a.slice(t.length,a.length-e.length),r=n.substring(0,l)+i+n.substring(o);return s.value=r,s.selectionStart=l,s.selectionEnd=l+i.length,this.value=r,void s.dispatchEvent(new Event("input",{bubbles:!0}))}const r=n.substring(Math.max(0,l-t.length),l),c=n.substring(o,Math.min(n.length,o+e.length));if(r===t&&c===e){const i=n.substring(0,l-t.length)+a+n.substring(o+e.length);return s.value=i,s.selectionStart=l-t.length,s.selectionEnd=s.selectionStart+a.length,this.value=i,void s.dispatchEvent(new Event("input",{bubbles:!0}))}const h=a||i,d=n.substring(0,l)+t+h+e+n.substring(o);s.value=d;const u=l+t.length;s.selectionStart=u,s.selectionEnd=u+h.length,this.value=d,s.dispatchEvent(new Event("input",{bubbles:!0}))})):this.replaceSelection(t+i+e)}insertAtCursor(t){this.replaceSelection(t,{selectInserted:!1})}replaceInSelectedLines(t,e=""){const i=this.textarea;i&&("write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{i.focus();const{selectionStart:s,selectionEnd:l,value:o}=i,n=o.lastIndexOf("\n",s-1)+1,a=o.indexOf("\n",l),r=-1===a?o.length:a,c=o.substring(n,r),h=c.split("\n").map(i=>i.replace(t,e)).join("\n");if(h===c)return;const d=o.substring(0,n)+h+o.substring(r);i.value=d,i.selectionStart=n,i.selectionEnd=n+h.length,this.value=d,i.dispatchEvent(new Event("input",{bubbles:!0}))}))}insertLinePrefix(t,e=null){const i=this.textarea;i&&("write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{i.focus();const{selectionStart:s,selectionEnd:l,value:o}=i,n=o.lastIndexOf("\n",s-1)+1,a=o.indexOf("\n",l),r=-1===a?o.length:a,c=o.substring(n,r).split("\n"),h=c.filter(t=>t.length>0),d=h.length>0&&h.every(e=>e.startsWith(t)),u=c.map(i=>0===i.length?i:d?i.startsWith(t)?i.slice(t.length):i:i.startsWith(t)?i:e&&e.test(i)?i.replace(e,t):t+i).join("\n"),b=o.substring(0,n)+u+o.substring(r);i.value=b,i.selectionStart=n,i.selectionEnd=n+u.length,this.value=b,i.dispatchEvent(new Event("input",{bubbles:!0}))}))}bold(){return this.wrapSelection("**","**","bold text"),this}italic(){return this.wrapSelection("_","_","italic text"),this}strikethrough(){return this.wrapSelection("~~","~~","strikethrough"),this}inlineCode(){return this.getSelection().text.includes("\n")?this.wrapSelection("```\n","\n```","code"):this.wrapSelection("`","`","code"),this}quote(){return this.insertLinePrefix("> "),this}bulletList(){return this.insertLinePrefix("- "),this}numberList(){const t=this.textarea;return t?("write"!==this.mode&&(this.mode="write"),this.updateComplete.then(()=>{t.focus();const{selectionStart:e,selectionEnd:i,value:s}=t,l=s.lastIndexOf("\n",e-1)+1,o=s.indexOf("\n",i),n=-1===o?s.length:o,a=s.substring(l,n).split("\n"),r=/^\d+\. /,c=a.filter(t=>t.length>0);let h;if(c.length>0&&c.every(t=>r.test(t)))h=a.map(t=>t.replace(r,""));else{let t=1;h=a.map(e=>{if(!e)return e;const i=e.replace(r,"");return`${t++}. ${i}`})}const d=h.join("\n"),u=s.substring(0,l)+d+s.substring(n);t.value=u,t.selectionStart=l,t.selectionEnd=l+d.length,this.value=u,t.dispatchEvent(new Event("input",{bubbles:!0}))}),this):this}formatBlock(t){const e=(t||"").toLowerCase();if(/^h[1-6]$/.test(e)){const t=parseInt(e.slice(1),10);this.insertLinePrefix("#".repeat(t)+" ",/^#{1,6} /)}else"blockquote"===e?this.quote():"pre"===e&&this.wrapSelection("```\n","\n```","code");return this}get isEmpty(){return!(this.value||"").trim()}get renderedHtml(){const t={},e=this[d];if(e&&(t.allowedTags=e),this.scriptsEnabled){const e=new Set(n);e.delete("SCRIPT"),t.stripCompletely=e}return o(l(this.value||""),t)}get[d](){const t=(this.allowedTags||"").trim(),e=(this.disallowedTags||"").trim();if(t&&e&&console.warn("[k-markdown-editor] `allowed-tags` and `disallowed-tags` are mutually exclusive; using `allowed-tags`."),t)return"*"===t?{has:()=>!0}:new Set(t.split(",").map(t=>t.trim().toUpperCase()).filter(Boolean));if(e){const t=new Set(e.split(",").map(t=>t.trim().toUpperCase()).filter(Boolean));return{has:e=>!t.has(e)}}return null}[u]=()=>{const t=this.shadowRoot?.querySelector("textarea");this.required&&this.isEmpty?this.internals.setValidity({valueMissing:!0},"Please fill out this field.",t):this.internals.setValidity({})};handleInput=t=>{this.value=t.target.value,this.dispatchEvent(new CustomEvent("input",{detail:{value:this.value},bubbles:!0})),this[h]()};handleChange=()=>{this.dispatchEvent(new CustomEvent("change",{detail:{value:this.value},bubbles:!0}))};handleTabChange=t=>{const e=t.detail?.tab;e&&e!==this.mode&&(this.mode=e,this.dispatchEvent(new CustomEvent("mode-changed",{detail:{mode:e},bubbles:!0})))};render(){const e=this.constructor.controlSets[this.controls]??this.constructor.controlSets[""];return t`
2
2
  <k-resize dimension="height" ?disabled=${this.disabled}>
3
3
  <div class="frame">
4
4
  <k-tabs fixed-height active=${this.mode} @tab=${this.handleTabChange}>
@@ -120,53 +120,53 @@ import{html as t,css as e,nothing as i}from"../lit-all.min.js";import l from"./S
120
120
  .footer:not(:has(::slotted(*))) {
121
121
  display: none;
122
122
  }
123
- `;static loadedModules=new Set;static controlModules={minimal:["Menu","FormatBlock","Bold","Italic","BulletList","NumberedList"],normal:["Menu","FormatBlock","Bold","Italic","Quote","Code","Link","BulletList","NumberedList"],full:["Menu","FormatBlock","Bold","Italic","Strikethrough","Quote","Code","Link","Image","Table","BulletList","NumberedList","SpeechToText"]};static controlSets={"":{top:null,bottom:null},none:{top:null,bottom:null},minimal:{top:t`
124
- <k-md-menu label="Heading">
125
- <k-icon slot="trigger" name="text_fields"></k-icon>
126
- <k-md-format-block tag="h1"></k-md-format-block>
127
- <k-md-format-block tag="h3"></k-md-format-block>
128
- <k-md-format-block tag="h5"></k-md-format-block>
129
- </k-md-menu>
130
- <k-md-bold></k-md-bold>
131
- <k-md-italic></k-md-italic>
132
- <k-md-bullet-list></k-md-bullet-list>
133
- <k-md-numbered-list></k-md-numbered-list>
123
+ `;static controlSets={"":{top:null,bottom:null},none:{top:null,bottom:null},minimal:{top:t`
124
+ <kc-menu>
125
+ <k-icon slot="icon" name="text_fields"></k-icon>
126
+ <kc-format-block tag="h1"></kc-format-block>
127
+ <kc-format-block tag="h3"></kc-format-block>
128
+ <kc-format-block tag="h5"></kc-format-block>
129
+ </kc-menu>
130
+ <kc-bold></kc-bold>
131
+ <kc-italic></kc-italic>
132
+ <kc-bullet-list></kc-bullet-list>
133
+ <kc-number-list></kc-number-list>
134
134
  `,bottom:null},normal:{top:t`
135
- <k-md-menu label="Heading">
136
- <k-icon slot="trigger" name="text_fields"></k-icon>
137
- <k-md-format-block tag="h1"></k-md-format-block>
138
- <k-md-format-block tag="h2"></k-md-format-block>
139
- <k-md-format-block tag="h3"></k-md-format-block>
140
- <k-md-format-block tag="h4"></k-md-format-block>
141
- <k-md-format-block tag="h5"></k-md-format-block>
142
- <k-md-format-block tag="h6"></k-md-format-block>
143
- </k-md-menu>
144
- <k-md-bold></k-md-bold>
145
- <k-md-italic></k-md-italic>
146
- <k-md-quote></k-md-quote>
147
- <k-md-code></k-md-code>
148
- <k-md-link></k-md-link>
149
- <k-md-bullet-list></k-md-bullet-list>
150
- <k-md-numbered-list></k-md-numbered-list>
135
+ <kc-menu>
136
+ <k-icon slot="icon" name="text_fields"></k-icon>
137
+ <kc-format-block tag="h1"></kc-format-block>
138
+ <kc-format-block tag="h2"></kc-format-block>
139
+ <kc-format-block tag="h3"></kc-format-block>
140
+ <kc-format-block tag="h4"></kc-format-block>
141
+ <kc-format-block tag="h5"></kc-format-block>
142
+ <kc-format-block tag="h6"></kc-format-block>
143
+ </kc-menu>
144
+ <kc-bold></kc-bold>
145
+ <kc-italic></kc-italic>
146
+ <kc-quote></kc-quote>
147
+ <kc-inline-code></kc-inline-code>
148
+ <kc-md-link></kc-md-link>
149
+ <kc-bullet-list></kc-bullet-list>
150
+ <kc-number-list></kc-number-list>
151
151
  `,bottom:null},full:{top:t`
152
- <k-md-menu label="Heading">
153
- <k-icon slot="trigger" name="text_fields"></k-icon>
154
- <k-md-format-block tag="h1"></k-md-format-block>
155
- <k-md-format-block tag="h2"></k-md-format-block>
156
- <k-md-format-block tag="h3"></k-md-format-block>
157
- <k-md-format-block tag="h4"></k-md-format-block>
158
- <k-md-format-block tag="h5"></k-md-format-block>
159
- <k-md-format-block tag="h6"></k-md-format-block>
160
- </k-md-menu>
161
- <k-md-bold></k-md-bold>
162
- <k-md-italic></k-md-italic>
163
- <k-md-strikethrough></k-md-strikethrough>
164
- <k-md-quote></k-md-quote>
165
- <k-md-code></k-md-code>
166
- <k-md-link></k-md-link>
167
- <k-md-image></k-md-image>
168
- <k-md-table></k-md-table>
169
- <k-md-bullet-list></k-md-bullet-list>
170
- <k-md-numbered-list></k-md-numbered-list>
171
- <k-md-speech-to-text></k-md-speech-to-text>
172
- `,bottom:null}}}customElements.define("k-markdown-editor",c);
152
+ <kc-menu>
153
+ <k-icon slot="icon" name="text_fields"></k-icon>
154
+ <kc-format-block tag="h1"></kc-format-block>
155
+ <kc-format-block tag="h2"></kc-format-block>
156
+ <kc-format-block tag="h3"></kc-format-block>
157
+ <kc-format-block tag="h4"></kc-format-block>
158
+ <kc-format-block tag="h5"></kc-format-block>
159
+ <kc-format-block tag="h6"></kc-format-block>
160
+ </kc-menu>
161
+ <kc-bold></kc-bold>
162
+ <kc-italic></kc-italic>
163
+ <kc-strikethrough></kc-strikethrough>
164
+ <kc-quote></kc-quote>
165
+ <kc-inline-code></kc-inline-code>
166
+ <kc-md-link></kc-md-link>
167
+ <kc-md-image></kc-md-image>
168
+ <kc-md-table></kc-md-table>
169
+ <kc-bullet-list></kc-bullet-list>
170
+ <kc-number-list></kc-number-list>
171
+ <kc-md-speech-to-text></kc-md-speech-to-text>
172
+ `,bottom:null}}}customElements.define("k-markdown-editor",b);
@@ -1,4 +1,4 @@
1
- import{html as t,css as e,nothing as s}from"../lit-all.min.js";import a from"./ShadowComponent.js";import{bound as i,closest as r}from"../utils/number.js";import{commaSeparatedArray as o}from"../utils/propConverters.js";export default class l extends a{static properties={page:{type:Number,reflect:!0,attribute:"page"},totalItems:{type:Number,reflect:!0,attribute:"total-items"},itemsPerPage:{type:Number,reflect:!0,attribute:"items-per-page"},controls:{type:String,reflect:!0},pageSizes:{converter:o(t=>{const e=parseInt(t);return isNaN(e)?null:e},[5,10,25,50,100]),reflect:!0,attribute:"page-sizes"}};constructor(){super(),this.page=1,this.totalItems=0,this.itemsPerPage=10,this.pageSizes=[5,10,25,50,100],this.controls=""}loadControls(){const t=this.constructor.controlModules[this.controls];if(!t?.length)return;const e=this.constructor.loadedModules,s=new URL("./paginationControls/",import.meta.url).href;t.filter(t=>!e.has(t)).forEach(t=>{e.add(t),import(`${s}${t}.js`)})}willUpdate(t){t.forEach((t,e)=>{const s=this[e];switch(e){case"pageSizes":void 0===s?this.pageSizes=[5,10,25,50,100]:this.itemsPerPage=r(this.itemsPerPage,this.pageSizes);break;case"itemsPerPage":void 0===s?this.itemsPerPage=this.pageSizes?.[0]||10:(this.itemsPerPage=r(this.itemsPerPage,this.pageSizes),void 0!==t&&(this.page=Math.ceil(((this.page-1)*t+1)/this.itemsPerPage)));break;case"totalItems":if(void 0===s)this.totalItems=0;else{const t=Math.max(1,Math.ceil(this.totalItems/this.itemsPerPage));this.page>t&&(this.page=t)}break;case"page":if(void 0===s)this.page=1;else{const t=i(this.page,1,this.totalPages);t!==this.page&&(this.page=t)}break;case"controls":void 0===s&&(this.controls="")}})}updated(t){super.updated(t);(t.has("page")&&void 0!==t.get("page")||t.has("itemsPerPage")&&void 0!==t.get("itemsPerPage"))&&this.dispatchEvent(new CustomEvent("page-change",{detail:{currentPage:this.page,totalPages:this.totalPages,itemsPerPage:this.itemsPerPage,totalItems:this.totalItems},bubbles:!0})),t.has("controls")&&this.controls&&"none"!==this.controls&&this.loadControls()}get totalPages(){return this.totalItems&&this.itemsPerPage?Math.ceil(this.totalItems/this.itemsPerPage):1}nextPage(){this.page=i(this.page+1,1,this.totalPages)}previousPage(){this.page=i(this.page-1,1,this.totalPages)}render(){const e=this.constructor.controlSets[this.controls];return t`
1
+ import{html as t,css as e,nothing as s}from"../lit-all.min.js";import a from"./ShadowComponent.js";import{bound as i,closest as r}from"../utils/number.js";import{commaSeparatedArray as o}from"../utils/propConverters.js";import l from"./controls/Control.js";export default class g extends a{static properties={page:{type:Number,reflect:!0,attribute:"page"},totalItems:{type:Number,reflect:!0,attribute:"total-items"},itemsPerPage:{type:Number,reflect:!0,attribute:"items-per-page"},controls:{type:String,reflect:!0},pageSizes:{converter:o(t=>{const e=parseInt(t);return isNaN(e)?null:e},[5,10,25,50,100]),reflect:!0,attribute:"page-sizes"}};constructor(){super(),this.page=1,this.totalItems=0,this.itemsPerPage=10,this.pageSizes=[5,10,25,50,100],this.controls=""}connectedCallback(){super.connectedCallback(),this.hasAttribute("controlled")||this.setAttribute("controlled","")}loadControls(){const t=this.constructor.controlSets[this.controls];t&&l.load(Object.values(t))}willUpdate(t){t.forEach((t,e)=>{const s=this[e];switch(e){case"pageSizes":void 0===s?this.pageSizes=[5,10,25,50,100]:this.itemsPerPage=r(this.itemsPerPage,this.pageSizes);break;case"itemsPerPage":void 0===s?this.itemsPerPage=this.pageSizes?.[0]||10:(this.itemsPerPage=r(this.itemsPerPage,this.pageSizes),void 0!==t&&(this.page=Math.ceil(((this.page-1)*t+1)/this.itemsPerPage)));break;case"totalItems":if(void 0===s)this.totalItems=0;else{const t=Math.max(1,Math.ceil(this.totalItems/this.itemsPerPage));this.page>t&&(this.page=t)}break;case"page":if(void 0===s)this.page=1;else{const t=i(this.page,1,this.totalPages);t!==this.page&&(this.page=t)}break;case"controls":void 0===s&&(this.controls="")}})}updated(t){super.updated(t);(t.has("page")&&void 0!==t.get("page")||t.has("itemsPerPage")&&void 0!==t.get("itemsPerPage"))&&this.dispatchEvent(new CustomEvent("page-change",{detail:{currentPage:this.page,totalPages:this.totalPages,itemsPerPage:this.itemsPerPage,totalItems:this.totalItems},bubbles:!0})),t.has("controls")&&this.controls&&"none"!==this.controls&&this.loadControls()}get totalPages(){return this.totalItems&&this.itemsPerPage?Math.ceil(this.totalItems/this.itemsPerPage):1}nextPage(){this.page=i(this.page+1,1,this.totalPages)}previousPage(){this.page=i(this.page-1,1,this.totalPages)}render(){const e=this.constructor.controlSets[this.controls];return t`
2
2
  <div id="controls" aria-label="Pagination">
3
3
  <div class="left">
4
4
  <slot>${e?.left??s}</slot>
@@ -30,14 +30,14 @@ import{html as t,css as e,nothing as s}from"../lit-all.min.js";import a from"./S
30
30
  flex-wrap: wrap;
31
31
  margin-left: auto;
32
32
  }
33
- `;static loadedModules=new Set;static controlModules={simple:["PrevPage","NextPage","PageInfo"],full:["FirstPage","PrevPage","GotoPage","NextPage","LastPage","ItemsPerPage"]};static controlSets={"":{left:null,right:null},none:{left:null,right:null},simple:{left:t`
34
- <k-pg-prev></k-pg-prev>
35
- <k-pg-page-info></k-pg-page-info>
36
- <k-pg-next></k-pg-next>
33
+ `;static controlSets={"":{left:null,right:null},none:{left:null,right:null},simple:{left:t`
34
+ <kc-pg-prev></kc-pg-prev>
35
+ <kc-pg-page-info></kc-pg-page-info>
36
+ <kc-pg-next></kc-pg-next>
37
37
  `,right:null},full:{left:t`
38
- <k-pg-first></k-pg-first>
39
- <k-pg-prev></k-pg-prev>
40
- <k-pg-goto-page></k-pg-goto-page>
41
- <k-pg-next></k-pg-next>
42
- <k-pg-last></k-pg-last>
43
- `,right:t`<k-pg-items-per-page></k-pg-items-per-page>`}}}window.customElements.define("k-pagination",l);
38
+ <kc-pg-first></kc-pg-first>
39
+ <kc-pg-prev></kc-pg-prev>
40
+ <kc-pg-goto-page></kc-pg-goto-page>
41
+ <kc-pg-next></kc-pg-next>
42
+ <kc-pg-last></kc-pg-last>
43
+ `,right:t`<kc-pg-items-per-page></kc-pg-items-per-page>`}}}window.customElements.define("k-pagination",g);
@@ -1,4 +1,4 @@
1
- import{html as e,css as t,unsafeStatic as s,literal as i}from"../lit-all.min.js";import r from"./ShadowComponent.js";import{toTitleCase as o}from"../utils/string.js";import{boolExists as n}from"../utils/propConverters.js";const l=Symbol("selected"),a=Symbol("hidden"),d=Symbol("index"),c=Symbol("editing");export default class h extends r{static properties={enablePages:{type:Boolean,reflect:!0,converter:n,attribute:"enable-pages"},pageSize:{type:Number,reflect:!0,attribute:"page-size"},currentPage:{type:Number,reflect:!0,attribute:"current-page"},pageSizeOptions:{type:Array,attribute:"page-size-options"},enableSelection:{type:Boolean,reflect:!0,converter:n,attribute:"enable-selection"},enableSorting:{type:Boolean,reflect:!0,converter:n,attribute:"enable-sorting"},caseSensitiveFilters:{type:Boolean,reflect:!0,converter:n,attribute:"case-sensitive-filters"},requestEdit:{type:Boolean,reflect:!0,converter:n,attribute:"request-edit"},requestDelete:{type:Boolean,reflect:!0,converter:n,attribute:"request-delete"},placeholder:{type:String,reflect:!0},filteredPlaceholder:{type:String,reflect:!0,attribute:"filtered-placeholder"},fields:{type:Array},records:{type:Array},filters:{type:Array},sort:{type:Array},columnSizes:{type:Object},fetchPending:{type:Boolean}};constructor(e={}){super(),void 0===this.pageSize&&(this.pageSize=50),void 0===this.currentPage&&(this.currentPage=1),void 0===this.pageSizeOptions&&(this.pageSizeOptions=[10,25,50,100,500]),void 0===this.records&&(this.records=e.records||[]),void 0===this.fields&&(this.fields=e.fields||[]),void 0===this.filters&&(this.filters=e.filters||[]),void 0===this.sort&&(this.sort=[]),void 0===this.columnSizes&&(this.columnSizes={}),void 0===this.fetchPending&&(this.fetchPending=!1),void 0===this.requestEdit&&(this.requestEdit=!1),void 0===this.requestDelete&&(this.requestDelete=!1),void 0===this.placeholder&&(this.placeholder="No Records"),void 0===this.filteredPlaceholder&&(this.filteredPlaceholder="")}handleSelectAllChange=e=>{e.target.checked?this.selectAllOnPage():this.deselectAllOnPage()};handleFieldClick=e=>{const t=this.sort.find(t=>t.name===e),s=!t||!t.asc;this.sortBy(e,s)};handleRecordSelectionChange=(e,t)=>{e[l]=!!t.target.checked,this.requestUpdate(),this.dispatchEvent(new CustomEvent("selectionChange",{bubbles:!0}))};firstUpdated(){this.setData({records:this.records,fields:this.fields,filters:this.filters})}childrenUpdated(){this.requestUpdate()}updated(e){if(super.updated(e),this.enableSelection){const e=this.shadowRoot.getElementById("select-all");e&&(e.checked=this.getDisplayedRecords().length>0&&this.allOnPageSelected())}}renderColgroupTemplate(){const t=[];return this.enableSelection&&t.push(e`<col style="width: 40px" />`),this.hasBeforeControls()&&t.push(e`<col style="width: ${this.columnSizes.beforeControls}px" />`),this.fields.forEach(({size:s,hidden:i})=>{i||t.push(s?e`<col style="width: ${s}px" />`:e`<col />`)}),this.hasAfterControls()&&t.push(e`<col style="width: ${this.columnSizes.afterControls}px" />`),t}getColumnCount(){let e=0;return this.enableSelection&&e++,this.hasBeforeControls()&&e++,this.fields.forEach(({hidden:t})=>{t||e++}),this.hasAfterControls()&&e++,e}renderFieldsTemplate(){const t=[];return this.enableSelection&&t.push(e`
1
+ import{html as e,css as t,unsafeStatic as s,literal as i}from"../lit-all.min.js";import r from"./ShadowComponent.js";import{toTitleCase as o}from"../utils/string.js";import{boolExists as n}from"../utils/propConverters.js";const l=Symbol("selected"),a=Symbol("hidden"),d=Symbol("index"),c=Symbol("editing");export default class h extends r{static properties={enablePages:{type:Boolean,reflect:!0,converter:n,attribute:"enable-pages"},pageSize:{type:Number,reflect:!0,attribute:"page-size"},currentPage:{type:Number,reflect:!0,attribute:"current-page"},pageSizeOptions:{type:Array,attribute:"page-size-options"},enableSelection:{type:Boolean,reflect:!0,converter:n,attribute:"enable-selection"},enableSorting:{type:Boolean,reflect:!0,converter:n,attribute:"enable-sorting"},caseSensitiveFilters:{type:Boolean,reflect:!0,converter:n,attribute:"case-sensitive-filters"},requestEdit:{type:Boolean,reflect:!0,converter:n,attribute:"request-edit"},requestDelete:{type:Boolean,reflect:!0,converter:n,attribute:"request-delete"},placeholder:{type:String,reflect:!0},filteredPlaceholder:{type:String,reflect:!0,attribute:"filtered-placeholder"},fields:{type:Array},records:{type:Array},filters:{type:Array},sort:{type:Array},columnSizes:{type:Object},fetchPending:{type:Boolean}};constructor(e={}){super(),void 0===this.pageSize&&(this.pageSize=50),void 0===this.currentPage&&(this.currentPage=1),void 0===this.pageSizeOptions&&(this.pageSizeOptions=[10,25,50,100,500]),void 0===this.records&&(this.records=e.records||[]),void 0===this.fields&&(this.fields=e.fields||[]),void 0===this.filters&&(this.filters=e.filters||[]),void 0===this.sort&&(this.sort=[]),void 0===this.columnSizes&&(this.columnSizes={}),void 0===this.fetchPending&&(this.fetchPending=!1),void 0===this.requestEdit&&(this.requestEdit=!1),void 0===this.requestDelete&&(this.requestDelete=!1),void 0===this.placeholder&&(this.placeholder="No Records"),void 0===this.filteredPlaceholder&&(this.filteredPlaceholder="")}handleSelectAllChange=e=>{e.target.checked?this.selectAllOnPage():this.deselectAllOnPage()};handleFieldClick=e=>{const t=this.sort.find(t=>t.name===e),s=!t||!t.asc;this.sortBy(e,s)};handleRecordSelectionChange=(e,t)=>{e[l]=!!t.target.checked,this.requestUpdate(),this.dispatchEvent(new CustomEvent("selectionChange",{bubbles:!0}))};connectedCallback(){super.connectedCallback(),this.hasAttribute("controlled")||this.setAttribute("controlled","")}firstUpdated(){this.setData({records:this.records,fields:this.fields,filters:this.filters})}childrenUpdated(){this.requestUpdate()}updated(e){if(super.updated(e),this.enableSelection){const e=this.shadowRoot.getElementById("select-all");e&&(e.checked=this.getDisplayedRecords().length>0&&this.allOnPageSelected())}}renderColgroupTemplate(){const t=[];return this.enableSelection&&t.push(e`<col style="width: 40px" />`),this.hasBeforeControls()&&t.push(e`<col style="width: ${this.columnSizes.beforeControls}px" />`),this.fields.forEach(({size:s,hidden:i})=>{i||t.push(s?e`<col style="width: ${s}px" />`:e`<col />`)}),this.hasAfterControls()&&t.push(e`<col style="width: ${this.columnSizes.afterControls}px" />`),t}getColumnCount(){let e=0;return this.enableSelection&&e++,this.hasBeforeControls()&&e++,this.fields.forEach(({hidden:t})=>{t||e++}),this.hasAfterControls()&&e++,e}renderFieldsTemplate(){const t=[];return this.enableSelection&&t.push(e`
2
2
  <th class="controls field-select">
3
3
  <input type="checkbox" id="select-all" @change=${this.handleSelectAllChange} />
4
4
  </th>
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as e}from"../../lit-all.min.js";import"../Icon.js";export default class n extends t{static requires=["alignCenter"];static hostMode="visual";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Align Center")}handleAction(){this.host?.alignCenter?.()}render(){return e`<slot><k-icon name="format_align_center"></k-icon></slot>`}}customElements.define("kc-align-center",n);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as i}from"../../lit-all.min.js";import"../Icon.js";export default class s extends t{static requires=["alignJustify"];static hostMode="visual";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Justify")}handleAction(){this.host?.alignJustify?.()}render(){return i`<slot><k-icon name="format_align_justify"></k-icon></slot>`}}customElements.define("kc-align-justify",s);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as e}from"../../lit-all.min.js";import"../Icon.js";export default class i extends t{static requires=["alignLeft"];static hostMode="visual";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Align Left")}handleAction(){this.host?.alignLeft?.()}render(){return e`<slot><k-icon name="format_align_left"></k-icon></slot>`}}customElements.define("kc-align-left",i);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as i}from"../../lit-all.min.js";import"../Icon.js";export default class e extends t{static requires=["alignRight"];static hostMode="visual";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Align Right")}handleAction(){this.host?.alignRight?.()}render(){return i`<slot><k-icon name="format_align_right"></k-icon></slot>`}}customElements.define("kc-align-right",e);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as o}from"../../lit-all.min.js";import"../Icon.js";export default class e extends t{static requires=["bold"];static hostMode=["visual","write"];connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Bold")}handleAction(){this.host?.bold?.()}render(){return o`<slot><k-icon name="format_bold"></k-icon></slot>`}}customElements.define("kc-bold",e);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as e}from"../../lit-all.min.js";import"../Icon.js";export default class l extends t{static requires=["bulletList"];static hostMode=["visual","write"];connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Bulleted List")}handleAction(){this.host?.bulletList?.()}render(){return e`<slot><k-icon name="format_list_bulleted"></k-icon></slot>`}}customElements.define("kc-bullet-list",l);
@@ -0,0 +1,33 @@
1
+ import e from"./Control.js";import{css as t,html as i}from"../../lit-all.min.js";export default class s extends e{connectedCallback(){super.connectedCallback(),this.hasAttribute("role")||this.setAttribute("role","button"),this.hasAttribute("tabindex")||(this.tabIndex=this.disabled?-1:0),this.setAttribute("aria-disabled",String(!!this.disabled)),this.addEventListener("click",this.handleClick),this.addEventListener("keydown",this.handleKeyDown)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",this.handleClick),this.removeEventListener("keydown",this.handleKeyDown)}updated(e){super.updated(e),e.has("disabled")&&(this.tabIndex=this.disabled?-1:0,this.setAttribute("aria-disabled",String(this.disabled)))}handleAction(){}handleClick=e=>{this.disabled?e.stopImmediatePropagation():this.handleAction()};handleKeyDown=e=>{this.disabled||"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),this.click())};render(){return i`<slot></slot>`}static styles=[e.styles,t`
2
+ :host {
3
+ align-items: center;
4
+ justify-content: center;
5
+ min-width: 2rem;
6
+ min-height: 2rem;
7
+ background: transparent;
8
+ border: 1px solid var(--c_border);
9
+ border-radius: var(--radius);
10
+ margin: var(--spacer_q);
11
+ padding: var(--spacer_h);
12
+ color: inherit;
13
+ cursor: pointer;
14
+ outline: none;
15
+ font-size: inherit;
16
+ user-select: none;
17
+ transition: background-color var(--animation_ms), box-shadow var(--animation_ms);
18
+ }
19
+ :host(:not([disabled]):hover) {
20
+ background: oklch(from var(--c_bg__inv) l c h / 0.15);
21
+ }
22
+ :host(:not([disabled]):focus),
23
+ :host(:not([disabled]):focus-visible) {
24
+ box-shadow: var(--focus_shadow);
25
+ z-index: 1;
26
+ }
27
+ :host([disabled]) {
28
+ cursor: default;
29
+ }
30
+ :host([active]) {
31
+ background: oklch(from var(--c_primary) l c h / 0.18);
32
+ }
33
+ `]}customElements.define("kc-button",s);
@@ -0,0 +1,4 @@
1
+ import t from"./Control.js";import{html as e,css as s}from"../../lit-all.min.js";export default class n extends t{static hostEvents=["change","ready"];static properties={...t.properties,count:{type:Number,state:!0}};constructor(){super(),this.count=0}connectedCallback(){super.connectedCallback(),setTimeout(()=>this.updateCount(),0)}willUpdate(t){super.willUpdate?.(t),this.updateCount()}updateCount(){const t=this.host;if(!t||"function"!=typeof t.getValue)return;const e=t.getValue()||"",s=e.includes("<")?(new DOMParser).parseFromString(e,"text/html").body.innerText||"":e;this.count=s.length}render(){return e`<span class="character-count"><slot name="label">Characters:</slot> ${this.count}</span>`}static styles=[t.styles,s`
2
+ :host { align-items: center; padding: 0 0.5rem; font-size: 0.875rem; color: var(--tc_muted, #666); }
3
+ .character-count { display: flex; align-items: center; gap: 0.25rem; }
4
+ `]}customElements.define("kc-character-count",n);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as e}from"../../lit-all.min.js";import"../Icon.js";export default class o extends t{static requires=["removeFormat"];static hostMode="visual";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Clear Formatting")}handleAction(){this.host?.removeFormat?.()}render(){return e`<slot><k-icon name="format_clear"></k-icon></slot>`}}customElements.define("kc-clear-formatting",o);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as o}from"../../lit-all.min.js";import"../Icon.js";export default class e extends t{static requires=["formatBlock"];static hostMode="visual";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Code Block")}handleAction(){const t=this.host,o=t?.isSelectionInCodeBlock?.();t?.formatBlock?.(o?"p":"pre")}render(){return o`<slot><k-icon name="code_blocks"></k-icon></slot>`}}customElements.define("kc-code-block",e);
@@ -0,0 +1,12 @@
1
+ import t from"../ShadowComponent.js";import{css as e}from"../../lit-all.min.js";export default class s extends t{static properties={hidden:{type:Boolean,reflect:!0},disabled:{type:Boolean,reflect:!0}};static requires=[];static hostEvents=[];constructor(){super(),this.hidden=!1,this.disabled=!1}connectedCallback(){super.connectedCallback();const t=this.host;if(this.boundHost=t,this.updateHostSupport(),t){this.modeHandler=()=>{this.updateModeVisibility(),this.requestUpdate()},t.addEventListener("mode-changed",this.modeHandler),this.hostEventHandler=()=>this.requestUpdate();for(const e of this.constructor.hostEvents||[])t.addEventListener(e,this.hostEventHandler);this.updateModeVisibility()}}disconnectedCallback(){if(super.disconnectedCallback(),this.boundHost&&(this.modeHandler&&this.boundHost.removeEventListener("mode-changed",this.modeHandler),this.hostEventHandler))for(const t of this.constructor.hostEvents||[])this.boundHost.removeEventListener(t,this.hostEventHandler);this.modeHandler=null,this.hostEventHandler=null,this.boundHost=null}updated(t){super.updated(t),t.has("hidden")&&this.dispatchEvent(new CustomEvent("control_visibility_change",{bubbles:!0}))}get host(){if(this.boundHost)return this.boundHost;let t=this.getRootNode();for(;t instanceof ShadowRoot;){const e=t.host,s=e?.closest?.("[controlled]")||(e?.hasAttribute?.("controlled")?e:null);if(s)return s;t=e.getRootNode()}return this.closest("[controlled]")}updateHostSupport(){const t=this.host,e=this.constructor.requires||[],s=!(t&&e.every(e=>"function"==typeof t[e]));this.disabled!==s&&(this.disabled=s)}updateModeVisibility(){const t=this.constructor.hostMode;if(!t)return;const e=this.host;if(!e)return;if(!("mode"in e))return;const s=!(Array.isArray(t)?t:[t]).includes(e.mode);this.hidden!==s&&(this.hidden=s)}static load=(()=>{const t=/<(kc-[a-z][a-z0-9-]*|k-control-group)\b/g,e=new Set,s=t=>{if("k-control-group"===t)return"../ControlGroup.js";return`./${t.slice(3).split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}.js`},o=(e,s=new Set)=>{if(!e)return s;if(Array.isArray(e))return e.forEach(t=>o(t,s)),s;if(e.strings)for(const o of e.strings){let e;for(t.lastIndex=0;null!==(e=t.exec(o));)s.add(e[1])}if("object"==typeof e)for(const t of Object.values(e))t&&(Array.isArray(t)||t.strings)&&o(t,s);return s};return async t=>{const n=o(t),i=new URL("./",import.meta.url).href,r=[];for(const t of n)e.has(t)||(e.add(t),r.push(import(new URL(s(t),i).href)));r.length&&await Promise.all(r)}})();static styles=e`
2
+ :host {
3
+ display: inline-flex;
4
+ }
5
+ :host([hidden]) {
6
+ display: none !important;
7
+ }
8
+ :host([disabled]) {
9
+ opacity: 0.5;
10
+ pointer-events: none;
11
+ }
12
+ `}customElements.define("kc-control",s);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as o}from"../../lit-all.min.js";import"../Icon.js";export default class e extends t{static requires=["copyToClipboard"];static hostMode="code";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Copy Code")}handleAction(){this.host?.copyToClipboard?.()}render(){return o`<slot><k-icon name="content_copy"></k-icon></slot>`}}customElements.define("kc-copy-code",e);
@@ -0,0 +1 @@
1
+ import e from"./ButtonControl.js";import{html as t}from"../../lit-all.min.js";import"../Icon.js";import n from"../Dialog.js";export default class i extends e{static requires=["createLink"];static hostMode="visual";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Insert Link")}handleAction(){const e=this.host;if(!e)return;const t=e.getSelectedText?.()||"",i=document.createElement("input");i.type="text",i.placeholder="https://example.com",i.style.cssText="padding: 0.5rem; border: 1px solid var(--c_border); border-radius: var(--radius); font: inherit;";const l=document.createElement("input");l.type="text",l.placeholder="Enter link text",l.value=t,l.style.cssText="padding: 0.5rem; border: 1px solid var(--c_border); border-radius: var(--radius); font: inherit;";const r=document.createElement("div");r.className="p",r.style.cssText="display: flex; flex-direction: column; gap: 1rem;",r.innerHTML='\n <div style="display: flex; flex-direction: column; gap: 0.5rem;">\n <label style="font-weight: bold;">URL</label>\n </div>\n <div style="display: flex; flex-direction: column; gap: 0.5rem;">\n <label style="font-weight: bold;">Link Text</label>\n </div>\n ',r.children[0].appendChild(i),r.children[1].appendChild(l),n.create(r,{title:"Create Link",cancelText:"Cancel",confirmText:"Insert Link",confirmClasses:"success ml",confirmAction:n=>{const r=i.value.trim(),o=l.value.trim();r?!e.selection||o&&o!==t?e.createLinkWithText?.(r,o||r):e.createLink(r):n.keepDialogOpen=!0}})}render(){return t`<slot><k-icon name="link"></k-icon></slot>`}}customElements.define("kc-create-link",i);
@@ -0,0 +1,30 @@
1
+ import t from"./Control.js";import{html as e,css as o}from"../../lit-all.min.js";import"../Icon.js";export default class r extends t{static requires=["setEditorTheme"];static hostMode="code";static hostEvents=["editor-theme-changed"];static properties={...t.properties,value:{type:String,state:!0}};constructor(){super(),this.value="auto"}connectedCallback(){super.connectedCallback(),this.host&&(this.value=this.host.editorTheme||"auto")}willUpdate(t){super.willUpdate?.(t),this.host&&(this.value=this.host.editorTheme||"auto")}handleChange=t=>{this.host?.setEditorTheme?.(t.target.value)};static styles=[t.styles,o`
2
+ :host {
3
+ position: relative;
4
+ background-color: var(--input_bg);
5
+ color: var(--input_tc);
6
+ border: var(--input_border_width) solid var(--c_input_border);
7
+ border-radius: var(--radius);
8
+ transition: box-shadow var(--animation_ms);
9
+ margin-right: var(--spacer_q);
10
+ }
11
+ k-icon {
12
+ position: absolute;
13
+ left: 0.5rem;
14
+ top: 50%;
15
+ transform: translateY(-50%);
16
+ pointer-events: none;
17
+ }
18
+ select {
19
+ border: 0;
20
+ padding: var(--spacer_h) 1rem var(--spacer_h) 2rem;
21
+ min-height: 2.5rem;
22
+ }
23
+ `];render(){return e`
24
+ <k-icon name="contrast"></k-icon>
25
+ <select .value=${this.value} @change=${this.handleChange} title="Editor Theme">
26
+ <option value="auto">Auto</option>
27
+ <option value="light">Light</option>
28
+ <option value="dark">Dark</option>
29
+ </select>
30
+ `}}customElements.define("kc-editor-theme",r);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as e}from"../../lit-all.min.js";import"../Icon.js";export default class n extends t{static requires=["openFind"];static hostMode="code";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Find & Replace")}handleAction(){this.host?.openFind?.()}render(){return e`<slot><k-icon name="search"></k-icon></slot>`}}customElements.define("kc-find-replace",n);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as l}from"../../lit-all.min.js";import"../Icon.js";export default class o extends t{static requires=["foldAll","unfoldAll"];static hostMode="code";static properties={...t.properties,folded:{type:Boolean,state:!0}};constructor(){super(),this.folded=!1}connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Fold All")}handleAction(){this.folded=!this.folded,this.folded?this.host?.foldAll?.():this.host?.unfoldAll?.()}render(){return l`<slot><k-icon name="${this.folded?"unfold_more":"unfold_less"}"></k-icon></slot>`}}customElements.define("kc-fold-all",o);
@@ -0,0 +1,8 @@
1
+ import e from"./Control.js";import{html as o,css as s}from"../../lit-all.min.js";import"./FontSizeIncrease.js";import"./FontSizeDecrease.js";import"../ControlGroup.js";export default class t extends e{static hostMode="code";static styles=[e.styles,s`
2
+ :host { gap: 0; }
3
+ `];render(){return o`
4
+ <k-control-group class="b r mq">
5
+ <kc-font-size-decrease></kc-font-size-decrease>
6
+ <kc-font-size-increase></kc-font-size-increase>
7
+ </k-control-group>
8
+ `}}customElements.define("kc-font-size",t);
@@ -0,0 +1 @@
1
+ import e from"./ButtonControl.js";import{html as t}from"../../lit-all.min.js";import"../Icon.js";export default class o extends e{static requires=["decreaseFontSize"];static hostMode="code";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Decrease Font Size")}handleAction(){this.host?.decreaseFontSize?.()}render(){return t`<slot><k-icon name="text_decrease"></k-icon></slot>`}}customElements.define("kc-font-size-decrease",o);
@@ -0,0 +1 @@
1
+ import e from"./ButtonControl.js";import{html as t}from"../../lit-all.min.js";import"../Icon.js";export default class n extends e{static requires=["increaseFontSize"];static hostMode="code";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Increase Font Size")}handleAction(){this.host?.increaseFontSize?.()}render(){return t`<slot><k-icon name="text_increase"></k-icon></slot>`}}customElements.define("kc-font-size-increase",n);
@@ -0,0 +1,8 @@
1
+ import t from"./ButtonControl.js";import{html as a,css as e}from"../../lit-all.min.js";import"../Icon.js";const o={p:"Paragraph",h1:"Heading 1",h2:"Heading 2",h3:"Heading 3",h4:"Heading 4",h5:"Heading 5",h6:"Heading 6",blockquote:"Blockquote",pre:"Code Block"},r={p:"format_paragraph",h1:"format_h1",h2:"format_h2",h3:"format_h3",h4:"format_h4",h5:"format_h5",h6:"format_h6",blockquote:"format_quote",pre:"code_blocks"};export default class s extends t{static requires=["formatBlock"];static hostMode=["visual","write"];static properties={...t.properties,tag:{type:String,reflect:!0}};constructor(){super(),this.tag="p"}connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title=o[this.tag]||this.tag)}getDefaultLabel(t){return o[t||this.tag]||(t||this.tag).toUpperCase()}getDefaultIcon(t){return r[t||this.tag]||"format_paragraph"}handleAction(){this.host?.formatBlock?.(this.tag)}render(){const t=o[this.tag]||this.tag.toUpperCase(),e=r[this.tag]||"format_paragraph";return a`
2
+ <slot name="icon"><k-icon name=${e}></k-icon></slot>
3
+ <slot>${t}</slot>
4
+ `}static styles=[t.styles,e`
5
+ :host {
6
+ gap: 0.5rem;
7
+ }
8
+ `]}customElements.define("kc-format-block",s);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as e}from"../../lit-all.min.js";import"../Icon.js";export default class o extends t{static requires=["formatCode"];static hostMode="code";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Format Code")}handleAction(){this.host?.formatCode?.()}render(){return e`<slot><k-icon name="frame_source"></k-icon></slot>`}}customElements.define("kc-format-code",o);
@@ -0,0 +1 @@
1
+ import e from"./ButtonControl.js";import{html as t}from"../../lit-all.min.js";import"../Icon.js";export default class s extends e{static requires=["toggleFullscreen"];static hostEvents=["fullscreen-changed"];static properties={...e.properties,fullscreen:{type:Boolean,state:!0}};constructor(){super(),this.fullscreen=!1}connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Fullscreen"),this.host&&(this.fullscreen=!!this.host.fullscreen)}willUpdate(e){super.willUpdate?.(e),this.host&&(this.fullscreen=!!this.host.fullscreen)}updated(e){super.updated(e),e.has("fullscreen")&&this.toggleAttribute("active",this.fullscreen)}handleAction(){this.host?.toggleFullscreen?.()}render(){return t`<slot><k-icon name="${this.fullscreen?"fullscreen_exit":"fullscreen"}"></k-icon></slot>`}}customElements.define("kc-fullscreen",s);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as e}from"../../lit-all.min.js";import"../Icon.js";export default class i extends t{static requires=["inlineCode"];static hostMode=["visual","write"];connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Inline Code")}handleAction(){this.host?.inlineCode?.()}render(){return e`<slot><k-icon name="code_blocks"></k-icon></slot>`}}customElements.define("kc-inline-code",i);
@@ -0,0 +1 @@
1
+ import e from"./ButtonControl.js";import{html as t}from"../../lit-all.min.js";import"../Icon.js";import l from"../Dialog.js";export default class n extends e{static requires=["insertTable"];static hostMode="visual";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Insert Table")}handleAction(){const e=this.host;if(!e)return;const t=e.getTableAtSelection?.(),n=!!t,r=t?.rows??3,i=t?.cols??3,s=t?.hasHeaders??!0,a=t?.cellData??null,o=document.createElement("input");o.type="number",o.min="1",o.max="20",o.value=String(r),o.style.cssText="padding: 0.5rem; border: 1px solid var(--c_border); border-radius: var(--radius); font: inherit;";const c=document.createElement("input");c.type="number",c.min="1",c.max="10",c.value=String(i),c.style.cssText="padding: 0.5rem; border: 1px solid var(--c_border); border-radius: var(--radius); font: inherit;";const d=document.createElement("input");d.type="checkbox",d.checked=s,d.id="kc-table-headers";const m=document.createElement("div");m.className="p",m.style.cssText="display: flex; flex-direction: column; gap: 1rem;",m.innerHTML='\n <div style="display: flex; flex-direction: column; gap: 0.5rem;"><label style="font-weight: bold;">Rows</label></div>\n <div style="display: flex; flex-direction: column; gap: 0.5rem;"><label style="font-weight: bold;">Columns</label></div>\n <div style="display: flex; align-items: center; gap: 0.5rem;"><label for="kc-table-headers" style="font-weight: bold;">Include Headers</label></div>\n ',m.children[0].appendChild(o),m.children[1].appendChild(c),m.children[2].insertBefore(d,m.children[2].firstChild),l.create(m,{title:n?"Edit Table":"Insert Table",cancelText:"Cancel",confirmText:n?"Update Table":"Insert Table",confirmClasses:"success",confirmAction:()=>{const l=parseInt(o.value)||3,r=parseInt(c.value)||3,i=d.checked;n&&e.removeTableByKey?.(t.key),e.insertTable(l,r,i,a)}})}render(){return t`<slot><k-icon name="table"></k-icon></slot>`}}customElements.define("kc-insert-table",n);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as i}from"../../lit-all.min.js";import"../Icon.js";export default class e extends t{static requires=["italic"];static hostMode=["visual","write"];connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Italic")}handleAction(){this.host?.italic?.()}render(){return i`<slot><k-icon name="format_italic"></k-icon></slot>`}}customElements.define("kc-italic",e);
@@ -0,0 +1,21 @@
1
+ import t from"./Control.js";import{html as a,css as e}from"../../lit-all.min.js";import"../Icon.js";const s=["javascript","typescript","html","css","json","markdown","python","java","csharp","cpp","go","rust","php","ruby","sql","xml","yaml","shell","plaintext"];export default class r extends t{static requires=["setLanguage"];static hostMode="code";static hostEvents=["language-changed"];static properties={...t.properties,value:{type:String,state:!0}};constructor(){super(),this.value="javascript"}connectedCallback(){super.connectedCallback(),this.host&&(this.value=this.host.language||"javascript")}willUpdate(t){super.willUpdate?.(t),this.host&&(this.value=this.host.language||"javascript")}handleChange=t=>{this.host?.setLanguage?.(t.target.value)};static styles=[t.styles,e`
2
+ :host {
3
+ background-color: var(--input_bg);
4
+ color: var(--input_tc);
5
+ border: var(--input_border_width) solid var(--c_input_border);
6
+ border-radius: var(--radius);
7
+ transition: box-shadow var(--animation_ms);
8
+ margin-right: var(--spacer_q);
9
+ }
10
+ select {
11
+ border: 0;
12
+ padding: var(--spacer_h) var(--spacer);
13
+ min-height: 2.5rem;
14
+ }
15
+ `];render(){return a`
16
+ <select .value=${this.value} @change=${this.handleChange} title="Language">
17
+ ${s.map(t=>a`
18
+ <option value="${t}" ?selected=${this.value===t}>${t}</option>
19
+ `)}
20
+ </select>
21
+ `}}customElements.define("kc-language",r);
@@ -0,0 +1,23 @@
1
+ import e from"./Control.js";import{html as t,css as o}from"../../lit-all.min.js";import"../Icon.js";import"../Dropdown.js";export default class r extends e{static requires=["replaceSelection"];static hostMode="write";handleDropdownOpened=()=>{requestAnimationFrame(()=>{const e=this.shadowRoot.querySelector(".image-url"),t=this.shadowRoot.querySelector(".image-alt");e?.focus();const o=this.host?.textarea;o&&t&&(t.value=o.value.substring(o.selectionStart,o.selectionEnd)||"")})};handleDropdownClosed=()=>{const e=this.shadowRoot.querySelector(".image-url"),t=this.shadowRoot.querySelector(".image-alt");e&&(e.value=""),t&&(t.value="")};handleFormKeydown=e=>{"Enter"===e.key?(e.preventDefault(),this.submit()):"Escape"===e.key&&this.shadowRoot.querySelector("k-dropdown")?.close()};submit(){const e=this.shadowRoot.querySelector(".image-url").value.trim(),t=this.shadowRoot.querySelector(".image-alt").value.trim();e?(this.host?.replaceSelection?.(`![${t}](${e})`,{selectInserted:!1}),this.shadowRoot.querySelector("k-dropdown")?.close()):this.shadowRoot.querySelector(".image-url").focus()}render(){return t`
2
+ <k-dropdown @opened=${this.handleDropdownOpened} @closed=${this.handleDropdownClosed}>
3
+ <button slot="trigger" type="button" class="trigger" title="Image"><k-icon name="image"></k-icon></button>
4
+ <div class="image-form" @keydown=${this.handleFormKeydown}>
5
+ <label>Image URL</label>
6
+ <input class="image-url" type="url" required placeholder="https://example.com/image.png" />
7
+ <label>Alt text</label>
8
+ <input class="image-alt" type="text" placeholder="Description for screen readers" />
9
+ <div class="image-actions">
10
+ <button type="button" @click=${()=>this.shadowRoot.querySelector("k-dropdown").close()}>Cancel</button>
11
+ <button type="button" class="primary" @click=${()=>this.submit()}>Insert</button>
12
+ </div>
13
+ </div>
14
+ </k-dropdown>
15
+ `}static styles=[e.styles,o`
16
+ .trigger { min-width: 2.5rem; min-height: 2.5rem; background: transparent; border: none; cursor: pointer; }
17
+ .image-form { display: flex; flex-direction: column; gap: 0.5rem; padding: 0.75rem; min-width: 16rem; }
18
+ .image-form label { font-weight: bold; font-size: 0.875rem; }
19
+ .image-form input { padding: 0.5rem; border: 1px solid var(--c_border); border-radius: var(--radius); font: inherit; }
20
+ .image-actions { display: flex; justify-content: flex-end; gap: 0.5rem; margin-top: 0.25rem; }
21
+ .image-actions button { padding: 0.4rem 0.8rem; border: 1px solid var(--c_border); border-radius: var(--radius); cursor: pointer; font: inherit; }
22
+ .image-actions button.primary { background: var(--c_primary); color: white; border-color: var(--c_primary); }
23
+ `]}customElements.define("kc-md-image",r);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as e}from"../../lit-all.min.js";import"../Icon.js";export default class n extends t{static requires=["replaceSelection"];static hostMode="write";connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Link")}handleAction(){const t=this.host;if(!t)return;const e=t.textarea;if(!e)return;const n=e.selectionStart,s=e.selectionEnd,l=e.value.substring(n,s),i=/\[([^\]]*)\]\([^)]*\)/g;let o;for(;null!==(o=i.exec(e.value));){const l=o.index,i=l+o[0].length;if(n>=l&&s<=i){const n=o[1],s=e.value.substring(0,l)+n+e.value.substring(i);return e.value=s,e.selectionStart=l,e.selectionEnd=l+n.length,e.focus(),t.value=s,void e.dispatchEvent(new Event("input",{bubbles:!0}))}}const c=l||"link text",r=`[${c}](url)`,u=e.value.substring(0,n)+r+e.value.substring(s),a=n+1+c.length+2;e.value=u,e.selectionStart=a,e.selectionEnd=a+3,e.focus(),t.value=u,e.dispatchEvent(new Event("input",{bubbles:!0}))}render(){return e`<slot><k-icon name="link"></k-icon></slot>`}}customElements.define("kc-md-link",n);
@@ -0,0 +1,10 @@
1
+ import e from"./Control.js";import{html as t,css as s}from"../../lit-all.min.js";import"../SpeechToText.js";export default class o extends e{static requires=["replaceSelection"];static hostMode="write";static properties={...e.properties,language:{type:String,reflect:!0},continuous:{type:Boolean,reflect:!0}};constructor(){super(),this.language="en-US",this.continuous=!1}handleEnd=e=>{const t=(e.detail?.text||"").trim();t&&this.host?.replaceSelection?.(t+" ",{selectInserted:!1})};render(){return t`
2
+ <k-speech-to-text
3
+ language=${this.language}
4
+ ?continuous=${this.continuous}
5
+ @end=${this.handleEnd}
6
+ ></k-speech-to-text>
7
+ `}static styles=[e.styles,s`
8
+ :host { margin: var(--spacer_q); }
9
+ k-speech-to-text { --btn_size: 2rem; }
10
+ `]}customElements.define("kc-md-speech-to-text",o);
@@ -0,0 +1,19 @@
1
+ import e from"./Control.js";import{html as t,css as r}from"../../lit-all.min.js";import"../Icon.js";import"../Dropdown.js";import{bound as o}from"../../utils/number.js";export default class n extends e{static requires=["replaceSelection"];static hostMode="write";handleDropdownOpened=()=>{requestAnimationFrame(()=>{const e=this.shadowRoot.querySelector(".tbl-cols");e&&(e.value="3",e.select());const t=this.shadowRoot.querySelector(".tbl-rows");t&&(t.value="2")})};handleFormKeydown=e=>{"Enter"===e.key?(e.preventDefault(),this.submit()):"Escape"===e.key&&this.shadowRoot.querySelector("k-dropdown")?.close()};submit(){const e=this.clamp(this.shadowRoot.querySelector(".tbl-cols").value,1,20),t=this.clamp(this.shadowRoot.querySelector(".tbl-rows").value,1,50);e&&t&&(this.host?.replaceSelection?.(this.buildTable(e,t),{selectInserted:!1}),this.shadowRoot.querySelector("k-dropdown")?.close())}clamp(e,t,r){const n=parseInt(e,10);return Number.isFinite(n)?o(n,t,r):0}buildTable(e,t){const r=Array.from({length:e},(e,t)=>` Header ${t+1} `).join("|"),o=Array.from({length:e},()=>" --- ").join("|"),n=Array.from({length:e},()=>" ").join("|");return`\n${[`|${r}|`,`|${o}|`,...Array.from({length:t},()=>`|${n}|`)].join("\n")}\n`}render(){return t`
2
+ <k-dropdown @opened=${this.handleDropdownOpened}>
3
+ <button slot="trigger" type="button" class="trigger" title="Table"><k-icon name="table"></k-icon></button>
4
+ <div class="tbl-form" @keydown=${this.handleFormKeydown}>
5
+ <input class="tbl-cols" type="number" min="1" max="20" inputmode="numeric" aria-label="Columns" value="3" />
6
+ <span class="tbl-x" aria-hidden="true">×</span>
7
+ <input class="tbl-rows" type="number" min="1" max="50" inputmode="numeric" aria-label="Rows" value="2" />
8
+ <button type="button" class="primary" @click=${()=>this.submit()}>Insert</button>
9
+ </div>
10
+ </k-dropdown>
11
+ `}static styles=[e.styles,r`
12
+ .trigger { min-width: 2.5rem; min-height: 2.5rem; background: transparent; border: none; cursor: pointer; }
13
+ .tbl-form { display: flex; align-items: center; gap: 0.4rem; padding: 0.5rem; }
14
+ .tbl-form input { width: 2.5rem; padding: 0.35rem 0.4rem; border: 1px solid var(--c_border); border-radius: var(--radius); font: inherit; text-align: center; -moz-appearance: textfield; }
15
+ .tbl-form input::-webkit-inner-spin-button,
16
+ .tbl-form input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
17
+ .tbl-x { color: var(--tc_muted); font-weight: bold; }
18
+ .tbl-form button.primary { padding: 0.4rem 0.8rem; border: 1px solid var(--c_primary); border-radius: var(--radius); background: var(--c_primary); color: white; cursor: pointer; font: inherit; }
19
+ `]}customElements.define("kc-md-table",n);
@@ -0,0 +1,51 @@
1
+ import e from"./Control.js";import{css as o,html as t}from"../../lit-all.min.js";import"../Dropdown.js";import"../Icon.js";export default class n extends e{static properties={...e.properties,opened:{type:Boolean,reflect:!0}};constructor(){super(),this.opened=!1}handleToggle=()=>{this.opened=!this.opened};handleOpened=()=>{this.opened=!0};handleClosed=()=>{this.opened=!1};render(){return t`
2
+ <k-dropdown
3
+ ?opened=${this.opened}
4
+ @opened=${this.handleOpened}
5
+ @closed=${this.handleClosed}
6
+ >
7
+ <button slot="trigger" class="no-btn icon-btn">
8
+ <slot name="icon"><k-icon name="arrow_drop_down"></k-icon></slot>
9
+ <slot name="label"></slot>
10
+ </button>
11
+ <slot></slot>
12
+ </k-dropdown>
13
+ `}static styles=[e.styles,o`
14
+ :host {
15
+ border: 1px solid var(--c_border);
16
+ border-radius: var(--radius);
17
+ margin: var(--spacer_q);
18
+ }
19
+
20
+ k-dropdown {
21
+ display: inline-flex;
22
+ }
23
+
24
+ button[slot="trigger"] {
25
+ display: inline-flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ gap: 0.5rem;
29
+ min-width: 2.5rem;
30
+ min-height: 2.5rem;
31
+ padding: 0 0.75rem;
32
+ background: transparent;
33
+ border: none;
34
+ color: inherit;
35
+ cursor: pointer;
36
+ font-size: inherit;
37
+ }
38
+
39
+ /* Slotted menu items: remove individual borders/radii so the menu
40
+ reads as a single unified surface. */
41
+ ::slotted(:not([slot="icon"]):not([slot="label"])) {
42
+ display: block !important;
43
+ margin: 0 !important;
44
+ border: none !important;
45
+ border-radius: 0 !important;
46
+ border-bottom: 1px solid var(--c_border) !important;
47
+ }
48
+ ::slotted(:not([slot="icon"]):not([slot="label"]):last-child) {
49
+ border-bottom: none !important;
50
+ }
51
+ `]}customElements.define("kc-menu",n);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as i}from"../../lit-all.min.js";import"../Icon.js";export default class e extends t{static requires=["toggleMinimap"];static hostMode="code";static hostEvents=["minimap-changed"];static properties={...t.properties,active:{type:Boolean,reflect:!0}};constructor(){super(),this.active=!1}connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Toggle Minimap"),this.host&&(this.active=!!this.host.minimapEnabled)}willUpdate(t){super.willUpdate?.(t),this.host&&(this.active=!!this.host.minimapEnabled)}handleAction(){this.host?.toggleMinimap?.()}render(){return i`<slot><k-icon name="map"></k-icon></slot>`}}customElements.define("kc-minimap",e);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as e}from"../../lit-all.min.js";import"../Icon.js";export default class o extends t{static requires=["toggleMode"];connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Toggle Code View")}updated(t){super.updated(t);const e=this.host;e&&this.toggleAttribute("active","code"===e.mode)}get mode(){return this.host?.mode}handleAction(){this.host?.toggleMode?.()}render(){return e`<slot><k-icon name="code"></k-icon></slot>`}}customElements.define("kc-mode",o);
@@ -0,0 +1 @@
1
+ import t from"./ButtonControl.js";import{html as e}from"../../lit-all.min.js";import"../Icon.js";export default class s extends t{static requires=["numberList"];static hostMode=["visual","write"];connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Numbered List")}handleAction(){this.host?.numberList?.()}render(){return e`<slot><k-icon name="format_list_numbered"></k-icon></slot>`}}customElements.define("kc-number-list",s);
@@ -0,0 +1 @@
1
+ import t from"./Control.js";import{html as e}from"../../lit-all.min.js";export default class s extends t{static hostEvents=["page-change"];render(){return e`<span>${this.host?.totalPages??1}</span>`}}customElements.define("kc-pg-count",s);