@vinyasa/typography 1.0.20

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.
Files changed (90) hide show
  1. package/README.md +118 -0
  2. package/dist/cjs/blockquote.cjs +245 -0
  3. package/dist/cjs/blockquote.css +36 -0
  4. package/dist/cjs/caption.cjs +465 -0
  5. package/dist/cjs/caption.css +87 -0
  6. package/dist/cjs/code.cjs +357 -0
  7. package/dist/cjs/code.css +21 -0
  8. package/dist/cjs/heading.cjs +474 -0
  9. package/dist/cjs/heading.css +87 -0
  10. package/dist/cjs/index.cjs +1393 -0
  11. package/dist/cjs/index.css +165 -0
  12. package/dist/cjs/kbd.cjs +245 -0
  13. package/dist/cjs/kbd.css +13 -0
  14. package/dist/cjs/label.cjs +465 -0
  15. package/dist/cjs/label.css +87 -0
  16. package/dist/cjs/link.cjs +526 -0
  17. package/dist/cjs/link.css +95 -0
  18. package/dist/cjs/markdown-renderer.cjs +1085 -0
  19. package/dist/cjs/markdown-renderer.css +152 -0
  20. package/dist/cjs/paragraph.cjs +418 -0
  21. package/dist/cjs/paragraph.css +87 -0
  22. package/dist/cjs/text.cjs +389 -0
  23. package/dist/cjs/text.css +87 -0
  24. package/dist/esm/191.css +87 -0
  25. package/dist/esm/191.js +90 -0
  26. package/dist/esm/474.js +76 -0
  27. package/dist/esm/57.css +8 -0
  28. package/dist/esm/57.js +43 -0
  29. package/dist/esm/63.js +21 -0
  30. package/dist/esm/651.css +20 -0
  31. package/dist/esm/651.js +63 -0
  32. package/dist/esm/654.js +72 -0
  33. package/dist/esm/691.js +13 -0
  34. package/dist/esm/783.css +8 -0
  35. package/dist/esm/783.js +37 -0
  36. package/dist/esm/895.js +11 -0
  37. package/dist/esm/919.css +12 -0
  38. package/dist/esm/919.js +37 -0
  39. package/dist/esm/953.js +87 -0
  40. package/dist/esm/975.js +13 -0
  41. package/dist/esm/blockquote.d.ts +2 -0
  42. package/dist/esm/blockquote.js +1 -0
  43. package/dist/esm/caption.d.ts +2 -0
  44. package/dist/esm/caption.js +1 -0
  45. package/dist/esm/code.d.ts +2 -0
  46. package/dist/esm/code.js +1 -0
  47. package/dist/esm/components/blockquote/Blockquote.css.d.ts +1 -0
  48. package/dist/esm/components/blockquote/Blockquote.d.ts +5 -0
  49. package/dist/esm/components/blockquote/index.d.ts +1 -0
  50. package/dist/esm/components/caption/Caption.d.ts +4 -0
  51. package/dist/esm/components/caption/index.d.ts +1 -0
  52. package/dist/esm/components/code/Code.css.d.ts +14 -0
  53. package/dist/esm/components/code/Code.d.ts +13 -0
  54. package/dist/esm/components/code/index.d.ts +1 -0
  55. package/dist/esm/components/heading/Heading.d.ts +9 -0
  56. package/dist/esm/components/heading/index.d.ts +1 -0
  57. package/dist/esm/components/kbd/Kbd.css.d.ts +1 -0
  58. package/dist/esm/components/kbd/Kbd.d.ts +5 -0
  59. package/dist/esm/components/kbd/index.d.ts +1 -0
  60. package/dist/esm/components/label/Label.d.ts +8 -0
  61. package/dist/esm/components/label/index.d.ts +1 -0
  62. package/dist/esm/components/link/Link.css.d.ts +1 -0
  63. package/dist/esm/components/link/Link.d.ts +10 -0
  64. package/dist/esm/components/link/index.d.ts +1 -0
  65. package/dist/esm/components/markdown-renderer/MarkdownRenderer.d.ts +10 -0
  66. package/dist/esm/components/markdown-renderer/index.d.ts +1 -0
  67. package/dist/esm/components/paragraph/Paragraph.d.ts +4 -0
  68. package/dist/esm/components/paragraph/index.d.ts +1 -0
  69. package/dist/esm/components/text/Text.css.d.ts +74 -0
  70. package/dist/esm/components/text/Text.d.ts +14 -0
  71. package/dist/esm/components/text/index.d.ts +1 -0
  72. package/dist/esm/heading.d.ts +2 -0
  73. package/dist/esm/heading.js +1 -0
  74. package/dist/esm/index.d.ts +10 -0
  75. package/dist/esm/index.js +10 -0
  76. package/dist/esm/kbd.d.ts +2 -0
  77. package/dist/esm/kbd.js +1 -0
  78. package/dist/esm/label.d.ts +2 -0
  79. package/dist/esm/label.js +1 -0
  80. package/dist/esm/link.d.ts +2 -0
  81. package/dist/esm/link.js +1 -0
  82. package/dist/esm/markdown-renderer.d.ts +2 -0
  83. package/dist/esm/markdown-renderer.js +1 -0
  84. package/dist/esm/paragraph.d.ts +2 -0
  85. package/dist/esm/paragraph.js +1 -0
  86. package/dist/esm/polymorphic.d.ts +5 -0
  87. package/dist/esm/spacing.d.ts +19 -0
  88. package/dist/esm/text.d.ts +2 -0
  89. package/dist/esm/text.js +1 -0
  90. package/package.json +134 -0
package/README.md ADDED
@@ -0,0 +1,118 @@
1
+ # @vinyasa/typography
2
+
3
+ 10 typography primitives: Text, Heading, Paragraph, Label, Caption, Link, Code, Kbd, Blockquote, MarkdownRenderer.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pnpm add @vinyasa/typography @vinyasa/layout @vinyasa/tokens react react-dom
9
+ ```
10
+
11
+ `@vinyasa/tokens` and `@vinyasa/layout` are peer dependencies — this package's spacing props reuse the same token-derived scale `@vinyasa/layout` established, and `MarkdownRenderer` reuses `@vinyasa/layout`'s `Box` for its wrapper. Rendering requires a `VinyasaProvider` (from `@vinyasa/tokens`) above these components in the tree.
12
+
13
+ ## New tokens this package introduces
14
+
15
+ `@vinyasa/tokens` gained one new color role and three larger font sizes to support headings:
16
+
17
+ | Token | Value | Used by |
18
+ | ------------- | ----------------------- | --------------------------------- |
19
+ | `fontSize2xl` | `1.5rem` (24px) | `Heading` (`h2` default) |
20
+ | `fontSize3xl` | `1.875rem` (30px) | `Heading` (`h1` default) |
21
+ | `fontSize4xl` | `2.25rem` (36px) | `Heading` (`size="4xl"` override) |
22
+ | `textMuted` | `#6b7280` (`gray[500]`) | `Text` `color="muted"`, `Caption` |
23
+
24
+ These extend the existing `fontSize` scale (`xs`–`xl` were already Tailwind's own type steps up to 20px) purely upward — no new scale, no new primitives beyond `textMuted`'s reuse of an already-existing gray.
25
+
26
+ ## Spacing
27
+
28
+ Every component accepts the same margin/padding props as `@vinyasa/layout` — see [its README](../layout/README.md#spacing) for the full prop and token tables.
29
+
30
+ ## Usage
31
+
32
+ ### Text
33
+
34
+ The one real recipe every other component in this package builds on.
35
+
36
+ ```tsx
37
+ <Text size="lg" weight="medium" color="muted">
38
+ Body copy
39
+ </Text>
40
+ ```
41
+
42
+ `size`: `xs`/`sm`/`md`/`lg`/`xl`/`2xl`/`3xl`/`4xl`. `weight`: `regular`/`medium`/`semibold`/`bold`. `align`: `left`/`center`/`right`. `color`: `default`/`muted`/`primary`/`error`. `truncate`: boolean.
43
+
44
+ ### Heading
45
+
46
+ ```tsx
47
+ <Heading as="h1">Page title</Heading>
48
+ <Heading as="h3" size="lg">Visually smaller h3</Heading>
49
+ ```
50
+
51
+ `as` (`h1`–`h6`, default `h2`) picks a sensible default `size` per level (`h1`→`3xl` … `h6`→`sm`) — pass `size` explicitly to decouple the visual size from the semantic level, same as Radix Themes' `Heading`.
52
+
53
+ ### Paragraph, Label, Caption
54
+
55
+ Thin, fixed-prop wrappers over `Text` — not duplicated CSS.
56
+
57
+ ```tsx
58
+ <Paragraph>Some long-form body text.</Paragraph>
59
+ <Label htmlFor="email">Email address</Label> {/* Text as="label" size="sm" weight="medium" */}
60
+ <Caption>Last updated 2 hours ago</Caption> {/* Text as="span" size="xs" color="muted" */}
61
+ ```
62
+
63
+ ### Link
64
+
65
+ ```tsx
66
+ <Link href="/docs">Read the docs</Link>
67
+ <Link href="https://example.com" target="_blank" rel="noreferrer">External link</Link>
68
+ ```
69
+
70
+ Real anchor props (`href`, `target`, `rel`), plus `size`/`weight`/`truncate` from `Text`. `color` is narrowed to `primary`/`error`.
71
+
72
+ ### Code
73
+
74
+ ```tsx
75
+ <Text>Run <Code>pnpm install</Code> first.</Text>
76
+ <Code block>{`function greet() {\n return "hi";\n}`}</Code>
77
+ ```
78
+
79
+ `block` renders `<pre><code>` instead of inline `<code>`.
80
+
81
+ ### Kbd
82
+
83
+ ```tsx
84
+ <Kbd>⌘</Kbd> + <Kbd>K</Kbd>;
85
+ ```
86
+
87
+ ### Blockquote
88
+
89
+ ```tsx
90
+ <Blockquote>Design is not just what it looks like. Design is how it works.</Blockquote>
91
+ ```
92
+
93
+ ### MarkdownRenderer
94
+
95
+ Wraps [`react-markdown`](https://github.com/remarkjs/react-markdown), mapping every markdown element to this package's own components (headings → `Heading`, paragraphs → `Paragraph`, links → `Link`, code → `Code`, blockquotes → `Blockquote`) so rendered markdown automatically picks up your theme.
96
+
97
+ ```tsx
98
+ <MarkdownRenderer>{'# Title\n\nSome *text* with `inline code`.'}</MarkdownRenderer>
99
+ ```
100
+
101
+ ## Subpath imports
102
+
103
+ Every component can be imported directly instead of through the package root, e.g.:
104
+
105
+ ```tsx
106
+ import Text from '@vinyasa/typography/text';
107
+ ```
108
+
109
+ ## Development
110
+
111
+ From the repository root:
112
+
113
+ ```bash
114
+ pnpm --filter @vinyasa/typography build
115
+ pnpm --filter @vinyasa/typography test
116
+ pnpm --filter @vinyasa/typography lint
117
+ pnpm storybook # Typography/*
118
+ ```
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ default: ()=>blockquote_Blockquote
32
+ });
33
+ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
34
+ const external_react_namespaceObject = require("react");
35
+ const tokens_namespaceObject = require("@vinyasa/tokens");
36
+ const space = {
37
+ 1: tokens_namespaceObject.themeContract.space1,
38
+ 2: tokens_namespaceObject.themeContract.space2,
39
+ 3: tokens_namespaceObject.themeContract.space3,
40
+ 4: tokens_namespaceObject.themeContract.space4,
41
+ 5: tokens_namespaceObject.themeContract.space5,
42
+ 6: tokens_namespaceObject.themeContract.space6
43
+ };
44
+ const spacingPropertyMap = [
45
+ [
46
+ 'm',
47
+ 'margin'
48
+ ],
49
+ [
50
+ 'mx',
51
+ 'marginInline'
52
+ ],
53
+ [
54
+ 'my',
55
+ 'marginBlock'
56
+ ],
57
+ [
58
+ 'mt',
59
+ 'marginTop'
60
+ ],
61
+ [
62
+ 'mr',
63
+ 'marginRight'
64
+ ],
65
+ [
66
+ 'mb',
67
+ 'marginBottom'
68
+ ],
69
+ [
70
+ 'ml',
71
+ 'marginLeft'
72
+ ],
73
+ [
74
+ 'p',
75
+ 'padding'
76
+ ],
77
+ [
78
+ 'px',
79
+ 'paddingInline'
80
+ ],
81
+ [
82
+ 'py',
83
+ 'paddingBlock'
84
+ ],
85
+ [
86
+ 'pt',
87
+ 'paddingTop'
88
+ ],
89
+ [
90
+ 'pr',
91
+ 'paddingRight'
92
+ ],
93
+ [
94
+ 'pb',
95
+ 'paddingBottom'
96
+ ],
97
+ [
98
+ 'pl',
99
+ 'paddingLeft'
100
+ ]
101
+ ];
102
+ const resolveSpacingStyle = (props)=>{
103
+ const style = {};
104
+ for (const [propKey, cssProperty] of spacingPropertyMap){
105
+ const value = props[propKey];
106
+ if (void 0 !== value) style[cssProperty] = space[value];
107
+ }
108
+ return style;
109
+ };
110
+ var blockquote = 'adxw6l0';
111
+ function _define_property(obj, key, value) {
112
+ if (key in obj) Object.defineProperty(obj, key, {
113
+ value: value,
114
+ enumerable: true,
115
+ configurable: true,
116
+ writable: true
117
+ });
118
+ else obj[key] = value;
119
+ return obj;
120
+ }
121
+ function _object_spread(target) {
122
+ for(var i = 1; i < arguments.length; i++){
123
+ var source = null != arguments[i] ? arguments[i] : {};
124
+ var ownKeys = Object.keys(source);
125
+ if ("function" == typeof Object.getOwnPropertySymbols) ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
126
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
127
+ }));
128
+ ownKeys.forEach(function(key) {
129
+ _define_property(target, key, source[key]);
130
+ });
131
+ }
132
+ return target;
133
+ }
134
+ function Blockquote_ownKeys(object, enumerableOnly) {
135
+ var keys = Object.keys(object);
136
+ if (Object.getOwnPropertySymbols) {
137
+ var symbols = Object.getOwnPropertySymbols(object);
138
+ if (enumerableOnly) symbols = symbols.filter(function(sym) {
139
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
140
+ });
141
+ keys.push.apply(keys, symbols);
142
+ }
143
+ return keys;
144
+ }
145
+ function _object_spread_props(target, source) {
146
+ source = null != source ? source : {};
147
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
148
+ else Blockquote_ownKeys(Object(source)).forEach(function(key) {
149
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
150
+ });
151
+ return target;
152
+ }
153
+ function _object_without_properties(source, excluded) {
154
+ if (null == source) return {};
155
+ var target = {}, sourceKeys, key, i;
156
+ if ("u" > typeof Reflect && Reflect.ownKeys) {
157
+ sourceKeys = Reflect.ownKeys(Object(source));
158
+ for(i = 0; i < sourceKeys.length; i++){
159
+ key = sourceKeys[i];
160
+ if (!(excluded.indexOf(key) >= 0)) {
161
+ if (Object.prototype.propertyIsEnumerable.call(source, key)) target[key] = source[key];
162
+ }
163
+ }
164
+ return target;
165
+ }
166
+ target = _object_without_properties_loose(source, excluded);
167
+ if (Object.getOwnPropertySymbols) {
168
+ sourceKeys = Object.getOwnPropertySymbols(source);
169
+ for(i = 0; i < sourceKeys.length; i++){
170
+ key = sourceKeys[i];
171
+ if (!(excluded.indexOf(key) >= 0)) {
172
+ if (Object.prototype.propertyIsEnumerable.call(source, key)) target[key] = source[key];
173
+ }
174
+ }
175
+ }
176
+ return target;
177
+ }
178
+ function _object_without_properties_loose(source, excluded) {
179
+ if (null == source) return {};
180
+ var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
181
+ for(i = 0; i < sourceKeys.length; i++){
182
+ key = sourceKeys[i];
183
+ if (!(excluded.indexOf(key) >= 0)) {
184
+ if (Object.prototype.propertyIsEnumerable.call(source, key)) target[key] = source[key];
185
+ }
186
+ }
187
+ return target;
188
+ }
189
+ const Blockquote = /*#__PURE__*/ (0, external_react_namespaceObject.forwardRef)((_0, _1)=>{
190
+ let _ref = [
191
+ _0,
192
+ _1
193
+ ], [_ref1, ..._rest] = _ref, { m, mt, mr, mb, ml, mx, my, p, pt, pr, pb, pl, px, py, className, style, children } = _ref1, rest = _object_without_properties(_ref1, [
194
+ "m",
195
+ "mt",
196
+ "mr",
197
+ "mb",
198
+ "ml",
199
+ "mx",
200
+ "my",
201
+ "p",
202
+ "pt",
203
+ "pr",
204
+ "pb",
205
+ "pl",
206
+ "px",
207
+ "py",
208
+ "className",
209
+ "style",
210
+ "children"
211
+ ]), [ref] = _rest;
212
+ const classes = className ? `${blockquote} ${className}` : blockquote;
213
+ const computedStyle = _object_spread({}, resolveSpacingStyle({
214
+ m,
215
+ mt,
216
+ mr,
217
+ mb,
218
+ ml,
219
+ mx,
220
+ my,
221
+ p,
222
+ pt,
223
+ pr,
224
+ pb,
225
+ pl,
226
+ px,
227
+ py
228
+ }), style);
229
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("blockquote", _object_spread_props(_object_spread({
230
+ ref: ref,
231
+ className: classes,
232
+ style: computedStyle
233
+ }, rest), {
234
+ children: children
235
+ }));
236
+ });
237
+ Blockquote.displayName = 'Blockquote';
238
+ const blockquote_Blockquote = Blockquote;
239
+ exports["default"] = __webpack_exports__["default"];
240
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
241
+ "default"
242
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
243
+ Object.defineProperty(exports, '__esModule', {
244
+ value: true
245
+ });
@@ -0,0 +1,36 @@
1
+ .adxw6l0 {
2
+ color: var(--vinyasa-text-muted);
3
+ margin: 0;
4
+ font-style: italic;
5
+ }
6
+
7
+ .adxw6l0:not(:-webkit-any(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi))) {
8
+ border-left: var(--vinyasa-border-width-thin) solid var(--vinyasa-border-color-default);
9
+ padding-left: var(--vinyasa-space4);
10
+ }
11
+
12
+ .adxw6l0:not(:-moz-any(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi))) {
13
+ border-left: var(--vinyasa-border-width-thin) solid var(--vinyasa-border-color-default);
14
+ padding-left: var(--vinyasa-space4);
15
+ }
16
+
17
+ .adxw6l0:not(:is(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi))) {
18
+ border-left: var(--vinyasa-border-width-thin) solid var(--vinyasa-border-color-default);
19
+ padding-left: var(--vinyasa-space4);
20
+ }
21
+
22
+ .adxw6l0:-webkit-any(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi)) {
23
+ border-right: var(--vinyasa-border-width-thin) solid var(--vinyasa-border-color-default);
24
+ padding-right: var(--vinyasa-space4);
25
+ }
26
+
27
+ .adxw6l0:-moz-any(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi)) {
28
+ border-right: var(--vinyasa-border-width-thin) solid var(--vinyasa-border-color-default);
29
+ padding-right: var(--vinyasa-space4);
30
+ }
31
+
32
+ .adxw6l0:is(:lang(ae), :lang(ar), :lang(arc), :lang(bcc), :lang(bqi), :lang(ckb), :lang(dv), :lang(fa), :lang(glk), :lang(he), :lang(ku), :lang(mzn), :lang(nqo), :lang(pnb), :lang(ps), :lang(sd), :lang(ug), :lang(ur), :lang(yi)) {
33
+ border-right: var(--vinyasa-border-width-thin) solid var(--vinyasa-border-color-default);
34
+ padding-right: var(--vinyasa-space4);
35
+ }
36
+