@eduardoalvarez/arrecife 0.12.2 → 0.12.3

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.
@@ -446,7 +446,7 @@ declare const size: {
446
446
  * invalid error 4.97:1
447
447
  *
448
448
  * `brand.body` (#3E7CB1) is NOT here: the system restricts it to fill, never
449
- * text, and it measures 4.2:1 in this context.
449
+ * text, and it measures 4.12:1 in this context.
450
450
  *
451
451
  * Numeric and boolean literals ride with strings in biolume. The document does
452
452
  * not assign them, and grouping them with strings — all three are literals — is
@@ -498,13 +498,17 @@ declare const gradient: {
498
498
  readonly dark: {
499
499
  readonly hero: "linear-gradient(160deg, #091319 60%, #0D2129 100%)";
500
500
  readonly section: "linear-gradient(150deg, #10202B 0%, #0D2129 100%)";
501
- /** The one used by the article OG template. 145°, from the document. */
502
- readonly og: "linear-gradient(145deg, #091319 55%, #0D2129 100%)";
501
+ /** The article OG template. 145°, from the document. */
502
+ readonly og: "linear-gradient(145deg, #091319 58%, #0E2A30 100%)";
503
+ /** The talk OG template. 150°, from the document. */
504
+ readonly ogTalk: "linear-gradient(150deg, #091319 55%, #0E2A30 100%)";
503
505
  };
504
506
  readonly light: {
505
507
  readonly hero: "linear-gradient(160deg, #F6F2EA 60%, #FFFFFF 100%)";
506
508
  readonly section: "linear-gradient(150deg, #FFFFFF 0%, #F6F2EA 100%)";
507
509
  readonly og: "linear-gradient(145deg, #F6F2EA 55%, #FFFFFF 100%)";
510
+ /** No light talk card exists; the key mirrors dark so both modes carry it. */
511
+ readonly ogTalk: "linear-gradient(150deg, #F6F2EA 55%, #FFFFFF 100%)";
508
512
  };
509
513
  };
510
514
  /** A single level. There is no elevation scale. */
@@ -522,12 +526,12 @@ declare const motion: {
522
526
  readonly properties: "color, background-color, border-color, fill, stroke";
523
527
  };
524
528
  declare const tagline: {
525
- /** Hero. */
526
- readonly long: "Ayudo a equipos de ingeniería a escalar con criterio";
527
- /** Header, one line. */
528
- readonly short: "Ayudo a equipos a escalar con criterio";
529
- /** LinkedIn. */
530
- readonly en: "Helping engineering teams scale with judgment";
529
+ /** Hero. The bajada approved in § 65. */
530
+ readonly long: "Enseño a construir software con IA sin dejar de entender lo que hacemos.";
531
+ /** Header, one line. Role and method, as in § 65. */
532
+ readonly short: "Technical Lead · Spec-Driven Development";
533
+ /** English surfaces. */
534
+ readonly en: "I teach how to build software with AI without losing sight of what we build.";
531
535
  };
532
536
  /**
533
537
  * The wordmark always reads «Eduardo Álvarez». The mascot is called Tiburoncín
@@ -758,12 +762,14 @@ declare const tokens: {
758
762
  readonly dark: {
759
763
  readonly hero: "linear-gradient(160deg, #091319 60%, #0D2129 100%)";
760
764
  readonly section: "linear-gradient(150deg, #10202B 0%, #0D2129 100%)";
761
- readonly og: "linear-gradient(145deg, #091319 55%, #0D2129 100%)";
765
+ readonly og: "linear-gradient(145deg, #091319 58%, #0E2A30 100%)";
766
+ readonly ogTalk: "linear-gradient(150deg, #091319 55%, #0E2A30 100%)";
762
767
  };
763
768
  readonly light: {
764
769
  readonly hero: "linear-gradient(160deg, #F6F2EA 60%, #FFFFFF 100%)";
765
770
  readonly section: "linear-gradient(150deg, #FFFFFF 0%, #F6F2EA 100%)";
766
771
  readonly og: "linear-gradient(145deg, #F6F2EA 55%, #FFFFFF 100%)";
772
+ readonly ogTalk: "linear-gradient(150deg, #F6F2EA 55%, #FFFFFF 100%)";
767
773
  };
768
774
  };
769
775
  readonly syntax: {
@@ -787,9 +793,9 @@ declare const tokens: {
787
793
  readonly properties: "color, background-color, border-color, fill, stroke";
788
794
  };
789
795
  readonly tagline: {
790
- readonly long: "Ayudo a equipos de ingeniería a escalar con criterio";
791
- readonly short: "Ayudo a equipos a escalar con criterio";
792
- readonly en: "Helping engineering teams scale with judgment";
796
+ readonly long: "Enseño a construir software con IA sin dejar de entender lo que hacemos.";
797
+ readonly short: "Technical Lead · Spec-Driven Development";
798
+ readonly en: "I teach how to build software with AI without losing sight of what we build.";
793
799
  };
794
800
  readonly naming: {
795
801
  readonly wordmark: "Eduardo Álvarez";
@@ -1,2 +1,2 @@
1
- export { tokens } from '../chunk-6QJQ6K7J.js';
2
- export { brand, colors, control, dark, fonts, gradient, light, limits, motion, naming, radius, series, shadow, size, spacing, syntax, tagline, typeScale } from '../chunk-5YWGOFDX.js';
1
+ export { tokens } from '../chunk-GP4MRY2B.js';
2
+ export { brand, colors, control, dark, fonts, gradient, light, limits, motion, naming, radius, series, shadow, size, spacing, syntax, tagline, typeScale } from '../chunk-QQ5WRFHC.js';
@@ -155,7 +155,8 @@
155
155
  /* --- gradients · dark mode (default) ----------------------------------- */
156
156
  --gradient-hero: linear-gradient(160deg, #091319 60%, #0D2129 100%);
157
157
  --gradient-section: linear-gradient(150deg, #10202B 0%, #0D2129 100%);
158
- --gradient-og: linear-gradient(145deg, #091319 55%, #0D2129 100%);
158
+ --gradient-og: linear-gradient(145deg, #091319 58%, #0E2A30 100%);
159
+ --gradient-og-talk: linear-gradient(150deg, #091319 55%, #0E2A30 100%);
159
160
  }
160
161
 
161
162
  /* --- color per mode, nestable ----------------------------------------------
@@ -193,7 +194,8 @@
193
194
 
194
195
  --gradient-hero: linear-gradient(160deg, #091319 60%, #0D2129 100%);
195
196
  --gradient-section: linear-gradient(150deg, #10202B 0%, #0D2129 100%);
196
- --gradient-og: linear-gradient(145deg, #091319 55%, #0D2129 100%);
197
+ --gradient-og: linear-gradient(145deg, #091319 58%, #0E2A30 100%);
198
+ --gradient-og-talk: linear-gradient(150deg, #091319 55%, #0E2A30 100%);
197
199
  }
198
200
 
199
201
  [data-theme='light'] {
@@ -227,6 +229,7 @@
227
229
  --gradient-hero: linear-gradient(160deg, #F6F2EA 60%, #FFFFFF 100%);
228
230
  --gradient-section: linear-gradient(150deg, #FFFFFF 0%, #F6F2EA 100%);
229
231
  --gradient-og: linear-gradient(145deg, #F6F2EA 55%, #FFFFFF 100%);
232
+ --gradient-og-talk: linear-gradient(150deg, #F6F2EA 55%, #FFFFFF 100%);
230
233
  }
231
234
 
232
235
  /* --- the system's two gradients, as utilities -------------------------------
package/llms.txt CHANGED
@@ -685,7 +685,7 @@ import { Text, Button, Badge, cn } from '@eduardoalvarez/arrecife';
685
685
  import type { TextProps } from '@eduardoalvarez/arrecife';
686
686
 
687
687
  <Text variant="eyebrow" tone="muted">charlas</Text>
688
- <Text as="h2" variant="h1">Escalar con criterio</Text>
688
+ <Text as="h2" variant="h1">Entender antes de construir</Text>
689
689
  <Text variant="body">Clamps itself to 68ch.</Text>
690
690
  <Text variant="ui" measure={false}>No clamp, for a narrow cell.</Text>
691
691
  ```
@@ -1071,6 +1071,8 @@ Source: `src/primitives/pagination.tsx`
1071
1071
  - No own props: it passes through those of the element or primitive it wraps.
1072
1072
 
1073
1073
  **PaginationLink**
1074
+ Mono, bordered, and the current page in solid biolume, as the document draws it: «paginación mono, página actual en bioluz sólido». The page is where you are, so it is the one control that carries the accent fill.
1075
+
1074
1076
  - Extends: `ComponentPropsWithoutRef<'a'>`
1075
1077
 
1076
1078
  | prop | type | req. | default | what it does |
@@ -1312,6 +1314,8 @@ Mount it ONCE, as high in the tree as possible. Two mounted `Toaster`s paint eve
1312
1314
  Source: `src/primitives/tooltip.tsx`
1313
1315
 
1314
1316
  **TooltipContent**
1317
+ Inverted on purpose: the document draws it «espuma sobre oscuro, texto casco 13px/500 — se invierte a propósito para que destaque». `bg-text-primary` with `text-background` is that inversion in both modes: foam on the abyss page in dark, ink on paper in light. It is the one layer that does not sit on a surface token, which is exactly what makes it read as a layer.
1318
+
1315
1319
  - No own props: it passes through those of the element or primitive it wraps.
1316
1320
 
1317
1321
  **TooltipProvider**
@@ -1394,7 +1398,7 @@ The byline at the foot of the article: 52px avatar, 15/500 name and the role in
1394
1398
 
1395
1399
  Source: `src/components/blockquote/index.tsx`
1396
1400
 
1397
- The side bar is `accent`, the interactive color, because a quotation is somebody else's voice entering the text. It carries no decorative quote marks: the system's glyphs are SVG, and an ornamental quote adds nothing the border and the indent do not already say.
1401
+ The side bar is `warm`, 3px, and the text is italic, as the document draws it: «cita con borde arena 3px, cursiva, sin fondo». Sand is the human accent — quotes, categories, conversion — and biolume is the interactive one; a quote in biolume read as a link that could not be clicked. It carries no decorative quote marks: the border and the italic already say it is somebody's voice.
1398
1402
 
1399
1403
  - Extends: `Omit<ComponentPropsWithoutRef<'blockquote'>, 'cite'>`
1400
1404
 
@@ -1575,7 +1579,7 @@ Source: `src/components/newsletter-form/index.tsx`
1575
1579
  | `description` | `ReactNode` | | | |
1576
1580
  | `disclaimer` | `ReactNode` | | | The small print. It is the «sin spam», which is why it accepts a face. |
1577
1581
  | `errorMessage` | `ReactNode` | | `No se pudo suscribir ese correo. Revísalo y vuelve a intentar.` | |
1578
- | `expression` | `"annoyed" \| "confused" \| "hearts" \| "laughing" \| "shades" \| "waiting" \| "wink"` | | | |
1582
+ | `expression` | `"annoyed" \| "confused" \| "hearts" \| "laughing" \| "shades" \| "waiting" \| "wink"` | | | The face beside the disclaimer. It is dropped when `aside` is set: the manual allows one mascot per piece («Dos mascotas en la misma pieza. Compiten entre sí y ninguna gana»), and the aside is the illustration. |
1579
1583
  | `fieldErrors` | `{ name?: ReactNode; email?: ReactNode; }` | | | A message under one specific field, instead of the single alert. |
1580
1584
  | `fieldLabel` | `string` | | `Correo electrónico` | |
1581
1585
  | `nameField` | `boolean` | | `false` | Adds the name field ahead of the email one. |
@@ -1584,11 +1588,11 @@ Source: `src/components/newsletter-form/index.tsx`
1584
1588
  | `namePlaceholder` | `string` | | `Cómo te llamas` | |
1585
1589
  | `onFieldChange` | `(field: "email" \| "name", value: string) => void` | | | Fires when either field changes. It is where the project clears its error. |
1586
1590
  | `onSubmitEmail` | `(email: string, name?: string \| undefined) => void` | | | Fires with the email already read from the field, and with the name if that field is enabled. |
1587
- | `placeholder` | `string` | | `tu@email.dev` | |
1591
+ | `placeholder` | `string` | | `tu@correo.dev` | |
1588
1592
  | `resetOnSuccess` | `boolean` | | `true` | Empties the fields after a successful subscription. On by default. |
1589
1593
  | `state` | `"success" \| "error" \| "idle" \| "sending"` | | `idle` | |
1590
1594
  | `submitLabel` | `string` | | `Suscribirme` | |
1591
- | `successMessage` | `ReactNode` | | `Ya estás dentro. Te llega un correo cada dos semanas, y nada más.` | |
1595
+ | `successMessage` | `ReactNode` | | `Ya estás dentro. Te llega un correo al mes, y nada más.` | |
1592
1596
  | `title` | `ReactNode` | yes | | |
1593
1597
 
1594
1598
  ### PageHeader
@@ -1638,6 +1642,7 @@ A large metric: the number in the `stat` scale and its name underneath.
1638
1642
  | `icon` | `ReactNode` | | | Glyph in a tinted circle, in the corner opposite the title. At 1em, and it inherits `currentColor` from the badge, so it takes the tone without being tinted separately. |
1639
1643
  | `label` | `ReactNode` | yes | | What is being counted. It goes in mono small caps. |
1640
1644
  | `progress` | `number` | | | With `progress`, the metric reads as progress and adds the bar. |
1645
+ | `progressLabel` | `string` | | | The bar's accessible name. It defaults to `label` when `label` is a string; a `label` that is markup has to spell it here, or the bar would announce «[object Object]: 38%». |
1641
1646
  | `spark` | `ReactNode` | | | The number's shape over time, under it. A `ReactNode` and not a data prop: a sparkline needs a charting library, and this component lives in the barrel that four projects install. The one project that draws them passes its own, exactly like `icon`. |
1642
1647
  | `tone` | `"neutral" \| "alert" \| "achievement"` | | `neutral` | `alert` ONLY when the number is the problem, and `achievement` when it is the opposite — the diplomas issued, the modules finished. The two paint the same sand today and they are still two names: a system that names by meaning cannot make «this is bad» the only way to say «this stands out». See `docs/decisions/` § 28. |
1643
1648
  | `value` | `ReactNode` | yes | | The number, already formatted. The library imposes no locale. |
@@ -2036,7 +2041,7 @@ Types (10): `AreaChartProps`, `BarChartProps`, `ChartContainerProps`, `ChartDatu
2036
2041
  | `defaultTemplate` | `(data?: DefaultData): SatoriNode` | Default · the document's declared exception. |
2037
2042
  | `OG` | `{ readonly width: 1200; readonly height: 630; readonly margin: 64; readonly mascot: 430; readonly signatureFin: 34; readonly mascotReserve: 560; }` | The canvas and the grid. These are the production measurements. |
2038
2043
  | `plantillaBase` | `(options: { mode: "dark" \| "light"; background: string; eyebrow: { text: string; color: string; }; title: string; bajada?: string \| undefined; signature: string; firmaColor: string; base: string; mascot?: SatoriNode \| ... 1 more ... \| undefined; mascotaIzquierda?: boolean \| undefined; tinta: string; tintaSecundaria: string; }): SatoriNode` | |
2039
- | `talkTemplate` | `(data: TalkData): SatoriNode` | Talk · eyebrow in biolume with the event and year, pose bleeding off the corner. |
2044
+ | `talkTemplate` | `(data: TalkData): SatoriNode` | Talk · 150° gradient, eyebrow in biolume with the event and year, pose bleeding off the corner. |
2040
2045
 
2041
2046
  Types (6): `ArticleData`, `BaseData`, `CourseData`, `DefaultData`, `SatoriNode`, `TalkData`.
2042
2047
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eduardoalvarez/arrecife",
3
- "version": "0.12.2",
3
+ "version": "0.12.3",
4
4
  "description": "The component library of Eduardo Álvarez’s visual identity",
5
5
  "license": "MIT",
6
6
  "author": "Eduardo Esteban Álvarez Castañeda <soy@eduardoalvarez.dev>",