nibula 1.5.3 → 1.6.1

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 (46) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +2 -0
  3. package/bin/create.js +1 -1
  4. package/bin/delegate.js +58 -0
  5. package/bin/nibula.js +4 -19
  6. package/docs/Assistant CLI.md +3 -3
  7. package/docs/Components.md +68 -12
  8. package/docs/Creating pages.md +18 -13
  9. package/docs/Head and SEO.md +7 -6
  10. package/docs/Javascript.md +11 -9
  11. package/docs/Styling with SCSS.md +9 -11
  12. package/package.json +17 -22
  13. package/src/frontend/components/welcome.njk +1 -0
  14. package/src/frontend/data/pages.json +27 -0
  15. package/src/frontend/data/site.json +1 -28
  16. package/src/frontend/js/global.js +11 -0
  17. package/src/frontend/js/pages/404.js +2 -1
  18. package/src/frontend/js/pages/homepage.js +2 -1
  19. package/src/frontend/layouts/base.njk +23 -19
  20. package/src/frontend/scss/{modules/_global.scss → _global.scss} +9 -10
  21. package/src/frontend/scss/_root.scss +14 -0
  22. package/src/frontend/scss/modules/_animations.scss +1 -1
  23. package/src/frontend/scss/modules/_footer.scss +2 -1
  24. package/src/frontend/scss/modules/_header.scss +1 -2
  25. package/src/frontend/scss/modules/_mobile.scss +1 -1
  26. package/src/frontend/scss/modules/_typography.scss +5 -1
  27. package/src/frontend/scss/pages/404.scss +2 -2
  28. package/src/frontend/scss/pages/homepage.scss +2 -2
  29. package/src/frontend/sitemap.njk +1 -1
  30. package/src/frontend/ts/global.ts +12 -0
  31. package/src/frontend/ts/pages/404.ts +2 -1
  32. package/src/frontend/ts/pages/homepage.ts +2 -1
  33. package/tools/cli/ui.js +17 -3
  34. package/tools/config/messages.json +10 -8
  35. package/tools/config/settings.json +2 -6
  36. package/tools/lib/pageActions.js +8 -5
  37. package/tools/lib/pagesData.js +88 -0
  38. package/tools/lib/paths.js +8 -5
  39. package/tools/lib/validation.js +1 -0
  40. package/tools/res/templates/template.js +1 -1
  41. package/tools/res/templates/template.scss +3 -3
  42. package/tools/res/templates/template.ts +2 -1
  43. package/src/frontend/js/modules/global.js +0 -10
  44. package/src/frontend/scss/modules/_root.scss +0 -35
  45. package/src/frontend/ts/modules/global.ts +0 -10
  46. package/tools/lib/siteData.js +0 -89
@@ -1,10 +0,0 @@
1
- // import { initExampleModule } from "./exampleModule.js";
2
-
3
- function initGlobal() {
4
- // initExampleModule();
5
- }
6
-
7
- // Global logic here
8
-
9
- // Do not touch this line
10
- document.addEventListener('DOMContentLoaded', initGlobal);
@@ -1,35 +0,0 @@
1
- // NOTE: This file contains only Sass variables (no CSS output).
2
- // When imported with @import, all variables are global and may be
3
- // overwritten by other imported files with the same variable names.
4
- // Use @use 'root' as root; to avoid namespace collisions.
5
-
6
-
7
- //==========================
8
- // STRUCTURE
9
- //==========================
10
- $header-height: 10vh;
11
- $header-padding-y: 15px;
12
- $header-padding-x: 15px;
13
-
14
- //==========================
15
- // COLORS — BASE
16
- //==========================
17
- $primary: rgba(0, 0, 0, 0.5);
18
- $secondary: #a3dcff;
19
- $accent: #f9a8c9;
20
-
21
- //==========================
22
- // COLORS — NEUTRALS
23
- //==========================
24
- $white: #ffffff;
25
- $light: #f5f5f5;
26
- $muted: #888888;
27
- $dark: #2d2d2d;
28
-
29
- //==========================
30
- // COLORS — SEMANTIC
31
- //==========================
32
- $success: #198754;
33
- $warning: #ffc107;
34
- $danger: #dc3545;
35
- $info: #0dcaf0;
@@ -1,10 +0,0 @@
1
- // import { initExampleModule } from "./exampleModule";
2
-
3
- function initGlobal() {
4
- // initExampleModule();
5
- }
6
-
7
- // Global logic here
8
-
9
- // Do not touch this line
10
- document.addEventListener('DOMContentLoaded', initGlobal);
@@ -1,89 +0,0 @@
1
- const path = require('path');
2
- const settings = require('../config/settings.json');
3
- const { PATHS } = require('./paths');
4
- const { exists, readText, writeJson } = require('./files');
5
- const { log } = require('./logger');
6
- const { toCamelCase, toTitleCase, formatValue } = require('./text');
7
-
8
- const PAGES_KEY = settings.page.dataKeys.pages;
9
- const SEO_KEY = settings.page.dataKeys.seo;
10
- const TITLE_KEY = settings.page.dataKeys.title;
11
-
12
- function readSiteData() {
13
- if (!exists(PATHS.siteData)) {
14
- log('siteData.fileMissing', { path: PATHS.siteData });
15
- return null;
16
- }
17
- try {
18
- const data = JSON.parse(readText(PATHS.siteData));
19
- if (!data[PAGES_KEY] || typeof data[PAGES_KEY] !== 'object') data[PAGES_KEY] = {};
20
- return data;
21
- } catch (error) {
22
- log('siteData.parseFailed', { file: path.basename(PATHS.siteData), error: error.message });
23
- return null;
24
- }
25
- }
26
-
27
- function writeSiteData(data) {
28
- writeJson(PATHS.siteData, data);
29
- }
30
-
31
- function createRecord(pageName) {
32
- return formatValue(settings.page.defaultData, { title: toTitleCase(pageName) });
33
- }
34
-
35
- function addSiteData(pageName) {
36
- const data = readSiteData();
37
- if (!data) return;
38
-
39
- const camelName = toCamelCase(pageName);
40
- if (data[PAGES_KEY][camelName]) {
41
- log('siteData.recordExists', { name: camelName });
42
- return;
43
- }
44
-
45
- data[PAGES_KEY][camelName] = createRecord(pageName);
46
-
47
- writeSiteData(data);
48
- log('siteData.recordAdded', { name: camelName });
49
- }
50
-
51
- function removeSiteData(pageName) {
52
- const data = readSiteData();
53
- if (!data) return;
54
-
55
- const camelName = toCamelCase(pageName);
56
- if (!data[PAGES_KEY][camelName]) {
57
- log('siteData.recordMissing', { name: camelName });
58
- return;
59
- }
60
-
61
- delete data[PAGES_KEY][camelName];
62
- writeSiteData(data);
63
- log('siteData.recordRemoved', { name: camelName });
64
- }
65
-
66
- function renameSiteData(oldName, newName) {
67
- const data = readSiteData();
68
- if (!data) return;
69
-
70
- const oldCamelName = toCamelCase(oldName);
71
- const newCamelName = toCamelCase(newName);
72
-
73
- if (!data[PAGES_KEY][oldCamelName]) {
74
- log('siteData.recordMissing', { name: oldCamelName });
75
- return;
76
- }
77
- if (data[PAGES_KEY][newCamelName]) {
78
- log('siteData.recordExists', { name: newCamelName });
79
- return;
80
- }
81
-
82
- data[PAGES_KEY][newCamelName] = data[PAGES_KEY][oldCamelName];
83
- delete data[PAGES_KEY][oldCamelName];
84
-
85
- writeSiteData(data);
86
- log('siteData.recordRenamed', { source: oldCamelName, destination: newCamelName });
87
- }
88
-
89
- module.exports = { addSiteData, removeSiteData, renameSiteData };