@vibes.diy/prompts 12.2.6 → 12.2.7

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.
@@ -8,7 +8,7 @@ export interface Flourish {
8
8
  }
9
9
  export declare const LAYOUT_ARCHETYPES: readonly LayoutArchetype[];
10
10
  export declare const FLOURISHES: readonly Flourish[];
11
- export declare const FLOURISH_DRAW_COUNT = 2;
11
+ export declare const FLOURISH_DRAW_COUNT = 3;
12
12
  export interface GenerationVariety {
13
13
  readonly archetype: string;
14
14
  readonly flourishes: string[];
@@ -23,30 +23,58 @@ export const LAYOUT_ARCHETYPES = [
23
23
  export const FLOURISHES = [
24
24
  {
25
25
  id: "hover-lift",
26
- guidance: "Interactive surfaces (buttons, tappable rows, cards) rest at `shadow-[var(--vibes-shadow)]` and rise on pointer hover to `hover:shadow-[var(--vibes-shadow-lg)]`, with an upward translate of `var(--border-width)`, returning on leave. Hover-only decoration: every affordance stays complete and reachable with no pointer at all.",
26
+ guidance: "Interactive surfaces buttons, tappable rows, cards rest at `shadow-[var(--vibes-shadow)]` and POP FORWARD on pointer hover: `hover:shadow-[var(--vibes-shadow-lg)]` plus an upward translate of `var(--border-width)` on both axes, snapping back on leave. Snap, don't drift — the whole move resolves in well under 200ms. Hover is decoration only: every affordance stays complete and reachable with no pointer in the room at all.",
27
27
  },
28
28
  {
29
29
  id: "press-slam",
30
- guidance: "Interactive elements rest at `shadow-[var(--vibes-shadow)]` and answer `:active` by seating themselves: `active:shadow-none` plus a translate of `var(--border-width)` on both axes, resolving in well under 150ms. Same generic affordances as any other press state.",
30
+ guidance: "Interactive elements rest at `shadow-[var(--vibes-shadow)]` and answer `:active` by SLAMMING back down into the page: `active:shadow-none` plus a translate of `var(--border-width)` on both axes. Under 150ms, with no easing curve long enough to notice a press should feel like a key bottoming out, never like a fade.",
31
31
  },
32
32
  {
33
33
  id: "accent-rule",
34
- guidance: "Every section heading carries a short leading bar in `bg-[var(--accent)]`, its thickness from `var(--border-width)` and its length from `var(--spacing)`, sitting immediately before or beneath the heading text.",
34
+ guidance: "Every section heading is preceded by a short, blunt bar in `bg-[var(--accent)]` thickness from `var(--border-width)`, length from `var(--vibes-spacing)` sitting immediately before or beneath the heading text. Same bar, same place, every heading: a rule that wanders is noise, and once the others have one, the heading that doesn't looks broken.",
35
+ },
36
+ {
37
+ id: "signal-bar",
38
+ guidance: "Across the top edge of the app's most prominent surface — whatever the archetype actually built as its main block — lay a full-width bar split into FOUR equal segments, left to right: `bg-[var(--success)]`, `bg-[var(--warning)]`, `bg-[var(--error)]`, `bg-[var(--accent)]`, at `h-[calc(var(--border-width)*4)]` so it reads as a graphic band and not a hairline. Four segments, equal widths, that order, always. DON'T blend them into a gradient, DON'T recolour them to match content, and DON'T put a second one anywhere in the app — one bar is a signature, two is wallpaper.",
39
+ },
40
+ {
41
+ id: "signal-states",
42
+ guidance: "Status is carried by the four signal roles and by nothing else, identically everywhere in the app: `--success` for done/on/healthy, `--warning` for pending/needs-attention, `--error` for failed/destructive, `--accent` for informational or selected. Carry it as a MARK beside the words, never as a fill under them — a small solid square in `bg-[var(--success)]` at `size-[calc(var(--border-width)*4)]` immediately before the status word, or a leading edge on the whole item in `border-l-[length:var(--border-width)] border-[var(--error)]` — while the words themselves keep the app's ordinary text colour on its ordinary surface. DON'T invent a fifth status colour, DON'T spend a signal role on decoration, DON'T let one state wear two different colours in two different views, and DON'T set type on top of a signal fill: these are strong colours picked to be seen across a room, not backgrounds vetted to carry small text.",
43
+ },
44
+ {
45
+ id: "bold-stroke",
46
+ guidance: "Every surface that holds content — the outer container, each repeated item, every input — is outlined on all four sides with `border-[length:var(--border-width)] border-[var(--border)]` at full strength. A surface is either drawn or it isn't: no half-opacity edges, no soft fade standing in for a stroke, and never a background tint alone left to say where a thing ends.",
47
+ },
48
+ {
49
+ id: "slab-heading",
50
+ guidance: "Headings hit hard. Top-level headings take `font-[var(--font-family)]` at `font-[weight:var(--font-weight)]` with `tracking-[var(--letter-spacing)]`, set two Tailwind steps above body copy (`text-2xl` against `text-base`) and aligned flush to the left edge of their container; sub-headings sit one clear step down. Never two headings at the same weight in one view — a hierarchy the reader has to work out is not a hierarchy.",
51
+ },
52
+ {
53
+ id: "caps-label",
54
+ guidance: "Small labels standing on the page or on a plain surface — section eyebrows, column headers, table headings, field labels, metadata captions — are UPPERCASE, set with `tracking-[var(--letter-spacing-wide)]` in `text-[var(--text-secondary)]`, one Tailwind size below body copy. The CASE treatment carries into text sitting on a filled control (a button, a coloured chip), but the colour does not: that text keeps whatever foreground the control already gives it, because a fill was never vetted to carry type. Labels only, either way — body copy, headings and anything a person typed stay exactly as written. Shouting a paragraph is not a style.",
35
55
  },
36
56
  {
37
57
  id: "focus-halo",
38
- guidance: "Focusable controls take a visible `focus-visible` ring in `ring-[var(--primary)]` at `ring-[length:var(--border-width)]`, distinct from their resting border. Applies to every focusable control in the app, not a chosen few.",
58
+ guidance: "Focusable controls take a visible `focus-visible` ring in `ring-[var(--primary)]` at `ring-[length:var(--border-width)]`, clearly distinct from their resting border a keyboard gets the same clarity a pointer gets for free. EVERY focusable control, not a chosen few, and never `outline-none` without putting something back.",
59
+ },
60
+ {
61
+ id: "mono-numerals",
62
+ guidance: "Anything a reader compares against another value — counts, dates, times, durations, amounts, ids — is set in `font-[var(--font-family-mono)]` so digits stack in a column and the eye can scan down them. Prose keeps the body face. This is for data, not for atmosphere: don't monospace a sentence because it looks technical.",
39
63
  },
40
64
  {
41
65
  id: "item-stagger",
42
- guidance: "Items appearing in any repeated list or grid fade and rise into place with a short transition (<=200ms), staggered slightly by index, and settleno looping motion. Purely temporal, so it borrows no color or size at all.",
66
+ guidance: "Items entering any repeated list or grid fade and rise into place over a short transition (<=200ms), staggered slightly by index so the set arrives like a dealt hand rather than a dropped one then settle and stay still. Entry only: nothing loops, nothing pulses, nothing moves while someone is trying to read it.",
67
+ },
68
+ {
69
+ id: "quiet-metadata",
70
+ guidance: "Secondary information — timestamps, authorship, counts, source labels — sits in `text-[var(--text-secondary)]` one Tailwind size below body copy, on its own line beneath the thing it describes, never competing with the primary line for the same glance. The restraint is the effect: the primary line only reads as loud because everything around it agreed to be quiet.",
43
71
  },
44
72
  {
45
73
  id: "inset-divider",
46
- guidance: "Wherever sibling items stack vertically, separate them with a hairline in `border-[var(--border)]` at `var(--border-width)`, inset to the container's own horizontal padding rather than bleeding to the full edge.",
74
+ guidance: "Wherever sibling items stack vertically, separate them with a hairline in `border-[var(--border)]` at `var(--border-width)`, inset to the container's own horizontal padding rather than bleeding to the full edge. One divider BETWEEN items — never above the first, never below the last, and never a divider doing a job a gap could do.",
47
75
  },
48
76
  ];
49
- export const FLOURISH_DRAW_COUNT = 2;
77
+ export const FLOURISH_DRAW_COUNT = 3;
50
78
  function pickIndex(rnd, length) {
51
79
  const raw = Math.floor(rnd() * length);
52
80
  return raw >= length ? length - 1 : raw;
@@ -73,7 +101,7 @@ export function renderVarietySection(variety) {
73
101
  }
74
102
  if (flourishes.length > 0) {
75
103
  const bullets = flourishes.map((f) => `- **${f.id}** — ${f.guidance}`).join("\n");
76
- parts.push(`## Flourishes\n\nApply these — and no other decorative treatment — consistently everywhere their affordance occurs:\n\n${bullets}\n\nEvery flourish above is written in design tokens on purpose. Never swap a token for a literal color, shadow or size inside them: the owner restyles the app by changing tokens, and a literal buried in a hover or focus state survives that change invisibly.`);
104
+ parts.push(`## Flourishes\n\nApply these — and no other decorative treatment — everywhere their affordance occurs, with no exceptions and no half-measures. A flourish applied to three of five places doesn't read as restraint, it reads as a bug:\n\n${bullets}\n\nEvery flourish above is written in design tokens on purpose. Never swap a token for a literal color, shadow or size inside them: the owner restyles the app by changing tokens, and a literal buried in a hover or focus state survives that change invisibly.`);
77
105
  }
78
106
  return parts.join("\n\n");
79
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generation-variety.js","sourceRoot":"","sources":["../jsr/generation-variety.ts"],"names":[],"mappings":"AAqDA,MAAM,CAAC,MAAM,iBAAiB,GAA+B;IAC3D;QACE,EAAE,EAAE,oBAAoB;QACxB,QAAQ,EACN,6RAA6R;KAChS;IACD;QACE,EAAE,EAAE,WAAW;QACf,QAAQ,EACN,4PAA4P;KAC/P;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,QAAQ,EACN,uPAAuP;KAC1P;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,QAAQ,EACN,yRAAyR;KAC5R;IACD;QACE,EAAE,EAAE,WAAW;QACf,QAAQ,EACN,+PAA+P;KAClQ;CACF,CAAC;AASF,MAAM,CAAC,MAAM,UAAU,GAAwB;IAC7C;QACE,EAAE,EAAE,YAAY;QAChB,QAAQ,EACN,uUAAuU;KAC1U;IACD;QACE,EAAE,EAAE,YAAY;QAChB,QAAQ,EACN,wQAAwQ;KAC3Q;IACD;QACE,EAAE,EAAE,aAAa;QACjB,QAAQ,EACN,mNAAmN;KACtN;IACD;QACE,EAAE,EAAE,YAAY;QAChB,QAAQ,EACN,gOAAgO;KACnO;IACD;QACE,EAAE,EAAE,cAAc;QAClB,QAAQ,EACN,+NAA+N;KAClO;IACD;QACE,EAAE,EAAE,eAAe;QACnB,QAAQ,EACN,qNAAqN;KACxN;CACF,CAAC;AAGF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AASrC,SAAS,SAAS,CAAC,GAAiB,EAAE,MAAc;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;IACvC,OAAO,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1C,CAAC;AAeD,MAAM,UAAU,qBAAqB,CAAC,GAAiB;IACrD,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACpF,OAAO,UAAU,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAGjC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC;AAQD,MAAM,UAAU,oBAAoB,CAAC,OAAmC;IACtE,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,IAAI,SAAS,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,yBAAyB,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC,QAAQ,gLAAgL,CAC/O,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,KAAK,CAAC,IAAI,CACR,0HAA0H,OAAO,oQAAoQ,CACtY,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"generation-variety.js","sourceRoot":"","sources":["../jsr/generation-variety.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibes.diy/prompts",
3
- "version": "12.2.6",
3
+ "version": "12.2.7",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "description": "",
@@ -24,9 +24,9 @@
24
24
  "license": "Apache-2.0",
25
25
  "dependencies": {
26
26
  "@adviser/cement": "~0.5.34",
27
- "@vibes.diy/call-ai-v2": "^12.2.6",
28
- "@vibes.diy/identity": "^12.2.6",
29
- "@vibes.diy/use-vibes-types": "^12.2.6",
27
+ "@vibes.diy/call-ai-v2": "^12.2.7",
28
+ "@vibes.diy/identity": "^12.2.7",
29
+ "@vibes.diy/use-vibes-types": "^12.2.7",
30
30
  "arktype": "~2.2.3",
31
31
  "json-schema-faker": "~0.6.2"
32
32
  },