@fullstackunicorn/create-root 1.0.22 → 1.0.24

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 (121) hide show
  1. package/assets/root.fullstackunicorn.dev/assets/index.def.js +32 -4
  2. package/assets/root.fullstackunicorn.dev/assets/modules/sync.js +164 -302
  3. package/assets/root.fullstackunicorn.dev/assets/modules/sync.tools.js +39 -6
  4. package/assets/root.fullstackunicorn.dev/assets/package.md +9 -2
  5. package/assets/root.fullstackunicorn.dev/assets/webapp.runner.js +42 -1
  6. package/assets/root.fullstackunicorn.dev/frontend/base/account/AccountCard.js +1 -1
  7. package/assets/root.fullstackunicorn.dev/frontend/base/cookies/@use.js +5 -93
  8. package/assets/root.fullstackunicorn.dev/frontend/base/cookies/CookiesCard.js +1 -1
  9. package/assets/root.fullstackunicorn.dev/frontend/base/language/@use.js +4 -69
  10. package/assets/root.fullstackunicorn.dev/frontend/base/language/LanguageCard.js +1 -1
  11. package/assets/root.fullstackunicorn.dev/frontend/base/layout/Layout.pod.js +2 -2
  12. package/assets/root.fullstackunicorn.dev/frontend/base/legals/LegalCard.js +1 -1
  13. package/assets/root.fullstackunicorn.dev/frontend/base/legals/LegalsCard.js +1 -1
  14. package/assets/root.fullstackunicorn.dev/frontend/base/resources/@use.js +15 -0
  15. package/assets/root.fullstackunicorn.dev/frontend/base/router/@use.js +2 -1
  16. package/assets/root.fullstackunicorn.dev/frontend/base/theme/ThemeCard.js +1 -1
  17. package/assets/root.fullstackunicorn.dev/frontend/config.style.js +21 -9
  18. package/assets/root.fullstackunicorn.dev/frontend/features/legal/Legal.js +1 -1
  19. package/assets/root.fullstackunicorn.dev/frontend/imports/animated/Root.js +4 -8
  20. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Scrollable.js +7 -2
  21. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Viewport.js +29 -0
  22. package/assets/root.fullstackunicorn.dev/frontend/imports/head/Head.js +16 -26
  23. package/assets/root.fullstackunicorn.dev/frontend/modals/cookies/cookies.api.js +25 -0
  24. package/assets/root.fullstackunicorn.dev/frontend/modals/cookies/cookies.js +88 -0
  25. package/assets/root.fullstackunicorn.dev/frontend/modals/countries/countries.api.js +22 -0
  26. package/assets/root.fullstackunicorn.dev/frontend/modals/countries/countries.js +58 -37
  27. package/assets/root.fullstackunicorn.dev/frontend/modals/languages/languages.api.js +23 -0
  28. package/assets/root.fullstackunicorn.dev/frontend/modals/languages/languages.js +81 -0
  29. package/assets/root.fullstackunicorn.dev/frontend/modules/base/Bottom.js +10 -0
  30. package/assets/root.fullstackunicorn.dev/frontend/{panels/layout → modules/base}/Bottom.pod.js +1 -4
  31. package/assets/root.fullstackunicorn.dev/frontend/modules/base/ComingSoon.js +7 -0
  32. package/assets/root.fullstackunicorn.dev/frontend/modules/base/ComingSoon.pod.js +17 -0
  33. package/assets/root.fullstackunicorn.dev/frontend/{panels/error → modules/base}/ErrorPage.js +4 -4
  34. package/assets/root.fullstackunicorn.dev/frontend/{panels/error → modules/base}/ErrorPage.pod.js +7 -7
  35. package/assets/root.fullstackunicorn.dev/frontend/{panels/layout → modules/base}/PageTitle.js +1 -1
  36. package/assets/root.fullstackunicorn.dev/frontend/{panels/layout → modules/base}/PageTitle.pod.js +4 -6
  37. package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/cards/Account.js +9 -8
  38. package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/cards/Account.pod.js +28 -18
  39. package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/cards/Launcher.js +4 -4
  40. package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/cards/Launcher.pod.js +10 -11
  41. package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/cards/Linker.js +4 -4
  42. package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/cards/Linker.pod.js +11 -12
  43. package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/cards/Slider.js +8 -7
  44. package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/cards/Slider.pod.js +14 -14
  45. package/assets/root.fullstackunicorn.dev/frontend/{panels/wrapper/fixed → modules/layout}/Wrapper.js +2 -2
  46. package/assets/root.fullstackunicorn.dev/frontend/{panels/wrapper/fixed → modules/layout}/Wrapper.pod.js +1 -1
  47. package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors/actions → modules/modals/select}/Actions.js +1 -1
  48. package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors → modules/modals}/select/SelectPage.js +2 -2
  49. package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders → modules/modals}/slider/SliderPage.js +2 -2
  50. package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/page/PageScrollable.js +1 -1
  51. package/assets/root.fullstackunicorn.dev/frontend/modules/page/PageScrollable.pod.js +23 -0
  52. package/assets/root.fullstackunicorn.dev/frontend/modules/prose/@runs.js +52 -0
  53. package/assets/root.fullstackunicorn.dev/frontend/modules/prose/Prose.js +56 -0
  54. package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/prose/Prose.pod.js +2 -14
  55. package/assets/root.fullstackunicorn.dev/frontend/pages/@use.js +26 -11
  56. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Callout.api.js +9 -25
  57. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Callout.js +1 -1
  58. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Legal.api.js +16 -24
  59. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Legal.js +2 -2
  60. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Legals.api.js +14 -8
  61. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Legals.js +5 -5
  62. package/assets/root.fullstackunicorn.dev/frontend/pages/root/User.api.js +8 -11
  63. package/assets/root.fullstackunicorn.dev/frontend/pages/root/User.js +1 -1
  64. package/assets/root.fullstackunicorn.dev/frontend/pages/{app → scope}/Checkout.js +1 -1
  65. package/assets/root.fullstackunicorn.dev/frontend/pages/scope/Home.abs.js +18 -0
  66. package/assets/root.fullstackunicorn.dev/frontend/pages/scope/Home.api.js +15 -0
  67. package/assets/root.fullstackunicorn.dev/frontend/pages/scope/Home.js +24 -0
  68. package/assets/root.fullstackunicorn.dev/frontend/panels/{slider/Slider.js → slideshows/Slideshow.js} +34 -20
  69. package/assets/root.fullstackunicorn.dev/frontend/panels/slideshows/Slideshow.map.js +27 -0
  70. package/assets/root.fullstackunicorn.dev/frontend/panels/slideshows/Slideshow.md +90 -0
  71. package/assets/root.fullstackunicorn.dev/frontend/panels/{slider/Slider.pod.js → slideshows/Slideshow.pod.js} +14 -28
  72. package/assets/root.fullstackunicorn.dev/frontend/preloader/@use.js +4 -5
  73. package/assets/root.fullstackunicorn.dev/frontend/root/errors.root.js +1 -1
  74. package/assets/root.fullstackunicorn.dev/frontend/root/modals.root.js +8 -8
  75. package/assets/root.fullstackunicorn.dev/frontend/root/pages.scope.js +2 -2
  76. package/assets/root.fullstackunicorn.dev/frontend/root/preload.scope.js +1 -1
  77. package/assets/root.fullstackunicorn.dev/package.json +1 -1
  78. package/assets/root.fullstackunicorn.dev/workspace/config/tabulars_data_content/config/import.json +4 -26
  79. package/assets/root.fullstackunicorn.dev/workspace/config/tabulars_data_content/objs/A01.metadata.meta.json +72 -79
  80. package/assets/root.fullstackunicorn.dev/workspace/config/tabulars_data_content/objs/C01.home.data.json +25 -5
  81. package/assets/root.fullstackunicorn.dev/workspace/volume/data/lookups/cookies/en-US.json +3 -19
  82. package/assets/root.fullstackunicorn.dev/workspace/volume/data/lookups/cookies/it-IT.json +6 -22
  83. package/assets/root.fullstackunicorn.dev/workspace/volume/data/root/user/en-US.json +4 -6
  84. package/assets/root.fullstackunicorn.dev/workspace/volume/data/root/user/it-IT.json +5 -19
  85. package/modules/init.js +9 -5
  86. package/package.json +1 -1
  87. package/assets/root.fullstackunicorn.dev/frontend/pages/app/Home.abs.js +0 -11
  88. package/assets/root.fullstackunicorn.dev/frontend/pages/app/Home.api.js +0 -18
  89. package/assets/root.fullstackunicorn.dev/frontend/pages/app/Home.js +0 -23
  90. package/assets/root.fullstackunicorn.dev/frontend/panels/card/book/BookCard.js +0 -58
  91. package/assets/root.fullstackunicorn.dev/frontend/panels/card/book/BookCard.pod.js +0 -37
  92. package/assets/root.fullstackunicorn.dev/frontend/panels/card/book/BookProse.js +0 -22
  93. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Grid.js +0 -115
  94. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Grid.pod.js +0 -65
  95. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Item.js +0 -3
  96. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Item.pod.js +0 -50
  97. package/assets/root.fullstackunicorn.dev/frontend/panels/layout/Bottom.js +0 -12
  98. package/assets/root.fullstackunicorn.dev/frontend/panels/page/PageScrollable.pod.js +0 -85
  99. package/assets/root.fullstackunicorn.dev/frontend/panels/prose/@use.js +0 -21
  100. package/assets/root.fullstackunicorn.dev/frontend/panels/prose/Prose.js +0 -84
  101. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/popup/PopupModal.js +0 -54
  102. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/select/SelectModal.js +0 -52
  103. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Buy.js +0 -19
  104. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Buy.pod.js +0 -17
  105. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Shopper.js +0 -39
  106. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Shopper.pod.js +0 -187
  107. package/assets/root.fullstackunicorn.dev/frontend/panels/sliders/slider/SliderModal.js +0 -39
  108. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors/actions → modules/modals/select}/Actions.pod.js +0 -0
  109. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors → modules/modals}/select/SelectItem.js +0 -0
  110. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors → modules/modals}/select/SelectItem.pod.js +0 -0
  111. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors → modules/modals}/select/SelectPage.pod.js +0 -0
  112. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors/actions → modules/modals/select}/SelectPicked.js +0 -0
  113. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors/actions → modules/modals/select}/SelectPicked.pod.js +0 -0
  114. /package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders/actions → modules/modals/slider}/Actions.js +0 -0
  115. /package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders/actions → modules/modals/slider}/Actions.pod.js +0 -0
  116. /package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders → modules/modals}/slider/SliderItem.js +0 -0
  117. /package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders → modules/modals}/slider/SliderItem.pod.js +0 -0
  118. /package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders → modules/modals}/slider/SliderPage.pod.js +0 -0
  119. /package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/prose/@formatter.js +0 -0
  120. /package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/prose/Basic.js +0 -0
  121. /package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/prose/Basic.pod.js +0 -0
@@ -1,24 +1,8 @@
1
1
  {
2
2
  "@lang": "en-US",
3
3
  "@meta": {
4
- "metadata": {
5
- "title": "Cookies | ROOT",
6
- "description": "Manage your cookie preferences on ROOT. Learn about necessary, functionality, analytics, experience, and marketing cookies, and customize your choices for privacy and usability."
7
- },
8
- "opengraph": {
9
- "type": "website",
10
- "title": "Cookies | ROOT",
11
- "description": "Understand and manage ROOT’s use of cookies, including essential, functionality, analytics, experience, and marketing cookies. Adjust your preferences anytime."
12
- },
13
- "twitter": {
14
- "title": "Cookies | ROOT",
15
- "description": "Manage your cookie preferences on ROOT. Control necessary, functionality, analytics, experience, and marketing cookies."
16
- },
17
- "schema": {
18
- "description": "ROOT’s cookies settings page explains the use of necessary, functionality, analytics, experience, and marketing cookies, allowing users to customize their preferences.",
19
- "applicationSubCategory": "Privacy & Cookies",
20
- "keywords": "ROOT cookies, manage cookies, cookie preferences, analytics cookies, marketing cookies, privacy settings"
21
- }
4
+ "title": "Cookies | ROOT",
5
+ "description": "Manage your cookie preferences on ROOT. Learn about necessary, functionality, analytics, experience, and marketing cookies, and customize your choices for privacy and usability."
22
6
  },
23
7
  "@data": {
24
8
  "modal": {
@@ -59,4 +43,4 @@
59
43
  }
60
44
  }
61
45
  }
62
- }
46
+ }
@@ -1,24 +1,8 @@
1
1
  {
2
2
  "@lang": "it-IT",
3
3
  "@meta": {
4
- "metadata": {
5
- "title": "Cookie | ROOT",
6
- "description": "Gestisci le tue preferenze sui cookie in ROOT. Scopri i cookie necessari, di funzionalità, analitici, di esperienza e di marketing, e personalizza le tue scelte per privacy e usabilità."
7
- },
8
- "opengraph": {
9
- "type": "website",
10
- "title": "Cookie | ROOT",
11
- "description": "Comprendi e gestisci l’uso dei cookie di ROOT, inclusi cookie essenziali, di funzionalità, analitici, di esperienza e di marketing. Modifica le tue preferenze in qualsiasi momento."
12
- },
13
- "twitter": {
14
- "title": "Cookie | ROOT",
15
- "description": "Gestisci le tue preferenze sui cookie in ROOT. Controlla cookie necessari, di funzionalità, analitici, di esperienza e di marketing."
16
- },
17
- "schema": {
18
- "description": "La pagina delle impostazioni dei cookie di ROOT spiega l’uso di cookie necessari, di funzionalità, analitici, di esperienza e di marketing, permettendo agli utenti di personalizzare le proprie preferenze.",
19
- "applicationSubCategory": "Privacy e Cookie",
20
- "keywords": "ROOT cookie, gestione cookie, preferenze cookie, cookie analitici, cookie marketing, impostazioni privacy"
21
- }
4
+ "title": "Cookie | ROOT",
5
+ "description": "Gestisci le tue preferenze sui cookie in ROOT. Scopri i cookie necessari, di funzionalità, analitici, di esperienza e di marketing, e personalizza le tue scelte per privacy e usabilità."
22
6
  },
23
7
  "@data": {
24
8
  "modal": {
@@ -34,7 +18,7 @@
34
18
  "data": {
35
19
  "cookie-necessary": {
36
20
  "title": "Necessari",
37
- "description": "I cookie necessari sono strettamente indispensabili per fornirti i servizi disponibili attraverso il nostro sito web e per utilizzare alcune delle sue funzionalità, come l’accesso alle aree riservate. Poiché questi cookie sono essenziali per il funzionamento del sito, non possono essere disabilitati.",
21
+ "description": "I cookie necessari sono strettamente indispensabili per fornirti i servizi disponibili attraverso il nostro sito web e per utilizzare alcune delle sue funzionalità, come l'accesso alle aree riservate. Poiché questi cookie sono essenziali per il funzionamento del sito, non possono essere disabilitati.",
38
22
  "label": "Necessari"
39
23
  },
40
24
  "cookie-functionality": {
@@ -44,7 +28,7 @@
44
28
  },
45
29
  "cookie-analytics": {
46
30
  "title": "Analitici",
47
- "description": "I cookie analitici ci aiutano a capire come i visitatori interagiscono con il nostro sito web raccogliendo e riportando informazioni in forma anonima. Questi dati ci permettono di migliorare le prestazioni e l’usabilità della nostra piattaforma.",
31
+ "description": "I cookie analitici ci aiutano a capire come i visitatori interagiscono con il nostro sito web raccogliendo e riportando informazioni in forma anonima. Questi dati ci permettono di migliorare le prestazioni e l'usabilità della nostra piattaforma.",
48
32
  "label": "Analitici"
49
33
  },
50
34
  "cookie-experience": {
@@ -54,9 +38,9 @@
54
38
  },
55
39
  "cookie-marketing": {
56
40
  "title": "Marketing",
57
- "description": "I cookie di marketing ci permettono, insieme ai nostri partner, di mostrarti annunci personalizzati in base ai tuoi interessi e di misurarne l’efficacia. Possono anche tracciare la tua navigazione su diversi siti web per creare un profilo dei tuoi interessi e proporti annunci pertinenti. Se disabilitati, vedrai comunque annunci, ma meno rilevanti.",
41
+ "description": "I cookie di marketing ci permettono, insieme ai nostri partner, di mostrarti annunci personalizzati in base ai tuoi interessi e di misurarne l'efficacia. Possono anche tracciare la tua navigazione su diversi siti web per creare un profilo dei tuoi interessi e proporti annunci pertinenti. Se disabilitati, vedrai comunque annunci, ma meno rilevanti.",
58
42
  "label": "Marketing"
59
43
  }
60
44
  }
61
45
  }
62
- }
46
+ }
@@ -1,11 +1,9 @@
1
1
  {
2
2
  "@lang": "en-US",
3
3
  "@meta": {
4
- "metadata": {
5
- "title": "Account, Preferences, and Legal Settings | ROOT",
6
- "description": "Manage your account, language, theme, cookies, and legal policies in ROOT. Easily log in, switch between dark and light mode, and configure your preferences for a personalized experience.",
7
- "cover": "get/media/covers/user-cover.jpg"
8
- }
4
+ "title": "Account, Preferences, and Legal Settings | ROOT",
5
+ "description": "Manage your account, language, theme, cookies, and legal policies in ROOT. Easily log in, switch between dark and light mode, and configure your preferences for a personalized experience.",
6
+ "cover": "get/media/covers/user-cover.jpg"
9
7
  },
10
8
  "@head": {
11
9
  "heading": "User Settings"
@@ -46,4 +44,4 @@
46
44
  "label": "View Legal & Policies"
47
45
  }
48
46
  }
49
- }
47
+ }
@@ -1,23 +1,9 @@
1
1
  {
2
2
  "@lang": "it-IT",
3
3
  "@meta": {
4
- "metadata": {
5
- "title": "Account, Preferenze e Impostazioni Legali | ROOT",
6
- "description": "Gestisci account, lingua, tema, cookie e politiche legali in ROOT. Accedi facilmente, passa dalla modalità scura a quella chiara e personalizza la tua esperienza."
7
- },
8
- "opengraph": {
9
- "title": "Account e Preferenze ROOT",
10
- "description": "Controlla account, lingua, tema, cookie e impostazioni legali in ROOT. Goditi un’esperienza sicura e personalizzabile su tutte le piattaforme."
11
- },
12
- "twitter": {
13
- "title": "Gestisci Account e Preferenze su ROOT",
14
- "description": "Accedi, passa tra modalità scura/chiara e regola lingua, cookie e impostazioni legali per un’esperienza ROOT personalizzata."
15
- },
16
- "schema": {
17
- "description": "ROOT consente agli utenti di gestire account, lingua, tema, cookie e impostazioni legali per un’esperienza sicura e personalizzabile.",
18
- "applicationSubCategory": "Impostazioni account e utente",
19
- "keywords": "ROOT, impostazioni account, accesso, modalità scura, modalità chiara, cambio lingua, preferenze cookie, documenti legali"
20
- }
4
+ "title": "Account, Preferenze e Impostazioni Legali | ROOT",
5
+ "description": "Gestisci account, lingua, tema, cookie e politiche legali in ROOT. Accedi facilmente, passa dalla modalità scura a quella chiara e personalizza la tua esperienza.",
6
+ "cover": "get/media/covers/user-cover.jpg"
21
7
  },
22
8
  "@data": {
23
9
  "account": {
@@ -36,7 +22,7 @@
36
22
  },
37
23
  "language": {
38
24
  "title": "Lingua",
39
- "description": "Scegli una lingua per l’interfaccia grafica"
25
+ "description": "Scegli una lingua per l'interfaccia grafica"
40
26
  },
41
27
  "theme": {
42
28
  "title": "Tema",
@@ -55,4 +41,4 @@
55
41
  "label": "Visualizza Legale & Politiche"
56
42
  }
57
43
  }
58
- }
44
+ }
package/modules/init.js CHANGED
@@ -19,13 +19,17 @@ class Init {
19
19
  F3.logs('✅ root-created')
20
20
  F3.logs('👉 now run:')
21
21
  F3.logs(`cd ${this.def.folders.target} && yarn initialize:all`)
22
- F3.logs(`yarn start:all`)
22
+ F3.logs(`👉 Now edit the root.config.app.js file`)
23
+ F3.logs(`yarn root upgrade`)
24
+ F3.logs(`👉 Start /manager in a new terminal with yarn start`)
25
+ F3.logs(`👉 Start /backend in a new terminal with yarn start`)
26
+ F3.logs(`👉 Put your icons and trademarks in workspace/volume/media`)
23
27
  F3.logs(`cd ${this.def.folders.target}/assets`)
24
- F3.logs(`yarn cmd website develop-config`)
25
- F3.logs(`yarn cmd website develop-assets`)
26
- F3.logs(`yarn cmd website develop-workers`)
28
+ F3.logs(`yarn cmd website local-config`)
29
+ F3.logs(`yarn cmd website local-assets`)
30
+ F3.logs(`yarn cmd website local-workers`)
31
+ F3.logs(`👉 Start /frontend in a new terminal with yarn start`)
27
32
 
28
-
29
33
  } catch (e) { F3.catch.throw(e) }
30
34
  }
31
35
  }
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.22",
2
+ "version": "1.0.24",
3
3
  "name": "@fullstackunicorn/create-root",
4
4
  "author": "lucanigido (https://fullstackunicorn.dev/author/lucanigido)",
5
5
  "description": "create-root: bootstrapper that writes config assets and installs @fullstackunicorn/root",
@@ -1,11 +0,0 @@
1
- class Abs {
2
-
3
- constructor() {
4
- this.settings = {}
5
- this.settings.slideshow = {}
6
- this.settings.slideshow.aspectRatio = 1920/815
7
- }
8
-
9
- }
10
-
11
- export const abs = new Abs()
@@ -1,18 +0,0 @@
1
- import { uri } from '#@/App.uri.js'
2
- import { api } from '#@/client/@api.js'
3
- import { useApi } from '#@/pages/@use.js'
4
-
5
- const dataFetch = async params => {
6
-
7
- const verbal = await api.statics.get(uri.data.content.verbal, params)
8
- // const logic = await api.statics.get(uri.data.content.logic, params)
9
-
10
- const meta = verbal['@meta']
11
- const data = {}
12
- data.heading = verbal['@head'].heading
13
- data.data = verbal['@data']
14
-
15
- return { data, meta }
16
- }
17
-
18
- export const useApiHome = () => useApi(dataFetch)
@@ -1,23 +0,0 @@
1
- import { PageTitle } from '#@/panels/layout/PageTitle'
2
- import { Slider } from '#@/panels/slider/Slider.js'
3
- import { Bottom } from '#@/panels/layout/Bottom.js'
4
- import { useApiHome } from '#@/pages/app/Home.api.js'
5
- import { abs } from '#@/pages/app/Home.abs.js'
6
-
7
- export const Home = () => {
8
-
9
- const api = useApiHome()
10
-
11
- if (!api) return null
12
- return (
13
- <>
14
- <Slider
15
- keys={{ picture: 'picture' }}
16
- list={Object.values(api.data.slideshow)}
17
- settings={abs.settings.slideshow}
18
- />
19
- <PageTitle title={api.data.body.intro.paragraph}/>
20
- <Bottom />
21
- </>
22
- )
23
- }
@@ -1,58 +0,0 @@
1
- import { Shopper } from '#@/panels/shopper/bookstore/Shopper.js'
2
- import { BookProse } from '#@/panels/card/book/BookProse.js'
3
- import { BookCardPod } from '#@/panels/card/book/BookCard.pod.js'
4
-
5
- export const BookCard = ({ item = {}, keys = {}, settings = {}, prose={}, onPressQuantity, onPressLanguage }) => {
6
-
7
- const data = {}
8
- data.picture = item[keys.picture]
9
- data.title = item[keys.title]
10
- data.subtitle = item[keys.subtitle]
11
- data.description = item[keys.description]
12
- data.price = item[keys.price]
13
- data.quantity = item[keys.quantity] || '1'
14
- data.language = item[keys.language] || 'English'
15
- data.shippingTitle = item[keys.shippingTitle] || 'Free Shipping'
16
- data.shippingDescription = item[keys.shippingDescription] || 'Currently eligible for free shipping.'
17
- data.stockTitle = item[keys.stockTitle] || 'In Stock'
18
- data.stockDescription = item[keys.stockDescription] || 'Ships within 24 hours'
19
-
20
- const labels = {}
21
- labels.quantity = settings.quantityLabel || 'Quantity'
22
- labels.language = settings.languageLabel || 'Language'
23
- labels.button = settings.buttonLabel || 'BUY NOW'
24
-
25
- const product = {}
26
- product.code = item[keys.code]
27
- product.name = item[keys.title]
28
- product.description = item[keys.description]
29
- product.image = item[keys.image] || item[keys.picture]?.src || ''
30
- product.price = item[keys.priceRaw] ?? item[keys.priceMinor] ?? item[keys.amount] ?? 0
31
- product.currency = (settings.currency || 'DKK')
32
- product.quantity = Number(item[keys.quantity] || 1)
33
-
34
- const seller = {}
35
- seller.code = item[keys.sellerCode] || ''
36
- seller.name = item[keys.sellerName] || ''
37
-
38
- return (
39
- <BookCardPod
40
- settings={settings}
41
- data={data}
42
- shopper={(
43
- <Shopper
44
- data={data}
45
- labels={labels}
46
- settings={settings}
47
- product={product}
48
- seller={seller}
49
- onPressQuantity={onPressQuantity}
50
- onPressLanguage={onPressLanguage}
51
- />
52
- )}
53
- >
54
- <BookProse item={prose.main}/>
55
- <BookProse item={prose.about}/>
56
- </BookCardPod>
57
- )
58
- }
@@ -1,37 +0,0 @@
1
- import { useStyle } from '#@/style/@use.js'
2
- import { View } from '#@/imports/core/View.js'
3
- import { Text } from '#@/imports/core/Text.js'
4
-
5
- const BookTitleBlockPod = ({ title, subtitle }) => {
6
-
7
- const { s, c, f, F, S } = useStyle()
8
-
9
- F.title = [s.fs32, s.lh50, s.fw700]
10
- F.subtitle = [s.fs20, s.lh32, s.fw400]
11
-
12
- S.box = [s.col_cXcY, s.X, s.marginT16, c.item_NN_B600]
13
- S.title = [...F.title, s.textC, s.Xc, c.item_NN_B400]
14
- S.subtitle = [...F.subtitle, s.textC, s.Xc, c.item_NN_B400]
15
-
16
- return (
17
- <View classes={S.box}>
18
- <Text classes={S.title} font={f.f1} text={title} />
19
- <Text classes={S.subtitle} font={f.f1} text={subtitle} />
20
- </View>
21
- )
22
- }
23
-
24
- export const BookCardPod = ({ settings = {}, data = {}, shopper, children }) => {
25
-
26
- const { s, S } = useStyle()
27
-
28
- S.root = [s.col_cX, s.X, s.gap16]
29
-
30
- return (
31
- <View classes={S.root}>
32
- <BookTitleBlockPod title={data.title} subtitle={data.subtitle} />
33
- {shopper}
34
- {children}
35
- </View>
36
- )
37
- }
@@ -1,22 +0,0 @@
1
- import { Prose } from '#@/panels/prose/Prose.js'
2
-
3
- export const BookProse = ({ item={} }) => {
4
-
5
- return Object.entries(item).map(([key, node]) => {
6
-
7
- if (node?.type !== 'prose') return null
8
-
9
- return (
10
- <Prose
11
- key={key}
12
- lang={{
13
- value: node.value,
14
- style: node.attributes?.style || {},
15
- spans: node.attributes?.spans || [],
16
- }}
17
- />
18
- )
19
- })
20
- }
21
-
22
-
@@ -1,115 +0,0 @@
1
- import { Fragment, useMemo } from 'react'
2
- import { useContainerSize } from '#@/imports/use.js'
3
- import { GridPod, GridRowPod, XGapPod, YGapPod } from '#@/panels/grid/book/Grid.pod.js'
4
- import { Item } from '#@/panels/grid/book/Item.js'
5
-
6
- const chunkRows = (list = [], columns = 1) => {
7
- const safeColumns = Math.max(1, columns)
8
- const rows = []
9
-
10
- for (let i = 0; i < list.length; i += safeColumns) {
11
- rows.push(list.slice(i, i + safeColumns))
12
- }
13
-
14
- return rows
15
- }
16
-
17
- const getColumns = (containerWidth, settings = {}) => {
18
- const minWidth = settings.cardMinWidth || 220
19
- const gapX = settings.cardGapX ?? settings.cardGap ?? 16
20
-
21
- if (!containerWidth || containerWidth <= 0) return 1
22
-
23
- let columns = Math.floor((containerWidth + gapX) / (minWidth + gapX))
24
- if (columns < 1) columns = 1
25
-
26
- let cardWidth = Math.floor((containerWidth - ((columns - 1) * gapX)) / columns)
27
-
28
- while (columns > 1 && settings.cardMinWidth && cardWidth < settings.cardMinWidth) {
29
- columns -= 1
30
- cardWidth = Math.floor((containerWidth - ((columns - 1) * gapX)) / columns)
31
- }
32
-
33
- while (columns < 12 && settings.cardMaxWidth && cardWidth > settings.cardMaxWidth) {
34
- columns += 1
35
- cardWidth = Math.floor((containerWidth - ((columns - 1) * gapX)) / columns)
36
- }
37
-
38
- if (columns < 1) columns = 1
39
-
40
- return columns
41
- }
42
-
43
- const getCardWidth = (containerWidth, columns, settings = {}) => {
44
- if (!containerWidth || containerWidth <= 0) return 0
45
-
46
- const gapX = columns > 1 ? (settings.cardGapX ?? settings.cardGap ?? 16) : 0
47
- const totalGap = (columns - 1) * gapX
48
- const width = Math.floor((containerWidth - totalGap) / columns)
49
-
50
- return width > 0 ? width : 0
51
- }
52
-
53
- export const Grid = ({ list = [], data = {}, keys = {}, settings = {}, top, bottom, trigger }) => {
54
- const { viewRef, width: containerWidth } = useContainerSize()
55
-
56
- const columns = useMemo(() => {
57
- return getColumns(containerWidth, settings)
58
- }, [containerWidth, settings])
59
-
60
- const cardWidth = useMemo(() => {
61
- return getCardWidth(containerWidth, columns, settings)
62
- }, [containerWidth, columns, settings])
63
-
64
- const rows = useMemo(() => {
65
- return chunkRows(list, columns)
66
- }, [list, columns])
67
-
68
- const gapX = columns > 1 ? (settings.cardGapX ?? settings.cardGap ?? 16) : 0
69
- const gapY = settings.cardGapY ?? settings.rowGap ?? settings.cardGap ?? 16
70
-
71
- const cardInline = cardWidth > 0 ? {
72
- width: `${cardWidth}px`,
73
- minWidth: `${cardWidth}px`,
74
- maxWidth: `${cardWidth}px`,
75
- } : {}
76
-
77
- return (
78
- <>
79
- {top}
80
-
81
- <GridPod viewRef={viewRef}>
82
- {containerWidth > 0 && rows.map((row, rowIndex) => (
83
- <Fragment key={`row-${rowIndex}`}>
84
- <GridRowPod>
85
- {row.map((key, columnIndex) => {
86
- const item = data[key]
87
- if (!item) return null
88
-
89
- const isLast = columnIndex === row.length - 1
90
-
91
- return (
92
- <Fragment key={key || `${rowIndex}-${columnIndex}`}>
93
- <Item
94
- type={settings.cardType}
95
- inline={cardInline}
96
- picture={item[keys.picture]}
97
- title={item[keys.title]}
98
- price={item[keys.text]}
99
- linkTo={item[keys.link] || `/${key}`}
100
- />
101
- {!isLast && <XGapPod size={gapX} />}
102
- </Fragment>
103
- )
104
- })}
105
- </GridRowPod>
106
-
107
- {rowIndex < rows.length - 1 && <YGapPod size={gapY} />}
108
- </Fragment>
109
- ))}
110
- </GridPod>
111
-
112
- {bottom}
113
- </>
114
- )
115
- }
@@ -1,65 +0,0 @@
1
- import { useStyle } from '#@/style/@use.js'
2
- import { View } from '#@/imports/core/View.js'
3
-
4
- export const XGapPod = ({ size = 16 }) => {
5
- const { S, I } = useStyle()
6
-
7
- S.gap = []
8
- I.gap = {
9
- width: `${size}px`,
10
- minWidth: `${size}px`,
11
- maxWidth: `${size}px`,
12
- flexShrink: 0,
13
- }
14
-
15
- return <View classes={S.gap} inline={I.gap} />
16
- }
17
-
18
- export const YGapPod = ({ size = 16 }) => {
19
- const { S, I } = useStyle()
20
-
21
- S.gap = []
22
- I.gap = {
23
- height: `${size}px`,
24
- minHeight: `${size}px`,
25
- maxHeight: `${size}px`,
26
- width: '100%',
27
- flexShrink: 0,
28
- }
29
-
30
- return <View classes={S.gap} inline={I.gap} />
31
- }
32
-
33
- export const GridRowPod = ({ children }) => {
34
- const { s, S, I } = useStyle()
35
-
36
- S.row = [s.row, s.Xx, s.Yc]
37
- I.row = {
38
- // width: '100%',
39
- // height:'100%',
40
- // alignItems: 'stretch',
41
- // justifyContent: 'flex-start',
42
- flexWrap: 'nowrap',
43
- }
44
-
45
- return (
46
- <View classes={S.row} inline={I.row}>
47
- {children}
48
- </View>
49
- )
50
- }
51
-
52
- export const GridPod = ({ children, viewRef }) => {
53
- const { s, S, I } = useStyle()
54
-
55
- S.grid = [s.col]
56
- I.grid = {
57
- width: '100%',
58
- }
59
-
60
- return (
61
- <View classes={S.grid} inline={I.grid} viewRef={viewRef}>
62
- {children}
63
- </View>
64
- )
65
- }
@@ -1,3 +0,0 @@
1
- import { ItemPod } from '#@/panels/grid/book/Item.pod.js'
2
-
3
- export const Item = ItemPod
@@ -1,50 +0,0 @@
1
- import { useStyle } from '#@/style/@use.js'
2
- import { HoverCard } from '#@/imports/animated/HoverCard.js'
3
- import { View } from '#@/imports/core/View.js'
4
- import { Img } from '#@/imports/core/Img.js'
5
- import { Text } from '#@/imports/core/Text.js'
6
- import { Link } from '#@/modules/core/Link.js'
7
-
8
- export const ItemPod = ({ picture, title, price, linkTo, inline = {}, type }) => {
9
-
10
- const { s, c, f, t, F, B, S, I, H } = useStyle()
11
-
12
- B.card = t.cards?.[type] || t.cards.portrait
13
-
14
- F.title = [s.fs17, s.fw600, s.lh24, c.item_NN_B600]
15
- F.price = [s.fs16, s.fw500, c.item_NN_B400]
16
-
17
- S.box = [s.col, s.Yr]
18
- S.link = B.card.link
19
- S.card = B.card.box
20
- S.pictureWrap = B.card.pictureWrap
21
- S.pictureBox = B.card.pictureBox
22
- S.picture = B.card.picture
23
- S.content = B.card.content
24
- S.title = [...F.title, ...B.card.title]
25
- S.spacer = [s.Yc]
26
- S.price = [...F.price, ...B.card.price]
27
-
28
- I.box = inline
29
- I.link = { display: 'block', width: '100%' }
30
- I.pictureBox = { ratio: picture.ratio}
31
-
32
- return (
33
- <View classes={S.box} inline={I.box}>
34
- <Link linkTo={linkTo} classes={S.link} inline={I.link}>
35
- <HoverCard classes={S.card}>
36
- <View classes={S.pictureWrap}>
37
- <View classes={S.pictureBox} inline={I.pictureBok}>
38
- <Img classes={S.picture} picture={picture} />
39
- </View>
40
- </View>
41
- <View classes={S.content}>
42
- <Text classes={S.title} text={title} />
43
- <View classes={S.spacer} />
44
- <Text classes={S.price} text={price} />
45
- </View>
46
- </HoverCard>
47
- </Link>
48
- </View>
49
- )
50
- }
@@ -1,12 +0,0 @@
1
- import { BottomPod } from './Bottom.pod.js'
2
-
3
- export const Bottom = () => {
4
-
5
- const year = new Date().getFullYear()
6
- const minderable = { href:"https://websites.minderable.com", text:'Powered by Minderable' }
7
- const text = `Copyright © ${year}`
8
-
9
- return (
10
- <BottomPod text={text} minderable={minderable}/>
11
- )
12
- }