@misoto22/folio 0.0.0 → 0.17.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/Workbench.md +142 -0
- package/dist/agent/WorkflowFigure.md +51 -0
- package/dist/agent/catalog.json +8055 -0
- package/dist/agent/index.md +185 -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 +200 -0
- package/dist/styles.css +98 -0
- package/dist/themes.css +607 -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 +666 -0
- package/dist/tokens.d.ts +205 -0
- package/dist/tokens.js +1056 -0
- package/dist/tokens.json +1055 -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/Workbench/Chronology.d.ts +32 -0
- package/dist/website/Workbench/Chronology.js +32 -0
- package/dist/website/Workbench/Chronology.js.map +1 -0
- package/dist/website/Workbench/ContactRow.d.ts +13 -0
- package/dist/website/Workbench/ContactRow.js +11 -0
- package/dist/website/Workbench/ContactRow.js.map +1 -0
- package/dist/website/Workbench/PhotoMosaic.d.ts +13 -0
- package/dist/website/Workbench/PhotoMosaic.js +15 -0
- package/dist/website/Workbench/PhotoMosaic.js.map +1 -0
- package/dist/website/Workbench/Reveal.d.ts +19 -0
- package/dist/website/Workbench/Reveal.js +29 -0
- package/dist/website/Workbench/Reveal.js.map +1 -0
- package/dist/website/Workbench/ToolStrip.d.ts +18 -0
- package/dist/website/Workbench/ToolStrip.js +15 -0
- package/dist/website/Workbench/ToolStrip.js.map +1 -0
- package/dist/website/Workbench/Workbench.d.ts +23 -0
- package/dist/website/Workbench/Workbench.js +22 -0
- package/dist/website/Workbench/Workbench.js.map +1 -0
- package/dist/website/Workbench/WorkbenchCard.d.ts +29 -0
- package/dist/website/Workbench/WorkbenchCard.js +21 -0
- package/dist/website/Workbench/WorkbenchCard.js.map +1 -0
- package/dist/website/Workbench/WorkbenchEntries.d.ts +22 -0
- package/dist/website/Workbench/WorkbenchEntries.js +24 -0
- package/dist/website/Workbench/WorkbenchEntries.js.map +1 -0
- package/dist/website/Workbench/WorkbenchFigure.d.ts +20 -0
- package/dist/website/Workbench/WorkbenchFigure.js +15 -0
- package/dist/website/Workbench/WorkbenchFigure.js.map +1 -0
- package/dist/website/Workbench/WorkbenchHero.d.ts +24 -0
- package/dist/website/Workbench/WorkbenchHero.js +24 -0
- package/dist/website/Workbench/WorkbenchHero.js.map +1 -0
- package/dist/website/Workbench/theme.d.ts +22 -0
- package/dist/website/Workbench/theme.js +12 -0
- package/dist/website/Workbench/theme.js.map +1 -0
- package/dist/website/index.d.ts +38 -0
- package/dist/website/index.js +32 -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 +20 -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-workbench.css +162 -0
- package/dist/website.css +26 -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 +135 -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 };
|