@eodash/eodash 5.0.0-alpha.1.11 → 5.0.0-alpha.1.13

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.
@@ -2,17 +2,17 @@
2
2
 
3
3
  import vue from '@vitejs/plugin-vue';
4
4
  import vuetify, { transformAssetUrls } from 'vite-plugin-vuetify';
5
- import virtual, { updateVirtualModule } from 'vite-plugin-virtual'
6
5
  import { fileURLToPath, URL } from 'url';
7
6
  import {
8
7
  runtimeConfigPath,
9
8
  appPath, entryPath,
10
9
  cachePath, publicPath, userConfig,
11
- buildTargetPath
10
+ buildTargetPath,
11
+ logger,
12
+ rootPath
12
13
  } from "./utils.js";
13
14
  import { readFile } from "fs/promises";
14
15
  import { defineConfig, searchForWorkspaceRoot } from "vite"
15
- import { getUserModules } from './utils.js';
16
16
  import { existsSync } from 'fs';
17
17
  import path from "path";
18
18
 
@@ -33,10 +33,6 @@ export const indexHtml = `
33
33
  </body>
34
34
  </html>`
35
35
 
36
- /**
37
- * @type {import('vite').Plugin | null}
38
- */
39
- let virtualPlugin = null;
40
36
  export const serverConfig = /** @type {import('vite').UserConfigFnPromise}*/(defineConfig(async ({ mode, command }) => {
41
37
  return {
42
38
  base: userConfig.base ?? '',
@@ -57,14 +53,15 @@ export const serverConfig = /** @type {import('vite').UserConfigFnPromise}*/(def
57
53
  (mode === "development" && {
58
54
  name: "inject-html",
59
55
  configureServer
60
- }),
61
- virtualPlugin = virtual(await getUserModules())
56
+ })
62
57
  ],
58
+ customLogger: logger,
63
59
  define: { 'process.env': {} },
64
60
  resolve: {
65
61
  alias: {
66
62
  '@': fileURLToPath(new URL('../core', import.meta.url)),
67
63
  '^': fileURLToPath(new URL('../widgets', import.meta.url)),
64
+ "user:config": entryPath
68
65
  },
69
66
  extensions: ['.js', '.json', '.jsx', '.mjs', '.ts', '.tsx', '.vue'],
70
67
  },
@@ -105,24 +102,40 @@ export const serverConfig = /** @type {import('vite').UserConfigFnPromise}*/(def
105
102
  async function configureServer(server) {
106
103
  server.watcher.add([entryPath, runtimeConfigPath])
107
104
 
105
+ let updatedPath = ''
106
+ const loggerInfo = logger.info
107
+ logger.info = (msg, options) => {
108
+ if (msg.includes('core')) {
109
+ const removedPath = msg.split('/')[0].split(" ")
110
+ removedPath.pop()
111
+ const updatedMsg = removedPath.join(" ") + " " + updatedPath.replace(rootPath, "")
112
+
113
+ return loggerInfo(updatedMsg, options)
114
+ }
115
+ return loggerInfo(msg, options)
116
+ }
117
+
108
118
  server.watcher.on('change', async (path) => {
109
- if (path == runtimeConfigPath) {
110
- server.hot.send('reload')
111
- } else if (path === entryPath) {
112
- updateVirtualModule(virtualPlugin, 'user:config',
113
- await getUserModules().then(modules => modules['user:config']))
119
+ updatedPath = path
120
+ if (path === runtimeConfigPath) {
121
+ server.hot.send({
122
+ type: 'full-reload',
123
+ path: path
124
+ })
114
125
  }
115
126
  })
116
127
 
117
128
  return () => {
118
129
  server.middlewares.use(async (req, res, next) => {
119
- if (req.originalUrl === '/@fs/config.js' && existsSync(runtimeConfigPath)) {
120
- await readFile(runtimeConfigPath).then(runtimeConfig => {
121
- res.statusCode = 200
122
- res.setHeader('Content-Type', 'text/javascript')
123
- res.write(runtimeConfig)
124
- res.end()
125
- })
130
+ if (req.originalUrl === '/@fs/config.js') {
131
+ res.statusCode = 200
132
+ res.setHeader('Content-Type', 'text/javascript')
133
+ if (existsSync(runtimeConfigPath)) {
134
+ await readFile(runtimeConfigPath).then(runtimeConfig => {
135
+ res.write(runtimeConfig)
136
+ })
137
+ }
138
+ res.end()
126
139
  return
127
140
  }
128
141
 
package/bin/utils.js CHANGED
@@ -1,10 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { readFile } from 'fs/promises';
4
3
  import { existsSync, readFileSync } from 'fs';
5
4
  import path from 'path';
6
5
  import { fileURLToPath } from 'url';
7
- import { searchForWorkspaceRoot } from 'vite';
6
+ import { searchForWorkspaceRoot, createLogger } from 'vite';
8
7
  import { Command } from 'commander';
9
8
 
10
9
  export const rootPath = searchForWorkspaceRoot(process.cwd());
@@ -58,6 +57,8 @@ export const appPath = fileURLToPath(new URL("..", import.meta.url)),
58
57
  cachePath = userConfig.cacheDir ? path.resolve(rootPath, userConfig.cacheDir) : path.join(dotEodashPath, 'cache');
59
58
 
60
59
 
60
+ export const logger = createLogger()
61
+
61
62
  /**
62
63
  * @param {Options} options
63
64
  * @param {string | undefined} command
@@ -86,15 +87,3 @@ async function getUserConfig(options, command) {
86
87
  runtime: options.runtime ?? config?.runtime
87
88
  }
88
89
  }
89
-
90
- export const getUserModules = async () => {
91
- /** @type {Record<string,string>} */
92
- let userModules = {}
93
- const indexJs = await readFile(entryPath, 'utf-8').catch(() => {
94
- if (!existsSync(runtimeConfigPath)) {
95
- console.error(new Error("no eodash configuration found"))
96
- }
97
- })
98
- userModules['user:config'] = typeof indexJs === 'string' ? indexJs : ''
99
- return userModules
100
- }
package/core/eodash.js CHANGED
@@ -25,7 +25,8 @@ const eodash = reactive({
25
25
  secondary: '#00417044',
26
26
  surface: "#f0f0f0f0",
27
27
  }
28
- }
28
+ },
29
+ meta: {}
29
30
  },
30
31
  template: {
31
32
  background: {
@@ -11,8 +11,10 @@ import { createPinia } from 'pinia';
11
11
  import eodash from '@/eodash';
12
12
  import { eodashKey } from '@/store/Keys';
13
13
  import store from '../store';
14
+ import { createHead } from '@unhead/vue'
14
15
 
15
16
  export const pinia = createPinia();
17
+ const head = createHead()
16
18
 
17
19
  /**
18
20
  * @param {import('vue').App} app
@@ -21,6 +23,7 @@ export function registerPlugins(app) {
21
23
  window.eodashStore = store;
22
24
 
23
25
  app.use(vuetify)
26
+ .use(head)
24
27
  .use(router)
25
28
  .use(pinia)
26
29
  .provide(eodashKey, eodash);
package/core/types.d.ts CHANGED
@@ -4,26 +4,41 @@ import type { StacCatalog, StacCollection, StacItem } from "stac-ts";
4
4
  import type { Ref } from "vue"
5
5
  import type { ThemeDefinition } from "vuetify/lib/index.mjs";
6
6
  import type { Map } from "openlayers";
7
+
7
8
  /**
8
- * Web Component configuration
9
+ * @group Eodash
9
10
  */
10
11
  export interface WebComponentProps<T extends ExecutionTime = "compiletime"> {
11
- /** Web component definition file URL*/
12
+ /**
13
+ * Imports web component file, either using a URL or an import funtion.
14
+ * @example
15
+ * importing `eox-itemfilter` web component, after installing `@eox/itemfilter` it can be
16
+ * referenced:
17
+ * ```js
18
+ * link: async() => import("@eox/itemfilter")
19
+ * ```
20
+ *
21
+ * ::: warning
22
+ * import maps are not available in runtime config
23
+ * :::
24
+ **/
12
25
  link: T extends 'runtime' ? string : (string | (() => Promise<unknown>));
13
- /** Exported Constructor, needs to be provided if the web component is not registered by the `link` provided */
26
+ /**
27
+ * Exported Constructor, needs to be provided if the web component is not registered in by the
28
+ * [link](#link) provided
29
+ **/
14
30
  constructorProp?: string
15
- /** Custom tag name */
16
31
  tagName: `${string}-${string}`
17
32
  /** Object defining all the properties and attributes of the web component */
18
33
  properties?: Record<string, any>
19
34
  /**
20
- * Function that is triggered when the web component is mounted in the DOM.
35
+ * Triggered when the web component is mounted in the DOM.
21
36
  * @param el - web component
22
37
  * @param store - return value of the core STAC pinia store in `/core/store/stac.ts`
23
38
  */
24
39
  onMounted?: (el: Element | null, store: ReturnType<typeof useSTAcStore>, router: Router) => (Promise<void> | void)
25
40
  /**
26
- * Function that is triggered when the web component is unmounted from the DOM.
41
+ * Triggered when the web component is unmounted from the DOM.
27
42
  * @param el - web component
28
43
  * @param store - return value of the core STAC pinia store in `/core/store/stac.ts`
29
44
  */
@@ -38,85 +53,70 @@ export interface WidgetsContainerProps {
38
53
 
39
54
  // eodash types:
40
55
  /**
41
- * Widget type: `web-component` specification. The web component definition is imported using the `widget.link` property either from
42
- * an external endpoint, or an installed node_module.
43
- * Installed node_module web components import should be mapped in `/core/modulesMap.ts`,
44
- * then setting `widget.link`:`(import-map-key)` and `node_module`:`true`
56
+ * Widget type: `web-component` API
57
+ * @group Eodash
45
58
  */
46
59
  export interface WebComponentWidget<T extends ExecutionTime = "compiletime"> {
47
- /**
48
- * Unique Identifier, triggers rerender when using `defineWidget`
49
- **/
50
60
  id: number | string | symbol
51
- /**
52
- * Widget title
53
- */
54
61
  title: string
55
62
  /**
56
63
  * Widget position and size.
57
64
  */
58
65
  layout: {
59
66
  /**
60
- * Horizontal start position. Integer (1 - 12)
67
+ * Horizontal start position. Integer between 1 and 12
61
68
  */
62
69
  x: number
63
70
  /**
64
- * Vertical start position. Integer (1 - 12)
71
+ * Vertical start position. Integer between 1 and 12
65
72
  */
66
73
  y: number
67
74
  /**
68
- * Width. Integer (1 - 12)
75
+ * Width. Integer between 1 and 12
69
76
  */
70
77
  w: number
71
78
  /**
72
- * Height. Integer (1 - 12)
79
+ * Height. Integer between 1 and 12
73
80
  */
74
81
  h: number
75
82
  }
76
83
  widget: WebComponentProps<T>
77
- /**
78
- * Widget type
79
- */
80
84
  type: 'web-component'
81
85
  }
82
86
 
83
87
  /**
84
- * Widget type: `internal` specification.
85
- * Internal widgets are Vue components inside the `/widgets` directory.
88
+ * Widget type: `internal` API.
89
+ * Internal widgets are Vue components provided by eodash.
90
+ * @group Eodash
86
91
  */
87
92
  export interface InternalComponentWidget {
88
- /**
89
- * Unique Identifier, triggers rerender when using `defineWidget`
90
- **/
91
93
  id: number | string | symbol
92
- /**
93
- * Widget title
94
- */
95
94
  title: string
96
95
  /**
97
96
  * Widget position and size.
98
97
  */
99
98
  layout: {
100
99
  /**
101
- * Horizontal start position. Integer (1 - 12)
100
+ * Horizontal start position. Integer between 1 and 12
102
101
  */
103
102
  x: number
104
103
  /**
105
- * Vertical start position. Integer (1 - 12)
104
+ * Vertical start position. Integer between 1 and 12
106
105
  */
107
106
  y: number
108
107
  /**
109
- * Width. Integer (1 - 12)
108
+ * Width. Integer between 1 and 12
110
109
  */
111
110
  w: number
112
111
  /**
113
- * Height. Integer (1 - 12)
112
+ * Height. Integer between 1 and 12
114
113
  */
115
114
  h: number
116
115
  }
117
116
  widget: {
118
117
  /**
119
- * Internal Vue Component file name without the extention .vue
118
+ * Internal Vue Components inside the [widgets](https://github.com/eodash/eodash/tree/main/widgets) folder can be referenced
119
+ * using their name without the extention .vue
120
120
  */
121
121
  name: string;
122
122
  /**
@@ -124,43 +124,37 @@ export interface InternalComponentWidget {
124
124
  */
125
125
  props?: Record<string, unknown>
126
126
  }
127
- /**
128
- * Widget type.
129
- */
130
127
  type: 'internal'
131
128
  }
132
129
 
133
130
  /**
134
- * Widget type: `iframe` specification.
131
+ * Widget type: `iframe` API
135
132
  * Renders an external HTML file as a widget.
136
133
  */
134
+ /**
135
+ * @group Eodash
136
+ */
137
137
  export interface IFrameWidget {
138
- /**
139
- * Unique Identifier, triggers rerender when using `defineWidget`
140
- **/
141
138
  id: number | string | symbol
142
- /**
143
- * Widget title
144
- */
145
139
  title: string
146
140
  /**
147
141
  * Widget position and size.
148
142
  */
149
143
  layout: {
150
144
  /**
151
- * Horizontal start position. Integer (1 - 12)
145
+ * Horizontal start position. Integer between 1 and 12
152
146
  */
153
147
  x: number
154
148
  /**
155
- * Vertical start position. Integer (1 - 12)
149
+ * Vertical start position. Integer between 1 and 12
156
150
  */
157
151
  y: number
158
152
  /**
159
- * Width. Integer (1 - 12)
153
+ * Width. Integer between 1 and 12
160
154
  */
161
155
  w: number
162
156
  /**
163
- * Height. Integer (1 - 12)
157
+ * Height. Integer between 1 and 12
164
158
  */
165
159
  h: number
166
160
  }
@@ -170,11 +164,11 @@ export interface IFrameWidget {
170
164
  */
171
165
  src: string
172
166
  }
173
- /**
174
- * Widget type
175
- */
176
167
  type: 'iframe'
177
168
  }
169
+ /**
170
+ * @group Eodash
171
+ */
178
172
  export interface FunctionalWidget<T extends ExecutionTime = "compiletime"> {
179
173
  /**
180
174
  * Provides a functional definition of the widget,
@@ -184,32 +178,42 @@ export interface FunctionalWidget<T extends ExecutionTime = "compiletime"> {
184
178
  defineWidget: (selectedSTAC: StacCatalog | StacCollection | StacItem | null) => Omit<StaticWidget<T>, 'layout'>
185
179
  layout: {
186
180
  /**
187
- * Horizontal start position. Integer (1 - 12)
181
+ * Horizontal start position. Integer between 1 and 12
188
182
  */
189
183
  x: number
190
184
  /**
191
- * Vertical start position. Integer (1 - 12)
185
+ * Vertical start position. Integer between 1 and 12
192
186
  */
193
187
  y: number
194
188
  /**
195
- * Width. Integer (1 - 12)
189
+ * Width. Integer between 1 and 12
196
190
  */
197
191
  w: number
198
192
  /**
199
- * Height. Integer (1 - 12)
193
+ * Height. Integer between 1 and 12
200
194
  */
201
195
  h: number
202
196
  }
203
197
  }
198
+ /**
199
+ * @group Eodash
200
+ */
204
201
  export type StaticWidget<T extends ExecutionTime = "compiletime"> = WebComponentWidget<T> | InternalComponentWidget | IFrameWidget
202
+ /**
203
+ * @group Eodash
204
+ */
205
205
  export type Widget<T extends ExecutionTime = "compiletime"> = StaticWidget<T> | FunctionalWidget<T>
206
206
 
207
207
 
208
+ /**
209
+ * @group Eodash
210
+ */
208
211
  export type BackgroundWidget<T extends ExecutionTime = "compiletime"> = Omit<WebComponentWidget<T>, 'layout' | 'title'> | Omit<InternalComponentWidget, 'layout' | 'title'> | Omit<IFrameWidget, 'layout' | 'title'> | Omit<FunctionalWidget, 'layout'>
209
212
  /**
210
213
  * Dashboard rendered widgets specification.
211
214
  * 3 types of widgets are supported: `"iframe"`, `"internal"`, and `"web-component"`.
212
215
  * A specific object should be provided based on the type of the widget.
216
+ * @group Eodash
213
217
  */
214
218
  export interface Template<T extends ExecutionTime = "compiletime"> {
215
219
  /**
@@ -226,15 +230,21 @@ export interface Template<T extends ExecutionTime = "compiletime"> {
226
230
  */
227
231
  widgets: Widget<T>[]
228
232
  }
229
-
233
+ /** @ignore */
230
234
  export type ExternalURL = `${'https://' | 'http://'}${string}`;
235
+ /** @ignore */
231
236
  export type InternalRoute = `/${string}`
237
+ /** @ignore */
232
238
  export type StacEndpoint = `${'https://' | 'http://'}${string}/catalog.json`
233
239
 
240
+ /**
241
+ * @group Eodash
242
+ */
234
243
  export type ExecutionTime = "runtime" | "compiletime";
235
244
 
236
245
  /**
237
- * Eodash instance specification.
246
+ * Eodash instance API
247
+ * @group Eodash
238
248
  */
239
249
  export interface Eodash<T extends ExecutionTime = "compiletime"> {
240
250
  /**
@@ -249,13 +259,7 @@ export interface Eodash<T extends ExecutionTime = "compiletime"> {
249
259
  * Renderes to navigation buttons on the app header.
250
260
  **/
251
261
  routes?: Array<{
252
- /**
253
- * button title
254
- **/
255
262
  title: string,
256
- /**
257
- * external URL or inner path to navigate to.
258
- **/
259
263
  to: ExternalURL | InternalRoute
260
264
  }>
261
265
  /**
@@ -263,7 +267,7 @@ export interface Eodash<T extends ExecutionTime = "compiletime"> {
263
267
  */
264
268
  brand: {
265
269
  /**
266
- * Automatically fetches the specified font family from google fonts. if the `link` property is specified
270
+ * Automatically fetches the specified font family from google fonts. if the [link](#font-link) property is specified
267
271
  * the font family will be fetched from the provided source instead.
268
272
  */
269
273
  font?: {
@@ -272,7 +276,7 @@ export interface Eodash<T extends ExecutionTime = "compiletime"> {
272
276
  */
273
277
  link?: string;
274
278
  /**
275
- * Font family. Use FVD notation to include families https://github.com/typekit/fvd
279
+ * Font family. Use FVD notation to include families. see https://github.com/typekit/fvd
276
280
  */
277
281
  family: string
278
282
  }
@@ -292,6 +296,8 @@ export interface Eodash<T extends ExecutionTime = "compiletime"> {
292
296
  * Dashboard theme as a custom vuetifyJs theme.
293
297
  */
294
298
  theme?: ThemeDefinition
299
+
300
+ meta?: import("@unhead/vue").UseSeoMetaInput
295
301
  }
296
302
  /**
297
303
  * Template configuration
@@ -301,6 +307,9 @@ export interface Eodash<T extends ExecutionTime = "compiletime"> {
301
307
  /////////
302
308
 
303
309
  /// eodash store types
310
+ /**
311
+ * @group EodashStore
312
+ */
304
313
  export interface EodashStore {
305
314
  /**
306
315
  * Stateful Reactive variables
@@ -315,7 +324,6 @@ export interface EodashStore {
315
324
  */
316
325
  mapInstance: Ref<Map | null>
317
326
  }
318
- // consider removing the actions ?
319
327
  actions: {
320
328
  loadFont: (family?: string, link?: string) => Promise<string>;
321
329
  };
@@ -327,23 +335,52 @@ export interface EodashStore {
327
335
  }
328
336
  }
329
337
  ///////
338
+ /**
339
+ * Eodash server, build and setup configuration
340
+ * @group EodashConfig
341
+ */
330
342
  export interface EodashConfig {
331
343
  dev?: {
344
+ /** serving port */
332
345
  port?: string | number
333
346
  host?: string | boolean
347
+ /** open default browser when the server starts */
334
348
  open?: boolean
335
349
  }
336
350
  preview?: {
351
+ /** serving port */
337
352
  port?: string | number
338
353
  host?: string | boolean
354
+ /** open default browser when the server starts */
339
355
  open?: boolean
340
356
  }
357
+ /**
358
+ * base public path
359
+ */
341
360
  base?: string;
361
+ /**
362
+ * build target folder path
363
+ */
342
364
  outDir?: string;
365
+ /** path to statically served assets folder, can be set to `false`
366
+ * to disable serving assets statically
367
+ **/
343
368
  publicDir?: string | false;
369
+ /**
370
+ * cache folder
371
+ */
344
372
  cacheDir?: string
373
+ /** specifies main entry file, exporting `createEodash`*/
345
374
  entryPoint?: string
375
+ /**
376
+ * file exporting eodash client runtime config
377
+ */
346
378
  runtime?: string
347
379
  }
348
-
380
+ /**
381
+ * project entry point should export this function as a default
382
+ * to instantiate eodash
383
+ *
384
+ * @param configCallback
385
+ */
349
386
  export declare const createEodash: (configCallback: (store: EodashStore) => Eodash | Promise<Eodash>) => Eodash
@@ -11,15 +11,15 @@ import { useSTAcStore } from '@/store/stac';
11
11
  import { defineAsyncComponent } from "vue";
12
12
  import { useDisplay, useLayout } from "vuetify/lib/framework.mjs";
13
13
  import { loadFont } from '@/store/Actions'
14
- import { onUnmounted } from "vue";
14
+ import { useSeoMeta } from "@unhead/vue"
15
15
 
16
16
 
17
- const eodashConfig = await useEodashRuntime()
17
+ const eodash = await useEodashRuntime()
18
18
 
19
- const theme = useUpdateTheme('dashboardTheme', eodashConfig.brand?.theme)
19
+ const theme = useUpdateTheme('dashboardTheme', eodash.brand?.theme)
20
20
  theme.global.name.value = 'dashboardTheme'
21
21
 
22
- const fontFamily = await loadFont(eodashConfig.brand?.font?.family, eodashConfig.brand?.font?.link)
22
+ const fontFamily = await loadFont(eodash.brand?.font?.family, eodash.brand?.font?.link)
23
23
 
24
24
  const { loadSTAC } = useSTAcStore()
25
25
  await loadSTAC()
@@ -32,14 +32,7 @@ const HeaderComponent = defineAsyncComponent(() => import(`@/components/Header.v
32
32
  const FooterComponent = defineAsyncComponent(() => import(`@/components/Footer.vue`))
33
33
  const { mainRect } = useLayout()
34
34
 
35
- onUnmounted(() => {
36
- theme.global.name.value = 'light'
37
- })
38
-
39
- import.meta.hot?.on('reload', () => {
40
- window.location.reload()
41
- })
42
-
35
+ useSeoMeta(eodash.brand.meta ?? {})
43
36
  </script>
44
37
 
45
38
  <style scoped lang="scss">
@@ -47,4 +40,3 @@ import.meta.hot?.on('reload', () => {
47
40
  font-family: v-bind('fontFamily');
48
41
  }
49
42
  </style>
50
- @/composables/DefineEodash
@@ -15,3 +15,15 @@ declare module 'user:config' {
15
15
  const eodash: import("@/types").Eodash | Promise<import("@/types").Eodash>;
16
16
  export default eodash
17
17
  }
18
+ declare module '@eox/chart' {
19
+ export const EOxChart: CustomElementConstructor
20
+ }
21
+ declare module '@eox/layercontrol' {
22
+ export const EOxLayerControl: CustomElementConstructor
23
+ }
24
+ declare module '@eox/timecontrol' {
25
+ export const EOxTimeControl: CustomElementConstructor
26
+ }
27
+ declare module '@eox/jsonform' {
28
+ export const EOxJSONForm: CustomElementConstructor
29
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eodash/eodash",
3
- "version": "5.0.0-alpha.1.11",
3
+ "version": "5.0.0-alpha.1.13",
4
4
  "type": "module",
5
5
  "types": "./core/types.d.ts",
6
6
  "files": [
@@ -16,19 +16,23 @@
16
16
  },
17
17
  "browser": "./core/main.js",
18
18
  "scripts": {
19
- "dev": "npx eodash dev",
20
- "build": "npx eodash build",
19
+ "dev": "npx eodash dev --entryPoint core/eodash.js",
20
+ "build": "npx eodash build --entryPoint core/eodash.js",
21
21
  "check": "vue-tsc --noEmit --skipLibCheck && eslint .",
22
22
  "check:lint": "eslint .",
23
23
  "check:types": "vue-tsc --noEmit --skipLibCheck",
24
24
  "preview": "vite preview",
25
25
  "lint": "eslint . --fix",
26
- "docs:generate": "typedoc --plugin typedoc-plugin-markdown core/store/Types.ts --tsconfig tsconfig.json --out docs --readme none"
26
+ "docs:generate": "typedoc --options typedoc.config.json",
27
+ "docs:dev": "vitepress dev docs",
28
+ "docs:build": "npm run docs:generate && vitepress build docs",
29
+ "docs:preview": "vitepress preview docs"
27
30
  },
28
31
  "dependencies": {
29
32
  "@eox/layout": "^0.1.0",
30
33
  "@eox/stacinfo": "^0.3.0",
31
34
  "@mdi/font": "7.0.96",
35
+ "@unhead/vue": "^1.8.20",
32
36
  "@vitejs/plugin-vue": "^5.0.0",
33
37
  "animated-details": "gist:2912bb049fa906671807415eb0e87188",
34
38
  "axios": "^1.6.2",
@@ -38,7 +42,6 @@
38
42
  "sass": "^1.60.0",
39
43
  "stac-ts": "^1.0.3",
40
44
  "vite": "^5.1.5",
41
- "vite-plugin-virtual": "^0.3.0",
42
45
  "vite-plugin-vuetify": "^2.0.0",
43
46
  "vue": "^3.2.0",
44
47
  "vue-router": "^4.0.0",
@@ -53,10 +56,12 @@
53
56
  "eslint": "^8.56.0",
54
57
  "eslint-plugin-vue": "^9.19.2",
55
58
  "typedoc": "^0.25.7",
56
- "typedoc-plugin-markdown": "^3.17.1",
59
+ "typedoc-plugin-markdown": "^4.0.0-next.54",
60
+ "typedoc-plugin-vue": "^1.1.0",
61
+ "typedoc-vitepress-theme": "^1.0.0-next.0",
57
62
  "typescript": "^5.0.0",
58
63
  "unplugin-fonts": "^1.0.3",
59
- "vite-plugin-dts": "^3.7.3",
64
+ "vitepress": "^1.0.0",
60
65
  "vue-eslint-parser": "^9.3.2",
61
66
  "vue-tsc": "^1.2.0"
62
67
  },