@jxsuite/starters 1.2.2 → 1.6.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.
Files changed (82) hide show
  1. package/README.md +194 -0
  2. package/package.json +4 -2
  3. package/registry.json +16 -0
  4. package/sites/blog/document.schema.json +633 -115
  5. package/sites/blog/package.json +3 -3
  6. package/sites/blog/project.schema.json +523 -24
  7. package/sites/course/document.schema.json +633 -115
  8. package/sites/course/package.json +3 -3
  9. package/sites/course/project.schema.json +523 -24
  10. package/sites/event/document.schema.json +633 -115
  11. package/sites/event/package.json +3 -3
  12. package/sites/event/project.schema.json +523 -24
  13. package/sites/fitness-studio/document.schema.json +633 -115
  14. package/sites/fitness-studio/package.json +3 -3
  15. package/sites/fitness-studio/project.schema.json +523 -24
  16. package/sites/home-services/document.schema.json +633 -115
  17. package/sites/home-services/package.json +3 -3
  18. package/sites/home-services/project.schema.json +523 -24
  19. package/sites/museum/components/mu-band.json +92 -0
  20. package/sites/museum/components/mu-cta.json +101 -0
  21. package/sites/museum/components/mu-exhibition-card.json +191 -0
  22. package/sites/museum/components/mu-exhibition-row.json +237 -0
  23. package/sites/museum/components/mu-fact.json +64 -0
  24. package/sites/museum/components/mu-footer.json +256 -0
  25. package/sites/museum/components/mu-hero.json +236 -0
  26. package/sites/museum/components/mu-more.json +63 -0
  27. package/sites/museum/components/mu-oculus.json +44 -0
  28. package/sites/museum/components/mu-pagehead.json +105 -0
  29. package/sites/museum/components/mu-quote.json +49 -0
  30. package/sites/museum/content/exhibitions/ar/clay-salt-thread.md +18 -0
  31. package/sites/museum/content/exhibitions/ar/harbour-and-crane.md +18 -0
  32. package/sites/museum/content/exhibitions/ar/the-cartographers-room.md +18 -0
  33. package/sites/museum/content/exhibitions/en/clay-salt-thread.md +19 -0
  34. package/sites/museum/content/exhibitions/en/harbour-and-crane.md +19 -0
  35. package/sites/museum/content/exhibitions/en/the-cartographers-room.md +19 -0
  36. package/sites/museum/content/exhibitions/fr-CA/clay-salt-thread.md +18 -0
  37. package/sites/museum/content/exhibitions/fr-CA/harbour-and-crane.md +18 -0
  38. package/sites/museum/content/exhibitions/fr-CA/the-cartographers-room.md +18 -0
  39. package/sites/museum/document.schema.json +23513 -0
  40. package/sites/museum/layouts/ar.json +29 -0
  41. package/sites/museum/layouts/base.json +329 -0
  42. package/sites/museum/layouts/fr-ca.json +28 -0
  43. package/sites/museum/package.json +18 -0
  44. package/sites/museum/pages/about.json +378 -0
  45. package/sites/museum/pages/ar/about.json +314 -0
  46. package/sites/museum/pages/ar/exhibitions/[slug].json +211 -0
  47. package/sites/museum/pages/ar/exhibitions/index.json +103 -0
  48. package/sites/museum/pages/ar/index.json +246 -0
  49. package/sites/museum/pages/ar/visit.json +327 -0
  50. package/sites/museum/pages/exhibitions/[slug].json +200 -0
  51. package/sites/museum/pages/exhibitions/index.json +93 -0
  52. package/sites/museum/pages/fr-ca/a-propos.json +313 -0
  53. package/sites/museum/pages/fr-ca/expositions/[slug].json +215 -0
  54. package/sites/museum/pages/fr-ca/expositions/index.json +104 -0
  55. package/sites/museum/pages/fr-ca/index.json +246 -0
  56. package/sites/museum/pages/fr-ca/visite.json +328 -0
  57. package/sites/museum/pages/index.json +236 -0
  58. package/sites/museum/pages/visit.json +317 -0
  59. package/sites/museum/project.json +179 -0
  60. package/sites/museum/project.schema.json +996 -0
  61. package/sites/museum/public/favicon.svg +8 -0
  62. package/sites/nonprofit/document.schema.json +633 -115
  63. package/sites/nonprofit/package.json +3 -3
  64. package/sites/nonprofit/project.schema.json +523 -24
  65. package/sites/portfolio/document.schema.json +633 -115
  66. package/sites/portfolio/package.json +3 -3
  67. package/sites/portfolio/project.schema.json +523 -24
  68. package/sites/professional-firm/document.schema.json +633 -115
  69. package/sites/professional-firm/package.json +3 -3
  70. package/sites/professional-firm/project.schema.json +523 -24
  71. package/sites/real-estate/document.schema.json +633 -115
  72. package/sites/real-estate/package.json +3 -3
  73. package/sites/real-estate/project.schema.json +523 -24
  74. package/sites/restaurant/document.schema.json +633 -115
  75. package/sites/restaurant/package.json +3 -3
  76. package/sites/restaurant/project.schema.json +523 -24
  77. package/sites/saas/document.schema.json +633 -115
  78. package/sites/saas/package.json +3 -3
  79. package/sites/saas/project.schema.json +523 -24
  80. package/sites/shop/document.schema.json +633 -115
  81. package/sites/shop/package.json +3 -3
  82. package/sites/shop/project.schema.json +523 -24
@@ -0,0 +1,29 @@
1
+ {
2
+ "$layout": "./layouts/base.json",
3
+ "state": {
4
+ "brand": "أتريوم",
5
+ "skipLabel": "انتقل إلى المحتوى",
6
+ "railNote": "متحف المدينة للفنّ والتاريخ · مفتوح اليوم من ١٠:٠٠ إلى ١٨:٠٠",
7
+ "languageNavLabel": "اللغة",
8
+ "mainNavLabel": "التنقّل الرئيسيّ",
9
+ "navExhibitions": "المعارض",
10
+ "navVisit": "الزيارة",
11
+ "navAbout": "عن المتحف",
12
+ "homeHref": "/ar/",
13
+ "exhibitionsHref": "/ar/exhibitions/",
14
+ "visitHref": "/ar/visit/",
15
+ "aboutHref": "/ar/about/",
16
+ "footerTagline": "متحف بلديّ تحت سقف من زجاج: أربعة قرون من المرفأ وصنّاعه وخرائطه، محفوظة أمانةً لكلّ من يعيش في هذه المدينة.",
17
+ "footerVisitLabel": "أين تجدنا",
18
+ "footerAddress": "٢ رصيف الأهوسة، المرفأ القديم",
19
+ "footerHours": "من الثلاثاء إلى الأحد، من ١٠:٠٠ إلى ١٨:٠٠. مغلق يوم الاثنين.",
20
+ "footerReadLabel": "للقراءة",
21
+ "footerExhibitionsLink": "المعارض",
22
+ "footerVisitLink": "خطّط لزيارتك",
23
+ "footerAboutLink": "عن المتحف",
24
+ "footerContactLabel": "للتواصل",
25
+ "footerLegal": "© ٢٠٢٦ أتريوم — متحف المدينة للفنّ والتاريخ",
26
+ "footerCredit": "متحف بلديّ، الدخول إليه مجّانيّ، بثلاث لغات."
27
+ },
28
+ "children": [{ "tagName": "slot" }]
29
+ }
@@ -0,0 +1,329 @@
1
+ {
2
+ "tagName": "div",
3
+ "$elements": [
4
+ {
5
+ "$ref": "../components/mu-footer.json"
6
+ }
7
+ ],
8
+ "state": {
9
+ "brand": "Atrium",
10
+ "skipLabel": "Skip to content",
11
+ "railNote": "City Museum of Art & History · Open today 10:00–18:00",
12
+ "languageNavLabel": "Language",
13
+ "mainNavLabel": "Main",
14
+ "navExhibitions": "Exhibitions",
15
+ "navVisit": "Visit",
16
+ "navAbout": "About",
17
+ "homeHref": "/",
18
+ "exhibitionsHref": "/exhibitions/",
19
+ "visitHref": "/visit/",
20
+ "aboutHref": "/about/",
21
+ "footerTagline": "A city museum in a glass hall: four centuries of the harbour, its makers and its maps, held in trust for everyone who lives here.",
22
+ "footerVisitLabel": "Find us",
23
+ "footerAddress": "2 Quai des Écluses, Old Harbour",
24
+ "footerHours": "Tuesday to Sunday, 10:00–18:00. Closed Mondays.",
25
+ "footerReadLabel": "Read",
26
+ "footerExhibitionsLink": "Exhibitions",
27
+ "footerVisitLink": "Plan your visit",
28
+ "footerAboutLink": "About the museum",
29
+ "footerContactLabel": "Contact",
30
+ "footerEmail": "bonjour@atrium.example",
31
+ "footerPhone": "+1 555 0140",
32
+ "footerLegal": "© 2026 Atrium — City Museum of Art & History",
33
+ "footerCredit": "A civic museum, free to enter, in three languages."
34
+ },
35
+ "style": {
36
+ "minHeight": "100vh",
37
+ "display": "flex",
38
+ "flexDirection": "column",
39
+ "backgroundColor": "var(--color-chalk)"
40
+ },
41
+ "children": [
42
+ {
43
+ "tagName": "a",
44
+ "attributes": {
45
+ "href": "#main"
46
+ },
47
+ "textContent": "${state.skipLabel}",
48
+ "style": {
49
+ "position": "absolute",
50
+ "insetBlockStart": "0.5rem",
51
+ "insetInlineStart": "0.5rem",
52
+ "zIndex": "100",
53
+ "backgroundColor": "var(--color-ink)",
54
+ "color": "var(--color-chalk)",
55
+ "fontFamily": "var(--font-label)",
56
+ "fontSize": "0.7rem",
57
+ "letterSpacing": "var(--label-tracking)",
58
+ "textTransform": "var(--label-case)",
59
+ "textDecoration": "none",
60
+ "padding": "0.6rem 1rem",
61
+ "transform": "translateY(-250%)",
62
+ ":focus": {
63
+ "transform": "translateY(0)"
64
+ }
65
+ }
66
+ },
67
+ {
68
+ "tagName": "header",
69
+ "style": {
70
+ "position": "sticky",
71
+ "insetBlockStart": "0",
72
+ "zIndex": "50",
73
+ "backgroundColor": "var(--color-card)",
74
+ "borderBlockEnd": "2px solid var(--color-ink)"
75
+ },
76
+ "children": [
77
+ {
78
+ "tagName": "div",
79
+ "style": {
80
+ "backgroundColor": "var(--color-ink)",
81
+ "color": "var(--color-chalk)"
82
+ },
83
+ "children": [
84
+ {
85
+ "tagName": "div",
86
+ "style": {
87
+ "maxWidth": "var(--max-width)",
88
+ "marginInline": "auto",
89
+ "paddingInline": "var(--gutter)",
90
+ "minHeight": "2.5rem",
91
+ "display": "flex",
92
+ "alignItems": "stretch",
93
+ "justifyContent": "space-between",
94
+ "gap": "1.5rem",
95
+ "fontFamily": "var(--font-label)",
96
+ "fontSize": "0.66rem",
97
+ "letterSpacing": "var(--label-tracking)",
98
+ "textTransform": "var(--label-case)"
99
+ },
100
+ "children": [
101
+ {
102
+ "tagName": "p",
103
+ "style": {
104
+ "margin": "0",
105
+ "alignSelf": "center",
106
+ "color": "rgba(231, 227, 218, 0.66)",
107
+ "@--md": {
108
+ "display": "none"
109
+ }
110
+ },
111
+ "textContent": "${state.railNote}"
112
+ },
113
+ {
114
+ "tagName": "nav",
115
+ "attributes": {
116
+ "aria-label": "${state.languageNavLabel}"
117
+ },
118
+ "style": {
119
+ "display": "flex",
120
+ "alignItems": "stretch",
121
+ "marginInlineStart": "auto"
122
+ },
123
+ "children": {
124
+ "$prototype": "Array",
125
+ "items": {
126
+ "$ref": "#/state/$page/alternates"
127
+ },
128
+ "map": {
129
+ "tagName": "a",
130
+ "lang": "${item.code}",
131
+ "attributes": {
132
+ "dir": "${item.dir}",
133
+ "href": "${item.url}",
134
+ "hreflang": "${item.code}",
135
+ "aria-current": "${item.current ? 'page' : 'false'}"
136
+ },
137
+ "textContent": "${item.label}",
138
+ "style": {
139
+ "display": "inline-flex",
140
+ "alignItems": "center",
141
+ "paddingInline": "0.85rem",
142
+ "paddingBlock": "0.7rem",
143
+ "textDecoration": "none",
144
+ "whiteSpace": "nowrap",
145
+ "transition": "color 0.15s, background-color 0.15s",
146
+ "color": "${item.current ? 'var(--color-chalk)' : 'rgba(231, 227, 218, 0.6)'}",
147
+ "backgroundColor": "${item.current ? 'rgba(231, 227, 218, 0.1)' : 'transparent'}",
148
+ "boxShadow": "${item.current ? 'inset 0 -2px 0 0 var(--color-chalk)' : 'none'}",
149
+ ":hover": {
150
+ "color": "var(--color-chalk)",
151
+ "backgroundColor": "rgba(231, 227, 218, 0.1)"
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ ]
158
+ }
159
+ ]
160
+ },
161
+ {
162
+ "tagName": "div",
163
+ "style": {
164
+ "maxWidth": "var(--max-width)",
165
+ "marginInline": "auto",
166
+ "paddingInline": "var(--gutter)",
167
+ "minHeight": "4.6rem",
168
+ "display": "flex",
169
+ "alignItems": "center",
170
+ "justifyContent": "space-between",
171
+ "gap": "1.5rem"
172
+ },
173
+ "children": [
174
+ {
175
+ "tagName": "a",
176
+ "attributes": {
177
+ "href": "${state.homeHref}"
178
+ },
179
+ "style": {
180
+ "display": "inline-flex",
181
+ "alignItems": "center",
182
+ "gap": "0.7rem",
183
+ "textDecoration": "none",
184
+ "color": "var(--color-ink)"
185
+ },
186
+ "children": [
187
+ {
188
+ "tagName": "span",
189
+ "attributes": {
190
+ "aria-hidden": "true"
191
+ },
192
+ "style": {
193
+ "width": "1.05rem",
194
+ "height": "1.05rem",
195
+ "borderRadius": "50%",
196
+ "backgroundColor": "var(--color-pigment)",
197
+ "flex": "0 0 auto"
198
+ }
199
+ },
200
+ {
201
+ "tagName": "span",
202
+ "style": {
203
+ "fontFamily": "var(--font-display)",
204
+ "fontSize": "1.55rem",
205
+ "fontWeight": "700",
206
+ "lineHeight": "1",
207
+ "letterSpacing": "var(--display-tracking)"
208
+ },
209
+ "textContent": "${state.brand}"
210
+ }
211
+ ]
212
+ },
213
+ {
214
+ "tagName": "nav",
215
+ "attributes": {
216
+ "aria-label": "${state.mainNavLabel}"
217
+ },
218
+ "style": {
219
+ "display": "flex",
220
+ "alignItems": "center",
221
+ "gap": "1.9rem",
222
+ "fontFamily": "var(--font-label)",
223
+ "fontSize": "0.7rem",
224
+ "letterSpacing": "var(--label-tracking)",
225
+ "textTransform": "var(--label-case)",
226
+ "@--sm": {
227
+ "gap": "1.1rem"
228
+ }
229
+ },
230
+ "children": [
231
+ {
232
+ "tagName": "a",
233
+ "attributes": {
234
+ "href": "${state.exhibitionsHref}"
235
+ },
236
+ "textContent": "${state.navExhibitions}",
237
+ "style": {
238
+ "color": "var(--color-ink)",
239
+ "textDecoration": "none",
240
+ "paddingBlock": "0.35rem",
241
+ "borderBlockEnd": "2px solid transparent",
242
+ "transition": "color 0.15s, border-color 0.15s",
243
+ ":hover": {
244
+ "color": "var(--color-pigment)",
245
+ "borderBlockEnd": "2px solid var(--color-pigment)"
246
+ }
247
+ }
248
+ },
249
+ {
250
+ "tagName": "a",
251
+ "attributes": {
252
+ "href": "${state.visitHref}"
253
+ },
254
+ "textContent": "${state.navVisit}",
255
+ "style": {
256
+ "color": "var(--color-ink)",
257
+ "textDecoration": "none",
258
+ "paddingBlock": "0.35rem",
259
+ "borderBlockEnd": "2px solid transparent",
260
+ "transition": "color 0.15s, border-color 0.15s",
261
+ ":hover": {
262
+ "color": "var(--color-pigment)",
263
+ "borderBlockEnd": "2px solid var(--color-pigment)"
264
+ }
265
+ }
266
+ },
267
+ {
268
+ "tagName": "a",
269
+ "attributes": {
270
+ "href": "${state.aboutHref}"
271
+ },
272
+ "textContent": "${state.navAbout}",
273
+ "style": {
274
+ "color": "var(--color-ink)",
275
+ "textDecoration": "none",
276
+ "paddingBlock": "0.35rem",
277
+ "borderBlockEnd": "2px solid transparent",
278
+ "@--sm": {
279
+ "display": "none"
280
+ },
281
+ "transition": "color 0.15s, border-color 0.15s",
282
+ ":hover": {
283
+ "color": "var(--color-pigment)",
284
+ "borderBlockEnd": "2px solid var(--color-pigment)"
285
+ }
286
+ }
287
+ }
288
+ ]
289
+ }
290
+ ]
291
+ }
292
+ ]
293
+ },
294
+ {
295
+ "tagName": "main",
296
+ "id": "main",
297
+ "style": {
298
+ "flex": "1"
299
+ },
300
+ "children": [
301
+ {
302
+ "tagName": "slot"
303
+ }
304
+ ]
305
+ },
306
+ {
307
+ "tagName": "mu-footer",
308
+ "$props": {
309
+ "brand": "${state.brand}",
310
+ "tagline": "${state.footerTagline}",
311
+ "visitLabel": "${state.footerVisitLabel}",
312
+ "address": "${state.footerAddress}",
313
+ "hours": "${state.footerHours}",
314
+ "readLabel": "${state.footerReadLabel}",
315
+ "exhibitionsLink": "${state.footerExhibitionsLink}",
316
+ "visitLink": "${state.footerVisitLink}",
317
+ "aboutLink": "${state.footerAboutLink}",
318
+ "contactLabel": "${state.footerContactLabel}",
319
+ "email": "${state.footerEmail}",
320
+ "phone": "${state.footerPhone}",
321
+ "legal": "${state.footerLegal}",
322
+ "credit": "${state.footerCredit}",
323
+ "exhibitionsHref": "${state.exhibitionsHref}",
324
+ "visitHref": "${state.visitHref}",
325
+ "aboutHref": "${state.aboutHref}"
326
+ }
327
+ }
328
+ ]
329
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "$layout": "./layouts/base.json",
3
+ "state": {
4
+ "skipLabel": "Aller au contenu",
5
+ "railNote": "Musée municipal d'art et d'histoire · Ouvert aujourd'hui de 10 h à 18 h",
6
+ "languageNavLabel": "Langue",
7
+ "mainNavLabel": "Principal",
8
+ "navExhibitions": "Expositions",
9
+ "navVisit": "Visite",
10
+ "navAbout": "À propos",
11
+ "homeHref": "/fr-ca/",
12
+ "exhibitionsHref": "/fr-ca/expositions/",
13
+ "visitHref": "/fr-ca/visite/",
14
+ "aboutHref": "/fr-ca/a-propos/",
15
+ "footerTagline": "Un musée municipal sous une halle de verre : quatre siècles de port, de métiers et de cartes, gardés en fiducie pour toutes celles et ceux qui vivent ici.",
16
+ "footerVisitLabel": "Nous trouver",
17
+ "footerAddress": "2, quai des Écluses, Vieux-Port",
18
+ "footerHours": "Du mardi au dimanche, de 10 h à 18 h. Fermé le lundi.",
19
+ "footerReadLabel": "À lire",
20
+ "footerExhibitionsLink": "Expositions",
21
+ "footerVisitLink": "Préparer sa visite",
22
+ "footerAboutLink": "À propos du musée",
23
+ "footerContactLabel": "Nous joindre",
24
+ "footerLegal": "© 2026 Atrium — Musée municipal d'art et d'histoire",
25
+ "footerCredit": "Un musée public, à entrée libre, en trois langues."
26
+ },
27
+ "children": [{ "tagName": "slot" }]
28
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "museum",
3
+ "private": true,
4
+ "description": "Atrium — a multilingual starter for a city museum or public gallery, in English, Canadian French and Arabic, with a per-locale exhibitions collection and a header language switcher built from $page.alternates.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "scripts": {
8
+ "build": "jx build",
9
+ "dev": "jx dev"
10
+ },
11
+ "dependencies": {
12
+ "@jxsuite/parser": "^1.5.2"
13
+ },
14
+ "devDependencies": {
15
+ "@jxsuite/compiler": "^2.0.3",
16
+ "@jxsuite/runtime": "^2.0.2"
17
+ }
18
+ }