@intlayer/design-system 9.4.1 → 9.4.2
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/README.md +1 -1
- package/dist/esm/components/Avatar/index.mjs +1 -1
- package/dist/esm/components/Avatar/index.mjs.map +1 -1
- package/dist/esm/components/Badge/index.mjs +3 -3
- package/dist/esm/components/Badge/index.mjs.map +1 -1
- package/dist/esm/components/Breadcrumb/index.mjs +5 -5
- package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
- package/dist/esm/components/Browser/Browser.mjs +4 -4
- package/dist/esm/components/Browser/Browser.mjs.map +1 -1
- package/dist/esm/components/Button/Button.mjs +1 -0
- package/dist/esm/components/Button/Button.mjs.map +1 -1
- package/dist/esm/components/Carousel/index.mjs +5 -5
- package/dist/esm/components/Carousel/index.mjs.map +1 -1
- package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs +5 -5
- package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs.map +1 -1
- package/dist/esm/components/Container/index.mjs +2 -2
- package/dist/esm/components/Container/index.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/ItemLayout.mjs +1 -1
- package/dist/esm/components/DictionaryEditor/ItemLayout.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +5 -5
- package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +3 -3
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +3 -3
- package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/{ContentEditor.mjs → NodeEditor.mjs} +7 -7
- package/dist/esm/components/DictionaryFieldEditor/NodeEditor.mjs.map +1 -0
- package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +1 -1
- package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +1 -1
- package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs +2 -2
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/index.mjs +3 -3
- package/dist/esm/components/Footer/index.mjs +5 -3
- package/dist/esm/components/Footer/index.mjs.map +1 -1
- package/dist/esm/components/Form/elements/OTPElement.mjs +1 -1
- package/dist/esm/components/HeightResizer/index.mjs +1 -1
- package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
- package/dist/esm/components/IDE/Code.mjs +1 -1
- package/dist/esm/components/IDE/Code.mjs.map +1 -1
- package/dist/esm/components/IDE/FileList.mjs +1 -1
- package/dist/esm/components/IDE/FileList.mjs.map +1 -1
- package/dist/esm/components/IDE/FileTree.mjs +1 -1
- package/dist/esm/components/IDE/FileTree.mjs.map +1 -1
- package/dist/esm/components/IDE/IDE.mjs +10 -7
- package/dist/esm/components/IDE/IDE.mjs.map +1 -1
- package/dist/esm/components/IDE/MarkDownRender.mjs +4 -3
- package/dist/esm/components/IDE/MarkDownRender.mjs.map +1 -1
- package/dist/esm/components/Input/Checkbox.mjs +4 -4
- package/dist/esm/components/Input/Checkbox.mjs.map +1 -1
- package/dist/esm/components/Input/Input.mjs +2 -2
- package/dist/esm/components/Input/Input.mjs.map +1 -1
- package/dist/esm/components/Input/OTPInput.mjs +1 -1
- package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
- package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs +2 -2
- package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
- package/dist/esm/components/LanguageBackground/LanguageSection.mjs +6 -8
- package/dist/esm/components/LanguageBackground/LanguageSection.mjs.map +1 -1
- package/dist/esm/components/LanguageBackground/index.mjs +2 -2
- package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs +3 -3
- package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
- package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs +1 -1
- package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs.map +1 -1
- package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +9 -8
- package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs +2 -2
- package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs +3 -3
- package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs +2 -2
- package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs +2 -2
- package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs.map +1 -1
- package/dist/esm/components/Modal/Modal.mjs +2 -3
- package/dist/esm/components/Modal/Modal.mjs.map +1 -1
- package/dist/esm/components/Navbar/DesktopNavbar.mjs +3 -3
- package/dist/esm/components/Navbar/DesktopNavbar.mjs.map +1 -1
- package/dist/esm/components/Navbar/MobileNavbar.mjs +2 -2
- package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
- package/dist/esm/components/Pagination/Pagination.mjs +1 -1
- package/dist/esm/components/Pattern/GridDistortionPattern.mjs +2 -2
- package/dist/esm/components/Pattern/GridDistortionPattern.mjs.map +1 -1
- package/dist/esm/components/Pattern/GridPattern.mjs +1 -1
- package/dist/esm/components/Pattern/GridPattern.mjs.map +1 -1
- package/dist/esm/components/RightDrawer/RightDrawer.mjs +5 -5
- package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
- package/dist/esm/components/Select/Multiselect.mjs +2 -2
- package/dist/esm/components/Select/Multiselect.mjs.map +1 -1
- package/dist/esm/components/Select/Select.mjs +2 -2
- package/dist/esm/components/Select/Select.mjs.map +1 -1
- package/dist/esm/components/Status/index.mjs +28 -0
- package/dist/esm/components/Status/index.mjs.map +1 -0
- package/dist/esm/components/Steps/index.mjs +3 -3
- package/dist/esm/components/Steps/index.mjs.map +1 -1
- package/dist/esm/components/SwitchSelector/SwitchSelector.mjs +12 -11
- package/dist/esm/components/SwitchSelector/SwitchSelector.mjs.map +1 -1
- package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs +6 -6
- package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs.map +1 -1
- package/dist/esm/components/Tab/Tab.mjs +2 -2
- package/dist/esm/components/Tab/Tab.mjs.map +1 -1
- package/dist/esm/components/TabSelector/TabSelector.mjs +5 -5
- package/dist/esm/components/TabSelector/TabSelector.mjs.map +1 -1
- package/dist/esm/components/Table/SmartTable.mjs +2 -2
- package/dist/esm/components/Table/SmartTable.mjs.map +1 -1
- package/dist/esm/components/Table/Table.mjs +1 -1
- package/dist/esm/components/Table/Table.mjs.map +1 -1
- package/dist/esm/components/Table/TableElements.mjs +2 -2
- package/dist/esm/components/Table/TableElements.mjs.map +1 -1
- package/dist/esm/components/Tag/index.mjs +1 -1
- package/dist/esm/components/Tag/index.mjs.map +1 -1
- package/dist/esm/components/TechLogo/TechLogo.mjs +2 -0
- package/dist/esm/components/TechLogo/TechLogo.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/HTMX.mjs +31 -0
- package/dist/esm/components/TechLogo/logos/HTMX.mjs.map +1 -0
- package/dist/esm/components/TechLogo/logos/Remix.mjs +22 -0
- package/dist/esm/components/TechLogo/logos/Remix.mjs.map +1 -0
- package/dist/esm/components/TechLogo/techLogos.mjs +5 -1
- package/dist/esm/components/TechLogo/techLogos.mjs.map +1 -1
- package/dist/esm/components/Terminal/Terminal.mjs +4 -4
- package/dist/esm/components/Terminal/Terminal.mjs.map +1 -1
- package/dist/esm/components/TextArea/TextArea.mjs.map +1 -1
- package/dist/esm/components/Toaster/Toast.mjs +4 -4
- package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
- package/dist/esm/components/index.mjs +8 -7
- package/dist/esm/hooks/index.mjs +7 -7
- package/dist/esm/hooks/usePersistedStore.mjs +6 -18
- package/dist/esm/hooks/usePersistedStore.mjs.map +1 -1
- package/dist/esm/providers/ReactQueryProvider.mjs +10 -2
- package/dist/esm/providers/ReactQueryProvider.mjs.map +1 -1
- package/dist/esm/providers/ThemeProvider.mjs +27 -15
- package/dist/esm/providers/ThemeProvider.mjs.map +1 -1
- package/dist/esm/routes.mjs +3 -1
- package/dist/esm/routes.mjs.map +1 -1
- package/dist/esm/structured-data/buildItemListJsonLd.mjs +27 -0
- package/dist/esm/structured-data/buildItemListJsonLd.mjs.map +1 -0
- package/dist/esm/structured-data/index.mjs +2 -1
- package/dist/types/components/Badge/index.d.ts.map +1 -1
- package/dist/types/components/Button/Button.d.ts +2 -2
- package/dist/types/components/Button/Button.d.ts.map +1 -1
- package/dist/types/components/Container/index.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/NodeEditor.d.ts +10 -0
- package/dist/types/components/DictionaryFieldEditor/NodeEditor.d.ts.map +1 -0
- package/dist/types/components/DictionaryFieldEditor/index.d.ts +2 -2
- package/dist/types/components/Footer/index.d.ts.map +1 -1
- package/dist/types/components/Form/FormBase.d.ts +1 -1
- package/dist/types/components/IDE/MarkDownRender.d.ts +1 -0
- package/dist/types/components/IDE/MarkDownRender.d.ts.map +1 -1
- package/dist/types/components/LanguageBackground/LanguageSection.d.ts +5 -1
- package/dist/types/components/LanguageBackground/LanguageSection.d.ts.map +1 -1
- package/dist/types/components/LanguageBackground/index.d.ts +2 -2
- package/dist/types/components/MarkDownRender/MarkDownRender.d.ts.map +1 -1
- package/dist/types/components/Status/index.d.ts +8 -0
- package/dist/types/components/Status/index.d.ts.map +1 -0
- package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +3 -3
- package/dist/types/components/SwitchSelector/SwitchSelector.d.ts.map +1 -1
- package/dist/types/components/Table/TableElements.d.ts.map +1 -1
- package/dist/types/components/TechLogo/TechLogo.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/HTMX.d.ts +6 -0
- package/dist/types/components/TechLogo/logos/HTMX.d.ts.map +1 -0
- package/dist/types/components/TechLogo/logos/Remix.d.ts +6 -0
- package/dist/types/components/TechLogo/logos/Remix.d.ts.map +1 -0
- package/dist/types/components/TechLogo/techLogos.d.ts +4 -2
- package/dist/types/components/TechLogo/types.d.ts +1 -1
- package/dist/types/components/TextArea/TextArea.d.ts +1 -1
- package/dist/types/components/index.d.ts +3 -2
- package/dist/types/providers/ThemeProvider.d.ts.map +1 -1
- package/dist/types/routes.d.ts +3 -1
- package/dist/types/routes.d.ts.map +1 -1
- package/dist/types/structured-data/buildItemListJsonLd.d.ts +36 -0
- package/dist/types/structured-data/buildItemListJsonLd.d.ts.map +1 -0
- package/dist/types/structured-data/index.d.ts +2 -1
- package/package.json +53 -53
- package/src/components/MarkdownEditor/markdown-editor.css +16 -16
- package/styles/globals.css +71 -0
- package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +0 -1
- package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts +0 -10
- package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts.map +0 -1
- package/tailwind.css +0 -269
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Exposed via the `@intlayer/design-system/markdown-editor.css` export and
|
|
5
5
|
* imported only by consumers that actually use the editor (currently the
|
|
6
|
-
* `apps/app` CMS dashboard), rather than from the shared `
|
|
6
|
+
* `apps/app` CMS dashboard), rather than from the shared `styles/globals.css`
|
|
7
7
|
* entry — this keeps the ProseMirror specific rules (placeholder, task
|
|
8
8
|
* checkboxes, image placeholder, drag handle) out of every other consumer's
|
|
9
9
|
* CSS bundle.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
:root,
|
|
13
|
-
[data-theme=
|
|
13
|
+
[data-theme='light'] {
|
|
14
14
|
--novel-highlight-default: #ffffff;
|
|
15
15
|
--novel-highlight-purple: #f6f3f8;
|
|
16
16
|
--novel-highlight-red: #fdebeb;
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
--novel-stone-800: rgba(69, 69, 69);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
[data-theme=
|
|
30
|
+
[data-theme='dark'] {
|
|
31
31
|
--novel-highlight-default: #000000;
|
|
32
32
|
--novel-highlight-purple: #3f2c4b;
|
|
33
33
|
--novel-highlight-red: #5c1a1a;
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
.img-placeholder::before {
|
|
135
|
-
content:
|
|
135
|
+
content: '';
|
|
136
136
|
box-sizing: border-box;
|
|
137
137
|
position: absolute;
|
|
138
138
|
top: 50%;
|
|
@@ -152,23 +152,23 @@
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
/* Task list checkboxes */
|
|
155
|
-
ul[data-type=
|
|
155
|
+
ul[data-type='taskList'] {
|
|
156
156
|
list-style: none;
|
|
157
157
|
padding: 0;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
ul[data-type=
|
|
160
|
+
ul[data-type='taskList'] li > label {
|
|
161
161
|
margin-right: 0.2rem;
|
|
162
162
|
user-select: none;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
@media screen and (max-width: 768px) {
|
|
166
|
-
ul[data-type=
|
|
166
|
+
ul[data-type='taskList'] li > label {
|
|
167
167
|
margin-right: 0.5rem;
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
-
ul[data-type=
|
|
171
|
+
ul[data-type='taskList'] li > label input[type='checkbox'] {
|
|
172
172
|
-webkit-appearance: none;
|
|
173
173
|
appearance: none;
|
|
174
174
|
background-color: var(--background);
|
|
@@ -184,16 +184,16 @@ ul[data-type="taskList"] li > label input[type="checkbox"] {
|
|
|
184
184
|
place-content: center;
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
ul[data-type=
|
|
187
|
+
ul[data-type='taskList'] li > label input[type='checkbox']:hover {
|
|
188
188
|
background-color: var(--accent);
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
-
ul[data-type=
|
|
191
|
+
ul[data-type='taskList'] li > label input[type='checkbox']:active {
|
|
192
192
|
background-color: var(--accent);
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
ul[data-type=
|
|
196
|
-
content:
|
|
195
|
+
ul[data-type='taskList'] li > label input[type='checkbox']::before {
|
|
196
|
+
content: '';
|
|
197
197
|
width: 0.65em;
|
|
198
198
|
height: 0.65em;
|
|
199
199
|
transform: scale(0);
|
|
@@ -203,11 +203,11 @@ ul[data-type="taskList"] li > label input[type="checkbox"]::before {
|
|
|
203
203
|
clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
ul[data-type=
|
|
206
|
+
ul[data-type='taskList'] li > label input[type='checkbox']:checked::before {
|
|
207
207
|
transform: scale(1);
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
ul[data-type=
|
|
210
|
+
ul[data-type='taskList'] li[data-checked='true'] > div > p {
|
|
211
211
|
color: var(--muted-foreground);
|
|
212
212
|
text-decoration: line-through;
|
|
213
213
|
text-decoration-thickness: 2px;
|
|
@@ -260,7 +260,7 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p {
|
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
-
[data-theme=
|
|
263
|
+
[data-theme='dark'] .drag-handle {
|
|
264
264
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' style='fill: rgba(255, 255, 255, 0.5)'%3E%3Cpath d='M3,2 C2.44771525,2 2,1.55228475 2,1 C2,0.44771525 2.44771525,0 3,0 C3.55228475,0 4,0.44771525 4,1 C4,1.55228475 3.55228475,2 3,2 Z M3,6 C2.44771525,6 2,5.55228475 2,5 C2,4.44771525 2.44771525,4 3,4 C3.55228475,4 4,4.44771525 4,5 C4,5.55228475 3.55228475,6 3,6 Z M3,10 C2.44771525,10 2,9.55228475 2,9 C2,8.44771525 2.44771525,8 3,8 C3.55228475,8 4,8.44771525 4,9 C4,9.55228475 3.55228475,10 3,10 Z M7,2 C6.44771525,2 6,1.55228475 6,1 C6,0.44771525 6.44771525,0 7,0 C7.55228475,0 8,0.44771525 8,1 C8,1.55228475 7.55228475,2 7,2 Z M7,6 C6.44771525,6 6,5.55228475 6,5 C6,4.44771525 6.44771525,4 7,4 C7.55228475,4 8,4.44771525 8,5 C8,5.55228475 7.55228475,6 7,6 Z M7,10 C6.44771525,10 6,9.55228475 6,9 C6,8.44771525 6.44771525,8 7,8 C7.55228475,8 8,8.44771525 8,9 C8,9.55228475 7.55228475,10 7,10 Z'%3E%3C/path%3E%3C/svg%3E");
|
|
265
265
|
}
|
|
266
266
|
|
|
@@ -274,7 +274,7 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p {
|
|
|
274
274
|
background-color: var(--muted) !important;
|
|
275
275
|
}
|
|
276
276
|
|
|
277
|
-
[data-theme=
|
|
277
|
+
[data-theme='dark'] .ProseMirror pre.shiki span {
|
|
278
278
|
/* biome-ignore lint/complexity/noImportantStyles: override shiki inline token color with the dark-theme variable */
|
|
279
279
|
color: var(--shiki-dark, inherit) !important;
|
|
280
280
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
@import 'tailwindcss';
|
|
2
|
+
|
|
3
|
+
@import 'fonts.css';
|
|
4
|
+
@import 'themes.css';
|
|
5
|
+
|
|
6
|
+
@plugin "@tailwindcss/aspect-ratio";
|
|
7
|
+
@source "../src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}";
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@theme {
|
|
11
|
+
--font-sans: 'Geist', 'Inter', ui-sans-serif, system-ui, sans-serif;
|
|
12
|
+
|
|
13
|
+
--color-background: var(--background);
|
|
14
|
+
--color-foreground: var(--foreground);
|
|
15
|
+
|
|
16
|
+
--color-text: var(--foreground);
|
|
17
|
+
--color-text-opposite: var(--background);
|
|
18
|
+
--color-foreground-opposite: var(--background);
|
|
19
|
+
--color-neutral: var(--color-foreground);
|
|
20
|
+
|
|
21
|
+
--color-card: var(--card);
|
|
22
|
+
--color-card-hover: var(--card-hover);
|
|
23
|
+
|
|
24
|
+
--color-muted: var(--muted);
|
|
25
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
26
|
+
|
|
27
|
+
--color-popover: var(--popover);
|
|
28
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
29
|
+
|
|
30
|
+
--color-primary: var(--primary);
|
|
31
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
32
|
+
|
|
33
|
+
--color-secondary: var(--secondary);
|
|
34
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
35
|
+
|
|
36
|
+
--color-accent: var(--accent);
|
|
37
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
38
|
+
|
|
39
|
+
--color-border: var(--border);
|
|
40
|
+
--color-input: var(--input);
|
|
41
|
+
--color-ring: var(--ring);
|
|
42
|
+
|
|
43
|
+
--color-hypertext: var(--hypertext);
|
|
44
|
+
--color-hypertext-hover: var(--hypertext-hover);
|
|
45
|
+
--color-hypertext-active: var(--hypertext-active);
|
|
46
|
+
|
|
47
|
+
--color-success: var(--success);
|
|
48
|
+
--color-warning: var(--warning);
|
|
49
|
+
--color-error: var(--error);
|
|
50
|
+
|
|
51
|
+
--color-neutral: var(--neutral);
|
|
52
|
+
--color-white: var(--white);
|
|
53
|
+
--color-black: var(--black);
|
|
54
|
+
|
|
55
|
+
--radius-lg: var(--radius);
|
|
56
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
57
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
html {
|
|
61
|
+
font-family: var(--font-sans);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
body {
|
|
65
|
+
background: var(--background);
|
|
66
|
+
color: var(--foreground);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
* {
|
|
70
|
+
border-color: var(--border);
|
|
71
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContentEditor.mjs","names":[],"sources":["../../../../src/components/DictionaryFieldEditor/ContentEditor.tsx"],"sourcesContent":["'use client';\n\nimport { useGetDictionaries } from '@api/index';\nimport { getContentNodeByKeyPath } from '@intlayer/core/dictionaryManipulator';\nimport {\n useEditedContent,\n useEditorLocale,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport type { Dictionary, LocalDictionaryId } from '@intlayer/types/dictionary';\nimport {\n type FC,\n useCallback,\n useDeferredValue,\n useEffect,\n useMemo,\n useState,\n useTransition,\n} from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { Container } from '../Container';\nimport { LocaleSwitcherContent } from '../LocaleSwitcherContentDropDown';\nimport { Pagination } from '../Pagination';\nimport { TextEditorContainer } from './ContentEditorView/TextEditor';\nimport { getIsEditableSection } from './getIsEditableSection';\nimport { KeyPathBreadcrumb } from './KeyPathBreadcrumb';\nimport { NavigationViewNode } from './NavigationView/NavigationViewNode';\n\ntype NodeEditorProps = {\n dictionary: Dictionary;\n};\n\n/** Render a variant (named string or structured object) for display. */\nconst formatVariant = (\n variant: string | Record<string, string | number> | undefined\n): string =>\n variant !== null && typeof variant === 'object'\n ? JSON.stringify(variant)\n : (variant ?? '');\n\nexport const ContentEditor: FC<NodeEditorProps> = ({ dictionary }) => {\n const { itemPagination, variantSwitcher } = useIntlayer('content-editor');\n const { editedContent } = useEditedContent();\n const {\n focusedContent,\n setFocusedContentKeyPath: _setFocusedContentKeyPath,\n } = useFocusUnmergedDictionary();\n const [, startTransition] = useTransition();\n const setFocusedContentKeyPath: typeof _setFocusedContentKeyPath = (\n keyPath\n ) => startTransition(() => _setFocusedContentKeyPath(keyPath));\n\n const [activeDictionary, setActiveDictionary] =\n useState<Dictionary>(dictionary);\n\n // Re-sync the locally tracked dictionary whenever the incoming prop changes\n // identity — not only when its `localId` changes. After a save, the query\n // refetches and hands back the same `localId` with fresh content; keying the\n // effect on `localId` alone left `activeDictionary` (the render source) stale\n // until a full page reload. The prop reference is stable across unrelated\n // re-renders (query data / store entry), so sibling switches made via\n // `switchSibling` are preserved.\n useEffect(() => {\n setActiveDictionary(dictionary);\n }, [dictionary]);\n\n const hasQualifier =\n dictionary.item !== undefined || dictionary.variant !== undefined;\n\n const { data: siblingsData } = useGetDictionaries(\n { keys: [dictionary.key] },\n { enabled: hasQualifier && !!dictionary.key }\n );\n\n const allSiblings = useMemo<Dictionary[]>(\n () => (siblingsData?.data ?? []) as unknown as Dictionary[],\n [siblingsData]\n );\n\n const itemDicts = useMemo<Dictionary[]>(() => {\n if (dictionary.item === undefined) return [];\n return allSiblings\n .filter((d) => d.item !== undefined)\n .sort((a, b) => (a.item ?? 0) - (b.item ?? 0));\n }, [dictionary, allSiblings]);\n\n const variantDicts = useMemo<Dictionary[]>(() => {\n if (dictionary.variant === undefined) return [];\n return allSiblings.filter((d) => d.variant !== undefined);\n }, [dictionary, allSiblings]);\n\n const switchSibling = useCallback(\n (sibling: Dictionary) => {\n setActiveDictionary(sibling);\n setFocusedContentKeyPath([]);\n },\n [setFocusedContentKeyPath]\n );\n\n const { content, key, localId } = activeDictionary;\n const focusedKeyPath = focusedContent?.keyPath;\n const section =\n typeof editedContent?.[localId as LocalDictionaryId]?.content ===\n 'undefined'\n ? content\n : editedContent?.[localId as LocalDictionaryId]?.content;\n\n const currentLocale = useEditorLocale();\n const focusedSection = getContentNodeByKeyPath(\n section,\n focusedKeyPath ?? [],\n currentLocale\n );\n\n const deferredKeyPath = useDeferredValue(focusedKeyPath);\n const deferredSection = useDeferredValue(focusedSection);\n const isStale = deferredSection !== focusedSection;\n\n const isEditableBaseSection = getIsEditableSection(section);\n const isEditableFocusedSection = getIsEditableSection(deferredSection);\n\n useEffect(() => {\n if (typeof focusedSection === 'undefined') {\n setFocusedContentKeyPath(focusedContent?.keyPath?.slice(0, -1) ?? []);\n }\n }, []);\n\n const currentItemIndex = itemDicts.findIndex(\n (dictionary) => dictionary.localId === activeDictionary.localId\n );\n const currentVariant = activeDictionary.variant;\n\n return (\n <div>\n {/* Qualifier navigation controls */}\n {hasQualifier && (\n <div className=\"mb-4 flex flex-wrap items-center gap-4\">\n {itemDicts.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-muted text-xs\">\n {itemPagination.label}\n </span>\n <Pagination\n currentPage={currentItemIndex >= 0 ? currentItemIndex + 1 : 1}\n totalPages={itemDicts.length}\n onPageChange={(page) => {\n const target = itemDicts[page - 1];\n if (target) switchSibling(target);\n }}\n size=\"sm\"\n />\n </div>\n )}\n\n {variantDicts.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium text-muted text-xs\">\n {variantSwitcher.label}:\n </span>\n {variantDicts.map((sibling) => {\n const isActive = sibling.localId === activeDictionary.localId;\n return (\n <button\n key={sibling.localId}\n type=\"button\"\n onClick={() => !isActive && switchSibling(sibling)}\n className={`rounded-lg px-3 py-1 text-xs transition-colors ${\n isActive\n ? 'bg-text font-semibold text-text-opposite'\n : 'cursor-pointer border border-border hover:bg-text/10'\n }`}\n >\n {formatVariant(sibling.variant)}\n </button>\n );\n })}\n {currentVariant !== undefined &&\n !variantDicts.some((d) => d.localId === dictionary.localId) && (\n <span className=\"rounded-lg bg-text px-3 py-1 font-semibold text-text-opposite text-xs\">\n {formatVariant(currentVariant)}\n </span>\n )}\n </div>\n )}\n </div>\n )}\n\n <div className=\"mb-6 flex items-center justify-between gap-2\">\n <KeyPathBreadcrumb\n dictionaryKey={key}\n keyPath={focusedKeyPath ?? []}\n onClickKeyPath={setFocusedContentKeyPath}\n />\n <div className=\"flex items-center gap-2\">\n <LocaleSwitcherContent />\n </div>\n </div>\n <div className=\"flex flex-1 gap-2 overflow-visible max-md:flex-col\">\n {typeof section === 'object' &&\n section &&\n !isEditableBaseSection &&\n Object.keys(section).length > 0 && (\n <Container\n border\n background=\"none\"\n className=\"top-10 flex h-full flex-col items-start gap-0.5 overflow-auto p-2 md:sticky md:max-w-[50%]\"\n roundedSize=\"2xl\"\n transparency=\"xs\"\n >\n <NavigationViewNode\n keyPath={[]}\n section={section}\n dictionary={activeDictionary}\n />\n </Container>\n )}\n {(isEditableFocusedSection || (deferredKeyPath ?? []).length > 0) && (\n <div\n className={\n isStale\n ? 'pointer-events-none flex-1 opacity-50 transition-opacity'\n : 'flex-1 transition-opacity'\n }\n >\n <TextEditorContainer\n keyPath={deferredKeyPath ?? []}\n section={deferredSection}\n dictionary={activeDictionary}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { FC } from "react";
|
|
2
|
-
import { Dictionary } from "@intlayer/types/dictionary";
|
|
3
|
-
//#region src/components/DictionaryFieldEditor/ContentEditor.d.ts
|
|
4
|
-
type NodeEditorProps = {
|
|
5
|
-
dictionary: Dictionary;
|
|
6
|
-
};
|
|
7
|
-
declare const ContentEditor: FC<NodeEditorProps>;
|
|
8
|
-
//#endregion
|
|
9
|
-
export { ContentEditor };
|
|
10
|
-
//# sourceMappingURL=ContentEditor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContentEditor.d.ts","names":[],"sources":["../../../../src/components/DictionaryFieldEditor/ContentEditor.tsx"],"mappings":";;;KA4BK;EACH,YAAY;;cAWD,eAAe,GAAG"}
|
package/tailwind.css
DELETED
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
@import "tailwindcss";
|
|
2
|
-
|
|
3
|
-
@font-face {
|
|
4
|
-
font-family: "Geist";
|
|
5
|
-
font-style: normal;
|
|
6
|
-
font-weight: 100 900;
|
|
7
|
-
font-display: swap;
|
|
8
|
-
src:
|
|
9
|
-
url("/Geist-VariableFont_wght.woff2") format("woff2"),
|
|
10
|
-
url("/Geist-VariableFont_wght.ttf") format("truetype");
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
@theme {
|
|
14
|
-
--font-sans: "Geist", "Inter", sans-serif;
|
|
15
|
-
|
|
16
|
-
--color-background: rgba(255, 255, 255);
|
|
17
|
-
--color-background-opposite: rgba(18, 18, 18);
|
|
18
|
-
|
|
19
|
-
--color-text: rgba(18, 18, 18);
|
|
20
|
-
--color-text-opposite: rgba(255, 255, 255);
|
|
21
|
-
--color-text-dark: rgba(255, 255, 255);
|
|
22
|
-
--color-text-light: rgba(18, 18, 18);
|
|
23
|
-
|
|
24
|
-
--color-card: rgba(231, 231, 231);
|
|
25
|
-
--color-card-hover: rgba(231, 231, 231);
|
|
26
|
-
|
|
27
|
-
--color-hypertext: var(--color-text);
|
|
28
|
-
--color-hypertext-hover: rgba(197, 101, 212);
|
|
29
|
-
--color-hypertext-active: var(--color-text);
|
|
30
|
-
|
|
31
|
-
--color-shadow: rgba(18, 18, 18);
|
|
32
|
-
|
|
33
|
-
--color-primary: var(--color-text);
|
|
34
|
-
--color-primary-50: rgba(249, 253, 230);
|
|
35
|
-
--color-primary-100: rgba(238, 248, 186);
|
|
36
|
-
--color-primary-200: rgba(226, 243, 143);
|
|
37
|
-
--color-primary-300: rgba(215, 239, 105);
|
|
38
|
-
--color-primary-400: var(--color-text);
|
|
39
|
-
--color-primary-500: rgba(182, 211, 57);
|
|
40
|
-
--color-primary-600: rgba(153, 177, 48);
|
|
41
|
-
--color-primary-700: rgba(116, 134, 37);
|
|
42
|
-
--color-primary-800: rgba(92, 106, 29);
|
|
43
|
-
--color-primary-900: rgba(67, 77, 21);
|
|
44
|
-
--color-primary-950: rgba(40, 46, 12);
|
|
45
|
-
|
|
46
|
-
--color-secondary: rgba(255, 230, 109);
|
|
47
|
-
--color-secondary-50: rgba(254, 251, 232);
|
|
48
|
-
--color-secondary-100: rgba(255, 246, 194);
|
|
49
|
-
--color-secondary-200: rgba(255, 230, 109);
|
|
50
|
-
--color-secondary-300: rgba(255, 216, 69);
|
|
51
|
-
--color-secondary-400: rgba(252, 193, 19);
|
|
52
|
-
--color-secondary-500: rgba(236, 168, 6);
|
|
53
|
-
--color-secondary-600: rgba(204, 129, 2);
|
|
54
|
-
--color-secondary-700: rgba(162, 90, 6);
|
|
55
|
-
--color-secondary-800: rgba(134, 71, 13);
|
|
56
|
-
--color-secondary-900: rgba(114, 58, 17);
|
|
57
|
-
--color-secondary-950: rgba(67, 29, 5);
|
|
58
|
-
|
|
59
|
-
--color-neutral: rgba(93, 93, 93);
|
|
60
|
-
--color-neutral-50: rgba(249, 249, 249);
|
|
61
|
-
--color-neutral-100: rgba(231, 231, 231);
|
|
62
|
-
--color-neutral-200: rgba(209, 209, 209);
|
|
63
|
-
--color-neutral-300: rgba(176, 176, 176);
|
|
64
|
-
--color-neutral-400: rgba(136, 136, 136);
|
|
65
|
-
--color-neutral-500: rgba(109, 109, 109);
|
|
66
|
-
--color-neutral-600: rgba(93, 93, 93);
|
|
67
|
-
--color-neutral-700: rgba(79, 79, 79);
|
|
68
|
-
--color-neutral-800: rgba(69, 69, 69);
|
|
69
|
-
--color-neutral-900: rgba(61, 61, 61);
|
|
70
|
-
--color-neutral-950: rgba(48, 48, 48);
|
|
71
|
-
|
|
72
|
-
--color-success: rgba(0, 204, 102, 1);
|
|
73
|
-
--color-success-50: rgba(235, 251, 243, 1);
|
|
74
|
-
--color-success-100: rgba(186, 242, 214, 1);
|
|
75
|
-
--color-success-200: rgba(121, 232, 180, 1);
|
|
76
|
-
--color-success-300: rgba(54, 219, 145, 1);
|
|
77
|
-
--color-success-400: rgba(26, 211, 123, 1);
|
|
78
|
-
--color-success-500: rgba(0, 184, 92, 1);
|
|
79
|
-
--color-success-600: rgba(0, 153, 77, 1);
|
|
80
|
-
--color-success-700: rgba(0, 122, 61, 1);
|
|
81
|
-
--color-success-800: rgba(0, 92, 46, 1);
|
|
82
|
-
--color-success-900: rgba(0, 61, 31, 1);
|
|
83
|
-
|
|
84
|
-
--color-warning: rgba(214, 153, 66);
|
|
85
|
-
--color-warning-50: rgba(254, 251, 232);
|
|
86
|
-
--color-warning-100: rgba(255, 246, 194);
|
|
87
|
-
--color-warning-200: rgba(255, 230, 109);
|
|
88
|
-
--color-warning-300: rgba(255, 216, 69);
|
|
89
|
-
--color-warning-400: rgba(252, 193, 19);
|
|
90
|
-
--color-warning-500: rgba(236, 168, 6);
|
|
91
|
-
--color-warning-600: rgba(204, 129, 2);
|
|
92
|
-
--color-warning-700: rgba(162, 90, 6);
|
|
93
|
-
--color-warning-800: rgba(134, 71, 13);
|
|
94
|
-
--color-warning-900: rgba(114, 58, 17);
|
|
95
|
-
|
|
96
|
-
--color-error: rgba(181, 24, 13);
|
|
97
|
-
--color-error-50: rgba(255, 245, 237);
|
|
98
|
-
--color-error-100: rgba(255, 232, 213);
|
|
99
|
-
--color-error-200: rgba(254, 206, 170);
|
|
100
|
-
--color-error-300: rgba(253, 171, 116);
|
|
101
|
-
--color-error-400: rgba(251, 125, 60);
|
|
102
|
-
--color-error-500: rgba(249, 90, 22);
|
|
103
|
-
--color-error-600: rgba(234, 63, 12);
|
|
104
|
-
--color-error-700: rgba(194, 45, 12);
|
|
105
|
-
--color-error-800: rgba(154, 37, 18);
|
|
106
|
-
--color-error-900: rgba(124, 33, 18);
|
|
107
|
-
|
|
108
|
-
--color-white: rgba(255, 255, 255);
|
|
109
|
-
|
|
110
|
-
--color-black: rgba(0, 0, 0);
|
|
111
|
-
|
|
112
|
-
/* Shadcn standard theme variables mapped to the design system */
|
|
113
|
-
--color-foreground: var(--foreground);
|
|
114
|
-
--color-muted: var(--muted);
|
|
115
|
-
--color-muted-foreground: var(--muted-foreground);
|
|
116
|
-
--color-popover: var(--popover);
|
|
117
|
-
--color-popover-foreground: var(--popover-foreground);
|
|
118
|
-
--color-accent: var(--accent);
|
|
119
|
-
--color-accent-foreground: var(--accent-foreground);
|
|
120
|
-
--color-border: var(--border);
|
|
121
|
-
--color-input: var(--input);
|
|
122
|
-
--color-ring: var(--ring);
|
|
123
|
-
--radius-lg: var(--radius);
|
|
124
|
-
--radius-md: calc(var(--radius) - 2px);
|
|
125
|
-
--radius-sm: calc(var(--radius) - 4px);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
@custom-variant dark (:where([data-theme="dark"], [data-theme="dark"] *) &);
|
|
129
|
-
@custom-variant light (:where([data-theme="light"], [data-theme="light"] *) &);
|
|
130
|
-
|
|
131
|
-
:root,
|
|
132
|
-
[data-theme="light"] {
|
|
133
|
-
--font-sans: "Geist", "Inter", sans-serif;
|
|
134
|
-
|
|
135
|
-
--color-background: rgba(255, 255, 255);
|
|
136
|
-
--color-background-opposite: rgba(18, 18, 18);
|
|
137
|
-
|
|
138
|
-
--color-text: rgba(18, 18, 18);
|
|
139
|
-
--color-text-opposite: rgba(255, 255, 255);
|
|
140
|
-
--color-text-dark: rgba(255, 255, 255);
|
|
141
|
-
--color-text-light: rgba(18, 18, 18);
|
|
142
|
-
|
|
143
|
-
--color-card: rgba(231, 231, 231);
|
|
144
|
-
--color-card-hover: rgba(231, 231, 231);
|
|
145
|
-
|
|
146
|
-
--color-hypertext: var(--color-text);
|
|
147
|
-
--color-hypertext-hover: rgba(197, 101, 212);
|
|
148
|
-
--color-hypertext-active: var(--color-text);
|
|
149
|
-
|
|
150
|
-
--color-shadow: rgba(18, 18, 18);
|
|
151
|
-
|
|
152
|
-
--color-primary: var(--color-text);
|
|
153
|
-
--color-secondary: rgba(255, 230, 109);
|
|
154
|
-
--color-neutral: rgba(93, 93, 93);
|
|
155
|
-
|
|
156
|
-
--color-success: rgba(0, 204, 102);
|
|
157
|
-
--color-warning: rgba(214, 153, 66);
|
|
158
|
-
--color-error: rgba(181, 24, 13);
|
|
159
|
-
|
|
160
|
-
--color-white: rgba(255, 255, 255);
|
|
161
|
-
--color-black: rgba(0, 0, 0);
|
|
162
|
-
|
|
163
|
-
/* Shadcn mappings (Light) */
|
|
164
|
-
--background: var(--color-background);
|
|
165
|
-
--foreground: var(--color-text);
|
|
166
|
-
--card: var(--color-card);
|
|
167
|
-
--card-foreground: var(--color-text);
|
|
168
|
-
--popover: var(--color-card);
|
|
169
|
-
--popover-foreground: var(--color-text);
|
|
170
|
-
--primary: var(--color-text);
|
|
171
|
-
--primary-foreground: var(--color-background);
|
|
172
|
-
--secondary: var(--color-secondary);
|
|
173
|
-
--secondary-foreground: var(--color-text-light);
|
|
174
|
-
--muted: var(--color-neutral-100);
|
|
175
|
-
--muted-foreground: var(--color-neutral-600);
|
|
176
|
-
--accent: var(--color-card);
|
|
177
|
-
--accent-foreground: var(--color-text);
|
|
178
|
-
--border: var(--color-neutral-200);
|
|
179
|
-
--input: var(--color-neutral-200);
|
|
180
|
-
--ring: var(--color-primary);
|
|
181
|
-
--radius: 0.5rem;
|
|
182
|
-
|
|
183
|
-
/* Monaco theme variables */
|
|
184
|
-
--monaco-background: var(--color-background);
|
|
185
|
-
--monaco-foreground: var(--color-text);
|
|
186
|
-
--monaco-border: var(--color-neutral-200);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
[data-theme="dark"] {
|
|
190
|
-
--font-sans: "Geist", "Inter", sans-serif;
|
|
191
|
-
|
|
192
|
-
--color-background: rgba(23, 23, 23);
|
|
193
|
-
--color-background-opposite: rgba(255, 255, 255);
|
|
194
|
-
|
|
195
|
-
--color-text: rgba(255, 245, 237);
|
|
196
|
-
--color-text-opposite: rgba(18, 18, 18);
|
|
197
|
-
|
|
198
|
-
--color-card: rgba(39, 39, 39);
|
|
199
|
-
--color-card-hover: rgba(79, 79, 79);
|
|
200
|
-
|
|
201
|
-
--color-hypertext: var(--color-text);
|
|
202
|
-
--color-hypertext-hover: rgba(197, 101, 212);
|
|
203
|
-
--color-hypertext-active: var(--color-text);
|
|
204
|
-
|
|
205
|
-
--color-shadow: rgba(18, 18, 18);
|
|
206
|
-
|
|
207
|
-
--color-primary: var(--color-text);
|
|
208
|
-
--color-secondary: rgba(255, 230, 109);
|
|
209
|
-
--color-neutral: rgba(93, 93, 93);
|
|
210
|
-
|
|
211
|
-
--color-success: rgba(0, 204, 102);
|
|
212
|
-
--color-warning: rgba(214, 153, 66);
|
|
213
|
-
--color-error: rgba(181, 24, 13);
|
|
214
|
-
|
|
215
|
-
--color-white: rgba(255, 255, 255);
|
|
216
|
-
--color-black: rgba(0, 0, 0);
|
|
217
|
-
|
|
218
|
-
/* Shadcn mappings (Dark) */
|
|
219
|
-
--background: var(--color-background);
|
|
220
|
-
--foreground: var(--color-text);
|
|
221
|
-
--card: var(--color-card);
|
|
222
|
-
--card-foreground: var(--color-text);
|
|
223
|
-
--popover: var(--color-card);
|
|
224
|
-
--popover-foreground: var(--color-text);
|
|
225
|
-
--primary: var(--color-text);
|
|
226
|
-
--primary-foreground: var(--color-background);
|
|
227
|
-
--secondary: var(--color-secondary);
|
|
228
|
-
--secondary-foreground: var(--color-text-light);
|
|
229
|
-
--muted: rgba(79, 79, 79, 1);
|
|
230
|
-
--muted-foreground: rgba(176, 176, 176, 1);
|
|
231
|
-
--accent: var(--color-card);
|
|
232
|
-
--accent-foreground: var(--color-text);
|
|
233
|
-
--border: rgba(79, 79, 79, 1);
|
|
234
|
-
--input: rgba(79, 79, 79, 1);
|
|
235
|
-
--ring: var(--color-primary);
|
|
236
|
-
|
|
237
|
-
/* Monaco theme variables */
|
|
238
|
-
--monaco-background: var(--color-background);
|
|
239
|
-
--monaco-foreground: var(--color-text);
|
|
240
|
-
--monaco-border: rgba(79, 79, 79, 1);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
@plugin "@tailwindcss/aspect-ratio";
|
|
244
|
-
|
|
245
|
-
@source "./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}";
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Dual-theme Shiki output.
|
|
249
|
-
*
|
|
250
|
-
* Code blocks are highlighted once with both `github-light` and `github-dark`,
|
|
251
|
-
* and every token carries its two colours as the `--shiki-light` /
|
|
252
|
-
* `--shiki-dark` custom properties instead of a resolved `color`. One markup
|
|
253
|
-
* therefore serves both themes, which is what allows the highlighting to be
|
|
254
|
-
* done ahead of time — at build, on the server — rather than re-run in the
|
|
255
|
-
* browser whenever the resolved theme changes.
|
|
256
|
-
*
|
|
257
|
-
* These rules live here, rather than in each app's `shiki.css`, because they
|
|
258
|
-
* are what makes the code block components render at all: without them every
|
|
259
|
-
* token resolves to an undefined variable.
|
|
260
|
-
*/
|
|
261
|
-
.shiki,
|
|
262
|
-
.shiki span {
|
|
263
|
-
color: var(--shiki-light);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
[data-theme="dark"] .shiki,
|
|
267
|
-
[data-theme="dark"] .shiki span {
|
|
268
|
-
color: var(--shiki-dark);
|
|
269
|
-
}
|