@docsector/docsector-reader 0.1.2 → 0.2.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.
- package/README.md +175 -47
- package/bin/docsector.js +408 -17
- package/package.json +18 -10
- package/quasar.config.js +4 -111
- package/src/components/DH1.vue +1 -1
- package/src/components/DH2.vue +1 -1
- package/src/components/DH3.vue +1 -1
- package/src/components/DH4.vue +1 -1
- package/src/components/DH5.vue +1 -1
- package/src/components/DH6.vue +1 -1
- package/src/components/DMenu.vue +4 -4
- package/src/components/DPage.vue +3 -3
- package/src/components/DPageAnchor.vue +1 -1
- package/src/components/QZoom.js +1 -1
- package/src/components/QZoom.sass +43 -0
- package/src/i18n/helpers.js +160 -0
- package/src/i18n/index.js +4 -117
- package/src/layouts/DefaultLayout.vue +1 -1
- package/src/quasar.factory.js +249 -0
- package/src/components/QZoom.styl +0 -43
package/bin/docsector.js
CHANGED
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
* Docsector Reader CLI
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
* docsector
|
|
8
|
-
* docsector
|
|
9
|
-
* docsector
|
|
10
|
-
* docsector
|
|
7
|
+
* docsector init [name] — Scaffold a new documentation project
|
|
8
|
+
* docsector dev — Start development server with hot-reload
|
|
9
|
+
* docsector build — Build optimized SPA for production
|
|
10
|
+
* docsector serve — Serve the production build locally
|
|
11
|
+
* docsector help — Show help information
|
|
11
12
|
*/
|
|
12
13
|
|
|
13
14
|
import { execSync, spawn } from 'child_process'
|
|
14
|
-
import { existsSync } from 'fs'
|
|
15
|
-
import { resolve, dirname } from 'path'
|
|
15
|
+
import { existsSync, mkdirSync, writeFileSync } from 'fs'
|
|
16
|
+
import { resolve, dirname, basename } from 'path'
|
|
16
17
|
import { fileURLToPath } from 'url'
|
|
17
18
|
|
|
18
19
|
const __filename = fileURLToPath(import.meta.url)
|
|
@@ -22,7 +23,7 @@ const packageRoot = resolve(__dirname, '..')
|
|
|
22
23
|
const args = process.argv.slice(2)
|
|
23
24
|
const command = args[0]
|
|
24
25
|
|
|
25
|
-
const VERSION = '0.
|
|
26
|
+
const VERSION = '0.2.0'
|
|
26
27
|
|
|
27
28
|
const HELP = `
|
|
28
29
|
Docsector Reader v${VERSION}
|
|
@@ -32,16 +33,18 @@ const HELP = `
|
|
|
32
33
|
docsector <command> [options]
|
|
33
34
|
|
|
34
35
|
Commands:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
init [name] Scaffold a new documentation project
|
|
37
|
+
dev Start development server with hot-reload (port 8181)
|
|
38
|
+
build Build optimized SPA for production (output: dist/spa/)
|
|
39
|
+
serve Serve the production build locally
|
|
40
|
+
version Show version number
|
|
41
|
+
help Show this help message
|
|
40
42
|
|
|
41
43
|
Options:
|
|
42
44
|
--port <number> Override dev server port (default: 8181)
|
|
43
45
|
|
|
44
46
|
Examples:
|
|
47
|
+
docsector init my-docs
|
|
45
48
|
docsector dev
|
|
46
49
|
docsector dev --port 3000
|
|
47
50
|
docsector build
|
|
@@ -51,15 +54,298 @@ const HELP = `
|
|
|
51
54
|
https://github.com/docsector/docsector-reader
|
|
52
55
|
`
|
|
53
56
|
|
|
57
|
+
// =============================================================================
|
|
58
|
+
// Scaffold templates
|
|
59
|
+
// =============================================================================
|
|
60
|
+
|
|
61
|
+
function getTemplatePackageJson (name) {
|
|
62
|
+
return JSON.stringify({
|
|
63
|
+
name,
|
|
64
|
+
version: '0.1.0',
|
|
65
|
+
private: true,
|
|
66
|
+
type: 'module',
|
|
67
|
+
description: `${name} — Documentation powered by Docsector Reader`,
|
|
68
|
+
scripts: {
|
|
69
|
+
dev: 'docsector dev',
|
|
70
|
+
build: 'docsector build',
|
|
71
|
+
serve: 'docsector serve'
|
|
72
|
+
},
|
|
73
|
+
dependencies: {
|
|
74
|
+
'@docsector/docsector-reader': '^0.2.0'
|
|
75
|
+
}
|
|
76
|
+
}, null, 2)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const TEMPLATE_QUASAR_CONFIG = `\
|
|
80
|
+
import { configure } from 'quasar/wrappers'
|
|
81
|
+
import { createQuasarConfig } from '@docsector/docsector-reader/quasar-factory'
|
|
82
|
+
|
|
83
|
+
export default configure(() => {
|
|
84
|
+
return createQuasarConfig({
|
|
85
|
+
projectRoot: import.meta.dirname
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
`
|
|
89
|
+
|
|
90
|
+
const TEMPLATE_DOCSECTOR_CONFIG = `\
|
|
91
|
+
/**
|
|
92
|
+
* Docsector Reader Configuration
|
|
93
|
+
*
|
|
94
|
+
* Customize how your documentation looks and behaves.
|
|
95
|
+
* Replace the values below with your project's branding and links.
|
|
96
|
+
*/
|
|
97
|
+
export default {
|
|
98
|
+
// @ Branding
|
|
99
|
+
branding: {
|
|
100
|
+
logo: '/images/logo.png',
|
|
101
|
+
name: 'My Documentation',
|
|
102
|
+
version: 'v0.1.0'
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
// @ Links
|
|
106
|
+
links: {
|
|
107
|
+
github: 'https://github.com/your-org/your-repo',
|
|
108
|
+
discussions: null,
|
|
109
|
+
chat: null,
|
|
110
|
+
email: null,
|
|
111
|
+
changelog: null,
|
|
112
|
+
roadmap: null,
|
|
113
|
+
sponsor: null,
|
|
114
|
+
explore: null
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
// @ GitHub
|
|
118
|
+
github: {
|
|
119
|
+
editBaseUrl: 'https://github.com/your-org/your-repo/edit/main/src/pages'
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
// @ Languages
|
|
123
|
+
languages: [
|
|
124
|
+
{
|
|
125
|
+
image: '/images/flags/united-states-of-america.png',
|
|
126
|
+
label: 'English (US)',
|
|
127
|
+
value: 'en-US'
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
|
|
131
|
+
// @ Default language
|
|
132
|
+
defaultLanguage: 'en-US'
|
|
133
|
+
}
|
|
134
|
+
`
|
|
135
|
+
|
|
136
|
+
const TEMPLATE_CSS_STUB = `\
|
|
137
|
+
// Import Docsector Reader's base styles
|
|
138
|
+
@import '@docsector/docsector-reader/src/css/app.sass'
|
|
139
|
+
|
|
140
|
+
// Add your custom styles below
|
|
141
|
+
`
|
|
142
|
+
|
|
143
|
+
const TEMPLATE_I18N_INDEX = `\
|
|
144
|
+
// @ Import i18n message builder from Docsector Reader
|
|
145
|
+
import { buildMessages } from '@docsector/docsector-reader/i18n'
|
|
146
|
+
|
|
147
|
+
// @ Import language HJSON files (Vite-compatible eager import)
|
|
148
|
+
const langModules = import.meta.glob('./languages/*.hjson', { eager: true })
|
|
149
|
+
// @ Import markdown files (Vite-compatible eager import as raw strings)
|
|
150
|
+
const mdModules = import.meta.glob('../pages/**/*.md', { eager: true, query: '?raw', import: 'default' })
|
|
151
|
+
|
|
152
|
+
// @ Import pages
|
|
153
|
+
import boot from 'pages/boot'
|
|
154
|
+
import pages from 'pages'
|
|
155
|
+
|
|
156
|
+
export default buildMessages({ langModules, mdModules, pages, boot })
|
|
157
|
+
`
|
|
158
|
+
|
|
159
|
+
const TEMPLATE_I18N_HJSON = `\
|
|
160
|
+
{
|
|
161
|
+
// Main navigation and UI labels for your documentation
|
|
162
|
+
nav: {
|
|
163
|
+
overview: Overview
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Page-specific translations (auto-loaded from pages/*.md)
|
|
167
|
+
pages: {}
|
|
168
|
+
}
|
|
169
|
+
`
|
|
170
|
+
|
|
171
|
+
const TEMPLATE_PAGES_INDEX = `\
|
|
172
|
+
/**
|
|
173
|
+
* Pages Registry
|
|
174
|
+
*
|
|
175
|
+
* Define your documentation pages here. Each key is a URL path,
|
|
176
|
+
* and each value configures the page's type, icon, status, and titles.
|
|
177
|
+
*
|
|
178
|
+
* config.type: top-level route prefix — 'manual', 'guide', etc.
|
|
179
|
+
* config.status: 'done' | 'draft' | 'empty'
|
|
180
|
+
* config.icon: Material Design icon name
|
|
181
|
+
* config.menu: menu display options (header, subheader, separator)
|
|
182
|
+
* config.subpages: { showcase: bool, vs: bool }
|
|
183
|
+
* data: per-language titles (used for navigation and <title> tag)
|
|
184
|
+
*
|
|
185
|
+
* Set config to null for category nodes (non-navigable groupings).
|
|
186
|
+
*/
|
|
187
|
+
export default {
|
|
188
|
+
'/getting-started': {
|
|
189
|
+
config: {
|
|
190
|
+
icon: 'flag',
|
|
191
|
+
status: 'done',
|
|
192
|
+
type: 'guide',
|
|
193
|
+
menu: {
|
|
194
|
+
header: {
|
|
195
|
+
icon: 'school',
|
|
196
|
+
label: 'Guides'
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
subpages: {
|
|
200
|
+
showcase: false
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
data: {
|
|
204
|
+
'en-US': { title: 'Getting Started' }
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
`
|
|
209
|
+
|
|
210
|
+
const TEMPLATE_PAGES_BOOT = `\
|
|
211
|
+
export default {
|
|
212
|
+
meta: {
|
|
213
|
+
'en-US': {
|
|
214
|
+
overview: {
|
|
215
|
+
_translations: null
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
`
|
|
221
|
+
|
|
222
|
+
const TEMPLATE_BOOT_PAGE = `\
|
|
223
|
+
<template>
|
|
224
|
+
<q-page class="flex flex-center column q-pa-xl">
|
|
225
|
+
<h1 class="text-h3 text-weight-bold q-mb-md">
|
|
226
|
+
Welcome to your Documentation
|
|
227
|
+
</h1>
|
|
228
|
+
<p class="text-subtitle1 text-grey-7">
|
|
229
|
+
Edit <code>src/pages/@/BootPage.vue</code> to customize this page.
|
|
230
|
+
</p>
|
|
231
|
+
<q-btn
|
|
232
|
+
color="primary"
|
|
233
|
+
label="Getting Started"
|
|
234
|
+
to="/en-US/guide/getting-started/overview"
|
|
235
|
+
class="q-mt-lg"
|
|
236
|
+
/>
|
|
237
|
+
</q-page>
|
|
238
|
+
</template>
|
|
239
|
+
|
|
240
|
+
<script setup>
|
|
241
|
+
defineOptions({ name: 'BootPage' })
|
|
242
|
+
</script>
|
|
243
|
+
`
|
|
244
|
+
|
|
245
|
+
const TEMPLATE_404_PAGE = `\
|
|
246
|
+
<template>
|
|
247
|
+
<q-page class="flex flex-center column q-pa-xl">
|
|
248
|
+
<h1 class="text-h3 text-weight-bold q-mb-md">404</h1>
|
|
249
|
+
<p class="text-subtitle1 text-grey-7">
|
|
250
|
+
Page not found.
|
|
251
|
+
</p>
|
|
252
|
+
<q-btn
|
|
253
|
+
flat
|
|
254
|
+
color="primary"
|
|
255
|
+
label="Go Home"
|
|
256
|
+
to="/"
|
|
257
|
+
/>
|
|
258
|
+
</q-page>
|
|
259
|
+
</template>
|
|
260
|
+
|
|
261
|
+
<script setup>
|
|
262
|
+
defineOptions({ name: 'NotFoundPage' })
|
|
263
|
+
</script>
|
|
264
|
+
`
|
|
265
|
+
|
|
266
|
+
const TEMPLATE_INDEX_HTML = `\
|
|
267
|
+
<!DOCTYPE html>
|
|
268
|
+
<html>
|
|
269
|
+
<head>
|
|
270
|
+
<title><%= productName %></title>
|
|
271
|
+
|
|
272
|
+
<meta charset="utf-8">
|
|
273
|
+
<meta name="description" content="<%= productDescription %>">
|
|
274
|
+
<meta name="format-detection" content="telephone=no">
|
|
275
|
+
<meta name="msapplication-tap-highlight" content="no">
|
|
276
|
+
<meta name="viewport" content="user-scalable=yes, initial-scale=1, maximum-scale=5, minimum-scale=1, width=device-width">
|
|
277
|
+
|
|
278
|
+
<link rel="icon" type="image/png" sizes="128x128" href="images/icons/favicon-128.png">
|
|
279
|
+
<link rel="icon" type="image/png" sizes="32x32" href="images/icons/favicon-32.png">
|
|
280
|
+
<link rel="icon" type="image/png" sizes="16x16" href="images/icons/favicon-16.png">
|
|
281
|
+
<link rel="icon" type="image/ico" href="favicon.ico">
|
|
282
|
+
</head>
|
|
283
|
+
<body>
|
|
284
|
+
<!-- quasar:entry-point -->
|
|
285
|
+
</body>
|
|
286
|
+
</html>
|
|
287
|
+
`
|
|
288
|
+
|
|
289
|
+
const TEMPLATE_POSTCSS = `\
|
|
290
|
+
module.exports = {
|
|
291
|
+
plugins: [
|
|
292
|
+
require('autoprefixer')
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
`
|
|
296
|
+
|
|
297
|
+
const TEMPLATE_GITIGNORE = `\
|
|
298
|
+
node_modules
|
|
299
|
+
.quasar
|
|
300
|
+
dist
|
|
301
|
+
npm-debug.log*
|
|
302
|
+
.DS_Store
|
|
303
|
+
.thumbs.db
|
|
304
|
+
`
|
|
305
|
+
|
|
306
|
+
const TEMPLATE_GETTING_STARTED_MD = `\
|
|
307
|
+
# Getting Started
|
|
308
|
+
|
|
309
|
+
Welcome to your documentation project!
|
|
310
|
+
|
|
311
|
+
## Installation
|
|
312
|
+
|
|
313
|
+
\\\`\\\`\\\`bash
|
|
314
|
+
npm install
|
|
315
|
+
\\\`\\\`\\\`
|
|
316
|
+
|
|
317
|
+
## Development
|
|
318
|
+
|
|
319
|
+
\\\`\\\`\\\`bash
|
|
320
|
+
npm run dev
|
|
321
|
+
\\\`\\\`\\\`
|
|
322
|
+
|
|
323
|
+
Your documentation will be available at **http://localhost:8181**.
|
|
324
|
+
|
|
325
|
+
## Next Steps
|
|
326
|
+
|
|
327
|
+
- Edit pages in \\\`src/pages/\\\`
|
|
328
|
+
- Add languages in \\\`src/i18n/languages/\\\`
|
|
329
|
+
- Customize branding in \\\`docsector.config.js\\\`
|
|
330
|
+
`
|
|
331
|
+
|
|
332
|
+
// =============================================================================
|
|
333
|
+
// Commands
|
|
334
|
+
// =============================================================================
|
|
335
|
+
|
|
54
336
|
function findQuasarBin () {
|
|
55
|
-
// Try local
|
|
337
|
+
// Try local @quasar/app-vite first (user's project or hoisted)
|
|
338
|
+
const localAppVite = resolve(process.cwd(), 'node_modules', '@quasar', 'app-vite', 'bin', 'quasar.js')
|
|
339
|
+
if (existsSync(localAppVite)) return localAppVite
|
|
340
|
+
|
|
341
|
+
// Try package's own node_modules (nested dependency)
|
|
342
|
+
const pkgAppVite = resolve(packageRoot, 'node_modules', '@quasar', 'app-vite', 'bin', 'quasar.js')
|
|
343
|
+
if (existsSync(pkgAppVite)) return pkgAppVite
|
|
344
|
+
|
|
345
|
+
// Fallback: try generic quasar bin in local node_modules
|
|
56
346
|
const localBin = resolve(process.cwd(), 'node_modules', '.bin', 'quasar')
|
|
57
347
|
if (existsSync(localBin)) return localBin
|
|
58
348
|
|
|
59
|
-
// Try package's own node_modules
|
|
60
|
-
const pkgBin = resolve(packageRoot, 'node_modules', '.bin', 'quasar')
|
|
61
|
-
if (existsSync(pkgBin)) return pkgBin
|
|
62
|
-
|
|
63
349
|
// Fall back to npx
|
|
64
350
|
return 'npx quasar'
|
|
65
351
|
}
|
|
@@ -90,7 +376,112 @@ function run (cmd, cmdArgs = []) {
|
|
|
90
376
|
})
|
|
91
377
|
}
|
|
92
378
|
|
|
379
|
+
/**
|
|
380
|
+
* Scaffold a new Docsector documentation project.
|
|
381
|
+
*/
|
|
382
|
+
function initProject (name) {
|
|
383
|
+
if (!name) {
|
|
384
|
+
name = 'my-docs'
|
|
385
|
+
console.log(` No project name specified, using "${name}"`)
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
const projectDir = resolve(process.cwd(), name)
|
|
389
|
+
|
|
390
|
+
if (existsSync(projectDir)) {
|
|
391
|
+
console.error(`\n Error: Directory "${name}" already exists.\n`)
|
|
392
|
+
process.exit(1)
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
console.log(`\n Creating Docsector project in ${projectDir}...\n`)
|
|
396
|
+
|
|
397
|
+
// Create directory structure
|
|
398
|
+
const dirs = [
|
|
399
|
+
'',
|
|
400
|
+
'src',
|
|
401
|
+
'src/css',
|
|
402
|
+
'src/i18n',
|
|
403
|
+
'src/i18n/languages',
|
|
404
|
+
'src/pages',
|
|
405
|
+
'src/pages/@',
|
|
406
|
+
'src/pages/getting-started',
|
|
407
|
+
'src/pages/getting-started/en-US',
|
|
408
|
+
'public',
|
|
409
|
+
'public/images',
|
|
410
|
+
'public/images/icons',
|
|
411
|
+
'public/images/flags'
|
|
412
|
+
]
|
|
413
|
+
|
|
414
|
+
for (const dir of dirs) {
|
|
415
|
+
mkdirSync(resolve(projectDir, dir), { recursive: true })
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// Create files
|
|
419
|
+
const files = [
|
|
420
|
+
['package.json', getTemplatePackageJson(name)],
|
|
421
|
+
['quasar.config.js', TEMPLATE_QUASAR_CONFIG],
|
|
422
|
+
['docsector.config.js', TEMPLATE_DOCSECTOR_CONFIG],
|
|
423
|
+
['index.html', TEMPLATE_INDEX_HTML],
|
|
424
|
+
['postcss.config.cjs', TEMPLATE_POSTCSS],
|
|
425
|
+
['.gitignore', TEMPLATE_GITIGNORE],
|
|
426
|
+
['src/css/app.sass', TEMPLATE_CSS_STUB],
|
|
427
|
+
['src/i18n/index.js', TEMPLATE_I18N_INDEX],
|
|
428
|
+
['src/i18n/languages/en-US.hjson', TEMPLATE_I18N_HJSON],
|
|
429
|
+
['src/pages/index.js', TEMPLATE_PAGES_INDEX],
|
|
430
|
+
['src/pages/boot.js', TEMPLATE_PAGES_BOOT],
|
|
431
|
+
['src/pages/@/BootPage.vue', TEMPLATE_BOOT_PAGE],
|
|
432
|
+
['src/pages/@/404Page.vue', TEMPLATE_404_PAGE],
|
|
433
|
+
['src/pages/getting-started/en-US/overview.md', TEMPLATE_GETTING_STARTED_MD]
|
|
434
|
+
]
|
|
435
|
+
|
|
436
|
+
for (const [filePath, content] of files) {
|
|
437
|
+
writeFileSync(resolve(projectDir, filePath), content, 'utf-8')
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
console.log(' Project structure:')
|
|
441
|
+
console.log(` ${name}/`)
|
|
442
|
+
console.log(' ├── docsector.config.js')
|
|
443
|
+
console.log(' ├── quasar.config.js')
|
|
444
|
+
console.log(' ├── package.json')
|
|
445
|
+
console.log(' ├── index.html')
|
|
446
|
+
console.log(' ├── postcss.config.cjs')
|
|
447
|
+
console.log(' ├── .gitignore')
|
|
448
|
+
console.log(' ├── public/')
|
|
449
|
+
console.log(' │ └── images/')
|
|
450
|
+
console.log(' └── src/')
|
|
451
|
+
console.log(' ├── css/')
|
|
452
|
+
console.log(' │ └── app.sass')
|
|
453
|
+
console.log(' ├── i18n/')
|
|
454
|
+
console.log(' │ ├── index.js')
|
|
455
|
+
console.log(' │ └── languages/')
|
|
456
|
+
console.log(' │ └── en-US.hjson')
|
|
457
|
+
console.log(' └── pages/')
|
|
458
|
+
console.log(' ├── index.js')
|
|
459
|
+
console.log(' ├── boot.js')
|
|
460
|
+
console.log(' ├── @/')
|
|
461
|
+
console.log(' │ ├── BootPage.vue')
|
|
462
|
+
console.log(' │ └── 404Page.vue')
|
|
463
|
+
console.log(' └── getting-started/')
|
|
464
|
+
console.log(' └── en-US/')
|
|
465
|
+
console.log(' └── overview.md')
|
|
466
|
+
|
|
467
|
+
console.log('\n Next steps:\n')
|
|
468
|
+
console.log(` cd ${name}`)
|
|
469
|
+
console.log(' npm install')
|
|
470
|
+
console.log(' npx docsector dev')
|
|
471
|
+
console.log('')
|
|
472
|
+
console.log(' Then open http://localhost:8181 in your browser.')
|
|
473
|
+
console.log('')
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// =============================================================================
|
|
477
|
+
// Command dispatcher
|
|
478
|
+
// =============================================================================
|
|
479
|
+
|
|
93
480
|
switch (command) {
|
|
481
|
+
case 'init':
|
|
482
|
+
initProject(args[1])
|
|
483
|
+
break
|
|
484
|
+
|
|
94
485
|
case 'dev': {
|
|
95
486
|
const portIdx = args.indexOf('--port')
|
|
96
487
|
const extraArgs = []
|
package/package.json
CHANGED
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@docsector/docsector-reader",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "A documentation rendering engine built with Vue 3, Quasar v2 and Vite. Transform Markdown into beautiful, navigable documentation sites.",
|
|
5
5
|
"productName": "Docsector Reader",
|
|
6
6
|
"author": "Rodrigo de Araujo Vieira",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"private": false,
|
|
9
|
+
"readmeFilename": "README.md",
|
|
9
10
|
"type": "module",
|
|
10
11
|
"main": "src/index.js",
|
|
11
12
|
"exports": {
|
|
12
13
|
".": "./src/index.js",
|
|
13
|
-
"./config": "./docsector.config.js"
|
|
14
|
+
"./config": "./docsector.config.js",
|
|
15
|
+
"./quasar-factory": "./src/quasar.factory.js",
|
|
16
|
+
"./i18n": "./src/i18n/helpers.js",
|
|
17
|
+
"./boot/store": "./src/boot/store.js",
|
|
18
|
+
"./boot/QZoom": "./src/boot/QZoom.js",
|
|
19
|
+
"./boot/i18n": "./src/boot/i18n.js",
|
|
20
|
+
"./boot/axios": "./src/boot/axios.js",
|
|
21
|
+
"./src/css/*": "./src/css/*"
|
|
14
22
|
},
|
|
15
23
|
"bin": {
|
|
16
|
-
"docsector": "
|
|
24
|
+
"docsector": "bin/docsector.js"
|
|
17
25
|
},
|
|
18
26
|
"files": [
|
|
19
27
|
"bin/",
|
|
@@ -63,7 +71,11 @@
|
|
|
63
71
|
"vue": "^3.5.13",
|
|
64
72
|
"vue-i18n": "^9.0.0",
|
|
65
73
|
"vue-router": "^4.0.0",
|
|
66
|
-
"vuex": "^4.0.1"
|
|
74
|
+
"vuex": "^4.0.1",
|
|
75
|
+
"hjson": "^3.2.2",
|
|
76
|
+
"markdown-it": "^13.0.1",
|
|
77
|
+
"markdown-it-attrs": "^4.1.6",
|
|
78
|
+
"prismjs": "^1.27.0"
|
|
67
79
|
},
|
|
68
80
|
"devDependencies": {
|
|
69
81
|
"@quasar/app-vite": "^2.1.0",
|
|
@@ -75,11 +87,7 @@
|
|
|
75
87
|
"eslint-plugin-n": "^15.0.0",
|
|
76
88
|
"eslint-plugin-promise": "^6.0.0",
|
|
77
89
|
"eslint-plugin-vue": "^9.0.0",
|
|
78
|
-
"
|
|
79
|
-
"markdown-it": "^13.0.1",
|
|
80
|
-
"markdown-it-attrs": "^4.1.6",
|
|
81
|
-
"prettier": "^2.5.1",
|
|
82
|
-
"prismjs": "^1.27.0"
|
|
90
|
+
"prettier": "^2.5.1"
|
|
83
91
|
},
|
|
84
92
|
"browserslist": [
|
|
85
93
|
"last 10 Chrome versions",
|
|
@@ -93,7 +101,7 @@
|
|
|
93
101
|
"last 5 Opera versions"
|
|
94
102
|
],
|
|
95
103
|
"engines": {
|
|
96
|
-
"node": "^20 || ^18",
|
|
104
|
+
"node": "^22 || ^20 || ^18",
|
|
97
105
|
"npm": ">= 9"
|
|
98
106
|
}
|
|
99
107
|
}
|
package/quasar.config.js
CHANGED
|
@@ -1,117 +1,10 @@
|
|
|
1
1
|
/* eslint-env node */
|
|
2
2
|
|
|
3
3
|
import { configure } from 'quasar/wrappers'
|
|
4
|
-
import {
|
|
5
|
-
import { fileURLToPath } from 'url'
|
|
6
|
-
import { dirname, resolve } from 'path'
|
|
7
|
-
import HJSON from 'hjson'
|
|
8
|
-
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url)
|
|
10
|
-
const __dirname = dirname(__filename)
|
|
4
|
+
import { createQuasarConfig } from './src/quasar.factory.js'
|
|
11
5
|
|
|
12
6
|
export default configure((/* ctx */) => {
|
|
13
|
-
return {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
'QZoom',
|
|
17
|
-
'i18n',
|
|
18
|
-
'axios'
|
|
19
|
-
],
|
|
20
|
-
|
|
21
|
-
css: [
|
|
22
|
-
'app.sass'
|
|
23
|
-
],
|
|
24
|
-
|
|
25
|
-
extras: [
|
|
26
|
-
'fontawesome-v5',
|
|
27
|
-
'roboto-font',
|
|
28
|
-
'material-icons'
|
|
29
|
-
],
|
|
30
|
-
|
|
31
|
-
build: {
|
|
32
|
-
target: {
|
|
33
|
-
browser: ['es2022', 'firefox115', 'chrome115', 'safari14'],
|
|
34
|
-
node: 'node20'
|
|
35
|
-
},
|
|
36
|
-
|
|
37
|
-
vueRouterMode: 'history',
|
|
38
|
-
|
|
39
|
-
vitePlugins: [
|
|
40
|
-
// HJSON loader plugin
|
|
41
|
-
{
|
|
42
|
-
name: 'vite-plugin-hjson',
|
|
43
|
-
transform (code, id) {
|
|
44
|
-
if (id.endsWith('.hjson')) {
|
|
45
|
-
const parsed = HJSON.parse(readFileSync(id, 'utf-8'))
|
|
46
|
-
return {
|
|
47
|
-
code: `export default ${JSON.stringify(parsed, null, 2)};`,
|
|
48
|
-
map: null
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
],
|
|
54
|
-
|
|
55
|
-
extendViteConf (viteConf) {
|
|
56
|
-
viteConf.resolve = viteConf.resolve || {}
|
|
57
|
-
viteConf.resolve.alias = viteConf.resolve.alias || {}
|
|
58
|
-
viteConf.resolve.alias['docsector.config.js'] = resolve(__dirname, 'docsector.config.js')
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
|
|
62
|
-
devServer: {
|
|
63
|
-
port: 8181,
|
|
64
|
-
open: false
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
framework: {
|
|
68
|
-
config: {},
|
|
69
|
-
lang: 'en-US',
|
|
70
|
-
plugins: [
|
|
71
|
-
'LocalStorage', 'SessionStorage'
|
|
72
|
-
]
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
animations: ['zoomIn', 'zoomOut'],
|
|
76
|
-
|
|
77
|
-
pwa: {
|
|
78
|
-
workboxMode: 'GenerateSW',
|
|
79
|
-
manifest: {
|
|
80
|
-
name: 'Docsector Documentation System',
|
|
81
|
-
short_name: 'Docsector Docs',
|
|
82
|
-
description: 'Streamline your documentation process with Docsector.',
|
|
83
|
-
display: 'standalone',
|
|
84
|
-
orientation: 'portrait',
|
|
85
|
-
background_color: '#ffffff',
|
|
86
|
-
theme_color: '#655529',
|
|
87
|
-
icons: [
|
|
88
|
-
{
|
|
89
|
-
src: 'icons/icon-128x128.png',
|
|
90
|
-
sizes: '128x128',
|
|
91
|
-
type: 'image/png'
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
src: 'icons/icon-192x192.png',
|
|
95
|
-
sizes: '192x192',
|
|
96
|
-
type: 'image/png'
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
src: 'icons/icon-256x256.png',
|
|
100
|
-
sizes: '256x256',
|
|
101
|
-
type: 'image/png'
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
src: 'icons/icon-384x384.png',
|
|
105
|
-
sizes: '384x384',
|
|
106
|
-
type: 'image/png'
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
src: 'icons/icon-512x512.png',
|
|
110
|
-
sizes: '512x512',
|
|
111
|
-
type: 'image/png'
|
|
112
|
-
}
|
|
113
|
-
]
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
7
|
+
return createQuasarConfig({
|
|
8
|
+
projectRoot: import.meta.dirname
|
|
9
|
+
})
|
|
117
10
|
})
|
package/src/components/DH1.vue
CHANGED
|
@@ -3,7 +3,7 @@ import { computed, onMounted, onUpdated } from 'vue'
|
|
|
3
3
|
import { useStore } from 'vuex'
|
|
4
4
|
import { useI18n } from "vue-i18n";
|
|
5
5
|
|
|
6
|
-
import useNavigator from '
|
|
6
|
+
import useNavigator from '../composables/useNavigator'
|
|
7
7
|
|
|
8
8
|
const props = defineProps({
|
|
9
9
|
id: {
|
package/src/components/DH2.vue
CHANGED
package/src/components/DH3.vue
CHANGED