@lssm/lib.design-system 1.7.4 → 1.9.1
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 +99 -0
- package/dist/_virtual/rolldown_runtime.js +21 -12
- package/dist/components/agent/AgentMonitor.d.ts +29 -0
- package/dist/components/agent/AgentMonitor.d.ts.map +1 -0
- package/dist/components/agent/AgentMonitor.js +79 -0
- package/dist/components/agent/AgentMonitor.js.map +1 -0
- package/dist/components/agent/ApprovalQueue.d.ts +26 -0
- package/dist/components/agent/ApprovalQueue.d.ts.map +1 -0
- package/dist/components/agent/ApprovalQueue.js +89 -0
- package/dist/components/agent/ApprovalQueue.js.map +1 -0
- package/dist/components/atoms/ActionButtons.d.ts +7 -7
- package/dist/components/atoms/ActionButtons.js +2 -2
- package/dist/components/atoms/ActionButtons.js.map +1 -1
- package/dist/components/atoms/Button.d.ts +2 -2
- package/dist/components/atoms/Button.d.ts.map +1 -1
- package/dist/components/atoms/Button.js +1 -1
- package/dist/components/atoms/Button.js.map +1 -1
- package/dist/components/atoms/Button.mobile.d.ts +2 -2
- package/dist/components/atoms/Button.mobile.js +1 -1
- package/dist/components/atoms/Button.mobile.js.map +1 -1
- package/dist/components/atoms/ButtonLink.d.ts +2 -2
- package/dist/components/atoms/ButtonLink.d.ts.map +1 -1
- package/dist/components/atoms/ButtonLink.js +1 -2
- package/dist/components/atoms/ButtonLink.js.map +1 -1
- package/dist/components/atoms/ButtonLink.mobile.d.ts +2 -2
- package/dist/components/atoms/ButtonLink.mobile.d.ts.map +1 -1
- package/dist/components/atoms/ButtonLink.mobile.js +1 -1
- package/dist/components/atoms/ButtonLink.mobile.js.map +1 -1
- package/dist/components/atoms/Cta.d.ts +1 -1
- package/dist/components/atoms/Cta.js +1 -1
- package/dist/components/atoms/Cta.js.map +1 -1
- package/dist/components/atoms/Cta.mobile.js +1 -2
- package/dist/components/atoms/Cta.mobile.js.map +1 -1
- package/dist/components/atoms/DataChips.d.ts +5 -5
- package/dist/components/atoms/DataChips.js +4 -4
- package/dist/components/atoms/DataChips.js.map +1 -1
- package/dist/components/atoms/EmptyState.d.ts +2 -2
- package/dist/components/atoms/EmptyState.js +0 -1
- package/dist/components/atoms/EmptyState.js.map +1 -1
- package/dist/components/atoms/ErrorState.d.ts +2 -2
- package/dist/components/atoms/ErrorState.d.ts.map +1 -1
- package/dist/components/atoms/ErrorState.mobile.d.ts +2 -2
- package/dist/components/atoms/Input.d.ts +2 -2
- package/dist/components/atoms/Input.js +1 -1
- package/dist/components/atoms/Input.js.map +1 -1
- package/dist/components/atoms/Input.mobile.d.ts +2 -2
- package/dist/components/atoms/Input.mobile.d.ts.map +1 -1
- package/dist/components/atoms/Input.mobile.js +1 -1
- package/dist/components/atoms/Input.mobile.js.map +1 -1
- package/dist/components/atoms/Link.d.ts +2 -2
- package/dist/components/atoms/Link.d.ts.map +1 -1
- package/dist/components/atoms/Link.js +1 -1
- package/dist/components/atoms/Link.js.map +1 -1
- package/dist/components/atoms/Link.web.d.ts +2 -2
- package/dist/components/atoms/Link.web.d.ts.map +1 -1
- package/dist/components/atoms/Link.web.js +1 -1
- package/dist/components/atoms/Link.web.js.map +1 -1
- package/dist/components/atoms/LoaderCircular.d.ts +4 -4
- package/dist/components/atoms/LoaderCircular.d.ts.map +1 -1
- package/dist/components/atoms/LoaderCircular.js +1 -1
- package/dist/components/atoms/LoaderCircular.js.map +1 -1
- package/dist/components/atoms/LoaderCircular.mobile.d.ts +2 -2
- package/dist/components/atoms/LoaderCircular.mobile.d.ts.map +1 -1
- package/dist/components/atoms/NavBrand.d.ts +2 -2
- package/dist/components/atoms/NavBrand.js +0 -1
- package/dist/components/atoms/NavBrand.js.map +1 -1
- package/dist/components/atoms/Stepper.d.ts +2 -2
- package/dist/components/atoms/Stepper.js +0 -1
- package/dist/components/atoms/Stepper.js.map +1 -1
- package/dist/components/atoms/Textarea.d.ts +2 -2
- package/dist/components/atoms/Textarea.js +1 -1
- package/dist/components/atoms/Textarea.js.map +1 -1
- package/dist/components/atoms/Textarea.mobile.d.ts +2 -2
- package/dist/components/atoms/Textarea.mobile.js +1 -1
- package/dist/components/atoms/Textarea.mobile.js.map +1 -1
- package/dist/components/data-view/DataViewDetail.d.ts +2 -2
- package/dist/components/data-view/DataViewDetail.js +9 -10
- package/dist/components/data-view/DataViewDetail.js.map +1 -1
- package/dist/components/data-view/DataViewList.d.ts +2 -2
- package/dist/components/data-view/DataViewList.js +5 -6
- package/dist/components/data-view/DataViewList.js.map +1 -1
- package/dist/components/data-view/DataViewRenderer.d.ts +19 -3
- package/dist/components/data-view/DataViewRenderer.d.ts.map +1 -1
- package/dist/components/data-view/DataViewRenderer.js +128 -50
- package/dist/components/data-view/DataViewRenderer.js.map +1 -1
- package/dist/components/data-view/DataViewTable.d.ts +2 -2
- package/dist/components/data-view/DataViewTable.js +9 -10
- package/dist/components/data-view/DataViewTable.js.map +1 -1
- package/dist/components/data-view/utils.js +0 -1
- package/dist/components/data-view/utils.js.map +1 -1
- package/dist/components/forms/FormCardLayout.d.ts +2 -2
- package/dist/components/forms/FormDialog.d.ts +2 -2
- package/dist/components/forms/FormDialog.js +0 -1
- package/dist/components/forms/FormDialog.js.map +1 -1
- package/dist/components/forms/FormLayout.d.ts +4 -4
- package/dist/components/forms/FormLayout.js +0 -1
- package/dist/components/forms/FormLayout.js.map +1 -1
- package/dist/components/forms/FormOneByOneLayout.d.ts +2 -2
- package/dist/components/forms/FormStepsLayout.d.ts +2 -2
- package/dist/components/forms/FormStepsLayout.d.ts.map +1 -1
- package/dist/components/forms/ZodForm.d.ts +2 -2
- package/dist/components/forms/ZodForm.js +0 -1
- package/dist/components/forms/ZodForm.js.map +1 -1
- package/dist/components/legal/atoms/DefinitionList.d.ts +2 -2
- package/dist/components/legal/atoms/KeyValueList.d.ts +2 -2
- package/dist/components/legal/atoms/LegalCallout.d.ts +4 -4
- package/dist/components/legal/atoms/LegalCallout.d.ts.map +1 -1
- package/dist/components/legal/atoms/LegalCallout.js +1 -1
- package/dist/components/legal/atoms/LegalCallout.js.map +1 -1
- package/dist/components/legal/atoms/LegalHeading.d.ts +5 -5
- package/dist/components/legal/atoms/LegalHeading.d.ts.map +1 -1
- package/dist/components/legal/atoms/LegalHeading.js +1 -1
- package/dist/components/legal/atoms/LegalHeading.js.map +1 -1
- package/dist/components/legal/atoms/LegalList.d.ts +4 -4
- package/dist/components/legal/atoms/LegalList.js +1 -1
- package/dist/components/legal/atoms/LegalList.js.map +1 -1
- package/dist/components/legal/atoms/LegalSection.d.ts +4 -4
- package/dist/components/legal/atoms/LegalSection.d.ts.map +1 -1
- package/dist/components/legal/atoms/LegalSection.js +1 -1
- package/dist/components/legal/atoms/LegalSection.js.map +1 -1
- package/dist/components/legal/atoms/LegalText.d.ts +6 -6
- package/dist/components/legal/atoms/LegalText.d.ts.map +1 -1
- package/dist/components/legal/atoms/LegalText.js +1 -1
- package/dist/components/legal/atoms/LegalText.js.map +1 -1
- package/dist/components/legal/molecules/Consent.d.ts +3 -3
- package/dist/components/legal/molecules/Consent.d.ts.map +1 -1
- package/dist/components/legal/molecules/ContactFields.d.ts +2 -2
- package/dist/components/legal/molecules/LegalMeta.d.ts +2 -2
- package/dist/components/legal/molecules/LegalMeta.d.ts.map +1 -1
- package/dist/components/legal/molecules/LegalTOC.d.ts +4 -4
- package/dist/components/legal/molecules/LegalTOC.d.ts.map +1 -1
- package/dist/components/legal/molecules/LegalTOC.js +1 -1
- package/dist/components/legal/molecules/LegalTOC.js.map +1 -1
- package/dist/components/legal/organisms/ContactForm.d.ts +2 -2
- package/dist/components/legal/organisms/ContactForm.d.ts.map +1 -1
- package/dist/components/legal/organisms/GDPRDataRequest.d.ts +2 -2
- package/dist/components/legal/organisms/GDPRDataRequest.d.ts.map +1 -1
- package/dist/components/legal/organisms/GDPRRights.d.ts +2 -2
- package/dist/components/legal/organisms/GDPRRights.d.ts.map +1 -1
- package/dist/components/legal/organisms/LegalPageLayout.d.ts +2 -2
- package/dist/components/legal/templates/ContactTemplate.d.ts +2 -2
- package/dist/components/legal/templates/ContactTemplate.d.ts.map +1 -1
- package/dist/components/legal/templates/CookiesTemplate.d.ts +2 -2
- package/dist/components/legal/templates/PrivacyTemplate.d.ts +2 -2
- package/dist/components/legal/templates/SalesTermsTemplate.d.ts +2 -2
- package/dist/components/legal/templates/SalesTermsTemplate.d.ts.map +1 -1
- package/dist/components/legal/templates/TermsTemplate.d.ts +2 -2
- package/dist/components/legal/templates/TermsTemplate.d.ts.map +1 -1
- package/dist/components/legal/templates/TermsTemplate.js +0 -1
- package/dist/components/legal/templates/TermsTemplate.js.map +1 -1
- package/dist/components/molecules/AiLinkButton.d.ts +2 -2
- package/dist/components/molecules/AiLinkButton.d.ts.map +1 -1
- package/dist/components/molecules/Breadcrumbs.d.ts +2 -2
- package/dist/components/molecules/Breadcrumbs.js +0 -1
- package/dist/components/molecules/Breadcrumbs.js.map +1 -1
- package/dist/components/molecules/CommandPalette.d.ts +2 -2
- package/dist/components/molecules/CommandPalette.js +0 -1
- package/dist/components/molecules/CommandPalette.js.map +1 -1
- package/dist/components/molecules/CommandSearchTrigger.d.ts +2 -2
- package/dist/components/molecules/CommandSearchTrigger.js +0 -1
- package/dist/components/molecules/CommandSearchTrigger.js.map +1 -1
- package/dist/components/molecules/EntityCard.d.ts +5 -5
- package/dist/components/molecules/EntityCard.js +1 -2
- package/dist/components/molecules/EntityCard.js.map +1 -1
- package/dist/components/molecules/FiltersToolbar.d.ts +2 -2
- package/dist/components/molecules/FiltersToolbar.mobile.d.ts +2 -2
- package/dist/components/molecules/HoverPreview.d.ts +2 -2
- package/dist/components/molecules/HoverPreview.js +0 -1
- package/dist/components/molecules/HoverPreview.js.map +1 -1
- package/dist/components/molecules/LangSwitch.d.ts +2 -2
- package/dist/components/molecules/LangSwitch.js +0 -1
- package/dist/components/molecules/LangSwitch.js.map +1 -1
- package/dist/components/molecules/LangSwitchDropdown.d.ts +2 -2
- package/dist/components/molecules/LoaderBlock.d.ts +2 -2
- package/dist/components/molecules/LoaderBlock.mobile.d.ts +2 -2
- package/dist/components/molecules/MobileNavMenu.d.ts +2 -2
- package/dist/components/molecules/MobileNavMenu.js +0 -1
- package/dist/components/molecules/MobileNavMenu.js.map +1 -1
- package/dist/components/molecules/NavItemCard.d.ts +2 -2
- package/dist/components/molecules/NavItemCard.d.ts.map +1 -1
- package/dist/components/molecules/NavItemCard.js +0 -1
- package/dist/components/molecules/NavItemCard.js.map +1 -1
- package/dist/components/molecules/NavMain.d.ts +2 -2
- package/dist/components/molecules/NavUser.d.ts +2 -2
- package/dist/components/molecules/OverviewCard.d.ts +2 -2
- package/dist/components/molecules/OverviewCard.d.ts.map +1 -1
- package/dist/components/molecules/OverviewCard.js +0 -1
- package/dist/components/molecules/OverviewCard.js.map +1 -1
- package/dist/components/molecules/SkeletonBlock/index.mobile.d.ts +2 -2
- package/dist/components/molecules/SkeletonBlock/index.web.d.ts +2 -2
- package/dist/components/molecules/SkeletonCircle/index.mobile.d.ts +2 -2
- package/dist/components/molecules/SkeletonCircle/index.web.d.ts +2 -2
- package/dist/components/molecules/SkeletonList/index.mobile.d.ts +2 -2
- package/dist/components/molecules/SkeletonList/index.web.d.ts +2 -2
- package/dist/components/molecules/StatCard.d.ts +6 -6
- package/dist/components/molecules/StatCard.d.ts.map +1 -1
- package/dist/components/molecules/StatCard.js +1 -2
- package/dist/components/molecules/StatCard.js.map +1 -1
- package/dist/components/molecules/StatusChip.d.ts +4 -4
- package/dist/components/molecules/StatusChip.d.ts.map +1 -1
- package/dist/components/molecules/StatusChip.js +1 -2
- package/dist/components/molecules/StatusChip.js.map +1 -1
- package/dist/components/molecules/hover-previews/Doc.d.ts +2 -2
- package/dist/components/molecules/hover-previews/Doc.js +0 -1
- package/dist/components/molecules/hover-previews/Doc.js.map +1 -1
- package/dist/components/molecules/hover-previews/Media.d.ts +2 -2
- package/dist/components/molecules/hover-previews/Media.js +0 -1
- package/dist/components/molecules/hover-previews/Media.js.map +1 -1
- package/dist/components/molecules/hover-previews/Simple.d.ts +2 -2
- package/dist/components/molecules/hover-previews/Simple.js +0 -1
- package/dist/components/molecules/hover-previews/Simple.js.map +1 -1
- package/dist/components/molecules/hover-previews/Stats.d.ts +2 -2
- package/dist/components/molecules/hover-previews/Stats.js +0 -1
- package/dist/components/molecules/hover-previews/Stats.js.map +1 -1
- package/dist/components/molecules/hover-previews/User.d.ts +2 -2
- package/dist/components/molecules/hover-previews/User.js +0 -1
- package/dist/components/molecules/hover-previews/User.js.map +1 -1
- package/dist/components/native/BottomTabs.mobile.d.ts +2 -2
- package/dist/components/native/BottomTabs.mobile.d.ts.map +1 -1
- package/dist/components/native/BottomTabs.mobile.js +0 -1
- package/dist/components/native/BottomTabs.mobile.js.map +1 -1
- package/dist/components/native/FlatListScreen.mobile.d.ts +5 -5
- package/dist/components/native/FlatListScreen.mobile.d.ts.map +1 -1
- package/dist/components/native/FlatListScreen.mobile.js +1 -2
- package/dist/components/native/FlatListScreen.mobile.js.map +1 -1
- package/dist/components/native/SheetMenu.mobile.d.ts +2 -2
- package/dist/components/native/SheetMenu.mobile.d.ts.map +1 -1
- package/dist/components/native/SheetMenu.mobile.js +0 -1
- package/dist/components/native/SheetMenu.mobile.js.map +1 -1
- package/dist/components/organisms/AcademyLayout.d.ts +2 -2
- package/dist/components/organisms/AcademyLayout.js +0 -1
- package/dist/components/organisms/AcademyLayout.js.map +1 -1
- package/dist/components/organisms/AppHeader.d.ts +2 -2
- package/dist/components/organisms/AppHeader.d.ts.map +1 -1
- package/dist/components/organisms/AppHeader.js +1 -2
- package/dist/components/organisms/AppHeader.js.map +1 -1
- package/dist/components/organisms/AppHeader.mobile.d.ts +2 -2
- package/dist/components/organisms/AppHeader.mobile.d.ts.map +1 -1
- package/dist/components/organisms/AppHeader.mobile.js +0 -1
- package/dist/components/organisms/AppHeader.mobile.js.map +1 -1
- package/dist/components/organisms/AppLayout.d.ts +2 -2
- package/dist/components/organisms/AppLayout.js +0 -1
- package/dist/components/organisms/AppLayout.js.map +1 -1
- package/dist/components/organisms/AppSidebar.d.ts +2 -2
- package/dist/components/organisms/EmptyDataList.d.ts +2 -2
- package/dist/components/organisms/EmptyDataList.d.ts.map +1 -1
- package/dist/components/organisms/EmptyDataList.mobile.d.ts +2 -2
- package/dist/components/organisms/EmptySearchResult.d.ts +2 -2
- package/dist/components/organisms/FAQSection.d.ts +2 -2
- package/dist/components/organisms/FeatureCarousel.d.ts +2 -2
- package/dist/components/organisms/FeatureCarousel.js +1 -1
- package/dist/components/organisms/FeaturesSection.d.ts +2 -2
- package/dist/components/organisms/Footer.d.ts +2 -2
- package/dist/components/organisms/GridLayout.d.ts +4 -4
- package/dist/components/organisms/GridLayout.d.ts.map +1 -1
- package/dist/components/organisms/Header.d.ts +4 -4
- package/dist/components/organisms/Header.d.ts.map +1 -1
- package/dist/components/organisms/Header.js +0 -1
- package/dist/components/organisms/Header.js.map +1 -1
- package/dist/components/organisms/Header.mobile.d.ts +2 -2
- package/dist/components/organisms/Header.mobile.js +0 -1
- package/dist/components/organisms/Header.mobile.js.map +1 -1
- package/dist/components/organisms/HeroResponsive.d.ts +2 -2
- package/dist/components/organisms/HeroResponsive.d.ts.map +1 -1
- package/dist/components/organisms/HeroResponsive.js +0 -1
- package/dist/components/organisms/HeroResponsive.js.map +1 -1
- package/dist/components/organisms/HeroSection.d.ts +2 -2
- package/dist/components/organisms/HeroSection.d.ts.map +1 -1
- package/dist/components/organisms/ListCardPage.d.ts +5 -5
- package/dist/components/organisms/ListCardPage.js +0 -1
- package/dist/components/organisms/ListCardPage.js.map +1 -1
- package/dist/components/organisms/ListGridPage.d.ts +2 -2
- package/dist/components/organisms/ListGridPage.js +0 -1
- package/dist/components/organisms/ListGridPage.js.map +1 -1
- package/dist/components/organisms/ListPageResponsive.d.ts +2 -2
- package/dist/components/organisms/ListPageResponsive.d.ts.map +1 -1
- package/dist/components/organisms/ListPageResponsive.js +0 -1
- package/dist/components/organisms/ListPageResponsive.js.map +1 -1
- package/dist/components/organisms/ListTablePage.d.ts +4 -4
- package/dist/components/organisms/ListTablePage.d.ts.map +1 -1
- package/dist/components/organisms/ListTablePage.js +0 -1
- package/dist/components/organisms/ListTablePage.js.map +1 -1
- package/dist/components/organisms/MarketingHeader.d.ts +2 -2
- package/dist/components/organisms/MarketingHeader.js +0 -1
- package/dist/components/organisms/MarketingHeader.js.map +1 -1
- package/dist/components/organisms/MarketingHeaderDesktop.d.ts +2 -2
- package/dist/components/organisms/MarketingHeaderDesktop.js +0 -1
- package/dist/components/organisms/MarketingHeaderDesktop.js.map +1 -1
- package/dist/components/organisms/MarketingHeaderMobile.d.ts +2 -2
- package/dist/components/organisms/MarketingHeaderMobile.d.ts.map +1 -1
- package/dist/components/organisms/MarketingHeaderMobile.js +0 -1
- package/dist/components/organisms/MarketingHeaderMobile.js.map +1 -1
- package/dist/components/organisms/MarketingLayout.d.ts +2 -2
- package/dist/components/organisms/MarketingLayout.js +0 -1
- package/dist/components/organisms/MarketingLayout.js.map +1 -1
- package/dist/components/organisms/PageHeaderResponsive.d.ts +2 -2
- package/dist/components/organisms/PageHeaderResponsive.js +0 -1
- package/dist/components/organisms/PageHeaderResponsive.js.map +1 -1
- package/dist/components/organisms/PageHeaderResponsive.mobile.d.ts +2 -2
- package/dist/components/organisms/PageHeaderResponsive.mobile.js +0 -1
- package/dist/components/organisms/PageHeaderResponsive.mobile.js.map +1 -1
- package/dist/components/organisms/PricingCarousel.d.ts +2 -2
- package/dist/components/organisms/PricingCarousel.js +1 -1
- package/dist/components/organisms/PricingSection.d.ts +2 -2
- package/dist/components/organisms/PricingSection.d.ts.map +1 -1
- package/dist/components/organisms/TestimonialCarousel.d.ts +2 -2
- package/dist/components/organisms/TestimonialCarousel.js +1 -1
- package/dist/components/templates/lists/ListPageTemplate/index.mobile.d.ts +2 -2
- package/dist/components/templates/lists/ListPageTemplate/index.mobile.d.ts.map +1 -1
- package/dist/components/templates/lists/ListPageTemplate/index.web.d.ts +2 -2
- package/dist/components/templates/lists/ListPageTemplate/index.web.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/platform/useColorScheme.js +0 -1
- package/dist/platform/useColorScheme.js.map +1 -1
- package/dist/platform/useColorScheme.mobile.js +0 -1
- package/dist/platform/useColorScheme.mobile.js.map +1 -1
- package/dist/platform/useReducedMotion.js +0 -1
- package/dist/platform/useReducedMotion.js.map +1 -1
- package/dist/platform/useReducedMotion.mobile.js +0 -1
- package/dist/platform/useReducedMotion.mobile.js.map +1 -1
- package/dist/platform/useResponsive.js +0 -1
- package/dist/platform/useResponsive.js.map +1 -1
- package/dist/platform/useResponsive.mobile.js +0 -1
- package/dist/platform/useResponsive.mobile.js.map +1 -1
- package/dist/platform/withPlatformUI.js +0 -1
- package/dist/platform/withPlatformUI.js.map +1 -1
- package/dist/renderers/form-contract.d.ts +2 -2
- package/dist/renderers/form-contract.js +1 -2
- package/dist/renderers/form-contract.js.map +1 -1
- package/dist/theme/tokenBridge.d.ts.map +1 -1
- package/dist/theme/tokenBridge.js +0 -1
- package/dist/theme/tokenBridge.js.map +1 -1
- package/dist/theme/tokens.js +0 -1
- package/dist/theme/tokens.js.map +1 -1
- package/dist/theme/variants.d.ts +1 -1
- package/dist/theme/variants.js +0 -1
- package/dist/theme/variants.js.map +1 -1
- package/package.json +10 -7
package/README.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# @lssm/lib.design-system
|
|
2
|
+
|
|
3
|
+
High-level design system components, patterns, and layouts for LSSM applications. Built on top of `@lssm/lib.ui-kit`.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
To standardize the look and feel of LSSM applications by providing:
|
|
8
|
+
|
|
9
|
+
- **Composite Components**: Molecules and Organisms that solve common UI problems (headers, sidebars, cards).
|
|
10
|
+
- **Layouts**: Ready-to-use page structures for dashboards, marketing sites, and lists.
|
|
11
|
+
- **Data Views**: Standardized renderers for lists, tables, and details views.
|
|
12
|
+
- **Forms**: Zod-integrated form layouts and components.
|
|
13
|
+
- **Platform Utilities**: Hooks and helpers for responsive and adaptive design (Mobile/Web).
|
|
14
|
+
- **Legal**: Compliant templates for Terms, Privacy, and GDPR.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @lssm/lib.design-system
|
|
20
|
+
# or
|
|
21
|
+
bun add @lssm/lib.design-system
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Key Concepts
|
|
25
|
+
|
|
26
|
+
- **Platform Agnostic Logic**: Business logic hooks are shared where possible.
|
|
27
|
+
- **Platform Specific UI**: `.mobile.ts(x)` and `.web.ts(x)` extensions allow for tailored experiences while maintaining a unified API.
|
|
28
|
+
- **Contract-Driven**: Components like `DataViewRenderer` and `ZodForm` are designed to work directly with `ContractSpec` definitions.
|
|
29
|
+
- **Theming**: Centralized token bridge and variant definitions.
|
|
30
|
+
|
|
31
|
+
## Exports
|
|
32
|
+
|
|
33
|
+
### Atoms & Molecules
|
|
34
|
+
|
|
35
|
+
- `Button`, `Input`, `Link` (Platform-aware wrappers)
|
|
36
|
+
- `ActionButtons`, `DataChips`, `EmptyState`, `ErrorState`
|
|
37
|
+
- `Breadcrumbs`, `CommandPalette`, `DropdownMenu`, `EntityCard`
|
|
38
|
+
- `FiltersToolbar`, `LangSwitch`, `LoaderBlock`, `StatCard`
|
|
39
|
+
|
|
40
|
+
### Organisms (Complex UI)
|
|
41
|
+
|
|
42
|
+
- **App Shell**: `AppLayout`, `AppHeader`, `AppSidebar`, `Footer`
|
|
43
|
+
- **Marketing**: `MarketingLayout`, `HeroSection`, `FeaturesSection`, `PricingSection`
|
|
44
|
+
- **Lists**: `ListCardPage`, `ListGridPage`, `ListTablePage`
|
|
45
|
+
- **Legal**: `LegalPageLayout`, `GDPRRights`, `ContactForm`
|
|
46
|
+
|
|
47
|
+
### Data & Forms
|
|
48
|
+
|
|
49
|
+
- `DataViewRenderer`: Auto-renders data based on schema.
|
|
50
|
+
- `ZodForm`: Auto-generates forms from Zod schemas.
|
|
51
|
+
- `FormLayout`, `FormDialog`, `FormStepsLayout`
|
|
52
|
+
|
|
53
|
+
### Templates
|
|
54
|
+
|
|
55
|
+
- `ListPageTemplate`
|
|
56
|
+
- Legal: `PrivacyTemplate`, `TermsTemplate`, `CookiesTemplate`
|
|
57
|
+
|
|
58
|
+
## Usage
|
|
59
|
+
|
|
60
|
+
### App Layout
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
import { AppLayout } from '@lssm/lib.design-system/components/organisms/AppLayout';
|
|
64
|
+
import { AppSidebar } from '@lssm/lib.design-system/components/organisms/AppSidebar';
|
|
65
|
+
|
|
66
|
+
export default function Layout({ children }) {
|
|
67
|
+
return <AppLayout sidebar={<AppSidebar />}>{children}</AppLayout>;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Zod Form
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
import { ZodForm } from '@lssm/lib.design-system/components/forms/ZodForm';
|
|
75
|
+
import { z } from 'zod';
|
|
76
|
+
|
|
77
|
+
const schema = z.object({
|
|
78
|
+
name: z.string().min(1),
|
|
79
|
+
email: z.string().email(),
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
export function SignupForm() {
|
|
83
|
+
return (
|
|
84
|
+
<ZodForm
|
|
85
|
+
schema={schema}
|
|
86
|
+
onSubmit={(data) => console.log(data)}
|
|
87
|
+
submitLabel="Sign Up"
|
|
88
|
+
/>
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
@@ -6,25 +6,34 @@ var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
|
6
6
|
var __esm = (fn, res) => function() {
|
|
7
7
|
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
8
8
|
};
|
|
9
|
-
var __export = (all) => {
|
|
9
|
+
var __export = (all, symbols) => {
|
|
10
10
|
let target = {};
|
|
11
|
-
for (var name in all)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
for (var name in all) {
|
|
12
|
+
__defProp(target, name, {
|
|
13
|
+
get: all[name],
|
|
14
|
+
enumerable: true
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
if (symbols) {
|
|
18
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
19
|
+
}
|
|
15
20
|
return target;
|
|
16
21
|
};
|
|
17
22
|
var __copyProps = (to, from, except, desc) => {
|
|
18
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
24
|
+
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
25
|
+
key = keys[i];
|
|
26
|
+
if (!__hasOwnProp.call(to, key) && key !== except) {
|
|
27
|
+
__defProp(to, key, {
|
|
28
|
+
get: ((k) => from[k]).bind(null, key),
|
|
29
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
24
33
|
}
|
|
25
34
|
return to;
|
|
26
35
|
};
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
36
|
+
var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
37
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) {
|
|
29
38
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
30
39
|
throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function.");
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
|
|
3
|
+
//#region src/components/agent/AgentMonitor.d.ts
|
|
4
|
+
interface AgentSessionSnapshot {
|
|
5
|
+
sessionId: string;
|
|
6
|
+
agent: string;
|
|
7
|
+
status: string;
|
|
8
|
+
tenantId?: string;
|
|
9
|
+
confidence?: number;
|
|
10
|
+
iterations?: number;
|
|
11
|
+
updatedAt: Date;
|
|
12
|
+
}
|
|
13
|
+
interface AgentMonitorProps {
|
|
14
|
+
title?: string;
|
|
15
|
+
sessions: AgentSessionSnapshot[];
|
|
16
|
+
highlightStatus?: string;
|
|
17
|
+
onSelectSession?: (session: AgentSessionSnapshot) => void;
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
declare function AgentMonitor({
|
|
21
|
+
title,
|
|
22
|
+
sessions,
|
|
23
|
+
highlightStatus,
|
|
24
|
+
onSelectSession,
|
|
25
|
+
className
|
|
26
|
+
}: AgentMonitorProps): react_jsx_runtime0.JSX.Element;
|
|
27
|
+
//#endregion
|
|
28
|
+
export { AgentMonitor, AgentMonitorProps, AgentSessionSnapshot };
|
|
29
|
+
//# sourceMappingURL=AgentMonitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentMonitor.d.ts","names":[],"sources":["../../../src/components/agent/AgentMonitor.tsx"],"sourcesContent":[],"mappings":";;;UAOiB,oBAAA;;;EAAA,MAAA,EAAA,MAAA;EAUA,QAAA,CAAA,EAAA,MAAA;EAQD,UAAA,CAAA,EAAA,MAAY;EAC1B,UAAA,CAAA,EAAA,MAAA;EACA,SAAA,EAbW,IAaX;;AAEA,UAZe,iBAAA,CAYf;EACA,KAAA,CAAA,EAAA,MAAA;EACC,QAAA,EAZS,oBAYT,EAAA;EAAiB,eAAA,CAAA,EAAA,MAAA;EAAA,eAAA,CAAA,EAAA,CAAA,OAAA,EAVU,oBAUV,EAAA,GAAA,IAAA;;;iBANJ,YAAA;;;;;;GAMb,oBAAiB,kBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import "react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
|
|
6
|
+
import { Card, CardContent, CardHeader } from "@lssm/lib.ui-kit-web/ui/card";
|
|
7
|
+
import { Badge } from "@lssm/lib.ui-kit-web/ui/badge";
|
|
8
|
+
|
|
9
|
+
//#region src/components/agent/AgentMonitor.tsx
|
|
10
|
+
function AgentMonitor({ title = "Agent Activity", sessions, highlightStatus = "escalated", onSelectSession, className }) {
|
|
11
|
+
return /* @__PURE__ */ jsxs(Card, {
|
|
12
|
+
className,
|
|
13
|
+
children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx("h3", {
|
|
14
|
+
className: "text-xl font-semibold",
|
|
15
|
+
children: title
|
|
16
|
+
}) }), /* @__PURE__ */ jsx(CardContent, {
|
|
17
|
+
className: "space-y-3",
|
|
18
|
+
children: sessions.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
19
|
+
className: "text-muted-foreground text-sm",
|
|
20
|
+
children: "No active sessions in the last hour."
|
|
21
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
22
|
+
className: "divide-border divide-y rounded-md border",
|
|
23
|
+
children: sessions.map((session) => /* @__PURE__ */ jsxs("button", {
|
|
24
|
+
type: "button",
|
|
25
|
+
onClick: () => onSelectSession?.(session),
|
|
26
|
+
className: cn("hover:bg-muted/40 flex w-full items-center gap-4 px-4 py-3 text-left transition", !onSelectSession && "cursor-default"),
|
|
27
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
28
|
+
className: "min-w-0 flex-1",
|
|
29
|
+
children: [/* @__PURE__ */ jsxs("p", {
|
|
30
|
+
className: "font-medium",
|
|
31
|
+
children: [
|
|
32
|
+
session.agent,
|
|
33
|
+
" ",
|
|
34
|
+
/* @__PURE__ */ jsxs("span", {
|
|
35
|
+
className: "text-muted-foreground text-sm",
|
|
36
|
+
children: ["· ", session.tenantId ?? "global"]
|
|
37
|
+
})
|
|
38
|
+
]
|
|
39
|
+
}), /* @__PURE__ */ jsxs("p", {
|
|
40
|
+
className: "text-muted-foreground text-sm",
|
|
41
|
+
children: [
|
|
42
|
+
session.iterations ?? 0,
|
|
43
|
+
" turns · Updated",
|
|
44
|
+
" ",
|
|
45
|
+
formatRelative(session.updatedAt)
|
|
46
|
+
]
|
|
47
|
+
})]
|
|
48
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
49
|
+
className: "flex items-center gap-3",
|
|
50
|
+
children: [typeof session.confidence === "number" && /* @__PURE__ */ jsx(ConfidencePill, { value: session.confidence }), /* @__PURE__ */ jsx(Badge, {
|
|
51
|
+
variant: session.status === highlightStatus ? "destructive" : "secondary",
|
|
52
|
+
children: session.status
|
|
53
|
+
})]
|
|
54
|
+
})]
|
|
55
|
+
}, session.sessionId))
|
|
56
|
+
})
|
|
57
|
+
})]
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function ConfidencePill({ value }) {
|
|
61
|
+
const percent = Math.round(value * 100);
|
|
62
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
63
|
+
className: cn("rounded-full px-3 py-1 text-sm font-medium", percent >= 75 ? "bg-emerald-500/15 text-emerald-500" : "bg-amber-500/15 text-amber-600"),
|
|
64
|
+
children: [percent, "%"]
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function formatRelative(date) {
|
|
68
|
+
const formatter = new Intl.RelativeTimeFormat(void 0, { numeric: "auto" });
|
|
69
|
+
const deltaMinutes = Math.round((Date.now() - new Date(date).getTime()) / 6e4);
|
|
70
|
+
if (Math.abs(deltaMinutes) < 60) return formatter.format(-deltaMinutes, "minute");
|
|
71
|
+
const deltaHours = Math.round(deltaMinutes / 60);
|
|
72
|
+
if (Math.abs(deltaHours) < 24) return formatter.format(-deltaHours, "hour");
|
|
73
|
+
const deltaDays = Math.round(deltaHours / 24);
|
|
74
|
+
return formatter.format(-deltaDays, "day");
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
export { AgentMonitor };
|
|
79
|
+
//# sourceMappingURL=AgentMonitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentMonitor.js","names":[],"sources":["../../../src/components/agent/AgentMonitor.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Card, CardContent, CardHeader } from '@lssm/lib.ui-kit-web/ui/card';\nimport { Badge } from '@lssm/lib.ui-kit-web/ui/badge';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nexport interface AgentSessionSnapshot {\n sessionId: string;\n agent: string;\n status: string;\n tenantId?: string;\n confidence?: number;\n iterations?: number;\n updatedAt: Date;\n}\n\nexport interface AgentMonitorProps {\n title?: string;\n sessions: AgentSessionSnapshot[];\n highlightStatus?: string;\n onSelectSession?: (session: AgentSessionSnapshot) => void;\n className?: string;\n}\n\nexport function AgentMonitor({\n title = 'Agent Activity',\n sessions,\n highlightStatus = 'escalated',\n onSelectSession,\n className,\n}: AgentMonitorProps) {\n return (\n <Card className={className}>\n <CardHeader>\n <h3 className=\"text-xl font-semibold\">{title}</h3>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {sessions.length === 0 ? (\n <p className=\"text-muted-foreground text-sm\">\n No active sessions in the last hour.\n </p>\n ) : (\n <div className=\"divide-border divide-y rounded-md border\">\n {sessions.map((session) => (\n <button\n key={session.sessionId}\n type=\"button\"\n onClick={() => onSelectSession?.(session)}\n className={cn(\n 'hover:bg-muted/40 flex w-full items-center gap-4 px-4 py-3 text-left transition',\n !onSelectSession && 'cursor-default'\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-medium\">\n {session.agent}{' '}\n <span className=\"text-muted-foreground text-sm\">\n · {session.tenantId ?? 'global'}\n </span>\n </p>\n <p className=\"text-muted-foreground text-sm\">\n {session.iterations ?? 0} turns · Updated{' '}\n {formatRelative(session.updatedAt)}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n {typeof session.confidence === 'number' && (\n <ConfidencePill value={session.confidence} />\n )}\n <Badge\n variant={\n session.status === highlightStatus\n ? 'destructive'\n : 'secondary'\n }\n >\n {session.status}\n </Badge>\n </div>\n </button>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n );\n}\n\nfunction ConfidencePill({ value }: { value: number }) {\n const percent = Math.round(value * 100);\n return (\n <div\n className={cn(\n 'rounded-full px-3 py-1 text-sm font-medium',\n percent >= 75\n ? 'bg-emerald-500/15 text-emerald-500'\n : 'bg-amber-500/15 text-amber-600'\n )}\n >\n {percent}%\n </div>\n );\n}\n\nfunction formatRelative(date: Date) {\n const formatter = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' });\n const deltaMinutes = Math.round(\n (Date.now() - new Date(date).getTime()) / 60000\n );\n if (Math.abs(deltaMinutes) < 60) {\n return formatter.format(-deltaMinutes, 'minute');\n }\n const deltaHours = Math.round(deltaMinutes / 60);\n if (Math.abs(deltaHours) < 24) {\n return formatter.format(-deltaHours, 'hour');\n }\n const deltaDays = Math.round(deltaHours / 24);\n return formatter.format(-deltaDays, 'day');\n}\n"],"mappings":";;;;;;;;;AAyBA,SAAgB,aAAa,EAC3B,QAAQ,kBACR,UACA,kBAAkB,aAClB,iBACA,aACoB;AACpB,QACE,qBAAC;EAAgB;aACf,oBAAC,wBACC,oBAAC;GAAG,WAAU;aAAyB;IAAW,GACvC,EACb,oBAAC;GAAY,WAAU;aACpB,SAAS,WAAW,IACnB,oBAAC;IAAE,WAAU;cAAgC;KAEzC,GAEJ,oBAAC;IAAI,WAAU;cACZ,SAAS,KAAK,YACb,qBAAC;KAEC,MAAK;KACL,eAAe,kBAAkB,QAAQ;KACzC,WAAW,GACT,mFACA,CAAC,mBAAmB,iBACrB;gBAED,qBAAC;MAAI,WAAU;iBACb,qBAAC;OAAE,WAAU;;QACV,QAAQ;QAAO;QAChB,qBAAC;SAAK,WAAU;oBAAgC,MAC3C,QAAQ,YAAY;UAClB;;QACL,EACJ,qBAAC;OAAE,WAAU;;QACV,QAAQ,cAAc;QAAE;QAAiB;QACzC,eAAe,QAAQ,UAAU;;QAChC;OACA,EACN,qBAAC;MAAI,WAAU;iBACZ,OAAO,QAAQ,eAAe,YAC7B,oBAAC,kBAAe,OAAO,QAAQ,aAAc,EAE/C,oBAAC;OACC,SACE,QAAQ,WAAW,kBACf,gBACA;iBAGL,QAAQ;QACH;OACJ;OAjCD,QAAQ,UAkCN,CACT;KACE;IAEI;GACT;;AAIX,SAAS,eAAe,EAAE,SAA4B;CACpD,MAAM,UAAU,KAAK,MAAM,QAAQ,IAAI;AACvC,QACE,qBAAC;EACC,WAAW,GACT,8CACA,WAAW,KACP,uCACA,iCACL;aAEA,SAAQ;GACL;;AAIV,SAAS,eAAe,MAAY;CAClC,MAAM,YAAY,IAAI,KAAK,mBAAmB,QAAW,EAAE,SAAS,QAAQ,CAAC;CAC7E,MAAM,eAAe,KAAK,OACvB,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,SAAS,IAAI,IAC3C;AACD,KAAI,KAAK,IAAI,aAAa,GAAG,GAC3B,QAAO,UAAU,OAAO,CAAC,cAAc,SAAS;CAElD,MAAM,aAAa,KAAK,MAAM,eAAe,GAAG;AAChD,KAAI,KAAK,IAAI,WAAW,GAAG,GACzB,QAAO,UAAU,OAAO,CAAC,YAAY,OAAO;CAE9C,MAAM,YAAY,KAAK,MAAM,aAAa,GAAG;AAC7C,QAAO,UAAU,OAAO,CAAC,WAAW,MAAM"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
import * as react_jsx_runtime1 from "react/jsx-runtime";
|
|
3
|
+
import { ApprovalRequest } from "@lssm/lib.ai-agent/approval";
|
|
4
|
+
|
|
5
|
+
//#region src/components/agent/ApprovalQueue.d.ts
|
|
6
|
+
interface ApprovalQueueProps {
|
|
7
|
+
title?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
requests: ApprovalRequest[];
|
|
10
|
+
onApprove?: (request: ApprovalRequest) => void;
|
|
11
|
+
onReject?: (request: ApprovalRequest) => void;
|
|
12
|
+
className?: string;
|
|
13
|
+
emptyState?: React$1.ReactNode;
|
|
14
|
+
}
|
|
15
|
+
declare function ApprovalQueue({
|
|
16
|
+
title,
|
|
17
|
+
description,
|
|
18
|
+
requests,
|
|
19
|
+
onApprove,
|
|
20
|
+
onReject,
|
|
21
|
+
className,
|
|
22
|
+
emptyState
|
|
23
|
+
}: ApprovalQueueProps): react_jsx_runtime1.JSX.Element;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { ApprovalQueue, ApprovalQueueProps };
|
|
26
|
+
//# sourceMappingURL=ApprovalQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApprovalQueue.d.ts","names":[],"sources":["../../../src/components/agent/ApprovalQueue.tsx"],"sourcesContent":[],"mappings":";;;;;UAiBiB,kBAAA;;;EAAA,QAAA,EAGL,eAHuB,EAAA;EAGvB,SAAA,CAAA,EAAA,CAAA,OAAA,EACY,eADZ,EAAA,GAAA,IAAA;EACY,QAAA,CAAA,EAAA,CAAA,OAAA,EACD,eADC,EAAA,GAAA,IAAA;EACD,SAAA,CAAA,EAAA,MAAA;EAER,UAAM,CAAA,EAAN,OAAA,CAAM,SAAA;;AAGL,iBAAA,aAAA,CAAa;EAAA,KAAA;EAAA,WAAA;EAAA,QAAA;EAAA,SAAA;EAAA,QAAA;EAAA,SAAA;EAAA;AAAA,CAAA,EAU1B,kBAV0B,CAAA,EAUR,kBAAA,CAAA,GAAA,CAAA,OAVQ"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import "react";
|
|
4
|
+
import { Button } from "@lssm/lib.ui-kit-web/ui/button";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
|
|
7
|
+
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@lssm/lib.ui-kit-web/ui/table";
|
|
8
|
+
import { Card, CardContent, CardHeader } from "@lssm/lib.ui-kit-web/ui/card";
|
|
9
|
+
import { Badge } from "@lssm/lib.ui-kit-web/ui/badge";
|
|
10
|
+
|
|
11
|
+
//#region src/components/agent/ApprovalQueue.tsx
|
|
12
|
+
function ApprovalQueue({ title = "Approvals", description = "Requests escalated by AI agents", requests, onApprove, onReject, className, emptyState = /* @__PURE__ */ jsx("p", {
|
|
13
|
+
className: "text-muted-foreground",
|
|
14
|
+
children: "Nothing waiting for review."
|
|
15
|
+
}) }) {
|
|
16
|
+
return /* @__PURE__ */ jsxs(Card, {
|
|
17
|
+
className,
|
|
18
|
+
children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs("div", {
|
|
19
|
+
className: "space-y-1",
|
|
20
|
+
children: [/* @__PURE__ */ jsx("h3", {
|
|
21
|
+
className: "text-xl font-semibold",
|
|
22
|
+
children: title
|
|
23
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
24
|
+
className: "text-muted-foreground text-sm",
|
|
25
|
+
children: description
|
|
26
|
+
})]
|
|
27
|
+
}) }), /* @__PURE__ */ jsx(CardContent, { children: requests.length === 0 ? emptyState : /* @__PURE__ */ jsxs(Table, { children: [/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
28
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Agent" }),
|
|
29
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Reason" }),
|
|
30
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Tenant" }),
|
|
31
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Requested" }),
|
|
32
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Status" }),
|
|
33
|
+
/* @__PURE__ */ jsx(TableHead, {
|
|
34
|
+
className: "text-right",
|
|
35
|
+
children: "Actions"
|
|
36
|
+
})
|
|
37
|
+
] }) }), /* @__PURE__ */ jsx(TableBody, { children: requests.map((request) => /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
38
|
+
/* @__PURE__ */ jsx(TableCell, {
|
|
39
|
+
className: "font-medium",
|
|
40
|
+
children: request.agent
|
|
41
|
+
}),
|
|
42
|
+
/* @__PURE__ */ jsx(TableCell, {
|
|
43
|
+
className: "max-w-sm truncate",
|
|
44
|
+
children: request.reason
|
|
45
|
+
}),
|
|
46
|
+
/* @__PURE__ */ jsx(TableCell, { children: request.tenantId ?? "—" }),
|
|
47
|
+
/* @__PURE__ */ jsx(TableCell, { children: formatRelative(request.requestedAt) }),
|
|
48
|
+
/* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(Badge, {
|
|
49
|
+
variant: badgeVariant(request.status),
|
|
50
|
+
children: request.status
|
|
51
|
+
}) }),
|
|
52
|
+
/* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsxs("div", {
|
|
53
|
+
className: "flex justify-end gap-2",
|
|
54
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
55
|
+
size: "sm",
|
|
56
|
+
variant: "secondary",
|
|
57
|
+
disabled: request.status !== "pending",
|
|
58
|
+
onClick: () => onReject?.(request),
|
|
59
|
+
children: "Reject"
|
|
60
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
61
|
+
size: "sm",
|
|
62
|
+
disabled: request.status !== "pending",
|
|
63
|
+
onClick: () => onApprove?.(request),
|
|
64
|
+
children: "Approve"
|
|
65
|
+
})]
|
|
66
|
+
}) })
|
|
67
|
+
] }, request.id)) })] }) })]
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function badgeVariant(status) {
|
|
71
|
+
switch (status) {
|
|
72
|
+
case "approved": return "default";
|
|
73
|
+
case "rejected": return "destructive";
|
|
74
|
+
default: return "secondary";
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function formatRelative(date) {
|
|
78
|
+
const formatter = new Intl.RelativeTimeFormat(void 0, { numeric: "auto" });
|
|
79
|
+
const deltaMinutes = Math.round((Date.now() - new Date(date).getTime()) / 6e4);
|
|
80
|
+
if (Math.abs(deltaMinutes) < 60) return formatter.format(-deltaMinutes, "minute");
|
|
81
|
+
const deltaHours = Math.round(deltaMinutes / 60);
|
|
82
|
+
if (Math.abs(deltaHours) < 24) return formatter.format(-deltaHours, "hour");
|
|
83
|
+
const deltaDays = Math.round(deltaHours / 24);
|
|
84
|
+
return formatter.format(-deltaDays, "day");
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//#endregion
|
|
88
|
+
export { ApprovalQueue };
|
|
89
|
+
//# sourceMappingURL=ApprovalQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApprovalQueue.js","names":[],"sources":["../../../src/components/agent/ApprovalQueue.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { ApprovalRequest } from '@lssm/lib.ai-agent/approval';\nimport {\n Table,\n TableHead,\n TableRow,\n TableHeader,\n TableBody,\n TableCell,\n} from '@lssm/lib.ui-kit-web/ui/table';\nimport { Card, CardHeader, CardContent } from '@lssm/lib.ui-kit-web/ui/card';\nimport { Badge } from '@lssm/lib.ui-kit-web/ui/badge';\nimport { Button } from '@lssm/lib.ui-kit-web/ui/button';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nexport interface ApprovalQueueProps {\n title?: string;\n description?: string;\n requests: ApprovalRequest[];\n onApprove?: (request: ApprovalRequest) => void;\n onReject?: (request: ApprovalRequest) => void;\n className?: string;\n emptyState?: React.ReactNode;\n}\n\nexport function ApprovalQueue({\n title = 'Approvals',\n description = 'Requests escalated by AI agents',\n requests,\n onApprove,\n onReject,\n className,\n emptyState = (\n <p className=\"text-muted-foreground\">Nothing waiting for review.</p>\n ),\n}: ApprovalQueueProps) {\n return (\n <Card className={className}>\n <CardHeader>\n <div className=\"space-y-1\">\n <h3 className=\"text-xl font-semibold\">{title}</h3>\n <p className=\"text-muted-foreground text-sm\">{description}</p>\n </div>\n </CardHeader>\n <CardContent>\n {requests.length === 0 ? (\n emptyState\n ) : (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Agent</TableHead>\n <TableHead>Reason</TableHead>\n <TableHead>Tenant</TableHead>\n <TableHead>Requested</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className=\"text-right\">Actions</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {requests.map((request) => (\n <TableRow key={request.id}>\n <TableCell className=\"font-medium\">{request.agent}</TableCell>\n <TableCell className=\"max-w-sm truncate\">\n {request.reason}\n </TableCell>\n <TableCell>{request.tenantId ?? '—'}</TableCell>\n <TableCell>{formatRelative(request.requestedAt)}</TableCell>\n <TableCell>\n <Badge variant={badgeVariant(request.status)}>\n {request.status}\n </Badge>\n </TableCell>\n <TableCell>\n <div className=\"flex justify-end gap-2\">\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={request.status !== 'pending'}\n onClick={() => onReject?.(request)}\n >\n Reject\n </Button>\n <Button\n size=\"sm\"\n disabled={request.status !== 'pending'}\n onClick={() => onApprove?.(request)}\n >\n Approve\n </Button>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </CardContent>\n </Card>\n );\n}\n\nfunction badgeVariant(\n status: ApprovalRequest['status']\n): 'default' | 'secondary' | 'outline' | 'destructive' {\n switch (status) {\n case 'approved':\n return 'default';\n case 'rejected':\n return 'destructive';\n default:\n return 'secondary';\n }\n}\n\nfunction formatRelative(date: Date) {\n const formatter = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' });\n const deltaMinutes = Math.round(\n (Date.now() - new Date(date).getTime()) / 60000\n );\n if (Math.abs(deltaMinutes) < 60) {\n return formatter.format(-deltaMinutes, 'minute');\n }\n const deltaHours = Math.round(deltaMinutes / 60);\n if (Math.abs(deltaHours) < 24) {\n return formatter.format(-deltaHours, 'hour');\n }\n const deltaDays = Math.round(deltaHours / 24);\n return formatter.format(-deltaDays, 'day');\n}\n"],"mappings":";;;;;;;;;;;AA2BA,SAAgB,cAAc,EAC5B,QAAQ,aACR,cAAc,mCACd,UACA,WACA,UACA,WACA,aACE,oBAAC;CAAE,WAAU;WAAwB;EAA+B,IAEjD;AACrB,QACE,qBAAC;EAAgB;aACf,oBAAC,wBACC,qBAAC;GAAI,WAAU;cACb,oBAAC;IAAG,WAAU;cAAyB;KAAW,EAClD,oBAAC;IAAE,WAAU;cAAiC;KAAgB;IAC1D,GACK,EACb,oBAAC,yBACE,SAAS,WAAW,IACnB,aAEA,qBAAC,oBACC,oBAAC,yBACC,qBAAC;GACC,oBAAC,uBAAU,UAAiB;GAC5B,oBAAC,uBAAU,WAAkB;GAC7B,oBAAC,uBAAU,WAAkB;GAC7B,oBAAC,uBAAU,cAAqB;GAChC,oBAAC,uBAAU,WAAkB;GAC7B,oBAAC;IAAU,WAAU;cAAa;KAAmB;MAC5C,GACC,EACd,oBAAC,uBACE,SAAS,KAAK,YACb,qBAAC;GACC,oBAAC;IAAU,WAAU;cAAe,QAAQ;KAAkB;GAC9D,oBAAC;IAAU,WAAU;cAClB,QAAQ;KACC;GACZ,oBAAC,uBAAW,QAAQ,YAAY,MAAgB;GAChD,oBAAC,uBAAW,eAAe,QAAQ,YAAY,GAAa;GAC5D,oBAAC,uBACC,oBAAC;IAAM,SAAS,aAAa,QAAQ,OAAO;cACzC,QAAQ;KACH,GACE;GACZ,oBAAC,uBACC,qBAAC;IAAI,WAAU;eACb,oBAAC;KACC,MAAK;KACL,SAAQ;KACR,UAAU,QAAQ,WAAW;KAC7B,eAAe,WAAW,QAAQ;eACnC;MAEQ,EACT,oBAAC;KACC,MAAK;KACL,UAAU,QAAQ,WAAW;KAC7B,eAAe,YAAY,QAAQ;eACpC;MAEQ;KACL,GACI;OA9BC,QAAQ,GA+BZ,CACX,GACQ,IACN,GAEE;GACT;;AAIX,SAAS,aACP,QACqD;AACrD,SAAQ,QAAR;EACE,KAAK,WACH,QAAO;EACT,KAAK,WACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,eAAe,MAAY;CAClC,MAAM,YAAY,IAAI,KAAK,mBAAmB,QAAW,EAAE,SAAS,QAAQ,CAAC;CAC7E,MAAM,eAAe,KAAK,OACvB,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,SAAS,IAAI,IAC3C;AACD,KAAI,KAAK,IAAI,aAAa,GAAG,GAC3B,QAAO,UAAU,OAAO,CAAC,cAAc,SAAS;CAElD,MAAM,aAAa,KAAK,MAAM,eAAe,GAAG;AAChD,KAAI,KAAK,IAAI,WAAW,GAAG,GACzB,QAAO,UAAU,OAAO,CAAC,YAAY,OAAO;CAE9C,MAAM,YAAY,KAAK,MAAM,aAAa,GAAG;AAC7C,QAAO,UAAU,OAAO,CAAC,WAAW,MAAM"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ButtonProps } from "./Button.js";
|
|
2
2
|
import * as React$1 from "react";
|
|
3
|
-
import * as
|
|
3
|
+
import * as react_jsx_runtime2 from "react/jsx-runtime";
|
|
4
4
|
import { VariantProps } from "class-variance-authority";
|
|
5
5
|
import * as class_variance_authority_types0 from "class-variance-authority/types";
|
|
6
6
|
|
|
@@ -13,14 +13,14 @@ type ActionBtnProps = Omit<ButtonProps, 'size' | 'variant'> & VariantProps<typeo
|
|
|
13
13
|
label?: React$1.ReactNode;
|
|
14
14
|
iconLeft?: React$1.ReactNode;
|
|
15
15
|
};
|
|
16
|
-
declare function EditButton(props: Omit<ActionBtnProps, 'iconLeft' | 'tone'>):
|
|
17
|
-
declare function DeleteButton(props: Omit<ActionBtnProps, 'iconLeft'>):
|
|
18
|
-
declare function ViewButton(props: Omit<ActionBtnProps, 'iconLeft'>):
|
|
16
|
+
declare function EditButton(props: Omit<ActionBtnProps, 'iconLeft' | 'tone'>): react_jsx_runtime2.JSX.Element;
|
|
17
|
+
declare function DeleteButton(props: Omit<ActionBtnProps, 'iconLeft'>): react_jsx_runtime2.JSX.Element;
|
|
18
|
+
declare function ViewButton(props: Omit<ActionBtnProps, 'iconLeft'>): react_jsx_runtime2.JSX.Element;
|
|
19
19
|
declare function ToggleButton(props: Omit<ActionBtnProps, 'iconLeft'> & {
|
|
20
20
|
active?: boolean;
|
|
21
|
-
}):
|
|
22
|
-
declare function ToggleLeftButton(props: Omit<ActionBtnProps, 'iconLeft'>):
|
|
23
|
-
declare function ToggleRightButton(props: Omit<ActionBtnProps, 'iconLeft'>):
|
|
21
|
+
}): react_jsx_runtime2.JSX.Element;
|
|
22
|
+
declare function ToggleLeftButton(props: Omit<ActionBtnProps, 'iconLeft'>): react_jsx_runtime2.JSX.Element;
|
|
23
|
+
declare function ToggleRightButton(props: Omit<ActionBtnProps, 'iconLeft'>): react_jsx_runtime2.JSX.Element;
|
|
24
24
|
//#endregion
|
|
25
25
|
export { DeleteButton, EditButton, ToggleButton, ToggleLeftButton, ToggleRightButton, ViewButton };
|
|
26
26
|
//# sourceMappingURL=ActionButtons.d.ts.map
|
|
@@ -43,7 +43,7 @@ function toSize(size) {
|
|
|
43
43
|
default: return "default";
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
function ActionButtonBase({ tone = "neutral", size = "md", label, iconLeft
|
|
46
|
+
function ActionButtonBase({ tone = "neutral", size = "md", label, iconLeft, ...props }) {
|
|
47
47
|
return /* @__PURE__ */ jsxs(Button, {
|
|
48
48
|
variant: toVariant(tone || "neutral"),
|
|
49
49
|
size: toSize(size || "md"),
|
|
@@ -74,7 +74,7 @@ function ViewButton(props) {
|
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
76
|
function ToggleButton(props) {
|
|
77
|
-
const { active
|
|
77
|
+
const { active, ...rest } = props;
|
|
78
78
|
return /* @__PURE__ */ jsx(ActionButtonBase, {
|
|
79
79
|
iconLeft: active ? /* @__PURE__ */ jsx(ToggleLeft, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx(ToggleRight, { className: "h-4 w-4" }),
|
|
80
80
|
...rest
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionButtons.js","names":["EditIcon","DeleteIcon","ViewIcon","ToggleLeftIcon","ToggleRightIcon"],"sources":["../../../src/components/atoms/ActionButtons.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button, type ButtonProps } from './Button';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport {\n Edit as EditIcon,\n Eye as ViewIcon,\n ToggleLeft as ToggleLeftIcon,\n ToggleRight as ToggleRightIcon,\n Trash2 as DeleteIcon,\n} from 'lucide-react';\nimport { Box } from '@lssm/lib.ui-kit-web/ui/stack';\nimport { Text } from '@lssm/lib.ui-kit-web/ui/text';\n\nconst actionBtn = cva('', {\n variants: {\n tone: {\n neutral: 'default',\n danger: 'destructive',\n subtle: 'secondary',\n outline: 'outline',\n },\n size: {\n sm: 'sm',\n md: 'default',\n lg: 'lg',\n icon: 'icon',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'md' },\n});\n\ntype ActionBtnProps = Omit<ButtonProps, 'size' | 'variant'> &\n VariantProps<typeof actionBtn> & {\n label?: React.ReactNode;\n iconLeft?: React.ReactNode;\n };\n\nfunction toVariant(\n tone: NonNullable<VariantProps<typeof actionBtn>['tone']>\n): ButtonProps['variant'] {\n switch (tone) {\n case 'danger':\n return 'destructive';\n case 'subtle':\n return 'secondary';\n case 'outline':\n return 'outline';\n default:\n return 'default';\n }\n}\n\nfunction toSize(\n size: NonNullable<VariantProps<typeof actionBtn>['size']>\n): ButtonProps['size'] {\n switch (size) {\n case 'sm':\n return 'sm';\n case 'lg':\n return 'lg';\n case 'icon':\n return 'icon';\n default:\n return 'default';\n }\n}\n\nfunction ActionButtonBase({\n tone = 'neutral',\n size = 'md',\n label,\n iconLeft,\n ...props\n}: ActionBtnProps) {\n return (\n <Button\n variant={toVariant(tone || 'neutral')}\n size={toSize(size || 'md')}\n {...props}\n >\n {iconLeft ? (\n <Box className=\"mr-2 inline-flex h-4 w-4\">{iconLeft}</Box>\n ) : null}\n <Text>{label}</Text>\n </Button>\n );\n}\n\nexport function EditButton(props: Omit<ActionBtnProps, 'iconLeft' | 'tone'>) {\n return (\n <ActionButtonBase iconLeft={<EditIcon className=\"h-4 w-4\" />} {...props} />\n );\n}\n\nexport function DeleteButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<DeleteIcon className=\"h-4 w-4\" />}\n tone=\"danger\"\n {...props}\n />\n );\n}\n\nexport function ViewButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase iconLeft={<ViewIcon className=\"h-4 w-4\" />} {...props} />\n );\n}\n\nexport function ToggleButton(\n props: Omit<ActionBtnProps, 'iconLeft'> & { active?: boolean }\n) {\n const { active, ...rest } = props;\n return (\n <ActionButtonBase\n iconLeft={\n active ? (\n <ToggleLeftIcon className=\"h-4 w-4\" />\n ) : (\n <ToggleRightIcon className=\"h-4 w-4\" />\n )\n }\n {...rest}\n />\n );\n}\n\nexport function ToggleLeftButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<ToggleLeftIcon className=\"h-4 w-4\" />}\n {...props}\n />\n );\n}\n\nexport function ToggleRightButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<ToggleRightIcon className=\"h-4 w-4\" />}\n {...props}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAakB,IAAI,IAAI;CACxB,UAAU;EACR,MAAM;GACJ,SAAS;GACT,QAAQ;GACR,QAAQ;GACR,SAAS;GACV;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,MAAM;GACP;EACF;CACD,iBAAiB;EAAE,MAAM;EAAW,MAAM;EAAM;CACjD,CAAC;AAQF,SAAS,UACP,MACwB;AACxB,SAAQ,MAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,OACP,MACqB;AACrB,SAAQ,MAAR;EACE,KAAK,KACH,QAAO;EACT,KAAK,KACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,iBAAiB,EACxB,OAAO,WACP,OAAO,MACP,OACA,
|
|
1
|
+
{"version":3,"file":"ActionButtons.js","names":["EditIcon","DeleteIcon","ViewIcon","ToggleLeftIcon","ToggleRightIcon"],"sources":["../../../src/components/atoms/ActionButtons.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button, type ButtonProps } from './Button';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport {\n Edit as EditIcon,\n Eye as ViewIcon,\n ToggleLeft as ToggleLeftIcon,\n ToggleRight as ToggleRightIcon,\n Trash2 as DeleteIcon,\n} from 'lucide-react';\nimport { Box } from '@lssm/lib.ui-kit-web/ui/stack';\nimport { Text } from '@lssm/lib.ui-kit-web/ui/text';\n\nconst actionBtn = cva('', {\n variants: {\n tone: {\n neutral: 'default',\n danger: 'destructive',\n subtle: 'secondary',\n outline: 'outline',\n },\n size: {\n sm: 'sm',\n md: 'default',\n lg: 'lg',\n icon: 'icon',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'md' },\n});\n\ntype ActionBtnProps = Omit<ButtonProps, 'size' | 'variant'> &\n VariantProps<typeof actionBtn> & {\n label?: React.ReactNode;\n iconLeft?: React.ReactNode;\n };\n\nfunction toVariant(\n tone: NonNullable<VariantProps<typeof actionBtn>['tone']>\n): ButtonProps['variant'] {\n switch (tone) {\n case 'danger':\n return 'destructive';\n case 'subtle':\n return 'secondary';\n case 'outline':\n return 'outline';\n default:\n return 'default';\n }\n}\n\nfunction toSize(\n size: NonNullable<VariantProps<typeof actionBtn>['size']>\n): ButtonProps['size'] {\n switch (size) {\n case 'sm':\n return 'sm';\n case 'lg':\n return 'lg';\n case 'icon':\n return 'icon';\n default:\n return 'default';\n }\n}\n\nfunction ActionButtonBase({\n tone = 'neutral',\n size = 'md',\n label,\n iconLeft,\n ...props\n}: ActionBtnProps) {\n return (\n <Button\n variant={toVariant(tone || 'neutral')}\n size={toSize(size || 'md')}\n {...props}\n >\n {iconLeft ? (\n <Box className=\"mr-2 inline-flex h-4 w-4\">{iconLeft}</Box>\n ) : null}\n <Text>{label}</Text>\n </Button>\n );\n}\n\nexport function EditButton(props: Omit<ActionBtnProps, 'iconLeft' | 'tone'>) {\n return (\n <ActionButtonBase iconLeft={<EditIcon className=\"h-4 w-4\" />} {...props} />\n );\n}\n\nexport function DeleteButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<DeleteIcon className=\"h-4 w-4\" />}\n tone=\"danger\"\n {...props}\n />\n );\n}\n\nexport function ViewButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase iconLeft={<ViewIcon className=\"h-4 w-4\" />} {...props} />\n );\n}\n\nexport function ToggleButton(\n props: Omit<ActionBtnProps, 'iconLeft'> & { active?: boolean }\n) {\n const { active, ...rest } = props;\n return (\n <ActionButtonBase\n iconLeft={\n active ? (\n <ToggleLeftIcon className=\"h-4 w-4\" />\n ) : (\n <ToggleRightIcon className=\"h-4 w-4\" />\n )\n }\n {...rest}\n />\n );\n}\n\nexport function ToggleLeftButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<ToggleLeftIcon className=\"h-4 w-4\" />}\n {...props}\n />\n );\n}\n\nexport function ToggleRightButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<ToggleRightIcon className=\"h-4 w-4\" />}\n {...props}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAakB,IAAI,IAAI;CACxB,UAAU;EACR,MAAM;GACJ,SAAS;GACT,QAAQ;GACR,QAAQ;GACR,SAAS;GACV;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,MAAM;GACP;EACF;CACD,iBAAiB;EAAE,MAAM;EAAW,MAAM;EAAM;CACjD,CAAC;AAQF,SAAS,UACP,MACwB;AACxB,SAAQ,MAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,OACP,MACqB;AACrB,SAAQ,MAAR;EACE,KAAK,KACH,QAAO;EACT,KAAK,KACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,iBAAiB,EACxB,OAAO,WACP,OAAO,MACP,OACA,UACA,GAAG,SACc;AACjB,QACE,qBAAC;EACC,SAAS,UAAU,QAAQ,UAAU;EACrC,MAAM,OAAO,QAAQ,KAAK;EAC1B,GAAI;aAEH,WACC,oBAAC;GAAI,WAAU;aAA4B;IAAe,GACxD,MACJ,oBAAC,kBAAM,QAAa;GACb;;AAIb,SAAgB,WAAW,OAAkD;AAC3E,QACE,oBAAC;EAAiB,UAAU,oBAACA,QAAS,WAAU,YAAY;EAAE,GAAI;GAAS;;AAI/E,SAAgB,aAAa,OAAyC;AACpE,QACE,oBAAC;EACC,UAAU,oBAACC,UAAW,WAAU,YAAY;EAC5C,MAAK;EACL,GAAI;GACJ;;AAIN,SAAgB,WAAW,OAAyC;AAClE,QACE,oBAAC;EAAiB,UAAU,oBAACC,OAAS,WAAU,YAAY;EAAE,GAAI;GAAS;;AAI/E,SAAgB,aACd,OACA;CACA,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,QACE,oBAAC;EACC,UACE,SACE,oBAACC,cAAe,WAAU,YAAY,GAEtC,oBAACC,eAAgB,WAAU,YAAY;EAG3C,GAAI;GACJ;;AAIN,SAAgB,iBAAiB,OAAyC;AACxE,QACE,oBAAC;EACC,UAAU,oBAACD,cAAe,WAAU,YAAY;EAChD,GAAI;GACJ;;AAIN,SAAgB,kBAAkB,OAAyC;AACzE,QACE,oBAAC;EACC,UAAU,oBAACC,eAAgB,WAAU,YAAY;EACjD,GAAI;GACJ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React$1 from "react";
|
|
2
2
|
import { ButtonProps as ButtonProps$1 } from "@lssm/lib.ui-kit-web/ui/button";
|
|
3
|
-
import * as
|
|
3
|
+
import * as react_jsx_runtime10 from "react/jsx-runtime";
|
|
4
4
|
import { PressableProps } from "react-native";
|
|
5
5
|
|
|
6
6
|
//#region src/components/atoms/Button.d.ts
|
|
@@ -34,7 +34,7 @@ declare function Button({
|
|
|
34
34
|
className,
|
|
35
35
|
disabled,
|
|
36
36
|
...rest
|
|
37
|
-
}: ButtonProps):
|
|
37
|
+
}: ButtonProps): react_jsx_runtime10.JSX.Element;
|
|
38
38
|
//#endregion
|
|
39
39
|
export { Button, Button as default, ButtonProps };
|
|
40
40
|
//# sourceMappingURL=Button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","names":[],"sources":["../../../src/components/atoms/Button.tsx"],"sourcesContent":[],"mappings":";;;;;;KASK,gBAAA;KAEA,oBAAA,GAAuB,KAC1B;KAIU,WAAA,GAAc,KACxB,sDAGA;EAXG,QAAA,EAYS,OAAA,CAAM,SAZC;EAEhB,OAAA,CAAA,EAAA,OAAA;EAKO,WAAA,CAAA,EAAW,MAAA;EACrB,gBAAA,CAAA,EAOqB,gBAPrB;EADwB,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAIxB,SAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EACY,UAAM,CAAA,EAAA,GAAA,GAAA,IAAA;EAGG,WAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAOe,OAAA,CAAA,EAAxB,OAAA,CAAM,iBAAkB,CAAA,iBAAA,CAAA;CAAxB;AAAuB,iBAGrB,MAAA,CAHqB;EAAA,QAAA;EAAA,OAAA;EAAA,gBAAA;EAAA,OAAA;EAAA,SAAA;EAAA,UAAA;EAAA,WAAA;EAAA,YAAA;EAAA,UAAA;EAAA,aAAA;EAAA,WAAA;EAAA,SAAA;EAAA,OAAA;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAoBlC,WApBkC,CAAA,EAoBvB,
|
|
1
|
+
{"version":3,"file":"Button.d.ts","names":[],"sources":["../../../src/components/atoms/Button.tsx"],"sourcesContent":[],"mappings":";;;;;;KASK,gBAAA;KAEA,oBAAA,GAAuB,KAC1B;KAIU,WAAA,GAAc,KACxB,sDAGA;EAXG,QAAA,EAYS,OAAA,CAAM,SAZC;EAEhB,OAAA,CAAA,EAAA,OAAA;EAKO,WAAA,CAAA,EAAW,MAAA;EACrB,gBAAA,CAAA,EAOqB,gBAPrB;EADwB,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAIxB,SAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EACY,UAAM,CAAA,EAAA,GAAA,GAAA,IAAA;EAGG,WAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAOe,OAAA,CAAA,EAAxB,OAAA,CAAM,iBAAkB,CAAA,iBAAA,CAAA;CAAxB;AAAuB,iBAGrB,MAAA,CAHqB;EAAA,QAAA;EAAA,OAAA;EAAA,gBAAA;EAAA,OAAA;EAAA,SAAA;EAAA,UAAA;EAAA,WAAA;EAAA,YAAA;EAAA,UAAA;EAAA,aAAA;EAAA,WAAA;EAAA,SAAA;EAAA,OAAA;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAoBlC,WApBkC,CAAA,EAoBvB,mBAAA,CAAA,GAAA,CAAA,OApBuB"}
|
|
@@ -4,7 +4,7 @@ import { Loader2 } from "lucide-react";
|
|
|
4
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
|
|
6
6
|
//#region src/components/atoms/Button.tsx
|
|
7
|
-
function Button({ children, loading, spinnerPlacement = "start", onPress, onPressIn, onPressOut, onLongPress, onTouchStart, onTouchEnd, onTouchCancel, onMouseDown, onMouseUp, onClick, className, disabled
|
|
7
|
+
function Button({ children, loading, spinnerPlacement = "start", onPress, onPressIn, onPressOut, onLongPress, onTouchStart, onTouchEnd, onTouchCancel, onMouseDown, onMouseUp, onClick, className, disabled, ...rest }) {
|
|
8
8
|
const isDisabled = Boolean(disabled || loading);
|
|
9
9
|
const content = !rest.asChild ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
10
10
|
loading && spinnerPlacement === "start" ? /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 animate-spin" }) : null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","names":["WebButton"],"sources":["../../../src/components/atoms/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Button as WebButton,\n type ButtonProps as WebButtonProps,\n} from '@lssm/lib.ui-kit-web/ui/button';\nimport { Loader2 } from 'lucide-react';\n// type-only import to avoid bundling RN on web\nimport type { PressableProps as RNPressableProps } from 'react-native';\n\ntype SpinnerPlacement = 'start' | 'end';\n\ntype PressableBridgeProps = Omit<\n RNPressableProps,\n 'onPress' | 'onPressIn' | 'onPressOut' | 'onLongPress'\n>;\n\nexport type ButtonProps = Omit<\n WebButtonProps,\n 'onClick' | 'disabled' | 'children'\n> &\n PressableBridgeProps & {\n children: React.ReactNode;\n loading?: boolean;\n loadingText?: string; // ignored on web, present for API symmetry\n spinnerPlacement?: SpinnerPlacement;\n // Normalized events\n onPress?: () => void;\n onPressIn?: () => void;\n onPressOut?: () => void;\n onLongPress?: () => void;\n // Web-only optional onClick for compatibility\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n };\n\nexport function Button({\n children,\n loading,\n spinnerPlacement = 'start',\n onPress,\n onPressIn,\n onPressOut,\n onLongPress,\n onTouchStart,\n onTouchEnd,\n onTouchCancel,\n onMouseDown,\n onMouseUp,\n onClick,\n className,\n disabled,\n ...rest\n}: ButtonProps) {\n const isDisabled = Boolean(disabled || loading);\n\n const content = !rest.asChild ? (\n <>\n {loading && spinnerPlacement === 'start' ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : null}\n {children}\n {loading && spinnerPlacement === 'end' ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : null}\n </>\n ) : (\n children\n );\n\n return (\n <WebButton\n {...(rest as any)}\n className={className}\n disabled={isDisabled}\n aria-busy={loading ? true : undefined}\n aria-disabled={isDisabled ? true : undefined}\n // normalized + bridged events\n onPress={onPress || onClick}\n onClick={onPress || onClick}\n onMouseDown={onMouseDown || onPressIn}\n onMouseUp={onMouseUp || onPressOut}\n onTouchStart={onTouchStart}\n onTouchEnd={onTouchEnd || onPressOut}\n onTouchCancel={onTouchCancel || onPressOut}\n type={(rest as any)?.type ?? 'button'}\n >\n {content}\n </WebButton>\n );\n}\n\nexport default Button;\n"],"mappings":";;;;;;AAkCA,SAAgB,OAAO,EACrB,UACA,SACA,mBAAmB,SACnB,SACA,WACA,YACA,aACA,cACA,YACA,eACA,aACA,WACA,SACA,WACA,
|
|
1
|
+
{"version":3,"file":"Button.js","names":["WebButton"],"sources":["../../../src/components/atoms/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Button as WebButton,\n type ButtonProps as WebButtonProps,\n} from '@lssm/lib.ui-kit-web/ui/button';\nimport { Loader2 } from 'lucide-react';\n// type-only import to avoid bundling RN on web\nimport type { PressableProps as RNPressableProps } from 'react-native';\n\ntype SpinnerPlacement = 'start' | 'end';\n\ntype PressableBridgeProps = Omit<\n RNPressableProps,\n 'onPress' | 'onPressIn' | 'onPressOut' | 'onLongPress'\n>;\n\nexport type ButtonProps = Omit<\n WebButtonProps,\n 'onClick' | 'disabled' | 'children'\n> &\n PressableBridgeProps & {\n children: React.ReactNode;\n loading?: boolean;\n loadingText?: string; // ignored on web, present for API symmetry\n spinnerPlacement?: SpinnerPlacement;\n // Normalized events\n onPress?: () => void;\n onPressIn?: () => void;\n onPressOut?: () => void;\n onLongPress?: () => void;\n // Web-only optional onClick for compatibility\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n };\n\nexport function Button({\n children,\n loading,\n spinnerPlacement = 'start',\n onPress,\n onPressIn,\n onPressOut,\n onLongPress,\n onTouchStart,\n onTouchEnd,\n onTouchCancel,\n onMouseDown,\n onMouseUp,\n onClick,\n className,\n disabled,\n ...rest\n}: ButtonProps) {\n const isDisabled = Boolean(disabled || loading);\n\n const content = !rest.asChild ? (\n <>\n {loading && spinnerPlacement === 'start' ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : null}\n {children}\n {loading && spinnerPlacement === 'end' ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : null}\n </>\n ) : (\n children\n );\n\n return (\n <WebButton\n {...(rest as any)}\n className={className}\n disabled={isDisabled}\n aria-busy={loading ? true : undefined}\n aria-disabled={isDisabled ? true : undefined}\n // normalized + bridged events\n onPress={onPress || onClick}\n onClick={onPress || onClick}\n onMouseDown={onMouseDown || onPressIn}\n onMouseUp={onMouseUp || onPressOut}\n onTouchStart={onTouchStart}\n onTouchEnd={onTouchEnd || onPressOut}\n onTouchCancel={onTouchCancel || onPressOut}\n type={(rest as any)?.type ?? 'button'}\n >\n {content}\n </WebButton>\n );\n}\n\nexport default Button;\n"],"mappings":";;;;;;AAkCA,SAAgB,OAAO,EACrB,UACA,SACA,mBAAmB,SACnB,SACA,WACA,YACA,aACA,cACA,YACA,eACA,aACA,WACA,SACA,WACA,UACA,GAAG,QACW;CACd,MAAM,aAAa,QAAQ,YAAY,QAAQ;CAE/C,MAAM,UAAU,CAAC,KAAK,UACpB;EACG,WAAW,qBAAqB,UAC/B,oBAAC,WAAQ,WAAU,yBAAyB,GAC1C;EACH;EACA,WAAW,qBAAqB,QAC/B,oBAAC,WAAQ,WAAU,yBAAyB,GAC1C;KACH,GAEH;AAGF,QACE,oBAACA;EACC,GAAK;EACM;EACX,UAAU;EACV,aAAW,UAAU,OAAO;EAC5B,iBAAe,aAAa,OAAO;EAEnC,SAAS,WAAW;EACpB,SAAS,WAAW;EACpB,aAAa,eAAe;EAC5B,WAAW,aAAa;EACV;EACd,YAAY,cAAc;EAC1B,eAAe,iBAAiB;EAChC,MAAO,MAAc,QAAQ;YAE5B;GACS;;AAIhB,qBAAe"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react_jsx_runtime8 from "react/jsx-runtime";
|
|
2
2
|
import { PressableProps } from "react-native";
|
|
3
3
|
import { ButtonProps as ButtonProps$1 } from "@lssm/lib.ui-kit/ui/button";
|
|
4
4
|
|
|
@@ -16,7 +16,7 @@ declare function Button({
|
|
|
16
16
|
spinnerPlacement,
|
|
17
17
|
disabled,
|
|
18
18
|
...props
|
|
19
|
-
}: ButtonProps):
|
|
19
|
+
}: ButtonProps): react_jsx_runtime8.JSX.Element;
|
|
20
20
|
//#endregion
|
|
21
21
|
export { Button, Button as default, ButtonProps };
|
|
22
22
|
//# sourceMappingURL=Button.mobile.d.ts.map
|
|
@@ -6,7 +6,7 @@ import { HStack } from "@lssm/lib.ui-kit/ui/stack";
|
|
|
6
6
|
import { Text as Text$1 } from "@lssm/lib.ui-kit/ui/text";
|
|
7
7
|
|
|
8
8
|
//#region src/components/atoms/Button.mobile.tsx
|
|
9
|
-
function Button({ children, loading, loadingText, spinnerPlacement = "start", disabled
|
|
9
|
+
function Button({ children, loading, loadingText, spinnerPlacement = "start", disabled, ...props }) {
|
|
10
10
|
const isDisabled = Boolean(disabled || loading);
|
|
11
11
|
const content = loading ? /* @__PURE__ */ jsxs(HStack, {
|
|
12
12
|
className: "items-center gap-x-2",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.mobile.js","names":["Text","NativeButton"],"sources":["../../../src/components/atoms/Button.mobile.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Button as NativeButton,\n type ButtonProps as NativeButtonProps,\n} from '@lssm/lib.ui-kit/ui/button';\nimport { ActivityIndicator, type PressableProps } from 'react-native';\nimport { HStack } from '@lssm/lib.ui-kit/ui/stack';\nimport { Text } from '@lssm/lib.ui-kit/ui/text';\n\ntype SpinnerPlacement = 'start' | 'end';\n\nexport type ButtonProps = NativeButtonProps &\n Omit<PressableProps, 'disabled'> & {\n loading?: boolean;\n loadingText?: string;\n spinnerPlacement?: SpinnerPlacement;\n };\n\nexport function Button({\n children,\n loading,\n loadingText,\n spinnerPlacement = 'start',\n disabled,\n ...props\n}: ButtonProps) {\n const isDisabled = Boolean(disabled || loading);\n\n const content = loading ? (\n <HStack className=\"items-center gap-x-2\">\n {spinnerPlacement === 'start' ? (\n <ActivityIndicator\n size=\"small\"\n color={props.variant === 'outline' ? '#6b7280' : '#ffffff'}\n />\n ) : null}\n <Text>{loadingText || 'Loading…'}</Text>\n {spinnerPlacement === 'end' ? (\n <ActivityIndicator\n size=\"small\"\n color={props.variant === 'outline' ? '#6b7280' : '#ffffff'}\n />\n ) : null}\n </HStack>\n ) : (\n children\n );\n\n return (\n <NativeButton disabled={isDisabled} {...props}>\n {content as any}\n </NativeButton>\n );\n}\n\nexport default Button;\n"],"mappings":";;;;;;;;AAkBA,SAAgB,OAAO,EACrB,UACA,SACA,aACA,mBAAmB,SACnB,
|
|
1
|
+
{"version":3,"file":"Button.mobile.js","names":["Text","NativeButton"],"sources":["../../../src/components/atoms/Button.mobile.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Button as NativeButton,\n type ButtonProps as NativeButtonProps,\n} from '@lssm/lib.ui-kit/ui/button';\nimport { ActivityIndicator, type PressableProps } from 'react-native';\nimport { HStack } from '@lssm/lib.ui-kit/ui/stack';\nimport { Text } from '@lssm/lib.ui-kit/ui/text';\n\ntype SpinnerPlacement = 'start' | 'end';\n\nexport type ButtonProps = NativeButtonProps &\n Omit<PressableProps, 'disabled'> & {\n loading?: boolean;\n loadingText?: string;\n spinnerPlacement?: SpinnerPlacement;\n };\n\nexport function Button({\n children,\n loading,\n loadingText,\n spinnerPlacement = 'start',\n disabled,\n ...props\n}: ButtonProps) {\n const isDisabled = Boolean(disabled || loading);\n\n const content = loading ? (\n <HStack className=\"items-center gap-x-2\">\n {spinnerPlacement === 'start' ? (\n <ActivityIndicator\n size=\"small\"\n color={props.variant === 'outline' ? '#6b7280' : '#ffffff'}\n />\n ) : null}\n <Text>{loadingText || 'Loading…'}</Text>\n {spinnerPlacement === 'end' ? (\n <ActivityIndicator\n size=\"small\"\n color={props.variant === 'outline' ? '#6b7280' : '#ffffff'}\n />\n ) : null}\n </HStack>\n ) : (\n children\n );\n\n return (\n <NativeButton disabled={isDisabled} {...props}>\n {content as any}\n </NativeButton>\n );\n}\n\nexport default Button;\n"],"mappings":";;;;;;;;AAkBA,SAAgB,OAAO,EACrB,UACA,SACA,aACA,mBAAmB,SACnB,UACA,GAAG,SACW;CACd,MAAM,aAAa,QAAQ,YAAY,QAAQ;CAE/C,MAAM,UAAU,UACd,qBAAC;EAAO,WAAU;;GACf,qBAAqB,UACpB,oBAAC;IACC,MAAK;IACL,OAAO,MAAM,YAAY,YAAY,YAAY;KACjD,GACA;GACJ,oBAACA,oBAAM,eAAe,aAAkB;GACvC,qBAAqB,QACpB,oBAAC;IACC,MAAK;IACL,OAAO,MAAM,YAAY,YAAY,YAAY;KACjD,GACA;;GACG,GAET;AAGF,QACE,oBAACC;EAAa,UAAU;EAAY,GAAI;YACrC;GACY;;AAInB,4BAAe"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ButtonProps } from "./Button.js";
|
|
2
2
|
import { LinkProps } from "./Link.web.js";
|
|
3
|
-
import * as
|
|
3
|
+
import * as react_jsx_runtime11 from "react/jsx-runtime";
|
|
4
4
|
|
|
5
5
|
//#region src/components/atoms/ButtonLink.d.ts
|
|
6
6
|
type ButtonLinkProps = ButtonProps & Pick<LinkProps, 'href' | 'target' | 'rel' | 'onClick'> & {
|
|
@@ -16,7 +16,7 @@ declare function ButtonLink({
|
|
|
16
16
|
children,
|
|
17
17
|
onClick,
|
|
18
18
|
...btn
|
|
19
|
-
}: ButtonLinkProps):
|
|
19
|
+
}: ButtonLinkProps): react_jsx_runtime11.JSX.Element;
|
|
20
20
|
//#endregion
|
|
21
21
|
export { ButtonLink, ButtonLink as default, ButtonLinkProps };
|
|
22
22
|
//# sourceMappingURL=ButtonLink.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonLink.d.ts","names":[],"sources":["../../../src/components/atoms/ButtonLink.tsx"],"sourcesContent":[],"mappings":";;;;;KAMY,eAAA,GAAkB,cAC5B,KAAK;;;AADK,iBAKI,UAAA,CALW;EAAA,IAAA;EAAA,MAAA;EAAA,GAAA;EAAA,OAAA;EAAA,OAAA;EAAA,QAAA;EAAA,QAAA;EAAA,OAAA;EAAA,GAAA;AAAA,CAAA,EAexB,eAfwB,CAAA,EAeT,
|
|
1
|
+
{"version":3,"file":"ButtonLink.d.ts","names":[],"sources":["../../../src/components/atoms/ButtonLink.tsx"],"sourcesContent":[],"mappings":";;;;;KAMY,eAAA,GAAkB,cAC5B,KAAK;;;AADK,iBAKI,UAAA,CALW;EAAA,IAAA;EAAA,MAAA;EAAA,GAAA;EAAA,OAAA;EAAA,OAAA;EAAA,QAAA;EAAA,QAAA;EAAA,OAAA;EAAA,GAAA;AAAA,CAAA,EAexB,eAfwB,CAAA,EAeT,mBAAA,CAAA,GAAA,CAAA,OAfS"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
import { Button } from "./Button.js";
|
|
5
4
|
import { Link } from "./Link.web.js";
|
|
6
5
|
import * as React$1 from "react";
|
|
7
6
|
import { jsx } from "react/jsx-runtime";
|
|
8
7
|
|
|
9
8
|
//#region src/components/atoms/ButtonLink.tsx
|
|
10
|
-
function ButtonLink({ href, target, rel, replace, loading, disabled, children, onClick
|
|
9
|
+
function ButtonLink({ href, target, rel, replace, loading, disabled, children, onClick, ...btn }) {
|
|
11
10
|
const blocked = Boolean(disabled || loading);
|
|
12
11
|
const handleClick = React$1.useCallback((e) => {
|
|
13
12
|
if (blocked) {
|