@sharadox/sharadox-web-library 0.0.0-stage → 0.1.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 (352) hide show
  1. package/LICENCA.md +89 -0
  2. package/LICENSE.md +89 -0
  3. package/NOTICE.md +3 -0
  4. package/README.md +14 -2
  5. package/distribution/action/send-contact/index.d.ts +9 -0
  6. package/distribution/action/send-contact/index.d.ts.map +1 -0
  7. package/distribution/action/send-contact/index.js +49 -0
  8. package/distribution/action/send-contact/index.js.map +1 -0
  9. package/distribution/action/send-contact/type.d.ts +5 -0
  10. package/distribution/action/send-contact/type.d.ts.map +1 -0
  11. package/distribution/action/send-contact/type.js +2 -0
  12. package/distribution/action/send-contact/type.js.map +1 -0
  13. package/distribution/asset/font/Geist-Regular.ttf +0 -0
  14. package/distribution/asset/font/Geist-SemiBold.ttf +0 -0
  15. package/distribution/asset/font/GeistMono-Regular.ttf +0 -0
  16. package/distribution/component/button/index.d.ts +4 -0
  17. package/distribution/component/button/index.d.ts.map +1 -0
  18. package/distribution/component/button/index.js +11 -0
  19. package/distribution/component/button/index.js.map +1 -0
  20. package/distribution/component/button/index.module.css +55 -0
  21. package/distribution/component/button/type.d.ts +13 -0
  22. package/distribution/component/button/type.d.ts.map +1 -0
  23. package/distribution/component/button/type.js +2 -0
  24. package/distribution/component/button/type.js.map +1 -0
  25. package/distribution/component/contact/form/index.d.ts +4 -0
  26. package/distribution/component/contact/form/index.d.ts.map +1 -0
  27. package/distribution/component/contact/form/index.js +23 -0
  28. package/distribution/component/contact/form/index.js.map +1 -0
  29. package/distribution/component/contact/form/index.module.css +108 -0
  30. package/distribution/component/contact/form/type.d.ts +8 -0
  31. package/distribution/component/contact/form/type.d.ts.map +1 -0
  32. package/distribution/component/contact/form/type.js +2 -0
  33. package/distribution/component/contact/form/type.js.map +1 -0
  34. package/distribution/component/contact/index.d.ts +4 -0
  35. package/distribution/component/contact/index.d.ts.map +1 -0
  36. package/distribution/component/contact/index.js +14 -0
  37. package/distribution/component/contact/index.js.map +1 -0
  38. package/distribution/component/contact/index.module.css +56 -0
  39. package/distribution/component/contact/type.d.ts +8 -0
  40. package/distribution/component/contact/type.d.ts.map +1 -0
  41. package/distribution/component/contact/type.js +2 -0
  42. package/distribution/component/contact/type.js.map +1 -0
  43. package/distribution/component/cursor/index.d.ts +3 -0
  44. package/distribution/component/cursor/index.d.ts.map +1 -0
  45. package/distribution/component/cursor/index.js +45 -0
  46. package/distribution/component/cursor/index.js.map +1 -0
  47. package/distribution/component/cursor/index.module.css +53 -0
  48. package/distribution/component/eyebrow/index.d.ts +4 -0
  49. package/distribution/component/eyebrow/index.d.ts.map +1 -0
  50. package/distribution/component/eyebrow/index.js +7 -0
  51. package/distribution/component/eyebrow/index.js.map +1 -0
  52. package/distribution/component/eyebrow/index.module.css +9 -0
  53. package/distribution/component/eyebrow/type.d.ts +6 -0
  54. package/distribution/component/eyebrow/type.d.ts.map +1 -0
  55. package/distribution/component/eyebrow/type.js +2 -0
  56. package/distribution/component/eyebrow/type.js.map +1 -0
  57. package/distribution/component/footer/index.d.ts +4 -0
  58. package/distribution/component/footer/index.d.ts.map +1 -0
  59. package/distribution/component/footer/index.js +12 -0
  60. package/distribution/component/footer/index.js.map +1 -0
  61. package/distribution/component/footer/index.module.css +59 -0
  62. package/distribution/component/footer/type.d.ts +5 -0
  63. package/distribution/component/footer/type.d.ts.map +1 -0
  64. package/distribution/component/footer/type.js +2 -0
  65. package/distribution/component/footer/type.js.map +1 -0
  66. package/distribution/component/globe/arc/index.d.ts +4 -0
  67. package/distribution/component/globe/arc/index.d.ts.map +1 -0
  68. package/distribution/component/globe/arc/index.js +29 -0
  69. package/distribution/component/globe/arc/index.js.map +1 -0
  70. package/distribution/component/globe/arc/type.d.ts +10 -0
  71. package/distribution/component/globe/arc/type.d.ts.map +1 -0
  72. package/distribution/component/globe/arc/type.js +2 -0
  73. package/distribution/component/globe/arc/type.js.map +1 -0
  74. package/distribution/component/globe/dots/index.d.ts +4 -0
  75. package/distribution/component/globe/dots/index.d.ts.map +1 -0
  76. package/distribution/component/globe/dots/index.js +34 -0
  77. package/distribution/component/globe/dots/index.js.map +1 -0
  78. package/distribution/component/globe/dots/type.d.ts +5 -0
  79. package/distribution/component/globe/dots/type.d.ts.map +1 -0
  80. package/distribution/component/globe/dots/type.js +2 -0
  81. package/distribution/component/globe/dots/type.js.map +1 -0
  82. package/distribution/component/globe/index.d.ts +6 -0
  83. package/distribution/component/globe/index.d.ts.map +1 -0
  84. package/distribution/component/globe/index.js +34 -0
  85. package/distribution/component/globe/index.js.map +1 -0
  86. package/distribution/component/globe/index.module.css +25 -0
  87. package/distribution/component/globe/marker/index.d.ts +4 -0
  88. package/distribution/component/globe/marker/index.d.ts.map +1 -0
  89. package/distribution/component/globe/marker/index.js +21 -0
  90. package/distribution/component/globe/marker/index.js.map +1 -0
  91. package/distribution/component/globe/marker/type.d.ts +7 -0
  92. package/distribution/component/globe/marker/type.d.ts.map +1 -0
  93. package/distribution/component/globe/marker/type.js +2 -0
  94. package/distribution/component/globe/marker/type.js.map +1 -0
  95. package/distribution/component/globe/placeholder/index.d.ts +3 -0
  96. package/distribution/component/globe/placeholder/index.d.ts.map +1 -0
  97. package/distribution/component/globe/placeholder/index.js +7 -0
  98. package/distribution/component/globe/placeholder/index.js.map +1 -0
  99. package/distribution/component/globe/shader/arc/index.d.ts +6 -0
  100. package/distribution/component/globe/shader/arc/index.d.ts.map +1 -0
  101. package/distribution/component/globe/shader/arc/index.js +23 -0
  102. package/distribution/component/globe/shader/arc/index.js.map +1 -0
  103. package/distribution/component/globe/shader/atmosphere/index.d.ts +6 -0
  104. package/distribution/component/globe/shader/atmosphere/index.d.ts.map +1 -0
  105. package/distribution/component/globe/shader/atmosphere/index.js +14 -0
  106. package/distribution/component/globe/shader/atmosphere/index.js.map +1 -0
  107. package/distribution/component/globe/shader/body/index.d.ts +6 -0
  108. package/distribution/component/globe/shader/body/index.d.ts.map +1 -0
  109. package/distribution/component/globe/shader/body/index.js +13 -0
  110. package/distribution/component/globe/shader/body/index.js.map +1 -0
  111. package/distribution/component/globe/shader/dot/index.d.ts +6 -0
  112. package/distribution/component/globe/shader/dot/index.d.ts.map +1 -0
  113. package/distribution/component/globe/shader/dot/index.js +28 -0
  114. package/distribution/component/globe/shader/dot/index.js.map +1 -0
  115. package/distribution/component/globe/shader/glow-vertex/index.d.ts +3 -0
  116. package/distribution/component/globe/shader/glow-vertex/index.d.ts.map +1 -0
  117. package/distribution/component/globe/shader/glow-vertex/index.js +9 -0
  118. package/distribution/component/globe/shader/glow-vertex/index.js.map +1 -0
  119. package/distribution/component/globe/world/index.d.ts +4 -0
  120. package/distribution/component/globe/world/index.d.ts.map +1 -0
  121. package/distribution/component/globe/world/index.js +35 -0
  122. package/distribution/component/globe/world/index.js.map +1 -0
  123. package/distribution/component/globe/world/type.d.ts +8 -0
  124. package/distribution/component/globe/world/type.d.ts.map +1 -0
  125. package/distribution/component/globe/world/type.js +2 -0
  126. package/distribution/component/globe/world/type.js.map +1 -0
  127. package/distribution/component/hero/index.d.ts +4 -0
  128. package/distribution/component/hero/index.d.ts.map +1 -0
  129. package/distribution/component/hero/index.js +21 -0
  130. package/distribution/component/hero/index.js.map +1 -0
  131. package/distribution/component/hero/index.module.css +127 -0
  132. package/distribution/component/hero/type.d.ts +5 -0
  133. package/distribution/component/hero/type.d.ts.map +1 -0
  134. package/distribution/component/hero/type.js +2 -0
  135. package/distribution/component/hero/type.js.map +1 -0
  136. package/distribution/component/language-switch/index.d.ts +4 -0
  137. package/distribution/component/language-switch/index.d.ts.map +1 -0
  138. package/distribution/component/language-switch/index.js +9 -0
  139. package/distribution/component/language-switch/index.js.map +1 -0
  140. package/distribution/component/language-switch/index.module.css +17 -0
  141. package/distribution/component/language-switch/type.d.ts +5 -0
  142. package/distribution/component/language-switch/type.d.ts.map +1 -0
  143. package/distribution/component/language-switch/type.js +2 -0
  144. package/distribution/component/language-switch/type.js.map +1 -0
  145. package/distribution/component/marquee/index.d.ts +3 -0
  146. package/distribution/component/marquee/index.d.ts.map +1 -0
  147. package/distribution/component/marquee/index.js +9 -0
  148. package/distribution/component/marquee/index.js.map +1 -0
  149. package/distribution/component/marquee/index.module.css +28 -0
  150. package/distribution/component/navigation/index.d.ts +4 -0
  151. package/distribution/component/navigation/index.d.ts.map +1 -0
  152. package/distribution/component/navigation/index.js +21 -0
  153. package/distribution/component/navigation/index.js.map +1 -0
  154. package/distribution/component/navigation/index.module.css +53 -0
  155. package/distribution/component/navigation/type.d.ts +5 -0
  156. package/distribution/component/navigation/type.d.ts.map +1 -0
  157. package/distribution/component/navigation/type.js +2 -0
  158. package/distribution/component/navigation/type.js.map +1 -0
  159. package/distribution/component/process/index.d.ts +4 -0
  160. package/distribution/component/process/index.d.ts.map +1 -0
  161. package/distribution/component/process/index.js +19 -0
  162. package/distribution/component/process/index.js.map +1 -0
  163. package/distribution/component/process/index.module.css +43 -0
  164. package/distribution/component/process/step/index.d.ts +4 -0
  165. package/distribution/component/process/step/index.d.ts.map +1 -0
  166. package/distribution/component/process/step/index.js +12 -0
  167. package/distribution/component/process/step/index.js.map +1 -0
  168. package/distribution/component/process/step/index.module.css +33 -0
  169. package/distribution/component/process/step/type.d.ts +10 -0
  170. package/distribution/component/process/step/type.d.ts.map +1 -0
  171. package/distribution/component/process/step/type.js +2 -0
  172. package/distribution/component/process/step/type.js.map +1 -0
  173. package/distribution/component/process/type.d.ts +5 -0
  174. package/distribution/component/process/type.d.ts.map +1 -0
  175. package/distribution/component/process/type.js +2 -0
  176. package/distribution/component/process/type.js.map +1 -0
  177. package/distribution/component/section/index.d.ts +4 -0
  178. package/distribution/component/section/index.d.ts.map +1 -0
  179. package/distribution/component/section/index.js +7 -0
  180. package/distribution/component/section/index.js.map +1 -0
  181. package/distribution/component/section/index.module.css +6 -0
  182. package/distribution/component/section/type.d.ts +7 -0
  183. package/distribution/component/section/type.d.ts.map +1 -0
  184. package/distribution/component/section/type.js +2 -0
  185. package/distribution/component/section/type.js.map +1 -0
  186. package/distribution/component/section-heading/index.d.ts +4 -0
  187. package/distribution/component/section-heading/index.d.ts.map +1 -0
  188. package/distribution/component/section-heading/index.js +9 -0
  189. package/distribution/component/section-heading/index.js.map +1 -0
  190. package/distribution/component/section-heading/index.module.css +7 -0
  191. package/distribution/component/section-heading/type.d.ts +5 -0
  192. package/distribution/component/section-heading/type.d.ts.map +1 -0
  193. package/distribution/component/section-heading/type.js +2 -0
  194. package/distribution/component/section-heading/type.js.map +1 -0
  195. package/distribution/component/services/application-visual/index.d.ts +4 -0
  196. package/distribution/component/services/application-visual/index.d.ts.map +1 -0
  197. package/distribution/component/services/application-visual/index.js +17 -0
  198. package/distribution/component/services/application-visual/index.js.map +1 -0
  199. package/distribution/component/services/application-visual/index.module.css +95 -0
  200. package/distribution/component/services/application-visual/type.d.ts +5 -0
  201. package/distribution/component/services/application-visual/type.d.ts.map +1 -0
  202. package/distribution/component/services/application-visual/type.js +2 -0
  203. package/distribution/component/services/application-visual/type.js.map +1 -0
  204. package/distribution/component/services/card/index.d.ts +4 -0
  205. package/distribution/component/services/card/index.d.ts.map +1 -0
  206. package/distribution/component/services/card/index.js +10 -0
  207. package/distribution/component/services/card/index.js.map +1 -0
  208. package/distribution/component/services/card/index.module.css +92 -0
  209. package/distribution/component/services/card/type.d.ts +12 -0
  210. package/distribution/component/services/card/type.d.ts.map +1 -0
  211. package/distribution/component/services/card/type.js +2 -0
  212. package/distribution/component/services/card/type.js.map +1 -0
  213. package/distribution/component/services/index.d.ts +4 -0
  214. package/distribution/component/services/index.d.ts.map +1 -0
  215. package/distribution/component/services/index.js +21 -0
  216. package/distribution/component/services/index.js.map +1 -0
  217. package/distribution/component/services/index.module.css +19 -0
  218. package/distribution/component/services/platform-visual/index.d.ts +3 -0
  219. package/distribution/component/services/platform-visual/index.d.ts.map +1 -0
  220. package/distribution/component/services/platform-visual/index.js +16 -0
  221. package/distribution/component/services/platform-visual/index.js.map +1 -0
  222. package/distribution/component/services/platform-visual/index.module.css +46 -0
  223. package/distribution/component/services/type.d.ts +5 -0
  224. package/distribution/component/services/type.d.ts.map +1 -0
  225. package/distribution/component/services/type.js +2 -0
  226. package/distribution/component/services/type.js.map +1 -0
  227. package/distribution/component/services/web-visual/index.d.ts +3 -0
  228. package/distribution/component/services/web-visual/index.d.ts.map +1 -0
  229. package/distribution/component/services/web-visual/index.js +25 -0
  230. package/distribution/component/services/web-visual/index.js.map +1 -0
  231. package/distribution/component/services/web-visual/index.module.css +134 -0
  232. package/distribution/component/share-image/index.d.ts +5 -0
  233. package/distribution/component/share-image/index.d.ts.map +1 -0
  234. package/distribution/component/share-image/index.js +66 -0
  235. package/distribution/component/share-image/index.js.map +1 -0
  236. package/distribution/component/share-image/type.d.ts +7 -0
  237. package/distribution/component/share-image/type.d.ts.map +1 -0
  238. package/distribution/component/share-image/type.js +2 -0
  239. package/distribution/component/share-image/type.js.map +1 -0
  240. package/distribution/component/statement/index.d.ts +4 -0
  241. package/distribution/component/statement/index.d.ts.map +1 -0
  242. package/distribution/component/statement/index.js +9 -0
  243. package/distribution/component/statement/index.js.map +1 -0
  244. package/distribution/component/statement/index.module.css +13 -0
  245. package/distribution/component/statement/type.d.ts +4 -0
  246. package/distribution/component/statement/type.d.ts.map +1 -0
  247. package/distribution/component/statement/type.js +2 -0
  248. package/distribution/component/statement/type.js.map +1 -0
  249. package/distribution/component/structured-data/index.d.ts +4 -0
  250. package/distribution/component/structured-data/index.d.ts.map +1 -0
  251. package/distribution/component/structured-data/index.js +36 -0
  252. package/distribution/component/structured-data/index.js.map +1 -0
  253. package/distribution/component/structured-data/type.d.ts +5 -0
  254. package/distribution/component/structured-data/type.d.ts.map +1 -0
  255. package/distribution/component/structured-data/type.js +2 -0
  256. package/distribution/component/structured-data/type.js.map +1 -0
  257. package/distribution/component/wordmark/index.d.ts +4 -0
  258. package/distribution/component/wordmark/index.d.ts.map +1 -0
  259. package/distribution/component/wordmark/index.js +7 -0
  260. package/distribution/component/wordmark/index.js.map +1 -0
  261. package/distribution/component/wordmark/index.module.css +23 -0
  262. package/distribution/component/wordmark/type.d.ts +4 -0
  263. package/distribution/component/wordmark/type.d.ts.map +1 -0
  264. package/distribution/component/wordmark/type.js +2 -0
  265. package/distribution/component/wordmark/type.js.map +1 -0
  266. package/distribution/content/contact/index.d.ts +62 -0
  267. package/distribution/content/contact/index.d.ts.map +1 -0
  268. package/distribution/content/contact/index.js +35 -0
  269. package/distribution/content/contact/index.js.map +1 -0
  270. package/distribution/content/footer/index.d.ts +12 -0
  271. package/distribution/content/footer/index.d.ts.map +1 -0
  272. package/distribution/content/footer/index.js +6 -0
  273. package/distribution/content/footer/index.js.map +1 -0
  274. package/distribution/content/globe/index.d.ts +8 -0
  275. package/distribution/content/globe/index.d.ts.map +1 -0
  276. package/distribution/content/globe/index.js +18 -0
  277. package/distribution/content/globe/index.js.map +1 -0
  278. package/distribution/content/hero/index.d.ts +28 -0
  279. package/distribution/content/hero/index.d.ts.map +1 -0
  280. package/distribution/content/hero/index.js +16 -0
  281. package/distribution/content/hero/index.js.map +1 -0
  282. package/distribution/content/navigation/index.d.ts +20 -0
  283. package/distribution/content/navigation/index.d.ts.map +1 -0
  284. package/distribution/content/navigation/index.js +8 -0
  285. package/distribution/content/navigation/index.js.map +1 -0
  286. package/distribution/content/process/index.d.ts +53 -0
  287. package/distribution/content/process/index.d.ts.map +1 -0
  288. package/distribution/content/process/index.js +31 -0
  289. package/distribution/content/process/index.js.map +1 -0
  290. package/distribution/content/services/index.d.ts +62 -0
  291. package/distribution/content/services/index.d.ts.map +1 -0
  292. package/distribution/content/services/index.js +52 -0
  293. package/distribution/content/services/index.js.map +1 -0
  294. package/distribution/content/site/index.d.ts +19 -0
  295. package/distribution/content/site/index.d.ts.map +1 -0
  296. package/distribution/content/site/index.js +19 -0
  297. package/distribution/content/site/index.js.map +1 -0
  298. package/distribution/content/stack/index.d.ts +3 -0
  299. package/distribution/content/stack/index.d.ts.map +1 -0
  300. package/distribution/content/stack/index.js +16 -0
  301. package/distribution/content/stack/index.js.map +1 -0
  302. package/distribution/content/statement/index.d.ts +6 -0
  303. package/distribution/content/statement/index.d.ts.map +1 -0
  304. package/distribution/content/statement/index.js +6 -0
  305. package/distribution/content/statement/index.js.map +1 -0
  306. package/distribution/hook/globe-drag/index.d.ts +10 -0
  307. package/distribution/hook/globe-drag/index.d.ts.map +1 -0
  308. package/distribution/hook/globe-drag/index.js +99 -0
  309. package/distribution/hook/globe-drag/index.js.map +1 -0
  310. package/distribution/hook/globe-drag/type.d.ts +11 -0
  311. package/distribution/hook/globe-drag/type.d.ts.map +1 -0
  312. package/distribution/hook/globe-drag/type.js +2 -0
  313. package/distribution/hook/globe-drag/type.js.map +1 -0
  314. package/distribution/hook/land-points/index.d.ts +3 -0
  315. package/distribution/hook/land-points/index.d.ts.map +1 -0
  316. package/distribution/hook/land-points/index.js +17 -0
  317. package/distribution/hook/land-points/index.js.map +1 -0
  318. package/distribution/style/token/index.css +1 -0
  319. package/distribution/style/token/index.scss +18 -0
  320. package/distribution/utility/horizon-dots/index.d.ts +4 -0
  321. package/distribution/utility/horizon-dots/index.d.ts.map +1 -0
  322. package/distribution/utility/horizon-dots/index.js +17 -0
  323. package/distribution/utility/horizon-dots/index.js.map +1 -0
  324. package/distribution/utility/horizon-dots/type.d.ts +7 -0
  325. package/distribution/utility/horizon-dots/type.d.ts.map +1 -0
  326. package/distribution/utility/horizon-dots/type.js +2 -0
  327. package/distribution/utility/horizon-dots/type.js.map +1 -0
  328. package/distribution/utility/latitude-longitude-to-vector/index.d.ts +7 -0
  329. package/distribution/utility/latitude-longitude-to-vector/index.d.ts.map +1 -0
  330. package/distribution/utility/latitude-longitude-to-vector/index.js +12 -0
  331. package/distribution/utility/latitude-longitude-to-vector/index.js.map +1 -0
  332. package/distribution/utility/locale/index.d.ts +6 -0
  333. package/distribution/utility/locale/index.d.ts.map +1 -0
  334. package/distribution/utility/locale/index.js +8 -0
  335. package/distribution/utility/locale/index.js.map +1 -0
  336. package/distribution/utility/locale/type.d.ts +6 -0
  337. package/distribution/utility/locale/type.d.ts.map +1 -0
  338. package/distribution/utility/locale/type.js +2 -0
  339. package/distribution/utility/locale/type.js.map +1 -0
  340. package/distribution/utility/parse-contact/index.d.ts +4 -0
  341. package/distribution/utility/parse-contact/index.d.ts.map +1 -0
  342. package/distribution/utility/parse-contact/index.js +19 -0
  343. package/distribution/utility/parse-contact/index.js.map +1 -0
  344. package/distribution/utility/parse-contact/type.d.ts +17 -0
  345. package/distribution/utility/parse-contact/type.d.ts.map +1 -0
  346. package/distribution/utility/parse-contact/type.js +2 -0
  347. package/distribution/utility/parse-contact/type.js.map +1 -0
  348. package/distribution/utility/web-gl-support/index.d.ts +3 -0
  349. package/distribution/utility/web-gl-support/index.d.ts.map +1 -0
  350. package/distribution/utility/web-gl-support/index.js +11 -0
  351. package/distribution/utility/web-gl-support/index.js.map +1 -0
  352. package/package.json +96 -3
package/LICENCA.md ADDED
@@ -0,0 +1,89 @@
1
+ # Licença Sharadox de Código Verificável
2
+
3
+ Versão 0.1.0
4
+
5
+ O texto em língua portuguesa é o único texto original e vinculativo desta licença. A tradução para inglês (`LICENSE.md`) é meramente informativa; em caso de divergência prevalece o texto em português.
6
+
7
+ Esta licença torna o código-fonte da Obra público para que qualquer pessoa o possa ler e verificar. **Não é uma licença de código aberto:** não autoriza copiar, modificar, distribuir ou utilizar a Obra para além do que nela se prevê. Todos os direitos não expressamente concedidos estão reservados.
8
+
9
+ ## 1. Definições
10
+
11
+ Para efeitos desta licença:
12
+
13
+ 1. **«Obra»** — o programa de computador, a sua documentação, o design, os textos, as imagens e quaisquer outros conteúdos disponibilizados pelo Licenciante ao abrigo desta licença, em código-fonte ou em qualquer outra forma.
14
+ 2. **«Licenciante»** — o titular dos direitos de autor identificado no aviso de direitos de autor que acompanha a Obra.
15
+ 3. **«Licenciado»** — qualquer pessoa, singular ou coletiva, que aceda à Obra ao abrigo desta licença.
16
+ 4. **«Verificação»** — ler, analisar e estudar a Obra para compreender o seu funcionamento, avaliar a sua qualidade, segurança, privacidade e conformidade legal, ou confirmar que corresponde ao que o Licenciante disponibiliza ao público.
17
+ 5. **«Aviso»** — o aviso de direitos de autor do Licenciante e a indicação de que a Obra está licenciada ao abrigo desta licença, incluindo a respetiva versão.
18
+
19
+ ## 2. Direitos concedidos
20
+
21
+ O Licenciante concede ao Licenciado uma licença mundial, gratuita, não exclusiva, intransmissível e revogável nos termos da cláusula 6, exclusivamente para:
22
+
23
+ 1. aceder à Obra e lê-la, nos locais onde o Licenciante a publica;
24
+ 2. fazer as reproduções temporárias e as cópias locais estritamente necessárias à Verificação, incluindo compilar e executar a Obra no seu próprio equipamento apenas para esse fim;
25
+ 3. citar excertos curtos da Obra, com indicação da fonte e do Aviso, para fins de crítica, comentário, ensino, investigação ou comunicação de vulnerabilidades, nos limites do artigo 75.º do Código do Direito de Autor e dos Direitos Conexos;
26
+ 4. comunicar ao Licenciante erros e vulnerabilidades de segurança encontrados.
27
+
28
+ ## 3. Atos proibidos
29
+
30
+ Salvo autorização prévia e escrita do Licenciante, e sem prejuízo da cláusula 4, é proibido:
31
+
32
+ 1. reproduzir a Obra, total ou parcialmente, para além do previsto na cláusula 2;
33
+ 2. modificar, traduzir, adaptar ou transformar a Obra, ou criar Obras derivadas dela;
34
+ 3. distribuir, publicar, comunicar ao público, colocar à disposição, vender, alugar, emprestar ou sublicenciar a Obra ou partes dela;
35
+ 4. utilizar a Obra, ou partes dela, em produção, em produtos ou serviços próprios ou de terceiros, ou para qualquer finalidade comercial;
36
+ 5. utilizar a Obra para treinar, afinar ou avaliar sistemas de inteligência artificial ou de aprendizagem automática, ou incluí-la em conjuntos de dados destinados a esse fim;
37
+ 6. remover ou alterar o Aviso ou quaisquer indicações de autoria.
38
+
39
+ ## 4. Direitos legais não afetados
40
+
41
+ Esta licença não restringe os atos que a lei permite independentemente de autorização do titular, designadamente os previstos nos artigos 6.º e 7.º do Decreto-Lei n.º 252/94, de 20 de outubro, e as utilizações livres previstas no Código do Direito de Autor e dos Direitos Conexos.
42
+
43
+ ## 5. Nomes, marcas e design
44
+
45
+ A Obra inclui o nome, as marcas, os logótipos, a identidade visual e o design do Licenciante, incluindo a designação «Sharadox». Esta licença não concede qualquer direito sobre os mesmos, sendo proibida a sua utilização, imitação ou reprodução sem autorização prévia e escrita.
46
+
47
+ ## 6. Cessação
48
+
49
+ 1. Os direitos concedidos por esta licença cessam automaticamente se o Licenciado violar qualquer das suas condições.
50
+ 2. O Licenciante pode ainda revogar esta licença em relação a um Licenciado determinado, mediante comunicação escrita, com efeitos imediatos.
51
+ 3. Após a cessação, o Licenciado deve eliminar todas as cópias da Obra em seu poder.
52
+
53
+ ## 7. Contribuições
54
+
55
+ Se o Licenciado enviar ao Licenciante sugestões, correções ou outras contribuições para a Obra, concede ao Licenciante, gratuitamente, uma licença mundial, perpétua, irrevogável e não exclusiva para as utilizar, reproduzir, modificar, distribuir e sublicenciar, como parte da Obra ou de qualquer outra forma, e declara que tem legitimidade para conceder essa licença.
56
+
57
+ ## 8. Exclusão de garantias
58
+
59
+ A Obra é disponibilizada «tal como está» e «conforme disponível», sem qualquer garantia, expressa ou tácita, incluindo, designadamente, garantias de comerciabilidade, de adequação a um fim específico, de ausência de erros ou de não violação de direitos de terceiros, na medida máxima permitida pela lei aplicável.
60
+
61
+ ## 9. Limitação de responsabilidade
62
+
63
+ 1. Na medida máxima permitida pela lei aplicável, o Licenciante não é responsável por quaisquer danos, diretos ou indiretos, incluindo lucros cessantes, perda de dados ou interrupção de atividade, resultantes do acesso à Obra ou da sua utilização nos termos desta licença.
64
+ 2. Nada nesta licença exclui ou limita a responsabilidade do Licenciante nos casos em que tal exclusão ou limitação não seja permitida por lei, designadamente por atos praticados com dolo ou culpa grave, nos termos do artigo 809.º e do n.º 2 do artigo 800.º do Código Civil, nem afeta os direitos que a lei imperativamente reconheça aos consumidores.
65
+
66
+ ## 10. Lei aplicável e foro
67
+
68
+ 1. Esta licença rege-se pela lei portuguesa, designadamente pelo Código do Direito de Autor e dos Direitos Conexos, aprovado pelo Decreto-Lei n.º 63/85, de 14 de março, e pelo Decreto-Lei n.º 252/94, de 20 de outubro, relativo à proteção jurídica dos programas de computador.
69
+ 2. Para a resolução de quaisquer litígios emergentes desta licença é competente o Tribunal Judicial da Comarca de Faro, sem prejuízo das normas imperativas de competência aplicáveis, nomeadamente as que protegem os consumidores.
70
+
71
+ ## 11. Versões da licença
72
+
73
+ O Licenciante pode publicar novas versões desta licença, identificadas por um número de versão. A Obra fica sujeita à versão indicada no Aviso.
74
+
75
+ ## 12. Disposições finais
76
+
77
+ 1. Se alguma disposição desta licença for considerada inválida ou ineficaz, as restantes mantêm-se em vigor, devendo a disposição afetada ser interpretada de forma a aproximar-se, tanto quanto possível, da intenção original.
78
+ 2. A não exigência, em qualquer momento, do cumprimento de uma disposição desta licença não constitui renúncia ao direito de o exigir posteriormente.
79
+ 3. Para pedidos de autorização ou comunicações ao abrigo desta licença, contacte o Licenciante pelos meios indicados no Aviso ou no local onde a Obra é publicada.
80
+
81
+ ## Como aplicar esta licença
82
+
83
+ Inclua na Obra um ficheiro `LICENCA.md` com este texto, a tradução `LICENSE.md` e o seguinte aviso, preenchendo o ano e o titular:
84
+
85
+ ```
86
+ Direitos de autor © <ano> <titular>. Todos os direitos reservados.
87
+ Código publicado ao abrigo da Licença Sharadox de Código Verificável, versão 0.1.0.
88
+ https://github.com/Sharadox/sharadox-verifiable-source-license
89
+ ```
package/LICENSE.md ADDED
@@ -0,0 +1,89 @@
1
+ # Sharadox Verifiable Source Licence
2
+
3
+ Version 0.1.0
4
+
5
+ This is an informative English translation. The Portuguese text (`LICENCA.md`) is the only original and binding text of this licence; if the two differ, the Portuguese text prevails.
6
+
7
+ This licence makes the source code of the Work public so that anyone can read and verify it. **It is not an open source licence:** it does not allow copying, modifying, distributing or using the Work beyond what it provides. All rights not expressly granted are reserved.
8
+
9
+ ## 1. Definitions
10
+
11
+ For the purposes of this licence:
12
+
13
+ 1. **"Work"** — the computer program, its documentation, design, text, images and any other content made available by the Licensor under this licence, in source code or in any other form.
14
+ 2. **"Licensor"** — the copyright holder identified in the copyright notice that accompanies the Work.
15
+ 3. **"Licensee"** — any natural or legal person accessing the Work under this licence.
16
+ 4. **"Verification"** — reading, analysing and studying the Work to understand how it works, to assess its quality, security, privacy and legal compliance, or to confirm that it matches what the Licensor makes available to the public.
17
+ 5. **"Notice"** — the Licensor's copyright notice and the statement that the Work is licensed under this licence, including its version.
18
+
19
+ ## 2. Rights granted
20
+
21
+ The Licensor grants the Licensee a worldwide, royalty-free, non-exclusive, non-transferable licence, revocable under clause 6, solely to:
22
+
23
+ 1. access and read the Work where the Licensor publishes it;
24
+ 2. make the temporary reproductions and local copies strictly necessary for Verification, including compiling and running the Work on their own equipment for that purpose only;
25
+ 3. quote short excerpts of the Work, citing the source and the Notice, for criticism, commentary, teaching, research or vulnerability reporting, within the limits of article 75 of the Portuguese Code of Copyright and Related Rights;
26
+ 4. report errors and security vulnerabilities found to the Licensor.
27
+
28
+ ## 3. Prohibited acts
29
+
30
+ Unless the Licensor gives prior written permission, and without prejudice to clause 4, it is prohibited to:
31
+
32
+ 1. reproduce the Work, in whole or in part, beyond what clause 2 allows;
33
+ 2. modify, translate, adapt or transform the Work, or create derivative works from it;
34
+ 3. distribute, publish, communicate to the public, make available, sell, rent, lend or sublicense the Work or parts of it;
35
+ 4. use the Work, or parts of it, in production, in one's own or third-party products or services, or for any commercial purpose;
36
+ 5. use the Work to train, fine-tune or evaluate artificial intelligence or machine learning systems, or include it in datasets intended for that purpose;
37
+ 6. remove or alter the Notice or any authorship information.
38
+
39
+ ## 4. Statutory rights not affected
40
+
41
+ This licence does not restrict acts that the law allows regardless of the rights holder's permission, in particular those in articles 6 and 7 of Decree-Law no. 252/94 of 20 October, and the free uses provided for in the Code of Copyright and Related Rights.
42
+
43
+ ## 5. Names, trademarks and design
44
+
45
+ The Work includes the Licensor's name, trademarks, logos, visual identity and design, including the name "Sharadox". This licence grants no rights to them, and using, imitating or reproducing them without prior written permission is prohibited.
46
+
47
+ ## 6. Termination
48
+
49
+ 1. The rights granted by this licence terminate automatically if the Licensee breaches any of its conditions.
50
+ 2. The Licensor may also revoke this licence for a specific Licensee by written notice, with immediate effect.
51
+ 3. On termination, the Licensee must delete all copies of the Work in their possession.
52
+
53
+ ## 7. Contributions
54
+
55
+ If the Licensee sends the Licensor suggestions, fixes or other contributions to the Work, they grant the Licensor, free of charge, a worldwide, perpetual, irrevocable and non-exclusive licence to use, reproduce, modify, distribute and sublicense them, as part of the Work or otherwise, and declare that they are entitled to grant that licence.
56
+
57
+ ## 8. Disclaimer of warranties
58
+
59
+ The Work is provided "as is" and "as available", without any warranty, express or implied, including in particular warranties of merchantability, fitness for a particular purpose, absence of errors or non-infringement of third-party rights, to the maximum extent permitted by applicable law.
60
+
61
+ ## 9. Limitation of liability
62
+
63
+ 1. To the maximum extent permitted by applicable law, the Licensor is not liable for any damages, direct or indirect, including loss of profits, loss of data or business interruption, arising from access to or use of the Work under this licence.
64
+ 2. Nothing in this licence excludes or limits the Licensor's liability where such exclusion or limitation is not permitted by law, in particular for acts committed with intent or gross negligence, under article 809 and article 800(2) of the Portuguese Civil Code, nor does it affect rights that the law mandatorily grants to consumers.
65
+
66
+ ## 10. Governing law and jurisdiction
67
+
68
+ 1. This licence is governed by Portuguese law, in particular the Code of Copyright and Related Rights, approved by Decree-Law no. 63/85 of 14 March, and Decree-Law no. 252/94 of 20 October on the legal protection of computer programs.
69
+ 2. The Judicial Court of the District of Faro has jurisdiction over any dispute arising from this licence, without prejudice to applicable mandatory rules of jurisdiction, in particular those protecting consumers.
70
+
71
+ ## 11. Licence versions
72
+
73
+ The Licensor may publish new versions of this licence, identified by a version number. The Work is subject to the version stated in the Notice.
74
+
75
+ ## 12. Final provisions
76
+
77
+ 1. If any provision of this licence is held invalid or unenforceable, the remaining provisions stay in force, and the affected provision shall be interpreted as closely as possible to its original intent.
78
+ 2. Failure to enforce any provision of this licence at any time does not waive the right to enforce it later.
79
+ 3. For permission requests or notices under this licence, contact the Licensor through the means given in the Notice or where the Work is published.
80
+
81
+ ## How to apply this licence
82
+
83
+ Include in the Work a `LICENCA.md` file with the Portuguese text, this translation as `LICENSE.md`, and the following notice, filling in the year and holder:
84
+
85
+ ```
86
+ Direitos de autor © <ano> <titular>. Todos os direitos reservados.
87
+ Código publicado ao abrigo da Licença Sharadox de Código Verificável, versão 0.1.0.
88
+ https://github.com/Sharadox/sharadox-verifiable-source-license
89
+ ```
package/NOTICE.md ADDED
@@ -0,0 +1,3 @@
1
+ Direitos de autor © 2026 Micael Pires (Sharadox). Todos os direitos reservados.
2
+ Código publicado ao abrigo da Licença Sharadox de Código Verificável, versão 0.1.0.
3
+ https://github.com/Sharadox/sharadox-verifiable-source-license
package/README.md CHANGED
@@ -1,3 +1,15 @@
1
- # Temporary Holding Version
1
+ # @sharadox/sharadox-web-library
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Everything sharadox.com is made of — content, components (hero with the interactive globe, services, process, contact, navigation, footer…), the contact action and the design tokens — imported by [sharadox-web-application](https://github.com/Sharadox/sharadox-web-application), which keeps only its routes, global styles and configuration.
4
+
5
+ Generic pieces come from [`@sharadox/web-library`](https://github.com/Sharadox/web-library) and email from [`@sharadox/email-web-library`](https://github.com/Sharadox/email-web-library).
6
+
7
+ ## Use in the application
8
+
9
+ - Components: `import { Hero } from "@sharadox/sharadox-web-library/component/hero"`.
10
+ - Contact: the application's server action reads the visitor's ip address and calls `sendContact(form, ip)` from `action/send-contact`; `<Contact action={…} />` receives that action.
11
+ - Design tokens in Sass: add `node_modules/@sharadox/sharadox-web-library/distribution` to the Sass load path, then `@use "style/token" as *;`.
12
+
13
+ ## Licence
14
+
15
+ The source is public so anyone can read and verify it, but it is **not open source**: Licença Sharadox de Código Verificável, versão 0.1.0 — [português](LICENCA.md) (the binding text) · [English translation](LICENSE.md). The Sharadox name, brand and design are reserved.
@@ -0,0 +1,9 @@
1
+ import type { ContactState } from "@sharadox/sharadox-web-library/action/send-contact/type";
2
+ /**
3
+ * The contact form's work, called by the application's server action (which adds the visitor's ip address).
4
+ * Sends a contact form message to the Sharadox inbox through the email server in the `EMAIL_SERVER_*` environment
5
+ * variables (Amazon SES over SMTP), with the visitor as reply-to. The sender is `EMAIL_SENDER_ADDRESS`, an address on
6
+ * the sending subdomain verified in SES (email.sharadox.com), so the main domain's reputation stays separate.
7
+ */
8
+ export declare function sendContact(form: FormData, ip: string): Promise<ContactState>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/action/send-contact/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AAI5F;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAiCnF"}
@@ -0,0 +1,49 @@
1
+ import { createEmailSender, EmailError, readEmailServerConfiguration } from "@sharadox/email-web-library";
2
+ import { SITE } from "@sharadox/sharadox-web-library/content/site";
3
+ import { escapeHtml } from "@sharadox/web-library/html/escape";
4
+ import { parseContact } from "@sharadox/sharadox-web-library/utility/parse-contact";
5
+ import { createRateLimiter } from "@sharadox/web-library/form/rate-limit";
6
+ const allow = createRateLimiter({ window: 60 * 60 * 1000, maximum: 5 });
7
+ /**
8
+ * The contact form's work, called by the application's server action (which adds the visitor's ip address).
9
+ * Sends a contact form message to the Sharadox inbox through the email server in the `EMAIL_SERVER_*` environment
10
+ * variables (Amazon SES over SMTP), with the visitor as reply-to. The sender is `EMAIL_SENDER_ADDRESS`, an address on
11
+ * the sending subdomain verified in SES (email.sharadox.com), so the main domain's reputation stays separate.
12
+ */
13
+ export async function sendContact(form, ip) {
14
+ const parsed = parseContact(form);
15
+ // Bots get a fake success so they don't retry.
16
+ if (parsed.kind === "bot")
17
+ return { status: "sent" };
18
+ if (parsed.kind === "invalid")
19
+ return { status: "invalid" };
20
+ const { name, email, company, message, locale } = parsed.value;
21
+ if (!allow(ip))
22
+ return { status: "rate-limited" };
23
+ const subject = `New project enquiry — ${name}${company ? ` (${company})` : ""}`;
24
+ const text = `Name: ${name}\nEmail: ${email}\nCompany: ${company || "—"}\nLanguage: ${locale}\nIP: ${ip}\n\n${message}`;
25
+ const html = `<div style="font-family:-apple-system,Segoe UI,sans-serif;font-size:15px;line-height:1.6;color:#111">
26
+ <p style="color:#666;font-size:13px;margin:0 0 16px">New enquiry from sharadox.com (${escapeHtml(locale)})</p>
27
+ <p style="margin:0"><b>${escapeHtml(name)}</b>${company ? ` · ${escapeHtml(company)}` : ""}<br><a href="mailto:${escapeHtml(email)}">${escapeHtml(email)}</a></p>
28
+ <hr style="border:0;border-top:1px solid #eee;margin:18px 0">
29
+ <p style="white-space:pre-wrap;margin:0">${escapeHtml(message)}</p></div>`;
30
+ try {
31
+ const configuration = readEmailServerConfiguration();
32
+ await createEmailSender(configuration).send({
33
+ from: { name: "Sharadox Website", address: process.env.EMAIL_SENDER_ADDRESS || configuration.username },
34
+ to: SITE.email,
35
+ replyTo: { name: name.replace(/[\r\n]+/g, " "), address: email },
36
+ subject: subject.replace(/[\r\n]+/g, " ").slice(0, 300),
37
+ text,
38
+ html,
39
+ });
40
+ return { status: "sent" };
41
+ }
42
+ catch (error) {
43
+ if (error instanceof EmailError && error.code === "invalid-message")
44
+ return { status: "invalid" };
45
+ console.error("contact: sending failed", error);
46
+ return { status: "failed" };
47
+ }
48
+ }
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/action/send-contact/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAE,IAAI,EAAE,MAAM,6CAA6C,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,sDAAsD,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAG1E,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAExE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc,EAAE,EAAU;IAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,+CAA+C;IAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACrD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC5D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;IAE/D,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAElD,MAAM,OAAO,GAAG,yBAAyB,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACjF,MAAM,IAAI,GAAG,SAAS,IAAI,YAAY,KAAK,cAAc,OAAO,IAAI,GAAG,eAAe,MAAM,SAAS,EAAE,OAAO,OAAO,EAAE,CAAC;IACxH,MAAM,IAAI,GAAG;0FAC2E,UAAU,CAAC,MAAM,CAAC;6BAC/E,UAAU,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,uBAAuB,UAAU,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC;;+CAE7G,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC;IAE7E,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,4BAA4B,EAAE,CAAC;QACrD,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;YAC1C,IAAI,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,aAAa,CAAC,QAAQ,EAAE;YACvG,EAAE,EAAE,IAAI,CAAC,KAAK;YACd,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE;YAChE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACvD,IAAI;YACJ,IAAI;SACL,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAClG,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Result of a contact form submission, shown by the form. */
2
+ export type ContactState = {
3
+ status: "idle" | "sent" | "invalid" | "rate-limited" | "failed";
4
+ };
5
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../source/action/send-contact/type.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../source/action/send-contact/type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { ButtonProperties } from "@sharadox/sharadox-web-library/component/button/type";
2
+ /** Pill button or link. */
3
+ export declare function Button({ children, href, variant, size, arrow, disabled, className, }: ButtonProperties): import("react").JSX.Element;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/component/button/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AAE7F,2BAA2B;AAC3B,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,IAAI,EACJ,OAAiB,EACjB,IAAe,EACf,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,gBAAgB,+BAuBlB"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styles from "./index.module.css";
3
+ /** Pill button or link. */
4
+ export function Button({ children, href, variant = "white", size = "medium", arrow, disabled, className, }) {
5
+ const classNames = [styles.button, styles[variant], size !== "medium" && styles[size], className]
6
+ .filter(Boolean)
7
+ .join(" ");
8
+ const content = (_jsxs(_Fragment, { children: [children, arrow && (_jsx("span", { className: styles.arrow, "aria-hidden": true, children: "\u2192" }))] }));
9
+ return href ? (_jsx("a", { href: href, className: classNames, children: content })) : (_jsx("button", { className: classNames, disabled: disabled, children: content }));
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/component/button/index.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAGzC,2BAA2B;AAC3B,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,IAAI,EACJ,OAAO,GAAG,OAAO,EACjB,IAAI,GAAG,QAAQ,EACf,KAAK,EACL,QAAQ,EACR,SAAS,GACQ;IACjB,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;SAC9F,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,OAAO,GAAG,CACd,8BACG,QAAQ,EACR,KAAK,IAAI,CACR,eAAM,SAAS,EAAE,MAAM,CAAC,KAAK,4CAEtB,CACR,IACA,CACJ,CAAC;IACF,OAAO,IAAI,CAAC,CAAC,CAAC,CACZ,YAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,YACjC,OAAO,GACN,CACL,CAAC,CAAC,CAAC,CACF,iBAAQ,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,YAC9C,OAAO,GACD,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,55 @@
1
+ .button {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ gap: 10px;
6
+ height: 46px;
7
+ padding: 0 22px;
8
+ border-radius: 99px;
9
+ font-weight: 500;
10
+ font-size: 15px;
11
+ border: 1px solid transparent;
12
+ transition: background 0.3s, color 0.3s, border-color 0.3s, transform 0.4s var(--ease);
13
+ white-space: nowrap;
14
+ }
15
+ .button:active {
16
+ transform: scale(0.98);
17
+ }
18
+ .button:disabled {
19
+ opacity: 0.6;
20
+ }
21
+ .button:hover .arrow {
22
+ transform: translateX(4px);
23
+ }
24
+
25
+ .white {
26
+ background: #fff;
27
+ color: #000;
28
+ }
29
+ .white:hover {
30
+ background: #e6e6e6;
31
+ }
32
+
33
+ .ghost {
34
+ border-color: var(--line-2);
35
+ color: var(--foreground);
36
+ }
37
+ .ghost:hover {
38
+ background: rgba(255, 255, 255, 0.06);
39
+ border-color: rgba(255, 255, 255, 0.3);
40
+ }
41
+
42
+ .small {
43
+ height: 36px;
44
+ padding: 0 16px;
45
+ font-size: 14px;
46
+ }
47
+
48
+ .block {
49
+ width: 100%;
50
+ height: 52px;
51
+ }
52
+
53
+ .arrow {
54
+ transition: transform 0.4s var(--ease);
55
+ }
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from "react";
2
+ export interface ButtonProperties {
3
+ children: ReactNode;
4
+ /** Renders a link when set, otherwise a button. */
5
+ href?: string;
6
+ variant?: "white" | "ghost";
7
+ size?: "medium" | "small" | "block";
8
+ /** Adds an arrow that nudges right on hover. */
9
+ arrow?: boolean;
10
+ disabled?: boolean;
11
+ className?: string;
12
+ }
13
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../source/component/button/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;IACpC,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../source/component/button/type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { ContactFormProperties } from "@sharadox/sharadox-web-library/component/contact/form/type";
2
+ /** The enquiry form: honeypot and fill-time spam checks, inline errors, and an animated thank-you. */
3
+ export declare function ContactForm({ locale, action: sendAction }: ContactFormProperties): import("react").JSX.Element;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../source/component/contact/form/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4DAA4D,CAAC;AAExG,sGAAsG;AACtG,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,qBAAqB,+BA4EhF"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { AnimatePresence, motion } from "motion/react";
4
+ import { useActionState, useEffect, useRef } from "react";
5
+ import { Button } from "@sharadox/sharadox-web-library/component/button";
6
+ import { CONTACT } from "@sharadox/sharadox-web-library/content/contact";
7
+ import { SITE } from "@sharadox/sharadox-web-library/content/site";
8
+ import { useSpotlight } from "@sharadox/web-library/pointer/spotlight";
9
+ import { translate } from "@sharadox/web-library/internationalization/translate";
10
+ import styles from "./index.module.css";
11
+ /** The enquiry form: honeypot and fill-time spam checks, inline errors, and an animated thank-you. */
12
+ export function ContactForm({ locale, action: sendAction }) {
13
+ const [state, action, pending] = useActionState(sendAction, { status: "idle" });
14
+ // When the visitor started filling the form; bots submit faster than humans can.
15
+ const startedAt = useRef(null);
16
+ useEffect(() => {
17
+ if (startedAt.current)
18
+ startedAt.current.value = String(Date.now());
19
+ }, []);
20
+ const spotlight = useSpotlight();
21
+ return (_jsx(AnimatePresence, { mode: "wait", children: state.status === "sent" ? (_jsxs(motion.div, { className: `${styles.form} ${styles.done}`, initial: { opacity: 0, scale: 0.98 }, animate: { opacity: 1, scale: 1 }, role: "status", children: [_jsxs("svg", { viewBox: "0 0 48 48", className: styles.check, "aria-hidden": true, children: [_jsx("circle", { cx: "24", cy: "24", r: "22" }), _jsx("path", { d: "M14 24.5l7 7 13-14" })] }), _jsx("p", { children: translate(CONTACT.sent, locale) })] }, "sent")) : (_jsxs(motion.form, { ref: spotlight, action: action, className: styles.form, exit: { opacity: 0, scale: 0.98 }, children: [_jsx("input", { ref: startedAt, type: "hidden", name: "started-at", defaultValue: "0" }), _jsx("input", { type: "hidden", name: "locale", value: locale }), _jsx("div", { className: styles.honeypot, "aria-hidden": true, children: _jsxs("label", { children: ["Website", _jsx("input", { name: "website", tabIndex: -1, autoComplete: "off" })] }) }), _jsxs("div", { className: styles.row, children: [_jsxs("label", { className: styles.field, children: [_jsx("span", { children: translate(CONTACT.name, locale) }), _jsx("input", { name: "name", required: true, autoComplete: "name", maxLength: 120 })] }), _jsxs("label", { className: styles.field, children: [_jsx("span", { children: translate(CONTACT.email, locale) }), _jsx("input", { name: "email", type: "email", required: true, autoComplete: "email", maxLength: 200 })] })] }), _jsxs("label", { className: styles.field, children: [_jsx("span", { children: translate(CONTACT.company, locale) }), _jsx("input", { name: "company", autoComplete: "organization", maxLength: 160 })] }), _jsxs("label", { className: styles.field, children: [_jsx("span", { children: translate(CONTACT.message, locale) }), _jsx("textarea", { name: "message", required: true, rows: 5, maxLength: 5000 })] }), state.status !== "idle" && (_jsx("p", { className: styles.error, role: "alert", children: state.status === "failed" ? (_jsxs(_Fragment, { children: [translate(CONTACT.errors.failed, locale), " ", _jsx("a", { href: `mailto:${SITE.email}`, children: SITE.email }), "."] })) : (translate(CONTACT.errors[state.status], locale)) })), _jsx(Button, { size: "block", disabled: pending, arrow: !pending, children: pending ? translate(CONTACT.sending, locale) : translate(CONTACT.send, locale) })] }, "form")) }));
22
+ }
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../source/component/contact/form/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ .form {
2
+ --pointer-x: -500px;
3
+ --pointer-y: -500px;
4
+ position: relative;
5
+ display: grid;
6
+ gap: 14px;
7
+ padding: clamp(22px, 3vw, 34px);
8
+ border-radius: 22px;
9
+ background: var(--card);
10
+ border: 1px solid var(--line);
11
+ isolation: isolate;
12
+ }
13
+ .form::before {
14
+ content: "";
15
+ position: absolute;
16
+ inset: 0;
17
+ z-index: -1;
18
+ border-radius: inherit;
19
+ background: radial-gradient(500px circle at var(--pointer-x) var(--pointer-y), rgba(255, 255, 255, 0.05), transparent 60%);
20
+ }
21
+
22
+ .row {
23
+ display: grid;
24
+ grid-template-columns: 1fr 1fr;
25
+ gap: 14px;
26
+ }
27
+ @media (max-width: 860px) {
28
+ .row {
29
+ grid-template-columns: 1fr;
30
+ }
31
+ }
32
+
33
+ .field {
34
+ display: grid;
35
+ gap: 7px;
36
+ }
37
+ .field span {
38
+ font-size: 13px;
39
+ color: var(--foreground-2);
40
+ }
41
+ .field input,
42
+ .field textarea {
43
+ width: 100%;
44
+ font: inherit;
45
+ font-size: 15px;
46
+ color: var(--foreground);
47
+ background: #000;
48
+ border: 1px solid var(--line-2);
49
+ border-radius: 12px;
50
+ padding: 13px 14px;
51
+ transition: border-color 0.25s, box-shadow 0.25s;
52
+ resize: vertical;
53
+ }
54
+ .field input:focus,
55
+ .field textarea:focus {
56
+ outline: none;
57
+ border-color: rgba(255, 255, 255, 0.5);
58
+ box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.06);
59
+ }
60
+
61
+ .honeypot {
62
+ position: absolute;
63
+ left: -9999px;
64
+ width: 1px;
65
+ height: 1px;
66
+ overflow: hidden;
67
+ }
68
+
69
+ .error {
70
+ font-size: 14px;
71
+ color: #ff8a8a;
72
+ }
73
+ .error a {
74
+ text-decoration: underline;
75
+ }
76
+
77
+ .done {
78
+ min-height: 380px;
79
+ place-items: center;
80
+ text-align: center;
81
+ align-content: center;
82
+ gap: 18px;
83
+ }
84
+ .done p {
85
+ max-width: 30ch;
86
+ color: var(--foreground-2);
87
+ }
88
+
89
+ .check {
90
+ width: 56px;
91
+ height: 56px;
92
+ fill: none;
93
+ stroke: #fff;
94
+ stroke-width: 1.6;
95
+ stroke-linecap: round;
96
+ stroke-linejoin: round;
97
+ }
98
+ .check path {
99
+ stroke-dasharray: 40;
100
+ stroke-dashoffset: 40;
101
+ animation: draw 0.8s 0.2s var(--ease) forwards;
102
+ }
103
+
104
+ @keyframes draw {
105
+ to {
106
+ stroke-dashoffset: 0;
107
+ }
108
+ }
@@ -0,0 +1,8 @@
1
+ import type { ContactState } from "@sharadox/sharadox-web-library/action/send-contact/type";
2
+ import type { Locale } from "@sharadox/sharadox-web-library/utility/locale/type";
3
+ export interface ContactFormProperties {
4
+ locale: Locale;
5
+ /** The application's server action, which calls `sendContact`. */
6
+ action: (state: ContactState, form: FormData) => Promise<ContactState>;
7
+ }
8
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../source/component/contact/form/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AAC5F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oDAAoD,CAAC;AAEjF,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACxE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../../source/component/contact/form/type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { ContactProperties } from "@sharadox/sharadox-web-library/component/contact/type";
2
+ /** Contact section: invitation and direct email on the left, the form on the right. */
3
+ export declare function Contact({ locale, action }: ContactProperties): import("react").JSX.Element;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/component/contact/index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAE/F,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,iBAAiB,+BAkB5D"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Eyebrow } from "@sharadox/sharadox-web-library/component/eyebrow";
3
+ import { Reveal } from "@sharadox/web-library/animation/reveal";
4
+ import { Section } from "@sharadox/sharadox-web-library/component/section";
5
+ import { CONTACT } from "@sharadox/sharadox-web-library/content/contact";
6
+ import { SITE } from "@sharadox/sharadox-web-library/content/site";
7
+ import { translate } from "@sharadox/web-library/internationalization/translate";
8
+ import { ContactForm } from "@sharadox/sharadox-web-library/component/contact/form";
9
+ import styles from "./index.module.css";
10
+ /** Contact section: invitation and direct email on the left, the form on the right. */
11
+ export function Contact({ locale, action }) {
12
+ return (_jsxs(Section, { id: "contact", className: styles.contact, children: [_jsx("div", { className: styles.glow, "aria-hidden": true }), _jsxs(Reveal, { className: styles.heading, children: [_jsx(Eyebrow, { children: translate(CONTACT.eyebrow, locale) }), _jsx("h2", { children: translate(CONTACT.title, locale) }), _jsx("p", { className: styles.text, children: translate(CONTACT.text, locale) }), _jsxs("p", { className: styles.direct, children: [_jsx("span", { className: "monospace", children: translate(CONTACT.direct, locale) }), _jsx("a", { href: `mailto:${SITE.email}`, children: SITE.email })] })] }), _jsx(Reveal, { delay: 0.1, children: _jsx(ContactForm, { locale: locale, action: action }) })] }));
13
+ }
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/component/contact/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kDAAkD,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,kDAAkD,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,gDAAgD,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,6CAA6C,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,sDAAsD,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,uDAAuD,CAAC;AACpF,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAGzC,uFAAuF;AACvF,MAAM,UAAU,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAqB;IAC3D,OAAO,CACL,MAAC,OAAO,IAAC,EAAE,EAAC,SAAS,EAAC,SAAS,EAAE,MAAM,CAAC,OAAO,aAC7C,cAAK,SAAS,EAAE,MAAM,CAAC,IAAI,wBAAgB,EAC3C,MAAC,MAAM,IAAC,SAAS,EAAE,MAAM,CAAC,OAAO,aAC/B,KAAC,OAAO,cAAE,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,GAAW,EACvD,uBAAK,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,GAAM,EAC3C,YAAG,SAAS,EAAE,MAAM,CAAC,IAAI,YAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,GAAK,EAChE,aAAG,SAAS,EAAE,MAAM,CAAC,MAAM,aACzB,eAAM,SAAS,EAAC,WAAW,YAAE,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAAQ,EACtE,YAAG,IAAI,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,YAAG,IAAI,CAAC,KAAK,GAAK,IAC/C,IACG,EACT,KAAC,MAAM,IAAC,KAAK,EAAE,GAAG,YAChB,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,GACxC,IACD,CACX,CAAC;AACJ,CAAC"}