@thangph2146/lexical-editor 0.0.3 → 0.0.5

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 (100) hide show
  1. package/dist/editor-x/editor.cjs +724 -435
  2. package/dist/editor-x/editor.cjs.map +1 -1
  3. package/dist/editor-x/editor.css +1391 -1091
  4. package/dist/editor-x/editor.css.map +1 -1
  5. package/dist/editor-x/editor.js +728 -439
  6. package/dist/editor-x/editor.js.map +1 -1
  7. package/dist/index.cjs +760 -472
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.css +1391 -1091
  10. package/dist/index.css.map +1 -1
  11. package/dist/index.js +763 -475
  12. package/dist/index.js.map +1 -1
  13. package/package.json +1 -1
  14. package/src/components/lexical-editor.tsx +138 -123
  15. package/src/editor-ui/content-editable.tsx +3 -3
  16. package/src/editor-x/editor.tsx +16 -3
  17. package/src/editor-x/plugins.tsx +385 -380
  18. package/src/nodes/list-with-color-node.tsx +160 -160
  19. package/src/plugins/autocomplete-plugin.tsx +2574 -2574
  20. package/src/plugins/context-menu-plugin.tsx +239 -9
  21. package/src/plugins/floating-text-format-plugin.tsx +84 -92
  22. package/src/plugins/images-plugin.tsx +4 -4
  23. package/src/plugins/list-color-plugin.tsx +178 -178
  24. package/src/plugins/tab-focus-plugin.tsx +66 -66
  25. package/src/plugins/table-column-resizer-plugin.tsx +329 -190
  26. package/src/plugins/toolbar/block-format/block-format-data.tsx +4 -0
  27. package/src/plugins/toolbar/block-format/format-bulleted-list.tsx +40 -40
  28. package/src/plugins/toolbar/block-format/format-list-with-marker.tsx +74 -74
  29. package/src/plugins/toolbar/block-format/format-numbered-list.tsx +40 -40
  30. package/src/plugins/toolbar/block-format-toolbar-plugin.tsx +118 -117
  31. package/src/plugins/toolbar/element-format-toolbar-plugin.tsx +37 -53
  32. package/src/plugins/toolbar/font-format-toolbar-plugin.tsx +8 -15
  33. package/src/plugins/toolbar/font-size-toolbar-plugin.tsx +2 -3
  34. package/src/plugins/toolbar/history-toolbar-plugin.tsx +2 -5
  35. package/src/plugins/toolbar/subsuper-toolbar-plugin.tsx +15 -23
  36. package/src/themes/_mixins.scss +158 -10
  37. package/src/themes/_variables.scss +168 -0
  38. package/src/themes/core/_code.scss +59 -0
  39. package/src/themes/core/_images.scss +80 -0
  40. package/src/themes/core/_lists.scss +214 -0
  41. package/src/themes/core/_misc.scss +46 -0
  42. package/src/themes/core/_reset.scss +119 -0
  43. package/src/themes/core/_tables.scss +145 -0
  44. package/src/themes/core/_text.scss +35 -0
  45. package/src/themes/core/_typography.scss +73 -0
  46. package/src/themes/editor-theme copy.scss +763 -0
  47. package/src/themes/editor-theme.scss +9 -621
  48. package/src/themes/editor-theme.ts +118 -118
  49. package/src/themes/plugins/_auto-embed.scss +11 -0
  50. package/src/themes/plugins/_color-picker.scss +103 -0
  51. package/src/themes/plugins/_draggable-block.scss +32 -0
  52. package/src/themes/plugins/_floating-link-editor.scss +47 -0
  53. package/src/themes/plugins/_floating-toolbars.scss +61 -0
  54. package/src/themes/plugins/_image-resizer.scss +38 -0
  55. package/src/themes/plugins/_image.scss +57 -0
  56. package/src/themes/plugins/_layout.scss +39 -0
  57. package/src/themes/plugins/_list-color.scss +23 -0
  58. package/src/themes/plugins/_mentions.scss +21 -0
  59. package/src/themes/plugins/_menus-and-pickers.scss +153 -0
  60. package/src/themes/plugins/_table.scss +20 -0
  61. package/src/themes/plugins/_toolbar.scss +36 -0
  62. package/src/themes/plugins/_tree-view.scss +11 -0
  63. package/src/themes/plugins copy.scss +656 -0
  64. package/src/themes/plugins.scss +20 -1165
  65. package/src/themes/ui-components/_animations.scss +31 -0
  66. package/src/themes/ui-components/_backgrounds.scss +27 -0
  67. package/src/themes/ui-components/_borders.scss +20 -0
  68. package/src/themes/ui-components/_button.scss +176 -0
  69. package/src/themes/ui-components/_checkbox.scss +14 -0
  70. package/src/themes/ui-components/_cursors.scss +31 -0
  71. package/src/themes/ui-components/_dialog.scss +86 -0
  72. package/src/themes/ui-components/_display-sizing.scss +100 -0
  73. package/src/themes/ui-components/_flex.scss +124 -0
  74. package/src/themes/ui-components/_form-layout.scss +15 -0
  75. package/src/themes/ui-components/_icons.scss +23 -0
  76. package/src/themes/ui-components/_input.scss +86 -0
  77. package/src/themes/ui-components/_label.scss +19 -0
  78. package/src/themes/ui-components/_loader.scss +9 -0
  79. package/src/themes/ui-components/_margins-paddings.scss +45 -0
  80. package/src/themes/ui-components/_popover.scss +16 -0
  81. package/src/themes/ui-components/_positioning.scss +73 -0
  82. package/src/themes/ui-components/_rounded.scss +19 -0
  83. package/src/themes/ui-components/_scroll-area.scss +11 -0
  84. package/src/themes/ui-components/_select.scss +110 -0
  85. package/src/themes/ui-components/_separator.scss +19 -0
  86. package/src/themes/ui-components/_shadow.scss +15 -0
  87. package/src/themes/ui-components/_tabs.scss +46 -0
  88. package/src/themes/ui-components/_text-utilities.scss +48 -0
  89. package/src/themes/ui-components/_toggle-toolbar.scss +128 -0
  90. package/src/themes/ui-components/_toggle.scss +80 -0
  91. package/src/themes/ui-components/_typography.scss +22 -0
  92. package/src/themes/ui-components copy.scss +1335 -0
  93. package/src/themes/ui-components.scss +27 -937
  94. package/src/transformers/markdown-list-transformer.ts +51 -51
  95. package/src/ui/button.tsx +11 -2
  96. package/src/ui/collapsible.tsx +1 -1
  97. package/src/ui/dialog.tsx +2 -2
  98. package/src/ui/flex.tsx +4 -4
  99. package/src/ui/popover.tsx +1 -1
  100. package/src/ui/tooltip.tsx +2 -2
@@ -1,940 +1,30 @@
1
1
  @use "variables" as *;
2
2
  @use "mixins" as *;
3
3
 
4
- /* --- TABS --- */
5
- .editor-tabs-trigger {
6
- display: inline-flex;
7
- align-items: center;
8
- justify-content: center;
9
- white-space: nowrap;
10
- border-radius: calc(var(--radius) - 2px);
11
- padding: 0.375rem 0.75rem;
12
- font-size: 0.875rem;
13
- font-weight: 500;
14
- transition: all 0.2s;
15
- cursor: pointer;
16
- border: none;
17
- background: transparent;
18
- color: var(--muted-foreground);
19
-
20
- @include focus-ring;
21
-
22
- &:disabled {
23
- pointer-events: none;
24
- opacity: 0.5;
25
- }
26
-
27
- &[data-state="active"] {
28
- background-color: var(--background);
29
- color: var(--foreground);
30
- @include shadow-sm;
31
- }
32
- }
33
-
34
- .editor-tabs-list {
35
- display: inline-flex;
36
- height: 2.5rem;
37
- align-items: center;
38
- justify-content: center;
39
- border-radius: var(--radius);
40
- background-color: var(--muted);
41
- padding: 0.25rem;
42
- color: var(--muted-foreground);
43
- }
44
-
45
- .editor-tabs-content {
46
- margin-top: 0.5rem;
47
- @include focus-ring;
48
- }
49
-
50
- /* --- FLEX Component Utilities --- */
51
- .editor-flex {
52
- display: flex;
53
-
54
- // Align
55
- &--items-start { align-items: flex-start; }
56
- &--items-center { align-items: center; }
57
- &--items-end { align-items: flex-end; }
58
- &--items-baseline { align-items: baseline; }
59
- &--items-stretch { align-items: stretch; }
60
-
61
- // Justify
62
- &--justify-start { justify-content: flex-start; }
63
- &--justify-center { justify-content: center; }
64
- &--justify-end { justify-content: flex-end; }
65
- &--justify-between { justify-content: space-between; }
66
- &--justify-around { justify-content: space-around; }
67
- &--justify-evenly { justify-content: space-evenly; }
68
-
69
- // Direction
70
- &--flex-row { flex-direction: row; }
71
- &--flex-col { flex-direction: column; }
72
- &--flex-column { flex-direction: column; }
73
- &--flex-row-reverse { flex-direction: row-reverse; }
74
- &--flex-col-reverse { flex-direction: column-reverse; }
75
- &--flex-column-reverse { flex-direction: column-reverse; }
76
-
77
- // Wrap
78
- &--flex-nowrap { flex-wrap: nowrap; }
79
- &--flex-wrap { flex-wrap: wrap; }
80
- &--flex-wrap-reverse { flex-wrap: wrap-reverse; }
81
- }
82
-
83
- .editor-flex-1 {
84
- flex: 1 1 0%;
85
- }
86
-
87
- .editor-w-full {
88
- width: 100%;
89
- }
90
-
91
- .editor-w-14 {
92
- width: 3.5rem;
93
- }
94
-
95
- .editor-w-48 {
96
- width: 12rem;
97
- }
98
-
99
- .editor-w-\[200px\] {
100
- width: 200px;
101
- }
102
-
103
- .editor-h-full {
104
- height: 100%;
105
- }
106
-
107
- .editor-h-4 {
108
- height: 1rem;
109
- }
110
-
111
- .editor-overflow-hidden {
112
- overflow: hidden;
113
- }
114
-
115
- .editor-fixed {
116
- position: fixed;
117
- }
118
-
119
- .editor-absolute {
120
- position: absolute;
121
- }
122
-
123
- .editor-absolute-full {
124
- position: absolute;
125
- inset: 0;
126
- }
127
-
128
- .editor-relative {
129
- position: relative;
130
- }
131
-
132
- .editor-relative-full {
133
- position: relative;
134
- width: 100%;
135
- height: 100%;
136
-
137
- &--padding {
138
- padding: 0.5rem 2rem; // py-2 px-8 equivalent
139
- }
140
- }
141
-
142
- .editor-inline-block {
143
- display: inline-block;
144
- }
145
-
146
- .editor-block {
147
- display: block;
148
- }
149
-
150
- .editor-inset-0 {
151
- inset: 0;
152
- }
153
-
154
- .editor-pointer-events-none {
155
- pointer-events: none;
156
- }
157
-
158
- .editor-select-none {
159
- user-select: none;
160
- }
161
-
162
- .editor-text-ellipsis {
163
- text-overflow: ellipsis;
164
- white-space: nowrap;
165
- overflow: hidden;
166
- }
167
-
168
- .editor-z-10 {
169
- z-index: 10;
170
- }
171
-
172
- /* --- ROUNDED --- */
173
- .editor-rounded-sm { border-radius: calc(var(--radius) - 4px); }
174
- .editor-rounded-md { border-radius: calc(var(--radius) - 2px); }
175
- .editor-rounded-lg { border-radius: var(--radius); }
176
- .editor-rounded-full { border-radius: 9999px; }
177
-
178
- /* --- SHADOW --- */
179
- .editor-shadow-sm { @include shadow-sm; }
180
- .editor-shadow-md { @include shadow-md; }
181
- .editor-shadow-lg { @include shadow-lg; }
182
-
183
- /* --- BACKGROUNDS --- */
184
- .editor-bg-background { background-color: var(--background); }
185
- .editor-bg-primary { background-color: $editor-primary-color; }
186
- .editor-bg-muted { background-color: var(--muted); }
187
- .editor-bg-accent { background-color: $editor-accent-color; }
188
- .editor-bg-transparent { background-color: transparent; }
189
- .editor-bg-none { background: none; }
190
-
191
- /* --- MARGINS --- */
192
- .editor-mb-2 { margin-bottom: 0.5rem; }
193
- .editor-mb-3 { margin-bottom: 0.75rem; }
194
- .editor-mt-1 { margin-top: 0.25rem; }
195
- .editor-ml-auto { margin-left: auto; }
196
- .editor-ml-4 { margin-left: 1rem; }
197
- .editor-px-1 { padding-left: 0.25rem; padding-right: 0.25rem; }
198
- .editor-px-8 { padding-left: 2rem; padding-right: 2rem; }
199
- .editor-py-18 { padding-top: 18px; padding-bottom: 18px; }
200
-
201
- /* --- SIZES --- */
202
- .editor-h-2 { height: 0.5rem; }
203
- .editor-w-2 { width: 0.5rem; }
204
-
205
- /* --- POSITIONING --- */
206
- .editor--top-2-5 { top: -0.625rem; }
207
- .editor--right-2-5 { right: -0.625rem; }
208
- .editor--bottom-2-5 { bottom: -0.625rem; }
209
- .editor--left-2-5 { left: -0.625rem; }
210
- .editor-top-1-2 { top: 50%; }
211
- .editor-left-1-2 { left: 50%; }
212
- .editor-translate-x-1-2 { transform: translateX(-50%); }
213
- .editor-translate-y-1-2 { transform: translateY(-50%); }
214
-
215
- /* --- CURSORS --- */
216
- .editor-cursor-ns-resize { cursor: ns-resize; }
217
- .editor-cursor-ew-resize { cursor: ew-resize; }
218
- .editor-cursor-nesw-resize { cursor: nesw-resize; }
219
- .editor-cursor-nwse-resize { cursor: nwse-resize; }
220
-
221
- /* --- TEXT UTILITIES --- */
222
- .editor-text-muted-xs {
223
- font-size: 0.75rem;
224
- color: var(--muted-foreground);
225
- }
226
-
227
- .editor-text-sm {
228
- font-size: 0.875rem;
229
- }
230
-
231
- .editor-font-medium {
232
- font-weight: 500;
233
- }
234
-
235
- /* --- UTILITIES --- */
236
- .editor-text-muted-foreground { color: var(--muted-foreground); }
237
- .editor-block { display: block; }
238
- .editor-inline { display: inline; }
239
- .editor-inline-block { display: inline-block; }
240
- .editor-min-h-5 { min-height: 1.25rem; }
241
- .editor-resize-none { resize: none; }
242
- .editor-border-0 { border-width: 0; }
243
- .editor-bg-transparent { background-color: transparent; }
244
- .editor-px-2\.5 { padding-left: 0.625rem; padding-right: 0.625rem; }
245
- .editor-py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
246
- .editor-whitespace-pre-wrap { white-space: pre-wrap; }
247
- .editor-outline-none { outline: 2px solid transparent; outline-offset: 2px; }
248
- .editor-word-break-break-word { word-break: break-word; }
249
- .editor-box-border { box-sizing: border-box; }
250
- .editor-cursor-text { cursor: text; }
251
- .editor-caret-primary { caret-color: var(--primary); }
252
- .editor-user-select-text { user-select: text; }
253
- .editor-cursor-default { cursor: default; }
254
- .editor-select-text { user-select: text; }
255
- .editor-top-0 { top: 0; }
256
- .editor-left-0 { left: 0; }
257
- .editor-text-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
258
- .editor-opacity-30 { opacity: 0.3; }
259
- .editor-p-1 { padding: 0.25rem; }
260
- .editor-p-2 { padding: 0.5rem; }
261
- .editor-px-1 { padding-left: 0.25rem; padding-right: 0.25rem; }
262
- .editor-px-0 { padding-left: 0; padding-right: 0; }
263
- .editor-rotate-90 { transform: rotate(90deg); }
264
- .editor-transition-transform { transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
265
- .editor-shrink-0 { flex-shrink: 0; }
266
- .editor-flex-grow { flex-grow: 1; }
267
- .editor-flex-end { display: flex; justify-content: flex-end; align-items: center; }
268
- .editor-ml-auto { margin-left: auto; }
269
- .editor-ml-4 { margin-left: 1rem; }
270
- .editor-mr-1-5 { margin-right: 0.375rem; }
271
- .editor-mt-1 { margin-top: 0.25rem; }
272
- .editor-mt-2 { margin-top: 0.5rem; }
273
- .editor-mb-2 { margin-bottom: 0.5rem; }
274
- .editor-mb-3 { margin-bottom: 0.75rem; }
275
- .editor-gap-1 { gap: 0.25rem; }
276
- .editor-gap-2 { gap: 0.5rem; }
277
- .editor-items-center { align-items: center; }
278
- .editor-justify-center { justify-content: center; }
279
- .editor-flex-col { flex-direction: column; }
280
- .editor-flex-wrap { flex-wrap: wrap; }
281
- .editor-cursor-pointer { cursor: pointer; }
282
- .editor-border { border: 1px solid var(--border); }
283
- .editor-border-transparent { border-color: transparent; }
284
- .editor-uppercase { text-transform: uppercase; }
285
- .editor-transition-colors { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
286
- .editor-animate-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; }
287
- .editor-whitespace-nowrap { white-space: nowrap; }
288
- .editor-text-foreground-50 { color: color-mix(in srgb, var(--foreground), transparent 50%); }
289
-
290
- @keyframes pulse {
291
- 0%, 100% { opacity: 1; }
292
- 50% { opacity: .5; }
293
- }
294
-
295
- .editor-flex-center-justify-py-8 {
296
- display: flex;
297
- align-items: center;
298
- justify-content: center;
299
- padding-top: 2rem;
300
- padding-bottom: 2rem;
301
- }
302
-
303
- .editor-object-cover { object-fit: cover; }
304
-
305
- .editor-sr-only {
306
- position: absolute;
307
- width: 1px;
308
- height: 1px;
309
- padding: 0;
310
- margin: -1px;
311
- overflow: hidden;
312
- clip: rect(0, 0, 0, 0);
313
- white-space: nowrap;
314
- border-width: 0;
315
- }
316
-
317
- /* --- ICONS --- */
318
- .editor-icon-xs { width: 0.75rem; height: 0.75rem; } // 12px
319
- .editor-icon-sm { width: 1rem; height: 1rem; } // 16px
320
- .editor-icon-md { width: 1.25rem; height: 1.25rem; } // 20px
321
- .editor-icon-lg { width: 1.5rem; height: 1.5rem; } // 24px
322
- .editor-icon-xl { width: 2rem; height: 2rem; } // 32px
323
-
324
- /* --- TYPOGRAPHY --- */
325
- .editor-typography-p {
326
- line-height: 1.75rem;
327
- &:not(:first-child) { margin-top: 1.5rem; }
328
- }
329
-
330
- .editor-typography-p-small {
331
- font-size: 0.875rem;
332
- font-weight: 500;
333
- line-height: 1;
334
- }
335
-
336
- .editor-typography-span-small-muted {
337
- font-size: 0.875rem;
338
- color: var(--muted-foreground);
339
- }
340
-
341
- /* --- TOGGLE GROUP --- */
342
- .editor-toggle-group {
343
- display: flex;
344
- flex-wrap: wrap;
345
- align-items: center;
346
- justify-content: center;
347
- gap: 0.25rem;
348
- }
349
-
350
- .editor-toggle-group-item {
351
- display: inline-flex;
352
- align-items: center;
353
- justify-content: center;
354
- border-radius: var(--radius);
355
- font-size: 0.875rem;
356
- font-weight: 500;
357
- background-color: transparent;
358
- color: var(--foreground);
359
- transition: all 0.2s;
360
- cursor: pointer;
361
- border: 1px solid transparent;
362
- padding: 0.5rem;
363
- line-height: 1;
364
-
365
- &:hover {
366
- background-color: var(--muted);
367
- color: var(--muted-foreground);
368
- }
369
-
370
- &[data-state="on"] {
371
- background-color: $editor-accent-color;
372
- color: $editor-accent-foreground-color !important;
373
- }
374
-
375
- &--size-sm {
376
- padding: 0.25rem;
377
- font-size: 0.75rem;
378
- }
379
-
380
- &--size-lg {
381
- padding: 0.75rem;
382
- font-size: 1rem;
383
- }
384
-
385
- &--outline {
386
- border-color: var(--border);
387
- &:hover {
388
- background-color: $editor-accent-color;
389
- border-color: $editor-accent-color;
390
- }
391
- }
392
-
393
- &:disabled {
394
- pointer-events: none;
395
- opacity: 0.5;
396
- }
397
- }
398
-
399
- /* --- BUTTON --- */
400
- .editor-btn {
401
- @include flex-center-justify;
402
- white-space: nowrap;
403
- border-radius: var(--radius);
404
- font-weight: 500;
405
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
406
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
407
- transition-duration: 150ms;
408
- @include text-sm;
409
- @include focus-ring;
410
- border: 1px solid var(--input); // Default border
411
- cursor: pointer;
412
-
413
- &:disabled {
414
- pointer-events: none;
415
- opacity: 0.5;
416
- }
417
-
418
- &[data-state="on"] {
419
- background-color: $editor-accent-color;
420
- color: $editor-accent-foreground-color !important;
421
- border-color: $editor-accent-color;
422
- }
423
-
424
- &--default {
425
- background-color: var(--primary);
426
- color: var(--primary-foreground);
427
- border-color: var(--primary);
428
- &:hover {
429
- background-color: color-mix(in srgb, var(--primary), black 10%);
430
- }
431
- }
432
-
433
- &--destructive {
434
- background-color: var(--destructive);
435
- color: var(--destructive-foreground);
436
- border-color: var(--destructive);
437
- &:hover {
438
- background-color: color-mix(in srgb, var(--destructive), black 10%);
439
- }
440
- }
441
-
442
- &--outline {
443
- border-color: var(--input);
444
- background-color: var(--background);
445
- &:hover {
446
- background-color: $editor-accent-color;
447
- color: $editor-accent-foreground-color;
448
- }
449
- }
450
-
451
- &--secondary {
452
- background-color: var(--secondary);
453
- color: var(--secondary-foreground);
454
- border-color: transparent;
455
- &:hover {
456
- background-color: color-mix(in srgb, var(--secondary), black 10%);
457
- }
458
- }
459
-
460
- &--ghost {
461
- background-color: transparent;
462
- border-color: transparent;
463
- &:hover {
464
- background-color: $editor-accent-color;
465
- color: $editor-accent-foreground-color;
466
- }
467
- }
468
-
469
- &--link {
470
- color: var(--primary);
471
- text-decoration-line: underline;
472
- text-underline-offset: 4px;
473
- background-color: transparent;
474
- &:hover {
475
- text-decoration-line: underline;
476
- }
477
- }
478
-
479
- /* Sizes */
480
- &--size-default {
481
- height: 2.25rem; /* h-9 */
482
- padding-left: 1rem;
483
- padding-right: 1rem;
484
- }
485
- &--size-sm {
486
- height: 2rem; /* h-8 */
487
- border-radius: calc(var(--radius) - 2px);
488
- padding-left: 0.75rem;
489
- padding-right: 0.75rem;
490
- font-size: 0.75rem; /* xs */
491
- }
492
- &--size-md {
493
- height: 2.25rem; /* h-9 */
494
- width: 2.25rem; /* w-9 */
495
- padding: 0;
496
- }
497
- &--size-lg {
498
- height: 2.5rem; /* h-10 */
499
- border-radius: calc(var(--radius) + 2px);
500
- padding-left: 2rem;
501
- padding-right: 2rem;
502
- }
503
- &--size-icon {
504
- height: 2.25rem; /* h-9 */
505
- width: 2.25rem; /* w-9 */
506
- padding: 0;
507
- }
508
- }
509
-
510
- /* --- BUTTON GROUP --- */
511
- .editor-button-group {
512
- display: flex;
513
- flex-wrap: wrap;
514
- align-items: center;
515
- gap: 0.25rem;
516
- }
517
-
518
- /* --- SEPARATOR --- */
519
- .editor-separator {
520
- background-color: var(--border);
521
- flex-shrink: 0;
522
-
523
- &--horizontal {
524
- height: 1px;
525
- width: 100%;
526
- }
527
-
528
- &--vertical {
529
- width: 1px;
530
- height: 100%;
531
- min-height: 1.5rem;
532
- }
533
- }
534
-
535
- /* --- INPUT --- */
536
- .editor-input {
537
- display: flex;
538
- height: 2.25rem; /* h-9 */
539
- width: 100%;
540
- border-radius: var(--radius);
541
- border: 1px solid var(--input);
542
- background-color: var(--background);
543
- padding-left: 0.75rem;
544
- padding-right: 0.75rem;
545
- padding-top: 0.5rem;
546
- padding-bottom: 0.5rem;
547
- @include text-sm;
548
-
549
- &::file-selector-button {
550
- border: 0;
551
- background-color: transparent;
552
- font-size: 0.875rem;
553
- font-weight: 500;
554
- }
555
-
556
- &::placeholder {
557
- color: var(--muted-foreground);
558
- }
559
-
560
- &:focus {
561
- border-color: var(--primary);
562
- box-shadow: 0 0 0 2px var(--ring);
563
- outline: none;
564
- }
565
-
566
- &:focus-visible {
567
- outline: none;
568
- box-shadow: 0 0 0 2px var(--ring), 0 0 0 4px var(--background);
569
- }
570
-
571
- &:disabled {
572
- cursor: not-allowed;
573
- opacity: 0.5;
574
- }
575
-
576
- &:hover:not(:disabled):not([readonly]) {
577
- background-color: color-mix(in srgb, var(--background), black 3%);
578
- color: black !important;
579
- border-color: $editor-accent-color;
580
- transform: translateY(-1px);
581
- box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.1);
582
- }
583
-
584
- /* Hide spin buttons for input[type=number] */
585
- &::-webkit-outer-spin-button,
586
- &::-webkit-inner-spin-button {
587
- -webkit-appearance: none;
588
- margin: 0;
589
- }
590
-
591
- &[type=number] {
592
- -moz-appearance: textfield;
593
- }
594
- }
595
-
596
- /* --- INPUT GROUP ITEM --- */
597
- .editor-input-group-item {
598
- &--first {
599
- border-top-right-radius: 0;
600
- border-bottom-right-radius: 0;
601
- }
602
- &--middle {
603
- border-radius: 0;
604
- border-left-width: 0;
605
- }
606
- &--last {
607
- border-top-left-radius: 0;
608
- border-bottom-left-radius: 0;
609
- border-left-width: 0;
610
- }
611
- }
612
-
613
- /* --- LABEL --- */
614
- .editor-label {
615
- @include text-sm;
616
- font-weight: 500;
617
- line-height: 1;
618
-
619
- &--disabled {
620
- cursor: not-allowed;
621
- opacity: 0.7;
622
- }
623
- }
624
-
625
- /* --- DIALOG --- */
626
- @keyframes editor-dialog-zoom-in {
627
- from {
628
- opacity: 0;
629
- transform: translate(-50%, -48%) scale(0.95);
630
- }
631
- to {
632
- opacity: 1;
633
- transform: translate(-50%, -50%) scale(1);
634
- }
635
- }
636
-
637
- @keyframes editor-fade-in {
638
- from { opacity: 0; }
639
- to { opacity: 1; }
640
- }
641
-
642
- @keyframes editor-popover-zoom-in {
643
- from {
644
- opacity: 0;
645
- transform: scale(0.95);
646
- }
647
- to {
648
- opacity: 1;
649
- transform: scale(1);
650
- }
651
- }
652
-
653
- .editor-dialog-overlay {
654
- position: fixed;
655
- inset: 0;
656
- z-index: 50;
657
- background-color: rgba(0, 0, 0, 0.4); /* Lighter backdrop for better feel */
658
- backdrop-filter: blur(4px);
659
- animation: editor-fade-in 0.2s ease-out;
660
-
661
- &[data-state="open"] {
662
- animation: editor-fade-in 0.2s ease-out;
663
- }
664
- }
665
-
666
- .editor-dialog-content {
667
- position: fixed;
668
- left: 50%;
669
- top: 50%;
670
- z-index: 51;
671
- display: grid;
672
- width: 100%;
673
- max-width: 32rem; /* max-w-lg */
674
- transform: translate(-50%, -50%);
675
- gap: 1.5rem;
676
- border: 1px solid var(--border);
677
- background-color: var(--background);
678
- padding: 1.5rem;
679
- @include shadow-lg;
680
- border-radius: calc(var(--radius) + 4px); /* rounded-lg */
681
- animation: editor-dialog-zoom-in 0.2s cubic-bezier(0.16, 1, 0.3, 1);
682
-
683
- &--lg {
684
- max-width: 50rem;
685
- }
686
-
687
- &__close {
688
- position: absolute;
689
- right: 1rem;
690
- top: 1rem;
691
- border-radius: var(--radius);
692
- opacity: 0.7;
693
- background: transparent;
694
- border: none;
695
- cursor: pointer;
696
- transition: opacity 0.2s;
697
-
698
- &:hover {
699
- opacity: 1;
700
- }
701
-
702
- @include focus-ring;
703
- }
704
- }
705
-
706
- .editor-dialog-header {
707
- display: flex;
708
- flex-direction: column;
709
- gap: 0.375rem; /* space-y-1.5 */
710
- text-align: center;
711
-
712
- @media (min-width: 640px) {
713
- text-align: left;
714
- }
715
-
716
- &__title {
717
- font-size: 1.125rem; /* text-lg */
718
- font-weight: 600;
719
- line-height: 1;
720
- margin: 0;
721
- }
722
-
723
- &__description {
724
- @include text-sm;
725
- color: var(--muted-foreground);
726
- margin: 0;
727
- }
728
- }
729
-
730
- .editor-dialog-footer {
731
- display: flex;
732
- flex-direction: column-reverse;
733
- gap: 0.5rem; /* sm:space-x-2 */
734
-
735
- @media (min-width: 640px) {
736
- flex-direction: row;
737
- justify-content: flex-end;
738
- }
739
- }
740
-
741
- /* --- POPOVER --- */
742
- .editor-popover-content {
743
- z-index: 50;
744
- width: 18rem; /* w-72 */
745
- border-radius: var(--radius);
746
- border: 1px solid var(--border);
747
- background-color: var(--popover);
748
- color: var(--popover-foreground);
749
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); /* shadow-md */
750
- padding: 1rem;
751
- outline: none;
752
- animation: editor-popover-zoom-in 0.1s ease-out;
753
- }
754
-
755
- /* --- SELECT (Native styling wrapper) --- */
756
- .editor-select {
757
- display: flex;
758
- height: 2.25rem; /* h-9 */
759
- width: 100%;
760
- align-items: center;
761
- justify-content: space-between;
762
- border-radius: var(--radius);
763
- border: 1px solid var(--input);
764
- background-color: var(--background);
765
- padding-left: 0.75rem;
766
- padding-right: 0.75rem;
767
- @include text-sm;
768
-
769
- &:focus {
770
- outline: none;
771
- box-shadow: 0 0 0 2px var(--ring), 0 0 0 4px var(--background);
772
- }
773
-
774
- &:disabled {
775
- cursor: not-allowed;
776
- opacity: 0.5;
777
- }
778
-
779
- /* Sizes */
780
- &--size-default {
781
- height: 2.25rem; /* h-9 */
782
- padding-left: 0.75rem;
783
- padding-right: 0.75rem;
784
- }
785
-
786
- &--size-sm {
787
- height: 2rem; /* h-8 */
788
- padding-left: 0.5rem;
789
- padding-right: 0.5rem;
790
- font-size: 0.75rem; /* xs */
791
- }
792
-
793
- &--size-lg {
794
- height: 2.5rem; /* h-10 */
795
- padding-left: 1rem;
796
- padding-right: 1rem;
797
- }
798
-
799
- &--size-icon {
800
- height: 2.25rem; /* h-9 */
801
- width: 2.25rem; /* w-9 */
802
- padding: 0;
803
- justify-content: center;
804
-
805
- // Hide chevron if it's an icon button, or make it small overlay?
806
- // Usually icon select trigger implies the content IS the icon.
807
- .editor-select-icon {
808
- display: none;
809
- }
810
- }
811
-
812
- &--w-auto {
813
- width: auto;
814
- padding-left: 0.75rem;
815
- padding-right: 0.75rem;
816
- min-width: 7rem; // 112px - Ensures button isn't too narrow
817
- justify-content: space-between; // Ensure content is spaced if it's a select
818
- }
819
-
820
- &--gap-sm {
821
- gap: 0.5rem;
822
- }
823
- }
824
-
825
- .editor-select-item {
826
- position: relative;
827
- display: flex;
828
- width: 100%;
829
- cursor: pointer;
830
- user-select: none;
831
- align-items: center;
832
- gap: 0.5rem;
833
- border-radius: 0.125rem; /* rounded-sm */
834
- padding: 0.375rem 0.5rem 0.375rem 2rem; /* py-1.5 pl-8 pr-2 */
835
- font-size: 0.875rem; /* text-sm */
836
- outline: none;
837
-
838
- &:hover {
839
- background-color: $editor-accent-color;
840
- color: $editor-accent-foreground-color;
841
- }
842
-
843
- &[data-selected="true"] {
844
- background-color: $editor-accent-color;
845
- color: $editor-accent-foreground-color;
846
- }
847
-
848
- &__check {
849
- position: absolute;
850
- left: 0.5rem; /* left-2 */
851
- display: flex;
852
- height: 0.875rem; /* h-3.5 */
853
- width: 0.875rem; /* w-3.5 */
854
- align-items: center;
855
- justify-content: center;
856
- }
857
- }
858
-
859
- .editor-select-label {
860
- padding: 0.375rem 0.5rem 0.375rem 2rem;
861
- font-size: 0.875rem;
862
- font-weight: 600;
863
- }
864
-
865
- .editor-block-format-label {
866
- max-width: 80px;
867
- overflow: hidden;
868
- text-overflow: ellipsis;
869
- white-space: nowrap;
870
- }
871
-
872
- /* --- TOGGLE --- */
873
- .editor-toggle {
874
- display: inline-flex;
875
- align-items: center;
876
- justify-content: center;
877
- border-radius: calc(var(--radius) - 2px); // rounded-md
878
- font-size: 0.875rem; // text-sm
879
- font-weight: 500;
880
- transition-property: color, background-color, border-color;
881
- transition-duration: 150ms;
882
- background-color: transparent;
883
- border: 1px solid transparent;
884
- cursor: pointer;
885
-
886
- &:hover {
887
- background-color: $editor-accent-color;
888
- color: $editor-accent-foreground-color;
889
- }
890
-
891
- &:focus-visible {
892
- outline: none;
893
- box-shadow: 0 0 0 2px var(--ring), 0 0 0 4px var(--background);
894
- }
895
-
896
- &:disabled {
897
- pointer-events: none;
898
- opacity: 0.5;
899
- }
900
-
901
- &[data-state="on"] {
902
- background-color: $editor-accent-color;
903
- color: $editor-accent-foreground-color !important;
904
- }
905
-
906
- &--outline {
907
- border-color: var(--input);
908
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); // shadow-sm
909
- &:hover {
910
- background-color: color-mix(in srgb, $editor-accent-color, black 50%);
911
- color: $editor-accent-foreground-color;
912
- }
913
- }
914
-
915
- &--ghost {
916
- &:hover {
917
- background-color: color-mix(in srgb, $editor-accent-color, black 50%);
918
- color: $editor-accent-foreground-color;
919
- }
920
- }
921
-
922
- &--size-default {
923
- height: 2.25rem; // h-9
924
- padding-left: 0.75rem; // px-3
925
- padding-right: 0.75rem;
926
- }
927
-
928
- &--size-sm {
929
- height: 2rem; // h-8
930
- padding-left: 0.5rem; // px-2
931
- padding-right: 0.5rem;
932
- font-size: 0.75rem; // text-xs
933
- }
934
-
935
- &--size-lg {
936
- height: 2.5rem; // h-10
937
- padding-left: 0.75rem; // px-3
938
- padding-right: 0.75rem;
939
- }
940
- }
4
+ @use "ui-components/loader";
5
+ @use "ui-components/tabs";
6
+ @use "ui-components/form-layout";
7
+ @use "ui-components/scroll-area";
8
+ @use "ui-components/flex";
9
+ @use "ui-components/positioning";
10
+ @use "ui-components/display-sizing";
11
+ @use "ui-components/rounded";
12
+ @use "ui-components/shadow";
13
+ @use "ui-components/backgrounds";
14
+ @use "ui-components/margins-paddings";
15
+ @use "ui-components/cursors";
16
+ @use "ui-components/text-utilities";
17
+ @use "ui-components/borders";
18
+ @use "ui-components/animations";
19
+ @use "ui-components/icons";
20
+ @use "ui-components/typography";
21
+ @use "ui-components/toggle-toolbar";
22
+ @use "ui-components/button";
23
+ @use "ui-components/separator";
24
+ @use "ui-components/input";
25
+ @use "ui-components/label";
26
+ @use "ui-components/checkbox";
27
+ @use "ui-components/dialog";
28
+ @use "ui-components/popover";
29
+ @use "ui-components/select";
30
+ @use "ui-components/toggle";