@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,99 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Badge } from "../../components/Badge/Badge.js";
|
|
3
|
+
import { Heading } from "../../components/Heading/Heading.js";
|
|
4
|
+
import { Tag } from "../../components/Tag/Tag.js";
|
|
5
|
+
import { Text } from "../../components/Text/Text.js";
|
|
6
|
+
import { cn } from "../../lib/cn.js";
|
|
7
|
+
function RecordSection({ title, count, headingId, children, className, ...rest }) {
|
|
8
|
+
return /* @__PURE__ */ jsxs("section", { "aria-labelledby": headingId, className: cn("folio-record-section", className), ...rest, children: [
|
|
9
|
+
/* @__PURE__ */ jsxs("header", { className: "folio-record-section__header", children: [
|
|
10
|
+
/* @__PURE__ */ jsx(Heading, { level: 2, id: headingId, children: title }),
|
|
11
|
+
count && /* @__PURE__ */ jsx(Text, { as: "span", size: "xs", tone: "muted", children: count })
|
|
12
|
+
] }),
|
|
13
|
+
children
|
|
14
|
+
] });
|
|
15
|
+
}
|
|
16
|
+
function CareerRecord({ title, organization, period, periodLabel, location, locationLabel, description, tags, tagsLabel, mark, currentLabel, className, ...rest }) {
|
|
17
|
+
return /* @__PURE__ */ jsxs("article", { className: cn("folio-career-record", className), ...rest, children: [
|
|
18
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-career-record__dates", children: [
|
|
19
|
+
/* @__PURE__ */ jsxs("dl", { children: [
|
|
20
|
+
/* @__PURE__ */ jsx("dt", { className: "sr-only", children: periodLabel }),
|
|
21
|
+
/* @__PURE__ */ jsx("dd", { children: /* @__PURE__ */ jsx(Text, { as: "span", size: "sm", tone: "strong", children: period }) }),
|
|
22
|
+
/* @__PURE__ */ jsx("dt", { className: "sr-only", children: locationLabel }),
|
|
23
|
+
/* @__PURE__ */ jsx("dd", { children: /* @__PURE__ */ jsx(Text, { as: "span", size: "xs", tone: "muted", children: location }) })
|
|
24
|
+
] }),
|
|
25
|
+
currentLabel && /* @__PURE__ */ jsx(Badge, { children: currentLabel })
|
|
26
|
+
] }),
|
|
27
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-career-record__body", children: [
|
|
28
|
+
/* @__PURE__ */ jsx(Heading, { level: 3, size: "heading", children: title }),
|
|
29
|
+
/* @__PURE__ */ jsx("div", { className: "mt-2", children: organization }),
|
|
30
|
+
description.length === 1 && /* @__PURE__ */ jsx(Text, { className: "mb-0 mt-5 max-w-(--measure-record)", children: description[0] }),
|
|
31
|
+
description.length > 1 && /* @__PURE__ */ jsx("ul", { className: "folio-career-record__description", children: description.map((point, index) => /* @__PURE__ */ jsx(Text, { as: "li", children: point }, index)) }),
|
|
32
|
+
tags.length > 0 && /* @__PURE__ */ jsx("ul", { "aria-label": tagsLabel, className: "folio-career-record__tags", children: tags.map((tag, index) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Tag, { children: tag }) }, `${tag}-${index}`)) })
|
|
33
|
+
] }),
|
|
34
|
+
mark && /* @__PURE__ */ jsx("div", { className: "folio-career-record__mark", children: mark })
|
|
35
|
+
] });
|
|
36
|
+
}
|
|
37
|
+
function ProfileSection({ headingId, title, description, children, className, ...rest }) {
|
|
38
|
+
return /* @__PURE__ */ jsxs("section", { "aria-labelledby": headingId, className: cn("folio-profile-section", className), ...rest, children: [
|
|
39
|
+
/* @__PURE__ */ jsxs("header", { className: "folio-profile-section__header", children: [
|
|
40
|
+
/* @__PURE__ */ jsx(Heading, { level: 2, id: headingId, children: title }),
|
|
41
|
+
description && /* @__PURE__ */ jsx(Text, { className: "m-0 max-w-[42rem]", children: description })
|
|
42
|
+
] }),
|
|
43
|
+
children
|
|
44
|
+
] });
|
|
45
|
+
}
|
|
46
|
+
function ProfileNarrative({ headingId, title, pull, paragraphs, action }) {
|
|
47
|
+
return /* @__PURE__ */ jsxs("section", { "aria-labelledby": headingId, className: "folio-profile-narrative", children: [
|
|
48
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
49
|
+
/* @__PURE__ */ jsx(Heading, { level: 2, id: headingId, children: title }),
|
|
50
|
+
/* @__PURE__ */ jsx(Text, { size: "lead", tone: "strong", className: "mb-0 mt-6 max-w-[30ch]", children: pull })
|
|
51
|
+
] }),
|
|
52
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
53
|
+
paragraphs.map((paragraph, index) => /* @__PURE__ */ jsx(Text, { className: "mb-5 mt-0 max-w-(--measure-record)", children: paragraph }, index)),
|
|
54
|
+
action
|
|
55
|
+
] })
|
|
56
|
+
] });
|
|
57
|
+
}
|
|
58
|
+
function ProfileSkills({ groups }) {
|
|
59
|
+
return /* @__PURE__ */ jsx("div", { className: "folio-profile-skills", children: groups.map((group) => /* @__PURE__ */ jsxs("section", { className: "folio-profile-skills__group", children: [
|
|
60
|
+
/* @__PURE__ */ jsx(Heading, { level: 3, size: "item", children: group.title }),
|
|
61
|
+
/* @__PURE__ */ jsx("ul", { className: "folio-profile-skills__items", children: group.items.map((skill) => /* @__PURE__ */ jsxs("li", { children: [
|
|
62
|
+
/* @__PURE__ */ jsxs("span", { className: "folio-profile-skill__icon", "data-invert": skill.invertInDark || void 0, "data-has-dark": Boolean(skill.darkIcon) || void 0, "aria-hidden": true, children: [
|
|
63
|
+
/* @__PURE__ */ jsx("span", { "data-artwork": "light", children: skill.icon }),
|
|
64
|
+
skill.darkIcon && /* @__PURE__ */ jsx("span", { "data-artwork": "dark", children: skill.darkIcon })
|
|
65
|
+
] }),
|
|
66
|
+
/* @__PURE__ */ jsx(Text, { as: "span", size: "sm", tone: "strong", children: skill.label })
|
|
67
|
+
] }, skill.id)) })
|
|
68
|
+
] }, group.id)) });
|
|
69
|
+
}
|
|
70
|
+
function ProfileInterests({ items }) {
|
|
71
|
+
return /* @__PURE__ */ jsx("div", { className: "folio-profile-interests", children: items.map((item) => /* @__PURE__ */ jsxs("article", { children: [
|
|
72
|
+
/* @__PURE__ */ jsx(Heading, { level: 3, children: item.title }),
|
|
73
|
+
/* @__PURE__ */ jsx(Text, { className: "mb-0 mt-4", children: item.description })
|
|
74
|
+
] }, item.id)) });
|
|
75
|
+
}
|
|
76
|
+
function ProfileFigure({ children, caption }) {
|
|
77
|
+
return /* @__PURE__ */ jsxs("figure", { className: "folio-profile-figure", children: [
|
|
78
|
+
/* @__PURE__ */ jsx("div", { className: "folio-profile-figure__image", children }),
|
|
79
|
+
caption && /* @__PURE__ */ jsx(Text, { as: "figcaption", size: "xs", tone: "muted", className: "mt-3", children: caption })
|
|
80
|
+
] });
|
|
81
|
+
}
|
|
82
|
+
function Timeline({ className, ...props }) {
|
|
83
|
+
return /* @__PURE__ */ jsx("div", { className: cn("folio-timeline", className), ...props });
|
|
84
|
+
}
|
|
85
|
+
function TimelineItem({ className, ...props }) {
|
|
86
|
+
return /* @__PURE__ */ jsx("div", { className: cn("folio-timeline__item", className), ...props });
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
CareerRecord,
|
|
90
|
+
ProfileFigure,
|
|
91
|
+
ProfileInterests,
|
|
92
|
+
ProfileNarrative,
|
|
93
|
+
ProfileSection,
|
|
94
|
+
ProfileSkills,
|
|
95
|
+
RecordSection,
|
|
96
|
+
Timeline,
|
|
97
|
+
TimelineItem
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=Timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Timeline/Timeline.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react'\nimport { Badge } from '../../components/Badge/Badge'\nimport { Heading } from '../../components/Heading/Heading'\nimport { Tag } from '../../components/Tag/Tag'\nimport { Text } from '../../components/Text/Text'\nimport { cn } from '../../lib/cn'\n\nexport interface RecordSectionProps extends HTMLAttributes<HTMLElement> {\n title: string\n count?: string\n headingId: string\n children: ReactNode\n}\n\n/** A named ledger section. The host supplies its chronology without reordering. */\nexport function RecordSection({ title, count, headingId, children, className, ...rest }: RecordSectionProps) {\n return <section aria-labelledby={headingId} className={cn('folio-record-section', className)} {...rest}><header className=\"folio-record-section__header\"><Heading level={2} id={headingId}>{title}</Heading>{count && <Text as=\"span\" size=\"xs\" tone=\"muted\">{count}</Text>}</header>{children}</section>\n}\n\nexport interface CareerRecordProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n title: string\n organization: ReactNode\n period: string\n periodLabel: string\n location: string\n locationLabel: string\n description: string[]\n tags: string[]\n tagsLabel: string\n mark?: ReactNode\n currentLabel?: string\n}\n\n/** One dated record, reusable for a role, qualification or other chronology. */\nexport function CareerRecord({ title, organization, period, periodLabel, location, locationLabel, description, tags, tagsLabel, mark, currentLabel, className, ...rest }: CareerRecordProps) {\n return (\n <article className={cn('folio-career-record', className)} {...rest}>\n <div className=\"folio-career-record__dates\"><dl><dt className=\"sr-only\">{periodLabel}</dt><dd><Text as=\"span\" size=\"sm\" tone=\"strong\">{period}</Text></dd><dt className=\"sr-only\">{locationLabel}</dt><dd><Text as=\"span\" size=\"xs\" tone=\"muted\">{location}</Text></dd></dl>{currentLabel && <Badge>{currentLabel}</Badge>}</div>\n <div className=\"folio-career-record__body\"><Heading level={3} size=\"heading\">{title}</Heading><div className=\"mt-2\">{organization}</div>{description.length === 1 && <Text className=\"mb-0 mt-5 max-w-(--measure-record)\">{description[0]}</Text>}{description.length > 1 && <ul className=\"folio-career-record__description\">{description.map((point, index) => <Text as=\"li\" key={index}>{point}</Text>)}</ul>}{tags.length > 0 && <ul aria-label={tagsLabel} className=\"folio-career-record__tags\">{tags.map((tag, index) => <li key={`${tag}-${index}`}><Tag>{tag}</Tag></li>)}</ul>}</div>\n {mark && <div className=\"folio-career-record__mark\">{mark}</div>}\n </article>\n )\n}\n\nexport interface ProfileSectionProps extends HTMLAttributes<HTMLElement> {\n headingId: string\n title: string\n description?: string\n children: ReactNode\n}\n\n/** A profile section follows the same heading and spacing contract as its neighbors. */\nexport function ProfileSection({ headingId, title, description, children, className, ...rest }: ProfileSectionProps) {\n return <section aria-labelledby={headingId} className={cn('folio-profile-section', className)} {...rest}><header className=\"folio-profile-section__header\"><Heading level={2} id={headingId}>{title}</Heading>{description && <Text className=\"m-0 max-w-[42rem]\">{description}</Text>}</header>{children}</section>\n}\n\nexport interface ProfileNarrativeProps {\n headingId: string\n title: string\n pull: string\n paragraphs: string[]\n action?: ReactNode\n}\n\n/** A short introduction with a pull quote and a longer account alongside it. */\nexport function ProfileNarrative({ headingId, title, pull, paragraphs, action }: ProfileNarrativeProps) {\n return <section aria-labelledby={headingId} className=\"folio-profile-narrative\"><div><Heading level={2} id={headingId}>{title}</Heading><Text size=\"lead\" tone=\"strong\" className=\"mb-0 mt-6 max-w-[30ch]\">{pull}</Text></div><div>{paragraphs.map((paragraph, index) => <Text key={index} className=\"mb-5 mt-0 max-w-(--measure-record)\">{paragraph}</Text>)}{action}</div></section>\n}\n\nexport interface ProfileSkill {\n id: string\n label: string\n icon?: ReactNode\n darkIcon?: ReactNode\n invertInDark?: boolean\n}\n\nexport interface ProfileSkillsProps {\n groups: { id: string; title: string; items: ProfileSkill[] }[]\n}\n\n/** Skill labels and theme-aware artwork, supplied by the host's content adapter. */\nexport function ProfileSkills({ groups }: ProfileSkillsProps) {\n return <div className=\"folio-profile-skills\">{groups.map((group) => <section className=\"folio-profile-skills__group\" key={group.id}><Heading level={3} size=\"item\">{group.title}</Heading><ul className=\"folio-profile-skills__items\">{group.items.map((skill) => <li key={skill.id}><span className=\"folio-profile-skill__icon\" data-invert={skill.invertInDark || undefined} data-has-dark={Boolean(skill.darkIcon) || undefined} aria-hidden><span data-artwork=\"light\">{skill.icon}</span>{skill.darkIcon && <span data-artwork=\"dark\">{skill.darkIcon}</span>}</span><Text as=\"span\" size=\"sm\" tone=\"strong\">{skill.label}</Text></li>)}</ul></section>)}</div>\n}\n\nexport interface ProfileInterestsProps {\n items: { id: string; title: string; description: string }[]\n}\n\n/** A small set of interests or areas of practice. */\nexport function ProfileInterests({ items }: ProfileInterestsProps) {\n return <div className=\"folio-profile-interests\">{items.map((item) => <article key={item.id}><Heading level={3}>{item.title}</Heading><Text className=\"mb-0 mt-4\">{item.description}</Text></article>)}</div>\n}\n\nexport interface ProfileFigureProps {\n children: ReactNode\n caption?: string\n}\n\n/** Source-faithful profile photography: retain the supplied image's aspect ratio. */\nexport function ProfileFigure({ children, caption }: ProfileFigureProps) {\n return <figure className=\"folio-profile-figure\"><div className=\"folio-profile-figure__image\">{children}</div>{caption && <Text as=\"figcaption\" size=\"xs\" tone=\"muted\" className=\"mt-3\">{caption}</Text>}</figure>\n}\n\n/** An ordered collection frame. No sorting or business data is owned here. */\nexport function Timeline({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('folio-timeline', className)} {...props} />\n}\n\n/** A record mount, isolated so motion can follow the shared data-motion axis. */\nexport function TimelineItem({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('folio-timeline__item', className)} {...props} />\n}\n"],"mappings":"AAgB0G,SAAiD,KAAjD;AAf1G,SAAS,aAAa;AACtB,SAAS,eAAe;AACxB,SAAS,WAAW;AACpB,SAAS,YAAY;AACrB,SAAS,UAAU;AAUZ,SAAS,cAAc,EAAE,OAAO,OAAO,WAAW,UAAU,WAAW,GAAG,KAAK,GAAuB;AAC3G,SAAO,qBAAC,aAAQ,mBAAiB,WAAW,WAAW,GAAG,wBAAwB,SAAS,GAAI,GAAG,MAAM;AAAA,yBAAC,YAAO,WAAU,gCAA+B;AAAA,0BAAC,WAAQ,OAAO,GAAG,IAAI,WAAY,iBAAM;AAAA,MAAW,SAAS,oBAAC,QAAK,IAAG,QAAO,MAAK,MAAK,MAAK,SAAS,iBAAM;AAAA,OAAQ;AAAA,IAAU;AAAA,KAAS;AACjS;AAiBO,SAAS,aAAa,EAAE,OAAO,cAAc,QAAQ,aAAa,UAAU,eAAe,aAAa,MAAM,WAAW,MAAM,cAAc,WAAW,GAAG,KAAK,GAAsB;AAC3L,SACE,qBAAC,aAAQ,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,MAC5D;AAAA,yBAAC,SAAI,WAAU,8BAA6B;AAAA,2BAAC,QAAG;AAAA,4BAAC,QAAG,WAAU,WAAW,uBAAY;AAAA,QAAK,oBAAC,QAAG,8BAAC,QAAK,IAAG,QAAO,MAAK,MAAK,MAAK,UAAU,kBAAO,GAAO;AAAA,QAAK,oBAAC,QAAG,WAAU,WAAW,yBAAc;AAAA,QAAK,oBAAC,QAAG,8BAAC,QAAK,IAAG,QAAO,MAAK,MAAK,MAAK,SAAS,oBAAS,GAAO;AAAA,SAAK;AAAA,MAAM,gBAAgB,oBAAC,SAAO,wBAAa;AAAA,OAAS;AAAA,IAC3T,qBAAC,SAAI,WAAU,6BAA4B;AAAA,0BAAC,WAAQ,OAAO,GAAG,MAAK,WAAW,iBAAM;AAAA,MAAU,oBAAC,SAAI,WAAU,QAAQ,wBAAa;AAAA,MAAO,YAAY,WAAW,KAAK,oBAAC,QAAK,WAAU,sCAAsC,sBAAY,CAAC,GAAE;AAAA,MAAS,YAAY,SAAS,KAAK,oBAAC,QAAG,WAAU,oCAAoC,sBAAY,IAAI,CAAC,OAAO,UAAU,oBAAC,QAAK,IAAG,MAAkB,mBAAR,KAAc,CAAO,GAAE;AAAA,MAAO,KAAK,SAAS,KAAK,oBAAC,QAAG,cAAY,WAAW,WAAU,6BAA6B,eAAK,IAAI,CAAC,KAAK,UAAU,oBAAC,QAA2B,8BAAC,OAAK,eAAI,KAA7B,GAAG,GAAG,IAAI,KAAK,EAAoB,CAAK,GAAE;AAAA,OAAM;AAAA,IACxjB,QAAQ,oBAAC,SAAI,WAAU,6BAA6B,gBAAK;AAAA,KAC5D;AAEJ;AAUO,SAAS,eAAe,EAAE,WAAW,OAAO,aAAa,UAAU,WAAW,GAAG,KAAK,GAAwB;AACnH,SAAO,qBAAC,aAAQ,mBAAiB,WAAW,WAAW,GAAG,yBAAyB,SAAS,GAAI,GAAG,MAAM;AAAA,yBAAC,YAAO,WAAU,iCAAgC;AAAA,0BAAC,WAAQ,OAAO,GAAG,IAAI,WAAY,iBAAM;AAAA,MAAW,eAAe,oBAAC,QAAK,WAAU,qBAAqB,uBAAY;AAAA,OAAQ;AAAA,IAAU;AAAA,KAAS;AAC5S;AAWO,SAAS,iBAAiB,EAAE,WAAW,OAAO,MAAM,YAAY,OAAO,GAA0B;AACtG,SAAO,qBAAC,aAAQ,mBAAiB,WAAW,WAAU,2BAA0B;AAAA,yBAAC,SAAI;AAAA,0BAAC,WAAQ,OAAO,GAAG,IAAI,WAAY,iBAAM;AAAA,MAAU,oBAAC,QAAK,MAAK,QAAO,MAAK,UAAS,WAAU,0BAA0B,gBAAK;AAAA,OAAO;AAAA,IAAM,qBAAC,SAAK;AAAA,iBAAW,IAAI,CAAC,WAAW,UAAU,oBAAC,QAAiB,WAAU,sCAAsC,uBAAvD,KAAiE,CAAO;AAAA,MAAG;AAAA,OAAO;AAAA,KAAM;AAC9W;AAeO,SAAS,cAAc,EAAE,OAAO,GAAuB;AAC5D,SAAO,oBAAC,SAAI,WAAU,wBAAwB,iBAAO,IAAI,CAAC,UAAU,qBAAC,aAAQ,WAAU,+BAA6C;AAAA,wBAAC,WAAQ,OAAO,GAAG,MAAK,QAAQ,gBAAM,OAAM;AAAA,IAAU,oBAAC,QAAG,WAAU,+BAA+B,gBAAM,MAAM,IAAI,CAAC,UAAU,qBAAC,QAAkB;AAAA,2BAAC,UAAK,WAAU,6BAA4B,eAAa,MAAM,gBAAgB,QAAW,iBAAe,QAAQ,MAAM,QAAQ,KAAK,QAAW,eAAW,MAAC;AAAA,4BAAC,UAAK,gBAAa,SAAS,gBAAM,MAAK;AAAA,QAAQ,MAAM,YAAY,oBAAC,UAAK,gBAAa,QAAQ,gBAAM,UAAS;AAAA,SAAQ;AAAA,MAAO,oBAAC,QAAK,IAAG,QAAO,MAAK,MAAK,MAAK,UAAU,gBAAM,OAAM;AAAA,SAApV,MAAM,EAAqV,CAAK,GAAE;AAAA,OAAnf,MAAM,EAAkf,CAAU,GAAE;AAChoB;AAOO,SAAS,iBAAiB,EAAE,MAAM,GAA0B;AACjE,SAAO,oBAAC,SAAI,WAAU,2BAA2B,gBAAM,IAAI,CAAC,SAAS,qBAAC,aAAsB;AAAA,wBAAC,WAAQ,OAAO,GAAI,eAAK,OAAM;AAAA,IAAU,oBAAC,QAAK,WAAU,aAAa,eAAK,aAAY;AAAA,OAAhG,KAAK,EAAkG,CAAU,GAAE;AACxM;AAQO,SAAS,cAAc,EAAE,UAAU,QAAQ,GAAuB;AACvE,SAAO,qBAAC,YAAO,WAAU,wBAAuB;AAAA,wBAAC,SAAI,WAAU,+BAA+B,UAAS;AAAA,IAAO,WAAW,oBAAC,QAAK,IAAG,cAAa,MAAK,MAAK,MAAK,SAAQ,WAAU,QAAQ,mBAAQ;AAAA,KAAQ;AAC1M;AAGO,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAAmC;AAChF,SAAO,oBAAC,SAAI,WAAW,GAAG,kBAAkB,SAAS,GAAI,GAAG,OAAO;AACrE;AAGO,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAAmC;AACpF,SAAO,oBAAC,SAAI,WAAW,GAAG,wBAAwB,SAAS,GAAI,GAAG,OAAO;AAC3E;","names":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface ChronologyItem {
|
|
5
|
+
id: string;
|
|
6
|
+
title: ReactNode;
|
|
7
|
+
organisation?: ReactNode;
|
|
8
|
+
/** Decimal years, e.g. 2019.5 for July 2019. */
|
|
9
|
+
start: number;
|
|
10
|
+
/** Decimal years; omit for an item that is still going. */
|
|
11
|
+
end?: number;
|
|
12
|
+
kind: 'role' | 'study';
|
|
13
|
+
}
|
|
14
|
+
interface ChronologyProps {
|
|
15
|
+
/** Accessible name of the chart. */
|
|
16
|
+
label: string;
|
|
17
|
+
/** First and last year on the axis, inclusive. */
|
|
18
|
+
from: number;
|
|
19
|
+
to: number;
|
|
20
|
+
items: ChronologyItem[];
|
|
21
|
+
/** Text marking a current item, such as "Now". */
|
|
22
|
+
currentLabel?: ReactNode;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Roles and studies as bars on one year axis, one lane each. Roles are filled,
|
|
26
|
+
* studies outlined, and a current role is ink with an accent end. The bars are
|
|
27
|
+
* a list underneath, so a screen reader hears titles and dates rather than
|
|
28
|
+
* geometry.
|
|
29
|
+
*/
|
|
30
|
+
declare function Chronology({ label, from, to, items, currentLabel }: ChronologyProps): react.JSX.Element;
|
|
31
|
+
|
|
32
|
+
export { Chronology, type ChronologyItem, type ChronologyProps };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
function Chronology({ label, from, to, items, currentLabel }) {
|
|
3
|
+
const span = to + 1 - from;
|
|
4
|
+
const years = Array.from({ length: to - from + 1 }, (_, index) => from + index);
|
|
5
|
+
const position = (value) => `${((value - from) / span * 100).toFixed(3)}%`;
|
|
6
|
+
return /* @__PURE__ */ jsxs("figure", { className: "folio-wb-chronology", "aria-label": label, children: [
|
|
7
|
+
/* @__PURE__ */ jsx("ol", { children: items.map((item) => {
|
|
8
|
+
const current = item.end === void 0;
|
|
9
|
+
const align = current || (item.start - from) / span >= 0.4 ? "end" : "start";
|
|
10
|
+
const style = { "--start": position(item.start), "--end": position(item.end ?? to + 1) };
|
|
11
|
+
return /* @__PURE__ */ jsxs("li", { "data-kind": item.kind, "data-current": current || void 0, "data-align": align, style, children: [
|
|
12
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
13
|
+
/* @__PURE__ */ jsx("span", { children: item.title }),
|
|
14
|
+
item.organisation && /* @__PURE__ */ jsxs("span", { className: "folio-wb-chronology-org", children: [
|
|
15
|
+
" \xB7 ",
|
|
16
|
+
item.organisation
|
|
17
|
+
] }),
|
|
18
|
+
current && currentLabel && /* @__PURE__ */ jsxs("span", { className: "folio-wb-chronology-now", children: [
|
|
19
|
+
" \xB7 ",
|
|
20
|
+
currentLabel
|
|
21
|
+
] })
|
|
22
|
+
] }),
|
|
23
|
+
/* @__PURE__ */ jsx("span", { className: "folio-wb-chronology-bar", "aria-hidden": true })
|
|
24
|
+
] }, item.id);
|
|
25
|
+
}) }),
|
|
26
|
+
/* @__PURE__ */ jsx("div", { className: "folio-wb-chronology-axis", "aria-hidden": true, children: years.map((year) => /* @__PURE__ */ jsx("span", { children: year }, year)) })
|
|
27
|
+
] });
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
Chronology
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=Chronology.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Workbench/Chronology.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode } from 'react'\n\nexport interface ChronologyItem {\n id: string\n title: ReactNode\n organisation?: ReactNode\n /** Decimal years, e.g. 2019.5 for July 2019. */\n start: number\n /** Decimal years; omit for an item that is still going. */\n end?: number\n kind: 'role' | 'study'\n}\n\nexport interface ChronologyProps {\n /** Accessible name of the chart. */\n label: string\n /** First and last year on the axis, inclusive. */\n from: number\n to: number\n items: ChronologyItem[]\n /** Text marking a current item, such as \"Now\". */\n currentLabel?: ReactNode\n}\n\n/**\n * Roles and studies as bars on one year axis, one lane each. Roles are filled,\n * studies outlined, and a current role is ink with an accent end. The bars are\n * a list underneath, so a screen reader hears titles and dates rather than\n * geometry.\n */\nexport function Chronology({ label, from, to, items, currentLabel }: ChronologyProps) {\n const span = to + 1 - from\n const years = Array.from({ length: to - from + 1 }, (_, index) => from + index)\n const position = (value: number) => `${(((value - from) / span) * 100).toFixed(3)}%`\n return (\n <figure className=\"folio-wb-chronology\" aria-label={label}>\n <ol>\n {items.map((item) => {\n const current = item.end === undefined\n // A bar that starts in the later part of the axis hangs its label from its end,\n // so a long title never runs off the right of the axis.\n const align = current || (item.start - from) / span >= 0.4 ? 'end' : 'start'\n const style = { '--start': position(item.start), '--end': position(item.end ?? to + 1) } as CSSProperties\n return (\n <li key={item.id} data-kind={item.kind} data-current={current || undefined} data-align={align} style={style}>\n <p>\n <span>{item.title}</span>\n {item.organisation && <span className=\"folio-wb-chronology-org\"> · {item.organisation}</span>}\n {current && currentLabel && <span className=\"folio-wb-chronology-now\"> · {currentLabel}</span>}\n </p>\n <span className=\"folio-wb-chronology-bar\" aria-hidden />\n </li>\n )\n })}\n </ol>\n <div className=\"folio-wb-chronology-axis\" aria-hidden>\n {years.map((year) => (\n <span key={year}>{year}</span>\n ))}\n </div>\n </figure>\n )\n}\n"],"mappings":"AA8CgB,cACsB,YADtB;AAhBT,SAAS,WAAW,EAAE,OAAO,MAAM,IAAI,OAAO,aAAa,GAAoB;AACpF,QAAM,OAAO,KAAK,IAAI;AACtB,QAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAAC,GAAG,UAAU,OAAO,KAAK;AAC9E,QAAM,WAAW,CAAC,UAAkB,KAAM,QAAQ,QAAQ,OAAQ,KAAK,QAAQ,CAAC,CAAC;AACjF,SACE,qBAAC,YAAO,WAAU,uBAAsB,cAAY,OAClD;AAAA,wBAAC,QACE,gBAAM,IAAI,CAAC,SAAS;AACnB,YAAM,UAAU,KAAK,QAAQ;AAG7B,YAAM,QAAQ,YAAY,KAAK,QAAQ,QAAQ,QAAQ,MAAM,QAAQ;AACrE,YAAM,QAAQ,EAAE,WAAW,SAAS,KAAK,KAAK,GAAG,SAAS,SAAS,KAAK,OAAO,KAAK,CAAC,EAAE;AACvF,aACE,qBAAC,QAAiB,aAAW,KAAK,MAAM,gBAAc,WAAW,QAAW,cAAY,OAAO,OAC7F;AAAA,6BAAC,OACC;AAAA,8BAAC,UAAM,eAAK,OAAM;AAAA,UACjB,KAAK,gBAAgB,qBAAC,UAAK,WAAU,2BAA0B;AAAA;AAAA,YAAI,KAAK;AAAA,aAAa;AAAA,UACrF,WAAW,gBAAgB,qBAAC,UAAK,WAAU,2BAA0B;AAAA;AAAA,YAAI;AAAA,aAAa;AAAA,WACzF;AAAA,QACA,oBAAC,UAAK,WAAU,2BAA0B,eAAW,MAAC;AAAA,WAN/C,KAAK,EAOd;AAAA,IAEJ,CAAC,GACH;AAAA,IACA,oBAAC,SAAI,WAAU,4BAA2B,eAAW,MAClD,gBAAM,IAAI,CAAC,SACV,oBAAC,UAAiB,kBAAP,IAAY,CACxB,GACH;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface ContactRowProps {
|
|
5
|
+
/** The address, set large — usually a `mailto:` link. */
|
|
6
|
+
address: ReactNode;
|
|
7
|
+
/** One button beside it. */
|
|
8
|
+
action?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
/** An address and one action on a single line of the content subgrid. */
|
|
11
|
+
declare function ContactRow({ address, action }: ContactRowProps): react.JSX.Element;
|
|
12
|
+
|
|
13
|
+
export { ContactRow, type ContactRowProps };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
function ContactRow({ address, action }) {
|
|
3
|
+
return /* @__PURE__ */ jsxs("div", { className: "folio-wb-contact", children: [
|
|
4
|
+
/* @__PURE__ */ jsx("div", { className: "folio-wb-contact-address", children: address }),
|
|
5
|
+
action && /* @__PURE__ */ jsx("div", { className: "folio-wb-contact-action", children: action })
|
|
6
|
+
] });
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
ContactRow
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=ContactRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Workbench/ContactRow.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport interface ContactRowProps {\n /** The address, set large — usually a `mailto:` link. */\n address: ReactNode\n /** One button beside it. */\n action?: ReactNode\n}\n\n/** An address and one action on a single line of the content subgrid. */\nexport function ContactRow({ address, action }: ContactRowProps) {\n return (\n <div className=\"folio-wb-contact\">\n <div className=\"folio-wb-contact-address\">{address}</div>\n {action && <div className=\"folio-wb-contact-action\">{action}</div>}\n </div>\n )\n}\n"],"mappings":"AAYI,SACE,KADF;AAFG,SAAS,WAAW,EAAE,SAAS,OAAO,GAAoB;AAC/D,SACE,qBAAC,SAAI,WAAU,oBACb;AAAA,wBAAC,SAAI,WAAU,4BAA4B,mBAAQ;AAAA,IAClD,UAAU,oBAAC,SAAI,WAAU,2BAA2B,kBAAO;AAAA,KAC9D;AAEJ;","names":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface PhotoMosaicProps {
|
|
5
|
+
/** Exactly the photographs to show: the first is the large one, the next four fill a 2×2 beside it. */
|
|
6
|
+
children: ReactNode[];
|
|
7
|
+
/** Caption under the large photograph. */
|
|
8
|
+
caption?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
/** One large photograph beside a 2×2 of smaller ones, all on the content subgrid. */
|
|
11
|
+
declare function PhotoMosaic({ children, caption }: PhotoMosaicProps): react.JSX.Element;
|
|
12
|
+
|
|
13
|
+
export { PhotoMosaic, type PhotoMosaicProps };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
function PhotoMosaic({ children, caption }) {
|
|
3
|
+
const [lead, ...rest] = children;
|
|
4
|
+
return /* @__PURE__ */ jsxs("div", { className: "folio-wb-mosaic", children: [
|
|
5
|
+
/* @__PURE__ */ jsxs("figure", { className: "folio-wb-mosaic-lead", children: [
|
|
6
|
+
/* @__PURE__ */ jsx("div", { className: "folio-wb-mosaic-frame", children: lead }),
|
|
7
|
+
caption && /* @__PURE__ */ jsx("figcaption", { children: caption })
|
|
8
|
+
] }),
|
|
9
|
+
rest.slice(0, 4).map((child, index) => /* @__PURE__ */ jsx("div", { className: "folio-wb-mosaic-frame", children: child }, index))
|
|
10
|
+
] });
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
PhotoMosaic
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=PhotoMosaic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Workbench/PhotoMosaic.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport interface PhotoMosaicProps {\n /** Exactly the photographs to show: the first is the large one, the next four fill a 2×2 beside it. */\n children: ReactNode[]\n /** Caption under the large photograph. */\n caption?: ReactNode\n}\n\n/** One large photograph beside a 2×2 of smaller ones, all on the content subgrid. */\nexport function PhotoMosaic({ children, caption }: PhotoMosaicProps) {\n const [lead, ...rest] = children\n return (\n <div className=\"folio-wb-mosaic\">\n <figure className=\"folio-wb-mosaic-lead\">\n <div className=\"folio-wb-mosaic-frame\">{lead}</div>\n {caption && <figcaption>{caption}</figcaption>}\n </figure>\n {rest.slice(0, 4).map((child, index) => (\n <div key={index} className=\"folio-wb-mosaic-frame\">\n {child}\n </div>\n ))}\n </div>\n )\n}\n"],"mappings":"AAcM,SACE,KADF;AAJC,SAAS,YAAY,EAAE,UAAU,QAAQ,GAAqB;AACnE,QAAM,CAAC,MAAM,GAAG,IAAI,IAAI;AACxB,SACE,qBAAC,SAAI,WAAU,mBACb;AAAA,yBAAC,YAAO,WAAU,wBAChB;AAAA,0BAAC,SAAI,WAAU,yBAAyB,gBAAK;AAAA,MAC5C,WAAW,oBAAC,gBAAY,mBAAQ;AAAA,OACnC;AAAA,IACC,KAAK,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,UAC5B,oBAAC,SAAgB,WAAU,yBACxB,mBADO,KAEV,CACD;AAAA,KACH;AAEJ;","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactElement } from 'react';
|
|
3
|
+
|
|
4
|
+
interface RevealProps {
|
|
5
|
+
/** One element; it keeps its own tag and receives the reveal state. */
|
|
6
|
+
children: ReactElement;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Fades and lifts its child the first time it scrolls into view.
|
|
10
|
+
*
|
|
11
|
+
* The server renders the child visible. Only after hydration, and only for an
|
|
12
|
+
* element that starts below the fold, is it hidden and then revealed — so a
|
|
13
|
+
* page without JavaScript, a crawler and anything already on screen never see
|
|
14
|
+
* an empty frame. Reduced motion skips the whole thing, and the duration is the
|
|
15
|
+
* motion axis's own, so `data-motion="still"` makes it instant.
|
|
16
|
+
*/
|
|
17
|
+
declare function Reveal({ children }: RevealProps): react.JSX.Element;
|
|
18
|
+
|
|
19
|
+
export { Reveal, type RevealProps };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
4
|
+
import { useEffect, useRef } from "react";
|
|
5
|
+
function Reveal({ children }) {
|
|
6
|
+
const ref = useRef(null);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
const node = ref.current;
|
|
9
|
+
if (!node || typeof IntersectionObserver === "undefined") return;
|
|
10
|
+
if (window.matchMedia?.("(prefers-reduced-motion: reduce)").matches) return;
|
|
11
|
+
if (node.getBoundingClientRect().top < window.innerHeight) return;
|
|
12
|
+
node.dataset.reveal = "hidden";
|
|
13
|
+
const observer = new IntersectionObserver(
|
|
14
|
+
(entries) => {
|
|
15
|
+
if (!entries.some((entry) => entry.isIntersecting)) return;
|
|
16
|
+
node.dataset.reveal = "shown";
|
|
17
|
+
observer.disconnect();
|
|
18
|
+
},
|
|
19
|
+
{ rootMargin: "0px 0px -10% 0px" }
|
|
20
|
+
);
|
|
21
|
+
observer.observe(node);
|
|
22
|
+
return () => observer.disconnect();
|
|
23
|
+
}, []);
|
|
24
|
+
return /* @__PURE__ */ jsx(Slot, { ref, className: "folio-wb-reveal", children });
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
Reveal
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=Reveal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Workbench/Reveal.tsx"],"sourcesContent":["'use client'\n\nimport { Slot } from '@radix-ui/react-slot'\nimport { useEffect, useRef, type ReactElement } from 'react'\n\nexport interface RevealProps {\n /** One element; it keeps its own tag and receives the reveal state. */\n children: ReactElement\n}\n\n/**\n * Fades and lifts its child the first time it scrolls into view.\n *\n * The server renders the child visible. Only after hydration, and only for an\n * element that starts below the fold, is it hidden and then revealed — so a\n * page without JavaScript, a crawler and anything already on screen never see\n * an empty frame. Reduced motion skips the whole thing, and the duration is the\n * motion axis's own, so `data-motion=\"still\"` makes it instant.\n */\nexport function Reveal({ children }: RevealProps) {\n const ref = useRef<HTMLElement>(null)\n useEffect(() => {\n const node = ref.current\n if (!node || typeof IntersectionObserver === 'undefined') return\n if (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches) return\n if (node.getBoundingClientRect().top < window.innerHeight) return\n node.dataset.reveal = 'hidden'\n const observer = new IntersectionObserver(\n (entries) => {\n if (!entries.some((entry) => entry.isIntersecting)) return\n node.dataset.reveal = 'shown'\n observer.disconnect()\n },\n { rootMargin: '0px 0px -10% 0px' },\n )\n observer.observe(node)\n return () => observer.disconnect()\n }, [])\n return <Slot ref={ref} className=\"folio-wb-reveal\">{children}</Slot>\n}\n"],"mappings":";AAsCS;AApCT,SAAS,YAAY;AACrB,SAAS,WAAW,cAAiC;AAgB9C,SAAS,OAAO,EAAE,SAAS,GAAgB;AAChD,QAAM,MAAM,OAAoB,IAAI;AACpC,YAAU,MAAM;AACd,UAAM,OAAO,IAAI;AACjB,QAAI,CAAC,QAAQ,OAAO,yBAAyB,YAAa;AAC1D,QAAI,OAAO,aAAa,kCAAkC,EAAE,QAAS;AACrE,QAAI,KAAK,sBAAsB,EAAE,MAAM,OAAO,YAAa;AAC3D,SAAK,QAAQ,SAAS;AACtB,UAAM,WAAW,IAAI;AAAA,MACnB,CAAC,YAAY;AACX,YAAI,CAAC,QAAQ,KAAK,CAAC,UAAU,MAAM,cAAc,EAAG;AACpD,aAAK,QAAQ,SAAS;AACtB,iBAAS,WAAW;AAAA,MACtB;AAAA,MACA,EAAE,YAAY,mBAAmB;AAAA,IACnC;AACA,aAAS,QAAQ,IAAI;AACrB,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,CAAC;AACL,SAAO,oBAAC,QAAK,KAAU,WAAU,mBAAmB,UAAS;AAC/D;","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface ToolStripItem {
|
|
5
|
+
id: string;
|
|
6
|
+
/** The tool's name; it is the tile's accessible label and tooltip. */
|
|
7
|
+
name: string;
|
|
8
|
+
/** A monochrome mark drawn in `currentColor`. */
|
|
9
|
+
icon: ReactNode;
|
|
10
|
+
}
|
|
11
|
+
interface ToolStripProps {
|
|
12
|
+
label: ReactNode;
|
|
13
|
+
items: ToolStripItem[];
|
|
14
|
+
}
|
|
15
|
+
/** A row of equal tiles, one monochrome tool mark each, under a centred caption. */
|
|
16
|
+
declare function ToolStrip({ label, items }: ToolStripProps): react.JSX.Element | null;
|
|
17
|
+
|
|
18
|
+
export { ToolStrip, type ToolStripItem, type ToolStripProps };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
function ToolStrip({ label, items }) {
|
|
3
|
+
if (!items.length) return null;
|
|
4
|
+
return /* @__PURE__ */ jsxs("section", { className: "folio-wb-tools", "aria-label": typeof label === "string" ? label : void 0, children: [
|
|
5
|
+
/* @__PURE__ */ jsx("p", { className: "folio-wb-tools-label", children: label }),
|
|
6
|
+
/* @__PURE__ */ jsx("ul", { children: items.map((item) => /* @__PURE__ */ jsxs("li", { title: item.name, children: [
|
|
7
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": true, children: item.icon }),
|
|
8
|
+
/* @__PURE__ */ jsx("span", { className: "folio-wb-visually-hidden", children: item.name })
|
|
9
|
+
] }, item.id)) })
|
|
10
|
+
] });
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
ToolStrip
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=ToolStrip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Workbench/ToolStrip.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport interface ToolStripItem {\n id: string\n /** The tool's name; it is the tile's accessible label and tooltip. */\n name: string\n /** A monochrome mark drawn in `currentColor`. */\n icon: ReactNode\n}\n\nexport interface ToolStripProps {\n label: ReactNode\n items: ToolStripItem[]\n}\n\n/** A row of equal tiles, one monochrome tool mark each, under a centred caption. */\nexport function ToolStrip({ label, items }: ToolStripProps) {\n if (!items.length) return null\n return (\n <section className=\"folio-wb-tools\" aria-label={typeof label === 'string' ? label : undefined}>\n <p className=\"folio-wb-tools-label\">{label}</p>\n <ul>\n {items.map((item) => (\n <li key={item.id} title={item.name}>\n <span aria-hidden>{item.icon}</span>\n <span className=\"folio-wb-visually-hidden\">{item.name}</span>\n </li>\n ))}\n </ul>\n </section>\n )\n}\n"],"mappings":"AAoBM,cAGI,YAHJ;AAJC,SAAS,UAAU,EAAE,OAAO,MAAM,GAAmB;AAC1D,MAAI,CAAC,MAAM,OAAQ,QAAO;AAC1B,SACE,qBAAC,aAAQ,WAAU,kBAAiB,cAAY,OAAO,UAAU,WAAW,QAAQ,QAClF;AAAA,wBAAC,OAAE,WAAU,wBAAwB,iBAAM;AAAA,IAC3C,oBAAC,QACE,gBAAM,IAAI,CAAC,SACV,qBAAC,QAAiB,OAAO,KAAK,MAC5B;AAAA,0BAAC,UAAK,eAAW,MAAE,eAAK,MAAK;AAAA,MAC7B,oBAAC,UAAK,WAAU,4BAA4B,eAAK,MAAK;AAAA,SAF/C,KAAK,EAGd,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface WorkbenchSectionProps {
|
|
5
|
+
/** The heading's first, ink-coloured clause. */
|
|
6
|
+
title: ReactNode;
|
|
7
|
+
/** The muted continuation that follows the title in the same line. */
|
|
8
|
+
lead?: ReactNode;
|
|
9
|
+
/** One accent link under the heading, such as "All projects →". */
|
|
10
|
+
action?: ReactNode;
|
|
11
|
+
/** Heading level; sections on a page are h2. */
|
|
12
|
+
level?: 2 | 3;
|
|
13
|
+
id?: string;
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The Workbench section: a hairline, a two-tone heading in the first four
|
|
18
|
+
* columns, and the content on an eight-column subgrid beside it. Every section
|
|
19
|
+
* on a Workbench page uses this one rhythm, which is what keeps them aligned.
|
|
20
|
+
*/
|
|
21
|
+
declare function WorkbenchSection({ title, lead, action, level, id, children }: WorkbenchSectionProps): react.JSX.Element;
|
|
22
|
+
|
|
23
|
+
export { WorkbenchSection, type WorkbenchSectionProps };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Reveal } from "./Reveal.js";
|
|
3
|
+
function WorkbenchSection({ title, lead, action, level = 2, id, children }) {
|
|
4
|
+
const Heading = level === 2 ? "h2" : "h3";
|
|
5
|
+
return /* @__PURE__ */ jsx(Reveal, { children: /* @__PURE__ */ jsxs("section", { className: "folio-wb-section", id, children: [
|
|
6
|
+
/* @__PURE__ */ jsxs("div", { className: "folio-wb-section-head", children: [
|
|
7
|
+
/* @__PURE__ */ jsxs(Heading, { className: "folio-wb-heading", children: [
|
|
8
|
+
/* @__PURE__ */ jsx("span", { children: title }),
|
|
9
|
+
lead && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
10
|
+
" ",
|
|
11
|
+
/* @__PURE__ */ jsx("span", { className: "folio-wb-heading-lead", children: lead })
|
|
12
|
+
] })
|
|
13
|
+
] }),
|
|
14
|
+
action && /* @__PURE__ */ jsx("div", { className: "folio-wb-section-action", children: action })
|
|
15
|
+
] }),
|
|
16
|
+
/* @__PURE__ */ jsx("div", { className: "folio-wb-section-body", children })
|
|
17
|
+
] }) });
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
WorkbenchSection
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=Workbench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Workbench/Workbench.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { Reveal } from './Reveal'\n\nexport interface WorkbenchSectionProps {\n /** The heading's first, ink-coloured clause. */\n title: ReactNode\n /** The muted continuation that follows the title in the same line. */\n lead?: ReactNode\n /** One accent link under the heading, such as \"All projects →\". */\n action?: ReactNode\n /** Heading level; sections on a page are h2. */\n level?: 2 | 3\n id?: string\n children: ReactNode\n}\n\n/**\n * The Workbench section: a hairline, a two-tone heading in the first four\n * columns, and the content on an eight-column subgrid beside it. Every section\n * on a Workbench page uses this one rhythm, which is what keeps them aligned.\n */\nexport function WorkbenchSection({ title, lead, action, level = 2, id, children }: WorkbenchSectionProps) {\n const Heading = level === 2 ? 'h2' : 'h3'\n return (\n <Reveal>\n <section className=\"folio-wb-section\" id={id}>\n <div className=\"folio-wb-section-head\">\n <Heading className=\"folio-wb-heading\">\n <span>{title}</span>\n {lead && <> <span className=\"folio-wb-heading-lead\">{lead}</span></>}\n </Heading>\n {action && <div className=\"folio-wb-section-action\">{action}</div>}\n </div>\n <div className=\"folio-wb-section-body\">{children}</div>\n </section>\n </Reveal>\n )\n}\n"],"mappings":"AA4BY,SACS,UADT,KACS,YADT;AA3BZ,SAAS,cAAc;AAoBhB,SAAS,iBAAiB,EAAE,OAAO,MAAM,QAAQ,QAAQ,GAAG,IAAI,SAAS,GAA0B;AACxG,QAAM,UAAU,UAAU,IAAI,OAAO;AACrC,SACE,oBAAC,UACC,+BAAC,aAAQ,WAAU,oBAAmB,IACpC;AAAA,yBAAC,SAAI,WAAU,yBACb;AAAA,2BAAC,WAAQ,WAAU,oBACjB;AAAA,4BAAC,UAAM,iBAAM;AAAA,QACZ,QAAQ,iCAAE;AAAA;AAAA,UAAC,oBAAC,UAAK,WAAU,yBAAyB,gBAAK;AAAA,WAAO;AAAA,SACnE;AAAA,MACC,UAAU,oBAAC,SAAI,WAAU,2BAA2B,kBAAO;AAAA,OAC9D;AAAA,IACA,oBAAC,SAAI,WAAU,yBAAyB,UAAS;AAAA,KACnD,GACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface WorkbenchCardProps {
|
|
5
|
+
/** A cover image, or a `WorkbenchTile` when there is no picture. */
|
|
6
|
+
cover: ReactNode;
|
|
7
|
+
/** The title, usually a link; the whole card becomes its hit area. */
|
|
8
|
+
title: ReactNode;
|
|
9
|
+
description?: ReactNode;
|
|
10
|
+
meta?: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* An image-led record. The title's link is stretched over the card, so the
|
|
14
|
+
* card is one target without nesting interactive elements.
|
|
15
|
+
*/
|
|
16
|
+
declare function WorkbenchCard({ cover, title, description, meta }: WorkbenchCardProps): react.JSX.Element;
|
|
17
|
+
interface WorkbenchCardGridProps {
|
|
18
|
+
children: ReactNode;
|
|
19
|
+
}
|
|
20
|
+
/** Two cards per row on the content subgrid, one on a phone. */
|
|
21
|
+
declare function WorkbenchCardGrid({ children }: WorkbenchCardGridProps): react.JSX.Element;
|
|
22
|
+
interface WorkbenchTileProps {
|
|
23
|
+
/** Large word set on the tile, such as a product name. */
|
|
24
|
+
label: ReactNode;
|
|
25
|
+
}
|
|
26
|
+
/** A typographic stand-in cover: ink ground, a fine grid, one word. */
|
|
27
|
+
declare function WorkbenchTile({ label }: WorkbenchTileProps): react.JSX.Element;
|
|
28
|
+
|
|
29
|
+
export { WorkbenchCard, WorkbenchCardGrid, type WorkbenchCardGridProps, type WorkbenchCardProps, WorkbenchTile, type WorkbenchTileProps };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
function WorkbenchCard({ cover, title, description, meta }) {
|
|
3
|
+
return /* @__PURE__ */ jsxs("article", { className: "folio-wb-card", children: [
|
|
4
|
+
/* @__PURE__ */ jsx("div", { className: "folio-wb-card-cover", children: cover }),
|
|
5
|
+
/* @__PURE__ */ jsx("h3", { className: "folio-wb-card-title", children: title }),
|
|
6
|
+
description && /* @__PURE__ */ jsx("p", { className: "folio-wb-card-description", children: description }),
|
|
7
|
+
meta && /* @__PURE__ */ jsx("p", { className: "folio-wb-card-meta", children: meta })
|
|
8
|
+
] });
|
|
9
|
+
}
|
|
10
|
+
function WorkbenchCardGrid({ children }) {
|
|
11
|
+
return /* @__PURE__ */ jsx("div", { className: "folio-wb-card-grid", children });
|
|
12
|
+
}
|
|
13
|
+
function WorkbenchTile({ label }) {
|
|
14
|
+
return /* @__PURE__ */ jsx("div", { className: "folio-wb-tile", children: /* @__PURE__ */ jsx("span", { children: label }) });
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
WorkbenchCard,
|
|
18
|
+
WorkbenchCardGrid,
|
|
19
|
+
WorkbenchTile
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=WorkbenchCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Workbench/WorkbenchCard.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport interface WorkbenchCardProps {\n /** A cover image, or a `WorkbenchTile` when there is no picture. */\n cover: ReactNode\n /** The title, usually a link; the whole card becomes its hit area. */\n title: ReactNode\n description?: ReactNode\n meta?: ReactNode\n}\n\n/**\n * An image-led record. The title's link is stretched over the card, so the\n * card is one target without nesting interactive elements.\n */\nexport function WorkbenchCard({ cover, title, description, meta }: WorkbenchCardProps) {\n return (\n <article className=\"folio-wb-card\">\n <div className=\"folio-wb-card-cover\">{cover}</div>\n <h3 className=\"folio-wb-card-title\">{title}</h3>\n {description && <p className=\"folio-wb-card-description\">{description}</p>}\n {meta && <p className=\"folio-wb-card-meta\">{meta}</p>}\n </article>\n )\n}\n\nexport interface WorkbenchCardGridProps {\n children: ReactNode\n}\n\n/** Two cards per row on the content subgrid, one on a phone. */\nexport function WorkbenchCardGrid({ children }: WorkbenchCardGridProps) {\n return <div className=\"folio-wb-card-grid\">{children}</div>\n}\n\nexport interface WorkbenchTileProps {\n /** Large word set on the tile, such as a product name. */\n label: ReactNode\n}\n\n/** A typographic stand-in cover: ink ground, a fine grid, one word. */\nexport function WorkbenchTile({ label }: WorkbenchTileProps) {\n return (\n <div className=\"folio-wb-tile\">\n <span>{label}</span>\n </div>\n )\n}\n"],"mappings":"AAiBI,SACE,KADF;AAFG,SAAS,cAAc,EAAE,OAAO,OAAO,aAAa,KAAK,GAAuB;AACrF,SACE,qBAAC,aAAQ,WAAU,iBACjB;AAAA,wBAAC,SAAI,WAAU,uBAAuB,iBAAM;AAAA,IAC5C,oBAAC,QAAG,WAAU,uBAAuB,iBAAM;AAAA,IAC1C,eAAe,oBAAC,OAAE,WAAU,6BAA6B,uBAAY;AAAA,IACrE,QAAQ,oBAAC,OAAE,WAAU,sBAAsB,gBAAK;AAAA,KACnD;AAEJ;AAOO,SAAS,kBAAkB,EAAE,SAAS,GAA2B;AACtE,SAAO,oBAAC,SAAI,WAAU,sBAAsB,UAAS;AACvD;AAQO,SAAS,cAAc,EAAE,MAAM,GAAuB;AAC3D,SACE,oBAAC,SAAI,WAAU,iBACb,8BAAC,UAAM,iBAAM,GACf;AAEJ;","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface WorkbenchEntry {
|
|
5
|
+
id: string;
|
|
6
|
+
/** The title, usually a link. */
|
|
7
|
+
title: ReactNode;
|
|
8
|
+
excerpt?: ReactNode;
|
|
9
|
+
/** A short date such as "Jun 25". */
|
|
10
|
+
date?: ReactNode;
|
|
11
|
+
/** Category and reading time. */
|
|
12
|
+
meta?: ReactNode;
|
|
13
|
+
}
|
|
14
|
+
interface WorkbenchEntriesProps {
|
|
15
|
+
/** Shown as a typographic notebook tile; the rest list beside it. */
|
|
16
|
+
featured?: WorkbenchEntry;
|
|
17
|
+
entries: WorkbenchEntry[];
|
|
18
|
+
}
|
|
19
|
+
/** A featured entry set as a tile, with the next few entries stacked beside it. */
|
|
20
|
+
declare function WorkbenchEntries({ featured, entries }: WorkbenchEntriesProps): react.JSX.Element;
|
|
21
|
+
|
|
22
|
+
export { WorkbenchEntries, type WorkbenchEntriesProps, type WorkbenchEntry };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
function WorkbenchEntries({ featured, entries }) {
|
|
3
|
+
return /* @__PURE__ */ jsxs("div", { className: "folio-wb-entries", "data-has-featured": featured ? true : void 0, children: [
|
|
4
|
+
featured && /* @__PURE__ */ jsxs("article", { className: "folio-wb-entry-featured", children: [
|
|
5
|
+
/* @__PURE__ */ jsx("h3", { children: featured.title }),
|
|
6
|
+
featured.excerpt && /* @__PURE__ */ jsx("p", { children: featured.excerpt }),
|
|
7
|
+
/* @__PURE__ */ jsxs("p", { className: "folio-wb-entry-meta", children: [
|
|
8
|
+
featured.meta,
|
|
9
|
+
featured.meta && featured.date && " \xB7 ",
|
|
10
|
+
featured.date
|
|
11
|
+
] })
|
|
12
|
+
] }),
|
|
13
|
+
/* @__PURE__ */ jsx("ul", { children: entries.map((entry) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("article", { className: "folio-wb-entry", children: [
|
|
14
|
+
entry.date && /* @__PURE__ */ jsx("p", { className: "folio-wb-entry-date", children: entry.date }),
|
|
15
|
+
/* @__PURE__ */ jsx("h3", { children: entry.title }),
|
|
16
|
+
entry.excerpt && /* @__PURE__ */ jsx("p", { className: "folio-wb-entry-excerpt", children: entry.excerpt }),
|
|
17
|
+
entry.meta && /* @__PURE__ */ jsx("p", { className: "folio-wb-entry-meta", children: entry.meta })
|
|
18
|
+
] }) }, entry.id)) })
|
|
19
|
+
] });
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
WorkbenchEntries
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=WorkbenchEntries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Workbench/WorkbenchEntries.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport interface WorkbenchEntry {\n id: string\n /** The title, usually a link. */\n title: ReactNode\n excerpt?: ReactNode\n /** A short date such as \"Jun 25\". */\n date?: ReactNode\n /** Category and reading time. */\n meta?: ReactNode\n}\n\nexport interface WorkbenchEntriesProps {\n /** Shown as a typographic notebook tile; the rest list beside it. */\n featured?: WorkbenchEntry\n entries: WorkbenchEntry[]\n}\n\n/** A featured entry set as a tile, with the next few entries stacked beside it. */\nexport function WorkbenchEntries({ featured, entries }: WorkbenchEntriesProps) {\n return (\n <div className=\"folio-wb-entries\" data-has-featured={featured ? true : undefined}>\n {featured && (\n <article className=\"folio-wb-entry-featured\">\n <h3>{featured.title}</h3>\n {featured.excerpt && <p>{featured.excerpt}</p>}\n <p className=\"folio-wb-entry-meta\">\n {featured.meta}\n {featured.meta && featured.date && ' · '}\n {featured.date}\n </p>\n </article>\n )}\n <ul>\n {entries.map((entry) => (\n <li key={entry.id}>\n <article className=\"folio-wb-entry\">\n {entry.date && <p className=\"folio-wb-entry-date\">{entry.date}</p>}\n <h3>{entry.title}</h3>\n {entry.excerpt && <p className=\"folio-wb-entry-excerpt\">{entry.excerpt}</p>}\n {entry.meta && <p className=\"folio-wb-entry-meta\">{entry.meta}</p>}\n </article>\n </li>\n ))}\n </ul>\n </div>\n )\n}\n"],"mappings":"AAyBU,cAEA,YAFA;AALH,SAAS,iBAAiB,EAAE,UAAU,QAAQ,GAA0B;AAC7E,SACE,qBAAC,SAAI,WAAU,oBAAmB,qBAAmB,WAAW,OAAO,QACpE;AAAA,gBACC,qBAAC,aAAQ,WAAU,2BACjB;AAAA,0BAAC,QAAI,mBAAS,OAAM;AAAA,MACnB,SAAS,WAAW,oBAAC,OAAG,mBAAS,SAAQ;AAAA,MAC1C,qBAAC,OAAE,WAAU,uBACV;AAAA,iBAAS;AAAA,QACT,SAAS,QAAQ,SAAS,QAAQ;AAAA,QAClC,SAAS;AAAA,SACZ;AAAA,OACF;AAAA,IAEF,oBAAC,QACE,kBAAQ,IAAI,CAAC,UACZ,oBAAC,QACC,+BAAC,aAAQ,WAAU,kBAChB;AAAA,YAAM,QAAQ,oBAAC,OAAE,WAAU,uBAAuB,gBAAM,MAAK;AAAA,MAC9D,oBAAC,QAAI,gBAAM,OAAM;AAAA,MAChB,MAAM,WAAW,oBAAC,OAAE,WAAU,0BAA0B,gBAAM,SAAQ;AAAA,MACtE,MAAM,QAAQ,oBAAC,OAAE,WAAU,uBAAuB,gBAAM,MAAK;AAAA,OAChE,KANO,MAAM,EAOf,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactElement, ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface WorkbenchFigureProps {
|
|
5
|
+
/** The image element (or a host image component); it fills the frame. */
|
|
6
|
+
children: ReactElement;
|
|
7
|
+
/** Caption start: the photograph's title. */
|
|
8
|
+
title?: ReactNode;
|
|
9
|
+
/** Caption end: place and year, right-aligned. */
|
|
10
|
+
meta?: ReactNode;
|
|
11
|
+
/** Frame proportion. */
|
|
12
|
+
ratio?: 'wide' | 'landscape' | 'portrait' | 'panorama';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A photograph shown as a photograph: its own proportion, an 8px corner, and a
|
|
16
|
+
* caption line beneath — never a backdrop for something else.
|
|
17
|
+
*/
|
|
18
|
+
declare function WorkbenchFigure({ children, title, meta, ratio }: WorkbenchFigureProps): react.JSX.Element;
|
|
19
|
+
|
|
20
|
+
export { WorkbenchFigure, type WorkbenchFigureProps };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
3
|
+
function WorkbenchFigure({ children, title, meta, ratio = "landscape" }) {
|
|
4
|
+
return /* @__PURE__ */ jsxs("figure", { className: "folio-wb-figure", "data-ratio": ratio, children: [
|
|
5
|
+
/* @__PURE__ */ jsx(Slot, { className: "folio-wb-figure-frame", children }),
|
|
6
|
+
(title || meta) && /* @__PURE__ */ jsxs("figcaption", { children: [
|
|
7
|
+
title && /* @__PURE__ */ jsx("span", { children: title }),
|
|
8
|
+
meta && /* @__PURE__ */ jsx("span", { className: "folio-wb-figure-meta", children: meta })
|
|
9
|
+
] })
|
|
10
|
+
] });
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
WorkbenchFigure
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=WorkbenchFigure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/website/Workbench/WorkbenchFigure.tsx"],"sourcesContent":["import { Slot } from '@radix-ui/react-slot'\nimport type { ReactElement, ReactNode } from 'react'\n\nexport interface WorkbenchFigureProps {\n /** The image element (or a host image component); it fills the frame. */\n children: ReactElement\n /** Caption start: the photograph's title. */\n title?: ReactNode\n /** Caption end: place and year, right-aligned. */\n meta?: ReactNode\n /** Frame proportion. */\n ratio?: 'wide' | 'landscape' | 'portrait' | 'panorama'\n}\n\n/**\n * A photograph shown as a photograph: its own proportion, an 8px corner, and a\n * caption line beneath — never a backdrop for something else.\n */\nexport function WorkbenchFigure({ children, title, meta, ratio = 'landscape' }: WorkbenchFigureProps) {\n return (\n <figure className=\"folio-wb-figure\" data-ratio={ratio}>\n <Slot className=\"folio-wb-figure-frame\">{children}</Slot>\n {(title || meta) && (\n <figcaption>\n {title && <span>{title}</span>}\n {meta && <span className=\"folio-wb-figure-meta\">{meta}</span>}\n </figcaption>\n )}\n </figure>\n )\n}\n"],"mappings":"AAqBM,cAEE,YAFF;AArBN,SAAS,YAAY;AAkBd,SAAS,gBAAgB,EAAE,UAAU,OAAO,MAAM,QAAQ,YAAY,GAAyB;AACpG,SACE,qBAAC,YAAO,WAAU,mBAAkB,cAAY,OAC9C;AAAA,wBAAC,QAAK,WAAU,yBAAyB,UAAS;AAAA,KAChD,SAAS,SACT,qBAAC,gBACE;AAAA,eAAS,oBAAC,UAAM,iBAAM;AAAA,MACtB,QAAQ,oBAAC,UAAK,WAAU,wBAAwB,gBAAK;AAAA,OACxD;AAAA,KAEJ;AAEJ;","names":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface WorkbenchStat {
|
|
5
|
+
id: string;
|
|
6
|
+
value: ReactNode;
|
|
7
|
+
label: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
interface WorkbenchHeroProps {
|
|
10
|
+
/** The ink clause of the statement; it is the page's h1. */
|
|
11
|
+
statement: ReactNode;
|
|
12
|
+
/** The muted continuation of the statement. */
|
|
13
|
+
lead?: ReactNode;
|
|
14
|
+
/** Up to two buttons or links, primary first. */
|
|
15
|
+
actions?: ReactNode;
|
|
16
|
+
/** Small counts beside the statement, such as projects and posts. */
|
|
17
|
+
stats?: WorkbenchStat[];
|
|
18
|
+
/** One captioned photograph under the statement — a `WorkbenchFigure`. */
|
|
19
|
+
figure?: ReactNode;
|
|
20
|
+
}
|
|
21
|
+
/** The Workbench opening: a two-tone statement, its actions, a few counts and one photograph. */
|
|
22
|
+
declare function WorkbenchHero({ statement, lead, actions, stats, figure }: WorkbenchHeroProps): react.JSX.Element;
|
|
23
|
+
|
|
24
|
+
export { WorkbenchHero, type WorkbenchHeroProps, type WorkbenchStat };
|