@mindlogic-ai/logician-ui 5.0.0-alpha.3 → 5.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Banner/Banner.types.d.ts +24 -1
- package/dist/components/Banner/Banner.types.d.ts.map +1 -1
- package/dist/components/Card/Card.types.d.ts +12 -0
- package/dist/components/Card/Card.types.d.ts.map +1 -1
- package/dist/components/ColorMode/ColorModeToggle.d.ts +7 -2
- package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -1
- package/dist/components/ColorMode/ColorModeToggle.js +8 -3
- package/dist/components/ColorMode/ColorModeToggle.js.map +1 -1
- package/dist/components/ColorMode/ColorModeToggle.mjs +8 -3
- package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -1
- package/dist/components/Confetti/Confetti.types.d.ts +5 -1
- package/dist/components/Confetti/Confetti.types.d.ts.map +1 -1
- package/dist/components/Confetti/confettiColors.d.ts +5 -5
- package/dist/components/Confetti/confettiColors.js +5 -5
- package/dist/components/Confetti/confettiColors.mjs +5 -5
- package/dist/components/ErrorFallback/ErrorFallback.types.d.ts +6 -0
- package/dist/components/ErrorFallback/ErrorFallback.types.d.ts.map +1 -1
- package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +4 -1
- package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -1
- package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
- package/dist/components/LineGraph/LineGraph.js +4 -5
- package/dist/components/LineGraph/LineGraph.js.map +1 -1
- package/dist/components/LineGraph/LineGraph.mjs +5 -6
- package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
- package/dist/components/LineGraph/LineGraph.types.d.ts +12 -2
- package/dist/components/LineGraph/LineGraph.types.d.ts.map +1 -1
- package/dist/components/LineGraph/seriesColors.d.ts +12 -8
- package/dist/components/LineGraph/seriesColors.d.ts.map +1 -1
- package/dist/components/LineGraph/seriesColors.js +8 -7
- package/dist/components/LineGraph/seriesColors.js.map +1 -1
- package/dist/components/LineGraph/seriesColors.mjs +8 -7
- package/dist/components/LineGraph/seriesColors.mjs.map +1 -1
- package/dist/components/Masonry/Masonry.types.d.ts +8 -3
- package/dist/components/Masonry/Masonry.types.d.ts.map +1 -1
- package/dist/components/Menu/MenuItem.types.d.ts +8 -0
- package/dist/components/Menu/MenuItem.types.d.ts.map +1 -1
- package/dist/components/Modal/ModalCloseButton.d.ts +1 -1
- package/dist/components/Modal/ModalCloseButton.js +1 -1
- package/dist/components/Modal/ModalCloseButton.mjs +1 -1
- package/dist/components/Pagination/Pagination.d.ts +11 -10
- package/dist/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.js +11 -10
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Pagination/Pagination.mjs +11 -10
- package/dist/components/Pagination/Pagination.mjs.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.types.d.ts +9 -0
- package/dist/components/ProgressBar/ProgressBar.types.d.ts.map +1 -1
- package/dist/components/RadialProgress/RadialProgress.types.d.ts +21 -1
- package/dist/components/RadialProgress/RadialProgress.types.d.ts.map +1 -1
- package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts +8 -0
- package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js +6 -7
- package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.mjs +6 -7
- package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
- package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts +2 -0
- package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts.map +1 -1
- package/dist/components/Toast/Toast.styles.d.ts +6 -2
- package/dist/components/Toast/Toast.styles.d.ts.map +1 -1
- package/dist/components/Toast/Toast.styles.js +18 -10
- package/dist/components/Toast/Toast.styles.js.map +1 -1
- package/dist/components/Toast/Toast.styles.mjs +18 -10
- package/dist/components/Toast/Toast.styles.mjs.map +1 -1
- package/dist/theme/colors.d.ts +2 -2
- package/dist/theme/colors.d.ts.map +1 -1
- package/dist/theme/colors.js +22 -2
- package/dist/theme/colors.js.map +1 -1
- package/dist/theme/colors.mjs +23 -3
- package/dist/theme/colors.mjs.map +1 -1
- package/dist/theme/palette.generated.d.ts +98 -0
- package/dist/theme/palette.generated.d.ts.map +1 -1
- package/dist/theme/palette.generated.js +99 -0
- package/dist/theme/palette.generated.js.map +1 -1
- package/dist/theme/palette.generated.mjs +99 -1
- package/dist/theme/palette.generated.mjs.map +1 -1
- package/dist/theme/paletteSwatches.d.ts +20 -0
- package/dist/theme/paletteSwatches.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Accordion/Accordion.stories.tsx +85 -0
- package/src/components/Accordion/Accordion.usage.mdx +200 -0
- package/src/components/Appear/Appear.usage.mdx +107 -0
- package/src/components/Avatar/Avatar.stories.tsx +71 -1
- package/src/components/Avatar/Avatar.usage.mdx +166 -0
- package/src/components/Banner/Banner.stories.tsx +152 -2
- package/src/components/Banner/Banner.types.ts +30 -1
- package/src/components/Banner/Banner.usage.mdx +233 -0
- package/src/components/BottomSheet/BottomSheet.stories.tsx +168 -1
- package/src/components/BottomSheet/BottomSheet.usage.mdx +216 -0
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +59 -0
- package/src/components/Breadcrumb/Breadcrumb.usage.mdx +181 -0
- package/src/components/Button/Button.stories.tsx +263 -3
- package/src/components/Button/Button.usage.mdx +342 -0
- package/src/components/Card/Card.stories.tsx +106 -0
- package/src/components/Card/Card.types.ts +12 -0
- package/src/components/Card/Card.usage.mdx +216 -0
- package/src/components/Checkbox/Checkbox.stories.tsx +140 -13
- package/src/components/Checkbox/Checkbox.usage.mdx +214 -0
- package/src/components/Chip/Chip.usage.mdx +78 -0
- package/src/components/Code/Code.stories.tsx +60 -0
- package/src/components/Code/Code.usage.mdx +187 -0
- package/src/components/CodeTabs/CodeTabs.stories.tsx +53 -0
- package/src/components/CodeTabs/CodeTabs.usage.mdx +176 -0
- package/src/components/Collapsible/Collapsible.stories.tsx +58 -0
- package/src/components/Collapsible/Collapsible.usage.mdx +173 -0
- package/src/components/ColorMode/ColorMode.stories.tsx +50 -0
- package/src/components/ColorMode/ColorMode.usage.mdx +135 -0
- package/src/components/ColorMode/ColorModeToggle.tsx +10 -3
- package/src/components/Confetti/Confetti.types.ts +5 -1
- package/src/components/Confetti/Confetti.usage.mdx +111 -0
- package/src/components/Confetti/confettiColors.ts +5 -5
- package/src/components/Container/Container.stories.tsx +32 -0
- package/src/components/Container/Container.usage.mdx +130 -0
- package/src/components/CopyableCode/CopyableCode.stories.tsx +62 -0
- package/src/components/CopyableCode/CopyableCode.usage.mdx +168 -0
- package/src/components/CountBadge/CountBadge.stories.tsx +69 -0
- package/src/components/CountBadge/CountBadge.usage.mdx +215 -0
- package/src/components/CountUp/CountUp.usage.mdx +107 -0
- package/src/components/DatePicker/DatePicker.usage.mdx +177 -0
- package/src/components/DatePicker/RangeDatePicker.stories.tsx +87 -3
- package/src/components/ErrorFallback/ErrorFallback.types.ts +6 -0
- package/src/components/ErrorFallback/ErrorFallback.usage.mdx +127 -0
- package/src/components/ExpandableText/ExpandableText.stories.tsx +55 -0
- package/src/components/ExpandableText/ExpandableText.usage.mdx +176 -0
- package/src/components/FileInput/FileInput.stories.tsx +38 -1
- package/src/components/FileInput/FileInput.usage.mdx +178 -0
- package/src/components/FileItem/FileItem.stories.tsx +71 -0
- package/src/components/FileItem/FileItem.usage.mdx +180 -0
- package/src/components/FileList/FileList.stories.tsx +25 -0
- package/src/components/FileList/FileList.usage.mdx +165 -0
- package/src/components/FlyTo/FlyTo.usage.mdx +99 -0
- package/src/components/Form/Form.stories.tsx +149 -0
- package/src/components/Form/Form.usage.mdx +201 -0
- package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +4 -1
- package/src/components/FormControl/FormControl.stories.tsx +35 -0
- package/src/components/FormControl/FormControl.usage.mdx +128 -0
- package/src/components/FormIntegration/FormIntegration.usage.mdx +158 -0
- package/src/components/FormLabel/FormLabel.stories.tsx +71 -0
- package/src/components/FormLabel/FormLabel.usage.mdx +125 -0
- package/src/components/Icon/Icon.stories.tsx +61 -1
- package/src/components/Icon/Icon.usage.mdx +158 -0
- package/src/components/IconButton/IconButton.stories.tsx +209 -5
- package/src/components/IconButton/IconButton.usage.mdx +273 -0
- package/src/components/InfoSprinkle/InfoSprinkle.stories.tsx +77 -1
- package/src/components/InfoSprinkle/InfoSprinkle.usage.mdx +189 -0
- package/src/components/InlineCode/InlineCode.stories.tsx +75 -0
- package/src/components/InlineCode/InlineCode.usage.mdx +142 -0
- package/src/components/Input/Input.stories.tsx +180 -0
- package/src/components/Input/Input.usage.mdx +278 -0
- package/src/components/LineGraph/LineGraph.stories.tsx +112 -0
- package/src/components/LineGraph/LineGraph.tsx +4 -5
- package/src/components/LineGraph/LineGraph.types.ts +12 -2
- package/src/components/LineGraph/LineGraph.usage.mdx +186 -0
- package/src/components/LineGraph/seriesColors.test.ts +11 -10
- package/src/components/LineGraph/seriesColors.ts +18 -16
- package/src/components/Loaders/Loaders.stories.tsx +93 -0
- package/src/components/Loaders/Loaders.usage.mdx +180 -0
- package/src/components/LogicianProvider/LogicianProvider.usage.mdx +98 -0
- package/src/components/Markdown/Markdown.stories.tsx +53 -0
- package/src/components/Markdown/Markdown.usage.mdx +182 -0
- package/src/components/Masonry/Masonry.stories.tsx +63 -1
- package/src/components/Masonry/Masonry.types.ts +8 -3
- package/src/components/Masonry/Masonry.usage.mdx +142 -0
- package/src/components/MaxLengthIndicator/MaxLengthIndicator.stories.tsx +57 -0
- package/src/components/MaxLengthIndicator/MaxLengthIndicator.usage.mdx +125 -0
- package/src/components/Menu/Menu.stories.tsx +146 -2
- package/src/components/Menu/Menu.usage.mdx +230 -0
- package/src/components/Menu/MenuItem.types.ts +8 -0
- package/src/components/Modal/Modal.stories.tsx +177 -1
- package/src/components/Modal/Modal.usage.mdx +262 -0
- package/src/components/Modal/ModalCloseButton.tsx +1 -1
- package/src/components/MonthPicker/MonthPicker.stories.tsx +30 -0
- package/src/components/MonthPicker/MonthPicker.usage.mdx +191 -0
- package/src/components/Pagination/Pagination.stories.tsx +90 -1
- package/src/components/Pagination/Pagination.tsx +11 -10
- package/src/components/Pagination/Pagination.usage.mdx +186 -0
- package/src/components/PasswordInput/PasswordInput.stories.tsx +51 -0
- package/src/components/PasswordInput/PasswordInput.usage.mdx +193 -0
- package/src/components/PinInput/PinInput.stories.tsx +91 -0
- package/src/components/PinInput/PinInput.usage.mdx +194 -0
- package/src/components/Popover/Popover.stories.tsx +104 -1
- package/src/components/Popover/Popover.usage.mdx +197 -0
- package/src/components/ProgressBar/ProgressBar.stories.tsx +92 -1
- package/src/components/ProgressBar/ProgressBar.types.ts +9 -0
- package/src/components/ProgressBar/ProgressBar.usage.mdx +210 -0
- package/src/components/Pulse/Pulse.usage.mdx +102 -0
- package/src/components/RadialProgress/RadialProgress.stories.tsx +74 -1
- package/src/components/RadialProgress/RadialProgress.types.ts +21 -1
- package/src/components/RadialProgress/RadialProgress.usage.mdx +153 -0
- package/src/components/Radio/Radio.stories.tsx +119 -0
- package/src/components/Radio/Radio.usage.mdx +187 -0
- package/src/components/Reveal/Reveal.usage.mdx +105 -0
- package/src/components/ScaledContext/ScaledContext.usage.mdx +111 -0
- package/src/components/SeeMoreButton/SeeMoreButton.stories.tsx +146 -2
- package/src/components/SeeMoreButton/SeeMoreButton.types.ts +8 -0
- package/src/components/SeeMoreButton/SeeMoreButton.usage.mdx +213 -0
- package/src/components/SegmentedControl/SegmentedControl.stories.tsx +69 -0
- package/src/components/SegmentedControl/SegmentedControl.tsx +6 -7
- package/src/components/SegmentedControl/SegmentedControl.usage.mdx +209 -0
- package/src/components/SegmentedProgressBar/SegmentedProgressBar.stories.tsx +54 -0
- package/src/components/SegmentedProgressBar/SegmentedProgressBar.types.ts +2 -0
- package/src/components/SegmentedProgressBar/SegmentedProgressBar.usage.mdx +145 -0
- package/src/components/Select/Select.stories.tsx +209 -1
- package/src/components/Select/Select.usage.mdx +278 -0
- package/src/components/Shake/Shake.usage.mdx +107 -0
- package/src/components/Slider/Slider.stories.tsx +116 -0
- package/src/components/Slider/Slider.usage.mdx +179 -0
- package/src/components/Spinner/Spinner.stories.tsx +64 -0
- package/src/components/Spinner/Spinner.usage.mdx +136 -0
- package/src/components/SwapTransition/SwapTransition.usage.mdx +102 -0
- package/src/components/Switch/Switch.stories.tsx +131 -6
- package/src/components/Switch/Switch.usage.mdx +199 -0
- package/src/components/Table/Table.stories.tsx +159 -1
- package/src/components/Table/Table.usage.mdx +235 -0
- package/src/components/Tabs/Tabs.stories.tsx +86 -0
- package/src/components/Tabs/Tabs.usage.mdx +219 -0
- package/src/components/Tag/Tag.stories.tsx +181 -4
- package/src/components/Tag/Tag.usage.mdx +257 -0
- package/src/components/Textarea/Textarea.stories.tsx +113 -0
- package/src/components/Textarea/Textarea.usage.mdx +186 -0
- package/src/components/Toast/Toast.stories.tsx +185 -3
- package/src/components/Toast/Toast.styles.ts +18 -10
- package/src/components/Toast/Toast.usage.mdx +265 -0
- package/src/components/Tooltip/Tooltip.stories.tsx +86 -1
- package/src/components/Tooltip/Tooltip.usage.mdx +211 -0
- package/src/components/Tree/Tree.stories.tsx +89 -0
- package/src/components/Tree/Tree.usage.mdx +207 -0
- package/src/components/Typography/Typography.stories.tsx +117 -0
- package/src/components/Typography/Typography.usage.mdx +251 -0
- package/src/components/Workflow/Workflow.usage.mdx +199 -0
- package/src/components/noRawScales.test.ts +5 -1
- package/src/foundations/BrandAssets.mdx +637 -0
- package/src/foundations/BrandAssets.stories.tsx +680 -0
- package/src/foundations/BrandColour.mdx +65 -2
- package/src/theme/BazePalette.stories.tsx +111 -1
- package/src/theme/Palette.stories.tsx +2 -2
- package/src/theme/SemanticTokens.mdx +75 -16
- package/src/theme/claude.md +15 -9
- package/src/theme/colors.ts +33 -3
- package/src/theme/contrast.test.ts +32 -0
- package/src/theme/palette.generated.ts +99 -0
- package/src/theme/paletteSwatches.ts +35 -0
|
@@ -0,0 +1,680 @@
|
|
|
1
|
+
import type { CSSProperties, ReactNode } from 'react';
|
|
2
|
+
import { Box, Flex, Grid, Stack } from '@chakra-ui/react';
|
|
3
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
4
|
+
|
|
5
|
+
import { T } from '../guidelines/_components/Lang';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Specimens for `BrandAssets.mdx` (Foundations / Brand assets).
|
|
9
|
+
*
|
|
10
|
+
* Everything here is drawn the way baze.co draws it: the geometry is copied
|
|
11
|
+
* verbatim from `mindlogic-ai/baze-landing-page` `src/lib/marks.ts` (itself
|
|
12
|
+
* traced from the Illustrator master), the grain filter from
|
|
13
|
+
* `src/components/ui/GrainDefs.astro`, and every size, offset and colour from
|
|
14
|
+
* the component that uses it (cited per story). These helpers are local to the
|
|
15
|
+
* docs page on purpose — they are not a library component, and the package
|
|
16
|
+
* ships no brand raster. The artwork images are loaded from baze.co itself,
|
|
17
|
+
* never bundled.
|
|
18
|
+
*
|
|
19
|
+
* Hidden from the sidebar (`!dev`); the MDX page is the entry point.
|
|
20
|
+
*/
|
|
21
|
+
const meta: Meta = {
|
|
22
|
+
title: 'Foundations/Brand assets',
|
|
23
|
+
tags: ['!dev'],
|
|
24
|
+
parameters: { layout: 'padded' },
|
|
25
|
+
};
|
|
26
|
+
export default meta;
|
|
27
|
+
type Story = StoryObj;
|
|
28
|
+
|
|
29
|
+
/* -------------------------------------------------------------------------
|
|
30
|
+
Geometry — verbatim from baze-landing-page `src/lib/marks.ts`.
|
|
31
|
+
Do not nudge these numbers; re-trace from the master file instead.
|
|
32
|
+
------------------------------------------------------------------------- */
|
|
33
|
+
|
|
34
|
+
const MARK_ASPECT = 1.04051;
|
|
35
|
+
const MARK_VIEWBOX = '0 0 104.051 100';
|
|
36
|
+
const PAIR =
|
|
37
|
+
'M 28.178 53.749 C 28.178 53.749 26.763 52.382 26.763 49.999 C 26.763 47.619 28.178 46.252 28.178 46.252 L 46.856 27.578 C 48.753 25.681 48.753 22.598 46.856 20.701 L 27.577 1.423 C 25.68 -0.474 22.601 -0.474 20.7 1.423 L 1.426 20.701 C -0.475 22.598 -0.475 25.681 1.426 27.578 L 20.1 46.252 C 20.1 46.252 21.518 47.619 21.518 49.999 C 21.518 52.382 20.1 53.749 20.1 53.749 L 1.426 72.423 C -0.475 74.32 -0.475 77.403 1.426 79.3 L 20.7 98.574 C 22.601 100.475 25.68 100.475 27.577 98.574 L 46.856 79.3 C 48.753 77.403 48.753 74.32 46.856 72.423 Z';
|
|
38
|
+
const COUNTER =
|
|
39
|
+
'M 79.911 34.273 C 74.315 34.273 69.778 29.736 69.778 24.14 C 69.778 18.543 74.315 14.006 79.911 14.006 C 85.508 14.006 90.045 18.543 90.045 24.14 C 90.045 29.736 85.508 34.273 79.911 34.273 M 102.628 20.701 L 83.35 1.427 C 81.453 -0.474 78.374 -0.474 76.473 1.427 L 57.198 20.701 C 55.297 22.598 55.297 25.677 57.198 27.578 L 76.473 46.853 C 78.374 48.754 81.453 48.754 83.35 46.853 L 102.628 27.578 C 104.525 25.677 104.525 22.598 102.628 20.701';
|
|
40
|
+
const LOOSE =
|
|
41
|
+
'M 76.473 98.574 L 57.198 79.3 C 55.297 77.403 55.297 74.324 57.198 72.423 L 76.473 53.148 C 78.374 51.247 81.453 51.247 83.35 53.148 L 102.628 72.423 C 104.525 74.324 104.525 77.403 102.628 79.3 L 83.35 98.574 C 81.453 100.475 78.374 100.475 76.473 98.574';
|
|
42
|
+
/** `markPath` is the three pieces' subpaths in one path. */
|
|
43
|
+
const MARK = `${PAIR} M 28.178 53.749 M ${COUNTER.slice(2)} M ${LOOSE.slice(2)}`;
|
|
44
|
+
|
|
45
|
+
const WORDMARK_ASPECT = 4.323882;
|
|
46
|
+
const WORDMARK_VIEWBOX = '0 0 432.388 100';
|
|
47
|
+
const WORDMARK =
|
|
48
|
+
'M 37.144 77.428 L 57.432 77.428 C 60.715 77.428 64.433 77.285 67.145 75.287 C 68.715 74.002 70.428 71.855 70.428 68.287 C 70.428 65.568 69.571 63.142 66.716 61.286 C 65.432 60.572 62.856 59.288 57.004 59.288 L 37.144 59.288 Z M 37.144 38.571 L 55.57 38.571 C 58.288 38.571 61.857 38 63.712 36.716 C 65.432 35.574 66.716 33.284 66.716 30.429 C 66.716 27.431 65.432 25.284 63.855 24.285 C 62.142 23.143 58.431 22.572 56.569 22.572 L 37.144 22.572 Z M 66.145 0 C 81.003 0 88.575 1.713 93.428 4.717 C 95.718 6.144 103.575 11.568 103.575 23.714 C 103.575 31.285 100.143 36.288 97.288 39.142 C 92.286 44.145 85.571 46.143 84.286 46.428 L 84.286 46.999 C 89.146 47.856 96.146 50.425 100.571 54 C 105.002 57.568 108.999 63.427 108.999 72.569 C 108.999 81.425 105.002 88.86 99.286 93.142 C 97.003 94.855 89.146 100 67.287 100 L 0 100 L 0 0 Z M 66.145 0 M 177.791 63.712 L 167.222 35.288 L 156.939 63.712 Z M 143.366 100 L 105.937 100 L 150.081 0 L 184.507 0 L 228.651 100 L 191.222 100 L 185.798 85.856 L 148.796 85.856 Z M 143.366 100 M 266.956 72.569 L 323.811 22.144 L 323.811 0 L 226.951 0 L 226.951 27.431 L 276.669 27.431 L 223.668 74.145 L 235.081 100 L 325.667 100 L 325.667 72.569 Z M 266.956 72.569 M 418.673 37.715 L 418.673 61.286 L 369.24 61.286 L 369.24 73.574 L 432.388 73.574 L 432.388 100 L 332.103 100 L 332.103 0 L 430.954 0 L 430.954 26.432 L 369.24 26.432 L 369.24 37.715 Z M 418.673 37.715';
|
|
49
|
+
|
|
50
|
+
/** The lockup in mark-height units (mark = 100), measured off `Baze_logo_black.png`. */
|
|
51
|
+
const LOCKUP = { gap: 35.4, wordHeight: 58, wordCenterY: 49.5 };
|
|
52
|
+
const LOCKUP_W = 104.051 + LOCKUP.gap + WORDMARK_ASPECT * LOCKUP.wordHeight;
|
|
53
|
+
|
|
54
|
+
/** One Base Unit in a 24-unit box: `diamondMark`. */
|
|
55
|
+
const UNIT =
|
|
56
|
+
'M 10.291 23.291 L 0.709 13.709 C -0.236 12.766 -0.236 11.236 0.709 10.291 L 10.291 0.709 C 11.236 -0.236 12.766 -0.236 13.709 0.709 L 23.293 10.291 C 24.236 11.236 24.236 12.766 23.293 13.709 L 13.709 23.291 C 12.766 24.236 11.236 24.236 10.291 23.291';
|
|
57
|
+
|
|
58
|
+
/* -------------------------------------------------------------------------
|
|
59
|
+
Colour — baze.co `src/styles/tokens.css`. Artwork colours, fixed in both
|
|
60
|
+
colour modes (as FactChat's `artwork.*` are). Not product UI tokens.
|
|
61
|
+
------------------------------------------------------------------------- */
|
|
62
|
+
|
|
63
|
+
const BZ = {
|
|
64
|
+
ink: '#252525',
|
|
65
|
+
paper: '#fdfcf9',
|
|
66
|
+
wash: '#faf6f1',
|
|
67
|
+
cream: '#f5ede0',
|
|
68
|
+
faint: '#a8a8a8',
|
|
69
|
+
coral: '#ff8680',
|
|
70
|
+
coralDeep: '#da483e',
|
|
71
|
+
mint: '#86e0c5',
|
|
72
|
+
mintDeep: '#3c967d',
|
|
73
|
+
azure: '#37a9cc',
|
|
74
|
+
azureDeep: '#24768e',
|
|
75
|
+
} as const;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The artwork the specimens show, loaded from baze.co itself (it serves its
|
|
79
|
+
* images with `access-control-allow-origin: *`) at the intrinsic sizes listed
|
|
80
|
+
* in its `src/lib/images.ts`, so nothing is bundled and nothing reflows.
|
|
81
|
+
*/
|
|
82
|
+
const ART = {
|
|
83
|
+
typewriter: ['assets/typewriter.webp', 1325, 1388],
|
|
84
|
+
lightbulb: ['assets/lightbulb.webp', 774, 1081],
|
|
85
|
+
notebookPencil: ['assets/notebook-pencil.webp', 991, 1208],
|
|
86
|
+
manFloor: ['assets/collage/01-man-desk-flat.webp', 2400, 1752],
|
|
87
|
+
womanTyping: ['assets/collage/02-woman-laptop-flat.webp', 2311, 2400],
|
|
88
|
+
paperGridTorn: ['assets/paper-grid-torn.webp', 1734, 1415],
|
|
89
|
+
paperTornSquare: ['assets/paper-torn-square.webp', 1537, 1342],
|
|
90
|
+
poster1: ['gallery/poster-1.webp', 663, 994],
|
|
91
|
+
posterFestival: ['shots/poster-festival.webp', 900, 900],
|
|
92
|
+
poster2: ['gallery/poster-2.webp', 707, 1000],
|
|
93
|
+
posterBrunch: ['shots/poster-brunch.webp', 900, 900],
|
|
94
|
+
} as const;
|
|
95
|
+
type ArtKey = keyof typeof ART;
|
|
96
|
+
|
|
97
|
+
const Art = ({ name, style }: { name: ArtKey; style?: CSSProperties }) => {
|
|
98
|
+
const [path, width, height] = ART[name];
|
|
99
|
+
return (
|
|
100
|
+
<img
|
|
101
|
+
src={`https://baze.co/images/${path}`}
|
|
102
|
+
alt=""
|
|
103
|
+
width={width}
|
|
104
|
+
height={height}
|
|
105
|
+
decoding="async"
|
|
106
|
+
style={style}
|
|
107
|
+
/>
|
|
108
|
+
);
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/** A cutout centred in a plate's padding box, at any aspect ratio. */
|
|
112
|
+
const FIT: CSSProperties = {
|
|
113
|
+
position: 'absolute',
|
|
114
|
+
inset: 24,
|
|
115
|
+
width: 'calc(100% - 48px)',
|
|
116
|
+
height: 'calc(100% - 48px)',
|
|
117
|
+
objectFit: 'contain',
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
/** The house print treatment for a cutout on the wash (FeatureShowcase.astro). */
|
|
121
|
+
const PRINTED: CSSProperties = {
|
|
122
|
+
mixBlendMode: 'multiply',
|
|
123
|
+
filter: 'sepia(0.2) saturate(0.85) contrast(1.05)',
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/* -------------------------------------------------------------------------
|
|
127
|
+
Story-local renderers
|
|
128
|
+
------------------------------------------------------------------------- */
|
|
129
|
+
|
|
130
|
+
const Lockup = ({ size, color = BZ.ink }: { size: number; color?: string }) => (
|
|
131
|
+
<svg
|
|
132
|
+
width={+((size * LOCKUP_W) / 100).toFixed(2)}
|
|
133
|
+
height={size}
|
|
134
|
+
viewBox={`0 0 ${LOCKUP_W.toFixed(3)} 100`}
|
|
135
|
+
role="img"
|
|
136
|
+
aria-label="BAZE"
|
|
137
|
+
style={{ display: 'block', color }}
|
|
138
|
+
>
|
|
139
|
+
<path fill="currentColor" d={MARK} />
|
|
140
|
+
<g
|
|
141
|
+
transform={`translate(${(104.051 + LOCKUP.gap).toFixed(3)} ${(
|
|
142
|
+
LOCKUP.wordCenterY -
|
|
143
|
+
LOCKUP.wordHeight / 2
|
|
144
|
+
).toFixed(3)}) scale(${LOCKUP.wordHeight / 100})`}
|
|
145
|
+
>
|
|
146
|
+
<path fill="currentColor" d={WORDMARK} />
|
|
147
|
+
</g>
|
|
148
|
+
</svg>
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
const Mark = ({
|
|
152
|
+
size,
|
|
153
|
+
color = BZ.ink,
|
|
154
|
+
dim,
|
|
155
|
+
}: {
|
|
156
|
+
size: number;
|
|
157
|
+
color?: string;
|
|
158
|
+
/** Show one piece at full ink and the other two faint. */
|
|
159
|
+
dim?: 'pair' | 'counter' | 'loose';
|
|
160
|
+
}) => (
|
|
161
|
+
<svg
|
|
162
|
+
width={+(size * MARK_ASPECT).toFixed(2)}
|
|
163
|
+
height={size}
|
|
164
|
+
viewBox={MARK_VIEWBOX}
|
|
165
|
+
aria-hidden="true"
|
|
166
|
+
style={{ display: 'block', color }}
|
|
167
|
+
>
|
|
168
|
+
{dim ? (
|
|
169
|
+
(
|
|
170
|
+
[
|
|
171
|
+
['pair', PAIR],
|
|
172
|
+
['counter', COUNTER],
|
|
173
|
+
['loose', LOOSE],
|
|
174
|
+
] as const
|
|
175
|
+
).map(([name, d]) => (
|
|
176
|
+
<path
|
|
177
|
+
key={name}
|
|
178
|
+
fill="currentColor"
|
|
179
|
+
d={d}
|
|
180
|
+
opacity={name === dim ? 1 : 0.16}
|
|
181
|
+
/>
|
|
182
|
+
))
|
|
183
|
+
) : (
|
|
184
|
+
<path fill="currentColor" d={MARK} />
|
|
185
|
+
)}
|
|
186
|
+
</svg>
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
const Wordmark = ({
|
|
190
|
+
size,
|
|
191
|
+
color = BZ.ink,
|
|
192
|
+
}: {
|
|
193
|
+
size: number;
|
|
194
|
+
color?: string;
|
|
195
|
+
}) => (
|
|
196
|
+
<svg
|
|
197
|
+
width={+(size * WORDMARK_ASPECT).toFixed(2)}
|
|
198
|
+
height={size}
|
|
199
|
+
viewBox={WORDMARK_VIEWBOX}
|
|
200
|
+
role="img"
|
|
201
|
+
aria-label="BAZE"
|
|
202
|
+
style={{ display: 'block', color }}
|
|
203
|
+
>
|
|
204
|
+
<path fill="currentColor" d={WORDMARK} />
|
|
205
|
+
</svg>
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
/** The paper-grain filter, once per story (GrainDefs.astro). */
|
|
209
|
+
const GRAIN_ID = 'bz-grain-docs';
|
|
210
|
+
const GrainDefs = () => (
|
|
211
|
+
<svg
|
|
212
|
+
width="0"
|
|
213
|
+
height="0"
|
|
214
|
+
aria-hidden="true"
|
|
215
|
+
focusable="false"
|
|
216
|
+
style={{ position: 'absolute' }}
|
|
217
|
+
>
|
|
218
|
+
<filter
|
|
219
|
+
id={GRAIN_ID}
|
|
220
|
+
x="-5%"
|
|
221
|
+
y="-5%"
|
|
222
|
+
width="110%"
|
|
223
|
+
height="110%"
|
|
224
|
+
colorInterpolationFilters="sRGB"
|
|
225
|
+
>
|
|
226
|
+
<feTurbulence
|
|
227
|
+
type="fractalNoise"
|
|
228
|
+
baseFrequency="0.55"
|
|
229
|
+
numOctaves={3}
|
|
230
|
+
seed={7}
|
|
231
|
+
result="raw"
|
|
232
|
+
/>
|
|
233
|
+
<feColorMatrix
|
|
234
|
+
in="raw"
|
|
235
|
+
type="matrix"
|
|
236
|
+
values="0.213 0.715 0.072 0 0 0.213 0.715 0.072 0 0 0.213 0.715 0.072 0 0 0 0 0 0 1"
|
|
237
|
+
result="mono"
|
|
238
|
+
/>
|
|
239
|
+
<feComponentTransfer in="mono" result="dark">
|
|
240
|
+
<feFuncR type="linear" slope="0.38" intercept="0.62" />
|
|
241
|
+
<feFuncG type="linear" slope="0.38" intercept="0.62" />
|
|
242
|
+
<feFuncB type="linear" slope="0.38" intercept="0.62" />
|
|
243
|
+
</feComponentTransfer>
|
|
244
|
+
<feComponentTransfer in="mono" result="light">
|
|
245
|
+
<feFuncR type="linear" slope="0.24" intercept="0" />
|
|
246
|
+
<feFuncG type="linear" slope="0.24" intercept="0" />
|
|
247
|
+
<feFuncB type="linear" slope="0.24" intercept="0" />
|
|
248
|
+
</feComponentTransfer>
|
|
249
|
+
<feBlend in="SourceGraphic" in2="dark" mode="multiply" result="mul" />
|
|
250
|
+
<feBlend in="mul" in2="light" mode="screen" result="tex" />
|
|
251
|
+
<feComposite in="tex" in2="SourceGraphic" operator="in" />
|
|
252
|
+
</filter>
|
|
253
|
+
</svg>
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
/** A single Base Unit (Diamond.astro): solid, or outline for dark surfaces. */
|
|
257
|
+
const Unit = ({
|
|
258
|
+
size,
|
|
259
|
+
variant = 'solid',
|
|
260
|
+
grain = true,
|
|
261
|
+
className,
|
|
262
|
+
style,
|
|
263
|
+
}: {
|
|
264
|
+
size: number;
|
|
265
|
+
variant?: 'solid' | 'outline';
|
|
266
|
+
grain?: boolean;
|
|
267
|
+
className?: string;
|
|
268
|
+
style?: CSSProperties;
|
|
269
|
+
}) => (
|
|
270
|
+
<svg
|
|
271
|
+
className={className}
|
|
272
|
+
style={style}
|
|
273
|
+
width={size}
|
|
274
|
+
height={size}
|
|
275
|
+
viewBox="0 0 24 24"
|
|
276
|
+
aria-hidden="true"
|
|
277
|
+
focusable="false"
|
|
278
|
+
>
|
|
279
|
+
<g filter={grain ? `url(#${GRAIN_ID})` : undefined}>
|
|
280
|
+
{variant === 'solid' ? (
|
|
281
|
+
<path fill="currentColor" d={UNIT} />
|
|
282
|
+
) : (
|
|
283
|
+
<path
|
|
284
|
+
fill="none"
|
|
285
|
+
stroke="currentColor"
|
|
286
|
+
strokeWidth="2.2"
|
|
287
|
+
transform="translate(12 12) scale(0.9) translate(-12 -12)"
|
|
288
|
+
d={UNIT}
|
|
289
|
+
/>
|
|
290
|
+
)}
|
|
291
|
+
</g>
|
|
292
|
+
</svg>
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
const Ground = ({
|
|
296
|
+
bg,
|
|
297
|
+
children,
|
|
298
|
+
p = 6,
|
|
299
|
+
}: {
|
|
300
|
+
bg: string;
|
|
301
|
+
children: ReactNode;
|
|
302
|
+
p?: number;
|
|
303
|
+
}) => (
|
|
304
|
+
<Box style={{ background: bg }} borderRadius="12px" p={p}>
|
|
305
|
+
{children}
|
|
306
|
+
</Box>
|
|
307
|
+
);
|
|
308
|
+
|
|
309
|
+
const Caption = ({ children }: { children: ReactNode }) => (
|
|
310
|
+
<Box fontSize="xs" color="fg.muted" mt={2}>
|
|
311
|
+
{children}
|
|
312
|
+
</Box>
|
|
313
|
+
);
|
|
314
|
+
|
|
315
|
+
/* -------------------------------------------------------------------------
|
|
316
|
+
Stories
|
|
317
|
+
------------------------------------------------------------------------- */
|
|
318
|
+
|
|
319
|
+
export const LockupForms: Story = {
|
|
320
|
+
render: () => (
|
|
321
|
+
<Grid templateColumns={{ base: '1fr', md: '1fr 1fr' }} gap={4}>
|
|
322
|
+
<Ground bg={BZ.cream}>
|
|
323
|
+
<Stack gap={6} align="start">
|
|
324
|
+
<Lockup size={48} />
|
|
325
|
+
<Flex gap={8} align="end">
|
|
326
|
+
<Mark size={48} />
|
|
327
|
+
<Wordmark size={28} />
|
|
328
|
+
</Flex>
|
|
329
|
+
</Stack>
|
|
330
|
+
<Caption>
|
|
331
|
+
<T
|
|
332
|
+
en="Ink #252525 on cream — lockup, symbol, wordmark"
|
|
333
|
+
ko="크림 바탕의 잉크 #252525 — 로크업, 심볼, 워드마크"
|
|
334
|
+
/>
|
|
335
|
+
</Caption>
|
|
336
|
+
</Ground>
|
|
337
|
+
<Ground bg={BZ.ink}>
|
|
338
|
+
<Stack gap={6} align="start">
|
|
339
|
+
<Lockup size={48} color="#ffffff" />
|
|
340
|
+
<Flex gap={8} align="end">
|
|
341
|
+
<Mark size={48} color="#ffffff" />
|
|
342
|
+
<Wordmark size={28} color="#ffffff" />
|
|
343
|
+
</Flex>
|
|
344
|
+
</Stack>
|
|
345
|
+
<Box fontSize="xs" mt={2} style={{ color: BZ.faint }}>
|
|
346
|
+
<T
|
|
347
|
+
en="White on ink — the nav and the footer"
|
|
348
|
+
ko="잉크 바탕의 흰색 — 내비게이션과 푸터"
|
|
349
|
+
/>
|
|
350
|
+
</Box>
|
|
351
|
+
</Ground>
|
|
352
|
+
</Grid>
|
|
353
|
+
),
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
export const MarkAnatomy: Story = {
|
|
357
|
+
render: () => (
|
|
358
|
+
<Ground bg={BZ.cream}>
|
|
359
|
+
<Flex gap={10} wrap="wrap">
|
|
360
|
+
{(
|
|
361
|
+
[
|
|
362
|
+
['pair', 'Pair — never separates', '페어 — 떨어지지 않음'],
|
|
363
|
+
['counter', 'Counter — keeps its hole', '카운터 — 구멍을 유지'],
|
|
364
|
+
['loose', 'Loose — the one that travels', '루즈 — 움직이는 조각'],
|
|
365
|
+
] as const
|
|
366
|
+
).map(([piece, en, ko]) => (
|
|
367
|
+
<Box key={piece}>
|
|
368
|
+
<Mark size={96} dim={piece} />
|
|
369
|
+
<Caption>
|
|
370
|
+
<T en={en} ko={ko} />
|
|
371
|
+
</Caption>
|
|
372
|
+
</Box>
|
|
373
|
+
))}
|
|
374
|
+
</Flex>
|
|
375
|
+
</Ground>
|
|
376
|
+
),
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
/** X = the wordmark's height in the lockup (guidebook p.5, p.11). */
|
|
380
|
+
export const ClearSpace: Story = {
|
|
381
|
+
render: () => {
|
|
382
|
+
const size = 64;
|
|
383
|
+
const x = (size * LOCKUP.wordHeight) / 100;
|
|
384
|
+
return (
|
|
385
|
+
<Ground bg={BZ.cream}>
|
|
386
|
+
<Box
|
|
387
|
+
display="inline-block"
|
|
388
|
+
style={{
|
|
389
|
+
padding: x,
|
|
390
|
+
outline: `1px dashed ${BZ.coralDeep}`,
|
|
391
|
+
background: 'rgba(255, 134, 128, 0.22)',
|
|
392
|
+
}}
|
|
393
|
+
>
|
|
394
|
+
<Box style={{ background: BZ.cream }}>
|
|
395
|
+
<Lockup size={size} />
|
|
396
|
+
</Box>
|
|
397
|
+
</Box>
|
|
398
|
+
<Caption>
|
|
399
|
+
<T
|
|
400
|
+
en="Tinted band = X on every side. X is the wordmark's height in the lockup (58% of the mark)."
|
|
401
|
+
ko="색 띠가 사방의 X입니다. 로크업에서 X는 워드마크의 높이(마크 높이의 58%)입니다."
|
|
402
|
+
/>
|
|
403
|
+
</Caption>
|
|
404
|
+
</Ground>
|
|
405
|
+
);
|
|
406
|
+
},
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
export const UnitForms: Story = {
|
|
410
|
+
render: () => (
|
|
411
|
+
<Grid templateColumns={{ base: '1fr', md: '1fr 1fr' }} gap={4}>
|
|
412
|
+
<GrainDefs />
|
|
413
|
+
<Ground bg={BZ.paper}>
|
|
414
|
+
<Flex gap={6} align="end" style={{ color: BZ.ink }}>
|
|
415
|
+
{[10, 12, 14, 24, 44].map((size) => (
|
|
416
|
+
<Box key={size} textAlign="center">
|
|
417
|
+
<Unit size={size} />
|
|
418
|
+
<Caption>{size}</Caption>
|
|
419
|
+
</Box>
|
|
420
|
+
))}
|
|
421
|
+
<Box textAlign="center">
|
|
422
|
+
<Unit size={44} grain={false} />
|
|
423
|
+
<Caption>
|
|
424
|
+
<T en="no grain" ko="그레인 없음" />
|
|
425
|
+
</Caption>
|
|
426
|
+
</Box>
|
|
427
|
+
</Flex>
|
|
428
|
+
<Caption>
|
|
429
|
+
<T
|
|
430
|
+
en="Solid unit with the paper grain, at the sizes baze.co uses"
|
|
431
|
+
ko="종이 그레인을 입힌 단색 유닛, baze.co가 쓰는 크기"
|
|
432
|
+
/>
|
|
433
|
+
</Caption>
|
|
434
|
+
</Ground>
|
|
435
|
+
<Ground bg={BZ.ink}>
|
|
436
|
+
<Flex gap={3} align="center" style={{ color: BZ.cream }}>
|
|
437
|
+
<Unit size={14} />
|
|
438
|
+
<Unit size={14} variant="outline" />
|
|
439
|
+
</Flex>
|
|
440
|
+
<Box fontSize="xs" mt={2} style={{ color: BZ.faint }}>
|
|
441
|
+
<T
|
|
442
|
+
en="Solid + outline on the black bar (the receipt stub)"
|
|
443
|
+
ko="검은 띠 위의 단색 + 윤곽 (영수증 끝부분)"
|
|
444
|
+
/>
|
|
445
|
+
</Box>
|
|
446
|
+
</Ground>
|
|
447
|
+
</Grid>
|
|
448
|
+
),
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* The homepage's three art-plate variants (Highlights.astro `unitVariants`):
|
|
453
|
+
* lead (a) · companion (b) · deep (c), with each row's own positions.
|
|
454
|
+
*/
|
|
455
|
+
const PLATE_VARIANTS = [
|
|
456
|
+
{
|
|
457
|
+
art: 'typewriter',
|
|
458
|
+
glow: [BZ.coralDeep, BZ.azureDeep],
|
|
459
|
+
tint: BZ.azure,
|
|
460
|
+
sizes: [26, 12, 44],
|
|
461
|
+
spots: [
|
|
462
|
+
['16%', '18%'],
|
|
463
|
+
['76%', '34%'],
|
|
464
|
+
['7%', '60%'],
|
|
465
|
+
],
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
art: 'lightbulb',
|
|
469
|
+
glow: [BZ.mintDeep, BZ.coralDeep],
|
|
470
|
+
tint: BZ.coral,
|
|
471
|
+
sizes: [18, 15, 52],
|
|
472
|
+
spots: [
|
|
473
|
+
['72%', '14%'],
|
|
474
|
+
['14%', '28%'],
|
|
475
|
+
['64%', '55%'],
|
|
476
|
+
],
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
art: 'notebookPencil',
|
|
480
|
+
glow: [BZ.azureDeep, BZ.mintDeep],
|
|
481
|
+
tint: BZ.mint,
|
|
482
|
+
sizes: [23, 11, 40],
|
|
483
|
+
spots: [
|
|
484
|
+
['22%', '10%'],
|
|
485
|
+
['80%', '44%'],
|
|
486
|
+
['10%', '36%'],
|
|
487
|
+
],
|
|
488
|
+
},
|
|
489
|
+
] as const;
|
|
490
|
+
|
|
491
|
+
const PLATE_CSS = `
|
|
492
|
+
.bzd-plate { position: relative; aspect-ratio: 4 / 3; background: ${BZ.wash};
|
|
493
|
+
border-radius: 18px; overflow: clip; isolation: isolate; }
|
|
494
|
+
.bzd-unit { position: absolute; color: ${BZ.ink}; }
|
|
495
|
+
.bzd-unit--a, .bzd-unit--b { z-index: 3; }
|
|
496
|
+
.bzd-unit--a { left: var(--ua-l); top: var(--ua-t); }
|
|
497
|
+
.bzd-unit--b { left: var(--ub-l); top: var(--ub-t); color: var(--tint-b);
|
|
498
|
+
opacity: 0.9; }
|
|
499
|
+
.bzd-unit--c { left: var(--uc-l); top: var(--uc-t); opacity: 0.16; }
|
|
500
|
+
.bzd-plate:hover .bzd-unit--a, .bzd-plate:hover .bzd-unit--b {
|
|
501
|
+
scale: 1.15; translate: 0 -2px; }
|
|
502
|
+
.bzd-plate:hover .bzd-unit--a { color: var(--glow-a); }
|
|
503
|
+
.bzd-plate:hover .bzd-unit--b { color: var(--glow-b); }
|
|
504
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
505
|
+
.bzd-unit { transition: color 200ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
506
|
+
scale 200ms cubic-bezier(0.16, 1, 0.3, 1),
|
|
507
|
+
translate 200ms cubic-bezier(0.16, 1, 0.3, 1); }
|
|
508
|
+
}
|
|
509
|
+
@media (prefers-reduced-motion: reduce) {
|
|
510
|
+
.bzd-plate:hover .bzd-unit--a, .bzd-plate:hover .bzd-unit--b {
|
|
511
|
+
scale: none; translate: none; }
|
|
512
|
+
}
|
|
513
|
+
`;
|
|
514
|
+
|
|
515
|
+
export const UnitsOnArtPlates: Story = {
|
|
516
|
+
render: () => (
|
|
517
|
+
<Box>
|
|
518
|
+
<style>{PLATE_CSS}</style>
|
|
519
|
+
<GrainDefs />
|
|
520
|
+
<Grid templateColumns={{ base: '1fr', md: 'repeat(3, 1fr)' }} gap={4}>
|
|
521
|
+
{PLATE_VARIANTS.map(
|
|
522
|
+
({ art: src, glow: [a, b], tint, sizes: [sa, sb, sc], spots }, i) => (
|
|
523
|
+
<Box key={src}>
|
|
524
|
+
<div
|
|
525
|
+
className="bzd-plate"
|
|
526
|
+
style={
|
|
527
|
+
{
|
|
528
|
+
'--glow-a': a,
|
|
529
|
+
'--glow-b': b,
|
|
530
|
+
'--tint-b': tint,
|
|
531
|
+
...Object.fromEntries(
|
|
532
|
+
(['ua', 'ub', 'uc'] as const).flatMap((u, k) => [
|
|
533
|
+
[`--${u}-l`, spots[k][0]],
|
|
534
|
+
[`--${u}-t`, spots[k][1]],
|
|
535
|
+
])
|
|
536
|
+
),
|
|
537
|
+
} as CSSProperties
|
|
538
|
+
}
|
|
539
|
+
>
|
|
540
|
+
{/* Deep plane first so it paints behind the cutout. */}
|
|
541
|
+
<Unit size={sc} className="bzd-unit bzd-unit--c" />
|
|
542
|
+
<Art name={src} style={{ ...FIT, ...PRINTED }} />
|
|
543
|
+
<Unit size={sa} className="bzd-unit bzd-unit--a" />
|
|
544
|
+
<Unit size={sb} className="bzd-unit bzd-unit--b" />
|
|
545
|
+
</div>
|
|
546
|
+
<Caption>
|
|
547
|
+
<T
|
|
548
|
+
en={`Homepage row ${i + 1} values: ${sa} / ${sb} / ${sc}px — hover the plate`}
|
|
549
|
+
ko={`홈 화면 ${i + 1}번째 행의 값: ${sa} / ${sb} / ${sc}px — 판 위에 포인터를 올려 보세요`}
|
|
550
|
+
/>
|
|
551
|
+
</Caption>
|
|
552
|
+
</Box>
|
|
553
|
+
)
|
|
554
|
+
)}
|
|
555
|
+
</Grid>
|
|
556
|
+
</Box>
|
|
557
|
+
),
|
|
558
|
+
};
|
|
559
|
+
|
|
560
|
+
const LIST_CSS = `
|
|
561
|
+
.bzd-list { display: grid; gap: 16px; margin: 0; padding: 0; list-style: none; }
|
|
562
|
+
.bzd-list li { display: grid; grid-template-columns: 14px 1fr; gap: 12px;
|
|
563
|
+
align-items: start; color: #494949; }
|
|
564
|
+
.bzd-list__mark { margin-top: 2px; color: ${BZ.ink}; }
|
|
565
|
+
.bzd-list li:hover .bzd-list__mark { color: ${BZ.coralDeep}; scale: 1.15; }
|
|
566
|
+
.bzd-list li:nth-child(3n + 2):hover .bzd-list__mark { color: ${BZ.mintDeep}; }
|
|
567
|
+
.bzd-list li:nth-child(3n):hover .bzd-list__mark { color: ${BZ.azureDeep}; }
|
|
568
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
569
|
+
.bzd-list__mark { transition: color 200ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
570
|
+
scale 200ms cubic-bezier(0.16, 1, 0.3, 1); }
|
|
571
|
+
}
|
|
572
|
+
@media (prefers-reduced-motion: reduce) {
|
|
573
|
+
.bzd-list li:hover .bzd-list__mark { scale: none; }
|
|
574
|
+
}
|
|
575
|
+
`;
|
|
576
|
+
|
|
577
|
+
const LIST_ITEMS = [
|
|
578
|
+
{ en: 'Every model on one account', ko: '하나의 계정으로 모든 모델' },
|
|
579
|
+
{ en: 'Presentations and documents', ko: '프레젠테이션과 문서' },
|
|
580
|
+
{ en: 'Image and video agents', ko: '이미지·비디오 에이전트' },
|
|
581
|
+
{ en: 'Your own AI', ko: '나만의 AI' },
|
|
582
|
+
];
|
|
583
|
+
|
|
584
|
+
export const ListBullets: Story = {
|
|
585
|
+
render: () => (
|
|
586
|
+
<Ground bg={BZ.paper}>
|
|
587
|
+
<style>{LIST_CSS}</style>
|
|
588
|
+
<GrainDefs />
|
|
589
|
+
<ul className="bzd-list">
|
|
590
|
+
{LIST_ITEMS.map(({ en, ko }) => (
|
|
591
|
+
<li key={en}>
|
|
592
|
+
<Unit size={12} className="bzd-list__mark" />
|
|
593
|
+
<span>
|
|
594
|
+
<T en={en} ko={ko} />
|
|
595
|
+
</span>
|
|
596
|
+
</li>
|
|
597
|
+
))}
|
|
598
|
+
</ul>
|
|
599
|
+
</Ground>
|
|
600
|
+
),
|
|
601
|
+
};
|
|
602
|
+
|
|
603
|
+
export const ColourOnShapes: Story = {
|
|
604
|
+
render: () => (
|
|
605
|
+
<Grid templateColumns={{ base: '1fr', md: '1fr 1fr' }} gap={4}>
|
|
606
|
+
{(
|
|
607
|
+
[
|
|
608
|
+
['manFloor', 'coral', '코랄'],
|
|
609
|
+
['womanTyping', 'blue', '파랑'],
|
|
610
|
+
] as const
|
|
611
|
+
).map(([name, en, ko]) => (
|
|
612
|
+
<Box key={name}>
|
|
613
|
+
<Box
|
|
614
|
+
position="relative"
|
|
615
|
+
style={{ background: BZ.wash }}
|
|
616
|
+
borderRadius="18px"
|
|
617
|
+
aspectRatio={4 / 3}
|
|
618
|
+
overflow="clip"
|
|
619
|
+
isolation="isolate"
|
|
620
|
+
>
|
|
621
|
+
<Art name={name} style={{ ...FIT, ...PRINTED }} />
|
|
622
|
+
</Box>
|
|
623
|
+
<Caption>
|
|
624
|
+
<T
|
|
625
|
+
en={`Black-and-white figure, ${en} on the Base Unit plate only`}
|
|
626
|
+
ko={`흑백 인물, ${ko}은 베이스 유닛 판에만`}
|
|
627
|
+
/>
|
|
628
|
+
</Caption>
|
|
629
|
+
</Box>
|
|
630
|
+
))}
|
|
631
|
+
</Grid>
|
|
632
|
+
),
|
|
633
|
+
};
|
|
634
|
+
|
|
635
|
+
const SCRAP: CSSProperties = {
|
|
636
|
+
position: 'absolute',
|
|
637
|
+
zIndex: 0,
|
|
638
|
+
height: 'auto',
|
|
639
|
+
mixBlendMode: 'multiply',
|
|
640
|
+
};
|
|
641
|
+
|
|
642
|
+
/** The image/video page's poster band (FeatureShowcase.astro, `posters`). */
|
|
643
|
+
export const PosterBandScraps: Story = {
|
|
644
|
+
render: () => (
|
|
645
|
+
<Box>
|
|
646
|
+
<Box
|
|
647
|
+
position="relative"
|
|
648
|
+
overflow="clip"
|
|
649
|
+
isolation="isolate"
|
|
650
|
+
style={{ background: BZ.cream, padding: '7.7% 0 5.5%' }}
|
|
651
|
+
>
|
|
652
|
+
<Art
|
|
653
|
+
name="paperGridTorn"
|
|
654
|
+
style={{ ...SCRAP, left: '-8%', top: '-14%', width: '40%' }}
|
|
655
|
+
/>
|
|
656
|
+
<Art
|
|
657
|
+
name="paperTornSquare"
|
|
658
|
+
style={{ ...SCRAP, right: '-6%', bottom: '-20%', width: '30%' }}
|
|
659
|
+
/>
|
|
660
|
+
<Flex position="relative" zIndex={1} gap={4} justify="center">
|
|
661
|
+
{(
|
|
662
|
+
['poster1', 'posterFestival', 'poster2', 'posterBrunch'] as const
|
|
663
|
+
).map((name) => (
|
|
664
|
+
<Art
|
|
665
|
+
key={name}
|
|
666
|
+
name={name}
|
|
667
|
+
style={{ height: 180, width: 'auto', display: 'block' }}
|
|
668
|
+
/>
|
|
669
|
+
))}
|
|
670
|
+
</Flex>
|
|
671
|
+
</Box>
|
|
672
|
+
<Caption>
|
|
673
|
+
<T
|
|
674
|
+
en="Two torn scraps behind opposite corners, multiplied, no sepia. The posters are output: shown flat."
|
|
675
|
+
ko="찢어진 종이 두 장을 마주 보는 모서리 뒤에 둡니다. 곱하기 혼합만 쓰고 세피아는 쓰지 않습니다. 포스터는 결과물이라 손대지 않고 보여 줍니다."
|
|
676
|
+
/>
|
|
677
|
+
</Caption>
|
|
678
|
+
</Box>
|
|
679
|
+
),
|
|
680
|
+
};
|