@fullstackunicorn/create-root 1.0.23 → 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 (120) 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/package.json +1 -1
  86. package/assets/root.fullstackunicorn.dev/frontend/pages/app/Home.abs.js +0 -11
  87. package/assets/root.fullstackunicorn.dev/frontend/pages/app/Home.api.js +0 -18
  88. package/assets/root.fullstackunicorn.dev/frontend/pages/app/Home.js +0 -23
  89. package/assets/root.fullstackunicorn.dev/frontend/panels/card/book/BookCard.js +0 -58
  90. package/assets/root.fullstackunicorn.dev/frontend/panels/card/book/BookCard.pod.js +0 -37
  91. package/assets/root.fullstackunicorn.dev/frontend/panels/card/book/BookProse.js +0 -22
  92. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Grid.js +0 -115
  93. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Grid.pod.js +0 -65
  94. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Item.js +0 -3
  95. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Item.pod.js +0 -50
  96. package/assets/root.fullstackunicorn.dev/frontend/panels/layout/Bottom.js +0 -12
  97. package/assets/root.fullstackunicorn.dev/frontend/panels/page/PageScrollable.pod.js +0 -85
  98. package/assets/root.fullstackunicorn.dev/frontend/panels/prose/@use.js +0 -21
  99. package/assets/root.fullstackunicorn.dev/frontend/panels/prose/Prose.js +0 -84
  100. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/popup/PopupModal.js +0 -54
  101. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/select/SelectModal.js +0 -52
  102. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Buy.js +0 -19
  103. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Buy.pod.js +0 -17
  104. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Shopper.js +0 -39
  105. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Shopper.pod.js +0 -187
  106. package/assets/root.fullstackunicorn.dev/frontend/panels/sliders/slider/SliderModal.js +0 -39
  107. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors/actions → modules/modals/select}/Actions.pod.js +0 -0
  108. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors → modules/modals}/select/SelectItem.js +0 -0
  109. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors → modules/modals}/select/SelectItem.pod.js +0 -0
  110. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors → modules/modals}/select/SelectPage.pod.js +0 -0
  111. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors/actions → modules/modals/select}/SelectPicked.js +0 -0
  112. /package/assets/root.fullstackunicorn.dev/frontend/{panels/selectors/actions → modules/modals/select}/SelectPicked.pod.js +0 -0
  113. /package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders/actions → modules/modals/slider}/Actions.js +0 -0
  114. /package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders/actions → modules/modals/slider}/Actions.pod.js +0 -0
  115. /package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders → modules/modals}/slider/SliderItem.js +0 -0
  116. /package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders → modules/modals}/slider/SliderItem.pod.js +0 -0
  117. /package/assets/root.fullstackunicorn.dev/frontend/{panels/sliders → modules/modals}/slider/SliderPage.pod.js +0 -0
  118. /package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/prose/@formatter.js +0 -0
  119. /package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/prose/Basic.js +0 -0
  120. /package/assets/root.fullstackunicorn.dev/frontend/{panels → modules}/prose/Basic.pod.js +0 -0
@@ -1,13 +1,20 @@
1
-
1
+ yarn cmd website workspace-cleanup
2
+ yarn cmd website develop-cleanup
2
3
 
3
4
  yarn cmd website local-config
5
+ yarn cmd website local-push
6
+ yarn cmd website local-pull
4
7
  yarn cmd website local-assets
5
8
  yarn cmd website local-workers
6
9
 
7
10
  yarn cmd website sv1-config
11
+ yarn cmd website sv1-push
12
+ yarn cmd website sv1-pull
8
13
  yarn cmd website sv1-assets
9
14
  yarn cmd website sv1-workers
10
15
 
11
16
  yarn cmd website stage-config
17
+ yarn cmd website stage-push
18
+ yarn cmd website stage-pull
12
19
  yarn cmd website stage-assets
13
- yarn cmd website stage-workers
20
+ yarn cmd website stage-workers
@@ -8,12 +8,33 @@ class Runner {
8
8
  this.sync = new Sync({ def })
9
9
  }
10
10
 
11
+ // yarn cmd website workspace-cleanup
12
+ ['workspace-cleanup'] = async () => {
13
+ try { return await this.sync.runCleanup('workspace') }
14
+ catch (e) { F3.logs(e) }
15
+ }
16
+ // yarn cmd website develop-cleanup
17
+ ['develop-cleanup'] = async () => {
18
+ try { return await this.sync.runCleanup('develop') }
19
+ catch (e) { F3.logs(e) }
20
+ }
21
+
11
22
 
12
23
  // yarn cmd website local-config
13
24
  ['local-config'] = async () => {
14
25
  try { return await this.sync.runConfig('local') }
15
26
  catch (e) { F3.logs(e) }
16
27
  }
28
+ // yarn cmd website local-push
29
+ ['local-push'] = async () => {
30
+ try { return await this.sync.runWorkspacePush('local') }
31
+ catch (e) { F3.logs(e) }
32
+ }
33
+ // yarn cmd website local-pull
34
+ ['local-pull'] = async () => {
35
+ try { return await this.sync.runWorkspacePull('local') }
36
+ catch (e) { F3.logs(e) }
37
+ }
17
38
  // yarn cmd website local-assets
18
39
  ['local-assets'] = async () => {
19
40
  try { return await this.sync.runAssets('local') }
@@ -31,6 +52,16 @@ class Runner {
31
52
  try { return await this.sync.runConfig('sv1') }
32
53
  catch (e) { F3.logs(e) }
33
54
  }
55
+ // yarn cmd website sv1-push
56
+ ['sv1-push'] = async () => {
57
+ try { return await this.sync.runWorkspacePush('sv1') }
58
+ catch (e) { F3.logs(e) }
59
+ }
60
+ // yarn cmd website sv1-pull
61
+ ['sv1-pull'] = async () => {
62
+ try { return await this.sync.runWorkspacePull('sv1') }
63
+ catch (e) { F3.logs(e) }
64
+ }
34
65
  // yarn cmd website sv1-assets
35
66
  ['sv1-assets'] = async () => {
36
67
  try { return await this.sync.runAssets('sv1') }
@@ -48,6 +79,16 @@ class Runner {
48
79
  try { return await this.sync.runConfig('stage') }
49
80
  catch (e) { F3.logs(e) }
50
81
  }
82
+ // yarn cmd website stage-push
83
+ ['stage-push'] = async () => {
84
+ try { return await this.sync.runWorkspacePush('stage') }
85
+ catch (e) { F3.logs(e) }
86
+ }
87
+ // yarn cmd website stage-pull
88
+ ['stage-pull'] = async () => {
89
+ try { return await this.sync.runWorkspacePull('stage') }
90
+ catch (e) { F3.logs(e) }
91
+ }
51
92
  // yarn cmd website stage-assets
52
93
  ['stage-assets'] = async () => {
53
94
  try { return await this.sync.runAssets('stage') }
@@ -60,4 +101,4 @@ class Runner {
60
101
  }
61
102
  }
62
103
 
63
- export const runner = new Runner()
104
+ export const runner = new Runner()
@@ -1,6 +1,6 @@
1
1
  import { useGetUser, useAuthLogin, useAuthLogout, useAuthAccount } from '#@/base/account/@use.js'
2
2
  import { useGetStatics } from '#@/base/statics/@use.js'
3
- import { Account } from '#@/panels/cards/Account.js'
3
+ import { Account } from '#@/modules/cards/Account.js'
4
4
 
5
5
  export const AccountCard = ({ api }) => {
6
6
 
@@ -4,11 +4,9 @@ import { storage } from '#@/imports/storage.js'
4
4
  import { api } from '#@/client/@api.js'
5
5
  import { constants } from '#@/root/constants.js'
6
6
  import { useUrl } from '#@/base/router/@use.js'
7
- import { alerts, useSetAlerts } from '#@/base/alerts/@use.js'
8
- import { useGetStatics } from '#@/base/statics/@use.js'
9
- import { useModals, useSetModals, useModalClose } from '#@/base/modals/@use.js'
7
+ import { alerts } from '#@/base/alerts/@use.js'
8
+ import { useModals, useSetModals } from '#@/base/modals/@use.js'
10
9
  import { useGetLanguage } from '#@/base/language/@use.js'
11
- import { useGetLookups } from '#@/base/lookups/@use.js'
12
10
  import { tools } from '#@/base/cookies/@tools.js'
13
11
 
14
12
  export const device = atom()
@@ -102,99 +100,20 @@ export const useGetAgreement = () => {
102
100
  return getAgreement
103
101
  }
104
102
 
105
- export const useGetCookiesData = () => {
106
-
107
- const statics = useGetStatics()
108
- const lookups = useGetLookups()
109
-
110
- const setAlerts = useSetAlerts()
111
- const setCookies = useSetCookies()
112
- const setConsent = useSetConsent()
113
-
114
- const modalClose = useModalClose()
115
-
116
- const getAgreement = useGetAgreement()
117
-
118
- const getCookiesData = ({ formResult, id, isCloseDisabled, isLanguageButton }) => {
119
-
120
- const onSetValue = async () => {
121
-
122
- const device = storage.get('device')
123
- const agreement = getAgreement({
124
- agreement_type: statics.logic.cookies.type,
125
- agreement_version: statics.logic.cookies.version,
126
- agreement_subject_id: device,
127
- agreement_subject_type: 'device_id',
128
- agreement_agreed: formResult.current,
129
- })
130
-
131
- const agreements = { [statics.logic.cookies.type]: agreement }
132
- const submit = await tools.getSubmit(device)
133
-
134
- const consent = [{ agreements, submit }]
135
- const response = await api.cookies.set(consent)
136
-
137
- if (response.isOffline) setAlerts({ id: 'offline' })
138
- else if (response.isError) setAlerts({ id: 'error-cookies-set' })
139
- else if (response.isValid) {
140
- setCookies(response.data)
141
- setConsent(response.consent_id)
142
- void api.cookies.get() //@NOTE no await is for caching
143
- }
144
- modalClose(id)
145
- }
146
-
147
- const itemVisual = {}
148
- for (const key of Object.keys(statics.logic.cookies.data)) {
149
- itemVisual[key] = { svg: statics.visual.svg.cookies }
150
- }
151
-
152
- const data = {}
153
- data.isCloseDisabled = isCloseDisabled
154
- data.isLanguageButton = isLanguageButton
155
- data.onSetValue = onSetValue
156
- data.formResult = formResult
157
- data.itemLogic = statics.logic.cookies
158
- data.itemVisual = itemVisual
159
- data.svg = statics.visual.svg.cookies
160
- data.itemVerbal = {
161
- title: lookups.cookies.verbal.modal.title,
162
- description: lookups.cookies.verbal.modal.description,
163
- action: lookups.cookies.verbal.modal.action,
164
- data: lookups.cookies.verbal.data
165
- }
166
-
167
- return data
168
- }
169
- return getCookiesData
170
- }
171
-
172
103
  export const useWelcome = () => {
173
104
 
174
105
  const { lang } = useUrl()
175
-
176
106
  const setModals = useSetModals()
177
107
  const modalRef = useRef('')
178
-
179
108
  const consent = useGetConsent()
180
109
 
181
- const cookies = useGetCookies()
182
- const formResult = useRef({})
183
- formResult.current = cookies
184
-
185
- const getCookiesData = useGetCookiesData()
186
-
187
- const isCloseDisabled = true
188
- const isLanguageButton = constants.services.IS_CARD_LANGUAGE_OFF ? false : true
189
-
190
110
  useEffect(() => {
191
111
 
192
112
  if (constants.services.IS_CARD_COOKIES_OFF) return
193
113
  if (consent) return
194
114
 
195
115
  if (!modalRef.current) modalRef.current = makeId()
196
- const data = getCookiesData({ formResult, id: modalRef.current, isCloseDisabled, isLanguageButton })
197
- setModals([{ id: modalRef.current, name: 'sliders', data }])
116
+ setModals([{ id: modalRef.current, name: 'cookies' }])
198
117
 
199
118
  }, [consent, lang])
200
119
  }
@@ -202,17 +121,10 @@ export const useWelcome = () => {
202
121
  export const useCookiesEdit = () => {
203
122
 
204
123
  const [modals, setModals] = useModals()
205
- const cookies = useGetCookies()
206
-
207
- const formResult = useRef({})
208
- formResult.current = cookies
209
-
210
- const getCookiesData = useGetCookiesData()
211
124
 
212
- const onPress = async () => {
125
+ const onPress = () => {
213
126
  const id = makeId()
214
- const data = getCookiesData({ formResult, id })
215
- setModals([...modals, { id, name: 'sliders', data }])
127
+ setModals([...modals, { id, name: 'cookies' }])
216
128
  }
217
129
  return onPress
218
130
  }
@@ -1,6 +1,6 @@
1
1
  import { useGetStatics } from '#@/base/statics/@use.js'
2
2
  import { useCookiesEdit } from '#@/base/cookies/@use.js'
3
- import { Launcher } from '#@/panels/cards/Launcher.js'
3
+ import { Launcher } from '#@/modules/cards/Launcher.js'
4
4
 
5
5
  export const CookiesCard = ({ api }) => {
6
6
 
@@ -1,16 +1,9 @@
1
1
  import { useEffect, useState } from 'react'
2
- import { atom, useAtom, useSetAtom, useGetAtom } from '#@/imports/npm.js'
3
- import { useNavigate } from '#@/imports/router.js'
4
- import { makeId } from '#@/imports/npm.js'
5
- import { api } from '#@/client/@api.js'
6
- import { uri } from '#@/App.uri.js'
2
+ import { atom, useAtom, useSetAtom, useGetAtom, makeId } from '#@/imports/npm.js'
7
3
  import { storage } from '#@/imports/storage.js'
8
- import { useUrl } from '#@/base/router/@use.js'
9
- import { useGetStatics, useSetVerbal } from '#@/base/statics/@use.js'
10
- import { useHistory } from '#@/base/router/@use.js'
4
+ import { useGetStatics } from '#@/base/statics/@use.js'
11
5
  import { useModals } from '#@/base/modals/@use.js'
12
6
  import { useGetLookups } from '#@/base/lookups/@use.js'
13
- import { useSetAlerts } from '#@/base/alerts/@use.js'
14
7
  import { tools } from '#@/base/language/@tools.js'
15
8
 
16
9
  export const language = atom({})
@@ -75,69 +68,11 @@ export const useLanguageLabel = () => {
75
68
 
76
69
  export const useLanguageEdit = () => {
77
70
 
78
- const { path } = useUrl()
79
- const navigate = useNavigate()
80
-
81
- const label = useLanguageLabel()
82
- const lookups = useGetLookups()
83
-
84
- const statics = useGetStatics()
85
- const setVerbal = useSetVerbal()
86
-
87
- const [history, setHistory] = useHistory()
88
-
89
- const languages = [statics.logic['@lang'], ...F3.arr.safe(statics.logic['@langs'])]
90
-
91
- const [language, setLanguage] = useLanguage()
92
71
  const [modals, setModals] = useModals()
93
- const setAlerts = useSetAlerts({})
94
-
95
- const onPress = async () => {
96
-
97
- const languagesVerbal = lookups.languages.verbal.data.items
98
- const languagesDefault = lookups.languages.logic
99
-
100
- const data = {}
101
-
102
- data.onSetValue = async newValue => {
103
-
104
- if (newValue.slug === language.slug) return
105
- if (!languages.includes(newValue.slug)) return
106
-
107
- const localVerbal = await api.statics.get(uri.data.root.verbal, { lang: newValue.slug })
108
-
109
- const result = {}
110
- result.verbal = localVerbal['@data']
111
- result.language = tools.getLanguage(newValue.slug, statics.logic)
112
-
113
- if (!result.language || !result.verbal) {
114
- const alert = {}
115
- alert.id = 'no-language'
116
- alert.params = { language: tools.getLanguageLabel(lookups, newValue.slug) }
117
- return setAlerts(alert)
118
- }
119
-
120
- const newHistory = tools.getNewHistory(history, newValue.slug)
121
-
122
- setHistory(newHistory)
123
- setVerbal(result.verbal)
124
- setLanguage(result.language)
125
- navigate(`/${newValue.slug}/${path}`)
126
- }
127
-
128
- data.value = {}
129
- data.value.slug = language.slug
130
- data.value.value = label
131
-
132
- data.itemLogic = {}
133
- data.itemLogic.options = languages
134
-
135
- data.itemVerbal = {}
136
- data.itemVerbal.options = tools.getLanguages(lookups, languages)
137
- data.itemVerbal.title = lookups.languages.verbal.views.modal.title
138
72
 
73
+ const onPress = () => {
139
74
  const id = makeId()
140
- setModals([...modals, { id, name: 'selects', data }])
75
+ setModals([...modals, { id, name: 'languages' }])
141
76
  }
142
77
 
143
78
  return onPress
@@ -1,6 +1,6 @@
1
1
  import { useLanguageLabel, useLanguageEdit } from '#@/base/language/@use.js'
2
2
  import { useGetStatics } from '#@/base/statics/@use.js'
3
- import { Launcher } from '#@/panels/cards/Launcher.js'
3
+ import { Launcher } from '#@/modules/cards/Launcher.js'
4
4
 
5
5
  export const LanguageCard = ({ api={} }) => {
6
6
 
@@ -7,8 +7,8 @@ export const LayoutPod = ({ sidebarTwo, iconTwo,
7
7
 
8
8
  const { s, c, f, t, F, B, S, I, H } = useStyle()
9
9
 
10
- S.root = [s.col, s.Ymin0,s.XY]
11
- S.layout = [s.col, s.Ymin0, s.XY]
10
+ S.root = [s.col, s.X, s.Yc, s.Ymin0]
11
+ S.layout = [s.col, s.X, s.Yc, s.Ymin0]
12
12
  S.body = [s.col_cX, s.X, s.Yc, s.Ymin0, s.overflowXh, c.base_NN_W750]
13
13
 
14
14
  return (
@@ -1,5 +1,5 @@
1
1
  import { useGetStatics } from '#@/base/statics/@use.js'
2
- import { Linker } from '#@/panels/cards/Linker.js'
2
+ import { Linker } from '#@/modules/cards/Linker.js'
3
3
 
4
4
  export const LegalCard = ({ title, description, label, linkTo }) => {
5
5
 
@@ -1,7 +1,7 @@
1
1
  import { routes } from '#@/root/routes.js'
2
2
  import { useUrl } from '#@/base/router/@use.js'
3
3
  import { useGetStatics } from '#@/base/statics/@use.js'
4
- import { Linker } from '#@/panels/cards/Linker.js'
4
+ import { Linker } from '#@/modules/cards/Linker.js'
5
5
 
6
6
  export const LegalsCard = ({ api={} }) => {
7
7
 
@@ -0,0 +1,15 @@
1
+ import { atom, useGetAtom, useSetAtom } from '#@/imports/npm.js'
2
+
3
+ const store = new Map()
4
+ const resourceAtom = key => {
5
+ if (!store.has(key)) store.set(key, atom({ data: undefined, meta: undefined }))
6
+ return store.get(key)
7
+ }
8
+
9
+ const writeAtom = atom(null, (get, set, { key, ...rest }) => {
10
+ if (!key) return
11
+ set(resourceAtom(key), { ...get(resourceAtom(key)), ...rest })
12
+ })
13
+
14
+ export const useGetResource = key => useGetAtom(resourceAtom(key))
15
+ export const useSetResource = () => useSetAtom(writeAtom)
@@ -45,6 +45,7 @@ export const useUrl = () => {
45
45
  }
46
46
 
47
47
  const replaceParents = (match) => {
48
+ if (!match?.route || !F3.arr.isGood(match.route.parent)) return []
48
49
  const { route, params } = match;
49
50
  return route.parent.map(parentPath => {
50
51
  let result = parentPath;
@@ -209,4 +210,4 @@ export const useChronology = () => {
209
210
  // useEffect(() => {
210
211
  // if (!api?.group) return
211
212
  // setDynamic({ group: api.group })
212
- // }, [api])
213
+ // }, [api])
@@ -1,6 +1,6 @@
1
1
  import { useIsDark } from '#@/base/theme/@use.js'
2
2
  import { useGetStatics } from '#@/base/statics/@use.js'
3
- import { Slider } from '#@/panels/cards/Slider.js'
3
+ import { Slider } from '#@/modules/cards/Slider.js'
4
4
 
5
5
  export const ThemeCard = ({ api }) => {
6
6
 
@@ -55,14 +55,26 @@ setup.defaultSass = `* {
55
55
  // user-select: none;
56
56
  };
57
57
 
58
- html, body, #root {
59
- overflow:hidden;
60
- height: 100vh;
61
- max-height: 100vh;
62
- min-height: 100vh;
63
- width: 100vw;
64
- max-width: 100vw;
65
- min-width: 100vw;
58
+ :root {
59
+ --app-viewport-height: 100vh;
60
+ }
61
+
62
+ @supports (height: 100dvh) {
63
+ :root {
64
+ --app-viewport-height: 100dvh;
65
+ }
66
+ }
67
+
68
+ html {
69
+ height: 100%;
70
+ width: 100%;
71
+ overscroll-behavior: none;
72
+ }
73
+
74
+ body, #root {
75
+ min-height: 100%;
76
+ width: 100%;
77
+ overscroll-behavior: none;
66
78
  }
67
79
 
68
80
  body { margin:0; padding:0 }
@@ -83,4 +95,4 @@ h1, h2, h3, h4, h5, h6, p, a, span, input, textarea, option, button {
83
95
  margin-inline-end: 0;
84
96
  };`
85
97
 
86
- export default setup
98
+ export default setup
@@ -1,4 +1,4 @@
1
- import { Prose } from '#@/panels/prose/Prose.js'
1
+ import { Prose } from '#@/modules/prose/Prose.js'
2
2
  import { BlockPod } from './Legal.pod.js'
3
3
 
4
4
  export const Legal = ({ api }) => {
@@ -1,10 +1,8 @@
1
1
  import { useState, useEffect } from 'react'
2
- import { useStyle } from '#@/style/@use.js'
2
+ import { Viewport } from '#@/imports/core/Viewport.js'
3
3
 
4
4
  export const Root = ({ children, isLoaded }) => {
5
5
 
6
- const { s, c, f, t, F, B, S, I, H } = useStyle()
7
-
8
6
  const [isOff, setIsOff] = useState(true)
9
7
 
10
8
  useEffect(() => {
@@ -16,11 +14,9 @@ export const Root = ({ children, isLoaded }) => {
16
14
  opacity: isOff ? 0 : 1,
17
15
  }
18
16
 
19
- const className = [s.XY]
20
-
21
17
  return (
22
- <div className={className.join(' ')} style={style}>
18
+ <Viewport inline={style}>
23
19
  {children}
24
- </div>
20
+ </Viewport>
25
21
  )
26
- }
22
+ }
@@ -14,14 +14,19 @@ export const Scrollable = ({
14
14
  ? { paddingBottom: 'env(safe-area-inset-bottom, 0px)' }
15
15
  : {}
16
16
 
17
+ const scrollInline = {
18
+ overscrollBehavior: 'none',
19
+ overscrollBehaviorY: 'none',
20
+ }
21
+
17
22
  return (
18
23
  <div
19
24
  ref={scrollRef}
20
25
  className={[...classes, s.overflowYs].join(' ')}
21
- style={{ ...inline, ...pageInline }}
26
+ style={{ ...scrollInline, ...inline, ...pageInline }}
22
27
  onScroll={onScroll}
23
28
  >
24
29
  {children}
25
30
  </div>
26
31
  )
27
- }
32
+ }
@@ -0,0 +1,29 @@
1
+ export const Viewport = ({
2
+ classes = [],
3
+ inline = {},
4
+ children,
5
+ }) => {
6
+ const style = {
7
+ position: 'fixed',
8
+ top: 0,
9
+ right: 0,
10
+ bottom: 0,
11
+ left: 0,
12
+ width: '100%',
13
+ height: 'var(--app-viewport-height, 100vh)',
14
+ overflow: 'hidden',
15
+ overscrollBehavior: 'none',
16
+ overscrollBehaviorY: 'none',
17
+ display: 'flex',
18
+ flexDirection: 'column',
19
+ paddingTop: 'env(safe-area-inset-top, 0px)',
20
+ paddingBottom: 'env(safe-area-inset-bottom, 0px)',
21
+ ...inline,
22
+ }
23
+
24
+ return (
25
+ <div className={classes.join(' ')} style={style}>
26
+ {children}
27
+ </div>
28
+ )
29
+ }
@@ -5,35 +5,25 @@ export const Head = () => {
5
5
 
6
6
  const meta = useGetMeta()
7
7
 
8
- if (!F3.obj.isGood(meta)) return null;
8
+ if (!F3.obj.isGood(meta)) return null
9
9
 
10
- const { metadata, opengraph, twitter, schema } = meta
10
+ const { title, description, cover } = meta
11
+ const image = cover ? `${window.location.origin}/${cover}` : undefined
11
12
 
12
13
  return (
13
14
  <Helmet>
14
15
 
15
- {metadata?.title && <title>{metadata.title}</title>}
16
- {metadata?.description && <meta name="description" content={metadata.description} />}
17
- {metadata?.keywords && <meta name="keywords" content={metadata.keywords} />}
18
-
19
- {opengraph?.title && <meta property="og:title" content={opengraph.title} />}
20
- {opengraph?.description && <meta property="og:description" content={opengraph.description} />}
21
- {opengraph?.type && <meta property="og:type" content={opengraph.type} />}
22
- {opengraph?.url && <meta property="og:url" content={opengraph.url} />}
23
- {opengraph?.site_name && <meta property="og:site_name" content={opengraph.site_name} />}
24
- {opengraph?.image && <meta property="og:image" content={opengraph.image} />}
25
-
26
- {twitter?.card && <meta name="twitter:card" content={twitter.card} />}
27
- {twitter?.title && <meta name="twitter:title" content={twitter.title} />}
28
- {twitter?.description && <meta name="twitter:description" content={twitter.description} />}
29
- {twitter?.image && <meta name="twitter:image" content={twitter.image} />}
30
- {twitter?.site && <meta name="twitter:site" content={twitter.site} />}
31
-
32
- {schema?.schema && (
33
- <script type="application/ld+json">
34
- {JSON.stringify(schema.schema)}
35
- </script>
36
- )}
16
+ {title && <title>{title}</title>}
17
+ {description && <meta name="description" content={description} />}
18
+
19
+ {title && <meta property="og:title" content={title} />}
20
+ {description && <meta property="og:description" content={description} />}
21
+ {image && <meta property="og:image" content={image} />}
22
+
23
+ {title && <meta name="twitter:title" content={title} />}
24
+ {description && <meta name="twitter:description" content={description} />}
25
+ {image && <meta name="twitter:image" content={image} />}
26
+
37
27
  </Helmet>
38
- );
39
- }
28
+ )
29
+ }
@@ -0,0 +1,25 @@
1
+ import { useGetStatics } from '#@/base/statics/@use.js'
2
+ import { useGetLookups } from '#@/base/lookups/@use.js'
3
+
4
+ export const useCookiesData = () => {
5
+
6
+ const statics = useGetStatics()
7
+ const lookups = useGetLookups()
8
+
9
+ const itemVisual = {}
10
+ for (const key of Object.keys(statics.logic.cookies.data)) {
11
+ itemVisual[key] = { svg: statics.visual.svg.cookies }
12
+ }
13
+
14
+ return {
15
+ svg: statics.visual.svg.cookies,
16
+ itemLogic: statics.logic.cookies,
17
+ itemVisual,
18
+ itemVerbal: {
19
+ title: lookups.cookies.verbal.modal.title,
20
+ description: lookups.cookies.verbal.modal.description,
21
+ action: lookups.cookies.verbal.modal.action,
22
+ data: lookups.cookies.verbal.data
23
+ }
24
+ }
25
+ }