@kilivi/payloadcms-theme-management 2.0.0 → 2.1.0

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 (214) hide show
  1. package/README.md +318 -847
  2. package/dist/components/AppearanceSessionControls.d.ts +15 -0
  3. package/dist/components/AppearanceSessionControls.d.ts.map +1 -0
  4. package/dist/components/AppearanceSessionControls.js +152 -0
  5. package/dist/components/AppearanceSessionControls.js.map +1 -0
  6. package/dist/components/ColorModeToggle.css +42 -0
  7. package/dist/components/ColorModeToggle.d.ts +40 -0
  8. package/dist/components/ColorModeToggle.d.ts.map +1 -0
  9. package/dist/components/ColorModeToggle.js +111 -0
  10. package/dist/components/ColorModeToggle.js.map +1 -0
  11. package/dist/components/ServerThemeInjector.d.ts.map +1 -1
  12. package/dist/components/ServerThemeInjector.js +41 -14
  13. package/dist/components/ServerThemeInjector.js.map +1 -1
  14. package/dist/components/ThemeLivePreviewSync.d.ts +1 -0
  15. package/dist/components/ThemeLivePreviewSync.d.ts.map +1 -1
  16. package/dist/components/ThemeLivePreviewSync.js +1 -1
  17. package/dist/components/ThemeLivePreviewSync.js.map +1 -1
  18. package/dist/components/ThemeSwitcher.d.ts +36 -0
  19. package/dist/components/ThemeSwitcher.d.ts.map +1 -0
  20. package/dist/components/ThemeSwitcher.js +89 -0
  21. package/dist/components/ThemeSwitcher.js.map +1 -0
  22. package/dist/components/typographyPreviewUtils.d.ts.map +1 -1
  23. package/dist/components/typographyPreviewUtils.js +8 -1
  24. package/dist/components/typographyPreviewUtils.js.map +1 -1
  25. package/dist/constants/devicePreviews.d.ts +35 -0
  26. package/dist/constants/devicePreviews.d.ts.map +1 -0
  27. package/dist/constants/devicePreviews.js +43 -0
  28. package/dist/constants/devicePreviews.js.map +1 -0
  29. package/dist/constants/themeFonts.js +9 -9
  30. package/dist/constants/themeFonts.js.map +1 -1
  31. package/dist/extended-presets.d.ts +0 -4
  32. package/dist/extended-presets.d.ts.map +1 -1
  33. package/dist/extended-presets.js +1 -18
  34. package/dist/extended-presets.js.map +1 -1
  35. package/dist/extended-themes.d.ts.map +1 -1
  36. package/dist/extended-themes.js +428 -0
  37. package/dist/extended-themes.js.map +1 -1
  38. package/dist/fields/AccessibilityAuditField.d.ts +2 -0
  39. package/dist/fields/AccessibilityAuditField.d.ts.map +1 -0
  40. package/dist/fields/AccessibilityAuditField.js +303 -0
  41. package/dist/fields/AccessibilityAuditField.js.map +1 -0
  42. package/dist/fields/AppearancePreviewField.d.ts +2 -0
  43. package/dist/fields/AppearancePreviewField.d.ts.map +1 -0
  44. package/dist/fields/AppearancePreviewField.js +763 -0
  45. package/dist/fields/AppearancePreviewField.js.map +1 -0
  46. package/dist/fields/ColorPickerField.d.ts.map +1 -1
  47. package/dist/fields/ColorPickerField.js +89 -85
  48. package/dist/fields/ColorPickerField.js.map +1 -1
  49. package/dist/fields/FontSelectField.d.ts +6 -0
  50. package/dist/fields/FontSelectField.d.ts.map +1 -1
  51. package/dist/fields/FontSelectField.js +195 -122
  52. package/dist/fields/FontSelectField.js.map +1 -1
  53. package/dist/fields/PaletteGeneratorField.d.ts +7 -0
  54. package/dist/fields/PaletteGeneratorField.d.ts.map +1 -0
  55. package/dist/fields/PaletteGeneratorField.js +327 -0
  56. package/dist/fields/PaletteGeneratorField.js.map +1 -0
  57. package/dist/fields/StylePresetField.d.ts +3 -0
  58. package/dist/fields/StylePresetField.d.ts.map +1 -0
  59. package/dist/fields/StylePresetField.js +462 -0
  60. package/dist/fields/StylePresetField.js.map +1 -0
  61. package/dist/fields/ThemeColorPickerField.css +115 -35
  62. package/dist/fields/ThemeColorPickerField.d.ts.map +1 -1
  63. package/dist/fields/ThemeColorPickerField.js +204 -70
  64. package/dist/fields/ThemeColorPickerField.js.map +1 -1
  65. package/dist/fields/ThemeExportField.d.ts +6 -0
  66. package/dist/fields/ThemeExportField.d.ts.map +1 -0
  67. package/dist/fields/ThemeExportField.js +202 -0
  68. package/dist/fields/ThemeExportField.js.map +1 -0
  69. package/dist/fields/ThemePresetImportField.d.ts.map +1 -1
  70. package/dist/fields/ThemePresetImportField.js +56 -25
  71. package/dist/fields/ThemePresetImportField.js.map +1 -1
  72. package/dist/fields/ThemePreviewField.css +382 -5
  73. package/dist/fields/ThemePreviewField.d.ts.map +1 -1
  74. package/dist/fields/ThemePreviewField.js +268 -170
  75. package/dist/fields/ThemePreviewField.js.map +1 -1
  76. package/dist/fields/ThemeTokenSelectField.d.ts.map +1 -1
  77. package/dist/fields/ThemeTokenSelectField.js +278 -80
  78. package/dist/fields/ThemeTokenSelectField.js.map +1 -1
  79. package/dist/fields/colorFieldHelpers.d.ts +90 -0
  80. package/dist/fields/colorFieldHelpers.d.ts.map +1 -0
  81. package/dist/fields/colorFieldHelpers.js +133 -0
  82. package/dist/fields/colorFieldHelpers.js.map +1 -0
  83. package/dist/fields/colorModeFields.d.ts +1 -1
  84. package/dist/fields/colorModeFields.d.ts.map +1 -1
  85. package/dist/fields/colorModeFields.js +49 -7
  86. package/dist/fields/colorModeFields.js.map +1 -1
  87. package/dist/fields/themeConfigurationField.d.ts +8 -1
  88. package/dist/fields/themeConfigurationField.d.ts.map +1 -1
  89. package/dist/fields/themeConfigurationField.js +961 -29
  90. package/dist/fields/themeConfigurationField.js.map +1 -1
  91. package/dist/globals/ThemeSettings/FontPicker/FontPreview.d.ts.map +1 -1
  92. package/dist/globals/ThemeSettings/FontPicker/FontPreview.js +8 -4
  93. package/dist/globals/ThemeSettings/FontPicker/FontPreview.js.map +1 -1
  94. package/dist/globals/ThemeSettings/FontPicker/index.d.ts.map +1 -1
  95. package/dist/globals/ThemeSettings/FontPicker/index.js +81 -26
  96. package/dist/globals/ThemeSettings/FontPicker/index.js.map +1 -1
  97. package/dist/globals/ThemeSettings/FontPicker/styles.css +98 -41
  98. package/dist/globals/ThemeSettings/FontPicker/translations.d.ts +6 -0
  99. package/dist/globals/ThemeSettings/FontPicker/translations.d.ts.map +1 -1
  100. package/dist/globals/ThemeSettings/FontPicker/translations.js +14 -2
  101. package/dist/globals/ThemeSettings/FontPicker/translations.js.map +1 -1
  102. package/dist/globals/ThemeSettings/config.d.ts.map +1 -1
  103. package/dist/globals/ThemeSettings/config.js +76 -79
  104. package/dist/globals/ThemeSettings/config.js.map +1 -1
  105. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.d.ts.map +1 -1
  106. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.js +63 -62
  107. package/dist/globals/ThemeSettings/fields/FontLoadingGuideField.js.map +1 -1
  108. package/dist/globals/ThemeSettings/fields/TypographyInfoField.d.ts.map +1 -1
  109. package/dist/globals/ThemeSettings/fields/TypographyInfoField.js +22 -25
  110. package/dist/globals/ThemeSettings/fields/TypographyInfoField.js.map +1 -1
  111. package/dist/hooks/useAppearanceSession.d.ts +50 -0
  112. package/dist/hooks/useAppearanceSession.d.ts.map +1 -0
  113. package/dist/hooks/useAppearanceSession.js +91 -0
  114. package/dist/hooks/useAppearanceSession.js.map +1 -0
  115. package/dist/hooks/useThemeTranslations.d.ts +13 -0
  116. package/dist/hooks/useThemeTranslations.d.ts.map +1 -0
  117. package/dist/hooks/useThemeTranslations.js +22 -0
  118. package/dist/hooks/useThemeTranslations.js.map +1 -0
  119. package/dist/i18n.d.ts +53 -0
  120. package/dist/i18n.d.ts.map +1 -0
  121. package/dist/i18n.js +53 -0
  122. package/dist/i18n.js.map +1 -0
  123. package/dist/index.d.ts +10 -4
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +50 -29
  126. package/dist/index.js.map +1 -1
  127. package/dist/payload-types.d.ts +24 -0
  128. package/dist/payload-types.d.ts.map +1 -1
  129. package/dist/payload-types.js.map +1 -1
  130. package/dist/presets.d.ts +8 -0
  131. package/dist/presets.d.ts.map +1 -1
  132. package/dist/presets.js.map +1 -1
  133. package/dist/providers/Theme/index.d.ts.map +1 -1
  134. package/dist/providers/Theme/index.js +75 -11
  135. package/dist/providers/Theme/index.js.map +1 -1
  136. package/dist/providers/Theme/themeConfig.d.ts.map +1 -1
  137. package/dist/providers/Theme/themeConfig.js +104 -0
  138. package/dist/providers/Theme/themeConfig.js.map +1 -1
  139. package/dist/providers/Theme/types.d.ts +1 -1
  140. package/dist/providers/Theme/types.d.ts.map +1 -1
  141. package/dist/providers/Theme/types.js +10 -1
  142. package/dist/providers/Theme/types.js.map +1 -1
  143. package/dist/style-presets.d.ts +66 -0
  144. package/dist/style-presets.d.ts.map +1 -0
  145. package/dist/style-presets.js +556 -0
  146. package/dist/style-presets.js.map +1 -0
  147. package/dist/translations.d.ts +159 -1
  148. package/dist/translations.d.ts.map +1 -1
  149. package/dist/translations.js +310 -9
  150. package/dist/translations.js.map +1 -1
  151. package/dist/tweakcn-special-themes.d.ts.map +1 -1
  152. package/dist/tweakcn-special-themes.js +585 -9
  153. package/dist/tweakcn-special-themes.js.map +1 -1
  154. package/dist/types/css.d.js +3 -0
  155. package/dist/types/css.d.js.map +1 -0
  156. package/dist/types.d.ts +26 -0
  157. package/dist/types.d.ts.map +1 -1
  158. package/dist/types.js +1 -1
  159. package/dist/types.js.map +1 -1
  160. package/dist/utilities/getThemeSettings.d.ts.map +1 -1
  161. package/dist/utilities/getThemeSettings.js +2 -14
  162. package/dist/utilities/getThemeSettings.js.map +1 -1
  163. package/dist/utils/contrast.d.ts +63 -0
  164. package/dist/utils/contrast.d.ts.map +1 -0
  165. package/dist/utils/contrast.js +158 -0
  166. package/dist/utils/contrast.js.map +1 -0
  167. package/dist/utils/exportTokens.d.ts +30 -0
  168. package/dist/utils/exportTokens.d.ts.map +1 -0
  169. package/dist/utils/exportTokens.js +183 -0
  170. package/dist/utils/exportTokens.js.map +1 -0
  171. package/dist/utils/generatePalette.d.ts +46 -0
  172. package/dist/utils/generatePalette.d.ts.map +1 -0
  173. package/dist/utils/generatePalette.js +127 -0
  174. package/dist/utils/generatePalette.js.map +1 -0
  175. package/dist/utils/generateThemeCSS.d.ts.map +1 -1
  176. package/dist/utils/generateThemeCSS.js +2 -40
  177. package/dist/utils/generateThemeCSS.js.map +1 -1
  178. package/dist/utils/livePreviewThemeRuntime.d.ts +16 -2
  179. package/dist/utils/livePreviewThemeRuntime.d.ts.map +1 -1
  180. package/dist/utils/livePreviewThemeRuntime.js +37 -14
  181. package/dist/utils/livePreviewThemeRuntime.js.map +1 -1
  182. package/dist/utils/localizedText.d.ts +8 -0
  183. package/dist/utils/localizedText.d.ts.map +1 -0
  184. package/dist/utils/localizedText.js +21 -0
  185. package/dist/utils/localizedText.js.map +1 -0
  186. package/dist/utils/resolveThemeConfiguration.d.ts +45 -1
  187. package/dist/utils/resolveThemeConfiguration.d.ts.map +1 -1
  188. package/dist/utils/resolveThemeConfiguration.js +12 -5
  189. package/dist/utils/resolveThemeConfiguration.js.map +1 -1
  190. package/dist/utils/themeColors.d.ts +3 -0
  191. package/dist/utils/themeColors.d.ts.map +1 -1
  192. package/dist/utils/themeColors.js +30 -1
  193. package/dist/utils/themeColors.js.map +1 -1
  194. package/dist/utils/themeHtmlAttributes.d.ts +32 -12
  195. package/dist/utils/themeHtmlAttributes.d.ts.map +1 -1
  196. package/dist/utils/themeHtmlAttributes.js +38 -5
  197. package/dist/utils/themeHtmlAttributes.js.map +1 -1
  198. package/dist/utils/themeUtils.d.ts +3 -5
  199. package/dist/utils/themeUtils.d.ts.map +1 -1
  200. package/dist/utils/themeUtils.js +416 -6
  201. package/dist/utils/themeUtils.js.map +1 -1
  202. package/dist/utils/tweakcnConverter.d.ts +1 -3
  203. package/dist/utils/tweakcnConverter.d.ts.map +1 -1
  204. package/dist/utils/tweakcnConverter.js +1 -3
  205. package/dist/utils/tweakcnConverter.js.map +1 -1
  206. package/package.json +11 -5
  207. package/dist/components/ThemePreview.d.ts +0 -3
  208. package/dist/components/ThemePreview.d.ts.map +0 -1
  209. package/dist/components/ThemePreview.js +0 -321
  210. package/dist/components/ThemePreview.js.map +0 -1
  211. package/dist/plugin.d.ts +0 -2
  212. package/dist/plugin.d.ts.map +0 -1
  213. package/dist/plugin.js +0 -3
  214. package/dist/plugin.js.map +0 -1
@@ -1,4 +1,10 @@
1
1
  export type Language = string;
2
+ /**
3
+ * i18n namespace under which all plugin translations are registered inside
4
+ * Payload's `config.i18n.translations`. Consumers can reference keys via
5
+ * `t('theme-management:...')` and override them by merging into the same namespace.
6
+ */
7
+ export declare const THEME_MANAGEMENT_I18N_NAMESPACE: "theme-management";
2
8
  export interface PluginTranslations {
3
9
  tabLabel: string;
4
10
  standaloneCollectionLabel: string;
@@ -15,6 +21,26 @@ export interface PluginTranslations {
15
21
  usePreset: string;
16
22
  specifyCustom: string;
17
23
  sampleSentence: string;
24
+ showPreview: string;
25
+ hidePreview: string;
26
+ colorsAndTypography: string;
27
+ clearSelection: string;
28
+ selectedColor: string;
29
+ themePresets: string;
30
+ choosePreset: string;
31
+ presetCount: string;
32
+ mutedSample: string;
33
+ accentSample: string;
34
+ headingSample: string;
35
+ bodySample: string;
36
+ bodyFontLabel: string;
37
+ headingFontLabel: string;
38
+ baseSizeLabel: string;
39
+ lineHeightLabel: string;
40
+ selectThemeError: string;
41
+ };
42
+ stylePreset: {
43
+ description: string;
18
44
  };
19
45
  colors: {
20
46
  primary: string;
@@ -40,10 +66,142 @@ export interface PluginTranslations {
40
66
  customPalette: string;
41
67
  footer: string;
42
68
  };
69
+ paletteGenerator: {
70
+ title: string;
71
+ subtitle: string;
72
+ generate: string;
73
+ fromImage: string;
74
+ pick: string;
75
+ hint: string;
76
+ seedLabel: string;
77
+ useColor: string;
78
+ imageError: string;
79
+ };
80
+ accessibility: {
81
+ title: string;
82
+ subtitle: string;
83
+ fix: string;
84
+ allGood: string;
85
+ noData: string;
86
+ pairs: {
87
+ bodyText: string;
88
+ mutedText: string;
89
+ primaryButton: string;
90
+ secondaryButton: string;
91
+ accent: string;
92
+ cardText: string;
93
+ destructive: string;
94
+ };
95
+ };
96
+ themeExport: {
97
+ title: string;
98
+ subtitle: string;
99
+ designTokens: string;
100
+ tailwindV4: string;
101
+ tailwindV3: string;
102
+ copyV4: string;
103
+ copied: string;
104
+ copyFailed: string;
105
+ };
106
+ colorPicker: {
107
+ openPicker: string;
108
+ close: string;
109
+ title: string;
110
+ quickColors: string;
111
+ placeholder: string;
112
+ contrast: string;
113
+ onWhite: string;
114
+ onBlack: string;
115
+ selectColor: string;
116
+ levelAA: string;
117
+ levelAALarge: string;
118
+ levelLow: string;
119
+ pairContrast: string;
120
+ pairContrastTitle: string;
121
+ presetsTitle: string;
122
+ themeColors: string;
123
+ commonColors: string;
124
+ neutralTones: string;
125
+ customColor: string;
126
+ formats: string;
127
+ currentColor: string;
128
+ };
129
+ appearance: {
130
+ locksLabel: string;
131
+ locksHint: string;
132
+ colors: string;
133
+ fonts: string;
134
+ style: string;
135
+ lockedState: string;
136
+ unlockedState: string;
137
+ applied: string;
138
+ undo: string;
139
+ undone: string;
140
+ dismiss: string;
141
+ colorsLocked: string;
142
+ styleLocked: string;
143
+ generatedPalette: string;
144
+ };
145
+ presetImport: {
146
+ none: string;
147
+ summary: string;
148
+ importButton: string;
149
+ clearButton: string;
150
+ drawerTitle: string;
151
+ drawerIntro: string;
152
+ uploadButton: string;
153
+ applyButton: string;
154
+ cleared: string;
155
+ imported: string;
156
+ invalid: string;
157
+ readError: string;
158
+ textareaLabel: string;
159
+ };
160
+ fontGuide: {
161
+ usageTitle: string;
162
+ usageIntro: string;
163
+ optionNextFont: string;
164
+ optionCssLink: string;
165
+ strategyTitle: string;
166
+ preImportedTitle: string;
167
+ preImportedCopy: string;
168
+ dynamicTitle: string;
169
+ dynamicCopy: string;
170
+ exampleTitle: string;
171
+ };
172
+ appearancePreview: {
173
+ title: string;
174
+ subtitle: string;
175
+ light: string;
176
+ dark: string;
177
+ heading: string;
178
+ body: string;
179
+ link: string;
180
+ primary: string;
181
+ secondary: string;
182
+ footer: string;
183
+ viewport: string;
184
+ chips: {
185
+ effect: string;
186
+ shadow: string;
187
+ card: string;
188
+ hover: string;
189
+ button: string;
190
+ navbar: string;
191
+ footer: string;
192
+ link: string;
193
+ image: string;
194
+ radius: string;
195
+ };
196
+ };
43
197
  }
44
198
  declare const translations: Record<Language, PluginTranslations>;
199
+ export type DeepPartial<T> = {
200
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
201
+ };
202
+ export declare function deepMerge<T extends object>(base: T, partial: DeepPartial<T>): T;
45
203
  export declare function getTranslations(lang?: Language): PluginTranslations;
46
- export declare function registerTranslations(newTranslations: Record<Language, Partial<PluginTranslations>>): void;
204
+ export declare function registerTranslations(newTranslations: Record<Language, DeepPartial<PluginTranslations>>): void;
47
205
  export declare function availableLanguages(): string[];
48
206
  export { translations };
49
207
  //# sourceMappingURL=translations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../src/translations.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAE7B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,yBAAyB,EAAE,MAAM,CAAA;IACjC,WAAW,EAAE;QACX,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,EAAE,EAAE;QACF,aAAa,EAAE,MAAM,CAAA;QACrB,eAAe,EAAE,MAAM,CAAA;QACvB,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,EAAE,MAAM,CAAA;QAChB,qBAAqB,EAAE,MAAM,CAAA;QAC7B,SAAS,EAAE,MAAM,CAAA;QACjB,aAAa,EAAE,MAAM,CAAA;QACrB,cAAc,EAAE,MAAM,CAAA;KACvB,CAAA;IACD,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAA;QACjB,GAAG,EAAE;YACH,IAAI,EAAE,MAAM,CAAA;YACZ,KAAK,EAAE,MAAM,CAAA;YACb,QAAQ,EAAE,MAAM,CAAA;YAChB,OAAO,EAAE,MAAM,CAAA;SAChB,CAAA;QACD,YAAY,EAAE,MAAM,CAAA;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,eAAe,EAAE,MAAM,CAAA;QACvB,aAAa,EAAE,MAAM,CAAA;QACrB,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAGD,QAAA,MAAM,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAuFtD,CAAA;AAoBD,wBAAgB,eAAe,CAAC,IAAI,GAAE,QAAe,GAAG,kBAAkB,CAMzE;AAED,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAS/D;AAED,wBAAgB,kBAAkB,aAEjC;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../src/translations.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,16 @@
1
+ /**
2
+ * i18n namespace under which all plugin translations are registered inside
3
+ * Payload's `config.i18n.translations`. Consumers can reference keys via
4
+ * `t('theme-management:...')` and override them by merging into the same namespace.
5
+ */ export const THEME_MANAGEMENT_I18N_NAMESPACE = 'theme-management';
1
6
  // Mutable translations object to allow runtime registration/extension
2
7
  const translations = {
3
8
  en: {
4
- tabLabel: '🎨 Appearance Settings',
9
+ tabLabel: 'Appearance Settings',
5
10
  standaloneCollectionLabel: 'Appearance Settings',
6
11
  livePreview: {
7
- smallTitle: '🎨 Live Preview',
8
- largeTitle: '🎨 Live Theme Preview'
12
+ smallTitle: 'Live Preview',
13
+ largeTitle: 'Live Theme Preview'
9
14
  },
10
15
  ui: {
11
16
  primaryAction: 'Primary Action',
@@ -15,7 +20,27 @@ const translations = {
15
20
  selectFontPlaceholder: 'Select font...',
16
21
  usePreset: 'Use theme preset font',
17
22
  specifyCustom: 'Specify custom font below',
18
- sampleSentence: 'The quick brown fox jumps over the lazy dog'
23
+ sampleSentence: 'The quick brown fox jumps over the lazy dog',
24
+ showPreview: 'Preview',
25
+ hidePreview: 'Hide preview',
26
+ colorsAndTypography: 'Colours & typography',
27
+ clearSelection: 'Unselect style (settings stay as they are)',
28
+ selectedColor: 'Selected color:',
29
+ themePresets: 'Theme presets',
30
+ choosePreset: 'Choose a preset',
31
+ presetCount: 'presets',
32
+ mutedSample: 'Muted surface',
33
+ accentSample: 'Accent tag',
34
+ headingSample: 'Heading preview',
35
+ bodySample: 'Sphinx of black quartz, judge my vow. The quick brown fox jumps over the lazy dog.',
36
+ bodyFontLabel: 'Body',
37
+ headingFontLabel: 'Headings',
38
+ baseSizeLabel: 'Base size',
39
+ lineHeightLabel: 'Line height',
40
+ selectThemeError: 'Select a theme'
41
+ },
42
+ stylePreset: {
43
+ description: 'Pick a visual style — sets effects, shadows and component styles. Colours stay unchanged.'
19
44
  },
20
45
  colors: {
21
46
  primary: 'Primary',
@@ -40,14 +65,142 @@ const translations = {
40
65
  sampleCardTitle: 'Sample Card',
41
66
  customPalette: 'Custom palette',
42
67
  footer: '© 2025 Your Website. Powered by PayloadCMS.'
68
+ },
69
+ paletteGenerator: {
70
+ title: 'Palette generator',
71
+ subtitle: 'Builds a complete light & dark palette from one brand colour (or a logo).',
72
+ generate: 'Generate palette',
73
+ fromImage: 'Extract from image',
74
+ pick: 'Pick a colour from the logo, then click Generate palette:',
75
+ hint: 'Overwrites light & dark mode colours.',
76
+ seedLabel: 'Brand colour',
77
+ useColor: 'Use colour',
78
+ imageError: 'This image could not be read. Try a PNG, JPG or SVG file.'
79
+ },
80
+ accessibility: {
81
+ title: 'Accessibility (WCAG contrast)',
82
+ subtitle: 'Readability check of colour pairs in both modes. AA = 4.5:1.',
83
+ fix: 'Fix',
84
+ allGood: 'All pairs pass AA',
85
+ noData: 'No colours to evaluate.',
86
+ pairs: {
87
+ bodyText: 'Body text',
88
+ mutedText: 'Muted text',
89
+ primaryButton: 'Primary button',
90
+ secondaryButton: 'Secondary button',
91
+ accent: 'Accent',
92
+ cardText: 'Card text',
93
+ destructive: 'Destructive'
94
+ }
95
+ },
96
+ themeExport: {
97
+ title: 'Export theme',
98
+ subtitle: 'Download colours as design tokens or Tailwind config.',
99
+ designTokens: 'Design tokens (JSON)',
100
+ tailwindV4: 'Tailwind v4 (@theme)',
101
+ tailwindV3: 'Tailwind v3 config',
102
+ copyV4: 'Copy v4',
103
+ copied: 'Copied!',
104
+ copyFailed: 'Copy failed. Download the file instead.'
105
+ },
106
+ colorPicker: {
107
+ openPicker: 'Open colour picker',
108
+ close: 'Close colour picker',
109
+ title: 'Colour picker',
110
+ quickColors: 'Quick colours',
111
+ placeholder: 'oklch(…) or #hex',
112
+ contrast: 'WCAG contrast',
113
+ onWhite: 'on white',
114
+ onBlack: 'on black',
115
+ selectColor: 'Use colour',
116
+ levelAA: 'AA',
117
+ levelAALarge: 'AA large text',
118
+ levelLow: 'Low',
119
+ pairContrast: 'Text contrast',
120
+ pairContrastTitle: 'Contrast between {foreground} and {background}',
121
+ presetsTitle: 'Colour presets',
122
+ themeColors: 'Theme colours',
123
+ commonColors: 'Common colours',
124
+ neutralTones: 'Neutral tones',
125
+ customColor: 'Custom colour',
126
+ formats: 'Accepts HEX, RGB, HSL, OKLCH or a CSS variable.',
127
+ currentColor: 'Current colour'
128
+ },
129
+ appearance: {
130
+ locksLabel: 'Keep my',
131
+ locksHint: 'Locked parts stay as they are when you pick a theme, a style or generate a palette.',
132
+ colors: 'Colours',
133
+ fonts: 'Fonts',
134
+ style: 'Style',
135
+ lockedState: 'locked',
136
+ unlockedState: 'unlocked',
137
+ applied: 'Applied: {name}',
138
+ undo: 'Undo',
139
+ undone: 'Change reverted',
140
+ dismiss: 'Dismiss',
141
+ colorsLocked: 'Colours are locked. Unlock them to generate a palette.',
142
+ styleLocked: 'Style and fonts are locked. Unlock one of them to apply a style.',
143
+ generatedPalette: 'generated palette'
144
+ },
145
+ presetImport: {
146
+ none: 'No custom presets imported yet',
147
+ summary: 'Imported presets ({count}): {names}',
148
+ importButton: 'Import presets',
149
+ clearButton: 'Remove imported presets',
150
+ drawerTitle: 'Import theme presets',
151
+ drawerIntro: 'Paste JSON or upload a .json file with preset definitions. Imported presets appear in Theme selection straight away.',
152
+ uploadButton: 'Upload JSON file',
153
+ applyButton: 'Import',
154
+ cleared: 'Imported presets removed',
155
+ imported: 'Imported presets: {count}',
156
+ invalid: 'No valid presets found. Each entry needs at least a "name" and a "label".',
157
+ readError: 'The file could not be read: {message}',
158
+ textareaLabel: 'Preset JSON'
159
+ },
160
+ fontGuide: {
161
+ usageTitle: 'How to use the selected font',
162
+ usageIntro: 'After you pick a font, your website’s frontend has to load it. A developer can use either of these approaches:',
163
+ optionNextFont: 'Option 1: next/font/google (recommended)',
164
+ optionCssLink: 'Option 2: Google Fonts CSS link',
165
+ strategyTitle: 'Font loading strategy',
166
+ preImportedTitle: 'Pre-imported fonts (optimised)',
167
+ preImportedCopy: 'These 8 popular fonts are pre-optimised through next/font/google, so they load with no extra runtime request:',
168
+ dynamicTitle: 'Dynamic fonts (Google Fonts CSS)',
169
+ dynamicCopy: 'Any other font is loaded at runtime through a Google Fonts CSS link. This gives access to 1400+ fonts at the cost of an extra request.',
170
+ exampleTitle: 'Implementation example'
171
+ },
172
+ appearancePreview: {
173
+ title: 'Live preview',
174
+ subtitle: 'Colours, fonts and component styles together, updated as you edit.',
175
+ light: 'Light',
176
+ dark: 'Dark',
177
+ heading: 'Sample heading',
178
+ body: 'The quick brown fox jumps over the lazy dog. Here is an ',
179
+ link: 'inline link',
180
+ primary: 'Primary',
181
+ secondary: 'Secondary',
182
+ footer: 'Footer',
183
+ viewport: 'Device preview',
184
+ chips: {
185
+ effect: 'Effect',
186
+ shadow: 'Shadow',
187
+ card: 'Card',
188
+ hover: 'Hover',
189
+ button: 'Button',
190
+ navbar: 'Navbar',
191
+ footer: 'Footer',
192
+ link: 'Links',
193
+ image: 'Images',
194
+ radius: 'Corners'
195
+ }
43
196
  }
44
197
  },
45
198
  cs: {
46
- tabLabel: '🎨 Nastavení vzhledu',
199
+ tabLabel: 'Nastavení vzhledu',
47
200
  standaloneCollectionLabel: 'Nastavení vzhledu',
48
201
  livePreview: {
49
- smallTitle: '🎨 Náhled',
50
- largeTitle: '🎨 Náhled motivu'
202
+ smallTitle: 'Náhled',
203
+ largeTitle: 'Náhled motivu'
51
204
  },
52
205
  ui: {
53
206
  primaryAction: 'Primární akce',
@@ -57,7 +210,27 @@ const translations = {
57
210
  selectFontPlaceholder: 'Vyberte písmo...',
58
211
  usePreset: 'Použít písmo motivu',
59
212
  specifyCustom: 'Zadejte vlastní písmo níže',
60
- sampleSentence: 'Rychlá hnědá liška přeskočila líného psa'
213
+ sampleSentence: 'Rychlá hnědá liška přeskočila líného psa',
214
+ showPreview: 'Náhled',
215
+ hidePreview: 'Skrýt náhled',
216
+ colorsAndTypography: 'Barvy & typografie',
217
+ clearSelection: 'Zrušit výběr stylu (nastavení zůstane)',
218
+ selectedColor: 'Vybraná barva:',
219
+ themePresets: 'Motivy',
220
+ choosePreset: 'Vyberte motiv',
221
+ presetCount: 'motivů',
222
+ mutedSample: 'Tlumená plocha',
223
+ accentSample: 'Akcentový štítek',
224
+ headingSample: 'Ukázka nadpisu',
225
+ bodySample: 'Příliš žluťoučký kůň úpěl ďábelské ódy. Nechť již hříšné saxofony ďáblů rozezvučí síň.',
226
+ bodyFontLabel: 'Text',
227
+ headingFontLabel: 'Nadpisy',
228
+ baseSizeLabel: 'Základní velikost',
229
+ lineHeightLabel: 'Výška řádku',
230
+ selectThemeError: 'Vyberte motiv'
231
+ },
232
+ stylePreset: {
233
+ description: 'Vyberte vizuální styl. Nastaví efekty, stíny a styly komponent — barvy zůstanou nezměněny.'
61
234
  },
62
235
  colors: {
63
236
  primary: 'Primární',
@@ -82,10 +255,138 @@ const translations = {
82
255
  sampleCardTitle: 'Ukázková karta',
83
256
  customPalette: 'Vlastní paleta',
84
257
  footer: '© 2025 Váš web. Poháněno PayloadCMS.'
258
+ },
259
+ paletteGenerator: {
260
+ title: 'Generátor palety',
261
+ subtitle: 'Z jedné značkové barvy (nebo z loga) vytvoří kompletní světlou i tmavou paletu.',
262
+ generate: 'Vygenerovat paletu',
263
+ fromImage: 'Extrahovat z obrázku',
264
+ pick: 'Vyberte barvu z loga a pak klikněte na Vygenerovat paletu:',
265
+ hint: 'Přepíše barvy ve světlém i tmavém režimu.',
266
+ seedLabel: 'Barva značky',
267
+ useColor: 'Použít barvu',
268
+ imageError: 'Obrázek se nepodařilo načíst. Zkuste soubor PNG, JPG nebo SVG.'
269
+ },
270
+ accessibility: {
271
+ title: 'Přístupnost (WCAG kontrast)',
272
+ subtitle: 'Kontrola čitelnosti barevných párů v obou režimech. AA = 4.5:1.',
273
+ fix: 'Opravit',
274
+ allGood: 'Vše vyhovuje AA',
275
+ noData: 'Žádné barvy k vyhodnocení.',
276
+ pairs: {
277
+ bodyText: 'Tělo textu',
278
+ mutedText: 'Tlumený text',
279
+ primaryButton: 'Primární tlačítko',
280
+ secondaryButton: 'Sekundární tlačítko',
281
+ accent: 'Akcent',
282
+ cardText: 'Text karty',
283
+ destructive: 'Destruktivní'
284
+ }
285
+ },
286
+ themeExport: {
287
+ title: 'Export motivu',
288
+ subtitle: 'Stáhněte barvy jako design tokeny nebo konfiguraci pro Tailwind.',
289
+ designTokens: 'Design tokeny (JSON)',
290
+ tailwindV4: 'Tailwind v4 (@theme)',
291
+ tailwindV3: 'Tailwind v3 konfigurace',
292
+ copyV4: 'Kopírovat v4',
293
+ copied: 'Zkopírováno!',
294
+ copyFailed: 'Kopírování selhalo. Stáhněte si raději soubor.'
295
+ },
296
+ colorPicker: {
297
+ openPicker: 'Otevřít výběr barvy',
298
+ close: 'Zavřít výběr barvy',
299
+ title: 'Výběr barvy',
300
+ quickColors: 'Rychlé barvy',
301
+ placeholder: 'oklch(…) nebo #hex',
302
+ contrast: 'WCAG kontrast',
303
+ onWhite: 'na bílé',
304
+ onBlack: 'na černé',
305
+ selectColor: 'Použít barvu',
306
+ levelAA: 'AA',
307
+ levelAALarge: 'AA velký text',
308
+ levelLow: 'Nízký',
309
+ pairContrast: 'Kontrast textu',
310
+ pairContrastTitle: 'Kontrast mezi {foreground} a {background}',
311
+ presetsTitle: 'Předvolby barev',
312
+ themeColors: 'Barvy motivu',
313
+ commonColors: 'Běžné barvy',
314
+ neutralTones: 'Neutrální odstíny',
315
+ customColor: 'Vlastní barva',
316
+ formats: 'Přijímá HEX, RGB, HSL, OKLCH nebo CSS proměnnou.',
317
+ currentColor: 'Aktuální barva'
318
+ },
319
+ appearance: {
320
+ locksLabel: 'Ponechat moje',
321
+ locksHint: 'Zamčené části zůstanou beze změny, když vyberete motiv, styl nebo vygenerujete paletu.',
322
+ colors: 'Barvy',
323
+ fonts: 'Písma',
324
+ style: 'Styl',
325
+ lockedState: 'zamčeno',
326
+ unlockedState: 'odemčeno',
327
+ applied: 'Použito: {name}',
328
+ undo: 'Zpět',
329
+ undone: 'Změna vrácena',
330
+ dismiss: 'Zavřít',
331
+ colorsLocked: 'Barvy jsou zamčené. Pro vygenerování palety je odemkněte.',
332
+ styleLocked: 'Styl i písma jsou zamčené. Pro použití stylu jedno z nich odemkněte.',
333
+ generatedPalette: 'vygenerovaná paleta'
334
+ },
335
+ presetImport: {
336
+ none: 'Zatím nejsou importované žádné vlastní motivy',
337
+ summary: 'Importované motivy ({count}): {names}',
338
+ importButton: 'Importovat motivy',
339
+ clearButton: 'Odebrat importované motivy',
340
+ drawerTitle: 'Import motivů',
341
+ drawerIntro: 'Vložte JSON nebo nahrajte soubor .json s definicemi motivů. Importované motivy se hned objeví ve výběru motivu.',
342
+ uploadButton: 'Nahrát soubor JSON',
343
+ applyButton: 'Importovat',
344
+ cleared: 'Importované motivy odebrány',
345
+ imported: 'Importované motivy: {count}',
346
+ invalid: 'Nenašel se žádný platný motiv. Každá položka potřebuje alespoň „name“ a „label“.',
347
+ readError: 'Soubor se nepodařilo načíst: {message}',
348
+ textareaLabel: 'JSON s motivy'
349
+ },
350
+ fontGuide: {
351
+ usageTitle: 'Jak použít vybrané písmo',
352
+ usageIntro: 'Po výběru písma ho musí web ve frontendu načíst. Vývojář může použít jeden z těchto postupů:',
353
+ optionNextFont: 'Možnost 1: next/font/google (doporučeno)',
354
+ optionCssLink: 'Možnost 2: odkaz na CSS Google Fonts',
355
+ strategyTitle: 'Strategie načítání písem',
356
+ preImportedTitle: 'Předem importovaná písma (optimalizovaná)',
357
+ preImportedCopy: 'Těchto 8 oblíbených písem je předem optimalizovaných přes next/font/google, takže se načtou bez dalšího požadavku:',
358
+ dynamicTitle: 'Dynamická písma (Google Fonts CSS)',
359
+ dynamicCopy: 'Ostatní písma se načítají za běhu přes odkaz na CSS Google Fonts. Získáte tak přístup k více než 1400 písmům za cenu dalšího požadavku.',
360
+ exampleTitle: 'Ukázka implementace'
361
+ },
362
+ appearancePreview: {
363
+ title: 'Živý náhled',
364
+ subtitle: 'Barvy, písma a styly komponent pohromadě, mění se hned při úpravách.',
365
+ light: 'Světlý',
366
+ dark: 'Tmavý',
367
+ heading: 'Ukázkový nadpis',
368
+ body: 'Příliš žluťoučký kůň úpěl ďábelské ódy. Tady je ',
369
+ link: 'odkaz',
370
+ primary: 'Primární',
371
+ secondary: 'Sekundární',
372
+ footer: 'Patička',
373
+ viewport: 'Náhled zařízení',
374
+ chips: {
375
+ effect: 'Efekt',
376
+ shadow: 'Stín',
377
+ card: 'Karta',
378
+ hover: 'Hover',
379
+ button: 'Tlačítko',
380
+ navbar: 'Navigace',
381
+ footer: 'Patička',
382
+ link: 'Odkazy',
383
+ image: 'Obrázky',
384
+ radius: 'Rohy'
385
+ }
85
386
  }
86
387
  }
87
388
  };
88
- function deepMerge(base, partial) {
389
+ export function deepMerge(base, partial) {
89
390
  const out = {
90
391
  ...base
91
392
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/translations.ts"],"sourcesContent":["export type Language = string\n\nexport interface PluginTranslations {\n tabLabel: string\n standaloneCollectionLabel: string\n livePreview: {\n smallTitle: string\n largeTitle: string\n }\n ui: {\n primaryAction: string\n secondaryAction: string\n lightMode: string\n darkMode: string\n selectFontPlaceholder: string\n usePreset: string\n specifyCustom: string\n sampleSentence: string\n }\n colors: {\n primary: string\n secondary: string\n accent: string\n background: string\n foreground: string\n muted: string\n card: string\n popover: string\n }\n preview: {\n siteTitle: string\n nav: {\n home: string\n about: string\n services: string\n contact: string\n }\n welcomeTitle: string\n welcomeCopy: string\n sampleCardTitle: string\n customPalette: string\n footer: string\n }\n}\n\n// Mutable translations object to allow runtime registration/extension\nconst translations: Record<Language, PluginTranslations> = {\n en: {\n tabLabel: '🎨 Appearance Settings',\n standaloneCollectionLabel: 'Appearance Settings',\n livePreview: {\n smallTitle: '🎨 Live Preview',\n largeTitle: '🎨 Live Theme Preview',\n },\n ui: {\n primaryAction: 'Primary Action',\n secondaryAction: 'Secondary',\n lightMode: 'Light Mode',\n darkMode: 'Dark Mode',\n selectFontPlaceholder: 'Select font...',\n usePreset: 'Use theme preset font',\n specifyCustom: 'Specify custom font below',\n sampleSentence: 'The quick brown fox jumps over the lazy dog',\n },\n colors: {\n primary: 'Primary',\n secondary: 'Secondary',\n accent: 'Accent',\n background: 'Background',\n foreground: 'Foreground',\n muted: 'Muted',\n card: 'Card',\n popover: 'Popover',\n },\n preview: {\n siteTitle: 'Your Website',\n nav: {\n home: 'Home',\n about: 'About',\n services: 'Services',\n contact: 'Contact',\n },\n welcomeTitle: 'Welcome to Your Site',\n welcomeCopy:\n 'This is how your content will look with the selected theme. The colors and styling will be applied across your entire website.',\n sampleCardTitle: 'Sample Card',\n customPalette: 'Custom palette',\n footer: '© 2025 Your Website. Powered by PayloadCMS.',\n },\n },\n cs: {\n tabLabel: '🎨 Nastavení vzhledu',\n standaloneCollectionLabel: 'Nastavení vzhledu',\n livePreview: {\n smallTitle: '🎨 Náhled',\n largeTitle: '🎨 Náhled motivu',\n },\n ui: {\n primaryAction: 'Primární akce',\n secondaryAction: 'Sekundární',\n lightMode: 'Světlý režim',\n darkMode: 'Tmavý režim',\n selectFontPlaceholder: 'Vyberte písmo...',\n usePreset: 'Použít písmo motivu',\n specifyCustom: 'Zadejte vlastní písmo níže',\n sampleSentence: 'Rychlá hnědá liška přeskočila líného psa',\n },\n colors: {\n primary: 'Primární',\n secondary: 'Sekundární',\n accent: 'Akcent',\n background: 'Pozadí',\n foreground: 'Popředí',\n muted: 'Ztlumený',\n card: 'Karta',\n popover: 'Popover',\n },\n preview: {\n siteTitle: 'Váš web',\n nav: {\n home: 'Domů',\n about: 'O nás',\n services: 'Služby',\n contact: 'Kontakt',\n },\n welcomeTitle: 'Vítejte na svém webu',\n welcomeCopy:\n 'Takto bude vypadat váš obsah s vybraným motivem. Barvy a stylování budou aplikovány na celý web.',\n sampleCardTitle: 'Ukázková karta',\n customPalette: 'Vlastní paleta',\n footer: '© 2025 Váš web. Poháněno PayloadCMS.',\n },\n },\n}\n\ntype DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]\n}\n\nfunction deepMerge<T extends object>(base: T, partial: DeepPartial<T>): T {\n const out: Record<string, unknown> = { ...(base as Record<string, unknown>) }\n for (const key of Object.keys(partial)) {\n const val = (partial as Record<string, unknown>)[key]\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n const baseVal = (base as Record<string, unknown>)[key] as Record<string, unknown> | undefined\n out[key] = deepMerge(baseVal ?? {}, val as DeepPartial<Record<string, unknown>>) as unknown\n } else {\n out[key] = val\n }\n }\n return out as T\n}\n\nexport function getTranslations(lang: Language = 'en'): PluginTranslations {\n // Always merge with English defaults so missing keys fall back\n const en = translations['en']\n if (!lang || lang === 'en') return en\n const localized = (translations[lang] as Partial<PluginTranslations>) || {}\n return deepMerge(en, localized as DeepPartial<PluginTranslations>)\n}\n\nexport function registerTranslations(\n newTranslations: Record<Language, Partial<PluginTranslations>>,\n) {\n for (const lang of Object.keys(newTranslations)) {\n const existing = (translations[lang] as PluginTranslations) || ({} as PluginTranslations)\n translations[lang] = deepMerge(\n existing,\n newTranslations[lang] as DeepPartial<PluginTranslations>,\n )\n }\n}\n\nexport function availableLanguages() {\n return Object.keys(translations)\n}\n\nexport { translations }\n"],"names":["translations","en","tabLabel","standaloneCollectionLabel","livePreview","smallTitle","largeTitle","ui","primaryAction","secondaryAction","lightMode","darkMode","selectFontPlaceholder","usePreset","specifyCustom","sampleSentence","colors","primary","secondary","accent","background","foreground","muted","card","popover","preview","siteTitle","nav","home","about","services","contact","welcomeTitle","welcomeCopy","sampleCardTitle","customPalette","footer","cs","deepMerge","base","partial","out","key","Object","keys","val","Array","isArray","baseVal","getTranslations","lang","localized","registerTranslations","newTranslations","existing","availableLanguages"],"mappings":"AA6CA,sEAAsE;AACtE,MAAMA,eAAqD;IACzDC,IAAI;QACFC,UAAU;QACVC,2BAA2B;QAC3BC,aAAa;YACXC,YAAY;YACZC,YAAY;QACd;QACAC,IAAI;YACFC,eAAe;YACfC,iBAAiB;YACjBC,WAAW;YACXC,UAAU;YACVC,uBAAuB;YACvBC,WAAW;YACXC,eAAe;YACfC,gBAAgB;QAClB;QACAC,QAAQ;YACNC,SAAS;YACTC,WAAW;YACXC,QAAQ;YACRC,YAAY;YACZC,YAAY;YACZC,OAAO;YACPC,MAAM;YACNC,SAAS;QACX;QACAC,SAAS;YACPC,WAAW;YACXC,KAAK;gBACHC,MAAM;gBACNC,OAAO;gBACPC,UAAU;gBACVC,SAAS;YACX;YACAC,cAAc;YACdC,aACE;YACFC,iBAAiB;YACjBC,eAAe;YACfC,QAAQ;QACV;IACF;IACAC,IAAI;QACFnC,UAAU;QACVC,2BAA2B;QAC3BC,aAAa;YACXC,YAAY;YACZC,YAAY;QACd;QACAC,IAAI;YACFC,eAAe;YACfC,iBAAiB;YACjBC,WAAW;YACXC,UAAU;YACVC,uBAAuB;YACvBC,WAAW;YACXC,eAAe;YACfC,gBAAgB;QAClB;QACAC,QAAQ;YACNC,SAAS;YACTC,WAAW;YACXC,QAAQ;YACRC,YAAY;YACZC,YAAY;YACZC,OAAO;YACPC,MAAM;YACNC,SAAS;QACX;QACAC,SAAS;YACPC,WAAW;YACXC,KAAK;gBACHC,MAAM;gBACNC,OAAO;gBACPC,UAAU;gBACVC,SAAS;YACX;YACAC,cAAc;YACdC,aACE;YACFC,iBAAiB;YACjBC,eAAe;YACfC,QAAQ;QACV;IACF;AACF;AAMA,SAASE,UAA4BC,IAAO,EAAEC,OAAuB;IACnE,MAAMC,MAA+B;QAAE,GAAIF,IAAI;IAA6B;IAC5E,KAAK,MAAMG,OAAOC,OAAOC,IAAI,CAACJ,SAAU;QACtC,MAAMK,MAAM,AAACL,OAAmC,CAACE,IAAI;QACrD,IAAIG,OAAO,OAAOA,QAAQ,YAAY,CAACC,MAAMC,OAAO,CAACF,MAAM;YACzD,MAAMG,UAAU,AAACT,IAAgC,CAACG,IAAI;YACtDD,GAAG,CAACC,IAAI,GAAGJ,UAAUU,WAAW,CAAC,GAAGH;QACtC,OAAO;YACLJ,GAAG,CAACC,IAAI,GAAGG;QACb;IACF;IACA,OAAOJ;AACT;AAEA,OAAO,SAASQ,gBAAgBC,OAAiB,IAAI;IACnD,+DAA+D;IAC/D,MAAMjD,KAAKD,YAAY,CAAC,KAAK;IAC7B,IAAI,CAACkD,QAAQA,SAAS,MAAM,OAAOjD;IACnC,MAAMkD,YAAY,AAACnD,YAAY,CAACkD,KAAK,IAAoC,CAAC;IAC1E,OAAOZ,UAAUrC,IAAIkD;AACvB;AAEA,OAAO,SAASC,qBACdC,eAA8D;IAE9D,KAAK,MAAMH,QAAQP,OAAOC,IAAI,CAACS,iBAAkB;QAC/C,MAAMC,WAAW,AAACtD,YAAY,CAACkD,KAAK,IAA4B,CAAC;QACjElD,YAAY,CAACkD,KAAK,GAAGZ,UACnBgB,UACAD,eAAe,CAACH,KAAK;IAEzB;AACF;AAEA,OAAO,SAASK;IACd,OAAOZ,OAAOC,IAAI,CAAC5C;AACrB;AAEA,SAASA,YAAY,GAAE"}
1
+ {"version":3,"sources":["../src/translations.ts"],"sourcesContent":["export type Language = string\n\n/**\n * i18n namespace under which all plugin translations are registered inside\n * Payload's `config.i18n.translations`. Consumers can reference keys via\n * `t('theme-management:...')` and override them by merging into the same namespace.\n */\nexport const THEME_MANAGEMENT_I18N_NAMESPACE = 'theme-management' as const\n\nexport interface PluginTranslations {\n tabLabel: string\n standaloneCollectionLabel: string\n livePreview: {\n smallTitle: string\n largeTitle: string\n }\n ui: {\n primaryAction: string\n secondaryAction: string\n lightMode: string\n darkMode: string\n selectFontPlaceholder: string\n usePreset: string\n specifyCustom: string\n sampleSentence: string\n showPreview: string\n hidePreview: string\n colorsAndTypography: string\n clearSelection: string\n selectedColor: string\n themePresets: string\n choosePreset: string\n presetCount: string\n mutedSample: string\n accentSample: string\n headingSample: string\n bodySample: string\n bodyFontLabel: string\n headingFontLabel: string\n baseSizeLabel: string\n lineHeightLabel: string\n selectThemeError: string\n }\n stylePreset: {\n description: string\n }\n colors: {\n primary: string\n secondary: string\n accent: string\n background: string\n foreground: string\n muted: string\n card: string\n popover: string\n }\n preview: {\n siteTitle: string\n nav: {\n home: string\n about: string\n services: string\n contact: string\n }\n welcomeTitle: string\n welcomeCopy: string\n sampleCardTitle: string\n customPalette: string\n footer: string\n }\n paletteGenerator: {\n title: string\n subtitle: string\n generate: string\n fromImage: string\n pick: string\n hint: string\n seedLabel: string\n useColor: string\n imageError: string\n }\n accessibility: {\n title: string\n subtitle: string\n fix: string\n allGood: string\n noData: string\n pairs: {\n bodyText: string\n mutedText: string\n primaryButton: string\n secondaryButton: string\n accent: string\n cardText: string\n destructive: string\n }\n }\n themeExport: {\n title: string\n subtitle: string\n designTokens: string\n tailwindV4: string\n tailwindV3: string\n copyV4: string\n copied: string\n copyFailed: string\n }\n colorPicker: {\n openPicker: string\n close: string\n title: string\n quickColors: string\n placeholder: string\n contrast: string\n onWhite: string\n onBlack: string\n selectColor: string\n levelAA: string\n levelAALarge: string\n levelLow: string\n pairContrast: string\n pairContrastTitle: string\n presetsTitle: string\n themeColors: string\n commonColors: string\n neutralTones: string\n customColor: string\n formats: string\n currentColor: string\n }\n appearance: {\n locksLabel: string\n locksHint: string\n colors: string\n fonts: string\n style: string\n lockedState: string\n unlockedState: string\n applied: string\n undo: string\n undone: string\n dismiss: string\n colorsLocked: string\n styleLocked: string\n generatedPalette: string\n }\n presetImport: {\n none: string\n summary: string\n importButton: string\n clearButton: string\n drawerTitle: string\n drawerIntro: string\n uploadButton: string\n applyButton: string\n cleared: string\n imported: string\n invalid: string\n readError: string\n textareaLabel: string\n }\n fontGuide: {\n usageTitle: string\n usageIntro: string\n optionNextFont: string\n optionCssLink: string\n strategyTitle: string\n preImportedTitle: string\n preImportedCopy: string\n dynamicTitle: string\n dynamicCopy: string\n exampleTitle: string\n }\n appearancePreview: {\n title: string\n subtitle: string\n light: string\n dark: string\n heading: string\n body: string\n link: string\n primary: string\n secondary: string\n footer: string\n viewport: string\n chips: {\n effect: string\n shadow: string\n card: string\n hover: string\n button: string\n navbar: string\n footer: string\n link: string\n image: string\n radius: string\n }\n }\n}\n\n// Mutable translations object to allow runtime registration/extension\nconst translations: Record<Language, PluginTranslations> = {\n en: {\n tabLabel: 'Appearance Settings',\n standaloneCollectionLabel: 'Appearance Settings',\n livePreview: {\n smallTitle: 'Live Preview',\n largeTitle: 'Live Theme Preview',\n },\n ui: {\n primaryAction: 'Primary Action',\n secondaryAction: 'Secondary',\n lightMode: 'Light Mode',\n darkMode: 'Dark Mode',\n selectFontPlaceholder: 'Select font...',\n usePreset: 'Use theme preset font',\n specifyCustom: 'Specify custom font below',\n sampleSentence: 'The quick brown fox jumps over the lazy dog',\n showPreview: 'Preview',\n hidePreview: 'Hide preview',\n colorsAndTypography: 'Colours & typography',\n clearSelection: 'Unselect style (settings stay as they are)',\n selectedColor: 'Selected color:',\n themePresets: 'Theme presets',\n choosePreset: 'Choose a preset',\n presetCount: 'presets',\n mutedSample: 'Muted surface',\n accentSample: 'Accent tag',\n headingSample: 'Heading preview',\n bodySample: 'Sphinx of black quartz, judge my vow. The quick brown fox jumps over the lazy dog.',\n bodyFontLabel: 'Body',\n headingFontLabel: 'Headings',\n baseSizeLabel: 'Base size',\n lineHeightLabel: 'Line height',\n selectThemeError: 'Select a theme',\n },\n stylePreset: {\n description:\n 'Pick a visual style — sets effects, shadows and component styles. Colours stay unchanged.',\n },\n colors: {\n primary: 'Primary',\n secondary: 'Secondary',\n accent: 'Accent',\n background: 'Background',\n foreground: 'Foreground',\n muted: 'Muted',\n card: 'Card',\n popover: 'Popover',\n },\n preview: {\n siteTitle: 'Your Website',\n nav: {\n home: 'Home',\n about: 'About',\n services: 'Services',\n contact: 'Contact',\n },\n welcomeTitle: 'Welcome to Your Site',\n welcomeCopy:\n 'This is how your content will look with the selected theme. The colors and styling will be applied across your entire website.',\n sampleCardTitle: 'Sample Card',\n customPalette: 'Custom palette',\n footer: '© 2025 Your Website. Powered by PayloadCMS.',\n },\n paletteGenerator: {\n title: 'Palette generator',\n subtitle: 'Builds a complete light & dark palette from one brand colour (or a logo).',\n generate: 'Generate palette',\n fromImage: 'Extract from image',\n pick: 'Pick a colour from the logo, then click Generate palette:',\n hint: 'Overwrites light & dark mode colours.',\n seedLabel: 'Brand colour',\n useColor: 'Use colour',\n imageError: 'This image could not be read. Try a PNG, JPG or SVG file.',\n },\n accessibility: {\n title: 'Accessibility (WCAG contrast)',\n subtitle: 'Readability check of colour pairs in both modes. AA = 4.5:1.',\n fix: 'Fix',\n allGood: 'All pairs pass AA',\n noData: 'No colours to evaluate.',\n pairs: {\n bodyText: 'Body text',\n mutedText: 'Muted text',\n primaryButton: 'Primary button',\n secondaryButton: 'Secondary button',\n accent: 'Accent',\n cardText: 'Card text',\n destructive: 'Destructive',\n },\n },\n themeExport: {\n title: 'Export theme',\n subtitle: 'Download colours as design tokens or Tailwind config.',\n designTokens: 'Design tokens (JSON)',\n tailwindV4: 'Tailwind v4 (@theme)',\n tailwindV3: 'Tailwind v3 config',\n copyV4: 'Copy v4',\n copied: 'Copied!',\n copyFailed: 'Copy failed. Download the file instead.',\n },\n colorPicker: {\n openPicker: 'Open colour picker',\n close: 'Close colour picker',\n title: 'Colour picker',\n quickColors: 'Quick colours',\n placeholder: 'oklch(…) or #hex',\n contrast: 'WCAG contrast',\n onWhite: 'on white',\n onBlack: 'on black',\n selectColor: 'Use colour',\n levelAA: 'AA',\n levelAALarge: 'AA large text',\n levelLow: 'Low',\n pairContrast: 'Text contrast',\n pairContrastTitle: 'Contrast between {foreground} and {background}',\n presetsTitle: 'Colour presets',\n themeColors: 'Theme colours',\n commonColors: 'Common colours',\n neutralTones: 'Neutral tones',\n customColor: 'Custom colour',\n formats: 'Accepts HEX, RGB, HSL, OKLCH or a CSS variable.',\n currentColor: 'Current colour',\n },\n appearance: {\n locksLabel: 'Keep my',\n locksHint: 'Locked parts stay as they are when you pick a theme, a style or generate a palette.',\n colors: 'Colours',\n fonts: 'Fonts',\n style: 'Style',\n lockedState: 'locked',\n unlockedState: 'unlocked',\n applied: 'Applied: {name}',\n undo: 'Undo',\n undone: 'Change reverted',\n dismiss: 'Dismiss',\n colorsLocked: 'Colours are locked. Unlock them to generate a palette.',\n styleLocked: 'Style and fonts are locked. Unlock one of them to apply a style.',\n generatedPalette: 'generated palette',\n },\n presetImport: {\n none: 'No custom presets imported yet',\n summary: 'Imported presets ({count}): {names}',\n importButton: 'Import presets',\n clearButton: 'Remove imported presets',\n drawerTitle: 'Import theme presets',\n drawerIntro:\n 'Paste JSON or upload a .json file with preset definitions. Imported presets appear in Theme selection straight away.',\n uploadButton: 'Upload JSON file',\n applyButton: 'Import',\n cleared: 'Imported presets removed',\n imported: 'Imported presets: {count}',\n invalid: 'No valid presets found. Each entry needs at least a \"name\" and a \"label\".',\n readError: 'The file could not be read: {message}',\n textareaLabel: 'Preset JSON',\n },\n fontGuide: {\n usageTitle: 'How to use the selected font',\n usageIntro:\n 'After you pick a font, your website’s frontend has to load it. A developer can use either of these approaches:',\n optionNextFont: 'Option 1: next/font/google (recommended)',\n optionCssLink: 'Option 2: Google Fonts CSS link',\n strategyTitle: 'Font loading strategy',\n preImportedTitle: 'Pre-imported fonts (optimised)',\n preImportedCopy:\n 'These 8 popular fonts are pre-optimised through next/font/google, so they load with no extra runtime request:',\n dynamicTitle: 'Dynamic fonts (Google Fonts CSS)',\n dynamicCopy:\n 'Any other font is loaded at runtime through a Google Fonts CSS link. This gives access to 1400+ fonts at the cost of an extra request.',\n exampleTitle: 'Implementation example',\n },\n appearancePreview: {\n title: 'Live preview',\n subtitle: 'Colours, fonts and component styles together, updated as you edit.',\n light: 'Light',\n dark: 'Dark',\n heading: 'Sample heading',\n body: 'The quick brown fox jumps over the lazy dog. Here is an ',\n link: 'inline link',\n primary: 'Primary',\n secondary: 'Secondary',\n footer: 'Footer',\n viewport: 'Device preview',\n chips: {\n effect: 'Effect',\n shadow: 'Shadow',\n card: 'Card',\n hover: 'Hover',\n button: 'Button',\n navbar: 'Navbar',\n footer: 'Footer',\n link: 'Links',\n image: 'Images',\n radius: 'Corners',\n },\n },\n },\n cs: {\n tabLabel: 'Nastavení vzhledu',\n standaloneCollectionLabel: 'Nastavení vzhledu',\n livePreview: {\n smallTitle: 'Náhled',\n largeTitle: 'Náhled motivu',\n },\n ui: {\n primaryAction: 'Primární akce',\n secondaryAction: 'Sekundární',\n lightMode: 'Světlý režim',\n darkMode: 'Tmavý režim',\n selectFontPlaceholder: 'Vyberte písmo...',\n usePreset: 'Použít písmo motivu',\n specifyCustom: 'Zadejte vlastní písmo níže',\n sampleSentence: 'Rychlá hnědá liška přeskočila líného psa',\n showPreview: 'Náhled',\n hidePreview: 'Skrýt náhled',\n colorsAndTypography: 'Barvy & typografie',\n clearSelection: 'Zrušit výběr stylu (nastavení zůstane)',\n selectedColor: 'Vybraná barva:',\n themePresets: 'Motivy',\n choosePreset: 'Vyberte motiv',\n presetCount: 'motivů',\n mutedSample: 'Tlumená plocha',\n accentSample: 'Akcentový štítek',\n headingSample: 'Ukázka nadpisu',\n bodySample: 'Příliš žluťoučký kůň úpěl ďábelské ódy. Nechť již hříšné saxofony ďáblů rozezvučí síň.',\n bodyFontLabel: 'Text',\n headingFontLabel: 'Nadpisy',\n baseSizeLabel: 'Základní velikost',\n lineHeightLabel: 'Výška řádku',\n selectThemeError: 'Vyberte motiv',\n },\n stylePreset: {\n description:\n 'Vyberte vizuální styl. Nastaví efekty, stíny a styly komponent — barvy zůstanou nezměněny.',\n },\n colors: {\n primary: 'Primární',\n secondary: 'Sekundární',\n accent: 'Akcent',\n background: 'Pozadí',\n foreground: 'Popředí',\n muted: 'Ztlumený',\n card: 'Karta',\n popover: 'Popover',\n },\n preview: {\n siteTitle: 'Váš web',\n nav: {\n home: 'Domů',\n about: 'O nás',\n services: 'Služby',\n contact: 'Kontakt',\n },\n welcomeTitle: 'Vítejte na svém webu',\n welcomeCopy:\n 'Takto bude vypadat váš obsah s vybraným motivem. Barvy a stylování budou aplikovány na celý web.',\n sampleCardTitle: 'Ukázková karta',\n customPalette: 'Vlastní paleta',\n footer: '© 2025 Váš web. Poháněno PayloadCMS.',\n },\n paletteGenerator: {\n title: 'Generátor palety',\n subtitle: 'Z jedné značkové barvy (nebo z loga) vytvoří kompletní světlou i tmavou paletu.',\n generate: 'Vygenerovat paletu',\n fromImage: 'Extrahovat z obrázku',\n pick: 'Vyberte barvu z loga a pak klikněte na Vygenerovat paletu:',\n hint: 'Přepíše barvy ve světlém i tmavém režimu.',\n seedLabel: 'Barva značky',\n useColor: 'Použít barvu',\n imageError: 'Obrázek se nepodařilo načíst. Zkuste soubor PNG, JPG nebo SVG.',\n },\n accessibility: {\n title: 'Přístupnost (WCAG kontrast)',\n subtitle: 'Kontrola čitelnosti barevných párů v obou režimech. AA = 4.5:1.',\n fix: 'Opravit',\n allGood: 'Vše vyhovuje AA',\n noData: 'Žádné barvy k vyhodnocení.',\n pairs: {\n bodyText: 'Tělo textu',\n mutedText: 'Tlumený text',\n primaryButton: 'Primární tlačítko',\n secondaryButton: 'Sekundární tlačítko',\n accent: 'Akcent',\n cardText: 'Text karty',\n destructive: 'Destruktivní',\n },\n },\n themeExport: {\n title: 'Export motivu',\n subtitle: 'Stáhněte barvy jako design tokeny nebo konfiguraci pro Tailwind.',\n designTokens: 'Design tokeny (JSON)',\n tailwindV4: 'Tailwind v4 (@theme)',\n tailwindV3: 'Tailwind v3 konfigurace',\n copyV4: 'Kopírovat v4',\n copied: 'Zkopírováno!',\n copyFailed: 'Kopírování selhalo. Stáhněte si raději soubor.',\n },\n colorPicker: {\n openPicker: 'Otevřít výběr barvy',\n close: 'Zavřít výběr barvy',\n title: 'Výběr barvy',\n quickColors: 'Rychlé barvy',\n placeholder: 'oklch(…) nebo #hex',\n contrast: 'WCAG kontrast',\n onWhite: 'na bílé',\n onBlack: 'na černé',\n selectColor: 'Použít barvu',\n levelAA: 'AA',\n levelAALarge: 'AA velký text',\n levelLow: 'Nízký',\n pairContrast: 'Kontrast textu',\n pairContrastTitle: 'Kontrast mezi {foreground} a {background}',\n presetsTitle: 'Předvolby barev',\n themeColors: 'Barvy motivu',\n commonColors: 'Běžné barvy',\n neutralTones: 'Neutrální odstíny',\n customColor: 'Vlastní barva',\n formats: 'Přijímá HEX, RGB, HSL, OKLCH nebo CSS proměnnou.',\n currentColor: 'Aktuální barva',\n },\n appearance: {\n locksLabel: 'Ponechat moje',\n locksHint: 'Zamčené části zůstanou beze změny, když vyberete motiv, styl nebo vygenerujete paletu.',\n colors: 'Barvy',\n fonts: 'Písma',\n style: 'Styl',\n lockedState: 'zamčeno',\n unlockedState: 'odemčeno',\n applied: 'Použito: {name}',\n undo: 'Zpět',\n undone: 'Změna vrácena',\n dismiss: 'Zavřít',\n colorsLocked: 'Barvy jsou zamčené. Pro vygenerování palety je odemkněte.',\n styleLocked: 'Styl i písma jsou zamčené. Pro použití stylu jedno z nich odemkněte.',\n generatedPalette: 'vygenerovaná paleta',\n },\n presetImport: {\n none: 'Zatím nejsou importované žádné vlastní motivy',\n summary: 'Importované motivy ({count}): {names}',\n importButton: 'Importovat motivy',\n clearButton: 'Odebrat importované motivy',\n drawerTitle: 'Import motivů',\n drawerIntro:\n 'Vložte JSON nebo nahrajte soubor .json s definicemi motivů. Importované motivy se hned objeví ve výběru motivu.',\n uploadButton: 'Nahrát soubor JSON',\n applyButton: 'Importovat',\n cleared: 'Importované motivy odebrány',\n imported: 'Importované motivy: {count}',\n invalid: 'Nenašel se žádný platný motiv. Každá položka potřebuje alespoň „name“ a „label“.',\n readError: 'Soubor se nepodařilo načíst: {message}',\n textareaLabel: 'JSON s motivy',\n },\n fontGuide: {\n usageTitle: 'Jak použít vybrané písmo',\n usageIntro:\n 'Po výběru písma ho musí web ve frontendu načíst. Vývojář může použít jeden z těchto postupů:',\n optionNextFont: 'Možnost 1: next/font/google (doporučeno)',\n optionCssLink: 'Možnost 2: odkaz na CSS Google Fonts',\n strategyTitle: 'Strategie načítání písem',\n preImportedTitle: 'Předem importovaná písma (optimalizovaná)',\n preImportedCopy:\n 'Těchto 8 oblíbených písem je předem optimalizovaných přes next/font/google, takže se načtou bez dalšího požadavku:',\n dynamicTitle: 'Dynamická písma (Google Fonts CSS)',\n dynamicCopy:\n 'Ostatní písma se načítají za běhu přes odkaz na CSS Google Fonts. Získáte tak přístup k více než 1400 písmům za cenu dalšího požadavku.',\n exampleTitle: 'Ukázka implementace',\n },\n appearancePreview: {\n title: 'Živý náhled',\n subtitle: 'Barvy, písma a styly komponent pohromadě, mění se hned při úpravách.',\n light: 'Světlý',\n dark: 'Tmavý',\n heading: 'Ukázkový nadpis',\n body: 'Příliš žluťoučký kůň úpěl ďábelské ódy. Tady je ',\n link: 'odkaz',\n primary: 'Primární',\n secondary: 'Sekundární',\n footer: 'Patička',\n viewport: 'Náhled zařízení',\n chips: {\n effect: 'Efekt',\n shadow: 'Stín',\n card: 'Karta',\n hover: 'Hover',\n button: 'Tlačítko',\n navbar: 'Navigace',\n footer: 'Patička',\n link: 'Odkazy',\n image: 'Obrázky',\n radius: 'Rohy',\n },\n },\n },\n}\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]\n}\n\nexport function deepMerge<T extends object>(base: T, partial: DeepPartial<T>): T {\n const out: Record<string, unknown> = { ...(base as Record<string, unknown>) }\n for (const key of Object.keys(partial)) {\n const val = (partial as Record<string, unknown>)[key]\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n const baseVal = (base as Record<string, unknown>)[key] as Record<string, unknown> | undefined\n out[key] = deepMerge(baseVal ?? {}, val as DeepPartial<Record<string, unknown>>) as unknown\n } else {\n out[key] = val\n }\n }\n return out as T\n}\n\nexport function getTranslations(lang: Language = 'en'): PluginTranslations {\n // Always merge with English defaults so missing keys fall back\n const en = translations['en']\n if (!lang || lang === 'en') return en\n const localized = (translations[lang] as Partial<PluginTranslations>) || {}\n return deepMerge(en, localized as DeepPartial<PluginTranslations>)\n}\n\nexport function registerTranslations(\n newTranslations: Record<Language, DeepPartial<PluginTranslations>>,\n) {\n for (const lang of Object.keys(newTranslations)) {\n const existing = (translations[lang] as PluginTranslations) || ({} as PluginTranslations)\n translations[lang] = deepMerge(existing, newTranslations[lang])\n }\n}\n\nexport function availableLanguages() {\n return Object.keys(translations)\n}\n\nexport { translations }\n"],"names":["THEME_MANAGEMENT_I18N_NAMESPACE","translations","en","tabLabel","standaloneCollectionLabel","livePreview","smallTitle","largeTitle","ui","primaryAction","secondaryAction","lightMode","darkMode","selectFontPlaceholder","usePreset","specifyCustom","sampleSentence","showPreview","hidePreview","colorsAndTypography","clearSelection","selectedColor","themePresets","choosePreset","presetCount","mutedSample","accentSample","headingSample","bodySample","bodyFontLabel","headingFontLabel","baseSizeLabel","lineHeightLabel","selectThemeError","stylePreset","description","colors","primary","secondary","accent","background","foreground","muted","card","popover","preview","siteTitle","nav","home","about","services","contact","welcomeTitle","welcomeCopy","sampleCardTitle","customPalette","footer","paletteGenerator","title","subtitle","generate","fromImage","pick","hint","seedLabel","useColor","imageError","accessibility","fix","allGood","noData","pairs","bodyText","mutedText","primaryButton","secondaryButton","cardText","destructive","themeExport","designTokens","tailwindV4","tailwindV3","copyV4","copied","copyFailed","colorPicker","openPicker","close","quickColors","placeholder","contrast","onWhite","onBlack","selectColor","levelAA","levelAALarge","levelLow","pairContrast","pairContrastTitle","presetsTitle","themeColors","commonColors","neutralTones","customColor","formats","currentColor","appearance","locksLabel","locksHint","fonts","style","lockedState","unlockedState","applied","undo","undone","dismiss","colorsLocked","styleLocked","generatedPalette","presetImport","none","summary","importButton","clearButton","drawerTitle","drawerIntro","uploadButton","applyButton","cleared","imported","invalid","readError","textareaLabel","fontGuide","usageTitle","usageIntro","optionNextFont","optionCssLink","strategyTitle","preImportedTitle","preImportedCopy","dynamicTitle","dynamicCopy","exampleTitle","appearancePreview","light","dark","heading","body","link","viewport","chips","effect","shadow","hover","button","navbar","image","radius","cs","deepMerge","base","partial","out","key","Object","keys","val","Array","isArray","baseVal","getTranslations","lang","localized","registerTranslations","newTranslations","existing","availableLanguages"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tweakcn-special-themes.d.ts","sourceRoot":"","sources":["../src/tweakcn-special-themes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAumBnE,CAAA"}
1
+ {"version":3,"file":"tweakcn-special-themes.d.ts","sourceRoot":"","sources":["../src/tweakcn-special-themes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CA+qCnE,CAAA"}