tetrons 2.2.4 → 2.2.6

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 (81) hide show
  1. package/dist/app/api/export/{route.js → route.ts} +2 -2
  2. package/dist/app/api/register/route.ts +36 -0
  3. package/dist/app/api/save/route.ts +18 -0
  4. package/dist/app/api/validate/route.ts +26 -0
  5. package/dist/index.d.ts +8 -3
  6. package/dist/index.js +17214 -4
  7. package/package.json +3 -4
  8. package/dist/app/api/export/route.d.ts +0 -1
  9. package/dist/app/api/register/route.d.ts +0 -6
  10. package/dist/app/api/register/route.js +0 -26
  11. package/dist/app/api/save/route.d.ts +0 -6
  12. package/dist/app/api/save/route.js +0 -15
  13. package/dist/app/api/validate/route.d.ts +0 -7
  14. package/dist/app/api/validate/route.js +0 -18
  15. package/dist/app/layout.d.ts +0 -6
  16. package/dist/app/layout.jsx +0 -30
  17. package/dist/app/page.d.ts +0 -2
  18. package/dist/app/page.jsx +0 -55
  19. package/dist/components/UI/Button.d.ts +0 -0
  20. package/dist/components/UI/Button.jsx +0 -1
  21. package/dist/components/UI/Dropdown.d.ts +0 -0
  22. package/dist/components/UI/Dropdown.jsx +0 -1
  23. package/dist/components/tetrons/EditorContent.d.ts +0 -6
  24. package/dist/components/tetrons/EditorContent.jsx +0 -193
  25. package/dist/components/tetrons/ResizableImage.d.ts +0 -1
  26. package/dist/components/tetrons/ResizableImage.js +0 -40
  27. package/dist/components/tetrons/ResizableImageComponent.d.ts +0 -11
  28. package/dist/components/tetrons/ResizableImageComponent.jsx +0 -37
  29. package/dist/components/tetrons/ResizableVideo.d.ts +0 -12
  30. package/dist/components/tetrons/ResizableVideo.js +0 -61
  31. package/dist/components/tetrons/ResizableVideoComponent.d.ts +0 -4
  32. package/dist/components/tetrons/ResizableVideoComponent.jsx +0 -32
  33. package/dist/components/tetrons/helpers.d.ts +0 -0
  34. package/dist/components/tetrons/helpers.js +0 -1
  35. package/dist/components/tetrons/toolbar/ActionGroup.d.ts +0 -7
  36. package/dist/components/tetrons/toolbar/ActionGroup.jsx +0 -167
  37. package/dist/components/tetrons/toolbar/ClipboardGroup.d.ts +0 -5
  38. package/dist/components/tetrons/toolbar/ClipboardGroup.jsx +0 -36
  39. package/dist/components/tetrons/toolbar/FileGroup.d.ts +0 -7
  40. package/dist/components/tetrons/toolbar/FileGroup.jsx +0 -40
  41. package/dist/components/tetrons/toolbar/FontStyleGroup.d.ts +0 -7
  42. package/dist/components/tetrons/toolbar/FontStyleGroup.jsx +0 -104
  43. package/dist/components/tetrons/toolbar/InsertGroup.d.ts +0 -5
  44. package/dist/components/tetrons/toolbar/InsertGroup.jsx +0 -163
  45. package/dist/components/tetrons/toolbar/ListAlignGroup.d.ts +0 -5
  46. package/dist/components/tetrons/toolbar/ListAlignGroup.jsx +0 -16
  47. package/dist/components/tetrons/toolbar/MiscGroup.d.ts +0 -7
  48. package/dist/components/tetrons/toolbar/MiscGroup.jsx +0 -31
  49. package/dist/components/tetrons/toolbar/TableContextMenu.d.ts +0 -7
  50. package/dist/components/tetrons/toolbar/TableContextMenu.jsx +0 -52
  51. package/dist/components/tetrons/toolbar/TetronsToolbar.d.ts +0 -5
  52. package/dist/components/tetrons/toolbar/TetronsToolbar.jsx +0 -44
  53. package/dist/components/tetrons/toolbar/ToolbarButton.d.ts +0 -12
  54. package/dist/components/tetrons/toolbar/ToolbarButton.jsx +0 -8
  55. package/dist/components/tetrons/toolbar/extensions/Comment.d.ts +0 -17
  56. package/dist/components/tetrons/toolbar/extensions/Comment.js +0 -45
  57. package/dist/components/tetrons/toolbar/extensions/Embed.d.ts +0 -2
  58. package/dist/components/tetrons/toolbar/extensions/Embed.js +0 -90
  59. package/dist/components/tetrons/toolbar/extensions/FontFamily.d.ts +0 -9
  60. package/dist/components/tetrons/toolbar/extensions/FontFamily.js +0 -28
  61. package/dist/components/tetrons/toolbar/extensions/FontSize.d.ts +0 -9
  62. package/dist/components/tetrons/toolbar/extensions/FontSize.js +0 -28
  63. package/dist/components/tetrons/toolbar/extensions/ResizableTable.d.ts +0 -1
  64. package/dist/components/tetrons/toolbar/extensions/ResizableTable.js +0 -11
  65. package/dist/components/tetrons/toolbar/marks/Subscript.d.ts +0 -2
  66. package/dist/components/tetrons/toolbar/marks/Subscript.js +0 -35
  67. package/dist/components/tetrons/toolbar/marks/Superscript.d.ts +0 -2
  68. package/dist/components/tetrons/toolbar/marks/Superscript.js +0 -35
  69. package/dist/lib/db.d.ts +0 -1
  70. package/dist/lib/db.js +0 -15
  71. package/dist/lib/export.d.ts +0 -0
  72. package/dist/lib/export.js +0 -1
  73. package/dist/lib/tiptap-extensions.d.ts +0 -0
  74. package/dist/lib/tiptap-extensions.js +0 -1
  75. package/dist/models/ApiKey.d.ts +0 -2
  76. package/dist/models/ApiKey.js +0 -14
  77. package/dist/styles/styles/tetrons.css +0 -371
  78. package/dist/utils/apiKeyUtils.d.ts +0 -11
  79. package/dist/utils/apiKeyUtils.js +0 -17
  80. package/dist/utils/loadEmojiPicker.d.ts +0 -1
  81. package/dist/utils/loadEmojiPicker.js +0 -12
@@ -1,371 +0,0 @@
1
- .editor-container {
2
- display: flex;
3
- flex-direction: column;
4
- height: 100%;
5
- }
6
-
7
- .editor-toolbar {
8
- padding: 0.5rem;
9
- border-bottom: 1px solid #d1d5db;
10
- background-color: #f9fafb;
11
- display: flex;
12
- flex-wrap: wrap;
13
- align-items: center;
14
- gap: 0.75rem;
15
- }
16
-
17
- .editor-save-btn {
18
- padding: 0.25rem 0.75rem;
19
- background-color: #2563eb;
20
- color: white;
21
- border-radius: 0.375rem;
22
- transition: background-color 0.2s;
23
- }
24
-
25
- .editor-save-btn:hover {
26
- background-color: #1d4ed8;
27
- }
28
-
29
- .editor-save-btn:disabled {
30
- opacity: 0.5;
31
- cursor: not-allowed;
32
- }
33
-
34
- .editor-version-btn {
35
- padding: 0.25rem 0.5rem;
36
- border: 1px solid #d1d5db;
37
- color: #374151;
38
- border-radius: 0.375rem;
39
- font-size: 0.875rem;
40
- white-space: nowrap;
41
- transition: all 0.2s;
42
- background: none;
43
- }
44
-
45
- .editor-version-btn:hover {
46
- border-color: #4b5563;
47
- }
48
-
49
- .editor-version-btn.active {
50
- border-color: #2563eb;
51
- color: #2563eb;
52
- font-weight: 600;
53
- }
54
-
55
- .editor-content-wrapper {
56
- flex-grow: 1;
57
- padding: 1.5rem;
58
- background-color: white;
59
- border: 1px solid #d1d5db;
60
- border-radius: 0.5rem;
61
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
62
- overflow: auto;
63
- position: relative;
64
- min-height: 0;
65
- }
66
-
67
- .editor-loading {
68
- color: #6b7280;
69
- font-size: 0.875rem;
70
- text-align: center;
71
- padding: 1rem;
72
- }
73
-
74
- .editor-content-wrapper .ProseMirror {
75
- outline: none;
76
- min-height: 300px;
77
- font-size: 1rem;
78
- line-height: 1.75;
79
- }
80
-
81
- .editor-content-wrapper .ProseMirror[data-placeholder]:empty::before {
82
- content: attr(data-placeholder);
83
- color: #9ca3af;
84
- float: left;
85
- height: 0;
86
- pointer-events: none;
87
- }
88
-
89
- .ProseMirror pre {
90
- background: #f3f4f6;
91
- padding: 1rem;
92
- border-radius: 0.375rem;
93
- font-family: monospace;
94
- font-size: 0.875rem;
95
- overflow-x: auto;
96
- }
97
-
98
- .editor-versions-wrapper {
99
- display: flex;
100
- align-items: center;
101
- gap: 0.5rem;
102
- overflow-x: auto;
103
- max-width: 100%;
104
- }
105
-
106
- .editor-no-versions {
107
- color: #6b7280;
108
- font-size: 0.875rem;
109
- }
110
-
111
- .tetrons-toolbar {
112
- display: flex;
113
- flex-wrap: wrap;
114
- align-items: center;
115
- gap: 1rem;
116
- padding: 0.75rem;
117
- border-bottom: 1px solid #e5e7eb;
118
- background-color: white;
119
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
120
- position: relative;
121
- z-index: 10;
122
- }
123
-
124
- .tetrons-toolbar .group {
125
- display: flex;
126
- align-items: center;
127
- gap: 0.5rem;
128
- border-right: 1px solid #e5e7eb;
129
- padding-right: 0.75rem;
130
- }
131
-
132
- .tetrons-toolbar input[type="checkbox"] {
133
- width: 1rem;
134
- height: 1rem;
135
- }
136
-
137
- .tetrons-toolbar label {
138
- font-size: 0.875rem;
139
- user-select: none;
140
- -webkit-user-select: none;
141
- }
142
-
143
- .misc-group {
144
- display: flex;
145
- gap: 0.25rem;
146
- align-items: center;
147
- border-right: 1px solid #e5e7eb;
148
- padding-right: 0.75rem;
149
- }
150
-
151
- .list-align-group {
152
- display: flex;
153
- gap: 0.25rem;
154
- border-right: 1px solid #e5e7eb;
155
- padding-right: 0.75rem;
156
- align-items: center;
157
- }
158
-
159
- .insert-group {
160
- display: flex;
161
- gap: 0.25rem;
162
- border-right: 1px solid #e5e7eb;
163
- padding-right: 0.75rem;
164
- position: relative;
165
- align-items: center;
166
- }
167
-
168
- .table-grid-popup {
169
- position: absolute;
170
- top: 2.5rem;
171
- left: 0;
172
- background-color: white;
173
- border: 1px solid #d1d5db;
174
- border-radius: 0.25rem;
175
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
176
- padding: 0.5rem;
177
- z-index: 20;
178
- }
179
-
180
- .table-grid {
181
- display: grid;
182
- grid-template-columns: repeat(10, 1fr);
183
- gap: 1px;
184
- }
185
-
186
- .table-grid-cell {
187
- width: 1.25rem;
188
- height: 1.25rem;
189
- border: 1px solid #d1d5db;
190
- background-color: #f3f4f6;
191
- cursor: pointer;
192
- }
193
-
194
- .table-grid-cell.selected {
195
- background-color: #3b82f6;
196
- }
197
-
198
- .table-grid-label {
199
- margin-top: 0.5rem;
200
- font-size: 0.75rem;
201
- text-align: center;
202
- color: #6b7280;
203
- }
204
-
205
- .hidden-input {
206
- display: none;
207
- }
208
-
209
- .emoji-picker {
210
- position: absolute;
211
- top: 2.5rem;
212
- left: 0;
213
- z-index: 50;
214
- }
215
-
216
- .font-style-group {
217
- display: flex;
218
- gap: 0.25rem;
219
- border-right: 1px solid #e5e7eb;
220
- padding-right: 0.75rem;
221
- align-items: center;
222
- }
223
-
224
- .font-style-group select {
225
- font-size: 0.875rem;
226
- border: 1px solid #d1d5db;
227
- border-radius: 0.25rem;
228
- padding: 0.125rem 0.25rem;
229
- margin-right: 0.5rem;
230
- }
231
-
232
- .color-label {
233
- position: relative;
234
- width: 2rem;
235
- height: 2rem;
236
- display: flex;
237
- justify-content: center;
238
- align-items: center;
239
- cursor: pointer;
240
- }
241
-
242
- .color-indicator {
243
- content: "";
244
- position: absolute;
245
- bottom: 2px;
246
- left: 50%;
247
- transform: translateX(-50%);
248
- width: 12px;
249
- height: 4px;
250
- background-color: var(--indicator-color, #000000);
251
- border-radius: 2px;
252
- pointer-events: none;
253
- }
254
-
255
- .color-label input[type="color"] {
256
- position: absolute;
257
- inset: 0;
258
- opacity: 0;
259
- cursor: pointer;
260
- }
261
-
262
- .file-group {
263
- display: flex;
264
- align-items: center;
265
- gap: 0.25rem;
266
- border-right: 1px solid #e5e7eb;
267
- padding-right: 0.75rem;
268
- }
269
-
270
- .file-group input[type="file"] {
271
- display: none;
272
- }
273
-
274
- .clipboard-group {
275
- display: flex;
276
- gap: 0.25rem;
277
- border-right: 1px solid #e5e7eb;
278
- padding-right: 0.75rem;
279
- }
280
-
281
- .action-group {
282
- position: relative;
283
- display: flex;
284
- align-items: center;
285
- gap: 0.25rem;
286
- }
287
-
288
- .export-button {
289
- display: flex;
290
- align-items: center;
291
- gap: 0.25rem;
292
- padding: 0.25rem 0.5rem;
293
- border-radius: 0.25rem;
294
- background: transparent;
295
- cursor: pointer;
296
- }
297
-
298
- .export-button:hover {
299
- background-color: #f3f4f6;
300
- }
301
-
302
- .export-button:focus {
303
- outline: none;
304
- }
305
-
306
- .export-dropdown {
307
- position: absolute;
308
- z-index: 10;
309
- margin-top: 0.5rem;
310
- width: 10rem;
311
- background-color: #fff;
312
- border: 1px solid #e5e7eb;
313
- border-radius: 0.25rem;
314
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
315
- }
316
-
317
- .export-dropdown button {
318
- width: 100%;
319
- text-align: left;
320
- padding: 0.5rem 1rem;
321
- background: none;
322
- border: none;
323
- font-size: 0.875rem;
324
- cursor: pointer;
325
- }
326
-
327
- .export-dropdown button:hover {
328
- background-color: #f3f4f6;
329
- }
330
-
331
- .toolbar-button {
332
- padding: 0.5rem;
333
- border: none;
334
- background-color: transparent;
335
- border-radius: 0.375rem;
336
- cursor: pointer;
337
- display: flex;
338
- align-items: center;
339
- justify-content: center;
340
- transition: background-color 0.2s ease;
341
- }
342
-
343
- .toolbar-button:hover {
344
- background-color: #e5e7eb;
345
- }
346
-
347
- .toolbar-button.active {
348
- background-color: #d1d5db;
349
- }
350
-
351
- .toolbar-button:disabled {
352
- opacity: 0.5;
353
- cursor: not-allowed;
354
- }
355
-
356
- .tableWrapper {
357
- overflow-x: auto;
358
- margin: 1rem 0;
359
- }
360
-
361
- .tableWrapper table {
362
- width: 100%;
363
- border-collapse: collapse;
364
- }
365
-
366
- .tableWrapper th,
367
- .tableWrapper td {
368
- border: 1px solid #d1d5db;
369
- padding: 0.5rem;
370
- text-align: left;
371
- }
@@ -1,11 +0,0 @@
1
- /**
2
- * Generates a secure random API key
3
- * @param length Length of the key (default 48 characters)
4
- * @returns Hex string API key
5
- */
6
- export declare function generateApiKey(length?: number): string;
7
- /**
8
- * Generates a unique key with optional prefix (e.g., for versioning or branding)
9
- * @param prefix Optional prefix like 'PRO-', 'PREMIUM-', etc.
10
- */
11
- export declare function generateVersionedKey(prefix?: string): string;
@@ -1,17 +0,0 @@
1
- import crypto from "crypto";
2
- /**
3
- * Generates a secure random API key
4
- * @param length Length of the key (default 48 characters)
5
- * @returns Hex string API key
6
- */
7
- export function generateApiKey(length = 48) {
8
- return crypto.randomBytes(length / 2).toString("hex"); // length must be even
9
- }
10
- /**
11
- * Generates a unique key with optional prefix (e.g., for versioning or branding)
12
- * @param prefix Optional prefix like 'PRO-', 'PREMIUM-', etc.
13
- */
14
- export function generateVersionedKey(prefix = "") {
15
- const key = generateApiKey(48);
16
- return `${prefix}${key}`;
17
- }
@@ -1 +0,0 @@
1
- export declare const loadEmojiPicker: () => void;
@@ -1,12 +0,0 @@
1
- export const loadEmojiPicker = () => {
2
- if (typeof window === "undefined")
3
- return;
4
- if (!window.EmojiButton && !document.getElementById("emoji-picker-script")) {
5
- const script = document.createElement("script");
6
- script.id = "emoji-picker-script";
7
- script.src =
8
- "https://cdn.jsdelivr.net/npm/@joeattardi/emoji-button@latest/dist/index.min.js";
9
- script.async = true;
10
- document.body.appendChild(script);
11
- }
12
- };