@hanzo/ui 8.0.27 → 8.0.28
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/dist/backends/gui/aspect-ratio.cjs +15 -0
- package/dist/backends/gui/aspect-ratio.d.ts +1 -0
- package/dist/backends/gui/aspect-ratio.d.ts.map +1 -0
- package/dist/backends/gui/aspect-ratio.js +13 -0
- package/dist/backends/gui/aspect-ratio.js.map +1 -0
- package/dist/backends/gui/avatar.cjs +20 -0
- package/dist/backends/gui/avatar.d.ts +1 -0
- package/dist/backends/gui/avatar.d.ts.map +1 -0
- package/dist/backends/gui/avatar.js +16 -0
- package/dist/backends/gui/avatar.js.map +1 -0
- package/dist/backends/gui/badge.cjs +80 -0
- package/dist/backends/gui/badge.d.ts +1 -0
- package/dist/backends/gui/badge.d.ts.map +1 -0
- package/dist/backends/gui/badge.js +76 -0
- package/dist/backends/gui/badge.js.map +1 -0
- package/dist/backends/gui/button.cjs +114 -0
- package/dist/backends/gui/button.d.ts +4 -24
- package/dist/backends/gui/button.d.ts.map +1 -0
- package/dist/backends/gui/button.js +111 -0
- package/dist/backends/gui/button.js.map +1 -0
- package/dist/backends/gui/card.cjs +49 -0
- package/dist/backends/gui/card.d.ts +1 -0
- package/dist/backends/gui/card.d.ts.map +1 -0
- package/dist/backends/gui/card.js +41 -0
- package/dist/backends/gui/card.js.map +1 -0
- package/dist/backends/gui/checkbox.cjs +16 -0
- package/dist/backends/gui/checkbox.d.ts +2 -1
- package/dist/backends/gui/checkbox.d.ts.map +1 -0
- package/dist/backends/gui/checkbox.js +14 -0
- package/dist/backends/gui/checkbox.js.map +1 -0
- package/dist/backends/gui/collapsible.cjs +15 -0
- package/dist/backends/gui/collapsible.d.ts +1 -0
- package/dist/backends/gui/collapsible.d.ts.map +1 -0
- package/dist/backends/gui/collapsible.js +11 -0
- package/dist/backends/gui/collapsible.js.map +1 -0
- package/dist/backends/gui/command.cjs +198 -0
- package/dist/backends/gui/command.d.ts +2 -1
- package/dist/backends/gui/command.d.ts.map +1 -0
- package/dist/backends/gui/command.js +188 -0
- package/dist/backends/gui/command.js.map +1 -0
- package/dist/backends/gui/command.logic.cjs +49 -0
- package/dist/backends/gui/command.logic.d.ts +1 -0
- package/dist/backends/gui/command.logic.d.ts.map +1 -0
- package/dist/backends/gui/command.logic.js +45 -0
- package/dist/backends/gui/command.logic.js.map +1 -0
- package/dist/backends/gui/dialog.cjs +41 -0
- package/dist/backends/gui/dialog.d.ts +1 -0
- package/dist/backends/gui/dialog.d.ts.map +1 -0
- package/dist/backends/gui/dialog.js +30 -0
- package/dist/backends/gui/dialog.js.map +1 -0
- package/dist/backends/gui/dropdown-menu.cjs +168 -0
- package/dist/backends/gui/dropdown-menu.d.ts +7 -6
- package/dist/backends/gui/dropdown-menu.d.ts.map +1 -0
- package/dist/backends/gui/dropdown-menu.js +119 -0
- package/dist/backends/gui/dropdown-menu.js.map +1 -0
- package/dist/backends/gui/gesture.cjs +74 -0
- package/dist/backends/gui/gesture.d.ts +68 -0
- package/dist/backends/gui/gesture.d.ts.map +1 -0
- package/dist/backends/gui/gesture.js +69 -0
- package/dist/backends/gui/gesture.js.map +1 -0
- package/dist/backends/gui/index.cjs +134 -0
- package/dist/backends/gui/index.d.ts +25 -24
- package/dist/backends/gui/index.d.ts.map +1 -0
- package/dist/backends/gui/index.js +41 -0
- package/dist/backends/gui/index.js.map +1 -0
- package/dist/backends/gui/ink.cjs +14 -0
- package/dist/backends/gui/ink.d.ts +1 -0
- package/dist/backends/gui/ink.d.ts.map +1 -0
- package/dist/backends/gui/ink.js +11 -0
- package/dist/backends/gui/ink.js.map +1 -0
- package/dist/backends/gui/input.cjs +39 -0
- package/dist/backends/gui/input.d.ts +1 -0
- package/dist/backends/gui/input.d.ts.map +1 -0
- package/dist/backends/gui/input.js +37 -0
- package/dist/backends/gui/input.js.map +1 -0
- package/dist/backends/gui/label.cjs +10 -0
- package/dist/backends/gui/label.d.ts +1 -0
- package/dist/backends/gui/label.d.ts.map +1 -0
- package/dist/backends/gui/label.js +8 -0
- package/dist/backends/gui/label.js.map +1 -0
- package/dist/backends/gui/popover.cjs +39 -0
- package/dist/backends/gui/popover.d.ts +1 -0
- package/dist/backends/gui/popover.d.ts.map +1 -0
- package/dist/backends/gui/popover.js +33 -0
- package/dist/backends/gui/popover.js.map +1 -0
- package/dist/backends/gui/progress.cjs +10 -0
- package/dist/backends/gui/progress.d.ts +1 -0
- package/dist/backends/gui/progress.d.ts.map +1 -0
- package/dist/backends/gui/progress.js +8 -0
- package/dist/backends/gui/progress.js.map +1 -0
- package/dist/backends/gui/resizable.cjs +174 -0
- package/dist/backends/gui/resizable.d.ts +5 -3
- package/dist/backends/gui/resizable.d.ts.map +1 -0
- package/dist/backends/gui/resizable.js +168 -0
- package/dist/backends/gui/resizable.js.map +1 -0
- package/dist/backends/gui/resizable.logic.cjs +46 -0
- package/dist/backends/gui/resizable.logic.d.ts +1 -0
- package/dist/backends/gui/resizable.logic.d.ts.map +1 -0
- package/dist/backends/gui/resizable.logic.js +43 -0
- package/dist/backends/gui/resizable.logic.js.map +1 -0
- package/dist/backends/gui/scroll-area.cjs +126 -0
- package/dist/backends/gui/scroll-area.d.ts +1 -0
- package/dist/backends/gui/scroll-area.d.ts.map +1 -0
- package/dist/backends/gui/scroll-area.js +123 -0
- package/dist/backends/gui/scroll-area.js.map +1 -0
- package/dist/backends/gui/select.cjs +54 -0
- package/dist/backends/gui/select.d.ts +1 -0
- package/dist/backends/gui/select.d.ts.map +1 -0
- package/dist/backends/gui/select.js +43 -0
- package/dist/backends/gui/select.js.map +1 -0
- package/dist/backends/gui/separator.cjs +10 -0
- package/dist/backends/gui/separator.d.ts +1 -0
- package/dist/backends/gui/separator.d.ts.map +1 -0
- package/dist/backends/gui/separator.js +8 -0
- package/dist/backends/gui/separator.js.map +1 -0
- package/dist/backends/gui/slider.cjs +13 -0
- package/dist/backends/gui/slider.d.ts +2 -1
- package/dist/backends/gui/slider.d.ts.map +1 -0
- package/dist/backends/gui/slider.js +11 -0
- package/dist/backends/gui/slider.js.map +1 -0
- package/dist/backends/gui/slot.cjs +10 -0
- package/dist/backends/gui/slot.d.ts +1 -0
- package/dist/backends/gui/slot.d.ts.map +1 -0
- package/dist/backends/gui/slot.js +7 -0
- package/dist/backends/gui/slot.js.map +1 -0
- package/dist/backends/gui/switch.cjs +13 -0
- package/dist/backends/gui/switch.d.ts +2 -1
- package/dist/backends/gui/switch.d.ts.map +1 -0
- package/dist/backends/gui/switch.js +11 -0
- package/dist/backends/gui/switch.js.map +1 -0
- package/dist/backends/gui/tabs.cjs +19 -0
- package/dist/backends/gui/tabs.d.ts +1 -0
- package/dist/backends/gui/tabs.d.ts.map +1 -0
- package/dist/backends/gui/tabs.js +14 -0
- package/dist/backends/gui/tabs.js.map +1 -0
- package/dist/backends/gui/textarea.cjs +58 -0
- package/dist/backends/gui/textarea.d.ts +1 -0
- package/dist/backends/gui/textarea.d.ts.map +1 -0
- package/dist/backends/gui/textarea.js +23 -0
- package/dist/backends/gui/textarea.js.map +1 -0
- package/dist/backends/gui/toaster.cjs +13 -0
- package/dist/backends/gui/toaster.d.ts +1 -0
- package/dist/backends/gui/toaster.d.ts.map +1 -0
- package/dist/backends/gui/toaster.js +10 -0
- package/dist/backends/gui/toaster.js.map +1 -0
- package/dist/backends/gui/tooltip.cjs +22 -0
- package/dist/backends/gui/tooltip.d.ts +1 -0
- package/dist/backends/gui/tooltip.d.ts.map +1 -0
- package/dist/backends/gui/tooltip.js +17 -0
- package/dist/backends/gui/tooltip.js.map +1 -0
- package/dist/canvas.cjs +27 -15
- package/dist/canvas.d.ts +1 -0
- package/dist/canvas.d.ts.map +1 -0
- package/dist/canvas.js +10 -2
- package/dist/canvas.js.map +1 -1
- package/dist/cd/layout.cjs +143 -0
- package/dist/cd/layout.d.ts +1 -0
- package/dist/cd/layout.d.ts.map +1 -0
- package/dist/cd/layout.js +141 -0
- package/dist/cd/layout.js.map +1 -0
- package/dist/cd/status.cjs +132 -0
- package/dist/cd/status.d.ts +2 -1
- package/dist/cd/status.d.ts.map +1 -0
- package/dist/cd/status.js +120 -0
- package/dist/cd/status.js.map +1 -0
- package/dist/cd/time.cjs +60 -0
- package/dist/cd/time.d.ts +1 -0
- package/dist/cd/time.d.ts.map +1 -0
- package/dist/cd/time.js +56 -0
- package/dist/cd/time.js.map +1 -0
- package/dist/cd/types.cjs +19 -0
- package/dist/cd/types.d.ts +1 -0
- package/dist/cd/types.d.ts.map +1 -0
- package/dist/cd/types.js +19 -0
- package/dist/cd/types.js.map +1 -0
- package/dist/core/cn.cjs +15 -0
- package/dist/core/cn.d.ts +3 -1
- package/dist/core/cn.d.ts.map +1 -0
- package/dist/core/cn.js +13 -0
- package/dist/core/cn.js.map +1 -0
- package/dist/core/fonts.cjs +26 -0
- package/dist/core/fonts.d.ts +1 -0
- package/dist/core/fonts.d.ts.map +1 -0
- package/dist/core/fonts.js +24 -0
- package/dist/core/fonts.js.map +1 -0
- package/dist/core/index.cjs +31 -92
- package/dist/core/index.d.ts +4 -3
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -13
- package/dist/core/index.js.map +1 -1
- package/dist/core/tokens.cjs +35 -77
- package/dist/core/tokens.d.ts +1 -0
- package/dist/core/tokens.d.ts.map +1 -0
- package/dist/core/tokens.js +15 -3
- package/dist/core/tokens.js.map +1 -1
- package/dist/dashboard.cjs +24 -15
- package/dist/dashboard.d.ts +1 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/dashboard.js +7 -2
- package/dist/dashboard.js.map +1 -1
- package/dist/data.cjs +28 -15
- package/dist/data.d.ts +1 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +11 -2
- package/dist/data.js.map +1 -1
- package/dist/framework/CollectionBuilder.cjs +77 -0
- package/dist/framework/CollectionBuilder.d.ts +3 -2
- package/dist/framework/CollectionBuilder.d.ts.map +1 -0
- package/dist/framework/CollectionBuilder.js +75 -0
- package/dist/framework/CollectionBuilder.js.map +1 -0
- package/dist/framework/CollectionsBrowser.cjs +107 -0
- package/dist/framework/CollectionsBrowser.d.ts +3 -2
- package/dist/framework/CollectionsBrowser.d.ts.map +1 -0
- package/dist/framework/CollectionsBrowser.js +105 -0
- package/dist/framework/CollectionsBrowser.js.map +1 -0
- package/dist/framework/DocTypeDetail.cjs +187 -0
- package/dist/framework/DocTypeDetail.d.ts +2 -1
- package/dist/framework/DocTypeDetail.d.ts.map +1 -0
- package/dist/framework/DocTypeDetail.js +185 -0
- package/dist/framework/DocTypeDetail.js.map +1 -0
- package/dist/framework/DocTypeRecords.cjs +130 -0
- package/dist/framework/DocTypeRecords.d.ts +4 -3
- package/dist/framework/DocTypeRecords.d.ts.map +1 -0
- package/dist/framework/DocTypeRecords.js +128 -0
- package/dist/framework/DocTypeRecords.js.map +1 -0
- package/dist/framework/MediaGrid.cjs +134 -0
- package/dist/framework/MediaGrid.d.ts +4 -3
- package/dist/framework/MediaGrid.d.ts.map +1 -0
- package/dist/framework/MediaGrid.js +132 -0
- package/dist/framework/MediaGrid.js.map +1 -0
- package/dist/framework/RecordCards.cjs +47 -0
- package/dist/framework/RecordCards.d.ts +1 -0
- package/dist/framework/RecordCards.d.ts.map +1 -0
- package/dist/framework/RecordCards.js +45 -0
- package/dist/framework/RecordCards.js.map +1 -0
- package/dist/framework/builder-logic.cjs +169 -0
- package/dist/framework/builder-logic.d.ts +2 -1
- package/dist/framework/builder-logic.d.ts.map +1 -0
- package/dist/framework/builder-logic.js +156 -0
- package/dist/framework/builder-logic.js.map +1 -0
- package/dist/framework/client.cjs +95 -0
- package/dist/framework/client.d.ts +2 -1
- package/dist/framework/client.d.ts.map +1 -0
- package/dist/framework/client.js +91 -0
- package/dist/framework/client.js.map +1 -0
- package/dist/framework/core.cjs +36 -213
- package/dist/framework/core.d.ts +7 -6
- package/dist/framework/core.d.ts.map +1 -0
- package/dist/framework/core.js +20 -3
- package/dist/framework/core.js.map +1 -1
- package/dist/framework/data.cjs +41 -0
- package/dist/framework/data.d.ts +3 -2
- package/dist/framework/data.d.ts.map +1 -0
- package/dist/framework/data.js +38 -0
- package/dist/framework/data.js.map +1 -0
- package/dist/framework/fields.cjs +358 -0
- package/dist/framework/fields.d.ts +2 -1
- package/dist/framework/fields.d.ts.map +1 -0
- package/dist/framework/fields.js +335 -0
- package/dist/framework/fields.js.map +1 -0
- package/dist/framework/index.cjs +58 -1341
- package/dist/framework/index.d.ts +10 -9
- package/dist/framework/index.d.ts.map +1 -0
- package/dist/framework/index.js +35 -1119
- package/dist/framework/index.js.map +1 -1
- package/dist/framework/media.cjs +133 -0
- package/dist/framework/media.d.ts +2 -1
- package/dist/framework/media.d.ts.map +1 -0
- package/dist/framework/media.js +124 -0
- package/dist/framework/media.js.map +1 -0
- package/dist/framework/parts.cjs +60 -0
- package/dist/framework/parts.d.ts +1 -0
- package/dist/framework/parts.d.ts.map +1 -0
- package/dist/framework/parts.js +51 -0
- package/dist/framework/parts.js.map +1 -0
- package/dist/framework/responsive.cjs +62 -0
- package/dist/framework/responsive.d.ts +1 -0
- package/dist/framework/responsive.d.ts.map +1 -0
- package/dist/framework/responsive.js +58 -0
- package/dist/framework/responsive.js.map +1 -0
- package/dist/framework/types.cjs +20 -0
- package/dist/framework/types.d.ts +1 -0
- package/dist/framework/types.d.ts.map +1 -0
- package/dist/framework/types.js +18 -0
- package/dist/framework/types.js.map +1 -0
- package/dist/gitops.cjs +21 -15
- package/dist/gitops.d.ts +1 -0
- package/dist/gitops.d.ts.map +1 -0
- package/dist/gitops.js +4 -2
- package/dist/gitops.js.map +1 -1
- package/dist/gui-config.cjs +145 -113
- package/dist/gui-config.d.ts +1 -0
- package/dist/gui-config.d.ts.map +1 -0
- package/dist/gui-config.js +140 -105
- package/dist/gui-config.js.map +1 -1
- package/dist/index.cjs +41 -375
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -5
- package/dist/index.js.map +1 -1
- package/dist/models/ModelSelector.cjs +58 -0
- package/dist/models/ModelSelector.d.ts +10 -6
- package/dist/models/ModelSelector.d.ts.map +1 -0
- package/dist/models/ModelSelector.js +56 -0
- package/dist/models/ModelSelector.js.map +1 -0
- package/dist/models/catalog.cjs +191 -0
- package/dist/models/catalog.d.ts +1 -0
- package/dist/models/catalog.d.ts.map +1 -0
- package/dist/models/catalog.js +185 -0
- package/dist/models/catalog.js.map +1 -0
- package/dist/models/index.cjs +16 -225
- package/dist/models/index.d.ts +6 -5
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +7 -217
- package/dist/models/index.js.map +1 -1
- package/dist/models/types.cjs +8 -0
- package/dist/models/types.d.ts +1 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +8 -0
- package/dist/models/types.js.map +1 -0
- package/dist/oss/blueprint.cjs +96 -0
- package/dist/oss/blueprint.d.ts +1 -0
- package/dist/oss/blueprint.d.ts.map +1 -0
- package/dist/oss/blueprint.js +94 -0
- package/dist/oss/blueprint.js.map +1 -0
- package/dist/oss/catalog.cjs +174 -0
- package/dist/oss/catalog.d.ts +1 -0
- package/dist/oss/catalog.d.ts.map +1 -0
- package/dist/oss/catalog.js +165 -0
- package/dist/oss/catalog.js.map +1 -0
- package/dist/oss.cjs +27 -189
- package/dist/oss.d.ts +3 -2
- package/dist/oss.d.ts.map +1 -0
- package/dist/oss.js +12 -179
- package/dist/oss.js.map +1 -1
- package/dist/primitives/AspectRatio.cjs +8 -14
- package/dist/primitives/AspectRatio.d.ts +2 -1
- package/dist/primitives/AspectRatio.d.ts.map +1 -0
- package/dist/primitives/AspectRatio.js +4 -4
- package/dist/primitives/AspectRatio.js.map +1 -1
- package/dist/primitives/Avatar.cjs +8 -14
- package/dist/primitives/Avatar.d.ts +2 -1
- package/dist/primitives/Avatar.d.ts.map +1 -0
- package/dist/primitives/Avatar.js +4 -4
- package/dist/primitives/Avatar.js.map +1 -1
- package/dist/primitives/AvatarFallback.cjs +8 -14
- package/dist/primitives/AvatarFallback.d.ts +2 -1
- package/dist/primitives/AvatarFallback.d.ts.map +1 -0
- package/dist/primitives/AvatarFallback.js +4 -4
- package/dist/primitives/AvatarFallback.js.map +1 -1
- package/dist/primitives/AvatarImage.cjs +8 -14
- package/dist/primitives/AvatarImage.d.ts +2 -1
- package/dist/primitives/AvatarImage.d.ts.map +1 -0
- package/dist/primitives/AvatarImage.js +4 -4
- package/dist/primitives/AvatarImage.js.map +1 -1
- package/dist/primitives/Badge.cjs +8 -14
- package/dist/primitives/Badge.d.ts +2 -1
- package/dist/primitives/Badge.d.ts.map +1 -0
- package/dist/primitives/Badge.js +4 -4
- package/dist/primitives/Badge.js.map +1 -1
- package/dist/primitives/Button.cjs +8 -14
- package/dist/primitives/Button.d.ts +2 -1
- package/dist/primitives/Button.d.ts.map +1 -0
- package/dist/primitives/Button.js +4 -4
- package/dist/primitives/Button.js.map +1 -1
- package/dist/primitives/Card.cjs +8 -14
- package/dist/primitives/Card.d.ts +2 -1
- package/dist/primitives/Card.d.ts.map +1 -0
- package/dist/primitives/Card.js +4 -4
- package/dist/primitives/Card.js.map +1 -1
- package/dist/primitives/CardAction.cjs +8 -14
- package/dist/primitives/CardAction.d.ts +2 -1
- package/dist/primitives/CardAction.d.ts.map +1 -0
- package/dist/primitives/CardAction.js +4 -4
- package/dist/primitives/CardAction.js.map +1 -1
- package/dist/primitives/CardContent.cjs +8 -14
- package/dist/primitives/CardContent.d.ts +2 -1
- package/dist/primitives/CardContent.d.ts.map +1 -0
- package/dist/primitives/CardContent.js +4 -4
- package/dist/primitives/CardContent.js.map +1 -1
- package/dist/primitives/CardDescription.cjs +8 -14
- package/dist/primitives/CardDescription.d.ts +2 -1
- package/dist/primitives/CardDescription.d.ts.map +1 -0
- package/dist/primitives/CardDescription.js +4 -4
- package/dist/primitives/CardDescription.js.map +1 -1
- package/dist/primitives/CardFooter.cjs +8 -14
- package/dist/primitives/CardFooter.d.ts +2 -1
- package/dist/primitives/CardFooter.d.ts.map +1 -0
- package/dist/primitives/CardFooter.js +4 -4
- package/dist/primitives/CardFooter.js.map +1 -1
- package/dist/primitives/CardHeader.cjs +8 -14
- package/dist/primitives/CardHeader.d.ts +2 -1
- package/dist/primitives/CardHeader.d.ts.map +1 -0
- package/dist/primitives/CardHeader.js +4 -4
- package/dist/primitives/CardHeader.js.map +1 -1
- package/dist/primitives/CardTitle.cjs +8 -14
- package/dist/primitives/CardTitle.d.ts +2 -1
- package/dist/primitives/CardTitle.d.ts.map +1 -0
- package/dist/primitives/CardTitle.js +4 -4
- package/dist/primitives/CardTitle.js.map +1 -1
- package/dist/primitives/Checkbox.cjs +8 -14
- package/dist/primitives/Checkbox.d.ts +2 -1
- package/dist/primitives/Checkbox.d.ts.map +1 -0
- package/dist/primitives/Checkbox.js +4 -4
- package/dist/primitives/Checkbox.js.map +1 -1
- package/dist/primitives/Collapsible.cjs +8 -14
- package/dist/primitives/Collapsible.d.ts +2 -1
- package/dist/primitives/Collapsible.d.ts.map +1 -0
- package/dist/primitives/Collapsible.js +4 -4
- package/dist/primitives/Collapsible.js.map +1 -1
- package/dist/primitives/CollapsibleContent.cjs +8 -14
- package/dist/primitives/CollapsibleContent.d.ts +2 -1
- package/dist/primitives/CollapsibleContent.d.ts.map +1 -0
- package/dist/primitives/CollapsibleContent.js +4 -4
- package/dist/primitives/CollapsibleContent.js.map +1 -1
- package/dist/primitives/CollapsibleTrigger.cjs +8 -14
- package/dist/primitives/CollapsibleTrigger.d.ts +2 -1
- package/dist/primitives/CollapsibleTrigger.d.ts.map +1 -0
- package/dist/primitives/CollapsibleTrigger.js +4 -4
- package/dist/primitives/CollapsibleTrigger.js.map +1 -1
- package/dist/primitives/Command.cjs +8 -14
- package/dist/primitives/Command.d.ts +2 -1
- package/dist/primitives/Command.d.ts.map +1 -0
- package/dist/primitives/Command.js +4 -4
- package/dist/primitives/Command.js.map +1 -1
- package/dist/primitives/CommandDialog.cjs +8 -14
- package/dist/primitives/CommandDialog.d.ts +2 -1
- package/dist/primitives/CommandDialog.d.ts.map +1 -0
- package/dist/primitives/CommandDialog.js +4 -4
- package/dist/primitives/CommandDialog.js.map +1 -1
- package/dist/primitives/CommandEmpty.cjs +8 -14
- package/dist/primitives/CommandEmpty.d.ts +2 -1
- package/dist/primitives/CommandEmpty.d.ts.map +1 -0
- package/dist/primitives/CommandEmpty.js +4 -4
- package/dist/primitives/CommandEmpty.js.map +1 -1
- package/dist/primitives/CommandGroup.cjs +8 -14
- package/dist/primitives/CommandGroup.d.ts +2 -1
- package/dist/primitives/CommandGroup.d.ts.map +1 -0
- package/dist/primitives/CommandGroup.js +4 -4
- package/dist/primitives/CommandGroup.js.map +1 -1
- package/dist/primitives/CommandInput.cjs +8 -14
- package/dist/primitives/CommandInput.d.ts +2 -1
- package/dist/primitives/CommandInput.d.ts.map +1 -0
- package/dist/primitives/CommandInput.js +4 -4
- package/dist/primitives/CommandInput.js.map +1 -1
- package/dist/primitives/CommandItem.cjs +8 -14
- package/dist/primitives/CommandItem.d.ts +2 -1
- package/dist/primitives/CommandItem.d.ts.map +1 -0
- package/dist/primitives/CommandItem.js +4 -4
- package/dist/primitives/CommandItem.js.map +1 -1
- package/dist/primitives/CommandList.cjs +8 -14
- package/dist/primitives/CommandList.d.ts +2 -1
- package/dist/primitives/CommandList.d.ts.map +1 -0
- package/dist/primitives/CommandList.js +4 -4
- package/dist/primitives/CommandList.js.map +1 -1
- package/dist/primitives/CommandSeparator.cjs +8 -14
- package/dist/primitives/CommandSeparator.d.ts +2 -1
- package/dist/primitives/CommandSeparator.d.ts.map +1 -0
- package/dist/primitives/CommandSeparator.js +4 -4
- package/dist/primitives/CommandSeparator.js.map +1 -1
- package/dist/primitives/CommandShortcut.cjs +8 -14
- package/dist/primitives/CommandShortcut.d.ts +2 -1
- package/dist/primitives/CommandShortcut.d.ts.map +1 -0
- package/dist/primitives/CommandShortcut.js +4 -4
- package/dist/primitives/CommandShortcut.js.map +1 -1
- package/dist/primitives/Dialog.cjs +8 -14
- package/dist/primitives/Dialog.d.ts +2 -1
- package/dist/primitives/Dialog.d.ts.map +1 -0
- package/dist/primitives/Dialog.js +4 -4
- package/dist/primitives/Dialog.js.map +1 -1
- package/dist/primitives/DialogClose.cjs +8 -14
- package/dist/primitives/DialogClose.d.ts +2 -1
- package/dist/primitives/DialogClose.d.ts.map +1 -0
- package/dist/primitives/DialogClose.js +4 -4
- package/dist/primitives/DialogClose.js.map +1 -1
- package/dist/primitives/DialogContent.cjs +8 -14
- package/dist/primitives/DialogContent.d.ts +2 -1
- package/dist/primitives/DialogContent.d.ts.map +1 -0
- package/dist/primitives/DialogContent.js +4 -4
- package/dist/primitives/DialogContent.js.map +1 -1
- package/dist/primitives/DialogDescription.cjs +8 -14
- package/dist/primitives/DialogDescription.d.ts +2 -1
- package/dist/primitives/DialogDescription.d.ts.map +1 -0
- package/dist/primitives/DialogDescription.js +4 -4
- package/dist/primitives/DialogDescription.js.map +1 -1
- package/dist/primitives/DialogFooter.cjs +8 -14
- package/dist/primitives/DialogFooter.d.ts +2 -1
- package/dist/primitives/DialogFooter.d.ts.map +1 -0
- package/dist/primitives/DialogFooter.js +4 -4
- package/dist/primitives/DialogFooter.js.map +1 -1
- package/dist/primitives/DialogHeader.cjs +8 -14
- package/dist/primitives/DialogHeader.d.ts +2 -1
- package/dist/primitives/DialogHeader.d.ts.map +1 -0
- package/dist/primitives/DialogHeader.js +4 -4
- package/dist/primitives/DialogHeader.js.map +1 -1
- package/dist/primitives/DialogOverlay.cjs +8 -14
- package/dist/primitives/DialogOverlay.d.ts +2 -1
- package/dist/primitives/DialogOverlay.d.ts.map +1 -0
- package/dist/primitives/DialogOverlay.js +4 -4
- package/dist/primitives/DialogOverlay.js.map +1 -1
- package/dist/primitives/DialogPortal.cjs +8 -14
- package/dist/primitives/DialogPortal.d.ts +2 -1
- package/dist/primitives/DialogPortal.d.ts.map +1 -0
- package/dist/primitives/DialogPortal.js +4 -4
- package/dist/primitives/DialogPortal.js.map +1 -1
- package/dist/primitives/DialogTitle.cjs +8 -14
- package/dist/primitives/DialogTitle.d.ts +2 -1
- package/dist/primitives/DialogTitle.d.ts.map +1 -0
- package/dist/primitives/DialogTitle.js +4 -4
- package/dist/primitives/DialogTitle.js.map +1 -1
- package/dist/primitives/DialogTrigger.cjs +8 -14
- package/dist/primitives/DialogTrigger.d.ts +2 -1
- package/dist/primitives/DialogTrigger.d.ts.map +1 -0
- package/dist/primitives/DialogTrigger.js +4 -4
- package/dist/primitives/DialogTrigger.js.map +1 -1
- package/dist/primitives/DropdownMenu.cjs +8 -14
- package/dist/primitives/DropdownMenu.d.ts +2 -1
- package/dist/primitives/DropdownMenu.d.ts.map +1 -0
- package/dist/primitives/DropdownMenu.js +4 -4
- package/dist/primitives/DropdownMenu.js.map +1 -1
- package/dist/primitives/DropdownMenuCheckboxItem.cjs +8 -14
- package/dist/primitives/DropdownMenuCheckboxItem.d.ts +2 -1
- package/dist/primitives/DropdownMenuCheckboxItem.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuCheckboxItem.js +4 -4
- package/dist/primitives/DropdownMenuCheckboxItem.js.map +1 -1
- package/dist/primitives/DropdownMenuContent.cjs +8 -14
- package/dist/primitives/DropdownMenuContent.d.ts +2 -1
- package/dist/primitives/DropdownMenuContent.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuContent.js +4 -4
- package/dist/primitives/DropdownMenuContent.js.map +1 -1
- package/dist/primitives/DropdownMenuGroup.cjs +8 -14
- package/dist/primitives/DropdownMenuGroup.d.ts +2 -1
- package/dist/primitives/DropdownMenuGroup.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuGroup.js +4 -4
- package/dist/primitives/DropdownMenuGroup.js.map +1 -1
- package/dist/primitives/DropdownMenuItem.cjs +8 -14
- package/dist/primitives/DropdownMenuItem.d.ts +2 -1
- package/dist/primitives/DropdownMenuItem.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuItem.js +4 -4
- package/dist/primitives/DropdownMenuItem.js.map +1 -1
- package/dist/primitives/DropdownMenuLabel.cjs +8 -14
- package/dist/primitives/DropdownMenuLabel.d.ts +2 -1
- package/dist/primitives/DropdownMenuLabel.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuLabel.js +4 -4
- package/dist/primitives/DropdownMenuLabel.js.map +1 -1
- package/dist/primitives/DropdownMenuPortal.cjs +8 -14
- package/dist/primitives/DropdownMenuPortal.d.ts +2 -1
- package/dist/primitives/DropdownMenuPortal.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuPortal.js +4 -4
- package/dist/primitives/DropdownMenuPortal.js.map +1 -1
- package/dist/primitives/DropdownMenuRadioGroup.cjs +8 -14
- package/dist/primitives/DropdownMenuRadioGroup.d.ts +2 -1
- package/dist/primitives/DropdownMenuRadioGroup.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuRadioGroup.js +4 -4
- package/dist/primitives/DropdownMenuRadioGroup.js.map +1 -1
- package/dist/primitives/DropdownMenuRadioItem.cjs +8 -14
- package/dist/primitives/DropdownMenuRadioItem.d.ts +2 -1
- package/dist/primitives/DropdownMenuRadioItem.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuRadioItem.js +4 -4
- package/dist/primitives/DropdownMenuRadioItem.js.map +1 -1
- package/dist/primitives/DropdownMenuSeparator.cjs +8 -14
- package/dist/primitives/DropdownMenuSeparator.d.ts +2 -1
- package/dist/primitives/DropdownMenuSeparator.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuSeparator.js +4 -4
- package/dist/primitives/DropdownMenuSeparator.js.map +1 -1
- package/dist/primitives/DropdownMenuShortcut.cjs +8 -14
- package/dist/primitives/DropdownMenuShortcut.d.ts +2 -1
- package/dist/primitives/DropdownMenuShortcut.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuShortcut.js +4 -4
- package/dist/primitives/DropdownMenuShortcut.js.map +1 -1
- package/dist/primitives/DropdownMenuSub.cjs +8 -14
- package/dist/primitives/DropdownMenuSub.d.ts +2 -1
- package/dist/primitives/DropdownMenuSub.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuSub.js +4 -4
- package/dist/primitives/DropdownMenuSub.js.map +1 -1
- package/dist/primitives/DropdownMenuSubContent.cjs +8 -14
- package/dist/primitives/DropdownMenuSubContent.d.ts +2 -1
- package/dist/primitives/DropdownMenuSubContent.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuSubContent.js +4 -4
- package/dist/primitives/DropdownMenuSubContent.js.map +1 -1
- package/dist/primitives/DropdownMenuSubTrigger.cjs +8 -14
- package/dist/primitives/DropdownMenuSubTrigger.d.ts +2 -1
- package/dist/primitives/DropdownMenuSubTrigger.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuSubTrigger.js +4 -4
- package/dist/primitives/DropdownMenuSubTrigger.js.map +1 -1
- package/dist/primitives/DropdownMenuTrigger.cjs +8 -14
- package/dist/primitives/DropdownMenuTrigger.d.ts +2 -1
- package/dist/primitives/DropdownMenuTrigger.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuTrigger.js +4 -4
- package/dist/primitives/DropdownMenuTrigger.js.map +1 -1
- package/dist/primitives/Input.cjs +8 -14
- package/dist/primitives/Input.d.ts +2 -1
- package/dist/primitives/Input.d.ts.map +1 -0
- package/dist/primitives/Input.js +4 -4
- package/dist/primitives/Input.js.map +1 -1
- package/dist/primitives/Label.cjs +8 -14
- package/dist/primitives/Label.d.ts +2 -1
- package/dist/primitives/Label.d.ts.map +1 -0
- package/dist/primitives/Label.js +4 -4
- package/dist/primitives/Label.js.map +1 -1
- package/dist/primitives/Popover.cjs +8 -14
- package/dist/primitives/Popover.d.ts +2 -1
- package/dist/primitives/Popover.d.ts.map +1 -0
- package/dist/primitives/Popover.js +4 -4
- package/dist/primitives/Popover.js.map +1 -1
- package/dist/primitives/PopoverAnchor.cjs +8 -14
- package/dist/primitives/PopoverAnchor.d.ts +2 -1
- package/dist/primitives/PopoverAnchor.d.ts.map +1 -0
- package/dist/primitives/PopoverAnchor.js +4 -4
- package/dist/primitives/PopoverAnchor.js.map +1 -1
- package/dist/primitives/PopoverClose.cjs +8 -14
- package/dist/primitives/PopoverClose.d.ts +2 -1
- package/dist/primitives/PopoverClose.d.ts.map +1 -0
- package/dist/primitives/PopoverClose.js +4 -4
- package/dist/primitives/PopoverClose.js.map +1 -1
- package/dist/primitives/PopoverContent.cjs +8 -14
- package/dist/primitives/PopoverContent.d.ts +2 -1
- package/dist/primitives/PopoverContent.d.ts.map +1 -0
- package/dist/primitives/PopoverContent.js +4 -4
- package/dist/primitives/PopoverContent.js.map +1 -1
- package/dist/primitives/PopoverTrigger.cjs +8 -14
- package/dist/primitives/PopoverTrigger.d.ts +2 -1
- package/dist/primitives/PopoverTrigger.d.ts.map +1 -0
- package/dist/primitives/PopoverTrigger.js +4 -4
- package/dist/primitives/PopoverTrigger.js.map +1 -1
- package/dist/primitives/Progress.cjs +8 -14
- package/dist/primitives/Progress.d.ts +2 -1
- package/dist/primitives/Progress.d.ts.map +1 -0
- package/dist/primitives/Progress.js +4 -4
- package/dist/primitives/Progress.js.map +1 -1
- package/dist/primitives/ResizableHandle.cjs +8 -14
- package/dist/primitives/ResizableHandle.d.ts +2 -1
- package/dist/primitives/ResizableHandle.d.ts.map +1 -0
- package/dist/primitives/ResizableHandle.js +4 -4
- package/dist/primitives/ResizableHandle.js.map +1 -1
- package/dist/primitives/ResizablePanel.cjs +8 -14
- package/dist/primitives/ResizablePanel.d.ts +2 -1
- package/dist/primitives/ResizablePanel.d.ts.map +1 -0
- package/dist/primitives/ResizablePanel.js +4 -4
- package/dist/primitives/ResizablePanel.js.map +1 -1
- package/dist/primitives/ResizablePanelGroup.cjs +8 -14
- package/dist/primitives/ResizablePanelGroup.d.ts +2 -1
- package/dist/primitives/ResizablePanelGroup.d.ts.map +1 -0
- package/dist/primitives/ResizablePanelGroup.js +4 -4
- package/dist/primitives/ResizablePanelGroup.js.map +1 -1
- package/dist/primitives/ScrollArea.cjs +8 -14
- package/dist/primitives/ScrollArea.d.ts +2 -1
- package/dist/primitives/ScrollArea.d.ts.map +1 -0
- package/dist/primitives/ScrollArea.js +4 -4
- package/dist/primitives/ScrollArea.js.map +1 -1
- package/dist/primitives/ScrollBar.cjs +8 -14
- package/dist/primitives/ScrollBar.d.ts +2 -1
- package/dist/primitives/ScrollBar.d.ts.map +1 -0
- package/dist/primitives/ScrollBar.js +4 -4
- package/dist/primitives/ScrollBar.js.map +1 -1
- package/dist/primitives/Select.cjs +8 -14
- package/dist/primitives/Select.d.ts +2 -1
- package/dist/primitives/Select.d.ts.map +1 -0
- package/dist/primitives/Select.js +4 -4
- package/dist/primitives/Select.js.map +1 -1
- package/dist/primitives/SelectContent.cjs +8 -14
- package/dist/primitives/SelectContent.d.ts +2 -1
- package/dist/primitives/SelectContent.d.ts.map +1 -0
- package/dist/primitives/SelectContent.js +4 -4
- package/dist/primitives/SelectContent.js.map +1 -1
- package/dist/primitives/SelectGroup.cjs +8 -14
- package/dist/primitives/SelectGroup.d.ts +2 -1
- package/dist/primitives/SelectGroup.d.ts.map +1 -0
- package/dist/primitives/SelectGroup.js +4 -4
- package/dist/primitives/SelectGroup.js.map +1 -1
- package/dist/primitives/SelectItem.cjs +8 -14
- package/dist/primitives/SelectItem.d.ts +2 -1
- package/dist/primitives/SelectItem.d.ts.map +1 -0
- package/dist/primitives/SelectItem.js +4 -4
- package/dist/primitives/SelectItem.js.map +1 -1
- package/dist/primitives/SelectLabel.cjs +8 -14
- package/dist/primitives/SelectLabel.d.ts +2 -1
- package/dist/primitives/SelectLabel.d.ts.map +1 -0
- package/dist/primitives/SelectLabel.js +4 -4
- package/dist/primitives/SelectLabel.js.map +1 -1
- package/dist/primitives/SelectScrollDownButton.cjs +8 -14
- package/dist/primitives/SelectScrollDownButton.d.ts +2 -1
- package/dist/primitives/SelectScrollDownButton.d.ts.map +1 -0
- package/dist/primitives/SelectScrollDownButton.js +4 -4
- package/dist/primitives/SelectScrollDownButton.js.map +1 -1
- package/dist/primitives/SelectScrollUpButton.cjs +8 -14
- package/dist/primitives/SelectScrollUpButton.d.ts +2 -1
- package/dist/primitives/SelectScrollUpButton.d.ts.map +1 -0
- package/dist/primitives/SelectScrollUpButton.js +4 -4
- package/dist/primitives/SelectScrollUpButton.js.map +1 -1
- package/dist/primitives/SelectSeparator.cjs +8 -14
- package/dist/primitives/SelectSeparator.d.ts +2 -1
- package/dist/primitives/SelectSeparator.d.ts.map +1 -0
- package/dist/primitives/SelectSeparator.js +4 -4
- package/dist/primitives/SelectSeparator.js.map +1 -1
- package/dist/primitives/SelectTrigger.cjs +8 -14
- package/dist/primitives/SelectTrigger.d.ts +2 -1
- package/dist/primitives/SelectTrigger.d.ts.map +1 -0
- package/dist/primitives/SelectTrigger.js +4 -4
- package/dist/primitives/SelectTrigger.js.map +1 -1
- package/dist/primitives/SelectValue.cjs +8 -14
- package/dist/primitives/SelectValue.d.ts +2 -1
- package/dist/primitives/SelectValue.d.ts.map +1 -0
- package/dist/primitives/SelectValue.js +4 -4
- package/dist/primitives/SelectValue.js.map +1 -1
- package/dist/primitives/Separator.cjs +8 -14
- package/dist/primitives/Separator.d.ts +2 -1
- package/dist/primitives/Separator.d.ts.map +1 -0
- package/dist/primitives/Separator.js +4 -4
- package/dist/primitives/Separator.js.map +1 -1
- package/dist/primitives/Slider.cjs +8 -14
- package/dist/primitives/Slider.d.ts +2 -1
- package/dist/primitives/Slider.d.ts.map +1 -0
- package/dist/primitives/Slider.js +4 -4
- package/dist/primitives/Slider.js.map +1 -1
- package/dist/primitives/Switch.cjs +8 -14
- package/dist/primitives/Switch.d.ts +2 -1
- package/dist/primitives/Switch.d.ts.map +1 -0
- package/dist/primitives/Switch.js +4 -4
- package/dist/primitives/Switch.js.map +1 -1
- package/dist/primitives/Tabs.cjs +8 -14
- package/dist/primitives/Tabs.d.ts +2 -1
- package/dist/primitives/Tabs.d.ts.map +1 -0
- package/dist/primitives/Tabs.js +4 -4
- package/dist/primitives/Tabs.js.map +1 -1
- package/dist/primitives/TabsContent.cjs +8 -14
- package/dist/primitives/TabsContent.d.ts +2 -1
- package/dist/primitives/TabsContent.d.ts.map +1 -0
- package/dist/primitives/TabsContent.js +4 -4
- package/dist/primitives/TabsContent.js.map +1 -1
- package/dist/primitives/TabsList.cjs +8 -14
- package/dist/primitives/TabsList.d.ts +2 -1
- package/dist/primitives/TabsList.d.ts.map +1 -0
- package/dist/primitives/TabsList.js +4 -4
- package/dist/primitives/TabsList.js.map +1 -1
- package/dist/primitives/TabsTrigger.cjs +8 -14
- package/dist/primitives/TabsTrigger.d.ts +2 -1
- package/dist/primitives/TabsTrigger.d.ts.map +1 -0
- package/dist/primitives/TabsTrigger.js +4 -4
- package/dist/primitives/TabsTrigger.js.map +1 -1
- package/dist/primitives/Textarea.cjs +8 -14
- package/dist/primitives/Textarea.d.ts +2 -1
- package/dist/primitives/Textarea.d.ts.map +1 -0
- package/dist/primitives/Textarea.js +4 -4
- package/dist/primitives/Textarea.js.map +1 -1
- package/dist/primitives/Toaster.cjs +8 -14
- package/dist/primitives/Toaster.d.ts +2 -1
- package/dist/primitives/Toaster.d.ts.map +1 -0
- package/dist/primitives/Toaster.js +4 -4
- package/dist/primitives/Toaster.js.map +1 -1
- package/dist/primitives/Tooltip.cjs +8 -14
- package/dist/primitives/Tooltip.d.ts +2 -1
- package/dist/primitives/Tooltip.d.ts.map +1 -0
- package/dist/primitives/Tooltip.js +4 -4
- package/dist/primitives/Tooltip.js.map +1 -1
- package/dist/primitives/TooltipContent.cjs +8 -14
- package/dist/primitives/TooltipContent.d.ts +2 -1
- package/dist/primitives/TooltipContent.d.ts.map +1 -0
- package/dist/primitives/TooltipContent.js +4 -4
- package/dist/primitives/TooltipContent.js.map +1 -1
- package/dist/primitives/TooltipProvider.cjs +8 -14
- package/dist/primitives/TooltipProvider.d.ts +2 -1
- package/dist/primitives/TooltipProvider.d.ts.map +1 -0
- package/dist/primitives/TooltipProvider.js +4 -4
- package/dist/primitives/TooltipProvider.js.map +1 -1
- package/dist/primitives/TooltipTrigger.cjs +8 -14
- package/dist/primitives/TooltipTrigger.d.ts +2 -1
- package/dist/primitives/TooltipTrigger.d.ts.map +1 -0
- package/dist/primitives/TooltipTrigger.js +4 -4
- package/dist/primitives/TooltipTrigger.js.map +1 -1
- package/dist/primitives/badgeVariants.cjs +8 -14
- package/dist/primitives/badgeVariants.d.ts +2 -1
- package/dist/primitives/badgeVariants.d.ts.map +1 -0
- package/dist/primitives/badgeVariants.js +4 -4
- package/dist/primitives/badgeVariants.js.map +1 -1
- package/dist/primitives/bases/data/index.cjs +28 -15
- package/dist/primitives/bases/data/index.d.ts +1 -0
- package/dist/primitives/bases/data/index.d.ts.map +1 -0
- package/dist/primitives/bases/data/index.js +11 -2
- package/dist/primitives/bases/data/index.js.map +1 -1
- package/dist/primitives/buttonVariants.cjs +8 -14
- package/dist/primitives/buttonVariants.d.ts +2 -1
- package/dist/primitives/buttonVariants.d.ts.map +1 -0
- package/dist/primitives/buttonVariants.js +4 -4
- package/dist/primitives/buttonVariants.js.map +1 -1
- package/dist/primitives/index.cjs +20 -370
- package/dist/primitives/index.d.ts +2 -1
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +4 -4
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/toast.cjs +8 -14
- package/dist/primitives/toast.d.ts +2 -1
- package/dist/primitives/toast.d.ts.map +1 -0
- package/dist/primitives/toast.js +4 -4
- package/dist/primitives/toast.js.map +1 -1
- package/dist/product/AnimatedLogo.cjs +102 -0
- package/dist/product/AnimatedLogo.d.ts +2 -1
- package/dist/product/AnimatedLogo.d.ts.map +1 -0
- package/dist/product/AnimatedLogo.js +100 -0
- package/dist/product/AnimatedLogo.js.map +1 -0
- package/dist/product/AppHeader.cjs +55 -0
- package/dist/product/AppHeader.d.ts +2 -1
- package/dist/product/AppHeader.d.ts.map +1 -0
- package/dist/product/AppHeader.js +53 -0
- package/dist/product/AppHeader.js.map +1 -0
- package/dist/product/BackendState.cjs +80 -0
- package/dist/product/BackendState.d.ts +1 -0
- package/dist/product/BackendState.d.ts.map +1 -0
- package/dist/product/BackendState.js +76 -0
- package/dist/product/BackendState.js.map +1 -0
- package/dist/product/BrandMark.cjs +19 -0
- package/dist/product/BrandMark.d.ts +1 -0
- package/dist/product/BrandMark.d.ts.map +1 -0
- package/dist/product/BrandMark.js +17 -0
- package/dist/product/BrandMark.js.map +1 -0
- package/dist/product/Charts.cjs +243 -0
- package/dist/product/Charts.d.ts +1 -0
- package/dist/product/Charts.d.ts.map +1 -0
- package/dist/product/Charts.js +235 -0
- package/dist/product/Charts.js.map +1 -0
- package/dist/product/ComboBox.cjs +44 -0
- package/dist/product/ComboBox.d.ts +3 -2
- package/dist/product/ComboBox.d.ts.map +1 -0
- package/dist/product/ComboBox.js +42 -0
- package/dist/product/ComboBox.js.map +1 -0
- package/dist/product/CommerceResource.cjs +39 -0
- package/dist/product/CommerceResource.d.ts +2 -1
- package/dist/product/CommerceResource.d.ts.map +1 -0
- package/dist/product/CommerceResource.js +37 -0
- package/dist/product/CommerceResource.js.map +1 -0
- package/dist/product/ConfirmDelete.cjs +42 -0
- package/dist/product/ConfirmDelete.d.ts +1 -0
- package/dist/product/ConfirmDelete.d.ts.map +1 -0
- package/dist/product/ConfirmDelete.js +40 -0
- package/dist/product/ConfirmDelete.js.map +1 -0
- package/dist/product/DataTable.cjs +58 -0
- package/dist/product/DataTable.d.ts +1 -0
- package/dist/product/DataTable.d.ts.map +1 -0
- package/dist/product/DataTable.js +56 -0
- package/dist/product/DataTable.js.map +1 -0
- package/dist/product/Donut.cjs +25 -0
- package/dist/product/Donut.d.ts +1 -0
- package/dist/product/Donut.d.ts.map +1 -0
- package/dist/product/Donut.js +23 -0
- package/dist/product/Donut.js.map +1 -0
- package/dist/product/EmptyState.cjs +30 -0
- package/dist/product/EmptyState.d.ts +2 -1
- package/dist/product/EmptyState.d.ts.map +1 -0
- package/dist/product/EmptyState.js +28 -0
- package/dist/product/EmptyState.js.map +1 -0
- package/dist/product/FadeIn.cjs +9 -0
- package/dist/product/FadeIn.d.ts +1 -0
- package/dist/product/FadeIn.d.ts.map +1 -0
- package/dist/product/FadeIn.js +7 -0
- package/dist/product/FadeIn.js.map +1 -0
- package/dist/product/Field.cjs +111 -0
- package/dist/product/Field.d.ts +1 -0
- package/dist/product/Field.d.ts.map +1 -0
- package/dist/product/Field.js +104 -0
- package/dist/product/Field.js.map +1 -0
- package/dist/product/Filters.cjs +31 -0
- package/dist/product/Filters.d.ts +1 -0
- package/dist/product/Filters.d.ts.map +1 -0
- package/dist/product/Filters.js +28 -0
- package/dist/product/Filters.js.map +1 -0
- package/dist/product/HanzoMark.cjs +16 -0
- package/dist/product/HanzoMark.d.ts +1 -0
- package/dist/product/HanzoMark.d.ts.map +1 -0
- package/dist/product/HanzoMark.js +14 -0
- package/dist/product/HanzoMark.js.map +1 -0
- package/dist/product/Metric.cjs +96 -0
- package/dist/product/Metric.d.ts +1 -0
- package/dist/product/Metric.d.ts.map +1 -0
- package/dist/product/Metric.js +85 -0
- package/dist/product/Metric.js.map +1 -0
- package/dist/product/OrgMark.cjs +50 -0
- package/dist/product/OrgMark.d.ts +2 -1
- package/dist/product/OrgMark.d.ts.map +1 -0
- package/dist/product/OrgMark.js +47 -0
- package/dist/product/OrgMark.js.map +1 -0
- package/dist/product/OrgSwitcher.cjs +140 -0
- package/dist/product/OrgSwitcher.d.ts +2 -1
- package/dist/product/OrgSwitcher.d.ts.map +1 -0
- package/dist/product/OrgSwitcher.js +138 -0
- package/dist/product/OrgSwitcher.js.map +1 -0
- package/dist/product/PageHeader.cjs +15 -0
- package/dist/product/PageHeader.d.ts +1 -0
- package/dist/product/PageHeader.d.ts.map +1 -0
- package/dist/product/PageHeader.js +13 -0
- package/dist/product/PageHeader.js.map +1 -0
- package/dist/product/PrimaryButton.cjs +31 -0
- package/dist/product/PrimaryButton.d.ts +1 -0
- package/dist/product/PrimaryButton.d.ts.map +1 -0
- package/dist/product/PrimaryButton.js +29 -0
- package/dist/product/PrimaryButton.js.map +1 -0
- package/dist/product/ProductIcon.cjs +36 -0
- package/dist/product/ProductIcon.d.ts +2 -1
- package/dist/product/ProductIcon.d.ts.map +1 -0
- package/dist/product/ProductIcon.js +34 -0
- package/dist/product/ProductIcon.js.map +1 -0
- package/dist/product/ProviderLogo.cjs +84 -0
- package/dist/product/ProviderLogo.d.ts +1 -0
- package/dist/product/ProviderLogo.d.ts.map +1 -0
- package/dist/product/ProviderLogo.js +81 -0
- package/dist/product/ProviderLogo.js.map +1 -0
- package/dist/product/Reorder.cjs +82 -0
- package/dist/product/Reorder.d.ts +1 -0
- package/dist/product/Reorder.d.ts.map +1 -0
- package/dist/product/Reorder.js +78 -0
- package/dist/product/Reorder.js.map +1 -0
- package/dist/product/SelectMenu.cjs +19 -0
- package/dist/product/SelectMenu.d.ts +1 -0
- package/dist/product/SelectMenu.d.ts.map +1 -0
- package/dist/product/SelectMenu.js +17 -0
- package/dist/product/SelectMenu.js.map +1 -0
- package/dist/product/SiteFooter.cjs +17 -0
- package/dist/product/SiteFooter.d.ts +2 -1
- package/dist/product/SiteFooter.d.ts.map +1 -0
- package/dist/product/SiteFooter.js +15 -0
- package/dist/product/SiteFooter.js.map +1 -0
- package/dist/product/SiteNav.cjs +124 -0
- package/dist/product/SiteNav.d.ts +1 -0
- package/dist/product/SiteNav.d.ts.map +1 -0
- package/dist/product/SiteNav.js +122 -0
- package/dist/product/SiteNav.js.map +1 -0
- package/dist/product/SlideOver.cjs +129 -0
- package/dist/product/SlideOver.d.ts +2 -1
- package/dist/product/SlideOver.d.ts.map +1 -0
- package/dist/product/SlideOver.js +126 -0
- package/dist/product/SlideOver.js.map +1 -0
- package/dist/product/StatusTag.cjs +49 -0
- package/dist/product/StatusTag.d.ts +1 -0
- package/dist/product/StatusTag.d.ts.map +1 -0
- package/dist/product/StatusTag.js +47 -0
- package/dist/product/StatusTag.js.map +1 -0
- package/dist/product/ThemeToggle.cjs +120 -0
- package/dist/product/ThemeToggle.d.ts +1 -0
- package/dist/product/ThemeToggle.d.ts.map +1 -0
- package/dist/product/ThemeToggle.js +84 -0
- package/dist/product/ThemeToggle.js.map +1 -0
- package/dist/product/ThemeToggleNext.cjs +20 -0
- package/dist/product/ThemeToggleNext.d.ts +2 -1
- package/dist/product/ThemeToggleNext.d.ts.map +1 -0
- package/dist/product/ThemeToggleNext.js +19 -0
- package/dist/product/ThemeToggleNext.js.map +1 -0
- package/dist/product/Toast.cjs +90 -0
- package/dist/product/Toast.d.ts +1 -0
- package/dist/product/Toast.d.ts.map +1 -0
- package/dist/product/Toast.js +87 -0
- package/dist/product/Toast.js.map +1 -0
- package/dist/product/accent.cjs +97 -0
- package/dist/product/accent.d.ts +1 -0
- package/dist/product/accent.d.ts.map +1 -0
- package/dist/product/accent.js +90 -0
- package/dist/product/accent.js.map +1 -0
- package/dist/product/animatedLogo.logic.cjs +52 -0
- package/dist/product/animatedLogo.logic.d.ts +1 -0
- package/dist/product/animatedLogo.logic.d.ts.map +1 -0
- package/dist/product/animatedLogo.logic.js +47 -0
- package/dist/product/animatedLogo.logic.js.map +1 -0
- package/dist/product/brand.cjs +91 -0
- package/dist/product/brand.d.ts +1 -0
- package/dist/product/brand.d.ts.map +1 -0
- package/dist/product/brand.js +88 -0
- package/dist/product/brand.js.map +1 -0
- package/dist/product/color.cjs +6 -0
- package/dist/product/color.d.ts +1 -0
- package/dist/product/color.d.ts.map +1 -0
- package/dist/product/color.js +3 -0
- package/dist/product/color.js.map +1 -0
- package/dist/product/combobox/filter.cjs +31 -0
- package/dist/product/combobox/filter.d.ts +1 -0
- package/dist/product/combobox/filter.d.ts.map +1 -0
- package/dist/product/combobox/filter.js +28 -0
- package/dist/product/combobox/filter.js.map +1 -0
- package/dist/product/host.cjs +20 -0
- package/dist/product/host.d.ts +1 -0
- package/dist/product/host.d.ts.map +1 -0
- package/dist/product/host.js +16 -0
- package/dist/product/host.js.map +1 -0
- package/dist/product/index.cjs +120 -2490
- package/dist/product/index.d.ts +42 -41
- package/dist/product/index.d.ts.map +1 -0
- package/dist/product/index.js +88 -2168
- package/dist/product/index.js.map +1 -1
- package/dist/product/instrument.cjs +79 -0
- package/dist/product/instrument.d.ts +1 -0
- package/dist/product/instrument.d.ts.map +1 -0
- package/dist/product/instrument.js +72 -0
- package/dist/product/instrument.js.map +1 -0
- package/dist/product/menu/ContextMenu.cjs +26 -0
- package/dist/product/menu/ContextMenu.d.ts +2 -1
- package/dist/product/menu/ContextMenu.d.ts.map +1 -0
- package/dist/product/menu/ContextMenu.js +24 -0
- package/dist/product/menu/ContextMenu.js.map +1 -0
- package/dist/product/menu/FloatingMenu.cjs +87 -0
- package/dist/product/menu/FloatingMenu.d.ts +1 -0
- package/dist/product/menu/FloatingMenu.d.ts.map +1 -0
- package/dist/product/menu/FloatingMenu.js +85 -0
- package/dist/product/menu/FloatingMenu.js.map +1 -0
- package/dist/product/menu/index.cjs +30 -0
- package/dist/product/menu/index.d.ts +6 -5
- package/dist/product/menu/index.d.ts.map +1 -0
- package/dist/product/menu/index.js +19 -0
- package/dist/product/menu/index.js.map +1 -0
- package/dist/product/menu/items.cjs +92 -0
- package/dist/product/menu/items.d.ts +2 -1
- package/dist/product/menu/items.d.ts.map +1 -0
- package/dist/product/menu/items.js +85 -0
- package/dist/product/menu/items.js.map +1 -0
- package/dist/product/menu/portal-theme.cjs +13 -0
- package/dist/product/menu/portal-theme.d.ts +1 -0
- package/dist/product/menu/portal-theme.d.ts.map +1 -0
- package/dist/product/menu/portal-theme.js +12 -0
- package/dist/product/menu/portal-theme.js.map +1 -0
- package/dist/product/menu/roving.cjs +31 -0
- package/dist/product/menu/roving.d.ts +1 -0
- package/dist/product/menu/roving.d.ts.map +1 -0
- package/dist/product/menu/roving.js +29 -0
- package/dist/product/menu/roving.js.map +1 -0
- package/dist/product/scope.cjs +102 -0
- package/dist/product/scope.d.ts +1 -0
- package/dist/product/scope.d.ts.map +1 -0
- package/dist/product/scope.js +99 -0
- package/dist/product/scope.js.map +1 -0
- package/dist/product/social/CampaignCard.cjs +17 -0
- package/dist/product/social/CampaignCard.d.ts +1 -0
- package/dist/product/social/CampaignCard.d.ts.map +1 -0
- package/dist/product/social/CampaignCard.js +15 -0
- package/dist/product/social/CampaignCard.js.map +1 -0
- package/dist/product/social/ChannelBadge.cjs +24 -0
- package/dist/product/social/ChannelBadge.d.ts +2 -1
- package/dist/product/social/ChannelBadge.d.ts.map +1 -0
- package/dist/product/social/ChannelBadge.js +22 -0
- package/dist/product/social/ChannelBadge.js.map +1 -0
- package/dist/product/social/PostAgenda.cjs +40 -0
- package/dist/product/social/PostAgenda.d.ts +2 -1
- package/dist/product/social/PostAgenda.d.ts.map +1 -0
- package/dist/product/social/PostAgenda.js +38 -0
- package/dist/product/social/PostAgenda.js.map +1 -0
- package/dist/product/social/PostCard.cjs +19 -0
- package/dist/product/social/PostCard.d.ts +2 -1
- package/dist/product/social/PostCard.d.ts.map +1 -0
- package/dist/product/social/PostCard.js +17 -0
- package/dist/product/social/PostCard.js.map +1 -0
- package/dist/product/social/PostComposer.cjs +64 -0
- package/dist/product/social/PostComposer.d.ts +2 -1
- package/dist/product/social/PostComposer.d.ts.map +1 -0
- package/dist/product/social/PostComposer.js +61 -0
- package/dist/product/social/PostComposer.js.map +1 -0
- package/dist/product/social/ProviderReadinessList.cjs +16 -0
- package/dist/product/social/ProviderReadinessList.d.ts +2 -1
- package/dist/product/social/ProviderReadinessList.d.ts.map +1 -0
- package/dist/product/social/ProviderReadinessList.js +14 -0
- package/dist/product/social/ProviderReadinessList.js.map +1 -0
- package/dist/product/social/SocialResource.cjs +147 -0
- package/dist/product/social/SocialResource.d.ts +2 -1
- package/dist/product/social/SocialResource.d.ts.map +1 -0
- package/dist/product/social/SocialResource.js +145 -0
- package/dist/product/social/SocialResource.js.map +1 -0
- package/dist/product/social/SocialSummaryBar.cjs +20 -0
- package/dist/product/social/SocialSummaryBar.d.ts +2 -1
- package/dist/product/social/SocialSummaryBar.d.ts.map +1 -0
- package/dist/product/social/SocialSummaryBar.js +18 -0
- package/dist/product/social/SocialSummaryBar.js.map +1 -0
- package/dist/product/social/ViewToggle.cjs +23 -0
- package/dist/product/social/ViewToggle.d.ts +1 -0
- package/dist/product/social/ViewToggle.d.ts.map +1 -0
- package/dist/product/social/ViewToggle.js +21 -0
- package/dist/product/social/ViewToggle.js.map +1 -0
- package/dist/product/social/api.cjs +137 -53
- package/dist/product/social/api.d.ts +1 -0
- package/dist/product/social/api.d.ts.map +1 -0
- package/dist/product/social/api.js +126 -3
- package/dist/product/social/api.js.map +1 -1
- package/dist/product/social/format.cjs +39 -0
- package/dist/product/social/format.d.ts +1 -0
- package/dist/product/social/format.d.ts.map +1 -0
- package/dist/product/social/format.js +34 -0
- package/dist/product/social/format.js.map +1 -0
- package/dist/product/social/index.cjs +38 -112
- package/dist/product/social/index.d.ts +12 -11
- package/dist/product/social/index.d.ts.map +1 -0
- package/dist/product/social/index.js +22 -6
- package/dist/product/social/index.js.map +1 -1
- package/dist/product/surfaces.data.cjs +25 -0
- package/dist/product/surfaces.data.d.ts +1 -0
- package/dist/product/surfaces.data.d.ts.map +1 -0
- package/dist/product/surfaces.data.js +22 -0
- package/dist/product/surfaces.data.js.map +1 -0
- package/dist/telemetry.cjs +31 -15
- package/dist/telemetry.d.ts +1 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +14 -2
- package/dist/telemetry.js.map +1 -1
- package/dist/theme.css +70 -45
- package/dist/usage.cjs +24 -15
- package/dist/usage.d.ts +1 -0
- package/dist/usage.d.ts.map +1 -0
- package/dist/usage.js +7 -2
- package/dist/usage.js.map +1 -1
- package/package.json +10 -13
- package/dist/ThemeToggleNext-AEDLHX5X.js +0 -5
- package/dist/ThemeToggleNext-AEDLHX5X.js.map +0 -1
- package/dist/ThemeToggleNext-N6ASYJ6J.cjs +0 -20
- package/dist/ThemeToggleNext-N6ASYJ6J.cjs.map +0 -1
- package/dist/canvas.cjs.map +0 -1
- package/dist/chunk-2U3MNE4I.js +0 -4
- package/dist/chunk-2U3MNE4I.js.map +0 -1
- package/dist/chunk-3NG33DV2.cjs +0 -607
- package/dist/chunk-3NG33DV2.cjs.map +0 -1
- package/dist/chunk-6DDY6XZI.js +0 -53
- package/dist/chunk-6DDY6XZI.js.map +0 -1
- package/dist/chunk-6KZWRBK2.cjs +0 -1498
- package/dist/chunk-6KZWRBK2.cjs.map +0 -1
- package/dist/chunk-77AMCLN4.js +0 -100
- package/dist/chunk-77AMCLN4.js.map +0 -1
- package/dist/chunk-7XDEUEWI.cjs +0 -44
- package/dist/chunk-7XDEUEWI.cjs.map +0 -1
- package/dist/chunk-7ZNK6JSS.js +0 -831
- package/dist/chunk-7ZNK6JSS.js.map +0 -1
- package/dist/chunk-ARV3P4CE.cjs +0 -105
- package/dist/chunk-ARV3P4CE.cjs.map +0 -1
- package/dist/chunk-DC52DQ27.cjs +0 -303
- package/dist/chunk-DC52DQ27.cjs.map +0 -1
- package/dist/chunk-FVQXROBK.js +0 -37
- package/dist/chunk-FVQXROBK.js.map +0 -1
- package/dist/chunk-GVCOAJLO.js +0 -397
- package/dist/chunk-GVCOAJLO.js.map +0 -1
- package/dist/chunk-MWBFAV3D.cjs +0 -105
- package/dist/chunk-MWBFAV3D.cjs.map +0 -1
- package/dist/chunk-NQUA5YRQ.cjs +0 -55
- package/dist/chunk-NQUA5YRQ.cjs.map +0 -1
- package/dist/chunk-ONVERVFG.cjs +0 -851
- package/dist/chunk-ONVERVFG.cjs.map +0 -1
- package/dist/chunk-P2QU5MN5.js +0 -555
- package/dist/chunk-P2QU5MN5.js.map +0 -1
- package/dist/chunk-PI3GSHLU.js +0 -263
- package/dist/chunk-PI3GSHLU.js.map +0 -1
- package/dist/chunk-QHC2ZNAF.js +0 -11
- package/dist/chunk-QHC2ZNAF.js.map +0 -1
- package/dist/chunk-QV52JQHR.cjs +0 -77
- package/dist/chunk-QV52JQHR.cjs.map +0 -1
- package/dist/chunk-RBS5AYO4.cjs +0 -13
- package/dist/chunk-RBS5AYO4.cjs.map +0 -1
- package/dist/chunk-RCMDRI6V.js +0 -1401
- package/dist/chunk-RCMDRI6V.js.map +0 -1
- package/dist/chunk-WHJR5S4L.cjs +0 -418
- package/dist/chunk-WHJR5S4L.cjs.map +0 -1
- package/dist/chunk-ZGTJCJ55.js +0 -93
- package/dist/chunk-ZGTJCJ55.js.map +0 -1
- package/dist/components.d.ts +0 -1
- package/dist/core/index.cjs.map +0 -1
- package/dist/core/tokens.cjs.map +0 -1
- package/dist/dashboard.cjs.map +0 -1
- package/dist/data.cjs.map +0 -1
- package/dist/framework/core.cjs.map +0 -1
- package/dist/framework/index.cjs.map +0 -1
- package/dist/gitops.cjs.map +0 -1
- package/dist/gui-config.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/models/index.cjs.map +0 -1
- package/dist/oss.cjs.map +0 -1
- package/dist/primitives/AspectRatio.cjs.map +0 -1
- package/dist/primitives/Avatar.cjs.map +0 -1
- package/dist/primitives/AvatarFallback.cjs.map +0 -1
- package/dist/primitives/AvatarImage.cjs.map +0 -1
- package/dist/primitives/Badge.cjs.map +0 -1
- package/dist/primitives/Button.cjs.map +0 -1
- package/dist/primitives/Card.cjs.map +0 -1
- package/dist/primitives/CardAction.cjs.map +0 -1
- package/dist/primitives/CardContent.cjs.map +0 -1
- package/dist/primitives/CardDescription.cjs.map +0 -1
- package/dist/primitives/CardFooter.cjs.map +0 -1
- package/dist/primitives/CardHeader.cjs.map +0 -1
- package/dist/primitives/CardTitle.cjs.map +0 -1
- package/dist/primitives/Checkbox.cjs.map +0 -1
- package/dist/primitives/Collapsible.cjs.map +0 -1
- package/dist/primitives/CollapsibleContent.cjs.map +0 -1
- package/dist/primitives/CollapsibleTrigger.cjs.map +0 -1
- package/dist/primitives/Command.cjs.map +0 -1
- package/dist/primitives/CommandDialog.cjs.map +0 -1
- package/dist/primitives/CommandEmpty.cjs.map +0 -1
- package/dist/primitives/CommandGroup.cjs.map +0 -1
- package/dist/primitives/CommandInput.cjs.map +0 -1
- package/dist/primitives/CommandItem.cjs.map +0 -1
- package/dist/primitives/CommandList.cjs.map +0 -1
- package/dist/primitives/CommandSeparator.cjs.map +0 -1
- package/dist/primitives/CommandShortcut.cjs.map +0 -1
- package/dist/primitives/Dialog.cjs.map +0 -1
- package/dist/primitives/DialogClose.cjs.map +0 -1
- package/dist/primitives/DialogContent.cjs.map +0 -1
- package/dist/primitives/DialogDescription.cjs.map +0 -1
- package/dist/primitives/DialogFooter.cjs.map +0 -1
- package/dist/primitives/DialogHeader.cjs.map +0 -1
- package/dist/primitives/DialogOverlay.cjs.map +0 -1
- package/dist/primitives/DialogPortal.cjs.map +0 -1
- package/dist/primitives/DialogTitle.cjs.map +0 -1
- package/dist/primitives/DialogTrigger.cjs.map +0 -1
- package/dist/primitives/DropdownMenu.cjs.map +0 -1
- package/dist/primitives/DropdownMenuCheckboxItem.cjs.map +0 -1
- package/dist/primitives/DropdownMenuContent.cjs.map +0 -1
- package/dist/primitives/DropdownMenuGroup.cjs.map +0 -1
- package/dist/primitives/DropdownMenuItem.cjs.map +0 -1
- package/dist/primitives/DropdownMenuLabel.cjs.map +0 -1
- package/dist/primitives/DropdownMenuPortal.cjs.map +0 -1
- package/dist/primitives/DropdownMenuRadioGroup.cjs.map +0 -1
- package/dist/primitives/DropdownMenuRadioItem.cjs.map +0 -1
- package/dist/primitives/DropdownMenuSeparator.cjs.map +0 -1
- package/dist/primitives/DropdownMenuShortcut.cjs.map +0 -1
- package/dist/primitives/DropdownMenuSub.cjs.map +0 -1
- package/dist/primitives/DropdownMenuSubContent.cjs.map +0 -1
- package/dist/primitives/DropdownMenuSubTrigger.cjs.map +0 -1
- package/dist/primitives/DropdownMenuTrigger.cjs.map +0 -1
- package/dist/primitives/Input.cjs.map +0 -1
- package/dist/primitives/Label.cjs.map +0 -1
- package/dist/primitives/Popover.cjs.map +0 -1
- package/dist/primitives/PopoverAnchor.cjs.map +0 -1
- package/dist/primitives/PopoverClose.cjs.map +0 -1
- package/dist/primitives/PopoverContent.cjs.map +0 -1
- package/dist/primitives/PopoverTrigger.cjs.map +0 -1
- package/dist/primitives/Progress.cjs.map +0 -1
- package/dist/primitives/ResizableHandle.cjs.map +0 -1
- package/dist/primitives/ResizablePanel.cjs.map +0 -1
- package/dist/primitives/ResizablePanelGroup.cjs.map +0 -1
- package/dist/primitives/ScrollArea.cjs.map +0 -1
- package/dist/primitives/ScrollBar.cjs.map +0 -1
- package/dist/primitives/Select.cjs.map +0 -1
- package/dist/primitives/SelectContent.cjs.map +0 -1
- package/dist/primitives/SelectGroup.cjs.map +0 -1
- package/dist/primitives/SelectItem.cjs.map +0 -1
- package/dist/primitives/SelectLabel.cjs.map +0 -1
- package/dist/primitives/SelectScrollDownButton.cjs.map +0 -1
- package/dist/primitives/SelectScrollUpButton.cjs.map +0 -1
- package/dist/primitives/SelectSeparator.cjs.map +0 -1
- package/dist/primitives/SelectTrigger.cjs.map +0 -1
- package/dist/primitives/SelectValue.cjs.map +0 -1
- package/dist/primitives/Separator.cjs.map +0 -1
- package/dist/primitives/Slider.cjs.map +0 -1
- package/dist/primitives/Switch.cjs.map +0 -1
- package/dist/primitives/Tabs.cjs.map +0 -1
- package/dist/primitives/TabsContent.cjs.map +0 -1
- package/dist/primitives/TabsList.cjs.map +0 -1
- package/dist/primitives/TabsTrigger.cjs.map +0 -1
- package/dist/primitives/Textarea.cjs.map +0 -1
- package/dist/primitives/Toaster.cjs.map +0 -1
- package/dist/primitives/Tooltip.cjs.map +0 -1
- package/dist/primitives/TooltipContent.cjs.map +0 -1
- package/dist/primitives/TooltipProvider.cjs.map +0 -1
- package/dist/primitives/TooltipTrigger.cjs.map +0 -1
- package/dist/primitives/badgeVariants.cjs.map +0 -1
- package/dist/primitives/bases/data/index.cjs.map +0 -1
- package/dist/primitives/buttonVariants.cjs.map +0 -1
- package/dist/primitives/index.cjs.map +0 -1
- package/dist/primitives/toast.cjs.map +0 -1
- package/dist/product/index.cjs.map +0 -1
- package/dist/product/social/api.cjs.map +0 -1
- package/dist/product/social/index.cjs.map +0 -1
- package/dist/telemetry.cjs.map +0 -1
- package/dist/usage.cjs.map +0 -1
package/dist/components.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './backends/gui';
|
package/dist/core/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/fonts.ts"],"names":[],"mappings":";;;;;;AAWO,IAAM,aAAA,GAAgB;AAEtB,IAAM,aAAA,GAAgB;AAQtB,IAAM,QAAA,GAAW,OAAO,aAAa,CAAA,aAAA;AAGrC,IAAM,QAAA,GAAW,OAAO,aAAa,CAAA,YAAA;AAErC,IAAM,KAAA,GAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,QAAA","file":"index.cjs","sourcesContent":["/**\n * Typography identity — Geist (UI/body/display) + Geist Mono (code/data).\n *\n * The families are referenced through CSS variables so a host that loads Geist\n * however it likes (next/font, @fontsource, a CDN link) just has to bind these\n * two variables; the components and `theme.css` read the variables, never a\n * hard-coded font name. These constants are the single source of truth for the\n * variable names so a host and the stylesheet can never drift.\n */\n\n/** CSS custom-property that must resolve to the Geist Sans family. */\nexport const FONT_SANS_VAR = '--font-geist-sans' as const\n/** CSS custom-property that must resolve to the Geist Mono family. */\nexport const FONT_MONO_VAR = '--font-geist-mono' as const\n\n/**\n * UI / body / display / heading stack — Geist Sans, then the CSS generic only.\n * No Inter, no named system fonts: the host always binds `--font-geist-sans`\n * (next/font, @fontsource, CDN), so the generic is a last-resort generic, never\n * a system-UI look.\n */\nexport const fontSans = `var(${FONT_SANS_VAR}), sans-serif` as const\n\n/** Code / data / tabular stack — Geist Mono, then the CSS generic only. */\nexport const fontMono = `var(${FONT_MONO_VAR}), monospace` as const\n\nexport const fonts = { sans: fontSans, mono: fontMono } as const\n"]}
|
package/dist/core/tokens.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"tokens.cjs"}
|
package/dist/dashboard.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"dashboard.cjs","sourcesContent":[]}
|
package/dist/data.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"data.cjs","sourcesContent":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"core.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/framework/responsive.ts","../../src/framework/parts.tsx","../../src/framework/CollectionBuilder.tsx","../../src/framework/CollectionsBrowser.tsx","../../src/framework/MediaGrid.tsx","../../src/framework/RecordCards.tsx","../../src/framework/DocTypeRecords.tsx","../../src/framework/DocTypeDetail.tsx"],"names":["useState","useCallback","PrimaryButton","Button","jsx","XStack","Card","jsxs","TriangleAlert","Text","Spinner","YStack","BUILDER_FIELD_TYPES","fieldsFromDocType","starterFields","useMemo","validateBuilder","blankField","moveField","toDocType","classifyBackend","Input","fieldNameFromLabel","GripVertical","SelectMenu","FieldSwitch","ArrowUp","ArrowDown","Trash2","fieldNeedsOptions","Plus","Boxes","moduleDoctypes","useEffect","PageHeader","BackendStateCard","EmptyState","mediaFileField","useRef","mediaDocPayload","ImageIcon","Upload","titleOf","looksLikeImage","cardFields","searchRecords","Search","ChevronRight","FieldDisplay","loadLinkOptions","hasProjectField","PROJECT_FIELD","enrichLinks","toRecord","docTypeToFields","makeFieldOptions","listHiddenFields","savePayload","RefreshCw","isMediaDoctype","RecordsView","dt","record","newDraft","ArrowLeft","isDraft","statusField","SUBMITTED","CANCELLED","Fragment","X","Save","Ban","Send","PenOff","Globe","Pencil","RecordForm","RecordDetail"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client'\n\n/**\n * MOBILE-FIRST layout, measured from the CONTAINER — not the viewport.\n *\n * A viewport media query is the wrong question here: the DocType renderer is\n * mounted inside whatever pane a host gives it (a console with a 260px sidebar, a\n * split view, a modal), so \"is the window narrow\" and \"is MY box narrow\" are\n * different facts, and only the second one decides whether a table fits. `onLayout`\n * answers the second, works identically on web and native (no media config, no\n * `window`), and needs no host wiring.\n *\n * The first render has NO measurement, and the mobile-first answer to \"I don't\n * know yet\" is PHONE: a card list is usable at every width, a 12-column table is\n * not. So the first paint — including SSR — is the phone layout, and the desktop\n * layout is the enhancement applied after the box reports its size. That also\n * means server and client render the same tree: no hydration mismatch.\n */\nimport { useCallback, useState } from 'react'\n\n/** The width at which a data TABLE starts being readable rather than a scroll trap. */\nexport const TABLE_MIN = 720\n\n/** The width at which fixed-size cards can sit two-up. */\nexport const GRID_MIN = 560\n\n/**\n * Minimum interactive target, in px. WCAG 2.5.5 (AAA) asks for 44×44 and the iOS\n * HIG for 44pt; Material asks 48. 44 is the floor every control in this layer\n * meets on a phone — a 28px icon button next to a 28px icon button is the single\n * most common reason a mobile admin surface is unusable.\n */\nexport const TAP = 44\n\nexport type Layout = 'phone' | 'desktop'\n\n/**\n * The layout decision, as a pure function of the measured width — so the rule\n * (\"unmeasured means phone\") is testable without rendering anything.\n */\nexport function layoutFor(width: number, tableMin: number = TABLE_MIN): Layout {\n return width > 0 && width >= tableMin ? 'desktop' : 'phone'\n}\n\nexport interface ContainerLayout {\n /** 'phone' until the box has been measured wide enough for a table. */\n layout: Layout\n /** Shorthand for `layout === 'phone'`. */\n phone: boolean\n /** True once the box is wide enough to sit fixed-size cards side by side. */\n wideEnoughForGrid: boolean\n /** Measured content width in px (0 before the first layout pass). */\n width: number\n /** Spread onto the container element: `<YStack {...layoutProps} />`. */\n onLayout: (e: { nativeEvent: { layout: { width: number } } }) => void\n}\n\n/**\n * Measure the container and derive the layout. Mobile-first: `phone` until proven\n * otherwise. The setter is width-guarded so a layout pass that reports the same\n * width does not re-render.\n */\nexport function useContainerLayout(tableMin: number = TABLE_MIN): ContainerLayout {\n const [width, setWidth] = useState(0)\n\n const onLayout = useCallback((e: { nativeEvent: { layout: { width: number } } }) => {\n const w = Math.round(e?.nativeEvent?.layout?.width ?? 0)\n setWidth((prev) => (w > 0 && w !== prev ? w : prev))\n }, [])\n\n const layout = layoutFor(width, tableMin)\n const phone = layout === 'phone'\n return {\n layout,\n phone,\n wideEnoughForGrid: width >= GRID_MIN,\n width,\n onLayout,\n }\n}\n","'use client'\n\n/**\n * The small shared pieces every DocType view draws with — one definition each, so\n * an action button, an error bar and an inline loader look and behave the same in\n * the browser, the records list, the detail and the builder.\n *\n * MOBILE FIRST is a property of these parts, not of each view: `Action` is the\n * only button the layer uses, and it grows to the 44px tap floor and takes a full\n * row on a phone, so no view has to remember. Colour, type and spacing are token\n * references (`$color10`, `$red7`, `$3`) resolved by the shared @hanzo/ui scale —\n * there is no hex in this layer.\n */\nimport type { ReactElement, ReactNode } from 'react'\nimport { Button, Card, Spinner, Text, XStack, YStack } from '@hanzo/gui'\nimport { TriangleAlert } from '@hanzogui/lucide-icons-2'\n\nimport { PrimaryButton } from '../product/PrimaryButton'\nimport { TAP } from './responsive'\n\nexport interface ActionProps {\n children?: ReactNode\n icon?: ReactElement\n onPress?: () => void\n disabled?: boolean\n /** Filled, high-emphasis (Save / Create / Publish). */\n primary?: boolean\n /** Destructive tint (Delete). */\n danger?: boolean\n /** The container is phone-width: meet the tap floor and fill the row. */\n phone?: boolean\n /** Keep the label off-screen readers only — for icon-only controls. */\n label?: string\n}\n\n/**\n * THE button of this layer. On a phone it is at least `TAP` (44px) tall and\n * stretches to the row, so a thumb hits it and two actions never end up 6px apart;\n * on a wider box it collapses back to the compact `$2` admin control.\n */\nexport function Action({ children, icon, onPress, disabled, primary, danger, phone, label }: ActionProps) {\n const Cmp = primary ? PrimaryButton : Button\n return (\n <Cmp\n size={phone ? '$4' : '$2'}\n minH={phone ? TAP : undefined}\n grow={phone ? 1 : 0}\n flexBasis={phone ? 0 : 'auto'}\n minW={phone ? 140 : undefined}\n icon={icon}\n disabled={disabled}\n onPress={onPress}\n aria-label={label}\n {...(danger ? { theme: 'red' as const } : {})}\n >\n {children}\n </Cmp>\n )\n}\n\n/** A row of `Action`s that wraps rather than clipping its last control. */\nexport function Actions({ children, phone }: { children: ReactNode; phone?: boolean }) {\n return (\n <XStack gap=\"$2\" items=\"center\" flexWrap=\"wrap\" width={phone ? '100%' : undefined}>\n {children}\n </XStack>\n )\n}\n\n/** An honest inline failure — never a fabricated success, never a silent no-op. */\nexport function ErrorBar({ message }: { message: string }) {\n return (\n <Card borderWidth={1} borderColor=\"$red7\" bg=\"$red2\" p=\"$3\" maxW={620}>\n <XStack gap=\"$2\" items=\"flex-start\">\n <TriangleAlert size={15} />\n <Text fontSize=\"$3\" color=\"$red11\" flex={1}>\n {message}\n </Text>\n </XStack>\n </Card>\n )\n}\n\n/** In-flow loader — the DocType views live inside a host shell, so this never\n * takes the viewport (that is the host's own full-screen brand loader). */\nexport function Loading({ label, size = 'small' }: { label?: string; size?: 'small' | 'large' }) {\n return (\n <XStack items=\"center\" justify=\"center\" gap=\"$3\" py=\"$8\">\n <Spinner size={size} />\n {label ? (\n <Text fontSize=\"$3\" color=\"$color11\">\n {label}\n </Text>\n ) : null}\n </XStack>\n )\n}\n\n/** The name 8.0.24 shipped for the same in-flow loader. One component, two spellings. */\nexport function Loader({ label, size }: { label?: string; size?: number }) {\n return <Loading label={label} size={size && size >= 32 ? 'large' : 'small'} />\n}\n\n/** A dimmed metadata line (record count, field count, type). */\nexport function Meta({ children }: { children: ReactNode }) {\n return (\n <Text fontSize=\"$2\" color=\"$color10\" numberOfLines={1}>\n {children}\n </Text>\n )\n}\n\n/**\n * Long values must WRAP, not push the page sideways. A field can hold a URL, a\n * hash, a Lexical blob or a 400-character token with no spaces, and the default\n * `overflow-wrap: normal` refuses to break inside a word — so one such value paints\n * past the right edge of a phone. `html { overflow-x: clip }` then HIDES it rather\n * than scrolling to it, which makes the value unreadable AND invisible to\n * `scrollWidth`. Both properties are inherited, so declaring them on the container\n * covers every value inside it.\n */\nexport const WRAP_ANYWHERE = { overflowWrap: 'anywhere', wordBreak: 'break-word' } as const\n\n/** A titled section wrapper used by the detail + builder panels. */\nexport function Panel({ children, phone }: { children: ReactNode; phone?: boolean }) {\n return (\n <Card\n borderWidth={1}\n borderColor=\"$borderColor\"\n p={phone ? '$3' : '$4'}\n maxW={760}\n width=\"100%\"\n style={WRAP_ANYWHERE}\n >\n <YStack gap=\"$3\">{children}</YStack>\n </Card>\n )\n}\n","'use client'\n\n/**\n * CollectionBuilder — the content-type builder: define a collection's NAME and its\n * typed FIELDS on-page (add / remove / reorder / require / show-in-list), then\n * create it as a framework DocType. Every framework fieldtype is offered (Text,\n * Rich text, Long text, Number, Decimal, Currency, Checkbox, Date, Date & time,\n * Select, Relation, Attachment, Table, JSON), with the extra inputs each type needs\n * (Select options, Relation target). Pure decisions live in `builder-logic.ts`.\n *\n * Used for BOTH \"New collection\" (create) and, on an existing collection, editing\n * its schema — the SAME builder over `client.doctypes.create/update`.\n *\n * MOBILE FIRST: a field row is a name input, a type picker, two switches and three\n * buttons. Side by side that is ~560px of controls, which on a phone either\n * overflows or crushes each control below the tap floor. So a row STACKS into\n * labelled bands on a phone (name · type · flags · move/remove) and collapses back\n * to one line on a wide box. The type picker is the shared `SelectMenu` (the ONE\n * menu system, tokenised, native-safe) rather than a hand-styled `<select>` —\n * which is also how the last hardcoded hex left this layer.\n */\nimport { useCallback, useMemo, useState } from 'react'\nimport { Button, Card, Input, Text, XStack, YStack } from '@hanzo/gui'\nimport { ArrowDown, ArrowUp, GripVertical, Plus, Trash2, TriangleAlert } from '@hanzogui/lucide-icons-2'\n\nimport { FieldSwitch } from '../product/Field'\nimport { SelectMenu } from '../product/SelectMenu'\nimport { classifyBackend } from '../product/BackendState'\nimport type { FrameworkClient } from './client'\nimport type { DocType, Fieldtype } from './types'\nimport {\n BUILDER_FIELD_TYPES,\n blankField,\n fieldNameFromLabel,\n fieldNeedsOptions,\n fieldsFromDocType,\n moveField,\n starterFields,\n toDocType,\n validateBuilder,\n type BuilderField,\n} from './builder-logic'\nimport { Action, Actions, ErrorBar } from './parts'\nimport { useContainerLayout, TAP } from './responsive'\n\nconst TYPE_OPTIONS = BUILDER_FIELD_TYPES.map((t) => ({ key: t.type, label: t.label }))\n\nexport interface CollectionBuilderProps {\n client: FrameworkClient\n module: string\n /** Editing an existing collection's schema (name locked), else creating a new one. */\n existing?: DocType\n /** Called with the saved collection's name after create/update. */\n onSaved: (name: string) => void\n onCancel: () => void\n}\n\nexport function CollectionBuilder({ client, module, existing, onSaved, onCancel }: CollectionBuilderProps) {\n const editing = Boolean(existing)\n const [name, setName] = useState(existing?.name ?? '')\n const [fields, setFields] = useState<BuilderField[]>(() =>\n existing ? fieldsFromDocType(existing) : starterFields(),\n )\n const [busy, setBusy] = useState(false)\n const [saveError, setSaveError] = useState<string | null>(null)\n const [showErrors, setShowErrors] = useState(false)\n const { phone, onLayout } = useContainerLayout()\n\n const validation = useMemo(() => validateBuilder(name, fields), [name, fields])\n\n const patch = useCallback((key: string, next: Partial<BuilderField>) => {\n setFields((fs) => fs.map((f) => (f.key === key ? { ...f, ...next } : f)))\n }, [])\n const addField = useCallback(() => setFields((fs) => [...fs, blankField()]), [])\n const removeField = useCallback((key: string) => setFields((fs) => fs.filter((f) => f.key !== key)), [])\n const move = useCallback((key: string, dir: -1 | 1) => setFields((fs) => moveField(fs, key, dir)), [])\n\n const save = useCallback(async () => {\n setShowErrors(true)\n if (!validation.ok) return\n setBusy(true)\n setSaveError(null)\n try {\n const dt = toDocType(name, module, fields)\n if (editing) await client.doctypes.update(name, dt)\n else await client.doctypes.create(dt)\n onSaved(name)\n } catch (e) {\n setSaveError(classifyBackend(e).message)\n } finally {\n setBusy(false)\n }\n }, [client, editing, fields, module, name, onSaved, validation.ok])\n\n const iconBtn = (icon: React.ReactElement, label: string, onPress: () => void, disabled?: boolean, danger?: boolean) => (\n <Button\n size={phone ? '$3' : '$1'}\n circular\n minW={phone ? TAP : undefined}\n minH={phone ? TAP : undefined}\n aria-label={label}\n icon={icon}\n disabled={disabled}\n onPress={onPress}\n {...(danger ? { theme: 'red' as const } : {})}\n />\n )\n\n return (\n <Card onLayout={onLayout} borderWidth={1} borderColor=\"$borderColor\" p={phone ? '$3' : '$4'} gap=\"$4\" maxW={820} width=\"100%\">\n <YStack gap=\"$2\">\n <Text fontSize=\"$5\" fontWeight=\"800\">\n {editing ? `Edit ${name}` : 'New collection'}\n </Text>\n <Text fontSize=\"$2\" color=\"$color10\">\n A content type on the Hanzo Framework — name it and define its fields. Every field type is available; a\n rich-text field gives a full WYSIWYG body.\n </Text>\n </YStack>\n\n {/* Name — label above the input, so it never competes for the row. */}\n <YStack gap=\"$1.5\" width=\"100%\">\n <Text fontSize=\"$1\" color=\"$color11\" textTransform=\"uppercase\" letterSpacing={0.4}>\n Collection\n </Text>\n <Input\n width=\"100%\"\n minH={phone ? TAP : undefined}\n size={phone ? '$4' : '$3'}\n placeholder=\"e.g. Recipe or LandingPage\"\n value={name}\n onChangeText={setName}\n disabled={busy || editing}\n autoCapitalize=\"none\"\n />\n {editing ? (\n <Text fontSize=\"$1\" color=\"$color9\">\n A collection’s name is its identity and can’t change.\n </Text>\n ) : null}\n </YStack>\n\n {/* Fields */}\n <YStack gap=\"$2\" width=\"100%\">\n <XStack items=\"center\" justify=\"space-between\">\n <Text fontSize=\"$3\" fontWeight=\"700\" color=\"$color11\">\n Fields\n </Text>\n <Text fontSize=\"$1\" color=\"$color9\">\n {fields.length} field{fields.length === 1 ? '' : 's'}\n </Text>\n </XStack>\n\n <YStack gap=\"$2\" width=\"100%\">\n {fields.map((f, i) => {\n const err = showErrors ? validation.fieldErrors[f.key] : undefined\n const fname = f.label.trim() ? fieldNameFromLabel(f.label) : ''\n return (\n <YStack\n key={f.key}\n borderWidth={1}\n borderColor={err ? '$red7' : '$borderColor'}\n rounded=\"$4\"\n p=\"$3\"\n gap=\"$2\"\n bg=\"$color1\"\n width=\"100%\"\n >\n {/* Row 1 — the field's name. Full width on a phone. */}\n <XStack gap=\"$2\" items=\"center\" width=\"100%\">\n {phone ? null : <GripVertical size={15} opacity={0.5} />}\n <Input\n flex={1}\n minW={0}\n minH={phone ? TAP : undefined}\n size={phone ? '$4' : '$3'}\n placeholder=\"Field name (e.g. Title)\"\n value={f.label}\n onChangeText={(v: string) => patch(f.key, { label: v })}\n disabled={busy}\n autoCapitalize=\"none\"\n />\n {phone ? null : (\n <YStack minW={150}>\n <SelectMenu\n required\n ariaLabel=\"Field type\"\n options={TYPE_OPTIONS}\n value={f.type}\n onChange={(v) => v && patch(f.key, { type: v as Fieldtype })}\n disabled={busy}\n minWidth={150}\n />\n </YStack>\n )}\n </XStack>\n\n {/* Row 2 (phone) — the type picker gets its own full-width row. */}\n {phone ? (\n <YStack width=\"100%\">\n <SelectMenu\n required\n ariaLabel=\"Field type\"\n options={TYPE_OPTIONS}\n value={f.type}\n onChange={(v) => v && patch(f.key, { type: v as Fieldtype })}\n disabled={busy}\n minWidth={0}\n minHeight={TAP}\n />\n </YStack>\n ) : null}\n\n {/* Row 3 — flags + move/remove. Wraps; never clips the delete button. */}\n <XStack gap=\"$4\" items=\"center\" justify=\"space-between\" flexWrap=\"wrap\" width=\"100%\">\n <XStack gap=\"$4\" items=\"center\">\n <XStack gap=\"$2\" items=\"center\" minH={phone ? TAP : undefined}>\n <FieldSwitch checked={f.required} onChange={(v) => patch(f.key, { required: v })} disabled={busy} />\n <Text fontSize=\"$2\" color=\"$color10\">\n Required\n </Text>\n </XStack>\n <XStack gap=\"$2\" items=\"center\" minH={phone ? TAP : undefined}>\n <FieldSwitch checked={f.inListView} onChange={(v) => patch(f.key, { inListView: v })} disabled={busy} />\n <Text fontSize=\"$2\" color=\"$color10\">\n In list\n </Text>\n </XStack>\n </XStack>\n <XStack gap=\"$2\">\n {iconBtn(<ArrowUp size={14} />, 'Move field up', () => move(f.key, -1), busy || i === 0)}\n {iconBtn(<ArrowDown size={14} />, 'Move field down', () => move(f.key, 1), busy || i === fields.length - 1)}\n {iconBtn(<Trash2 size={14} />, 'Remove field', () => removeField(f.key), busy, true)}\n </XStack>\n </XStack>\n\n {/* Per-type extra input: Select options / Relation target. */}\n {fieldNeedsOptions(f.type) ? (\n <YStack gap=\"$1.5\" width=\"100%\">\n <Text fontSize=\"$1\" color=\"$color10\" textTransform=\"uppercase\" letterSpacing={0.4}>\n {f.type === 'Select' ? 'Options' : f.type === 'Link' ? 'Relates to' : 'Child type'}\n </Text>\n <Input\n width=\"100%\"\n minH={phone ? TAP : undefined}\n size={phone ? '$4' : '$2'}\n placeholder={\n f.type === 'Select' ? 'One per line — Draft / Published' : 'Collection name (e.g. Author)'\n }\n value={f.options}\n onChangeText={(v: string) => patch(f.key, { options: v })}\n multiline={f.type === 'Select'}\n numberOfLines={f.type === 'Select' ? 3 : 1}\n disabled={busy}\n autoCapitalize=\"none\"\n />\n </YStack>\n ) : null}\n\n <XStack items=\"center\" justify=\"space-between\" gap=\"$2\" flexWrap=\"wrap\">\n {fname ? (\n <Text fontSize=\"$1\" color=\"$color8\">\n field: {fname}\n </Text>\n ) : (\n <YStack />\n )}\n {err ? (\n <XStack gap=\"$1\" items=\"center\">\n <TriangleAlert size={12} />\n <Text fontSize=\"$1\" color=\"$red11\">\n {err}\n </Text>\n </XStack>\n ) : null}\n </XStack>\n </YStack>\n )\n })}\n </YStack>\n\n <XStack width={phone ? '100%' : undefined}>\n <Action phone={phone} icon={<Plus size={14} />} onPress={addField} disabled={busy}>\n Add field\n </Action>\n </XStack>\n </YStack>\n\n {showErrors && validation.formError ? <ErrorBar message={validation.formError} /> : null}\n {saveError ? <ErrorBar message={saveError} /> : null}\n\n <Actions phone={phone}>\n <Action phone={phone} disabled={busy} onPress={onCancel}>\n Cancel\n </Action>\n <Action phone={phone} primary disabled={busy} onPress={save}>\n {busy ? 'Saving…' : editing ? 'Save collection' : 'Create collection'}\n </Action>\n </Actions>\n </Card>\n )\n}\n","'use client'\n\n/**\n * CollectionsBrowser — the app-lane home: the DocTypes of a `module` (a CMS\n * \"collection\", an ERP document type, a Helpdesk ticket type are all just a\n * framework DocType tagged with that lane's module). It lists them, offers a\n * first-run \"Set up\" that installs the lane's fixtures\n * (`POST /v1/framework/modules/:module/install`), and a \"New collection\" that\n * opens the on-page content-type builder.\n *\n * Generic over the lane by construction: `module`, `label` and the first-run copy\n * are props, and where copy is unset it is DERIVED FROM THE LANE rather than\n * borrowed from one — the old default was the CMS's words, so an ERP org read\n * about Pages and Posts. CMS, ERP, Helpdesk and anything later render this same\n * component.\n *\n * Honest by construction — an org with the lane not yet installed sees the setup\n * call to action, never a fabricated collection.\n */\nimport { useCallback, useEffect, useState, type ReactNode } from 'react'\nimport { Text, XStack, YStack } from '@hanzo/gui'\nimport { Boxes, Plus } from '@hanzogui/lucide-icons-2'\n\nimport { PageHeader } from '../product/PageHeader'\nimport { EmptyState } from '../product/EmptyState'\nimport { BackendStateCard, classifyBackend, type BackendState } from '../product/BackendState'\nimport type { IconLike } from '../product/color'\nimport type { FrameworkClient } from './client'\nimport type { DocType } from './types'\nimport { moduleDoctypes } from './fields'\nimport { CollectionBuilder } from './CollectionBuilder'\nimport { Action, ErrorBar, Loading, Meta } from './parts'\nimport { useContainerLayout } from './responsive'\n\nexport interface CollectionsBrowserProps {\n client: FrameworkClient\n /** The app lane: 'cms' | 'erp' | 'help' | 'crm' | … */\n module: string\n /** Human label for the lane (e.g. \"Content\"). */\n label: string\n subtitle: string\n /** Open a collection's records. */\n onOpen: (doctype: string) => void\n /**\n * First-run (pre-install) copy. The defect this fixes was not \"there is a\n * default\" — it was that the default was ONE LANE'S copy (the CMS's), so an ERP\n * org read about Pages and Posts. Unset now falls back to copy derived from the\n * lane's own `label`, which is true for every lane; a host that has better words\n * passes them.\n */\n setupDescription?: string\n setupBullets?: string[]\n /**\n * Schema AUTHORING injected. The library ships a real `CollectionBuilder`, so a\n * host that omits this still gets one; a host that wants its own (or wants the\n * affordance withheld from a read-only surface) supplies or suppresses it.\n */\n renderBuilder?: (p: { onSaved: (doctype: string) => void; onCancel: () => void }) => ReactNode\n /** Lane icon (defaults to the generic collection glyph). */\n icon?: IconLike\n}\n\ntype LoadState =\n | { phase: 'loading' }\n | { phase: 'error'; error: BackendState }\n | { phase: 'ready'; collections: DocType[]; registered: boolean }\n\nexport function CollectionsBrowser({\n client,\n module,\n label,\n subtitle,\n onOpen,\n setupDescription,\n setupBullets,\n renderBuilder,\n icon = Boxes,\n}: CollectionsBrowserProps) {\n const [state, setState] = useState<LoadState>({ phase: 'loading' })\n const [busy, setBusy] = useState(false)\n const [creating, setCreating] = useState(false)\n const [actionError, setActionError] = useState<string | null>(null)\n const { phone, onLayout } = useContainerLayout()\n\n const load = useCallback(\n async (signal: { cancelled: boolean }) => {\n setState({ phase: 'loading' })\n try {\n const [dts, mod] = await Promise.all([\n client.doctypes.list(),\n client.modules.get(module).catch(() => null), // lane may not be registered on an older engine\n ])\n if (signal.cancelled) return\n setState({\n phase: 'ready',\n collections: moduleDoctypes(dts, module),\n registered: Boolean(mod && mod.doctypes.length),\n })\n } catch (e) {\n if (!signal.cancelled) setState({ phase: 'error', error: classifyBackend(e) })\n }\n },\n [client, module],\n )\n\n useEffect(() => {\n const signal = { cancelled: false }\n void load(signal)\n return () => {\n signal.cancelled = true\n }\n }, [load])\n\n const reload = useCallback(() => void load({ cancelled: false }), [load])\n\n const install = useCallback(async () => {\n setBusy(true)\n setActionError(null)\n try {\n await client.modules.install(module)\n reload()\n } catch (e) {\n setActionError(classifyBackend(e).message)\n } finally {\n setBusy(false)\n }\n }, [client, module, reload])\n\n if (state.phase === 'loading') {\n return (\n <YStack onLayout={onLayout} width=\"100%\">\n <Loading label={`Loading ${label}…`} />\n </YStack>\n )\n }\n\n if (state.phase === 'error') {\n return (\n <YStack onLayout={onLayout} gap=\"$3\" width=\"100%\">\n <PageHeader title={label} subtitle={subtitle} />\n <BackendStateCard state={state.error} onRetry={reload} hint=\"framework · GET /v1/framework/doctypes\" />\n </YStack>\n )\n }\n\n const { collections } = state\n return (\n <YStack onLayout={onLayout} gap=\"$3\" width=\"100%\">\n <PageHeader\n title={label}\n subtitle={subtitle}\n actions={\n collections.length && !creating ? (\n <Action\n phone={phone}\n primary\n icon={<Plus size={15} />}\n onPress={() => {\n setCreating(true)\n setActionError(null)\n }}\n >\n New collection\n </Action>\n ) : undefined\n }\n />\n\n {actionError ? <ErrorBar message={actionError} /> : null}\n\n {creating ? (\n (renderBuilder ?? ((p) => <CollectionBuilder client={client} module={module} {...p} />))({\n onSaved: (name: string) => {\n setCreating(false)\n onOpen(name)\n },\n onCancel: () => setCreating(false),\n })\n ) : null}\n\n {collections.length === 0 && !creating ? (\n <EmptyState\n icon={icon}\n title={`Set up ${label}`}\n description={\n setupDescription ??\n `${label} is a set of collections on the Hanzo Framework — typed documents, per organization.`\n }\n bullets={\n setupBullets ?? [\n `Installs the default ${label} collections into your organization`,\n 'Every record is a document on the framework — versioned, permissioned, per-org',\n 'Add your own collections and fields any time',\n ]\n }\n primary={state.registered ? { label: busy ? 'Setting up…' : `Set up ${label}`, onPress: install } : undefined}\n secondary={{ label: 'New collection', onPress: () => setCreating(true) }}\n />\n ) : !creating ? (\n // A fixed 240px card is a 240px column on a 390px phone with dead space\n // beside it. `flexBasis` + `flexGrow` makes each card fill the row on a\n // phone and settle back to a 240px tile once the box can hold several.\n <XStack gap=\"$3\" flexWrap=\"wrap\" width=\"100%\">\n {collections.map((dt) => (\n <YStack\n key={dt.name}\n onPress={() => onOpen(dt.name)}\n hoverStyle={{ borderColor: '$color8' }}\n pressStyle={{ bg: '$color3' }}\n cursor=\"pointer\"\n borderWidth={1}\n borderColor=\"$borderColor\"\n rounded=\"$4\"\n p=\"$4\"\n gap=\"$2\"\n minH={88}\n grow={phone ? 1 : 0}\n flexBasis={phone ? '100%' : 240}\n maxW={phone ? undefined : 240}\n >\n <XStack gap=\"$2\" items=\"center\">\n <Boxes size={16} />\n <Text fontSize=\"$4\" fontWeight=\"700\" flex={1} minW={0} numberOfLines={1}>\n {dt.name}\n </Text>\n </XStack>\n <Meta>\n {dt.fields?.length ?? 0} field{(dt.fields?.length ?? 0) === 1 ? '' : 's'}\n {dt.isSubmittable ? ' · submittable' : ''}\n </Meta>\n </YStack>\n ))}\n </XStack>\n ) : null}\n </YStack>\n )\n}\n","'use client'\n\n/**\n * MediaGrid — the DAM (media library) for a media DocType (an Attach-backed\n * collection). A REAL asset manager: drag/drop or pick files → they upload through\n * the injected `MediaUploader` (the host's own per-org object store) → a document\n * is created from the DocType's OWN schema → the grid shows a live thumbnail\n * (presigned on view, since object URLs are short-lived). Delete removes the\n * document AND the object.\n *\n * The document body is `mediaDocPayload(dt, facts)` — metadata-driven. This used\n * to write a hardcoded `{title, file, mime, size, width, height}`, which is the\n * CMS Media fixture's schema: a lane whose media type labels its rows `caption`\n * got untitled rows, silently, because the engine drops unknown keys. Now the\n * filename lands on the DocType's declared title field and each fact is written\n * only if that DocType has somewhere to put it.\n *\n * MOBILE FIRST: tiles are flex-basis, not a fixed 200px — two-up on a phone,\n * filling whatever the box gives on a desktop. The upload control is a full-width\n * tap target on a phone, and the per-tile delete is a 44px control rather than a\n * 13px glyph.\n *\n * Web-first by nature (file picker + drag/drop + `<img>` thumbnails), like the\n * other file-touching components in this layer.\n */\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from 'react'\nimport { Button, Card, Text, XStack, YStack } from '@hanzo/gui'\nimport { Image as ImageIcon, Trash2, Upload } from '@hanzogui/lucide-icons-2'\n\nimport { EmptyState } from '../product/EmptyState'\nimport { classifyBackend } from '../product/BackendState'\nimport type { FrameworkClient } from './client'\nimport type { DocType, FrameworkDoc } from './types'\nimport { mediaDocPayload, mediaFileField, titleOf } from './fields'\nimport { looksLikeImage, type MediaUploader } from './media'\nimport { Action, ErrorBar, Meta } from './parts'\nimport { useContainerLayout, TAP } from './responsive'\n\nexport interface MediaGridProps {\n client: FrameworkClient\n dt: DocType\n docs: FrameworkDoc[]\n /** The host's object store, bound to this lane's bucket. */\n media: MediaUploader\n /** Open a media document's detail (edit alt text, replace, etc.). */\n onOpen: (name: string) => void\n /** Re-fetch the media list after an upload/delete. */\n onChanged: () => void\n toolbarExtra?: ReactNode\n /** Accepted file types for the picker. */\n accept?: string\n}\n\nexport function MediaGrid({\n client,\n dt,\n docs,\n media,\n onOpen,\n onChanged,\n toolbarExtra,\n accept = 'image/*,application/pdf,video/*,audio/*',\n}: MediaGridProps) {\n const fileField = mediaFileField(dt)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const [busy, setBusy] = useState(false)\n const [progress, setProgress] = useState<{ done: number; total: number } | null>(null)\n const [error, setError] = useState<string | null>(null)\n const { phone, onLayout } = useContainerLayout()\n\n const upload = useCallback(\n async (files: FileList | File[]) => {\n const list = Array.from(files)\n if (list.length === 0) return\n setBusy(true)\n setError(null)\n setProgress({ done: 0, total: list.length })\n try {\n for (let i = 0; i < list.length; i += 1) {\n const facts = await media.upload(list[i])\n await client.records.create(dt.name, mediaDocPayload(dt, facts))\n setProgress({ done: i + 1, total: list.length })\n }\n onChanged()\n } catch (e) {\n setError(classifyBackend(e).message)\n } finally {\n setBusy(false)\n setProgress(null)\n }\n },\n [client, dt, media, onChanged],\n )\n\n const pick = () => inputRef.current?.click()\n const onInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) void upload(e.target.files)\n e.target.value = '' // allow re-selecting the same file\n }\n\n const HiddenInput = (\n <input ref={inputRef} type=\"file\" multiple accept={accept} style={{ display: 'none' }} onChange={onInput} />\n )\n\n const uploadLabel = busy ? (progress ? `Uploading ${progress.done}/${progress.total}…` : 'Uploading…') : 'Upload'\n\n if (docs.length === 0) {\n return (\n <YStack onLayout={onLayout} gap=\"$3\" width=\"100%\">\n {HiddenInput}\n {toolbarExtra ? (\n <XStack justify={phone ? 'flex-start' : 'flex-end'} gap=\"$2\" width=\"100%\">\n {toolbarExtra}\n </XStack>\n ) : null}\n {error ? <ErrorBar message={error} /> : null}\n <DropZone busy={busy} onDrop={upload}>\n <EmptyState\n icon={ImageIcon}\n title=\"No media yet\"\n description=\"Drag files here, or upload — images and files go to your organization's object storage and become reusable media you can attach to any record.\"\n primary={{ label: uploadLabel, onPress: pick }}\n />\n </DropZone>\n </YStack>\n )\n }\n\n return (\n <YStack onLayout={onLayout} gap=\"$3\" width=\"100%\">\n {HiddenInput}\n <XStack gap=\"$2\" items=\"center\" flexWrap=\"wrap\" justify={phone ? 'flex-start' : 'flex-end'} width=\"100%\">\n {toolbarExtra}\n <Action phone={phone} primary icon={<Upload size={15} />} disabled={busy} onPress={pick}>\n {uploadLabel}\n </Action>\n </XStack>\n {error ? <ErrorBar message={error} /> : null}\n <DropZone busy={busy} onDrop={upload}>\n <XStack gap=\"$3\" flexWrap=\"wrap\" width=\"100%\">\n {docs.map((d) => (\n <MediaCard\n key={String(d.name)}\n doc={d}\n dt={dt}\n fileField={fileField}\n media={media}\n phone={phone}\n onOpen={() => onOpen(String(d.name))}\n onDelete={async () => {\n setBusy(true)\n setError(null)\n try {\n await media.remove(d[fileField])\n await client.records.remove(dt.name, String(d.name))\n onChanged()\n } catch (e) {\n setError(classifyBackend(e).message)\n } finally {\n setBusy(false)\n }\n }}\n disabled={busy}\n />\n ))}\n </XStack>\n </DropZone>\n </YStack>\n )\n}\n\n/** One asset card — presigned thumbnail, title, type, and a delete affordance. */\nfunction MediaCard({\n doc,\n dt,\n fileField,\n media,\n phone,\n onOpen,\n onDelete,\n disabled,\n}: {\n doc: FrameworkDoc\n dt: DocType\n fileField: string\n media: MediaUploader\n phone: boolean\n onOpen: () => void\n onDelete: () => void | Promise<void>\n disabled?: boolean\n}) {\n const [url, setUrl] = useState('')\n const [confirming, setConfirming] = useState(false)\n const raw = String(doc[fileField] ?? '')\n const title = titleOf(doc, dt)\n\n useEffect(() => {\n let cancelled = false\n void media.resolveUrl(raw).then((u) => {\n if (!cancelled) setUrl(u)\n })\n return () => {\n cancelled = true\n }\n }, [raw, media])\n\n return (\n <YStack\n borderWidth={1}\n borderColor=\"$borderColor\"\n rounded=\"$4\"\n // Two-up on a phone, a 200px tile once there is room — never a fixed column\n // with dead space beside it.\n grow={0}\n flexBasis={phone ? '47%' : 200}\n maxW={phone ? undefined : 200}\n minW={140}\n overflow=\"hidden\"\n hoverStyle={{ borderColor: '$color8' }}\n >\n <YStack\n height={phone ? 110 : 130}\n bg=\"$color3\"\n items=\"center\"\n justify=\"center\"\n overflow=\"hidden\"\n cursor=\"pointer\"\n pressStyle={{ opacity: 0.8 }}\n onPress={onOpen}\n >\n {url && (looksLikeImage(raw) || looksLikeImage(url)) ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={url} alt={String(doc.alt ?? title)} style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n <ImageIcon size={28} />\n )}\n </YStack>\n <YStack p=\"$3\" gap=\"$1\">\n <Text fontSize=\"$3\" fontWeight=\"700\" numberOfLines={1}>\n {title}\n </Text>\n <XStack justify=\"space-between\" items=\"center\" gap=\"$2\">\n <Meta>{String(doc.mime ?? 'file')}</Meta>\n {confirming ? (\n <XStack gap=\"$1\">\n <Button\n size={phone ? '$3' : '$1'}\n minH={phone ? TAP : undefined}\n theme=\"red\"\n disabled={disabled}\n onPress={() => {\n setConfirming(false)\n void onDelete()\n }}\n >\n Delete\n </Button>\n <Button size={phone ? '$3' : '$1'} minH={phone ? TAP : undefined} disabled={disabled} onPress={() => setConfirming(false)}>\n No\n </Button>\n </XStack>\n ) : (\n <Button\n size={phone ? '$3' : '$1'}\n circular\n chromeless\n minW={phone ? TAP : undefined}\n minH={phone ? TAP : undefined}\n aria-label={`Delete ${title}`}\n icon={<Trash2 size={phone ? 16 : 13} />}\n disabled={disabled}\n onPress={() => setConfirming(true)}\n />\n )}\n </XStack>\n </YStack>\n </YStack>\n )\n}\n\n/** A drag-and-drop wrapper that highlights on drag-over and uploads on drop. */\nfunction DropZone({\n children,\n busy,\n onDrop,\n}: {\n children: ReactNode\n busy?: boolean\n onDrop: (files: FileList) => void | Promise<void>\n}) {\n const [over, setOver] = useState(false)\n return (\n <YStack\n width=\"100%\"\n onDragOver={(e: React.DragEvent) => {\n e.preventDefault()\n if (!busy) setOver(true)\n }}\n onDragLeave={() => setOver(false)}\n onDrop={(e: React.DragEvent) => {\n e.preventDefault()\n setOver(false)\n if (!busy && e.dataTransfer?.files?.length) void onDrop(e.dataTransfer.files)\n }}\n rounded=\"$4\"\n p={over ? '$3' : 0}\n borderWidth={over ? 2 : 0}\n borderColor=\"$color8\"\n style={{ borderStyle: 'dashed' }}\n >\n {children}\n </YStack>\n )\n}\n","'use client'\n\n/**\n * RecordCards — the PHONE view of a DocType's documents: one stacked card per\n * record instead of a horizontally-scrolling grid.\n *\n * A 12-column ERP Sales Order in a table on a 390px screen is a wall you drag\n * sideways to read one row; the same record as a card is a title plus its declared\n * list columns as label → value pairs, reading top to bottom in the width you\n * have. Nothing is hidden that the table would have shown — the card renders the\n * DocType's OWN `inListView` projection (`cardFields`), and the full record is one\n * tap away.\n *\n * The whole card is the tap target (far past the 44px floor), values render\n * through the SAME `FieldDisplay` router the table uses, so every field type\n * behaves identically in both, and search is the pure `searchRecords` — no second\n * filtering model.\n */\nimport { useMemo, useState, type ReactNode } from 'react'\nimport { Card, Input, Text, XStack, YStack } from '@hanzo/gui'\nimport { ChevronRight, Search } from '@hanzogui/lucide-icons-2'\nimport { FieldDisplay, searchRecords, type FieldDefinition } from '@hanzo/data'\n\nimport { Action, Loading, Meta, WRAP_ANYWHERE } from './parts'\n\nexport interface RecordCardsProps {\n /** The field shown as the card's headline (the DocType's titleField). */\n titleField?: string\n /** All fields (used for search); `cardFields` decides what a card shows. */\n fields: FieldDefinition[]\n /** The subset rendered as label → value rows on each card. */\n cardFields: FieldDefinition[]\n records: Record<string, unknown>[]\n loading?: boolean\n empty?: ReactNode\n onOpen?: (record: Record<string, unknown>) => void\n onCreate?: () => void\n createLabel?: string\n /** Extra toolbar control (e.g. Refresh). */\n toolbarExtra?: ReactNode\n}\n\n/** The headline for a card: the title field, else the record key. */\nfunction headline(record: Record<string, unknown>, titleField?: string): string {\n const t = titleField ? record[titleField] : undefined\n if (typeof t === 'string' && t.trim()) return t\n if (typeof t === 'number') return String(t)\n const name = record.name ?? record.id\n return typeof name === 'string' && name ? name : 'Untitled'\n}\n\nexport function RecordCards({\n titleField,\n fields,\n cardFields,\n records,\n loading,\n empty,\n onOpen,\n onCreate,\n createLabel = 'New record',\n toolbarExtra,\n}: RecordCardsProps) {\n const [query, setQuery] = useState('')\n const visible = useMemo(() => searchRecords(records, query, fields), [records, query, fields])\n\n return (\n <YStack testID=\"doctype-cards\" gap=\"$3\" width=\"100%\">\n {/* Toolbar: search takes the full row on a phone; the create action sits\n below it at full width, so both are thumb-reachable and neither clips. */}\n <YStack gap=\"$2\" width=\"100%\">\n <XStack\n items=\"center\"\n gap=\"$2\"\n px=\"$3\"\n minH={44}\n rounded=\"$3\"\n borderWidth={1}\n borderColor=\"$borderColor\"\n width=\"100%\"\n >\n <Search size={15} opacity={0.6} />\n <Input\n unstyled\n flex={1}\n minW={0}\n height={42}\n fontSize=\"$3\"\n color=\"$color12\"\n placeholder=\"Search\"\n value={query}\n onChangeText={setQuery}\n autoCapitalize=\"none\"\n />\n </XStack>\n <XStack gap=\"$2\" items=\"center\" flexWrap=\"wrap\" width=\"100%\">\n {onCreate ? (\n <Action phone primary onPress={onCreate}>\n {createLabel}\n </Action>\n ) : null}\n {toolbarExtra}\n </XStack>\n </YStack>\n\n {loading ? <Loading label=\"Loading records…\" /> : null}\n\n {!loading && visible.length === 0 ? (\n <Card borderWidth={1} borderColor=\"$borderColor\" p=\"$4\" width=\"100%\">\n <Text fontSize=\"$3\" color=\"$color10\">\n {query ? `No records match “${query}”.` : empty ?? 'No records yet.'}\n </Text>\n </Card>\n ) : null}\n\n <YStack gap=\"$2\" width=\"100%\">\n {visible.map((rec, i) => {\n const key = String(rec.name ?? rec.id ?? i)\n return (\n <Card\n key={key}\n borderWidth={1}\n borderColor=\"$borderColor\"\n rounded=\"$3\"\n p=\"$3\"\n width=\"100%\"\n cursor={onOpen ? 'pointer' : undefined}\n pressStyle={onOpen ? { bg: '$color3' } : undefined}\n hoverStyle={onOpen ? { borderColor: '$color8' } : undefined}\n onPress={onOpen ? () => onOpen(rec) : undefined}\n style={WRAP_ANYWHERE}\n >\n <YStack gap=\"$2\" width=\"100%\">\n <XStack items=\"center\" gap=\"$2\" width=\"100%\">\n <Text fontSize=\"$4\" fontWeight=\"700\" flex={1} minW={0} numberOfLines={2}>\n {headline(rec, titleField)}\n </Text>\n {onOpen ? <ChevronRight size={16} opacity={0.5} /> : null}\n </XStack>\n\n {cardFields.map((f) => (\n // Label above value: a two-column row forces the value into a\n // sliver at 390px. Stacked, every field type gets the full width.\n <YStack key={f.name} gap=\"$0.5\" width=\"100%\">\n <Text fontSize=\"$1\" color=\"$color10\" textTransform=\"uppercase\" letterSpacing={0.4}>\n {f.label}\n </Text>\n <XStack width=\"100%\" flexWrap=\"wrap\">\n <FieldDisplay field={f} value={rec[f.name]} />\n </XStack>\n </YStack>\n ))}\n </YStack>\n </Card>\n )\n })}\n </YStack>\n\n {visible.length ? (\n <Meta>\n {visible.length} of {records.length} record{records.length === 1 ? '' : 's'}\n </Meta>\n ) : null}\n </YStack>\n )\n}\n","'use client'\n\n/**\n * DocTypeRecords — the documents surface for ONE framework DocType, driven\n * ENTIRELY by DocType metadata. It loads the schema (→ @hanzo/data\n * `FieldDefinition[]` via `docTypeToFields`), the documents, and each relation's\n * candidate records, then renders them in the shape the CONTAINER can actually\n * hold. Every field type shows the right Display/Input with ZERO per-doctype code,\n * so a CMS Page, an ERP Invoice, or a Helpdesk Ticket all render here.\n *\n * MOBILE FIRST — the layout is a decision, not a media query afterthought:\n * · phone → `RecordCards`, a stacked card per record. A table of 12 columns on\n * a 390px screen is a sideways drag; a card is a read.\n * · desktop → @hanzo/data's `RecordsView` (table ⇆ board, filter/sort/group,\n * inline cell editing).\n * The first paint is ALWAYS the card list (see `responsive.ts`), and the table is\n * the enhancement applied once the box measures wide enough.\n *\n * The table also finally honors the DocType's OWN column projection\n * (`listHiddenFields` → `inListView`): a Sales Order that declares 4 list columns\n * out of 12 fields now renders 4. That projection was implemented and tested but\n * never passed to a view — which is exactly why the grid was unusable narrow.\n *\n * Persistence is REAL: an inline cell edit sends the FULL record (the engine\n * validates the whole document on update) via `savePayload`, and reflects the\n * server's row. States are honest — loading / empty / backend-error, never a\n * fabricated row.\n */\nimport { useCallback, useEffect, useMemo, useState, type ReactNode } from 'react'\nimport { Button, YStack } from '@hanzo/gui'\nimport { RefreshCw } from '@hanzogui/lucide-icons-2'\nimport { RecordsView, type FieldDefinition, type SelectOption, type ViewConfig } from '@hanzo/data'\n\nimport { BackendStateCard, classifyBackend, type BackendState } from '../product/BackendState'\nimport type { FrameworkClient } from './client'\nimport type { DocType, FrameworkDoc } from './types'\nimport {\n cardFields as pickCardFields,\n docTypeToFields,\n enrichLinks,\n hasProjectField,\n isMediaDoctype,\n listHiddenFields,\n PROJECT_FIELD,\n savePayload,\n toRecord,\n} from './fields'\nimport { loadLinkOptions, makeFieldOptions } from './data'\nimport { MediaGrid } from './MediaGrid'\nimport { RecordCards } from './RecordCards'\nimport { Action, ErrorBar } from './parts'\nimport { useContainerLayout, TAP } from './responsive'\nimport type { MediaUploader } from './media'\n\ntype LoadState =\n | { phase: 'loading' }\n | { phase: 'error'; error: BackendState }\n | {\n phase: 'ready'\n dt: DocType\n fields: FieldDefinition[]\n docs: FrameworkDoc[]\n records: Record<string, unknown>[]\n linkOptions: Record<string, SelectOption[]>\n }\n\nexport interface DocTypeRecordsProps {\n client: FrameworkClient\n /** DocType name to render. */\n doctype: string\n /** Open a document's detail (by document name). */\n onOpen: (name: string) => void\n /** Start creating a document. */\n onCreate: () => void\n /** Active project scope — filters the list when the collection has a `project` field. */\n project?: string\n title?: ReactNode\n /**\n * Object storage for a media/asset collection. Without it a media DocType still\n * renders as records (honest) — the DAM gallery needs a real place to put bytes,\n * and this layer refuses to invent one.\n */\n media?: MediaUploader\n /**\n * A host that would rather draw the asset gallery itself supplies this; it wins\n * over the built-in `MediaGrid`. Both paths need somewhere real to put bytes, so\n * a host with neither gets the honest generic table — nothing is faked.\n */\n renderMedia?: (p: {\n dt: DocType\n docs: FrameworkDoc[]\n onOpen: (name: string) => void\n onChanged: () => void\n toolbarExtra: ReactNode\n }) => ReactNode\n /** How many documents to fetch (the engine caps its own page). */\n limit?: number\n}\n\nexport function DocTypeRecords({\n client,\n doctype,\n onOpen,\n onCreate,\n project,\n title,\n media,\n renderMedia,\n limit = 200,\n}: DocTypeRecordsProps) {\n const [state, setState] = useState<LoadState>({ phase: 'loading' })\n const [mutationError, setMutationError] = useState<string | null>(null)\n const { phone, onLayout } = useContainerLayout()\n\n const load = useCallback(\n async (signal: { cancelled: boolean }) => {\n setState({ phase: 'loading' })\n try {\n const dt = await client.doctypes.get(doctype)\n const linkOptions = await loadLinkOptions(client, dt)\n // Scope the list to the selected project ONLY when the collection declares\n // a `project` field (the engine 400s a filter on an unknown field). No\n // project selected, or a collection without the field → org-level list.\n const filters = project && hasProjectField(dt) ? { [PROJECT_FIELD]: project } : undefined\n const docs = await client.records.list(doctype, { limit, ...(filters ? { filters } : {}) })\n if (signal.cancelled) return\n const records = docs.map((d) => enrichLinks(toRecord(d, dt), dt, linkOptions))\n setState({ phase: 'ready', dt, fields: docTypeToFields(dt), docs, records, linkOptions })\n } catch (e) {\n if (!signal.cancelled) setState({ phase: 'error', error: classifyBackend(e) })\n }\n },\n [client, doctype, project, limit],\n )\n\n useEffect(() => {\n const signal = { cancelled: false }\n void load(signal)\n return () => {\n signal.cancelled = true\n }\n }, [load])\n\n const reload = useCallback(() => void load({ cancelled: false }), [load])\n\n const ready = state.phase === 'ready' ? state : undefined\n\n const fieldOptions = useMemo(\n () => (ready ? makeFieldOptions(ready.linkOptions) : undefined),\n [ready],\n )\n\n /**\n * The table view starts from the DocType's own column projection. Controlled,\n * because a host that later persists saved views hands one in — but the DEFAULT\n * is the schema's answer, not \"every field\".\n */\n const [view, setView] = useState<ViewConfig | undefined>(undefined)\n const dtName = ready?.dt.name\n useEffect(() => {\n if (!ready) return\n setView({\n id: `doctype:${ready.dt.name}`,\n name: ready.dt.name,\n kind: 'table',\n filters: [],\n sorts: [],\n hiddenFields: listHiddenFields(ready.dt),\n })\n // Re-seed only when the DocType changes; user edits to the view persist.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dtName])\n\n const cards = useMemo(\n () => (ready ? pickCardFields(ready.dt, ready.fields) : []),\n [ready],\n )\n\n /** Persist ONE inline edit. The engine validates the whole document on update,\n * so send the full record with the cell change merged in (never a partial body). */\n const onEditCommit = useCallback(\n async (record: Record<string, unknown>, field: FieldDefinition, value: unknown) => {\n if (state.phase !== 'ready') return\n const name = typeof record.name === 'string' ? record.name : ''\n if (!name) return\n setMutationError(null)\n try {\n const body = savePayload({ ...record, [field.name]: value }, state.dt)\n const saved = await client.records.update(doctype, name, body)\n const next = enrichLinks(toRecord(saved, state.dt), state.dt, state.linkOptions)\n setState((s) => (s.phase === 'ready' ? { ...s, records: s.records.map((r) => (r.name === name ? next : r)) } : s))\n } catch (e) {\n setMutationError(classifyBackend(e).message)\n throw e // let the board revert its optimistic move\n }\n },\n [client, doctype, state],\n )\n\n if (state.phase === 'error') {\n return (\n <YStack onLayout={onLayout} width=\"100%\">\n <BackendStateCard state={state.error} onRetry={reload} hint={`framework · GET /v1/framework/${doctype}`} />\n </YStack>\n )\n }\n\n const refresh = phone ? (\n <Action phone icon={<RefreshCw size={15} />} onPress={reload}>\n Refresh\n </Action>\n ) : (\n <Button size=\"$2\" minH={TAP - 12} icon={<RefreshCw size={15} />} onPress={reload}>\n Refresh\n </Button>\n )\n\n // A media/asset library (a required Attach) gets the DAM gallery instead of the\n // record views — real upload to the host's object storage + presigned thumbnails.\n if (ready && (media || renderMedia) && isMediaDoctype(ready.dt)) {\n return (\n <YStack onLayout={onLayout} width=\"100%\">\n {renderMedia ? (\n renderMedia({ dt: ready.dt, docs: ready.docs, onOpen, onChanged: reload, toolbarExtra: refresh })\n ) : (\n <MediaGrid\n client={client}\n dt={ready.dt}\n docs={ready.docs}\n media={media!}\n onOpen={onOpen}\n onChanged={reload}\n toolbarExtra={refresh}\n />\n )}\n </YStack>\n )\n }\n\n const openByKey = (r: Record<string, unknown>) =>\n onOpen(String((r as { name?: unknown }).name ?? (r as { id?: unknown }).id ?? ''))\n\n return (\n <YStack onLayout={onLayout} gap=\"$3\" width=\"100%\">\n {mutationError ? <ErrorBar message={mutationError} /> : null}\n\n {phone ? (\n <RecordCards\n titleField={ready?.dt.titleField}\n fields={ready?.fields ?? []}\n cardFields={cards}\n records={ready?.records ?? []}\n loading={state.phase === 'loading'}\n empty={`No records in ${doctype} yet.`}\n onOpen={openByKey}\n onCreate={onCreate}\n toolbarExtra={refresh}\n />\n ) : (\n <YStack testID=\"doctype-table\" width=\"100%\">\n <RecordsView\n title={title}\n fields={ready?.fields ?? []}\n records={ready?.records ?? []}\n loading={state.phase === 'loading'}\n view={view}\n onViewChange={setView}\n onOpen={openByKey}\n onCreate={onCreate}\n createLabel=\"New record\"\n onEditCommit={onEditCommit}\n fieldOptions={fieldOptions}\n toolbarExtra={refresh}\n titleField={ready?.dt.titleField}\n empty={`No records in ${doctype} yet.`}\n />\n </YStack>\n )}\n </YStack>\n )\n}\n","'use client'\n\n/**\n * DocTypeDetail — view / edit / create / delete ONE framework document, plus the\n * lifecycle actions the engine exposes: PUBLISH (a status field flips Draft ⇆\n * Published) and, for a submittable DocType, SUBMIT / CANCEL (docstatus 0→1→2).\n * All metadata-driven: it loads the schema (→ @hanzo/data `FieldDefinition[]`) and\n * renders through `RecordDetail` (read) + `RecordForm` (edit) — the SAME field\n * routers the list uses — so every field type just works with zero per-doctype\n * code. Create (`name === 'new'`) opens the form over a defaulted blank draft.\n *\n * ONLY OFFERS WHAT THE ENGINE ALLOWS. `ops.go` refuses to edit a non-draft\n * (\"document is not a draft (docstatus %d); cannot edit\") and refuses to delete a\n * submitted document (\"must be cancelled before deletion\") — so Edit and Delete\n * are gated on `isDraft`. A user filling in a whole form on a submitted invoice\n * and getting an error card on Save is a bug, not a validation.\n *\n * MOBILE FIRST: the label-above-value form (@hanzo/data's `RecordForm`) already\n * reads top-to-bottom at any width; what did not fit was the header — a back\n * button, a title and up to five actions on one line. On a phone the actions take\n * their own full-width wrapping row at the 44px tap floor.\n *\n * The engine validates the WHOLE document on update, so save/publish always send\n * the full record (via `savePayload`, which slugifies the URL key + strips the\n * redacted Password). States are honest: backend-error, inline save error, and a\n * two-step delete confirmation — never optimistic fakery.\n */\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { Card, Text, XStack, YStack } from '@hanzo/gui'\nimport { ArrowLeft, Ban, Globe, Pencil, PenOff, Save, Send, Trash2, X } from '@hanzogui/lucide-icons-2'\nimport { RecordDetail, RecordForm, type FieldDefinition, type SelectOption } from '@hanzo/data'\n\nimport { BackendStateCard, classifyBackend, type BackendState } from '../product/BackendState'\nimport type { FrameworkClient } from './client'\nimport type { DocType, FrameworkDoc } from './types'\nimport { CANCELLED, SUBMITTED } from './types'\nimport {\n docTypeToFields,\n enrichLinks,\n hasProjectField,\n isDraft,\n newDraft,\n PROJECT_FIELD,\n savePayload,\n statusField,\n titleOf,\n toRecord,\n} from './fields'\nimport { loadLinkOptions, makeFieldOptions } from './data'\nimport { Action, Actions, ErrorBar, Loading, Panel } from './parts'\nimport { useContainerLayout } from './responsive'\n\nexport interface DocTypeDetailProps {\n client: FrameworkClient\n doctype: string\n /** Document name, or `'new'` to open the create form. */\n name: string\n /** Active project scope — stamped onto a NEW record when the collection has a `project` field. */\n project?: string\n onBack: () => void\n /** Land on a document (after create). */\n onView: (name: string) => void\n}\n\ntype LoadState =\n | { phase: 'loading' }\n | { phase: 'error'; error: BackendState }\n | { phase: 'ready'; dt: DocType; record: Record<string, unknown> | null; linkOptions: Record<string, SelectOption[]> }\n\nexport function DocTypeDetail({ client, doctype, name, project, onBack, onView }: DocTypeDetailProps) {\n const isNew = name === 'new'\n const [state, setState] = useState<LoadState>({ phase: 'loading' })\n const [editing, setEditing] = useState(isNew)\n const [draft, setDraft] = useState<Record<string, unknown>>({})\n const [busy, setBusy] = useState(false)\n const [saveError, setSaveError] = useState<string | null>(null)\n const [confirmingDelete, setConfirmingDelete] = useState(false)\n const { phone, onLayout } = useContainerLayout()\n\n const load = useCallback(\n async (signal: { cancelled: boolean }) => {\n setState({ phase: 'loading' })\n try {\n const dt = await client.doctypes.get(doctype)\n const linkOptions = await loadLinkOptions(client, dt)\n const doc = isNew ? null : await client.records.get(doctype, name)\n if (signal.cancelled) return\n const record = doc ? enrichLinks(toRecord(doc, dt), dt, linkOptions) : null\n setState({ phase: 'ready', dt, record, linkOptions })\n // A NEW record inherits the active project scope (when the collection has a\n // `project` field), so content created under a selected project is tagged\n // with it and shows up in that project's filtered list.\n const seed = newDraft(dt)\n if (record == null && project && hasProjectField(dt)) seed[PROJECT_FIELD] = project\n setDraft(record ? { ...record } : seed)\n setEditing(isNew)\n setSaveError(null)\n setConfirmingDelete(false)\n } catch (e) {\n if (!signal.cancelled) setState({ phase: 'error', error: classifyBackend(e) })\n }\n },\n [client, doctype, name, isNew, project],\n )\n\n useEffect(() => {\n const signal = { cancelled: false }\n void load(signal)\n return () => {\n signal.cancelled = true\n }\n }, [load])\n\n const reload = useCallback(() => void load({ cancelled: false }), [load])\n\n const ready = state.phase === 'ready' ? state : undefined\n const dt = ready?.dt\n const record = ready?.record ?? null\n const fields: FieldDefinition[] = useMemo(() => (dt ? docTypeToFields(dt, { editing: !isNew }) : []), [dt, isNew])\n const fieldOptions = useMemo(() => (ready ? makeFieldOptions(ready.linkOptions) : undefined), [ready])\n const title = dt ? (isNew ? `New ${doctype}` : titleOf(record ?? {}, dt)) : doctype\n\n const onChange = useCallback((field: string, value: unknown) => {\n setDraft((d) => ({ ...d, [field]: value }))\n }, [])\n\n const reflect = useCallback(\n (saved: FrameworkDoc) => {\n if (!dt || !ready) return\n const next = enrichLinks(toRecord(saved, dt), dt, ready.linkOptions)\n setState({ phase: 'ready', dt, record: next, linkOptions: ready.linkOptions })\n setDraft({ ...next })\n },\n [dt, ready],\n )\n\n const save = useCallback(async () => {\n if (!dt) return\n setBusy(true)\n setSaveError(null)\n try {\n const body = savePayload(draft, dt)\n if (isNew) {\n const created = await client.records.create(doctype, body)\n if (created.name) onView(String(created.name))\n else onBack()\n return\n }\n if (!record?.name) throw new Error('This record has no name to update.')\n reflect(await client.records.update(doctype, String(record.name), body))\n setEditing(false)\n } catch (e) {\n setSaveError(classifyBackend(e).message)\n } finally {\n setBusy(false)\n }\n }, [client, doctype, draft, dt, isNew, onBack, onView, record, reflect])\n\n /** Lifecycle op on the current record (publish/unpublish/submit/cancel). */\n const run = useCallback(\n async (op: () => Promise<FrameworkDoc | void>) => {\n setBusy(true)\n setSaveError(null)\n try {\n const saved = await op()\n if (saved) reflect(saved)\n } catch (e) {\n setSaveError(classifyBackend(e).message)\n } finally {\n setBusy(false)\n }\n },\n [reflect],\n )\n\n const remove = useCallback(async () => {\n if (!record?.name) return\n setBusy(true)\n setSaveError(null)\n try {\n await client.records.remove(doctype, String(record.name))\n onBack()\n } catch (e) {\n setSaveError(classifyBackend(e).message)\n setBusy(false)\n setConfirmingDelete(false)\n }\n }, [client, doctype, onBack, record])\n\n const backButton = (\n <Action phone={phone} icon={<ArrowLeft size={15} />} onPress={onBack}>\n Back\n </Action>\n )\n\n if (state.phase === 'loading') {\n return (\n <YStack onLayout={onLayout} width=\"100%\">\n <Loading label={`Loading ${doctype}…`} />\n </YStack>\n )\n }\n if (state.phase === 'error') {\n return (\n <YStack onLayout={onLayout} gap=\"$3\" width=\"100%\">\n <XStack>{backButton}</XStack>\n <BackendStateCard state={state.error} onRetry={reload} hint={`framework · ${doctype}/${name}`} />\n </YStack>\n )\n }\n if (!dt) {\n return (\n <YStack onLayout={onLayout} gap=\"$3\" width=\"100%\">\n <XStack>{backButton}</XStack>\n </YStack>\n )\n }\n\n // What the engine will actually accept, asked once. A submitted document is\n // immutable until cancelled; a cancelled one is a tombstone.\n const draftDoc = isDraft(record)\n const statusF = statusField(dt)\n const status = record ? String(record[statusF] ?? '') : ''\n const docstatus = record ? Number(record.docstatus ?? 0) : 0\n const canEdit = !editing && !isNew && draftDoc\n const canDelete = !editing && !isNew && draftDoc\n const canPublish = canEdit && Boolean(statusF)\n const canSubmit = !editing && !isNew && Boolean(dt.isSubmittable) && draftDoc\n const canCancel = !editing && !isNew && Boolean(dt.isSubmittable) && docstatus === SUBMITTED\n\n const lifecycle =\n docstatus === SUBMITTED ? ' · submitted' : docstatus === CANCELLED ? ' · cancelled' : ''\n\n return (\n <YStack onLayout={onLayout} gap=\"$3\" width=\"100%\">\n {/* Header. On a phone the title owns its row and the actions wrap onto their\n own full-width row below — nothing is pushed off-screen. */}\n <YStack gap=\"$3\" width=\"100%\">\n <XStack items=\"center\" gap=\"$3\" width=\"100%\" flexWrap=\"wrap\">\n {phone ? null : backButton}\n <YStack flex={1} minW={200}>\n <Text fontSize=\"$6\" fontWeight=\"800\" numberOfLines={2}>\n {title}\n </Text>\n <Text fontSize=\"$2\" color=\"$color10\" numberOfLines={1}>\n {doctype}\n {status ? ` · ${status}` : ''}\n {lifecycle}\n </Text>\n </YStack>\n </XStack>\n\n <Actions phone={phone}>\n {phone ? backButton : null}\n {editing ? (\n <>\n {!isNew ? (\n <Action\n phone={phone}\n icon={<X size={15} />}\n disabled={busy}\n onPress={() => {\n setDraft(record ? { ...record } : {})\n setEditing(false)\n setSaveError(null)\n }}\n >\n Cancel\n </Action>\n ) : null}\n <Action phone={phone} primary icon={<Save size={15} />} disabled={busy} onPress={save}>\n {busy ? 'Saving…' : isNew ? 'Create' : 'Save'}\n </Action>\n </>\n ) : (\n <>\n {canDelete ? (\n <Action phone={phone} danger icon={<Trash2 size={15} />} disabled={busy} onPress={() => setConfirmingDelete(true)}>\n Delete\n </Action>\n ) : null}\n {canCancel ? (\n <Action\n phone={phone}\n icon={<Ban size={15} />}\n disabled={busy}\n onPress={() => run(() => client.records.cancel(doctype, String(record!.name)))}\n >\n Cancel doc\n </Action>\n ) : null}\n {canSubmit ? (\n <Action\n phone={phone}\n icon={<Send size={15} />}\n disabled={busy}\n onPress={() => run(() => client.records.submit(doctype, String(record!.name)))}\n >\n Submit\n </Action>\n ) : null}\n {canPublish ? (\n status === 'Published' ? (\n <Action\n phone={phone}\n icon={<PenOff size={15} />}\n disabled={busy}\n onPress={() =>\n run(async () =>\n client.records.update(doctype, String(record!.name), savePayload({ ...record, [statusF]: 'Draft' }, dt)),\n )\n }\n >\n Unpublish\n </Action>\n ) : (\n <Action\n phone={phone}\n primary\n icon={<Globe size={15} />}\n disabled={busy}\n onPress={() =>\n run(async () =>\n client.records.update(\n doctype,\n String(record!.name),\n savePayload({ ...record, [statusF]: 'Published' }, dt),\n ),\n )\n }\n >\n Publish\n </Action>\n )\n ) : null}\n {canEdit ? (\n <Action phone={phone} primary icon={<Pencil size={15} />} onPress={() => setEditing(true)}>\n Edit\n </Action>\n ) : null}\n </>\n )}\n </Actions>\n </YStack>\n\n {/* Say WHY the actions are gone, rather than silently offering nothing. */}\n {!editing && !isNew && !draftDoc ? (\n <Card borderWidth={1} borderColor=\"$borderColor\" bg=\"$color2\" p=\"$3\" maxW={620}>\n <Text fontSize=\"$2\" color=\"$color11\">\n {docstatus === SUBMITTED\n ? 'This document is submitted. Cancel it to make further changes — the engine refuses edits and deletes on a submitted document.'\n : 'This document is cancelled. It is kept as a record and can no longer be edited or deleted.'}\n </Text>\n </Card>\n ) : null}\n\n {confirmingDelete ? (\n <Card borderWidth={1} borderColor=\"$red7\" bg=\"$red2\" p=\"$3\" gap=\"$3\" maxW={620}>\n <Text fontSize=\"$3\" fontWeight=\"700\">\n Delete “{title}”? This cannot be undone.\n </Text>\n <Actions phone={phone}>\n <Action phone={phone} danger disabled={busy} onPress={remove}>\n {busy ? 'Deleting…' : 'Confirm delete'}\n </Action>\n <Action phone={phone} disabled={busy} onPress={() => setConfirmingDelete(false)}>\n Keep\n </Action>\n </Actions>\n </Card>\n ) : null}\n\n {saveError ? <ErrorBar message={saveError} /> : null}\n\n <Panel phone={phone}>\n {editing ? (\n <RecordForm fields={fields} values={draft} onChange={onChange} fieldOptions={fieldOptions} />\n ) : record ? (\n <RecordDetail title={title} fields={fields} record={record} fieldOptions={fieldOptions} />\n ) : null}\n </Panel>\n </YStack>\n )\n}\n"]}
|
package/dist/gitops.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"gitops.cjs","sourcesContent":[]}
|
package/dist/gui-config.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gui-config.ts"],"names":["createGui","defaultConfig"],"mappings":"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","file":"gui-config.cjs","sourcesContent":["import { defaultConfig } from '@hanzogui/config/v5'\nimport { createGui } from '@hanzo/gui'\n\n// ─────────────────────────────────────────────────────────────────────────────\n// THE ONE SCALE — shared, because a second app that copied it would fork it.\n//\n// This lived in the console's own gui.config.ts. The moment a second Hanzo admin\n// exists (the dedicated Hanzo Social app), a private scale is a scale that drifts:\n// the two products would render @hanzo/ui/product components at different sizes,\n// radii and spacing. So the scale ships WITH the components.\n//\n// Three scales used to disagree. `app/design/typography.css` declared the\n// intended compact register (11/13/14/15/17/21/26 — the linear.app density);\n// @hanzo/gui's Tamagui `$N` ladder is what components actually TYPE (thousands\n// of `fontSize=\"$N\"` call sites); and the rendered result was TEN distinct\n// sizes, including 217 nodes at the retired 16px base and 30 at 10px, while the\n// intended 11px label size rendered NOWHERE.\n//\n// The ladder is exactly why we do not edit thousands of call sites: REMAP IT\n// ONCE and every surface lands on the design scale. So this file is the single\n// place the console's type, radius and spacing scales are defined —\n// `app/design/*.css` declares them for CSS consumers, this maps the `$N` tokens\n// onto the same numbers for the component layer. Change a value here, the whole\n// product moves. Adding a fourth spelling of a size is the thing to refuse.\n//\n// Canonical face: Geist Sans for UI, Geist Mono for anything numeric/code/id\n// (`.hz-mono`). The host self-hosts both faces (its own fonts.css) — this only\n// names them.\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst GEIST = \"'Geist', system-ui, -apple-system, sans-serif\"\n\n/** Type — SIX sizes in the app, matching the host's `--text-*` design tokens.\n * $1 label · $2 nav + dense body · $3 base · $4/$5 emphasis · $6 section head ·\n * $7 page title · $8+ display. `$5` collapses onto 15 to retire the 16px base\n * (217 stray nodes); `$9` collapses onto 26 so a page title has ONE size. */\nconst FONT_SIZE = {\n 1: 11,\n 2: 13,\n 3: 14,\n 4: 15,\n 5: 15,\n 6: 17,\n 7: 21,\n 8: 26,\n 9: 26,\n 10: 32,\n 11: 40,\n 12: 48,\n 13: 56,\n 14: 64,\n 15: 80,\n 16: 96,\n true: 14,\n} as const\n\n/** Leading, paired 1:1 with the sizes above. A size token carries a line-height\n * tuned for ONE line, so these track the type scale rather than the inherited\n * ladder, which left an 11px label sitting in an 18px box. */\nconst LINE_HEIGHT = {\n 1: 16,\n 2: 18,\n 3: 20,\n 4: 22,\n 5: 22,\n 6: 24,\n 7: 28,\n 8: 32,\n 9: 32,\n 10: 38,\n 11: 46,\n 12: 54,\n 13: 62,\n 14: 70,\n 15: 86,\n 16: 102,\n true: 20,\n} as const\n\n/** Radius — FOUR values, no more. 6 control · 8 input/row · 12 panel · pill.\n * The inherited ladder had thirteen spellings rendering ten values, including\n * three different spellings of \"pill\" (`{999}`, `{99}`, `$10`). `$10`+ IS the\n * pill, so the 115 `rounded=\"$10\"` call sites finally mean one thing. */\nconst RADIUS = {\n 0: 0,\n 1: 6,\n 2: 6,\n 3: 8,\n 4: 8,\n 5: 12,\n 6: 12,\n 7: 12,\n 8: 12,\n 9: 12,\n 10: 9999,\n 11: 9999,\n 12: 9999,\n true: 8,\n} as const\n\n/** Spacing — the 4px ramp, and only the 4px ramp. The inherited ladder landed on\n * odd pixels belonging to no scale: `$2`=7, `$3`=13, `$4`=18 were the three\n * most-rendered paddings in the whole app. Mirrored into negative steps because\n * Tamagui resolves `-$3` from this same map. */\nconst STEP: Record<string, number> = {\n '0': 0,\n '0.25': 1,\n '0.5': 2,\n '0.75': 3,\n '1': 4,\n '1.5': 6,\n '2': 8,\n '2.5': 10,\n '3': 12,\n '3.5': 14,\n '4': 16,\n '4.5': 20,\n '5': 24,\n '6': 32,\n '7': 40,\n '8': 48,\n '9': 56,\n '10': 64,\n '11': 80,\n '12': 96,\n '13': 112,\n '14': 128,\n '15': 144,\n '16': 160,\n '17': 160,\n '18': 176,\n '19': 192,\n '20': 208,\n}\n\nconst space: Record<string, number> = {}\nfor (const [k, v] of Object.entries(STEP)) {\n space[`$${k}`] = v\n space[`-${k}`] = -v\n}\nspace.$true = STEP['4']\nspace['-true'] = -STEP['4']\n\nexport const config = createGui({\n ...defaultConfig,\n tokens: {\n ...defaultConfig.tokens,\n radius: RADIUS,\n space,\n },\n fonts: {\n ...defaultConfig.fonts,\n body: { ...defaultConfig.fonts.body, family: GEIST, size: FONT_SIZE, lineHeight: LINE_HEIGHT },\n heading: { ...defaultConfig.fonts.heading, family: GEIST, size: FONT_SIZE, lineHeight: LINE_HEIGHT },\n },\n})\n\nexport default config\n\nexport type Conf = typeof config\n"]}
|
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/models/catalog.ts","../../src/models/ModelSelector.tsx"],"names":["useState","useMemo","jsxs","Popover","jsx","PopoverTrigger","cn","ChevronsUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Check"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @hanzo/ui/models — Model catalog data layer\n *\n * Pure, SSR-safe helpers shared by the unified ModelSelector. No React,\n * no browser globals — usable on the server, in edge runtimes, or the client.\n *\n * ModelCatalogEntry is the gateway/OpenAI-shaped record ({ id, owned_by, ... })\n * returned by `${baseUrl}/models`. It is intentionally distinct from the\n * registry-shaped ZenModelLike in ./types (which drives the marketing cards).\n */\n\nexport interface ModelCatalogEntry {\n /** Gateway id, e.g. \"claude-opus-4.8\" */\n id: string\n /** e.g. \"anthropic\" | \"openai\" | \"hanzo\" | \"deepseek\" */\n owned_by?: string\n /** Optional explicit family label override */\n family?: string\n /** Display label; defaults to id */\n label?: string\n premium?: boolean\n /** \"chat\" (default) | \"embedding\" | \"image\" | ... */\n modality?: string\n context_window?: number\n description?: string\n}\n\n/** owned_by → display family. */\nconst OWNER_FAMILY: Record<string, string> = {\n hanzo: 'Zen',\n anthropic: 'Anthropic',\n openai: 'OpenAI',\n deepseek: 'DeepSeek',\n alibaba: 'Qwen',\n qwen: 'Qwen',\n meta: 'Meta Llama',\n mistralai: 'Mistral',\n mistral: 'Mistral',\n google: 'Google Gemma',\n nvidia: 'NVIDIA',\n moonshot: 'Kimi',\n}\n\n/** House then marquee; everything else sorts alphabetically after these. */\nconst FAMILY_ORDER = ['Enso', 'Zen', 'Anthropic', 'OpenAI']\n\nfunction capitalize(s: string): string {\n return s ? s.charAt(0).toUpperCase() + s.slice(1) : s\n}\n\n/** Infer a family from an id prefix. Returns undefined when nothing matches. */\nfunction familyFromId(id: string): string | undefined {\n if (id.startsWith('enso')) return 'Enso'\n if (id.startsWith('zen')) return 'Zen'\n if (id.startsWith('claude')) return 'Anthropic'\n if (id.startsWith('gpt') || id === 'o1' || id.startsWith('o1-') || id.startsWith('o3')) return 'OpenAI'\n if (id.startsWith('qwen')) return 'Qwen'\n if (id.startsWith('llama')) return 'Meta Llama'\n if (id.startsWith('glm')) return 'GLM'\n if (id.startsWith('kimi')) return 'Kimi'\n if (id.startsWith('deepseek')) return 'DeepSeek'\n if (id.startsWith('mistral')) return 'Mistral'\n if (id.startsWith('gemma')) return 'Google Gemma'\n if (id.startsWith('nemotron')) return 'NVIDIA'\n if (id.startsWith('minimax')) return 'MiniMax'\n if (id.startsWith('mimo')) return 'MiMo'\n return undefined\n}\n\n/**\n * Resolve the display family of a model.\n * Precedence: explicit `family` → enso id (house split, beats owned_by) →\n * owned_by map → llama id under any owner → capitalized owned_by → id prefix → \"Other\".\n */\nexport function familyOf(m: ModelCatalogEntry): string {\n const explicit = m.family?.trim()\n if (explicit) return explicit\n\n const id = (m.id ?? '').toLowerCase()\n // Enso ids form their own house family regardless of owned_by.\n if (id.startsWith('enso')) return 'Enso'\n\n const owned = m.owned_by?.toLowerCase().trim()\n if (owned) {\n const byOwner = OWNER_FAMILY[owned]\n if (byOwner) return byOwner\n // llama* ids resolve to Meta Llama even under a different owner.\n const byId = familyFromId(id)\n if (byId) return byId\n return capitalize(owned)\n }\n\n return familyFromId(id) ?? 'Other'\n}\n\nfunction orderFamilies(a: string, b: string): number {\n const ia = FAMILY_ORDER.indexOf(a)\n const ib = FAMILY_ORDER.indexOf(b)\n if (ia !== -1 || ib !== -1) {\n if (ia === -1) return 1\n if (ib === -1) return -1\n return ia - ib\n }\n return a.localeCompare(b)\n}\n\n/**\n * Group models by family, ordered house-then-marquee-then-alphabetical.\n * Model order within each family is the input order (stable).\n */\nexport function groupModelsByFamily(\n models: ModelCatalogEntry[],\n): { family: string; models: ModelCatalogEntry[] }[] {\n const byFamily = new Map<string, ModelCatalogEntry[]>()\n for (const m of models) {\n const fam = familyOf(m)\n const arr = byFamily.get(fam)\n if (arr) arr.push(m)\n else byFamily.set(fam, [m])\n }\n return Array.from(byFamily.keys())\n .sort(orderFamilies)\n .map((family) => ({ family, models: byFamily.get(family)! }))\n}\n\n/** Modality/id keywords that mark a model as NOT chat-capable. */\nconst NON_CHAT = [\n 'embedding',\n 'embed',\n 'image',\n 'video',\n 'music',\n 'voice',\n 'tts',\n 'rerank',\n 'guard',\n 'foley',\n 'moderation',\n 'router',\n]\n\n/**\n * True when a model can be used for chat. Excludes embedding/image/video/\n * music/voice/tts/rerank/guard/foley/moderation/router by explicit modality\n * or by an id-segment heuristic.\n */\nexport function isChatModel(m: ModelCatalogEntry): boolean {\n const modality = (m.modality ?? '').toLowerCase().trim()\n if (modality && NON_CHAT.some((k) => modality.includes(k))) return false\n const id = (m.id ?? '').toLowerCase()\n if (NON_CHAT.some((k) => id.includes(k))) return false\n return true\n}\n\n/** Keep only chat-capable models. */\nexport function filterChatModels(models: ModelCatalogEntry[]): ModelCatalogEntry[] {\n return models.filter(isChatModel)\n}\n\n/**\n * Fetch a model catalog from an OpenAI-shaped `/models` endpoint.\n * SSR-safe: uses global fetch, no browser globals, no caching/state —\n * consumers own caching. Throws on a non-2xx response.\n */\nexport async function fetchModelCatalog(\n baseUrl?: string,\n token?: string,\n): Promise<ModelCatalogEntry[]> {\n const base = (baseUrl ?? 'https://api.hanzo.ai/v1').replace(/\\/+$/, '')\n const headers: Record<string, string> = { Accept: 'application/json' }\n if (token) headers.Authorization = `Bearer ${token}`\n\n const res = await fetch(`${base}/models`, { headers })\n if (!res.ok) {\n throw new Error(`fetchModelCatalog: ${res.status} ${res.statusText}`)\n }\n\n const json: unknown = await res.json()\n const rows: any[] = Array.isArray(json)\n ? json\n : Array.isArray((json as { data?: unknown })?.data)\n ? (json as { data: any[] }).data\n : []\n\n return rows\n .map((d): ModelCatalogEntry => ({\n id: String(d.id),\n owned_by: d.owned_by ?? d.ownedBy ?? undefined,\n family: d.family ?? undefined,\n label: d.label ?? d.name ?? undefined,\n premium: d.premium ?? undefined,\n modality: d.modality ?? undefined,\n context_window: d.context_window ?? d.contextWindow ?? d.context ?? undefined,\n description: d.description ?? undefined,\n }))\n .filter((m) => m.id && m.id !== 'undefined')\n}\n","'use client'\n\nimport { useMemo, useState } from 'react'\nimport { Check, ChevronsUpDown } from '@hanzogui/lucide-icons-2'\n\nimport { cn } from '../core/cn'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../backends/gui'\nimport { familyOf, filterChatModels, groupModelsByFamily, type ModelCatalogEntry } from './catalog'\n\n/** Show the search input once a catalog gets this large. */\nconst SEARCH_THRESHOLD = 12\n\nfunction fmtContext(ctx: number | undefined): string {\n if (!ctx) return ''\n if (ctx >= 1_000_000) return `${(ctx / 1_000_000).toFixed(ctx % 1_000_000 === 0 ? 0 : 1)}M`\n if (ctx >= 1000) return `${Math.round(ctx / 1000)}K`\n return `${ctx}`\n}\n\nexport interface ModelSelectorProps {\n models: ModelCatalogEntry[]\n value?: string\n onChange: (id: string) => void\n disabled?: boolean\n size?: 'sm' | 'md'\n placeholder?: string\n /** Default true: filter to chat-capable models (exclude embedding/image/etc.). */\n chatOnly?: boolean\n className?: string\n}\n\n/**\n * ModelSelector — the one unified model picker for every Hanzo app.\n *\n * Family-grouped picker in a compact Radix Popover + cmdk Command combobox:\n * grouped sections with family headers, premium markers, context suffixes,\n * keyboard navigation, and type-to-filter search for large catalogs. Monochrome,\n * dark-first, data-agnostic. Every class is a standard token; the font is\n * inherited (Geist).\n */\nexport function ModelSelector({\n models,\n value,\n onChange,\n disabled = false,\n size = 'md',\n placeholder = 'Select model',\n chatOnly = true,\n className,\n}: ModelSelectorProps) {\n const [open, setOpen] = useState(false)\n\n const visible = useMemo(() => (chatOnly ? filterChatModels(models) : models), [models, chatOnly])\n const groups = useMemo(() => groupModelsByFamily(visible), [visible])\n const showSearch = visible.length > SEARCH_THRESHOLD\n\n // Resolve the selected label from the FULL list so a current pick still shows\n // even when chatOnly would otherwise hide it.\n const selected = value ? models.find((m) => m.id === value) : undefined\n const selectedLabel = selected ? (selected.label ?? selected.id) : placeholder\n const selectedFamily = selected ? familyOf(selected) : undefined\n\n const isSm = size === 'sm'\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-md border border-border bg-background text-left font-medium text-foreground transition hover:border-primary/40 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n isSm ? 'h-7 px-2 text-xs' : 'h-9 px-3 text-sm',\n className,\n )}\n >\n <span className=\"truncate\">{selectedLabel}</span>\n {selectedFamily && <span className=\"truncate text-muted-foreground\">{selectedFamily}</span>}\n <ChevronsUpDown size={isSm ? 12 : 14} ml=\"auto\" shrink={0} opacity={0.5} />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-[var(--radix-popover-trigger-width)] min-w-[14rem] border-border bg-popover p-0 text-popover-foreground shadow-md\"\n >\n <Command>\n {showSearch && <CommandInput placeholder=\"Search models…\" className=\"h-9 text-sm\" />}\n <CommandList className=\"max-h-72\">\n <CommandEmpty>No models found.</CommandEmpty>\n {groups.map((group) => (\n <CommandGroup\n key={group.family}\n heading={group.family}\n className=\"[&_[cmdk-group-heading]]:text-[10px] [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wide [&_[cmdk-group-heading]]:text-muted-foreground\"\n >\n {group.models.map((m) => {\n const label = m.label ?? m.id\n const ctx = fmtContext(m.context_window)\n return (\n <CommandItem\n key={m.id}\n value={`${group.family} ${label} ${m.id}`}\n onSelect={() => {\n onChange(m.id)\n setOpen(false)\n }}\n className=\"gap-2\"\n >\n <Check size={14} shrink={0} opacity={m.id === value ? 1 : 0} />\n <span className=\"truncate\">{label}</span>\n {m.premium && (\n <span className=\"text-muted-foreground\" title=\"Premium\" aria-label=\"Premium\">\n ✦\n </span>\n )}\n {ctx && (\n <span className=\"ml-auto shrink-0 pl-2 text-[10px] tabular-nums text-muted-foreground\">\n {ctx}\n </span>\n )}\n </CommandItem>\n )\n })}\n </CommandGroup>\n ))}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n}\n\nexport default ModelSelector\n"]}
|
package/dist/oss.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/oss/catalog.ts","../src/oss/blueprint.ts"],"names":[],"mappings":"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","file":"oss.cjs","sourcesContent":["/**\n * The OSS App Store catalog — the shared client for the 1000+-app one-click\n * open-source catalog served as a flat JSON array at `<base>/meta.json`, with per-app\n * blueprint assets under `<base>/blueprints/<id>/`.\n *\n * One catalog, several surfaces: the console App Store, platform.hanzo.ai, and the\n * public gallery at oss.hanzo.ai. They previously each carried their own copy of the\n * shape, the normalizer and the URL builders, which is how three surfaces come to\n * disagree about the same catalog row. This is the one implementation.\n *\n * The catalog is a PUBLIC CDN with open CORS, so a browser fetches it DIRECTLY — no\n * BFF, no `/v1` proxy — which is why this works in the go:embed console where the\n * Next reverse-proxies are pruned. The base URL is INJECTED by the caller, so this\n * module holds no config import and its normalizers + URL builders stay pure.\n */\n\n/** One open-source app in the catalog (the meta.json entry, load-bearing fields only). */\nexport type OssApp = {\n /** Stable catalog id + blueprint path segment, e.g. `2fauth`, `n8n`, `postgres`. */\n id: string\n /** Display name, e.g. \"2FAuth\". */\n name: string\n /** One-line description. */\n description: string\n /** Version label — often the literal string `\"latest\"`, rendered raw. */\n version: string\n /** Bare logo filename (e.g. `logo.svg`), resolved against the blueprint path. */\n logo: string\n /** Category/provenance tags (e.g. `productivity`, `self-hosted`, `caprover`). */\n tags: string[]\n /** External links; only github/website/docs are surfaced. */\n links: { github?: string; website?: string; docs?: string }\n}\n\nconst str = (v: unknown): string => (typeof v === 'string' ? v : '')\nconst strTrim = (v: unknown): string | undefined => {\n const s = str(v).trim()\n return s ? s : undefined\n}\nconst strList = (v: unknown): string[] =>\n Array.isArray(v) ? v.map((x) => (typeof x === 'string' ? x.trim() : '')).filter((x) => x !== '') : []\nconst asRecord = (v: unknown): Record<string, unknown> =>\n v && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : {}\n\n/** Normalize one catalog record to an `OssApp` (drops a record with no id + name). */\nexport function normalizeOssApp(raw: unknown): OssApp | null {\n const r = asRecord(raw)\n const id = str(r.id).trim()\n const name = str(r.name).trim() || id\n if (!id || !name) return null\n const links = asRecord(r.links)\n return {\n id,\n name,\n description: str(r.description).trim(),\n version: str(r.version).trim() || 'latest',\n logo: str(r.logo).trim(),\n tags: strList(r.tags),\n links: {\n github: strTrim(links.github),\n website: strTrim(links.website),\n docs: strTrim(links.docs),\n },\n }\n}\n\n/** Normalize the catalog payload to the app list (bare array OR a `{data|apps|…}` wrap). */\nexport function normalizeOssApps(payload: unknown): OssApp[] {\n let arr: unknown[] = []\n if (Array.isArray(payload)) arr = payload\n else if (payload && typeof payload === 'object') {\n for (const k of ['data', 'apps', 'templates', 'items', 'rows']) {\n const v = (payload as Record<string, unknown>)[k]\n if (Array.isArray(v)) {\n arr = v\n break\n }\n }\n }\n const out: OssApp[] = []\n const seen = new Set<string>()\n for (const raw of arr) {\n const app = normalizeOssApp(raw)\n if (app && !seen.has(app.id)) {\n seen.add(app.id)\n out.push(app)\n }\n }\n return out\n}\n\n/** The per-app blueprint asset base: `<base>/blueprints/<id>`. */\nexport function blueprintBase(base: string, id: string): string {\n return `${base.replace(/\\/+$/, '')}/blueprints/${encodeURIComponent(id)}`\n}\n\n/**\n * The app's logo URL, or null when the entry carries no logo filename — a surface then\n * renders its monogram fallback rather than a broken image.\n */\nexport function logoUrl(base: string, app: OssApp): string | null {\n if (!app.logo) return null\n return `${blueprintBase(base, app.id)}/${app.logo}`\n}\n\n/**\n * Derive `owner/repo` from a GitHub URL — the maker identity, since the catalog\n * carries no author field. Returns null for a non-GitHub / malformed URL.\n */\nexport function ownerRepo(githubUrl?: string): string | null {\n if (!githubUrl) return null\n const m = githubUrl.match(/github\\.com\\/([^/\\s]+)\\/([^/\\s#?]+)/i)\n if (!m) return null\n const owner = m[1]\n const repo = m[2].replace(/\\.git$/i, '')\n if (!owner || !repo) return null\n return `${owner}/${repo}`\n}\n\n/** An app is one-click deployable when it carries a buildable source (its repo). */\nexport function hasDeploySource(app: OssApp): boolean {\n return Boolean(app.links.github)\n}\n\n// ── Live fetch (the one impure surface) ──────────────────────────────────────\n//\n// Cached per base URL so several mounts share ONE ~500 KB fetch. An in-flight fetch is\n// de-duped (concurrent callers await the same promise); a failure is not cached.\nconst cache = new Map<string, OssApp[]>()\nconst inflight = new Map<string, Promise<OssApp[]>>()\n\n/**\n * Fetch + normalize the catalog from `<base>/meta.json`. Cross-origin and\n * unauthenticated (public CDN); throws on a non-2xx or parse failure so the caller can\n * show an honest error state. Cached on success; `force` bypasses for a manual refresh.\n */\nexport async function fetchOssApps(base: string, force = false): Promise<OssApp[]> {\n const key = base.replace(/\\/+$/, '')\n if (!force) {\n const hit = cache.get(key)\n if (hit) return hit\n const pending = inflight.get(key)\n if (pending) return pending\n }\n const run = (async () => {\n const res = await fetch(`${key}/meta.json`, {\n headers: { Accept: 'application/json' },\n // Public catalog — no credentials, so a session cookie never leaks cross-origin.\n credentials: 'omit',\n })\n if (!res.ok) throw new Error(`Catalog unavailable (HTTP ${res.status})`)\n const apps = normalizeOssApps(await res.json())\n cache.set(key, apps)\n return apps\n })()\n inflight.set(key, run)\n try {\n return await run\n } finally {\n inflight.delete(key)\n }\n}\n\n/**\n * Fetch one app's `docker-compose.yml` as raw text, or null when the entry publishes\n * none. A 404 is a NORMAL answer for a large community catalog — not every blueprint\n * ships compose — so this never throws: a detail view treats an absent blueprint as\n * \"nothing to show\", and an optional asset must not fail a whole page.\n */\nexport async function fetchCompose(base: string, id: string): Promise<string | null> {\n try {\n const res = await fetch(`${blueprintBase(base, id)}/docker-compose.yml`, {\n headers: { Accept: 'text/plain' },\n credentials: 'omit',\n })\n if (!res.ok) return null\n const text = await res.text()\n return text.trim() ? text : null\n } catch {\n return null\n }\n}\n","/**\n * What an OSS blueprint actually provisions, read from its own `docker-compose.yml`.\n *\n * This is the one implementation. It was written twice before it lived here — once in\n * TypeScript for the console's App Store and once in vanilla JS for oss.hanzo.ai — and\n * two readers of the same file format drift, which means two surfaces can disagree\n * about what a deploy will start.\n *\n * Deliberately a SMALL structural reader, not a YAML implementation: it walks the\n * `services:` block by indentation and pulls only the keys a detail view shows.\n * Anything it cannot read is absent, never guessed, so a surface degrades to \"no\n * blueprint detail\" instead of asserting something false about what will run.\n *\n * Pure and total — it never throws on malformed or hostile input — so it is safe to\n * run on untrusted CDN content and testable without a DOM or a network.\n */\n\n/**\n * One service a blueprint provisions. `image` is absent for a service built from\n * source (`build:` rather than `image:`).\n */\nexport type Service = { name: string; image?: string; ports: string[] }\n\n/** What a blueprint provisions: the containers it starts and the config it expects. */\nexport type Blueprint = { services: Service[]; env: string[] }\n\n/** Indent width of a line, tabs counted as one column (compose files are space-indented). */\nconst indent = (line: string): number => line.length - line.trimStart().length\n\n/**\n * Parse the load-bearing facts out of a `docker-compose.yml`: the services it starts\n * (with image + published ports) and the environment keys it expects.\n *\n * Environment KEYS only — never the values, which are routinely secrets.\n */\nexport function parseBlueprint(yaml: string): Blueprint {\n const lines = String(yaml ?? '').split(/\\r?\\n/)\n const services: Service[] = []\n const env = new Set<string>()\n\n let servicesAt = -1 // indent of the `services:` key, -1 until seen\n let current: Service | null = null\n let currentAt = -1 // indent of the current service's name (bookkeeping, not a field)\n let listKey: 'ports' | 'environment' | null = null\n let listAt = -1\n\n for (const raw of lines) {\n const line = raw.replace(/\\t/g, ' ')\n const trimmed = line.trim()\n if (!trimmed || trimmed.startsWith('#')) continue\n const col = indent(line)\n\n if (servicesAt < 0) {\n if (/^services\\s*:/.test(trimmed)) servicesAt = col\n continue\n }\n // Dedent back to or past `services:` ends the block (e.g. a following `volumes:`).\n if (col <= servicesAt) {\n if (!/^services\\s*:/.test(trimmed)) break\n continue\n }\n\n // A service name sits exactly one level inside `services:`.\n if (current === null || col <= currentAt) {\n const m = trimmed.match(/^([A-Za-z0-9._-]+)\\s*:\\s*$/)\n if (m) {\n current = { name: m[1], ports: [] }\n currentAt = col\n services.push(current)\n listKey = null\n continue\n }\n }\n if (!current) continue\n\n if (listKey && col > listAt && trimmed.startsWith('-')) {\n const item = trimmed.replace(/^-\\s*/, '').replace(/^[\"']|[\"']$/g, '')\n if (listKey === 'ports') current.ports.push(item)\n else {\n const key = item.split(/[=:]/)[0]?.trim()\n if (key) env.add(key)\n }\n continue\n }\n listKey = null\n\n const img = trimmed.match(/^image\\s*:\\s*(.+)$/)\n if (img) {\n current.image = img[1].trim().replace(/^[\"']|[\"']$/g, '')\n continue\n }\n if (/^ports\\s*:/.test(trimmed)) {\n listKey = 'ports'\n listAt = col\n continue\n }\n if (/^environment\\s*:/.test(trimmed)) {\n listKey = 'environment'\n listAt = col\n continue\n }\n }\n\n return { services, env: [...env].sort((a, b) => a.localeCompare(b)) }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"AspectRatio.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"Avatar.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"AvatarFallback.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"AvatarImage.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"Badge.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"Button.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"Card.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CardAction.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CardContent.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CardDescription.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CardFooter.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CardHeader.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CardTitle.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"Checkbox.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"Collapsible.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CollapsibleContent.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CollapsibleTrigger.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"Command.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CommandDialog.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CommandEmpty.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CommandGroup.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CommandInput.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CommandItem.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CommandList.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CommandSeparator.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"CommandShortcut.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"Dialog.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"DialogClose.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"DialogContent.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"DialogDescription.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"DialogFooter.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"DialogHeader.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"DialogOverlay.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"DialogPortal.cjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"DialogTitle.cjs"}
|