@gridui/gridui-brand 0.0.0-stage → 0.0.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/OFL.txt ADDED
@@ -0,0 +1,93 @@
1
+ Copyright 2020 The Jost Project Authors (https://github.com/indestructible-type)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,121 @@
1
- # Temporary Holding Version
1
+ # @gridui/gridui-brand
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ `@gridui/gridui-brand` provides GridUI's Weave Logo, Wordmark, optional motion,
4
+ and static identity assets. Consumers opt into this package independently of
5
+ `@gridui/branding`, which arranges arbitrary brand items. No Theme stylesheet or
6
+ other GridUI runtime package is required.
7
+
8
+ ## Install
9
+
10
+ ```sh
11
+ pnpm add @gridui/gridui-brand
12
+ ```
13
+
14
+ Use React 19 for the React components. Static files can be used without rendering
15
+ React components. Load `@gridui/gridui-brand/styles.css` only when motion is wanted.
16
+
17
+ ## React
18
+
19
+ ```tsx
20
+ import { Logo, Wordmark } from "@gridui/gridui-brand";
21
+ import "@gridui/gridui-brand/styles.css";
22
+
23
+ <Logo size={64} animation="enter" emphasis="shimmer" faceHover title="GridUI" />;
24
+ <Wordmark width={200} height={66} markColor="#254fd0" title="GridUI" />;
25
+ ```
26
+
27
+ The React entry contains no native renderer, filesystem code, font files, or
28
+ encoded font data. The package ships compiled ESM and TypeScript declarations.
29
+ Import the stylesheet once for motion. Without CSS, the assembled mark remains
30
+ visible. Standalone marks accept a `title` or native ARIA name; unnamed marks
31
+ are decorative. Native SVG props and React 19 refs are forwarded.
32
+
33
+ | Logo prop | Default | Behavior |
34
+ | --- | --- | --- |
35
+ | `size` | `48` | Width and height; native dimensions can override it |
36
+ | `framing` | `canvas` | Motion canvas or tightly fitted `square` |
37
+ | `appearance` | `glass` | Original facet tones or `solid` monochrome |
38
+ | `color` | `currentColor` | Inherited fill and stroke |
39
+ | `strokeWidth` | `0.65` | Use zero for small icons |
40
+ | `animation` | `none` | `enter` assembles all faces once |
41
+ | `duration` | `1200` | Total entrance milliseconds; nonpositive disables it |
42
+ | `idle` | `none` | Opt-in `glow`; provide a stop control for continuous motion |
43
+ | `emphasis` | `none` | `shimmer` runs on fine-pointer hover or enclosing link/button focus |
44
+ | `faceHover` | `false` | Highlights the pointed face; excludes touch |
45
+ | `progress` | Unset | Controlled 0–1 assembly pose; disables automatic entry |
46
+ | `replayKey` | `0` | Remounts face groups and restarts motion |
47
+
48
+ Entrance lasts 1200ms, with 780ms per face and an 84ms stagger. Shimmer lasts
49
+ about 700ms. Idle glow cycles every 5400ms with 900ms face offsets and begins
50
+ after entrance. Incomplete controlled poses suppress idle glow. Reduced motion
51
+ disables automatic entry, shimmer, and glow, while explicit controlled poses
52
+ remain available. The Storybook Brand example supplies replay and a glow toggle.
53
+
54
+ `Wordmark` is a static vector lockup. It accepts native SVG props, `title`, and
55
+ `markColor`; the lettering inherits the foreground color. It requires no font.
56
+
57
+ ## Build assets
58
+
59
+ Run `nvm use` at the repository root, then `pnpm build` (or `make build`). The
60
+ standard package compiler regenerates JavaScript, declarations, and CSS in
61
+ `dist/`. The asset-generation step then replaces only `dist/assets/`, preserving
62
+ the compiler output. `make storybook` and
63
+ `make build-storybook` build these assets before Storybook consumes them.
64
+
65
+ | Output | Purpose |
66
+ | --- | --- |
67
+ | `brand/logo.svg` | Static vector mark |
68
+ | `brand/wordmark.svg` | Light-surface sidebar lockup |
69
+ | `favicon.svg` | Adaptive light/dark SVG with stronger small-size tones |
70
+ | `favicon.ico` | 16px and 32px PNG frames in an ICO container |
71
+ | `favicon-32.png` | 32px transparent fallback |
72
+ | `apple-touch-icon.png` | 180px icon with an opaque background |
73
+ | `og/gridui.png` | 1200 × 630 Open Graph and Twitter image |
74
+
75
+ Storybook owns production URLs and HTML metadata. The public asset exports are `/logo.svg`, `/wordmark.svg`, `/favicon.svg`,
76
+ `/favicon.ico`, `/favicon-32.png`, `/apple-touch-icon.png`, and `/og.png`.
77
+ The native renderer is a development dependency and the generator is not
78
+ published or exported. Consumers receive ready-to-use files. Assets are deterministic and do
79
+ not load system fonts, download fonts, or request network resources.
80
+
81
+ `src/logo/motion.ts` owns the timing shared by controlled assembly and CSS motion;
82
+ idle and shimmer staggers are derived from their durations and the face count.
83
+ `src/wordmark/layout.ts` owns the composition used by both React and static
84
+ wordmarks.
85
+
86
+ `src/shared/definitions.ts` is the sole mark geometry. React and static renderers both
87
+ consume it. `src/wordmark/paths.ts` contains editable vector outlines derived
88
+ from the Jost Medium font used by Tips, with attribution in `OFL.txt`. No font
89
+ binary or base64 payload is retained. The letter outlines are source artwork;
90
+ PNG, ICO, and complete deployable SVG files are regenerated at build time.
91
+
92
+ The visual language follows Tips' faceted geometry, single hue, transparency,
93
+ and assembly motion. The implementation is independent of the Tips repository.
94
+
95
+ ## Verification
96
+
97
+ `make validate` includes this package's build, type checks, Jest component tests,
98
+ and Node build-tool tests. Tests
99
+ cover controlled assembly, accessible SSR, motion precedence, browser-entry
100
+ isolation, timing and wordmark-renderer agreement, deterministic raster output,
101
+ ICO/PNG structure, and cleanup limited to the owned build output. Run
102
+ `make build-storybook` after integration changes. Generated files stay ignored.
103
+
104
+ ## Static asset use
105
+
106
+ Import an asset URL with a bundler that supports static assets, for example Vite:
107
+
108
+ ```tsx
109
+ import logoUrl from "@gridui/gridui-brand/logo.svg?url";
110
+
111
+ <img src={logoUrl} alt="GridUI" width={48} height={48} />;
112
+ ```
113
+
114
+ In a Node build script, `import.meta.resolve("@gridui/gridui-brand/logo.svg")`
115
+ locates the exported file for copying into the consuming site's public assets.
116
+ Consumers own final URLs and HTML metadata. Loading an SVG as an image does not
117
+ apply the React component's motion stylesheet.
118
+
119
+ See [consumer guides](docs/README.md), [component reference](docs/reference/README.md),
120
+ and [release history](https://github.com/sudo-ui/GridUI-React-Monorepo/tree/main/packages-core/gridui-brand/.changeset/history).
121
+ The wordmark's derived Jost outlines retain their attribution in [OFL.txt](OFL.txt).
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="132" height="132" viewBox="24 18 132 132" color="#254fd0" role="img" aria-label="GridUI"><polygon points="32,26 84,26 32,78" fill="currentColor" fill-opacity="0.42"/><polygon points="84,26 84,78 32,78" fill="currentColor" fill-opacity="0.78"/><polygon points="96,26 148,26 148,78" fill="currentColor" fill-opacity="0.55"/><polygon points="32,90 84,142 32,142" fill="currentColor" fill-opacity="0.64"/><polygon points="96,90 148,90 96,142" fill="currentColor" fill-opacity="0.48"/><polygon points="148,90 148,142 96,142" fill="currentColor" fill-opacity="0.9"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="400" height="132" viewBox="0 0 400 132" role="img" aria-label="GridUI"><svg width="132" height="132" viewBox="24 18 132 132" color="#254fd0"><polygon points="32,26 84,26 32,78" fill="currentColor" fill-opacity="0.42"/><polygon points="84,26 84,78 32,78" fill="currentColor" fill-opacity="0.78"/><polygon points="96,26 148,26 148,78" fill="currentColor" fill-opacity="0.55"/><polygon points="32,90 84,142 32,142" fill="currentColor" fill-opacity="0.64"/><polygon points="96,90 148,90 96,142" fill="currentColor" fill-opacity="0.48"/><polygon points="148,90 148,142 96,142" fill="currentColor" fill-opacity="0.9"/></svg><g transform="translate(158 9)" fill="#171a1e"><path d="M 31.235998 59.784004 L 47.576004 59.784004 Q 46.891994 62.444 45.524 64.8 Q 44.155994 67.156 42.104 68.98 Q 40.052 70.804 37.239998 71.792 Q 34.427998 72.78 30.856 72.78 Q 25.612 72.78 21.432 70.348 Q 17.251999 67.916 14.82 63.545998 Q 12.388 59.176003 12.388 53.4 Q 12.388 47.548 14.858 43.254 Q 17.328 38.960003 21.546 36.566 Q 25.763998 34.172 30.856 34.172 Q 36.404 34.172 40.317997 36.452 Q 44.232 38.732002 46.435997 42.532 L 53.732 37.668003 Q 51.376 33.944 48.032 31.322002 Q 44.688 28.7 40.393997 27.256 Q 36.1 25.812002 30.856 25.812002 Q 24.852 25.812002 19.76 27.826 Q 14.667998 29.84 10.868 33.526 Q 7.068 37.212 4.9779997 42.266003 Q 2.888 47.319996 2.888 53.4 Q 2.888 59.480003 4.94 64.572 Q 6.991999 69.664 10.754 73.388 Q 14.516 77.112 19.608 79.126 Q 24.699999 81.14 30.703997 81.14 Q 37.087997 81.14 42.028 78.822 Q 46.968 76.504 50.312004 72.476 Q 53.656 68.448 55.328 63.242 Q 57 58.036003 56.848 52.184 L 31.235998 52.184 L 31.235998 59.784004 Z M 73.492 45.04 L 65.36 45.04 L 65.36 80 L 73.492 80 L 73.492 45.04 Z M 83.904 53.78 L 87.932 46.864 Q 86.715996 45.420002 85.044 44.812 Q 83.371994 44.204002 81.472 44.204002 Q 78.812 44.204002 76.341995 46.142002 Q 73.871994 48.08 72.313995 51.31 Q 70.756 54.54 70.756 58.72 L 73.492 60.316 Q 73.492 57.808 74.062 55.946 Q 74.631996 54.084 75.923996 53.02 Q 77.215996 51.956005 79.268 51.956005 Q 80.787994 51.956005 81.813995 52.412003 Q 82.84 52.868 83.904 53.78 Z M 93.25201 31.131998 Q 93.25201 33.184002 94.81 34.666 Q 96.368 36.148003 98.42 36.148003 Q 100.62399 36.148003 102.144 34.666 Q 103.663994 33.184002 103.663994 31.131998 Q 103.663994 29.004002 102.144 27.560003 Q 100.62399 26.116001 98.42 26.116001 Q 96.368 26.116001 94.81 27.560003 Q 93.25201 29.004002 93.25201 31.131998 Z M 94.392006 45.04 L 94.392006 80 L 102.523994 80 L 102.523994 45.04 L 94.392006 45.04 Z M 140.144 20.720001 L 140.144 80 L 148.428 80 L 148.428 20.720001 L 140.144 20.720001 Z M 111.187996 62.520004 Q 111.187996 68.22 113.544 72.324 Q 115.899994 76.428 119.81399 78.594 Q 123.728 80.76 128.21199 80.76 Q 132.62 80.76 135.926 78.556 Q 139.232 76.352 141.17 72.248 Q 143.108 68.144 143.108 62.520004 Q 143.108 56.82 141.17 52.754 Q 139.232 48.688004 135.926 46.483997 Q 132.62 44.280003 128.21199 44.280003 Q 123.728 44.280003 119.81399 46.446003 Q 115.899994 48.612 113.544 52.678 Q 111.187996 56.744003 111.187996 62.520004 Z M 119.7 62.520004 Q 119.7 59.024 121.14399 56.516 Q 122.588 54.008003 124.981995 52.716 Q 127.37599 51.424004 130.18799 51.424004 Q 132.62 51.424004 134.9 52.716 Q 137.18 54.008003 138.66199 56.478004 Q 140.144 58.947998 140.144 62.520004 Q 140.144 66.092 138.66199 68.562 Q 137.18 71.032 134.9 72.324 Q 132.62 73.616 130.18799 73.616 Q 127.37599 73.616 124.981995 72.324 Q 122.588 71.032 121.14399 68.524 Q 119.7 66.016 119.7 62.520004 Z M 158.916 26.800003 L 158.916 62.520004 Q 158.916 66.928 160.32199 70.386 Q 161.728 73.844 164.312 76.276 Q 166.896 78.708 170.468 80 Q 174.04001 81.292 178.29599 81.292 Q 182.552 81.292 186.12401 80 Q 189.696 78.708 192.318 76.276 Q 194.94 73.844 196.346 70.386 Q 197.752 66.928 197.752 62.520004 L 197.752 26.800003 L 188.70798 26.800003 L 188.70798 62.14 Q 188.70798 67.004 186.08598 70.044 Q 183.464 73.084 178.29599 73.084 Q 173.204 73.084 170.54399 70.044 Q 167.884 67.004 167.884 62.14 L 167.884 26.800003 L 158.916 26.800003 Z M 209.152 26.800003 L 209.152 80 L 218.272 80 L 218.272 26.800003 L 209.152 26.800003 Z"/></g></svg>
Binary file
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="24 18 132 132" color="#254fd0"><style>@media(prefers-color-scheme:dark){svg{color:#a4b9ff}}</style><polygon points="32,26 84,26 32,78" fill="currentColor" fill-opacity="0.7"/><polygon points="84,26 84,78 32,78" fill="currentColor" fill-opacity="0.78"/><polygon points="96,26 148,26 148,78" fill="currentColor" fill-opacity="0.7"/><polygon points="32,90 84,142 32,142" fill="currentColor" fill-opacity="0.7"/><polygon points="96,90 148,90 96,142" fill="currentColor" fill-opacity="0.7"/><polygon points="148,90 148,142 96,142" fill="currentColor" fill-opacity="0.9"/></svg>
Binary file
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @author WMXPY
3
+ * @package Gridui Brand
4
+ * @namespace Root
5
+ * @description Index
6
+ */
7
+ export type { LogoProps } from "./logo/logo";
8
+ export { Logo } from "./logo/logo";
9
+ export type { WordmarkProps } from "./wordmark/wordmark";
10
+ export { Wordmark } from "./wordmark/wordmark";
package/dist/index.js ADDED
@@ -0,0 +1,274 @@
1
+ // src/shared/definitions.ts
2
+ var logoDefinition = {
3
+ canvas: "0 0 180 170",
4
+ square: "24 18 132 132",
5
+ color: "#254fd0",
6
+ darkColor: "#a4b9ff",
7
+ faces: [
8
+ {
9
+ points: "32,26 84,26 32,78",
10
+ offset: [
11
+ -32,
12
+ -26
13
+ ],
14
+ rotation: -12,
15
+ opacity: 0.42
16
+ },
17
+ {
18
+ points: "84,26 84,78 32,78",
19
+ offset: [
20
+ -20,
21
+ -14
22
+ ],
23
+ rotation: 9,
24
+ opacity: 0.78
25
+ },
26
+ {
27
+ points: "96,26 148,26 148,78",
28
+ offset: [
29
+ 32,
30
+ -30
31
+ ],
32
+ rotation: 14,
33
+ opacity: 0.55
34
+ },
35
+ {
36
+ points: "32,90 84,142 32,142",
37
+ offset: [
38
+ -30,
39
+ 30
40
+ ],
41
+ rotation: -14,
42
+ opacity: 0.64
43
+ },
44
+ {
45
+ points: "96,90 148,90 96,142",
46
+ offset: [
47
+ 20,
48
+ 14
49
+ ],
50
+ rotation: -9,
51
+ opacity: 0.48
52
+ },
53
+ {
54
+ points: "148,90 148,142 96,142",
55
+ offset: [
56
+ 32,
57
+ 28
58
+ ],
59
+ rotation: 12,
60
+ opacity: 0.9
61
+ }
62
+ ]
63
+ };
64
+
65
+ // src/logo/motion.ts
66
+ var logoMotion = {
67
+ entrance: {
68
+ duration: 1200,
69
+ faceDuration: 0.65,
70
+ faceStagger: 0.07,
71
+ fadeFraction: 0.25
72
+ },
73
+ idle: { duration: 5400 },
74
+ shimmer: {
75
+ duration: 700,
76
+ faceDuration: 434
77
+ },
78
+ hoverDuration: 120
79
+ };
80
+
81
+ // src/logo/geometry.ts
82
+ var bounded = (value, minimum, maximum, fallback) => {
83
+ return Number.isFinite(value) ? Math.max(minimum, Math.min(maximum, value)) : fallback;
84
+ };
85
+ var facePose = (face, index, progress) => {
86
+ const timeline = bounded(progress, 0, 1, 1);
87
+ const local = timeline === 1 ? 1 : bounded((timeline - index * logoMotion.entrance.faceStagger) / logoMotion.entrance.faceDuration, 0, 1, 1);
88
+ const remaining = (1 - local) ** 3;
89
+ return {
90
+ transform: `translate(${face.offset[0] * remaining}px, ${face.offset[1] * remaining}px) rotate(${face.rotation * remaining}deg)`,
91
+ opacity: Math.min(1, local / logoMotion.entrance.fadeFraction)
92
+ };
93
+ };
94
+
95
+ // src/logo/logo.tsx
96
+ import { useId } from "react";
97
+ import { jsx, jsxs } from "react/jsx-runtime";
98
+ var Logo = (props) => {
99
+ const {
100
+ size = 48,
101
+ framing = "canvas",
102
+ title,
103
+ appearance = "glass",
104
+ animation = "none",
105
+ idle = "none",
106
+ emphasis = "none",
107
+ faceHover = false,
108
+ duration = logoMotion.entrance.duration,
109
+ progress,
110
+ replayKey = 0,
111
+ color = "currentColor",
112
+ width: width2 = size,
113
+ height: height2 = size,
114
+ strokeWidth = 0.65,
115
+ className,
116
+ ...rest
117
+ } = props;
118
+ const titleId = useId();
119
+ const milliseconds = bounded(duration, 0, Number.MAX_SAFE_INTEGER, logoMotion.entrance.duration);
120
+ const automatic = animation === "enter" && progress === void 0 && milliseconds > 0;
121
+ const assembled = progress === void 0 || bounded(progress, 0, 1, 1) === 1;
122
+ const named = Boolean(title || rest["aria-label"] || rest["aria-labelledby"]);
123
+ return /* @__PURE__ */ jsxs(
124
+ "svg",
125
+ {
126
+ ...rest,
127
+ xmlns: "http://www.w3.org/2000/svg",
128
+ viewBox: framing === "square" ? logoDefinition.square : logoDefinition.canvas,
129
+ width: width2,
130
+ height: height2,
131
+ color,
132
+ fill: "currentColor",
133
+ stroke: "currentColor",
134
+ strokeWidth,
135
+ role: rest.role ?? (named ? "img" : void 0),
136
+ "aria-hidden": rest["aria-hidden"] ?? (named ? void 0 : true),
137
+ "aria-labelledby": rest["aria-labelledby"] ?? (title && !rest["aria-label"] ? titleId : void 0),
138
+ focusable: rest.focusable ?? false,
139
+ className: [
140
+ "gridui-brand-logo",
141
+ className
142
+ ].filter(Boolean).join(" "),
143
+ "data-animation": automatic ? "enter" : "none",
144
+ "data-idle": assembled ? idle : "none",
145
+ "data-emphasis": emphasis,
146
+ "data-face-hover": faceHover,
147
+ children: [
148
+ title ? /* @__PURE__ */ jsx(
149
+ "title",
150
+ {
151
+ id: titleId,
152
+ children: title
153
+ }
154
+ ) : null,
155
+ /* @__PURE__ */ jsx(
156
+ "g",
157
+ {
158
+ children: logoDefinition.faces.map((face, index) => {
159
+ const opacity = appearance === "solid" ? 1 : face.opacity;
160
+ const style = {
161
+ ...facePose(face, index, progress ?? 1),
162
+ "--brand-from": facePose(face, index, 0).transform,
163
+ "--brand-duration": `${milliseconds * logoMotion.entrance.faceDuration}ms`,
164
+ "--brand-fade": `${milliseconds * logoMotion.entrance.faceDuration * logoMotion.entrance.fadeFraction}ms`,
165
+ "--brand-delay": `${milliseconds * index * logoMotion.entrance.faceStagger}ms`,
166
+ "--brand-idle-duration": `${logoMotion.idle.duration}ms`,
167
+ "--brand-shimmer-duration": `${logoMotion.shimmer.faceDuration}ms`,
168
+ "--brand-hover-duration": `${logoMotion.hoverDuration}ms`,
169
+ "--brand-base": opacity,
170
+ "--brand-low": opacity * 0.8,
171
+ "--brand-peak": Math.min(1, opacity + 0.28),
172
+ "--brand-idle-delay": `${(automatic ? milliseconds : 0) + index * logoMotion.idle.duration / logoDefinition.faces.length}ms`,
173
+ "--brand-shimmer-delay": `${index * (logoMotion.shimmer.duration - logoMotion.shimmer.faceDuration) / (logoDefinition.faces.length - 1)}ms`
174
+ };
175
+ return /* @__PURE__ */ jsx(
176
+ "g",
177
+ {
178
+ className: "gridui-brand-face",
179
+ style,
180
+ children: /* @__PURE__ */ jsx(
181
+ "polygon",
182
+ {
183
+ points: face.points,
184
+ fillOpacity: opacity,
185
+ strokeOpacity: 0.42
186
+ }
187
+ )
188
+ },
189
+ index
190
+ );
191
+ })
192
+ },
193
+ replayKey
194
+ )
195
+ ]
196
+ }
197
+ );
198
+ };
199
+
200
+ // src/wordmark/layout.ts
201
+ var width = 400;
202
+ var height = 132;
203
+ var wordmarkLayout = {
204
+ width,
205
+ height,
206
+ viewBox: `0 0 ${width} ${height}`,
207
+ markSize: height,
208
+ letteringTransform: "translate(158 9)"
209
+ };
210
+
211
+ // src/wordmark/paths.ts
212
+ var wordmarkPaths = ["M 31.235998 59.784004 L 47.576004 59.784004 Q 46.891994 62.444 45.524 64.8 Q 44.155994 67.156 42.104 68.98 Q 40.052 70.804 37.239998 71.792 Q 34.427998 72.78 30.856 72.78 Q 25.612 72.78 21.432 70.348 Q 17.251999 67.916 14.82 63.545998 Q 12.388 59.176003 12.388 53.4 Q 12.388 47.548 14.858 43.254 Q 17.328 38.960003 21.546 36.566 Q 25.763998 34.172 30.856 34.172 Q 36.404 34.172 40.317997 36.452 Q 44.232 38.732002 46.435997 42.532 L 53.732 37.668003 Q 51.376 33.944 48.032 31.322002 Q 44.688 28.7 40.393997 27.256 Q 36.1 25.812002 30.856 25.812002 Q 24.852 25.812002 19.76 27.826 Q 14.667998 29.84 10.868 33.526 Q 7.068 37.212 4.9779997 42.266003 Q 2.888 47.319996 2.888 53.4 Q 2.888 59.480003 4.94 64.572 Q 6.991999 69.664 10.754 73.388 Q 14.516 77.112 19.608 79.126 Q 24.699999 81.14 30.703997 81.14 Q 37.087997 81.14 42.028 78.822 Q 46.968 76.504 50.312004 72.476 Q 53.656 68.448 55.328 63.242 Q 57 58.036003 56.848 52.184 L 31.235998 52.184 L 31.235998 59.784004 Z M 73.492 45.04 L 65.36 45.04 L 65.36 80 L 73.492 80 L 73.492 45.04 Z M 83.904 53.78 L 87.932 46.864 Q 86.715996 45.420002 85.044 44.812 Q 83.371994 44.204002 81.472 44.204002 Q 78.812 44.204002 76.341995 46.142002 Q 73.871994 48.08 72.313995 51.31 Q 70.756 54.54 70.756 58.72 L 73.492 60.316 Q 73.492 57.808 74.062 55.946 Q 74.631996 54.084 75.923996 53.02 Q 77.215996 51.956005 79.268 51.956005 Q 80.787994 51.956005 81.813995 52.412003 Q 82.84 52.868 83.904 53.78 Z M 93.25201 31.131998 Q 93.25201 33.184002 94.81 34.666 Q 96.368 36.148003 98.42 36.148003 Q 100.62399 36.148003 102.144 34.666 Q 103.663994 33.184002 103.663994 31.131998 Q 103.663994 29.004002 102.144 27.560003 Q 100.62399 26.116001 98.42 26.116001 Q 96.368 26.116001 94.81 27.560003 Q 93.25201 29.004002 93.25201 31.131998 Z M 94.392006 45.04 L 94.392006 80 L 102.523994 80 L 102.523994 45.04 L 94.392006 45.04 Z M 140.144 20.720001 L 140.144 80 L 148.428 80 L 148.428 20.720001 L 140.144 20.720001 Z M 111.187996 62.520004 Q 111.187996 68.22 113.544 72.324 Q 115.899994 76.428 119.81399 78.594 Q 123.728 80.76 128.21199 80.76 Q 132.62 80.76 135.926 78.556 Q 139.232 76.352 141.17 72.248 Q 143.108 68.144 143.108 62.520004 Q 143.108 56.82 141.17 52.754 Q 139.232 48.688004 135.926 46.483997 Q 132.62 44.280003 128.21199 44.280003 Q 123.728 44.280003 119.81399 46.446003 Q 115.899994 48.612 113.544 52.678 Q 111.187996 56.744003 111.187996 62.520004 Z M 119.7 62.520004 Q 119.7 59.024 121.14399 56.516 Q 122.588 54.008003 124.981995 52.716 Q 127.37599 51.424004 130.18799 51.424004 Q 132.62 51.424004 134.9 52.716 Q 137.18 54.008003 138.66199 56.478004 Q 140.144 58.947998 140.144 62.520004 Q 140.144 66.092 138.66199 68.562 Q 137.18 71.032 134.9 72.324 Q 132.62 73.616 130.18799 73.616 Q 127.37599 73.616 124.981995 72.324 Q 122.588 71.032 121.14399 68.524 Q 119.7 66.016 119.7 62.520004 Z M 158.916 26.800003 L 158.916 62.520004 Q 158.916 66.928 160.32199 70.386 Q 161.728 73.844 164.312 76.276 Q 166.896 78.708 170.468 80 Q 174.04001 81.292 178.29599 81.292 Q 182.552 81.292 186.12401 80 Q 189.696 78.708 192.318 76.276 Q 194.94 73.844 196.346 70.386 Q 197.752 66.928 197.752 62.520004 L 197.752 26.800003 L 188.70798 26.800003 L 188.70798 62.14 Q 188.70798 67.004 186.08598 70.044 Q 183.464 73.084 178.29599 73.084 Q 173.204 73.084 170.54399 70.044 Q 167.884 67.004 167.884 62.14 L 167.884 26.800003 L 158.916 26.800003 Z M 209.152 26.800003 L 209.152 80 L 218.272 80 L 218.272 26.800003 L 209.152 26.800003 Z"];
213
+
214
+ // src/wordmark/wordmark.tsx
215
+ import { useId as useId2 } from "react";
216
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
217
+ var Wordmark = (props) => {
218
+ const { title, markColor = "currentColor", width: width2 = wordmarkLayout.width / 2, height: height2 = wordmarkLayout.height / 2, ...rest } = props;
219
+ const id = useId2();
220
+ const named = Boolean(title || rest["aria-label"] || rest["aria-labelledby"]);
221
+ return /* @__PURE__ */ jsxs2(
222
+ "svg",
223
+ {
224
+ ...rest,
225
+ xmlns: "http://www.w3.org/2000/svg",
226
+ viewBox: wordmarkLayout.viewBox,
227
+ width: width2,
228
+ height: height2,
229
+ role: rest.role ?? (named ? "img" : void 0),
230
+ "aria-hidden": rest["aria-hidden"] ?? (named ? void 0 : true),
231
+ "aria-labelledby": rest["aria-labelledby"] ?? (title && !rest["aria-label"] ? id : void 0),
232
+ focusable: rest.focusable ?? false,
233
+ children: [
234
+ title ? /* @__PURE__ */ jsx2(
235
+ "title",
236
+ {
237
+ id,
238
+ children: title
239
+ }
240
+ ) : null,
241
+ /* @__PURE__ */ jsx2(
242
+ Logo,
243
+ {
244
+ framing: "square",
245
+ size: wordmarkLayout.markSize,
246
+ color: markColor,
247
+ strokeWidth: 0
248
+ }
249
+ ),
250
+ /* @__PURE__ */ jsx2(
251
+ "g",
252
+ {
253
+ transform: wordmarkLayout.letteringTransform,
254
+ fill: "currentColor",
255
+ children: wordmarkPaths.map((path, index) => {
256
+ return /* @__PURE__ */ jsx2(
257
+ "path",
258
+ {
259
+ d: path
260
+ },
261
+ index
262
+ );
263
+ })
264
+ }
265
+ )
266
+ ]
267
+ }
268
+ );
269
+ };
270
+ export {
271
+ Logo,
272
+ Wordmark
273
+ };
274
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/shared/definitions.ts", "../src/logo/motion.ts", "../src/logo/geometry.ts", "../src/logo/logo.tsx", "../src/wordmark/layout.ts", "../src/wordmark/paths.ts", "../src/wordmark/wordmark.tsx"],
4
+ "sourcesContent": ["/**\n * @author WMXPY\n * @package Gridui Brand\n * @namespace Shared\n * @description Definitions\n */\n\nexport type LogoFace = {\n readonly points: string;\n readonly offset: readonly [number, number];\n readonly rotation: number;\n readonly opacity: number;\n};\n\nexport const logoDefinition = {\n canvas: \"0 0 180 170\",\n square: \"24 18 132 132\",\n color: \"#254fd0\",\n darkColor: \"#a4b9ff\",\n faces: [\n {\n points: \"32,26 84,26 32,78\",\n offset: [\n -32,\n -26,\n ],\n rotation: -12,\n opacity: .42,\n },\n {\n points: \"84,26 84,78 32,78\",\n offset: [\n -20,\n -14,\n ],\n rotation: 9,\n opacity: .78,\n },\n {\n points: \"96,26 148,26 148,78\",\n offset: [\n 32,\n -30,\n ],\n rotation: 14,\n opacity: .55,\n },\n {\n points: \"32,90 84,142 32,142\",\n offset: [\n -30,\n 30,\n ],\n rotation: -14,\n opacity: .64,\n },\n {\n points: \"96,90 148,90 96,142\",\n offset: [\n 20,\n 14,\n ],\n rotation: -9,\n opacity: .48,\n },\n {\n points: \"148,90 148,142 96,142\",\n offset: [\n 32,\n 28,\n ],\n rotation: 12,\n opacity: .9,\n },\n ] as const satisfies readonly LogoFace[],\n} as const;\n", "/**\n * @author WMXPY\n * @package Gridui Brand\n * @namespace Logo\n * @description Motion\n */\n\nexport const logoMotion = {\n entrance: {\n duration: 1200,\n faceDuration: .65,\n faceStagger: .07,\n fadeFraction: .25,\n },\n idle: { duration: 5400 },\n shimmer: {\n duration: 700,\n faceDuration: 434,\n },\n hoverDuration: 120,\n} as const;\n", "/**\n * @author WMXPY\n * @package Gridui Brand\n * @namespace Logo\n * @description Geometry\n */\n\nimport type { LogoFace } from \"../shared/definitions\";\nimport { logoMotion } from \"./motion\";\n\nexport const bounded = (value: number, minimum: number, maximum: number, fallback: number): number => {\n return Number.isFinite(value) ? Math.max(minimum, Math.min(maximum, value)) : fallback;\n};\n\nexport const facePose = (face: LogoFace, index: number, progress: number) => {\n const timeline = bounded(progress, 0, 1, 1);\n const local = timeline === 1 ? 1 : bounded((timeline - index * logoMotion.entrance.faceStagger) / logoMotion.entrance.faceDuration, 0, 1, 1);\n const remaining = (1 - local) ** 3;\n return {\n transform: `translate(${face.offset[0] * remaining}px, ${face.offset[1] * remaining}px) rotate(${face.rotation * remaining}deg)`,\n opacity: Math.min(1, local / logoMotion.entrance.fadeFraction),\n };\n};\n", "/**\n * @author WMXPY\n * @package Gridui Brand\n * @namespace Logo\n * @description Logo\n */\n\nimport { logoDefinition } from \"../shared/definitions\";\nimport { bounded, facePose } from \"./geometry\";\nimport { logoMotion } from \"./motion\";\nimport type { ComponentPropsWithRef, CSSProperties, FC } from \"react\";\nimport { useId } from \"react\";\n\nexport type LogoProps = Omit<ComponentPropsWithRef<\"svg\">, \"children\" | \"dangerouslySetInnerHTML\" | \"viewBox\"> & {\n readonly size?: number | string;\n readonly framing?: \"canvas\" | \"square\";\n readonly title?: string;\n readonly appearance?: \"glass\" | \"solid\";\n readonly animation?: \"none\" | \"enter\";\n readonly idle?: \"none\" | \"glow\";\n readonly emphasis?: \"none\" | \"shimmer\";\n readonly faceHover?: boolean;\n readonly duration?: number;\n readonly progress?: number;\n readonly replayKey?: string | number;\n};\n\ntype FaceStyle = CSSProperties & {\n readonly [key: `--brand-${string}`]: string | number;\n};\n\nexport const Logo: FC<LogoProps> = (props: LogoProps) => {\n const {\n size = 48, framing = \"canvas\", title, appearance = \"glass\", animation = \"none\", idle = \"none\",\n emphasis = \"none\", faceHover = false, duration = logoMotion.entrance.duration, progress, replayKey = 0,\n color = \"currentColor\", width = size, height = size, strokeWidth = .65, className, ...rest\n } = props;\n const titleId = useId();\n const milliseconds = bounded(duration, 0, Number.MAX_SAFE_INTEGER, logoMotion.entrance.duration);\n const automatic = animation === \"enter\" && progress === undefined && milliseconds > 0;\n const assembled = progress === undefined || bounded(progress, 0, 1, 1) === 1;\n const named = Boolean(title || rest[\"aria-label\"] || rest[\"aria-labelledby\"]);\n return (<svg\n {...rest}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={framing === \"square\" ? logoDefinition.square : logoDefinition.canvas}\n width={width}\n height={height}\n color={color}\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n role={rest.role ?? (named ? \"img\" : undefined)}\n aria-hidden={rest[\"aria-hidden\"] ?? (named ? undefined : true)}\n aria-labelledby={rest[\"aria-labelledby\"] ?? (title && !rest[\"aria-label\"] ? titleId : undefined)}\n focusable={rest.focusable ?? false}\n className={[\n \"gridui-brand-logo\",\n className,\n ].filter(Boolean).join(\" \")}\n data-animation={automatic ? \"enter\" : \"none\"}\n data-idle={assembled ? idle : \"none\"}\n data-emphasis={emphasis}\n data-face-hover={faceHover}\n >\n {title ? (<title\n id={titleId}\n >\n {title}\n </title>) : null}\n <g\n key={replayKey}\n >\n {logoDefinition.faces.map((face, index) => {\n const opacity = appearance === \"solid\" ? 1 : face.opacity;\n const style: FaceStyle = {\n ...facePose(face, index, progress ?? 1),\n \"--brand-from\": facePose(face, index, 0).transform,\n \"--brand-duration\": `${milliseconds * logoMotion.entrance.faceDuration}ms`,\n \"--brand-fade\": `${milliseconds * logoMotion.entrance.faceDuration * logoMotion.entrance.fadeFraction}ms`,\n \"--brand-delay\": `${milliseconds * index * logoMotion.entrance.faceStagger}ms`,\n \"--brand-idle-duration\": `${logoMotion.idle.duration}ms`,\n \"--brand-shimmer-duration\": `${logoMotion.shimmer.faceDuration}ms`,\n \"--brand-hover-duration\": `${logoMotion.hoverDuration}ms`,\n \"--brand-base\": opacity,\n \"--brand-low\": opacity * .8,\n \"--brand-peak\": Math.min(1, opacity + .28),\n \"--brand-idle-delay\": `${(automatic ? milliseconds : 0) + index * logoMotion.idle.duration / logoDefinition.faces.length}ms`,\n \"--brand-shimmer-delay\": `${index * (logoMotion.shimmer.duration - logoMotion.shimmer.faceDuration) / (logoDefinition.faces.length - 1)}ms`,\n };\n return (<g\n key={index}\n className=\"gridui-brand-face\"\n style={style}\n >\n <polygon\n points={face.points}\n fillOpacity={opacity}\n strokeOpacity={.42}\n />\n </g>);\n })}\n </g>\n </svg>);\n};\n", "/**\n * @author WMXPY\n * @package Gridui Brand\n * @namespace Wordmark\n * @description Layout\n */\n\nconst width = 400;\nconst height = 132;\n\nexport const wordmarkLayout = {\n width,\n height,\n viewBox: `0 0 ${width} ${height}`,\n markSize: height,\n letteringTransform: \"translate(158 9)\",\n} as const;\n", "/**\n * @author WMXPY\n * @package Gridui Brand\n * @namespace Wordmark\n * @description Paths\n */\n\n// Original outlines derived from Jost Medium; see ../../OFL.txt. No font is needed at runtime.\n\nexport const wordmarkPaths = [\"M 31.235998 59.784004 L 47.576004 59.784004 Q 46.891994 62.444 45.524 64.8 Q 44.155994 67.156 42.104 68.98 Q 40.052 70.804 37.239998 71.792 Q 34.427998 72.78 30.856 72.78 Q 25.612 72.78 21.432 70.348 Q 17.251999 67.916 14.82 63.545998 Q 12.388 59.176003 12.388 53.4 Q 12.388 47.548 14.858 43.254 Q 17.328 38.960003 21.546 36.566 Q 25.763998 34.172 30.856 34.172 Q 36.404 34.172 40.317997 36.452 Q 44.232 38.732002 46.435997 42.532 L 53.732 37.668003 Q 51.376 33.944 48.032 31.322002 Q 44.688 28.7 40.393997 27.256 Q 36.1 25.812002 30.856 25.812002 Q 24.852 25.812002 19.76 27.826 Q 14.667998 29.84 10.868 33.526 Q 7.068 37.212 4.9779997 42.266003 Q 2.888 47.319996 2.888 53.4 Q 2.888 59.480003 4.94 64.572 Q 6.991999 69.664 10.754 73.388 Q 14.516 77.112 19.608 79.126 Q 24.699999 81.14 30.703997 81.14 Q 37.087997 81.14 42.028 78.822 Q 46.968 76.504 50.312004 72.476 Q 53.656 68.448 55.328 63.242 Q 57 58.036003 56.848 52.184 L 31.235998 52.184 L 31.235998 59.784004 Z M 73.492 45.04 L 65.36 45.04 L 65.36 80 L 73.492 80 L 73.492 45.04 Z M 83.904 53.78 L 87.932 46.864 Q 86.715996 45.420002 85.044 44.812 Q 83.371994 44.204002 81.472 44.204002 Q 78.812 44.204002 76.341995 46.142002 Q 73.871994 48.08 72.313995 51.31 Q 70.756 54.54 70.756 58.72 L 73.492 60.316 Q 73.492 57.808 74.062 55.946 Q 74.631996 54.084 75.923996 53.02 Q 77.215996 51.956005 79.268 51.956005 Q 80.787994 51.956005 81.813995 52.412003 Q 82.84 52.868 83.904 53.78 Z M 93.25201 31.131998 Q 93.25201 33.184002 94.81 34.666 Q 96.368 36.148003 98.42 36.148003 Q 100.62399 36.148003 102.144 34.666 Q 103.663994 33.184002 103.663994 31.131998 Q 103.663994 29.004002 102.144 27.560003 Q 100.62399 26.116001 98.42 26.116001 Q 96.368 26.116001 94.81 27.560003 Q 93.25201 29.004002 93.25201 31.131998 Z M 94.392006 45.04 L 94.392006 80 L 102.523994 80 L 102.523994 45.04 L 94.392006 45.04 Z M 140.144 20.720001 L 140.144 80 L 148.428 80 L 148.428 20.720001 L 140.144 20.720001 Z M 111.187996 62.520004 Q 111.187996 68.22 113.544 72.324 Q 115.899994 76.428 119.81399 78.594 Q 123.728 80.76 128.21199 80.76 Q 132.62 80.76 135.926 78.556 Q 139.232 76.352 141.17 72.248 Q 143.108 68.144 143.108 62.520004 Q 143.108 56.82 141.17 52.754 Q 139.232 48.688004 135.926 46.483997 Q 132.62 44.280003 128.21199 44.280003 Q 123.728 44.280003 119.81399 46.446003 Q 115.899994 48.612 113.544 52.678 Q 111.187996 56.744003 111.187996 62.520004 Z M 119.7 62.520004 Q 119.7 59.024 121.14399 56.516 Q 122.588 54.008003 124.981995 52.716 Q 127.37599 51.424004 130.18799 51.424004 Q 132.62 51.424004 134.9 52.716 Q 137.18 54.008003 138.66199 56.478004 Q 140.144 58.947998 140.144 62.520004 Q 140.144 66.092 138.66199 68.562 Q 137.18 71.032 134.9 72.324 Q 132.62 73.616 130.18799 73.616 Q 127.37599 73.616 124.981995 72.324 Q 122.588 71.032 121.14399 68.524 Q 119.7 66.016 119.7 62.520004 Z M 158.916 26.800003 L 158.916 62.520004 Q 158.916 66.928 160.32199 70.386 Q 161.728 73.844 164.312 76.276 Q 166.896 78.708 170.468 80 Q 174.04001 81.292 178.29599 81.292 Q 182.552 81.292 186.12401 80 Q 189.696 78.708 192.318 76.276 Q 194.94 73.844 196.346 70.386 Q 197.752 66.928 197.752 62.520004 L 197.752 26.800003 L 188.70798 26.800003 L 188.70798 62.14 Q 188.70798 67.004 186.08598 70.044 Q 183.464 73.084 178.29599 73.084 Q 173.204 73.084 170.54399 70.044 Q 167.884 67.004 167.884 62.14 L 167.884 26.800003 L 158.916 26.800003 Z M 209.152 26.800003 L 209.152 80 L 218.272 80 L 218.272 26.800003 L 209.152 26.800003 Z\"] as const;\n\nexport const taglinePaths = [\"M 10.704 63.968 L 21.36 80 L 28.224 80 L 16.8 63.968 L 10.704 63.968 Z M 3.744 46.4 L 3.744 80 L 9.408 80 L 9.408 46.4 L 3.744 46.4 Z M 7.104 51.296 L 13.872 51.296 Q 15.84 51.296 17.28 51.968 Q 18.72 52.64 19.536 53.888 Q 20.352 55.136 20.352 56.96 Q 20.352 58.736 19.536 60.007996 Q 18.72 61.28 17.28 61.928 Q 15.84 62.576 13.872 62.576 L 7.104 62.576 L 7.104 67.28 L 14.112 67.28 Q 17.808 67.28 20.496 65.984 Q 23.184 64.688 24.696 62.336 Q 26.208 59.984 26.208 56.816 Q 26.208 53.648006 24.696 51.319996 Q 23.184 48.992 20.496 47.696 Q 17.808 46.4 14.112 46.4 L 7.104 46.4 L 7.104 51.296 Z M 41.472 80.48 Q 45.312 80.48 48.048 78.968 Q 50.784 77.456 52.56 74.48 L 48.048 72.704 Q 47.04 74.48 45.456 75.344 Q 43.872 76.208 41.711998 76.208 Q 39.696 76.208 38.304 75.344 Q 36.912 74.48 36.168 72.8 Q 35.424 71.12 35.472 68.768 Q 35.472 66.368 36.216 64.736 Q 36.96 63.104 38.328 62.24 Q 39.696 61.376 41.664 61.376 Q 43.296 61.376 44.520004 62.096 Q 45.744 62.816 46.440002 64.112 Q 47.136 65.408 47.136 67.184 Q 47.136 67.52 46.968002 68 Q 46.8 68.479996 46.656 68.768 L 48.24 66.56 L 33.312 66.56 L 33.312 70.16 L 52.704 70.16 Q 52.704 69.968 52.727997 69.536 Q 52.752 69.104004 52.752 68.72 Q 52.752 65.168 51.456 62.648003 Q 50.16 60.128 47.687996 58.784 Q 45.216 57.44 41.711998 57.44 Q 38.208 57.44 35.616 58.856 Q 33.024 60.272 31.608 62.864 Q 30.192 65.456 30.192 68.96 Q 30.192 72.416 31.584 75.008 Q 32.975998 77.6 35.544 79.04 Q 38.112 80.48 41.472 80.48 Z M 61.008 73.136 Q 61.008 72.08 61.512 71.36 Q 62.016 70.64 63.024 70.232 Q 64.032 69.824 65.664 69.824 Q 67.535995 69.824 69.216 70.304 Q 70.895996 70.784 72.384 71.84 L 72.384 69.2 Q 71.951996 68.672 70.895996 68.024 Q 69.84 67.376 68.232 66.895996 Q 66.624 66.416 64.416 66.416 Q 60.288 66.416 58.032 68.312 Q 55.776 70.208 55.776 73.423996 Q 55.776 75.68 56.832 77.264 Q 57.888 78.848 59.664 79.664 Q 61.44 80.48 63.504 80.48 Q 65.423996 80.48 67.272 79.784 Q 69.119995 79.088 70.344 77.648 Q 71.568 76.208 71.568 74.096 L 70.8 71.216 Q 70.8 72.895996 70.032 74.096 Q 69.264 75.296 67.992 75.944 Q 66.72 76.592 65.136 76.592 Q 63.935993 76.592 63 76.208 Q 62.064 75.824 61.536 75.032 Q 61.008 74.24 61.008 73.136 Z M 59.376 63.68 Q 59.904 63.344 60.864 62.840004 Q 61.824 62.336 63.192 61.975998 Q 64.56 61.615993 66.096 61.615993 Q 67.104 61.615993 67.968 61.808 Q 68.832 62 69.479996 62.432 Q 70.128 62.864 70.464 63.536 Q 70.8 64.208 70.8 65.264 L 70.8 80 L 75.888 80 L 75.888 64.256 Q 75.888 62.048 74.712 60.512 Q 73.535995 58.976 71.423996 58.184 Q 69.312 57.392 66.624 57.392 Q 63.504 57.392 61.152 58.256 Q 58.8 59.12 57.264 60.032 L 59.376 63.68 Z M 85.392 68.96 Q 85.392 66.895996 86.304 65.312 Q 87.216 63.728 88.776 62.816 Q 90.336 61.904 92.256 61.904 Q 93.792 61.904 95.232 62.384007 Q 96.672 62.864 97.80001 63.704002 Q 98.928 64.544 99.456 65.648 L 99.456 59.888 Q 98.304 58.784 96.336 58.112 Q 94.368 57.44 92.01599 57.44 Q 88.656 57.44 85.944 58.904 Q 83.232 60.368 81.648 62.96 Q 80.064 65.552 80.064 68.96 Q 80.064 72.32 81.648 74.936 Q 83.232 77.552 85.944 79.016 Q 88.656 80.48 92.01599 80.48 Q 94.368 80.48 96.336 79.808 Q 98.304 79.136 99.456 77.984 L 99.456 72.272 Q 98.928 73.328 97.82401 74.168 Q 96.72001 75.008 95.304 75.512 Q 93.888 76.016 92.256 76.016 Q 90.336 76.016 88.776 75.104004 Q 87.216 74.192 86.304 72.608 Q 85.392 71.024 85.392 68.96 Z M 102.09601 57.92 L 102.09601 62.48 L 114.624 62.48 L 114.624 57.92 L 102.09601 57.92 Z M 105.840004 50.24 L 105.840004 80 L 110.928 80 L 110.928 50.24 L 105.840004 50.24 Z M 136.03201 68.96 Q 136.03201 66.895996 136.944 65.312 Q 137.856 63.728 139.41602 62.816 Q 140.97601 61.904 142.89601 61.904 Q 144.432 61.904 145.87201 62.384007 Q 147.31201 62.864 148.44 63.704002 Q 149.56801 64.544 150.09601 65.648 L 150.09601 59.888 Q 148.944 58.784 146.97601 58.112 Q 145.00801 57.44 142.656 57.44 Q 139.296 57.44 136.58401 58.904 Q 133.87201 60.368 132.28801 62.96 Q 130.70401 65.552 130.70401 68.96 Q 130.70401 72.32 132.28801 74.936 Q 133.87201 77.552 136.58401 79.016 Q 139.296 80.48 142.656 80.48 Q 145.00801 80.48 146.97601 79.808 Q 148.944 79.136 150.09601 77.984 L 150.09601 72.272 Q 149.56801 73.328 148.464 74.168 Q 147.36002 75.008 145.944 75.512 Q 144.52802 76.016 142.89601 76.016 Q 140.97601 76.016 139.41602 75.104004 Q 137.856 74.192 136.944 72.608 Q 136.03201 71.024 136.03201 68.96 Z M 154.128 68.96 Q 154.128 72.32 155.688 74.936 Q 157.248 77.552 159.96 79.016 Q 162.672 80.48 166.032 80.48 Q 169.44 80.48 172.128 79.016 Q 174.81601 77.552 176.376 74.936 Q 177.93599 72.32 177.93599 68.96 Q 177.93599 65.552 176.376 62.96 Q 174.81601 60.368 172.128 58.904 Q 169.44 57.44 166.032 57.44 Q 162.672 57.44 159.96 58.904 Q 157.248 60.368 155.688 62.96 Q 154.128 65.552 154.128 68.96 Z M 159.45601 68.96 Q 159.45601 66.895996 160.32 65.312 Q 161.184 63.728 162.672 62.864 Q 164.16 62 166.032 62 Q 167.904 62 169.392 62.864 Q 170.88 63.728 171.744 65.312 Q 172.608 66.895996 172.608 68.96 Q 172.608 71.024 171.744 72.584 Q 170.88 74.144 169.392 75.032 Q 167.904 75.92 166.032 75.92 Q 164.16 75.92 162.672 75.032 Q 161.184 74.144 160.32 72.584 Q 159.45601 71.024 159.45601 68.96 Z M 214.51201 65.936 Q 214.51201 63.248 213.72 61.328 Q 212.928 59.407993 211.39201 58.423996 Q 209.856 57.44 207.45601 57.44 Q 205.24802 57.44 203.496 58.423996 Q 201.74399 59.407993 200.544 61.376 Q 199.82402 59.456 198.216 58.448 Q 196.608 57.44 194.20801 57.44 Q 192.048 57.44 190.51201 58.375996 Q 188.976 59.312 187.968 61.136 L 187.968 57.92 L 182.88 57.92 L 182.88 80 L 187.968 80 L 187.968 66.56 Q 187.968 64.976 188.52 63.872 Q 189.07202 62.768 190.05602 62.192 Q 191.04 61.615993 192.33601 61.615993 Q 194.25601 61.615993 195.14401 62.840004 Q 196.03201 64.064 196.03201 66.56 L 196.03201 80 L 201.216 80 L 201.216 66.56 Q 201.216 64.976 201.76799 63.872 Q 202.32002 62.768 203.30402 62.192 Q 204.288 61.615993 205.632 61.615993 Q 207.50401 61.615993 208.39201 62.840004 Q 209.28001 64.064 209.28001 66.56 L 209.28001 80 L 214.51201 80 L 214.51201 65.936 Z M 226.12802 90.56 L 226.12802 57.92 L 220.896 57.92 L 220.896 90.56 L 226.12802 90.56 Z M 244.416 68.96 Q 244.416 65.216 242.92801 62.648003 Q 241.44002 60.08 238.99199 58.688 Q 236.544 57.296 233.664 57.296 Q 230.88 57.296 228.792 58.736 Q 226.704 60.176 225.552 62.768 Q 224.4 65.36 224.4 68.96 Q 224.4 72.512 225.552 75.128 Q 226.704 77.744 228.792 79.16 Q 230.88 80.576 233.664 80.576 Q 236.544 80.576 238.99199 79.208 Q 241.44002 77.84 242.92801 75.224 Q 244.416 72.608 244.416 68.96 Z M 239.04 68.96 Q 239.04 71.168 238.128 72.704 Q 237.216 74.24 235.728 75.056 Q 234.24 75.872 232.41602 75.872 Q 230.88 75.872 229.44 75.08 Q 228 74.288 227.064 72.752 Q 226.12802 71.216 226.12802 68.96 Q 226.12802 66.704 227.064 65.168 Q 228 63.632 229.44 62.840004 Q 230.88 62.048 232.41602 62.048 Q 234.24 62.048 235.728 62.840004 Q 237.216 63.632 238.128 65.192 Q 239.04 66.752 239.04 68.96 Z M 247.68 68.96 Q 247.68 72.32 249.24 74.936 Q 250.8 77.552 253.51201 79.016 Q 256.224 80.48 259.584 80.48 Q 262.992 80.48 265.68 79.016 Q 268.368 77.552 269.928 74.936 Q 271.488 72.32 271.488 68.96 Q 271.488 65.552 269.928 62.96 Q 268.368 60.368 265.68 58.904 Q 262.992 57.44 259.584 57.44 Q 256.224 57.44 253.51201 58.904 Q 250.8 60.368 249.24 62.96 Q 247.68 65.552 247.68 68.96 Z M 253.00801 68.96 Q 253.00801 66.895996 253.87201 65.312 Q 254.73602 63.728 256.224 62.864 Q 257.712 62 259.584 62 Q 261.456 62 262.944 62.864 Q 264.432 63.728 265.29602 65.312 Q 266.16 66.895996 266.16 68.96 Q 266.16 71.024 265.29602 72.584 Q 264.432 74.144 262.944 75.032 Q 261.456 75.92 259.584 75.92 Q 257.712 75.92 256.224 75.032 Q 254.73602 74.144 253.87201 72.584 Q 253.00801 71.024 253.00801 68.96 Z M 290.63998 66.56 L 290.63998 80 L 295.968 80 L 295.968 65.936 Q 295.968 62 294 59.72 Q 292.03198 57.44 288.288 57.44 Q 286.03198 57.44 284.376 58.4 Q 282.72 59.36 281.664 61.328 L 281.664 57.92 L 276.432 57.92 L 276.432 80 L 281.664 80 L 281.664 66.56 Q 281.664 65.072 282.264 63.944004 Q 282.86398 62.816 283.968 62.215996 Q 285.072 61.615993 286.56 61.615993 Q 288.624 61.615993 289.632 62.864 Q 290.63998 64.112 290.63998 66.56 Z M 312.192 80.48 Q 316.032 80.48 318.768 78.968 Q 321.504 77.456 323.28 74.48 L 318.768 72.704 Q 317.76 74.48 316.176 75.344 Q 314.592 76.208 312.432 76.208 Q 310.416 76.208 309.024 75.344 Q 307.632 74.48 306.888 72.8 Q 306.144 71.12 306.192 68.768 Q 306.192 66.368 306.936 64.736 Q 307.68 63.104 309.048 62.24 Q 310.416 61.376 312.384 61.376 Q 314.016 61.376 315.24 62.096 Q 316.464 62.816 317.16 64.112 Q 317.856 65.408 317.856 67.184 Q 317.856 67.52 317.688 68 Q 317.52 68.479996 317.376 68.768 L 318.96 66.56 L 304.032 66.56 L 304.032 70.16 L 323.424 70.16 Q 323.424 69.968 323.448 69.536 Q 323.472 69.104004 323.472 68.72 Q 323.472 65.168 322.176 62.648003 Q 320.88 60.128 318.408 58.784 Q 315.936 57.44 312.432 57.44 Q 308.928 57.44 306.336 58.856 Q 303.744 60.272 302.328 62.864 Q 300.912 65.456 300.912 68.96 Q 300.912 72.416 302.304 75.008 Q 303.69598 77.6 306.264 79.04 Q 308.832 80.48 312.192 80.48 Z M 342.672 66.56 L 342.672 80 L 348 80 L 348 65.936 Q 348 62 346.032 59.72 Q 344.064 57.44 340.32 57.44 Q 338.064 57.44 336.40802 58.4 Q 334.752 59.36 333.696 61.328 L 333.696 57.92 L 328.46402 57.92 L 328.46402 80 L 333.696 80 L 333.696 66.56 Q 333.696 65.072 334.29602 63.944004 Q 334.896 62.816 336 62.215996 Q 337.104 61.615993 338.592 61.615993 Q 340.656 61.615993 341.664 62.864 Q 342.672 64.112 342.672 66.56 Z M 351.55203 57.92 L 351.55203 62.48 L 364.08002 62.48 L 364.08002 57.92 L 351.55203 57.92 Z M 355.29602 50.24 L 355.29602 80 L 360.38403 80 L 360.38403 50.24 L 355.29602 50.24 Z M 368.64 72.704 L 365.616 75.776 Q 366.57602 77.024 368.01602 78.152 Q 369.456 79.28 371.328 79.976 Q 373.19998 80.672 375.504 80.672 Q 379.104 80.672 381.24002 78.776 Q 383.376 76.88 383.376 73.76 Q 383.376 71.744 382.464 70.496 Q 381.55197 69.248 380.01602 68.384 Q 378.48 67.52 376.608 66.8 Q 375.264 66.272 374.18402 65.792 Q 373.10397 65.312 372.456 64.712 Q 371.808 64.112 371.808 63.344 Q 371.808 62.432 372.528 61.952 Q 373.248 61.472 374.4 61.472 Q 376.032 61.472 377.56802 62.288 Q 379.104 63.104 380.16 64.4 L 383.04 61.328 Q 382.128 60.224 380.832 59.36 Q 379.536 58.496 377.928 57.968 Q 376.32 57.44 374.496 57.44 Q 372.48 57.44 370.72797 58.087997 Q 368.97598 58.736 367.944 60.08 Q 366.91202 61.424 366.91202 63.44 Q 366.91202 65.408 367.84805 66.704 Q 368.78403 68 370.24802 68.792 Q 371.712 69.584 373.19998 70.16 Q 374.68802 70.688 375.792 71.192 Q 376.89597 71.696 377.52002 72.392 Q 378.14404 73.088 378.14404 74.048 Q 378.14404 75.152 377.35202 75.776 Q 376.56 76.4 375.168 76.4 Q 374.064 76.4 372.96002 75.968 Q 371.85602 75.536 370.80002 74.72 Q 369.74405 73.904 368.64 72.704 Z\"] as const;\n", "/**\n * @author WMXPY\n * @package Gridui Brand\n * @namespace Wordmark\n * @description Wordmark\n */\n\nimport { Logo } from \"../logo/logo\";\nimport { wordmarkLayout } from \"./layout\";\nimport { wordmarkPaths } from \"./paths\";\nimport type { ComponentPropsWithRef, FC } from \"react\";\nimport { useId } from \"react\";\n\nexport type WordmarkProps = Omit<ComponentPropsWithRef<\"svg\">, \"children\" | \"dangerouslySetInnerHTML\" | \"viewBox\"> & {\n readonly title?: string;\n readonly markColor?: string;\n};\n\nexport const Wordmark: FC<WordmarkProps> = (props: WordmarkProps) => {\n const { title, markColor = \"currentColor\", width = wordmarkLayout.width / 2, height = wordmarkLayout.height / 2, ...rest } = props;\n const id = useId();\n const named = Boolean(title || rest[\"aria-label\"] || rest[\"aria-labelledby\"]);\n return (<svg\n {...rest}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={wordmarkLayout.viewBox}\n width={width}\n height={height}\n role={rest.role ?? (named ? \"img\" : undefined)}\n aria-hidden={rest[\"aria-hidden\"] ?? (named ? undefined : true)}\n aria-labelledby={rest[\"aria-labelledby\"] ?? (title && !rest[\"aria-label\"] ? id : undefined)}\n focusable={rest.focusable ?? false}\n >\n {title ? (<title\n id={id}\n >\n {title}\n </title>) : null}\n <Logo\n framing=\"square\"\n size={wordmarkLayout.markSize}\n color={markColor}\n strokeWidth={0}\n />\n <g\n transform={wordmarkLayout.letteringTransform}\n fill=\"currentColor\"\n >\n {wordmarkPaths.map((path, index) => {\n return (<path\n key={index}\n d={path}\n />);\n })}\n </g>\n </svg>);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["width", "height", "useId", "jsx", "jsxs", "width", "height"]
7
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @author WMXPY
3
+ * @package Gridui Brand
4
+ * @namespace Logo
5
+ * @description Geometry
6
+ */
7
+ import type { LogoFace } from "../shared/definitions";
8
+ export declare const bounded: (value: number, minimum: number, maximum: number, fallback: number) => number;
9
+ export declare const facePose: (face: LogoFace, index: number, progress: number) => {
10
+ transform: string;
11
+ opacity: number;
12
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @author WMXPY
3
+ * @package Gridui Brand
4
+ * @namespace Logo
5
+ * @description Logo
6
+ */
7
+ import type { ComponentPropsWithRef, FC } from "react";
8
+ export type LogoProps = Omit<ComponentPropsWithRef<"svg">, "children" | "dangerouslySetInnerHTML" | "viewBox"> & {
9
+ readonly size?: number | string;
10
+ readonly framing?: "canvas" | "square";
11
+ readonly title?: string;
12
+ readonly appearance?: "glass" | "solid";
13
+ readonly animation?: "none" | "enter";
14
+ readonly idle?: "none" | "glow";
15
+ readonly emphasis?: "none" | "shimmer";
16
+ readonly faceHover?: boolean;
17
+ readonly duration?: number;
18
+ readonly progress?: number;
19
+ readonly replayKey?: string | number;
20
+ };
21
+ export declare const Logo: FC<LogoProps>;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @author WMXPY
3
+ * @package Gridui Brand
4
+ * @namespace Logo
5
+ * @description Motion
6
+ */
7
+ export declare const logoMotion: {
8
+ readonly entrance: {
9
+ readonly duration: 1200;
10
+ readonly faceDuration: 0.65;
11
+ readonly faceStagger: 0.07;
12
+ readonly fadeFraction: 0.25;
13
+ };
14
+ readonly idle: {
15
+ readonly duration: 5400;
16
+ };
17
+ readonly shimmer: {
18
+ readonly duration: 700;
19
+ readonly faceDuration: 434;
20
+ };
21
+ readonly hoverDuration: 120;
22
+ };
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @author WMXPY
3
+ * @package Gridui Brand
4
+ * @namespace Shared
5
+ * @description Definitions
6
+ */
7
+ export type LogoFace = {
8
+ readonly points: string;
9
+ readonly offset: readonly [number, number];
10
+ readonly rotation: number;
11
+ readonly opacity: number;
12
+ };
13
+ export declare const logoDefinition: {
14
+ readonly canvas: "0 0 180 170";
15
+ readonly square: "24 18 132 132";
16
+ readonly color: "#254fd0";
17
+ readonly darkColor: "#a4b9ff";
18
+ readonly faces: readonly [{
19
+ readonly points: "32,26 84,26 32,78";
20
+ readonly offset: readonly [-32, -26];
21
+ readonly rotation: -12;
22
+ readonly opacity: 0.42;
23
+ }, {
24
+ readonly points: "84,26 84,78 32,78";
25
+ readonly offset: readonly [-20, -14];
26
+ readonly rotation: 9;
27
+ readonly opacity: 0.78;
28
+ }, {
29
+ readonly points: "96,26 148,26 148,78";
30
+ readonly offset: readonly [32, -30];
31
+ readonly rotation: 14;
32
+ readonly opacity: 0.55;
33
+ }, {
34
+ readonly points: "32,90 84,142 32,142";
35
+ readonly offset: readonly [-30, 30];
36
+ readonly rotation: -14;
37
+ readonly opacity: 0.64;
38
+ }, {
39
+ readonly points: "96,90 148,90 96,142";
40
+ readonly offset: readonly [20, 14];
41
+ readonly rotation: -9;
42
+ readonly opacity: 0.48;
43
+ }, {
44
+ readonly points: "148,90 148,142 96,142";
45
+ readonly offset: readonly [32, 28];
46
+ readonly rotation: 12;
47
+ readonly opacity: 0.9;
48
+ }];
49
+ };
@@ -0,0 +1,78 @@
1
+ /*! tailwindcss v4.3.5 | MIT License | https://tailwindcss.com */
2
+ @layer theme, base, components, utilities;
3
+ @layer utilities;
4
+ .gridui-brand-logo {
5
+ display: inline-block;
6
+ flex-shrink: 0;
7
+ vertical-align: middle;
8
+ overflow: visible;
9
+ }
10
+ .gridui-brand-face {
11
+ transform-box: view-box;
12
+ transform-origin: 90px 85px;
13
+ }
14
+ .gridui-brand-face > polygon {
15
+ fill-opacity: var(--brand-base);
16
+ animation: var(--brand-idle, none), var(--brand-shimmer, none);
17
+ }
18
+ @media (prefers-reduced-motion: no-preference) {
19
+ .gridui-brand-logo[data-face-hover="true"] .gridui-brand-face > polygon {
20
+ transition: fill-opacity var(--brand-hover-duration) ease-out;
21
+ }
22
+ .gridui-brand-logo[data-animation="enter"] .gridui-brand-face {
23
+ animation: gridui-brand-enter var(--brand-duration) cubic-bezier(.333333, 1, .666667, 1) var(--brand-delay) backwards, gridui-brand-reveal var(--brand-fade) linear var(--brand-delay) backwards;
24
+ }
25
+ .gridui-brand-logo[data-idle="glow"] .gridui-brand-face > polygon {
26
+ --brand-idle: gridui-brand-glow var(--brand-idle-duration) ease-in-out var(--brand-idle-delay) infinite;
27
+ }
28
+ :where(a, button):focus-visible .gridui-brand-logo[data-emphasis="shimmer"] .gridui-brand-face > polygon {
29
+ --brand-shimmer: gridui-brand-shimmer var(--brand-shimmer-duration) ease-out var(--brand-shimmer-delay);
30
+ }
31
+ }
32
+ @media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
33
+ .gridui-brand-logo[data-emphasis="shimmer"]:hover .gridui-brand-face > polygon, :where(a, button):hover .gridui-brand-logo[data-emphasis="shimmer"] .gridui-brand-face > polygon {
34
+ --brand-shimmer: gridui-brand-shimmer var(--brand-shimmer-duration) ease-out var(--brand-shimmer-delay);
35
+ }
36
+ }
37
+ @media (hover: hover) and (pointer: fine) {
38
+ .gridui-brand-logo[data-face-hover="true"] .gridui-brand-face > polygon:hover {
39
+ --brand-base: 1;
40
+ --brand-low: 1;
41
+ --brand-peak: 1;
42
+ }
43
+ }
44
+ @keyframes gridui-brand-enter {
45
+ from {
46
+ transform: var(--brand-from);
47
+ }
48
+ to {
49
+ transform: translate(0, 0) rotate(0deg);
50
+ }
51
+ }
52
+ @keyframes gridui-brand-reveal {
53
+ from {
54
+ opacity: 0;
55
+ }
56
+ to {
57
+ opacity: 1;
58
+ }
59
+ }
60
+ @keyframes gridui-brand-glow {
61
+ 0%, 65%, 100% {
62
+ fill-opacity: var(--brand-low);
63
+ }
64
+ 22% {
65
+ fill-opacity: var(--brand-peak);
66
+ }
67
+ 44% {
68
+ fill-opacity: var(--brand-base);
69
+ }
70
+ }
71
+ @keyframes gridui-brand-shimmer {
72
+ 0%, 100% {
73
+ fill-opacity: var(--brand-base);
74
+ }
75
+ 42% {
76
+ fill-opacity: var(--brand-peak);
77
+ }
78
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @author WMXPY
3
+ * @package Gridui Brand
4
+ * @namespace Wordmark
5
+ * @description Layout
6
+ */
7
+ export declare const wordmarkLayout: {
8
+ readonly width: 400;
9
+ readonly height: 132;
10
+ readonly viewBox: "0 0 400 132";
11
+ readonly markSize: 132;
12
+ readonly letteringTransform: "translate(158 9)";
13
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @author WMXPY
3
+ * @package Gridui Brand
4
+ * @namespace Wordmark
5
+ * @description Paths
6
+ */
7
+ export declare const wordmarkPaths: readonly ["M 31.235998 59.784004 L 47.576004 59.784004 Q 46.891994 62.444 45.524 64.8 Q 44.155994 67.156 42.104 68.98 Q 40.052 70.804 37.239998 71.792 Q 34.427998 72.78 30.856 72.78 Q 25.612 72.78 21.432 70.348 Q 17.251999 67.916 14.82 63.545998 Q 12.388 59.176003 12.388 53.4 Q 12.388 47.548 14.858 43.254 Q 17.328 38.960003 21.546 36.566 Q 25.763998 34.172 30.856 34.172 Q 36.404 34.172 40.317997 36.452 Q 44.232 38.732002 46.435997 42.532 L 53.732 37.668003 Q 51.376 33.944 48.032 31.322002 Q 44.688 28.7 40.393997 27.256 Q 36.1 25.812002 30.856 25.812002 Q 24.852 25.812002 19.76 27.826 Q 14.667998 29.84 10.868 33.526 Q 7.068 37.212 4.9779997 42.266003 Q 2.888 47.319996 2.888 53.4 Q 2.888 59.480003 4.94 64.572 Q 6.991999 69.664 10.754 73.388 Q 14.516 77.112 19.608 79.126 Q 24.699999 81.14 30.703997 81.14 Q 37.087997 81.14 42.028 78.822 Q 46.968 76.504 50.312004 72.476 Q 53.656 68.448 55.328 63.242 Q 57 58.036003 56.848 52.184 L 31.235998 52.184 L 31.235998 59.784004 Z M 73.492 45.04 L 65.36 45.04 L 65.36 80 L 73.492 80 L 73.492 45.04 Z M 83.904 53.78 L 87.932 46.864 Q 86.715996 45.420002 85.044 44.812 Q 83.371994 44.204002 81.472 44.204002 Q 78.812 44.204002 76.341995 46.142002 Q 73.871994 48.08 72.313995 51.31 Q 70.756 54.54 70.756 58.72 L 73.492 60.316 Q 73.492 57.808 74.062 55.946 Q 74.631996 54.084 75.923996 53.02 Q 77.215996 51.956005 79.268 51.956005 Q 80.787994 51.956005 81.813995 52.412003 Q 82.84 52.868 83.904 53.78 Z M 93.25201 31.131998 Q 93.25201 33.184002 94.81 34.666 Q 96.368 36.148003 98.42 36.148003 Q 100.62399 36.148003 102.144 34.666 Q 103.663994 33.184002 103.663994 31.131998 Q 103.663994 29.004002 102.144 27.560003 Q 100.62399 26.116001 98.42 26.116001 Q 96.368 26.116001 94.81 27.560003 Q 93.25201 29.004002 93.25201 31.131998 Z M 94.392006 45.04 L 94.392006 80 L 102.523994 80 L 102.523994 45.04 L 94.392006 45.04 Z M 140.144 20.720001 L 140.144 80 L 148.428 80 L 148.428 20.720001 L 140.144 20.720001 Z M 111.187996 62.520004 Q 111.187996 68.22 113.544 72.324 Q 115.899994 76.428 119.81399 78.594 Q 123.728 80.76 128.21199 80.76 Q 132.62 80.76 135.926 78.556 Q 139.232 76.352 141.17 72.248 Q 143.108 68.144 143.108 62.520004 Q 143.108 56.82 141.17 52.754 Q 139.232 48.688004 135.926 46.483997 Q 132.62 44.280003 128.21199 44.280003 Q 123.728 44.280003 119.81399 46.446003 Q 115.899994 48.612 113.544 52.678 Q 111.187996 56.744003 111.187996 62.520004 Z M 119.7 62.520004 Q 119.7 59.024 121.14399 56.516 Q 122.588 54.008003 124.981995 52.716 Q 127.37599 51.424004 130.18799 51.424004 Q 132.62 51.424004 134.9 52.716 Q 137.18 54.008003 138.66199 56.478004 Q 140.144 58.947998 140.144 62.520004 Q 140.144 66.092 138.66199 68.562 Q 137.18 71.032 134.9 72.324 Q 132.62 73.616 130.18799 73.616 Q 127.37599 73.616 124.981995 72.324 Q 122.588 71.032 121.14399 68.524 Q 119.7 66.016 119.7 62.520004 Z M 158.916 26.800003 L 158.916 62.520004 Q 158.916 66.928 160.32199 70.386 Q 161.728 73.844 164.312 76.276 Q 166.896 78.708 170.468 80 Q 174.04001 81.292 178.29599 81.292 Q 182.552 81.292 186.12401 80 Q 189.696 78.708 192.318 76.276 Q 194.94 73.844 196.346 70.386 Q 197.752 66.928 197.752 62.520004 L 197.752 26.800003 L 188.70798 26.800003 L 188.70798 62.14 Q 188.70798 67.004 186.08598 70.044 Q 183.464 73.084 178.29599 73.084 Q 173.204 73.084 170.54399 70.044 Q 167.884 67.004 167.884 62.14 L 167.884 26.800003 L 158.916 26.800003 Z M 209.152 26.800003 L 209.152 80 L 218.272 80 L 218.272 26.800003 L 209.152 26.800003 Z"];
8
+ export declare const taglinePaths: readonly ["M 10.704 63.968 L 21.36 80 L 28.224 80 L 16.8 63.968 L 10.704 63.968 Z M 3.744 46.4 L 3.744 80 L 9.408 80 L 9.408 46.4 L 3.744 46.4 Z M 7.104 51.296 L 13.872 51.296 Q 15.84 51.296 17.28 51.968 Q 18.72 52.64 19.536 53.888 Q 20.352 55.136 20.352 56.96 Q 20.352 58.736 19.536 60.007996 Q 18.72 61.28 17.28 61.928 Q 15.84 62.576 13.872 62.576 L 7.104 62.576 L 7.104 67.28 L 14.112 67.28 Q 17.808 67.28 20.496 65.984 Q 23.184 64.688 24.696 62.336 Q 26.208 59.984 26.208 56.816 Q 26.208 53.648006 24.696 51.319996 Q 23.184 48.992 20.496 47.696 Q 17.808 46.4 14.112 46.4 L 7.104 46.4 L 7.104 51.296 Z M 41.472 80.48 Q 45.312 80.48 48.048 78.968 Q 50.784 77.456 52.56 74.48 L 48.048 72.704 Q 47.04 74.48 45.456 75.344 Q 43.872 76.208 41.711998 76.208 Q 39.696 76.208 38.304 75.344 Q 36.912 74.48 36.168 72.8 Q 35.424 71.12 35.472 68.768 Q 35.472 66.368 36.216 64.736 Q 36.96 63.104 38.328 62.24 Q 39.696 61.376 41.664 61.376 Q 43.296 61.376 44.520004 62.096 Q 45.744 62.816 46.440002 64.112 Q 47.136 65.408 47.136 67.184 Q 47.136 67.52 46.968002 68 Q 46.8 68.479996 46.656 68.768 L 48.24 66.56 L 33.312 66.56 L 33.312 70.16 L 52.704 70.16 Q 52.704 69.968 52.727997 69.536 Q 52.752 69.104004 52.752 68.72 Q 52.752 65.168 51.456 62.648003 Q 50.16 60.128 47.687996 58.784 Q 45.216 57.44 41.711998 57.44 Q 38.208 57.44 35.616 58.856 Q 33.024 60.272 31.608 62.864 Q 30.192 65.456 30.192 68.96 Q 30.192 72.416 31.584 75.008 Q 32.975998 77.6 35.544 79.04 Q 38.112 80.48 41.472 80.48 Z M 61.008 73.136 Q 61.008 72.08 61.512 71.36 Q 62.016 70.64 63.024 70.232 Q 64.032 69.824 65.664 69.824 Q 67.535995 69.824 69.216 70.304 Q 70.895996 70.784 72.384 71.84 L 72.384 69.2 Q 71.951996 68.672 70.895996 68.024 Q 69.84 67.376 68.232 66.895996 Q 66.624 66.416 64.416 66.416 Q 60.288 66.416 58.032 68.312 Q 55.776 70.208 55.776 73.423996 Q 55.776 75.68 56.832 77.264 Q 57.888 78.848 59.664 79.664 Q 61.44 80.48 63.504 80.48 Q 65.423996 80.48 67.272 79.784 Q 69.119995 79.088 70.344 77.648 Q 71.568 76.208 71.568 74.096 L 70.8 71.216 Q 70.8 72.895996 70.032 74.096 Q 69.264 75.296 67.992 75.944 Q 66.72 76.592 65.136 76.592 Q 63.935993 76.592 63 76.208 Q 62.064 75.824 61.536 75.032 Q 61.008 74.24 61.008 73.136 Z M 59.376 63.68 Q 59.904 63.344 60.864 62.840004 Q 61.824 62.336 63.192 61.975998 Q 64.56 61.615993 66.096 61.615993 Q 67.104 61.615993 67.968 61.808 Q 68.832 62 69.479996 62.432 Q 70.128 62.864 70.464 63.536 Q 70.8 64.208 70.8 65.264 L 70.8 80 L 75.888 80 L 75.888 64.256 Q 75.888 62.048 74.712 60.512 Q 73.535995 58.976 71.423996 58.184 Q 69.312 57.392 66.624 57.392 Q 63.504 57.392 61.152 58.256 Q 58.8 59.12 57.264 60.032 L 59.376 63.68 Z M 85.392 68.96 Q 85.392 66.895996 86.304 65.312 Q 87.216 63.728 88.776 62.816 Q 90.336 61.904 92.256 61.904 Q 93.792 61.904 95.232 62.384007 Q 96.672 62.864 97.80001 63.704002 Q 98.928 64.544 99.456 65.648 L 99.456 59.888 Q 98.304 58.784 96.336 58.112 Q 94.368 57.44 92.01599 57.44 Q 88.656 57.44 85.944 58.904 Q 83.232 60.368 81.648 62.96 Q 80.064 65.552 80.064 68.96 Q 80.064 72.32 81.648 74.936 Q 83.232 77.552 85.944 79.016 Q 88.656 80.48 92.01599 80.48 Q 94.368 80.48 96.336 79.808 Q 98.304 79.136 99.456 77.984 L 99.456 72.272 Q 98.928 73.328 97.82401 74.168 Q 96.72001 75.008 95.304 75.512 Q 93.888 76.016 92.256 76.016 Q 90.336 76.016 88.776 75.104004 Q 87.216 74.192 86.304 72.608 Q 85.392 71.024 85.392 68.96 Z M 102.09601 57.92 L 102.09601 62.48 L 114.624 62.48 L 114.624 57.92 L 102.09601 57.92 Z M 105.840004 50.24 L 105.840004 80 L 110.928 80 L 110.928 50.24 L 105.840004 50.24 Z M 136.03201 68.96 Q 136.03201 66.895996 136.944 65.312 Q 137.856 63.728 139.41602 62.816 Q 140.97601 61.904 142.89601 61.904 Q 144.432 61.904 145.87201 62.384007 Q 147.31201 62.864 148.44 63.704002 Q 149.56801 64.544 150.09601 65.648 L 150.09601 59.888 Q 148.944 58.784 146.97601 58.112 Q 145.00801 57.44 142.656 57.44 Q 139.296 57.44 136.58401 58.904 Q 133.87201 60.368 132.28801 62.96 Q 130.70401 65.552 130.70401 68.96 Q 130.70401 72.32 132.28801 74.936 Q 133.87201 77.552 136.58401 79.016 Q 139.296 80.48 142.656 80.48 Q 145.00801 80.48 146.97601 79.808 Q 148.944 79.136 150.09601 77.984 L 150.09601 72.272 Q 149.56801 73.328 148.464 74.168 Q 147.36002 75.008 145.944 75.512 Q 144.52802 76.016 142.89601 76.016 Q 140.97601 76.016 139.41602 75.104004 Q 137.856 74.192 136.944 72.608 Q 136.03201 71.024 136.03201 68.96 Z M 154.128 68.96 Q 154.128 72.32 155.688 74.936 Q 157.248 77.552 159.96 79.016 Q 162.672 80.48 166.032 80.48 Q 169.44 80.48 172.128 79.016 Q 174.81601 77.552 176.376 74.936 Q 177.93599 72.32 177.93599 68.96 Q 177.93599 65.552 176.376 62.96 Q 174.81601 60.368 172.128 58.904 Q 169.44 57.44 166.032 57.44 Q 162.672 57.44 159.96 58.904 Q 157.248 60.368 155.688 62.96 Q 154.128 65.552 154.128 68.96 Z M 159.45601 68.96 Q 159.45601 66.895996 160.32 65.312 Q 161.184 63.728 162.672 62.864 Q 164.16 62 166.032 62 Q 167.904 62 169.392 62.864 Q 170.88 63.728 171.744 65.312 Q 172.608 66.895996 172.608 68.96 Q 172.608 71.024 171.744 72.584 Q 170.88 74.144 169.392 75.032 Q 167.904 75.92 166.032 75.92 Q 164.16 75.92 162.672 75.032 Q 161.184 74.144 160.32 72.584 Q 159.45601 71.024 159.45601 68.96 Z M 214.51201 65.936 Q 214.51201 63.248 213.72 61.328 Q 212.928 59.407993 211.39201 58.423996 Q 209.856 57.44 207.45601 57.44 Q 205.24802 57.44 203.496 58.423996 Q 201.74399 59.407993 200.544 61.376 Q 199.82402 59.456 198.216 58.448 Q 196.608 57.44 194.20801 57.44 Q 192.048 57.44 190.51201 58.375996 Q 188.976 59.312 187.968 61.136 L 187.968 57.92 L 182.88 57.92 L 182.88 80 L 187.968 80 L 187.968 66.56 Q 187.968 64.976 188.52 63.872 Q 189.07202 62.768 190.05602 62.192 Q 191.04 61.615993 192.33601 61.615993 Q 194.25601 61.615993 195.14401 62.840004 Q 196.03201 64.064 196.03201 66.56 L 196.03201 80 L 201.216 80 L 201.216 66.56 Q 201.216 64.976 201.76799 63.872 Q 202.32002 62.768 203.30402 62.192 Q 204.288 61.615993 205.632 61.615993 Q 207.50401 61.615993 208.39201 62.840004 Q 209.28001 64.064 209.28001 66.56 L 209.28001 80 L 214.51201 80 L 214.51201 65.936 Z M 226.12802 90.56 L 226.12802 57.92 L 220.896 57.92 L 220.896 90.56 L 226.12802 90.56 Z M 244.416 68.96 Q 244.416 65.216 242.92801 62.648003 Q 241.44002 60.08 238.99199 58.688 Q 236.544 57.296 233.664 57.296 Q 230.88 57.296 228.792 58.736 Q 226.704 60.176 225.552 62.768 Q 224.4 65.36 224.4 68.96 Q 224.4 72.512 225.552 75.128 Q 226.704 77.744 228.792 79.16 Q 230.88 80.576 233.664 80.576 Q 236.544 80.576 238.99199 79.208 Q 241.44002 77.84 242.92801 75.224 Q 244.416 72.608 244.416 68.96 Z M 239.04 68.96 Q 239.04 71.168 238.128 72.704 Q 237.216 74.24 235.728 75.056 Q 234.24 75.872 232.41602 75.872 Q 230.88 75.872 229.44 75.08 Q 228 74.288 227.064 72.752 Q 226.12802 71.216 226.12802 68.96 Q 226.12802 66.704 227.064 65.168 Q 228 63.632 229.44 62.840004 Q 230.88 62.048 232.41602 62.048 Q 234.24 62.048 235.728 62.840004 Q 237.216 63.632 238.128 65.192 Q 239.04 66.752 239.04 68.96 Z M 247.68 68.96 Q 247.68 72.32 249.24 74.936 Q 250.8 77.552 253.51201 79.016 Q 256.224 80.48 259.584 80.48 Q 262.992 80.48 265.68 79.016 Q 268.368 77.552 269.928 74.936 Q 271.488 72.32 271.488 68.96 Q 271.488 65.552 269.928 62.96 Q 268.368 60.368 265.68 58.904 Q 262.992 57.44 259.584 57.44 Q 256.224 57.44 253.51201 58.904 Q 250.8 60.368 249.24 62.96 Q 247.68 65.552 247.68 68.96 Z M 253.00801 68.96 Q 253.00801 66.895996 253.87201 65.312 Q 254.73602 63.728 256.224 62.864 Q 257.712 62 259.584 62 Q 261.456 62 262.944 62.864 Q 264.432 63.728 265.29602 65.312 Q 266.16 66.895996 266.16 68.96 Q 266.16 71.024 265.29602 72.584 Q 264.432 74.144 262.944 75.032 Q 261.456 75.92 259.584 75.92 Q 257.712 75.92 256.224 75.032 Q 254.73602 74.144 253.87201 72.584 Q 253.00801 71.024 253.00801 68.96 Z M 290.63998 66.56 L 290.63998 80 L 295.968 80 L 295.968 65.936 Q 295.968 62 294 59.72 Q 292.03198 57.44 288.288 57.44 Q 286.03198 57.44 284.376 58.4 Q 282.72 59.36 281.664 61.328 L 281.664 57.92 L 276.432 57.92 L 276.432 80 L 281.664 80 L 281.664 66.56 Q 281.664 65.072 282.264 63.944004 Q 282.86398 62.816 283.968 62.215996 Q 285.072 61.615993 286.56 61.615993 Q 288.624 61.615993 289.632 62.864 Q 290.63998 64.112 290.63998 66.56 Z M 312.192 80.48 Q 316.032 80.48 318.768 78.968 Q 321.504 77.456 323.28 74.48 L 318.768 72.704 Q 317.76 74.48 316.176 75.344 Q 314.592 76.208 312.432 76.208 Q 310.416 76.208 309.024 75.344 Q 307.632 74.48 306.888 72.8 Q 306.144 71.12 306.192 68.768 Q 306.192 66.368 306.936 64.736 Q 307.68 63.104 309.048 62.24 Q 310.416 61.376 312.384 61.376 Q 314.016 61.376 315.24 62.096 Q 316.464 62.816 317.16 64.112 Q 317.856 65.408 317.856 67.184 Q 317.856 67.52 317.688 68 Q 317.52 68.479996 317.376 68.768 L 318.96 66.56 L 304.032 66.56 L 304.032 70.16 L 323.424 70.16 Q 323.424 69.968 323.448 69.536 Q 323.472 69.104004 323.472 68.72 Q 323.472 65.168 322.176 62.648003 Q 320.88 60.128 318.408 58.784 Q 315.936 57.44 312.432 57.44 Q 308.928 57.44 306.336 58.856 Q 303.744 60.272 302.328 62.864 Q 300.912 65.456 300.912 68.96 Q 300.912 72.416 302.304 75.008 Q 303.69598 77.6 306.264 79.04 Q 308.832 80.48 312.192 80.48 Z M 342.672 66.56 L 342.672 80 L 348 80 L 348 65.936 Q 348 62 346.032 59.72 Q 344.064 57.44 340.32 57.44 Q 338.064 57.44 336.40802 58.4 Q 334.752 59.36 333.696 61.328 L 333.696 57.92 L 328.46402 57.92 L 328.46402 80 L 333.696 80 L 333.696 66.56 Q 333.696 65.072 334.29602 63.944004 Q 334.896 62.816 336 62.215996 Q 337.104 61.615993 338.592 61.615993 Q 340.656 61.615993 341.664 62.864 Q 342.672 64.112 342.672 66.56 Z M 351.55203 57.92 L 351.55203 62.48 L 364.08002 62.48 L 364.08002 57.92 L 351.55203 57.92 Z M 355.29602 50.24 L 355.29602 80 L 360.38403 80 L 360.38403 50.24 L 355.29602 50.24 Z M 368.64 72.704 L 365.616 75.776 Q 366.57602 77.024 368.01602 78.152 Q 369.456 79.28 371.328 79.976 Q 373.19998 80.672 375.504 80.672 Q 379.104 80.672 381.24002 78.776 Q 383.376 76.88 383.376 73.76 Q 383.376 71.744 382.464 70.496 Q 381.55197 69.248 380.01602 68.384 Q 378.48 67.52 376.608 66.8 Q 375.264 66.272 374.18402 65.792 Q 373.10397 65.312 372.456 64.712 Q 371.808 64.112 371.808 63.344 Q 371.808 62.432 372.528 61.952 Q 373.248 61.472 374.4 61.472 Q 376.032 61.472 377.56802 62.288 Q 379.104 63.104 380.16 64.4 L 383.04 61.328 Q 382.128 60.224 380.832 59.36 Q 379.536 58.496 377.928 57.968 Q 376.32 57.44 374.496 57.44 Q 372.48 57.44 370.72797 58.087997 Q 368.97598 58.736 367.944 60.08 Q 366.91202 61.424 366.91202 63.44 Q 366.91202 65.408 367.84805 66.704 Q 368.78403 68 370.24802 68.792 Q 371.712 69.584 373.19998 70.16 Q 374.68802 70.688 375.792 71.192 Q 376.89597 71.696 377.52002 72.392 Q 378.14404 73.088 378.14404 74.048 Q 378.14404 75.152 377.35202 75.776 Q 376.56 76.4 375.168 76.4 Q 374.064 76.4 372.96002 75.968 Q 371.85602 75.536 370.80002 74.72 Q 369.74405 73.904 368.64 72.704 Z"];
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @author WMXPY
3
+ * @package Gridui Brand
4
+ * @namespace Wordmark
5
+ * @description Wordmark
6
+ */
7
+ import type { ComponentPropsWithRef, FC } from "react";
8
+ export type WordmarkProps = Omit<ComponentPropsWithRef<"svg">, "children" | "dangerouslySetInnerHTML" | "viewBox"> & {
9
+ readonly title?: string;
10
+ readonly markColor?: string;
11
+ };
12
+ export declare const Wordmark: FC<WordmarkProps>;
package/docs/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # GridUI brand guides
2
+
3
+ The [package contract](../README.md) covers installation, Logo motion and
4
+ accessibility, Wordmark, and the exported static SVG, PNG, and ICO assets.
5
+ The [component reference](reference/README.md) lists public React props.
6
+
7
+ Import Logo and Wordmark from `@gridui/gridui-brand`. Load only
8
+ `@gridui/gridui-brand/styles.css` for optional motion; the complete mark remains
9
+ visible without CSS. Theme, Grid, and Branding are not runtime dependencies.
10
+ Branding is an optional independent layout for placing this identity alongside
11
+ other brands. Consumers own links, region placement, and final asset URLs.
@@ -0,0 +1,46 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "name": "@gridui/gridui-brand",
4
+ "version": "0.0.0",
5
+ "category": "core",
6
+ "description": "GridUI Weave logo, wordmark, motion styles, and static brand assets.",
7
+ "usage": "`@gridui/gridui-brand` provides GridUI's Weave Logo, Wordmark, optional motion, and static identity assets. Consumers opt into this package independently of `@gridui/branding`, which arranges arbitrary brand items. No Theme stylesheet or other GridUI runtime package is required.",
8
+ "documentation": [
9
+ "README.md",
10
+ "docs/README.md",
11
+ "docs/reference/README.md",
12
+ "docs/reference/logo.md",
13
+ "docs/reference/wordmark.md"
14
+ ],
15
+ "exports": [
16
+ {
17
+ "name": "Logo",
18
+ "kind": "component",
19
+ "importPath": "@gridui/gridui-brand"
20
+ },
21
+ {
22
+ "name": "LogoProps",
23
+ "kind": "type",
24
+ "importPath": "@gridui/gridui-brand"
25
+ },
26
+ {
27
+ "name": "Wordmark",
28
+ "kind": "component",
29
+ "importPath": "@gridui/gridui-brand"
30
+ },
31
+ {
32
+ "name": "WordmarkProps",
33
+ "kind": "type",
34
+ "importPath": "@gridui/gridui-brand"
35
+ }
36
+ ],
37
+ "styles": [
38
+ "@gridui/gridui-brand/styles.css"
39
+ ],
40
+ "examples": [
41
+ "https://github.com/sudo-ui/GridUI-React-Monorepo/blob/main/packages-core/gridui-brand/stories/brand.mdx",
42
+ "https://github.com/sudo-ui/GridUI-React-Monorepo/blob/main/packages-core/gridui-brand/stories/getting-started.mdx",
43
+ "https://github.com/sudo-ui/GridUI-React-Monorepo/blob/main/packages-core/gridui-brand/stories/weave.stories.tsx",
44
+ "https://github.com/sudo-ui/GridUI-React-Monorepo/blob/main/packages-core/gridui-brand/stories/wordmark.stories.tsx"
45
+ ]
46
+ }
@@ -0,0 +1,5 @@
1
+ <!-- Generated by pnpm docs:storybook. -->
2
+ # Component reference
3
+
4
+ - [Logo](logo.md)
5
+ - [Wordmark](wordmark.md)
@@ -0,0 +1,114 @@
1
+ <!-- Generated from public Props and owned stories. Run pnpm docs:storybook. -->
2
+ # Logo
3
+
4
+ Weave is GridUI's six-facet brand mark for consumer applications. The same geometry generates the React logo, favicons, and sharing image at build time.
5
+
6
+ Import from ``@gridui/gridui-brand``. Load this family's standalone stylesheet when needed.
7
+
8
+ ```tsx
9
+ import { Logo } from "@gridui/gridui-brand";
10
+ import "@gridui/gridui-brand/styles.css";
11
+ ```
12
+
13
+ Read the [package contract](https://github.com/sudo-ui/GridUI-React-Monorepo/blob/main/packages-core/gridui-brand/README.md) for shared behavior and stylesheet dependencies.
14
+
15
+ The [working composition](https://github.com/sudo-ui/GridUI-React-Monorepo/blob/main/packages-core/gridui-brand/stories/weave.stories.tsx) demonstrates required context, state, and related components. Use View code in Storybook to inspect the actual implementation.
16
+
17
+ ## API
18
+
19
+ The public Props type is the source of these signatures. Defaults below are explicit implementation defaults; story presets are separate. Native attributes remain available through the exported Props type.
20
+
21
+ ### onFocus
22
+
23
+ ``(event: FocusEvent<SVGSVGElement, Element>): void`` · Optional
24
+
25
+ Called when the corresponding interaction occurs; inspect the arguments in Actions.
26
+
27
+ ### onBlur
28
+
29
+ ``(event: FocusEvent<SVGSVGElement, Element>): void`` · Optional
30
+
31
+ Called when the corresponding interaction occurs; inspect the arguments in Actions.
32
+
33
+ ### onChange
34
+
35
+ ``(event: ChangeEvent<SVGSVGElement, Element>): void`` · Optional
36
+
37
+ Called when the corresponding interaction occurs; inspect the arguments in Actions.
38
+
39
+ ### onSubmit
40
+
41
+ ``(event: SubmitEvent<SVGSVGElement>): void`` · Optional
42
+
43
+ Called when the corresponding interaction occurs; inspect the arguments in Actions.
44
+
45
+ ### onClick
46
+
47
+ ``(event: MouseEvent<SVGSVGElement, MouseEvent>): void`` · Optional
48
+
49
+ Called when the corresponding interaction occurs; inspect the arguments in Actions.
50
+
51
+ ### size
52
+
53
+ ``string | number | undefined`` · Optional
54
+
55
+ Default: ``48``
56
+
57
+ Component size preset.
58
+
59
+ ### framing
60
+
61
+ ``"canvas" | "square" | undefined`` · Optional
62
+
63
+ Default: ``"canvas"``
64
+
65
+ ### title
66
+
67
+ ``string | undefined`` · Optional
68
+
69
+ ### appearance
70
+
71
+ ``"glass" | "solid" | undefined`` · Optional
72
+
73
+ Default: ``"glass"``
74
+
75
+ ### animation
76
+
77
+ ``"none" | "enter" | undefined`` · Optional
78
+
79
+ Default: ``"none"``
80
+
81
+ ### idle
82
+
83
+ ``"none" | "glow" | undefined`` · Optional
84
+
85
+ Default: ``"none"``
86
+
87
+ ### emphasis
88
+
89
+ ``"none" | "shimmer" | undefined`` · Optional
90
+
91
+ Default: ``"none"``
92
+
93
+ ### faceHover
94
+
95
+ ``boolean | undefined`` · Optional
96
+
97
+ Default: ``false``
98
+
99
+ ### duration
100
+
101
+ ``number | undefined`` · Optional
102
+
103
+ Default: ``logoMotion.entrance.duration``
104
+
105
+ ### progress
106
+
107
+ ``number | undefined`` · Optional
108
+
109
+ ### replayKey
110
+
111
+ ``string | number | undefined`` · Optional
112
+
113
+ Default: ``0``
114
+
@@ -0,0 +1,60 @@
1
+ <!-- Generated from public Props and owned stories. Run pnpm docs:storybook. -->
2
+ # Wordmark
3
+
4
+ Renders GridUI's complete logo and vector wordmark without a font dependency. Supply its accessible name and use native SVG props to size or color it.
5
+
6
+ Import from ``@gridui/gridui-brand``. Load this family's standalone stylesheet when needed.
7
+
8
+ ```tsx
9
+ import { Wordmark } from "@gridui/gridui-brand";
10
+ import "@gridui/gridui-brand/styles.css";
11
+ ```
12
+
13
+ Read the [package contract](https://github.com/sudo-ui/GridUI-React-Monorepo/blob/main/packages-core/gridui-brand/README.md) for shared behavior and stylesheet dependencies.
14
+
15
+ The [working composition](https://github.com/sudo-ui/GridUI-React-Monorepo/blob/main/packages-core/gridui-brand/stories/wordmark.stories.tsx) demonstrates required context, state, and related components. Use View code in Storybook to inspect the actual implementation.
16
+
17
+ ## API
18
+
19
+ The public Props type is the source of these signatures. Defaults below are explicit implementation defaults; story presets are separate. Native attributes remain available through the exported Props type.
20
+
21
+ ### onFocus
22
+
23
+ ``(event: FocusEvent<SVGSVGElement, Element>): void`` · Optional
24
+
25
+ Called when the corresponding interaction occurs; inspect the arguments in Actions.
26
+
27
+ ### onBlur
28
+
29
+ ``(event: FocusEvent<SVGSVGElement, Element>): void`` · Optional
30
+
31
+ Called when the corresponding interaction occurs; inspect the arguments in Actions.
32
+
33
+ ### onChange
34
+
35
+ ``(event: ChangeEvent<SVGSVGElement, Element>): void`` · Optional
36
+
37
+ Called when the corresponding interaction occurs; inspect the arguments in Actions.
38
+
39
+ ### onSubmit
40
+
41
+ ``(event: SubmitEvent<SVGSVGElement>): void`` · Optional
42
+
43
+ Called when the corresponding interaction occurs; inspect the arguments in Actions.
44
+
45
+ ### onClick
46
+
47
+ ``(event: MouseEvent<SVGSVGElement, MouseEvent>): void`` · Optional
48
+
49
+ Called when the corresponding interaction occurs; inspect the arguments in Actions.
50
+
51
+ ### title
52
+
53
+ ``string | undefined`` · Optional
54
+
55
+ ### markColor
56
+
57
+ ``string | undefined`` · Optional
58
+
59
+ Default: ``"currentColor"``
60
+
package/package.json CHANGED
@@ -1,6 +1,58 @@
1
1
  {
2
2
  "name": "@gridui/gridui-brand",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.0.0",
4
+ "description": "GridUI Weave logo, wordmark, motion styles, and static brand assets.",
5
+ "license": "UNLICENSED",
6
+ "type": "module",
7
+ "files": [
8
+ "dist",
9
+ "docs",
10
+ "README.md",
11
+ "OFL.txt"
12
+ ],
13
+ "sideEffects": [
14
+ "**/*.css"
15
+ ],
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "import": "./dist/index.js"
20
+ },
21
+ "./styles.css": "./dist/styles.css",
22
+ "./logo.svg": "./dist/assets/brand/logo.svg",
23
+ "./wordmark.svg": "./dist/assets/brand/wordmark.svg",
24
+ "./favicon.svg": "./dist/assets/favicon.svg",
25
+ "./favicon.ico": "./dist/assets/favicon.ico",
26
+ "./favicon-32.png": "./dist/assets/favicon-32.png",
27
+ "./apple-touch-icon.png": "./dist/assets/apple-touch-icon.png",
28
+ "./og.png": "./dist/assets/og/gridui.png"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "devDependencies": {
34
+ "@gridui-internal/configuration": "0.0.0-internal",
35
+ "@gridui/theme": "2.5.4",
36
+ "@jest/globals": "30.5.2",
37
+ "@resvg/resvg-js": "2.6.2",
38
+ "@storybook/react-vite": "10.6.7",
39
+ "@types/jest": "30.0.0",
40
+ "@types/node": "26.6.6",
41
+ "@types/react": "19.3.0",
42
+ "@types/react-dom": "19.3.0",
43
+ "esbuild": "0.28.2",
44
+ "jest": "30.5.2",
45
+ "react": "19.3.1",
46
+ "react-dom": "19.3.1",
47
+ "typescript": "6.0.3"
48
+ },
49
+ "peerDependencies": {
50
+ "react": "^19.0.0"
51
+ },
52
+ "scripts": {
53
+ "build": "node ../../scripts/compilation/package.ts && node scripts/build-assets.ts",
54
+ "compile": "tsc --project tsconfig.json",
55
+ "test": "jest && node --test scripts/test/*.test.ts",
56
+ "coverage": "jest --coverage && NODE_V8_COVERAGE=coverage/node node --experimental-test-coverage --test scripts/test/*.test.ts"
57
+ }
6
58
  }