@eduardoalvarez/arrecife 0.11.0 → 0.12.1

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 (42) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +34 -14
  3. package/dist/brand/index.cjs +2 -2
  4. package/dist/brand/index.d.cts +1 -1
  5. package/dist/brand/index.d.ts +1 -1
  6. package/dist/brand/index.js +3 -3
  7. package/dist/chart/index.cjs +2 -2
  8. package/dist/chart/index.d.cts +3 -3
  9. package/dist/chart/index.d.ts +3 -3
  10. package/dist/chart/index.js +3 -3
  11. package/dist/{chunk-FGFNK72B.js → chunk-5YWGOFDX.js} +17 -4
  12. package/dist/{chunk-5A5GH2PF.js → chunk-6QJQ6K7J.js} +1 -1
  13. package/dist/{chunk-TRPBID2W.js → chunk-BFYNBIVJ.js} +1 -1
  14. package/dist/{chunk-RKGKO2TW.js → chunk-BRDTB44R.js} +2 -2
  15. package/dist/{chunk-XXDATT3A.js → chunk-FF33ARRA.js} +1 -1
  16. package/dist/{chunk-FAAGZG7A.js → chunk-TMUGT3Y3.js} +1 -1
  17. package/dist/{chunk-6IGD5REB.js → chunk-W75O3Z77.js} +1 -1
  18. package/dist/{chunk-ZSCSKCTY.js → chunk-WU66TPJT.js} +1 -1
  19. package/dist/form/index.cjs +2 -2
  20. package/dist/form/index.js +4 -4
  21. package/dist/icons/index.cjs +2 -2
  22. package/dist/icons/index.d.cts +2 -2
  23. package/dist/icons/index.d.ts +2 -2
  24. package/dist/icons/index.js +3 -3
  25. package/dist/index.cjs +86 -18
  26. package/dist/index.d.cts +31 -16
  27. package/dist/index.d.ts +31 -16
  28. package/dist/index.js +83 -28
  29. package/dist/og/index.cjs +1 -2
  30. package/dist/og/index.js +1 -1
  31. package/dist/shiki/index.js +1 -1
  32. package/dist/tokens/index.cjs +17 -4
  33. package/dist/tokens/index.d.cts +20 -5
  34. package/dist/tokens/index.d.ts +20 -5
  35. package/dist/tokens/index.js +2 -2
  36. package/dist/tokens/theme.css +20 -3
  37. package/dist/variants/index.cjs +1 -1
  38. package/dist/variants/index.d.cts +2 -2
  39. package/dist/variants/index.d.ts +2 -2
  40. package/dist/variants/index.js +1 -1
  41. package/llms.txt +39 -13
  42. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.12.1](https://github.com/Proskynete/arrecife/compare/v0.12.0...v0.12.1) (2026-09-17)
4
+
5
+
6
+ ### 🐛 Correcciones
7
+
8
+ * **components:** the footer signature is a column, so the credit stops pushing the icons ([6760744](https://github.com/Proskynete/arrecife/commit/67607443882b65fae8c7166554075e0ca7b9fe10))
9
+
10
+
11
+ ### 📚 Documentación
12
+
13
+ * § 64, the signature is a column of its own ([6be8d1e](https://github.com/Proskynete/arrecife/commit/6be8d1e6cfc8a04bc3c999f672da3cb0d896f4d7))
14
+
15
+ ## [0.12.0](https://github.com/Proskynete/arrecife/compare/v0.11.0...v0.12.0) (2026-09-12)
16
+
17
+
18
+ ### 🚀 Novedades
19
+
20
+ * **components:** the footer can credit the library, and it is off by default ([9b80bd8](https://github.com/Proskynete/arrecife/commit/9b80bd80dc2bc1d4637a132e3b3b9dfbc254f653))
21
+ * **storybook:** the site wears the projects' mark and prints its version ([4c36b94](https://github.com/Proskynete/arrecife/commit/4c36b94d31d7353982eaa58ab75da2b309d972ef))
22
+
23
+
24
+ ### 🐛 Correcciones
25
+
26
+ * **storybook:** the docs page stops showing the first story twice ([66f0016](https://github.com/Proskynete/arrecife/commit/66f00163ee6b1f5feb111022762928db112b709e))
27
+ * **tokens:** emit the whole token set, so a var() read from JS resolves ([68836c8](https://github.com/Proskynete/arrecife/commit/68836c861a6a80d74bd6d23c279bfc05978626dc))
28
+
29
+
30
+ ### 📚 Documentación
31
+
32
+ * one file per decision, so a reference stops carrying a version ([1deda8e](https://github.com/Proskynete/arrecife/commit/1deda8e3f09585856741e23bceebf5d18e5b5336))
33
+ * **readme:** [@theme](https://github.com/theme) static, builtWith, and how a decision is cited ([ded6f2c](https://github.com/Proskynete/arrecife/commit/ded6f2ca6cc32c4a6746ad66417afa29f66b881d))
34
+ * three decisions, and two of them are about what the library says of itself ([c52c89f](https://github.com/Proskynete/arrecife/commit/c52c89f0507d99bb3886d412e91fc11922debcd4))
35
+
3
36
  ## [0.11.0](https://github.com/Proskynete/arrecife/compare/v0.10.0...v0.11.0) (2026-09-11)
4
37
 
5
38
 
package/README.md CHANGED
@@ -16,7 +16,10 @@ in a project with a `#E05252` that this README has declared wrong for months, an
16
16
  nobody saw it because the document was not greppable from the code.
17
17
 
18
18
  `docs/decisions/` is the other half: the points where the code and the document
19
- do not say the same thing, each with its resolution and its reason.
19
+ do not say the same thing, each with its resolution and its reason. One file per
20
+ decision, named for its number — `045-signature-halo.md` — so a «§ 45» written
21
+ in a comment, a commit or a PR resolves by sorting the folder, and no reference
22
+ has to carry a version.
20
23
 
21
24
  ## The two documents for agents
22
25
 
@@ -52,6 +55,16 @@ One source, `src/tokens/tokens.ts`. One generated output,
52
55
  `scripts/build-tokens.mjs`; it is not edited by hand and it is regenerated on
53
56
  every build.
54
57
 
58
+ The block is `@theme static`, so **every token reaches `:root` whether or not a
59
+ class asks for it** — you can read any of them with `var(--color-…)` from your
60
+ own JavaScript or an inline style and it will be there. That is one word and it
61
+ is a bug fix: Tailwind v4 emits a theme variable only when some generated
62
+ utility uses one, and the four `--color-series-*` are read by `seriesColor()`
63
+ through `var()` and requested by no class anywhere, so they were being dropped
64
+ as unused and the charts drew black on a dark page with nothing erroring. It
65
+ costs +234 B gzipped for a project using the system's whole vocabulary, and the
66
+ ceiling is the token set. See `docs/decisions/` § 61.
67
+
55
68
  Phase 0 decision: **v4 only**. The portfolio (`eduardoalvarez.dev`) migrates from
56
69
  Tailwind v3 to v4 before consuming Arrecife. If that migration slips, publishing
57
70
  the v3 preset again is one more emitter in `build-tokens.mjs` reading the same
@@ -404,7 +417,7 @@ now draws Phosphor through `astro-icon` and its own docstring lists the divergen
404
417
  «every icon on the page — the six in the cards and the four here — is then one set
405
418
  at one weight». `eduardoalvarez.dev` did the same in `site-footer.tsx`. Two
406
419
  consumers walking away from a subpath built for them is the library being out of
407
- step, not the consumers. See `docs/decisions/0.10.md` § 51.
420
+ step, not the consumers. See `docs/decisions/` § 51.
408
421
 
409
422
  **In a Next Server Component, take the glyph from `@phosphor-icons/react/ssr`.**
410
423
  `./icons` carries no `"use client"` on purpose, so an icon renders on the server
@@ -456,7 +469,7 @@ stroke` story shows the bars so the claim can be checked instead of believed.
456
469
  `glyphs.tsx` drew at 0.109em — three quarters heavier than both — and 0.7.0
457
470
  measured it, said so and left it alone, because aligning it restyles every
458
471
  primitive in the library. 0.10.0 is that change: the file is gone and there is
459
- one line in the system. See `docs/decisions/0.10.md` § 51.
472
+ one line in the system. See `docs/decisions/` § 51.
460
473
 
461
474
  **The weight is an axis with three values, and `tone` is how you name them.**
462
475
  `weight` is not a prop: Phosphor ships six and this system reads three, because
@@ -474,7 +487,7 @@ one channel WCAG 1.4.1 says may not carry meaning** — the fill is the second
474
487
  channel, and it is the one that survives a forced-colours mode where the biolume
475
488
  does not. `quiet` is the opposite problem: in a metadata row the icon is not the
476
489
  point of the line, and at `regular` it draws as heavy as the date beside it.
477
- `docs/decisions/0.7.md` § 35 has the rest.
490
+ `docs/decisions/` § 35 has the rest.
478
491
 
479
492
  `@phosphor-icons/react` is an **optional** peer dependency on its own subpath, by
480
493
  the same rule as `./form` and `./chart`: two of the five projects use no icons and
@@ -586,12 +599,19 @@ collision is deliberate: what they replace is not an import, it is sixty lines o
586
599
  composition — a `linearGradient` with a hardcoded id, a `CartesianGrid
587
600
  vertical={false}`, two axes with the line and the tick off, a `type="natural"`
588
601
  and a `strokeWidth` — which `cursos` wrote four times, once per chart. None of
589
- that is a decision the project made. See `docs/decisions/0.8.md` § 43.
602
+ that is a decision the project made. See `docs/decisions/` § 43.
590
603
 
591
604
  A chart of a quantity with a ceiling passes it: `valueMax={100}` on a percentage.
592
605
  Without it the value axis ends at the largest datum, and a horizontal ranking —
593
606
  whose value axis is hidden — draws a course watched to 40 % as a full bar. See
594
- `docs/decisions/0.11.md` § 58.
607
+ `docs/decisions/` § 58.
608
+
609
+ `seriesColor(i)` returns `var(--color-series-N)` and not a hexadecimal, so the
610
+ palette follows the mode instead of freezing to whichever one was live when the
611
+ chart mounted. **Do not add a fallback to it**: the variable is always in
612
+ `:root`, because the token block is `@theme static` for exactly this reason. On a
613
+ version before that fix the `var()` resolved to nothing and the bars came out
614
+ black — see `docs/decisions/` § 61.
595
615
 
596
616
  `check:exports` verifies that the five portable ones — `./tokens`, `./theme`,
597
617
  `./variants`, `./og` and `./shiki` — bring no React into the published `dist/`,
@@ -662,7 +682,7 @@ cannot see: axe does not evaluate text over a gradient, so both modes passed it.
662
682
 
663
683
  The light blocks now sweep between `background` and `surface` and never touch
664
684
  `surfaceRaised`, so the darkest point of either one is the page itself — a token
665
- that passes on the page passes at every point of the sweep. `docs/decisions/0.6.md` § 9 has the measurements, including the two other things the first composition
685
+ that passes on the page passes at every point of the sweep. `docs/decisions/` § 9 has the measurements, including the two other things the first composition
666
686
  got wrong.
667
687
 
668
688
  ### The third correction: a semantic color is not a text color over its own tint
@@ -861,7 +881,7 @@ run summary.
861
881
  `SidebarNav` was on that list and came off it in 0.8.0. It met the rule below
862
882
  on the identity half and never on the consumer half: the two admin projects it
863
883
  was built for each wrote their own and never imported it. See
864
- `docs/decisions/0.8.md` § 48.
884
+ `docs/decisions/` § 48.
865
885
 
866
886
  The criterion for deciding what gets in is still the same: **it encodes an
867
887
  identity rule, it has two or more consumers, and it drags in no project
@@ -902,7 +922,7 @@ about as library pieces. They get in anyway: the CLI aesthetic — the bar's
902
922
  optional peer on `./icons` so the set a project chooses is drawn at the system's
903
923
  weight; and 0.10.0 deleted `glyphs.tsx` and `./social` and made Phosphor
904
924
  required, because a library drawing in three hands cannot say which one is
905
- right. See «The social icons are yours too» above and `docs/decisions/0.10.md`
925
+ right. See «The social icons are yours too» above and `docs/decisions/`
906
926
  § 51. What survives verbatim is the part that was always the real rule: the
907
927
  icons are the project's, the LINE is the system's. The rest of this bullet is
908
928
  the 0.7.0 argument, kept because it is what the reversal was measured against:
@@ -939,7 +959,7 @@ about as library pieces. They get in anyway: the CLI aesthetic — the bar's
939
959
  than width failed axe on `scrollable-region-focusable` immediately. It is
940
960
  unconditional, because whether a table overflows depends on the viewport and
941
961
  the only alternative is a ResizeObserver on every table in the system. See
942
- `docs/decisions/0.8.md` § 39.
962
+ `docs/decisions/` § 39.
943
963
 
944
964
  ### The syntax palette
945
965
 
@@ -1056,7 +1076,7 @@ On a site that switches theme, `background="auto"` renders both and the `light:`
1056
1076
  variant shows the one that reads, so no call site has to know which theme is on.
1057
1077
  A background that does not follow the theme — a dark panel on a light page —
1058
1078
  still names itself: `auto` reads the page, not the panel. See
1059
- `docs/decisions/0.11.md` § 60.
1079
+ `docs/decisions/` § 60.
1060
1080
 
1061
1081
  **Rule 5 as API.** The wordmark comes from `naming.wordmark` and always reads
1062
1082
  «Eduardo Álvarez». There is no prop that changes that text, and Tiburoncín never
@@ -1133,7 +1153,7 @@ spatial continuity. A sixth lands on that or it does not exist.
1133
1153
  The bar is 2px and not a block because a halo needs something thin to radiate
1134
1154
  from, the colour is `var(--color-accent)` so it follows the mode, and
1135
1155
  `motion-safe` is the one thing not copied from `cursos` — whose span animates
1136
- regardless of the setting. See `docs/decisions/0.8.md` § 45, and § 23 for the entry
1156
+ regardless of the setting. See `docs/decisions/` § 45, and § 23 for the entry
1137
1157
  it reverses.
1138
1158
 
1139
1159
  ### The second motion exception
@@ -1180,7 +1200,7 @@ text, and `surfaceRaised` is where a toolbar lives.
1180
1200
  `destructiveOutline` fills on hover, and that is a declared exception to
1181
1201
  «secondary is never filled» — a destructive that looks identical to a secondary
1182
1202
  until you read it is the problem the variant exists to fix. See
1183
- `docs/decisions/0.6.md` § 21.
1203
+ `docs/decisions/` § 21.
1184
1204
 
1185
1205
  ### `icon-sm`, for the one admin app
1186
1206
 
@@ -1191,7 +1211,7 @@ three actions per table row, and at 42 the row grows with them.
1191
1211
  `size="icon-sm"` is 32×32, and it is 32 and not the 28 that project actually had:
1192
1212
  32 is `sm`'s height, so a dense icon button lines up with a small text button and
1193
1213
  a toolbar mixing the two stays on one baseline. It does not replace `icon` — a
1194
- page's primary action stays at 42. See `docs/decisions/0.6.md` § 22.
1214
+ page's primary action stays at 42. See `docs/decisions/` § 22.
1195
1215
 
1196
1216
  ### The theme script, and the mode a site already decided
1197
1217
 
@@ -75,7 +75,7 @@ var typeScale = {
75
75
  * (plankton 5.57:1 over abyss), which is the part that is not negotiable.
76
76
  *
77
77
  * At 13 the three badge families grew past the size of a small button and
78
- * outweighed the title they accompany. See `docs/decisions/`.
78
+ * outweighed the title they accompany. See `docs/decisions/` § 10.
79
79
  */
80
80
  chip: { family: "mono", size: 11.5, lineHeight: 1.4, weight: 400 },
81
81
  /**
@@ -121,7 +121,7 @@ var control = {
121
121
  * baseline; 28 would have been a fifth height that matches nothing.
122
122
  *
123
123
  * It does not replace `icon`. A page's primary action stays at 42; this is for
124
- * a row of a table. See `docs/decisions/0.6.md` § 22.
124
+ * a row of a table. See `docs/decisions/` § 22.
125
125
  */
126
126
  iconSm: 32
127
127
  };
@@ -35,7 +35,7 @@ type IsotypeProps = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'alt'> & {
35
35
  * server does not know the theme, and a fin picked in JavaScript would be wrong
36
36
  * on the first paint half the time. `cursos` had written exactly this by hand
37
37
  * after a surface changed mode and its fin vanished — not looked wrong: vanished,
38
- * with no error and no gap in the layout. See `docs/decisions/0.11.md` § 60.
38
+ * with no error and no gap in the layout. See `docs/decisions/` § 60.
39
39
  *
40
40
  * Dark is the system default, so the foam fin is the one shown unless
41
41
  * `data-theme="light"` says otherwise, and the two-blue one hides everywhere
@@ -35,7 +35,7 @@ type IsotypeProps = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'alt'> & {
35
35
  * server does not know the theme, and a fin picked in JavaScript would be wrong
36
36
  * on the first paint half the time. `cursos` had written exactly this by hand
37
37
  * after a surface changed mode and its fin vanished — not looked wrong: vanished,
38
- * with no error and no gap in the layout. See `docs/decisions/0.11.md` § 60.
38
+ * with no error and no gap in the layout. See `docs/decisions/` § 60.
39
39
  *
40
40
  * Dark is the system default, so the foam fin is the one shown unless
41
41
  * `data-theme="light"` says otherwise, and the two-blue one hides everywhere
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- export { Isotype, Logo, Mascot, MascotFace } from '../chunk-RKGKO2TW.js';
3
- import '../chunk-FAAGZG7A.js';
2
+ export { Isotype, Logo, Mascot, MascotFace } from '../chunk-BRDTB44R.js';
3
+ import '../chunk-TMUGT3Y3.js';
4
4
  export { ASSETS_PATH, faceList, faceUsage, faces, fins, poseList, poses } from '../chunk-CKRSQPTX.js';
5
- import '../chunk-FGFNK72B.js';
5
+ import '../chunk-5YWGOFDX.js';
@@ -46,7 +46,7 @@ var typeScale = {
46
46
  * (plankton 5.57:1 over abyss), which is the part that is not negotiable.
47
47
  *
48
48
  * At 13 the three badge families grew past the size of a small button and
49
- * outweighed the title they accompany. See `docs/decisions/`.
49
+ * outweighed the title they accompany. See `docs/decisions/` § 10.
50
50
  */
51
51
  chip: { family: "mono", size: 11.5, lineHeight: 1.4, weight: 400 },
52
52
  /**
@@ -92,7 +92,7 @@ var control = {
92
92
  * baseline; 28 would have been a fifth height that matches nothing.
93
93
  *
94
94
  * It does not replace `icon`. A page's primary action stays at 42; this is for
95
- * a row of a table. See `docs/decisions/0.6.md` § 22.
95
+ * a row of a table. See `docs/decisions/` § 22.
96
96
  */
97
97
  iconSm: 32
98
98
  };
@@ -29,7 +29,7 @@ import { Legend, Tooltip } from 'recharts';
29
29
  * What IS published, since this version, are three CHART TYPES on top of that
30
30
  * chassis: `AreaChart`, `BarChart` and `LineChart`. They are not wrappers over
31
31
  * Recharts' components of the same name — they take `data`, `series` and `xKey`
32
- * and draw the whole thing. See `docs/decisions/0.8.md` § 43 for why the names
32
+ * and draw the whole thing. See `docs/decisions/` § 43 for why the names
33
33
  * collide on purpose.
34
34
  */
35
35
  /**
@@ -175,7 +175,7 @@ type SeriesChartProps = Omit<ChartContainerProps, 'children'> & {
175
175
  * `2026-07-15` repeated thirty times, overlapping into a grey band.
176
176
  *
177
177
  * The library imposes no format: a date key can be a day, a month or a course
178
- * name, and only the project knows which. See `docs/decisions/0.9.md` § 50.
178
+ * name, and only the project knows which. See `docs/decisions/` § 50.
179
179
  */
180
180
  xTickFormatter?: ((value: unknown) => string) | undefined;
181
181
  /**
@@ -200,7 +200,7 @@ type SeriesChartProps = Omit<ChartContainerProps, 'children'> & {
200
200
  * The bottom is always zero. A bar that does not start at zero is a
201
201
  * different lie, and this prop is not a way into it. It is a floor for the
202
202
  * top and not a clip either: a datum above it extends the axis instead of
203
- * running off the edge. See `docs/decisions/0.11.md` § 58.
203
+ * running off the edge. See `docs/decisions/` § 58.
204
204
  */
205
205
  valueMax?: number | undefined;
206
206
  /**
@@ -29,7 +29,7 @@ import { Legend, Tooltip } from 'recharts';
29
29
  * What IS published, since this version, are three CHART TYPES on top of that
30
30
  * chassis: `AreaChart`, `BarChart` and `LineChart`. They are not wrappers over
31
31
  * Recharts' components of the same name — they take `data`, `series` and `xKey`
32
- * and draw the whole thing. See `docs/decisions/0.8.md` § 43 for why the names
32
+ * and draw the whole thing. See `docs/decisions/` § 43 for why the names
33
33
  * collide on purpose.
34
34
  */
35
35
  /**
@@ -175,7 +175,7 @@ type SeriesChartProps = Omit<ChartContainerProps, 'children'> & {
175
175
  * `2026-07-15` repeated thirty times, overlapping into a grey band.
176
176
  *
177
177
  * The library imposes no format: a date key can be a day, a month or a course
178
- * name, and only the project knows which. See `docs/decisions/0.9.md` § 50.
178
+ * name, and only the project knows which. See `docs/decisions/` § 50.
179
179
  */
180
180
  xTickFormatter?: ((value: unknown) => string) | undefined;
181
181
  /**
@@ -200,7 +200,7 @@ type SeriesChartProps = Omit<ChartContainerProps, 'children'> & {
200
200
  * The bottom is always zero. A bar that does not start at zero is a
201
201
  * different lie, and this prop is not a way into it. It is a floor for the
202
202
  * top and not a clip either: a datum above it extends the axis instead of
203
- * running off the edge. See `docs/decisions/0.11.md` § 58.
203
+ * running off the edge. See `docs/decisions/` § 58.
204
204
  */
205
205
  valueMax?: number | undefined;
206
206
  /**
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { Text } from '../chunk-TRPBID2W.js';
2
+ import { Text } from '../chunk-BFYNBIVJ.js';
3
3
  import '../chunk-ODBFN44D.js';
4
- import { cn } from '../chunk-FAAGZG7A.js';
5
- import { radius } from '../chunk-FGFNK72B.js';
4
+ import { cn } from '../chunk-TMUGT3Y3.js';
5
+ import { radius } from '../chunk-5YWGOFDX.js';
6
6
  import { useId } from 'react';
7
7
  import { ResponsiveContainer, Tooltip, Legend, AreaChart as AreaChart$1, CartesianGrid, XAxis, YAxis, Area, BarChart as BarChart$1, Bar, LineChart as LineChart$1, Line } from 'recharts';
8
8
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -144,7 +144,7 @@ var typeScale = {
144
144
  * (plankton 5.57:1 over abyss), which is the part that is not negotiable.
145
145
  *
146
146
  * At 13 the three badge families grew past the size of a small button and
147
- * outweighed the title they accompany. See `docs/decisions/`.
147
+ * outweighed the title they accompany. See `docs/decisions/` § 10.
148
148
  */
149
149
  chip: { family: "mono", size: 11.5, lineHeight: 1.4, weight: 400 },
150
150
  /**
@@ -198,7 +198,7 @@ var control = {
198
198
  * baseline; 28 would have been a fifth height that matches nothing.
199
199
  *
200
200
  * It does not replace `icon`. A page's primary action stays at 42; this is for
201
- * a row of a table. See `docs/decisions/0.6.md` § 22.
201
+ * a row of a table. See `docs/decisions/` § 22.
202
202
  */
203
203
  iconSm: 32
204
204
  };
@@ -221,7 +221,7 @@ var size = {
221
221
  * together eat the top of the content area. 56 is what `cursos` had arrived at
222
222
  * on its own, and it is the same reasoning as `control.iconSm`: the one admin
223
223
  * app of the five is denser than the four reading sites. See
224
- * `docs/decisions/0.7.md` § 30.
224
+ * `docs/decisions/` § 30.
225
225
  */
226
226
  navCompact: 56,
227
227
  /**
@@ -294,7 +294,20 @@ var naming = {
294
294
  wordmark: "Eduardo \xC1lvarez",
295
295
  mascot: "Tiburonc\xEDn",
296
296
  /** The domain, for the footer CLI signature: `$ cd ~/eduardoalvarez.dev/2026`. */
297
- domain: "eduardoalvarez.dev"
297
+ domain: "eduardoalvarez.dev",
298
+ /** The library's own name, for a footer that credits it. */
299
+ library: "Arrecife",
300
+ /**
301
+ * Where the library is published, for `Footer builtWith`.
302
+ *
303
+ * It is here and not written into the component for the reason the domain is:
304
+ * one string, five projects. It is the same URL as `homepage` in
305
+ * `package.json` and it cannot be derived from it — this file imports nothing
306
+ * — so `check:exports` compares the two on every build. Without that, moving
307
+ * the Storybook would update what npm prints and leave five production
308
+ * footers linking at the old address.
309
+ */
310
+ libraryUrl: "https://arrecife.eduardoalvarez.dev"
298
311
  };
299
312
 
300
313
  export { brand, colors, control, dark, fonts, gradient, light, limits, motion, naming, radius, series, shadow, size, spacing, syntax, tagline, typeScale };
@@ -1,4 +1,4 @@
1
- import { naming, tagline, motion, shadow, series, syntax, gradient, size, spacing, control, radius, limits, typeScale, fonts, brand, colors } from './chunk-FGFNK72B.js';
1
+ import { naming, tagline, motion, shadow, series, syntax, gradient, size, spacing, control, radius, limits, typeScale, fonts, brand, colors } from './chunk-5YWGOFDX.js';
2
2
 
3
3
  // src/tokens/index.ts
4
4
  var tokens = {
@@ -1,5 +1,5 @@
1
1
  import { text } from './chunk-ODBFN44D.js';
2
- import { cn } from './chunk-FAAGZG7A.js';
2
+ import { cn } from './chunk-TMUGT3Y3.js';
3
3
  import { Slot } from '@radix-ui/react-slot';
4
4
  import 'class-variance-authority';
5
5
  import { jsx } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
- import { cn } from './chunk-FAAGZG7A.js';
1
+ import { cn } from './chunk-TMUGT3Y3.js';
2
2
  import { fins, ASSETS_PATH, poses, faces } from './chunk-CKRSQPTX.js';
3
- import { naming, tagline } from './chunk-FGFNK72B.js';
3
+ import { naming, tagline } from './chunk-5YWGOFDX.js';
4
4
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
5
5
 
6
6
  function Isotype({
@@ -19,7 +19,7 @@ var button = cva(
19
19
  ],
20
20
  // The one control whose focus ring is not biolume. It is the system's
21
21
  // only sand fill, and a biolume ring three pixels off a sand button puts
22
- // both of the brand's accents in the same glance. See `docs/decisions/0.7.md` § 37.
22
+ // both of the brand's accents in the same glance. See `docs/decisions/` § 37.
23
23
  conversion: "bg-warm text-warm-on hover:bg-warm-hover focus-ring-warm",
24
24
  secondary: [
25
25
  "border-hairline-hover border bg-transparent text-text-primary",
@@ -1,4 +1,4 @@
1
- import { spacing, control, radius, typeScale } from './chunk-FGFNK72B.js';
1
+ import { spacing, control, radius, typeScale } from './chunk-5YWGOFDX.js';
2
2
  import { clsx } from 'clsx';
3
3
  import { extendTailwindMerge } from 'tailwind-merge';
4
4
 
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-FAAGZG7A.js';
1
+ import { cn } from './chunk-TMUGT3Y3.js';
2
2
  import * as LabelPrimitive from '@radix-ui/react-label';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-FAAGZG7A.js';
1
+ import { cn } from './chunk-TMUGT3Y3.js';
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
 
4
4
  var ICON_WEIGHT = "regular";
@@ -67,7 +67,7 @@ var typeScale = {
67
67
  * (plankton 5.57:1 over abyss), which is the part that is not negotiable.
68
68
  *
69
69
  * At 13 the three badge families grew past the size of a small button and
70
- * outweighed the title they accompany. See `docs/decisions/`.
70
+ * outweighed the title they accompany. See `docs/decisions/` § 10.
71
71
  */
72
72
  chip: { family: "mono", size: 11.5, lineHeight: 1.4, weight: 400 },
73
73
  /**
@@ -113,7 +113,7 @@ var control = {
113
113
  * baseline; 28 would have been a fifth height that matches nothing.
114
114
  *
115
115
  * It does not replace `icon`. A page's primary action stays at 42; this is for
116
- * a row of a table. See `docs/decisions/0.6.md` § 22.
116
+ * a row of a table. See `docs/decisions/` § 22.
117
117
  */
118
118
  iconSm: 32
119
119
  };
@@ -1,9 +1,9 @@
1
1
  'use client';
2
- import { Label } from '../chunk-6IGD5REB.js';
3
- import { Text } from '../chunk-TRPBID2W.js';
2
+ import { Label } from '../chunk-W75O3Z77.js';
3
+ import { Text } from '../chunk-BFYNBIVJ.js';
4
4
  import '../chunk-ODBFN44D.js';
5
- import { cn } from '../chunk-FAAGZG7A.js';
6
- import '../chunk-FGFNK72B.js';
5
+ import { cn } from '../chunk-TMUGT3Y3.js';
6
+ import '../chunk-5YWGOFDX.js';
7
7
  import { createContext, useContext, useId } from 'react';
8
8
  import { FormProvider, Controller, useFormContext, useFormState } from 'react-hook-form';
9
9
  import { Slot } from '@radix-ui/react-slot';
@@ -41,7 +41,7 @@ var typeScale = {
41
41
  * (plankton 5.57:1 over abyss), which is the part that is not negotiable.
42
42
  *
43
43
  * At 13 the three badge families grew past the size of a small button and
44
- * outweighed the title they accompany. See `docs/decisions/`.
44
+ * outweighed the title they accompany. See `docs/decisions/` § 10.
45
45
  */
46
46
  chip: { family: "mono", size: 11.5, lineHeight: 1.4, weight: 400 },
47
47
  /**
@@ -87,7 +87,7 @@ var control = {
87
87
  * baseline; 28 would have been a fifth height that matches nothing.
88
88
  *
89
89
  * It does not replace `icon`. A page's primary action stays at 42; this is for
90
- * a row of a table. See `docs/decisions/0.6.md` § 22.
90
+ * a row of a table. See `docs/decisions/` § 22.
91
91
  */
92
92
  iconSm: 32
93
93
  };
@@ -43,7 +43,7 @@ import { IconWeight, IconProps as IconProps$1, Icon as Icon$1 } from '@phosphor-
43
43
  * THE WEIGHT IS AN AXIS, AND IT IS THE ONLY ONE AN ICON HAS. There are three
44
44
  * roles and `tone` is how you name them; the weights themselves are not a prop,
45
45
  * because Phosphor's other three — `thin`, `bold`, `duotone` — say nothing this
46
- * system means. See `TONE_WEIGHT` below and `docs/decisions/0.7.md` § 35.
46
+ * system means. See `TONE_WEIGHT` below and `docs/decisions/` § 35.
47
47
  *
48
48
  * IT IS NOW THE ONLY LINE THE LIBRARY DRAWS, which is what 0.10.0 changed.
49
49
  * `lib/glyphs.tsx` drew at 1.75 on a 16 grid — 0.109em, three quarters heavier
@@ -51,7 +51,7 @@ import { IconWeight, IconProps as IconProps$1, Icon as Icon$1 } from '@phosphor-
51
51
  * third hand. 0.7.0 left both alone because reconciling them restyles every
52
52
  * primitive in the library; that is exactly what 0.10.0 did, and both files are
53
53
  * gone. There is one description of what a line looks like here, and it is
54
- * Phosphor's. See `docs/decisions/0.10.md` § 51.
54
+ * Phosphor's. See `docs/decisions/` § 51.
55
55
  *
56
56
  * IN NEXT, IMPORT FROM `@phosphor-icons/react/ssr` inside a Server Component.
57
57
  * Phosphor's default build reads `IconContext` through `useContext`, and a hook
@@ -43,7 +43,7 @@ import { IconWeight, IconProps as IconProps$1, Icon as Icon$1 } from '@phosphor-
43
43
  * THE WEIGHT IS AN AXIS, AND IT IS THE ONLY ONE AN ICON HAS. There are three
44
44
  * roles and `tone` is how you name them; the weights themselves are not a prop,
45
45
  * because Phosphor's other three — `thin`, `bold`, `duotone` — say nothing this
46
- * system means. See `TONE_WEIGHT` below and `docs/decisions/0.7.md` § 35.
46
+ * system means. See `TONE_WEIGHT` below and `docs/decisions/` § 35.
47
47
  *
48
48
  * IT IS NOW THE ONLY LINE THE LIBRARY DRAWS, which is what 0.10.0 changed.
49
49
  * `lib/glyphs.tsx` drew at 1.75 on a 16 grid — 0.109em, three quarters heavier
@@ -51,7 +51,7 @@ import { IconWeight, IconProps as IconProps$1, Icon as Icon$1 } from '@phosphor-
51
51
  * third hand. 0.7.0 left both alone because reconciling them restyles every
52
52
  * primitive in the library; that is exactly what 0.10.0 did, and both files are
53
53
  * gone. There is one description of what a line looks like here, and it is
54
- * Phosphor's. See `docs/decisions/0.10.md` § 51.
54
+ * Phosphor's. See `docs/decisions/` § 51.
55
55
  *
56
56
  * IN NEXT, IMPORT FROM `@phosphor-icons/react/ssr` inside a Server Component.
57
57
  * Phosphor's default build reads `IconContext` through `useContext`, and a hook
@@ -1,3 +1,3 @@
1
- export { ICON_WEIGHT, Icon, TONE_WEIGHT } from '../chunk-ZSCSKCTY.js';
2
- import '../chunk-FAAGZG7A.js';
3
- import '../chunk-FGFNK72B.js';
1
+ export { ICON_WEIGHT, Icon, TONE_WEIGHT } from '../chunk-WU66TPJT.js';
2
+ import '../chunk-TMUGT3Y3.js';
3
+ import '../chunk-5YWGOFDX.js';