@placeholderco/placeholder-ui 1.0.12 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +134 -130
  3. package/dist/app.css +178 -0
  4. package/dist/bootstrap.min.css +3600 -0
  5. package/dist/cards/GitCard.svelte +115 -0
  6. package/dist/cards/GitCard.svelte.d.ts +22 -0
  7. package/dist/display/Avatar.svelte +29 -17
  8. package/dist/display/Avatar.svelte.d.ts +12 -2
  9. package/dist/display/LinkCollection.svelte +40 -18
  10. package/dist/display/LinkCollection.svelte.d.ts +9 -2
  11. package/dist/display/Paper.svelte +31 -19
  12. package/dist/display/Paper.svelte.d.ts +12 -3
  13. package/dist/display/alert/Alert.svelte +129 -0
  14. package/dist/display/alert/Alert.svelte.d.ts +15 -0
  15. package/dist/display/alert/AlertVariant.d.ts +1 -0
  16. package/dist/display/alert/AlertVariant.js +1 -0
  17. package/dist/display/filetree/FileTree.svelte +259 -0
  18. package/dist/display/filetree/FileTree.svelte.d.ts +76 -0
  19. package/dist/display/filetree/FileTreeItem.svelte +396 -0
  20. package/dist/display/filetree/FileTreeItem.svelte.d.ts +40 -0
  21. package/dist/display/filetree/FileTreeNode.d.ts +46 -0
  22. package/dist/display/filetree/FileTreeNode.js +115 -0
  23. package/dist/display/filetree/index.d.ts +5 -0
  24. package/dist/display/filetree/index.js +3 -0
  25. package/dist/editors/CodeMirror.svelte +306 -0
  26. package/dist/editors/CodeMirror.svelte.d.ts +31 -0
  27. package/dist/editors/tiptap/LinkActionMenu.svelte +307 -0
  28. package/dist/editors/tiptap/LinkActionMenu.svelte.d.ts +8 -0
  29. package/dist/editors/tiptap/TipTap.svelte +856 -0
  30. package/dist/editors/tiptap/TipTap.svelte.d.ts +54 -0
  31. package/dist/editors/tiptap/TipTapBubble.svelte +790 -0
  32. package/dist/editors/tiptap/TipTapBubble.svelte.d.ts +44 -0
  33. package/dist/editors/tiptap/collaboration.d.ts +55 -0
  34. package/dist/editors/tiptap/collaboration.js +1 -0
  35. package/dist/editors/tiptap/extensions/Alert.d.ts +18 -0
  36. package/dist/editors/tiptap/extensions/Alert.js +72 -0
  37. package/dist/editors/tiptap/extensions/CodeBlockEditor.d.ts +21 -0
  38. package/dist/editors/tiptap/extensions/CodeBlockEditor.js +326 -0
  39. package/dist/editors/tiptap/extensions/Div.d.ts +19 -0
  40. package/dist/editors/tiptap/extensions/Div.js +89 -0
  41. package/dist/editors/tiptap/extensions/Span.d.ts +5 -0
  42. package/dist/editors/tiptap/extensions/Span.js +56 -0
  43. package/dist/editors/tiptap/extensions/codeBlockEditor.css +236 -0
  44. package/dist/editors/tiptap/extensions/codeBlockLanguages.d.ts +17 -0
  45. package/dist/editors/tiptap/extensions/codeBlockLanguages.js +124 -0
  46. package/dist/editors/tiptap/extensions/index.d.ts +7 -0
  47. package/dist/editors/tiptap/extensions/index.js +5 -0
  48. package/dist/editors/tiptap/toolbar/AlertButton.svelte +261 -0
  49. package/dist/editors/tiptap/toolbar/AlertButton.svelte.d.ts +7 -0
  50. package/dist/editors/tiptap/toolbar/AlignCenterButton.svelte +18 -0
  51. package/dist/editors/tiptap/toolbar/AlignCenterButton.svelte.d.ts +7 -0
  52. package/dist/editors/tiptap/toolbar/AlignJustifyButton.svelte +18 -0
  53. package/dist/editors/tiptap/toolbar/AlignJustifyButton.svelte.d.ts +7 -0
  54. package/dist/editors/tiptap/toolbar/AlignLeftButton.svelte +18 -0
  55. package/dist/editors/tiptap/toolbar/AlignLeftButton.svelte.d.ts +7 -0
  56. package/dist/editors/tiptap/toolbar/AlignRightButton.svelte +18 -0
  57. package/dist/editors/tiptap/toolbar/AlignRightButton.svelte.d.ts +7 -0
  58. package/dist/editors/tiptap/toolbar/BoldButton.svelte +18 -0
  59. package/dist/editors/tiptap/toolbar/BoldButton.svelte.d.ts +7 -0
  60. package/dist/editors/tiptap/toolbar/BulletListButton.svelte +18 -0
  61. package/dist/editors/tiptap/toolbar/BulletListButton.svelte.d.ts +7 -0
  62. package/dist/editors/tiptap/toolbar/CodeBlockButton.svelte +18 -0
  63. package/dist/editors/tiptap/toolbar/CodeBlockButton.svelte.d.ts +7 -0
  64. package/dist/editors/tiptap/toolbar/CodeButton.svelte +18 -0
  65. package/dist/editors/tiptap/toolbar/CodeButton.svelte.d.ts +7 -0
  66. package/dist/editors/tiptap/toolbar/ColorButton.svelte +299 -0
  67. package/dist/editors/tiptap/toolbar/ColorButton.svelte.d.ts +20 -0
  68. package/dist/editors/tiptap/toolbar/DocumentButton.svelte +58 -0
  69. package/dist/editors/tiptap/toolbar/DocumentButton.svelte.d.ts +9 -0
  70. package/dist/editors/tiptap/toolbar/HeadingButton.svelte +30 -0
  71. package/dist/editors/tiptap/toolbar/HeadingButton.svelte.d.ts +8 -0
  72. package/dist/editors/tiptap/toolbar/HtmlButton.svelte +68 -0
  73. package/dist/editors/tiptap/toolbar/HtmlButton.svelte.d.ts +7 -0
  74. package/dist/editors/tiptap/toolbar/ImageButton.svelte +54 -0
  75. package/dist/editors/tiptap/toolbar/ImageButton.svelte.d.ts +8 -0
  76. package/dist/editors/tiptap/toolbar/ItalicButton.svelte +18 -0
  77. package/dist/editors/tiptap/toolbar/ItalicButton.svelte.d.ts +7 -0
  78. package/dist/editors/tiptap/toolbar/LinkButton.svelte +257 -0
  79. package/dist/editors/tiptap/toolbar/LinkButton.svelte.d.ts +7 -0
  80. package/dist/editors/tiptap/toolbar/OrderedListButton.svelte +18 -0
  81. package/dist/editors/tiptap/toolbar/OrderedListButton.svelte.d.ts +7 -0
  82. package/dist/editors/tiptap/toolbar/RedoButton.svelte +18 -0
  83. package/dist/editors/tiptap/toolbar/RedoButton.svelte.d.ts +7 -0
  84. package/dist/editors/tiptap/toolbar/StrikethroughButton.svelte +18 -0
  85. package/dist/editors/tiptap/toolbar/StrikethroughButton.svelte.d.ts +7 -0
  86. package/dist/editors/tiptap/toolbar/SubscriptButton.svelte +18 -0
  87. package/dist/editors/tiptap/toolbar/SubscriptButton.svelte.d.ts +7 -0
  88. package/dist/editors/tiptap/toolbar/SuperscriptButton.svelte +18 -0
  89. package/dist/editors/tiptap/toolbar/SuperscriptButton.svelte.d.ts +7 -0
  90. package/dist/editors/tiptap/toolbar/TableButton.svelte +258 -0
  91. package/dist/editors/tiptap/toolbar/TableButton.svelte.d.ts +7 -0
  92. package/dist/editors/tiptap/toolbar/ToolbarButton.svelte +84 -0
  93. package/dist/editors/tiptap/toolbar/ToolbarButton.svelte.d.ts +10 -0
  94. package/dist/editors/tiptap/toolbar/UnderlineButton.svelte +18 -0
  95. package/dist/editors/tiptap/toolbar/UnderlineButton.svelte.d.ts +7 -0
  96. package/dist/editors/tiptap/toolbar/UndoButton.svelte +18 -0
  97. package/dist/editors/tiptap/toolbar/UndoButton.svelte.d.ts +7 -0
  98. package/dist/form/Autocomplete.svelte +86 -135
  99. package/dist/form/Autocomplete.svelte.d.ts +6 -8
  100. package/dist/form/AutocompleteMulti.svelte +385 -227
  101. package/dist/form/AutocompleteMulti.svelte.d.ts +59 -10
  102. package/dist/form/Checkbox.svelte +59 -54
  103. package/dist/form/Checkbox.svelte.d.ts +14 -5
  104. package/dist/form/Chips.svelte +29 -13
  105. package/dist/form/Chips.svelte.d.ts +16 -2
  106. package/dist/form/ComboBox.svelte +30 -20
  107. package/dist/form/ComboBox.svelte.d.ts +1 -1
  108. package/dist/form/ComboBoxItemBuilder.svelte +161 -188
  109. package/dist/form/ComboBoxItemBuilder.svelte.d.ts +19 -2
  110. package/dist/form/ComboBoxMulti.svelte +38 -24
  111. package/dist/form/ComboBoxMulti.svelte.d.ts +1 -1
  112. package/dist/form/CronBuilder.svelte +84 -67
  113. package/dist/form/CronBuilder.svelte.d.ts +16 -3
  114. package/dist/form/DatePicker.svelte +148 -195
  115. package/dist/form/DateRangePicker.svelte +101 -98
  116. package/dist/form/DateTimePicker.svelte +167 -208
  117. package/dist/form/DateTimePicker.svelte.d.ts +10 -2
  118. package/dist/form/FormGroup.svelte +33 -10
  119. package/dist/form/FormGroup.svelte.d.ts +12 -2
  120. package/dist/form/Number.svelte +70 -47
  121. package/dist/form/Number.svelte.d.ts +36 -6
  122. package/dist/form/Radio.svelte +18 -18
  123. package/dist/form/RadioGroup.svelte +23 -12
  124. package/dist/form/RadioGroup.svelte.d.ts +13 -2
  125. package/dist/form/SegmentedControl.svelte +76 -56
  126. package/dist/form/SegmentedControl.svelte.d.ts +9 -4
  127. package/dist/form/Select.svelte +150 -233
  128. package/dist/form/Select.svelte.d.ts +29 -5
  129. package/dist/form/SelectMulti.svelte +163 -277
  130. package/dist/form/SelectMulti.svelte.d.ts +36 -7
  131. package/dist/form/Slider.svelte +183 -269
  132. package/dist/form/Slider.svelte.d.ts +32 -17
  133. package/dist/form/StringArrayBuilder.svelte +249 -0
  134. package/dist/form/StringArrayBuilder.svelte.d.ts +15 -0
  135. package/dist/form/Switch.svelte +164 -106
  136. package/dist/form/Switch.svelte.d.ts +22 -3
  137. package/dist/form/TextArea.svelte +49 -29
  138. package/dist/form/TextArea.svelte.d.ts +23 -3
  139. package/dist/form/Textbox.svelte +69 -68
  140. package/dist/form/Textbox.svelte.d.ts +32 -4
  141. package/dist/form/TimePicker.svelte +42 -47
  142. package/dist/form/TimePicker.svelte.d.ts +12 -2
  143. package/dist/form/comboBoxCore.svelte.d.ts +99 -0
  144. package/dist/form/comboBoxCore.svelte.js +243 -0
  145. package/dist/icon/Icon.svelte +8 -3
  146. package/dist/icon/Icon.svelte.d.ts +8 -3
  147. package/dist/icon/file-type-bmp.svg +1 -0
  148. package/dist/icon/file-type-csv.svg +1 -0
  149. package/dist/icon/file-type-doc.svg +1 -0
  150. package/dist/icon/file-type-docx.svg +1 -0
  151. package/dist/icon/file-type-jpg.svg +1 -0
  152. package/dist/icon/file-type-pdf.svg +1 -0
  153. package/dist/icon/file-type-png.svg +1 -0
  154. package/dist/icon/file-type-ppt.svg +1 -0
  155. package/dist/icon/file-type-svg.svg +1 -0
  156. package/dist/icon/file-type-txt.svg +1 -0
  157. package/dist/icon/file-type-xls.svg +1 -0
  158. package/dist/icon/file-type-zip.svg +1 -0
  159. package/dist/icon/index.d.ts +166 -151
  160. package/dist/icon/index.js +166 -152
  161. package/dist/icon/logo-placeholder.svg +6 -0
  162. package/dist/icon/source-code.svg +1 -0
  163. package/dist/icon/sun-moon.svg +1 -0
  164. package/dist/icon/table.svg +6 -0
  165. package/dist/index.d.ts +87 -26
  166. package/dist/index.js +25 -28
  167. package/dist/layout/AppShell.svelte +12 -162
  168. package/dist/layout/AppShell.svelte.d.ts +6 -27
  169. package/dist/layout/CustomNavbar.svelte +9 -7
  170. package/dist/layout/CustomNavbar.svelte.d.ts +4 -2
  171. package/dist/layout/Navbar.svelte +161 -129
  172. package/dist/layout/Navbar.svelte.d.ts +29 -15
  173. package/dist/layout/NavbarItemDisplay.svelte +2 -2
  174. package/dist/layout/NavbarItemView.svelte +182 -0
  175. package/dist/layout/NavbarItemView.svelte.d.ts +10 -0
  176. package/dist/layout/Sidenav.svelte +280 -341
  177. package/dist/layout/Sidenav.svelte.d.ts +36 -4
  178. package/dist/models/ComboBoxItem.d.ts +2 -0
  179. package/dist/models/Employee.d.ts +53 -0
  180. package/dist/models/Employee.js +23 -0
  181. package/dist/models/Hyperlink.d.ts +3 -1
  182. package/dist/models/LinkCollectionItem.d.ts +3 -1
  183. package/dist/models/NavbarItem.d.ts +6 -2
  184. package/dist/theme.svelte.d.ts +0 -1
  185. package/dist/theme.svelte.js +46 -58
  186. package/dist/ui/Accordion.svelte +81 -242
  187. package/dist/ui/Accordion.svelte.d.ts +37 -14
  188. package/dist/ui/AccordionItem.svelte +303 -0
  189. package/dist/ui/AccordionItem.svelte.d.ts +21 -0
  190. package/dist/ui/ActionIcon.svelte +25 -21
  191. package/dist/ui/ActionIcon.svelte.d.ts +15 -2
  192. package/dist/ui/Badge.svelte +163 -171
  193. package/dist/ui/Badge.svelte.d.ts +13 -5
  194. package/dist/ui/Button.svelte +178 -205
  195. package/dist/ui/Button.svelte.d.ts +19 -2
  196. package/dist/ui/ButtonVariant.d.ts +15 -1
  197. package/dist/ui/ContextMenu.svelte +146 -0
  198. package/dist/ui/ContextMenu.svelte.d.ts +37 -0
  199. package/dist/ui/ContextMenuList.svelte +188 -0
  200. package/dist/ui/ContextMenuList.svelte.d.ts +12 -0
  201. package/dist/ui/Dialog.svelte +183 -111
  202. package/dist/ui/Dialog.svelte.d.ts +21 -4
  203. package/dist/ui/Drawer.svelte +237 -184
  204. package/dist/ui/Drawer.svelte.d.ts +20 -2
  205. package/dist/ui/Dropdown.svelte +24 -14
  206. package/dist/ui/Dropdown.svelte.d.ts +11 -2
  207. package/dist/ui/Dropzone.svelte +159 -57
  208. package/dist/ui/Dropzone.svelte.d.ts +29 -2
  209. package/dist/ui/Link.svelte +12 -4
  210. package/dist/ui/Link.svelte.d.ts +8 -2
  211. package/dist/ui/Loader.svelte +23 -18
  212. package/dist/ui/Loader.svelte.d.ts +5 -2
  213. package/dist/ui/Logo.svelte +37 -0
  214. package/dist/ui/Logo.svelte.d.ts +16 -0
  215. package/dist/ui/MultiSortable.svelte +287 -0
  216. package/dist/ui/MultiSortable.svelte.d.ts +50 -0
  217. package/dist/ui/Pagination.svelte +15 -9
  218. package/dist/ui/Pagination.svelte.d.ts +6 -2
  219. package/dist/ui/Popover.svelte +43 -65
  220. package/dist/ui/Popover.svelte.d.ts +14 -5
  221. package/dist/ui/ProgressBar.svelte +28 -30
  222. package/dist/ui/ProgressBarVariant.d.ts +7 -1
  223. package/dist/ui/SegmentedControl.svelte +0 -0
  224. package/dist/ui/SegmentedControl.svelte.d.ts +26 -0
  225. package/dist/ui/Sortable.svelte +163 -0
  226. package/dist/ui/Sortable.svelte.d.ts +47 -0
  227. package/dist/ui/Table.svelte +383 -80
  228. package/dist/ui/Table.svelte.d.ts +43 -2
  229. package/dist/ui/Tabs.svelte +22 -18
  230. package/dist/ui/Tabs.svelte.d.ts +6 -2
  231. package/dist/ui/ThemeSwitcher.svelte +26 -7
  232. package/dist/ui/ThemeSwitcher.svelte.d.ts +4 -2
  233. package/dist/ui/Tooltip.svelte +312 -180
  234. package/dist/ui/Tooltip.svelte.d.ts +4 -3
  235. package/dist/uiTheme.svelte.d.ts +86 -0
  236. package/dist/uiTheme.svelte.js +214 -0
  237. package/dist/util/DateFunctions.js +1 -1
  238. package/dist/util/DragDrop.d.ts +50 -0
  239. package/dist/util/DragDrop.js +154 -0
  240. package/dist/util/NavigateTo.js +2 -2
  241. package/dist/util/dayjs.d.ts +4 -0
  242. package/dist/util/dayjs.js +15 -0
  243. package/package.json +66 -26
  244. package/dist/display/Alert.svelte +0 -179
  245. package/dist/display/Alert.svelte.d.ts +0 -13
  246. package/dist/form/FileInput.svelte +0 -235
  247. package/dist/form/FileInput.svelte.d.ts +0 -23
  248. package/dist/form/PasswordInput.svelte +0 -253
  249. package/dist/form/PasswordInput.svelte.d.ts +0 -34
  250. package/dist/form/Rating.svelte +0 -235
  251. package/dist/form/Rating.svelte.d.ts +0 -21
  252. package/dist/styles/components.css +0 -199
  253. package/dist/styles/dark.css +0 -146
  254. package/dist/styles/index.css +0 -116
  255. package/dist/styles/reset.css +0 -110
  256. package/dist/styles/semantic.css +0 -86
  257. package/dist/styles/tokens.css +0 -203
  258. package/dist/styles/utilities.css +0 -523
  259. package/dist/ui/Breadcrumbs.svelte +0 -131
  260. package/dist/ui/Breadcrumbs.svelte.d.ts +0 -16
  261. package/dist/ui/LoadingOverlay.svelte +0 -53
  262. package/dist/ui/LoadingOverlay.svelte.d.ts +0 -11
  263. package/dist/ui/Progress.svelte +0 -191
  264. package/dist/ui/Progress.svelte.d.ts +0 -15
  265. package/dist/ui/RingProgress.svelte +0 -141
  266. package/dist/ui/RingProgress.svelte.d.ts +0 -18
  267. package/dist/ui/Skeleton.svelte +0 -85
  268. package/dist/ui/Skeleton.svelte.d.ts +0 -12
  269. package/dist/ui/Stepper.svelte +0 -355
  270. package/dist/ui/Stepper.svelte.d.ts +0 -24
  271. package/dist/ui/Timeline.svelte +0 -225
  272. package/dist/ui/Timeline.svelte.d.ts +0 -23
  273. /package/dist/{actions → util}/ClickOutside.d.ts +0 -0
  274. /package/dist/{actions → util}/ClickOutside.js +0 -0
  275. /package/dist/{transitions → util}/Transitions.d.ts +0 -0
  276. /package/dist/{transitions → util}/Transitions.js +0 -0
@@ -0,0 +1,258 @@
1
+ <script lang="ts">
2
+ import type { Editor } from '@tiptap/core'
3
+ import ToolbarButton from './ToolbarButton.svelte'
4
+ import { iconTable } from '../../../icon/index.js'
5
+
6
+ interface Props {
7
+ editor: Editor
8
+ }
9
+
10
+ let { editor }: Props = $props()
11
+
12
+ let showMenu = $state(false)
13
+ let hoverRows = $state(0)
14
+ let hoverCols = $state(0)
15
+
16
+ const GRID_SIZE = 6
17
+
18
+ const toggleMenu = () => {
19
+ showMenu = !showMenu
20
+ hoverRows = 0
21
+ hoverCols = 0
22
+ }
23
+
24
+ const insertTable = (rows: number, cols: number) => {
25
+ editor.chain().focus().insertTable({ rows, cols, withHeaderRow: true }).run()
26
+ showMenu = false
27
+ }
28
+
29
+ const runCommand = (command: () => boolean) => {
30
+ command()
31
+ showMenu = false
32
+ }
33
+ </script>
34
+
35
+ <div style="position: relative; display: inline-block;">
36
+ <ToolbarButton
37
+ icon={iconTable}
38
+ title="Table"
39
+ active={showMenu || editor.isActive('table')}
40
+ onclick={toggleMenu}
41
+ />
42
+
43
+ {#if showMenu}
44
+ <div class="table-menu">
45
+ {#if editor.isActive('table')}
46
+ <div class="menu-title">Table actions</div>
47
+ <button
48
+ class="menu-item"
49
+ type="button"
50
+ onclick={() => runCommand(() => editor.chain().focus().addRowBefore().run())}
51
+ >
52
+ Add row above
53
+ </button>
54
+ <button
55
+ class="menu-item"
56
+ type="button"
57
+ onclick={() => runCommand(() => editor.chain().focus().addRowAfter().run())}
58
+ >
59
+ Add row below
60
+ </button>
61
+ <button
62
+ class="menu-item"
63
+ type="button"
64
+ onclick={() => runCommand(() => editor.chain().focus().addColumnBefore().run())}
65
+ >
66
+ Add column left
67
+ </button>
68
+ <button
69
+ class="menu-item"
70
+ type="button"
71
+ onclick={() => runCommand(() => editor.chain().focus().addColumnAfter().run())}
72
+ >
73
+ Add column right
74
+ </button>
75
+
76
+ <div class="menu-divider"></div>
77
+
78
+ <button
79
+ class="menu-item"
80
+ type="button"
81
+ onclick={() => runCommand(() => editor.chain().focus().toggleHeaderRow().run())}
82
+ >
83
+ Toggle header row
84
+ </button>
85
+ <button
86
+ class="menu-item"
87
+ type="button"
88
+ disabled={!editor.can().mergeCells()}
89
+ onclick={() => runCommand(() => editor.chain().focus().mergeCells().run())}
90
+ >
91
+ Merge cells
92
+ </button>
93
+ <button
94
+ class="menu-item"
95
+ type="button"
96
+ disabled={!editor.can().splitCell()}
97
+ onclick={() => runCommand(() => editor.chain().focus().splitCell().run())}
98
+ >
99
+ Split cell
100
+ </button>
101
+
102
+ <div class="menu-divider"></div>
103
+
104
+ <button
105
+ class="menu-item"
106
+ type="button"
107
+ onclick={() => runCommand(() => editor.chain().focus().deleteRow().run())}
108
+ >
109
+ Delete row
110
+ </button>
111
+ <button
112
+ class="menu-item"
113
+ type="button"
114
+ onclick={() => runCommand(() => editor.chain().focus().deleteColumn().run())}
115
+ >
116
+ Delete column
117
+ </button>
118
+ <button
119
+ class="menu-item danger"
120
+ type="button"
121
+ onclick={() => runCommand(() => editor.chain().focus().deleteTable().run())}
122
+ >
123
+ Delete table
124
+ </button>
125
+ {:else}
126
+ <div class="menu-title">Insert table</div>
127
+ <div class="size-grid" onmouseleave={() => { hoverRows = 0; hoverCols = 0 }} role="presentation">
128
+ {#each Array(GRID_SIZE) as _, row}
129
+ {#each Array(GRID_SIZE) as _, col}
130
+ <button
131
+ class="size-cell"
132
+ class:highlighted={row < hoverRows && col < hoverCols}
133
+ type="button"
134
+ aria-label="Insert {row + 1} by {col + 1} table"
135
+ onmouseenter={() => {
136
+ hoverRows = row + 1
137
+ hoverCols = col + 1
138
+ }}
139
+ onclick={() => insertTable(row + 1, col + 1)}
140
+ ></button>
141
+ {/each}
142
+ {/each}
143
+ </div>
144
+ <div class="size-label">
145
+ {hoverRows > 0 ? `${hoverRows} × ${hoverCols}` : 'Select size'}
146
+ </div>
147
+ {/if}
148
+ </div>
149
+ {/if}
150
+ </div>
151
+
152
+ <style>
153
+ .table-menu {
154
+ position: absolute;
155
+ top: 100%;
156
+ left: 0;
157
+ margin-top: 4px;
158
+ display: flex;
159
+ flex-direction: column;
160
+ gap: 2px;
161
+ padding: 8px;
162
+ background: var(--paper-body-bg);
163
+ border: 1px solid var(--border-color);
164
+ border-radius: 6px;
165
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
166
+ z-index: 1000;
167
+ min-width: 180px;
168
+ }
169
+
170
+ :global(.dark) .table-menu {
171
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
172
+ }
173
+
174
+ .menu-title {
175
+ font-size: 11px;
176
+ font-weight: 600;
177
+ color: var(--text-muted);
178
+ text-transform: uppercase;
179
+ letter-spacing: 0.05em;
180
+ padding: 2px 8px 6px 8px;
181
+ }
182
+
183
+ .menu-item {
184
+ padding: 6px 8px;
185
+ border: none;
186
+ background: transparent;
187
+ color: var(--text-color);
188
+ font-size: 13px;
189
+ text-align: left;
190
+ border-radius: 4px;
191
+ cursor: pointer;
192
+ transition: background 0.15s ease;
193
+ white-space: nowrap;
194
+ }
195
+
196
+ .menu-item:hover:not(:disabled) {
197
+ background: rgba(var(--ui-primary-rgbc), 0.1);
198
+ }
199
+
200
+ :global(.dark) .menu-item:hover:not(:disabled) {
201
+ background: rgba(var(--ui-accent-rgbc), 0.1);
202
+ }
203
+
204
+ .menu-item:disabled {
205
+ opacity: 0.4;
206
+ cursor: not-allowed;
207
+ }
208
+
209
+ .menu-item.danger {
210
+ color: #dc3545;
211
+ }
212
+
213
+ :global(.dark) .menu-item.danger {
214
+ color: #ea868f;
215
+ }
216
+
217
+ .menu-divider {
218
+ height: 1px;
219
+ background: var(--border-color);
220
+ margin: 4px 0;
221
+ }
222
+
223
+ .size-grid {
224
+ display: grid;
225
+ grid-template-columns: repeat(6, 20px);
226
+ gap: 3px;
227
+ padding: 0 8px;
228
+ justify-content: center;
229
+ }
230
+
231
+ .size-cell {
232
+ width: 20px;
233
+ height: 20px;
234
+ padding: 0;
235
+ border: 1px solid var(--border-color);
236
+ border-radius: 3px;
237
+ background: var(--paper-body-bg);
238
+ cursor: pointer;
239
+ transition: all 0.1s ease;
240
+ }
241
+
242
+ .size-cell.highlighted {
243
+ background: var(--ui-tertiary);
244
+ border-color: var(--ui-tertiary-dark);
245
+ }
246
+
247
+ :global(.dark) .size-cell.highlighted {
248
+ background: var(--ui-accent);
249
+ border-color: var(--ui-accent-dark);
250
+ }
251
+
252
+ .size-label {
253
+ text-align: center;
254
+ font-size: 12px;
255
+ color: var(--text-muted);
256
+ padding: 6px 0 2px 0;
257
+ }
258
+ </style>
@@ -0,0 +1,7 @@
1
+ import type { Editor } from '@tiptap/core';
2
+ interface Props {
3
+ editor: Editor;
4
+ }
5
+ declare const TableButton: import("svelte").Component<Props, {}, "">;
6
+ type TableButton = ReturnType<typeof TableButton>;
7
+ export default TableButton;
@@ -0,0 +1,84 @@
1
+ <script lang="ts">
2
+ import { Icon } from '../../../icon/index.js'
3
+
4
+ interface Props {
5
+ icon: string
6
+ title: string
7
+ active?: boolean
8
+ disabled?: boolean
9
+ onclick: () => void
10
+ }
11
+
12
+ let {
13
+ icon,
14
+ title,
15
+ active = false,
16
+ disabled = false,
17
+ onclick
18
+ }: Props = $props()
19
+ </script>
20
+
21
+ <button
22
+ class="toolbar-button"
23
+ type="button"
24
+ tabindex="-1"
25
+ {onclick}
26
+ {disabled}
27
+ {title}
28
+ class:active
29
+ >
30
+ <Icon svg={icon} size="20" />
31
+ </button>
32
+
33
+ <style>
34
+ .toolbar-button {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ width: 32px;
39
+ height: 28px;
40
+ padding: 0;
41
+ border: none;
42
+ background: transparent;
43
+ color: var(--text-color);
44
+ border-radius: 4px;
45
+ cursor: pointer;
46
+ transition: all 0.15s ease;
47
+ }
48
+
49
+ .toolbar-button:hover:not(:disabled) {
50
+ background: rgba(var(--ui-primary-rgbc), 0.1);
51
+ color: var(--ui-primary);
52
+ }
53
+
54
+ :global(.dark) .toolbar-button:hover:not(:disabled) {
55
+ background: rgba(var(--ui-accent-rgbc), 0.1);
56
+ color: var(--ui-accent);
57
+ }
58
+
59
+ .toolbar-button:active:not(:disabled) {
60
+ background: rgba(var(--ui-primary-rgbc), 0.15);
61
+ }
62
+
63
+ :global(.dark) .toolbar-button:active:not(:disabled) {
64
+ background: rgba(var(--ui-accent-rgbc), 0.15);
65
+ }
66
+
67
+ .toolbar-button.active {
68
+ background: var(--ui-primary);
69
+ color: white;
70
+ }
71
+
72
+ .toolbar-button.active:hover {
73
+ background: var(--ui-tertiary-dark);
74
+ }
75
+
76
+ .toolbar-button:disabled {
77
+ opacity: 0.4;
78
+ cursor: not-allowed;
79
+ }
80
+
81
+ .toolbar-button :global(.cu-icon) {
82
+ height: 19px;
83
+ }
84
+ </style>
@@ -0,0 +1,10 @@
1
+ interface Props {
2
+ icon: string;
3
+ title: string;
4
+ active?: boolean;
5
+ disabled?: boolean;
6
+ onclick: () => void;
7
+ }
8
+ declare const ToolbarButton: import("svelte").Component<Props, {}, "">;
9
+ type ToolbarButton = ReturnType<typeof ToolbarButton>;
10
+ export default ToolbarButton;
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import type { Editor } from '@tiptap/core'
3
+ import ToolbarButton from './ToolbarButton.svelte'
4
+ import { iconUnderline } from '../../../icon/index.js'
5
+
6
+ interface Props {
7
+ editor: Editor
8
+ }
9
+
10
+ let { editor }: Props = $props()
11
+ </script>
12
+
13
+ <ToolbarButton
14
+ icon={iconUnderline}
15
+ title="Underline"
16
+ active={editor.isActive('underline')}
17
+ onclick={() => editor.chain().focus().toggleUnderline().run()}
18
+ />
@@ -0,0 +1,7 @@
1
+ import type { Editor } from '@tiptap/core';
2
+ interface Props {
3
+ editor: Editor;
4
+ }
5
+ declare const UnderlineButton: import("svelte").Component<Props, {}, "">;
6
+ type UnderlineButton = ReturnType<typeof UnderlineButton>;
7
+ export default UnderlineButton;
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import type { Editor } from '@tiptap/core'
3
+ import ToolbarButton from './ToolbarButton.svelte'
4
+ import { iconArrowBackUp } from '../../../icon/index.js'
5
+
6
+ interface Props {
7
+ editor: Editor
8
+ }
9
+
10
+ let { editor }: Props = $props()
11
+ </script>
12
+
13
+ <ToolbarButton
14
+ icon={iconArrowBackUp}
15
+ title="Undo"
16
+ disabled={!editor.can().undo()}
17
+ onclick={() => editor.chain().focus().undo().run()}
18
+ />
@@ -0,0 +1,7 @@
1
+ import type { Editor } from '@tiptap/core';
2
+ interface Props {
3
+ editor: Editor;
4
+ }
5
+ declare const UndoButton: import("svelte").Component<Props, {}, "">;
6
+ type UndoButton = ReturnType<typeof UndoButton>;
7
+ export default UndoButton;