@janga/norna 0.7.13 → 0.7.15
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 +15 -9
- package/bin/norna-cli.mjs +11 -4
- package/docs/README.md +71 -43
- package/docs/commands.md +34 -20
- package/docs/configuration.md +43 -62
- package/docs/content.md +34 -7
- package/docs/design/command-organization.md +15 -8
- package/docs/design/norna-diagram-design.md +6 -6
- package/docs/design/site-examples-structure.md +1 -1
- package/docs/engine-development.md +22 -9
- package/docs/getting-started.md +29 -16
- package/docs/how-to/embedded-site.md +1 -1
- package/docs/images-and-metadata.md +3 -3
- package/docs/local-development.md +11 -3
- package/docs/public-files.md +105 -0
- package/docs/publishing.md +4 -8
- package/docs/routes.md +6 -7
- package/docs/site-files.md +144 -0
- package/docs/sitewide-content.md +47 -33
- package/docs/theme.md +37 -49
- package/docs/typography.md +25 -31
- package/examples/complete-sites/dog-shelter-multi-page/README.md +8 -0
- package/examples/complete-sites/{dog-shelter-single-page/site/config.md → dog-shelter-multi-page/site/config.yaml} +0 -2
- package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.yaml +6 -0
- package/examples/complete-sites/dog-shelter-multi-page/site/{theme.md → theme.yaml} +0 -2
- package/examples/complete-sites/dog-shelter-single-page/README.md +8 -0
- package/examples/complete-sites/{dog-shelter-multi-page/site/config.md → dog-shelter-single-page/site/config.yaml} +0 -2
- package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.yaml +6 -0
- package/examples/complete-sites/dog-shelter-single-page/site/{theme.md → theme.yaml} +0 -2
- package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
- package/examples/feature-demos/media-and-surfaces/README.md +1 -1
- package/examples/feature-demos/media-and-surfaces/site/{config.md → config.yaml} +0 -2
- package/examples/feature-demos/media-and-surfaces/site/content.md +2 -2
- package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/{route-content.md → content.md} +3 -7
- package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/theme.yaml +3 -0
- package/examples/feature-demos/media-and-surfaces/site/{sitewide-content.md → sitewide-content.yaml} +1 -3
- package/examples/feature-demos/media-and-surfaces/site/{theme.md → theme.yaml} +0 -2
- package/examples/feature-demos/sitewide-content/README.md +8 -0
- package/examples/feature-demos/sitewide-content/site/{config.md → config.yaml} +0 -2
- package/examples/feature-demos/sitewide-content/site/routes/010-identity/{route-content.md → content.md} +3 -3
- package/examples/feature-demos/sitewide-content/site/routes/020-notices/{route-content.md → content.md} +1 -1
- package/examples/feature-demos/sitewide-content/site/routes/030-footer/{route-content.md → content.md} +1 -1
- package/examples/feature-demos/sitewide-content/site/{sitewide-content.md → sitewide-content.yaml} +1 -11
- package/examples/feature-demos/sitewide-content/site/{theme.md → theme.yaml} +0 -2
- package/examples/feature-demos/theme-presets/site/config.yaml +1 -0
- package/examples/feature-demos/theme-presets/site/routes/010-portfolio/{theme.md → theme.yaml} +0 -2
- package/examples/feature-demos/theme-presets/site/routes/020-documentation/{theme.md → theme.yaml} +0 -2
- package/examples/feature-demos/theme-presets/site/routes/030-project/theme.yaml +1 -0
- package/examples/feature-demos/theme-presets/site/routes/040-statement/{route-content.md → content.md} +1 -1
- package/examples/feature-demos/theme-presets/site/routes/040-statement/{theme.md → theme.yaml} +0 -2
- package/examples/feature-demos/theme-presets/site/{sitewide-content.md → sitewide-content.yaml} +1 -3
- package/examples/feature-demos/theme-presets/site/theme.yaml +1 -0
- package/fixtures/basic/site/{config.md → config.yaml} +0 -2
- package/fixtures/basic/site/content.md +3 -3
- package/fixtures/basic/site/{sitewide-content.md → sitewide-content.yaml} +0 -2
- package/fixtures/basic/site/{theme.md → theme.yaml} +3 -6
- package/fixtures/content-model-v2/site/{config.md → config.yaml} +0 -2
- package/fixtures/content-model-v2/site/theme.yaml +4 -0
- package/package.json +10 -3
- package/schemas/config.schema.json +77 -0
- package/schemas/content-frontmatter.schema.json +81 -0
- package/schemas/manifest.json +9 -0
- package/schemas/sitewide-content.schema.json +215 -0
- package/schemas/theme.schema.json +1208 -0
- package/scripts/check-config.mjs +18 -11
- package/scripts/export-theme-preset.mjs +1 -1
- package/scripts/generate-schemas.mjs +283 -0
- package/scripts/init-site.mjs +22 -27
- package/scripts/lib/documentation-links.mjs +8 -0
- package/scripts/lib/editor-language-service.mjs +609 -0
- package/scripts/lib/example-sites.mjs +2 -2
- package/scripts/lib/git-status.mjs +7 -0
- package/scripts/lib/logo-assets.mjs +15 -10
- package/scripts/lib/norna-markdown-blocks.mjs +90 -11
- package/scripts/lib/presentation.mjs +23 -12
- package/scripts/lib/project-config.mjs +17 -41
- package/scripts/lib/public-asset-conventions.mjs +112 -0
- package/scripts/lib/schema-definitions.mjs +213 -0
- package/scripts/lib/schema-value-definitions.mjs +86 -0
- package/scripts/lib/site-content.mjs +24 -18
- package/scripts/lib/site-paths.mjs +4 -8
- package/scripts/lib/sitewide-content.mjs +24 -0
- package/scripts/lib/theme-config.mjs +15 -35
- package/scripts/lib/theme-presets.mjs +76 -66
- package/scripts/lib/typography.mjs +15 -15
- package/scripts/lib/yaml-config.mjs +50 -0
- package/scripts/list-theme-presets.mjs +15 -0
- package/scripts/release.mjs +84 -8
- package/scripts/show-typography.mjs +22 -46
- package/scripts/sync-content-sections.mjs +2 -2
- package/scripts/test-client-javascript.mjs +28 -28
- package/scripts/test-content-check.mjs +21 -26
- package/scripts/test-content-model-v2.mjs +72 -40
- package/scripts/test-documentation.mjs +70 -4
- package/scripts/test-editor-language-service.mjs +158 -0
- package/scripts/test-engine-commands.mjs +65 -34
- package/scripts/test-package-check.mjs +37 -30
- package/scripts/test-project-config.mjs +15 -20
- package/scripts/test-schemas.mjs +102 -0
- package/scripts/test-temporary-visibility.mjs +5 -13
- package/scripts/test-theme-presets.mjs +64 -37
- package/src/components/CardList.astro +2 -5
- package/src/components/ImageCarousel.astro +21 -21
- package/src/components/{GalleryGrid.astro → ImageStack.astro} +12 -12
- package/src/components/SectionNavigationScript.astro +28 -0
- package/src/components/SiteNavigation.astro +6 -5
- package/src/components/SitePage.astro +8 -8
- package/src/components/SiteSection.astro +18 -21
- package/src/content.config.ts +17 -209
- package/src/layouts/BaseLayout.astro +9 -9
- package/src/lib/{galleryImages.ts → imagePresentation.ts} +7 -7
- package/src/lib/routeThemes.ts +9 -29
- package/src/lib/sectionContent.ts +3 -3
- package/src/lib/sitePublicAssets.ts +5 -21
- package/src/styles/global.css +73 -73
- package/starters/basic/.github/workflows/deploy.yml +1 -1
- package/starters/basic/README.md +16 -13
- package/starters/basic/package.json +3 -2
- package/starters/basic/site/{config.md → config.yaml} +0 -2
- package/starters/basic/site/content.md +1 -1
- package/starters/basic/site/{sitewide-content.md → sitewide-content.yaml} +1 -3
- package/starters/basic/site/{theme.md → theme.yaml} +8 -15
- package/starters/project/.github/workflows/deploy.yml +1 -1
- package/starters/project/README.md +22 -15
- package/starters/project/package.json +3 -2
- package/starters/project/site/{config.md → config.yaml} +0 -2
- package/starters/project/site/{sitewide-content.md → sitewide-content.yaml} +1 -3
- package/starters/project/site/{theme.md → theme.yaml} +4 -8
- package/docs/site-structure.md +0 -98
- package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.md +0 -16
- package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.md +0 -16
- package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/theme.md +0 -8
- package/examples/feature-demos/theme-presets/site/config.md +0 -3
- package/examples/feature-demos/theme-presets/site/routes/030-project/theme.md +0 -3
- package/examples/feature-demos/theme-presets/site/theme.md +0 -3
- package/fixtures/content-model-v2/site/theme.md +0 -7
- package/scripts/lib/sitewide-config.mjs +0 -34
- package/src/components/MobileSectionNavigationScript.astro +0 -14
- /package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/{route-content.md → content.md} +0 -0
- /package/examples/complete-sites/dog-shelter-multi-page/site/routes/020-adopt/{route-content.md → content.md} +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/routes/010-media/{route-content.md → content.md} +0 -0
- /package/examples/feature-demos/theme-presets/site/routes/010-portfolio/{route-content.md → content.md} +0 -0
- /package/examples/feature-demos/theme-presets/site/routes/020-documentation/{route-content.md → content.md} +0 -0
- /package/examples/feature-demos/theme-presets/site/routes/030-project/{route-content.md → content.md} +0 -0
- /package/fixtures/content-model-v2/site/routes/010-guide/{route-content.md → content.md} +0 -0
- /package/starters/project/site/routes/010-guide/{route-content.md → content.md} +0 -0
package/src/styles/global.css
CHANGED
|
@@ -18,14 +18,14 @@
|
|
|
18
18
|
--font-serif: Georgia, 'Times New Roman', serif;
|
|
19
19
|
--page-width: 1180px;
|
|
20
20
|
--text-width: 680px;
|
|
21
|
-
--
|
|
22
|
-
--
|
|
23
|
-
--
|
|
24
|
-
--
|
|
25
|
-
--
|
|
26
|
-
--
|
|
27
|
-
--
|
|
28
|
-
--
|
|
21
|
+
--image-width: 900px;
|
|
22
|
+
--image-max-available-width-desktop: 100%;
|
|
23
|
+
--image-max-available-width-mobile: 100%;
|
|
24
|
+
--image-max-available-width: var(--image-max-available-width-desktop);
|
|
25
|
+
--image-layout-width: min(var(--image-width), var(--image-max-available-width));
|
|
26
|
+
--image-max-height-desktop: 74svh;
|
|
27
|
+
--image-max-height-mobile: 68svh;
|
|
28
|
+
--image-max-height: var(--image-max-height-desktop);
|
|
29
29
|
--nav-top-safety-inset: 0px;
|
|
30
30
|
|
|
31
31
|
--space-nav-to-first-section-desktop: clamp(1.875rem, 3vw, 2.75rem);
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
--space-heading-to-block-desktop: 0.75em;
|
|
39
39
|
--space-heading-to-block-mobile: 0.7em;
|
|
40
40
|
--space-heading-to-block: var(--space-heading-to-block-desktop);
|
|
41
|
-
--space-
|
|
42
|
-
--space-
|
|
43
|
-
--space-
|
|
41
|
+
--space-image-item-desktop: clamp(1.5rem, 3.5vw, 2.75rem);
|
|
42
|
+
--space-image-item-mobile: 2.75rem;
|
|
43
|
+
--space-image-item: var(--space-image-item-desktop);
|
|
44
44
|
--space-section-to-section-desktop: clamp(2.55rem, 4.2vw, 3.9rem);
|
|
45
45
|
--space-section-to-section-mobile: 2.25rem;
|
|
46
46
|
--space-section-to-section: var(--space-section-to-section-desktop);
|
|
@@ -625,7 +625,7 @@ ul {
|
|
|
625
625
|
}
|
|
626
626
|
|
|
627
627
|
.section-markdown > :last-child,
|
|
628
|
-
.
|
|
628
|
+
.image-meta :last-child {
|
|
629
629
|
margin-bottom: 0;
|
|
630
630
|
}
|
|
631
631
|
|
|
@@ -683,10 +683,10 @@ ul {
|
|
|
683
683
|
display: grid;
|
|
684
684
|
grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
|
|
685
685
|
gap: var(--card-list-gap, clamp(0.9rem, 2vw, 1.25rem));
|
|
686
|
-
width: min(100%, var(--card-list-width, var(--
|
|
686
|
+
width: min(100%, var(--card-list-width, min(56rem, var(--page-width))));
|
|
687
687
|
margin: 0 auto;
|
|
688
688
|
text-align: left;
|
|
689
|
-
--card-list-width: var(--
|
|
689
|
+
--card-list-width: min(56rem, var(--page-width));
|
|
690
690
|
--card-list-gap: clamp(0.9rem, 2vw, 1.25rem);
|
|
691
691
|
--card-list-item-gap: 0.85rem;
|
|
692
692
|
--card-list-padding: clamp(0.9rem, 2vw, 1.15rem);
|
|
@@ -699,7 +699,7 @@ ul {
|
|
|
699
699
|
|
|
700
700
|
.section-body > .section-reading-layout:not(:last-child),
|
|
701
701
|
.section-body > .section-markdown:not(:last-child),
|
|
702
|
-
.section-body > .
|
|
702
|
+
.section-body > :is(.image-stack, .managed-images):not(:last-child) {
|
|
703
703
|
margin-bottom: var(--space-content-block-gap);
|
|
704
704
|
}
|
|
705
705
|
|
|
@@ -739,7 +739,7 @@ ul {
|
|
|
739
739
|
}
|
|
740
740
|
|
|
741
741
|
.card-list-width-narrow {
|
|
742
|
-
--card-list-width: min(48rem, var(--
|
|
742
|
+
--card-list-width: min(48rem, var(--page-width));
|
|
743
743
|
}
|
|
744
744
|
|
|
745
745
|
.card-list-width-wide {
|
|
@@ -892,120 +892,120 @@ ul {
|
|
|
892
892
|
line-height: var(--section-body-line-height, 1.5);
|
|
893
893
|
}
|
|
894
894
|
|
|
895
|
-
.
|
|
895
|
+
:is(.image-stack, .managed-images) {
|
|
896
896
|
display: grid;
|
|
897
|
-
gap: var(--space-
|
|
897
|
+
gap: var(--space-image-item);
|
|
898
898
|
margin-top: 0;
|
|
899
899
|
}
|
|
900
900
|
|
|
901
|
-
.
|
|
901
|
+
.managed-image-item {
|
|
902
902
|
display: grid;
|
|
903
903
|
gap: 0.55rem;
|
|
904
904
|
align-content: start;
|
|
905
905
|
margin: 0;
|
|
906
906
|
}
|
|
907
907
|
|
|
908
|
-
.
|
|
908
|
+
.managed-image-frame {
|
|
909
909
|
display: grid;
|
|
910
|
-
width: min(100%, var(--
|
|
910
|
+
width: min(100%, var(--image-layout-width));
|
|
911
911
|
margin: 0 auto;
|
|
912
912
|
background: transparent;
|
|
913
913
|
place-items: center;
|
|
914
914
|
}
|
|
915
915
|
|
|
916
|
-
.
|
|
916
|
+
.managed-image {
|
|
917
917
|
display: block;
|
|
918
918
|
width: auto;
|
|
919
919
|
margin: 0 auto;
|
|
920
920
|
background: transparent;
|
|
921
921
|
height: auto;
|
|
922
922
|
max-width: 100%;
|
|
923
|
-
max-height: var(--
|
|
923
|
+
max-height: var(--image-max-height);
|
|
924
924
|
object-fit: contain;
|
|
925
925
|
}
|
|
926
926
|
|
|
927
|
-
.
|
|
927
|
+
.managed-image.managed-image-landscape {
|
|
928
928
|
width: 100%;
|
|
929
929
|
max-height: none;
|
|
930
930
|
}
|
|
931
931
|
|
|
932
|
-
.
|
|
932
|
+
.image-carousel {
|
|
933
933
|
position: relative;
|
|
934
934
|
outline: none;
|
|
935
935
|
}
|
|
936
936
|
|
|
937
|
-
.
|
|
937
|
+
.image-carousel:focus-visible {
|
|
938
938
|
outline: 2px solid currentColor;
|
|
939
939
|
outline-offset: 0.5rem;
|
|
940
940
|
}
|
|
941
941
|
|
|
942
|
-
.
|
|
942
|
+
.image-carousel-slide {
|
|
943
943
|
flex: 0 0 100%;
|
|
944
944
|
min-width: 0;
|
|
945
945
|
margin: 0;
|
|
946
946
|
}
|
|
947
947
|
|
|
948
|
-
.
|
|
948
|
+
.image-carousel-stage {
|
|
949
949
|
position: relative;
|
|
950
950
|
display: grid;
|
|
951
|
-
width: min(100%, var(--
|
|
952
|
-
max-height: var(--
|
|
951
|
+
width: min(100%, var(--image-layout-width));
|
|
952
|
+
max-height: var(--image-max-height);
|
|
953
953
|
margin: 0 auto;
|
|
954
|
-
aspect-ratio: var(--
|
|
954
|
+
aspect-ratio: var(--image-carousel-aspect-ratio, auto);
|
|
955
955
|
}
|
|
956
956
|
|
|
957
|
-
.
|
|
957
|
+
.image-carousel-viewport {
|
|
958
958
|
height: 100%;
|
|
959
959
|
}
|
|
960
960
|
|
|
961
|
-
.
|
|
961
|
+
.image-carousel-frame {
|
|
962
962
|
display: grid;
|
|
963
963
|
width: 100%;
|
|
964
964
|
height: 100%;
|
|
965
965
|
place-items: center;
|
|
966
966
|
}
|
|
967
967
|
|
|
968
|
-
.
|
|
968
|
+
.image-carousel[data-carousel-ready='true'] .image-carousel-viewport {
|
|
969
969
|
overflow: hidden;
|
|
970
970
|
}
|
|
971
971
|
|
|
972
|
-
.
|
|
972
|
+
.image-carousel[data-carousel-ready='true'] .image-carousel-slides {
|
|
973
973
|
display: flex;
|
|
974
974
|
height: 100%;
|
|
975
975
|
touch-action: pan-y pinch-zoom;
|
|
976
976
|
}
|
|
977
977
|
|
|
978
|
-
.
|
|
978
|
+
.image-carousel[data-carousel-ready='true'] .image-carousel-slide {
|
|
979
979
|
display: grid;
|
|
980
980
|
height: 100%;
|
|
981
981
|
align-content: start;
|
|
982
982
|
}
|
|
983
983
|
|
|
984
|
-
.
|
|
984
|
+
.image-carousel-frame .managed-image.managed-image-landscape {
|
|
985
985
|
width: 100%;
|
|
986
986
|
height: auto;
|
|
987
987
|
max-width: 100%;
|
|
988
988
|
max-height: 100%;
|
|
989
989
|
}
|
|
990
990
|
|
|
991
|
-
.
|
|
991
|
+
.image-carousel-frame .managed-image:not(.managed-image-landscape) {
|
|
992
992
|
width: auto;
|
|
993
993
|
height: 100%;
|
|
994
994
|
max-width: 100%;
|
|
995
995
|
max-height: 100%;
|
|
996
996
|
}
|
|
997
997
|
|
|
998
|
-
.
|
|
999
|
-
.
|
|
998
|
+
.image-carousel-button,
|
|
999
|
+
.image-carousel-position {
|
|
1000
1000
|
display: none;
|
|
1001
1001
|
}
|
|
1002
1002
|
|
|
1003
|
-
.
|
|
1004
|
-
.
|
|
1003
|
+
.image-carousel[data-carousel-ready='true'] .image-carousel-button,
|
|
1004
|
+
.image-carousel[data-carousel-ready='true'] .image-carousel-position {
|
|
1005
1005
|
display: grid;
|
|
1006
1006
|
}
|
|
1007
1007
|
|
|
1008
|
-
.
|
|
1008
|
+
.image-carousel-button {
|
|
1009
1009
|
position: absolute;
|
|
1010
1010
|
top: 50%;
|
|
1011
1011
|
z-index: 2;
|
|
@@ -1026,28 +1026,28 @@ ul {
|
|
|
1026
1026
|
transform: translateY(-50%);
|
|
1027
1027
|
}
|
|
1028
1028
|
|
|
1029
|
-
.
|
|
1030
|
-
.
|
|
1029
|
+
.image-carousel-button:hover:not(:disabled),
|
|
1030
|
+
.image-carousel-button:focus-visible:not(:disabled) {
|
|
1031
1031
|
background: currentColor;
|
|
1032
1032
|
color: var(--section-background-color, var(--color-page));
|
|
1033
1033
|
opacity: 1;
|
|
1034
1034
|
}
|
|
1035
1035
|
|
|
1036
|
-
.
|
|
1036
|
+
.image-carousel-button:disabled {
|
|
1037
1037
|
cursor: default;
|
|
1038
1038
|
opacity: 0;
|
|
1039
1039
|
pointer-events: none;
|
|
1040
1040
|
}
|
|
1041
1041
|
|
|
1042
|
-
.
|
|
1042
|
+
.image-carousel-button-previous {
|
|
1043
1043
|
left: 0.75rem;
|
|
1044
1044
|
}
|
|
1045
1045
|
|
|
1046
|
-
.
|
|
1046
|
+
.image-carousel-button-next {
|
|
1047
1047
|
right: 0.75rem;
|
|
1048
1048
|
}
|
|
1049
1049
|
|
|
1050
|
-
.
|
|
1050
|
+
.image-carousel-position {
|
|
1051
1051
|
position: absolute;
|
|
1052
1052
|
right: 0.75rem;
|
|
1053
1053
|
bottom: 0.75rem;
|
|
@@ -1063,38 +1063,38 @@ ul {
|
|
|
1063
1063
|
text-align: center;
|
|
1064
1064
|
}
|
|
1065
1065
|
|
|
1066
|
-
.
|
|
1067
|
-
width: min(100%, var(--
|
|
1066
|
+
.image-carousel-captions {
|
|
1067
|
+
width: min(100%, var(--image-layout-width), 72ch);
|
|
1068
1068
|
margin: 0 auto;
|
|
1069
1069
|
}
|
|
1070
1070
|
|
|
1071
|
-
.
|
|
1071
|
+
.image-carousel-caption {
|
|
1072
1072
|
margin-bottom: 0;
|
|
1073
1073
|
}
|
|
1074
1074
|
|
|
1075
|
-
.
|
|
1075
|
+
.image-carousel[data-carousel-ready='true'] .image-carousel-captions {
|
|
1076
1076
|
display: grid;
|
|
1077
1077
|
}
|
|
1078
1078
|
|
|
1079
|
-
.
|
|
1079
|
+
.image-carousel[data-carousel-ready='true'] .image-carousel-caption {
|
|
1080
1080
|
grid-area: 1 / 1;
|
|
1081
1081
|
visibility: hidden;
|
|
1082
1082
|
pointer-events: none;
|
|
1083
1083
|
}
|
|
1084
1084
|
|
|
1085
|
-
.
|
|
1085
|
+
.image-carousel[data-carousel-ready='true'] .image-carousel-caption.is-active {
|
|
1086
1086
|
visibility: visible;
|
|
1087
1087
|
pointer-events: auto;
|
|
1088
1088
|
}
|
|
1089
1089
|
|
|
1090
|
-
.
|
|
1091
|
-
width: min(100%, var(--
|
|
1090
|
+
.image-meta {
|
|
1091
|
+
width: min(100%, var(--image-layout-width), 72ch);
|
|
1092
1092
|
margin: var(--section-caption-spacing-before, 0.5em) auto 0;
|
|
1093
1093
|
font-size: var(--section-caption-font-size-desktop, 0.95rem);
|
|
1094
1094
|
text-align: var(--section-caption-align-desktop, center);
|
|
1095
1095
|
}
|
|
1096
1096
|
|
|
1097
|
-
.
|
|
1097
|
+
.image-details {
|
|
1098
1098
|
display: flex;
|
|
1099
1099
|
flex-wrap: wrap;
|
|
1100
1100
|
align-items: baseline;
|
|
@@ -1113,12 +1113,12 @@ ul {
|
|
|
1113
1113
|
--space-nav-to-first-section: var(--space-nav-to-first-section-mobile);
|
|
1114
1114
|
--space-content-block-gap: var(--space-content-block-gap-mobile);
|
|
1115
1115
|
--space-heading-to-block: var(--space-heading-to-block-mobile);
|
|
1116
|
-
--space-
|
|
1116
|
+
--space-image-item: var(--space-image-item-mobile);
|
|
1117
1117
|
--space-section-to-section: var(--space-section-to-section-mobile);
|
|
1118
1118
|
--space-final-section-bottom: var(--space-final-section-bottom-mobile);
|
|
1119
1119
|
--content-gutter: var(--content-gutter-mobile);
|
|
1120
|
-
--
|
|
1121
|
-
--
|
|
1120
|
+
--image-max-available-width: var(--image-max-available-width-mobile);
|
|
1121
|
+
--image-max-height: var(--image-max-height-mobile);
|
|
1122
1122
|
--site-top-anchor-offset: 6.25rem;
|
|
1123
1123
|
}
|
|
1124
1124
|
|
|
@@ -1286,12 +1286,12 @@ ul {
|
|
|
1286
1286
|
text-align: var(--section-body-align-mobile, var(--section-body-align-desktop, left));
|
|
1287
1287
|
}
|
|
1288
1288
|
|
|
1289
|
-
.
|
|
1289
|
+
.image-meta {
|
|
1290
1290
|
font-size: var(--section-caption-font-size-mobile, var(--section-caption-font-size-desktop, 0.95rem));
|
|
1291
1291
|
text-align: var(--section-caption-align-mobile, var(--section-caption-align-desktop, center));
|
|
1292
1292
|
}
|
|
1293
1293
|
|
|
1294
|
-
.
|
|
1294
|
+
.image-details {
|
|
1295
1295
|
justify-content: var(--section-caption-justify-mobile, var(--section-caption-justify-desktop, center));
|
|
1296
1296
|
}
|
|
1297
1297
|
|
|
@@ -1321,25 +1321,25 @@ ul {
|
|
|
1321
1321
|
display: block;
|
|
1322
1322
|
}
|
|
1323
1323
|
|
|
1324
|
-
.
|
|
1325
|
-
max-height: var(--
|
|
1324
|
+
.managed-image-item img {
|
|
1325
|
+
max-height: var(--image-max-height);
|
|
1326
1326
|
}
|
|
1327
1327
|
|
|
1328
|
-
.
|
|
1328
|
+
.image-carousel-stage {
|
|
1329
1329
|
aspect-ratio: auto;
|
|
1330
1330
|
}
|
|
1331
1331
|
|
|
1332
|
-
.
|
|
1332
|
+
.image-carousel-viewport {
|
|
1333
1333
|
width: 100%;
|
|
1334
1334
|
height: auto;
|
|
1335
|
-
aspect-ratio: var(--
|
|
1335
|
+
aspect-ratio: var(--image-carousel-aspect-ratio, auto);
|
|
1336
1336
|
}
|
|
1337
1337
|
|
|
1338
|
-
.
|
|
1338
|
+
.image-carousel[data-carousel-ready='true'] .image-carousel-button {
|
|
1339
1339
|
display: none;
|
|
1340
1340
|
}
|
|
1341
1341
|
|
|
1342
|
-
.
|
|
1342
|
+
.image-carousel-position {
|
|
1343
1343
|
position: absolute;
|
|
1344
1344
|
right: 0.5rem;
|
|
1345
1345
|
bottom: 0.5rem;
|
|
@@ -1350,11 +1350,11 @@ ul {
|
|
|
1350
1350
|
opacity: 0.88;
|
|
1351
1351
|
}
|
|
1352
1352
|
|
|
1353
|
-
.
|
|
1354
|
-
gap: var(--space-
|
|
1353
|
+
:is(.image-stack, .managed-images) {
|
|
1354
|
+
gap: var(--space-image-item);
|
|
1355
1355
|
}
|
|
1356
1356
|
|
|
1357
|
-
.
|
|
1357
|
+
.image-details {
|
|
1358
1358
|
padding: 0 0.25rem;
|
|
1359
1359
|
font-size: 1rem;
|
|
1360
1360
|
}
|
package/starters/basic/README.md
CHANGED
|
@@ -6,19 +6,20 @@ This is a minimal site repository starter for `@janga/norna`.
|
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
8
|
npm install
|
|
9
|
-
npm run dev
|
|
9
|
+
npm run norna:dev
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
If the standard local port is blocked, start with:
|
|
13
13
|
|
|
14
14
|
```sh
|
|
15
|
-
npm run dev -- --kill
|
|
15
|
+
npm run norna:dev -- --kill
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
Edit shared
|
|
19
|
-
|
|
18
|
+
Edit the shared navigation label, logo settings, banners, and footer in
|
|
19
|
+
`site/sitewide-content.yaml`,
|
|
20
|
+
site-wide visual defaults in `site/theme.yaml`, homepage content and section
|
|
20
21
|
metadata in `site/content.md`, and technical settings such as URL and locale
|
|
21
|
-
in `site/config.
|
|
22
|
+
in `site/config.yaml`. Keep source images under `site/images/<section-id>/`
|
|
22
23
|
and static public files under `site/public/`. The image folder name should
|
|
23
24
|
match the section id in Markdown, for example `## Work {#work}` uses
|
|
24
25
|
`site/images/work/`.
|
|
@@ -27,9 +28,7 @@ For a GitHub Pages project site without a custom domain, include the repository
|
|
|
27
28
|
path in the public URL:
|
|
28
29
|
|
|
29
30
|
```yaml
|
|
30
|
-
---
|
|
31
31
|
url: https://owner.github.io/repository-name/
|
|
32
|
-
---
|
|
33
32
|
```
|
|
34
33
|
|
|
35
34
|
Norna derives `/repository-name/` as the base path. Use a root URL such as
|
|
@@ -39,8 +38,8 @@ In GitHub repository settings, configure Pages to build from GitHub Actions.
|
|
|
39
38
|
|
|
40
39
|
Page width, side gutters, layout density, typography rhythm, image width, image
|
|
41
40
|
height limits, font, palettes, section surfaces, and site-wide typography are
|
|
42
|
-
configured in `site/theme.
|
|
43
|
-
own `theme.
|
|
41
|
+
configured in `site/theme.yaml`. A route may replace that visual theme with its
|
|
42
|
+
own `theme.yaml`.
|
|
44
43
|
|
|
45
44
|
Commit `package-lock.json` after the first install so GitHub Actions can use
|
|
46
45
|
`npm ci`.
|
|
@@ -50,15 +49,18 @@ Use `norna:*` scripts for norna-specific work:
|
|
|
50
49
|
```sh
|
|
51
50
|
npm run norna:content:check
|
|
52
51
|
npm run norna:sync
|
|
53
|
-
npm run norna:typography:
|
|
52
|
+
npm run norna:typography:profiles
|
|
54
53
|
npm run norna:typography:show
|
|
55
54
|
npm run norna:build
|
|
56
55
|
```
|
|
57
56
|
|
|
58
57
|
This keeps Norna commands separate from repository-specific build or publishing
|
|
59
58
|
commands in projects that embed a Norna site inside a larger GitHub project.
|
|
60
|
-
This
|
|
61
|
-
|
|
59
|
+
This standalone starter also keeps `npm run dev` and `npm run build` as aliases.
|
|
60
|
+
|
|
61
|
+
For direct `norna dev`, `norna check`, and `norna build` commands, install the
|
|
62
|
+
launcher globally with `npm install --global @janga/norna@latest`. The launcher
|
|
63
|
+
still selects this project's locally installed Norna version.
|
|
62
64
|
|
|
63
65
|
Use `npm run norna:engine:version` to inspect the installed engine and
|
|
64
66
|
`npm run norna:engine:update` to update it.
|
|
@@ -66,7 +68,8 @@ Use `npm run norna:engine:version` to inspect the installed engine and
|
|
|
66
68
|
Generic documentation lives in the `norna` repository:
|
|
67
69
|
|
|
68
70
|
- `docs/getting-started.md`
|
|
69
|
-
- `docs/site-
|
|
71
|
+
- `docs/site-files.md`
|
|
72
|
+
- `docs/public-files.md`
|
|
70
73
|
- `docs/content.md`
|
|
71
74
|
- `docs/theme.md`
|
|
72
75
|
- `docs/typography.md`
|
|
@@ -10,12 +10,13 @@
|
|
|
10
10
|
"norna:dev:status": "norna dev:status",
|
|
11
11
|
"norna:dev:logs": "norna dev:logs",
|
|
12
12
|
"norna:dev:stop": "norna dev:stop",
|
|
13
|
-
"norna:check": "
|
|
13
|
+
"norna:check": "norna check",
|
|
14
14
|
"norna:config:check": "norna config:check",
|
|
15
15
|
"norna:content:check": "norna content:check",
|
|
16
16
|
"norna:sync": "norna content:sync",
|
|
17
|
+
"norna:theme:presets": "norna theme:presets",
|
|
17
18
|
"norna:theme:export": "norna theme:export",
|
|
18
|
-
"norna:typography:
|
|
19
|
+
"norna:typography:profiles": "norna typography profiles",
|
|
19
20
|
"norna:typography:show": "norna typography show",
|
|
20
21
|
"norna:public": "norna site:public",
|
|
21
22
|
"norna:images": "norna images",
|
|
@@ -9,7 +9,7 @@ routes defined, the navigation menu will be a sticky bar with anchor links for
|
|
|
9
9
|
ease of use on phones etc. **Highlighted inline text** when a short
|
|
10
10
|
phrase needs emphasis
|
|
11
11
|
## Work {#work}
|
|
12
|
-
Add Norna
|
|
12
|
+
Add Norna image blocks in Markdown where the images should appear. Put
|
|
13
13
|
matching source images under `images/work/`.
|
|
14
14
|
|
|
15
15
|
````
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
---
|
|
2
1
|
# norna:start theme-help
|
|
3
2
|
# Site-wide visual defaults. Remove a value to use the engine default.
|
|
4
3
|
# Active values below are ordinary YAML; this marked comment block is only help text.
|
|
@@ -29,7 +28,7 @@
|
|
|
29
28
|
# imageGap:
|
|
30
29
|
# desktop: CSS length or clamp(), e.g. clamp(1.25rem, 2.8vw, 2rem)
|
|
31
30
|
# mobile: CSS length, e.g. 1.5rem
|
|
32
|
-
#
|
|
31
|
+
# images:
|
|
33
32
|
# width: CSS length, e.g. 900px
|
|
34
33
|
# maxAvailableWidthPercent:
|
|
35
34
|
# desktop: number from 1 through 100
|
|
@@ -39,7 +38,7 @@
|
|
|
39
38
|
# mobile: number from 1 through 100
|
|
40
39
|
# typography:
|
|
41
40
|
# fontFamily: CSS font-family stack
|
|
42
|
-
#
|
|
41
|
+
# profile: restrained | dense | reading | statement
|
|
43
42
|
# rhythm: compact | normal | airy
|
|
44
43
|
# overrides:
|
|
45
44
|
# headings:
|
|
@@ -81,11 +80,8 @@
|
|
|
81
80
|
# size: small | medium | large | xlarge
|
|
82
81
|
# lineHeight: number from 1 through 3
|
|
83
82
|
# spacingBefore: CSS length, e.g. 0.5em
|
|
84
|
-
#
|
|
85
|
-
#
|
|
86
|
-
# sectionSurfaces:
|
|
87
|
-
# mode: none | cycle
|
|
88
|
-
# sequence: [base, soft, emphasis]
|
|
83
|
+
# palette: dark # Alternatives: light, paper
|
|
84
|
+
# sectionSurfaces: [base, soft, emphasis]
|
|
89
85
|
# norna:end theme-help
|
|
90
86
|
layout:
|
|
91
87
|
density: normal
|
|
@@ -93,7 +89,7 @@ layout:
|
|
|
93
89
|
gutter:
|
|
94
90
|
desktop: clamp(1.25rem, 4vw, 3rem)
|
|
95
91
|
mobile: 1rem
|
|
96
|
-
|
|
92
|
+
images:
|
|
97
93
|
width: 900px
|
|
98
94
|
maxAvailableWidthPercent:
|
|
99
95
|
desktop: 100
|
|
@@ -103,10 +99,7 @@ gallery:
|
|
|
103
99
|
mobile: 68
|
|
104
100
|
typography:
|
|
105
101
|
fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
|
|
106
|
-
|
|
102
|
+
profile: restrained
|
|
107
103
|
rhythm: normal
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
sectionSurfaces:
|
|
111
|
-
mode: cycle
|
|
112
|
-
---
|
|
104
|
+
palette: dark # Alternatives: light, paper
|
|
105
|
+
sectionSurfaces: [base, soft, emphasis]
|
|
@@ -7,25 +7,25 @@ libraries, and similar project sites.
|
|
|
7
7
|
|
|
8
8
|
```sh
|
|
9
9
|
npm install
|
|
10
|
-
npm run dev
|
|
10
|
+
npm run norna:dev
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
If the standard local port is blocked, start with:
|
|
14
14
|
|
|
15
15
|
```sh
|
|
16
|
-
npm run dev -- --kill
|
|
16
|
+
npm run norna:dev -- --kill
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
## Files
|
|
20
20
|
|
|
21
|
-
- `site/config.
|
|
22
|
-
- `site/sitewide-content.
|
|
23
|
-
- `site/theme.
|
|
21
|
+
- `site/config.yaml`: public URL and optional language and smooth scrolling.
|
|
22
|
+
- `site/sitewide-content.yaml`: shared navigation identity, banners, and footer.
|
|
23
|
+
- `site/theme.yaml`: site-wide visual settings such as layout density, typography
|
|
24
24
|
rhythm, palettes, section surfaces, and typography.
|
|
25
25
|
- `site/content.md`: homepage title, sections, placeholders, project summary,
|
|
26
|
-
links, install command, example usage, benefits, next steps,
|
|
27
|
-
|
|
28
|
-
- `site/routes/010-guide/
|
|
26
|
+
links, install command, example usage, benefits, next steps, Norna blocks,
|
|
27
|
+
and license.
|
|
28
|
+
- `site/routes/010-guide/content.md`: short secondary page with realistic
|
|
29
29
|
project guide content.
|
|
30
30
|
- `site/public/robots.txt`: static public file copied into the built site.
|
|
31
31
|
|
|
@@ -37,14 +37,15 @@ GitHub Pages workflow uses `npm ci`.
|
|
|
37
37
|
|
|
38
38
|
1. Replace the project name, tagline, links, install command, example usage,
|
|
39
39
|
benefits, use cases, and license in `site/content.md`.
|
|
40
|
-
2. Replace the guide examples in `site/routes/010-guide/
|
|
40
|
+
2. Replace the guide examples in `site/routes/010-guide/content.md`, or
|
|
41
41
|
delete the route if the homepage is enough.
|
|
42
|
-
3. Edit `site/sitewide-content.
|
|
43
|
-
|
|
42
|
+
3. Edit `site/sitewide-content.yaml` for the navigation label, logo display,
|
|
43
|
+
banners, and footer.
|
|
44
|
+
4. Edit `site/theme.yaml` for layout density, typography rhythm, palette, section
|
|
44
45
|
surfaces, and typography.
|
|
45
46
|
5. Put any local source images in the image folder for the Markdown section
|
|
46
47
|
that references them, for example `site/images/intro/`.
|
|
47
|
-
6. Edit `site/config.
|
|
48
|
+
6. Edit `site/config.yaml` for the public URL and, when needed, language or smooth
|
|
48
49
|
scrolling. Deploy commands discover the GitHub repository and default branch.
|
|
49
50
|
7. Update `package.json` with the site's package name and keep
|
|
50
51
|
`package-lock.json` committed.
|
|
@@ -55,20 +56,26 @@ GitHub Pages workflow uses `npm ci`.
|
|
|
55
56
|
npm run norna:check
|
|
56
57
|
npm run norna:sync
|
|
57
58
|
npm run norna:typography:show
|
|
58
|
-
npm run build
|
|
59
|
+
npm run norna:build
|
|
59
60
|
```
|
|
60
61
|
|
|
62
|
+
The standalone aliases `npm run dev` and `npm run build` are also available.
|
|
63
|
+
For direct `norna dev`, `norna check`, and `norna build` commands, install the
|
|
64
|
+
launcher globally with `npm install --global @janga/norna@latest`; it delegates
|
|
65
|
+
to this project's locally installed Norna version.
|
|
66
|
+
|
|
61
67
|
To verify the same install path used by GitHub Pages:
|
|
62
68
|
|
|
63
69
|
```sh
|
|
64
70
|
npm ci
|
|
65
|
-
npm run build
|
|
71
|
+
npm run norna:build
|
|
66
72
|
```
|
|
67
73
|
|
|
68
74
|
Generic Norna documentation lives in the Norna repository:
|
|
69
75
|
|
|
70
76
|
- `docs/getting-started.md`
|
|
71
|
-
- `docs/site-
|
|
77
|
+
- `docs/site-files.md`
|
|
78
|
+
- `docs/public-files.md`
|
|
72
79
|
- `docs/content.md`
|
|
73
80
|
- `docs/theme.md`
|
|
74
81
|
- `docs/typography.md`
|