@contractspec/lib.design-system 3.10.0 → 3.11.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 +116 -5
- package/dist/browser/components/agent/AgentMonitor.js +1 -0
- package/dist/browser/components/agent/ApprovalQueue.js +1 -0
- package/dist/browser/components/agent/ApprovalQueue.mobile.js +1 -0
- package/dist/browser/components/atoms/ActionButtons.js +1 -0
- package/dist/browser/components/atoms/Button.js +1 -0
- package/dist/browser/components/atoms/Button.mobile.js +1 -0
- package/dist/browser/components/atoms/ButtonLink.js +1 -0
- package/dist/browser/components/atoms/ButtonLink.mobile.js +1 -0
- package/dist/browser/components/atoms/Cta.js +1 -0
- package/dist/browser/components/atoms/Cta.mobile.js +1 -0
- package/dist/browser/components/atoms/DataChips.js +1 -0
- package/dist/browser/components/atoms/EmptyState.js +1 -0
- package/dist/browser/components/atoms/ErrorState.js +1 -0
- package/dist/browser/components/atoms/ErrorState.mobile.js +1 -0
- package/dist/browser/components/atoms/Input.js +1 -0
- package/dist/browser/components/atoms/Input.mobile.js +1 -0
- package/dist/browser/components/atoms/Link.js +1 -0
- package/dist/browser/components/atoms/Link.web.js +1 -0
- package/dist/browser/components/atoms/LoaderCircular.js +1 -0
- package/dist/browser/components/atoms/LoaderCircular.mobile.js +1 -0
- package/dist/browser/components/atoms/NavBrand.js +1 -0
- package/dist/browser/components/atoms/RankBadge.js +1 -0
- package/dist/browser/components/atoms/ScoreBar.js +1 -0
- package/dist/browser/components/atoms/Stepper.js +1 -0
- package/dist/browser/components/atoms/Textarea.js +1 -0
- package/dist/browser/components/atoms/Textarea.mobile.js +1 -0
- package/dist/browser/components/data-table/DataTable.js +1 -0
- package/dist/browser/components/data-table/DataTable.mobile.js +1 -0
- package/dist/browser/components/data-table/DataTableToolbar.js +1 -0
- package/dist/browser/components/data-table/DataTableToolbar.mobile.js +1 -0
- package/dist/browser/components/data-table/DataTableToolbar.shared.js +1 -0
- package/dist/browser/components/data-view/DataViewDetail.js +1 -0
- package/dist/browser/components/data-view/DataViewList.js +1 -0
- package/dist/browser/components/data-view/DataViewRenderer.js +1 -0
- package/dist/browser/components/data-view/DataViewRenderer.mobile.js +1 -0
- package/dist/browser/components/data-view/DataViewTable.js +1 -0
- package/dist/browser/components/data-view/DataViewTable.mobile.js +1 -0
- package/dist/browser/components/data-view/utils.js +1 -0
- package/dist/browser/components/forms/ActionForm.js +1 -0
- package/dist/browser/components/forms/FormCardLayout.js +1 -0
- package/dist/browser/components/forms/FormDialog.js +1 -0
- package/dist/browser/components/forms/FormLayout.js +1 -0
- package/dist/browser/components/forms/FormOneByOneLayout.js +1 -0
- package/dist/browser/components/forms/FormStepsLayout.js +1 -0
- package/dist/browser/components/forms/ZodForm.js +1 -0
- package/dist/browser/components/forms/controls/Autocomplete.js +1 -0
- package/dist/browser/components/forms/controls/Autocomplete.mobile.js +1 -0
- package/dist/browser/components/forms/controls/ChoiceControls.js +1 -0
- package/dist/browser/components/forms/controls/ChoiceControls.mobile.js +1 -0
- package/dist/browser/components/forms/controls/Combobox.js +1 -0
- package/dist/browser/components/forms/controls/Combobox.mobile.js +1 -0
- package/dist/browser/components/forms/controls/DateTimeControls.js +1 -0
- package/dist/browser/components/forms/controls/DateTimeControls.mobile.js +1 -0
- package/dist/browser/components/forms/controls/DropdownMenu.js +1 -0
- package/dist/browser/components/forms/controls/DropdownMenu.mobile.js +1 -0
- package/dist/browser/components/forms/controls/Field.js +1 -0
- package/dist/browser/components/forms/controls/Field.mobile.js +1 -0
- package/dist/browser/components/forms/controls/InputGroup.js +1 -0
- package/dist/browser/components/forms/controls/InputGroup.mobile.js +1 -0
- package/dist/browser/components/forms/controls/InputOTP.js +1 -0
- package/dist/browser/components/forms/controls/InputOTP.mobile.js +1 -0
- package/dist/browser/components/forms/controls/LoadingButton.js +1 -0
- package/dist/browser/components/forms/controls/LoadingButton.mobile.js +1 -0
- package/dist/browser/components/forms/controls/NativeSelect.js +1 -0
- package/dist/browser/components/forms/controls/NativeSelect.mobile.js +1 -0
- package/dist/browser/components/forms/controls/Select.js +1 -0
- package/dist/browser/components/forms/controls/Select.mobile.js +1 -0
- package/dist/browser/components/forms/controls/index.js +1 -0
- package/dist/browser/components/forms/index.js +1 -0
- package/dist/browser/components/layout/Stack.js +1 -0
- package/dist/browser/components/layout/Stack.mobile.js +1 -0
- package/dist/browser/components/layout/index.js +1 -0
- package/dist/browser/components/legal/atoms/DefinitionList.js +1 -0
- package/dist/browser/components/legal/atoms/KeyValueList.js +1 -0
- package/dist/browser/components/legal/atoms/LegalCallout.js +1 -0
- package/dist/browser/components/legal/atoms/LegalHeading.js +1 -0
- package/dist/browser/components/legal/atoms/LegalList.js +1 -0
- package/dist/browser/components/legal/atoms/LegalSection.js +1 -0
- package/dist/browser/components/legal/atoms/LegalText.js +1 -0
- package/dist/browser/components/legal/molecules/Consent.js +1 -0
- package/dist/browser/components/legal/molecules/ContactFields.js +1 -0
- package/dist/browser/components/legal/molecules/LegalMeta.js +1 -0
- package/dist/browser/components/legal/molecules/LegalTOC.js +1 -0
- package/dist/browser/components/legal/organisms/ContactForm.js +1 -0
- package/dist/browser/components/legal/organisms/GDPRDataRequest.js +1 -0
- package/dist/browser/components/legal/organisms/GDPRRights.js +1 -0
- package/dist/browser/components/legal/organisms/LegalPageLayout.js +1 -0
- package/dist/browser/components/legal/templates/ContactTemplate.js +1 -0
- package/dist/browser/components/legal/templates/CookiesTemplate.js +1 -0
- package/dist/browser/components/legal/templates/PrivacyTemplate.js +1 -0
- package/dist/browser/components/legal/templates/SalesTermsTemplate.js +1 -0
- package/dist/browser/components/legal/templates/TermsTemplate.js +1 -0
- package/dist/browser/components/marketing/MarketingCard.js +1 -0
- package/dist/browser/components/marketing/MarketingCardsSection.js +1 -0
- package/dist/browser/components/marketing/MarketingComparisonSection.js +1 -0
- package/dist/browser/components/marketing/MarketingIconCard.js +1 -0
- package/dist/browser/components/marketing/MarketingSection.js +1 -0
- package/dist/browser/components/marketing/MarketingStepCard.js +1 -0
- package/dist/browser/components/molecules/AiLinkButton.js +1 -0
- package/dist/browser/components/molecules/Breadcrumbs.js +1 -0
- package/dist/browser/components/molecules/CodeBlock/CodeBlock.js +1 -0
- package/dist/browser/components/molecules/CodeBlock/index.js +1 -0
- package/dist/browser/components/molecules/CodeBlock/types.js +0 -0
- package/dist/browser/components/molecules/CommandPalette.js +1 -0
- package/dist/browser/components/molecules/CommandSearchTrigger.js +1 -0
- package/dist/browser/components/molecules/CommandTabs/CommandTabs.js +1 -0
- package/dist/browser/components/molecules/CommandTabs/index.js +1 -0
- package/dist/browser/components/molecules/CommandTabs/types.js +0 -0
- package/dist/browser/components/molecules/CopyButton/CopyButton.js +1 -0
- package/dist/browser/components/molecules/CopyButton/index.js +1 -0
- package/dist/browser/components/molecules/CopyButton/types.js +0 -0
- package/dist/browser/components/molecules/DimensionScoresCard.js +1 -0
- package/dist/browser/components/molecules/DropdownMenu.js +0 -0
- package/dist/browser/components/molecules/EntityCard.js +1 -0
- package/dist/browser/components/molecules/FiltersToolbar.js +1 -0
- package/dist/browser/components/molecules/FiltersToolbar.mobile.js +1 -0
- package/dist/browser/components/molecules/HoverPreview.js +1 -0
- package/dist/browser/components/molecules/InstallCommand/InstallCommand.js +1 -0
- package/dist/browser/components/molecules/InstallCommand/index.js +1 -0
- package/dist/browser/components/molecules/InstallCommand/types.js +0 -0
- package/dist/browser/components/molecules/LangSwitch.js +1 -0
- package/dist/browser/components/molecules/LangSwitchDropdown.js +1 -0
- package/dist/browser/components/molecules/LoaderBlock.js +1 -0
- package/dist/browser/components/molecules/LoaderBlock.mobile.js +1 -0
- package/dist/browser/components/molecules/MarkdownRenderer/MarkdownRenderer.js +2 -0
- package/dist/browser/components/molecules/MarkdownRenderer/formatInlineMarkdown.js +1 -0
- package/dist/browser/components/molecules/MarkdownRenderer/index.js +1 -0
- package/dist/browser/components/molecules/MarkdownRenderer/renderMarkdownTable.js +1 -0
- package/dist/browser/components/molecules/MarkdownRenderer/types.js +0 -0
- package/dist/browser/components/molecules/MobileNavMenu.js +1 -0
- package/dist/browser/components/molecules/NavItemCard.js +1 -0
- package/dist/browser/components/molecules/NavMain.js +1 -0
- package/dist/browser/components/molecules/NavUser.js +1 -0
- package/dist/browser/components/molecules/OverviewCard.js +1 -0
- package/dist/browser/components/molecules/SkeletonBlock/index.js +1 -0
- package/dist/browser/components/molecules/SkeletonBlock/index.mobile.js +1 -0
- package/dist/browser/components/molecules/SkeletonBlock/index.web.js +1 -0
- package/dist/browser/components/molecules/SkeletonBlock/types.js +0 -0
- package/dist/browser/components/molecules/SkeletonCircle/index.js +1 -0
- package/dist/browser/components/molecules/SkeletonCircle/index.mobile.js +1 -0
- package/dist/browser/components/molecules/SkeletonCircle/index.web.js +1 -0
- package/dist/browser/components/molecules/SkeletonCircle/types.js +0 -0
- package/dist/browser/components/molecules/SkeletonList/index.js +1 -0
- package/dist/browser/components/molecules/SkeletonList/index.mobile.js +1 -0
- package/dist/browser/components/molecules/SkeletonList/index.web.js +1 -0
- package/dist/browser/components/molecules/SkeletonList/types.js +0 -0
- package/dist/browser/components/molecules/StatCard.js +1 -0
- package/dist/browser/components/molecules/StatusChip.js +1 -0
- package/dist/browser/components/molecules/hover-previews/Doc.js +1 -0
- package/dist/browser/components/molecules/hover-previews/Media.js +1 -0
- package/dist/browser/components/molecules/hover-previews/Simple.js +1 -0
- package/dist/browser/components/molecules/hover-previews/Stats.js +1 -0
- package/dist/browser/components/molecules/hover-previews/User.js +1 -0
- package/dist/browser/components/native/BottomTabs.mobile.js +1 -0
- package/dist/browser/components/native/FlatListScreen.mobile.js +1 -0
- package/dist/browser/components/native/SheetMenu.mobile.js +1 -0
- package/dist/browser/components/organisms/AcademyLayout.js +1 -0
- package/dist/browser/components/organisms/AppHeader.js +1 -0
- package/dist/browser/components/organisms/AppHeader.mobile.js +1 -0
- package/dist/browser/components/organisms/AppLayout.js +1 -0
- package/dist/browser/components/organisms/AppSidebar.js +1 -0
- package/dist/browser/components/organisms/AppSidebar.mobile.js +0 -0
- package/dist/browser/components/organisms/EmptyDataList.js +1 -0
- package/dist/browser/components/organisms/EmptyDataList.mobile.js +1 -0
- package/dist/browser/components/organisms/EmptyDataList.types.js +0 -0
- package/dist/browser/components/organisms/EmptySearchResult.js +1 -0
- package/dist/browser/components/organisms/FAQSection.js +1 -0
- package/dist/browser/components/organisms/FeatureCarousel.js +1 -0
- package/dist/browser/components/organisms/FeaturesSection.js +1 -0
- package/dist/browser/components/organisms/Footer.js +1 -0
- package/dist/browser/components/organisms/GridLayout.js +1 -0
- package/dist/browser/components/organisms/Header.js +1 -0
- package/dist/browser/components/organisms/Header.mobile.js +1 -0
- package/dist/browser/components/organisms/HeroResponsive.js +1 -0
- package/dist/browser/components/organisms/HeroSection.js +1 -0
- package/dist/browser/components/organisms/ListCardPage.js +1 -0
- package/dist/browser/components/organisms/ListGridPage.js +1 -0
- package/dist/browser/components/organisms/ListPageResponsive.js +1 -0
- package/dist/browser/components/organisms/ListTablePage.js +1 -0
- package/dist/browser/components/organisms/ListTablePage.mobile.js +1 -0
- package/dist/browser/components/organisms/MarketingHeader.js +1 -0
- package/dist/browser/components/organisms/MarketingHeaderDesktop.js +1 -0
- package/dist/browser/components/organisms/MarketingHeaderMobile.js +1 -0
- package/dist/browser/components/organisms/MarketingLayout.js +1 -0
- package/dist/browser/components/organisms/ModelComparisonView.js +1 -0
- package/dist/browser/components/organisms/PageHeaderResponsive.js +1 -0
- package/dist/browser/components/organisms/PageHeaderResponsive.mobile.js +1 -0
- package/dist/browser/components/organisms/PricingCarousel.js +1 -0
- package/dist/browser/components/organisms/PricingSection.js +1 -0
- package/dist/browser/components/organisms/TestimonialCarousel.js +1 -0
- package/dist/browser/components/primitives/control.js +1 -0
- package/dist/browser/components/primitives/themed.js +1 -0
- package/dist/browser/components/providers/PackageManagerProvider.js +1 -0
- package/dist/browser/components/templates/lists/ListPageTemplate/index.js +1 -0
- package/dist/browser/components/templates/lists/ListPageTemplate/index.mobile.js +1 -0
- package/dist/browser/components/templates/lists/ListPageTemplate/index.web.js +1 -0
- package/dist/browser/components/templates/lists/ListPageTemplate/types.js +0 -0
- package/dist/browser/components/visualization/ComparisonView.js +1 -0
- package/dist/browser/components/visualization/ComparisonView.mobile.js +1 -0
- package/dist/browser/components/visualization/TimelineView.js +1 -0
- package/dist/browser/components/visualization/TimelineView.mobile.js +1 -0
- package/dist/browser/components/visualization/VisualizationCard.js +1 -0
- package/dist/browser/components/visualization/VisualizationCard.mobile.js +1 -0
- package/dist/browser/components/visualization/VisualizationGrid.js +1 -0
- package/dist/browser/components/visualization/VisualizationGrid.mobile.js +1 -0
- package/dist/browser/components/visualization/VisualizationRenderer.js +1 -0
- package/dist/browser/components/visualization/VisualizationRenderer.mobile.js +1 -0
- package/dist/browser/components/visualization/types.js +0 -0
- package/dist/browser/contracts.typecheck.js +1 -0
- package/dist/browser/design-system.feature.js +1 -0
- package/dist/browser/hooks/useListUrlState.js +1 -0
- package/dist/browser/i18n/translation.js +1 -0
- package/dist/browser/index.js +1 -1
- package/dist/browser/lib/keyboard.js +1 -0
- package/dist/browser/lib/utils.js +1 -0
- package/dist/browser/platform/useColorScheme.js +1 -0
- package/dist/browser/platform/useColorScheme.mobile.js +1 -0
- package/dist/browser/platform/useReducedMotion.js +1 -0
- package/dist/browser/platform/useReducedMotion.mobile.js +1 -0
- package/dist/browser/platform/useResponsive.js +1 -0
- package/dist/browser/platform/useResponsive.mobile.js +1 -0
- package/dist/browser/platform/withPlatformUI.js +1 -0
- package/dist/browser/renderers/form-contract/renderer.js +1 -0
- package/dist/browser/renderers/form-contract/rich-fields.js +1 -0
- package/dist/browser/renderers/form-contract/shell.js +1 -0
- package/dist/browser/renderers/form-contract/values.js +1 -0
- package/dist/browser/renderers/form-contract.js +1 -0
- package/dist/browser/renderers/index.js +1 -0
- package/dist/browser/theme/contracts.js +1 -0
- package/dist/browser/theme/index.js +1 -0
- package/dist/browser/theme/runtime-resolvers.js +1 -0
- package/dist/browser/theme/runtime.js +1 -0
- package/dist/browser/theme/tailwind-config.js +1 -0
- package/dist/browser/theme/tailwind-css.js +9 -0
- package/dist/browser/theme/tailwind-variables.js +1 -0
- package/dist/browser/theme/tailwind.js +1 -0
- package/dist/browser/theme/tokenBridge.js +1 -0
- package/dist/browser/theme/tokens.js +1 -0
- package/dist/browser/theme/variants.js +1 -0
- package/dist/browser/types/nativewind-env.d.js +0 -0
- package/dist/browser/types/navigation.js +0 -0
- package/dist/components/agent/AgentMonitor.js +1 -0
- package/dist/components/agent/ApprovalQueue.js +1 -0
- package/dist/components/agent/ApprovalQueue.mobile.js +1 -0
- package/dist/components/atoms/ActionButtons.js +1 -0
- package/dist/components/atoms/Button.d.ts +3 -2
- package/dist/components/atoms/Button.js +1 -0
- package/dist/components/atoms/Button.mobile.d.ts +3 -2
- package/dist/components/atoms/Button.mobile.js +1 -0
- package/dist/components/atoms/ButtonLink.js +1 -0
- package/dist/components/atoms/ButtonLink.mobile.js +1 -0
- package/dist/components/atoms/Cta.js +1 -0
- package/dist/components/atoms/Cta.mobile.js +1 -0
- package/dist/components/atoms/DataChips.js +1 -0
- package/dist/components/atoms/EmptyState.js +1 -0
- package/dist/components/atoms/ErrorState.js +1 -0
- package/dist/components/atoms/ErrorState.mobile.js +1 -0
- package/dist/components/atoms/Input.d.ts +4 -12
- package/dist/components/atoms/Input.js +1 -0
- package/dist/components/atoms/Input.mobile.d.ts +4 -13
- package/dist/components/atoms/Input.mobile.js +1 -0
- package/dist/components/atoms/Link.js +1 -0
- package/dist/components/atoms/Link.web.js +1 -0
- package/dist/components/atoms/LoaderCircular.js +1 -0
- package/dist/components/atoms/LoaderCircular.mobile.js +1 -0
- package/dist/components/atoms/NavBrand.js +1 -0
- package/dist/components/atoms/RankBadge.js +1 -0
- package/dist/components/atoms/ScoreBar.js +1 -0
- package/dist/components/atoms/Stepper.js +1 -0
- package/dist/components/atoms/Textarea.d.ts +4 -10
- package/dist/components/atoms/Textarea.js +1 -0
- package/dist/components/atoms/Textarea.mobile.d.ts +4 -13
- package/dist/components/atoms/Textarea.mobile.js +1 -0
- package/dist/components/data-table/DataTable.js +1 -0
- package/dist/components/data-table/DataTable.mobile.js +1 -0
- package/dist/components/data-table/DataTableToolbar.js +1 -0
- package/dist/components/data-table/DataTableToolbar.mobile.js +1 -0
- package/dist/components/data-table/DataTableToolbar.shared.js +1 -0
- package/dist/components/data-view/DataViewDetail.js +1 -0
- package/dist/components/data-view/DataViewList.js +1 -0
- package/dist/components/data-view/DataViewRenderer.js +1 -0
- package/dist/components/data-view/DataViewRenderer.mobile.js +1 -0
- package/dist/components/data-view/DataViewTable.d.ts +1 -1
- package/dist/components/data-view/DataViewTable.js +1 -0
- package/dist/components/data-view/DataViewTable.mobile.d.ts +1 -1
- package/dist/components/data-view/DataViewTable.mobile.js +1 -0
- package/dist/components/data-view/utils.js +1 -0
- package/dist/components/forms/ActionForm.js +1 -0
- package/dist/components/forms/FormCardLayout.js +1 -0
- package/dist/components/forms/FormDialog.js +1 -0
- package/dist/components/forms/FormLayout.js +1 -0
- package/dist/components/forms/FormOneByOneLayout.js +1 -0
- package/dist/components/forms/FormStepsLayout.js +1 -0
- package/dist/components/forms/ZodForm.js +1 -0
- package/dist/components/forms/controls/Autocomplete.d.ts +17 -0
- package/dist/components/forms/controls/Autocomplete.js +1 -0
- package/dist/components/forms/controls/Autocomplete.mobile.d.ts +17 -0
- package/dist/components/forms/controls/Autocomplete.mobile.js +1 -0
- package/dist/components/forms/controls/ChoiceControls.d.ts +26 -0
- package/dist/components/forms/controls/ChoiceControls.js +1 -0
- package/dist/components/forms/controls/ChoiceControls.mobile.d.ts +26 -0
- package/dist/components/forms/controls/ChoiceControls.mobile.js +1 -0
- package/dist/components/forms/controls/Combobox.d.ts +4 -0
- package/dist/components/forms/controls/Combobox.js +1 -0
- package/dist/components/forms/controls/Combobox.mobile.d.ts +2 -0
- package/dist/components/forms/controls/Combobox.mobile.js +1 -0
- package/dist/components/forms/controls/DateTimeControls.d.ts +20 -0
- package/dist/components/forms/controls/DateTimeControls.js +1 -0
- package/dist/components/forms/controls/DateTimeControls.mobile.d.ts +20 -0
- package/dist/components/forms/controls/DateTimeControls.mobile.js +1 -0
- package/dist/components/forms/controls/DropdownMenu.d.ts +1 -0
- package/dist/components/forms/controls/DropdownMenu.js +1 -0
- package/dist/components/forms/controls/DropdownMenu.mobile.d.ts +1 -0
- package/dist/components/forms/controls/DropdownMenu.mobile.js +1 -0
- package/dist/components/forms/controls/Field.d.ts +27 -0
- package/dist/components/forms/controls/Field.js +1 -0
- package/dist/components/forms/controls/Field.mobile.d.ts +2 -0
- package/dist/components/forms/controls/Field.mobile.js +1 -0
- package/dist/components/forms/controls/InputGroup.d.ts +1 -0
- package/dist/components/forms/controls/InputGroup.js +1 -0
- package/dist/components/forms/controls/InputGroup.mobile.d.ts +5 -0
- package/dist/components/forms/controls/InputGroup.mobile.js +1 -0
- package/dist/components/forms/controls/InputOTP.d.ts +1 -0
- package/dist/components/forms/controls/InputOTP.js +1 -0
- package/dist/components/forms/controls/InputOTP.mobile.d.ts +2 -0
- package/dist/components/forms/controls/InputOTP.mobile.js +1 -0
- package/dist/components/forms/controls/LoadingButton.d.ts +4 -0
- package/dist/components/forms/controls/LoadingButton.js +1 -0
- package/dist/components/forms/controls/LoadingButton.mobile.d.ts +4 -0
- package/dist/components/forms/controls/LoadingButton.mobile.js +1 -0
- package/dist/components/forms/controls/NativeSelect.d.ts +7 -0
- package/dist/components/forms/controls/NativeSelect.js +1 -0
- package/dist/components/forms/controls/NativeSelect.mobile.d.ts +2 -0
- package/dist/components/forms/controls/NativeSelect.mobile.js +1 -0
- package/dist/components/forms/controls/Select.d.ts +15 -0
- package/dist/components/forms/controls/Select.js +1 -0
- package/dist/components/forms/controls/Select.mobile.d.ts +13 -0
- package/dist/components/forms/controls/Select.mobile.js +1 -0
- package/dist/components/forms/controls/index.d.ts +11 -0
- package/dist/components/forms/controls/index.js +1 -0
- package/dist/components/forms/index.d.ts +8 -0
- package/dist/components/forms/index.js +1 -0
- package/dist/components/layout/Stack.d.ts +9 -0
- package/dist/components/layout/Stack.js +1 -0
- package/dist/components/layout/Stack.mobile.d.ts +13 -0
- package/dist/components/layout/Stack.mobile.js +1 -0
- package/dist/components/layout/index.d.ts +1 -0
- package/dist/components/layout/index.js +1 -0
- package/dist/components/legal/atoms/DefinitionList.js +1 -0
- package/dist/components/legal/atoms/KeyValueList.js +1 -0
- package/dist/components/legal/atoms/LegalCallout.d.ts +1 -1
- package/dist/components/legal/atoms/LegalCallout.js +1 -0
- package/dist/components/legal/atoms/LegalHeading.js +1 -0
- package/dist/components/legal/atoms/LegalList.d.ts +1 -1
- package/dist/components/legal/atoms/LegalList.js +1 -0
- package/dist/components/legal/atoms/LegalSection.d.ts +1 -1
- package/dist/components/legal/atoms/LegalSection.js +1 -0
- package/dist/components/legal/atoms/LegalText.js +1 -0
- package/dist/components/legal/molecules/Consent.js +1 -0
- package/dist/components/legal/molecules/ContactFields.js +1 -0
- package/dist/components/legal/molecules/LegalMeta.js +1 -0
- package/dist/components/legal/molecules/LegalTOC.js +1 -0
- package/dist/components/legal/organisms/ContactForm.js +1 -0
- package/dist/components/legal/organisms/GDPRDataRequest.js +1 -0
- package/dist/components/legal/organisms/GDPRRights.js +1 -0
- package/dist/components/legal/organisms/LegalPageLayout.js +1 -0
- package/dist/components/legal/templates/ContactTemplate.js +1 -0
- package/dist/components/legal/templates/CookiesTemplate.js +1 -0
- package/dist/components/legal/templates/PrivacyTemplate.js +1 -0
- package/dist/components/legal/templates/SalesTermsTemplate.js +1 -0
- package/dist/components/legal/templates/TermsTemplate.js +1 -0
- package/dist/components/marketing/MarketingCard.js +1 -0
- package/dist/components/marketing/MarketingCardsSection.js +1 -0
- package/dist/components/marketing/MarketingComparisonSection.js +1 -0
- package/dist/components/marketing/MarketingIconCard.js +1 -0
- package/dist/components/marketing/MarketingSection.js +1 -0
- package/dist/components/marketing/MarketingStepCard.js +1 -0
- package/dist/components/molecules/AiLinkButton.js +1 -0
- package/dist/components/molecules/Breadcrumbs.js +1 -0
- package/dist/components/molecules/CodeBlock/CodeBlock.js +1 -0
- package/dist/components/molecules/CodeBlock/index.js +1 -0
- package/dist/components/molecules/CodeBlock/types.js +0 -0
- package/dist/components/molecules/CommandPalette.js +1 -0
- package/dist/components/molecules/CommandSearchTrigger.js +1 -0
- package/dist/components/molecules/CommandTabs/CommandTabs.js +1 -0
- package/dist/components/molecules/CommandTabs/index.js +1 -0
- package/dist/components/molecules/CommandTabs/types.js +0 -0
- package/dist/components/molecules/CopyButton/CopyButton.js +1 -0
- package/dist/components/molecules/CopyButton/index.js +1 -0
- package/dist/components/molecules/CopyButton/types.js +0 -0
- package/dist/components/molecules/DimensionScoresCard.js +1 -0
- package/dist/components/molecules/DropdownMenu.js +0 -0
- package/dist/components/molecules/EntityCard.js +1 -0
- package/dist/components/molecules/FiltersToolbar.js +1 -0
- package/dist/components/molecules/FiltersToolbar.mobile.js +1 -0
- package/dist/components/molecules/HoverPreview.js +1 -0
- package/dist/components/molecules/InstallCommand/InstallCommand.js +1 -0
- package/dist/components/molecules/InstallCommand/index.js +1 -0
- package/dist/components/molecules/InstallCommand/types.js +0 -0
- package/dist/components/molecules/LangSwitch.js +1 -0
- package/dist/components/molecules/LangSwitchDropdown.js +1 -0
- package/dist/components/molecules/LoaderBlock.js +1 -0
- package/dist/components/molecules/LoaderBlock.mobile.js +1 -0
- package/dist/components/molecules/MarkdownRenderer/MarkdownRenderer.js +2 -0
- package/dist/components/molecules/MarkdownRenderer/formatInlineMarkdown.js +1 -0
- package/dist/components/molecules/MarkdownRenderer/index.js +1 -0
- package/dist/components/molecules/MarkdownRenderer/renderMarkdownTable.js +1 -0
- package/dist/components/molecules/MarkdownRenderer/types.js +0 -0
- package/dist/components/molecules/MobileNavMenu.js +1 -0
- package/dist/components/molecules/NavItemCard.js +1 -0
- package/dist/components/molecules/NavMain.js +1 -0
- package/dist/components/molecules/NavUser.js +1 -0
- package/dist/components/molecules/OverviewCard.js +1 -0
- package/dist/components/molecules/SkeletonBlock/index.js +1 -0
- package/dist/components/molecules/SkeletonBlock/index.mobile.js +1 -0
- package/dist/components/molecules/SkeletonBlock/index.web.js +1 -0
- package/dist/components/molecules/SkeletonBlock/types.js +0 -0
- package/dist/components/molecules/SkeletonCircle/index.js +1 -0
- package/dist/components/molecules/SkeletonCircle/index.mobile.js +1 -0
- package/dist/components/molecules/SkeletonCircle/index.web.js +1 -0
- package/dist/components/molecules/SkeletonCircle/types.js +0 -0
- package/dist/components/molecules/SkeletonList/index.js +1 -0
- package/dist/components/molecules/SkeletonList/index.mobile.js +1 -0
- package/dist/components/molecules/SkeletonList/index.web.js +1 -0
- package/dist/components/molecules/SkeletonList/types.js +0 -0
- package/dist/components/molecules/StatCard.js +1 -0
- package/dist/components/molecules/StatusChip.d.ts +1 -1
- package/dist/components/molecules/StatusChip.js +1 -0
- package/dist/components/molecules/hover-previews/Doc.js +1 -0
- package/dist/components/molecules/hover-previews/Media.js +1 -0
- package/dist/components/molecules/hover-previews/Simple.js +1 -0
- package/dist/components/molecules/hover-previews/Stats.js +1 -0
- package/dist/components/molecules/hover-previews/User.js +1 -0
- package/dist/components/native/BottomTabs.mobile.js +1 -0
- package/dist/components/native/FlatListScreen.mobile.js +1 -0
- package/dist/components/native/SheetMenu.mobile.js +1 -0
- package/dist/components/organisms/AcademyLayout.js +1 -0
- package/dist/components/organisms/AppHeader.js +1 -0
- package/dist/components/organisms/AppHeader.mobile.js +1 -0
- package/dist/components/organisms/AppLayout.js +1 -0
- package/dist/components/organisms/AppSidebar.js +1 -0
- package/dist/components/organisms/AppSidebar.mobile.js +0 -0
- package/dist/components/organisms/EmptyDataList.js +1 -0
- package/dist/components/organisms/EmptyDataList.mobile.js +1 -0
- package/dist/components/organisms/EmptyDataList.types.js +0 -0
- package/dist/components/organisms/EmptySearchResult.js +1 -0
- package/dist/components/organisms/FAQSection.js +1 -0
- package/dist/components/organisms/FeatureCarousel.js +1 -0
- package/dist/components/organisms/FeaturesSection.js +1 -0
- package/dist/components/organisms/Footer.js +1 -0
- package/dist/components/organisms/GridLayout.js +1 -0
- package/dist/components/organisms/Header.js +1 -0
- package/dist/components/organisms/Header.mobile.js +1 -0
- package/dist/components/organisms/HeroResponsive.js +1 -0
- package/dist/components/organisms/HeroSection.js +1 -0
- package/dist/components/organisms/ListCardPage.js +1 -0
- package/dist/components/organisms/ListGridPage.js +1 -0
- package/dist/components/organisms/ListPageResponsive.js +1 -0
- package/dist/components/organisms/ListTablePage.js +1 -0
- package/dist/components/organisms/ListTablePage.mobile.js +1 -0
- package/dist/components/organisms/MarketingHeader.js +1 -0
- package/dist/components/organisms/MarketingHeaderDesktop.js +1 -0
- package/dist/components/organisms/MarketingHeaderMobile.js +1 -0
- package/dist/components/organisms/MarketingLayout.js +1 -0
- package/dist/components/organisms/ModelComparisonView.js +1 -0
- package/dist/components/organisms/PageHeaderResponsive.js +1 -0
- package/dist/components/organisms/PageHeaderResponsive.mobile.js +1 -0
- package/dist/components/organisms/PricingCarousel.js +1 -0
- package/dist/components/organisms/PricingSection.js +1 -0
- package/dist/components/organisms/TestimonialCarousel.js +1 -0
- package/dist/components/primitives/control.d.ts +894 -0
- package/dist/components/primitives/control.js +1 -0
- package/dist/components/primitives/themed.d.ts +881 -0
- package/dist/components/primitives/themed.js +1 -0
- package/dist/components/providers/PackageManagerProvider.js +1 -0
- package/dist/components/templates/lists/ListPageTemplate/index.js +1 -0
- package/dist/components/templates/lists/ListPageTemplate/index.mobile.js +1 -0
- package/dist/components/templates/lists/ListPageTemplate/index.web.js +1 -0
- package/dist/components/templates/lists/ListPageTemplate/types.js +0 -0
- package/dist/components/visualization/ComparisonView.js +1 -0
- package/dist/components/visualization/ComparisonView.mobile.js +1 -0
- package/dist/components/visualization/TimelineView.js +1 -0
- package/dist/components/visualization/TimelineView.mobile.js +1 -0
- package/dist/components/visualization/VisualizationCard.js +1 -0
- package/dist/components/visualization/VisualizationCard.mobile.js +1 -0
- package/dist/components/visualization/VisualizationGrid.js +1 -0
- package/dist/components/visualization/VisualizationGrid.mobile.js +1 -0
- package/dist/components/visualization/VisualizationRenderer.js +1 -0
- package/dist/components/visualization/VisualizationRenderer.mobile.js +1 -0
- package/dist/components/visualization/types.js +0 -0
- package/dist/contracts.typecheck.js +1 -0
- package/dist/design-system.feature.d.ts +1 -0
- package/dist/design-system.feature.js +1 -0
- package/dist/hooks/useListUrlState.js +1 -0
- package/dist/i18n/translation.js +1 -0
- package/dist/index.d.ts +4 -11
- package/dist/index.js +1 -2
- package/dist/lib/keyboard.js +1 -0
- package/dist/lib/utils.js +1 -0
- package/dist/platform/useColorScheme.js +1 -0
- package/dist/platform/useColorScheme.mobile.js +1 -0
- package/dist/platform/useReducedMotion.js +1 -0
- package/dist/platform/useReducedMotion.mobile.js +1 -0
- package/dist/platform/useResponsive.js +1 -0
- package/dist/platform/useResponsive.mobile.js +1 -0
- package/dist/platform/withPlatformUI.js +1 -0
- package/dist/renderers/form-contract/renderer.d.ts +3 -0
- package/dist/renderers/form-contract/renderer.js +1 -0
- package/dist/renderers/form-contract/rich-fields.d.ts +23 -0
- package/dist/renderers/form-contract/rich-fields.js +1 -0
- package/dist/renderers/form-contract/shell.d.ts +35 -0
- package/dist/renderers/form-contract/shell.js +1 -0
- package/dist/renderers/form-contract/values.d.ts +27 -0
- package/dist/renderers/form-contract/values.js +1 -0
- package/dist/renderers/form-contract.d.ts +1 -3
- package/dist/renderers/form-contract.js +1 -0
- package/dist/renderers/index.js +1 -0
- package/dist/theme/contracts.d.ts +3 -0
- package/dist/theme/contracts.js +1 -0
- package/dist/theme/index.d.ts +6 -0
- package/dist/theme/index.js +1 -0
- package/dist/theme/runtime-resolvers.d.ts +26 -0
- package/dist/theme/runtime-resolvers.js +1 -0
- package/dist/theme/runtime.d.ts +34 -0
- package/dist/theme/runtime.js +1 -0
- package/dist/theme/tailwind-config.d.ts +15 -0
- package/dist/theme/tailwind-config.js +1 -0
- package/dist/theme/tailwind-css.d.ts +2 -0
- package/dist/theme/tailwind-css.js +9 -0
- package/dist/theme/tailwind-variables.d.ts +19 -0
- package/dist/theme/tailwind-variables.js +1 -0
- package/dist/theme/tailwind.d.ts +3 -0
- package/dist/theme/tailwind.js +1 -0
- package/dist/theme/tokenBridge.js +1 -0
- package/dist/theme/tokens.js +1 -0
- package/dist/theme/variants.d.ts +1 -1
- package/dist/theme/variants.js +1 -0
- package/dist/types/nativewind-env.d.js +0 -0
- package/dist/types/navigation.js +0 -0
- package/package.json +70 -9
package/README.md
CHANGED
|
@@ -51,6 +51,16 @@ const ui = withPlatformUI({
|
|
|
51
51
|
});
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
+
Focused public subpaths are available when consumers do not need the full root
|
|
55
|
+
barrel:
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
import { themeSpecToTailwindPreset } from "@contractspec/lib.design-system/theme";
|
|
59
|
+
import { Select } from "@contractspec/lib.design-system/controls";
|
|
60
|
+
import { FormDialog } from "@contractspec/lib.design-system/forms";
|
|
61
|
+
import { HStack } from "@contractspec/lib.design-system/layout";
|
|
62
|
+
```
|
|
63
|
+
|
|
54
64
|
### Resolve contract-backed themes
|
|
55
65
|
|
|
56
66
|
```ts
|
|
@@ -67,6 +77,40 @@ const webTokens = resolvePlatformTheme(
|
|
|
67
77
|
);
|
|
68
78
|
```
|
|
69
79
|
|
|
80
|
+
### Translate ThemeSpec into Tailwind tokens
|
|
81
|
+
|
|
82
|
+
Use the Tailwind bridge when a `ThemeSpec` should drive CSS variables and
|
|
83
|
+
utility names without requiring a generated file:
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import {
|
|
87
|
+
resolveThemeModeTokens,
|
|
88
|
+
themeSpecToCssVariables,
|
|
89
|
+
themeSpecToTailwindCss,
|
|
90
|
+
themeSpecToTailwindPreset,
|
|
91
|
+
} from "@contractspec/lib.design-system";
|
|
92
|
+
|
|
93
|
+
const tokens = resolveThemeModeTokens(themeSpec, "light", {
|
|
94
|
+
targets: ["tenant:acme"],
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
export default themeSpecToTailwindPreset(tokens);
|
|
98
|
+
|
|
99
|
+
const variables = themeSpecToCssVariables(themeSpec, {
|
|
100
|
+
targets: ["tenant:acme"],
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
const cssText = themeSpecToTailwindCss(variables, {
|
|
104
|
+
includeCustomVariant: true,
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The bridge emits stable variables such as `--ds-color-primary`,
|
|
109
|
+
`--ds-radius-md`, and `--ds-space-sm`, plus Tailwind v4 `@theme inline`
|
|
110
|
+
aliases like `--color-primary: var(--ds-color-primary)`. Color values are
|
|
111
|
+
passed through unchanged, so OKLCH tokens such as
|
|
112
|
+
`oklch(0.72 0.11 221.19)` can be authored directly in `ThemeSpec`.
|
|
113
|
+
|
|
70
114
|
### Provide translations to contract-driven renderers
|
|
71
115
|
|
|
72
116
|
```tsx
|
|
@@ -86,6 +130,67 @@ const resolver = createTranslationResolver({
|
|
|
86
130
|
</DesignSystemTranslationProvider>;
|
|
87
131
|
```
|
|
88
132
|
|
|
133
|
+
### Provide contract-backed themes to controls
|
|
134
|
+
|
|
135
|
+
```tsx
|
|
136
|
+
import {
|
|
137
|
+
DesignSystemThemeProvider,
|
|
138
|
+
Input,
|
|
139
|
+
Select,
|
|
140
|
+
} from "@contractspec/lib.design-system";
|
|
141
|
+
|
|
142
|
+
<DesignSystemThemeProvider
|
|
143
|
+
theme={themeSpec}
|
|
144
|
+
targets={["tenant:acme"]}
|
|
145
|
+
mode="dark"
|
|
146
|
+
applyCssVariables
|
|
147
|
+
>
|
|
148
|
+
<Input
|
|
149
|
+
componentKey="Input"
|
|
150
|
+
themeVariant="default"
|
|
151
|
+
placeholderI18n="form.customerName.placeholder"
|
|
152
|
+
/>
|
|
153
|
+
<Select
|
|
154
|
+
componentKey="Select"
|
|
155
|
+
options={[{ labelI18n: "status.draft", value: "draft" }]}
|
|
156
|
+
/>
|
|
157
|
+
</DesignSystemThemeProvider>;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Use form controls from the design-system boundary
|
|
161
|
+
|
|
162
|
+
The root barrel exposes themed and translation-aware controls for product
|
|
163
|
+
surfaces: `Button`, `Input`, `Textarea`, `Select`, `NativeSelect`,
|
|
164
|
+
`Autocomplete`, `Combobox`, `Checkbox`, `RadioGroup`, `Switch`, `DatePicker`,
|
|
165
|
+
`TimePicker`, `DateTimePicker`, `DateRangePicker`, `Field*`, `InputGroup`,
|
|
166
|
+
`InputOTP`, `LoadingButton`, plus `Box`, `HStack`, and `VStack`.
|
|
167
|
+
|
|
168
|
+
`Field*` includes semantic `FieldSet`, `FieldLegend`, `FieldGroup`,
|
|
169
|
+
`FieldContent`, `FieldLabel`, `FieldDescription`, `FieldError`, and
|
|
170
|
+
`FieldSeparator` wrappers so contract-driven forms can preserve accessible
|
|
171
|
+
legend, description, invalid, and grouped-control structure.
|
|
172
|
+
|
|
173
|
+
### Render forms on mobile through the shared renderer
|
|
174
|
+
|
|
175
|
+
Use the focused shared renderer subpath when rendering `FormSpec` contracts in
|
|
176
|
+
Expo or React Native apps:
|
|
177
|
+
|
|
178
|
+
```tsx
|
|
179
|
+
import { formRenderer } from "@contractspec/lib.design-system/renderers";
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Expo apps must keep the presentation Metro aliases enabled so design-system
|
|
183
|
+
imports of `@contractspec/lib.ui-kit-web/ui/*` are remapped to
|
|
184
|
+
`@contractspec/lib.ui-kit/ui/*` at bundle time:
|
|
185
|
+
|
|
186
|
+
```js
|
|
187
|
+
const {
|
|
188
|
+
withPresentationMetroAliases,
|
|
189
|
+
} = require("@contractspec/lib.presentation-runtime-core");
|
|
190
|
+
|
|
191
|
+
module.exports = withPresentationMetroAliases(config, { monorepoRoot });
|
|
192
|
+
```
|
|
193
|
+
|
|
89
194
|
### Render the canonical account grid
|
|
90
195
|
|
|
91
196
|
The canonical data-table example lives in
|
|
@@ -169,6 +274,8 @@ hidden-column recovery without widening the primitive table API.
|
|
|
169
274
|
- `defaultTokens` and token interfaces from `./theme/tokens`
|
|
170
275
|
- `mapTokensForPlatform` from `./theme/tokenBridge`
|
|
171
276
|
- `resolveThemeSpecTokens`, `resolveThemeRefTokens`, and `resolvePlatformTheme` from `./theme/contracts`
|
|
277
|
+
- `resolveThemeModeTokens`, `themeSpecToCssVariables`, `themeSpecToTailwindTheme`, `themeSpecToTailwindPreset`, and `themeSpecToTailwindCss`
|
|
278
|
+
- `DesignSystemThemeProvider`, `useDesignSystemTheme`, and `useComponentTheme`
|
|
172
279
|
- theme variants
|
|
173
280
|
- `withPlatformUI`
|
|
174
281
|
- `useColorScheme`
|
|
@@ -178,8 +285,9 @@ hidden-column recovery without widening the primitive table API.
|
|
|
178
285
|
### Renderers and hooks
|
|
179
286
|
|
|
180
287
|
- renderer exports from `./renderers`
|
|
181
|
-
- form-contract renderer support, including readonly, autocomplete, address, phone, date, time,
|
|
288
|
+
- form-contract renderer support, including readonly, autocomplete, address, phone, date, time, datetime, semantic FormSpec groups, grid layout hints, and text/textarea input groups
|
|
182
289
|
- translation-aware rendering through `DesignSystemTranslationProvider` and `createTranslationResolver`
|
|
290
|
+
- theme-aware form controls and stack primitives that consume ThemeSpec component variant props
|
|
183
291
|
- hooks such as `useListUrlState`
|
|
184
292
|
- navigation-related shared types
|
|
185
293
|
|
|
@@ -203,9 +311,12 @@ The root barrel at `src/index.ts` is the main public API for this package.
|
|
|
203
311
|
|
|
204
312
|
The export map is broad, but it is centralized:
|
|
205
313
|
|
|
206
|
-
- theme and
|
|
207
|
-
-
|
|
208
|
-
-
|
|
314
|
+
- `.` for backward-compatible root imports across theme, platform, renderers, controls, and composed components
|
|
315
|
+
- `./theme` for ThemeSpec runtime, platform token mapping, and Tailwind bridge helpers
|
|
316
|
+
- `./controls` for themed and translated controls
|
|
317
|
+
- `./forms` for form controls, layouts, and `ZodForm`
|
|
318
|
+
- `./layout` for `Box`, `HStack`, and `VStack`
|
|
319
|
+
- `./renderers` for focused renderer imports such as `formRenderer`
|
|
209
320
|
- hooks and shared types
|
|
210
321
|
|
|
211
322
|
The package also ships registry metadata and build support:
|
|
@@ -219,7 +330,7 @@ The package also ships registry metadata and build support:
|
|
|
219
330
|
- Token names and token shapes are compatibility surface.
|
|
220
331
|
- `mapTokensForPlatform()` deliberately returns different token shapes for web and native, and can now map resolved contract-backed tokens.
|
|
221
332
|
- `withPlatformUI()` is a lightweight adapter, not a full runtime framework.
|
|
222
|
-
-
|
|
333
|
+
- `DesignSystemThemeProvider` resolves `ThemeSpec` / `ThemeRef` tokens, scoped overrides, and component variant default props. Explicit caller props win over theme defaults.
|
|
223
334
|
- The root barrel is broad and therefore high-blast-radius.
|
|
224
335
|
- This package depends on both `ui-kit` and `ui-kit-web`.
|
|
225
336
|
- The package includes legal, marketing, agent, app-shell, and visualization compositions, not just low-level primitives.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as E,jsxs as A}from"react/jsx-runtime";import{Badge as L}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as O,CardContent as Q,CardHeader as T}from"@contractspec/lib.ui-kit-web/ui/card";import{cn as K}from"@contractspec/lib.ui-kit-web/ui/utils";export function AgentMonitor({title:G="Agent Activity",sessions:z,highlightStatus:I="escalated",onSelectSession:F,className:J}){return A(O,{className:J,children:[E(T,{children:E("h3",{className:"font-semibold text-xl",children:G})}),E(Q,{className:"space-y-3",children:z.length===0?E("p",{className:"text-muted-foreground text-sm",children:"No active sessions in the last hour."}):E("div",{className:"divide-y divide-border rounded-md border",children:z.map((q)=>A("button",{type:"button",onClick:()=>F?.(q),className:K("flex w-full items-center gap-4 px-4 py-3 text-left transition hover:bg-muted/40",!F&&"cursor-default"),children:[A("div",{className:"min-w-0 flex-1",children:[A("p",{className:"font-medium",children:[q.agent," ",A("span",{className:"text-muted-foreground text-sm",children:["· ",q.tenantId??"global"]})]}),A("p",{className:"text-muted-foreground text-sm",children:[q.iterations??0," turns · Updated"," ",V(q.updatedAt)]})]}),A("div",{className:"flex items-center gap-3",children:[typeof q.confidence==="number"&&E(U,{value:q.confidence}),E(L,{variant:q.status===I?"destructive":"secondary",children:q.status})]})]},q.sessionId))})})]})}function U({value:G}){const z=Math.round(G*100);return A("div",{className:K("rounded-full px-3 py-1 font-medium text-sm",z>=75?"bg-emerald-500/15 text-emerald-500":"bg-amber-500/15 text-amber-600"),children:[z,"%"]})}function V(G){const z=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),I=Math.round((Date.now()-new Date(G).getTime())/60000);if(Math.abs(I)<60)return z.format(-I,"minute");const F=Math.round(I/60);if(Math.abs(F)<24)return z.format(-F,"hour");const J=Math.round(F/24);return z.format(-J,"day")}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as E,jsxs as C}from"react/jsx-runtime";import{useContractTable as W}from"@contractspec/lib.presentation-runtime-react";import{Badge as X}from"@contractspec/lib.ui-kit-web/ui/badge";import{HStack as Y}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as L}from"@contractspec/lib.ui-kit-web/ui/text";import{Button as O}from"../atoms/Button";import{DataTable as Z}from"../data-table/DataTable";export function ApprovalQueue({title:F="Approvals",description:G="Requests escalated by AI agents",requests:I,onApprove:J,onReject:K,className:P,emptyState:Q=E(L,{className:"text-muted-foreground",children:"Nothing waiting for review."})}){const U=W({data:I,columns:[{id:"agent",header:"Agent",accessor:(z)=>z.agentId,cell:({item:z})=>E(L,{className:"font-medium",children:z.agentId})},{id:"reason",header:"Reason",accessor:(z)=>z.reason,cell:({item:z})=>E(L,{className:"max-w-sm",children:z.reason})},{id:"tenant",header:"Tenant",accessor:(z)=>z.tenantId??"—"},{id:"requested",header:"Requested",accessor:(z)=>h(z.requestedAt)},{id:"status",header:"Status",accessor:(z)=>z.status,cell:({item:z})=>E(X,{variant:$(z.status),children:z.status})},{id:"actions",header:"Actions",canSort:!1,canHide:!1,canResize:!1,cell:({item:z})=>C(Y,{gap:"sm",children:[E(O,{size:"sm",variant:"secondary",disabled:z.status!=="pending",onPress:()=>K?.(z),children:"Reject"}),E(O,{size:"sm",disabled:z.status!=="pending",onPress:()=>J?.(z),children:"Approve"})]})}]});return E(Z,{controller:U,title:F,description:G,className:P,emptyState:Q})}function $(F){switch(F){case"approved":return"default";case"rejected":return"destructive";default:return"secondary"}}function h(F){const G=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),I=Math.round((Date.now()-new Date(F).getTime())/60000);if(Math.abs(I)<60)return G.format(-I,"minute");const J=Math.round(I/60);if(Math.abs(J)<24)return G.format(-J,"hour");const K=Math.round(J/24);return G.format(-K,"day")}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as E,jsxs as C}from"react/jsx-runtime";import{useContractTable as W}from"@contractspec/lib.presentation-runtime-react";import{Badge as X}from"@contractspec/lib.ui-kit/ui/badge";import{HStack as Y}from"@contractspec/lib.ui-kit/ui/stack";import{Text as L}from"@contractspec/lib.ui-kit/ui/text";import{Button as O}from"../atoms/Button";import{DataTable as Z}from"../data-table/DataTable";export function ApprovalQueue({title:F="Approvals",description:G="Requests escalated by AI agents",requests:I,onApprove:J,onReject:K,className:P,emptyState:Q=E(L,{className:"text-muted-foreground",children:"Nothing waiting for review."})}){const U=W({data:I,columns:[{id:"agent",header:"Agent",accessor:(z)=>z.agentId,cell:({item:z})=>E(L,{className:"font-medium",children:z.agentId})},{id:"reason",header:"Reason",accessor:(z)=>z.reason,cell:({item:z})=>E(L,{className:"max-w-sm",children:z.reason})},{id:"tenant",header:"Tenant",accessor:(z)=>z.tenantId??"—"},{id:"requested",header:"Requested",accessor:(z)=>h(z.requestedAt)},{id:"status",header:"Status",accessor:(z)=>z.status,cell:({item:z})=>E(X,{variant:$(z.status),children:z.status})},{id:"actions",header:"Actions",canSort:!1,canHide:!1,canResize:!1,cell:({item:z})=>C(Y,{gap:"sm",children:[E(O,{size:"sm",variant:"secondary",disabled:z.status!=="pending",onPress:()=>K?.(z),children:"Reject"}),E(O,{size:"sm",disabled:z.status!=="pending",onPress:()=>J?.(z),children:"Approve"})]})}]});return E(Z,{controller:U,title:F,description:G,className:P,emptyState:Q})}function $(F){switch(F){case"approved":return"default";case"rejected":return"destructive";default:return"secondary"}}function h(F){const G=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),I=Math.round((Date.now()-new Date(F).getTime())/60000);if(Math.abs(I)<60)return G.format(-I,"minute");const J=Math.round(I/60);if(Math.abs(J)<24)return G.format(-J,"hour");const K=Math.round(J/24);return G.format(-K,"day")}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as C,jsxs as k}from"react/jsx-runtime";import{Box as O}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as P}from"@contractspec/lib.ui-kit-web/ui/text";import{cva as Q}from"class-variance-authority";import{Trash2 as U,Edit as W,ToggleLeft as K,ToggleRight as M,Eye as X}from"lucide-react";import{Button as Y}from"./Button";const V=Q("",{variants:{tone:{neutral:"default",danger:"destructive",subtle:"secondary",outline:"outline"},size:{sm:"sm",md:"default",lg:"lg",icon:"icon"}},defaultVariants:{tone:"neutral",size:"md"}});function Z(q){switch(q){case"danger":return"destructive";case"subtle":return"secondary";case"outline":return"outline";default:return"default"}}function $(q){switch(q){case"sm":return"sm";case"lg":return"lg";case"icon":return"icon";default:return"default"}}function F({tone:q="neutral",size:G="md",label:H,iconLeft:J,...N}){return k(Y,{variant:Z(q||"neutral"),size:$(G||"md"),...N,children:[J?C(O,{className:"mr-2 inline-flex h-4 w-4",children:J}):null,C(P,{children:H})]})}export function EditButton(q){return C(F,{iconLeft:C(W,{className:"h-4 w-4"}),...q})}export function DeleteButton(q){return C(F,{iconLeft:C(U,{className:"h-4 w-4"}),tone:"danger",...q})}export function ViewButton(q){return C(F,{iconLeft:C(X,{className:"h-4 w-4"}),...q})}export function ToggleButton(q){const{active:G,...H}=q;return C(F,{iconLeft:G?C(K,{className:"h-4 w-4"}):C(M,{className:"h-4 w-4"}),...H})}export function ToggleLeftButton(q){return C(F,{iconLeft:C(K,{className:"h-4 w-4"}),...q})}export function ToggleRightButton(q){return C(F,{iconLeft:C(M,{className:"h-4 w-4"}),...q})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as H,jsxs as _,Fragment as O}from"react/jsx-runtime";import{Button as C}from"@contractspec/lib.ui-kit-web/ui/button";import{Loader2 as q}from"lucide-react";import{useThemedPrimitive as N,useTranslatedNode as j,useTranslatedText as w}from"../primitives/themed";export function Button({children:J,loading:z,spinnerPlacement:Q="start",onPress:R,onPressIn:B,onPressOut:A,onLongPress:x,onTouchStart:F,onTouchEnd:W,onTouchCancel:E,onMouseDown:K,onMouseUp:S,onClick:U,className:V,disabled:f,componentKey:v,themeVariant:k,labelI18n:X,ariaLabelI18n:D,...G}){const Y=N({defaultComponentKey:"Button",componentKey:v,themeVariant:k,className:V}),Z=j(),L=w(),$=Boolean(f||z),M=R?()=>{R()}:U,y=!G.asChild?_(O,{children:[z&&Q==="start"?H(q,{className:"h-4 w-4 animate-spin"}):null,Z(X??J),z&&Q==="end"?H(q,{className:"h-4 w-4 animate-spin"}):null]}):Z(X??J);return H(C,{...Y.props,...G,className:Y.className,disabled:$,"aria-busy":z?!0:void 0,"aria-disabled":$?!0:void 0,"aria-label":L(D),onClick:M,onMouseDown:K||B,onMouseUp:S||A,onTouchStart:F,onTouchEnd:W||A,onTouchCancel:E||A,type:G?.type??"button",children:y})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as q,jsxs as L}from"react/jsx-runtime";import{Button as H}from"@contractspec/lib.ui-kit/ui/button";import{HStack as S}from"@contractspec/lib.ui-kit/ui/stack";import{Text as k}from"@contractspec/lib.ui-kit/ui/text";import{ActivityIndicator as G}from"react-native";import{useThemedPrimitive as A,useTranslatedNode as B,useTranslatedText as K}from"../primitives/themed";export function Button({children:J,loading:C,loadingText:M,spinnerPlacement:E="start",disabled:O,className:Q,componentKey:R,themeVariant:U,labelI18n:W,ariaLabelI18n:X,...z}){const F=A({defaultComponentKey:"Button",componentKey:R,themeVariant:U,className:Q}),Y=B(),Z=K(),$=Boolean(O||C),D=C?L(S,{className:"items-center gap-x-2",children:[E==="start"?q(G,{size:"small",color:z.variant==="outline"?"#6b7280":"#ffffff"}):null,q(k,{children:M||"Loading…"}),E==="end"?q(G,{size:"small",color:z.variant==="outline"?"#6b7280":"#ffffff"}):null]}):Y(W??J);return q(H,{...F.props,disabled:$,className:F.className,accessibilityLabel:Z(X),...z,children:D})}export default Button;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as i}from"react/jsx-runtime";import*as s from"react";import{Button as B}from"./Button";import{Link as L}from"./Link.web";export function ButtonLink({href:p,target:l,rel:a,replace:P,loading:o,disabled:n,children:c,onClick:e,...k}){const r=Boolean(n||o),u=s.useCallback((t)=>{if(r){t.preventDefault();t.stopPropagation();return}e?.(t)},[r,e]);return i(B,{...k,disabled:n,loading:o,asChild:!0,children:i(L,{href:p,target:l,rel:a,onClick:u,children:c})})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as U}from"react/jsx-runtime";import*as S from"react";import{Linking as K}from"react-native";import{Button as T}from"./Button.mobile";export function ButtonLink({href:q,replace:D,loading:F,disabled:G,onPressIn:M,onPressOut:N,...H}){const J=Boolean(G||F),Q=S.useCallback(()=>{if(J)return;try{const A=require("expo-router");if(A?.Link){const z=A.router??A.useRouter?.();if(z?.replace&&D)z.replace(q);else if(z?.push)z.push(q);else K.openURL(q);return}}catch{}K.openURL(q)},[J,q,D]);return U(T,{...H,onPress:Q,loading:F,disabled:G,onPressIn:M,onPressOut:N,children:H.children})}export default ButtonLink;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as i}from"react/jsx-runtime";import{cva as f}from"class-variance-authority";import{Button as h}from"./Button";import{ButtonLink as B}from"./ButtonLink";const H=f("",{variants:{size:{sm:"sm",md:"md",lg:"lg",touch:"touch"},emphasis:{default:"default",subtle:"secondary",strong:"default"}},defaultVariants:{size:"touch",emphasis:"default"}});export function Cta({capture:t,ctaName:n,as:u="button",href:c,onClick:l,size:m="touch",emphasis:p="default",children:a,...e}){const o=(d)=>{if(n)try{if(t)t(n)}catch{}l?.(d)},s=m,r=p==="subtle"?"secondary":"default";if(u==="a")return i(B,{size:s,variant:r,...e,href:c,onClick:o,children:a});return i(h,{size:s,variant:r,onClick:o,...e,children:a})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as K}from"react/jsx-runtime";import{Button as J}from"./Button";export function Cta({capture:D,ctaName:q,size:E="touch",onClick:F,children:G,ref:H,...I}){return K(J,{size:E,onPress:()=>{try{if(q){if(D)D(q);let v;try{v=require("posthog-react-native").default??require("posthog-react-native")}catch{}if(v&&typeof v.capture==="function")v.capture("cta_click",{cta:q});else{const A=globalThis.posthog;if(A&&typeof A.capture==="function")A.capture("cta_click",{cta:q})}}}catch{}F?.()},ref:H,...I,children:G})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as i,jsxs as o}from"react/jsx-runtime";import{cva as l}from"class-variance-authority";import{Calendar as c,Clock as p,MapPin as m}from"lucide-react";const r=l("inline-flex items-center gap-1 text-base text-muted-foreground",{variants:{size:{sm:"text-sm",md:"text-base"},tone:{default:"",muted:"opacity-85"}},defaultVariants:{size:"md",tone:"default"}});export function DateChip({value:t,...a}){if(!t)return null;let n="";try{n=(typeof t==="string"?new Date(t):t).toLocaleDateString()}catch{n=String(t)}return o("span",{className:r(a),children:[i(c,{className:"h-4 w-4"})," ",n]})}export function TimeChip({value:t,...a}){if(!t)return null;let n="";try{n=(typeof t==="string"?new Date(t):t).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{n=String(t)}return o("span",{className:r(a),children:[i(p,{className:"h-4 w-4"})," ",n]})}export function PlaceChip({label:t,...a}){if(!t)return null;return o("span",{className:r(a),children:[i(m,{className:"h-4 w-4"})," ",t]})}export function DurationChip({minutes:t,...a}){if(t==null)return null;const n=Math.floor(t/60),e=t%60,s=n>0?`${n}h${e>0?String(e).padStart(2,"0"):""}`:`${e}min`;return o("span",{className:r(a),children:[i(p,{className:"h-4 w-4"})," ",s]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as h}from"react/jsx-runtime";import{EmptyState as g}from"@contractspec/lib.ui-kit-web/ui/empty-state";export function EmptyState(d){return h(g,{...d})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as g,jsxs as q}from"react/jsx-runtime";import{Empty as Q,EmptyContent as U,EmptyDescription as V,EmptyHeader as W,EmptyTitle as X}from"@contractspec/lib.ui-kit-web/ui/empty";import{Button as I}from"../atoms/Button";import{ButtonLink as Y}from"../atoms/ButtonLink";export function ErrorState({title:J="Something went wrong",description:v,icon:K,onRetry:z,retryLabel:M="Retry",supportHref:A,onContactSupport:F,supportLabel:G="Contact support",className:O}){const P=(()=>{if(A)return g(Y,{variant:"ghost",href:A,children:G});if(F)return g(I,{variant:"ghost",onPress:F,children:G});return null})();return q(Q,{className:O,children:[q(W,{children:[K,g(X,{children:J}),v?g(V,{children:v}):null]}),g(U,{children:q("div",{className:"flex flex-wrap items-center gap-2",children:[z?g(I,{onPress:z,children:M}):null,P]})})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as t,jsxs as l}from"react/jsx-runtime";import*as N from"react";import{Linking as g,Text as n,View as c}from"react-native";import{Button as i}from"../atoms/Button.mobile";export function ErrorState({title:m="Something went wrong",description:o,icon:p,onRetry:r,retryLabel:s="Retry",supportHref:e,onContactSupport:a,supportLabel:u="Contact support",className:R}){const d=N.useCallback(()=>{if(e)g.openURL(e).catch(()=>{});else a?.()},[e,a]);return l(c,{className:["items-center p-6",R].filter(Boolean).join(" "),children:[p,t(n,{className:"font-medium text-lg",children:m}),o?t(n,{className:"mt-1 text-base text-muted-foreground",children:o}):null,l(c,{className:"mt-3 flex-row items-center gap-2",children:[r?t(i,{onPress:r,children:s}):null,t(i,{variant:"ghost",onPress:d,children:u})]})]})}export default ErrorState;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as N}from"react/jsx-runtime";import{Input as j}from"@contractspec/lib.ui-kit-web/ui/input";import{mapKeyboardToWeb as B}from"../../lib/keyboard";import{useThemedTextField as C}from"../primitives/control";export function Input({value:A,defaultValue:D,onChange:E,onSubmit:O,onFocus:G,onBlur:H,placeholder:J,disabled:M,readOnly:P,maxLength:Q,name:R,className:S,keyboard:U,componentKey:X,themeVariant:Y,placeholderI18n:Z,ariaLabelI18n:$,...z}){const _=B(U),q=C({defaultComponentKey:"Input",componentKey:X,themeVariant:Y,className:S,style:z.style,placeholder:J,placeholderI18n:Z,ariaLabelI18n:$});return N(j,{...q.themed.props,...z,className:q.themed.className,style:q.themed.style,value:A,defaultValue:D,onChange:E,onFocus:G,onBlur:H,placeholder:q.placeholder,"aria-label":q.ariaLabel,disabled:M,readOnly:P,maxLength:Q,name:R,..._})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as C}from"react/jsx-runtime";import{Input as _}from"@contractspec/lib.ui-kit/ui/input";import{mapKeyboardToNative as j}from"../../lib/keyboard";import{useThemedTextField as B}from"../primitives/control";export function Input({value:z,defaultValue:A,onChange:D,onSubmit:E,onFocus:G,onBlur:H,placeholder:J,disabled:M,readOnly:P,maxLength:Q,className:R,keyboard:U,componentKey:W,themeVariant:X,placeholderI18n:Y,ariaLabelI18n:Z,...$}){const w=j(U),q=B({defaultComponentKey:"Input",componentKey:W,themeVariant:X,className:R,placeholder:J,placeholderI18n:Y,ariaLabelI18n:Z});return C(_,{...q.themed.props,...$,className:q.themed.className,value:z,defaultValue:A,onChangeText:D,onSubmitEditing:E,onFocus:G,onBlur:H,placeholder:q.placeholder,accessibilityLabel:q.ariaLabel,editable:!M&&!P,maxLength:Q,...w})}export default Input;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";export function Link({children:t,...r}){return o("a",{...r,children:t})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import n from"next/link";export function Link({href:e,children:r,...o}){return t(n,{href:e||"#",...o,children:r})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as A,jsxs as I}from"react/jsx-runtime";import{cn as q}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as F}from"class-variance-authority";import{Loader2 as G}from"lucide-react";const H=F("animate-spin",{variants:{size:{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"},tone:{default:"text-foreground",muted:"text-muted-foreground"}},defaultVariants:{size:"md",tone:"muted"}});export function LoaderCircular({size:B,tone:C,label:g,className:D,...E}){return I("div",{className:q("inline-flex items-center gap-2",D),role:"status","aria-live":"polite","aria-busy":!0,...E,children:[A(G,{className:q(H({size:B,tone:C}))}),g?A("span",{className:"text-base text-muted-foreground",children:g}):null]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as t,jsxs as n}from"react/jsx-runtime";import{ActivityIndicator as l,Text as o,View as i}from"react-native";function m(e){switch(e){case"sm":return"small";case"lg":return"large";case"md":default:return"small"}}export function LoaderCircular({size:e="md",label:r,className:a}){return n(i,{className:["inline-flex flex-row items-center gap-2",a].filter(Boolean).join(" "),children:[t(l,{size:m(e)}),r?t(o,{className:"text-base text-muted-foreground",children:r}):null]})}export default LoaderCircular;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as z,jsxs as D}from"react/jsx-runtime";import{cn as C}from"@contractspec/lib.ui-kit-web/ui/utils";export function NavBrand({href:d="/",logo:A,title:q,className:B}){const v=D("div",{className:C("flex items-center gap-2 truncate font-semibold",B),children:[A,q&&z("span",{className:"truncate font-bold text-xl",children:q})]});return d?z("a",{href:d,className:"flex items-center","aria-label":"Home",children:v}):v}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as C,jsxs as D}from"react/jsx-runtime";import{cn as F}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as G}from"class-variance-authority";const H=G("inline-flex items-center justify-center gap-1 rounded-md font-semibold tabular-nums",{variants:{size:{sm:"h-6 min-w-6 px-1.5 text-xs",md:"h-8 min-w-8 px-2 text-sm",lg:"h-10 min-w-10 px-3 text-base"}},defaultVariants:{size:"md"}});function J(q){if(q===1)return"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300";if(q===2)return"bg-slate-100 text-slate-700 dark:bg-slate-800/40 dark:text-slate-300";if(q===3)return"bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-300";return"bg-muted text-muted-foreground"}function K({rank:q,previousRank:B}){const A=B-q;if(A>0)return C("span",{className:"text-green-600 text-xs dark:text-green-400","aria-label":`Up ${A}`,children:"▲"});if(A<0)return C("span",{className:"text-red-600 text-xs dark:text-red-400","aria-label":`Down ${Math.abs(A)}`,children:"▼"});return C("span",{className:"text-muted-foreground text-xs","aria-label":"Unchanged",children:"–"})}export function RankBadge({rank:q,previousRank:B,size:A,className:E}){return D("span",{className:F(H({size:A}),J(q),E),children:[D("span",{children:["#",q]}),B!=null&&C(K,{rank:q,previousRank:B})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as q,jsxs as H}from"react/jsx-runtime";import{cn as A}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as J}from"class-variance-authority";const G=J("rounded-full",{variants:{size:{sm:"h-2",md:"h-3",lg:"h-4"}},defaultVariants:{size:"md"}});function K(d){if(d>=75)return"bg-green-500";if(d>=50)return"bg-yellow-500";if(d>=25)return"bg-orange-500";return"bg-red-500"}export function ScoreBar({score:d,label:g,maxScore:B=100,showValue:D=!0,size:E,className:I}){const F=Math.max(0,Math.min(100,d/B*100));return H("div",{className:A("flex flex-col gap-1",I),children:[(g||D)&&H("div",{className:"flex items-center justify-between text-sm",children:[g&&q("span",{className:"text-muted-foreground capitalize",children:g}),D&&q("span",{className:"font-medium tabular-nums",children:Math.round(d*10)/10})]}),q("div",{className:A("w-full overflow-hidden bg-muted",G({size:E})),role:"progressbar","aria-valuenow":d,"aria-valuemin":0,"aria-valuemax":B,"aria-label":g??"Score",children:q("div",{className:A("h-full transition-all duration-300",G({size:E}),K(F)),style:{width:`${F}%`}})})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as h}from"react/jsx-runtime";import{Stepper as g}from"@contractspec/lib.ui-kit-web/ui/stepper";export function Stepper(d){return h(g,{...d})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as k}from"react/jsx-runtime";import{Textarea as O}from"@contractspec/lib.ui-kit-web/ui/textarea";import*as W from"react";import{mapKeyboardToWeb as v}from"../../lib/keyboard";import{useThemedTextField as F}from"../primitives/control";export function Textarea({value:D,defaultValue:E,onChange:z,onSubmit:I,onFocus:G,onBlur:H,placeholder:J,disabled:M,readOnly:P,maxLength:Q,name:S,className:U,rows:X,keyboard:Y,componentKey:Z,themeVariant:$,placeholderI18n:R,ariaLabelI18n:_,...A}){const j=v(Y),q=F({defaultComponentKey:"Textarea",componentKey:Z,themeVariant:$,className:U,style:A.style,placeholder:J,placeholderI18n:R,ariaLabelI18n:_}),B=W.useCallback((N)=>z?.(N),[z]);return k(O,{...q.themed.props,...A,className:q.themed.className,style:q.themed.style,value:D,defaultValue:E,onChange:B,onFocus:G,onBlur:H,placeholder:q.placeholder,"aria-label":q.ariaLabel,disabled:M,readOnly:P,maxLength:Q,name:S,rows:X,...j})}export default Textarea;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as C}from"react/jsx-runtime";import{Textarea as _}from"@contractspec/lib.ui-kit/ui/textarea";import{mapKeyboardToNative as j}from"../../lib/keyboard";import{useThemedTextField as B}from"../primitives/control";export function Textarea({value:z,defaultValue:A,onChange:D,onSubmit:E,onFocus:G,onBlur:H,placeholder:J,disabled:M,readOnly:P,maxLength:Q,className:R,keyboard:U,componentKey:W,themeVariant:X,placeholderI18n:Y,ariaLabelI18n:Z,...$}){const w=j(U),q=B({defaultComponentKey:"Textarea",componentKey:W,themeVariant:X,className:R,placeholder:J,placeholderI18n:Y,ariaLabelI18n:Z});return C(_,{...q.themed.props,...$,className:q.themed.className,value:z,defaultValue:A,onChangeText:D,onSubmitEditing:E,onFocus:G,onBlur:H,placeholder:q.placeholder,accessibilityLabel:q.ariaLabel,editable:!M&&!P,maxLength:Q,...w})}export default Textarea;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as q,jsxs as E}from"react/jsx-runtime";import{Card as X,CardContent as Y,CardDescription as Z,CardHeader as $,CardTitle as K}from"@contractspec/lib.ui-kit-web/ui/card";import{DataTable as V}from"@contractspec/lib.ui-kit-web/ui/data-table";import{HStack as v,VStack as H}from"@contractspec/lib.ui-kit-web/ui/stack";import{resolveTranslationNode as I,useDesignSystemTranslation as P}from"../../i18n/translation";export function DataTable({controller:J,title:z,description:B,className:L,headerActions:F,toolbar:M,footer:O,emptyState:Q,loading:U,onRowPress:W}){const G=P();return E(X,{className:L,children:[z||B||F?q($,{children:E(v,{justify:"between",align:"start",children:[E(H,{gap:"xs",children:[z?q(K,{children:I(z,G)}):null,B?q(Z,{children:I(B,G)}):null]}),F]})}):null,q(Y,{children:q(V,{controller:J,toolbar:M,footer:O,emptyState:Q,loading:U,onRowPress:W})})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as q,jsxs as E}from"react/jsx-runtime";import{Card as X,CardContent as Y,CardDescription as Z,CardHeader as $,CardTitle as K}from"@contractspec/lib.ui-kit/ui/card";import{DataTable as V}from"@contractspec/lib.ui-kit/ui/data-table";import{HStack as v,VStack as H}from"@contractspec/lib.ui-kit/ui/stack";import{resolveTranslationNode as I,useDesignSystemTranslation as P}from"../../i18n/translation";export function DataTable({controller:J,title:z,description:B,className:L,headerActions:F,toolbar:M,footer:O,emptyState:Q,loading:U,onRowPress:W}){const G=P();return E(X,{className:L,children:[z||B||F?q($,{children:E(v,{justify:"between",align:"start",children:[E(H,{gap:"xs",children:[z?q(K,{children:I(z,G)}):null,B?q(Z,{children:I(B,G)}):null]}),F]})}):null,q(Y,{children:q(V,{controller:J,toolbar:M,footer:O,emptyState:Q,loading:U,onRowPress:W})})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as D,jsxs as a}from"react/jsx-runtime";import{Button as h}from"../atoms/Button";import{FiltersToolbar as c}from"../molecules/FiltersToolbar";import{getHiddenDataColumns as f,showHiddenDataColumns as g}from"./DataTableToolbar.shared";export function DataTableToolbar({controller:e,className:l,searchPlaceholder:n,searchValue:r,onSearchChange:s,onSearchSubmit:d,debounceMs:i,activeChips:m=[],onClearAll:u,actionsStart:p,actionsEnd:b,selectionSummary:o}){const t=f(e),T=o===void 0&&e.selectionMode!=="none"?a("span",{className:"text-muted-foreground text-sm",children:["Selected ",e.selectedRowIds.length]}):o;return D(c,{className:l,searchPlaceholder:n,searchValue:r,onSearchChange:s,onSearchSubmit:d,debounceMs:i,activeChips:m,onClearAll:u,right:a("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[T,t.length?a(h,{variant:"outline",size:"sm",onPress:()=>g(e),children:["Show ",t.length," Hidden"]}):null,b]}),children:p})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as A,jsxs as z}from"react/jsx-runtime";import{HStack as $}from"@contractspec/lib.ui-kit/ui/stack";import{Text as f}from"@contractspec/lib.ui-kit/ui/text";import{Button as k}from"../atoms/Button";import{FiltersToolbar as B}from"../molecules/FiltersToolbar.mobile";import{getHiddenDataColumns as p,showHiddenDataColumns as w}from"./DataTableToolbar.shared";export function DataTableToolbar({controller:q,className:J,searchPlaceholder:K,searchValue:L,onSearchChange:O,onSearchSubmit:Q,debounceMs:R,activeChips:U=[],onClearAll:W,actionsStart:X,actionsEnd:Y,selectionSummary:G}){const I=p(q),Z=G===void 0&&q.selectionMode!=="none"?z(f,{className:"text-muted-foreground text-sm",children:["Selected ",q.selectedRowIds.length]}):G;return A(B,{className:J,searchPlaceholder:K,searchValue:L,onSearchChange:O,onSearchSubmit:Q,debounceMs:R,activeChips:U,onClearAll:W,right:z($,{className:"flex flex-wrap items-center justify-end gap-2",children:[Z,I.length?z(k,{variant:"outline",size:"sm",onPress:()=>w(q),children:["Show ",I.length," Hidden"]}):null,Y]}),children:X})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function getHiddenDataColumns(t){return t.columns.filter((e)=>e.kind==="data"&&e.canHide&&!e.visible)}export function showHiddenDataColumns(t){getHiddenDataColumns(t).forEach((e)=>e.toggleVisibility?.(!0))}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as e,jsxs as a}from"react/jsx-runtime";import{resolveTranslationString as r,useDesignSystemTranslation as N}from"../../i18n/translation";import{cn as u}from"../../lib/utils";import{MarkdownRenderer as f}from"../molecules/MarkdownRenderer";import{DataViewFormattedValue as w,getAtPath as V}from"./utils";export function DataViewDetail({spec:t,item:l,className:n,emptyState:v,headerActions:c}){const d=N();if(t.view.kind!=="detail")throw Error(`DataViewDetail received view kind "${t.view.kind}", expected "detail".`);const m=t.view,s=m.fields;if(!l)return a("div",{className:u("flex w-full flex-col gap-4",n),children:[a("div",{className:"flex items-center justify-between",children:[e("h3",{className:"font-semibold text-base text-foreground",children:r(t.meta.title,d)}),c]}),v??e("div",{className:"rounded-md border border-muted-foreground/40 border-dashed p-8 text-center text-muted-foreground text-sm",children:"Select a record to view details."})]});const p=m.sections&&m.sections.length>0?m.sections:[{fields:s.map((i)=>i.key)}];return a("div",{className:u("flex w-full flex-col gap-6",n),children:[a("div",{className:"flex items-center justify-between",children:[a("div",{children:[e("h3",{className:"font-semibold text-foreground text-xl",children:r(t.meta.title,d)}),e("div",{className:"text-muted-foreground text-sm",children:e(f,{content:r(t.meta.description??"",d)??""})})]}),c]}),e("div",{className:"flex flex-col gap-6",children:p.map((i,g)=>a("div",{className:"rounded-lg border border-border bg-card p-4 shadow-sm",children:[i.title?e("h4",{className:"mb-2 font-semibold text-muted-foreground text-sm uppercase tracking-wide",children:r(i.title,d)}):null,i.description?e("div",{className:"mb-4 text-muted-foreground text-sm",children:e(f,{content:r(i.description,d)??""})}):null,e("dl",{className:"grid gap-4 md:grid-cols-2",children:i.fields.map((b)=>{const o=k(s,b);if(!o)return null;const D=V(l,o.dataPath);return a("div",{className:"flex flex-col gap-1",children:[e("dt",{className:"font-semibold text-muted-foreground/80 text-xs uppercase",children:r(o.label,d)}),e("dd",{className:"text-foreground text-sm",children:e(w,{value:D,format:o.format})})]},o.key)})})]},g))})]})}function k(t,l){return t.find((n)=>n.key===l)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as t,jsxs as m}from"react/jsx-runtime";import{resolveTranslationString as w,useDesignSystemTranslation as k}from"../../i18n/translation";import{cn as c}from"../../lib/utils";import{DisplayValue as f}from"./DataViewTable";export function DataViewList({spec:e,items:r,className:i,renderActions:d,onSelect:u,emptyState:g}){const v=k();if(e.view.kind!=="list")throw Error(`DataViewList received view kind "${e.view.kind}", expected "list".`);const n=e.view,o=n.fields,l=n.primaryField??o.find((a)=>a.key===n.primaryField)?.key??o[0]?.key;if(!r.length)return t("div",{className:c("flex w-full flex-col gap-4",i),children:g??t("div",{className:"rounded-md border border-muted-foreground/40 border-dashed p-8 text-center text-muted-foreground text-sm",children:"No records available."})});return t("div",{className:c("flex w-full flex-col gap-4",i),children:r.map((a,b)=>{const p=y(a);return m("button",{type:"button",className:c("flex w-full flex-col gap-2 rounded-lg border border-muted bg-card p-4 text-left shadow-sm transition hover:border-primary/40 hover:shadow-md focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",n.layout==="compact"&&"md:flex-row md:items-center md:gap-4"),onClick:()=>u?.(a),children:[m("div",{className:"flex flex-1 flex-col gap-1",children:[l?t("span",{className:"font-medium text-base text-foreground",children:t(f,{item:p,fields:o,fieldKey:l})}):null,t("div",{className:"flex flex-wrap gap-x-4 gap-y-1 text-muted-foreground text-sm",children:D(n,l).map((s)=>m("span",{className:"flex items-center gap-1.5",children:[t("span",{className:"font-medium text-foreground/80",children:x(o,s,v)}),t("span",{children:t(f,{item:p,fields:o,fieldKey:s})})]},s))})]}),d?t("div",{className:"flex shrink-0 items-center gap-2",children:d(a)}):null]},b)})})}function y(e){if(e&&typeof e==="object")return e;return{}}function x(e,r,i){return w(e.find((d)=>d.key===r)?.label??r,i)}function D(e,r){if(e.secondaryFields?.length)return e.secondaryFields;return e.fields.map((i)=>i.key).filter((i)=>i!==r)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as G,jsxs as w,Fragment as d}from"react/jsx-runtime";import{Pagination as b}from"@contractspec/lib.ui-kit-web/ui/atoms/Pagination";import{VStack as j}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as _}from"@contractspec/lib.ui-kit-web/ui/text";import*as k from"react";import{resolveTranslationString as F,useDesignSystemTranslation as N}from"../../i18n/translation";import{FiltersToolbar as x}from"../molecules/FiltersToolbar";import{DataViewDetail as A}from"./DataViewDetail";import{DataViewList as T}from"./DataViewList";import{DataViewTable as C}from"./DataViewTable";export function DataViewRenderer({spec:E,items:M=[],item:Y=null,className:I,renderActions:Q,onSelect:U,onRowClick:Z,toolbar:$,loading:q,headerActions:O,emptyState:K,footer:z,search:V,onSearchChange:L,filters:J,onFilterChange:P,pagination:H,onPageChange:R}){const W=N(),u=k.useMemo(()=>{switch(E.view.kind){case"list":return G(T,{spec:E,items:M,className:I,renderActions:Q,onSelect:U,emptyState:K});case"table":return G(C,{spec:E,items:M,className:I,onRowClick:Z,toolbar:$,loading:q,emptyState:K,headerActions:O,footer:z});case"detail":return G(A,{spec:E,item:Y,className:I,emptyState:K,headerActions:O});case"grid":{const B=E.view,X={kind:"list",layout:"card",fields:B.fields,filters:B.filters,actions:B.actions,primaryField:B.primaryField,secondaryFields:B.secondaryFields},v={...E,view:X};return G(T,{spec:v,items:M,className:I,renderActions:Q,onSelect:U,emptyState:K})}default:return G(_,{className:I,children:F("Unsupported data view kind",W)})}},[E,M,Y,I,Q,U,Z,$,q,O,K,z,W]);if(!(E.view.kind==="list"||E.view.kind==="table"||E.view.kind==="grid"))return G(d,{children:u});return w(j,{gap:"lg",children:[(E.view.filters?.length||L)&&G(x,{searchValue:V,onSearchChange:L,searchPlaceholder:F("Search...",W)??"Search...",activeChips:J?Object.entries(J).map(([B,X])=>({key:B,label:`${B}: ${X}`,onRemove:()=>{if(J){const{[B]:v,...D}=J;P?.(D)}}})):[],onClearAll:J&&Object.keys(J).length>0?()=>P?.({}):void 0,right:E.view.kind==="table"?void 0:O}),u,H&&H.total>0&&G(b,{currentPage:H.page,totalPages:Math.ceil(H.total/H.pageSize),totalItems:H.total,itemsPerPage:H.pageSize,onPageChange:(B)=>R?.(B),onItemsPerPageChange:(B)=>{R?.(1)},showItemsPerPage:!1})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as G,jsxs as d,Fragment as w}from"react/jsx-runtime";import{Pagination as D}from"@contractspec/lib.ui-kit/ui/atoms/Pagination";import{VStack as j}from"@contractspec/lib.ui-kit/ui/stack";import{Text as _}from"@contractspec/lib.ui-kit/ui/text";import*as k from"react";import{resolveTranslationString as F,useDesignSystemTranslation as N}from"../../i18n/translation";import{FiltersToolbar as x}from"../molecules/FiltersToolbar";import{DataViewDetail as A}from"./DataViewDetail";import{DataViewList as T}from"./DataViewList";import{DataViewTable as C}from"./DataViewTable";export function DataViewRenderer({spec:E,items:M=[],item:Y=null,className:I,renderActions:Q,onSelect:U,onRowClick:Z,toolbar:$,loading:q,headerActions:O,emptyState:K,footer:z,search:V,onSearchChange:L,filters:J,onFilterChange:P,pagination:H,onPageChange:R}){const W=N(),u=k.useMemo(()=>{switch(E.view.kind){case"list":return G(T,{spec:E,items:M,className:I,renderActions:Q,onSelect:U,emptyState:K});case"table":return G(C,{spec:E,items:M,className:I,onRowClick:Z,toolbar:$,loading:q,emptyState:K,headerActions:O,footer:z});case"detail":return G(A,{spec:E,item:Y,className:I,emptyState:K,headerActions:O});case"grid":{const B=E.view,X={kind:"list",layout:"card",fields:B.fields,filters:B.filters,actions:B.actions,primaryField:B.primaryField,secondaryFields:B.secondaryFields},v={...E,view:X};return G(T,{spec:v,items:M,className:I,renderActions:Q,onSelect:U,emptyState:K})}default:return G(_,{className:I,children:F("Unsupported data view kind",W)})}},[E,M,Y,I,Q,U,Z,$,q,O,K,z,W]);if(!(E.view.kind==="list"||E.view.kind==="table"||E.view.kind==="grid"))return G(w,{children:u});return d(j,{gap:"lg",children:[(E.view.filters?.length||L)&&G(x,{searchValue:V,onSearchChange:L,searchPlaceholder:F("Search...",W)??"Search...",activeChips:J?Object.entries(J).map(([B,X])=>({key:B,label:`${B}: ${X}`,onRemove:()=>{if(J){const{[B]:v,...b}=J;P?.(b)}}})):[],onClearAll:J&&Object.keys(J).length>0?()=>P?.({}):void 0,right:E.view.kind==="table"?void 0:O}),u,H&&H.total>0?G(D,{currentPage:H.page,totalPages:Math.ceil(H.total/H.pageSize),totalItems:H.total,itemsPerPage:H.pageSize,onPageChange:(B)=>R?.(B),onItemsPerPageChange:(B)=>{R?.(1)},showItemsPerPage:!1}):null]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as E,jsxs as V}from"react/jsx-runtime";import{useDataViewTable as A}from"@contractspec/lib.presentation-runtime-react";import{HStack as F,VStack as h}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as X}from"@contractspec/lib.ui-kit-web/ui/text";import*as C from"react";import{resolveTranslationString as W,useDesignSystemTranslation as K}from"../../i18n/translation";import{DataTable as R}from"../data-table/DataTable";import{DataViewFormattedValue as Y,getAtPath as g}from"./utils";export function DataViewTable({spec:q,items:J,className:L,onRowClick:G,toolbar:O,loading:Z,emptyState:$,headerActions:B,footer:H}){const Q=K();if(q.view.kind!=="table")throw Error(`DataViewTable received view kind "${q.view.kind}", expected "table".`);const M=q.view,P=C.useMemo(()=>(M.rowExpansion?.fields??[]).map((z)=>M.fields.find((I)=>I.key===z)).filter((z)=>Boolean(z)),[M.fields,M.rowExpansion?.fields]),N=A({spec:q,data:J,renderValue:({value:z,field:I})=>E(Y,{value:z,format:I.format}),renderExpandedContent:P.length>0?({item:z,fields:I})=>E(h,{gap:"sm",className:"py-2",children:I.map((U)=>V(F,{justify:"between",align:"start",children:[E(X,{className:"font-medium text-muted-foreground text-sm",children:W(U.label,Q)}),E(X,{className:"text-right text-sm",children:E(DisplayValue,{item:z,fields:I,fieldKey:U.key})})]},U.key))}):void 0});return E(R,{controller:N,className:L,title:W(q.meta.title,Q),description:W(q.meta.description,Q),toolbar:O,loading:Z,headerActions:B,emptyState:$,footer:H,onRowPress:G?(z)=>G(z.original):void 0})}function D(q,J){return q.find((L)=>L.key===J)}export function DisplayValue({item:q,fields:J,fieldKey:L}){const G=D(J,L);if(!G)return"";const O=g(q,G.dataPath);return E(Y,{value:O,format:G.format})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as E,jsxs as D}from"react/jsx-runtime";import{useDataViewTable as A}from"@contractspec/lib.presentation-runtime-react";import{HStack as F,VStack as h}from"@contractspec/lib.ui-kit/ui/stack";import{Text as X}from"@contractspec/lib.ui-kit/ui/text";import*as C from"react";import{resolveTranslationString as W,useDesignSystemTranslation as K}from"../../i18n/translation";import{DataTable as R}from"../data-table/DataTable";import{DataViewFormattedValue as Y,getAtPath as b}from"./utils";export function DataViewTable({spec:q,items:J,className:L,onRowClick:G,toolbar:O,loading:Z,emptyState:$,headerActions:B,footer:H}){const Q=K();if(q.view.kind!=="table")throw Error(`DataViewTable received view kind "${q.view.kind}", expected "table".`);const M=q.view,P=C.useMemo(()=>(M.rowExpansion?.fields??[]).map((z)=>M.fields.find((I)=>I.key===z)).filter((z)=>Boolean(z)),[M.fields,M.rowExpansion?.fields]),N=A({spec:q,data:J,renderValue:({value:z,field:I})=>E(Y,{value:z,format:I.format}),renderExpandedContent:P.length>0?({item:z,fields:I})=>E(h,{gap:"sm",className:"py-2",children:I.map((U)=>D(F,{justify:"between",align:"start",children:[E(X,{className:"font-medium text-muted-foreground text-sm",children:W(U.label,Q)}),E(X,{className:"text-right text-sm",children:E(DisplayValue,{item:z,fields:I,fieldKey:U.key})})]},U.key))}):void 0});return E(R,{controller:N,className:L,title:W(q.meta.title,Q),description:W(q.meta.description,Q),toolbar:O,loading:Z,headerActions:B,emptyState:$,footer:H,onRowPress:G?(z)=>G(z.original):void 0})}function g(q,J){return q.find((L)=>L.key===J)}export function DisplayValue({item:q,fields:J,fieldKey:L}){const G=g(J,L);if(!G)return"";const O=b(q,G.dataPath);return E(Y,{value:O,format:G.format})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as m}from"react/jsx-runtime";import{MarkdownRenderer as a}from"../molecules/MarkdownRenderer";export function getAtPath(t,e){if(!t)return;if(!e)return t;const r=e.replace(/\[(\d+)\]/g,".$1").split(".").filter(Boolean);let n=t;for(const o of r){if(n==null||typeof n!=="object"&&!Array.isArray(n))return;n=n[o]}return n}export function DataViewFormattedValue({value:t,format:e}){if(t==null)return"";switch(e){case"boolean":return t?"Yes":"No";case"currency":return typeof t==="number"?new Intl.NumberFormat(void 0,{style:"currency",currency:"USD"}).format(t):String(t);case"percentage":return typeof t==="number"?`${(t*100).toFixed(1)}%`:String(t);case"date":return i(t,{dateStyle:"medium"});case"dateTime":return i(t,{dateStyle:"medium",timeStyle:"short"});case"markdown":return m(a,{content:t});default:return String(t)}}function i(t,e){if(t instanceof Date)return new Intl.DateTimeFormat(void 0,e).format(t);if(typeof t==="string"||typeof t==="number"){const r=new Date(t);if(!Number.isNaN(r.getTime()))return new Intl.DateTimeFormat(void 0,e).format(r)}return String(t??"")}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as B}from"react/jsx-runtime";import{cn as A}from"@contractspec/lib.ui-kit-web/ui/utils";export function ActionForm({action:g,children:q,className:v,...z}){return B("form",{action:g,className:A("space-y-3",v),...z,children:q})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as g,jsxs as z}from"react/jsx-runtime";import{Card as G,CardContent as I,CardHeader as J,CardTitle as K}from"@contractspec/lib.ui-kit-web/ui/card";import{cn as B}from"@contractspec/lib.ui-kit-web/ui/utils";export function FormCardLayout({title:q,description:v,actions:A,children:D,className:E,contentClassName:F}){return z(G,{className:B("border-none shadow-2xs",E),children:[(q||v)&&z(J,{children:[q&&g(K,{children:q}),v&&g("div",{className:"text-base text-muted-foreground",children:v})]}),z(I,{className:B("p-4 md:p-5",F),children:[g("div",{className:"space-y-4",children:D}),A&&g("div",{className:"mt-4 flex justify-end gap-2",children:A})]})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as q,jsxs as A}from"react/jsx-runtime";import{Dialog as K,DialogContent as L,DialogDescription as M,DialogFooter as N,DialogHeader as P,DialogTitle as Q}from"@contractspec/lib.ui-kit-web/ui/dialog";export function FormDialog({open:B,onOpenChange:E,title:G,description:v,children:I,footer:z,maxWidth:J="sm:max-w-[480px]"}){return q(K,{open:B,onOpenChange:E,children:A(L,{className:J,children:[A(P,{children:[q(Q,{children:G}),v&&q(M,{children:v})]}),I,z&&q(N,{children:z})]})})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as z}from"react/jsx-runtime";import{cn as v}from"@contractspec/lib.ui-kit-web/ui/utils";export function FormSection({children:q,className:g}){return z("div",{className:v("space-y-4",g),children:q})}export function FormRow({children:q,className:g}){return z("div",{className:v("grid grid-cols-1 gap-4 md:grid-cols-2",g),children:q})}export function FormGrid({children:q,cols:g=2,className:A}){return z("div",{className:v("grid gap-4",g===1?"grid-cols-1":g===2?"grid-cols-2":g===3?"grid-cols-3":"grid-cols-4",A),children:q})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as A,jsxs as F}from"react/jsx-runtime";import{cn as V}from"@contractspec/lib.ui-kit-web/ui/utils";import*as M from"react";import{Button as O}from"../atoms/Button";export function FormOneByOneLayout({fields:q,initialKey:D,onComplete:P,className:Q}){const G=M.useMemo(()=>Object.fromEntries(q.map((z,U)=>[z.key,U])),[q]),[E,H]=M.useState(()=>{if(D&&D in G)return G[D]||0;return 0}),J=E===q.length-1,g=q[E];if(!g)return null;const S=async()=>{if(g.validate&&!g.validate())return;if(J)await P?.();else H((z)=>Math.min(z+1,q.length-1))},T=()=>H((z)=>Math.max(0,z-1));return F("div",{className:V("flex min-h-[320px] flex-col items-stretch justify-between",Q),children:[F("div",{className:"space-y-2",children:[A("div",{className:"font-medium text-lg",children:g.title}),g.description&&A("div",{className:"text-base text-muted-foreground",children:g.description}),A("div",{className:"pt-2",children:g.input})]}),F("div",{className:"mt-6 flex items-center justify-between",children:[A(O,{variant:"ghost",onPress:T,disabled:E===0,children:"Back"}),A(O,{onPress:S,children:J?"Done":"Continue"})]})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as z,jsxs as D}from"react/jsx-runtime";import{Separator as Z}from"@contractspec/lib.ui-kit-web/ui/separator";import{cn as $}from"@contractspec/lib.ui-kit-web/ui/utils";import*as Q from"react";import{Button as T}from"../atoms/Button";export function FormStepsLayout({steps:g,initialStepKey:E,onFinish:G,canNext:H,className:U}){const J=Q.useMemo(()=>Object.fromEntries(g.map((A,Y)=>[A.key,Y])),[g]),[C,M]=Q.useState(()=>{if(E&&E in J)return J[E]||0;return 0}),V=C===0,O=C===g.length-1,q=g[C];if(!q)return null;const W=async()=>{if(!O){if(H&&!H(q.key))return;M((A)=>Math.min(A+1,g.length-1))}else if(G)await G()},X=()=>M((A)=>Math.max(0,A-1));return D("div",{className:$("space-y-4",U),children:[D("div",{className:"flex items-center justify-between",children:[z("div",{className:"truncate font-medium text-lg",children:q.title}),D("div",{className:"text-base text-muted-foreground",children:[C+1," / ",g.length]})]}),q.description&&z("div",{className:"text-base text-muted-foreground",children:q.description}),z(Z,{}),z("div",{children:q.content}),D("div",{className:"flex items-center justify-between",children:[z(T,{variant:"ghost",onPress:X,disabled:V,children:"Back"}),z(T,{onPress:W,children:O?"Finish":"Next"})]})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as q}from"react/jsx-runtime";import{Form as E,useForm as G,zodResolver as H}from"@contractspec/lib.ui-kit-web/ui/form";export function ZodForm({schema:A,defaultValues:B,onSubmit:C,children:D}){const g=G({resolver:H(A),defaultValues:B});return q(E,{...g,children:q("form",{onSubmit:g.handleSubmit(C),children:D(g)})})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as A,jsxs as J}from"react/jsx-runtime";import{Command as k,CommandEmpty as S,CommandGroup as b,CommandInput as f,CommandItem as C,CommandList as T}from"@contractspec/lib.ui-kit-web/ui/command";import{Text as Y}from"@contractspec/lib.ui-kit-web/ui/text";import{Button as V}from"../../atoms/Button";import{HStack as w,VStack as Z}from"../../layout/Stack";import{useThemedPrimitive as v,useTranslatedText as _}from"../../primitives/themed";function M(F){return typeof F==="string"?F:String(F??"")}export function Autocomplete({query:F,options:$,selectedOptions:U,onQueryChange:E,onSelectOption:G,onRemoveOption:H,multiple:L,placeholder:P,placeholderI18n:g,readOnly:W,disabled:X,className:q,componentKey:B,themeVariant:K,emptyText:N="No results found."}){const D=_(),Q=v({defaultComponentKey:"Autocomplete",componentKey:B,themeVariant:K,className:q});return J(Z,{gap:"sm",className:Q.className,children:[J(k,{shouldFilter:!1,className:"rounded-md border border-input",children:[A(f,{value:F,onValueChange:E,placeholder:D(g??P),disabled:X||W}),J(T,{children:[A(S,{children:D(N)}),A(b,{children:$.map((z)=>{const R=U.some((I)=>M(I.value)===M(z.value));return J(C,{value:D(z.labelI18n)??z.labelI18n,onSelect:()=>G?.(z),disabled:X||z.disabled||W,children:[J(Z,{gap:"xs",children:[A(Y,{children:D(z.labelI18n)}),z.descriptionI18n?A(Y,{className:"text-muted-foreground text-xs",children:D(z.descriptionI18n)}):null]}),R?A(Y,{className:"ml-auto text-muted-foreground text-xs",children:D("Selected")}):null]},M(z.value))})})]})]}),U.length?A(w,{gap:"sm",wrap:"wrap",children:U.map((z)=>A(V,{type:"button",variant:"outline",size:"sm",onClick:()=>H?.(z),disabled:!L||W||X,children:D(z.labelI18n)},`selected-${M(z.value)}`))}):null]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as A,jsxs as S}from"react/jsx-runtime";import{Text as J}from"@contractspec/lib.ui-kit/ui/text";import{Button as U}from"../../atoms/Button";import{Input as R}from"../../atoms/Input";import{HStack as B,VStack as W}from"../../layout/Stack";import{useThemedPrimitive as I,useTranslatedText as k}from"../../primitives/themed";function X(D){return typeof D==="string"?D:String(D??"")}export function Autocomplete({query:D,options:L,selectedOptions:M,onQueryChange:Y,onSelectOption:Z,onRemoveOption:$,multiple:H,placeholder:P,placeholderI18n:g,readOnly:F,disabled:G,className:q,componentKey:C,themeVariant:K,emptyText:N="No results found."}){const E=k(),Q=I({defaultComponentKey:"Autocomplete",componentKey:C,themeVariant:K,className:q});return S(W,{gap:"sm",className:Q.className,children:[A(R,{value:D,onChange:(z)=>{if(typeof z==="string")Y?.(z)},placeholder:E(g??P),disabled:G||F}),A(W,{gap:"xs",children:L.length?L.map((z)=>A(U,{variant:"ghost",onPress:()=>Z?.(z),disabled:G||z.disabled||F,children:A(J,{children:E(z.labelI18n)})},X(z.value))):A(J,{children:E(N)})}),M.length?A(B,{gap:"sm",wrap:"wrap",children:M.map((z)=>A(U,{variant:"outline",size:"sm",onPress:()=>$?.(z),disabled:!H||F||G,children:A(J,{children:E(z.labelI18n)})},`selected-${X(z.value)}`))}):null]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as A,jsxs as W}from"react/jsx-runtime";import{Checkbox as Z}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{Label as $}from"@contractspec/lib.ui-kit-web/ui/label";import{RadioGroupItem,RadioGroup as H}from"@contractspec/lib.ui-kit-web/ui/radio-group";import{Switch as L}from"@contractspec/lib.ui-kit-web/ui/switch";import{HStack as G,VStack as P}from"../../layout/Stack";import{optionValue as X}from"../../primitives/control";import{useThemedPrimitive as U,useTranslatedText as R}from"../../primitives/themed";export function Checkbox({componentKey:B,themeVariant:z,className:D,checked:E,onCheckedChange:F,...J}){const q=U({defaultComponentKey:"Checkbox",componentKey:B,themeVariant:z,className:D});return A(Z,{...q.props,...J,className:q.className,checked:Boolean(E),onCheckedChange:(M)=>F?.(Boolean(M))})}export function Switch({componentKey:B,themeVariant:z,className:D,checked:E,onCheckedChange:F,...J}){const q=U({defaultComponentKey:"Switch",componentKey:B,themeVariant:z,className:D});return A(L,{...q.props,...J,className:q.className,checked:Boolean(E),onCheckedChange:(M)=>F?.(Boolean(M))})}export function RadioGroup({options:B,value:z,onValueChange:D,disabled:E,componentKey:F,themeVariant:J,className:q}){const M=R(),Y=U({defaultComponentKey:"RadioGroup",componentKey:F,themeVariant:J,className:q});return A(H,{value:z==null?"":X(z),onValueChange:(O)=>D?.(O),disabled:E,className:Y.className,children:A(P,{gap:"sm",children:B?.map((O)=>{const Q=X(O.value);return W(G,{gap:"sm",align:"center",children:[A(RadioGroupItem,{value:Q,id:Q,disabled:O.disabled}),A($,{htmlFor:Q,children:M(O.labelI18n)})]},Q)})})})}export{RadioGroupItem};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as A,jsxs as R}from"react/jsx-runtime";import{Checkbox as Y}from"@contractspec/lib.ui-kit/ui/checkbox";import{Label as Z}from"@contractspec/lib.ui-kit/ui/label";import{RadioGroup as $,RadioGroupItem}from"@contractspec/lib.ui-kit/ui/radio-group";import{Switch as H}from"@contractspec/lib.ui-kit/ui/switch";import{HStack as L,VStack as G}from"../../layout/Stack";import{optionValue as W}from"../../primitives/control";import{useThemedPrimitive as Q,useTranslatedText as P}from"../../primitives/themed";export function Checkbox({componentKey:B,themeVariant:z,className:D,checked:E,onCheckedChange:F,...J}){const q=Q({defaultComponentKey:"Checkbox",componentKey:B,themeVariant:z,className:D});return A(Y,{...q.props,...J,className:q.className,checked:Boolean(E),onCheckedChange:(M)=>F?.(Boolean(M))})}export function Switch({componentKey:B,themeVariant:z,className:D,checked:E,onCheckedChange:F,...J}){const q=Q({defaultComponentKey:"Switch",componentKey:B,themeVariant:z,className:D});return A(H,{...q.props,...J,className:q.className,checked:Boolean(E),onCheckedChange:(M)=>F?.(Boolean(M))})}export function RadioGroup({options:B,value:z,onValueChange:D,disabled:E,componentKey:F,themeVariant:J,className:q}){const M=P(),X=Q({defaultComponentKey:"RadioGroup",componentKey:F,themeVariant:J,className:q});return A($,{value:z==null?"":W(z),onValueChange:(O)=>D?.(O),disabled:E,className:X.className,children:A(G,{gap:"sm",children:B?.map((O)=>{const U=W(O.value);return R(L,{gap:"sm",align:"center",children:[A(RadioGroupItem,{value:U,disabled:O.disabled}),A(Z,{children:M(O.labelI18n)})]},U)})})})}export{RadioGroupItem};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as O}from"react/jsx-runtime";import{Combobox as J}from"@contractspec/lib.ui-kit-web/ui/combobox";import{useThemedPrimitive as L,useTranslatedText as M}from"../../primitives/themed";export function Combobox({componentKey:z,themeVariant:A,className:B,placeholder:D,placeholderI18n:E,searchPlaceholder:F,emptyText:G,...H}){const g=M(),q=L({defaultComponentKey:"Combobox",componentKey:z,themeVariant:A,className:B});return O(J,{...q.props,...H,className:q.className,placeholder:g(E??D),searchPlaceholder:g(F),emptyText:g(G)})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Autocomplete as Combobox}from"./Autocomplete";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as J}from"react/jsx-runtime";import{DatePicker as Q}from"@contractspec/lib.ui-kit-web/ui/date-picker";import{DateRangePicker as S}from"@contractspec/lib.ui-kit-web/ui/date-range-picker";import{DateTimePicker as U}from"@contractspec/lib.ui-kit-web/ui/datetime-picker";import{TimePicker as X}from"@contractspec/lib.ui-kit-web/ui/time-picker";import{useThemedPrimitive as H,useTranslatedText as L}from"../../primitives/themed";export function DatePicker({componentKey:z,themeVariant:A,placeholder:B,placeholderI18n:C,className:q,...F}){const G=L(),E=H({defaultComponentKey:"DatePicker",componentKey:z,themeVariant:A,className:q});return J(Q,{...E.props,...F,className:E.className,placeholder:G(C??B)})}export function TimePicker({componentKey:z,themeVariant:A,placeholder:B,placeholderI18n:C,className:q,...F}){const G=L(),E=H({defaultComponentKey:"TimePicker",componentKey:z,themeVariant:A,className:q});return J(X,{...E.props,...F,className:E.className,placeholder:G(C??B)})}export function DateTimePicker({componentKey:z,themeVariant:A,datePlaceholder:B,timePlaceholder:C,datePlaceholderI18n:q,timePlaceholderI18n:F,className:G,...E}){const M=L(),O=H({defaultComponentKey:"DateTimePicker",componentKey:z,themeVariant:A,className:G});return J(U,{...O.props,...E,className:O.className,datePlaceholder:M(q??B),timePlaceholder:M(F??C)})}export function DateRangePicker({componentKey:z,themeVariant:A,className:B,...C}){const q=H({defaultComponentKey:"DateRangePicker",componentKey:z,themeVariant:A,className:B});return J(S,{...q.props,...C,className:q.className})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as J}from"react/jsx-runtime";import{DatePicker as Q}from"@contractspec/lib.ui-kit/ui/date-picker";import{DateRangePicker as S}from"@contractspec/lib.ui-kit/ui/date-range-picker";import{DateTimePicker as U}from"@contractspec/lib.ui-kit/ui/datetime-picker";import{TimePicker as W}from"@contractspec/lib.ui-kit/ui/time-picker";import{useThemedPrimitive as H,useTranslatedText as L}from"../../primitives/themed";export function DatePicker({componentKey:z,themeVariant:A,placeholder:B,placeholderI18n:C,className:q,...F}){const G=L(),E=H({defaultComponentKey:"DatePicker",componentKey:z,themeVariant:A,className:q});return J(Q,{...E.props,...F,className:E.className,placeholder:G(C??B)})}export function TimePicker({componentKey:z,themeVariant:A,placeholder:B,placeholderI18n:C,className:q,...F}){const G=L(),E=H({defaultComponentKey:"TimePicker",componentKey:z,themeVariant:A,className:q});return J(W,{...E.props,...F,className:E.className,placeholder:G(C??B)})}export function DateTimePicker({componentKey:z,themeVariant:A,datePlaceholder:B,timePlaceholder:C,datePlaceholderI18n:q,timePlaceholderI18n:F,className:G,...E}){const M=L(),O=H({defaultComponentKey:"DateTimePicker",componentKey:z,themeVariant:A,className:G});return J(U,{...O.props,...E,className:O.className,datePlaceholder:M(q??B),timePlaceholder:M(F??C)})}export function DateRangePicker({componentKey:z,themeVariant:A,className:B,...C}){const q=H({defaultComponentKey:"DateRangePicker",componentKey:z,themeVariant:A,className:B});return J(S,{...q.props,...C,className:q.className})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{DropdownMenu,DropdownMenuCheckboxItem,DropdownMenuContent,DropdownMenuGroup,DropdownMenuItem,DropdownMenuLabel,DropdownMenuPortal,DropdownMenuRadioGroup,DropdownMenuRadioItem,DropdownMenuSeparator,DropdownMenuShortcut,DropdownMenuSub,DropdownMenuSubContent,DropdownMenuSubTrigger,DropdownMenuTrigger}from"@contractspec/lib.ui-kit-web/ui/dropdown-menu";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{DropdownMenu,DropdownMenuCheckboxItem,DropdownMenuContent,DropdownMenuGroup,DropdownMenuItem,DropdownMenuLabel,DropdownMenuPortal,DropdownMenuRadioGroup,DropdownMenuRadioItem,DropdownMenuSeparator,DropdownMenuShortcut,DropdownMenuSub,DropdownMenuSubContent,DropdownMenuSubTrigger,DropdownMenuTrigger}from"@contractspec/lib.ui-kit/ui/dropdown-menu";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as O}from"react/jsx-runtime";import{Field as R,FieldContent as U,FieldDescription as X,FieldError as Y,FieldGroup as Z,FieldLabel as $,FieldLegend as k,FieldSeparator as C,FieldSet as D}from"@contractspec/lib.ui-kit-web/ui/field";import{useThemedPrimitive as M,useTranslatedNode as Q}from"../../primitives/themed";export function Field({componentKey:A,themeVariant:B,className:H,layout:I,...z}){const q=M({defaultComponentKey:"Field",componentKey:A,themeVariant:B,className:H});return O(R,{...q.props,...z,className:q.className})}export function FieldSet({componentKey:A,themeVariant:B,className:H,...I}){const z=M({defaultComponentKey:"FieldSet",componentKey:A,themeVariant:B,className:H});return O(D,{...z.props,...I,className:z.className})}export function FieldLegend({componentKey:A,themeVariant:B,className:H,children:I,...z}){const q=M({defaultComponentKey:"FieldLegend",componentKey:A,themeVariant:B,className:H}),J=Q();return O(k,{...q.props,...z,className:q.className,children:J(I)})}export function FieldContent({componentKey:A,themeVariant:B,className:H,...I}){const z=M({defaultComponentKey:"FieldContent",componentKey:A,themeVariant:B,className:H});return O(U,{...z.props,...I,className:z.className})}export function FieldGroup({componentKey:A,themeVariant:B,className:H,layout:I,...z}){const q=M({defaultComponentKey:"FieldGroup",componentKey:A,themeVariant:B,className:H});return O(Z,{...q.props,...z,className:q.className})}export function FieldLabel({componentKey:A,themeVariant:B,className:H,children:I,...z}){const q=M({defaultComponentKey:"FieldLabel",componentKey:A,themeVariant:B,className:H}),J=Q();return O($,{...q.props,...z,className:q.className,children:J(I)})}export function FieldDescription({componentKey:A,themeVariant:B,className:H,children:I,...z}){const q=M({defaultComponentKey:"FieldDescription",componentKey:A,themeVariant:B,className:H}),J=Q();return O(X,{...q.props,...z,className:q.className,children:J(I)})}export function FieldError({componentKey:A,themeVariant:B,className:H,children:I,...z}){const q=M({defaultComponentKey:"FieldError",componentKey:A,themeVariant:B,className:H}),J=Q();return O(Y,{...q.props,...z,className:q.className,children:J(I)})}export function FieldSeparator({componentKey:A,themeVariant:B,className:H,children:I,...z}){const q=M({defaultComponentKey:"FieldSeparator",componentKey:A,themeVariant:B,className:H}),J=Q();return O(C,{...q.props,...z,className:q.className,children:J(I)})}export{InputGroup,InputGroupAddon,InputGroupButton,InputGroupInput,InputGroupText,InputGroupTextarea}from"@contractspec/lib.ui-kit-web/ui/input-group";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Field,FieldContent,FieldDescription,FieldError,FieldGroup,FieldLabel,FieldLegend,FieldSeparator,FieldSet}from"./Field";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{InputGroup,InputGroupAddon,InputGroupButton,InputGroupInput,InputGroupText,InputGroupTextarea}from"@contractspec/lib.ui-kit-web/ui/input-group";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Text as InputGroupText}from"@contractspec/lib.ui-kit/ui/text";export{Button as InputGroupButton}from"../../atoms/Button";export{Input as InputGroupInput}from"../../atoms/Input";export{Textarea as InputGroupTextarea}from"../../atoms/Textarea";export{HStack as InputGroup,HStack as InputGroupAddon}from"../../layout/Stack";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{InputOTP,InputOTPGroup,InputOTPSeparator,InputOTPSlot}from"@contractspec/lib.ui-kit-web/ui/input-otp";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Input as InputOTP}from"../../atoms/Input";export{Box as InputOTPSlot,Box as InputOTPSeparator,HStack as InputOTPGroup}from"../../layout/Stack";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as S}from"react/jsx-runtime";import{LoadingButton as M}from"@contractspec/lib.ui-kit-web/ui/loading-button";import{useThemedPrimitive as O,useTranslatedNode as Q,useTranslatedText as R}from"../../primitives/themed";export function LoadingButton({componentKey:z,themeVariant:A,className:C,children:D,loadingText:E,labelI18n:F,...G}){const q=O({defaultComponentKey:"LoadingButton",componentKey:z,themeVariant:A,className:C}),H=Q(),J=R();return S(M,{...q.props,...G,className:q.className,loadingText:J(E),children:H(F??D)})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as S}from"react/jsx-runtime";import{LoadingButton as M}from"@contractspec/lib.ui-kit/ui/loading-button";import{useThemedPrimitive as O,useTranslatedNode as Q,useTranslatedText as R}from"../../primitives/themed";export function LoadingButton({componentKey:z,themeVariant:A,className:C,children:D,loadingText:E,labelI18n:F,...G}){const q=O({defaultComponentKey:"LoadingButton",componentKey:z,themeVariant:A,className:C}),H=Q(),J=R();return S(M,{...q.props,...G,className:q.className,loadingText:J(E),children:H(F??D)})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as A}from"react/jsx-runtime";import{NativeSelectOptGroup,NativeSelect as D,NativeSelectOption as E}from"@contractspec/lib.ui-kit-web/ui/native-select";import{useThemedPrimitive as F,useTranslatedText as H}from"../../primitives/themed";export function NativeSelect({componentKey:g,themeVariant:q,className:B,placeholderI18n:I,...C}){const z=F({defaultComponentKey:"NativeSelect",componentKey:g,themeVariant:q,className:B});return A(D,{...z.props,...C,className:z.className})}export function NativeSelectOption(g){const q=H();return A(E,{...g,children:typeof g.children==="string"?q(g.children):g.children})}export{NativeSelectOptGroup};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Select as NativeSelect,SelectGroup as NativeSelectOptGroup,SelectItem as NativeSelectOption}from"./Select";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as A,jsxs as k}from"react/jsx-runtime";import{SelectContent,SelectGroup,SelectItem,SelectTrigger,SelectValue,Select as Y}from"@contractspec/lib.ui-kit-web/ui/select";import{useThemedPrimitive as Z,useTranslatedText as $}from"../../primitives/themed";function B(z){return typeof z==="string"?z:String(z??"")}export function Select({options:z,value:D,onChange:F,placeholder:H,disabled:J,className:L,componentKey:M,themeVariant:O,placeholderI18n:Q,...R}){const E=$(),U=Z({defaultComponentKey:"Select",componentKey:M,themeVariant:O,className:L});return k(Y,{value:D==null?"":B(D),onValueChange:(q)=>F?.(q),disabled:J,...R,children:[A(SelectTrigger,{className:U.className,children:A(SelectValue,{placeholder:E(Q??H)})}),A(SelectContent,{children:A(SelectGroup,{children:z?.map((q,X)=>A(SelectItem,{value:B(q.value),disabled:q.disabled,children:E(q.labelI18n)??B(q.labelI18n)},`${B(q.value)}-${X}`))})})]})}export{SelectContent,SelectGroup,SelectItem,SelectTrigger,SelectValue};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as B,jsxs as $}from"react/jsx-runtime";import{Select as X,SelectContent,SelectGroup,SelectItem,SelectTrigger,SelectValue}from"@contractspec/lib.ui-kit/ui/select";import{useThemedPrimitive as Y,useTranslatedText as Z}from"../../primitives/themed";function A(z){return typeof z==="string"?z:String(z??"")}export function Select({options:z,value:D,onChange:F,placeholder:H,disabled:J,className:L,componentKey:M,themeVariant:O,placeholderI18n:Q}){const E=Z(),U=Y({defaultComponentKey:"Select",componentKey:M,themeVariant:O,className:L});return $(X,{value:D==null?void 0:{value:A(D),label:A(D)},onValueChange:(q)=>F?.(q?.value),children:[B(SelectTrigger,{disabled:J,className:U.className,children:B(SelectValue,{placeholder:E(Q??H)??""})}),B(SelectContent,{children:B(SelectGroup,{children:z?.map((q,W)=>B(SelectItem,{value:A(q.value),label:E(q.labelI18n)??A(q.labelI18n),disabled:q.disabled},`${A(q.value)}-${W}`))})})]})}export{SelectContent,SelectGroup,SelectItem,SelectTrigger,SelectValue};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Autocomplete}from"./Autocomplete";export{Checkbox,RadioGroup,RadioGroupItem,Switch}from"./ChoiceControls";export{Combobox}from"./Combobox";export{DatePicker,DateRangePicker,DateTimePicker,TimePicker}from"./DateTimeControls";export{DropdownMenu,DropdownMenuCheckboxItem,DropdownMenuContent,DropdownMenuGroup,DropdownMenuItem,DropdownMenuLabel,DropdownMenuPortal,DropdownMenuRadioGroup,DropdownMenuRadioItem,DropdownMenuSeparator,DropdownMenuShortcut,DropdownMenuSub,DropdownMenuSubContent,DropdownMenuSubTrigger,DropdownMenuTrigger}from"./DropdownMenu";export{Field,FieldContent,FieldDescription,FieldError,FieldGroup,FieldLabel,FieldLegend,FieldSeparator,FieldSet}from"./Field";export{InputGroup,InputGroupAddon,InputGroupButton,InputGroupInput,InputGroupText,InputGroupTextarea}from"./InputGroup";export{InputOTP,InputOTPGroup,InputOTPSeparator,InputOTPSlot}from"./InputOTP";export{LoadingButton}from"./LoadingButton";export{NativeSelect,NativeSelectOptGroup,NativeSelectOption}from"./NativeSelect";export{Select}from"./Select";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{ActionForm}from"./ActionForm";export*from"./controls";export{FormCardLayout}from"./FormCardLayout";export{FormDialog}from"./FormDialog";export{FormGrid,FormRow,FormSection}from"./FormLayout";export{FormOneByOneLayout}from"./FormOneByOneLayout";export{FormStepsLayout}from"./FormStepsLayout";export{ZodForm}from"./ZodForm";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as E}from"react/jsx-runtime";import{Box as F,HStack as G,VStack as I}from"@contractspec/lib.ui-kit-web/ui/stack";import{useThemedPrimitive as D}from"../primitives/themed";export function Box({componentKey:q,themeVariant:z,className:A,...C}){const g=D({defaultComponentKey:"Box",componentKey:q,themeVariant:z,className:A});return E(F,{...g.props,...C,className:g.className})}export function HStack({componentKey:q,themeVariant:z,className:A,...C}){const g=D({defaultComponentKey:"HStack",componentKey:q,themeVariant:z,className:A});return E(G,{...g.props,...C,className:g.className})}export function VStack({componentKey:q,themeVariant:z,className:A,...C}){const g=D({defaultComponentKey:"VStack",componentKey:q,themeVariant:z,className:A});return E(I,{...g.props,...C,className:g.className})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as E}from"react/jsx-runtime";import{Box as F,HStack as G,VStack as I}from"@contractspec/lib.ui-kit/ui/stack";import{useThemedPrimitive as D}from"../primitives/themed";export function Box({componentKey:q,themeVariant:z,className:A,...C}){const g=D({defaultComponentKey:"Box",componentKey:q,themeVariant:z,className:A});return E(F,{...g.props,...C,className:g.className})}export function HStack({componentKey:q,themeVariant:z,className:A,...C}){const g=D({defaultComponentKey:"HStack",componentKey:q,themeVariant:z,className:A});return E(G,{...g.props,...C,className:g.className})}export function VStack({componentKey:q,themeVariant:z,className:A,...C}){const g=D({defaultComponentKey:"VStack",componentKey:q,themeVariant:z,className:A});return E(I,{...g.props,...C,className:g.className})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Box,HStack,VStack}from"./Stack";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as g,jsxs as C}from"react/jsx-runtime";import{cn as B}from"@contractspec/lib.ui-kit-web/ui/utils";export function DefinitionList({items:v,className:z}){return g("dl",{className:B("grid grid-cols-1 gap-3 md:grid-cols-3",z),children:v.map((q,A)=>C("div",{className:"col-span-1 grid grid-cols-3 gap-3 md:col-span-3",children:[g("dt",{className:"col-span-1 font-medium text-base text-foreground",children:q.term}),g("dd",{className:"col-span-2 text-base text-muted-foreground",children:q.description})]},A))})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as g,jsxs as C}from"react/jsx-runtime";import{cn as B}from"@contractspec/lib.ui-kit-web/ui/utils";export function KeyValueList({items:v,className:z}){return g("div",{className:B("grid grid-cols-1 gap-2",z),children:v.map((q,A)=>C("div",{className:"flex items-start gap-3",children:[g("div",{className:"w-40 shrink-0 font-medium text-base text-foreground",children:q.key}),g("div",{className:"flex-1 text-base text-muted-foreground",children:q.value})]},A))})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as B}from"react/jsx-runtime";import{cn as z}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as A}from"class-variance-authority";const calloutVariants=A("rounded-md border p-4",{variants:{tone:{info:"border-border bg-muted/30",warning:"border-warning/50 bg-warning/10",danger:"border-destructive/50 bg-destructive/10"}},defaultVariants:{tone:"info"}});export function LegalCallout({tone:d,className:g,...q}){return B("div",{className:z(calloutVariants({tone:d}),g),...q})}export{calloutVariants};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as G}from"react/jsx-runtime";import{cn as E}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as F}from"class-variance-authority";const headingVariants=F("text-foreground tracking-tight",{variants:{level:{h1:"font-semibold text-3xl md:text-4xl",h2:"font-semibold text-2xl md:text-3xl",h3:"font-semibold text-xl md:text-2xl",h4:"font-semibold text-lg md:text-xl"},tone:{default:"",muted:"text-muted-foreground",accent:"text-primary"},spacing:{none:"",sm:"mt-4",md:"mt-6",lg:"mt-8"}},defaultVariants:{level:"h2",tone:"default",spacing:"md"}});export function LegalHeading({as:z,level:q,tone:A,spacing:B,className:C,...D}){return G(z??q??"h2",{className:E(headingVariants({level:q,tone:A,spacing:B}),C),...D})}export{headingVariants};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as F}from"react/jsx-runtime";import{cn as D}from"@contractspec/lib.ui-kit-web/ui/utils";import{cva as E}from"class-variance-authority";const listVariants=E("",{variants:{type:{unordered:"list-disc pl-6",ordered:"list-decimal pl-6",none:"pl-0"},spacing:{sm:"space-y-1",md:"space-y-2",lg:"space-y-3"}},defaultVariants:{type:"unordered",spacing:"md"}});export function LegalList({type:q,spacing:z,className:A,children:B,...C}){return F(q==="ordered"?"ol":"ul",{className:D(listVariants({type:q,spacing:z}),A),...C,children:B})}export{listVariants};
|