@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.
- package/README.md +6 -1
- package/dist/_virtual/rolldown_runtime.js +9 -4
- package/dist/components/agent/ApprovalQueue.js +1 -1
- package/dist/components/atoms/Button.js +4 -5
- package/dist/components/atoms/ButtonLink.js +2 -2
- package/dist/components/atoms/Cta.js +4 -5
- package/dist/components/atoms/EmptyState.js +4 -4
- package/dist/components/atoms/ErrorState.js +1 -2
- package/dist/components/atoms/Input.js +5 -6
- package/dist/components/atoms/Link.js +1 -2
- package/dist/components/atoms/Link.web.js +4 -2
- package/dist/components/atoms/LoaderCircular.js +1 -2
- package/dist/components/atoms/Stepper.js +4 -4
- package/dist/components/atoms/Textarea.js +8 -9
- package/dist/components/data-view/DataViewRenderer.js +2 -2
- package/dist/components/forms/ActionForm.js +18 -0
- package/dist/components/forms/FormOneByOneLayout.js +3 -3
- package/dist/components/forms/FormStepsLayout.js +3 -3
- package/dist/components/forms/ZodForm.js +1 -1
- package/dist/components/legal/atoms/LegalCallout.js +1 -1
- package/dist/components/legal/atoms/LegalHeading.js +1 -1
- package/dist/components/legal/atoms/LegalList.js +1 -1
- package/dist/components/legal/atoms/LegalSection.js +1 -1
- package/dist/components/legal/atoms/LegalText.js +1 -1
- package/dist/components/legal/molecules/ContactFields.js +8 -8
- package/dist/components/legal/molecules/LegalTOC.js +1 -1
- package/dist/components/legal/organisms/ContactForm.js +3 -3
- package/dist/components/legal/organisms/GDPRDataRequest.js +2 -2
- package/dist/components/legal/templates/ContactTemplate.js +3 -3
- package/dist/components/marketing/MarketingCard.js +20 -0
- package/dist/components/marketing/MarketingCardsSection.js +28 -0
- package/dist/components/marketing/MarketingComparisonSection.js +52 -0
- package/dist/components/marketing/MarketingIconCard.js +73 -0
- package/dist/components/marketing/MarketingSection.js +61 -0
- package/dist/components/marketing/MarketingStepCard.js +36 -0
- package/dist/components/molecules/AiLinkButton.js +4 -4
- package/dist/components/molecules/Breadcrumbs.js +2 -2
- package/dist/components/molecules/CommandPalette.js +3 -3
- package/dist/components/molecules/CommandSearchTrigger.js +3 -3
- package/dist/components/molecules/FiltersToolbar.js +5 -5
- package/dist/components/molecules/HoverPreview.js +2 -2
- package/dist/components/molecules/LangSwitchDropdown.js +2 -2
- package/dist/components/molecules/LoaderBlock.js +1 -2
- package/dist/components/molecules/OverviewCard.js +5 -4
- package/dist/components/molecules/SkeletonBlock/index.web.js +1 -2
- package/dist/components/molecules/SkeletonCircle/index.web.js +1 -2
- package/dist/components/molecules/SkeletonList/index.web.js +4 -5
- package/dist/components/organisms/AcademyLayout.js +2 -2
- package/dist/components/organisms/AppLayout.js +2 -2
- package/dist/components/organisms/EmptySearchResult.js +5 -5
- package/dist/components/organisms/FAQSection.js +2 -2
- package/dist/components/organisms/Footer.js +2 -4
- package/dist/components/organisms/MarketingHeader.js +5 -5
- package/dist/components/organisms/MarketingHeaderMobile.js +2 -2
- package/dist/components/organisms/MarketingLayout.js +1 -0
- package/dist/components/templates/lists/ListPageTemplate/index.web.js +2 -2
- package/dist/hooks/useListUrlState.js +7 -7
- package/dist/index.js +9 -1
- package/dist/lib/keyboard.js +1 -172
- package/dist/node_modules/@swc/helpers/cjs/_interop_require_default.js +14 -0
- package/dist/node_modules/@swc/helpers/cjs/_interop_require_wildcard.js +35 -0
- package/dist/node_modules/next/dist/client/add-base-path.js +30 -0
- package/dist/node_modules/next/dist/client/add-locale.js +29 -0
- package/dist/node_modules/next/dist/client/detect-domain-locale.js +26 -0
- package/dist/node_modules/next/dist/client/get-domain-locale.js +41 -0
- package/dist/node_modules/next/dist/client/has-base-path.js +28 -0
- package/dist/node_modules/next/dist/client/link.js +311 -0
- package/dist/node_modules/next/dist/client/normalize-locale-path.js +30 -0
- package/dist/node_modules/next/dist/client/normalize-trailing-slash.js +34 -0
- package/dist/node_modules/next/dist/client/request-idle-callback.js +44 -0
- package/dist/node_modules/next/dist/client/resolve-href.js +86 -0
- package/dist/node_modules/next/dist/client/use-intersection.js +104 -0
- package/dist/node_modules/next/dist/client/use-merged-ref.js +56 -0
- package/dist/node_modules/next/dist/compiled/path-to-regexp/index.js +372 -0
- package/dist/node_modules/next/dist/lib/constants.js +316 -0
- package/dist/node_modules/next/dist/lib/route-pattern-normalizer.js +69 -0
- package/dist/node_modules/next/dist/shared/lib/escape-regexp.js +23 -0
- package/dist/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js +22 -0
- package/dist/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js +42 -0
- package/dist/node_modules/next/dist/shared/lib/invariant-error.js +23 -0
- package/dist/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js +23 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/add-locale.js +30 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js +24 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/app-paths.js +41 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/format-url.js +78 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js +151 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/get-segment-param.js +77 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/index.js +32 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/interception-routes.js +92 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js +41 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js +26 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/is-local-url.js +31 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/omit.js +24 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js +33 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/parse-path.js +36 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js +24 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/querystring.js +56 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js +26 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js +94 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/route-matcher.js +46 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/route-regex.js +203 -0
- package/dist/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js +167 -0
- package/dist/node_modules/next/dist/shared/lib/router-context.shared-runtime.js +20 -0
- package/dist/node_modules/next/dist/shared/lib/segment.js +80 -0
- package/dist/node_modules/next/dist/shared/lib/utils/error-once.js +25 -0
- package/dist/node_modules/next/dist/shared/lib/utils.js +172 -0
- package/dist/node_modules/next/link.js +12 -0
- package/dist/platform/useColorScheme.js +3 -3
- package/dist/platform/useReducedMotion.js +3 -3
- package/dist/platform/useResponsive.js +4 -4
- package/dist/renderers/form-contract.js +1 -1
- package/package.json +13 -304
- package/dist/components/agent/AgentMonitor.d.ts +0 -28
- package/dist/components/agent/ApprovalQueue.d.ts +0 -25
- package/dist/components/atoms/ActionButtons.d.ts +0 -25
- package/dist/components/atoms/Button.d.ts +0 -39
- package/dist/components/atoms/Button.mobile.d.ts +0 -21
- package/dist/components/atoms/Button.mobile.js +0 -34
- package/dist/components/atoms/ButtonLink.d.ts +0 -21
- package/dist/components/atoms/ButtonLink.mobile.d.ts +0 -19
- package/dist/components/atoms/ButtonLink.mobile.js +0 -41
- package/dist/components/atoms/Cta.d.ts +0 -20
- package/dist/components/atoms/Cta.mobile.d.ts +0 -14
- package/dist/components/atoms/Cta.mobile.js +0 -38
- package/dist/components/atoms/DataChips.d.ts +0 -37
- package/dist/components/atoms/EmptyState.d.ts +0 -7
- package/dist/components/atoms/ErrorState.d.ts +0 -28
- package/dist/components/atoms/ErrorState.mobile.d.ts +0 -28
- package/dist/components/atoms/ErrorState.mobile.js +0 -41
- package/dist/components/atoms/Input.d.ts +0 -39
- package/dist/components/atoms/Input.mobile.d.ts +0 -37
- package/dist/components/atoms/Input.mobile.js +0 -27
- package/dist/components/atoms/Link.d.ts +0 -11
- package/dist/components/atoms/Link.native.d.ts +0 -1
- package/dist/components/atoms/Link.native.js +0 -0
- package/dist/components/atoms/Link.web.d.ts +0 -23
- package/dist/components/atoms/LoaderCircular.d.ts +0 -22
- package/dist/components/atoms/LoaderCircular.mobile.d.ts +0 -17
- package/dist/components/atoms/LoaderCircular.mobile.js +0 -26
- package/dist/components/atoms/NavBrand.d.ts +0 -18
- package/dist/components/atoms/Stepper.d.ts +0 -7
- package/dist/components/atoms/Textarea.d.ts +0 -41
- package/dist/components/atoms/Textarea.mobile.d.ts +0 -37
- package/dist/components/atoms/Textarea.mobile.js +0 -27
- package/dist/components/data-view/DataViewDetail.d.ts +0 -21
- package/dist/components/data-view/DataViewList.d.ts +0 -23
- package/dist/components/data-view/DataViewRenderer.d.ts +0 -47
- package/dist/components/data-view/DataViewTable.d.ts +0 -25
- package/dist/components/data-view/utils.d.ts +0 -5
- package/dist/components/forms/FormCardLayout.d.ts +0 -22
- package/dist/components/forms/FormDialog.d.ts +0 -24
- package/dist/components/forms/FormLayout.d.ts +0 -29
- package/dist/components/forms/FormOneByOneLayout.d.ts +0 -25
- package/dist/components/forms/FormStepsLayout.d.ts +0 -26
- package/dist/components/forms/ZodForm.d.ts +0 -21
- package/dist/components/legal/atoms/DefinitionList.d.ts +0 -16
- package/dist/components/legal/atoms/KeyValueList.d.ts +0 -16
- package/dist/components/legal/atoms/LegalCallout.d.ts +0 -17
- package/dist/components/legal/atoms/LegalHeading.d.ts +0 -24
- package/dist/components/legal/atoms/LegalList.d.ts +0 -20
- package/dist/components/legal/atoms/LegalSection.d.ts +0 -21
- package/dist/components/legal/atoms/LegalText.d.ts +0 -24
- package/dist/components/legal/molecules/Consent.d.ts +0 -35
- package/dist/components/legal/molecules/ContactFields.d.ts +0 -24
- package/dist/components/legal/molecules/LegalMeta.d.ts +0 -14
- package/dist/components/legal/molecules/LegalTOC.d.ts +0 -30
- package/dist/components/legal/organisms/ContactForm.d.ts +0 -29
- package/dist/components/legal/organisms/GDPRDataRequest.d.ts +0 -18
- package/dist/components/legal/organisms/GDPRRights.d.ts +0 -13
- package/dist/components/legal/organisms/LegalPageLayout.d.ts +0 -23
- package/dist/components/legal/templates/ContactTemplate.d.ts +0 -23
- package/dist/components/legal/templates/CookiesTemplate.d.ts +0 -32
- package/dist/components/legal/templates/PrivacyTemplate.d.ts +0 -32
- package/dist/components/legal/templates/SalesTermsTemplate.d.ts +0 -27
- package/dist/components/legal/templates/TermsTemplate.d.ts +0 -27
- package/dist/components/molecules/AiLinkButton.d.ts +0 -15
- package/dist/components/molecules/Breadcrumbs.d.ts +0 -15
- package/dist/components/molecules/CommandPalette.d.ts +0 -26
- package/dist/components/molecules/CommandSearchTrigger.d.ts +0 -18
- package/dist/components/molecules/DropdownMenu.d.ts +0 -1
- package/dist/components/molecules/DropdownMenu.js +0 -0
- package/dist/components/molecules/EntityCard.d.ts +0 -37
- package/dist/components/molecules/FiltersToolbar.d.ts +0 -35
- package/dist/components/molecules/FiltersToolbar.mobile.d.ts +0 -18
- package/dist/components/molecules/FiltersToolbar.mobile.js +0 -48
- package/dist/components/molecules/HoverPreview.d.ts +0 -20
- package/dist/components/molecules/LangSwitch.d.ts +0 -22
- package/dist/components/molecules/LangSwitchDropdown.d.ts +0 -21
- package/dist/components/molecules/LoaderBlock.d.ts +0 -18
- package/dist/components/molecules/LoaderBlock.mobile.d.ts +0 -18
- package/dist/components/molecules/LoaderBlock.mobile.js +0 -25
- package/dist/components/molecules/MobileNavMenu.d.ts +0 -13
- package/dist/components/molecules/NavItemCard.d.ts +0 -14
- package/dist/components/molecules/NavMain.d.ts +0 -13
- package/dist/components/molecules/NavUser.d.ts +0 -17
- package/dist/components/molecules/OverviewCard.d.ts +0 -20
- package/dist/components/molecules/SkeletonBlock/index.d.ts +0 -3
- package/dist/components/molecules/SkeletonBlock/index.js +0 -3
- package/dist/components/molecules/SkeletonBlock/index.mobile.d.ts +0 -12
- package/dist/components/molecules/SkeletonBlock/index.mobile.js +0 -18
- package/dist/components/molecules/SkeletonBlock/index.web.d.ts +0 -12
- package/dist/components/molecules/SkeletonBlock/types.d.ts +0 -9
- package/dist/components/molecules/SkeletonBlock/types.js +0 -0
- package/dist/components/molecules/SkeletonCircle/index.d.ts +0 -3
- package/dist/components/molecules/SkeletonCircle/index.js +0 -3
- package/dist/components/molecules/SkeletonCircle/index.mobile.d.ts +0 -11
- package/dist/components/molecules/SkeletonCircle/index.mobile.js +0 -23
- package/dist/components/molecules/SkeletonCircle/index.web.d.ts +0 -11
- package/dist/components/molecules/SkeletonCircle/types.d.ts +0 -8
- package/dist/components/molecules/SkeletonCircle/types.js +0 -0
- package/dist/components/molecules/SkeletonList/index.d.ts +0 -3
- package/dist/components/molecules/SkeletonList/index.js +0 -3
- package/dist/components/molecules/SkeletonList/index.mobile.d.ts +0 -10
- package/dist/components/molecules/SkeletonList/index.mobile.js +0 -22
- package/dist/components/molecules/SkeletonList/index.web.d.ts +0 -10
- package/dist/components/molecules/SkeletonList/types.d.ts +0 -7
- package/dist/components/molecules/SkeletonList/types.js +0 -0
- package/dist/components/molecules/StatCard.d.ts +0 -36
- package/dist/components/molecules/StatusChip.d.ts +0 -26
- package/dist/components/molecules/hover-previews/Doc.d.ts +0 -27
- package/dist/components/molecules/hover-previews/Media.d.ts +0 -20
- package/dist/components/molecules/hover-previews/Simple.d.ts +0 -25
- package/dist/components/molecules/hover-previews/Stats.d.ts +0 -22
- package/dist/components/molecules/hover-previews/User.d.ts +0 -25
- package/dist/components/native/BottomTabs.mobile.d.ts +0 -20
- package/dist/components/native/BottomTabs.mobile.js +0 -27
- package/dist/components/native/FlatListScreen.mobile.d.ts +0 -43
- package/dist/components/native/FlatListScreen.mobile.js +0 -63
- package/dist/components/native/SheetMenu.mobile.d.ts +0 -17
- package/dist/components/native/SheetMenu.mobile.js +0 -21
- package/dist/components/organisms/AcademyLayout.d.ts +0 -29
- package/dist/components/organisms/AppHeader.d.ts +0 -18
- package/dist/components/organisms/AppHeader.mobile.d.ts +0 -21
- package/dist/components/organisms/AppHeader.mobile.js +0 -52
- package/dist/components/organisms/AppLayout.d.ts +0 -28
- package/dist/components/organisms/AppSidebar.d.ts +0 -23
- package/dist/components/organisms/AppSidebar.mobile.d.ts +0 -1
- package/dist/components/organisms/AppSidebar.mobile.js +0 -0
- package/dist/components/organisms/EmptyDataList.d.ts +0 -20
- package/dist/components/organisms/EmptyDataList.mobile.d.ts +0 -20
- package/dist/components/organisms/EmptyDataList.mobile.js +0 -27
- package/dist/components/organisms/EmptyDataList.types.d.ts +0 -19
- package/dist/components/organisms/EmptyDataList.types.js +0 -1
- package/dist/components/organisms/EmptySearchResult.d.ts +0 -24
- package/dist/components/organisms/FAQSection.d.ts +0 -31
- package/dist/components/organisms/FeatureCarousel.d.ts +0 -18
- package/dist/components/organisms/FeaturesSection.d.ts +0 -19
- package/dist/components/organisms/Footer.d.ts +0 -25
- package/dist/components/organisms/GridLayout.d.ts +0 -25
- package/dist/components/organisms/GridLayout.js +0 -28
- package/dist/components/organisms/Header.d.ts +0 -37
- package/dist/components/organisms/Header.mobile.d.ts +0 -24
- package/dist/components/organisms/Header.mobile.js +0 -18
- package/dist/components/organisms/HeroResponsive.d.ts +0 -14
- package/dist/components/organisms/HeroSection.d.ts +0 -29
- package/dist/components/organisms/ListCardPage.d.ts +0 -36
- package/dist/components/organisms/ListGridPage.d.ts +0 -36
- package/dist/components/organisms/ListPageResponsive.d.ts +0 -7
- package/dist/components/organisms/ListTablePage.d.ts +0 -33
- package/dist/components/organisms/MarketingHeader.d.ts +0 -36
- package/dist/components/organisms/MarketingHeaderDesktop.d.ts +0 -15
- package/dist/components/organisms/MarketingHeaderMobile.d.ts +0 -12
- package/dist/components/organisms/MarketingLayout.d.ts +0 -18
- package/dist/components/organisms/PageHeaderResponsive.d.ts +0 -8
- package/dist/components/organisms/PageHeaderResponsive.mobile.d.ts +0 -22
- package/dist/components/organisms/PageHeaderResponsive.mobile.js +0 -32
- package/dist/components/organisms/PricingCarousel.d.ts +0 -24
- package/dist/components/organisms/PricingSection.d.ts +0 -18
- package/dist/components/organisms/TestimonialCarousel.d.ts +0 -19
- package/dist/components/templates/lists/ListPageTemplate/index.d.ts +0 -3
- package/dist/components/templates/lists/ListPageTemplate/index.js +0 -3
- package/dist/components/templates/lists/ListPageTemplate/index.mobile.d.ts +0 -21
- package/dist/components/templates/lists/ListPageTemplate/index.mobile.js +0 -32
- package/dist/components/templates/lists/ListPageTemplate/index.web.d.ts +0 -22
- package/dist/components/templates/lists/ListPageTemplate/types.d.ts +0 -25
- package/dist/components/templates/lists/ListPageTemplate/types.js +0 -1
- package/dist/hooks/useListUrlState.d.ts +0 -30
- package/dist/index.d.ts +0 -108
- package/dist/lib/keyboard.d.ts +0 -14
- package/dist/lib/utils.d.ts +0 -6
- package/dist/platform/useColorScheme.d.ts +0 -5
- package/dist/platform/useColorScheme.mobile.d.ts +0 -5
- package/dist/platform/useColorScheme.mobile.js +0 -20
- package/dist/platform/useReducedMotion.d.ts +0 -4
- package/dist/platform/useReducedMotion.mobile.d.ts +0 -4
- package/dist/platform/useReducedMotion.mobile.js +0 -28
- package/dist/platform/useResponsive.d.ts +0 -23
- package/dist/platform/useResponsive.mobile.d.ts +0 -23
- package/dist/platform/useResponsive.mobile.js +0 -42
- package/dist/platform/withPlatformUI.d.ts +0 -28
- package/dist/renderers/form-contract.d.ts +0 -11
- package/dist/renderers/index.d.ts +0 -2
- package/dist/renderers/index.js +0 -3
- package/dist/theme/tokenBridge.d.ts +0 -19
- package/dist/theme/tokens.d.ts +0 -50
- package/dist/theme/variants.d.ts +0 -21
- package/dist/types/nativewind-env.d.ts +0 -1
- package/dist/types/navigation.d.ts +0 -44
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
13
|
-
React
|
|
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
|
|
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
|
|
11
|
-
React
|
|
10
|
+
const [q, setQ] = React.useState(searchValue ?? "");
|
|
11
|
+
React.useEffect(() => {
|
|
12
12
|
setQ(searchValue ?? "");
|
|
13
13
|
}, [searchValue]);
|
|
14
|
-
React
|
|
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 {
|
|
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 =
|
|
21
|
+
var init_HoverPreview = __esmMin((() => {}));
|
|
22
22
|
|
|
23
23
|
//#endregion
|
|
24
24
|
init_HoverPreview();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import * as 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
|
|
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,
|
|
@@ -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(
|
|
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
|
|
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
|
|
12
|
+
export { SkeletonBlock };
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import "react";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
import { 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
|
|
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
|
|
14
|
+
export { SkeletonList$1 as SkeletonList };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import * as 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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: (
|
|
17
|
-
setQ(
|
|
18
|
-
onChange?.(
|
|
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
|
+
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
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
+
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
|
|
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
|
|
34
|
-
const write = React
|
|
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
|
|
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
|
|
69
|
+
const clearFilters = React.useCallback(() => {
|
|
70
70
|
write({
|
|
71
71
|
filters: {},
|
|
72
72
|
page: 1
|
|
73
73
|
});
|
|
74
74
|
}, [write]);
|
|
75
|
-
React
|
|
75
|
+
React.useEffect(() => {
|
|
76
76
|
const onPop = () => setState(read());
|
|
77
77
|
window.addEventListener("popstate", onPop);
|
|
78
78
|
return () => window.removeEventListener("popstate", onPop);
|