@barkajs/barka 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 (621) hide show
  1. package/CLAUDE.md +64 -0
  2. package/INVARIANTS.json +43 -0
  3. package/LICENSE +19 -0
  4. package/README.md +566 -0
  5. package/dist/app.d.ts +22 -0
  6. package/dist/app.d.ts.map +1 -0
  7. package/dist/app.js +464 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/built-in-theme/components/cta/cta.d.ts +5 -0
  10. package/dist/built-in-theme/components/cta/cta.d.ts.map +1 -0
  11. package/dist/built-in-theme/components/cta/cta.js +6 -0
  12. package/dist/built-in-theme/components/cta/cta.js.map +1 -0
  13. package/dist/built-in-theme/components/features/features.d.ts +5 -0
  14. package/dist/built-in-theme/components/features/features.d.ts.map +1 -0
  15. package/dist/built-in-theme/components/features/features.js +7 -0
  16. package/dist/built-in-theme/components/features/features.js.map +1 -0
  17. package/dist/built-in-theme/components/hero/hero.d.ts +5 -0
  18. package/dist/built-in-theme/components/hero/hero.d.ts.map +1 -0
  19. package/dist/built-in-theme/components/hero/hero.js +6 -0
  20. package/dist/built-in-theme/components/hero/hero.js.map +1 -0
  21. package/dist/built-in-theme/components/text/text.d.ts +4 -0
  22. package/dist/built-in-theme/components/text/text.d.ts.map +1 -0
  23. package/dist/built-in-theme/components/text/text.js +7 -0
  24. package/dist/built-in-theme/components/text/text.js.map +1 -0
  25. package/dist/built-in-theme/layouts/article.d.ts +4 -0
  26. package/dist/built-in-theme/layouts/article.d.ts.map +1 -0
  27. package/dist/built-in-theme/layouts/article.js +11 -0
  28. package/dist/built-in-theme/layouts/article.js.map +1 -0
  29. package/dist/built-in-theme/layouts/base.d.ts +7 -0
  30. package/dist/built-in-theme/layouts/base.d.ts.map +1 -0
  31. package/dist/built-in-theme/layouts/base.js +21 -0
  32. package/dist/built-in-theme/layouts/base.js.map +1 -0
  33. package/dist/built-in-theme/layouts/landing-page.d.ts +6 -0
  34. package/dist/built-in-theme/layouts/landing-page.d.ts.map +1 -0
  35. package/dist/built-in-theme/layouts/landing-page.js +6 -0
  36. package/dist/built-in-theme/layouts/landing-page.js.map +1 -0
  37. package/dist/built-in-theme/layouts/page.d.ts +4 -0
  38. package/dist/built-in-theme/layouts/page.d.ts.map +1 -0
  39. package/dist/built-in-theme/layouts/page.js +7 -0
  40. package/dist/built-in-theme/layouts/page.js.map +1 -0
  41. package/dist/cli/build.d.ts +11 -0
  42. package/dist/cli/build.d.ts.map +1 -0
  43. package/dist/cli/build.js +271 -0
  44. package/dist/cli/build.js.map +1 -0
  45. package/dist/cli/create-app.d.ts +4 -0
  46. package/dist/cli/create-app.d.ts.map +1 -0
  47. package/dist/cli/create-app.js +179 -0
  48. package/dist/cli/create-app.js.map +1 -0
  49. package/dist/cli/db-init.d.ts +6 -0
  50. package/dist/cli/db-init.d.ts.map +1 -0
  51. package/dist/cli/db-init.js +28 -0
  52. package/dist/cli/db-init.js.map +1 -0
  53. package/dist/cli/dev.d.ts +10 -0
  54. package/dist/cli/dev.d.ts.map +1 -0
  55. package/dist/cli/dev.js +68 -0
  56. package/dist/cli/dev.js.map +1 -0
  57. package/dist/cli/export-cmd.d.ts +6 -0
  58. package/dist/cli/export-cmd.d.ts.map +1 -0
  59. package/dist/cli/export-cmd.js +12 -0
  60. package/dist/cli/export-cmd.js.map +1 -0
  61. package/dist/cli/import-cmd.d.ts +6 -0
  62. package/dist/cli/import-cmd.d.ts.map +1 -0
  63. package/dist/cli/import-cmd.js +11 -0
  64. package/dist/cli/import-cmd.js.map +1 -0
  65. package/dist/cli/index.d.ts +3 -0
  66. package/dist/cli/index.d.ts.map +1 -0
  67. package/dist/cli/index.js +163 -0
  68. package/dist/cli/index.js.map +1 -0
  69. package/dist/cli/init-cmd.d.ts +20 -0
  70. package/dist/cli/init-cmd.d.ts.map +1 -0
  71. package/dist/cli/init-cmd.js +116 -0
  72. package/dist/cli/init-cmd.js.map +1 -0
  73. package/dist/cli/sync-cmd.d.ts +5 -0
  74. package/dist/cli/sync-cmd.d.ts.map +1 -0
  75. package/dist/cli/sync-cmd.js +17 -0
  76. package/dist/cli/sync-cmd.js.map +1 -0
  77. package/dist/content-engine.d.ts +50 -0
  78. package/dist/content-engine.d.ts.map +1 -0
  79. package/dist/content-engine.js +240 -0
  80. package/dist/content-engine.js.map +1 -0
  81. package/dist/db/connection.d.ts +9 -0
  82. package/dist/db/connection.d.ts.map +1 -0
  83. package/dist/db/connection.js +121 -0
  84. package/dist/db/connection.js.map +1 -0
  85. package/dist/db/schema.d.ts +1178 -0
  86. package/dist/db/schema.d.ts.map +1 -0
  87. package/dist/db/schema.js +79 -0
  88. package/dist/db/schema.js.map +1 -0
  89. package/dist/index.d.ts +12 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +8 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/lib/auth.d.ts +14 -0
  94. package/dist/lib/auth.d.ts.map +1 -0
  95. package/dist/lib/auth.js +40 -0
  96. package/dist/lib/auth.js.map +1 -0
  97. package/dist/lib/config-files.d.ts +8 -0
  98. package/dist/lib/config-files.d.ts.map +1 -0
  99. package/dist/lib/config-files.js +72 -0
  100. package/dist/lib/config-files.js.map +1 -0
  101. package/dist/lib/content-files.d.ts +5 -0
  102. package/dist/lib/content-files.d.ts.map +1 -0
  103. package/dist/lib/content-files.js +156 -0
  104. package/dist/lib/content-files.js.map +1 -0
  105. package/dist/lib/i18n.d.ts +33 -0
  106. package/dist/lib/i18n.d.ts.map +1 -0
  107. package/dist/lib/i18n.js +247 -0
  108. package/dist/lib/i18n.js.map +1 -0
  109. package/dist/lib/multisite.d.ts +23 -0
  110. package/dist/lib/multisite.d.ts.map +1 -0
  111. package/dist/lib/multisite.js +73 -0
  112. package/dist/lib/multisite.js.map +1 -0
  113. package/dist/lib/paths.d.ts +6 -0
  114. package/dist/lib/paths.d.ts.map +1 -0
  115. package/dist/lib/paths.js +25 -0
  116. package/dist/lib/paths.js.map +1 -0
  117. package/dist/lib/schema-loader.d.ts +25 -0
  118. package/dist/lib/schema-loader.d.ts.map +1 -0
  119. package/dist/lib/schema-loader.js +45 -0
  120. package/dist/lib/schema-loader.js.map +1 -0
  121. package/dist/lib/seo.d.ts +18 -0
  122. package/dist/lib/seo.d.ts.map +1 -0
  123. package/dist/lib/seo.js +212 -0
  124. package/dist/lib/seo.js.map +1 -0
  125. package/dist/lib/sync.d.ts +33 -0
  126. package/dist/lib/sync.d.ts.map +1 -0
  127. package/dist/lib/sync.js +308 -0
  128. package/dist/lib/sync.js.map +1 -0
  129. package/dist/lib/taxonomy.d.ts +29 -0
  130. package/dist/lib/taxonomy.d.ts.map +1 -0
  131. package/dist/lib/taxonomy.js +170 -0
  132. package/dist/lib/taxonomy.js.map +1 -0
  133. package/dist/lib/template-renderer.d.ts +6 -0
  134. package/dist/lib/template-renderer.d.ts.map +1 -0
  135. package/dist/lib/template-renderer.js +80 -0
  136. package/dist/lib/template-renderer.js.map +1 -0
  137. package/dist/lib/theme-loader.d.ts +5 -0
  138. package/dist/lib/theme-loader.d.ts.map +1 -0
  139. package/dist/lib/theme-loader.js +199 -0
  140. package/dist/lib/theme-loader.js.map +1 -0
  141. package/dist/lib/theme-types.d.ts +39 -0
  142. package/dist/lib/theme-types.d.ts.map +1 -0
  143. package/dist/lib/theme-types.js +2 -0
  144. package/dist/lib/theme-types.js.map +1 -0
  145. package/dist/lib/types.d.ts +91 -0
  146. package/dist/lib/types.d.ts.map +1 -0
  147. package/dist/lib/types.js +2 -0
  148. package/dist/lib/types.js.map +1 -0
  149. package/dist/routes/admin/content-edit.d.ts +10 -0
  150. package/dist/routes/admin/content-edit.d.ts.map +1 -0
  151. package/dist/routes/admin/content-edit.js +325 -0
  152. package/dist/routes/admin/content-edit.js.map +1 -0
  153. package/dist/routes/admin/content-list.d.ts +10 -0
  154. package/dist/routes/admin/content-list.d.ts.map +1 -0
  155. package/dist/routes/admin/content-list.js +162 -0
  156. package/dist/routes/admin/content-list.js.map +1 -0
  157. package/dist/routes/admin/content.d.ts +3 -0
  158. package/dist/routes/admin/content.d.ts.map +1 -0
  159. package/dist/routes/admin/content.js +12 -0
  160. package/dist/routes/admin/content.js.map +1 -0
  161. package/dist/routes/admin/dashboard.d.ts +4 -0
  162. package/dist/routes/admin/dashboard.d.ts.map +1 -0
  163. package/dist/routes/admin/dashboard.js +121 -0
  164. package/dist/routes/admin/dashboard.js.map +1 -0
  165. package/dist/routes/admin/export-route.d.ts +10 -0
  166. package/dist/routes/admin/export-route.d.ts.map +1 -0
  167. package/dist/routes/admin/export-route.js +19 -0
  168. package/dist/routes/admin/export-route.js.map +1 -0
  169. package/dist/routes/admin/index.d.ts +9 -0
  170. package/dist/routes/admin/index.d.ts.map +1 -0
  171. package/dist/routes/admin/index.js +27 -0
  172. package/dist/routes/admin/index.js.map +1 -0
  173. package/dist/routes/admin/layout.d.ts +17 -0
  174. package/dist/routes/admin/layout.d.ts.map +1 -0
  175. package/dist/routes/admin/layout.js +110 -0
  176. package/dist/routes/admin/layout.js.map +1 -0
  177. package/dist/routes/admin/login.d.ts +5 -0
  178. package/dist/routes/admin/login.d.ts.map +1 -0
  179. package/dist/routes/admin/login.js +113 -0
  180. package/dist/routes/admin/login.js.map +1 -0
  181. package/dist/routes/admin/media.d.ts +10 -0
  182. package/dist/routes/admin/media.d.ts.map +1 -0
  183. package/dist/routes/admin/media.js +192 -0
  184. package/dist/routes/admin/media.js.map +1 -0
  185. package/dist/routes/admin/middleware.d.ts +8 -0
  186. package/dist/routes/admin/middleware.d.ts.map +1 -0
  187. package/dist/routes/admin/middleware.js +29 -0
  188. package/dist/routes/admin/middleware.js.map +1 -0
  189. package/dist/routes/admin/section-builder.d.ts +10 -0
  190. package/dist/routes/admin/section-builder.d.ts.map +1 -0
  191. package/dist/routes/admin/section-builder.js +487 -0
  192. package/dist/routes/admin/section-builder.js.map +1 -0
  193. package/dist/routes/admin/settings.d.ts +10 -0
  194. package/dist/routes/admin/settings.d.ts.map +1 -0
  195. package/dist/routes/admin/settings.js +209 -0
  196. package/dist/routes/admin/settings.js.map +1 -0
  197. package/dist/routes/admin/site-switcher.d.ts +3 -0
  198. package/dist/routes/admin/site-switcher.d.ts.map +1 -0
  199. package/dist/routes/admin/site-switcher.js +36 -0
  200. package/dist/routes/admin/site-switcher.js.map +1 -0
  201. package/dist/routes/admin/taxonomy.d.ts +10 -0
  202. package/dist/routes/admin/taxonomy.d.ts.map +1 -0
  203. package/dist/routes/admin/taxonomy.js +297 -0
  204. package/dist/routes/admin/taxonomy.js.map +1 -0
  205. package/dist/routes/admin/users.d.ts +10 -0
  206. package/dist/routes/admin/users.d.ts.map +1 -0
  207. package/dist/routes/admin/users.js +227 -0
  208. package/dist/routes/admin/users.js.map +1 -0
  209. package/package.json +75 -0
  210. package/src/built-in-theme/components/cta/cta.tsx +18 -0
  211. package/src/built-in-theme/components/cta/schema.yaml +17 -0
  212. package/src/built-in-theme/components/features/features.tsx +18 -0
  213. package/src/built-in-theme/components/features/schema.yaml +22 -0
  214. package/src/built-in-theme/components/hero/hero.tsx +18 -0
  215. package/src/built-in-theme/components/hero/schema.yaml +17 -0
  216. package/src/built-in-theme/components/text/schema.yaml +12 -0
  217. package/src/built-in-theme/components/text/text.tsx +11 -0
  218. package/src/built-in-theme/layouts/article.tsx +20 -0
  219. package/src/built-in-theme/layouts/base.tsx +50 -0
  220. package/src/built-in-theme/layouts/landing-page.tsx +15 -0
  221. package/src/built-in-theme/layouts/page.tsx +11 -0
  222. package/src/built-in-theme/theme.yaml +4 -0
  223. package/starters/blank/config/content-types.yaml +47 -0
  224. package/starters/blank/config/section-types.yaml +115 -0
  225. package/starters/blank/config/settings.yaml +12 -0
  226. package/starters/blank/content/landing-pages/homepage.yaml +55 -0
  227. package/starters/blank/content/pages/about.md +27 -0
  228. package/starters/blank/starter.yaml +14 -0
  229. package/starters/blank/themes/starter/_types.ts +93 -0
  230. package/starters/blank/themes/starter/components/blog-listing/blog-listing.tsx +102 -0
  231. package/starters/blank/themes/starter/components/blog-listing/schema.yaml +21 -0
  232. package/starters/blank/themes/starter/components/columns/columns.tsx +101 -0
  233. package/starters/blank/themes/starter/components/columns/schema.yaml +23 -0
  234. package/starters/blank/themes/starter/components/counters/counters.css +13 -0
  235. package/starters/blank/themes/starter/components/counters/counters.tsx +81 -0
  236. package/starters/blank/themes/starter/components/counters/schema.yaml +23 -0
  237. package/starters/blank/themes/starter/components/cta/cta.tsx +57 -0
  238. package/starters/blank/themes/starter/components/cta/schema.yaml +30 -0
  239. package/starters/blank/themes/starter/components/faq/faq.tsx +77 -0
  240. package/starters/blank/themes/starter/components/faq/schema.yaml +20 -0
  241. package/starters/blank/themes/starter/components/features/features.tsx +82 -0
  242. package/starters/blank/themes/starter/components/features/schema.yaml +19 -0
  243. package/starters/blank/themes/starter/components/form/form.tsx +126 -0
  244. package/starters/blank/themes/starter/components/form/schema.yaml +18 -0
  245. package/starters/blank/themes/starter/components/gallery/gallery.tsx +85 -0
  246. package/starters/blank/themes/starter/components/gallery/schema.yaml +27 -0
  247. package/starters/blank/themes/starter/components/hero/hero.tsx +77 -0
  248. package/starters/blank/themes/starter/components/hero/schema.yaml +26 -0
  249. package/starters/blank/themes/starter/components/logo-slider/logo-slider.css +21 -0
  250. package/starters/blank/themes/starter/components/logo-slider/logo-slider.tsx +81 -0
  251. package/starters/blank/themes/starter/components/logo-slider/schema.yaml +23 -0
  252. package/starters/blank/themes/starter/components/pricing/pricing.tsx +141 -0
  253. package/starters/blank/themes/starter/components/pricing/schema.yaml +44 -0
  254. package/starters/blank/themes/starter/components/testimonials/schema.yaml +26 -0
  255. package/starters/blank/themes/starter/components/testimonials/testimonials.tsx +100 -0
  256. package/starters/blank/themes/starter/components/text/schema.yaml +12 -0
  257. package/starters/blank/themes/starter/components/text/text.tsx +62 -0
  258. package/starters/blank/themes/starter/components/text-with-image/schema.yaml +30 -0
  259. package/starters/blank/themes/starter/components/text-with-image/text-with-image.tsx +86 -0
  260. package/starters/blank/themes/starter/components/video/schema.yaml +19 -0
  261. package/starters/blank/themes/starter/components/video/video.tsx +98 -0
  262. package/starters/blank/themes/starter/layouts/article.tsx +42 -0
  263. package/starters/blank/themes/starter/layouts/base.tsx +92 -0
  264. package/starters/blank/themes/starter/layouts/landing-page.tsx +14 -0
  265. package/starters/blank/themes/starter/layouts/page.tsx +29 -0
  266. package/starters/blank/themes/starter/partials/footer.tsx +22 -0
  267. package/starters/blank/themes/starter/partials/header.tsx +32 -0
  268. package/starters/blank/themes/starter/static/style.css +125 -0
  269. package/starters/blank/themes/starter/theme.yaml +16 -0
  270. package/starters/kadoservices/config/content-types.yaml +239 -0
  271. package/starters/kadoservices/config/languages.yaml +12 -0
  272. package/starters/kadoservices/config/section-types.yaml +379 -0
  273. package/starters/kadoservices/config/settings.yaml +15 -0
  274. package/starters/kadoservices/config/sites.yaml +14 -0
  275. package/starters/kadoservices/config/taxonomies.yaml +61 -0
  276. package/starters/kadoservices/config/translations/de.yaml +120 -0
  277. package/starters/kadoservices/config/translations/en.yaml +120 -0
  278. package/starters/kadoservices/config/translations/pl.yaml +120 -0
  279. package/starters/kadoservices/content/articles/employer-branding-strategies.md +61 -0
  280. package/starters/kadoservices/content/articles/hiring-trends-2026.md +61 -0
  281. package/starters/kadoservices/content/articles/hiring-trends-2026.pl.md +61 -0
  282. package/starters/kadoservices/content/articles/labor-law-changes.md +78 -0
  283. package/starters/kadoservices/content/articles/temporary-staffing-guide.md +76 -0
  284. package/starters/kadoservices/content/articles/temporary-staffing-guide.pl.md +76 -0
  285. package/starters/kadoservices/content/case-studies/finance-rpo-program.md +68 -0
  286. package/starters/kadoservices/content/case-studies/manufacturing-mass-recruitment.md +65 -0
  287. package/starters/kadoservices/content/case-studies/manufacturing-mass-recruitment.pl.md +65 -0
  288. package/starters/kadoservices/content/case-studies/retail-seasonal-staffing.md +69 -0
  289. package/starters/kadoservices/content/industries/finance-shared-services.md +59 -0
  290. package/starters/kadoservices/content/industries/healthcare.md +64 -0
  291. package/starters/kadoservices/content/industries/it-technology.md +61 -0
  292. package/starters/kadoservices/content/industries/logistics.md +54 -0
  293. package/starters/kadoservices/content/industries/manufacturing.md +61 -0
  294. package/starters/kadoservices/content/industries/retail.md +56 -0
  295. package/starters/kadoservices/content/landing-pages/homepage.pl.yaml +198 -0
  296. package/starters/kadoservices/content/landing-pages/homepage.yaml +198 -0
  297. package/starters/kadoservices/content/locations/gdansk.md +32 -0
  298. package/starters/kadoservices/content/locations/krakow.md +30 -0
  299. package/starters/kadoservices/content/locations/warsaw.md +30 -0
  300. package/starters/kadoservices/content/locations/wroclaw.md +32 -0
  301. package/starters/kadoservices/content/pages/about.md +58 -0
  302. package/starters/kadoservices/content/pages/about.pl.md +58 -0
  303. package/starters/kadoservices/content/pages/careers.md +55 -0
  304. package/starters/kadoservices/content/pages/clients.md +65 -0
  305. package/starters/kadoservices/content/pages/contact.md +74 -0
  306. package/starters/kadoservices/content/pages/contact.pl.md +74 -0
  307. package/starters/kadoservices/content/pages/faq.md +76 -0
  308. package/starters/kadoservices/content/services/employer-branding.md +70 -0
  309. package/starters/kadoservices/content/services/hr-consulting.md +64 -0
  310. package/starters/kadoservices/content/services/outsourcing-rpo.md +78 -0
  311. package/starters/kadoservices/content/services/outsourcing-rpo.pl.md +67 -0
  312. package/starters/kadoservices/content/services/payroll-hr-admin.md +66 -0
  313. package/starters/kadoservices/content/services/permanent-recruitment.md +78 -0
  314. package/starters/kadoservices/content/services/permanent-recruitment.pl.md +78 -0
  315. package/starters/kadoservices/content/services/temporary-staffing.md +78 -0
  316. package/starters/kadoservices/content/team/anna-kowalska.md +26 -0
  317. package/starters/kadoservices/content/team/jan-lewandowski.md +26 -0
  318. package/starters/kadoservices/content/team/katarzyna-zielinska.md +26 -0
  319. package/starters/kadoservices/content/team/maria-wisniewska.md +28 -0
  320. package/starters/kadoservices/content/team/tomasz-nowak.md +26 -0
  321. package/starters/kadoservices/starter.yaml +15 -0
  322. package/starters/kadoservices/themes/kadoservices/_types.ts +93 -0
  323. package/starters/kadoservices/themes/kadoservices/components/blog-listing/blog-listing.tsx +197 -0
  324. package/starters/kadoservices/themes/kadoservices/components/blog-listing/schema.yaml +21 -0
  325. package/starters/kadoservices/themes/kadoservices/components/columns/columns.tsx +104 -0
  326. package/starters/kadoservices/themes/kadoservices/components/columns/schema.yaml +23 -0
  327. package/starters/kadoservices/themes/kadoservices/components/counters/counters.css +13 -0
  328. package/starters/kadoservices/themes/kadoservices/components/counters/counters.tsx +103 -0
  329. package/starters/kadoservices/themes/kadoservices/components/counters/schema.yaml +23 -0
  330. package/starters/kadoservices/themes/kadoservices/components/cta/cta.tsx +100 -0
  331. package/starters/kadoservices/themes/kadoservices/components/cta/schema.yaml +30 -0
  332. package/starters/kadoservices/themes/kadoservices/components/faq/faq.tsx +77 -0
  333. package/starters/kadoservices/themes/kadoservices/components/faq/schema.yaml +20 -0
  334. package/starters/kadoservices/themes/kadoservices/components/features/features.tsx +151 -0
  335. package/starters/kadoservices/themes/kadoservices/components/features/schema.yaml +19 -0
  336. package/starters/kadoservices/themes/kadoservices/components/form/form.tsx +135 -0
  337. package/starters/kadoservices/themes/kadoservices/components/form/schema.yaml +18 -0
  338. package/starters/kadoservices/themes/kadoservices/components/gallery/gallery.tsx +90 -0
  339. package/starters/kadoservices/themes/kadoservices/components/gallery/schema.yaml +27 -0
  340. package/starters/kadoservices/themes/kadoservices/components/hero/hero.tsx +175 -0
  341. package/starters/kadoservices/themes/kadoservices/components/hero/schema.yaml +26 -0
  342. package/starters/kadoservices/themes/kadoservices/components/logo-slider/logo-slider.css +21 -0
  343. package/starters/kadoservices/themes/kadoservices/components/logo-slider/logo-slider.tsx +83 -0
  344. package/starters/kadoservices/themes/kadoservices/components/logo-slider/schema.yaml +23 -0
  345. package/starters/kadoservices/themes/kadoservices/components/pricing/pricing.tsx +161 -0
  346. package/starters/kadoservices/themes/kadoservices/components/pricing/schema.yaml +44 -0
  347. package/starters/kadoservices/themes/kadoservices/components/testimonials/schema.yaml +26 -0
  348. package/starters/kadoservices/themes/kadoservices/components/testimonials/testimonials.css +13 -0
  349. package/starters/kadoservices/themes/kadoservices/components/testimonials/testimonials.tsx +150 -0
  350. package/starters/kadoservices/themes/kadoservices/components/text/schema.yaml +12 -0
  351. package/starters/kadoservices/themes/kadoservices/components/text/text.tsx +67 -0
  352. package/starters/kadoservices/themes/kadoservices/components/text-with-image/schema.yaml +30 -0
  353. package/starters/kadoservices/themes/kadoservices/components/text-with-image/text-with-image.tsx +92 -0
  354. package/starters/kadoservices/themes/kadoservices/components/video/schema.yaml +19 -0
  355. package/starters/kadoservices/themes/kadoservices/components/video/video.tsx +103 -0
  356. package/starters/kadoservices/themes/kadoservices/layouts/404.tsx +96 -0
  357. package/starters/kadoservices/themes/kadoservices/layouts/article.tsx +140 -0
  358. package/starters/kadoservices/themes/kadoservices/layouts/base.tsx +669 -0
  359. package/starters/kadoservices/themes/kadoservices/layouts/case-study.tsx +240 -0
  360. package/starters/kadoservices/themes/kadoservices/layouts/index--articles.tsx +250 -0
  361. package/starters/kadoservices/themes/kadoservices/layouts/index--case-studies.tsx +232 -0
  362. package/starters/kadoservices/themes/kadoservices/layouts/index--services.tsx +237 -0
  363. package/starters/kadoservices/themes/kadoservices/layouts/index.tsx +96 -0
  364. package/starters/kadoservices/themes/kadoservices/layouts/industry.tsx +121 -0
  365. package/starters/kadoservices/themes/kadoservices/layouts/landing-page.tsx +14 -0
  366. package/starters/kadoservices/themes/kadoservices/layouts/page--about.tsx +158 -0
  367. package/starters/kadoservices/themes/kadoservices/layouts/page--careers.tsx +214 -0
  368. package/starters/kadoservices/themes/kadoservices/layouts/page--contact.tsx +218 -0
  369. package/starters/kadoservices/themes/kadoservices/layouts/page.tsx +45 -0
  370. package/starters/kadoservices/themes/kadoservices/layouts/service.tsx +235 -0
  371. package/starters/kadoservices/themes/kadoservices/partials/footer.tsx +109 -0
  372. package/starters/kadoservices/themes/kadoservices/partials/header.tsx +53 -0
  373. package/starters/kadoservices/themes/kadoservices/static/images/article-platform-engineering.jpg +0 -0
  374. package/starters/kadoservices/themes/kadoservices/static/images/barka-logo.png +0 -0
  375. package/starters/kadoservices/themes/kadoservices/static/images/case-study-banking-dashboard.jpg +0 -0
  376. package/starters/kadoservices/themes/kadoservices/static/images/case-study-banking.png +0 -0
  377. package/starters/kadoservices/themes/kadoservices/static/images/case-study-ecommerce-dashboard.jpg +0 -0
  378. package/starters/kadoservices/themes/kadoservices/static/images/case-study-healthcare-dashboard.jpg +0 -0
  379. package/starters/kadoservices/themes/kadoservices/static/images/case-study-healthcare.png +0 -0
  380. package/starters/kadoservices/themes/kadoservices/static/images/case-study-retail.png +0 -0
  381. package/starters/kadoservices/themes/kadoservices/static/images/handshake.jpg +0 -0
  382. package/starters/kadoservices/themes/kadoservices/static/images/hero-bg.jpg +0 -0
  383. package/starters/kadoservices/themes/kadoservices/static/images/hero-bg.png +0 -0
  384. package/starters/kadoservices/themes/kadoservices/static/images/lokatech-logo.png +0 -0
  385. package/starters/kadoservices/themes/kadoservices/static/images/office-warsaw.png +0 -0
  386. package/starters/kadoservices/themes/kadoservices/static/images/office.jpg +0 -0
  387. package/starters/kadoservices/themes/kadoservices/static/images/team-anna-kowalska.png +0 -0
  388. package/starters/kadoservices/themes/kadoservices/static/images/team-collaboration.jpg +0 -0
  389. package/starters/kadoservices/themes/kadoservices/static/images/team-jan-nowak.png +0 -0
  390. package/starters/kadoservices/themes/kadoservices/static/images/team-katarzyna-kaminska.png +0 -0
  391. package/starters/kadoservices/themes/kadoservices/static/images/team-maria-wisniewska.png +0 -0
  392. package/starters/kadoservices/themes/kadoservices/static/images/team-meeting.jpg +0 -0
  393. package/starters/kadoservices/themes/kadoservices/static/images/team-strategy-session.jpg +0 -0
  394. package/starters/kadoservices/themes/kadoservices/static/images/team-tomasz-lewandowski.png +0 -0
  395. package/starters/kadoservices/themes/kadoservices/static/style.css +542 -0
  396. package/starters/kadoservices/themes/kadoservices/theme.yaml +21 -0
  397. package/starters/kadoservices/themes/starter/_types.ts +93 -0
  398. package/starters/kadoservices/themes/starter/components/blog-listing/blog-listing.tsx +102 -0
  399. package/starters/kadoservices/themes/starter/components/blog-listing/schema.yaml +21 -0
  400. package/starters/kadoservices/themes/starter/components/columns/columns.tsx +101 -0
  401. package/starters/kadoservices/themes/starter/components/columns/schema.yaml +23 -0
  402. package/starters/kadoservices/themes/starter/components/counters/counters.css +13 -0
  403. package/starters/kadoservices/themes/starter/components/counters/counters.tsx +81 -0
  404. package/starters/kadoservices/themes/starter/components/counters/schema.yaml +23 -0
  405. package/starters/kadoservices/themes/starter/components/cta/cta.tsx +57 -0
  406. package/starters/kadoservices/themes/starter/components/cta/schema.yaml +30 -0
  407. package/starters/kadoservices/themes/starter/components/faq/faq.tsx +77 -0
  408. package/starters/kadoservices/themes/starter/components/faq/schema.yaml +20 -0
  409. package/starters/kadoservices/themes/starter/components/features/features.tsx +82 -0
  410. package/starters/kadoservices/themes/starter/components/features/schema.yaml +19 -0
  411. package/starters/kadoservices/themes/starter/components/form/form.tsx +126 -0
  412. package/starters/kadoservices/themes/starter/components/form/schema.yaml +18 -0
  413. package/starters/kadoservices/themes/starter/components/gallery/gallery.tsx +85 -0
  414. package/starters/kadoservices/themes/starter/components/gallery/schema.yaml +27 -0
  415. package/starters/kadoservices/themes/starter/components/hero/hero.tsx +77 -0
  416. package/starters/kadoservices/themes/starter/components/hero/schema.yaml +26 -0
  417. package/starters/kadoservices/themes/starter/components/logo-slider/logo-slider.css +21 -0
  418. package/starters/kadoservices/themes/starter/components/logo-slider/logo-slider.tsx +81 -0
  419. package/starters/kadoservices/themes/starter/components/logo-slider/schema.yaml +23 -0
  420. package/starters/kadoservices/themes/starter/components/pricing/pricing.tsx +141 -0
  421. package/starters/kadoservices/themes/starter/components/pricing/schema.yaml +44 -0
  422. package/starters/kadoservices/themes/starter/components/testimonials/schema.yaml +26 -0
  423. package/starters/kadoservices/themes/starter/components/testimonials/testimonials.tsx +100 -0
  424. package/starters/kadoservices/themes/starter/components/text/schema.yaml +12 -0
  425. package/starters/kadoservices/themes/starter/components/text/text.tsx +62 -0
  426. package/starters/kadoservices/themes/starter/components/text-with-image/schema.yaml +30 -0
  427. package/starters/kadoservices/themes/starter/components/text-with-image/text-with-image.tsx +86 -0
  428. package/starters/kadoservices/themes/starter/components/video/schema.yaml +19 -0
  429. package/starters/kadoservices/themes/starter/components/video/video.tsx +98 -0
  430. package/starters/kadoservices/themes/starter/layouts/article.tsx +42 -0
  431. package/starters/kadoservices/themes/starter/layouts/base.tsx +92 -0
  432. package/starters/kadoservices/themes/starter/layouts/landing-page.tsx +14 -0
  433. package/starters/kadoservices/themes/starter/layouts/page.tsx +29 -0
  434. package/starters/kadoservices/themes/starter/partials/footer.tsx +22 -0
  435. package/starters/kadoservices/themes/starter/partials/header.tsx +32 -0
  436. package/starters/kadoservices/themes/starter/static/style.css +125 -0
  437. package/starters/kadoservices/themes/starter/theme.yaml +16 -0
  438. package/starters/lokatech/config/content-types.yaml +226 -0
  439. package/starters/lokatech/config/languages.yaml +12 -0
  440. package/starters/lokatech/config/section-types.yaml +379 -0
  441. package/starters/lokatech/config/settings.yaml +15 -0
  442. package/starters/lokatech/config/sites.yaml +21 -0
  443. package/starters/lokatech/config/taxonomies.yaml +65 -0
  444. package/starters/lokatech/config/translations/de.yaml +108 -0
  445. package/starters/lokatech/config/translations/en.yaml +108 -0
  446. package/starters/lokatech/config/translations/pl.yaml +108 -0
  447. package/starters/lokatech/content/articles/ai-in-enterprise.md +51 -0
  448. package/starters/lokatech/content/articles/api-gateway-patterns-enterprise.md +35 -0
  449. package/starters/lokatech/content/articles/design-system-enterprise-scale.md +35 -0
  450. package/starters/lokatech/content/articles/domain-driven-design-bounded-contexts.md +35 -0
  451. package/starters/lokatech/content/articles/engineering-team-scaling-50-to-200.md +33 -0
  452. package/starters/lokatech/content/articles/event-driven-architecture-microservices.md +35 -0
  453. package/starters/lokatech/content/articles/future-of-cloud-native.md +47 -0
  454. package/starters/lokatech/content/articles/getting-started.md +83 -0
  455. package/starters/lokatech/content/articles/headless-cms-composable-architecture.md +35 -0
  456. package/starters/lokatech/content/articles/kubernetes-cost-optimization-finops.md +33 -0
  457. package/starters/lokatech/content/articles/legacy-modernization-strangler-fig.md +35 -0
  458. package/starters/lokatech/content/articles/llm-fine-tuning-enterprise-data.md +33 -0
  459. package/starters/lokatech/content/articles/observability-opentelemetry-stack.md +35 -0
  460. package/starters/lokatech/content/articles/platform-engineering-internal-developer-portals.md +33 -0
  461. package/starters/lokatech/content/articles/platform-engineering-internal-developer-portals.pl.md +33 -0
  462. package/starters/lokatech/content/articles/rag-retrieval-augmented-generation-production.md +35 -0
  463. package/starters/lokatech/content/articles/remote-engineering-culture-distributed-teams.md +35 -0
  464. package/starters/lokatech/content/articles/supply-chain-security-sbom.md +35 -0
  465. package/starters/lokatech/content/articles/welcome.md +42 -0
  466. package/starters/lokatech/content/articles/welcome.pl.md +39 -0
  467. package/starters/lokatech/content/articles/zero-trust-network-architecture.md +35 -0
  468. package/starters/lokatech/content/articles/zero-trust-security.md +55 -0
  469. package/starters/lokatech/content/case-studies/banking-platform-modernization.md +67 -0
  470. package/starters/lokatech/content/case-studies/ecommerce-platform-rewrite.md +64 -0
  471. package/starters/lokatech/content/case-studies/govtech-citizen-portal.md +59 -0
  472. package/starters/lokatech/content/case-studies/healthcare-data-pipeline.md +67 -0
  473. package/starters/lokatech/content/case-studies/healthcare-data-pipeline.pl.md +60 -0
  474. package/starters/lokatech/content/case-studies/insurance-claims-automation.md +58 -0
  475. package/starters/lokatech/content/case-studies/manufacturing-iot-digital-twin.md +58 -0
  476. package/starters/lokatech/content/case-studies/retail-cloud-migration.md +49 -0
  477. package/starters/lokatech/content/case-studies/telecom-5g-platform.md +57 -0
  478. package/starters/lokatech/content/industries/energy-utilities.md +35 -0
  479. package/starters/lokatech/content/industries/financial-services.md +35 -0
  480. package/starters/lokatech/content/industries/healthcare.md +35 -0
  481. package/starters/lokatech/content/industries/manufacturing.md +35 -0
  482. package/starters/lokatech/content/industries/retail-ecommerce.md +35 -0
  483. package/starters/lokatech/content/industries/telecom-media.md +35 -0
  484. package/starters/lokatech/content/landing-pages/homepage.pl.yaml +182 -0
  485. package/starters/lokatech/content/landing-pages/homepage.yaml +236 -0
  486. package/starters/lokatech/content/locations/berlin.md +22 -0
  487. package/starters/lokatech/content/locations/krakow.md +22 -0
  488. package/starters/lokatech/content/locations/london.md +22 -0
  489. package/starters/lokatech/content/locations/warsaw.md +22 -0
  490. package/starters/lokatech/content/locations/wroclaw.md +22 -0
  491. package/starters/lokatech/content/pages/about.md +55 -0
  492. package/starters/lokatech/content/pages/about.pl.md +36 -0
  493. package/starters/lokatech/content/pages/careers.md +50 -0
  494. package/starters/lokatech/content/pages/contact.md +51 -0
  495. package/starters/lokatech/content/pages/contact.pl.md +51 -0
  496. package/starters/lokatech/content/pages/security-compliance.md +66 -0
  497. package/starters/lokatech/content/services/cloud-infrastructure.md +73 -0
  498. package/starters/lokatech/content/services/custom-software-development.md +74 -0
  499. package/starters/lokatech/content/services/custom-software-development.pl.md +80 -0
  500. package/starters/lokatech/content/services/cybersecurity.md +72 -0
  501. package/starters/lokatech/content/services/data-ai.md +74 -0
  502. package/starters/lokatech/content/services/digital-transformation.md +70 -0
  503. package/starters/lokatech/content/services/it-outsourcing.md +72 -0
  504. package/starters/lokatech/content/team/anna-kowalska.md +21 -0
  505. package/starters/lokatech/content/team/jan-nowak.md +21 -0
  506. package/starters/lokatech/content/team/katarzyna-kaminska.md +20 -0
  507. package/starters/lokatech/content/team/maria-wisniewska.md +20 -0
  508. package/starters/lokatech/content/team/tomasz-lewandowski.md +20 -0
  509. package/starters/lokatech/starter.yaml +15 -0
  510. package/starters/lokatech/themes/lokatech/_types.ts +93 -0
  511. package/starters/lokatech/themes/lokatech/components/blog-listing/blog-listing.tsx +197 -0
  512. package/starters/lokatech/themes/lokatech/components/blog-listing/schema.yaml +21 -0
  513. package/starters/lokatech/themes/lokatech/components/columns/columns.tsx +104 -0
  514. package/starters/lokatech/themes/lokatech/components/columns/schema.yaml +23 -0
  515. package/starters/lokatech/themes/lokatech/components/counters/counters.css +13 -0
  516. package/starters/lokatech/themes/lokatech/components/counters/counters.tsx +103 -0
  517. package/starters/lokatech/themes/lokatech/components/counters/schema.yaml +23 -0
  518. package/starters/lokatech/themes/lokatech/components/cta/cta.tsx +100 -0
  519. package/starters/lokatech/themes/lokatech/components/cta/schema.yaml +30 -0
  520. package/starters/lokatech/themes/lokatech/components/faq/faq.tsx +77 -0
  521. package/starters/lokatech/themes/lokatech/components/faq/schema.yaml +20 -0
  522. package/starters/lokatech/themes/lokatech/components/features/features.tsx +149 -0
  523. package/starters/lokatech/themes/lokatech/components/features/schema.yaml +19 -0
  524. package/starters/lokatech/themes/lokatech/components/form/form.tsx +135 -0
  525. package/starters/lokatech/themes/lokatech/components/form/schema.yaml +18 -0
  526. package/starters/lokatech/themes/lokatech/components/gallery/gallery.tsx +90 -0
  527. package/starters/lokatech/themes/lokatech/components/gallery/schema.yaml +27 -0
  528. package/starters/lokatech/themes/lokatech/components/hero/hero.tsx +167 -0
  529. package/starters/lokatech/themes/lokatech/components/hero/schema.yaml +26 -0
  530. package/starters/lokatech/themes/lokatech/components/logo-slider/logo-slider.css +21 -0
  531. package/starters/lokatech/themes/lokatech/components/logo-slider/logo-slider.tsx +83 -0
  532. package/starters/lokatech/themes/lokatech/components/logo-slider/schema.yaml +23 -0
  533. package/starters/lokatech/themes/lokatech/components/pricing/pricing.tsx +161 -0
  534. package/starters/lokatech/themes/lokatech/components/pricing/schema.yaml +44 -0
  535. package/starters/lokatech/themes/lokatech/components/testimonials/schema.yaml +26 -0
  536. package/starters/lokatech/themes/lokatech/components/testimonials/testimonials.css +13 -0
  537. package/starters/lokatech/themes/lokatech/components/testimonials/testimonials.tsx +150 -0
  538. package/starters/lokatech/themes/lokatech/components/text/schema.yaml +12 -0
  539. package/starters/lokatech/themes/lokatech/components/text/text.tsx +67 -0
  540. package/starters/lokatech/themes/lokatech/components/text-with-image/schema.yaml +30 -0
  541. package/starters/lokatech/themes/lokatech/components/text-with-image/text-with-image.tsx +92 -0
  542. package/starters/lokatech/themes/lokatech/components/video/schema.yaml +19 -0
  543. package/starters/lokatech/themes/lokatech/components/video/video.tsx +103 -0
  544. package/starters/lokatech/themes/lokatech/layouts/404.tsx +96 -0
  545. package/starters/lokatech/themes/lokatech/layouts/article.tsx +140 -0
  546. package/starters/lokatech/themes/lokatech/layouts/base.tsx +672 -0
  547. package/starters/lokatech/themes/lokatech/layouts/case-study.tsx +233 -0
  548. package/starters/lokatech/themes/lokatech/layouts/index--articles.tsx +246 -0
  549. package/starters/lokatech/themes/lokatech/layouts/index--case-studies.tsx +230 -0
  550. package/starters/lokatech/themes/lokatech/layouts/index--services.tsx +237 -0
  551. package/starters/lokatech/themes/lokatech/layouts/index.tsx +96 -0
  552. package/starters/lokatech/themes/lokatech/layouts/industry.tsx +121 -0
  553. package/starters/lokatech/themes/lokatech/layouts/landing-page.tsx +14 -0
  554. package/starters/lokatech/themes/lokatech/layouts/page--about.tsx +158 -0
  555. package/starters/lokatech/themes/lokatech/layouts/page--careers.tsx +125 -0
  556. package/starters/lokatech/themes/lokatech/layouts/page--contact.tsx +235 -0
  557. package/starters/lokatech/themes/lokatech/layouts/page.tsx +45 -0
  558. package/starters/lokatech/themes/lokatech/layouts/service.tsx +235 -0
  559. package/starters/lokatech/themes/lokatech/partials/footer.tsx +109 -0
  560. package/starters/lokatech/themes/lokatech/partials/header.tsx +53 -0
  561. package/starters/lokatech/themes/lokatech/static/images/article-platform-engineering.jpg +0 -0
  562. package/starters/lokatech/themes/lokatech/static/images/barka-logo.png +0 -0
  563. package/starters/lokatech/themes/lokatech/static/images/case-study-banking-dashboard.jpg +0 -0
  564. package/starters/lokatech/themes/lokatech/static/images/case-study-banking.png +0 -0
  565. package/starters/lokatech/themes/lokatech/static/images/case-study-ecommerce-dashboard.jpg +0 -0
  566. package/starters/lokatech/themes/lokatech/static/images/case-study-healthcare-dashboard.jpg +0 -0
  567. package/starters/lokatech/themes/lokatech/static/images/case-study-healthcare.png +0 -0
  568. package/starters/lokatech/themes/lokatech/static/images/case-study-retail.png +0 -0
  569. package/starters/lokatech/themes/lokatech/static/images/hero-bg.png +0 -0
  570. package/starters/lokatech/themes/lokatech/static/images/lokatech-logo.png +0 -0
  571. package/starters/lokatech/themes/lokatech/static/images/office-warsaw.png +0 -0
  572. package/starters/lokatech/themes/lokatech/static/images/team-anna-kowalska.png +0 -0
  573. package/starters/lokatech/themes/lokatech/static/images/team-collaboration.jpg +0 -0
  574. package/starters/lokatech/themes/lokatech/static/images/team-jan-nowak.png +0 -0
  575. package/starters/lokatech/themes/lokatech/static/images/team-katarzyna-kaminska.png +0 -0
  576. package/starters/lokatech/themes/lokatech/static/images/team-maria-wisniewska.png +0 -0
  577. package/starters/lokatech/themes/lokatech/static/images/team-strategy-session.jpg +0 -0
  578. package/starters/lokatech/themes/lokatech/static/images/team-tomasz-lewandowski.png +0 -0
  579. package/starters/lokatech/themes/lokatech/static/style.css +495 -0
  580. package/starters/lokatech/themes/lokatech/theme.yaml +21 -0
  581. package/starters/lokatech/themes/starter/_types.ts +93 -0
  582. package/starters/lokatech/themes/starter/components/blog-listing/blog-listing.tsx +102 -0
  583. package/starters/lokatech/themes/starter/components/blog-listing/schema.yaml +21 -0
  584. package/starters/lokatech/themes/starter/components/columns/columns.tsx +101 -0
  585. package/starters/lokatech/themes/starter/components/columns/schema.yaml +23 -0
  586. package/starters/lokatech/themes/starter/components/counters/counters.css +13 -0
  587. package/starters/lokatech/themes/starter/components/counters/counters.tsx +81 -0
  588. package/starters/lokatech/themes/starter/components/counters/schema.yaml +23 -0
  589. package/starters/lokatech/themes/starter/components/cta/cta.tsx +57 -0
  590. package/starters/lokatech/themes/starter/components/cta/schema.yaml +30 -0
  591. package/starters/lokatech/themes/starter/components/faq/faq.tsx +77 -0
  592. package/starters/lokatech/themes/starter/components/faq/schema.yaml +20 -0
  593. package/starters/lokatech/themes/starter/components/features/features.tsx +82 -0
  594. package/starters/lokatech/themes/starter/components/features/schema.yaml +19 -0
  595. package/starters/lokatech/themes/starter/components/form/form.tsx +126 -0
  596. package/starters/lokatech/themes/starter/components/form/schema.yaml +18 -0
  597. package/starters/lokatech/themes/starter/components/gallery/gallery.tsx +85 -0
  598. package/starters/lokatech/themes/starter/components/gallery/schema.yaml +27 -0
  599. package/starters/lokatech/themes/starter/components/hero/hero.tsx +77 -0
  600. package/starters/lokatech/themes/starter/components/hero/schema.yaml +26 -0
  601. package/starters/lokatech/themes/starter/components/logo-slider/logo-slider.css +21 -0
  602. package/starters/lokatech/themes/starter/components/logo-slider/logo-slider.tsx +81 -0
  603. package/starters/lokatech/themes/starter/components/logo-slider/schema.yaml +23 -0
  604. package/starters/lokatech/themes/starter/components/pricing/pricing.tsx +141 -0
  605. package/starters/lokatech/themes/starter/components/pricing/schema.yaml +44 -0
  606. package/starters/lokatech/themes/starter/components/testimonials/schema.yaml +26 -0
  607. package/starters/lokatech/themes/starter/components/testimonials/testimonials.tsx +100 -0
  608. package/starters/lokatech/themes/starter/components/text/schema.yaml +12 -0
  609. package/starters/lokatech/themes/starter/components/text/text.tsx +62 -0
  610. package/starters/lokatech/themes/starter/components/text-with-image/schema.yaml +30 -0
  611. package/starters/lokatech/themes/starter/components/text-with-image/text-with-image.tsx +86 -0
  612. package/starters/lokatech/themes/starter/components/video/schema.yaml +19 -0
  613. package/starters/lokatech/themes/starter/components/video/video.tsx +98 -0
  614. package/starters/lokatech/themes/starter/layouts/article.tsx +42 -0
  615. package/starters/lokatech/themes/starter/layouts/base.tsx +92 -0
  616. package/starters/lokatech/themes/starter/layouts/landing-page.tsx +14 -0
  617. package/starters/lokatech/themes/starter/layouts/page.tsx +29 -0
  618. package/starters/lokatech/themes/starter/partials/footer.tsx +22 -0
  619. package/starters/lokatech/themes/starter/partials/header.tsx +32 -0
  620. package/starters/lokatech/themes/starter/static/style.css +125 -0
  621. package/starters/lokatech/themes/starter/theme.yaml +16 -0
@@ -0,0 +1,28 @@
1
+ ---
2
+ uuid: "ks-029"
3
+ title: "Maria Wisniewska"
4
+ type: person
5
+ status: published
6
+ langcode: en
7
+ slug: maria-wisniewska
8
+ date: 2026-03-15
9
+ fields:
10
+ role: "VP Recruitment"
11
+ department: "Recruitment"
12
+ linkedin: "https://linkedin.com/in/example"
13
+ photo: "https://placehold.co/400x400/14101E/F59E0B?text=Maria+Wisniewska"
14
+ quote: "Great recruitment is not about filling positions — it's about understanding what makes someone thrive in a specific role, team, and culture, and then finding that match."
15
+ seo:
16
+ title: "Maria Wisniewska — VP Recruitment, KadoServices"
17
+ description: "Maria Wisniewska, VP Recruitment at KadoServices. Leads 200+ recruiters across all industry practices. Expert in executive search and RPO."
18
+ ---
19
+
20
+ Maria Wisniewska leads KadoServices' recruitment operations, managing a team of 200+ recruiters across all industry verticals — manufacturing, logistics, IT, finance, retail, and healthcare. She is responsible for recruitment methodology, quality standards, recruiter training, and the development of new service lines.
21
+
22
+ Maria joined KadoServices in 2013 as a Senior Recruiter specializing in finance and shared services. Her ability to build deep candidate relationships and consistently deliver high-quality placements earned her rapid promotions — from Team Leader (2015) to Recruitment Director (2018) to VP Recruitment (2021).
23
+
24
+ Before KadoServices, Maria spent six years at Hays Poland, where she built the company's finance and SSC recruitment desk in Kraków from scratch, growing it to a team of 12 consultants. Her early career in recruitment gave her first-hand experience of every aspect of the hiring process — from cold-calling passive candidates to negotiating complex offer packages.
25
+
26
+ Maria holds a Master's degree in Psychology from Jagiellonian University, which gives her a distinctive edge in candidate assessment. She is a certified assessor for several psychometric tools (SHL, Hogan, MBTI) and has designed the competency-based interview frameworks used across KadoServices. She is also a frequent contributor to industry publications, writing about talent acquisition trends, candidate experience, and recruitment technology.
27
+
28
+ Under Maria's leadership, KadoServices has achieved a 94% retention rate for permanent placements and has grown the RPO practice from zero to 35+ active programs.
@@ -0,0 +1,26 @@
1
+ ---
2
+ uuid: "ks-028"
3
+ title: "Tomasz Nowak"
4
+ type: person
5
+ status: published
6
+ langcode: en
7
+ slug: tomasz-nowak
8
+ date: 2026-03-15
9
+ fields:
10
+ role: "Chief Operating Officer"
11
+ department: "Management"
12
+ linkedin: "https://linkedin.com/in/example"
13
+ photo: "https://placehold.co/400x400/14101E/F59E0B?text=Tomasz+Nowak"
14
+ quote: "Operational excellence in staffing means one thing: the right person, in the right place, on time, every time. Everything else is a means to that end."
15
+ seo:
16
+ title: "Tomasz Nowak — COO, KadoServices"
17
+ description: "Tomasz Nowak, COO of KadoServices. 18 years in staffing operations, responsible for service delivery across 12 offices and 15,000+ annual placements."
18
+ ---
19
+
20
+ Tomasz Nowak joined KadoServices in 2011 as Operations Manager and was appointed Chief Operating Officer in 2017. He oversees all service delivery operations — temporary staffing, permanent recruitment, payroll, and on-site management — across the company's 12 offices in Poland.
21
+
22
+ Before KadoServices, Tomasz spent eight years at ManpowerGroup, where he managed operations for industrial staffing in the Silesia region. He built his career on the front lines of workforce management — coordinating hundreds of temporary workers across manufacturing plants, solving staffing emergencies at 3 AM, and developing the operational processes that enable consistent service delivery at scale.
23
+
24
+ At KadoServices, Tomasz has been instrumental in building the operational infrastructure that supports 15,000+ placements per year. He designed the company's quality management system, implemented the ATS (Applicant Tracking System) and workforce management platforms, and established the on-site coordination model that now operates at over 30 client locations.
25
+
26
+ Tomasz holds a degree in Industrial Engineering from the Silesian University of Technology and an MBA from Kozminski University. He is a certified Lean Six Sigma Black Belt and has applied process improvement methodologies to reduce time-to-fill by 40% and improve candidate quality scores by 25% since taking the COO role. He is passionate about using technology and data to improve staffing operations while never losing sight of the human element at the center of the business.
@@ -0,0 +1,15 @@
1
+ name: kadoservices
2
+ label: "KadoServices — Staffing & HR Demo"
3
+ description: >
4
+ Full demo site for a fictional staffing and HR services company.
5
+ Includes 6 services, 6 industries, 3 case studies, articles, team pages,
6
+ office locations, and a landing page with 10 sections.
7
+ Ships with the premium KadoServices theme (warm amber + deep plum).
8
+ theme: kadoservices
9
+ copies:
10
+ - from: content/
11
+ to: content/
12
+ - from: config/
13
+ to: config/
14
+ - from: themes/
15
+ to: themes/
@@ -0,0 +1,93 @@
1
+ export interface ThemeConfig {
2
+ name: string;
3
+ label: string;
4
+ description?: string;
5
+ version?: string;
6
+ author?: string;
7
+ base?: string;
8
+ settings?: Record<string, ThemeSettingDefinition>;
9
+ }
10
+
11
+ export interface ThemeSettingDefinition {
12
+ type: string;
13
+ label: string;
14
+ default?: any;
15
+ options?: string[];
16
+ }
17
+
18
+ export interface Content {
19
+ id: string;
20
+ type: string;
21
+ title: string;
22
+ slug: string;
23
+ status: 'draft' | 'published' | 'archived';
24
+ langcode: string;
25
+ body: string;
26
+ bodyHtml: string;
27
+ fields: Record<string, any>;
28
+ sections?: Section[];
29
+ seo?: SeoData;
30
+ siteId?: string;
31
+ createdAt: Date;
32
+ updatedAt: Date;
33
+ publishedAt?: Date;
34
+ filePath?: string;
35
+ }
36
+
37
+ export interface Section {
38
+ type: string;
39
+ weight: number;
40
+ data: Record<string, any>;
41
+ settings: SectionSettings;
42
+ children?: Section[];
43
+ }
44
+
45
+ export interface SectionSettings {
46
+ background: 'light' | 'dark' | 'primary' | 'custom';
47
+ background_color?: string;
48
+ background_image?: string;
49
+ spacing: 'none' | 'small' | 'medium' | 'large' | 'xlarge';
50
+ width: 'contained' | 'wide' | 'full';
51
+ css_class?: string;
52
+ anchor_id?: string;
53
+ hidden?: boolean;
54
+ }
55
+
56
+ export interface SeoData {
57
+ title?: string;
58
+ description?: string;
59
+ image?: string;
60
+ noindex?: boolean;
61
+ canonical?: string;
62
+ }
63
+
64
+ export interface SiteConfig {
65
+ site_name: string;
66
+ base_url: string;
67
+ theme: string;
68
+ theme_settings?: Record<string, any>;
69
+ seo?: {
70
+ title_separator?: string;
71
+ default_description?: string;
72
+ default_image?: string;
73
+ google_site_verification?: string;
74
+ json_ld?: {
75
+ organization?: { name: string; logo: string; url: string };
76
+ };
77
+ };
78
+ }
79
+
80
+ export interface LayoutProps {
81
+ content: Content;
82
+ site: SiteConfig;
83
+ theme: ThemeConfig;
84
+ themeSettings: Record<string, any>;
85
+ children?: any;
86
+ }
87
+
88
+ export interface SectionProps {
89
+ data: Record<string, any>;
90
+ settings: SectionSettings;
91
+ theme: ThemeConfig;
92
+ themeSettings: Record<string, any>;
93
+ }
@@ -0,0 +1,197 @@
1
+ /** @jsxImportSource hono/jsx */
2
+ import { raw } from 'hono/html';
3
+ import type { FC } from 'hono/jsx';
4
+ import type { SectionProps } from '../../_types.js';
5
+
6
+ function renderGradient(text: string, color: string): any {
7
+ const parts = text.split(/(\*[^*]+\*)/g);
8
+ const html = parts
9
+ .map((p) =>
10
+ p.startsWith('*') && p.endsWith('*')
11
+ ? `<em class="not-italic" style="background:linear-gradient(135deg,${color},${color}99,#EF4444);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text">${p.slice(1, -1)}</em>`
12
+ : p,
13
+ )
14
+ .join('');
15
+ return raw(html);
16
+ }
17
+
18
+ const spacingMap: Record<string, string> = {
19
+ none: 'py-0',
20
+ small: 'py-10',
21
+ medium: 'py-20',
22
+ large: 'py-28',
23
+ xlarge: 'py-36',
24
+ };
25
+
26
+ const widthMap: Record<string, string> = {
27
+ contained: 'max-w-6xl mx-auto px-6',
28
+ wide: 'max-w-7xl mx-auto px-6',
29
+ full: 'w-full px-6',
30
+ };
31
+
32
+ const bgMap: Record<string, string> = {
33
+ light: 'bg-white text-slate-900',
34
+ dark: 'text-white',
35
+ primary: 'text-white',
36
+ custom: '',
37
+ };
38
+
39
+ const BlogListing: FC<SectionProps> = ({ data, settings, themeSettings }) => {
40
+ if (settings.hidden) return null;
41
+
42
+ const urlFn = (p: string) => themeSettings._url?.(p) ?? p;
43
+ const t = (key: string) => themeSettings._t?.(key) ?? key;
44
+ const spacing = spacingMap[settings.spacing] ?? spacingMap.large;
45
+ const width = widthMap[settings.width] ?? widthMap.contained;
46
+ const bg = bgMap[settings.background] ?? bgMap.light;
47
+ const primaryColor = themeSettings.primary_color ?? '#F59E0B';
48
+ const navColor = themeSettings.nav_color ?? '#14101E';
49
+
50
+ const bgStyle: Record<string, string> = {};
51
+ if (settings.background === 'dark') {
52
+ bgStyle.backgroundColor = navColor;
53
+ } else if (settings.background === 'primary') {
54
+ bgStyle.backgroundColor = primaryColor;
55
+ } else if (settings.background === 'custom' && settings.background_color) {
56
+ bgStyle.backgroundColor = settings.background_color;
57
+ }
58
+
59
+ const isDark = settings.background === 'dark' || settings.background === 'primary';
60
+
61
+ const items: Array<{
62
+ title: string;
63
+ url?: string;
64
+ excerpt?: string;
65
+ image?: string;
66
+ date?: string;
67
+ }> = data.items ?? [];
68
+
69
+ const featured = items[0];
70
+ const rest = items.slice(1);
71
+
72
+ return (
73
+ <section
74
+ class={`${spacing} ${bg} relative overflow-hidden ${settings.css_class ?? ''}`}
75
+ id={settings.anchor_id}
76
+ style={Object.keys(bgStyle).length > 0 ? bgStyle : undefined}
77
+ >
78
+ <div class={width}>
79
+ {/* Left-aligned heading + "View all" link */}
80
+ <div class="mb-16 flex items-end justify-between gap-4">
81
+ <div class="max-w-2xl">
82
+ {data.heading && (
83
+ <h2 class="reveal-heading text-3xl font-bold tracking-[-0.03em] sm:text-4xl lg:text-5xl">
84
+ {data.heading.includes('*') ? renderGradient(data.heading, primaryColor) : data.heading}
85
+ </h2>
86
+ )}
87
+ </div>
88
+ <a
89
+ href={urlFn('/articles')}
90
+ class="reveal-sub hidden shrink-0 items-center gap-1 text-sm font-semibold transition-colors duration-200 hover:no-underline sm:flex"
91
+ style={{ color: primaryColor }}
92
+ >
93
+ {t('blog.view_all')}
94
+ <span class="transition-transform duration-200 hover:translate-x-1">&rarr;</span>
95
+ </a>
96
+ </div>
97
+
98
+ {items.length > 0 ? (
99
+ <div class="grid gap-6 lg:grid-cols-5">
100
+ {/* Featured article — large, left */}
101
+ {featured && (
102
+ <article class="testimonial-featured lg:col-span-3">
103
+ <a
104
+ href={featured.url ?? '#'}
105
+ class={`group block overflow-hidden rounded-2xl border transition-all duration-400 hover:no-underline ${
106
+ isDark
107
+ ? 'border-gray-700/50 bg-white/[0.03] hover:border-gray-600'
108
+ : 'border-gray-100 bg-white hover:shadow-xl hover:shadow-slate-200/50'
109
+ }`}
110
+ >
111
+ {featured.image && (
112
+ <div class="overflow-hidden">
113
+ <img
114
+ src={featured.image}
115
+ alt={featured.title}
116
+ class="aspect-[16/10] w-full object-cover transition-transform duration-700 group-hover:scale-105"
117
+ loading="lazy"
118
+ />
119
+ </div>
120
+ )}
121
+ <div class="p-8">
122
+ {featured.date && (
123
+ <time class={`text-xs font-medium ${isDark ? 'text-gray-500' : 'text-slate-400'}`}>{featured.date}</time>
124
+ )}
125
+ <h3 class={`mt-3 text-xl font-bold tracking-[-0.02em] leading-tight ${isDark ? 'text-white' : 'text-slate-900'}`}>
126
+ {featured.title}
127
+ </h3>
128
+ {featured.excerpt && (
129
+ <p class={`mt-3 line-clamp-3 text-sm leading-relaxed ${isDark ? 'text-gray-400' : 'text-slate-500'}`}>
130
+ {featured.excerpt}
131
+ </p>
132
+ )}
133
+ <div class="mt-5 flex items-center gap-1 text-sm font-semibold" style={{ color: primaryColor }}>
134
+ Read more
135
+ <span class="transition-transform duration-200 group-hover:translate-x-1">&rarr;</span>
136
+ </div>
137
+ </div>
138
+ </a>
139
+ </article>
140
+ )}
141
+
142
+ {/* Side articles — stacked, offset */}
143
+ <div class="testimonial-side flex flex-col gap-6 lg:col-span-2 lg:mt-6">
144
+ {rest.map((item) => (
145
+ <article>
146
+ <a
147
+ href={item.url ?? '#'}
148
+ class={`group flex gap-5 rounded-2xl border p-5 transition-all duration-400 hover:no-underline ${
149
+ isDark
150
+ ? 'border-gray-700/50 bg-white/[0.03] hover:border-gray-600'
151
+ : 'border-gray-100 bg-white hover:shadow-lg hover:shadow-slate-200/50'
152
+ }`}
153
+ >
154
+ {item.image && (
155
+ <div class="hidden shrink-0 overflow-hidden rounded-xl sm:block" style={{ width: '100px', height: '100px' }}>
156
+ <img
157
+ src={item.image}
158
+ alt={item.title}
159
+ class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-110"
160
+ loading="lazy"
161
+ />
162
+ </div>
163
+ )}
164
+ <div class="flex-1">
165
+ {item.date && (
166
+ <time class={`text-xs font-medium ${isDark ? 'text-gray-500' : 'text-slate-400'}`}>{item.date}</time>
167
+ )}
168
+ <h3 class={`mt-1 text-sm font-semibold leading-snug ${isDark ? 'text-white' : 'text-slate-900'}`}>
169
+ {item.title}
170
+ </h3>
171
+ <div class="mt-2 flex items-center gap-1 text-xs font-semibold opacity-0 transition-all duration-200 group-hover:opacity-100" style={{ color: primaryColor }}>
172
+ Read <span class="transition-transform duration-200 group-hover:translate-x-1">&rarr;</span>
173
+ </div>
174
+ </div>
175
+ </a>
176
+ </article>
177
+ ))}
178
+ </div>
179
+ </div>
180
+ ) : (
181
+ <p class={`text-center text-sm ${isDark ? 'text-gray-500' : 'text-slate-400'}`}>
182
+ Blog listing renders dynamically — content will appear here at runtime.
183
+ </p>
184
+ )}
185
+
186
+ {/* Mobile "View all" */}
187
+ <div class="mt-10 text-center sm:hidden">
188
+ <a href={urlFn('/articles')} class="text-sm font-semibold hover:no-underline" style={{ color: primaryColor }}>
189
+ {t('blog.view_all')} &rarr;
190
+ </a>
191
+ </div>
192
+ </div>
193
+ </section>
194
+ );
195
+ };
196
+
197
+ export default BlogListing;
@@ -0,0 +1,21 @@
1
+ label: Blog Listing
2
+ icon: list
3
+ description: "Featured blog post with side listing of recent articles."
4
+ status: stable
5
+ fields:
6
+ heading:
7
+ type: text
8
+ label: Heading
9
+ content_type:
10
+ type: text
11
+ label: Content Type
12
+ default: article
13
+ limit:
14
+ type: number
15
+ label: Max Items
16
+ default: 6
17
+ columns:
18
+ type: select
19
+ label: Columns
20
+ options: ["2", "3", "4"]
21
+ default: "3"
@@ -0,0 +1,104 @@
1
+ /** @jsxImportSource hono/jsx */
2
+ import type { FC } from 'hono/jsx';
3
+ import type { SectionProps } from '../../_types.js';
4
+
5
+ const spacingMap: Record<string, string> = {
6
+ none: 'py-0',
7
+ small: 'py-10',
8
+ medium: 'py-20',
9
+ large: 'py-28',
10
+ xlarge: 'py-36',
11
+ };
12
+
13
+ const widthMap: Record<string, string> = {
14
+ contained: 'max-w-6xl mx-auto px-6',
15
+ wide: 'max-w-7xl mx-auto px-6',
16
+ full: 'w-full px-6',
17
+ };
18
+
19
+ const bgMap: Record<string, string> = {
20
+ light: 'bg-white text-slate-900',
21
+ dark: 'text-white',
22
+ primary: 'text-white',
23
+ custom: '',
24
+ };
25
+
26
+ const layoutMap: Record<string, string> = {
27
+ '2': 'grid-cols-1 md:grid-cols-2',
28
+ '3': 'grid-cols-1 md:grid-cols-3',
29
+ '4': 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',
30
+ '1-2': 'grid-cols-1 md:grid-cols-3',
31
+ '2-1': 'grid-cols-1 md:grid-cols-3',
32
+ };
33
+
34
+ function colSpan(layout: string, index: number): string {
35
+ if (layout === '1-2') return index === 0 ? 'md:col-span-1' : 'md:col-span-2';
36
+ if (layout === '2-1') return index === 0 ? 'md:col-span-2' : 'md:col-span-1';
37
+ return '';
38
+ }
39
+
40
+ const Columns: FC<SectionProps> = ({ data, settings, themeSettings }) => {
41
+ if (settings.hidden) return null;
42
+
43
+ const spacing = spacingMap[settings.spacing] ?? spacingMap.large;
44
+ const width = widthMap[settings.width] ?? widthMap.contained;
45
+ const bg = bgMap[settings.background] ?? bgMap.light;
46
+ const primaryColor = themeSettings.primary_color ?? '#F59E0B';
47
+ const navColor = themeSettings.nav_color ?? '#14101E';
48
+ const layout = data.layout ?? '2';
49
+ const columns: Array<{ heading?: string; body?: string; image?: string; image_alt?: string }> =
50
+ data.columns ?? [];
51
+
52
+ const bgStyle: Record<string, string> = {};
53
+ if (settings.background === 'dark') {
54
+ bgStyle.backgroundColor = navColor;
55
+ } else if (settings.background === 'primary') {
56
+ bgStyle.backgroundColor = primaryColor;
57
+ } else if (settings.background === 'custom' && settings.background_color) {
58
+ bgStyle.backgroundColor = settings.background_color;
59
+ }
60
+
61
+ const isDark = settings.background === 'dark' || settings.background === 'primary';
62
+
63
+ return (
64
+ <section
65
+ class={`${spacing} ${bg} ${settings.css_class ?? ''}`}
66
+ id={settings.anchor_id}
67
+ style={Object.keys(bgStyle).length > 0 ? bgStyle : undefined}
68
+ >
69
+ <div class={width}>
70
+ {data.heading && (
71
+ <h2 class="mb-16 text-center text-3xl font-bold tracking-[-0.02em] sm:text-4xl">
72
+ {data.heading}
73
+ </h2>
74
+ )}
75
+
76
+ <div class={`grid gap-10 ${layoutMap[layout] ?? layoutMap['2']}`}>
77
+ {columns.map((col, i) => (
78
+ <div class={colSpan(layout, i)}>
79
+ {col.image && (
80
+ <img
81
+ src={col.image}
82
+ alt={col.image_alt ?? ''}
83
+ class="mb-6 rounded-2xl"
84
+ loading="lazy"
85
+ />
86
+ )}
87
+ {col.heading && (
88
+ <h3 class="mb-4 text-xl font-semibold tracking-[-0.01em]">{col.heading}</h3>
89
+ )}
90
+ {col.body && (
91
+ <div
92
+ class={`prose max-w-none ${isDark ? 'prose-invert' : 'prose-slate'}`}
93
+ dangerouslySetInnerHTML={{ __html: col.body }}
94
+ />
95
+ )}
96
+ </div>
97
+ ))}
98
+ </div>
99
+ </div>
100
+ </section>
101
+ );
102
+ };
103
+
104
+ export default Columns;
@@ -0,0 +1,23 @@
1
+ label: Columns
2
+ icon: columns
3
+ description: "Multi-column layout with configurable column ratios."
4
+ status: stable
5
+ fields:
6
+ layout:
7
+ type: select
8
+ label: Layout
9
+ options: ["2", "3", "4", "1-2", "2-1"]
10
+ default: "2"
11
+ items:
12
+ type: repeater
13
+ label: Column Content
14
+ fields:
15
+ heading:
16
+ type: text
17
+ label: Heading
18
+ body:
19
+ type: textarea
20
+ label: "Body (Markdown)"
21
+ image:
22
+ type: media
23
+ label: Image
@@ -0,0 +1,13 @@
1
+ @keyframes countFade {
2
+ from { opacity: 0; transform: scale(0.7) translateY(20px); }
3
+ to { opacity: 1; transform: scale(1) translateY(0); }
4
+ }
5
+
6
+ .counter-item {
7
+ opacity: 0;
8
+ animation: countFade 0.6s cubic-bezier(0.16, 1, 0.3, 1) both;
9
+ }
10
+ .counter-item:nth-child(1) { animation-delay: 0.15s; }
11
+ .counter-item:nth-child(2) { animation-delay: 0.35s; }
12
+ .counter-item:nth-child(3) { animation-delay: 0.55s; }
13
+ .counter-item:nth-child(4) { animation-delay: 0.75s; }
@@ -0,0 +1,103 @@
1
+ /** @jsxImportSource hono/jsx */
2
+ import { raw } from 'hono/html';
3
+ import type { FC } from 'hono/jsx';
4
+ import type { SectionProps } from '../../_types.js';
5
+
6
+ function renderGradient(text: string, color: string): any {
7
+ const parts = text.split(/(\*[^*]+\*)/g);
8
+ const html = parts
9
+ .map((p) =>
10
+ p.startsWith('*') && p.endsWith('*')
11
+ ? `<em class="not-italic" style="background:linear-gradient(135deg,${color},${color}99,#EF4444);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text">${p.slice(1, -1)}</em>`
12
+ : p,
13
+ )
14
+ .join('');
15
+ return raw(html);
16
+ }
17
+
18
+ const spacingMap: Record<string, string> = {
19
+ none: 'py-0',
20
+ small: 'py-10',
21
+ medium: 'py-20',
22
+ large: 'py-28',
23
+ xlarge: 'py-36',
24
+ };
25
+
26
+ const widthMap: Record<string, string> = {
27
+ contained: 'max-w-6xl mx-auto px-6',
28
+ wide: 'max-w-7xl mx-auto px-6',
29
+ full: 'w-full px-6',
30
+ };
31
+
32
+ const Counters: FC<SectionProps> = ({ data, settings, themeSettings }) => {
33
+ if (settings.hidden) return null;
34
+
35
+ const spacing = spacingMap[settings.spacing] ?? spacingMap.large;
36
+ const width = widthMap[settings.width] ?? widthMap.contained;
37
+ const primaryColor = themeSettings.primary_color ?? '#F59E0B';
38
+ const navColor = themeSettings.nav_color ?? '#14101E';
39
+ const rawItems: Array<Record<string, any>> = data.items ?? [];
40
+ const items = rawItems.map((item) => ({
41
+ value: item.number ?? item.value ?? '',
42
+ suffix: item.suffix ?? '',
43
+ label: item.label ?? '',
44
+ }));
45
+
46
+ const bgStyle: Record<string, string> = {};
47
+ if (settings.background === 'dark') {
48
+ bgStyle.backgroundColor = navColor;
49
+ } else if (settings.background === 'primary') {
50
+ bgStyle.backgroundColor = primaryColor;
51
+ } else if (settings.background === 'custom' && settings.background_color) {
52
+ bgStyle.backgroundColor = settings.background_color;
53
+ }
54
+
55
+ const isDark = settings.background === 'dark' || settings.background === 'primary';
56
+
57
+ return (
58
+ <section
59
+ class={`${spacing} ${isDark ? 'text-white' : 'bg-white text-slate-900'} relative overflow-hidden ${settings.css_class ?? ''}`}
60
+ id={settings.anchor_id}
61
+ style={Object.keys(bgStyle).length > 0 ? bgStyle : undefined}
62
+ >
63
+ {/* Grid pattern for dark bg */}
64
+ {isDark && <div class="grid-pattern pointer-events-none absolute inset-0" />}
65
+
66
+ {/* Floating blob */}
67
+ <div class="blob blob-sm" style={{ bottom: '10%', right: '5%', background: `${primaryColor}10`, animationDelay: '-4s' }} />
68
+
69
+ <div class={width}>
70
+ {data.heading && (
71
+ <h2 class="reveal-heading mb-16 text-3xl font-bold tracking-[-0.03em] sm:text-4xl lg:text-5xl">
72
+ {data.heading.includes('*') ? renderGradient(data.heading, primaryColor) : data.heading}
73
+ </h2>
74
+ )}
75
+
76
+ {/* Counter items with dividers, staggered */}
77
+ <div class="flex flex-wrap items-start justify-between gap-y-12">
78
+ {items.map((item, idx) => (
79
+ <div class="counter-item flex items-start gap-8" style={{ animationDelay: `${0.15 + idx * 0.2}s` }}>
80
+ {idx > 0 && (
81
+ <div class={`hidden h-20 w-px lg:block ${isDark ? 'bg-white/10' : 'bg-gray-200'}`} />
82
+ )}
83
+ <div class="min-w-[140px]">
84
+ <div
85
+ class="text-5xl font-extrabold tracking-[-0.04em] sm:text-6xl lg:text-7xl"
86
+ style={{ color: isDark ? '#fff' : primaryColor }}
87
+ >
88
+ {item.value}
89
+ {item.suffix && <span class="text-3xl sm:text-4xl lg:text-5xl">{item.suffix}</span>}
90
+ </div>
91
+ <div class={`mt-3 text-sm font-medium uppercase tracking-[0.12em] ${isDark ? 'text-gray-400' : 'text-slate-400'}`}>
92
+ {item.label}
93
+ </div>
94
+ </div>
95
+ </div>
96
+ ))}
97
+ </div>
98
+ </div>
99
+ </section>
100
+ );
101
+ };
102
+
103
+ export default Counters;
@@ -0,0 +1,23 @@
1
+ label: Counters
2
+ icon: hash
3
+ description: "Animated counter stats with numbers, labels, and optional suffixes."
4
+ status: stable
5
+ fields:
6
+ heading:
7
+ type: text
8
+ label: Heading
9
+ items:
10
+ type: repeater
11
+ label: Counter Items
12
+ fields:
13
+ number:
14
+ type: text
15
+ label: Number
16
+ required: true
17
+ label:
18
+ type: text
19
+ label: Label
20
+ required: true
21
+ suffix:
22
+ type: text
23
+ label: Suffix