@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.
Files changed (180) hide show
  1. package/README.md +1 -1
  2. package/dist/esm/components/Avatar/index.mjs +1 -1
  3. package/dist/esm/components/Avatar/index.mjs.map +1 -1
  4. package/dist/esm/components/Badge/index.mjs +3 -3
  5. package/dist/esm/components/Badge/index.mjs.map +1 -1
  6. package/dist/esm/components/Breadcrumb/index.mjs +5 -5
  7. package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
  8. package/dist/esm/components/Browser/Browser.mjs +4 -4
  9. package/dist/esm/components/Browser/Browser.mjs.map +1 -1
  10. package/dist/esm/components/Button/Button.mjs +1 -0
  11. package/dist/esm/components/Button/Button.mjs.map +1 -1
  12. package/dist/esm/components/Carousel/index.mjs +5 -5
  13. package/dist/esm/components/Carousel/index.mjs.map +1 -1
  14. package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs +5 -5
  15. package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs.map +1 -1
  16. package/dist/esm/components/Container/index.mjs +2 -2
  17. package/dist/esm/components/Container/index.mjs.map +1 -1
  18. package/dist/esm/components/DictionaryEditor/ItemLayout.mjs +1 -1
  19. package/dist/esm/components/DictionaryEditor/ItemLayout.mjs.map +1 -1
  20. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +5 -5
  21. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
  22. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +3 -3
  23. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
  24. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +3 -3
  25. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
  26. package/dist/esm/components/DictionaryFieldEditor/{ContentEditor.mjs → NodeEditor.mjs} +7 -7
  27. package/dist/esm/components/DictionaryFieldEditor/NodeEditor.mjs.map +1 -0
  28. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +1 -1
  29. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
  30. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +1 -1
  31. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
  32. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs +2 -2
  33. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs.map +1 -1
  34. package/dist/esm/components/DictionaryFieldEditor/index.mjs +3 -3
  35. package/dist/esm/components/Footer/index.mjs +5 -3
  36. package/dist/esm/components/Footer/index.mjs.map +1 -1
  37. package/dist/esm/components/Form/elements/OTPElement.mjs +1 -1
  38. package/dist/esm/components/HeightResizer/index.mjs +1 -1
  39. package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
  40. package/dist/esm/components/IDE/Code.mjs +1 -1
  41. package/dist/esm/components/IDE/Code.mjs.map +1 -1
  42. package/dist/esm/components/IDE/FileList.mjs +1 -1
  43. package/dist/esm/components/IDE/FileList.mjs.map +1 -1
  44. package/dist/esm/components/IDE/FileTree.mjs +1 -1
  45. package/dist/esm/components/IDE/FileTree.mjs.map +1 -1
  46. package/dist/esm/components/IDE/IDE.mjs +10 -7
  47. package/dist/esm/components/IDE/IDE.mjs.map +1 -1
  48. package/dist/esm/components/IDE/MarkDownRender.mjs +4 -3
  49. package/dist/esm/components/IDE/MarkDownRender.mjs.map +1 -1
  50. package/dist/esm/components/Input/Checkbox.mjs +4 -4
  51. package/dist/esm/components/Input/Checkbox.mjs.map +1 -1
  52. package/dist/esm/components/Input/Input.mjs +2 -2
  53. package/dist/esm/components/Input/Input.mjs.map +1 -1
  54. package/dist/esm/components/Input/OTPInput.mjs +1 -1
  55. package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
  56. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs +2 -2
  57. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
  58. package/dist/esm/components/LanguageBackground/LanguageSection.mjs +6 -8
  59. package/dist/esm/components/LanguageBackground/LanguageSection.mjs.map +1 -1
  60. package/dist/esm/components/LanguageBackground/index.mjs +2 -2
  61. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs +3 -3
  62. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
  63. package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs +1 -1
  64. package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs.map +1 -1
  65. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +9 -8
  66. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  67. package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs +2 -2
  68. package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs.map +1 -1
  69. package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs +3 -3
  70. package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs.map +1 -1
  71. package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs +2 -2
  72. package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs.map +1 -1
  73. package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs +2 -2
  74. package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs.map +1 -1
  75. package/dist/esm/components/Modal/Modal.mjs +2 -3
  76. package/dist/esm/components/Modal/Modal.mjs.map +1 -1
  77. package/dist/esm/components/Navbar/DesktopNavbar.mjs +3 -3
  78. package/dist/esm/components/Navbar/DesktopNavbar.mjs.map +1 -1
  79. package/dist/esm/components/Navbar/MobileNavbar.mjs +2 -2
  80. package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
  81. package/dist/esm/components/Pagination/Pagination.mjs +1 -1
  82. package/dist/esm/components/Pattern/GridDistortionPattern.mjs +2 -2
  83. package/dist/esm/components/Pattern/GridDistortionPattern.mjs.map +1 -1
  84. package/dist/esm/components/Pattern/GridPattern.mjs +1 -1
  85. package/dist/esm/components/Pattern/GridPattern.mjs.map +1 -1
  86. package/dist/esm/components/RightDrawer/RightDrawer.mjs +5 -5
  87. package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
  88. package/dist/esm/components/Select/Multiselect.mjs +2 -2
  89. package/dist/esm/components/Select/Multiselect.mjs.map +1 -1
  90. package/dist/esm/components/Select/Select.mjs +2 -2
  91. package/dist/esm/components/Select/Select.mjs.map +1 -1
  92. package/dist/esm/components/Status/index.mjs +28 -0
  93. package/dist/esm/components/Status/index.mjs.map +1 -0
  94. package/dist/esm/components/Steps/index.mjs +3 -3
  95. package/dist/esm/components/Steps/index.mjs.map +1 -1
  96. package/dist/esm/components/SwitchSelector/SwitchSelector.mjs +12 -11
  97. package/dist/esm/components/SwitchSelector/SwitchSelector.mjs.map +1 -1
  98. package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs +6 -6
  99. package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs.map +1 -1
  100. package/dist/esm/components/Tab/Tab.mjs +2 -2
  101. package/dist/esm/components/Tab/Tab.mjs.map +1 -1
  102. package/dist/esm/components/TabSelector/TabSelector.mjs +5 -5
  103. package/dist/esm/components/TabSelector/TabSelector.mjs.map +1 -1
  104. package/dist/esm/components/Table/SmartTable.mjs +2 -2
  105. package/dist/esm/components/Table/SmartTable.mjs.map +1 -1
  106. package/dist/esm/components/Table/Table.mjs +1 -1
  107. package/dist/esm/components/Table/Table.mjs.map +1 -1
  108. package/dist/esm/components/Table/TableElements.mjs +2 -2
  109. package/dist/esm/components/Table/TableElements.mjs.map +1 -1
  110. package/dist/esm/components/Tag/index.mjs +1 -1
  111. package/dist/esm/components/Tag/index.mjs.map +1 -1
  112. package/dist/esm/components/TechLogo/TechLogo.mjs +2 -0
  113. package/dist/esm/components/TechLogo/TechLogo.mjs.map +1 -1
  114. package/dist/esm/components/TechLogo/logos/HTMX.mjs +31 -0
  115. package/dist/esm/components/TechLogo/logos/HTMX.mjs.map +1 -0
  116. package/dist/esm/components/TechLogo/logos/Remix.mjs +22 -0
  117. package/dist/esm/components/TechLogo/logos/Remix.mjs.map +1 -0
  118. package/dist/esm/components/TechLogo/techLogos.mjs +5 -1
  119. package/dist/esm/components/TechLogo/techLogos.mjs.map +1 -1
  120. package/dist/esm/components/Terminal/Terminal.mjs +4 -4
  121. package/dist/esm/components/Terminal/Terminal.mjs.map +1 -1
  122. package/dist/esm/components/TextArea/TextArea.mjs.map +1 -1
  123. package/dist/esm/components/Toaster/Toast.mjs +4 -4
  124. package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
  125. package/dist/esm/components/index.mjs +8 -7
  126. package/dist/esm/hooks/index.mjs +7 -7
  127. package/dist/esm/hooks/usePersistedStore.mjs +6 -18
  128. package/dist/esm/hooks/usePersistedStore.mjs.map +1 -1
  129. package/dist/esm/providers/ReactQueryProvider.mjs +10 -2
  130. package/dist/esm/providers/ReactQueryProvider.mjs.map +1 -1
  131. package/dist/esm/providers/ThemeProvider.mjs +27 -15
  132. package/dist/esm/providers/ThemeProvider.mjs.map +1 -1
  133. package/dist/esm/routes.mjs +3 -1
  134. package/dist/esm/routes.mjs.map +1 -1
  135. package/dist/esm/structured-data/buildItemListJsonLd.mjs +27 -0
  136. package/dist/esm/structured-data/buildItemListJsonLd.mjs.map +1 -0
  137. package/dist/esm/structured-data/index.mjs +2 -1
  138. package/dist/types/components/Badge/index.d.ts.map +1 -1
  139. package/dist/types/components/Button/Button.d.ts +2 -2
  140. package/dist/types/components/Button/Button.d.ts.map +1 -1
  141. package/dist/types/components/Container/index.d.ts.map +1 -1
  142. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
  143. package/dist/types/components/DictionaryFieldEditor/NodeEditor.d.ts +10 -0
  144. package/dist/types/components/DictionaryFieldEditor/NodeEditor.d.ts.map +1 -0
  145. package/dist/types/components/DictionaryFieldEditor/index.d.ts +2 -2
  146. package/dist/types/components/Footer/index.d.ts.map +1 -1
  147. package/dist/types/components/Form/FormBase.d.ts +1 -1
  148. package/dist/types/components/IDE/MarkDownRender.d.ts +1 -0
  149. package/dist/types/components/IDE/MarkDownRender.d.ts.map +1 -1
  150. package/dist/types/components/LanguageBackground/LanguageSection.d.ts +5 -1
  151. package/dist/types/components/LanguageBackground/LanguageSection.d.ts.map +1 -1
  152. package/dist/types/components/LanguageBackground/index.d.ts +2 -2
  153. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts.map +1 -1
  154. package/dist/types/components/Status/index.d.ts +8 -0
  155. package/dist/types/components/Status/index.d.ts.map +1 -0
  156. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +3 -3
  157. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts.map +1 -1
  158. package/dist/types/components/Table/TableElements.d.ts.map +1 -1
  159. package/dist/types/components/TechLogo/TechLogo.d.ts.map +1 -1
  160. package/dist/types/components/TechLogo/logos/HTMX.d.ts +6 -0
  161. package/dist/types/components/TechLogo/logos/HTMX.d.ts.map +1 -0
  162. package/dist/types/components/TechLogo/logos/Remix.d.ts +6 -0
  163. package/dist/types/components/TechLogo/logos/Remix.d.ts.map +1 -0
  164. package/dist/types/components/TechLogo/techLogos.d.ts +4 -2
  165. package/dist/types/components/TechLogo/types.d.ts +1 -1
  166. package/dist/types/components/TextArea/TextArea.d.ts +1 -1
  167. package/dist/types/components/index.d.ts +3 -2
  168. package/dist/types/providers/ThemeProvider.d.ts.map +1 -1
  169. package/dist/types/routes.d.ts +3 -1
  170. package/dist/types/routes.d.ts.map +1 -1
  171. package/dist/types/structured-data/buildItemListJsonLd.d.ts +36 -0
  172. package/dist/types/structured-data/buildItemListJsonLd.d.ts.map +1 -0
  173. package/dist/types/structured-data/index.d.ts +2 -1
  174. package/package.json +53 -53
  175. package/src/components/MarkdownEditor/markdown-editor.css +16 -16
  176. package/styles/globals.css +71 -0
  177. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +0 -1
  178. package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts +0 -10
  179. package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts.map +0 -1
  180. 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 `tailwind.css`
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="light"] {
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="dark"] {
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="taskList"] {
155
+ ul[data-type='taskList'] {
156
156
  list-style: none;
157
157
  padding: 0;
158
158
  }
159
159
 
160
- ul[data-type="taskList"] li > label {
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="taskList"] li > label {
166
+ ul[data-type='taskList'] li > label {
167
167
  margin-right: 0.5rem;
168
168
  }
169
169
  }
170
170
 
171
- ul[data-type="taskList"] li > label input[type="checkbox"] {
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="taskList"] li > label input[type="checkbox"]:hover {
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="taskList"] li > label input[type="checkbox"]:active {
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="taskList"] li > label input[type="checkbox"]::before {
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="taskList"] li > label input[type="checkbox"]:checked::before {
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="taskList"] li[data-checked="true"] > div > p {
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="dark"] .drag-handle {
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="dark"] .ProseMirror pre.shiki span {
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
- }