@lssm/lib.design-system 1.11.1 → 1.41.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 (299) hide show
  1. package/README.md +6 -1
  2. package/dist/_virtual/rolldown_runtime.js +9 -4
  3. package/dist/components/agent/ApprovalQueue.js +1 -1
  4. package/dist/components/atoms/Button.js +4 -5
  5. package/dist/components/atoms/ButtonLink.js +2 -2
  6. package/dist/components/atoms/Cta.js +4 -5
  7. package/dist/components/atoms/EmptyState.js +4 -4
  8. package/dist/components/atoms/ErrorState.js +1 -2
  9. package/dist/components/atoms/Input.js +5 -6
  10. package/dist/components/atoms/Link.js +1 -2
  11. package/dist/components/atoms/Link.web.js +4 -2
  12. package/dist/components/atoms/LoaderCircular.js +1 -2
  13. package/dist/components/atoms/Stepper.js +4 -4
  14. package/dist/components/atoms/Textarea.js +8 -9
  15. package/dist/components/data-view/DataViewRenderer.js +2 -2
  16. package/dist/components/forms/ActionForm.js +18 -0
  17. package/dist/components/forms/FormOneByOneLayout.js +3 -3
  18. package/dist/components/forms/FormStepsLayout.js +3 -3
  19. package/dist/components/forms/ZodForm.js +1 -1
  20. package/dist/components/legal/atoms/LegalCallout.js +1 -1
  21. package/dist/components/legal/atoms/LegalHeading.js +1 -1
  22. package/dist/components/legal/atoms/LegalList.js +1 -1
  23. package/dist/components/legal/atoms/LegalSection.js +1 -1
  24. package/dist/components/legal/atoms/LegalText.js +1 -1
  25. package/dist/components/legal/molecules/ContactFields.js +8 -8
  26. package/dist/components/legal/molecules/LegalTOC.js +1 -1
  27. package/dist/components/legal/organisms/ContactForm.js +3 -3
  28. package/dist/components/legal/organisms/GDPRDataRequest.js +2 -2
  29. package/dist/components/legal/templates/ContactTemplate.js +3 -3
  30. package/dist/components/marketing/MarketingCard.js +20 -0
  31. package/dist/components/marketing/MarketingCardsSection.js +28 -0
  32. package/dist/components/marketing/MarketingComparisonSection.js +52 -0
  33. package/dist/components/marketing/MarketingIconCard.js +73 -0
  34. package/dist/components/marketing/MarketingSection.js +61 -0
  35. package/dist/components/marketing/MarketingStepCard.js +36 -0
  36. package/dist/components/molecules/AiLinkButton.js +4 -4
  37. package/dist/components/molecules/Breadcrumbs.js +2 -2
  38. package/dist/components/molecules/CommandPalette.js +3 -3
  39. package/dist/components/molecules/CommandSearchTrigger.js +3 -3
  40. package/dist/components/molecules/FiltersToolbar.js +5 -5
  41. package/dist/components/molecules/HoverPreview.js +2 -2
  42. package/dist/components/molecules/LangSwitchDropdown.js +2 -2
  43. package/dist/components/molecules/LoaderBlock.js +1 -2
  44. package/dist/components/molecules/OverviewCard.js +5 -4
  45. package/dist/components/molecules/SkeletonBlock/index.web.js +1 -2
  46. package/dist/components/molecules/SkeletonCircle/index.web.js +1 -2
  47. package/dist/components/molecules/SkeletonList/index.web.js +4 -5
  48. package/dist/components/organisms/AcademyLayout.js +2 -2
  49. package/dist/components/organisms/AppLayout.js +2 -2
  50. package/dist/components/organisms/EmptySearchResult.js +5 -5
  51. package/dist/components/organisms/FAQSection.js +2 -2
  52. package/dist/components/organisms/Footer.js +2 -4
  53. package/dist/components/organisms/MarketingHeader.js +5 -5
  54. package/dist/components/organisms/MarketingHeaderMobile.js +2 -2
  55. package/dist/components/organisms/MarketingLayout.js +1 -0
  56. package/dist/components/templates/lists/ListPageTemplate/index.web.js +2 -2
  57. package/dist/hooks/useListUrlState.js +7 -7
  58. package/dist/index.js +9 -1
  59. package/dist/lib/keyboard.js +1 -172
  60. package/dist/node_modules/@swc/helpers/cjs/_interop_require_default.js +14 -0
  61. package/dist/node_modules/@swc/helpers/cjs/_interop_require_wildcard.js +35 -0
  62. package/dist/node_modules/next/dist/client/add-base-path.js +30 -0
  63. package/dist/node_modules/next/dist/client/add-locale.js +29 -0
  64. package/dist/node_modules/next/dist/client/detect-domain-locale.js +26 -0
  65. package/dist/node_modules/next/dist/client/get-domain-locale.js +41 -0
  66. package/dist/node_modules/next/dist/client/has-base-path.js +28 -0
  67. package/dist/node_modules/next/dist/client/link.js +311 -0
  68. package/dist/node_modules/next/dist/client/normalize-locale-path.js +30 -0
  69. package/dist/node_modules/next/dist/client/normalize-trailing-slash.js +34 -0
  70. package/dist/node_modules/next/dist/client/request-idle-callback.js +44 -0
  71. package/dist/node_modules/next/dist/client/resolve-href.js +86 -0
  72. package/dist/node_modules/next/dist/client/use-intersection.js +104 -0
  73. package/dist/node_modules/next/dist/client/use-merged-ref.js +56 -0
  74. package/dist/node_modules/next/dist/compiled/path-to-regexp/index.js +372 -0
  75. package/dist/node_modules/next/dist/lib/constants.js +316 -0
  76. package/dist/node_modules/next/dist/lib/route-pattern-normalizer.js +69 -0
  77. package/dist/node_modules/next/dist/shared/lib/escape-regexp.js +23 -0
  78. package/dist/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js +22 -0
  79. package/dist/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js +42 -0
  80. package/dist/node_modules/next/dist/shared/lib/invariant-error.js +23 -0
  81. package/dist/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js +23 -0
  82. package/dist/node_modules/next/dist/shared/lib/router/utils/add-locale.js +30 -0
  83. package/dist/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js +24 -0
  84. package/dist/node_modules/next/dist/shared/lib/router/utils/app-paths.js +41 -0
  85. package/dist/node_modules/next/dist/shared/lib/router/utils/format-url.js +78 -0
  86. package/dist/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js +151 -0
  87. package/dist/node_modules/next/dist/shared/lib/router/utils/get-segment-param.js +77 -0
  88. package/dist/node_modules/next/dist/shared/lib/router/utils/index.js +32 -0
  89. package/dist/node_modules/next/dist/shared/lib/router/utils/interception-routes.js +92 -0
  90. package/dist/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js +41 -0
  91. package/dist/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js +26 -0
  92. package/dist/node_modules/next/dist/shared/lib/router/utils/is-local-url.js +31 -0
  93. package/dist/node_modules/next/dist/shared/lib/router/utils/omit.js +24 -0
  94. package/dist/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js +33 -0
  95. package/dist/node_modules/next/dist/shared/lib/router/utils/parse-path.js +36 -0
  96. package/dist/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js +24 -0
  97. package/dist/node_modules/next/dist/shared/lib/router/utils/querystring.js +56 -0
  98. package/dist/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js +26 -0
  99. package/dist/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js +94 -0
  100. package/dist/node_modules/next/dist/shared/lib/router/utils/route-matcher.js +46 -0
  101. package/dist/node_modules/next/dist/shared/lib/router/utils/route-regex.js +203 -0
  102. package/dist/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js +167 -0
  103. package/dist/node_modules/next/dist/shared/lib/router-context.shared-runtime.js +20 -0
  104. package/dist/node_modules/next/dist/shared/lib/segment.js +80 -0
  105. package/dist/node_modules/next/dist/shared/lib/utils/error-once.js +25 -0
  106. package/dist/node_modules/next/dist/shared/lib/utils.js +172 -0
  107. package/dist/node_modules/next/link.js +12 -0
  108. package/dist/platform/useColorScheme.js +3 -3
  109. package/dist/platform/useReducedMotion.js +3 -3
  110. package/dist/platform/useResponsive.js +4 -4
  111. package/dist/renderers/form-contract.js +1 -1
  112. package/package.json +13 -304
  113. package/dist/components/agent/AgentMonitor.d.ts +0 -28
  114. package/dist/components/agent/ApprovalQueue.d.ts +0 -25
  115. package/dist/components/atoms/ActionButtons.d.ts +0 -25
  116. package/dist/components/atoms/Button.d.ts +0 -39
  117. package/dist/components/atoms/Button.mobile.d.ts +0 -21
  118. package/dist/components/atoms/Button.mobile.js +0 -34
  119. package/dist/components/atoms/ButtonLink.d.ts +0 -21
  120. package/dist/components/atoms/ButtonLink.mobile.d.ts +0 -19
  121. package/dist/components/atoms/ButtonLink.mobile.js +0 -41
  122. package/dist/components/atoms/Cta.d.ts +0 -20
  123. package/dist/components/atoms/Cta.mobile.d.ts +0 -14
  124. package/dist/components/atoms/Cta.mobile.js +0 -38
  125. package/dist/components/atoms/DataChips.d.ts +0 -37
  126. package/dist/components/atoms/EmptyState.d.ts +0 -7
  127. package/dist/components/atoms/ErrorState.d.ts +0 -28
  128. package/dist/components/atoms/ErrorState.mobile.d.ts +0 -28
  129. package/dist/components/atoms/ErrorState.mobile.js +0 -41
  130. package/dist/components/atoms/Input.d.ts +0 -39
  131. package/dist/components/atoms/Input.mobile.d.ts +0 -37
  132. package/dist/components/atoms/Input.mobile.js +0 -27
  133. package/dist/components/atoms/Link.d.ts +0 -11
  134. package/dist/components/atoms/Link.native.d.ts +0 -1
  135. package/dist/components/atoms/Link.native.js +0 -0
  136. package/dist/components/atoms/Link.web.d.ts +0 -23
  137. package/dist/components/atoms/LoaderCircular.d.ts +0 -22
  138. package/dist/components/atoms/LoaderCircular.mobile.d.ts +0 -17
  139. package/dist/components/atoms/LoaderCircular.mobile.js +0 -26
  140. package/dist/components/atoms/NavBrand.d.ts +0 -18
  141. package/dist/components/atoms/Stepper.d.ts +0 -7
  142. package/dist/components/atoms/Textarea.d.ts +0 -41
  143. package/dist/components/atoms/Textarea.mobile.d.ts +0 -37
  144. package/dist/components/atoms/Textarea.mobile.js +0 -27
  145. package/dist/components/data-view/DataViewDetail.d.ts +0 -21
  146. package/dist/components/data-view/DataViewList.d.ts +0 -23
  147. package/dist/components/data-view/DataViewRenderer.d.ts +0 -47
  148. package/dist/components/data-view/DataViewTable.d.ts +0 -25
  149. package/dist/components/data-view/utils.d.ts +0 -5
  150. package/dist/components/forms/FormCardLayout.d.ts +0 -22
  151. package/dist/components/forms/FormDialog.d.ts +0 -24
  152. package/dist/components/forms/FormLayout.d.ts +0 -29
  153. package/dist/components/forms/FormOneByOneLayout.d.ts +0 -25
  154. package/dist/components/forms/FormStepsLayout.d.ts +0 -26
  155. package/dist/components/forms/ZodForm.d.ts +0 -21
  156. package/dist/components/legal/atoms/DefinitionList.d.ts +0 -16
  157. package/dist/components/legal/atoms/KeyValueList.d.ts +0 -16
  158. package/dist/components/legal/atoms/LegalCallout.d.ts +0 -17
  159. package/dist/components/legal/atoms/LegalHeading.d.ts +0 -24
  160. package/dist/components/legal/atoms/LegalList.d.ts +0 -20
  161. package/dist/components/legal/atoms/LegalSection.d.ts +0 -21
  162. package/dist/components/legal/atoms/LegalText.d.ts +0 -24
  163. package/dist/components/legal/molecules/Consent.d.ts +0 -35
  164. package/dist/components/legal/molecules/ContactFields.d.ts +0 -24
  165. package/dist/components/legal/molecules/LegalMeta.d.ts +0 -14
  166. package/dist/components/legal/molecules/LegalTOC.d.ts +0 -30
  167. package/dist/components/legal/organisms/ContactForm.d.ts +0 -29
  168. package/dist/components/legal/organisms/GDPRDataRequest.d.ts +0 -18
  169. package/dist/components/legal/organisms/GDPRRights.d.ts +0 -13
  170. package/dist/components/legal/organisms/LegalPageLayout.d.ts +0 -23
  171. package/dist/components/legal/templates/ContactTemplate.d.ts +0 -23
  172. package/dist/components/legal/templates/CookiesTemplate.d.ts +0 -32
  173. package/dist/components/legal/templates/PrivacyTemplate.d.ts +0 -32
  174. package/dist/components/legal/templates/SalesTermsTemplate.d.ts +0 -27
  175. package/dist/components/legal/templates/TermsTemplate.d.ts +0 -27
  176. package/dist/components/molecules/AiLinkButton.d.ts +0 -15
  177. package/dist/components/molecules/Breadcrumbs.d.ts +0 -15
  178. package/dist/components/molecules/CommandPalette.d.ts +0 -26
  179. package/dist/components/molecules/CommandSearchTrigger.d.ts +0 -18
  180. package/dist/components/molecules/DropdownMenu.d.ts +0 -1
  181. package/dist/components/molecules/DropdownMenu.js +0 -0
  182. package/dist/components/molecules/EntityCard.d.ts +0 -37
  183. package/dist/components/molecules/FiltersToolbar.d.ts +0 -35
  184. package/dist/components/molecules/FiltersToolbar.mobile.d.ts +0 -18
  185. package/dist/components/molecules/FiltersToolbar.mobile.js +0 -48
  186. package/dist/components/molecules/HoverPreview.d.ts +0 -20
  187. package/dist/components/molecules/LangSwitch.d.ts +0 -22
  188. package/dist/components/molecules/LangSwitchDropdown.d.ts +0 -21
  189. package/dist/components/molecules/LoaderBlock.d.ts +0 -18
  190. package/dist/components/molecules/LoaderBlock.mobile.d.ts +0 -18
  191. package/dist/components/molecules/LoaderBlock.mobile.js +0 -25
  192. package/dist/components/molecules/MobileNavMenu.d.ts +0 -13
  193. package/dist/components/molecules/NavItemCard.d.ts +0 -14
  194. package/dist/components/molecules/NavMain.d.ts +0 -13
  195. package/dist/components/molecules/NavUser.d.ts +0 -17
  196. package/dist/components/molecules/OverviewCard.d.ts +0 -20
  197. package/dist/components/molecules/SkeletonBlock/index.d.ts +0 -3
  198. package/dist/components/molecules/SkeletonBlock/index.js +0 -3
  199. package/dist/components/molecules/SkeletonBlock/index.mobile.d.ts +0 -12
  200. package/dist/components/molecules/SkeletonBlock/index.mobile.js +0 -18
  201. package/dist/components/molecules/SkeletonBlock/index.web.d.ts +0 -12
  202. package/dist/components/molecules/SkeletonBlock/types.d.ts +0 -9
  203. package/dist/components/molecules/SkeletonBlock/types.js +0 -0
  204. package/dist/components/molecules/SkeletonCircle/index.d.ts +0 -3
  205. package/dist/components/molecules/SkeletonCircle/index.js +0 -3
  206. package/dist/components/molecules/SkeletonCircle/index.mobile.d.ts +0 -11
  207. package/dist/components/molecules/SkeletonCircle/index.mobile.js +0 -23
  208. package/dist/components/molecules/SkeletonCircle/index.web.d.ts +0 -11
  209. package/dist/components/molecules/SkeletonCircle/types.d.ts +0 -8
  210. package/dist/components/molecules/SkeletonCircle/types.js +0 -0
  211. package/dist/components/molecules/SkeletonList/index.d.ts +0 -3
  212. package/dist/components/molecules/SkeletonList/index.js +0 -3
  213. package/dist/components/molecules/SkeletonList/index.mobile.d.ts +0 -10
  214. package/dist/components/molecules/SkeletonList/index.mobile.js +0 -22
  215. package/dist/components/molecules/SkeletonList/index.web.d.ts +0 -10
  216. package/dist/components/molecules/SkeletonList/types.d.ts +0 -7
  217. package/dist/components/molecules/SkeletonList/types.js +0 -0
  218. package/dist/components/molecules/StatCard.d.ts +0 -36
  219. package/dist/components/molecules/StatusChip.d.ts +0 -26
  220. package/dist/components/molecules/hover-previews/Doc.d.ts +0 -27
  221. package/dist/components/molecules/hover-previews/Media.d.ts +0 -20
  222. package/dist/components/molecules/hover-previews/Simple.d.ts +0 -25
  223. package/dist/components/molecules/hover-previews/Stats.d.ts +0 -22
  224. package/dist/components/molecules/hover-previews/User.d.ts +0 -25
  225. package/dist/components/native/BottomTabs.mobile.d.ts +0 -20
  226. package/dist/components/native/BottomTabs.mobile.js +0 -27
  227. package/dist/components/native/FlatListScreen.mobile.d.ts +0 -43
  228. package/dist/components/native/FlatListScreen.mobile.js +0 -63
  229. package/dist/components/native/SheetMenu.mobile.d.ts +0 -17
  230. package/dist/components/native/SheetMenu.mobile.js +0 -21
  231. package/dist/components/organisms/AcademyLayout.d.ts +0 -29
  232. package/dist/components/organisms/AppHeader.d.ts +0 -18
  233. package/dist/components/organisms/AppHeader.mobile.d.ts +0 -21
  234. package/dist/components/organisms/AppHeader.mobile.js +0 -52
  235. package/dist/components/organisms/AppLayout.d.ts +0 -28
  236. package/dist/components/organisms/AppSidebar.d.ts +0 -23
  237. package/dist/components/organisms/AppSidebar.mobile.d.ts +0 -1
  238. package/dist/components/organisms/AppSidebar.mobile.js +0 -0
  239. package/dist/components/organisms/EmptyDataList.d.ts +0 -20
  240. package/dist/components/organisms/EmptyDataList.mobile.d.ts +0 -20
  241. package/dist/components/organisms/EmptyDataList.mobile.js +0 -27
  242. package/dist/components/organisms/EmptyDataList.types.d.ts +0 -19
  243. package/dist/components/organisms/EmptyDataList.types.js +0 -1
  244. package/dist/components/organisms/EmptySearchResult.d.ts +0 -24
  245. package/dist/components/organisms/FAQSection.d.ts +0 -31
  246. package/dist/components/organisms/FeatureCarousel.d.ts +0 -18
  247. package/dist/components/organisms/FeaturesSection.d.ts +0 -19
  248. package/dist/components/organisms/Footer.d.ts +0 -25
  249. package/dist/components/organisms/GridLayout.d.ts +0 -25
  250. package/dist/components/organisms/GridLayout.js +0 -28
  251. package/dist/components/organisms/Header.d.ts +0 -37
  252. package/dist/components/organisms/Header.mobile.d.ts +0 -24
  253. package/dist/components/organisms/Header.mobile.js +0 -18
  254. package/dist/components/organisms/HeroResponsive.d.ts +0 -14
  255. package/dist/components/organisms/HeroSection.d.ts +0 -29
  256. package/dist/components/organisms/ListCardPage.d.ts +0 -36
  257. package/dist/components/organisms/ListGridPage.d.ts +0 -36
  258. package/dist/components/organisms/ListPageResponsive.d.ts +0 -7
  259. package/dist/components/organisms/ListTablePage.d.ts +0 -33
  260. package/dist/components/organisms/MarketingHeader.d.ts +0 -36
  261. package/dist/components/organisms/MarketingHeaderDesktop.d.ts +0 -15
  262. package/dist/components/organisms/MarketingHeaderMobile.d.ts +0 -12
  263. package/dist/components/organisms/MarketingLayout.d.ts +0 -18
  264. package/dist/components/organisms/PageHeaderResponsive.d.ts +0 -8
  265. package/dist/components/organisms/PageHeaderResponsive.mobile.d.ts +0 -22
  266. package/dist/components/organisms/PageHeaderResponsive.mobile.js +0 -32
  267. package/dist/components/organisms/PricingCarousel.d.ts +0 -24
  268. package/dist/components/organisms/PricingSection.d.ts +0 -18
  269. package/dist/components/organisms/TestimonialCarousel.d.ts +0 -19
  270. package/dist/components/templates/lists/ListPageTemplate/index.d.ts +0 -3
  271. package/dist/components/templates/lists/ListPageTemplate/index.js +0 -3
  272. package/dist/components/templates/lists/ListPageTemplate/index.mobile.d.ts +0 -21
  273. package/dist/components/templates/lists/ListPageTemplate/index.mobile.js +0 -32
  274. package/dist/components/templates/lists/ListPageTemplate/index.web.d.ts +0 -22
  275. package/dist/components/templates/lists/ListPageTemplate/types.d.ts +0 -25
  276. package/dist/components/templates/lists/ListPageTemplate/types.js +0 -1
  277. package/dist/hooks/useListUrlState.d.ts +0 -30
  278. package/dist/index.d.ts +0 -108
  279. package/dist/lib/keyboard.d.ts +0 -14
  280. package/dist/lib/utils.d.ts +0 -6
  281. package/dist/platform/useColorScheme.d.ts +0 -5
  282. package/dist/platform/useColorScheme.mobile.d.ts +0 -5
  283. package/dist/platform/useColorScheme.mobile.js +0 -20
  284. package/dist/platform/useReducedMotion.d.ts +0 -4
  285. package/dist/platform/useReducedMotion.mobile.d.ts +0 -4
  286. package/dist/platform/useReducedMotion.mobile.js +0 -28
  287. package/dist/platform/useResponsive.d.ts +0 -23
  288. package/dist/platform/useResponsive.mobile.d.ts +0 -23
  289. package/dist/platform/useResponsive.mobile.js +0 -42
  290. package/dist/platform/withPlatformUI.d.ts +0 -28
  291. package/dist/renderers/form-contract.d.ts +0 -11
  292. package/dist/renderers/index.d.ts +0 -2
  293. package/dist/renderers/index.js +0 -3
  294. package/dist/theme/tokenBridge.d.ts +0 -19
  295. package/dist/theme/tokens.d.ts +0 -50
  296. package/dist/theme/variants.d.ts +0 -21
  297. package/dist/types/nativewind-env.d.ts +0 -1
  298. package/dist/types/navigation.d.ts +0 -44
  299. package/dist/types/navigation.js +0 -1
@@ -0,0 +1,73 @@
1
+ import { CardContent, CardTitle, MarketingCard } from "./MarketingCard.js";
2
+ import "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { cva } from "class-variance-authority";
5
+ import { HStack, VStack } from "@lssm/lib.ui-kit-web/ui/stack";
6
+ import { Muted, Small } from "@lssm/lib.ui-kit-web/ui/typography";
7
+
8
+ //#region src/components/marketing/MarketingIconCard.tsx
9
+ const layoutVariants = cva("w-full", {
10
+ variants: { variant: {
11
+ iconFirst: "space-y-3",
12
+ listing: "",
13
+ support: ""
14
+ } },
15
+ defaultVariants: { variant: "iconFirst" }
16
+ });
17
+ function MarketingIconCard({ icon: Icon, title, description, tone = "default", iconClassName, headerAction, variant = "iconFirst", className }) {
18
+ return /* @__PURE__ */ jsx(MarketingCard, {
19
+ tone,
20
+ className,
21
+ children: /* @__PURE__ */ jsx(CardContent, {
22
+ className: layoutVariants({ variant }),
23
+ children: variant === "iconFirst" ? /* @__PURE__ */ jsxs(VStack, {
24
+ gap: "sm",
25
+ align: "start",
26
+ children: [
27
+ /* @__PURE__ */ jsxs(HStack, {
28
+ gap: "sm",
29
+ align: "center",
30
+ justify: "between",
31
+ className: "w-full",
32
+ children: [/* @__PURE__ */ jsx(Icon, {
33
+ className: iconClassName,
34
+ size: 24
35
+ }), headerAction]
36
+ }),
37
+ /* @__PURE__ */ jsx(CardTitle, {
38
+ className: "text-xl",
39
+ children: title
40
+ }),
41
+ description ? /* @__PURE__ */ jsx(Muted, {
42
+ className: "text-sm leading-relaxed",
43
+ children: description
44
+ }) : null
45
+ ]
46
+ }) : /* @__PURE__ */ jsxs(HStack, {
47
+ gap: "md",
48
+ align: "start",
49
+ children: [/* @__PURE__ */ jsx(Icon, {
50
+ className: iconClassName,
51
+ size: variant === "listing" ? 18 : 20
52
+ }), /* @__PURE__ */ jsxs(VStack, {
53
+ gap: "xs",
54
+ align: "start",
55
+ children: [
56
+ /* @__PURE__ */ jsx(CardTitle, {
57
+ className: "text-base font-semibold",
58
+ children: title
59
+ }),
60
+ description ? /* @__PURE__ */ jsx(Muted, {
61
+ className: "text-sm leading-relaxed",
62
+ children: description
63
+ }) : null,
64
+ headerAction ? /* @__PURE__ */ jsx(Small, { children: headerAction }) : null
65
+ ]
66
+ })]
67
+ })
68
+ })
69
+ });
70
+ }
71
+
72
+ //#endregion
73
+ export { MarketingIconCard };
@@ -0,0 +1,61 @@
1
+ import "react";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ import { VStack } from "@lssm/lib.ui-kit-web/ui/stack";
5
+ import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
6
+ import { Muted } from "@lssm/lib.ui-kit-web/ui/typography";
7
+
8
+ //#region src/components/marketing/MarketingSection.tsx
9
+ const sectionVariants = cva("w-full", {
10
+ variants: {
11
+ tone: {
12
+ default: "bg-background",
13
+ muted: "bg-muted/40 border-b border-border/60",
14
+ panel: "bg-card/60 shadow-[0_10px_60px_-45px_rgba(0,0,0,0.35)] backdrop-blur",
15
+ gradient: "bg-gradient-to-br from-violet-500/10 via-indigo-500/5 to-blue-500/5"
16
+ },
17
+ padding: {
18
+ compact: "py-10",
19
+ comfortable: "py-16 sm:py-20",
20
+ spacious: "py-20 sm:py-24"
21
+ }
22
+ },
23
+ defaultVariants: {
24
+ tone: "default",
25
+ padding: "comfortable"
26
+ }
27
+ });
28
+ function MarketingSection({ children, eyebrow, title, subtitle, align = "center", maxWidth = "xl", tone, padding, className }) {
29
+ const contentWidth = maxWidth === "lg" ? "max-w-5xl" : "max-w-6xl";
30
+ const headerAlign = align === "center" ? "items-center text-center" : "items-start text-left";
31
+ return /* @__PURE__ */ jsx("section", {
32
+ className: cn(sectionVariants({
33
+ tone,
34
+ padding
35
+ }), "transition-colors", className),
36
+ children: /* @__PURE__ */ jsxs("div", {
37
+ className: cn("mx-auto w-full px-4 sm:px-6 lg:px-8", contentWidth),
38
+ children: [(eyebrow || title || subtitle) && /* @__PURE__ */ jsxs(VStack, {
39
+ gap: "sm",
40
+ className: cn("mb-10", headerAlign),
41
+ children: [
42
+ eyebrow ? /* @__PURE__ */ jsx(Muted, {
43
+ className: "text-[11px] font-semibold tracking-[0.2em] uppercase",
44
+ children: eyebrow
45
+ }) : null,
46
+ title ? /* @__PURE__ */ jsx("div", {
47
+ className: "text-3xl leading-tight font-bold md:text-4xl",
48
+ children: title
49
+ }) : null,
50
+ subtitle ? /* @__PURE__ */ jsx(Muted, {
51
+ className: "text-base md:text-lg",
52
+ children: subtitle
53
+ }) : null
54
+ ]
55
+ }), children]
56
+ })
57
+ });
58
+ }
59
+
60
+ //#endregion
61
+ export { MarketingSection };
@@ -0,0 +1,36 @@
1
+ import { CardContent, CardHeader, CardTitle, MarketingCard } from "./MarketingCard.js";
2
+ import "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { HStack, VStack } from "@lssm/lib.ui-kit-web/ui/stack";
5
+ import { Muted, Small } from "@lssm/lib.ui-kit-web/ui/typography";
6
+
7
+ //#region src/components/marketing/MarketingStepCard.tsx
8
+ function MarketingStepCard({ step, title, description, tone = "default" }) {
9
+ return /* @__PURE__ */ jsxs(MarketingCard, {
10
+ tone,
11
+ children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(HStack, {
12
+ gap: "md",
13
+ align: "center",
14
+ className: "w-full",
15
+ children: [/* @__PURE__ */ jsx("div", {
16
+ className: "bg-primary/15 flex h-10 w-10 items-center justify-center rounded-lg",
17
+ children: /* @__PURE__ */ jsx(Small, {
18
+ className: "text-primary font-semibold",
19
+ children: step
20
+ })
21
+ }), /* @__PURE__ */ jsx(CardTitle, {
22
+ className: "text-lg",
23
+ children: title
24
+ })]
25
+ }) }), description ? /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(VStack, {
26
+ gap: "sm",
27
+ children: /* @__PURE__ */ jsx(Muted, {
28
+ className: "text-sm leading-relaxed",
29
+ children: description
30
+ })
31
+ }) }) : null]
32
+ });
33
+ }
34
+
35
+ //#endregion
36
+ export { MarketingStepCard };
@@ -1,5 +1,5 @@
1
1
  import { Button } from "../atoms/Button.js";
2
- import * as React$1 from "react";
2
+ import * as React from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@lssm/lib.ui-kit-web/ui/dropdown-menu";
5
5
 
@@ -16,19 +16,19 @@ function buildProviderUrl(provider, href) {
16
16
  }
17
17
  }
18
18
  function AiLinkButton({ href, className }) {
19
- const copyLink = React$1.useCallback(() => {
19
+ const copyLink = React.useCallback(() => {
20
20
  try {
21
21
  navigator.clipboard?.writeText(href).catch(() => {});
22
22
  } catch {}
23
23
  }, [href]);
24
- const openChatGPT = React$1.useCallback(() => {
24
+ const openChatGPT = React.useCallback(() => {
25
25
  const url = buildProviderUrl("chatgpt", href);
26
26
  try {
27
27
  navigator.clipboard?.writeText(href).catch(() => {});
28
28
  } catch {}
29
29
  window.open(url, "_blank", "noopener,noreferrer");
30
30
  }, [href]);
31
- const openClaude = React$1.useCallback(() => {
31
+ const openClaude = React.useCallback(() => {
32
32
  const url = buildProviderUrl("claude", href);
33
33
  try {
34
34
  navigator.clipboard?.writeText(href).catch(() => {});
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
 
3
- import * as React$1 from "react";
3
+ import * as React from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@lssm/lib.ui-kit-web/ui/breadcrumb";
6
6
 
7
7
  //#region src/components/molecules/Breadcrumbs.tsx
8
8
  function Breadcrumbs({ items }) {
9
9
  if (!items?.length) return null;
10
- return /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { children: items.map((it, idx) => /* @__PURE__ */ jsxs(React$1.Fragment, { children: [/* @__PURE__ */ jsx(BreadcrumbItem, { children: it.href ? /* @__PURE__ */ jsx(BreadcrumbLink, {
10
+ return /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { children: items.map((it, idx) => /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(BreadcrumbItem, { children: it.href ? /* @__PURE__ */ jsx(BreadcrumbLink, {
11
11
  href: it.href,
12
12
  children: it.label
13
13
  }) : /* @__PURE__ */ jsx(BreadcrumbPage, { children: it.label }) }), idx < items.length - 1 && /* @__PURE__ */ jsx(BreadcrumbSeparator, {})] }, idx)) }) });
@@ -1,16 +1,16 @@
1
1
  'use client';
2
2
 
3
- import * as React$1 from "react";
3
+ import * as React from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut } from "@lssm/lib.ui-kit-web/ui/command";
6
6
 
7
7
  //#region src/components/molecules/CommandPalette.tsx
8
8
  function CommandPalette({ open, onOpenChange, groups, placeholder = "Type a command or search…" }) {
9
- const [internalOpen, setInternalOpen] = React$1.useState(false);
9
+ const [internalOpen, setInternalOpen] = React.useState(false);
10
10
  const isControlled = typeof open === "boolean";
11
11
  const visible = isControlled ? open : internalOpen;
12
12
  const setVisible = isControlled ? onOpenChange : setInternalOpen;
13
- React$1.useEffect(() => {
13
+ React.useEffect(() => {
14
14
  const handler = (e) => {
15
15
  if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
16
16
  e.preventDefault();
@@ -2,15 +2,15 @@
2
2
 
3
3
  import { Button } from "../atoms/Button.js";
4
4
  import { CommandPalette } from "./CommandPalette.js";
5
- import * as React$1 from "react";
5
+ import * as React from "react";
6
6
  import { SearchIcon } from "lucide-react";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
8
  import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
9
9
 
10
10
  //#region src/components/molecules/CommandSearchTrigger.tsx
11
11
  function CommandSearchTrigger({ groups, className, placeholder = "Search…", compact = false }) {
12
- const [open, setOpen] = React$1.useState(false);
13
- React$1.useEffect(() => {
12
+ const [open, setOpen] = React.useState(false);
13
+ React.useEffect(() => {
14
14
  const handler = (e) => {
15
15
  if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
16
16
  e.preventDefault();
@@ -1,17 +1,17 @@
1
1
  import { Button } from "../atoms/Button.js";
2
2
  import { Input } from "../atoms/Input.js";
3
- import * as React$1 from "react";
3
+ import * as React from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
6
6
  import { Badge } from "@lssm/lib.ui-kit-web/ui/badge";
7
7
 
8
8
  //#region src/components/molecules/FiltersToolbar.tsx
9
9
  function FiltersToolbar({ className, children, right, searchPlaceholder, searchValue, onSearchChange, onSearchSubmit, debounceMs = 250, activeChips = [], onClearAll }) {
10
- const [q, setQ] = React$1.useState(searchValue ?? "");
11
- React$1.useEffect(() => {
10
+ const [q, setQ] = React.useState(searchValue ?? "");
11
+ React.useEffect(() => {
12
12
  setQ(searchValue ?? "");
13
13
  }, [searchValue]);
14
- React$1.useEffect(() => {
14
+ React.useEffect(() => {
15
15
  if (!onSearchChange) return;
16
16
  const id = setTimeout(() => onSearchChange(q), debounceMs);
17
17
  return () => clearTimeout(id);
@@ -30,7 +30,7 @@ function FiltersToolbar({ className, children, right, searchPlaceholder, searchV
30
30
  className: "flex flex-1 items-center gap-2",
31
31
  children: [/* @__PURE__ */ jsx(Input, {
32
32
  value: q,
33
- onChange: setQ,
33
+ onChange: (e) => setQ(e.target.value),
34
34
  onKeyDown: (e) => {
35
35
  if (e.key === "Enter") onSearchSubmit?.();
36
36
  },
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { __esm, __export } from "../../_virtual/rolldown_runtime.js";
3
+ import { __esmMin, __export } from "../../_virtual/rolldown_runtime.js";
4
4
  import "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { HoverCard, HoverCardContent, HoverCardTrigger } from "@lssm/lib.ui-kit-web/ui/hover-card";
@@ -18,7 +18,7 @@ function HoverPreview({ trigger, content, align = "center", sideOffset = 8, clas
18
18
  children: content
19
19
  })] });
20
20
  }
21
- var init_HoverPreview = __esm({ "src/components/molecules/HoverPreview.tsx": (() => {}) });
21
+ var init_HoverPreview = __esmMin((() => {}));
22
22
 
23
23
  //#endregion
24
24
  init_HoverPreview();
@@ -1,11 +1,11 @@
1
- import * as React$1 from "react";
1
+ import * as React from "react";
2
2
  import { Globe } from "lucide-react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@lssm/lib.ui-kit-web/ui/dropdown-menu";
5
5
 
6
6
  //#region src/components/molecules/LangSwitchDropdown.tsx
7
7
  function LangSwitchDropdown({ value, options, onChange, className }) {
8
- const [open, setOpen] = React$1.useState(false);
8
+ const [open, setOpen] = React.useState(false);
9
9
  const current = options.find((o) => o.code === value);
10
10
  return /* @__PURE__ */ jsxs(DropdownMenu, {
11
11
  open,
@@ -19,7 +19,6 @@ function LoaderBlock({ label, description, className, size = "md" }) {
19
19
  })
20
20
  });
21
21
  }
22
- var LoaderBlock_default = LoaderBlock;
23
22
 
24
23
  //#endregion
25
- export { LoaderBlock, LoaderBlock_default as default };
24
+ export { LoaderBlock };
@@ -1,11 +1,13 @@
1
1
  'use client';
2
2
 
3
+ import { __toESM } from "../../_virtual/rolldown_runtime.js";
4
+ import { require_link } from "../../node_modules/next/link.js";
3
5
  import "react";
4
6
  import { jsx, jsxs } from "react/jsx-runtime";
5
- import NextLink from "next/link";
6
7
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@lssm/lib.ui-kit-web/ui/dialog";
7
8
 
8
9
  //#region src/components/molecules/OverviewCard.tsx
10
+ var import_link = /* @__PURE__ */ __toESM(require_link());
9
11
  function OverviewCard({ title, summary, href, preview, ctaLabel }) {
10
12
  return /* @__PURE__ */ jsxs(Dialog, { children: [/* @__PURE__ */ jsx(DialogTrigger, {
11
13
  asChild: true,
@@ -23,7 +25,7 @@ function OverviewCard({ title, summary, href, preview, ctaLabel }) {
23
25
  className: "max-h-[90vh] max-w-2xl overflow-y-auto sm:max-w-3xl",
24
26
  children: [/* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: title }) }), /* @__PURE__ */ jsxs("div", {
25
27
  className: "space-y-4",
26
- children: [preview, /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(NextLink, {
28
+ children: [preview, /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(import_link.default, {
27
29
  href,
28
30
  className: "bg-primary text-primary-foreground inline-flex rounded-md px-4 py-2",
29
31
  children: ctaLabel
@@ -31,7 +33,6 @@ function OverviewCard({ title, summary, href, preview, ctaLabel }) {
31
33
  })]
32
34
  })] });
33
35
  }
34
- var OverviewCard_default = OverviewCard;
35
36
 
36
37
  //#endregion
37
- export { OverviewCard, OverviewCard_default as default };
38
+ export { OverviewCard };
@@ -7,7 +7,6 @@ import { Skeleton } from "@lssm/lib.ui-kit-web/ui/skeleton";
7
7
  function SkeletonBlock({ w = "w-full", h = "h-4", rounded = "md", className }) {
8
8
  return /* @__PURE__ */ jsx(Skeleton, { className: cn(w, h, rounded === "full" ? "rounded-full" : rounded === "lg" ? "rounded-lg" : rounded === "sm" ? "rounded-xs" : "rounded-md", className) });
9
9
  }
10
- var index_web_default = SkeletonBlock;
11
10
 
12
11
  //#endregion
13
- export { SkeletonBlock, index_web_default as default };
12
+ export { SkeletonBlock };
@@ -17,7 +17,6 @@ function SkeletonCircle({ size = 32, sizeClass, className }) {
17
17
  }
18
18
  });
19
19
  }
20
- var index_web_default = SkeletonCircle;
21
20
 
22
21
  //#endregion
23
- export { SkeletonCircle, index_web_default as default };
22
+ export { SkeletonCircle };
@@ -1,15 +1,14 @@
1
1
  import "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import { SkeletonList as SkeletonList$1 } from "@lssm/lib.ui-kit-web/ui/molecules/SkeletonList";
3
+ import { SkeletonList } from "@lssm/lib.ui-kit-web/ui/molecules/SkeletonList";
4
4
 
5
5
  //#region src/components/molecules/SkeletonList/index.web.tsx
6
- function SkeletonList({ count = 10, className }) {
7
- return /* @__PURE__ */ jsx(SkeletonList$1, {
6
+ function SkeletonList$1({ count = 10, className }) {
7
+ return /* @__PURE__ */ jsx(SkeletonList, {
8
8
  count,
9
9
  className
10
10
  });
11
11
  }
12
- var index_web_default = SkeletonList;
13
12
 
14
13
  //#endregion
15
- export { SkeletonList, index_web_default as default };
14
+ export { SkeletonList$1 as SkeletonList };
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import * as React$1 from "react";
3
+ import * as React from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
6
6
  import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@lssm/lib.ui-kit-web/ui/breadcrumb";
@@ -22,7 +22,7 @@ function AcademyLayout({ header, toc, breadcrumb, children, rightPanel, footer,
22
22
  className: "min-w-0",
23
23
  children: [breadcrumb && breadcrumb.items?.length ? /* @__PURE__ */ jsx("div", {
24
24
  className: "mb-4",
25
- children: /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxs(React$1.Fragment, { children: [/* @__PURE__ */ jsx(BreadcrumbItem, { children: it.href ? /* @__PURE__ */ jsx(BreadcrumbLink, {
25
+ children: /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(BreadcrumbItem, { children: it.href ? /* @__PURE__ */ jsx(BreadcrumbLink, {
26
26
  href: it.href,
27
27
  children: it.label
28
28
  }) : /* @__PURE__ */ jsx(BreadcrumbPage, { children: it.label }) }), idx < breadcrumb.items.length - 1 && /* @__PURE__ */ jsx(BreadcrumbSeparator, {})] }, idx)) }) })
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { AppSidebar } from "./AppSidebar.js";
4
- import * as React$1 from "react";
4
+ import * as React from "react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
7
7
  import { Separator } from "@lssm/lib.ui-kit-web/ui/separator";
@@ -28,7 +28,7 @@ function AppLayout({ header, sidebar, breadcrumb, children, footer, className })
28
28
  className: "min-w-0",
29
29
  children: [breadcrumb && breadcrumb.items?.length ? /* @__PURE__ */ jsx("div", {
30
30
  className: "mb-2",
31
- children: /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxs(React$1.Fragment, { children: [/* @__PURE__ */ jsx(BreadcrumbItem, { children: it.href ? /* @__PURE__ */ jsx(BreadcrumbLink, {
31
+ children: /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(BreadcrumbItem, { children: it.href ? /* @__PURE__ */ jsx(BreadcrumbLink, {
32
32
  href: it.href,
33
33
  children: it.label
34
34
  }) : /* @__PURE__ */ jsx(BreadcrumbPage, { children: it.label }) }), idx < breadcrumb.items.length - 1 && /* @__PURE__ */ jsx(BreadcrumbSeparator, {})] }, idx)) }) })
@@ -1,5 +1,5 @@
1
1
  import { Input } from "../atoms/Input.js";
2
- import * as React$1 from "react";
2
+ import * as React from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyTitle } from "@lssm/lib.ui-kit-web/ui/empty";
5
5
 
@@ -8,14 +8,14 @@ function EmptySearchResult({ emptySearchTitle, emtptySearchTitle, emptySearchDes
8
8
  const title = emptySearchTitle ?? emtptySearchTitle ?? "No results";
9
9
  const description = emptySearchDescription ?? emtptySearchDescription ?? "Try another search.";
10
10
  const onChange = onSearchChange ?? handleSearchChange;
11
- const [q, setQ] = React$1.useState("");
11
+ const [q, setQ] = React.useState("");
12
12
  return /* @__PURE__ */ jsxs(Empty, {
13
13
  className,
14
14
  children: [/* @__PURE__ */ jsxs(EmptyHeader, { children: [/* @__PURE__ */ jsx(EmptyTitle, { children: title }), description ? /* @__PURE__ */ jsx(EmptyDescription, { children: description }) : null] }), /* @__PURE__ */ jsx(EmptyContent, { children: /* @__PURE__ */ jsx(Input, {
15
15
  value: q,
16
- onChange: (v) => {
17
- setQ(v);
18
- onChange?.(v);
16
+ onChange: (e) => {
17
+ setQ(e.target.value);
18
+ onChange?.(e.target.value);
19
19
  },
20
20
  placeholder: "Search…",
21
21
  keyboard: { kind: "search" }
@@ -1,4 +1,4 @@
1
- import * as React$1 from "react";
1
+ import * as React from "react";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { VStack } from "@lssm/lib.ui-kit-web/ui/stack";
4
4
  import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@lssm/lib.ui-kit-web/ui/accordion";
@@ -6,7 +6,7 @@ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@l
6
6
  //#region src/components/organisms/FAQSection.tsx
7
7
  function FAQSection({ title, subtitle, children, className, items, accordionType = "single", collapsible = true, defaultOpenIndex = 0, accordionClassName }) {
8
8
  const hasItems = Array.isArray(items) && items.length > 0;
9
- const defaultValue = React$1.useMemo(() => {
9
+ const defaultValue = React.useMemo(() => {
10
10
  if (!hasItems) return void 0;
11
11
  if (accordionType === "multiple") return void 0;
12
12
  return `item-${Math.max(0, Math.min((items?.length ?? 1) - 1, defaultOpenIndex))}`;
@@ -1,6 +1,7 @@
1
1
  import "react";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { cva } from "class-variance-authority";
4
+ import { HStack, VStack } from "@lssm/lib.ui-kit-web/ui/stack";
4
5
  import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
5
6
 
6
7
  //#region src/components/organisms/Footer.tsx
@@ -34,10 +35,7 @@ function Footer({ left, center, right, links, className, variant }) {
34
35
  className: "text-muted-foreground text-center",
35
36
  children: center
36
37
  }),
37
- /* @__PURE__ */ jsx("div", {
38
- className: "flex items-center justify-end gap-3",
39
- children: right
40
- })
38
+ /* @__PURE__ */ jsx(VStack, { children: right })
41
39
  ]
42
40
  }), links && links.length > 0 && /* @__PURE__ */ jsx("div", {
43
41
  className: "text-muted-foreground mt-4 flex flex-wrap items-center justify-center gap-3 text-base",
@@ -7,7 +7,7 @@ import { NavItemCard } from "../molecules/NavItemCard.js";
7
7
  import { MobileNavMenu } from "../molecules/MobileNavMenu.js";
8
8
  import { CommandSearchTrigger } from "../molecules/CommandSearchTrigger.js";
9
9
  import { LangSwitchDropdown } from "../molecules/LangSwitchDropdown.js";
10
- import * as React$1 from "react";
10
+ import * as React from "react";
11
11
  import { Menu } from "lucide-react";
12
12
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
13
  import { cva } from "class-variance-authority";
@@ -27,7 +27,7 @@ const headerVariants = cva("flex items-center justify-between gap-4", {
27
27
  defaultVariants: { density: "comfortable" }
28
28
  });
29
29
  function MarketingHeader({ logo, nav = [], userMenu, cta, className, density, right, commandPaletteGroups, langSwitchProps }) {
30
- const [open, setOpen] = React$1.useState(false);
30
+ const [open, setOpen] = React.useState(false);
31
31
  return /* @__PURE__ */ jsx(HStack, {
32
32
  as: "header",
33
33
  className: cn("bg-background/95 supports-backdrop-filter:bg-background/60 sticky top-0 z-50 w-full border-b backdrop-blur-xs", className),
@@ -51,7 +51,7 @@ function MarketingHeader({ logo, nav = [], userMenu, cta, className, density, ri
51
51
  side: "left",
52
52
  className: "w-[320px] p-4",
53
53
  children: [
54
- /* @__PURE__ */ jsx(SheetHeader, { children: /* @__PURE__ */ jsx(CommandSearchTrigger, { groups: commandPaletteGroups }) }),
54
+ !!commandPaletteGroups?.length && /* @__PURE__ */ jsx(SheetHeader, { children: /* @__PURE__ */ jsx(CommandSearchTrigger, { groups: commandPaletteGroups }) }),
55
55
  cta && /* @__PURE__ */ jsx(VStack, {
56
56
  className: "mb-3",
57
57
  children: /* @__PURE__ */ jsx(ButtonLink, {
@@ -87,11 +87,11 @@ function MarketingHeader({ logo, nav = [], userMenu, cta, className, density, ri
87
87
  /* @__PURE__ */ jsxs(HStack, {
88
88
  className: "flex items-center gap-2",
89
89
  children: [
90
- /* @__PURE__ */ jsx(Box, {
90
+ !!commandPaletteGroups?.length && /* @__PURE__ */ jsx(Box, {
91
91
  className: "hidden items-center gap-2 md:flex",
92
92
  children: /* @__PURE__ */ jsx(CommandSearchTrigger, { groups: commandPaletteGroups })
93
93
  }),
94
- /* @__PURE__ */ jsx(LangSwitchDropdown, {
94
+ !!(langSwitchProps?.options?.length > 1) && /* @__PURE__ */ jsx(LangSwitchDropdown, {
95
95
  value: langSwitchProps.value,
96
96
  onChange: langSwitchProps.onChange,
97
97
  options: langSwitchProps.options
@@ -4,7 +4,7 @@ import { Button } from "../atoms/Button.js";
4
4
  import { MobileNavMenu } from "../molecules/MobileNavMenu.js";
5
5
  import { CommandSearchTrigger } from "../molecules/CommandSearchTrigger.js";
6
6
  import { LangSwitchDropdown } from "../molecules/LangSwitchDropdown.js";
7
- import * as React$1 from "react";
7
+ import * as React from "react";
8
8
  import { Menu } from "lucide-react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
10
10
  import { VStack } from "@lssm/lib.ui-kit-web/ui/stack";
@@ -13,7 +13,7 @@ import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetT
13
13
 
14
14
  //#region src/components/organisms/MarketingHeaderMobile.tsx
15
15
  function MarketingHeaderMobile({ logo, nav = [], className, right }) {
16
- const [open, setOpen] = React$1.useState(false);
16
+ const [open, setOpen] = React.useState(false);
17
17
  return /* @__PURE__ */ jsx("div", {
18
18
  className: cn("bg-background/95 supports-backdrop-filter:bg-background/60 w-full border-b backdrop-blur-xs md:hidden", className),
19
19
  children: /* @__PURE__ */ jsxs("div", {
@@ -8,6 +8,7 @@ import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
8
8
  //#region src/components/organisms/MarketingLayout.tsx
9
9
  function MarketingLayout({ header, children, footer, className }) {
10
10
  return /* @__PURE__ */ jsxs(VStack, {
11
+ gap: "none",
11
12
  className: cn("bg-background min-h-svh", className),
12
13
  children: [
13
14
  header,
@@ -2,7 +2,7 @@ import { PageHeaderResponsive } from "../../../organisms/PageHeaderResponsive.js
2
2
  import { FiltersToolbar } from "../../../molecules/FiltersToolbar.js";
3
3
  import { AiLinkButton } from "../../../molecules/AiLinkButton.js";
4
4
  import { EmptyDataList } from "../../../organisms/EmptyDataList.js";
5
- import * as React$1 from "react";
5
+ import * as React from "react";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
7
  import { cva } from "class-variance-authority";
8
8
  import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
@@ -12,7 +12,7 @@ import { Skeleton } from "@lssm/lib.ui-kit-web/ui/skeleton";
12
12
  //#region src/components/templates/lists/ListPageTemplate/index.web.tsx
13
13
  const containerVariants = cva("space-y-4 md:space-y-6");
14
14
  function ListPageTemplate({ children, title, description, breadcrumb, actions, className, searchPlaceholder, searchValue, onSearchChange, onSearchSubmit, isLoading, data, renderItem, emptyProps }) {
15
- const mdHref = React$1.useMemo(() => {
15
+ const mdHref = React.useMemo(() => {
16
16
  if (typeof window === "undefined") return void 0;
17
17
  const url = new URL(window.location.href);
18
18
  url.pathname = url.pathname.replace(/\/$/, "") + ".md";
@@ -1,4 +1,4 @@
1
- import * as React$1 from "react";
1
+ import * as React from "react";
2
2
 
3
3
  //#region src/hooks/useListUrlState.ts
4
4
  function useListUrlState({ defaults, paramKeys = {
@@ -8,7 +8,7 @@ function useListUrlState({ defaults, paramKeys = {
8
8
  sort: "sort",
9
9
  filters: "f"
10
10
  }, replaceState = true }) {
11
- const read = React$1.useCallback(() => {
11
+ const read = React.useCallback(() => {
12
12
  if (typeof window === "undefined") return defaults;
13
13
  const qs = new URL(window.location.href).searchParams;
14
14
  const parseNum = (v, d) => {
@@ -30,8 +30,8 @@ function useListUrlState({ defaults, paramKeys = {
30
30
  filters
31
31
  };
32
32
  }, [defaults, paramKeys]);
33
- const [state, setState] = React$1.useState(read);
34
- const write = React$1.useCallback((next) => {
33
+ const [state, setState] = React.useState(read);
34
+ const write = React.useCallback((next) => {
35
35
  if (typeof window === "undefined") return;
36
36
  const url = new URL(window.location.href);
37
37
  const qs = url.searchParams;
@@ -60,19 +60,19 @@ function useListUrlState({ defaults, paramKeys = {
60
60
  paramKeys,
61
61
  replaceState
62
62
  ]);
63
- const setFilter = React$1.useCallback((key, value) => {
63
+ const setFilter = React.useCallback((key, value) => {
64
64
  write({ filters: {
65
65
  ...state.filters,
66
66
  [key]: value
67
67
  } });
68
68
  }, [state.filters, write]);
69
- const clearFilters = React$1.useCallback(() => {
69
+ const clearFilters = React.useCallback(() => {
70
70
  write({
71
71
  filters: {},
72
72
  page: 1
73
73
  });
74
74
  }, [write]);
75
- React$1.useEffect(() => {
75
+ React.useEffect(() => {
76
76
  const onPop = () => setState(read());
77
77
  window.addEventListener("popstate", onPop);
78
78
  return () => window.removeEventListener("popstate", onPop);