@misoto22/folio 0.0.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +88 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +21 -0
- package/README.md +208 -2
- package/bin/folio-design.mjs +277 -0
- package/bin/migrate-legacy.mjs +81 -0
- package/dist/agent/Accordion.md +65 -0
- package/dist/agent/Actions.md +49 -0
- package/dist/agent/Alert.md +65 -0
- package/dist/agent/AppShell.md +69 -0
- package/dist/agent/ArchitectureFigure.md +72 -0
- package/dist/agent/AreaChart.md +94 -0
- package/dist/agent/Article.md +65 -0
- package/dist/agent/AspectRatio.md +58 -0
- package/dist/agent/Avatar.md +53 -0
- package/dist/agent/Badge.md +62 -0
- package/dist/agent/BarChart.md +93 -0
- package/dist/agent/BarList.md +67 -0
- package/dist/agent/BigNumber.md +70 -0
- package/dist/agent/BoxPlot.md +82 -0
- package/dist/agent/Breadcrumb.md +55 -0
- package/dist/agent/BulletChart.md +71 -0
- package/dist/agent/Button.md +81 -0
- package/dist/agent/Calendar.md +77 -0
- package/dist/agent/CalendarHeatmap.md +75 -0
- package/dist/agent/Card.md +72 -0
- package/dist/agent/Checkbox.md +57 -0
- package/dist/agent/Code.md +51 -0
- package/dist/agent/CodeBlock.md +77 -0
- package/dist/agent/Collapsible.md +68 -0
- package/dist/agent/Collection.md +169 -0
- package/dist/agent/ColorPicker.md +76 -0
- package/dist/agent/Combobox.md +77 -0
- package/dist/agent/Command.md +122 -0
- package/dist/agent/ComposedChart.md +82 -0
- package/dist/agent/Contact.md +90 -0
- package/dist/agent/Content.md +70 -0
- package/dist/agent/ContextMenu.md +93 -0
- package/dist/agent/Conversation.md +247 -0
- package/dist/agent/DataflowFigure.md +49 -0
- package/dist/agent/DatePicker.md +104 -0
- package/dist/agent/DescriptionList.md +69 -0
- package/dist/agent/Diagram.md +71 -0
- package/dist/agent/DiagramCanvas.md +71 -0
- package/dist/agent/DiagramExportMenu.md +65 -0
- package/dist/agent/DiagramInspector.md +73 -0
- package/dist/agent/DiagramLegend.md +56 -0
- package/dist/agent/DiagramMinimap.md +69 -0
- package/dist/agent/DiagramToolbar.md +70 -0
- package/dist/agent/Dialog.md +76 -0
- package/dist/agent/DropdownMenu.md +110 -0
- package/dist/agent/EmptyState.md +63 -0
- package/dist/agent/ErrorState.md +67 -0
- package/dist/agent/Evidence.md +165 -0
- package/dist/agent/Facet.md +107 -0
- package/dist/agent/Field.md +79 -0
- package/dist/agent/FigureBand.md +49 -0
- package/dist/agent/FloatingIconButton.md +61 -0
- package/dist/agent/FunnelChart.md +75 -0
- package/dist/agent/Heading.md +65 -0
- package/dist/agent/Heatmap.md +78 -0
- package/dist/agent/Histogram.md +88 -0
- package/dist/agent/Input.md +52 -0
- package/dist/agent/Kbd.md +48 -0
- package/dist/agent/LifecycleFigure.md +50 -0
- package/dist/agent/LineChart.md +85 -0
- package/dist/agent/LinkArrow.md +49 -0
- package/dist/agent/Markdown.md +69 -0
- package/dist/agent/Media.md +261 -0
- package/dist/agent/Metric.md +70 -0
- package/dist/agent/Metrics.md +114 -0
- package/dist/agent/Music.md +86 -0
- package/dist/agent/NativeSelect.md +62 -0
- package/dist/agent/NavItem.md +56 -0
- package/dist/agent/NumberField.md +73 -0
- package/dist/agent/PageHeader.md +69 -0
- package/dist/agent/Pagination.md +70 -0
- package/dist/agent/PieChart.md +80 -0
- package/dist/agent/Popover.md +80 -0
- package/dist/agent/Portfolio.md +93 -0
- package/dist/agent/PortfolioIndex.md +34 -0
- package/dist/agent/Progress.md +58 -0
- package/dist/agent/RadarChart.md +79 -0
- package/dist/agent/RadialChart.md +81 -0
- package/dist/agent/RadioGroup.md +66 -0
- package/dist/agent/Reading.md +233 -0
- package/dist/agent/Recovery.md +72 -0
- package/dist/agent/SankeyChart.md +85 -0
- package/dist/agent/ScatterChart.md +80 -0
- package/dist/agent/ScrollArea.md +62 -0
- package/dist/agent/SearchPalette.md +51 -0
- package/dist/agent/SearchableMenu.md +69 -0
- package/dist/agent/Select.md +102 -0
- package/dist/agent/Separator.md +60 -0
- package/dist/agent/SequenceFigure.md +51 -0
- package/dist/agent/Sheet.md +82 -0
- package/dist/agent/Sidebar.md +194 -0
- package/dist/agent/SiteNavigation.md +62 -0
- package/dist/agent/SiteShell.md +67 -0
- package/dist/agent/Skeleton.md +96 -0
- package/dist/agent/Slider.md +67 -0
- package/dist/agent/Sparkline.md +68 -0
- package/dist/agent/Spinner.md +62 -0
- package/dist/agent/StatusDot.md +56 -0
- package/dist/agent/StatusPill.md +55 -0
- package/dist/agent/Steps.md +68 -0
- package/dist/agent/Switch.md +50 -0
- package/dist/agent/Table.md +111 -0
- package/dist/agent/Tabs.md +71 -0
- package/dist/agent/Tag.md +67 -0
- package/dist/agent/Text.md +66 -0
- package/dist/agent/Textarea.md +46 -0
- package/dist/agent/Timeline.md +114 -0
- package/dist/agent/Timestamp.md +65 -0
- package/dist/agent/Toast.md +51 -0
- package/dist/agent/ToggleGroup.md +67 -0
- package/dist/agent/Toolbar.md +72 -0
- package/dist/agent/Tooltip.md +74 -0
- package/dist/agent/TreemapChart.md +76 -0
- package/dist/agent/WaterfallChart.md +86 -0
- package/dist/agent/WorkflowFigure.md +51 -0
- package/dist/agent/catalog.json +8006 -0
- package/dist/agent/index.md +182 -0
- package/dist/article.css +407 -0
- package/dist/charts/AreaChart/AreaChart.d.ts +198 -0
- package/dist/charts/AreaChart/AreaChart.js +479 -0
- package/dist/charts/AreaChart/AreaChart.js.map +1 -0
- package/dist/charts/BarChart/BarChart.d.ts +190 -0
- package/dist/charts/BarChart/BarChart.js +599 -0
- package/dist/charts/BarChart/BarChart.js.map +1 -0
- package/dist/charts/BarList/BarList.d.ts +65 -0
- package/dist/charts/BarList/BarList.js +79 -0
- package/dist/charts/BarList/BarList.js.map +1 -0
- package/dist/charts/BigNumber/BigNumber.d.ts +72 -0
- package/dist/charts/BigNumber/BigNumber.js +51 -0
- package/dist/charts/BigNumber/BigNumber.js.map +1 -0
- package/dist/charts/BoxPlot/BoxPlot.d.ts +177 -0
- package/dist/charts/BoxPlot/BoxPlot.js +497 -0
- package/dist/charts/BoxPlot/BoxPlot.js.map +1 -0
- package/dist/charts/BulletChart/BulletChart.d.ts +100 -0
- package/dist/charts/BulletChart/BulletChart.js +197 -0
- package/dist/charts/BulletChart/BulletChart.js.map +1 -0
- package/dist/charts/CalendarHeatmap/CalendarHeatmap.d.ts +106 -0
- package/dist/charts/CalendarHeatmap/CalendarHeatmap.js +103 -0
- package/dist/charts/CalendarHeatmap/CalendarHeatmap.js.map +1 -0
- package/dist/charts/ComposedChart/ComposedChart.d.ts +178 -0
- package/dist/charts/ComposedChart/ComposedChart.js +667 -0
- package/dist/charts/ComposedChart/ComposedChart.js.map +1 -0
- package/dist/charts/Facet/Facet.d.ts +240 -0
- package/dist/charts/Facet/Facet.js +133 -0
- package/dist/charts/Facet/Facet.js.map +1 -0
- package/dist/charts/Facet/panels.d.ts +187 -0
- package/dist/charts/Facet/panels.js +203 -0
- package/dist/charts/Facet/panels.js.map +1 -0
- package/dist/charts/FunnelChart/FunnelChart.d.ts +106 -0
- package/dist/charts/FunnelChart/FunnelChart.js +137 -0
- package/dist/charts/FunnelChart/FunnelChart.js.map +1 -0
- package/dist/charts/Heatmap/Heatmap.d.ts +101 -0
- package/dist/charts/Heatmap/Heatmap.js +125 -0
- package/dist/charts/Heatmap/Heatmap.js.map +1 -0
- package/dist/charts/Histogram/Histogram.d.ts +188 -0
- package/dist/charts/Histogram/Histogram.js +382 -0
- package/dist/charts/Histogram/Histogram.js.map +1 -0
- package/dist/charts/LineChart/LineChart.d.ts +174 -0
- package/dist/charts/LineChart/LineChart.js +485 -0
- package/dist/charts/LineChart/LineChart.js.map +1 -0
- package/dist/charts/PieChart/PieChart.d.ts +140 -0
- package/dist/charts/PieChart/PieChart.js +317 -0
- package/dist/charts/PieChart/PieChart.js.map +1 -0
- package/dist/charts/RadarChart/RadarChart.d.ts +135 -0
- package/dist/charts/RadarChart/RadarChart.js +303 -0
- package/dist/charts/RadarChart/RadarChart.js.map +1 -0
- package/dist/charts/RadialChart/RadialChart.d.ts +142 -0
- package/dist/charts/RadialChart/RadialChart.js +279 -0
- package/dist/charts/RadialChart/RadialChart.js.map +1 -0
- package/dist/charts/SankeyChart/SankeyChart.d.ts +149 -0
- package/dist/charts/SankeyChart/SankeyChart.js +509 -0
- package/dist/charts/SankeyChart/SankeyChart.js.map +1 -0
- package/dist/charts/ScatterChart/ScatterChart.d.ts +149 -0
- package/dist/charts/ScatterChart/ScatterChart.js +275 -0
- package/dist/charts/ScatterChart/ScatterChart.js.map +1 -0
- package/dist/charts/Sparkline/Sparkline.d.ts +53 -0
- package/dist/charts/Sparkline/Sparkline.js +95 -0
- package/dist/charts/Sparkline/Sparkline.js.map +1 -0
- package/dist/charts/TreemapChart/TreemapChart.d.ts +98 -0
- package/dist/charts/TreemapChart/TreemapChart.js +127 -0
- package/dist/charts/TreemapChart/TreemapChart.js.map +1 -0
- package/dist/charts/WaterfallChart/WaterfallChart.d.ts +164 -0
- package/dist/charts/WaterfallChart/WaterfallChart.js +321 -0
- package/dist/charts/WaterfallChart/WaterfallChart.js.map +1 -0
- package/dist/charts/index.d.ts +43 -0
- package/dist/charts/index.js +130 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/charts/lib/annotations.d.ts +103 -0
- package/dist/charts/lib/annotations.js +99 -0
- package/dist/charts/lib/annotations.js.map +1 -0
- package/dist/charts/lib/axis.d.ts +18 -0
- package/dist/charts/lib/axis.js +21 -0
- package/dist/charts/lib/axis.js.map +1 -0
- package/dist/charts/lib/background.d.ts +33 -0
- package/dist/charts/lib/background.js +173 -0
- package/dist/charts/lib/background.js.map +1 -0
- package/dist/charts/lib/brush.d.ts +94 -0
- package/dist/charts/lib/brush.js +535 -0
- package/dist/charts/lib/brush.js.map +1 -0
- package/dist/charts/lib/chart.d.ts +94 -0
- package/dist/charts/lib/chart.js +149 -0
- package/dist/charts/lib/chart.js.map +1 -0
- package/dist/charts/lib/dot.d.ts +29 -0
- package/dist/charts/lib/dot.js +78 -0
- package/dist/charts/lib/dot.js.map +1 -0
- package/dist/charts/lib/empty.d.ts +31 -0
- package/dist/charts/lib/empty.js +24 -0
- package/dist/charts/lib/empty.js.map +1 -0
- package/dist/charts/lib/export.d.ts +94 -0
- package/dist/charts/lib/export.js +62 -0
- package/dist/charts/lib/export.js.map +1 -0
- package/dist/charts/lib/figure.d.ts +81 -0
- package/dist/charts/lib/figure.js +62 -0
- package/dist/charts/lib/figure.js.map +1 -0
- package/dist/charts/lib/format.d.ts +46 -0
- package/dist/charts/lib/format.js +56 -0
- package/dist/charts/lib/format.js.map +1 -0
- package/dist/charts/lib/legend.d.ts +45 -0
- package/dist/charts/lib/legend.js +117 -0
- package/dist/charts/lib/legend.js.map +1 -0
- package/dist/charts/lib/loading.d.ts +48 -0
- package/dist/charts/lib/loading.js +105 -0
- package/dist/charts/lib/loading.js.map +1 -0
- package/dist/charts/lib/paint.d.ts +154 -0
- package/dist/charts/lib/paint.js +551 -0
- package/dist/charts/lib/paint.js.map +1 -0
- package/dist/charts/lib/scale.d.ts +23 -0
- package/dist/charts/lib/scale.js +13 -0
- package/dist/charts/lib/scale.js.map +1 -0
- package/dist/charts/lib/selection.d.ts +20 -0
- package/dist/charts/lib/selection.js +18 -0
- package/dist/charts/lib/selection.js.map +1 -0
- package/dist/charts/lib/sonify-control.d.ts +163 -0
- package/dist/charts/lib/sonify-control.js +172 -0
- package/dist/charts/lib/sonify-control.js.map +1 -0
- package/dist/charts/lib/sonify.d.ts +248 -0
- package/dist/charts/lib/sonify.js +262 -0
- package/dist/charts/lib/sonify.js.map +1 -0
- package/dist/charts/lib/toolbar.d.ts +144 -0
- package/dist/charts/lib/toolbar.js +156 -0
- package/dist/charts/lib/toolbar.js.map +1 -0
- package/dist/charts/lib/tooltip.d.ts +59 -0
- package/dist/charts/lib/tooltip.js +135 -0
- package/dist/charts/lib/tooltip.js.map +1 -0
- package/dist/charts/lib/values.d.ts +56 -0
- package/dist/charts/lib/values.js +71 -0
- package/dist/charts/lib/values.js.map +1 -0
- package/dist/charts/lib/zoom.d.ts +139 -0
- package/dist/charts/lib/zoom.js +314 -0
- package/dist/charts/lib/zoom.js.map +1 -0
- package/dist/components/Accordion/Accordion.d.ts +34 -0
- package/dist/components/Accordion/Accordion.js +43 -0
- package/dist/components/Accordion/Accordion.js.map +1 -0
- package/dist/components/Alert/Alert.d.ts +32 -0
- package/dist/components/Alert/Alert.js +49 -0
- package/dist/components/Alert/Alert.js.map +1 -0
- package/dist/components/AppShell/AppShell.d.ts +58 -0
- package/dist/components/AppShell/AppShell.js +126 -0
- package/dist/components/AppShell/AppShell.js.map +1 -0
- package/dist/components/Article/Article.d.ts +58 -0
- package/dist/components/Article/Article.js +34 -0
- package/dist/components/Article/Article.js.map +1 -0
- package/dist/components/AspectRatio/AspectRatio.d.ts +46 -0
- package/dist/components/AspectRatio/AspectRatio.js +33 -0
- package/dist/components/AspectRatio/AspectRatio.js.map +1 -0
- package/dist/components/Avatar/Avatar.d.ts +38 -0
- package/dist/components/Avatar/Avatar.js +44 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Badge/Badge.d.ts +30 -0
- package/dist/components/Badge/Badge.js +29 -0
- package/dist/components/Badge/Badge.js.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +37 -0
- package/dist/components/Breadcrumb/Breadcrumb.js +46 -0
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/components/Button/Button.d.ts +70 -0
- package/dist/components/Button/Button.js +95 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Calendar/Calendar.d.ts +54 -0
- package/dist/components/Calendar/Calendar.js +369 -0
- package/dist/components/Calendar/Calendar.js.map +1 -0
- package/dist/components/Card/Card.d.ts +55 -0
- package/dist/components/Card/Card.js +64 -0
- package/dist/components/Card/Card.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +26 -0
- package/dist/components/Checkbox/Checkbox.js +34 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Code/Code.d.ts +30 -0
- package/dist/components/Code/Code.js +21 -0
- package/dist/components/Code/Code.js.map +1 -0
- package/dist/components/CodeBlock/CodeBlock.d.ts +145 -0
- package/dist/components/CodeBlock/CodeBlock.js +114 -0
- package/dist/components/CodeBlock/CodeBlock.js.map +1 -0
- package/dist/components/Collapsible/Collapsible.d.ts +45 -0
- package/dist/components/Collapsible/Collapsible.js +60 -0
- package/dist/components/Collapsible/Collapsible.js.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts +67 -0
- package/dist/components/ColorPicker/ColorPicker.js +334 -0
- package/dist/components/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/components/Combobox/Combobox.d.ts +77 -0
- package/dist/components/Combobox/Combobox.js +170 -0
- package/dist/components/Combobox/Combobox.js.map +1 -0
- package/dist/components/Command/Command.d.ts +125 -0
- package/dist/components/Command/Command.js +204 -0
- package/dist/components/Command/Command.js.map +1 -0
- package/dist/components/ContextMenu/ContextMenu.d.ts +63 -0
- package/dist/components/ContextMenu/ContextMenu.js +109 -0
- package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
- package/dist/components/DatePicker/DatePicker.d.ts +130 -0
- package/dist/components/DatePicker/DatePicker.js +257 -0
- package/dist/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/components/DescriptionList/DescriptionList.d.ts +73 -0
- package/dist/components/DescriptionList/DescriptionList.js +35 -0
- package/dist/components/DescriptionList/DescriptionList.js.map +1 -0
- package/dist/components/Diagram/Diagram.d.ts +86 -0
- package/dist/components/Diagram/Diagram.js +211 -0
- package/dist/components/Diagram/Diagram.js.map +1 -0
- package/dist/components/Dialog/Dialog.d.ts +63 -0
- package/dist/components/Dialog/Dialog.js +90 -0
- package/dist/components/Dialog/Dialog.js.map +1 -0
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +87 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +120 -0
- package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/components/EmptyState/EmptyState.d.ts +55 -0
- package/dist/components/EmptyState/EmptyState.js +32 -0
- package/dist/components/EmptyState/EmptyState.js.map +1 -0
- package/dist/components/ErrorState/ErrorState.d.ts +55 -0
- package/dist/components/ErrorState/ErrorState.js +41 -0
- package/dist/components/ErrorState/ErrorState.js.map +1 -0
- package/dist/components/Field/Field.d.ts +111 -0
- package/dist/components/Field/Field.js +95 -0
- package/dist/components/Field/Field.js.map +1 -0
- package/dist/components/Field/field-control.d.ts +31 -0
- package/dist/components/Field/field-control.js +12 -0
- package/dist/components/Field/field-control.js.map +1 -0
- package/dist/components/FigureBand/FigureBand.d.ts +31 -0
- package/dist/components/FigureBand/FigureBand.js +51 -0
- package/dist/components/FigureBand/FigureBand.js.map +1 -0
- package/dist/components/FloatingIconButton/FloatingIconButton.d.ts +29 -0
- package/dist/components/FloatingIconButton/FloatingIconButton.js +34 -0
- package/dist/components/FloatingIconButton/FloatingIconButton.js.map +1 -0
- package/dist/components/Heading/Heading.d.ts +62 -0
- package/dist/components/Heading/Heading.js +44 -0
- package/dist/components/Heading/Heading.js.map +1 -0
- package/dist/components/Input/Input.d.ts +22 -0
- package/dist/components/Input/Input.js +21 -0
- package/dist/components/Input/Input.js.map +1 -0
- package/dist/components/Kbd/Kbd.d.ts +27 -0
- package/dist/components/Kbd/Kbd.js +21 -0
- package/dist/components/Kbd/Kbd.js.map +1 -0
- package/dist/components/LinkArrow/LinkArrow.d.ts +24 -0
- package/dist/components/LinkArrow/LinkArrow.js +24 -0
- package/dist/components/LinkArrow/LinkArrow.js.map +1 -0
- package/dist/components/Markdown/Markdown.d.ts +139 -0
- package/dist/components/Markdown/Markdown.js +135 -0
- package/dist/components/Markdown/Markdown.js.map +1 -0
- package/dist/components/Markdown/inline.d.ts +29 -0
- package/dist/components/Markdown/inline.js +74 -0
- package/dist/components/Markdown/inline.js.map +1 -0
- package/dist/components/Markdown/nodes.d.ts +65 -0
- package/dist/components/Markdown/nodes.js +1 -0
- package/dist/components/Markdown/nodes.js.map +1 -0
- package/dist/components/Markdown/parse.d.ts +24 -0
- package/dist/components/Markdown/parse.js +110 -0
- package/dist/components/Markdown/parse.js.map +1 -0
- package/dist/components/Markdown/slug.d.ts +15 -0
- package/dist/components/Markdown/slug.js +7 -0
- package/dist/components/Markdown/slug.js.map +1 -0
- package/dist/components/Metric/Metric.d.ts +61 -0
- package/dist/components/Metric/Metric.js +51 -0
- package/dist/components/Metric/Metric.js.map +1 -0
- package/dist/components/NativeSelect/NativeSelect.d.ts +33 -0
- package/dist/components/NativeSelect/NativeSelect.js +44 -0
- package/dist/components/NativeSelect/NativeSelect.js.map +1 -0
- package/dist/components/NavItem/NavItem.d.ts +39 -0
- package/dist/components/NavItem/NavItem.js +31 -0
- package/dist/components/NavItem/NavItem.js.map +1 -0
- package/dist/components/NumberField/NumberField.d.ts +69 -0
- package/dist/components/NumberField/NumberField.js +162 -0
- package/dist/components/NumberField/NumberField.js.map +1 -0
- package/dist/components/PageHeader/PageHeader.d.ts +92 -0
- package/dist/components/PageHeader/PageHeader.js +37 -0
- package/dist/components/PageHeader/PageHeader.js.map +1 -0
- package/dist/components/Pagination/Pagination.d.ts +67 -0
- package/dist/components/Pagination/Pagination.js +112 -0
- package/dist/components/Pagination/Pagination.js.map +1 -0
- package/dist/components/Popover/Popover.d.ts +39 -0
- package/dist/components/Popover/Popover.js +57 -0
- package/dist/components/Popover/Popover.js.map +1 -0
- package/dist/components/Progress/Progress.d.ts +43 -0
- package/dist/components/Progress/Progress.js +57 -0
- package/dist/components/Progress/Progress.js.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +49 -0
- package/dist/components/RadioGroup/RadioGroup.js +53 -0
- package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
- package/dist/components/ScrollArea/ScrollArea.d.ts +46 -0
- package/dist/components/ScrollArea/ScrollArea.js +54 -0
- package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
- package/dist/components/SearchableMenu/SearchableMenu.d.ts +68 -0
- package/dist/components/SearchableMenu/SearchableMenu.js +101 -0
- package/dist/components/SearchableMenu/SearchableMenu.js.map +1 -0
- package/dist/components/Select/Select.d.ts +87 -0
- package/dist/components/Select/Select.js +130 -0
- package/dist/components/Select/Select.js.map +1 -0
- package/dist/components/Separator/Separator.d.ts +48 -0
- package/dist/components/Separator/Separator.js +43 -0
- package/dist/components/Separator/Separator.js.map +1 -0
- package/dist/components/Sheet/Sheet.d.ts +43 -0
- package/dist/components/Sheet/Sheet.js +79 -0
- package/dist/components/Sheet/Sheet.js.map +1 -0
- package/dist/components/Sidebar/Sidebar.d.ts +357 -0
- package/dist/components/Sidebar/Sidebar.js +447 -0
- package/dist/components/Sidebar/Sidebar.js.map +1 -0
- package/dist/components/Skeleton/Skeleton.d.ts +70 -0
- package/dist/components/Skeleton/Skeleton.js +44 -0
- package/dist/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/components/Slider/Slider.d.ts +74 -0
- package/dist/components/Slider/Slider.js +143 -0
- package/dist/components/Slider/Slider.js.map +1 -0
- package/dist/components/Spinner/Spinner.d.ts +58 -0
- package/dist/components/Spinner/Spinner.js +49 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/StatusDot/StatusDot.d.ts +29 -0
- package/dist/components/StatusDot/StatusDot.js +44 -0
- package/dist/components/StatusDot/StatusDot.js.map +1 -0
- package/dist/components/StatusPill/StatusPill.d.ts +30 -0
- package/dist/components/StatusPill/StatusPill.js +37 -0
- package/dist/components/StatusPill/StatusPill.js.map +1 -0
- package/dist/components/Steps/Steps.d.ts +65 -0
- package/dist/components/Steps/Steps.js +25 -0
- package/dist/components/Steps/Steps.js.map +1 -0
- package/dist/components/Switch/Switch.d.ts +23 -0
- package/dist/components/Switch/Switch.js +23 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/Table/Table.d.ts +116 -0
- package/dist/components/Table/Table.js +137 -0
- package/dist/components/Table/Table.js.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts +37 -0
- package/dist/components/Tabs/Tabs.js +205 -0
- package/dist/components/Tabs/Tabs.js.map +1 -0
- package/dist/components/Tag/Tag.d.ts +87 -0
- package/dist/components/Tag/Tag.js +62 -0
- package/dist/components/Tag/Tag.js.map +1 -0
- package/dist/components/Text/Text.d.ts +62 -0
- package/dist/components/Text/Text.js +30 -0
- package/dist/components/Text/Text.js.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +20 -0
- package/dist/components/Textarea/Textarea.js +32 -0
- package/dist/components/Textarea/Textarea.js.map +1 -0
- package/dist/components/Timestamp/Timestamp.d.ts +59 -0
- package/dist/components/Timestamp/Timestamp.js +56 -0
- package/dist/components/Timestamp/Timestamp.js.map +1 -0
- package/dist/components/Toast/Toast.d.ts +32 -0
- package/dist/components/Toast/Toast.js +64 -0
- package/dist/components/Toast/Toast.js.map +1 -0
- package/dist/components/ToggleGroup/ToggleGroup.d.ts +46 -0
- package/dist/components/ToggleGroup/ToggleGroup.js +88 -0
- package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -0
- package/dist/components/Toolbar/Toolbar.d.ts +55 -0
- package/dist/components/Toolbar/Toolbar.js +43 -0
- package/dist/components/Toolbar/Toolbar.js.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts +43 -0
- package/dist/components/Tooltip/Tooltip.js +40 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.d.ts +55 -0
- package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.js +175 -0
- package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.js.map +1 -0
- package/dist/diagrams/DataflowFigure/DataflowFigure.d.ts +28 -0
- package/dist/diagrams/DataflowFigure/DataflowFigure.js +148 -0
- package/dist/diagrams/DataflowFigure/DataflowFigure.js.map +1 -0
- package/dist/diagrams/DiagramCanvas/DiagramCanvas.d.ts +78 -0
- package/dist/diagrams/DiagramCanvas/DiagramCanvas.js +229 -0
- package/dist/diagrams/DiagramCanvas/DiagramCanvas.js.map +1 -0
- package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.d.ts +106 -0
- package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.js +123 -0
- package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.js.map +1 -0
- package/dist/diagrams/DiagramInspector/DiagramInspector.d.ts +70 -0
- package/dist/diagrams/DiagramInspector/DiagramInspector.js +94 -0
- package/dist/diagrams/DiagramInspector/DiagramInspector.js.map +1 -0
- package/dist/diagrams/DiagramLegend/DiagramLegend.d.ts +42 -0
- package/dist/diagrams/DiagramLegend/DiagramLegend.js +35 -0
- package/dist/diagrams/DiagramLegend/DiagramLegend.js.map +1 -0
- package/dist/diagrams/DiagramMinimap/DiagramMinimap.d.ts +77 -0
- package/dist/diagrams/DiagramMinimap/DiagramMinimap.js +106 -0
- package/dist/diagrams/DiagramMinimap/DiagramMinimap.js.map +1 -0
- package/dist/diagrams/DiagramToolbar/DiagramToolbar.d.ts +48 -0
- package/dist/diagrams/DiagramToolbar/DiagramToolbar.js +53 -0
- package/dist/diagrams/DiagramToolbar/DiagramToolbar.js.map +1 -0
- package/dist/diagrams/LifecycleFigure/LifecycleFigure.d.ts +31 -0
- package/dist/diagrams/LifecycleFigure/LifecycleFigure.js +234 -0
- package/dist/diagrams/LifecycleFigure/LifecycleFigure.js.map +1 -0
- package/dist/diagrams/SequenceFigure/SequenceFigure.d.ts +38 -0
- package/dist/diagrams/SequenceFigure/SequenceFigure.js +261 -0
- package/dist/diagrams/SequenceFigure/SequenceFigure.js.map +1 -0
- package/dist/diagrams/WorkflowFigure/WorkflowFigure.d.ts +36 -0
- package/dist/diagrams/WorkflowFigure/WorkflowFigure.js +259 -0
- package/dist/diagrams/WorkflowFigure/WorkflowFigure.js.map +1 -0
- package/dist/diagrams/index.d.ts +17 -0
- package/dist/diagrams/index.js +29 -0
- package/dist/diagrams/index.js.map +1 -0
- package/dist/diagrams/lib/dev.d.ts +61 -0
- package/dist/diagrams/lib/dev.js +96 -0
- package/dist/diagrams/lib/dev.js.map +1 -0
- package/dist/diagrams/lib/frame.d.ts +138 -0
- package/dist/diagrams/lib/frame.js +131 -0
- package/dist/diagrams/lib/frame.js.map +1 -0
- package/dist/diagrams/lib/geometry.d.ts +114 -0
- package/dist/diagrams/lib/geometry.js +113 -0
- package/dist/diagrams/lib/geometry.js.map +1 -0
- package/dist/diagrams/lib/legend.d.ts +32 -0
- package/dist/diagrams/lib/legend.js +84 -0
- package/dist/diagrams/lib/legend.js.map +1 -0
- package/dist/diagrams/lib/marks.d.ts +207 -0
- package/dist/diagrams/lib/marks.js +480 -0
- package/dist/diagrams/lib/marks.js.map +1 -0
- package/dist/diagrams/lib/route.d.ts +106 -0
- package/dist/diagrams/lib/route.js +201 -0
- package/dist/diagrams/lib/route.js.map +1 -0
- package/dist/diagrams/lib/wires.d.ts +59 -0
- package/dist/diagrams/lib/wires.js +94 -0
- package/dist/diagrams/lib/wires.js.map +1 -0
- package/dist/diagrams/spec.d.ts +405 -0
- package/dist/diagrams/spec.js +1 -0
- package/dist/diagrams/spec.js.map +1 -0
- package/dist/fonts/hanken-grotesk-300.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-400.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-500.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-600.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-700.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-400.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-500.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-600.woff2 +0 -0
- package/dist/fonts/newsreader-300.woff2 +0 -0
- package/dist/fonts/newsreader-400.woff2 +0 -0
- package/dist/fonts/newsreader-500.woff2 +0 -0
- package/dist/fonts/newsreader-600.woff2 +0 -0
- package/dist/fonts.css +96 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/keyframes.css +300 -0
- package/dist/lib/cn.d.ts +21 -0
- package/dist/lib/cn.js +9 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/color.d.ts +80 -0
- package/dist/lib/color.js +189 -0
- package/dist/lib/color.js.map +1 -0
- package/dist/lib/control.d.ts +32 -0
- package/dist/lib/control.js +14 -0
- package/dist/lib/control.js.map +1 -0
- package/dist/lib/index.d.ts +4 -0
- package/dist/lib/index.js +11 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/numeric.d.ts +35 -0
- package/dist/lib/numeric.js +29 -0
- package/dist/lib/numeric.js.map +1 -0
- package/dist/lib/overlay-container.d.ts +48 -0
- package/dist/lib/overlay-container.js +15 -0
- package/dist/lib/overlay-container.js.map +1 -0
- package/dist/lib/slot-content.d.ts +8 -0
- package/dist/lib/slot-content.js +17 -0
- package/dist/lib/slot-content.js.map +1 -0
- package/dist/lib/step-rail.d.ts +45 -0
- package/dist/lib/step-rail.js +47 -0
- package/dist/lib/step-rail.js.map +1 -0
- package/dist/lib/svg-export.d.ts +138 -0
- package/dist/lib/svg-export.js +198 -0
- package/dist/lib/svg-export.js.map +1 -0
- package/dist/lib/useClipboardCopy.d.ts +30 -0
- package/dist/lib/useClipboardCopy.js +37 -0
- package/dist/lib/useClipboardCopy.js.map +1 -0
- package/dist/lib/useSelectionIndicator.d.ts +29 -0
- package/dist/lib/useSelectionIndicator.js +49 -0
- package/dist/lib/useSelectionIndicator.js.map +1 -0
- package/dist/lib/warn.d.ts +73 -0
- package/dist/lib/warn.js +38 -0
- package/dist/lib/warn.js.map +1 -0
- package/dist/semantic.css +193 -0
- package/dist/styles.css +98 -0
- package/dist/themes.css +514 -0
- package/dist/tokens/brand.d.ts +47 -0
- package/dist/tokens/brand.js +38 -0
- package/dist/tokens/brand.js.map +1 -0
- package/dist/tokens.css +652 -0
- package/dist/tokens.d.ts +198 -0
- package/dist/tokens.js +1020 -0
- package/dist/tokens.json +1019 -0
- package/dist/website/Actions/Actions.d.ts +34 -0
- package/dist/website/Actions/Actions.js +29 -0
- package/dist/website/Actions/Actions.js.map +1 -0
- package/dist/website/Collection/Collection.d.ts +128 -0
- package/dist/website/Collection/Collection.js +162 -0
- package/dist/website/Collection/Collection.js.map +1 -0
- package/dist/website/Contact/Contact.d.ts +87 -0
- package/dist/website/Contact/Contact.js +94 -0
- package/dist/website/Contact/Contact.js.map +1 -0
- package/dist/website/Content/CodePanel.d.ts +27 -0
- package/dist/website/Content/CodePanel.js +30 -0
- package/dist/website/Content/CodePanel.js.map +1 -0
- package/dist/website/Content/Content.d.ts +29 -0
- package/dist/website/Content/Content.js +38 -0
- package/dist/website/Content/Content.js.map +1 -0
- package/dist/website/Conversation/Conversation.d.ts +193 -0
- package/dist/website/Conversation/Conversation.js +252 -0
- package/dist/website/Conversation/Conversation.js.map +1 -0
- package/dist/website/Evidence/Evidence.d.ts +116 -0
- package/dist/website/Evidence/Evidence.js +142 -0
- package/dist/website/Evidence/Evidence.js.map +1 -0
- package/dist/website/Media/Media.d.ts +173 -0
- package/dist/website/Media/Media.js +225 -0
- package/dist/website/Media/Media.js.map +1 -0
- package/dist/website/Media/MediaLightbox.d.ts +18 -0
- package/dist/website/Media/MediaLightbox.js +38 -0
- package/dist/website/Media/MediaLightbox.js.map +1 -0
- package/dist/website/Metrics/Metrics.d.ts +74 -0
- package/dist/website/Metrics/Metrics.js +96 -0
- package/dist/website/Metrics/Metrics.js.map +1 -0
- package/dist/website/Music/Music.d.ts +60 -0
- package/dist/website/Music/Music.js +80 -0
- package/dist/website/Music/Music.js.map +1 -0
- package/dist/website/Portfolio/FrameLayout.d.ts +9 -0
- package/dist/website/Portfolio/FrameLayout.js +42 -0
- package/dist/website/Portfolio/FrameLayout.js.map +1 -0
- package/dist/website/Portfolio/Portfolio.d.ts +49 -0
- package/dist/website/Portfolio/Portfolio.js +66 -0
- package/dist/website/Portfolio/Portfolio.js.map +1 -0
- package/dist/website/Portfolio/QuestionCard.d.ts +22 -0
- package/dist/website/Portfolio/QuestionCard.js +33 -0
- package/dist/website/Portfolio/QuestionCard.js.map +1 -0
- package/dist/website/PortfolioIndex/PortfolioIndex.d.ts +21 -0
- package/dist/website/PortfolioIndex/PortfolioIndex.js +31 -0
- package/dist/website/PortfolioIndex/PortfolioIndex.js.map +1 -0
- package/dist/website/Reading/Reading.d.ts +203 -0
- package/dist/website/Reading/Reading.js +357 -0
- package/dist/website/Reading/Reading.js.map +1 -0
- package/dist/website/Recovery/Recovery.d.ts +39 -0
- package/dist/website/Recovery/Recovery.js +96 -0
- package/dist/website/Recovery/Recovery.js.map +1 -0
- package/dist/website/SearchPalette/SearchPalette.d.ts +59 -0
- package/dist/website/SearchPalette/SearchPalette.js +120 -0
- package/dist/website/SearchPalette/SearchPalette.js.map +1 -0
- package/dist/website/SiteNavigation/SiteNavigation.d.ts +46 -0
- package/dist/website/SiteNavigation/SiteNavigation.js +101 -0
- package/dist/website/SiteNavigation/SiteNavigation.js.map +1 -0
- package/dist/website/SiteShell/SiteShell.d.ts +45 -0
- package/dist/website/SiteShell/SiteShell.js +46 -0
- package/dist/website/SiteShell/SiteShell.js.map +1 -0
- package/dist/website/Timeline/Timeline.d.ts +80 -0
- package/dist/website/Timeline/Timeline.js +99 -0
- package/dist/website/Timeline/Timeline.js.map +1 -0
- package/dist/website/index.d.ts +27 -0
- package/dist/website/index.js +21 -0
- package/dist/website/index.js.map +1 -0
- package/dist/website-actions.css +6 -0
- package/dist/website-base.css +46 -0
- package/dist/website-collection.css +89 -0
- package/dist/website-contact.css +29 -0
- package/dist/website-content.css +17 -0
- package/dist/website-controls.css +91 -0
- package/dist/website-conversation.css +115 -0
- package/dist/website-evidence.css +56 -0
- package/dist/website-media.css +227 -0
- package/dist/website-metrics.css +15 -0
- package/dist/website-music.css +27 -0
- package/dist/website-portfolio.css +94 -0
- package/dist/website-reading.css +159 -0
- package/dist/website-recovery.css +28 -0
- package/dist/website-search.css +26 -0
- package/dist/website-shell.css +89 -0
- package/dist/website-timeline.css +43 -0
- package/dist/website.css +25 -0
- package/llms.txt +35 -0
- package/package.json +163 -5
- package/skills/folio-design/SKILL.md +228 -0
- package/skills/folio-design/evals/claims.json +95 -0
- package/skills/folio-design/evals/evals.json +84 -0
- package/skills/folio-design/rules/a11y.md +167 -0
- package/skills/folio-design/rules/composition.md +108 -0
- package/skills/folio-design/rules/forms.md +135 -0
- package/skills/folio-design/rules/naming.md +155 -0
- package/skills/folio-design/rules/tokens.md +133 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
3
|
+
import { RiAddLine, RiSubtractLine } from "@remixicon/react";
|
|
4
|
+
import { Badge } from "../../components/Badge/Badge.js";
|
|
5
|
+
import { Button } from "../../components/Button/Button.js";
|
|
6
|
+
import { DescriptionList } from "../../components/DescriptionList/DescriptionList.js";
|
|
7
|
+
import { EmptyState } from "../../components/EmptyState/EmptyState.js";
|
|
8
|
+
import { SkeletonBlock, SkeletonLine, SkeletonPage } from "../../components/Skeleton/Skeleton.js";
|
|
9
|
+
import { cn } from "../../lib/cn.js";
|
|
10
|
+
import { replaceSlotContent } from "../../lib/slot-content.js";
|
|
11
|
+
function MediaMasthead({ eyebrow, title, description, headingLevel = 1, className, ...rest }) {
|
|
12
|
+
const Heading = `h${headingLevel}`;
|
|
13
|
+
return /* @__PURE__ */ jsxs("header", { className: cn("folio-media-masthead", className), ...rest, children: [
|
|
14
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "folio-media-eyebrow", children: eyebrow }),
|
|
15
|
+
/* @__PURE__ */ jsx(Heading, { className: "folio-media-masthead-title", children: title }),
|
|
16
|
+
description && /* @__PURE__ */ jsx("p", { className: "folio-media-description", children: description })
|
|
17
|
+
] });
|
|
18
|
+
}
|
|
19
|
+
function PhotographFeature({ image, title, eyebrow, description, caption, action, className, ...rest }) {
|
|
20
|
+
return /* @__PURE__ */ jsxs("section", { className: cn("folio-photograph-feature", className), ...rest, children: [
|
|
21
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-photograph-feature-copy", children: [
|
|
22
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "folio-media-eyebrow", children: eyebrow }),
|
|
23
|
+
/* @__PURE__ */ jsx("h2", { className: "folio-photograph-feature-title", children: title }),
|
|
24
|
+
description && /* @__PURE__ */ jsx("div", { className: "folio-media-description", children: description }),
|
|
25
|
+
action && /* @__PURE__ */ jsx("div", { className: "folio-photograph-feature-action", children: action })
|
|
26
|
+
] }),
|
|
27
|
+
/* @__PURE__ */ jsxs("figure", { className: "folio-photograph-feature-figure", children: [
|
|
28
|
+
/* @__PURE__ */ jsx("div", { className: "folio-photograph-feature-image", children: image }),
|
|
29
|
+
caption && /* @__PURE__ */ jsx("figcaption", { className: "folio-photograph-feature-caption", children: caption })
|
|
30
|
+
] })
|
|
31
|
+
] });
|
|
32
|
+
}
|
|
33
|
+
function MediaCollection({ masthead, controls, collectionId, footer, children, className, ...rest }) {
|
|
34
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("folio-media-gallery-page", className), ...rest, children: [
|
|
35
|
+
masthead,
|
|
36
|
+
controls && /* @__PURE__ */ jsx("div", { className: "folio-media-container", children: controls }),
|
|
37
|
+
/* @__PURE__ */ jsx("section", { id: collectionId, className: "folio-media-gallery-content", children }),
|
|
38
|
+
footer
|
|
39
|
+
] });
|
|
40
|
+
}
|
|
41
|
+
function MediaGallery({ children, emptyTitle, emptyAction, className, ...rest }) {
|
|
42
|
+
return /* @__PURE__ */ jsx("div", { className: "folio-media-container", children: emptyTitle ? /* @__PURE__ */ jsx(EmptyState, { title: emptyTitle, action: emptyAction }) : /* @__PURE__ */ jsx("ul", { role: "list", className: cn("folio-media-gallery", className), ...rest, children }) });
|
|
43
|
+
}
|
|
44
|
+
function MediaGalleryItem({ children, title, index, location, orientation, className, ...rest }) {
|
|
45
|
+
return /* @__PURE__ */ jsx("li", { className: cn("folio-media-gallery-item", className), ...rest, children: /* @__PURE__ */ jsxs("figure", { children: [
|
|
46
|
+
/* @__PURE__ */ jsx(Slot, { className: "folio-media-gallery-link", "data-photo-orientation": orientation, children }),
|
|
47
|
+
/* @__PURE__ */ jsxs("figcaption", { className: "folio-media-gallery-caption", children: [
|
|
48
|
+
index != null && /* @__PURE__ */ jsx("span", { className: "folio-media-gallery-index", "aria-hidden": "true", children: index }),
|
|
49
|
+
/* @__PURE__ */ jsx("span", { className: "folio-media-gallery-title", children: title }),
|
|
50
|
+
location && /* @__PURE__ */ jsx("span", { className: "folio-media-gallery-location", children: location })
|
|
51
|
+
] })
|
|
52
|
+
] }) });
|
|
53
|
+
}
|
|
54
|
+
function MediaGallerySkeleton({ label, count = 6 }) {
|
|
55
|
+
return /* @__PURE__ */ jsxs(SkeletonPage, { label, "aria-label": label, children: [
|
|
56
|
+
/* @__PURE__ */ jsxs("header", { className: "folio-media-masthead", children: [
|
|
57
|
+
/* @__PURE__ */ jsx(SkeletonLine, { className: "w-24" }),
|
|
58
|
+
/* @__PURE__ */ jsx(SkeletonBlock, { className: "mt-4 h-9 w-[min(560px,90%)]" }),
|
|
59
|
+
/* @__PURE__ */ jsx(SkeletonBlock, { className: "mt-2.5 h-9 w-[min(380px,70%)]" })
|
|
60
|
+
] }),
|
|
61
|
+
/* @__PURE__ */ jsx("div", { className: "folio-media-container", children: /* @__PURE__ */ jsx(SkeletonLine, { className: "h-11 w-full" }) }),
|
|
62
|
+
/* @__PURE__ */ jsx("section", { "data-loading-content": true, className: "folio-media-gallery-content", children: /* @__PURE__ */ jsx(MediaGallery, { children: Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsxs("li", { children: [
|
|
63
|
+
/* @__PURE__ */ jsx(SkeletonBlock, { className: "folio-media-gallery-mount" }),
|
|
64
|
+
/* @__PURE__ */ jsx(SkeletonLine, { className: "mt-3 w-3/4" })
|
|
65
|
+
] }, index)) }) })
|
|
66
|
+
] });
|
|
67
|
+
}
|
|
68
|
+
function MediaDetailLayout({ title, titleId, headingLevel = 1, category, notesLabel, orientation, backLink, index, media, light, actions, metadata, location, pager, related, className, ...rest }) {
|
|
69
|
+
const Heading = `h${headingLevel}`;
|
|
70
|
+
return /* @__PURE__ */ jsx("div", { className: "folio-media-detail-page", children: /* @__PURE__ */ jsxs("article", { className: cn("folio-media-detail", className), "aria-labelledby": titleId, "data-photo-detail": true, ...rest, children: [
|
|
71
|
+
/* @__PURE__ */ jsxs("header", { className: "folio-media-index-bar", children: [
|
|
72
|
+
/* @__PURE__ */ jsx(Button, { asChild: true, variant: "ghost", children: backLink }),
|
|
73
|
+
index && /* @__PURE__ */ jsx("span", { className: "folio-media-index", children: index })
|
|
74
|
+
] }),
|
|
75
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-media-spread", "data-photo-spread": orientation === "landscape" ? "wide" : "tall", children: [
|
|
76
|
+
/* @__PURE__ */ jsx("div", { className: "folio-media-well", "data-photo-media": true, children: media }),
|
|
77
|
+
/* @__PURE__ */ jsxs("aside", { className: "folio-media-ledger", "aria-label": notesLabel, "data-photo-ledger": true, children: [
|
|
78
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-media-ledger-narrative", children: [
|
|
79
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-media-ledger-lead", children: [
|
|
80
|
+
category && /* @__PURE__ */ jsx("p", { className: "folio-media-eyebrow", children: category }),
|
|
81
|
+
/* @__PURE__ */ jsx(Heading, { id: titleId, className: "folio-media-detail-title", children: title })
|
|
82
|
+
] }),
|
|
83
|
+
light,
|
|
84
|
+
actions && /* @__PURE__ */ jsx("div", { className: "folio-media-actions", "data-photo-actions": true, children: actions })
|
|
85
|
+
] }),
|
|
86
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-media-ledger-data", children: [
|
|
87
|
+
metadata,
|
|
88
|
+
location
|
|
89
|
+
] })
|
|
90
|
+
] })
|
|
91
|
+
] }),
|
|
92
|
+
pager,
|
|
93
|
+
related
|
|
94
|
+
] }) });
|
|
95
|
+
}
|
|
96
|
+
function MediaMetadata({ items, className, ...rest }) {
|
|
97
|
+
return /* @__PURE__ */ jsx(DescriptionList, { items, className: cn("folio-media-metadata", className), "data-photo-specs": true, ...rest });
|
|
98
|
+
}
|
|
99
|
+
function MediaPager({ label, previous, next, className, ...rest }) {
|
|
100
|
+
if (!previous && !next) return null;
|
|
101
|
+
return /* @__PURE__ */ jsxs("nav", { "aria-label": label, className: cn("folio-media-pager", className), "data-photo-pager": true, ...rest, children: [
|
|
102
|
+
previous || /* @__PURE__ */ jsx("span", {}),
|
|
103
|
+
next || /* @__PURE__ */ jsx("span", {})
|
|
104
|
+
] });
|
|
105
|
+
}
|
|
106
|
+
function MediaPagerItem({ link, direction, label, title, image }) {
|
|
107
|
+
return /* @__PURE__ */ jsx(Slot, { className: "folio-media-pager-link", "data-direction": direction, children: replaceSlotContent(link, /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
108
|
+
image && direction === "previous" && /* @__PURE__ */ jsx("span", { className: "folio-media-pager-image", children: image }),
|
|
109
|
+
/* @__PURE__ */ jsxs("span", { className: "folio-media-pager-copy", children: [
|
|
110
|
+
/* @__PURE__ */ jsx("span", { className: "folio-media-pager-label", children: label }),
|
|
111
|
+
" ",
|
|
112
|
+
/* @__PURE__ */ jsx("strong", { className: "folio-media-pager-title", children: title })
|
|
113
|
+
] }),
|
|
114
|
+
image && direction === "next" && /* @__PURE__ */ jsx("span", { className: "folio-media-pager-image", children: image })
|
|
115
|
+
] })) });
|
|
116
|
+
}
|
|
117
|
+
function MediaThumbnailStrip({ heading, children, className, ...rest }) {
|
|
118
|
+
return /* @__PURE__ */ jsxs("section", { className: cn("folio-media-thumbnails", className), "data-photo-related": true, ...rest, children: [
|
|
119
|
+
/* @__PURE__ */ jsx("h2", { children: heading }),
|
|
120
|
+
/* @__PURE__ */ jsx("div", { className: "folio-media-thumbnail-list", children })
|
|
121
|
+
] });
|
|
122
|
+
}
|
|
123
|
+
function MediaThumbnail({ children }) {
|
|
124
|
+
return /* @__PURE__ */ jsx(Slot, { className: "folio-media-thumbnail", children });
|
|
125
|
+
}
|
|
126
|
+
function MediaLightNote({ label, lines }) {
|
|
127
|
+
return /* @__PURE__ */ jsxs("div", { className: "folio-media-light", children: [
|
|
128
|
+
/* @__PURE__ */ jsx(Badge, { tone: "outline", children: label }),
|
|
129
|
+
lines.map((line) => /* @__PURE__ */ jsxs("div", { className: "folio-media-light-line", children: [
|
|
130
|
+
line.icon,
|
|
131
|
+
/* @__PURE__ */ jsx("span", { children: line.text }),
|
|
132
|
+
line.detail && /* @__PURE__ */ jsx("span", { className: "folio-media-light-detail", children: line.detail })
|
|
133
|
+
] }, line.id))
|
|
134
|
+
] });
|
|
135
|
+
}
|
|
136
|
+
function MediaMapSection({ title, hint, aliasId, map, preview, className, ...rest }) {
|
|
137
|
+
return /* @__PURE__ */ jsx("section", { className: cn("folio-media-map-section", className), ...rest, children: /* @__PURE__ */ jsxs("div", { className: "folio-media-container", children: [
|
|
138
|
+
aliasId && /* @__PURE__ */ jsx("span", { id: aliasId, className: "folio-media-anchor", "aria-hidden": "true" }),
|
|
139
|
+
/* @__PURE__ */ jsxs("header", { children: [
|
|
140
|
+
/* @__PURE__ */ jsx("h2", { children: title }),
|
|
141
|
+
hint && /* @__PURE__ */ jsx("p", { children: hint })
|
|
142
|
+
] }),
|
|
143
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-media-map-grid", children: [
|
|
144
|
+
map,
|
|
145
|
+
preview
|
|
146
|
+
] })
|
|
147
|
+
] }) });
|
|
148
|
+
}
|
|
149
|
+
function MediaMapFrame({ label, hint, navigation, compact = false, children, className, ...rest }) {
|
|
150
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("folio-media-map-frame", compact && "folio-media-map-frame-compact", className), ...rest, children: [
|
|
151
|
+
label && /* @__PURE__ */ jsx("span", { className: "folio-media-map-label", children: label }),
|
|
152
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-media-map-stage", children: [
|
|
153
|
+
children,
|
|
154
|
+
hint && /* @__PURE__ */ jsx("div", { className: "folio-media-map-hint", children: hint }),
|
|
155
|
+
navigation && /* @__PURE__ */ jsx("div", { className: "folio-media-map-navigation", children: navigation })
|
|
156
|
+
] })
|
|
157
|
+
] });
|
|
158
|
+
}
|
|
159
|
+
function MediaMapNavigation({ zoomInLabel, zoomOutLabel, onZoomIn, onZoomOut }) {
|
|
160
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
161
|
+
/* @__PURE__ */ jsx(Button, { variant: "secondary", iconOnly: true, "aria-label": zoomInLabel, onClick: onZoomIn, children: /* @__PURE__ */ jsx(RiAddLine, { size: 18, "aria-hidden": "true" }) }),
|
|
162
|
+
/* @__PURE__ */ jsx(Button, { variant: "secondary", iconOnly: true, "aria-label": zoomOutLabel, onClick: onZoomOut, children: /* @__PURE__ */ jsx(RiSubtractLine, { size: 18, "aria-hidden": "true" }) })
|
|
163
|
+
] });
|
|
164
|
+
}
|
|
165
|
+
function MediaMapCanvas({ className, ...rest }) {
|
|
166
|
+
return /* @__PURE__ */ jsx("div", { className: cn("folio-media-map-canvas", className), ...rest });
|
|
167
|
+
}
|
|
168
|
+
function MediaMapPreview({ title, image, action, place, coordinates, children }) {
|
|
169
|
+
return /* @__PURE__ */ jsxs("aside", { className: "folio-media-map-preview", children: [
|
|
170
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-media-map-preview-image", children: [
|
|
171
|
+
image,
|
|
172
|
+
action && /* @__PURE__ */ jsx("div", { className: "folio-media-map-preview-action", children: action })
|
|
173
|
+
] }),
|
|
174
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-media-map-preview-copy", children: [
|
|
175
|
+
/* @__PURE__ */ jsx("h3", { children: title }),
|
|
176
|
+
place && /* @__PURE__ */ jsx("p", { className: "folio-media-map-place", children: place }),
|
|
177
|
+
coordinates && /* @__PURE__ */ jsx("div", { className: "folio-media-map-coordinates", children: coordinates }),
|
|
178
|
+
children
|
|
179
|
+
] })
|
|
180
|
+
] });
|
|
181
|
+
}
|
|
182
|
+
function MediaMapAreaList({ items, value, onValueChange }) {
|
|
183
|
+
return /* @__PURE__ */ jsx("div", { className: "folio-media-map-areas", children: items.map((item) => /* @__PURE__ */ jsxs(Button, { variant: "ghost", "aria-pressed": value === item.id, onClick: () => onValueChange(item.id), className: "folio-media-map-area", children: [
|
|
184
|
+
/* @__PURE__ */ jsxs("span", { className: "folio-media-map-area-name", children: [
|
|
185
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true" }),
|
|
186
|
+
item.label
|
|
187
|
+
] }),
|
|
188
|
+
" ",
|
|
189
|
+
/* @__PURE__ */ jsx("span", { className: "folio-media-map-area-count", children: item.count })
|
|
190
|
+
] }, item.id)) });
|
|
191
|
+
}
|
|
192
|
+
function MediaMapMarker({ label, active = false, className, ...rest }) {
|
|
193
|
+
return /* @__PURE__ */ jsx(Button, { ...rest, variant: "ghost", iconOnly: true, "aria-label": label, "aria-pressed": active, className: cn("folio-media-map-marker", className), style: { width: 44, height: 44, ...rest.style }, children: /* @__PURE__ */ jsx(MediaMapPin, { active }) });
|
|
194
|
+
}
|
|
195
|
+
function MediaMapPin({ active = false }) {
|
|
196
|
+
return /* @__PURE__ */ jsx("span", { className: "folio-media-map-pin", "data-active": active || void 0, "aria-hidden": "true", children: /* @__PURE__ */ jsx("span", {}) });
|
|
197
|
+
}
|
|
198
|
+
function MediaMapSkeleton() {
|
|
199
|
+
return /* @__PURE__ */ jsx("div", { className: "folio-media-map-skeleton folio-media-container", "aria-hidden": "true", children: /* @__PURE__ */ jsx(SkeletonBlock, { className: "folio-media-map-canvas" }) });
|
|
200
|
+
}
|
|
201
|
+
export {
|
|
202
|
+
MediaCollection,
|
|
203
|
+
MediaDetailLayout,
|
|
204
|
+
MediaGallery,
|
|
205
|
+
MediaGalleryItem,
|
|
206
|
+
MediaGallerySkeleton,
|
|
207
|
+
MediaLightNote,
|
|
208
|
+
MediaMapAreaList,
|
|
209
|
+
MediaMapCanvas,
|
|
210
|
+
MediaMapFrame,
|
|
211
|
+
MediaMapMarker,
|
|
212
|
+
MediaMapNavigation,
|
|
213
|
+
MediaMapPin,
|
|
214
|
+
MediaMapPreview,
|
|
215
|
+
MediaMapSection,
|
|
216
|
+
MediaMapSkeleton,
|
|
217
|
+
MediaMasthead,
|
|
218
|
+
MediaMetadata,
|
|
219
|
+
MediaPager,
|
|
220
|
+
MediaPagerItem,
|
|
221
|
+
MediaThumbnail,
|
|
222
|
+
MediaThumbnailStrip,
|
|
223
|
+
PhotographFeature
|
|
224
|
+
};
|
|
225
|
+
//# sourceMappingURL=Media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Media/Media.tsx"],"sourcesContent":["import { Slot } from '@radix-ui/react-slot'\nimport { RiAddLine, RiSubtractLine } from '@remixicon/react'\nimport type { ComponentPropsWithRef, HTMLAttributes, ReactElement, ReactNode } from 'react'\nimport { Badge } from '../../components/Badge/Badge'\nimport { Button, type ButtonProps } from '../../components/Button/Button'\nimport { DescriptionList, type DescriptionListItem } from '../../components/DescriptionList/DescriptionList'\nimport { EmptyState } from '../../components/EmptyState/EmptyState'\nimport { SkeletonBlock, SkeletonLine, SkeletonPage } from '../../components/Skeleton/Skeleton'\nimport { cn } from '../../lib/cn'\nimport { replaceSlotContent } from '../../lib/slot-content'\n\nexport interface MediaMastheadProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n eyebrow?: ReactNode\n title: ReactNode\n description?: ReactNode\n /** The title level when this page composition sits inside another document. */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6\n}\n\n/** The quiet opening to an image collection, before its controls and prints. */\nexport function MediaMasthead({ eyebrow, title, description, headingLevel = 1, className, ...rest }: MediaMastheadProps) {\n const Heading = `h${headingLevel}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n\n return (\n <header className={cn('folio-media-masthead', className)} {...rest}>\n {eyebrow && <p className=\"folio-media-eyebrow\">{eyebrow}</p>}\n <Heading className=\"folio-media-masthead-title\">{title}</Heading>\n {description && <p className=\"folio-media-description\">{description}</p>}\n </header>\n )\n}\n\nexport interface PhotographFeatureProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n image: ReactNode\n title: ReactNode\n eyebrow?: ReactNode\n description?: ReactNode\n caption?: ReactNode\n action?: ReactNode\n}\n\n/** A photograph and an editorial introduction, with the original image ratio. */\nexport function PhotographFeature({ image, title, eyebrow, description, caption, action, className, ...rest }: PhotographFeatureProps) {\n return (\n <section className={cn('folio-photograph-feature', className)} {...rest}>\n <div className=\"folio-photograph-feature-copy\">\n {eyebrow && <p className=\"folio-media-eyebrow\">{eyebrow}</p>}\n <h2 className=\"folio-photograph-feature-title\">{title}</h2>\n {description && <div className=\"folio-media-description\">{description}</div>}\n {action && <div className=\"folio-photograph-feature-action\">{action}</div>}\n </div>\n <figure className=\"folio-photograph-feature-figure\">\n <div className=\"folio-photograph-feature-image\">{image}</div>\n {caption && <figcaption className=\"folio-photograph-feature-caption\">{caption}</figcaption>}\n </figure>\n </section>\n )\n}\n\nexport interface MediaCollectionProps extends HTMLAttributes<HTMLDivElement> {\n masthead: ReactNode\n controls?: ReactNode\n collectionId?: string\n footer?: ReactNode\n}\n\n/** Page-level gallery composition; the host owns its filters and collection. */\nexport function MediaCollection({ masthead, controls, collectionId, footer, children, className, ...rest }: MediaCollectionProps) {\n return (\n <div className={cn('folio-media-gallery-page', className)} {...rest}>\n {masthead}\n {controls && <div className=\"folio-media-container\">{controls}</div>}\n <section id={collectionId} className=\"folio-media-gallery-content\">{children}</section>\n {footer}\n </div>\n )\n}\n\nexport interface MediaGalleryProps extends HTMLAttributes<HTMLUListElement> {\n children?: ReactNode\n /** Supply localized empty copy when the collection may have no children. */\n emptyTitle?: ReactNode\n emptyAction?: ReactNode\n}\n\n/** Level mounts keep unlike aspect ratios aligned without cropping the prints. */\nexport function MediaGallery({ children, emptyTitle, emptyAction, className, ...rest }: MediaGalleryProps) {\n return (\n <div className=\"folio-media-container\">\n {emptyTitle ? <EmptyState title={emptyTitle} action={emptyAction} /> : (\n <ul role=\"list\" className={cn('folio-media-gallery', className)} {...rest}>{children}</ul>\n )}\n </div>\n )\n}\n\nexport interface MediaGalleryItemProps extends Omit<HTMLAttributes<HTMLLIElement>, 'title'> {\n /** A host link containing its image. The package supplies the print layout. */\n children: ReactElement\n title: ReactNode\n index?: ReactNode\n location?: ReactNode\n orientation?: 'portrait' | 'landscape' | 'square'\n}\n\nexport function MediaGalleryItem({ children, title, index, location, orientation, className, ...rest }: MediaGalleryItemProps) {\n return (\n <li className={cn('folio-media-gallery-item', className)} {...rest}>\n <figure>\n <Slot className=\"folio-media-gallery-link\" data-photo-orientation={orientation}>{children}</Slot>\n <figcaption className=\"folio-media-gallery-caption\">\n {index != null && <span className=\"folio-media-gallery-index\" aria-hidden=\"true\">{index}</span>}\n <span className=\"folio-media-gallery-title\">{title}</span>\n {location && <span className=\"folio-media-gallery-location\">{location}</span>}\n </figcaption>\n </figure>\n </li>\n )\n}\n\nexport interface MediaGallerySkeletonProps {\n label: string\n count?: number\n}\n\nexport function MediaGallerySkeleton({ label, count = 6 }: MediaGallerySkeletonProps) {\n return (\n <SkeletonPage label={label} aria-label={label}>\n <header className=\"folio-media-masthead\">\n <SkeletonLine className=\"w-24\" />\n <SkeletonBlock className=\"mt-4 h-9 w-[min(560px,90%)]\" />\n <SkeletonBlock className=\"mt-2.5 h-9 w-[min(380px,70%)]\" />\n </header>\n <div className=\"folio-media-container\"><SkeletonLine className=\"h-11 w-full\" /></div>\n <section data-loading-content className=\"folio-media-gallery-content\">\n <MediaGallery>\n {Array.from({ length: count }, (_, index) => (\n <li key={index}>\n <SkeletonBlock className=\"folio-media-gallery-mount\" />\n <SkeletonLine className=\"mt-3 w-3/4\" />\n </li>\n ))}\n </MediaGallery>\n </section>\n </SkeletonPage>\n )\n}\n\nexport interface MediaDetailLayoutProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n title: ReactNode\n titleId: string\n /** The title level when this page composition sits inside another document. */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6\n category?: ReactNode\n notesLabel: string\n orientation: 'portrait' | 'landscape' | 'square'\n backLink: ReactElement\n index?: ReactNode\n media: ReactNode\n light?: ReactNode\n actions?: ReactNode\n metadata?: ReactNode\n location?: ReactNode\n pager?: ReactNode\n related?: ReactNode\n}\n\n/** Portraits share a spread with their notes; landscapes lead a full-width spread. */\nexport function MediaDetailLayout({ title, titleId, headingLevel = 1, category, notesLabel, orientation, backLink, index, media, light, actions, metadata, location, pager, related, className, ...rest }: MediaDetailLayoutProps) {\n const Heading = `h${headingLevel}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n\n return (\n <div className=\"folio-media-detail-page\">\n <article className={cn('folio-media-detail', className)} aria-labelledby={titleId} data-photo-detail {...rest}>\n <header className=\"folio-media-index-bar\">\n <Button asChild variant=\"ghost\">{backLink}</Button>\n {index && <span className=\"folio-media-index\">{index}</span>}\n </header>\n <div className=\"folio-media-spread\" data-photo-spread={orientation === 'landscape' ? 'wide' : 'tall'}>\n <div className=\"folio-media-well\" data-photo-media>{media}</div>\n <aside className=\"folio-media-ledger\" aria-label={notesLabel} data-photo-ledger>\n <div className=\"folio-media-ledger-narrative\">\n <div className=\"folio-media-ledger-lead\">\n {category && <p className=\"folio-media-eyebrow\">{category}</p>}\n <Heading id={titleId} className=\"folio-media-detail-title\">{title}</Heading>\n </div>\n {light}\n {actions && <div className=\"folio-media-actions\" data-photo-actions>{actions}</div>}\n </div>\n <div className=\"folio-media-ledger-data\">{metadata}{location}</div>\n </aside>\n </div>\n {pager}\n {related}\n </article>\n </div>\n )\n}\n\nexport interface MediaMetadataProps extends HTMLAttributes<HTMLDListElement> {\n items: DescriptionListItem[]\n}\n\nexport function MediaMetadata({ items, className, ...rest }: MediaMetadataProps) {\n return <DescriptionList items={items} className={cn('folio-media-metadata', className)} data-photo-specs {...rest} />\n}\n\nexport interface MediaPagerProps extends HTMLAttributes<HTMLElement> {\n label: string\n previous?: ReactNode\n next?: ReactNode\n}\n\nexport function MediaPager({ label, previous, next, className, ...rest }: MediaPagerProps) {\n if (!previous && !next) return null\n return <nav aria-label={label} className={cn('folio-media-pager', className)} data-photo-pager {...rest}>{previous || <span />}{next || <span />}</nav>\n}\n\nexport interface MediaPagerItemProps {\n link: ReactElement\n direction: 'previous' | 'next'\n label: ReactNode\n title: ReactNode\n image?: ReactNode\n}\n\nexport function MediaPagerItem({ link, direction, label, title, image }: MediaPagerItemProps) {\n return (\n <Slot className=\"folio-media-pager-link\" data-direction={direction}>\n {/** Slot composes the host link while retaining its routing behavior. */}\n {replaceSlotContent(link, <>\n {image && direction === 'previous' && <span className=\"folio-media-pager-image\">{image}</span>}\n <span className=\"folio-media-pager-copy\">\n <span className=\"folio-media-pager-label\">{label}</span>{' '}\n <strong className=\"folio-media-pager-title\">{title}</strong>\n </span>\n {image && direction === 'next' && <span className=\"folio-media-pager-image\">{image}</span>}\n </>)}\n </Slot>\n )\n}\n\nexport interface MediaThumbnailStripProps extends HTMLAttributes<HTMLElement> {\n heading: ReactNode\n}\n\nexport function MediaThumbnailStrip({ heading, children, className, ...rest }: MediaThumbnailStripProps) {\n return <section className={cn('folio-media-thumbnails', className)} data-photo-related {...rest}><h2>{heading}</h2><div className=\"folio-media-thumbnail-list\">{children}</div></section>\n}\n\nexport interface MediaThumbnailProps {\n children: ReactElement\n}\n\nexport function MediaThumbnail({ children }: MediaThumbnailProps) {\n return <Slot className=\"folio-media-thumbnail\">{children}</Slot>\n}\n\nexport interface MediaLightNoteLine {\n id: string\n icon?: ReactNode\n text: ReactNode\n detail?: ReactNode\n}\n\nexport interface MediaLightNoteProps {\n label: ReactNode\n lines: MediaLightNoteLine[]\n}\n\n/** The host supplies observations and formatted labels; this is presentation only. */\nexport function MediaLightNote({ label, lines }: MediaLightNoteProps) {\n return <div className=\"folio-media-light\"><Badge tone=\"outline\">{label}</Badge>{lines.map((line) => <div className=\"folio-media-light-line\" key={line.id}>{line.icon}<span>{line.text}</span>{line.detail && <span className=\"folio-media-light-detail\">{line.detail}</span>}</div>)}</div>\n}\n\nexport interface MediaMapSectionProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n title: ReactNode\n hint?: ReactNode\n /** An optional legacy anchor, owned and named by the host. */\n aliasId?: string\n map: ReactNode\n preview: ReactNode\n}\n\nexport function MediaMapSection({ title, hint, aliasId, map, preview, className, ...rest }: MediaMapSectionProps) {\n return <section className={cn('folio-media-map-section', className)} {...rest}><div className=\"folio-media-container\">{aliasId && <span id={aliasId} className=\"folio-media-anchor\" aria-hidden=\"true\" />}<header><h2>{title}</h2>{hint && <p>{hint}</p>}</header><div className=\"folio-media-map-grid\">{map}{preview}</div></div></section>\n}\n\nexport interface MediaMapFrameProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode\n hint?: ReactNode\n navigation?: ReactNode\n compact?: boolean\n}\n\nexport function MediaMapFrame({ label, hint, navigation, compact = false, children, className, ...rest }: MediaMapFrameProps) {\n return <div className={cn('folio-media-map-frame', compact && 'folio-media-map-frame-compact', className)} {...rest}>{label && <span className=\"folio-media-map-label\">{label}</span>}<div className=\"folio-media-map-stage\">{children}{hint && <div className=\"folio-media-map-hint\">{hint}</div>}{navigation && <div className=\"folio-media-map-navigation\">{navigation}</div>}</div></div>\n}\n\nexport interface MediaMapNavigationProps {\n zoomInLabel: string\n zoomOutLabel: string\n onZoomIn: () => void\n onZoomOut: () => void\n}\n\nexport function MediaMapNavigation({ zoomInLabel, zoomOutLabel, onZoomIn, onZoomOut }: MediaMapNavigationProps) {\n return <><Button variant=\"secondary\" iconOnly aria-label={zoomInLabel} onClick={onZoomIn}><RiAddLine size={18} aria-hidden=\"true\" /></Button><Button variant=\"secondary\" iconOnly aria-label={zoomOutLabel} onClick={onZoomOut}><RiSubtractLine size={18} aria-hidden=\"true\" /></Button></>\n}\n\nexport type MediaMapCanvasProps = ComponentPropsWithRef<'div'>\n\n/** A sized provider container. Map creation, themes and geographic math stay in the host. */\nexport function MediaMapCanvas({ className, ...rest }: MediaMapCanvasProps) {\n return <div className={cn('folio-media-map-canvas', className)} {...rest} />\n}\n\nexport interface MediaMapPreviewProps {\n title: ReactNode\n image?: ReactNode\n action?: ReactNode\n place?: ReactNode\n coordinates?: ReactNode\n children?: ReactNode\n}\n\nexport function MediaMapPreview({ title, image, action, place, coordinates, children }: MediaMapPreviewProps) {\n return <aside className=\"folio-media-map-preview\"><div className=\"folio-media-map-preview-image\">{image}{action && <div className=\"folio-media-map-preview-action\">{action}</div>}</div><div className=\"folio-media-map-preview-copy\"><h3>{title}</h3>{place && <p className=\"folio-media-map-place\">{place}</p>}{coordinates && <div className=\"folio-media-map-coordinates\">{coordinates}</div>}{children}</div></aside>\n}\n\nexport interface MediaMapArea {\n id: string\n label: ReactNode\n count: ReactNode\n}\n\nexport interface MediaMapAreaListProps {\n items: MediaMapArea[]\n value?: string\n onValueChange: (value: string) => void\n}\n\nexport function MediaMapAreaList({ items, value, onValueChange }: MediaMapAreaListProps) {\n return (\n <div className=\"folio-media-map-areas\">\n {items.map((item) => (\n <Button key={item.id} variant=\"ghost\" aria-pressed={value === item.id} onClick={() => onValueChange(item.id)} className=\"folio-media-map-area\">\n <span className=\"folio-media-map-area-name\"><span aria-hidden=\"true\" />{item.label}</span>{' '}\n <span className=\"folio-media-map-area-count\">{item.count}</span>\n </Button>\n ))}\n </div>\n )\n}\n\nexport interface MediaMapMarkerProps extends Omit<Extract<ButtonProps, { href?: undefined }>, 'children' | 'iconOnly'> {\n label: string\n active?: boolean\n}\n\n/** A keyboard-operable 44px marker for a host's map-provider portal. */\nexport function MediaMapMarker({ label, active = false, className, ...rest }: MediaMapMarkerProps) {\n return <Button {...rest} variant=\"ghost\" iconOnly aria-label={label} aria-pressed={active} className={cn('folio-media-map-marker', className)} style={{ width: 44, height: 44, ...rest.style }}><MediaMapPin active={active} /></Button>\n}\n\nexport interface MediaMapPinProps {\n active?: boolean\n}\n\nexport function MediaMapPin({ active = false }: MediaMapPinProps) {\n return <span className=\"folio-media-map-pin\" data-active={active || undefined} aria-hidden=\"true\"><span /></span>\n}\n\nexport function MediaMapSkeleton() {\n return <div className=\"folio-media-map-skeleton folio-media-container\" aria-hidden=\"true\"><SkeletonBlock className=\"folio-media-map-canvas\" /></div>\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface MediaLightboxProps {
|
|
5
|
+
open: boolean;
|
|
6
|
+
onOpenChange: (open: boolean) => void;
|
|
7
|
+
title: string;
|
|
8
|
+
triggerLabel: string;
|
|
9
|
+
closeLabel: string;
|
|
10
|
+
/** Intrinsic width divided by height; invalid dimensions use a safe fallback. */
|
|
11
|
+
aspectRatio: number;
|
|
12
|
+
media: ReactNode;
|
|
13
|
+
expandedMedia?: ReactNode;
|
|
14
|
+
}
|
|
15
|
+
/** A print and its controlled, focus-trapped full-screen dialog. */
|
|
16
|
+
declare function MediaLightbox({ open, onOpenChange, title, triggerLabel, closeLabel, aspectRatio, media, expandedMedia }: MediaLightboxProps): react.JSX.Element;
|
|
17
|
+
|
|
18
|
+
export { MediaLightbox, type MediaLightboxProps };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { RiCloseLine } from "@remixicon/react";
|
|
4
|
+
import { Button } from "../../components/Button/Button.js";
|
|
5
|
+
import { Dialog, DialogClose, DialogContent, DialogTrigger } from "../../components/Dialog/Dialog.js";
|
|
6
|
+
function MediaLightbox({ open, onOpenChange, title, triggerLabel, closeLabel, aspectRatio, media, expandedMedia = media }) {
|
|
7
|
+
const ratio = Number.isFinite(aspectRatio) && aspectRatio > 0 ? aspectRatio : 1.5;
|
|
8
|
+
const style = { "--folio-media-aspect": ratio };
|
|
9
|
+
return /* @__PURE__ */ jsxs(Dialog, { open, onOpenChange, children: [
|
|
10
|
+
/* @__PURE__ */ jsx(DialogTrigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "ghost", "aria-label": triggerLabel, className: "folio-media-frame", style, "data-photo-frame": true, children: media }) }),
|
|
11
|
+
/* @__PURE__ */ jsxs(
|
|
12
|
+
DialogContent,
|
|
13
|
+
{
|
|
14
|
+
title,
|
|
15
|
+
hideTitle: true,
|
|
16
|
+
showClose: false,
|
|
17
|
+
"aria-modal": "true",
|
|
18
|
+
"aria-describedby": void 0,
|
|
19
|
+
"data-photo-lightbox": true,
|
|
20
|
+
"data-mode": "dark",
|
|
21
|
+
className: "folio-media-lightbox translate-x-0 translate-y-0",
|
|
22
|
+
style,
|
|
23
|
+
onClick: (event) => {
|
|
24
|
+
if (event.target === event.currentTarget) onOpenChange(false);
|
|
25
|
+
},
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ jsx("div", { className: "folio-media-lightbox-stage", children: expandedMedia }),
|
|
28
|
+
/* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "secondary", iconOnly: true, "aria-label": closeLabel, className: "folio-media-lightbox-close", children: /* @__PURE__ */ jsx(RiCloseLine, { size: 18, "aria-hidden": "true" }) }) }),
|
|
29
|
+
/* @__PURE__ */ jsx("p", { className: "folio-media-lightbox-caption", "aria-hidden": "true", children: title })
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
)
|
|
33
|
+
] });
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
MediaLightbox
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=MediaLightbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Media/MediaLightbox.tsx"],"sourcesContent":["'use client'\n\nimport type { CSSProperties, ReactNode } from 'react'\nimport { RiCloseLine } from '@remixicon/react'\nimport { Button } from '../../components/Button/Button'\nimport { Dialog, DialogClose, DialogContent, DialogTrigger } from '../../components/Dialog/Dialog'\n\nexport interface MediaLightboxProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: string\n triggerLabel: string\n closeLabel: string\n /** Intrinsic width divided by height; invalid dimensions use a safe fallback. */\n aspectRatio: number\n media: ReactNode\n expandedMedia?: ReactNode\n}\n\n/** A print and its controlled, focus-trapped full-screen dialog. */\nexport function MediaLightbox({ open, onOpenChange, title, triggerLabel, closeLabel, aspectRatio, media, expandedMedia = media }: MediaLightboxProps) {\n const ratio = Number.isFinite(aspectRatio) && aspectRatio > 0 ? aspectRatio : 1.5\n const style = { '--folio-media-aspect': ratio } as CSSProperties\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogTrigger asChild>\n <Button variant=\"ghost\" aria-label={triggerLabel} className=\"folio-media-frame\" style={style} data-photo-frame>\n {media}\n </Button>\n </DialogTrigger>\n <DialogContent\n title={title}\n hideTitle\n showClose={false}\n aria-modal=\"true\"\n aria-describedby={undefined}\n data-photo-lightbox\n data-mode=\"dark\"\n className=\"folio-media-lightbox translate-x-0 translate-y-0\"\n style={style}\n onClick={(event) => { if (event.target === event.currentTarget) onOpenChange(false) }}\n >\n <div className=\"folio-media-lightbox-stage\">{expandedMedia}</div>\n <DialogClose asChild><Button variant=\"secondary\" iconOnly aria-label={closeLabel} className=\"folio-media-lightbox-close\"><RiCloseLine size={18} aria-hidden=\"true\" /></Button></DialogClose>\n <p className=\"folio-media-lightbox-caption\" aria-hidden=\"true\">{title}</p>\n </DialogContent>\n </Dialog>\n )\n}\n"],"mappings":";AA2BQ,cAIF,YAJE;AAxBR,SAAS,mBAAmB;AAC5B,SAAS,cAAc;AACvB,SAAS,QAAQ,aAAa,eAAe,qBAAqB;AAe3D,SAAS,cAAc,EAAE,MAAM,cAAc,OAAO,cAAc,YAAY,aAAa,OAAO,gBAAgB,MAAM,GAAuB;AACpJ,QAAM,QAAQ,OAAO,SAAS,WAAW,KAAK,cAAc,IAAI,cAAc;AAC9E,QAAM,QAAQ,EAAE,wBAAwB,MAAM;AAE9C,SACE,qBAAC,UAAO,MAAY,cAClB;AAAA,wBAAC,iBAAc,SAAO,MACpB,8BAAC,UAAO,SAAQ,SAAQ,cAAY,cAAc,WAAU,qBAAoB,OAAc,oBAAgB,MAC3G,iBACH,GACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAS;AAAA,QACT,WAAW;AAAA,QACX,cAAW;AAAA,QACX,oBAAkB;AAAA,QAClB,uBAAmB;AAAA,QACnB,aAAU;AAAA,QACV,WAAU;AAAA,QACV;AAAA,QACA,SAAS,CAAC,UAAU;AAAE,cAAI,MAAM,WAAW,MAAM,cAAe,cAAa,KAAK;AAAA,QAAE;AAAA,QAEpF;AAAA,8BAAC,SAAI,WAAU,8BAA8B,yBAAc;AAAA,UAC3D,oBAAC,eAAY,SAAO,MAAC,8BAAC,UAAO,SAAQ,aAAY,UAAQ,MAAC,cAAY,YAAY,WAAU,8BAA6B,8BAAC,eAAY,MAAM,IAAI,eAAY,QAAO,GAAE,GAAS;AAAA,UAC9K,oBAAC,OAAE,WAAU,gCAA+B,eAAY,QAAQ,iBAAM;AAAA;AAAA;AAAA,IACxE;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode, HTMLAttributes } from 'react';
|
|
3
|
+
|
|
4
|
+
interface MetricsRangeProps {
|
|
5
|
+
label: string;
|
|
6
|
+
value: string;
|
|
7
|
+
options: {
|
|
8
|
+
value: string;
|
|
9
|
+
label: string;
|
|
10
|
+
}[];
|
|
11
|
+
onChange: (value: string) => void;
|
|
12
|
+
}
|
|
13
|
+
/** A controlled range selector. Selection represents the data the host successfully loaded. */
|
|
14
|
+
declare function MetricsRange({ label, value, options, onChange }: MetricsRangeProps): react.JSX.Element;
|
|
15
|
+
interface MetricsSectionProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
16
|
+
title?: ReactNode;
|
|
17
|
+
caption?: ReactNode;
|
|
18
|
+
action?: ReactNode;
|
|
19
|
+
children: ReactNode;
|
|
20
|
+
}
|
|
21
|
+
/** A dashboard section without a dependency on a chart engine or a domain response. */
|
|
22
|
+
declare function MetricsSection({ title, caption, action, children, className, ...rest }: MetricsSectionProps): react.JSX.Element;
|
|
23
|
+
interface MetricsPanelProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
24
|
+
title: string;
|
|
25
|
+
caption?: string;
|
|
26
|
+
children: ReactNode;
|
|
27
|
+
}
|
|
28
|
+
/** A labeled panel. Children may use the separately imported charts entry. */
|
|
29
|
+
declare function MetricsPanel({ title, caption, children, className, ...rest }: MetricsPanelProps): react.JSX.Element;
|
|
30
|
+
interface MetricsPanelGridProps extends HTMLAttributes<HTMLDivElement> {
|
|
31
|
+
columns?: 2 | 4;
|
|
32
|
+
}
|
|
33
|
+
/** Responsive grids share their dividers and minimum panel width. */
|
|
34
|
+
declare function MetricsPanelGrid({ columns, className, ...props }: MetricsPanelGridProps): react.JSX.Element;
|
|
35
|
+
interface MetricsListProps {
|
|
36
|
+
label: string;
|
|
37
|
+
items: {
|
|
38
|
+
id: string;
|
|
39
|
+
label: ReactNode;
|
|
40
|
+
value: ReactNode;
|
|
41
|
+
icon?: ReactNode;
|
|
42
|
+
}[];
|
|
43
|
+
empty: string;
|
|
44
|
+
}
|
|
45
|
+
interface MetricsEmptyStateProps {
|
|
46
|
+
title: ReactNode;
|
|
47
|
+
description: ReactNode;
|
|
48
|
+
}
|
|
49
|
+
/** An empty time series retains its plot space and tells the reader what will appear once the first observation arrives. */
|
|
50
|
+
declare function MetricsEmptyState({ title, description }: MetricsEmptyStateProps): react.JSX.Element;
|
|
51
|
+
/** Already-formatted metric rows, with a named value relation and an explicit empty state. */
|
|
52
|
+
declare function MetricsList({ label, items, empty }: MetricsListProps): react.JSX.Element;
|
|
53
|
+
interface MetricValueProps {
|
|
54
|
+
segments: {
|
|
55
|
+
text: string;
|
|
56
|
+
unit?: boolean;
|
|
57
|
+
}[];
|
|
58
|
+
}
|
|
59
|
+
/** A supplied number with its units on the supporting type step. */
|
|
60
|
+
declare function MetricValue({ segments }: MetricValueProps): react.JSX.Element;
|
|
61
|
+
interface MetricDeltaProps {
|
|
62
|
+
direction: 'up' | 'down' | 'steady';
|
|
63
|
+
children: ReactNode;
|
|
64
|
+
}
|
|
65
|
+
/** Neutral direction marks never assume an increase is good or a decrease is an error. */
|
|
66
|
+
declare function MetricDelta({ direction, children }: MetricDeltaProps): react.JSX.Element;
|
|
67
|
+
interface LiveCountProps {
|
|
68
|
+
value: number | null;
|
|
69
|
+
label: string;
|
|
70
|
+
}
|
|
71
|
+
/** Unknown live counts remain absent; a measured zero is a real reading. */
|
|
72
|
+
declare function LiveCount({ value, label }: LiveCountProps): react.JSX.Element | null;
|
|
73
|
+
|
|
74
|
+
export { LiveCount, type LiveCountProps, MetricDelta, type MetricDeltaProps, MetricValue, type MetricValueProps, MetricsEmptyState, type MetricsEmptyStateProps, MetricsList, type MetricsListProps, MetricsPanel, MetricsPanelGrid, type MetricsPanelGridProps, type MetricsPanelProps, MetricsRange, type MetricsRangeProps, MetricsSection, type MetricsSectionProps };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Badge } from "../../components/Badge/Badge.js";
|
|
4
|
+
import { Heading } from "../../components/Heading/Heading.js";
|
|
5
|
+
import { StatusDot } from "../../components/StatusDot/StatusDot.js";
|
|
6
|
+
import { Text } from "../../components/Text/Text.js";
|
|
7
|
+
import { ToggleGroup, ToggleGroupItem } from "../../components/ToggleGroup/ToggleGroup.js";
|
|
8
|
+
import { cn } from "../../lib/cn.js";
|
|
9
|
+
function MetricsRange({ label, value, options, onChange }) {
|
|
10
|
+
return /* @__PURE__ */ jsxs("div", { className: "folio-metrics-range", children: [
|
|
11
|
+
/* @__PURE__ */ jsx(Text, { as: "span", size: "xs", tone: "muted", children: label }),
|
|
12
|
+
/* @__PURE__ */ jsx(ToggleGroup, { type: "single", "aria-label": label, value, onValueChange: (next) => {
|
|
13
|
+
if (next) onChange(next);
|
|
14
|
+
}, className: "max-w-full flex-wrap", children: options.map((option) => /* @__PURE__ */ jsx(ToggleGroupItem, { value: option.value, className: "min-h-11", children: option.label }, option.value)) })
|
|
15
|
+
] });
|
|
16
|
+
}
|
|
17
|
+
function MetricsSection({ title, caption, action, children, className, ...rest }) {
|
|
18
|
+
return /* @__PURE__ */ jsxs("section", { className: cn("folio-metrics-section", className), ...rest, children: [
|
|
19
|
+
title && /* @__PURE__ */ jsxs("header", { className: "folio-metrics-section__header", children: [
|
|
20
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
21
|
+
/* @__PURE__ */ jsx(Heading, { level: 2, children: title }),
|
|
22
|
+
caption && /* @__PURE__ */ jsx(Text, { size: "xs", tone: "muted", className: "mb-0 mt-2", children: caption })
|
|
23
|
+
] }),
|
|
24
|
+
action
|
|
25
|
+
] }),
|
|
26
|
+
children
|
|
27
|
+
] });
|
|
28
|
+
}
|
|
29
|
+
function MetricsPanel({ title, caption, children, className, ...rest }) {
|
|
30
|
+
return /* @__PURE__ */ jsxs("section", { className: cn("folio-metrics-panel", className), ...rest, children: [
|
|
31
|
+
/* @__PURE__ */ jsxs("header", { children: [
|
|
32
|
+
/* @__PURE__ */ jsx(Heading, { level: 3, size: "sub", children: title }),
|
|
33
|
+
caption && /* @__PURE__ */ jsx(Text, { size: "xs", tone: "muted", className: "mb-0 mt-2", children: caption })
|
|
34
|
+
] }),
|
|
35
|
+
children
|
|
36
|
+
] });
|
|
37
|
+
}
|
|
38
|
+
function MetricsPanelGrid({ columns = 2, className, ...props }) {
|
|
39
|
+
return /* @__PURE__ */ jsx("div", { className: cn("folio-metrics-grid", className), "data-columns": columns, ...props });
|
|
40
|
+
}
|
|
41
|
+
function MetricsEmptyState({ title, description }) {
|
|
42
|
+
return /* @__PURE__ */ jsxs("div", { className: "folio-metrics-empty", role: "status", children: [
|
|
43
|
+
/* @__PURE__ */ jsxs("div", { "aria-hidden": true, className: "folio-metrics-empty__plot", children: [
|
|
44
|
+
/* @__PURE__ */ jsx("span", {}),
|
|
45
|
+
/* @__PURE__ */ jsx("span", {}),
|
|
46
|
+
/* @__PURE__ */ jsx("span", {}),
|
|
47
|
+
/* @__PURE__ */ jsx("span", {})
|
|
48
|
+
] }),
|
|
49
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
50
|
+
/* @__PURE__ */ jsx(Heading, { level: 3, size: "sub", children: title }),
|
|
51
|
+
/* @__PURE__ */ jsx(Text, { size: "sm", tone: "muted", className: "mb-0 mt-2", children: description })
|
|
52
|
+
] })
|
|
53
|
+
] });
|
|
54
|
+
}
|
|
55
|
+
function MetricsList({ label, items, empty }) {
|
|
56
|
+
if (items.length === 0) return /* @__PURE__ */ jsx(Text, { size: "sm", tone: "muted", children: empty });
|
|
57
|
+
return /* @__PURE__ */ jsx("dl", { "aria-label": label, className: "folio-metrics-list", children: items.map((item) => /* @__PURE__ */ jsxs("div", { children: [
|
|
58
|
+
/* @__PURE__ */ jsxs("dt", { children: [
|
|
59
|
+
item.icon,
|
|
60
|
+
/* @__PURE__ */ jsx(Text, { as: "span", size: "sm", tone: "strong", children: item.label })
|
|
61
|
+
] }),
|
|
62
|
+
/* @__PURE__ */ jsx("dd", { children: /* @__PURE__ */ jsx(Text, { as: "span", size: "xs", tone: "muted", children: item.value }) })
|
|
63
|
+
] }, item.id)) });
|
|
64
|
+
}
|
|
65
|
+
function MetricValue({ segments }) {
|
|
66
|
+
return /* @__PURE__ */ jsx(Fragment, { children: segments.map((segment, index) => /* @__PURE__ */ jsx("span", { className: segment.unit ? "folio-metric-unit" : void 0, children: segment.text }, index)) });
|
|
67
|
+
}
|
|
68
|
+
function MetricDelta({ direction, children }) {
|
|
69
|
+
return /* @__PURE__ */ jsxs(Text, { as: "span", size: "xs", tone: "muted", className: "inline-flex items-center gap-1.5", children: [
|
|
70
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": true, children: direction === "up" ? "\u25B2" : direction === "down" ? "\u25BC" : "\u2014" }),
|
|
71
|
+
children
|
|
72
|
+
] });
|
|
73
|
+
}
|
|
74
|
+
function LiveCount({ value, label }) {
|
|
75
|
+
if (value === null) return null;
|
|
76
|
+
return /* @__PURE__ */ jsxs(Badge, { tone: "outline", children: [
|
|
77
|
+
/* @__PURE__ */ jsx(StatusDot, { tone: "neutral" }),
|
|
78
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
79
|
+
value,
|
|
80
|
+
" ",
|
|
81
|
+
label
|
|
82
|
+
] })
|
|
83
|
+
] });
|
|
84
|
+
}
|
|
85
|
+
export {
|
|
86
|
+
LiveCount,
|
|
87
|
+
MetricDelta,
|
|
88
|
+
MetricValue,
|
|
89
|
+
MetricsEmptyState,
|
|
90
|
+
MetricsList,
|
|
91
|
+
MetricsPanel,
|
|
92
|
+
MetricsPanelGrid,
|
|
93
|
+
MetricsRange,
|
|
94
|
+
MetricsSection
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=Metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Metrics/Metrics.tsx"],"sourcesContent":["'use client'\n\nimport type { HTMLAttributes, ReactNode } from 'react'\nimport { Badge } from '../../components/Badge/Badge'\nimport { Heading } from '../../components/Heading/Heading'\nimport { StatusDot } from '../../components/StatusDot/StatusDot'\nimport { Text } from '../../components/Text/Text'\nimport { ToggleGroup, ToggleGroupItem } from '../../components/ToggleGroup/ToggleGroup'\nimport { cn } from '../../lib/cn'\n\nexport interface MetricsRangeProps {\n label: string\n value: string\n options: { value: string; label: string }[]\n onChange: (value: string) => void\n}\n\n/** A controlled range selector. Selection represents the data the host successfully loaded. */\nexport function MetricsRange({ label, value, options, onChange }: MetricsRangeProps) {\n return <div className=\"folio-metrics-range\"><Text as=\"span\" size=\"xs\" tone=\"muted\">{label}</Text><ToggleGroup type=\"single\" aria-label={label} value={value} onValueChange={(next) => { if (next) onChange(next) }} className=\"max-w-full flex-wrap\">{options.map((option) => <ToggleGroupItem value={option.value} key={option.value} className=\"min-h-11\">{option.label}</ToggleGroupItem>)}</ToggleGroup></div>\n}\n\nexport interface MetricsSectionProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n title?: ReactNode\n caption?: ReactNode\n action?: ReactNode\n children: ReactNode\n}\n\n/** A dashboard section without a dependency on a chart engine or a domain response. */\nexport function MetricsSection({ title, caption, action, children, className, ...rest }: MetricsSectionProps) {\n return <section className={cn('folio-metrics-section', className)} {...rest}>{title && <header className=\"folio-metrics-section__header\"><div><Heading level={2}>{title}</Heading>{caption && <Text size=\"xs\" tone=\"muted\" className=\"mb-0 mt-2\">{caption}</Text>}</div>{action}</header>}{children}</section>\n}\n\nexport interface MetricsPanelProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n title: string\n caption?: string\n children: ReactNode\n}\n\n/** A labeled panel. Children may use the separately imported charts entry. */\nexport function MetricsPanel({ title, caption, children, className, ...rest }: MetricsPanelProps) {\n return <section className={cn('folio-metrics-panel', className)} {...rest}><header><Heading level={3} size=\"sub\">{title}</Heading>{caption && <Text size=\"xs\" tone=\"muted\" className=\"mb-0 mt-2\">{caption}</Text>}</header>{children}</section>\n}\n\nexport interface MetricsPanelGridProps extends HTMLAttributes<HTMLDivElement> {\n columns?: 2 | 4\n}\n\n/** Responsive grids share their dividers and minimum panel width. */\nexport function MetricsPanelGrid({ columns = 2, className, ...props }: MetricsPanelGridProps) {\n return <div className={cn('folio-metrics-grid', className)} data-columns={columns} {...props} />\n}\n\nexport interface MetricsListProps {\n label: string\n items: { id: string; label: ReactNode; value: ReactNode; icon?: ReactNode }[]\n empty: string\n}\n\nexport interface MetricsEmptyStateProps {\n title: ReactNode\n description: ReactNode\n}\n\n/** An empty time series retains its plot space and tells the reader what will appear once the first observation arrives. */\nexport function MetricsEmptyState({ title, description }: MetricsEmptyStateProps) {\n return <div className=\"folio-metrics-empty\" role=\"status\"><div aria-hidden className=\"folio-metrics-empty__plot\"><span /><span /><span /><span /></div><div><Heading level={3} size=\"sub\">{title}</Heading><Text size=\"sm\" tone=\"muted\" className=\"mb-0 mt-2\">{description}</Text></div></div>\n}\n\n/** Already-formatted metric rows, with a named value relation and an explicit empty state. */\nexport function MetricsList({ label, items, empty }: MetricsListProps) {\n if (items.length === 0) return <Text size=\"sm\" tone=\"muted\">{empty}</Text>\n return <dl aria-label={label} className=\"folio-metrics-list\">{items.map((item) => <div key={item.id}><dt>{item.icon}<Text as=\"span\" size=\"sm\" tone=\"strong\">{item.label}</Text></dt><dd><Text as=\"span\" size=\"xs\" tone=\"muted\">{item.value}</Text></dd></div>)}</dl>\n}\n\nexport interface MetricValueProps {\n segments: { text: string; unit?: boolean }[]\n}\n\n/** A supplied number with its units on the supporting type step. */\nexport function MetricValue({ segments }: MetricValueProps) {\n return <>{segments.map((segment, index) => <span key={index} className={segment.unit ? 'folio-metric-unit' : undefined}>{segment.text}</span>)}</>\n}\n\nexport interface MetricDeltaProps {\n direction: 'up' | 'down' | 'steady'\n children: ReactNode\n}\n\n/** Neutral direction marks never assume an increase is good or a decrease is an error. */\nexport function MetricDelta({ direction, children }: MetricDeltaProps) {\n return <Text as=\"span\" size=\"xs\" tone=\"muted\" className=\"inline-flex items-center gap-1.5\"><span aria-hidden>{direction === 'up' ? '▲' : direction === 'down' ? '▼' : '—'}</span>{children}</Text>\n}\n\nexport interface LiveCountProps {\n value: number | null\n label: string\n}\n\n/** Unknown live counts remain absent; a measured zero is a real reading. */\nexport function LiveCount({ value, label }: LiveCountProps) {\n if (value === null) return null\n return <Badge tone=\"outline\"><StatusDot tone=\"neutral\" /><span>{value} {label}</span></Badge>\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { HTMLAttributes, ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface MediaPreviewAction {
|
|
5
|
+
label: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
playing?: boolean;
|
|
8
|
+
onToggle: () => void;
|
|
9
|
+
}
|
|
10
|
+
interface MediaListRowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
11
|
+
index: number;
|
|
12
|
+
artwork?: ReactNode;
|
|
13
|
+
title: ReactNode;
|
|
14
|
+
description?: ReactNode;
|
|
15
|
+
trailing?: ReactNode;
|
|
16
|
+
preview: MediaPreviewAction;
|
|
17
|
+
active?: boolean;
|
|
18
|
+
artworkShape?: 'square' | 'circle';
|
|
19
|
+
}
|
|
20
|
+
/** A ranked recording or artist, controlled by the host's one media player. */
|
|
21
|
+
declare function MediaListRow({ index, artwork, title, description, trailing, preview, active, artworkShape, className, ...rest }: MediaListRowProps): react.JSX.Element;
|
|
22
|
+
interface MusicFeatureProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
23
|
+
label: string;
|
|
24
|
+
title: ReactNode;
|
|
25
|
+
description?: ReactNode;
|
|
26
|
+
artwork?: ReactNode;
|
|
27
|
+
artworkFallback: string;
|
|
28
|
+
live?: boolean;
|
|
29
|
+
notice?: string;
|
|
30
|
+
action?: ReactNode;
|
|
31
|
+
progress?: {
|
|
32
|
+
label: string;
|
|
33
|
+
value: number;
|
|
34
|
+
max: number;
|
|
35
|
+
currentLabel: string;
|
|
36
|
+
endLabel: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** The same media feature geometry for playing, recent and unavailable recordings. */
|
|
40
|
+
declare function MusicFeature({ label, title, description, artwork, artworkFallback, live, notice, action, progress, className, ...rest }: MusicFeatureProps): react.JSX.Element;
|
|
41
|
+
interface MediaCollectionCardProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
42
|
+
title: ReactNode;
|
|
43
|
+
artwork?: ReactNode;
|
|
44
|
+
tag?: string | null;
|
|
45
|
+
description?: string | null;
|
|
46
|
+
metadata?: ReactNode;
|
|
47
|
+
preview: MediaPreviewAction;
|
|
48
|
+
}
|
|
49
|
+
/** A playlist, album or other media collection with one explicit preview action. */
|
|
50
|
+
declare function MediaCollectionCard({ title, artwork, tag, description, metadata, preview, className, ...rest }: MediaCollectionCardProps): react.JSX.Element;
|
|
51
|
+
interface MusicSectionProps extends HTMLAttributes<HTMLElement> {
|
|
52
|
+
title: string;
|
|
53
|
+
caption?: string;
|
|
54
|
+
children: ReactNode;
|
|
55
|
+
layout?: 'list' | 'collections';
|
|
56
|
+
}
|
|
57
|
+
/** A media list's heading, caption and collection layout. */
|
|
58
|
+
declare function MusicSection({ title, caption, children, layout, className, ...rest }: MusicSectionProps): react.JSX.Element;
|
|
59
|
+
|
|
60
|
+
export { MediaCollectionCard, type MediaCollectionCardProps, MediaListRow, type MediaListRowProps, type MediaPreviewAction, MusicFeature, type MusicFeatureProps, MusicSection, type MusicSectionProps };
|