@alpaca-editor/core 1.0.3992 → 1.0.3995

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 (190) hide show
  1. package/dist/components/ui/copy-button.d.ts +10 -0
  2. package/dist/components/ui/copy-button.js +33 -0
  3. package/dist/components/ui/copy-button.js.map +1 -0
  4. package/dist/components/ui/sonner.d.ts +3 -0
  5. package/dist/components/ui/sonner.js +14 -0
  6. package/dist/components/ui/sonner.js.map +1 -0
  7. package/dist/config/config.js +4 -16
  8. package/dist/config/config.js.map +1 -1
  9. package/dist/config/types.d.ts +6 -3
  10. package/dist/editor/ComponentInfo.js +2 -2
  11. package/dist/editor/ComponentInfo.js.map +1 -1
  12. package/dist/editor/ContentTree.d.ts +2 -1
  13. package/dist/editor/ContentTree.js +4 -8
  14. package/dist/editor/ContentTree.js.map +1 -1
  15. package/dist/editor/FieldListField.js +3 -10
  16. package/dist/editor/FieldListField.js.map +1 -1
  17. package/dist/editor/ItemInfo.js +3 -3
  18. package/dist/editor/ItemInfo.js.map +1 -1
  19. package/dist/editor/ai/Agents.d.ts +6 -0
  20. package/dist/editor/ai/Agents.js +48 -0
  21. package/dist/editor/ai/Agents.js.map +1 -0
  22. package/dist/editor/ai/AiTerminal.js +4 -2
  23. package/dist/editor/ai/AiTerminal.js.map +1 -1
  24. package/dist/editor/client/EditorClient.js +48 -91
  25. package/dist/editor/client/EditorClient.js.map +1 -1
  26. package/dist/editor/client/editContext.d.ts +3 -2
  27. package/dist/editor/client/editContext.js.map +1 -1
  28. package/dist/editor/commands/itemCommands.js +5 -24
  29. package/dist/editor/commands/itemCommands.js.map +1 -1
  30. package/dist/editor/component-designer/ComponentEditor.js +3 -5
  31. package/dist/editor/component-designer/ComponentEditor.js.map +1 -1
  32. package/dist/editor/field-types/InternalLinkFieldEditor.js +20 -25
  33. package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
  34. package/dist/editor/field-types/RichTextEditor.d.ts +4 -3
  35. package/dist/editor/field-types/RichTextEditor.js +16 -3
  36. package/dist/editor/field-types/RichTextEditor.js.map +1 -1
  37. package/dist/editor/field-types/RichTextEditorComponent.d.ts +6 -5
  38. package/dist/editor/field-types/RichTextEditorComponent.js +59 -60
  39. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  40. package/dist/editor/field-types/TreeListEditor.js +7 -5
  41. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  42. package/dist/editor/field-types/richtext/components/EditorDropdown.d.ts +11 -0
  43. package/dist/editor/field-types/richtext/components/EditorDropdown.js +83 -0
  44. package/dist/editor/field-types/richtext/components/EditorDropdown.js.map +1 -0
  45. package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +5 -0
  46. package/dist/editor/field-types/richtext/components/ReactSlate.js +562 -0
  47. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -0
  48. package/dist/editor/field-types/richtext/components/ToolbarButton.d.ts +3 -0
  49. package/dist/editor/field-types/richtext/components/ToolbarButton.js +13 -0
  50. package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -0
  51. package/dist/editor/field-types/richtext/config/pluginFactory.d.ts +17 -0
  52. package/dist/editor/field-types/richtext/config/pluginFactory.js +14 -0
  53. package/dist/editor/field-types/richtext/config/pluginFactory.js.map +1 -0
  54. package/dist/editor/field-types/richtext/hooks/useProfileCache.d.ts +68 -0
  55. package/dist/editor/field-types/richtext/hooks/useProfileCache.js +208 -0
  56. package/dist/editor/field-types/richtext/hooks/useProfileCache.js.map +1 -0
  57. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.d.ts +25 -0
  58. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js +64 -0
  59. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js.map +1 -0
  60. package/dist/editor/field-types/richtext/index.d.ts +5 -0
  61. package/dist/editor/field-types/richtext/index.js +6 -0
  62. package/dist/editor/field-types/richtext/index.js.map +1 -0
  63. package/dist/editor/field-types/richtext/types.d.ts +139 -0
  64. package/dist/editor/field-types/richtext/types.js +107 -0
  65. package/dist/editor/field-types/richtext/types.js.map +1 -0
  66. package/dist/editor/field-types/richtext/utils/conversion.d.ts +5 -0
  67. package/dist/editor/field-types/richtext/utils/conversion.js +539 -0
  68. package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -0
  69. package/dist/editor/field-types/richtext/utils/plugins.d.ts +97 -0
  70. package/dist/editor/field-types/richtext/utils/plugins.js +272 -0
  71. package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -0
  72. package/dist/editor/field-types/richtext/utils/profileMapper.d.ts +38 -0
  73. package/dist/editor/field-types/richtext/utils/profileMapper.js +366 -0
  74. package/dist/editor/field-types/richtext/utils/profileMapper.js.map +1 -0
  75. package/dist/editor/field-types/richtext/utils/profileServiceCache.d.ts +37 -0
  76. package/dist/editor/field-types/richtext/utils/profileServiceCache.js +117 -0
  77. package/dist/editor/field-types/richtext/utils/profileServiceCache.js.map +1 -0
  78. package/dist/editor/media-selector/AiImageSearch.js +2 -5
  79. package/dist/editor/media-selector/AiImageSearch.js.map +1 -1
  80. package/dist/editor/media-selector/MediaFolderBrowser.js +2 -5
  81. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  82. package/dist/editor/media-selector/TreeSelector.js +2 -5
  83. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  84. package/dist/editor/menubar/FavoritesControls.d.ts +8 -0
  85. package/dist/editor/menubar/FavoritesControls.js +124 -0
  86. package/dist/editor/menubar/FavoritesControls.js.map +1 -0
  87. package/dist/editor/menubar/ItemLanguageVersion.js +2 -1
  88. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
  89. package/dist/editor/menubar/PageSelector.js +3 -6
  90. package/dist/editor/menubar/PageSelector.js.map +1 -1
  91. package/dist/editor/reviews/reviewCommands.js +3 -8
  92. package/dist/editor/reviews/reviewCommands.js.map +1 -1
  93. package/dist/editor/services/contentService.d.ts +8 -0
  94. package/dist/editor/services/contentService.js +3 -0
  95. package/dist/editor/services/contentService.js.map +1 -1
  96. package/dist/editor/services/favouritesService.d.ts +33 -0
  97. package/dist/editor/services/favouritesService.js +22 -0
  98. package/dist/editor/services/favouritesService.js.map +1 -0
  99. package/dist/editor/sidebar/ComponentTree.js +7 -1
  100. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  101. package/dist/editor/sidebar/Debug.js +2 -2
  102. package/dist/editor/sidebar/Debug.js.map +1 -1
  103. package/dist/editor/sidebar/SEOInfo.js +4 -15
  104. package/dist/editor/sidebar/SEOInfo.js.map +1 -1
  105. package/dist/editor/ui/ItemSearch.js +2 -5
  106. package/dist/editor/ui/ItemSearch.js.map +1 -1
  107. package/dist/editor/ui/PerfectTree.d.ts +4 -2
  108. package/dist/editor/ui/PerfectTree.js +16 -7
  109. package/dist/editor/ui/PerfectTree.js.map +1 -1
  110. package/dist/editor/ui/Section.js +1 -1
  111. package/dist/editor/utils/itemutils.js +3 -1
  112. package/dist/editor/utils/itemutils.js.map +1 -1
  113. package/dist/editor/utils/keyboardNavigation.d.ts +32 -0
  114. package/dist/editor/utils/keyboardNavigation.js +156 -0
  115. package/dist/editor/utils/keyboardNavigation.js.map +1 -0
  116. package/dist/editor/views/ItemEditor.js +10 -3
  117. package/dist/editor/views/ItemEditor.js.map +1 -1
  118. package/dist/page-wizard/PageWizard.d.ts +2 -2
  119. package/dist/page-wizard/steps/ContentStep.js +7 -7
  120. package/dist/page-wizard/steps/ContentStep.js.map +1 -1
  121. package/dist/page-wizard/steps/schema.js +4 -2
  122. package/dist/page-wizard/steps/schema.js.map +1 -1
  123. package/dist/page-wizard/steps/usePageCreator.js +1 -1
  124. package/dist/page-wizard/steps/usePageCreator.js.map +1 -1
  125. package/dist/revision.d.ts +2 -2
  126. package/dist/revision.js +2 -2
  127. package/dist/splash-screen/NewPage.js +7 -10
  128. package/dist/splash-screen/NewPage.js.map +1 -1
  129. package/dist/styles.css +34 -5
  130. package/package.json +6 -1
  131. package/src/components/ui/copy-button.tsx +75 -0
  132. package/src/components/ui/sonner.tsx +25 -0
  133. package/src/config/config.tsx +5 -19
  134. package/src/config/types.ts +6 -3
  135. package/src/editor/ComponentInfo.tsx +5 -4
  136. package/src/editor/ContentTree.tsx +5 -6
  137. package/src/editor/FieldListField.tsx +4 -25
  138. package/src/editor/ItemInfo.tsx +5 -5
  139. package/src/editor/ai/Agents.tsx +125 -0
  140. package/src/editor/ai/AiTerminal.tsx +4 -0
  141. package/src/editor/client/EditorClient.tsx +58 -119
  142. package/src/editor/client/editContext.ts +3 -2
  143. package/src/editor/commands/itemCommands.tsx +10 -25
  144. package/src/editor/component-designer/ComponentEditor.tsx +8 -10
  145. package/src/editor/field-types/InternalLinkFieldEditor.tsx +73 -69
  146. package/src/editor/field-types/RichTextEditor.tsx +40 -3
  147. package/src/editor/field-types/RichTextEditorComponent.tsx +74 -77
  148. package/src/editor/field-types/TreeListEditor.tsx +7 -7
  149. package/src/editor/field-types/richtext/components/EditorDropdown.css +81 -0
  150. package/src/editor/field-types/richtext/components/EditorDropdown.tsx +165 -0
  151. package/src/editor/field-types/richtext/components/ReactSlate.css +161 -0
  152. package/src/editor/field-types/richtext/components/ReactSlate.tsx +801 -0
  153. package/src/editor/field-types/richtext/components/ToolbarButton.tsx +23 -0
  154. package/src/editor/field-types/richtext/config/pluginFactory.tsx +22 -0
  155. package/src/editor/field-types/richtext/hooks/useProfileCache.ts +270 -0
  156. package/src/editor/field-types/richtext/hooks/useRichTextProfile.ts +94 -0
  157. package/src/editor/field-types/richtext/index.ts +5 -0
  158. package/src/editor/field-types/richtext/types.ts +269 -0
  159. package/src/editor/field-types/richtext/utils/conversion.ts +589 -0
  160. package/src/editor/field-types/richtext/utils/plugins.ts +346 -0
  161. package/src/editor/field-types/richtext/utils/profileMapper.ts +424 -0
  162. package/src/editor/field-types/richtext/utils/profileServiceCache.ts +154 -0
  163. package/src/editor/media-selector/AiImageSearch.tsx +2 -5
  164. package/src/editor/media-selector/MediaFolderBrowser.tsx +2 -5
  165. package/src/editor/media-selector/TreeSelector.tsx +2 -5
  166. package/src/editor/menubar/FavoritesControls.tsx +250 -0
  167. package/src/editor/menubar/ItemLanguageVersion.tsx +3 -1
  168. package/src/editor/menubar/PageSelector.tsx +76 -75
  169. package/src/editor/reviews/reviewCommands.tsx +3 -8
  170. package/src/editor/services/contentService.ts +12 -0
  171. package/src/editor/services/favouritesService.ts +60 -0
  172. package/src/editor/sidebar/ComponentTree.tsx +12 -1
  173. package/src/editor/sidebar/Debug.tsx +4 -3
  174. package/src/editor/sidebar/SEOInfo.tsx +6 -16
  175. package/src/editor/ui/ItemSearch.tsx +2 -5
  176. package/src/editor/ui/PerfectTree.tsx +19 -6
  177. package/src/editor/ui/Section.tsx +1 -1
  178. package/src/editor/utils/{itemutils.ts → itemutils.tsx} +12 -12
  179. package/src/editor/utils/keyboardNavigation.ts +234 -0
  180. package/src/editor/views/ItemEditor.tsx +22 -1
  181. package/src/page-wizard/PageWizard.tsx +2 -2
  182. package/src/page-wizard/steps/ContentStep.tsx +7 -9
  183. package/src/page-wizard/steps/schema.ts +10 -7
  184. package/src/page-wizard/steps/usePageCreator.ts +1 -0
  185. package/src/revision.ts +2 -2
  186. package/src/splash-screen/NewPage.tsx +28 -24
  187. package/dist/editor/ui/CopyToClipboardButton.d.ts +0 -3
  188. package/dist/editor/ui/CopyToClipboardButton.js +0 -16
  189. package/dist/editor/ui/CopyToClipboardButton.js.map +0 -1
  190. package/src/editor/ui/CopyToClipboardButton.tsx +0 -24
@@ -0,0 +1,165 @@
1
+ import React, { useState, useRef, useEffect } from 'react';
2
+ import { Editor } from 'slate';
3
+ import { DropdownOption } from '../types';
4
+ import './EditorDropdown.css';
5
+
6
+ // Editor dropdown component
7
+ const EditorDropdown = <T,>({
8
+ options,
9
+ editor,
10
+ buttonStyle,
11
+ label
12
+ }: {
13
+ options: DropdownOption<T>[],
14
+ editor: Editor,
15
+ buttonStyle?: React.CSSProperties,
16
+ label?: string
17
+ }) => {
18
+ const [isOpen, setIsOpen] = useState(false);
19
+ const dropdownRef = useRef<HTMLDivElement>(null);
20
+ const [buttonWidth, setButtonWidth] = useState(0); // Start with 0 to calculate
21
+ const [menuWidth, setMenuWidth] = useState(0); // Start with 0 to calculate
22
+
23
+ useEffect(() => {
24
+ // Calculate based on text length
25
+ const span = document.createElement('span');
26
+ span.style.visibility = 'hidden';
27
+ span.style.position = 'absolute';
28
+ span.style.whiteSpace = 'nowrap';
29
+ span.style.font = '13px system-ui, -apple-system, sans-serif'; // More consistent font
30
+ span.style.padding = '0';
31
+ span.style.margin = '0';
32
+ document.body.appendChild(span);
33
+
34
+ let maxWidth = 0;
35
+
36
+ // Calculate width for all options (both menu and button will use the same width)
37
+ options.forEach(option => {
38
+ span.textContent = option.label || '';
39
+ const labelWidth = span.getBoundingClientRect().width;
40
+ const iconWidth = option.icon ? 20 : 0;
41
+ const iconSpacing = option.icon ? 8 : 0;
42
+
43
+ // Calculate width for menu option
44
+ const menuOptionWidth = labelWidth + iconWidth + iconSpacing + 24; // Icon + text + spacing + menu padding
45
+
46
+ // Calculate width for button option (considering label prefix if present)
47
+ let buttonOptionWidth;
48
+ if (label) {
49
+ span.textContent = `${label}: ${option.label}`;
50
+ const textWidth = span.getBoundingClientRect().width;
51
+ buttonOptionWidth = textWidth + iconWidth + iconSpacing + 30; // Text + icon + spacing + arrow + padding
52
+ } else {
53
+ buttonOptionWidth = labelWidth + iconWidth + iconSpacing + 30; // Text + icon + spacing + arrow + padding
54
+ }
55
+
56
+ // Use the maximum of both menu and button widths
57
+ maxWidth = Math.max(maxWidth, menuOptionWidth, buttonOptionWidth);
58
+ });
59
+
60
+ // Fallback if no options
61
+ if (options.length === 0) {
62
+ maxWidth = 100;
63
+ }
64
+
65
+ // Set minimum width
66
+ const minWidth = 80;
67
+ const finalWidth = Math.max(maxWidth, minWidth);
68
+
69
+ // Both button and menu use the same width
70
+ setButtonWidth(finalWidth);
71
+ setMenuWidth(finalWidth);
72
+
73
+ document.body.removeChild(span);
74
+ }, [options, label]);
75
+
76
+ useEffect(() => {
77
+ const handleClickOutside = (event: MouseEvent) => {
78
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {
79
+ setIsOpen(false);
80
+ }
81
+ };
82
+
83
+ document.addEventListener('mousedown', handleClickOutside);
84
+ return () => {
85
+ document.removeEventListener('mousedown', handleClickOutside);
86
+ };
87
+ }, []);
88
+
89
+ const toggleDropdown = (event: React.MouseEvent) => {
90
+ event.preventDefault();
91
+ setIsOpen(!isOpen);
92
+ };
93
+
94
+ const handleSelect = (option: DropdownOption<T>) => (event: React.MouseEvent) => {
95
+ event.preventDefault();
96
+ option.onSelect(editor, event);
97
+ setIsOpen(false);
98
+ };
99
+
100
+ const currentOption = options.find(option => option.isActive(editor)) || options[0];
101
+
102
+ return (
103
+ <div ref={dropdownRef} className="editor-dropdown">
104
+ <button
105
+ onMouseDown={toggleDropdown}
106
+ className="editor-dropdown-button"
107
+ style={{
108
+ width: buttonWidth > 0 ? `${buttonWidth}px` : 'auto',
109
+ ...buttonStyle
110
+ }}
111
+ >
112
+ {label ? (
113
+ <>
114
+ <span className="editor-dropdown-button-content">
115
+ {currentOption?.icon && (
116
+ <span className="editor-dropdown-button-icon">{currentOption.icon}</span>
117
+ )}
118
+ <span className="editor-dropdown-button-text">
119
+ {label}: {currentOption?.label}
120
+ </span>
121
+ </span>
122
+ <span className="editor-dropdown-button-arrow">▼</span>
123
+ </>
124
+ ) : (
125
+ <>
126
+ <span className="editor-dropdown-button-content">
127
+ {currentOption?.icon && (
128
+ <span className="editor-dropdown-button-icon">{currentOption.icon}</span>
129
+ )}
130
+ <span className="editor-dropdown-button-text">
131
+ {currentOption?.label}
132
+ </span>
133
+ </span>
134
+ <span className="editor-dropdown-button-arrow">▼</span>
135
+ </>
136
+ )}
137
+ </button>
138
+
139
+ {isOpen && (
140
+ <div
141
+ className="editor-dropdown-menu"
142
+ style={{
143
+ width: `${menuWidth}px`
144
+ }}
145
+ >
146
+ {options.map((option, index) => (
147
+ <div
148
+ key={index}
149
+ onMouseDown={handleSelect(option)}
150
+ className={`editor-dropdown-option ${option.isActive(editor) ? 'active' : ''}`}
151
+ style={option.style}
152
+ >
153
+ {option.icon && <span className="editor-dropdown-option-icon">{option.icon}</span>}
154
+ <span className="editor-dropdown-option-text">
155
+ {option.label}
156
+ </span>
157
+ </div>
158
+ ))}
159
+ </div>
160
+ )}
161
+ </div>
162
+ );
163
+ };
164
+
165
+ export default EditorDropdown;
@@ -0,0 +1,161 @@
1
+ /* ReactSlate Editor Styles */
2
+
3
+ /* Main editor container */
4
+ .slate-editor {
5
+ /* Base styles for the editor */
6
+ }
7
+
8
+ /* List item styles */
9
+ .slate-editor .slate-list-item {
10
+ position: relative;
11
+ margin: 4px 0;
12
+ line-height: 1.5;
13
+ display: flex;
14
+ align-items: flex-start;
15
+ }
16
+
17
+ .slate-editor .slate-list-item .slate-list-bullet {
18
+ flex-shrink: 0;
19
+ width: 20px;
20
+ text-align: right;
21
+ padding-right: 8px;
22
+ user-select: none;
23
+ color: #666;
24
+ font-weight: normal;
25
+ margin-top: 0;
26
+ }
27
+
28
+ .slate-editor .slate-list-item.slate-list-ordered .slate-list-bullet {
29
+ font-weight: 500;
30
+ }
31
+
32
+ .slate-editor .slate-list-item.slate-list-unordered .slate-list-bullet {
33
+ font-size: 1.2em;
34
+ line-height: 1.25;
35
+ }
36
+
37
+ .slate-editor .slate-list-item .slate-list-content {
38
+ flex: 1;
39
+ min-height: 1.5em;
40
+ }
41
+
42
+ /* List indentation levels */
43
+ .slate-editor .slate-list-item[data-indent="0"] { margin-left: 0px; }
44
+ .slate-editor .slate-list-item[data-indent="1"] { margin-left: 20px; }
45
+ .slate-editor .slate-list-item[data-indent="2"] { margin-left: 40px; }
46
+ .slate-editor .slate-list-item[data-indent="3"] { margin-left: 60px; }
47
+ .slate-editor .slate-list-item[data-indent="4"] { margin-left: 80px; }
48
+ .slate-editor .slate-list-item[data-indent="5"] { margin-left: 100px; }
49
+
50
+ /* Different bullet styles for different levels */
51
+ .slate-editor .slate-list-item.slate-list-unordered[data-indent="0"] .slate-list-bullet::before { content: "•"; }
52
+ .slate-editor .slate-list-item.slate-list-unordered[data-indent="1"] .slate-list-bullet::before { content: "◦"; }
53
+ .slate-editor .slate-list-item.slate-list-unordered[data-indent="2"] .slate-list-bullet::before { content: "▪"; }
54
+ .slate-editor .slate-list-item.slate-list-unordered[data-indent="3"] .slate-list-bullet::before { content: "▫"; }
55
+ .slate-editor .slate-list-item.slate-list-unordered[data-indent="4"] .slate-list-bullet::before { content: "•"; }
56
+ .slate-editor .slate-list-item.slate-list-unordered[data-indent="5"] .slate-list-bullet::before { content: "◦"; }
57
+
58
+ /* Toolbar styles */
59
+ .slate-editor .toolbar {
60
+ padding: 6px;
61
+ margin-bottom: 6px;
62
+ border-bottom: 1px solid #ddd;
63
+ display: flex;
64
+ flex-direction: column;
65
+ gap: 8px;
66
+ }
67
+
68
+ .slate-editor .toolbar-row {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 8px;
72
+ flex-wrap: wrap;
73
+ }
74
+
75
+ .slate-editor .toolbar-button-group {
76
+ display: flex;
77
+ align-items: center;
78
+ gap: 2px;
79
+ background-color: #f5f5f5;
80
+ border-radius: 4px;
81
+ padding: 2px;
82
+ }
83
+
84
+ .slate-editor .toolbar-dropdown-container {
85
+ display: inline-block;
86
+ background-color: #f5f5f5;
87
+ border-radius: 4px;
88
+ padding: 2px;
89
+ }
90
+
91
+ .slate-editor .toolbar-dropdown-button {
92
+ padding: 5px 10px;
93
+ margin: 0;
94
+ border: none;
95
+ border-radius: 3px;
96
+ cursor: pointer;
97
+ display: flex;
98
+ align-items: center;
99
+ min-width: 120px;
100
+ justify-content: space-between;
101
+ }
102
+
103
+ .slate-editor .toolbar-dropdown-button:not(:disabled) {
104
+ background: transparent;
105
+ }
106
+
107
+ .slate-editor .toolbar-dropdown-button:not(:disabled):hover {
108
+ background: rgba(0, 0, 0, 0.05);
109
+ }
110
+
111
+ .slate-editor .toolbar-dropdown-button.active {
112
+ background: #ffffff;
113
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
114
+ }
115
+
116
+ .slate-editor .toolbar-dropdown-button:disabled {
117
+ background: transparent;
118
+ cursor: not-allowed;
119
+ opacity: 0.6;
120
+ }
121
+
122
+ .slate-editor .toolbar-dropdown-arrow {
123
+ margin-left: 5px;
124
+ flex-shrink: 0;
125
+ }
126
+
127
+ .slate-editor .toolbar-dropdown-content {
128
+ overflow: hidden;
129
+ text-overflow: ellipsis;
130
+ white-space: nowrap;
131
+ }
132
+
133
+ .slate-editor .toolbar-dropdown-icon {
134
+ display: flex;
135
+ align-items: center;
136
+ margin-right: 8px;
137
+ flex-shrink: 0;
138
+ }
139
+
140
+ /* Link styles */
141
+ .slate-editor .slate-link {
142
+ cursor: pointer;
143
+ padding: 0 2px;
144
+ border-radius: 2px;
145
+ }
146
+
147
+ .slate-editor .slate-link.internal-link {
148
+ color: #008800;
149
+ background-color: rgba(0, 136, 0, 0.05);
150
+ }
151
+
152
+ .slate-editor .slate-link.external-link {
153
+ color: #0066cc;
154
+ background-color: rgba(0, 102, 204, 0.05);
155
+ }
156
+
157
+ /* Special mark styles */
158
+ .slate-editor .extrabold {
159
+ font-weight: 800;
160
+ text-transform: uppercase;
161
+ }