visualifyjs 2.5.3-2.dev → 3.0.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 (252) hide show
  1. package/.claude/mem/TIMELINE.md +36 -0
  2. package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-external-script-solution.md +24 -0
  3. package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-session-summary.md +43 -0
  4. package/.claude/mem/notes/2026-02-11-cli-fix-editor-command-alias.md +26 -0
  5. package/.claude/mem/notes/2026-02-11-phase-3-developer-experience-completed.md +51 -0
  6. package/.claude/mem/notes/2026-02-11-phase-4-web-workers-implementation-complete.md +59 -0
  7. package/.claude/mem/notes/2026-02-11-visualify-phase-2-3d-visualization-complete.md +50 -0
  8. package/.claude/mem/notes/2026-02-11-visualify-phase-2-committed-ready-for-phase-3.md +33 -0
  9. package/.claude/mem/notes/2026-02-11-visualify-phase-3-complete-developer-experience.md +52 -0
  10. package/.claude/mem/notes/2026-02-11-visualify-repository-cleanup-complete.md +28 -0
  11. package/.claude/mem/notes/2026-02-18-codebase-cleanup-docsify-plugin-documentation.md +37 -0
  12. package/.claude/mem/notes/2026-02-19-css-grid-layout-fix-displaycontents-on-vcontroller.md +18 -0
  13. package/.claude/mem/notes/2026-02-19-docsify-plugin-fixes-latex-and-visualify-code-bloc.md +26 -0
  14. package/.claude/mem/notes/2026-02-19-page-mode-docs-update-decisions.md +23 -0
  15. package/.claude/mem/notes/2026-02-19-react-context-infinite-re-render-loop-fix-pattern.md +31 -0
  16. package/.claude/mem/notes/2026-02-19-version-300-bump-and-build-fixes.md +32 -0
  17. package/.claude/mem/notes/2026-02-19-visualify-build-deployment-architecture-bug-fixes.md +25 -0
  18. package/.claude/mem/notes/2026-02-19-visualify-dist-iife-self-contained-build-config.md +30 -0
  19. package/.claude/mem/notes/2026-02-19-visualify-infinite-loop-i18n-fixes.md +31 -0
  20. package/.claude/mem/notes/2026-02-19-visualify-v3-bundle-splitting-docs-restructuring.md +32 -0
  21. package/.claude/mem/notes/2026-02-20-bundle-externalization-final-architecture.md +29 -0
  22. package/.claude/mem/notes/2026-02-20-chromium-page-fix-unstable-keys-and-double-event-b.md +27 -0
  23. package/.claude/mem/notes/2026-02-20-console-cleanup-bundle-optimization-commit.md +20 -0
  24. package/.claude/mem/notes/2026-02-20-dotbio-dot-plot-fix-useeffect-dependency.md +21 -0
  25. package/.claude/mem/notes/2026-02-20-public-folder-cleanup-and-readme-rewrite.md +25 -0
  26. package/.claude/mem/notes/2026-02-20-v300-release-and-beta-channel-strategy.md +29 -0
  27. package/.claude/mem/notes/2026-02-20-visium-background-image-unknown-legend-fix.md +19 -0
  28. package/.claude/mem/notes/2026-02-20-visualify-cdn-loader-bundle-externalization.md +34 -0
  29. package/.claude/mem/sessions/session-2026-02-20-031524.md +54 -0
  30. package/.claude/settings.local.json +21 -0
  31. package/.github/workflows/static.yml.bak +51 -51
  32. package/.sisyphus/boulder.json +65 -0
  33. package/.sisyphus/plans/phase-4-advanced-optimizations.md +217 -0
  34. package/LICENSE +674 -674
  35. package/README.md +94 -59
  36. package/config-overrides.js +31 -31
  37. package/dist/stats.html +4949 -0
  38. package/dist/visualify-3d.esm.js +1 -0
  39. package/dist/visualify-3d.js +1 -0
  40. package/dist/visualify-core.esm.js +1 -0
  41. package/dist/visualify-core.js +1 -0
  42. package/dist/visualify-docs.esm.js +1 -0
  43. package/dist/visualify-docs.js +1 -0
  44. package/dist/visualify-loader.js +1 -0
  45. package/dist/visualify-pages.esm.js +1 -0
  46. package/dist/visualify-pages.js +1 -0
  47. package/dist/visualify-portal.esm.js +1 -0
  48. package/dist/visualify-portal.js +1 -0
  49. package/dist/visualify-shared.js +26571 -0
  50. package/dist/visualify.js +1 -188
  51. package/docs/CHANGELOG.md +148 -0
  52. package/docs/cli/commands.md +513 -0
  53. package/docs/configuration/visualify-json.md +474 -0
  54. package/docs/docs/3d-visualization.md +374 -0
  55. package/docs/docs/CLI.md +303 -34
  56. package/docs/docs/README.md +65 -65
  57. package/docs/docs/Rechart/bar.md +190 -190
  58. package/docs/docs/Rechart/funnel.md +241 -241
  59. package/docs/docs/Rechart/line.md +355 -355
  60. package/docs/docs/Rechart/pie.md +225 -225
  61. package/docs/docs/Rechart/radar.md +253 -253
  62. package/docs/docs/Rechart/scatter.md +298 -298
  63. package/docs/docs/_404.md +51 -51
  64. package/docs/docs/_coverpage.md +11 -11
  65. package/docs/docs/_sidebar.md +54 -44
  66. package/docs/docs/components/dotBio.md +87 -34
  67. package/docs/docs/components/echart.md +171 -82
  68. package/docs/docs/components/html.md +61 -34
  69. package/docs/docs/components/macaron.md +156 -145
  70. package/docs/docs/components/markdown.md +42 -0
  71. package/docs/docs/components/more.md +183 -142
  72. package/docs/docs/components/plotly.md +132 -62
  73. package/docs/docs/components/scatterL.md +171 -70
  74. package/docs/docs/components/visium.md +112 -57
  75. package/docs/docs/configuration.md +121 -121
  76. package/docs/docs/deploy.md +31 -31
  77. package/docs/docs/docsify-plugin.md +655 -0
  78. package/docs/docs/hmr.md +165 -0
  79. package/docs/docs/i18n.md +332 -0
  80. package/docs/docs/log.md +30 -9
  81. package/docs/docs/more-pages.md +23 -23
  82. package/docs/docs/quickstart.md +148 -124
  83. package/docs/docs/rechart-attributes.md +74 -74
  84. package/docs/docs/rechart-basic-usage.md +160 -162
  85. package/docs/docs/theme.md +5 -5
  86. package/docs/docs/typescript.md +306 -0
  87. package/docs/docs/visual-editor.md +359 -0
  88. package/docs/index.html +85 -71
  89. package/docs/manifest.json +23 -23
  90. package/docs/migration/v3-migration.md +392 -0
  91. package/docs/static/css/fluff-stuff.css +169 -169
  92. package/docs/static/css/font-awesome.min.css +4 -4
  93. package/docs/static/css/visualify.css +6 -25
  94. package/docs/static/js/3d-viz-examples.js +181 -0
  95. package/docs/static/js/configuration.js +630 -448
  96. package/docs/static/js/visualify.js +1 -188
  97. package/package.json +106 -84
  98. package/rollup.config.mjs +766 -76
  99. package/src/_css/404.css +115 -115
  100. package/src/_css/App.css +37 -37
  101. package/src/_css/autoSuggestion.css +26 -26
  102. package/src/_css/circular-progress.css +32 -32
  103. package/src/_css/index.css +36 -36
  104. package/src/_css/modern.css +350 -25
  105. package/src/_media/corner.svg +8 -8
  106. package/src/_media/download.svg +3 -3
  107. package/src/_media/logo.svg +14 -14
  108. package/src/_test/App.test.js +15 -15
  109. package/src/_utils/reportWebVitals.js +13 -13
  110. package/src/a11y/README.md +177 -0
  111. package/src/a11y/aria-labels.js +339 -0
  112. package/src/a11y/color-contrast.js +535 -0
  113. package/src/a11y/index.js +197 -0
  114. package/src/a11y/keyboard-nav.js +523 -0
  115. package/src/a11y/styles.css +165 -0
  116. package/src/cli/commands/dev.js +214 -0
  117. package/src/cli/commands/docs.js +521 -0
  118. package/src/cli/commands/edit.js +379 -0
  119. package/src/cli/commands/init.js +213 -0
  120. package/src/cli/commands/portal.js +236 -0
  121. package/src/cli/dev-server.js +530 -0
  122. package/src/cli/hmr.js +456 -0
  123. package/src/cli/index.js +180 -0
  124. package/src/cli/utils/config.js +207 -0
  125. package/src/cli/utils/logger.js +241 -0
  126. package/src/config/defaults.ts +122 -0
  127. package/src/config/index.ts +72 -0
  128. package/src/config/loader.ts +478 -0
  129. package/src/config/schema.ts +227 -0
  130. package/src/config/validator.ts +337 -0
  131. package/src/core/appContext.js +34 -27
  132. package/src/core/components/Bar.js +383 -0
  133. package/src/core/components/Bar3D.js +473 -0
  134. package/src/core/components/LargeDatasetChart.js +296 -0
  135. package/src/core/components/Line3D.js +310 -0
  136. package/src/core/components/Scatter.js +392 -188
  137. package/src/core/components/Scatter3D.js +455 -0
  138. package/src/core/components/ScatterBio.js +601 -572
  139. package/src/core/components/Surface3D.js +326 -0
  140. package/src/core/components/ThreeCustom.js +648 -0
  141. package/src/core/components/ThreeScene.js +459 -0
  142. package/src/core/components/VisiumPlot.js +191 -165
  143. package/src/core/components/browser.js +42 -42
  144. package/src/core/components/dotplot.js +413 -413
  145. package/src/core/components/html.js +29 -29
  146. package/src/core/components/list.js +178 -178
  147. package/src/core/components/macaron.js +206 -201
  148. package/src/core/components/markdown.js +56 -56
  149. package/src/core/components/parser.scatterBio.js +582 -587
  150. package/src/core/components/ratio.js +82 -80
  151. package/src/core/components/scatterL.js +206 -173
  152. package/src/core/components/searchbar.js +156 -131
  153. package/src/core/components/selection.js +310 -193
  154. package/src/core/components/timeline.js +236 -281
  155. package/src/core/components/visium.js +114 -97
  156. package/src/core/data-processor.js +413 -0
  157. package/src/core/fetch/condfetch.js +82 -82
  158. package/src/core/fetch/fetch.js +92 -92
  159. package/src/core/fetch/json.js +29 -29
  160. package/src/core/fetch/vfetch.js +42 -42
  161. package/src/core/hmr-client.js +724 -0
  162. package/src/core/liveEditor.js +44 -44
  163. package/src/core/modules/codeEditorWithPreview.js +104 -104
  164. package/src/core/modules/echarts/common.js +20 -20
  165. package/src/core/modules/echarts/gl.js +228 -0
  166. package/src/core/modules/echarts/presetHandler.js +41 -41
  167. package/src/core/modules/echarts/presets/esodev.chromium.js +172 -172
  168. package/src/core/modules/echarts/presets/esodev.codex.js +130 -130
  169. package/src/core/modules/echarts/presets/esodev.visium.js +123 -123
  170. package/src/core/modules/echarts/presets/mmtrbc.js +186 -186
  171. package/src/core/modules/echarts.js +70 -71
  172. package/src/core/modules/echartsUtils.js +43 -43
  173. package/src/core/modules/echartswitcher.js +227 -152
  174. package/src/core/modules/replotly/presetHandler.js +24 -24
  175. package/src/core/modules/replotly/presets/minimum.js +18 -18
  176. package/src/core/modules/replotly/presets/mmtrbc.dot.js +114 -114
  177. package/src/core/modules/replotly/presets/mmtrbc.violin.js +100 -100
  178. package/src/core/modules/replotly.js +74 -71
  179. package/src/core/modules/threejs/Camera.js +373 -0
  180. package/src/core/modules/threejs/Lighting.js +459 -0
  181. package/src/core/modules/threejs/Renderer.js +364 -0
  182. package/src/core/modules/threejs/Scene.js +266 -0
  183. package/src/core/modules/threejs/index.js +155 -0
  184. package/src/core/pages/404.js +50 -50
  185. package/src/core/pages/error.js +27 -27
  186. package/src/core/pages/jsonPage.js +62 -62
  187. package/src/core/pages/loading.js +44 -44
  188. package/src/core/parser/echart.data.js +204 -183
  189. package/src/core/parser/echart.features.js +125 -125
  190. package/src/core/parser/echart.general.js +147 -147
  191. package/src/core/parser/echart.hilbert.js +57 -57
  192. package/src/core/parser/echart.parser.js +210 -210
  193. package/src/core/parser/echart.series.js +67 -67
  194. package/src/core/parser/echart.types.js +76 -76
  195. package/src/core/parser/plotly.config.js +10 -10
  196. package/src/core/parser/plotly.data.js +132 -132
  197. package/src/core/parser/plotly.layout.js +9 -9
  198. package/src/core/parser/plotly.violin.js +18 -18
  199. package/src/core/recharts.js +361 -62
  200. package/src/core/router/alias.js +49 -49
  201. package/src/core/router/jsonRouter.js +31 -31
  202. package/src/core/themes/modern.js +32 -32
  203. package/src/core/themes/themeSelector.js +33 -33
  204. package/src/core/visualify.js +213 -47
  205. package/src/core/widgets/circularProgress.js +23 -23
  206. package/src/core/widgets/controller.js +116 -83
  207. package/src/core/widgets/errorBoundary.js +36 -36
  208. package/src/core/widgets/footer.js +185 -177
  209. package/src/core/widgets/header.js +238 -234
  210. package/src/core/widgets/layout/Grid.js +31 -31
  211. package/src/core/widgets/layout.js +36 -36
  212. package/src/core/widgets/mapping.js +56 -42
  213. package/src/core/workers/data-worker.js +349 -0
  214. package/src/core/workers/worker-pool.js +396 -0
  215. package/src/docsify/bundle.js +215 -0
  216. package/src/docsify/markdown.js +271 -0
  217. package/src/docsify/plugin.js +268 -0
  218. package/src/editor/README.md +172 -0
  219. package/src/editor/components/ChartBuilder.jsx +341 -0
  220. package/src/editor/components/ChartTypeSidebar.jsx +91 -0
  221. package/src/editor/components/Editor.jsx +367 -0
  222. package/src/editor/components/Preview.jsx +446 -0
  223. package/src/editor/components/PropertyPanel.jsx +468 -0
  224. package/src/editor/components/StatusBar.jsx +85 -0
  225. package/src/editor/context/EditorContext.js +248 -0
  226. package/src/editor/hooks/useDebounce.js +32 -0
  227. package/src/editor/index.js +315 -0
  228. package/src/editor/styles/editor.css +637 -0
  229. package/src/editor/utils/chartValidator.js +263 -0
  230. package/src/entries/charts3d.js +70 -0
  231. package/src/entries/core.js +78 -0
  232. package/src/entries/docs.js +154 -0
  233. package/src/entries/pages.js +93 -0
  234. package/src/entries/portal.js +204 -0
  235. package/src/entries/shared.js +50 -0
  236. package/src/i18n/formatters.js +455 -0
  237. package/src/i18n/index.js +169 -0
  238. package/src/i18n/locales/ar.json +137 -0
  239. package/src/i18n/locales/de.json +137 -0
  240. package/src/i18n/locales/en.json +137 -0
  241. package/src/i18n/locales/es.json +137 -0
  242. package/src/i18n/locales/he.json +137 -0
  243. package/src/i18n/locales/zh.json +137 -0
  244. package/src/i18n/rtl.css +183 -0
  245. package/src/index.js +82 -62
  246. package/src/loader.js +103 -0
  247. package/src/setupTests.js +5 -5
  248. package/tsconfig.json +51 -0
  249. package/types/charts.d.ts +569 -0
  250. package/types/components.d.ts +441 -0
  251. package/types/config.d.ts +199 -0
  252. package/types/index.d.ts +353 -0
@@ -0,0 +1,474 @@
1
+ # visualify.json Configuration Reference
2
+
3
+ The `visualify.json` file is the central configuration file for Visualify.js v3.0.0+. It replaces the inline `window.$visualify` JavaScript configuration used in v2.x.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Overview](#overview)
8
+ - [Schema](#schema)
9
+ - [Root Properties](#root-properties)
10
+ - [Portal Configuration](#portal-configuration)
11
+ - [Docs Configuration](#docs-configuration)
12
+ - [Examples](#examples)
13
+ - [Validation](#validation)
14
+
15
+ ---
16
+
17
+ ## Overview
18
+
19
+ ### File Location
20
+
21
+ Place `visualify.json` in your project root directory (same level as `package.json` or `index.html`).
22
+
23
+ ```
24
+ my-project/
25
+ ├── visualify.json # Configuration file
26
+ ├── package.json
27
+ ├── index.html
28
+ └── ...
29
+ ```
30
+
31
+ ### Minimum Configuration
32
+
33
+ ```json
34
+ {
35
+ "version": "3.0.0",
36
+ "mode": "portal"
37
+ }
38
+ ```
39
+
40
+ ---
41
+
42
+ ## Schema
43
+
44
+ ### Complete Schema
45
+
46
+ ```json
47
+ {
48
+ "$schema": "https://visualify.pharmacy.arizona.edu/schema/visualify.json",
49
+ "version": "3.0.0",
50
+ "mode": "portal",
51
+ "el": "#root",
52
+ "portal": {
53
+ "homepage": "home.json",
54
+ "theme": "modern",
55
+ "repo": "",
56
+ "alias": {}
57
+ },
58
+ "docs": {
59
+ "homepage": "home.json",
60
+ "theme": "modern",
61
+ "repo": "",
62
+ "alias": {}
63
+ }
64
+ }
65
+ ```
66
+
67
+ ---
68
+
69
+ ## Root Properties
70
+
71
+ ### version
72
+
73
+ - **Type**: `string`
74
+ - **Required**: Yes
75
+ - **Default**: `"3.0.0"`
76
+ - **Description**: Configuration file version for compatibility checking.
77
+
78
+ ```json
79
+ {
80
+ "version": "3.0.0"
81
+ }
82
+ ```
83
+
84
+ ### mode
85
+
86
+ - **Type**: `string`
87
+ - **Required**: Yes
88
+ - **Default**: `"portal"`
89
+ - **Options**: `"portal"`, `"docs"`
90
+ - **Description**: Determines the operating mode of Visualify.js.
91
+
92
+ | Mode | Description | Use Case |
93
+ |------|-------------|----------|
94
+ | `portal` | Full-featured data portal with navigation | Multi-page data visualization sites |
95
+ | `docs` | Documentation-focused with chart support | Technical docs with embedded charts |
96
+
97
+ ```json
98
+ {
99
+ "mode": "portal"
100
+ }
101
+ ```
102
+
103
+ ### el
104
+
105
+ - **Type**: `string`
106
+ - **Required**: No
107
+ - **Default**: `"#root"`
108
+ - **Description**: CSS selector for the DOM element where Visualify will mount.
109
+
110
+ ```json
111
+ {
112
+ "el": "#app"
113
+ }
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Portal Configuration
119
+
120
+ The `portal` object contains settings specific to portal mode.
121
+
122
+ ### portal.homepage
123
+
124
+ - **Type**: `string`
125
+ - **Required**: No
126
+ - **Default**: `"home.json"`
127
+ - **Description**: Path to the homepage JSON file.
128
+
129
+ ```json
130
+ {
131
+ "portal": {
132
+ "homepage": "home.json"
133
+ }
134
+ }
135
+ ```
136
+
137
+ Can also be a remote URL:
138
+ ```json
139
+ {
140
+ "portal": {
141
+ "homepage": "https://raw.githubusercontent.com/username/repo/main/home.json"
142
+ }
143
+ }
144
+ ```
145
+
146
+ ### portal.theme
147
+
148
+ - **Type**: `string`
149
+ - **Required**: No
150
+ - **Default**: `"modern"`
151
+ - **Options**: `"modern"`, `"classic"`
152
+ - **Description**: Visual theme for the portal.
153
+
154
+ ```json
155
+ {
156
+ "portal": {
157
+ "theme": "modern"
158
+ }
159
+ }
160
+ ```
161
+
162
+ ### portal.repo
163
+
164
+ - **Type**: `string`
165
+ - **Required**: No
166
+ - **Default**: `""`
167
+ - **Description**: GitHub repository URL for the corner widget. Accepts full URL or `username/repo` format.
168
+
169
+ ```json
170
+ {
171
+ "portal": {
172
+ "repo": "https://github.com/username/repo"
173
+ }
174
+ }
175
+ ```
176
+
177
+ Or shorthand:
178
+ ```json
179
+ {
180
+ "portal": {
181
+ "repo": "username/repo"
182
+ }
183
+ }
184
+ ```
185
+
186
+ ### portal.alias
187
+
188
+ - **Type**: `object`
189
+ - **Required**: No
190
+ - **Default**: `{}`
191
+ - **Description**: Route aliases for custom routing. Supports string paths and RegExp patterns.
192
+
193
+ ```json
194
+ {
195
+ "portal": {
196
+ "alias": {
197
+ "/docs": "/documentation",
198
+ "/api/(.*)": "https://api.example.com/$1"
199
+ }
200
+ }
201
+ }
202
+ ```
203
+
204
+ ---
205
+
206
+ ## Docs Configuration
207
+
208
+ The `docs` object contains settings specific to docs mode. All properties mirror the portal configuration.
209
+
210
+ ### docs.homepage
211
+
212
+ - **Type**: `string`
213
+ - **Required**: No
214
+ - **Default**: `"home.json"`
215
+
216
+ ```json
217
+ {
218
+ "docs": {
219
+ "homepage": "getting-started.json"
220
+ }
221
+ }
222
+ ```
223
+
224
+ ### docs.theme
225
+
226
+ - **Type**: `string`
227
+ - **Required**: No
228
+ - **Default**: `"modern"`
229
+ - **Options**: `"modern"`, `"classic"`
230
+
231
+ ```json
232
+ {
233
+ "docs": {
234
+ "theme": "classic"
235
+ }
236
+ }
237
+ ```
238
+
239
+ ### docs.repo
240
+
241
+ - **Type**: `string`
242
+ - **Required**: No
243
+ - **Default**: `""`
244
+
245
+ ```json
246
+ {
247
+ "docs": {
248
+ "repo": "username/repo"
249
+ }
250
+ }
251
+ ```
252
+
253
+ ### docs.alias
254
+
255
+ - **Type**: `object`
256
+ - **Required**: No
257
+ - **Default**: `{}`
258
+
259
+ ```json
260
+ {
261
+ "docs": {
262
+ "alias": {
263
+ "/components": "/api/components"
264
+ }
265
+ }
266
+ }
267
+ ```
268
+
269
+ ---
270
+
271
+ ## Examples
272
+
273
+ ### Basic Portal Configuration
274
+
275
+ ```json
276
+ {
277
+ "version": "3.0.0",
278
+ "mode": "portal",
279
+ "el": "#root",
280
+ "portal": {
281
+ "homepage": "home.json",
282
+ "theme": "modern",
283
+ "repo": "myorg/data-portal"
284
+ }
285
+ }
286
+ ```
287
+
288
+ ### Documentation Site Configuration
289
+
290
+ ```json
291
+ {
292
+ "version": "3.0.0",
293
+ "mode": "docs",
294
+ "el": "#app",
295
+ "docs": {
296
+ "homepage": "introduction.json",
297
+ "theme": "classic",
298
+ "repo": "https://github.com/myorg/docs",
299
+ "alias": {
300
+ "/api": "/reference",
301
+ "/guide": "/tutorial"
302
+ }
303
+ }
304
+ }
305
+ ```
306
+
307
+ ### Dual-Mode Configuration
308
+
309
+ If you need to support both modes (useful for full-template projects):
310
+
311
+ ```json
312
+ {
313
+ "version": "3.0.0",
314
+ "mode": "portal",
315
+ "el": "#root",
316
+ "portal": {
317
+ "homepage": "home.json",
318
+ "theme": "modern",
319
+ "repo": "myorg/project"
320
+ },
321
+ "docs": {
322
+ "homepage": "docs/home.json",
323
+ "theme": "modern",
324
+ "repo": "myorg/project",
325
+ "alias": {
326
+ "/": "/docs/home.json"
327
+ }
328
+ }
329
+ }
330
+ ```
331
+
332
+ ### Advanced Configuration with Aliases
333
+
334
+ ```json
335
+ {
336
+ "version": "3.0.0",
337
+ "mode": "portal",
338
+ "el": "#visualify-root",
339
+ "portal": {
340
+ "homepage": "content/home.json",
341
+ "theme": "modern",
342
+ "repo": "https://github.com/organization/visualify-portal",
343
+ "alias": {
344
+ "/": "/content/home.json",
345
+ "/about": "/content/about.json",
346
+ "/api/(.*)": "https://api.example.com/docs/$1",
347
+ "/legacy/(.*)": "/content/deprecated/$1"
348
+ }
349
+ }
350
+ }
351
+ ```
352
+
353
+ ---
354
+
355
+ ## Validation
356
+
357
+ ### Validation Rules
358
+
359
+ | Property | Validation | Error Message |
360
+ |----------|------------|---------------|
361
+ | `version` | Must match semver format | "Invalid version format" |
362
+ | `mode` | Must be "portal" or "docs" | "Invalid mode: must be 'portal' or 'docs'" |
363
+ | `el` | Must be valid CSS selector | "Invalid CSS selector" |
364
+ | `portal.homepage` | Must be valid path or URL | "Invalid homepage path" |
365
+ | `portal.theme` | Must be "modern" or "classic" | "Invalid theme" |
366
+ | `docs.homepage` | Must be valid path or URL | "Invalid homepage path" |
367
+ | `docs.theme` | Must be "modern" or "classic" | "Invalid theme" |
368
+
369
+ ### Default Values Table
370
+
371
+ | Property | Default Value | Applies When |
372
+ |----------|---------------|--------------|
373
+ | `version` | `"3.0.0"` | Always |
374
+ | `mode` | `"portal"` | When not specified |
375
+ | `el` | `"#root"` | When not specified |
376
+ | `portal.homepage` | `"home.json"` | In portal mode when not specified |
377
+ | `portal.theme` | `"modern"` | In portal mode when not specified |
378
+ | `portal.repo` | `""` | In portal mode when not specified |
379
+ | `portal.alias` | `{}` | In portal mode when not specified |
380
+ | `docs.homepage` | `"home.json"` | In docs mode when not specified |
381
+ | `docs.theme` | `"modern"` | In docs mode when not specified |
382
+ | `docs.repo` | `""` | In docs mode when not specified |
383
+ | `docs.alias` | `{}` | In docs mode when not specified |
384
+
385
+ ### CLI Validation
386
+
387
+ When running `visualify dev`, the CLI will:
388
+
389
+ 1. Look for `visualify.json` in the current directory
390
+ 2. Validate the configuration against the schema
391
+ 3. Report any validation errors with line numbers
392
+ 4. Use default values for missing optional properties
393
+
394
+ Example validation error:
395
+ ```
396
+ Error: Invalid configuration in visualify.json
397
+ at line 3: "mode" must be either "portal" or "docs"
398
+ at line 7: "portal.theme" must be either "modern" or "classic"
399
+ ```
400
+
401
+ ---
402
+
403
+ ## Migration from window.$visualify
404
+
405
+ ### Before (v2.x)
406
+ ```html
407
+ <script>
408
+ window.$visualify = {
409
+ mode: 'pages',
410
+ el: '#root',
411
+ theme: 'modern',
412
+ homepage: 'home.json',
413
+ repo: 'username/repo',
414
+ alias: {
415
+ '/docs': '/documentation'
416
+ }
417
+ };
418
+ </script>
419
+ ```
420
+
421
+ ### After (v3.0.0)
422
+ ```json
423
+ {
424
+ "version": "3.0.0",
425
+ "mode": "portal",
426
+ "el": "#root",
427
+ "portal": {
428
+ "homepage": "home.json",
429
+ "theme": "modern",
430
+ "repo": "username/repo",
431
+ "alias": {
432
+ "/docs": "/documentation"
433
+ }
434
+ }
435
+ }
436
+ ```
437
+
438
+ ---
439
+
440
+ ## Environment-Specific Configuration
441
+
442
+ For different environments, you can use:
443
+
444
+ ### visualify.config.js (JavaScript)
445
+
446
+ If you need dynamic configuration, create `visualify.config.js`:
447
+
448
+ ```javascript
449
+ module.exports = {
450
+ version: '3.0.0',
451
+ mode: process.env.VISUALIFY_MODE || 'portal',
452
+ el: '#root',
453
+ portal: {
454
+ homepage: process.env.NODE_ENV === 'production'
455
+ ? 'https://cdn.example.com/home.json'
456
+ : 'home.json',
457
+ theme: 'modern',
458
+ repo: 'username/repo'
459
+ }
460
+ };
461
+ ```
462
+
463
+ **Loading priority:**
464
+ 1. `visualify.config.js` (if exists)
465
+ 2. `visualify.json` (if exists)
466
+ 3. Default values
467
+
468
+ ---
469
+
470
+ ## Related Documentation
471
+
472
+ - [Migration Guide](../migration/v3-migration.md)
473
+ - [CLI Commands](../cli/commands.md)
474
+ - [Quick Start](../../docs/quickstart.md)