@janga/norna 0.7.1 → 0.7.3

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 (168) hide show
  1. package/README.md +32 -18
  2. package/astro.config.mjs +2 -0
  3. package/bin/norna-cli.mjs +175 -0
  4. package/bin/norna.mjs +149 -150
  5. package/docs/README.md +41 -22
  6. package/docs/commands.md +25 -12
  7. package/docs/configuration.md +38 -135
  8. package/docs/content.md +108 -265
  9. package/docs/{command-organization.md → design/command-organization.md} +64 -60
  10. package/docs/{site-examples-structure-note.md → design/site-examples-structure.md} +19 -24
  11. package/docs/engine-development.md +35 -7
  12. package/docs/getting-started.md +55 -26
  13. package/docs/images-and-metadata.md +1 -1
  14. package/docs/local-development.md +14 -1
  15. package/docs/publishing.md +24 -1
  16. package/docs/routes.md +90 -0
  17. package/docs/site-structure.md +18 -10
  18. package/docs/theme.md +292 -0
  19. package/docs/typography.md +144 -0
  20. package/examples/dog-gallery/.astro/collections/site.schema.json +802 -0
  21. package/examples/dog-gallery/.astro/collections/theme.schema.json +714 -0
  22. package/examples/dog-gallery/.astro/content-assets.mjs +4 -0
  23. package/examples/dog-gallery/.astro/content-modules.mjs +1 -0
  24. package/examples/dog-gallery/.astro/content.d.ts +175 -0
  25. package/examples/dog-gallery/.astro/data-store.json +1 -0
  26. package/examples/dog-gallery/.astro/dev-local.json +8 -0
  27. package/examples/dog-gallery/.astro/dev.json +13 -0
  28. package/examples/dog-gallery/.astro/dev.log +49 -0
  29. package/examples/dog-gallery/.astro/settings.json +5 -0
  30. package/examples/dog-gallery/.astro/types.d.ts +2 -0
  31. package/examples/dog-gallery/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +1 -0
  32. package/examples/dog-gallery/dist/_astro/SitePage.BFHZm5UG.css +1 -0
  33. package/examples/dog-gallery/dist/dog-care/index.html +15 -0
  34. package/examples/dog-gallery/dist/favicon.svg +7 -0
  35. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp +0 -0
  36. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp +0 -0
  37. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp +0 -0
  38. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp +0 -0
  39. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp +0 -0
  40. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp +0 -0
  41. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp +0 -0
  42. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp +0 -0
  43. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp +0 -0
  44. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp +0 -0
  45. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp +0 -0
  46. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp +0 -0
  47. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-480.webp +0 -0
  48. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-768.webp +0 -0
  49. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp +0 -0
  50. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp +0 -0
  51. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp +0 -0
  52. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp +0 -0
  53. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp +0 -0
  54. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp +0 -0
  55. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp +0 -0
  56. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp +0 -0
  57. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp +0 -0
  58. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp +0 -0
  59. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp +0 -0
  60. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp +0 -0
  61. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp +0 -0
  62. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp +0 -0
  63. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp +0 -0
  64. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp +0 -0
  65. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp +0 -0
  66. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp +0 -0
  67. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp +0 -0
  68. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-480.webp +0 -0
  69. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-768.webp +0 -0
  70. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp +0 -0
  71. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp +0 -0
  72. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp +0 -0
  73. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp +0 -0
  74. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp +0 -0
  75. package/examples/dog-gallery/dist/index.html +43 -0
  76. package/examples/dog-gallery/dist/robots.txt +2 -0
  77. package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +74 -0
  78. package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
  79. package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
  80. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  81. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  82. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  83. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  84. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  85. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  86. package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  87. package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  88. package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
  89. package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
  90. package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
  91. package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
  92. package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
  93. package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
  94. package/examples/dog-gallery/node_modules/.vite/deps/package.json +3 -0
  95. package/examples/dog-gallery/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  96. package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
  97. package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
  98. package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
  99. package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
  100. package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
  101. package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
  102. package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
  103. package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
  104. package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
  105. package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
  106. package/examples/dog-gallery/site/.norna/generated-images.json +226 -0
  107. package/examples/dog-gallery/site/config.mjs +67 -0
  108. package/examples/dog-gallery/site/content.md +168 -0
  109. package/examples/dog-gallery/site/images/black-dogs/black-puppy-meadow.png +0 -0
  110. package/examples/dog-gallery/site/images/black-dogs/photo-of-a-black-dog.jpg +0 -0
  111. package/examples/dog-gallery/site/images/brown-dogs/brown-dog.jpg +0 -0
  112. package/examples/dog-gallery/site/images/brown-dogs/dog-accompanies-master.jpg +0 -0
  113. package/examples/dog-gallery/site/images/golden-dogs/golden-retriever.jpg +0 -0
  114. package/examples/dog-gallery/site/images/golden-dogs/toller-puppy.jpg +0 -0
  115. package/examples/dog-gallery/site/images/white-dogs/white-cute-dog.jpg +0 -0
  116. package/examples/dog-gallery/site/images/white-dogs/white-puppy-garden.png +0 -0
  117. package/examples/dog-gallery/site/public/favicon.svg +7 -0
  118. package/examples/dog-gallery/site/public/robots.txt +2 -0
  119. package/examples/dog-gallery/site/routes/dog-care/route-content.md +49 -0
  120. package/examples/dog-gallery/site/theme.md +114 -0
  121. package/fixtures/basic/site/config.mjs +3 -22
  122. package/fixtures/basic/site/content.md +1 -1
  123. package/fixtures/basic/site/theme.md +7 -3
  124. package/package.json +10 -9
  125. package/scripts/check-config.mjs +4 -3
  126. package/scripts/deploy-site.mjs +3 -3
  127. package/scripts/dev-local.mjs +64 -15
  128. package/scripts/init-site.mjs +11 -9
  129. package/scripts/lib/frontmatter-yaml.mjs +85 -0
  130. package/scripts/lib/presentation.mjs +10 -11
  131. package/scripts/lib/project-config.mjs +113 -45
  132. package/scripts/lib/site-content.mjs +21 -2
  133. package/scripts/lib/site-paths.mjs +18 -3
  134. package/scripts/lib/theme-config.mjs +34 -0
  135. package/scripts/lib/typography.mjs +103 -23
  136. package/scripts/show-typography.mjs +202 -75
  137. package/scripts/sync-content-sections.mjs +6 -6
  138. package/scripts/test-cli-discovery.mjs +124 -0
  139. package/scripts/test-content-check.mjs +3 -4
  140. package/scripts/test-engine-commands.mjs +20 -6
  141. package/scripts/test-navigation.mjs +10 -6
  142. package/scripts/test-package-check.mjs +40 -11
  143. package/scripts/test-temporary-visibility.mjs +2 -3
  144. package/src/components/SiteNavigation.astro +7 -5
  145. package/src/components/SitePage.astro +5 -3
  146. package/src/components/SiteSection.astro +63 -29
  147. package/src/content.config.ts +64 -2
  148. package/src/layouts/BaseLayout.astro +19 -1
  149. package/src/lib/basePath.ts +21 -0
  150. package/src/lib/generatedImages.ts +8 -4
  151. package/src/lib/sectionContent.ts +6 -1
  152. package/src/lib/sitePublicAssets.ts +8 -1
  153. package/src/styles/global.css +59 -55
  154. package/starters/basic/.github/workflows/deploy.yml +3 -3
  155. package/starters/basic/README.md +30 -14
  156. package/starters/basic/package.json +3 -3
  157. package/starters/basic/site/config.mjs +4 -24
  158. package/starters/basic/site/content.md +44 -9
  159. package/starters/basic/site/theme.md +113 -16
  160. package/starters/project/.github/workflows/deploy.yml +65 -0
  161. package/starters/project/README.md +72 -0
  162. package/starters/project/package-lock.json +4296 -0
  163. package/starters/project/package.json +35 -0
  164. package/starters/project/site/config.mjs +43 -0
  165. package/starters/project/site/content.md +88 -0
  166. package/starters/project/site/public/robots.txt +2 -0
  167. package/starters/project/site/routes/guide/route-content.md +58 -0
  168. package/starters/project/site/theme.md +15 -0
@@ -1,21 +1,56 @@
1
1
  ---
2
- title: Example Gallery
2
+ title: Example Site
3
3
  description: Minimal norna starter site.
4
4
  sections:
5
5
  - id: intro
6
6
  presentation:
7
7
  typography:
8
8
  preset: statement
9
- gallery: []
10
9
  - id: work
11
- gallery: []
10
+ - id: lorem1
11
+ - id: lorem2
12
+ - id: lorem3
12
13
 
13
14
  ---
14
- ## Intro {#intro}
15
-
16
- This is a minimal starter site for norna. Use
17
- [highlighted inline text]{.highlight} when a short phrase needs emphasis.
18
15
 
16
+ ## Intro {#intro}
17
+ This is a minimal starter site for norna. Since this site doesn't have any
18
+ routes defined, the navigation menu will be a sticky bar with anchor links for
19
+ ease of use on phones etc. [Highlighted inline text]{.highlight} when a short
20
+ phrase needs emphasis
19
21
  ## Work {#work}
20
-
21
- Add gallery rows in frontmatter and matching source images under images/work/.
22
+ Add image rows in frontmatter and matching source images under images/work/.
23
+ ## What is Lorem Ipsum? {#lorem1}
24
+ Lorem Ipsum is simply dummy text of the printing and typesetting
25
+ industry. Lorem Ipsum has been the industry's standard dummy text ever
26
+ since 1966, when designers at Letraset and James Mosley, the librarian
27
+ at St Bride Printing Library in London, took a 1914 Cicero translation
28
+ and scrambled it to make dummy text for Letraset's Body Type
29
+ sheets. It has survived not only many decades, but also the leap into
30
+ electronic typesetting, remaining essentially unchanged. It was
31
+ popularised thanks to these sheets and more recently with desktop
32
+ publishing software like Aldus PageMaker and Microsoft Word including
33
+ versions of Lorem Ipsum.
34
+ ## Why do we use it? {#lorem2}
35
+ It is a long established fact that a reader will be distracted by the
36
+ readable content of a page when looking at its layout. The point of
37
+ using Lorem Ipsum is that it has a more-or-less normal distribution of
38
+ letters, as opposed to using 'Content here, content here', making it
39
+ look like readable English. Many desktop publishing packages and web
40
+ page editors now use Lorem Ipsum as their default model text, and a
41
+ search for 'lorem ipsum' will uncover many web sites still in their
42
+ infancy. Various versions have evolved over the years, sometimes by
43
+ accident, sometimes on purpose (injected humour and the like).
44
+ ## Where does it come from? {#lorem3}
45
+ Contrary to popular belief, Lorem Ipsum is not simply random text. It
46
+ has roots in a piece of classical Latin literature from 45 BC, making
47
+ it over 2000 years old. Richard McClintock, a Latin professor at
48
+ Hampden-Sydney College in Virginia, looked up one of the more obscure
49
+ Latin words, consectetur, from a Lorem Ipsum passage, and going
50
+ through the cites of the word in classical literature, discovered the
51
+ undoubtable source. Lorem Ipsum comes from sections 1.10.32 and
52
+ 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and
53
+ Evil) by Cicero, written in 45 BC. This book is a treatise on the
54
+ theory of ethics, very popular during the Renaissance. The first line
55
+ of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in
56
+ section 1.10.32
@@ -4,50 +4,147 @@
4
4
  # Active values below are ordinary YAML; this marked comment block is only help text.
5
5
  #
6
6
  # Available structure:
7
- # presentation:
8
- # backgroundColor: quoted hex color, e.g. "#000000"
9
- # textColor: quoted hex color, e.g. "#f7f4ee"
10
- # inlineStyles:
11
- # style-name:
12
- # color: quoted hex color
13
- # typography:
14
- # preset: quiet-gallery | compact-gallery | text-forward | statement
15
- # overrides:
16
- # heading:
7
+ # navigation:
8
+ # brand: site-wide brand/home text; defaults to the homepage title
9
+ # layout:
10
+ # pageWidth: CSS length, e.g. 1180px
11
+ # gutter:
12
+ # desktop: CSS length or clamp(), e.g. clamp(1.25rem, 4vw, 3rem)
13
+ # mobile: CSS length, e.g. 1rem
14
+ # spacing:
15
+ # firstSectionTop:
16
+ # desktop: CSS length or clamp(), e.g. clamp(1.875rem, 3vw, 2.75rem)
17
+ # mobile: CSS length, e.g. 1.375rem
18
+ # sectionGap:
19
+ # desktop: CSS length or clamp(), e.g. clamp(2.55rem, 4.2vw, 3.9rem)
20
+ # mobile: CSS length, e.g. 2.25rem
21
+ # finalSectionBottom:
22
+ # desktop: CSS length or clamp(), e.g. clamp(2.55rem, 4.2vw, 3.9rem)
23
+ # mobile: CSS length, e.g. 2.25rem
24
+ # sectionHeadingToBody:
25
+ # desktop: CSS length or clamp(), e.g. clamp(0.5625rem, 1.25vw, 0.75rem)
26
+ # mobile: CSS length, e.g. 0.4375rem
27
+ # bodyToImages:
28
+ # desktop: CSS length or clamp(), e.g. clamp(1.25rem, 2.5vw, 2rem)
29
+ # mobile: CSS length, e.g. 1.25rem
30
+ # imageGap:
31
+ # desktop: CSS length or clamp(), e.g. clamp(1.5rem, 3.5vw, 2.75rem)
32
+ # mobile: CSS length, e.g. 2.75rem
33
+ # subheadingTop:
34
+ # desktop: CSS length, e.g. 2rem
35
+ # mobile: CSS length, e.g. 1.6rem
36
+ # subheadingRuleTop:
37
+ # desktop: CSS length, e.g. 1rem
38
+ # mobile: CSS length, e.g. 0.8rem
39
+ # gallery:
40
+ # width: CSS length, e.g. 900px
41
+ # maxAvailableWidthPercent:
42
+ # desktop: number from 1 through 100
43
+ # mobile: number from 1 through 100
44
+ # maxAvailableHeightPercent:
45
+ # desktop: number from 1 through 100
46
+ # mobile: number from 1 through 100
47
+ # typography:
48
+ # fontFamily: CSS font-family stack
49
+ # preset: quiet-gallery | compact-gallery | text-forward | statement
50
+ # overrides:
51
+ # headings:
52
+ # h2:
17
53
  # align:
18
54
  # desktop: left | center | right
19
55
  # mobile: left | center | right
20
56
  # size: small | medium | large | xlarge
21
57
  # lineHeight: number from 1 through 3
22
58
  # spacing: CSS length, e.g. 0.65em
23
- # body:
59
+ # h3:
24
60
  # align:
25
61
  # desktop: left | center | right
26
62
  # mobile: left | center | right
27
63
  # size: small | medium | large | xlarge
28
64
  # lineHeight: number from 1 through 3
29
- # paragraphSpacing: CSS length, e.g. 0.85em
30
- # caption:
65
+ # spacing: CSS length, e.g. 0.9rem
66
+ # h4:
31
67
  # align:
32
68
  # desktop: left | center | right
33
69
  # mobile: left | center | right
34
70
  # size: small | medium | large | xlarge
35
71
  # lineHeight: number from 1 through 3
36
- # spacing: CSS length, e.g. 0.5em
72
+ # spacing: CSS length, e.g. 0.85rem
73
+ # body:
74
+ # align:
75
+ # desktop: left | center | right
76
+ # mobile: left | center | right
77
+ # size: small | medium | large | xlarge
78
+ # lineHeight: number from 1 through 3
79
+ # paragraphSpacing: CSS length, e.g. 0.85em
80
+ # caption:
81
+ # align:
82
+ # desktop: left | center | right
83
+ # mobile: left | center | right
84
+ # size: small | medium | large | xlarge
85
+ # lineHeight: number from 1 through 3
86
+ # spacing: CSS length, e.g. 0.5em
87
+ # presentation:
88
+ # backgroundColor: quoted hex color, e.g. "#000000"
89
+ # textColor: quoted hex color, e.g. "#f7f4ee"
90
+ # inlineStyles:
91
+ # style-name:
92
+ # color: quoted hex color
37
93
  # frame:
38
94
  # colors: presentation | theme
39
95
  # colors:
40
96
  # backgroundColor: quoted hex color
41
97
  # textColor: quoted hex color
42
98
  # norna:end theme-help
99
+ navigation:
100
+ brand: Example Site
101
+ layout:
102
+ pageWidth: 1180px
103
+ gutter:
104
+ desktop: clamp(1.25rem, 4vw, 3rem)
105
+ mobile: 1rem
106
+ spacing:
107
+ firstSectionTop:
108
+ desktop: clamp(1.875rem, 3vw, 2.75rem)
109
+ mobile: 1.375rem
110
+ sectionGap:
111
+ desktop: clamp(2.55rem, 4.2vw, 3.9rem)
112
+ mobile: 2.25rem
113
+ finalSectionBottom:
114
+ desktop: clamp(2.55rem, 4.2vw, 3.9rem)
115
+ mobile: 2.25rem
116
+ sectionHeadingToBody:
117
+ desktop: clamp(0.5625rem, 1.25vw, 0.75rem)
118
+ mobile: 0.4375rem
119
+ bodyToImages:
120
+ desktop: clamp(1.25rem, 2.5vw, 2rem)
121
+ mobile: 1.25rem
122
+ imageGap:
123
+ desktop: clamp(1.5rem, 3.5vw, 2.75rem)
124
+ mobile: 2.75rem
125
+ subheadingTop:
126
+ desktop: 2rem
127
+ mobile: 1.6rem
128
+ subheadingRuleTop:
129
+ desktop: 1rem
130
+ mobile: 0.8rem
131
+ gallery:
132
+ width: 900px
133
+ maxAvailableWidthPercent:
134
+ desktop: 100
135
+ mobile: 100
136
+ maxAvailableHeightPercent:
137
+ desktop: 74
138
+ mobile: 68
139
+ typography:
140
+ fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
141
+ preset: quiet-gallery
43
142
  presentation:
44
143
  backgroundColor: "#000000"
45
144
  textColor: "#f7f4ee"
46
145
  inlineStyles:
47
146
  highlight:
48
147
  color: "#ffd84d"
49
- typography:
50
- preset: quiet-gallery
51
148
  frame:
52
149
  colors: presentation
53
150
  ---
@@ -0,0 +1,65 @@
1
+ name: Deploy to GitHub Pages
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+ pages: write
12
+ id-token: write
13
+
14
+ concurrency:
15
+ group: github-pages
16
+ cancel-in-progress: false
17
+
18
+ jobs:
19
+ build:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - name: Checkout
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Setup Node
26
+ uses: actions/setup-node@v4
27
+ with:
28
+ node-version: 24.18.0
29
+ cache: npm
30
+
31
+ - name: Install image tools
32
+ run: sudo apt-get update && sudo apt-get install -y imagemagick
33
+
34
+ - name: Restore generated images
35
+ uses: actions/cache@v4
36
+ with:
37
+ path: site/.norna/public/images/generated
38
+ key: norna-images-${{ hashFiles('site/.norna/generated-images.json') }}
39
+ restore-keys: |
40
+ norna-images-
41
+
42
+ - name: Install dependencies
43
+ run: npm ci
44
+
45
+ - name: Build
46
+ run: npm run build
47
+
48
+ - name: Configure Pages
49
+ uses: actions/configure-pages@v5
50
+
51
+ - name: Upload Pages artifact
52
+ uses: actions/upload-pages-artifact@v3
53
+ with:
54
+ path: dist
55
+
56
+ deploy:
57
+ needs: build
58
+ runs-on: ubuntu-latest
59
+ environment:
60
+ name: github-pages
61
+ url: ${{ steps.deployment.outputs.page_url }}
62
+ steps:
63
+ - name: Deploy to GitHub Pages
64
+ id: deployment
65
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,72 @@
1
+ # Project Starter
2
+
3
+ This is a compact Norna starter for small open source projects, CLI tools,
4
+ libraries, and similar project sites.
5
+
6
+ ## Setup
7
+
8
+ ```sh
9
+ npm install
10
+ npm run dev
11
+ ```
12
+
13
+ If the standard local port is blocked, start with:
14
+
15
+ ```sh
16
+ npm run dev -- --kill
17
+ ```
18
+
19
+ ## Files
20
+
21
+ - `site/config.mjs`: technical settings such as URL, language labels, GitHub
22
+ repository, and deploy workflow.
23
+ - `site/theme.md`: site-wide visual settings such as brand text, colors,
24
+ frame colors, and inline text styles.
25
+ - `site/content.md`: homepage title, sections, project summary, links,
26
+ install command, example usage, features, and next steps.
27
+ - `site/routes/guide/route-content.md`: short secondary page with realistic
28
+ project guide content.
29
+ - `site/public/robots.txt`: static public file copied into the built site.
30
+
31
+ The starter intentionally does not include generated output, `node_modules`, or
32
+ a local Norna installation. It does include `package-lock.json` because the
33
+ GitHub Pages workflow uses `npm ci`.
34
+
35
+ ## Adapt The Starter
36
+
37
+ 1. Replace the project name, tagline, links, install command, example usage,
38
+ features, and use cases in `site/content.md`.
39
+ 2. Replace the guide examples in `site/routes/guide/route-content.md`, or
40
+ delete the route if the homepage is enough.
41
+ 3. Edit `site/theme.md` for brand name, colors, frame colors, and inline text
42
+ styles.
43
+ 4. Edit `site/config.mjs` for public URL, GitHub repository, footer text, and
44
+ deploy workflow name.
45
+ 5. Update `package.json` with the site's package name and keep
46
+ `package-lock.json` committed.
47
+
48
+ ## Common Commands
49
+
50
+ ```sh
51
+ npm run norna:check
52
+ npm run norna:typography:show
53
+ npm run build
54
+ ```
55
+
56
+ To verify the same install path used by GitHub Pages:
57
+
58
+ ```sh
59
+ npm ci
60
+ npm run build
61
+ ```
62
+
63
+ Generic Norna documentation lives in the Norna repository:
64
+
65
+ - `docs/getting-started.md`
66
+ - `docs/site-structure.md`
67
+ - `docs/content.md`
68
+ - `docs/theme.md`
69
+ - `docs/typography.md`
70
+ - `docs/routes.md`
71
+ - `docs/configuration.md`
72
+ - `docs/commands.md`