@kerebron/extension-menu-legacy 0.4.26 → 0.4.27

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kerebron/extension-menu-legacy",
3
- "version": "0.4.26",
3
+ "version": "0.4.27",
4
4
  "license": "MIT",
5
5
  "module": "./esm/mod.js",
6
6
  "exports": {
@@ -12,8 +12,9 @@
12
12
  }
13
13
  },
14
14
  "scripts": {},
15
+ "files": [],
15
16
  "dependencies": {
16
- "@kerebron/editor": "0.4.26",
17
+ "@kerebron/editor": "0.4.27",
17
18
  "prosemirror-model": "1.25.3",
18
19
  "prosemirror-state": "1.4.3",
19
20
  "prosemirror-view": "1.40.0"
package/assets/menu.css DELETED
@@ -1,539 +0,0 @@
1
- /* Base menu and toolbar styles */
2
- .kb-menu {
3
- margin: 0;
4
- line-height: 1;
5
- font-size: var(--kb-text-sm);
6
- }
7
-
8
- /* Mobile-first toolbar */
9
- .kb-menu {
10
- position: sticky;
11
- top: 0;
12
- display: flex;
13
- flex-wrap: wrap;
14
- gap: var(--kb-space-xs);
15
- padding: var(--kb-space-sm);
16
- background: var(--kb-color-surface);
17
- border-bottom: 1px solid var(--kb-color-border);
18
- z-index: var(--kb-z-dropdown);
19
- overflow-x: auto;
20
- -webkit-overflow-scrolling: touch;
21
- scrollbar-width: none;
22
- -ms-overflow-style: none;
23
- }
24
-
25
- .kb-menu::-webkit-scrollbar {
26
- display: none;
27
- }
28
-
29
- /* Mobile: bottom-anchored toolbar for one-handed use */
30
- @media (max-width: 767px) {
31
- .kb-menu {
32
- position: fixed;
33
- bottom: 0;
34
- left: 0;
35
- right: 0;
36
- top: auto;
37
- border-bottom: none;
38
- border-top: 1px solid var(--kb-color-border);
39
- box-shadow: var(--kb-shadow-lg);
40
- backdrop-filter: blur(10px);
41
- background: rgba(255, 255, 255, 0.95);
42
- }
43
-
44
- /* Add bottom padding to editor content to prevent overlap */
45
- .kb-component {
46
- padding-bottom: calc(
47
- var(--kb-touch-target-comfortable) + var(--kb-space-md) * 2
48
- );
49
- }
50
- }
51
-
52
- /* Tablet and desktop: top toolbar */
53
- @media (min-width: 768px) {
54
- .kb-menu {
55
- position: relative;
56
- border-radius: var(--kb-radius-md) var(--kb-radius-md) 0 0;
57
- }
58
- }
59
-
60
- .kb-menu {
61
- background-color: var(--kb-color-surface);
62
- z-index: 10000;
63
- }
64
-
65
- /* Toolbar items */
66
- .kb-menu__button {
67
- border-radius: var(--kb-radius-sm);
68
-
69
- min-width: var(--kb-touch-target-comfortable);
70
- min-height: var(--kb-touch-target-comfortable);
71
-
72
- border: none;
73
- background: transparent;
74
- color: var(--kb-color-text);
75
- cursor: pointer;
76
- transition: all 0.2s ease;
77
- font-size: var(--kb-text-sm);
78
- flex-shrink: 0;
79
- }
80
-
81
- .kb-menu__button:hover {
82
- background: var(--kb-color-hover);
83
- border-color: var(--kb-color-border);
84
- }
85
-
86
- .kb-menu__button:focus {
87
- outline: 2px solid var(--kb-color-primary);
88
- outline-offset: 2px;
89
- }
90
-
91
- .kb-menu__button--active {
92
- background: var(--kb-color-primary);
93
- color: white;
94
- border-color: var(--kb-color-primary);
95
- border-radius: var(--kb-radius-sm);
96
- }
97
-
98
- .kb-menu__button--pressed {
99
- background: var(--kb-color-active);
100
- transform: scale(0.95);
101
- transition: transform 0.1s ease;
102
- }
103
-
104
- .kb-menu__button--disabled {
105
- opacity: 0.4;
106
- cursor: not-allowed;
107
- }
108
-
109
- .kb-menu__button--disabled:hover {
110
- background: transparent;
111
- border-color: transparent;
112
- }
113
-
114
- /* Icon styling */
115
- .kb-dropdown__item svg,
116
- .kb-menu__button svg {
117
- fill: currentColor;
118
- height: 1em;
119
- width: 1em;
120
- }
121
-
122
- .kb-dropdown__item svg,
123
- .kb-menu__button span,
124
- .kb-menu__button svg {
125
- vertical-align: middle;
126
- }
127
-
128
- /* Separator */
129
- .kb-menu__separator {
130
- width: 1px;
131
- height: var(--kb-space-lg);
132
- background: var(--kb-color-border);
133
- margin: 0 var(--kb-space-xs);
134
- flex-shrink: 0;
135
- }
136
-
137
- /* Dropdown menu */
138
- .kb-dropdown {
139
- position: relative;
140
- padding: 1px 0 1px var(--kb-space-sm);
141
- display: inline-block;
142
- }
143
-
144
- .kb-dropdown__label {
145
- min-width: var(--kb-touch-target-comfortable);
146
- min-height: var(--kb-touch-target-comfortable);
147
-
148
- border: none;
149
- background: none;
150
- font-size: var(--kb-text-sm);
151
- align-items: center;
152
- padding-right: var(--kb-space-lg);
153
- white-space: nowrap;
154
- cursor: pointer;
155
- }
156
-
157
- .kb-dropdown__label:focus {
158
- outline: 2px solid var(--kb-color-primary);
159
- outline-offset: -2px;
160
- }
161
-
162
- .kb-dropdown__label--active {
163
- background: var(--kb-color-active);
164
- color: var(--kb-color-primary);
165
- }
166
-
167
- .kb-dropdown__label:after {
168
- content: '';
169
- border-left: 4px solid transparent;
170
- border-right: 4px solid transparent;
171
- border-top: 4px solid currentColor;
172
- opacity: 0.6;
173
- position: absolute;
174
- right: var(--kb-space-sm);
175
- top: calc(50% - 2px);
176
- }
177
-
178
- .kb-dropdown__menu {
179
- position: fixed;
180
- /*min-width: 200px;*/
181
- min-width: 6em;
182
- background: var(--kb-color-surface);
183
- border: 1px solid var(--kb-color-border);
184
- border-radius: var(--kb-radius-md);
185
- box-shadow: var(--kb-shadow-lg);
186
- z-index: var(--kb-z-dropdown);
187
- padding: var(--kb-space-xs);
188
- margin-top: var(--kb-space-xs);
189
- opacity: 0;
190
- visibility: hidden;
191
- transform: translateY(-4px);
192
- transition: all 0.2s ease;
193
- white-space: nowrap;
194
- }
195
-
196
- .kb-dropdown--open .kb-dropdown__menu {
197
- opacity: 1;
198
- visibility: visible;
199
- transform: translateY(0);
200
- }
201
-
202
- .kb-dropdown__item {
203
- display: flex;
204
- padding: var(--kb-space-sm) var(--kb-space-md);
205
- border: none;
206
- background: none;
207
- text-align: left;
208
- cursor: pointer;
209
- border-radius: var(--kb-radius-sm);
210
- color: var(--kb-color-text);
211
- font-size: var(--kb-text-sm);
212
- min-height: var(--kb-touch-target-comfortable);
213
- align-items: center;
214
- transition: background-color 0.2s ease;
215
- }
216
-
217
- .kb-dropdown__item:hover {
218
- background: var(--kb-color-hover);
219
- }
220
-
221
- .kb-dropdown__item:focus {
222
- outline: 2px solid var(--kb-color-primary);
223
- outline-offset: -2px;
224
- }
225
-
226
- .kb-dropdown__item--active {
227
- background: var(--kb-color-active);
228
- color: var(--kb-color-primary);
229
- }
230
-
231
- /* Accessibility: High contrast mode support */
232
- @media (prefers-contrast: more) {
233
- .kb-dropdown__item,
234
- .kb-dropdown__item:focus {
235
- outline-width: 3px;
236
- }
237
- }
238
-
239
- /* Mobile: full-screen dropdown */
240
- @media (max-width: 767px) {
241
- .kb-dropdown__menu,
242
- .kb-dropdown__menu--mobile {
243
- position: fixed;
244
- top: auto;
245
- bottom: calc(var(--kb-touch-target-comfortable) + var(--kb-space-md) * 2);
246
- left: var(--kb-space-sm);
247
- right: var(--kb-space-sm);
248
- min-width: auto;
249
- border-radius: var(--kb-radius-lg);
250
- max-height: 50vh;
251
- overflow-y: auto;
252
- padding: var(--kb-space-md);
253
- backdrop-filter: blur(10px);
254
- background: rgba(255, 255, 255, 0.95);
255
- }
256
-
257
- .kb-dropdown__item {
258
- padding: var(--kb-space-md);
259
- min-height: var(--kb-touch-target-comfortable);
260
- }
261
- }
262
-
263
- /* Submenu support */
264
- .kb-submenu {
265
- position: relative;
266
- margin-right: var(--kb-space-sm);
267
- }
268
-
269
- .kb-submenu__label {
270
- position: relative;
271
- padding-right: var(--kb-space-lg);
272
- }
273
-
274
- .kb-submenu__label:after {
275
- content: '';
276
- border-top: 4px solid transparent;
277
- border-bottom: 4px solid transparent;
278
- border-left: 4px solid currentColor;
279
- opacity: 0.6;
280
- position: absolute;
281
- right: var(--kb-space-sm);
282
- top: calc(50% - 4px);
283
- }
284
-
285
- .kb-submenu__content {
286
- position: absolute;
287
- left: 100%;
288
- top: var(--kb-space-xs);
289
- /*min-width: 160px;*/
290
- min-width: 4em;
291
- background: var(--kb-color-surface);
292
- border: 1px solid var(--kb-color-border);
293
- border-radius: var(--kb-radius-md);
294
- box-shadow: var(--kb-shadow-lg);
295
- z-index: calc(var(--kb-z-dropdown) + 1);
296
- padding: var(--kb-space-xs);
297
- opacity: 0;
298
- visibility: hidden;
299
- transform: translateX(-4px);
300
- transition: all 0.2s ease;
301
- }
302
-
303
- .kb-submenu:hover .kb-submenu__content,
304
- .kb-submenu--open .kb-submenu__content {
305
- opacity: 1;
306
- visibility: visible;
307
- transform: translateX(0);
308
- }
309
-
310
- /* Mobile: no submenus, flatten structure */
311
- @media (max-width: 767px) {
312
- .kb-submenu__content {
313
- display: none;
314
- }
315
- }
316
-
317
- /* Tooltip for button labels */
318
- .kb-tooltip {
319
- position: absolute;
320
- bottom: 100%;
321
- left: 50%;
322
- transform: translateX(-50%);
323
- background: var(--kb-color-text);
324
- color: var(--kb-color-surface);
325
- padding: var(--kb-space-xs) var(--kb-space-sm);
326
- border-radius: var(--kb-radius-sm);
327
- font-size: var(--kb-text-xs);
328
- white-space: nowrap;
329
- opacity: 0;
330
- visibility: hidden;
331
- transition: all 0.2s ease;
332
- margin-bottom: var(--kb-space-xs);
333
- z-index: var(--kb-z-tooltip);
334
- }
335
-
336
- .kb-tooltip:after {
337
- content: '';
338
- position: absolute;
339
- top: 100%;
340
- left: 50%;
341
- transform: translateX(-50%);
342
- border-left: 4px solid transparent;
343
- border-right: 4px solid transparent;
344
- border-top: 4px solid var(--kb-color-text);
345
- }
346
-
347
- .kb-menu__button:hover .kb-tooltip {
348
- opacity: 1;
349
- visibility: visible;
350
- }
351
-
352
- /* Mobile: no tooltips on touch devices */
353
- @media (max-width: 767px) {
354
- .kb-tooltip {
355
- display: none;
356
- }
357
- }
358
-
359
- /* Accessibility improvements */
360
- @media (prefers-reduced-motion: reduce) {
361
- .kb-menu__button,
362
- .kb-dropdown__menu,
363
- .kb-submenu__content,
364
- .kb-tooltip {
365
- transition: none;
366
- }
367
- }
368
-
369
- .kb-icon {
370
- min-width: var(--kb-touch-target-comfortable);
371
- min-height: var(--kb-touch-target-comfortable);
372
-
373
- display: inline-block;
374
- line-height: var(--kb-touch-target-comfortable);
375
- vertical-align: middle;
376
- }
377
-
378
- /* Prompt/dialog styles with mobile optimization */
379
- .kb-prompt {
380
- background: var(--kb-color-surface);
381
- padding: var(--kb-space-md) var(--kb-space-lg) var(--kb-space-md)
382
- var(--kb-space-lg);
383
- border: 1px solid var(--kb-color-border);
384
- position: fixed;
385
- border-radius: var(--kb-radius-md);
386
- z-index: var(--kb-z-modal);
387
- box-shadow: var(--kb-shadow-lg);
388
- top: 50%;
389
- left: 50%;
390
- transform: translate(-50%, -50%);
391
- min-width: 300px;
392
- max-width: 90vw;
393
- }
394
-
395
- .kb-prompt h5 {
396
- margin: 0 0 var(--kb-space-md) 0;
397
- font-weight: 600;
398
- font-size: var(--kb-text-base);
399
- color: var(--kb-color-text);
400
- }
401
-
402
- .kb-prompt input[type='text'],
403
- .kb-prompt textarea {
404
- background: var(--kb-color-surface-elevated);
405
- border: 1px solid var(--kb-color-border);
406
- border-radius: var(--kb-radius-sm);
407
- padding: var(--kb-space-sm);
408
- font-size: var(--kb-text-sm);
409
- color: var(--kb-color-text);
410
- width: 100%;
411
- box-sizing: border-box;
412
- outline: none;
413
- }
414
-
415
- .kb-prompt input[type='text']:focus,
416
- .kb-prompt textarea:focus {
417
- border-color: var(--kb-color-primary);
418
- box-shadow: 0 0 0 3px var(--kb-color-focus);
419
- }
420
-
421
- .kb-prompt--close {
422
- position: absolute;
423
- right: var(--kb-space-sm);
424
- top: var(--kb-space-sm);
425
- color: var(--kb-color-text-muted);
426
- border: none;
427
- background: transparent;
428
- padding: var(--kb-space-xs);
429
- cursor: pointer;
430
- border-radius: var(--kb-radius-sm);
431
- width: var(--kb-space-lg);
432
- height: var(--kb-space-lg);
433
- display: flex;
434
- align-items: center;
435
- justify-content: center;
436
- }
437
-
438
- .kb-prompt--close:hover {
439
- background: var(--kb-color-hover);
440
- color: var(--kb-color-text);
441
- }
442
-
443
- .kb-prompt--close:after {
444
- content: '✕';
445
- font-size: var(--kb-text-sm);
446
- }
447
-
448
- .kb-invalid {
449
- background: #fef2f2;
450
- border: 1px solid #fecaca;
451
- color: #991b1b;
452
- border-radius: var(--kb-radius-sm);
453
- padding: var(--kb-space-sm) var(--kb-space-md);
454
- position: absolute;
455
- min-width: 10em;
456
- font-size: var(--kb-text-sm);
457
- }
458
-
459
- .kb-prompt__buttons {
460
- margin-top: var(--kb-space-md);
461
- display: flex;
462
- gap: var(--kb-space-sm);
463
- justify-content: flex-end;
464
- }
465
-
466
- .kb-prompt__buttons button {
467
- padding: var(--kb-space-sm) var(--kb-space-md);
468
- border: 1px solid var(--kb-color-border);
469
- border-radius: var(--kb-radius-sm);
470
- background: var(--kb-color-surface);
471
- color: var(--kb-color-text);
472
- cursor: pointer;
473
- font-size: var(--kb-text-sm);
474
- min-height: var(--kb-touch-target-comfortable);
475
- }
476
-
477
- .kb-prompt__buttons button:hover {
478
- background: var(--kb-color-hover);
479
- }
480
-
481
- .kb-prompt__buttons button[type='submit'] {
482
- background: var(--kb-color-primary);
483
- color: white;
484
- border-color: var(--kb-color-primary);
485
- }
486
-
487
- .kb-prompt__buttons button[type='submit']:hover {
488
- background: var(--kb-color-primary-hover);
489
- }
490
-
491
- /* Prompt/Dialog mobile optimization */
492
- @media (max-width: 767px) {
493
- .kb-editor-prompt {
494
- position: fixed;
495
- bottom: var(--kb-space-md);
496
- left: var(--kb-space-md);
497
- right: var(--kb-space-md);
498
- top: auto;
499
- transform: none;
500
- max-width: none;
501
- border-radius: var(--kb-radius-lg);
502
- padding: var(--kb-space-lg);
503
- }
504
-
505
- .kb-editor-prompt input[type='text'],
506
- .kb-editor-prompt textarea {
507
- min-height: var(--kb-touch-target-min);
508
- padding: var(--kb-space-sm);
509
- font-size: var(--kb-text-base);
510
- border: 1px solid var(--kb-color-border);
511
- border-radius: var(--kb-radius-sm);
512
- background: var(--kb-color-surface);
513
- color: var(--kb-color-text);
514
- }
515
-
516
- .kb-editor-prompt-buttons {
517
- display: flex;
518
- gap: var(--kb-space-sm);
519
- margin-top: var(--kb-space-md);
520
- }
521
-
522
- .kb-editor-prompt-buttons button {
523
- flex: 1;
524
- min-height: var(--kb-touch-target-comfortable);
525
- padding: var(--kb-space-sm) var(--kb-space-md);
526
- border: 1px solid var(--kb-color-border);
527
- border-radius: var(--kb-radius-sm);
528
- background: var(--kb-color-surface);
529
- color: var(--kb-color-text);
530
- font-size: var(--kb-text-base);
531
- cursor: pointer;
532
- }
533
-
534
- .kb-editor-prompt-buttons button[type='submit'] {
535
- background: var(--kb-color-primary);
536
- color: white;
537
- border-color: var(--kb-color-primary);
538
- }
539
- }
@@ -1,14 +0,0 @@
1
- import { Plugin } from 'prosemirror-state';
2
- import { Extension } from '@kerebron/editor';
3
- import { type MenuElement } from './menu.js';
4
- export interface MenuConfig {
5
- modifyMenu?(menus: MenuElement[][]): MenuElement[][];
6
- floating: boolean;
7
- }
8
- export declare class ExtensionMenuLegacy extends Extension {
9
- protected config: MenuConfig;
10
- name: string;
11
- constructor(config?: MenuConfig);
12
- getProseMirrorPlugins(): Plugin[];
13
- }
14
- //# sourceMappingURL=ExtensionMenuLegacy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExtensionMenuLegacy.d.ts","sourceRoot":"","sources":["../src/ExtensionMenuLegacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7C,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,CAAC;IACrD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,mBAAoB,SAAQ,SAAS;cAGjB,MAAM,EAAE,UAAU;IAFjD,IAAI,SAAU;gBAEiB,MAAM,GAAE,UAA+B;IAI7D,qBAAqB,IAAI,MAAM,EAAE;CAmB3C"}
@@ -1,26 +0,0 @@
1
- import { Extension } from '@kerebron/editor';
2
- import { MenuPlugin } from './MenuPlugin.js';
3
- import { buildMenu } from './buildMenu.js';
4
- export class ExtensionMenuLegacy extends Extension {
5
- config;
6
- name = 'menu';
7
- constructor(config = { floating: true }) {
8
- super(config);
9
- this.config = config;
10
- }
11
- getProseMirrorPlugins() {
12
- if (!this.editor.config.element) {
13
- return [];
14
- }
15
- const plugins = [];
16
- let content = buildMenu(this.editor, this.editor.schema);
17
- if (this.config.modifyMenu) {
18
- content = this.config.modifyMenu(content);
19
- }
20
- plugins.push(new MenuPlugin({
21
- content,
22
- floating: this.config.floating,
23
- }));
24
- return plugins;
25
- }
26
- }
@@ -1,9 +0,0 @@
1
- import { Plugin } from 'prosemirror-state';
2
- import { MenuElement } from './menu.js';
3
- export declare class MenuPlugin extends Plugin {
4
- constructor(options: {
5
- content: readonly (readonly MenuElement[])[];
6
- floating?: boolean;
7
- });
8
- }
9
- //# sourceMappingURL=MenuPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MenuPlugin.d.ts","sourceRoot":"","sources":["../src/MenuPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,MAAM,EAAa,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAiB,MAAM,WAAW,CAAC;AAyLvD,qBAAa,UAAW,SAAQ,MAAM;gBACxB,OAAO,EAAE;QAGnB,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,CAAC;QAK7C,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB;CAOF"}