@nanisoft/prism-ui 0.5.0 → 0.6.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/LICENSE +21 -0
- package/README.md +81 -0
- package/THIRD-PARTY-NOTICES.md +48 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/blocks/app-shell-01/app-shell.d.ts +38 -0
- package/dist/blocks/app-shell-01/app-shell.d.ts.map +1 -0
- package/dist/blocks/app-shell-01/app-shell.js +27 -0
- package/dist/blocks/app-shell-01/index.d.ts +3 -0
- package/dist/blocks/app-shell-01/index.d.ts.map +1 -0
- package/dist/blocks/app-shell-01/index.js +1 -0
- package/dist/blocks/auth-form-01/auth-form.d.ts +52 -0
- package/dist/blocks/auth-form-01/auth-form.d.ts.map +1 -0
- package/dist/blocks/auth-form-01/auth-form.js +23 -0
- package/dist/blocks/auth-form-01/index.d.ts +3 -0
- package/dist/blocks/auth-form-01/index.d.ts.map +1 -0
- package/dist/blocks/auth-form-01/index.js +1 -0
- package/dist/blocks/cta-01/cta.d.ts +83 -0
- package/dist/blocks/cta-01/cta.d.ts.map +1 -0
- package/dist/blocks/cta-01/cta.js +29 -0
- package/dist/blocks/cta-01/index.d.ts +3 -0
- package/dist/blocks/cta-01/index.d.ts.map +1 -0
- package/dist/blocks/cta-01/index.js +1 -0
- package/dist/blocks/data-table-01/data-table.d.ts +102 -0
- package/dist/blocks/data-table-01/data-table.d.ts.map +1 -0
- package/dist/blocks/data-table-01/data-table.js +116 -0
- package/dist/blocks/data-table-01/index.d.ts +3 -0
- package/dist/blocks/data-table-01/index.d.ts.map +1 -0
- package/dist/blocks/data-table-01/index.js +1 -0
- package/dist/blocks/feature-grid-01/feature-grid.d.ts +78 -0
- package/dist/blocks/feature-grid-01/feature-grid.d.ts.map +1 -0
- package/dist/blocks/feature-grid-01/feature-grid.js +24 -0
- package/dist/blocks/feature-grid-01/index.d.ts +3 -0
- package/dist/blocks/feature-grid-01/index.d.ts.map +1 -0
- package/dist/blocks/feature-grid-01/index.js +1 -0
- package/dist/blocks/hero-01/hero.d.ts +59 -0
- package/dist/blocks/hero-01/hero.d.ts.map +1 -0
- package/dist/blocks/hero-01/hero.js +24 -0
- package/dist/blocks/hero-01/index.d.ts +2 -0
- package/dist/blocks/hero-01/index.d.ts.map +1 -0
- package/dist/blocks/hero-01/index.js +1 -0
- package/dist/blocks/index.d.ts +28 -0
- package/dist/blocks/index.d.ts.map +1 -0
- package/dist/blocks/index.js +26 -0
- package/dist/blocks/instrument-panel-01/index.d.ts +3 -0
- package/dist/blocks/instrument-panel-01/index.d.ts.map +1 -0
- package/dist/blocks/instrument-panel-01/index.js +1 -0
- package/dist/blocks/instrument-panel-01/instrument-panel.d.ts +114 -0
- package/dist/blocks/instrument-panel-01/instrument-panel.d.ts.map +1 -0
- package/dist/blocks/instrument-panel-01/instrument-panel.js +64 -0
- package/dist/blocks/logo-strip-01/index.d.ts +3 -0
- package/dist/blocks/logo-strip-01/index.d.ts.map +1 -0
- package/dist/blocks/logo-strip-01/index.js +1 -0
- package/dist/blocks/logo-strip-01/logo-strip.d.ts +84 -0
- package/dist/blocks/logo-strip-01/logo-strip.d.ts.map +1 -0
- package/dist/blocks/logo-strip-01/logo-strip.js +40 -0
- package/dist/blocks/note-grid-01/index.d.ts +3 -0
- package/dist/blocks/note-grid-01/index.d.ts.map +1 -0
- package/dist/blocks/note-grid-01/index.js +1 -0
- package/dist/blocks/note-grid-01/note-grid.d.ts +79 -0
- package/dist/blocks/note-grid-01/note-grid.d.ts.map +1 -0
- package/dist/blocks/note-grid-01/note-grid.js +37 -0
- package/dist/blocks/page-header-01/index.d.ts +3 -0
- package/dist/blocks/page-header-01/index.d.ts.map +1 -0
- package/dist/blocks/page-header-01/index.js +1 -0
- package/dist/blocks/page-header-01/page-header.d.ts +48 -0
- package/dist/blocks/page-header-01/page-header.d.ts.map +1 -0
- package/dist/blocks/page-header-01/page-header.js +27 -0
- package/dist/blocks/pricing-01/index.d.ts +2 -0
- package/dist/blocks/pricing-01/index.d.ts.map +1 -0
- package/dist/blocks/pricing-01/index.js +1 -0
- package/dist/blocks/pricing-01/pricing.d.ts +35 -0
- package/dist/blocks/pricing-01/pricing.d.ts.map +1 -0
- package/dist/blocks/pricing-01/pricing.js +20 -0
- package/dist/blocks/process-rail-01/index.d.ts +3 -0
- package/dist/blocks/process-rail-01/index.d.ts.map +1 -0
- package/dist/blocks/process-rail-01/index.js +1 -0
- package/dist/blocks/process-rail-01/process-rail.d.ts +99 -0
- package/dist/blocks/process-rail-01/process-rail.d.ts.map +1 -0
- package/dist/blocks/process-rail-01/process-rail.js +58 -0
- package/dist/blocks/product-grid-01/index.d.ts +3 -0
- package/dist/blocks/product-grid-01/index.d.ts.map +1 -0
- package/dist/blocks/product-grid-01/index.js +1 -0
- package/dist/blocks/product-grid-01/product-grid.d.ts +114 -0
- package/dist/blocks/product-grid-01/product-grid.d.ts.map +1 -0
- package/dist/blocks/product-grid-01/product-grid.js +51 -0
- package/dist/blocks/settings-panel-01/index.d.ts +3 -0
- package/dist/blocks/settings-panel-01/index.d.ts.map +1 -0
- package/dist/blocks/settings-panel-01/index.js +1 -0
- package/dist/blocks/settings-panel-01/settings-panel.d.ts +71 -0
- package/dist/blocks/settings-panel-01/settings-panel.d.ts.map +1 -0
- package/dist/blocks/settings-panel-01/settings-panel.js +38 -0
- package/dist/blocks/site-footer/index.d.ts +3 -0
- package/dist/blocks/site-footer/index.d.ts.map +1 -0
- package/dist/blocks/site-footer/index.js +1 -0
- package/dist/blocks/site-footer/site-footer.d.ts +135 -0
- package/dist/blocks/site-footer/site-footer.d.ts.map +1 -0
- package/dist/blocks/site-footer/site-footer.js +41 -0
- package/dist/blocks/site-header/index.d.ts +3 -0
- package/dist/blocks/site-header/index.d.ts.map +1 -0
- package/dist/blocks/site-header/index.js +1 -0
- package/dist/blocks/site-header/site-header.d.ts +142 -0
- package/dist/blocks/site-header/site-header.d.ts.map +1 -0
- package/dist/blocks/site-header/site-header.js +46 -0
- package/dist/blocks/stack-grid-01/index.d.ts +3 -0
- package/dist/blocks/stack-grid-01/index.d.ts.map +1 -0
- package/dist/blocks/stack-grid-01/index.js +1 -0
- package/dist/blocks/stack-grid-01/stack-grid.d.ts +118 -0
- package/dist/blocks/stack-grid-01/stack-grid.d.ts.map +1 -0
- package/dist/blocks/stack-grid-01/stack-grid.js +49 -0
- package/dist/blocks/stats-01/index.d.ts +2 -0
- package/dist/blocks/stats-01/index.d.ts.map +1 -0
- package/dist/blocks/stats-01/index.js +1 -0
- package/dist/blocks/stats-01/stats.d.ts +28 -0
- package/dist/blocks/stats-01/stats.d.ts.map +1 -0
- package/dist/blocks/stats-01/stats.js +27 -0
- package/dist/blocks/status-ledger-01/index.d.ts +3 -0
- package/dist/blocks/status-ledger-01/index.d.ts.map +1 -0
- package/dist/blocks/status-ledger-01/index.js +1 -0
- package/dist/blocks/status-ledger-01/status-ledger.d.ts +131 -0
- package/dist/blocks/status-ledger-01/status-ledger.d.ts.map +1 -0
- package/dist/blocks/status-ledger-01/status-ledger.js +80 -0
- package/dist/catalog.d.ts +28 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +672 -0
- package/dist/components/index.d.ts +64 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +43 -0
- package/dist/components/ui/accordion.d.ts +65 -0
- package/dist/components/ui/accordion.d.ts.map +1 -0
- package/dist/components/ui/accordion.js +30 -0
- package/dist/components/ui/alert.d.ts +19 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +31 -0
- package/dist/components/ui/avatar.d.ts +47 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar.js +30 -0
- package/dist/components/ui/badge.d.ts +14 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +26 -0
- package/dist/components/ui/breadcrumb.d.ts +35 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.js +48 -0
- package/dist/components/ui/button.d.ts +16 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +63 -0
- package/dist/components/ui/card.d.ts +41 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +53 -0
- package/dist/components/ui/checkbox.d.ts +43 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox.js +18 -0
- package/dist/components/ui/cta-link.d.ts +45 -0
- package/dist/components/ui/cta-link.d.ts.map +1 -0
- package/dist/components/ui/cta-link.js +81 -0
- package/dist/components/ui/diagram.d.ts +154 -0
- package/dist/components/ui/diagram.d.ts.map +1 -0
- package/dist/components/ui/diagram.js +150 -0
- package/dist/components/ui/dialog.d.ts +81 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +60 -0
- package/dist/components/ui/dropdown-menu.d.ts +189 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +67 -0
- package/dist/components/ui/fact-list.d.ts +90 -0
- package/dist/components/ui/fact-list.d.ts.map +1 -0
- package/dist/components/ui/fact-list.js +38 -0
- package/dist/components/ui/field.d.ts +36 -0
- package/dist/components/ui/field.d.ts.map +1 -0
- package/dist/components/ui/field.js +46 -0
- package/dist/components/ui/input.d.ts +12 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +14 -0
- package/dist/components/ui/kbd.d.ts +10 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +12 -0
- package/dist/components/ui/pagination.d.ts +40 -0
- package/dist/components/ui/pagination.d.ts.map +1 -0
- package/dist/components/ui/pagination.js +49 -0
- package/dist/components/ui/popover.d.ts +56 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +25 -0
- package/dist/components/ui/product-mark.d.ts +115 -0
- package/dist/components/ui/product-mark.d.ts.map +1 -0
- package/dist/components/ui/product-mark.js +82 -0
- package/dist/components/ui/product-switcher.d.ts +108 -0
- package/dist/components/ui/product-switcher.d.ts.map +1 -0
- package/dist/components/ui/product-switcher.js +47 -0
- package/dist/components/ui/progress.d.ts +38 -0
- package/dist/components/ui/progress.d.ts.map +1 -0
- package/dist/components/ui/progress.js +17 -0
- package/dist/components/ui/prose.d.ts +88 -0
- package/dist/components/ui/prose.d.ts.map +1 -0
- package/dist/components/ui/prose.js +53 -0
- package/dist/components/ui/radio-group.d.ts +66 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -0
- package/dist/components/ui/radio-group.js +30 -0
- package/dist/components/ui/section.d.ts +60 -0
- package/dist/components/ui/section.d.ts.map +1 -0
- package/dist/components/ui/section.js +21 -0
- package/dist/components/ui/select.d.ts +124 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +47 -0
- package/dist/components/ui/separator.d.ts +16 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.js +15 -0
- package/dist/components/ui/skeleton.d.ts +12 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +14 -0
- package/dist/components/ui/slider.d.ts +43 -0
- package/dist/components/ui/slider.d.ts.map +1 -0
- package/dist/components/ui/slider.js +23 -0
- package/dist/components/ui/switch.d.ts +42 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/switch.js +16 -0
- package/dist/components/ui/table.d.ts +27 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +43 -0
- package/dist/components/ui/tabs.d.ts +66 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +29 -0
- package/dist/components/ui/textarea.d.ts +11 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +13 -0
- package/dist/components/ui/tooltip.d.ts +63 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +25 -0
- package/dist/components/ui/typography.d.ts +32 -0
- package/dist/components/ui/typography.d.ts.map +1 -0
- package/dist/components/ui/typography.js +51 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +68 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +5 -0
- package/dist/pages/auth-page/index.d.ts +36 -0
- package/dist/pages/auth-page/index.d.ts.map +1 -0
- package/dist/pages/auth-page/index.js +23 -0
- package/dist/pages/blog-post-page/index.d.ts +174 -0
- package/dist/pages/blog-post-page/index.d.ts.map +1 -0
- package/dist/pages/blog-post-page/index.js +49 -0
- package/dist/pages/dashboard-page/index.d.ts +36 -0
- package/dist/pages/dashboard-page/index.d.ts.map +1 -0
- package/dist/pages/dashboard-page/index.js +24 -0
- package/dist/pages/index.d.ts +21 -0
- package/dist/pages/index.d.ts.map +1 -0
- package/dist/pages/index.js +14 -0
- package/dist/pages/marketing-page/index.d.ts +43 -0
- package/dist/pages/marketing-page/index.d.ts.map +1 -0
- package/dist/pages/marketing-page/index.js +25 -0
- package/dist/pages/not-found-page/index.d.ts +112 -0
- package/dist/pages/not-found-page/index.d.ts.map +1 -0
- package/dist/pages/not-found-page/index.js +46 -0
- package/dist/pages/settings-page/index.d.ts +47 -0
- package/dist/pages/settings-page/index.d.ts.map +1 -0
- package/dist/pages/settings-page/index.js +24 -0
- package/dist/provider/index.d.ts +12 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.js +9 -0
- package/dist/provider/provider.d.ts +42 -0
- package/dist/provider/provider.d.ts.map +1 -0
- package/dist/provider/provider.js +178 -0
- package/dist/provider/theme-script.d.ts +55 -0
- package/dist/provider/theme-script.d.ts.map +1 -0
- package/dist/provider/theme-script.js +79 -0
- package/dist/styles.css +2894 -0
- package/dist/theming/index.d.ts +173 -0
- package/dist/theming/index.d.ts.map +1 -0
- package/dist/theming/index.js +186 -0
- package/package.json +89 -18
- package/components.json +0 -21
- package/public/r/badge.json +0 -26
- package/public/r/button.json +0 -26
- package/public/r/card.json +0 -25
- package/public/r/cta-01.json +0 -44
- package/public/r/feature-grid-01.json +0 -44
- package/public/r/hero-01.json +0 -44
- package/public/r/pricing-01.json +0 -46
- package/public/r/registry.json +0 -294
- package/public/r/section.json +0 -25
- package/public/r/stats-01.json +0 -44
- package/registry.json +0 -294
- package/src/components/ds/blocks/cta-01/block.json +0 -8
- package/src/components/ds/blocks/cta-01/cta.tsx +0 -62
- package/src/components/ds/blocks/cta-01/index.tsx +0 -1
- package/src/components/ds/blocks/feature-grid-01/block.json +0 -8
- package/src/components/ds/blocks/feature-grid-01/feature-grid.tsx +0 -69
- package/src/components/ds/blocks/feature-grid-01/index.tsx +0 -1
- package/src/components/ds/blocks/hero-01/block.json +0 -8
- package/src/components/ds/blocks/hero-01/hero.tsx +0 -85
- package/src/components/ds/blocks/hero-01/index.tsx +0 -1
- package/src/components/ds/blocks/pricing-01/block.json +0 -8
- package/src/components/ds/blocks/pricing-01/index.tsx +0 -1
- package/src/components/ds/blocks/pricing-01/pricing.tsx +0 -122
- package/src/components/ds/blocks/section.meta.json +0 -6
- package/src/components/ds/blocks/section.tsx +0 -86
- package/src/components/ds/blocks/stats-01/block.json +0 -8
- package/src/components/ds/blocks/stats-01/index.tsx +0 -1
- package/src/components/ds/blocks/stats-01/stats.tsx +0 -92
- package/src/components/ui/badge.tsx +0 -37
- package/src/components/ui/button.tsx +0 -77
- package/src/components/ui/card.tsx +0 -65
- package/src/lib/utils.ts +0 -6
package/dist/index.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The curated Prism barrel.
|
|
3
|
+
*
|
|
4
|
+
* The most-used components, blocks and theming vocabulary in one import. It
|
|
5
|
+
* carries no styles and no runtime side effects: importing this entry must not
|
|
6
|
+
* pull the provider, the catalogue or a stylesheet. Consumers that want one
|
|
7
|
+
* item import its own subpath instead.
|
|
8
|
+
*/
|
|
9
|
+
export { Button } from './components/ui/button';
|
|
10
|
+
export { CtaLink } from './components/ui/cta-link';
|
|
11
|
+
export { Badge } from './components/ui/badge';
|
|
12
|
+
export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, } from './components/ui/card';
|
|
13
|
+
export { Section, SectionHeading } from './components/ui/section';
|
|
14
|
+
export { Alert, AlertTitle, AlertDescription } from './components/ui/alert';
|
|
15
|
+
export { Separator } from './components/ui/separator';
|
|
16
|
+
export { Skeleton } from './components/ui/skeleton';
|
|
17
|
+
export { Input } from './components/ui/input';
|
|
18
|
+
export { Textarea } from './components/ui/textarea';
|
|
19
|
+
export { Field, FieldLabel, FieldDescription, FieldError, FieldGroup, } from './components/ui/field';
|
|
20
|
+
export { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption, } from './components/ui/table';
|
|
21
|
+
export { Heading, Text } from './components/ui/typography';
|
|
22
|
+
export { Kbd } from './components/ui/kbd';
|
|
23
|
+
export { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, } from './components/ui/breadcrumb';
|
|
24
|
+
export { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationPrevious, PaginationNext, PaginationEllipsis, } from './components/ui/pagination';
|
|
25
|
+
export { Select, SelectTrigger, SelectValue, SelectContent, SelectItem, SelectGroup, SelectLabel, SelectSeparator, } from './components/ui/select';
|
|
26
|
+
export { Checkbox } from './components/ui/checkbox';
|
|
27
|
+
export { RadioGroup, RadioGroupItem } from './components/ui/radio-group';
|
|
28
|
+
export { Switch } from './components/ui/switch';
|
|
29
|
+
export { Slider } from './components/ui/slider';
|
|
30
|
+
export { Progress } from './components/ui/progress';
|
|
31
|
+
export { Tooltip, TooltipTrigger, TooltipContent } from './components/ui/tooltip';
|
|
32
|
+
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent, } from './components/ui/accordion';
|
|
33
|
+
export { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, DialogClose, } from './components/ui/dialog';
|
|
34
|
+
export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuGroup, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, } from './components/ui/dropdown-menu';
|
|
35
|
+
export { Popover, PopoverTrigger, PopoverContent } from './components/ui/popover';
|
|
36
|
+
export { Tabs, TabsList, TabsTrigger, TabsContent } from './components/ui/tabs';
|
|
37
|
+
export { Avatar, AvatarImage, AvatarFallback } from './components/ui/avatar';
|
|
38
|
+
export { Diagram } from './components/ui/diagram';
|
|
39
|
+
export { ProductMark } from './components/ui/product-mark';
|
|
40
|
+
export { Prose } from './components/ui/prose';
|
|
41
|
+
export { FactList } from './components/ui/fact-list';
|
|
42
|
+
export { ProductSwitcher } from './components/ui/product-switcher';
|
|
43
|
+
export { Hero01 } from './blocks/hero-01';
|
|
44
|
+
export { FeatureGrid01 } from './blocks/feature-grid-01';
|
|
45
|
+
export { Stats01 } from './blocks/stats-01';
|
|
46
|
+
export { Pricing01 } from './blocks/pricing-01';
|
|
47
|
+
export { Cta01 } from './blocks/cta-01';
|
|
48
|
+
export { PageHeader01 } from './blocks/page-header-01';
|
|
49
|
+
export { DataTable01 } from './blocks/data-table-01';
|
|
50
|
+
export { SettingsPanel01 } from './blocks/settings-panel-01';
|
|
51
|
+
export { AuthForm01 } from './blocks/auth-form-01';
|
|
52
|
+
export { AppShell01 } from './blocks/app-shell-01';
|
|
53
|
+
export { ProcessRail01 } from './blocks/process-rail-01';
|
|
54
|
+
export { StatusLedger01, STATUS_TIERS } from './blocks/status-ledger-01';
|
|
55
|
+
export { ProductGrid01 } from './blocks/product-grid-01';
|
|
56
|
+
export { StackGrid01 } from './blocks/stack-grid-01';
|
|
57
|
+
export { LogoStrip01 } from './blocks/logo-strip-01';
|
|
58
|
+
export { NoteGrid01 } from './blocks/note-grid-01';
|
|
59
|
+
export { InstrumentPanel01 } from './blocks/instrument-panel-01';
|
|
60
|
+
export { SiteHeader } from './blocks/site-header';
|
|
61
|
+
export { SiteFooter } from './blocks/site-footer';
|
|
62
|
+
export { MarketingPage } from './pages/marketing-page';
|
|
63
|
+
export { DashboardPage } from './pages/dashboard-page';
|
|
64
|
+
export { SettingsPage } from './pages/settings-page';
|
|
65
|
+
export { AuthPage } from './pages/auth-page';
|
|
66
|
+
export { NotFoundPage } from './pages/not-found-page';
|
|
67
|
+
export { BlogPostPage } from './pages/blog-post-page';
|
|
68
|
+
export { PACKS, MODES, parseStoredTheme, themeAttributes } from './theming';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAA;AAG5C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ComponentProps, ReactNode } from 'react';
|
|
2
|
+
import { AuthForm01 } from '../../blocks/auth-form-01';
|
|
3
|
+
export type AuthPageAside = {
|
|
4
|
+
/** The supporting card's title. */
|
|
5
|
+
title: string;
|
|
6
|
+
/** One line under the title. */
|
|
7
|
+
description?: string;
|
|
8
|
+
/** The card body: product context, a short list or a supporting note. */
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
};
|
|
11
|
+
export type AuthPageProps = {
|
|
12
|
+
/** The credential form. */
|
|
13
|
+
form: ComponentProps<typeof AuthForm01>;
|
|
14
|
+
/**
|
|
15
|
+
* A supporting card beside the form. Omit it for a single centered column.
|
|
16
|
+
*/
|
|
17
|
+
aside?: AuthPageAside;
|
|
18
|
+
/** A node under the form, such as a legal line or a link to another screen. */
|
|
19
|
+
footer?: ReactNode;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* A complete authentication screen.
|
|
23
|
+
*
|
|
24
|
+
* It composes `AuthForm01` with `Card`: the form carries the credentials and an
|
|
25
|
+
* optional supporting card sits beside it with product context. The page owns
|
|
26
|
+
* the layout, the centering and the breakpoint only. Every field, label,
|
|
27
|
+
* handler and error is a prop through `form`, and the page fetches nothing and
|
|
28
|
+
* imports no router, so the consumer owns the links and the request.
|
|
29
|
+
*
|
|
30
|
+
* The layout is one centered column when no `aside` is passed, and a two-column
|
|
31
|
+
* split from the large breakpoint up when one is. That keeps the docs preview
|
|
32
|
+
* and a narrow screen on the same, readable path.
|
|
33
|
+
*/
|
|
34
|
+
export declare function AuthPage({ form, aside, footer }: AuthPageProps): import("react").JSX.Element;
|
|
35
|
+
export default AuthPage;
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/auth-page/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAStD,MAAM,MAAM,aAAa,GAAG;IAC1B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,2BAA2B;IAC3B,IAAI,EAAE,cAAc,CAAC,OAAO,UAAU,CAAC,CAAA;IACvC;;OAEG;IACH,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,aAAa,+BA+B9D;AAED,eAAe,QAAQ,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { AuthForm01 } from '../../blocks/auth-form-01';
|
|
4
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '../../components/ui/card';
|
|
5
|
+
/**
|
|
6
|
+
* A complete authentication screen.
|
|
7
|
+
*
|
|
8
|
+
* It composes `AuthForm01` with `Card`: the form carries the credentials and an
|
|
9
|
+
* optional supporting card sits beside it with product context. The page owns
|
|
10
|
+
* the layout, the centering and the breakpoint only. Every field, label,
|
|
11
|
+
* handler and error is a prop through `form`, and the page fetches nothing and
|
|
12
|
+
* imports no router, so the consumer owns the links and the request.
|
|
13
|
+
*
|
|
14
|
+
* The layout is one centered column when no `aside` is passed, and a two-column
|
|
15
|
+
* split from the large breakpoint up when one is. That keeps the docs preview
|
|
16
|
+
* and a narrow screen on the same, readable path.
|
|
17
|
+
*/
|
|
18
|
+
export function AuthPage({ form, aside, footer }) {
|
|
19
|
+
return (_jsx("div", { className: "bg-background text-foreground flex min-h-svh w-full items-center justify-center px-6 py-16", children: _jsxs("div", { className: aside
|
|
20
|
+
? 'grid w-full max-w-page items-center gap-10 lg:grid-cols-2'
|
|
21
|
+
: 'w-full max-w-measure-narrow', children: [aside ? (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: aside.title }), aside.description ? (_jsx(CardDescription, { children: aside.description })) : null] }), aside.children ? _jsx(CardContent, { children: aside.children }) : null] })) : null, _jsxs("div", { className: "mx-auto w-full max-w-measure-narrow", children: [_jsx(AuthForm01, { ...form }), footer ? (_jsx("div", { className: "text-muted-foreground mt-4 text-center text-sm", children: footer })) : null] })] }) }));
|
|
22
|
+
}
|
|
23
|
+
export default AuthPage;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* One tag on a post, or one step in the trail to the next one.
|
|
4
|
+
*
|
|
5
|
+
* `href` is optional and a tag without one renders as text. A tag that goes
|
|
6
|
+
* somewhere is a link, a tag that does not is a word, and a post's tags are
|
|
7
|
+
* usually the words.
|
|
8
|
+
*/
|
|
9
|
+
export type BlogPostTag = {
|
|
10
|
+
/** The word on the tag. */
|
|
11
|
+
label: string;
|
|
12
|
+
/** Where the tag goes, for a tag that filters an archive. */
|
|
13
|
+
href?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* One neighbour of this post: the title and where it is.
|
|
17
|
+
*
|
|
18
|
+
* `title` and `href` are both required. A next post with no title is an arrow
|
|
19
|
+
* with a destination and no promise about what is at the other end, which is the
|
|
20
|
+
* one thing a reader deciding whether to click cannot afford.
|
|
21
|
+
*/
|
|
22
|
+
export type BlogPostNeighbour = {
|
|
23
|
+
/** The post's title. */
|
|
24
|
+
title: string;
|
|
25
|
+
/** Where the post is. */
|
|
26
|
+
href: string;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* The two words the trail renders above the neighbouring posts' titles.
|
|
30
|
+
*
|
|
31
|
+
* Both are required, and both are the caller's: "Previous" and "Next" are this
|
|
32
|
+
* Page's own phrasing, a site that files posts newest-last says the opposite pair,
|
|
33
|
+
* and a Page that ships no copy ships no reader-facing copy either.
|
|
34
|
+
*/
|
|
35
|
+
export type BlogPostTrailLabels = {
|
|
36
|
+
/** The word above the previous post's title. */
|
|
37
|
+
previous: string;
|
|
38
|
+
/** The word above the next post's title. */
|
|
39
|
+
next: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* The props a BlogPostPage takes.
|
|
43
|
+
*
|
|
44
|
+
* The post's own text is `children`, because a post's body is authored wherever it
|
|
45
|
+
* is authored - a Markdown file, a CMS, a headless store - and Prism owns the
|
|
46
|
+
* measure and the rhythm around it, not the words. Everything that is a *fact*
|
|
47
|
+
* about the post rather than its text is a prop: the title, the standfirst, the
|
|
48
|
+
* date, the tags and the neighbours.
|
|
49
|
+
*/
|
|
50
|
+
export type BlogPostPageProps = {
|
|
51
|
+
/**
|
|
52
|
+
* The post's title. It is the page's `h1`, so the page has exactly one and it
|
|
53
|
+
* is the post's name.
|
|
54
|
+
*/
|
|
55
|
+
title: string;
|
|
56
|
+
/**
|
|
57
|
+
* The standfirst: one or two sentences under the title that say what the post
|
|
58
|
+
* is about. It is a prop rather than the first paragraph of the body because a
|
|
59
|
+
* reader deciding whether to read needs it before the body starts, and because
|
|
60
|
+
* it is what an index, a feed and a search result show.
|
|
61
|
+
*/
|
|
62
|
+
description?: string;
|
|
63
|
+
/**
|
|
64
|
+
* The publication date, already formatted for display, and the machine value
|
|
65
|
+
* for the `time` element's `dateTime`. Both are props, and the machine one is
|
|
66
|
+
* required: `dateTime` is what a reader's browser, a feed reader and a search
|
|
67
|
+
* engine use to order posts, and a formatted string is none of those.
|
|
68
|
+
*/
|
|
69
|
+
date: string;
|
|
70
|
+
/**
|
|
71
|
+
* The date in a machine-readable form, `YYYY-MM-DD`, carried on the `time`
|
|
72
|
+
* element. Required, and deliberately not derived from `date`: parsing a
|
|
73
|
+
* formatted date back into an ISO one is a guess about a locale, and a guess
|
|
74
|
+
* in a `datetime` attribute is a wrong date in a feed.
|
|
75
|
+
*/
|
|
76
|
+
dateTime: string;
|
|
77
|
+
/** Who wrote the post. A name, or a link to an author page. */
|
|
78
|
+
author?: ReactNode;
|
|
79
|
+
/**
|
|
80
|
+
* The tags on the post, in the order a reader should meet them. Omit them for a
|
|
81
|
+
* post with none: an empty row of badges is a row of nothing.
|
|
82
|
+
*/
|
|
83
|
+
tags?: readonly BlogPostTag[];
|
|
84
|
+
/** How long the post takes to read, in the consumer's own words. */
|
|
85
|
+
readingTime?: string;
|
|
86
|
+
/**
|
|
87
|
+
* The post's body. Any flow content: paragraphs, headings, lists, code, images,
|
|
88
|
+
* tables. `Prose` holds it to the reading measure and to the block rhythm.
|
|
89
|
+
*/
|
|
90
|
+
children: ReactNode;
|
|
91
|
+
/**
|
|
92
|
+
* The post before this one and the post after it, for the trail at the foot of
|
|
93
|
+
* the page. Omit the half there is no neighbour for; a "previous" link with no
|
|
94
|
+
* previous post is a link to nothing.
|
|
95
|
+
*/
|
|
96
|
+
previous?: BlogPostNeighbour;
|
|
97
|
+
next?: BlogPostNeighbour;
|
|
98
|
+
/**
|
|
99
|
+
* The two words the trail renders above the neighbouring posts' titles. Required
|
|
100
|
+
* whenever either neighbour is passed, because they are words a reader reads and
|
|
101
|
+
* a Page that ships no copy ships no reader-facing copy either.
|
|
102
|
+
*/
|
|
103
|
+
trailLabels: BlogPostTrailLabels;
|
|
104
|
+
/**
|
|
105
|
+
* The accessible name of the trail between the neighbouring posts. It is
|
|
106
|
+
* required whenever either neighbour is passed, because it is a word a reader
|
|
107
|
+
* hears and a Page that ships no copy ships no reader-facing copy either. "More
|
|
108
|
+
* posts" is the Page's own phrasing and a site that files posts by release calls
|
|
109
|
+
* the same landmark something else.
|
|
110
|
+
*/
|
|
111
|
+
trailLabel: string;
|
|
112
|
+
/**
|
|
113
|
+
* The way back to the archive the post is filed in, rendered as one call to
|
|
114
|
+
* action under the trail. A prop rather than a hardcoded "back to the index",
|
|
115
|
+
* because the words and the route belong to the site that publishes the post
|
|
116
|
+
* and a Page that held either would be a Page making a claim about a consumer's
|
|
117
|
+
* own site.
|
|
118
|
+
*/
|
|
119
|
+
indexLink?: BlogPostNeighbour;
|
|
120
|
+
/**
|
|
121
|
+
* A slot for what comes after the trail: a related-posts grid, a newsletter
|
|
122
|
+
* form, a call to action. A slot rather than a prop because every one of those
|
|
123
|
+
* is a Block, and a Page that took a Block per prop would be a Page whose
|
|
124
|
+
* interface lists the whole catalogue.
|
|
125
|
+
*/
|
|
126
|
+
footer?: ReactNode;
|
|
127
|
+
/**
|
|
128
|
+
* Layout only, exactly as on every Component. Changing a Prism-owned visual
|
|
129
|
+
* property from here is prohibited.
|
|
130
|
+
*/
|
|
131
|
+
className?: string;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* A complete blog post screen: the title, the standfirst, the byline, the body at
|
|
135
|
+
* the measure, and the trail to the neighbouring posts.
|
|
136
|
+
*
|
|
137
|
+
* All four NaniSoft sites publish a blog, each with four posts and the same
|
|
138
|
+
* frontmatter: a title, a description, a date and a list of tags. Each one then
|
|
139
|
+
* rendered that frontmatter in its own component, with its own wrapper, its own
|
|
140
|
+
* measure and its own treatment of the date, and each of them wrote the trail to
|
|
141
|
+
* the neighbouring posts separately or not at all.
|
|
142
|
+
*
|
|
143
|
+
* It is a Page rather than a Block because it is a whole screen and it is the
|
|
144
|
+
* screen a content pipeline targets: a route that reads one document and hands
|
|
145
|
+
* its frontmatter to this Page. The Page is what makes the frontmatter a
|
|
146
|
+
* contract, because a field that is not a prop is a field nothing checks.
|
|
147
|
+
*
|
|
148
|
+
* **The date is two props.** `date` is the words a reader sees and `dateTime` is
|
|
149
|
+
* the machine value on the `time` element, and they are kept apart because
|
|
150
|
+
* parsing a formatted date back into an ISO one is a guess about a locale. A
|
|
151
|
+
* wrong date in a `datetime` attribute is a wrong date in a feed reader and in a
|
|
152
|
+
* search result, and neither reader can see the string that was wrong. This is
|
|
153
|
+
* the arrangement every one of the four sites needs and none of them has, because
|
|
154
|
+
* each of them formats its date in one place and has nowhere else to put the ISO
|
|
155
|
+
* value.
|
|
156
|
+
*
|
|
157
|
+
* The body is `children` and it is held by `Prose`, not by a set of per-element
|
|
158
|
+
* props. A post's body is authored somewhere else - a Markdown pipeline, a CMS -
|
|
159
|
+
* and a Page that took `paragraphs` and `headings` as arrays would be a Page that
|
|
160
|
+
* had to be handed a parsed document, which is a second representation of
|
|
161
|
+
* something the consumer's own pipeline already owns.
|
|
162
|
+
*
|
|
163
|
+
* The trail is one `nav` with two links, and it renders only the halves it is
|
|
164
|
+
* given. A previous link on the oldest post is a link to the first post a reader
|
|
165
|
+
* has already read, and a next link on the newest is a promise the site cannot
|
|
166
|
+
* keep.
|
|
167
|
+
*
|
|
168
|
+
* It is a server Component. It fetches nothing, it holds no state and it imports
|
|
169
|
+
* no router, so a consumer renders it from a server route and hands it the
|
|
170
|
+
* document their pipeline produced.
|
|
171
|
+
*/
|
|
172
|
+
export declare function BlogPostPage({ title, description, date, dateTime, author, tags, readingTime, children, previous, next, trailLabels, trailLabel, indexLink, footer, className, }: BlogPostPageProps): import("react").JSX.Element;
|
|
173
|
+
export default BlogPostPage;
|
|
174
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/blog-post-page/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAQtC;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAA;IAChB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAC7B,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAA;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACxB;;;;OAIG;IACH,WAAW,EAAE,mBAAmB,CAAA;IAChC;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,UAAU,EACV,SAAS,EACT,MAAM,EACN,SAAS,GACV,EAAE,iBAAiB,+BAgFnB;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Badge } from '../../components/ui/badge';
|
|
3
|
+
import { CtaLink } from '../../components/ui/cta-link';
|
|
4
|
+
import { Heading, Text } from '../../components/ui/typography';
|
|
5
|
+
import { Prose } from '../../components/ui/prose';
|
|
6
|
+
import { Section } from '../../components/ui/section';
|
|
7
|
+
/**
|
|
8
|
+
* A complete blog post screen: the title, the standfirst, the byline, the body at
|
|
9
|
+
* the measure, and the trail to the neighbouring posts.
|
|
10
|
+
*
|
|
11
|
+
* All four NaniSoft sites publish a blog, each with four posts and the same
|
|
12
|
+
* frontmatter: a title, a description, a date and a list of tags. Each one then
|
|
13
|
+
* rendered that frontmatter in its own component, with its own wrapper, its own
|
|
14
|
+
* measure and its own treatment of the date, and each of them wrote the trail to
|
|
15
|
+
* the neighbouring posts separately or not at all.
|
|
16
|
+
*
|
|
17
|
+
* It is a Page rather than a Block because it is a whole screen and it is the
|
|
18
|
+
* screen a content pipeline targets: a route that reads one document and hands
|
|
19
|
+
* its frontmatter to this Page. The Page is what makes the frontmatter a
|
|
20
|
+
* contract, because a field that is not a prop is a field nothing checks.
|
|
21
|
+
*
|
|
22
|
+
* **The date is two props.** `date` is the words a reader sees and `dateTime` is
|
|
23
|
+
* the machine value on the `time` element, and they are kept apart because
|
|
24
|
+
* parsing a formatted date back into an ISO one is a guess about a locale. A
|
|
25
|
+
* wrong date in a `datetime` attribute is a wrong date in a feed reader and in a
|
|
26
|
+
* search result, and neither reader can see the string that was wrong. This is
|
|
27
|
+
* the arrangement every one of the four sites needs and none of them has, because
|
|
28
|
+
* each of them formats its date in one place and has nowhere else to put the ISO
|
|
29
|
+
* value.
|
|
30
|
+
*
|
|
31
|
+
* The body is `children` and it is held by `Prose`, not by a set of per-element
|
|
32
|
+
* props. A post's body is authored somewhere else - a Markdown pipeline, a CMS -
|
|
33
|
+
* and a Page that took `paragraphs` and `headings` as arrays would be a Page that
|
|
34
|
+
* had to be handed a parsed document, which is a second representation of
|
|
35
|
+
* something the consumer's own pipeline already owns.
|
|
36
|
+
*
|
|
37
|
+
* The trail is one `nav` with two links, and it renders only the halves it is
|
|
38
|
+
* given. A previous link on the oldest post is a link to the first post a reader
|
|
39
|
+
* has already read, and a next link on the newest is a promise the site cannot
|
|
40
|
+
* keep.
|
|
41
|
+
*
|
|
42
|
+
* It is a server Component. It fetches nothing, it holds no state and it imports
|
|
43
|
+
* no router, so a consumer renders it from a server route and hands it the
|
|
44
|
+
* document their pipeline produced.
|
|
45
|
+
*/
|
|
46
|
+
export function BlogPostPage({ title, description, date, dateTime, author, tags, readingTime, children, previous, next, trailLabels, trailLabel, indexLink, footer, className, }) {
|
|
47
|
+
return (_jsxs(Section, { className: className, children: [_jsxs("article", { "data-slot": "blog-post", className: "flex flex-col gap-8", children: [_jsxs("header", { className: "flex flex-col gap-4", children: [_jsx(Heading, { as: "h1", size: "3xl", children: title }), description ? (_jsx(Text, { size: "lg", className: "text-muted-foreground max-w-measure", children: description })) : null, _jsxs("div", { className: "text-muted-foreground flex flex-wrap items-center gap-x-3 gap-y-2 text-sm", children: [author ? _jsx("span", { className: "text-foreground font-medium", children: author }) : null, _jsx("time", { dateTime: dateTime, children: date }), readingTime ? _jsx("span", { children: readingTime }) : null] }), tags && tags.length > 0 ? (_jsx("ul", { className: "flex flex-wrap items-center gap-2", children: tags.map((tag) => (_jsx("li", { children: tag.href ? (_jsx("a", { href: tag.href, className: "rounded-sm", "aria-label": `Posts tagged ${tag.label}`, children: _jsx(Badge, { variant: "secondary", children: tag.label }) })) : (_jsx(Badge, { variant: "secondary", children: tag.label })) }, tag.label))) })) : null] }), _jsx(Prose, { children: children }), previous || next ? (_jsxs("nav", { "aria-label": trailLabel, className: "border-border grid gap-4 border-t pt-6 sm:grid-cols-2", children: [previous ? (_jsxs("a", { href: previous.href, className: "flex flex-col gap-1 rounded-sm", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium tracking-wide uppercase", children: trailLabels.previous }), _jsx("span", { className: "text-sm font-semibold", children: previous.title })] })) : null, next ? (_jsxs("a", { href: next.href, className: "flex flex-col gap-1 rounded-sm sm:items-end sm:text-right", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium tracking-wide uppercase", children: trailLabels.next }), _jsx("span", { className: "text-sm font-semibold", children: next.title })] })) : null] })) : null, footer ? _jsx("div", { className: "border-border border-t pt-8", children: footer }) : null] }), indexLink ? (_jsx("div", { className: "mt-10 flex justify-center", children: _jsx(CtaLink, { href: indexLink.href, variant: "outline", children: indexLink.title }) })) : null] }));
|
|
48
|
+
}
|
|
49
|
+
export default BlogPostPage;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react';
|
|
2
|
+
import { AppShell01 } from '../../blocks/app-shell-01';
|
|
3
|
+
import { DataTable01 } from '../../blocks/data-table-01';
|
|
4
|
+
import { PageHeader01 } from '../../blocks/page-header-01';
|
|
5
|
+
import { Stats01 } from '../../blocks/stats-01';
|
|
6
|
+
export type DashboardPageProps = {
|
|
7
|
+
/**
|
|
8
|
+
* The frame: the navigation rail, the top bar and the mobile navigation
|
|
9
|
+
* sheet. Navigation, actions and the rail slots are passed as nodes, so the
|
|
10
|
+
* page never imports a router.
|
|
11
|
+
*/
|
|
12
|
+
shell: Omit<ComponentProps<typeof AppShell01>, 'children'>;
|
|
13
|
+
/** The page title band. */
|
|
14
|
+
header: ComponentProps<typeof PageHeader01>;
|
|
15
|
+
/** The key-figure row above the table. */
|
|
16
|
+
stats: ComponentProps<typeof Stats01>;
|
|
17
|
+
/** The main table, with its rows, columns, labels and callbacks. */
|
|
18
|
+
table: ComponentProps<typeof DataTable01>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* A complete dashboard screen.
|
|
22
|
+
*
|
|
23
|
+
* It composes `AppShell01`, `PageHeader01`, `Stats01` and `DataTable01`: the
|
|
24
|
+
* shell provides the frame, the header names the screen, the stats summarise it
|
|
25
|
+
* and the table carries the working set. The page owns the sequence and the
|
|
26
|
+
* spacing only. Every row, column, label and handler is a prop, and the page
|
|
27
|
+
* fetches nothing.
|
|
28
|
+
*
|
|
29
|
+
* The page is a client component because the blocks it composes are stateful.
|
|
30
|
+
* That is a property of this composition, not of the data: the consumer still
|
|
31
|
+
* owns the rows and the callbacks, and can drive the table from a server render
|
|
32
|
+
* or a client cache by the same props.
|
|
33
|
+
*/
|
|
34
|
+
export declare function DashboardPage({ shell, header, stats, table }: DashboardPageProps): import("react").JSX.Element;
|
|
35
|
+
export default DashboardPage;
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard-page/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAE/C,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;OAIG;IACH,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,EAAE,UAAU,CAAC,CAAA;IAC1D,2BAA2B;IAC3B,MAAM,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAA;IAC3C,0CAA0C;IAC1C,KAAK,EAAE,cAAc,CAAC,OAAO,OAAO,CAAC,CAAA;IACrC,oEAAoE;IACpE,KAAK,EAAE,cAAc,CAAC,OAAO,WAAW,CAAC,CAAA;CAC1C,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,kBAAkB,+BAUhF;AAED,eAAe,aAAa,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { AppShell01 } from '../../blocks/app-shell-01';
|
|
4
|
+
import { DataTable01 } from '../../blocks/data-table-01';
|
|
5
|
+
import { PageHeader01 } from '../../blocks/page-header-01';
|
|
6
|
+
import { Stats01 } from '../../blocks/stats-01';
|
|
7
|
+
/**
|
|
8
|
+
* A complete dashboard screen.
|
|
9
|
+
*
|
|
10
|
+
* It composes `AppShell01`, `PageHeader01`, `Stats01` and `DataTable01`: the
|
|
11
|
+
* shell provides the frame, the header names the screen, the stats summarise it
|
|
12
|
+
* and the table carries the working set. The page owns the sequence and the
|
|
13
|
+
* spacing only. Every row, column, label and handler is a prop, and the page
|
|
14
|
+
* fetches nothing.
|
|
15
|
+
*
|
|
16
|
+
* The page is a client component because the blocks it composes are stateful.
|
|
17
|
+
* That is a property of this composition, not of the data: the consumer still
|
|
18
|
+
* owns the rows and the callbacks, and can drive the table from a server render
|
|
19
|
+
* or a client cache by the same props.
|
|
20
|
+
*/
|
|
21
|
+
export function DashboardPage({ shell, header, stats, table }) {
|
|
22
|
+
return (_jsx(AppShell01, { ...shell, children: _jsxs("div", { className: "mx-auto flex w-full max-w-page flex-col gap-8", children: [_jsx(PageHeader01, { ...header, headingLevel: header.headingLevel ?? 'h1' }), _jsx(Stats01, { ...stats }), _jsx(DataTable01, { ...table })] }) }));
|
|
23
|
+
}
|
|
24
|
+
export default DashboardPage;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every Prism Page.
|
|
3
|
+
*
|
|
4
|
+
* A Page is a shipped, installable screen model composed of Blocks and
|
|
5
|
+
* Components that receives application-owned navigation, content and data
|
|
6
|
+
* (ticket 07). The v1 roster ships four Pages. Each is also importable on its
|
|
7
|
+
* own subpath, `@nanisoft/prism-ui/pages/<slug>`.
|
|
8
|
+
*/
|
|
9
|
+
export { MarketingPage } from './marketing-page';
|
|
10
|
+
export type { MarketingPageProps } from './marketing-page';
|
|
11
|
+
export { DashboardPage } from './dashboard-page';
|
|
12
|
+
export type { DashboardPageProps } from './dashboard-page';
|
|
13
|
+
export { SettingsPage } from './settings-page';
|
|
14
|
+
export type { SettingsPageProps, SettingsPageTab } from './settings-page';
|
|
15
|
+
export { AuthPage } from './auth-page';
|
|
16
|
+
export type { AuthPageProps, AuthPageAside } from './auth-page';
|
|
17
|
+
export { NotFoundPage } from './not-found-page';
|
|
18
|
+
export type { NotFoundPageProps, NotFoundLink } from './not-found-page';
|
|
19
|
+
export { BlogPostPage } from './blog-post-page';
|
|
20
|
+
export type { BlogPostPageProps, BlogPostTag, BlogPostNeighbour, BlogPostTrailLabels } from './blog-post-page';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every Prism Page.
|
|
3
|
+
*
|
|
4
|
+
* A Page is a shipped, installable screen model composed of Blocks and
|
|
5
|
+
* Components that receives application-owned navigation, content and data
|
|
6
|
+
* (ticket 07). The v1 roster ships four Pages. Each is also importable on its
|
|
7
|
+
* own subpath, `@nanisoft/prism-ui/pages/<slug>`.
|
|
8
|
+
*/
|
|
9
|
+
export { MarketingPage } from './marketing-page';
|
|
10
|
+
export { DashboardPage } from './dashboard-page';
|
|
11
|
+
export { SettingsPage } from './settings-page';
|
|
12
|
+
export { AuthPage } from './auth-page';
|
|
13
|
+
export { NotFoundPage } from './not-found-page';
|
|
14
|
+
export { BlogPostPage } from './blog-post-page';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react';
|
|
2
|
+
import { Cta01 } from '../../blocks/cta-01';
|
|
3
|
+
import { FeatureGrid01 } from '../../blocks/feature-grid-01';
|
|
4
|
+
import { Hero01 } from '../../blocks/hero-01';
|
|
5
|
+
import { Pricing01 } from '../../blocks/pricing-01';
|
|
6
|
+
import { Stats01 } from '../../blocks/stats-01';
|
|
7
|
+
import type { HeadingLevel } from '../../components/ui/section';
|
|
8
|
+
export type MarketingPageProps = {
|
|
9
|
+
/** The opening band: an optional eyebrow, the headline and one or two actions. */
|
|
10
|
+
hero: ComponentProps<typeof Hero01>;
|
|
11
|
+
/** The capability grid below the hero. */
|
|
12
|
+
features: ComponentProps<typeof FeatureGrid01>;
|
|
13
|
+
/** The key-figure row. */
|
|
14
|
+
stats: ComponentProps<typeof Stats01>;
|
|
15
|
+
/** The plan comparison. */
|
|
16
|
+
pricing: ComponentProps<typeof Pricing01>;
|
|
17
|
+
/** The closing call to action. */
|
|
18
|
+
cta: ComponentProps<typeof Cta01>;
|
|
19
|
+
/**
|
|
20
|
+
* The heading level for the hero. Defaults to `h1`, because a page owns the
|
|
21
|
+
* top of the document outline. A consumer that embeds the page under a
|
|
22
|
+
* heading it already owns passes one level deeper.
|
|
23
|
+
*/
|
|
24
|
+
headingLevel?: HeadingLevel;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* A complete marketing page.
|
|
28
|
+
*
|
|
29
|
+
* It composes `Hero01`, `FeatureGrid01`, `Stats01`, `Pricing01` and `Cta01` in
|
|
30
|
+
* reading order and passes each block its own props unchanged, so the page adds
|
|
31
|
+
* the sequence and nothing else. Every string, number and action is a prop, and
|
|
32
|
+
* the page ships no sample copy and fetches nothing. It is a product-agnostic
|
|
33
|
+
* screen model, not this site's own landing route: a consumer installs it,
|
|
34
|
+
* passes their own content and owns the links.
|
|
35
|
+
*
|
|
36
|
+
* The hero is the page's primary heading, so it defaults to `h1`; set
|
|
37
|
+
* `headingLevel` when the page is embedded rather than rendered as a screen.
|
|
38
|
+
* The composed blocks keep their own `h2` defaults, so the outline stays one
|
|
39
|
+
* heading per section below the hero.
|
|
40
|
+
*/
|
|
41
|
+
export declare function MarketingPage({ hero, features, stats, pricing, cta, headingLevel, }: MarketingPageProps): import("react").JSX.Element;
|
|
42
|
+
export default MarketingPage;
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/marketing-page/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE/D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kFAAkF;IAClF,IAAI,EAAE,cAAc,CAAC,OAAO,MAAM,CAAC,CAAA;IACnC,0CAA0C;IAC1C,QAAQ,EAAE,cAAc,CAAC,OAAO,aAAa,CAAC,CAAA;IAC9C,0BAA0B;IAC1B,KAAK,EAAE,cAAc,CAAC,OAAO,OAAO,CAAC,CAAA;IACrC,2BAA2B;IAC3B,OAAO,EAAE,cAAc,CAAC,OAAO,SAAS,CAAC,CAAA;IACzC,kCAAkC;IAClC,GAAG,EAAE,cAAc,CAAC,OAAO,KAAK,CAAC,CAAA;IACjC;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,OAAO,EACP,GAAG,EACH,YAAmB,GACpB,EAAE,kBAAkB,+BAUpB;AAED,eAAe,aAAa,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Cta01 } from '../../blocks/cta-01';
|
|
3
|
+
import { FeatureGrid01 } from '../../blocks/feature-grid-01';
|
|
4
|
+
import { Hero01 } from '../../blocks/hero-01';
|
|
5
|
+
import { Pricing01 } from '../../blocks/pricing-01';
|
|
6
|
+
import { Stats01 } from '../../blocks/stats-01';
|
|
7
|
+
/**
|
|
8
|
+
* A complete marketing page.
|
|
9
|
+
*
|
|
10
|
+
* It composes `Hero01`, `FeatureGrid01`, `Stats01`, `Pricing01` and `Cta01` in
|
|
11
|
+
* reading order and passes each block its own props unchanged, so the page adds
|
|
12
|
+
* the sequence and nothing else. Every string, number and action is a prop, and
|
|
13
|
+
* the page ships no sample copy and fetches nothing. It is a product-agnostic
|
|
14
|
+
* screen model, not this site's own landing route: a consumer installs it,
|
|
15
|
+
* passes their own content and owns the links.
|
|
16
|
+
*
|
|
17
|
+
* The hero is the page's primary heading, so it defaults to `h1`; set
|
|
18
|
+
* `headingLevel` when the page is embedded rather than rendered as a screen.
|
|
19
|
+
* The composed blocks keep their own `h2` defaults, so the outline stays one
|
|
20
|
+
* heading per section below the hero.
|
|
21
|
+
*/
|
|
22
|
+
export function MarketingPage({ hero, features, stats, pricing, cta, headingLevel = 'h1', }) {
|
|
23
|
+
return (_jsxs("div", { className: "bg-background text-foreground", children: [_jsx(Hero01, { ...hero, headingLevel: headingLevel }), _jsx(FeatureGrid01, { ...features }), _jsx(Stats01, { ...stats }), _jsx(Pricing01, { ...pricing }), _jsx(Cta01, { ...cta })] }));
|
|
24
|
+
}
|
|
25
|
+
export default MarketingPage;
|