origam 2.20.0 → 2.21.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.
@@ -2718,18 +2718,10 @@
2718
2718
  --origam-blockquote--quoted---glyph-offset-top: -0.1em;
2719
2719
  --origam-blockquote--quoted---glyph-offset-left: -0.05em;
2720
2720
  --origam-blockquote--quoted---glyph-padding-extra: 1rem;
2721
- --origam-blockquote__elegant---font-family: var(--origam-font__family---serif);
2722
- --origam-blockquote__elegant---font-size: var(--origam-font__size---xl);
2723
2721
  --origam-blockquote__elegant---font-style: italic;
2724
- --origam-blockquote__elegant---line-height: var(--origam-font__lineHeight---loose);
2725
2722
  --origam-blockquote__elegant---padding-block: var(--origam-space---6);
2726
- --origam-blockquote__minimal---font-size: var(--origam-font__size---md);
2727
2723
  --origam-blockquote__minimal---font-style: italic;
2728
2724
  --origam-blockquote__minimal---padding-inline: var(--origam-space---3);
2729
- --origam-blockquote__pull---font-family: var(--origam-font__family---serif);
2730
- --origam-blockquote__pull---font-size: var(--origam-font__size---3xl);
2731
- --origam-blockquote__pull---font-weight: var(--origam-font__weight---medium);
2732
- --origam-blockquote__pull---line-height: var(--origam-font__lineHeight---snug);
2733
2725
  --origam-blockquote__pull---padding-block: var(--origam-space---6);
2734
2726
  --origam-blockquote__pull---rule-width: 2px;
2735
2727
  --origam-video---background-color: var(--origam-color---black);
@@ -5735,18 +5727,10 @@
5735
5727
  --origam-blockquote--quoted---glyph-offset-top: -0.1em;
5736
5728
  --origam-blockquote--quoted---glyph-offset-left: -0.05em;
5737
5729
  --origam-blockquote--quoted---glyph-padding-extra: 1rem;
5738
- --origam-blockquote__elegant---font-family: var(--origam-font__family---serif);
5739
- --origam-blockquote__elegant---font-size: var(--origam-font__size---xl);
5740
5730
  --origam-blockquote__elegant---font-style: italic;
5741
- --origam-blockquote__elegant---line-height: var(--origam-font__lineHeight---loose);
5742
5731
  --origam-blockquote__elegant---padding-block: var(--origam-space---6);
5743
- --origam-blockquote__minimal---font-size: var(--origam-font__size---md);
5744
5732
  --origam-blockquote__minimal---font-style: italic;
5745
5733
  --origam-blockquote__minimal---padding-inline: var(--origam-space---3);
5746
- --origam-blockquote__pull---font-family: var(--origam-font__family---serif);
5747
- --origam-blockquote__pull---font-size: var(--origam-font__size---3xl);
5748
- --origam-blockquote__pull---font-weight: var(--origam-font__weight---medium);
5749
- --origam-blockquote__pull---line-height: var(--origam-font__lineHeight---snug);
5750
5734
  --origam-blockquote__pull---padding-block: var(--origam-space---6);
5751
5735
  --origam-blockquote__pull---rule-width: 2px;
5752
5736
  --origam-video---background-color: var(--origam-color---black);
@@ -2634,18 +2634,10 @@
2634
2634
  --origam-blockquote--quoted---glyph-offset-top: -0.1em;
2635
2635
  --origam-blockquote--quoted---glyph-offset-left: -0.05em;
2636
2636
  --origam-blockquote--quoted---glyph-padding-extra: 1rem;
2637
- --origam-blockquote__elegant---font-family: var(--origam-font__family---serif);
2638
- --origam-blockquote__elegant---font-size: var(--origam-font__size---xl);
2639
2637
  --origam-blockquote__elegant---font-style: italic;
2640
- --origam-blockquote__elegant---line-height: var(--origam-font__lineHeight---loose);
2641
2638
  --origam-blockquote__elegant---padding-block: var(--origam-space---6);
2642
- --origam-blockquote__minimal---font-size: var(--origam-font__size---md);
2643
2639
  --origam-blockquote__minimal---font-style: italic;
2644
2640
  --origam-blockquote__minimal---padding-inline: var(--origam-space---3);
2645
- --origam-blockquote__pull---font-family: var(--origam-font__family---serif);
2646
- --origam-blockquote__pull---font-size: var(--origam-font__size---3xl);
2647
- --origam-blockquote__pull---font-weight: var(--origam-font__weight---medium);
2648
- --origam-blockquote__pull---line-height: var(--origam-font__lineHeight---snug);
2649
2641
  --origam-blockquote__pull---padding-block: var(--origam-space---6);
2650
2642
  --origam-blockquote__pull---rule-width: 2px;
2651
2643
  --origam-video---background-color: var(--origam-color---black);
@@ -2718,18 +2718,10 @@
2718
2718
  --origam-blockquote--quoted---glyph-offset-top: -0.1em;
2719
2719
  --origam-blockquote--quoted---glyph-offset-left: -0.05em;
2720
2720
  --origam-blockquote--quoted---glyph-padding-extra: 1rem;
2721
- --origam-blockquote__elegant---font-family: var(--origam-font__family---serif);
2722
- --origam-blockquote__elegant---font-size: var(--origam-font__size---xl);
2723
2721
  --origam-blockquote__elegant---font-style: italic;
2724
- --origam-blockquote__elegant---line-height: var(--origam-font__lineHeight---loose);
2725
2722
  --origam-blockquote__elegant---padding-block: var(--origam-space---6);
2726
- --origam-blockquote__minimal---font-size: var(--origam-font__size---md);
2727
2723
  --origam-blockquote__minimal---font-style: italic;
2728
2724
  --origam-blockquote__minimal---padding-inline: var(--origam-space---3);
2729
- --origam-blockquote__pull---font-family: var(--origam-font__family---serif);
2730
- --origam-blockquote__pull---font-size: var(--origam-font__size---3xl);
2731
- --origam-blockquote__pull---font-weight: var(--origam-font__weight---medium);
2732
- --origam-blockquote__pull---line-height: var(--origam-font__lineHeight---snug);
2733
2725
  --origam-blockquote__pull---padding-block: var(--origam-space---6);
2734
2726
  --origam-blockquote__pull---rule-width: 2px;
2735
2727
  --origam-video---background-color: var(--origam-color---black);
@@ -5735,18 +5727,10 @@
5735
5727
  --origam-blockquote--quoted---glyph-offset-top: -0.1em;
5736
5728
  --origam-blockquote--quoted---glyph-offset-left: -0.05em;
5737
5729
  --origam-blockquote--quoted---glyph-padding-extra: 1rem;
5738
- --origam-blockquote__elegant---font-family: var(--origam-font__family---serif);
5739
- --origam-blockquote__elegant---font-size: var(--origam-font__size---xl);
5740
5730
  --origam-blockquote__elegant---font-style: italic;
5741
- --origam-blockquote__elegant---line-height: var(--origam-font__lineHeight---loose);
5742
5731
  --origam-blockquote__elegant---padding-block: var(--origam-space---6);
5743
- --origam-blockquote__minimal---font-size: var(--origam-font__size---md);
5744
5732
  --origam-blockquote__minimal---font-style: italic;
5745
5733
  --origam-blockquote__minimal---padding-inline: var(--origam-space---3);
5746
- --origam-blockquote__pull---font-family: var(--origam-font__family---serif);
5747
- --origam-blockquote__pull---font-size: var(--origam-font__size---3xl);
5748
- --origam-blockquote__pull---font-weight: var(--origam-font__weight---medium);
5749
- --origam-blockquote__pull---line-height: var(--origam-font__lineHeight---snug);
5750
5734
  --origam-blockquote__pull---padding-block: var(--origam-space---6);
5751
5735
  --origam-blockquote__pull---rule-width: 2px;
5752
5736
  --origam-video---background-color: var(--origam-color---black);
@@ -2634,18 +2634,10 @@
2634
2634
  --origam-blockquote--quoted---glyph-offset-top: -0.1em;
2635
2635
  --origam-blockquote--quoted---glyph-offset-left: -0.05em;
2636
2636
  --origam-blockquote--quoted---glyph-padding-extra: 1rem;
2637
- --origam-blockquote__elegant---font-family: var(--origam-font__family---serif);
2638
- --origam-blockquote__elegant---font-size: var(--origam-font__size---xl);
2639
2637
  --origam-blockquote__elegant---font-style: italic;
2640
- --origam-blockquote__elegant---line-height: var(--origam-font__lineHeight---loose);
2641
2638
  --origam-blockquote__elegant---padding-block: var(--origam-space---6);
2642
- --origam-blockquote__minimal---font-size: var(--origam-font__size---md);
2643
2639
  --origam-blockquote__minimal---font-style: italic;
2644
2640
  --origam-blockquote__minimal---padding-inline: var(--origam-space---3);
2645
- --origam-blockquote__pull---font-family: var(--origam-font__family---serif);
2646
- --origam-blockquote__pull---font-size: var(--origam-font__size---3xl);
2647
- --origam-blockquote__pull---font-weight: var(--origam-font__weight---medium);
2648
- --origam-blockquote__pull---line-height: var(--origam-font__lineHeight---snug);
2649
2641
  --origam-blockquote__pull---padding-block: var(--origam-space---6);
2650
2642
  --origam-blockquote__pull---rule-width: 2px;
2651
2643
  --origam-video---background-color: var(--origam-color---black);
@@ -7,7 +7,7 @@
7
7
  :style="blockquoteStyles"
8
8
  >
9
9
  <span
10
- v-if="showQuoteMark"
10
+ v-if="quoteMark"
11
11
  class="origam-blockquote__mark origam-blockquote__mark--bg"
12
12
  aria-hidden="true"
13
13
  >{{ openMark }}</span>
@@ -68,7 +68,8 @@ const props = defineProps({
68
68
  source: { type: String, required: false },
69
69
  cite: { type: String, required: false },
70
70
  lang: { type: null, required: false, default: "auto" },
71
- align: { type: null, required: false },
71
+ align: { type: null, required: false, default: "left" },
72
+ quoteMark: { type: Boolean, required: false },
72
73
  id: { type: String, required: false },
73
74
  class: { type: [String, Array, Object], required: false },
74
75
  style: { type: [String, Array, Object, Boolean, null], required: false, skipCheck: true },
@@ -160,14 +161,9 @@ const effectiveLang = computed(() => {
160
161
  });
161
162
  const openMark = computed(() => QUOTE_MARKS_BY_LANG[effectiveLang.value].open);
162
163
  const closeMark = computed(() => QUOTE_MARKS_BY_LANG[effectiveLang.value].close);
163
- const showQuoteMark = computed(() => props.variant === "quoted");
164
164
  const hasAuthor = computed(() => Boolean(slots.author) || (props.author?.length ?? 0) > 0);
165
165
  const hasSource = computed(() => Boolean(slots.source) || (props.source?.length ?? 0) > 0);
166
166
  const hasAttribution = computed(() => hasAuthor.value || hasSource.value);
167
- const effectiveAlign = computed(() => {
168
- if (props.align) return props.align;
169
- return props.variant === "pull" ? "center" : "left";
170
- });
171
167
  const { roundedClasses, roundedStyles } = useRounded(props);
172
168
  const { elevationClasses } = useElevation(props);
173
169
  const { borderClasses, borderStyles } = useBorder(props);
@@ -202,7 +198,7 @@ const blockquoteClasses = computed(() => {
202
198
  return [
203
199
  "origam-blockquote",
204
200
  `origam-blockquote--variant-${props.variant}`,
205
- `origam-blockquote--align-${effectiveAlign.value}`,
201
+ `origam-blockquote--align-${props.align}`,
206
202
  {
207
203
  [`origam-blockquote--color-${props.color}`]: colorIsIntent.value,
208
204
  [`origam-blockquote--accent-${resolvedAccentColor.value}`]: accentIsIntent.value,
@@ -229,10 +225,8 @@ const blockquoteStyles = computed(() => {
229
225
  });
230
226
  defineExpose({
231
227
  effectiveLang,
232
- effectiveAlign,
233
228
  openMark,
234
229
  closeMark,
235
- showQuoteMark,
236
230
  hasAttribution
237
231
  });
238
232
  </script>
@@ -259,14 +253,13 @@ defineExpose({
259
253
  // win the cascade. Without it the scoped compiler pushes this rule
260
254
  // to (0,2,0) and beats the utility's (0,1,0).
261
255
  //
262
- // ⚠️ Deliberately PARTIAL. The `--variant-*` rules further down are
263
- // modifiers and keep their (0,2,0) per #950's decision — and
264
- // `variant` defaults to `'default'`, so
265
- // `.origam-blockquote--variant-default` is ALWAYS present and owns
266
- // `padding-inline-start`. After this change `padding-block-*` and
267
- // `padding-inline-end` answer the utility; `padding-inline-start`
268
- // stays held by the active variant. That is the intended trade:
269
- // the variant's accent-bar offset must not lose to a utility.
256
+ // ⚠️ #950's caveat about a competing variant rule is OBSOLETE since
257
+ // ADR-005 D7 (lot #1015): there is no longer any variant rule to
258
+ // compete with. A variant's spacing now arrives as an INLINE
259
+ // declaration from its props preset, which outranks both this rule
260
+ // and the utility class — so the accent-bar offset still cannot
261
+ // lose to a utility, by a stronger mechanism than specificity.
262
+ // This rule is what a variant that sets no spacing falls back to.
270
263
  :where(&) {
271
264
  margin: 0;
272
265
  padding-block: var(--origam-blockquote---resolved-padding-block);
@@ -335,53 +328,10 @@ defineExpose({
335
328
  text-align: right;
336
329
  }
337
330
 
338
- .origam-blockquote--variant-default {
339
- border-inline-start: var(--origam-blockquote__accent---width, 4px) solid var(--origam-blockquote---resolved-accent-color);
340
- padding-inline-start: calc(var(--origam-blockquote---resolved-padding-inline) + var(--origam-blockquote__accent---width, 4px));
341
- }
342
-
343
- .origam-blockquote--variant-elegant {
344
- font-family: var(--origam-blockquote__elegant---font-family, Georgia, 'Times New Roman', serif);
345
- font-size: var(--origam-blockquote__elegant---font-size, 1.125rem);
346
- font-style: var(--origam-blockquote__elegant---font-style, italic);
347
- line-height: var(--origam-blockquote__elegant---line-height, 2);
348
- padding-block: var(--origam-blockquote__elegant---padding-block, 24px);
349
- border-inline-start: var(--origam-blockquote__accent---width, 4px) solid var(--origam-blockquote---resolved-accent-color);
350
- padding-inline-start: calc(var(--origam-blockquote---resolved-padding-inline) + var(--origam-blockquote__accent---width, 4px));
351
- }
352
-
353
- .origam-blockquote--variant-quoted {
354
- padding-top: calc(var(--origam-blockquote---resolved-padding-block) + var(--origam-blockquote--quoted---glyph-padding-extra, 1rem));
355
-
356
- .origam-blockquote__body {
357
- position: relative;
358
- z-index: 1;
359
- }
360
-
361
- .origam-blockquote__attribution {
362
- position: relative;
363
- z-index: 1;
364
- }
365
- }
366
-
367
- .origam-blockquote--variant-minimal {
368
- font-size: var(--origam-blockquote__minimal---font-size, 0.875rem);
369
- font-style: var(--origam-blockquote__minimal---font-style, italic);
370
- padding-inline: var(--origam-blockquote__minimal---padding-inline, 12px);
371
- padding-block: 0;
372
- border-inline-start: var(--origam-blockquote--minimal---accent-width, 2px) solid var(--origam-blockquote---resolved-accent-color);
373
- padding-inline-start: calc(var(--origam-blockquote__minimal---padding-inline, 12px) + var(--origam-blockquote--minimal---accent-width, 2px));
374
- }
375
-
376
- .origam-blockquote--variant-pull {
377
- font-family: var(--origam-blockquote__pull---font-family, Georgia, 'Times New Roman', serif);
378
- font-size: var(--origam-blockquote__pull---font-size, 1.5rem);
379
- font-weight: var(--origam-blockquote__pull---font-weight, 500);
380
- line-height: var(--origam-blockquote__pull---line-height, 1.375);
381
- padding-block: var(--origam-blockquote__pull---padding-block, 24px);
382
- padding-inline: var(--origam-blockquote---resolved-padding-inline);
383
- border-block-start: var(--origam-blockquote__pull---rule-width, 2px) solid var(--origam-blockquote---resolved-accent-color);
384
- border-block-end: var(--origam-blockquote__pull---rule-width, 2px) solid var(--origam-blockquote---resolved-accent-color);
331
+ .origam-blockquote__mark--bg + .origam-blockquote__body,
332
+ .origam-blockquote__mark--bg ~ .origam-blockquote__attribution {
333
+ position: relative;
334
+ z-index: 1;
385
335
  }
386
336
 
387
337
  .origam-blockquote--accent-primary {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.QUOTE_MARKS_BY_LANG = exports.BLOCKQUOTE_VARIANTS = exports.BLOCKQUOTE_LANGS = exports.BLOCKQUOTE_DEFAULTS = exports.BLOCKQUOTE_ALIGNS = void 0;
6
+ exports.QUOTE_MARKS_BY_LANG = exports.BLOCKQUOTE_VARIANT_PRESETS = exports.BLOCKQUOTE_VARIANTS = exports.BLOCKQUOTE_LANGS = exports.BLOCKQUOTE_DEFAULTS = exports.BLOCKQUOTE_ALIGNS = void 0;
7
7
  var _enums = require("../../enums/index.cjs");
8
8
  const BLOCKQUOTE_VARIANTS = exports.BLOCKQUOTE_VARIANTS = Object.values(_enums.BLOCKQUOTE_VARIANT);
9
9
  const BLOCKQUOTE_LANGS = exports.BLOCKQUOTE_LANGS = Object.values(_enums.BLOCKQUOTE_LANG);
@@ -29,5 +29,42 @@ const QUOTE_MARKS_BY_LANG = exports.QUOTE_MARKS_BY_LANG = {
29
29
  const BLOCKQUOTE_DEFAULTS = exports.BLOCKQUOTE_DEFAULTS = {
30
30
  variant: "default",
31
31
  lang: "auto",
32
+ align: "left",
32
33
  tag: "blockquote"
34
+ };
35
+ const BLOCKQUOTE_VARIANT_PRESETS = exports.BLOCKQUOTE_VARIANT_PRESETS = {
36
+ default: {
37
+ borderInlineStart: "var(--origam-blockquote__accent---width, 4px) solid var(--origam-blockquote---resolved-accent-color, currentColor)",
38
+ paddingInlineStart: "calc(var(--origam-blockquote---padding-inline, 24px) + var(--origam-blockquote__accent---width, 4px))"
39
+ },
40
+ elegant: {
41
+ fontFamily: "serif",
42
+ fontSize: "xl",
43
+ fontStyle: "var(--origam-blockquote__elegant---font-style, italic)",
44
+ lineHeight: "loose",
45
+ paddingBlock: "var(--origam-blockquote__elegant---padding-block, 24px)",
46
+ borderInlineStart: "var(--origam-blockquote__accent---width, 4px) solid var(--origam-blockquote---resolved-accent-color, currentColor)",
47
+ paddingInlineStart: "calc(var(--origam-blockquote---padding-inline, 24px) + var(--origam-blockquote__accent---width, 4px))"
48
+ },
49
+ quoted: {
50
+ quoteMark: true,
51
+ paddingTop: "calc(var(--origam-blockquote---padding-block, 16px) + var(--origam-blockquote--quoted---glyph-padding-extra, 1rem))"
52
+ },
53
+ minimal: {
54
+ fontSize: "md",
55
+ fontStyle: "var(--origam-blockquote__minimal---font-style, italic)",
56
+ paddingBlock: 0,
57
+ paddingInline: "var(--origam-blockquote__minimal---padding-inline, 12px)",
58
+ borderInlineStart: "var(--origam-blockquote--minimal---accent-width, 2px) solid var(--origam-blockquote---resolved-accent-color, currentColor)",
59
+ paddingInlineStart: "calc(var(--origam-blockquote__minimal---padding-inline, 12px) + var(--origam-blockquote--minimal---accent-width, 2px))"
60
+ },
61
+ pull: {
62
+ fontFamily: "serif",
63
+ fontSize: "3xl",
64
+ fontWeight: "medium",
65
+ lineHeight: "snug",
66
+ align: "center",
67
+ paddingBlock: "var(--origam-blockquote__pull---padding-block, 24px)",
68
+ borderBlock: "var(--origam-blockquote__pull---rule-width, 2px) solid var(--origam-blockquote---resolved-accent-color, currentColor)"
69
+ }
33
70
  };
@@ -1,4 +1,6 @@
1
+ import type { IBlockquoteProps } from '../../interfaces/Blockquote/blockquote.interface';
1
2
  import type { TBlockquoteAlign, TBlockquoteLang, TBlockquoteVariant } from '../../types/Blockquote/blockquote.type';
3
+ import type { TVariantPresets } from '../../types/Commons/variant-preset.type';
2
4
  /**
3
5
  * Closed list of valid `variant` values for `<OrigamBlockquote>`.
4
6
  * Exposed so stories / consumers can iterate the matrix without
@@ -33,5 +35,116 @@ export declare const QUOTE_MARKS_BY_LANG: Record<Exclude<TBlockquoteLang, 'auto'
33
35
  export declare const BLOCKQUOTE_DEFAULTS: {
34
36
  readonly variant: TBlockquoteVariant;
35
37
  readonly lang: TBlockquoteLang;
38
+ readonly align: TBlockquoteAlign;
36
39
  readonly tag: "blockquote";
37
40
  };
41
+ /*********************************************************
42
+ * BLOCKQUOTE_VARIANT_PRESETS
43
+ *
44
+ * @description
45
+ * ADR-005 D7, lot #1015 — le deuxieme composant converti, apres le pilote
46
+ * `OrigamKbd`. Un variant de Blockquote n'est plus un bloc SCSS : c'est ce
47
+ * sac de props, resolu au rang le plus faible de la chaine (prop du site
48
+ * d'appel > defaut de theme > PRESET > `withDefaults`).
49
+ *
50
+ * @description
51
+ * ⛔ CE QUE LA CONVERSION REPARE, ET C'EST SA JUSTIFICATION. Les regles
52
+ * `--variant-elegant` / `--variant-minimal` / `--variant-pull` declaraient
53
+ * `font-size` / `font-family` / `font-weight` / `line-height`
54
+ * DIRECTEMENT, a specificite (0,2,0) — identique a celle de la regle de
55
+ * base — et plus loin dans l'ordre source. Or `useTypography` n'ecrit pas
56
+ * ces proprietes : il ecrit la propriete custom
57
+ * `--origam-blockquote---{propriete}` que la regle de base consomme via
58
+ * `--resolved-{propriete}`. Les cinq props typographiques etaient donc
59
+ * VIVANTES sur `default` et `quoted` et MORTES sur les trois autres, sans
60
+ * aucun diagnostic — alors que la story exposait les cinq controles et que
61
+ * la doc les documentait.
62
+ * @description
63
+ * Verdict navigateur, chromium, Histoire statique, lot #1015 :
64
+ * `variant="elegant" font-size="sm"` rendait **18px**, exactement comme
65
+ * `variant="elegant"` nu. Apres conversion la prop gagne. C'est l'une des
66
+ * deux assertions ROUGE-avant / VERT-apres de `e2e/blockquote.spec.ts`.
67
+ *
68
+ * @description
69
+ * ⛔ CHAQUE VALEUR PORTE LA CHAINE `var()` QUE LA REGLE PORTAIT, partout ou
70
+ * le canal peut la transporter. `resolveSpacingValue` rend verbatim toute
71
+ * valeur qui n'est pas un echelon de l'echelle, et
72
+ * `parseBorderPositionValue` prend `match.width` EN ENTIER — donc les
73
+ * `calc()` et les largeurs `var(--…, repli)` voyagent telles quelles, et le
74
+ * canal d'override des themes survit.
75
+ *
76
+ * @description
77
+ * ⛔ LES CINQ VALEURS TYPOGRAPHIQUES SONT L'EXCEPTION, ET ELLE EST
78
+ * STRUCTURELLE. `useTypography` n'a AUCUNE echappatoire pour une valeur
79
+ * custom (`typography.composable.ts:210-216`) : il enveloppe toujours en
80
+ * `var(--origam-font__{groupe}---{valeur})`. Poser
81
+ * `fontSize: 'var(--origam-blockquote__elegant---font-size, 1.125rem)'`
82
+ * produirait le nom imbrique
83
+ * `var(--origam-font__size---var(--origam-blockquote__elegant---font-size, 1.125rem))`,
84
+ * qu'aucune feuille ne declare, et la declaration serait jetee. La ruse du
85
+ * pilote Kbd est donc indisponible ici — c'est **#1018**, ouvert, et il
86
+ * n'est PAS corrige dans ce lot. Seul `fontStyle` echappe, via
87
+ * `TYPOGRAPHY_PASSTHROUGH_MAP`, et son preset porte donc bien la chaine.
88
+ * @description
89
+ * Le cout de cette exception est NUL, et c'est mesure, pas suppose : chacun
90
+ * des 8 tokens concernes etait un ALIAS byte-pour-byte de l'echelon
91
+ * semantique que le preset pose a sa place (`__elegant---font-size:
92
+ * var(--origam-font__size---xl)` -> `fontSize: 'xl'`, et ainsi de suite),
93
+ * et aucun des 8 themes n'en lisait un seul. Les 8 tokens sortent donc des
94
+ * 4 feuilles et de `tokens.type.ts`, ce que `token-var-channels` prescrit
95
+ * lui-meme pour un token que plus rien ne lit.
96
+ *
97
+ * @description
98
+ * ⛔ CE QUE LA TABLE NE POSE PAS EST AUSSI IMPORTANT QUE CE QU'ELLE POSE.
99
+ * `pull` declarait `padding-inline:
100
+ * var(--origam-blockquote---resolved-padding-inline)` — une REDONDANCE avec
101
+ * la regle de base, qui pose exactement la meme valeur. L'inscrire ici
102
+ * emettrait une declaration INLINE, qui passerait devant la classe
103
+ * utilitaire qu'un `padding` du consommateur produit : la table
104
+ * confisquerait le canal qu'elle est censee servir. Valeur calculee
105
+ * identique des deux cotes tant qu'aucun `padding` n'est passe ; quand il
106
+ * l'est, l'axe inline de `pull` lui OBEIT desormais, ce qui va dans le sens
107
+ * du lot.
108
+ *
109
+ * @description
110
+ * ⛔ LES INDIRECTIONS `---resolved-*` NE SORTENT PAS D'ICI quand le token
111
+ * PUBLIC suffit. Les regles supprimees lisaient
112
+ * `var(--origam-blockquote---resolved-padding-inline)` et
113
+ * `var(--origam-blockquote---resolved-padding-block)`, deux proprietes
114
+ * custom que le bloc `<style scoped>` du composant synthetise lui-meme
115
+ * (`OrigamBlockquote.vue`, regle `.origam-blockquote`) et qu'AUCUNE feuille
116
+ * ne declare. Le preset nomme donc directement le token public que ces
117
+ * indirections resolvent — `--origam-blockquote---padding-inline, 24px` et
118
+ * `---padding-block, 16px` — ce qui est strictement equivalent par
119
+ * substitution (verifie : une seule declaration de chacune des deux
120
+ * indirections dans tout `packages/ds/src`, aucun modificateur ne les
121
+ * redeclare) et met le preset sur le canal de theme PUBLIC plutot que sur
122
+ * un detail interne. Le garde `ts-token-refs` cesse par la meme de
123
+ * rougir sur deux des quatre noms.
124
+ * @description
125
+ * ⚠️ `--origam-blockquote---resolved-accent-color` ne PEUT PAS subir le
126
+ * meme traitement, et c'est la seule entree de baseline que ce lot ajoute :
127
+ * les huit modificateurs `.origam-blockquote--accent-{intent}` REDECLARENT
128
+ * cette indirection. Nommer le token sous-jacent
129
+ * (`--origam-blockquote__accent---color`) rendrait `accent-color="primary"`
130
+ * inoperant sur le filet — une regression reelle. L'indirection est le
131
+ * mecanisme meme de l'axe `accentColor`, donc elle reste, avec un repli
132
+ * `currentColor` plat. ⛔ Un repli IMBRIQUE est exclu : le groupe `color`
133
+ * de `BORDER_REGEX` s'arrete a la premiere parenthese fermante, donc une
134
+ * valeur a repli imbrique ne matche pas DU TOUT et rien ne serait emis.
135
+ *
136
+ * @description
137
+ * ⚠️ `--origam-blockquote--minimal---accent-width` n'est declare par AUCUNE
138
+ * feuille — grammaire divergente, double tiret la ou le reste du composant
139
+ * ecrit `__`. `minimal` tombe donc toujours sur son repli `2px`. Le preset
140
+ * porte la chaine TELLE QUELLE : la fidelite est le travail, pas la
141
+ * correction. C'est **#1014**, et il n'est PAS corrige ici.
142
+ *
143
+ * @description
144
+ * ⚠️ `quoteMark` et `align` sont les deux moities « famille B » de ce
145
+ * composant — un element monte et un defaut d'alignement. D7 exige qu'elles
146
+ * passent par une prop COMPORTEMENTALE et que l'exemption soit documentee
147
+ * SUR la prop : voir leurs JSDoc dans
148
+ * `interfaces/Blockquote/blockquote.interface.ts`.
149
+ ********************************************************/
150
+ export declare const BLOCKQUOTE_VARIANT_PRESETS: TVariantPresets<TBlockquoteVariant, IBlockquoteProps>;
@@ -15,5 +15,42 @@ export const QUOTE_MARKS_BY_LANG = {
15
15
  export const BLOCKQUOTE_DEFAULTS = {
16
16
  variant: "default",
17
17
  lang: "auto",
18
+ align: "left",
18
19
  tag: "blockquote"
19
20
  };
21
+ export const BLOCKQUOTE_VARIANT_PRESETS = {
22
+ default: {
23
+ borderInlineStart: "var(--origam-blockquote__accent---width, 4px) solid var(--origam-blockquote---resolved-accent-color, currentColor)",
24
+ paddingInlineStart: "calc(var(--origam-blockquote---padding-inline, 24px) + var(--origam-blockquote__accent---width, 4px))"
25
+ },
26
+ elegant: {
27
+ fontFamily: "serif",
28
+ fontSize: "xl",
29
+ fontStyle: "var(--origam-blockquote__elegant---font-style, italic)",
30
+ lineHeight: "loose",
31
+ paddingBlock: "var(--origam-blockquote__elegant---padding-block, 24px)",
32
+ borderInlineStart: "var(--origam-blockquote__accent---width, 4px) solid var(--origam-blockquote---resolved-accent-color, currentColor)",
33
+ paddingInlineStart: "calc(var(--origam-blockquote---padding-inline, 24px) + var(--origam-blockquote__accent---width, 4px))"
34
+ },
35
+ quoted: {
36
+ quoteMark: true,
37
+ paddingTop: "calc(var(--origam-blockquote---padding-block, 16px) + var(--origam-blockquote--quoted---glyph-padding-extra, 1rem))"
38
+ },
39
+ minimal: {
40
+ fontSize: "md",
41
+ fontStyle: "var(--origam-blockquote__minimal---font-style, italic)",
42
+ paddingBlock: 0,
43
+ paddingInline: "var(--origam-blockquote__minimal---padding-inline, 12px)",
44
+ borderInlineStart: "var(--origam-blockquote--minimal---accent-width, 2px) solid var(--origam-blockquote---resolved-accent-color, currentColor)",
45
+ paddingInlineStart: "calc(var(--origam-blockquote__minimal---padding-inline, 12px) + var(--origam-blockquote--minimal---accent-width, 2px))"
46
+ },
47
+ pull: {
48
+ fontFamily: "serif",
49
+ fontSize: "3xl",
50
+ fontWeight: "medium",
51
+ lineHeight: "snug",
52
+ align: "center",
53
+ paddingBlock: "var(--origam-blockquote__pull---padding-block, 24px)",
54
+ borderBlock: "var(--origam-blockquote__pull---rule-width, 2px) solid var(--origam-blockquote---resolved-accent-color, currentColor)"
55
+ }
56
+ };
@@ -4,8 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VARIANT_PROP_KEY = exports.VARIANT_PRESETS = void 0;
7
+ var _blockquote = require("../Blockquote/blockquote.const.cjs");
7
8
  var _kbd = require("../Kbd/kbd.const.cjs");
8
9
  const VARIANT_PROP_KEY = exports.VARIANT_PROP_KEY = "variant";
9
10
  const VARIANT_PRESETS = exports.VARIANT_PRESETS = {
11
+ "origam-blockquote": _blockquote.BLOCKQUOTE_VARIANT_PRESETS,
10
12
  "origam-kbd": _kbd.KBD_VARIANT_PRESETS
11
13
  };
@@ -25,12 +25,13 @@ export declare const VARIANT_PROP_KEY = "variant";
25
25
  * constitue pas.
26
26
  *
27
27
  * @description
28
- * ⛔ UN SEUL COMPOSANT CONVERTI A CE JOUR — `OrigamKbd`, lot 2. Le lot 1
29
- * d'ADR-005 livre le MECANISME (type partage, rang dans le resolveur,
30
- * canal `theme.variants`) et aucune conversion : chaque composant arrive
31
- * avec son propre lot, parce qu'aucun ne se convertit mecaniquement.
32
- * Mesure a l'appui (2026-09-30), la taxonomie « famille A » de D5 est
33
- * optimiste sur trois des quatre composants qu'elle liste :
28
+ * ⛔ DEUX COMPOSANTS CONVERTIS A CE JOUR — `OrigamKbd` (lot 2) et
29
+ * `OrigamBlockquote` (lot #1015). Le lot 1 d'ADR-005 livre le MECANISME
30
+ * (type partage, rang dans le resolveur, canal `theme.variants`) et aucune
31
+ * conversion : chaque composant arrive avec son propre lot, parce
32
+ * qu'aucun ne se convertit mecaniquement. Mesure a l'appui (2026-09-30),
33
+ * la taxonomie « famille A » de D5 est optimiste sur trois des quatre
34
+ * composants qu'elle liste :
34
35
  * @description
35
36
  * - `OrigamKbd` — FAIT (lot 2). Ses regles de variant posaient des
36
37
  * PROPRIETES CUSTOM que `key-surface` consomme sur la racine ET sur les
@@ -45,8 +46,18 @@ export declare const VARIANT_PROP_KEY = "variant";
45
46
  * - `OrigamBtnGroup` — recopie `--origam-btn-group---border-width` dans
46
47
  * une propriete custom qui alimente un `calc()` de rayon interieur.
47
48
  * Inexprimable en prop de racine.
48
- * - `OrigamBlockquote` — `padding-inline-start: calc(var(--…) + var(--…))`
49
- * et des regles imbriquees sur `__body` / `__attribution`.
49
+ * - `OrigamBlockquote` — FAIT (lot #1015). Les deux reserves que ce
50
+ * paragraphe posait se sont reglees sans nouveau mecanisme. Le
51
+ * `calc(var(--…) + var(--…))` voyage verbatim : `resolveSpacingValue`
52
+ * rend telle quelle toute valeur qui n'est pas un echelon de l'echelle.
53
+ * Les regles imbriquees sur `__body` / `__attribution` ne dependaient
54
+ * pas du variant mais de la PRESENCE du glyphe, donc elles sont
55
+ * reecrites en selecteurs de VOISINAGE (`__mark--bg + __body`,
56
+ * `__mark--bg ~ __attribution`) : elles se declenchent sur la condition
57
+ * reelle, n'ajoutent aucun alias de classe que `no-variant-css`
58
+ * surveillerait, et laissent zero ecart de style calcule sur les quatre
59
+ * autres variants. Le vrai obstacle etait ailleurs — `useTypography` n'a
60
+ * aucune echappatoire pour une valeur custom (#1018).
50
61
  * @description
51
62
  * Seul `OrigamBtn` ne peint que des proprietes de racine — mais il depend
52
63
  * de `IOpacityProps` / `IBackdropProps` (Q1, absents) et son `ghost` porte
@@ -1,5 +1,7 @@
1
+ import { BLOCKQUOTE_VARIANT_PRESETS } from "../Blockquote/blockquote.const.js";
1
2
  import { KBD_VARIANT_PRESETS } from "../Kbd/kbd.const.js";
2
3
  export const VARIANT_PROP_KEY = "variant";
3
4
  export const VARIANT_PRESETS = {
5
+ "origam-blockquote": BLOCKQUOTE_VARIANT_PRESETS,
4
6
  "origam-kbd": KBD_VARIANT_PRESETS
5
7
  };
@@ -78,13 +78,68 @@ export interface IBlockquoteProps extends ICommonsComponentProps, ITagProps, ICo
78
78
  */
79
79
  lang?: TBlockquoteLang;
80
80
  /**
81
- * Horizontal alignment of the citation body and attribution. The
82
- * `pull` variant forces `'center'` when this prop is left empty;
83
- * other variants default to `'left'`.
81
+ * Horizontal alignment of the citation body and attribution.
84
82
  *
85
- * @default 'left'
83
+ * ## ADR-005 D7 — exemption « famille B », documentée ICI et non
84
+ * implicitement
85
+ *
86
+ * `'center'` sur `pull` n'est plus calculé par le composant : c'est
87
+ * `BLOCKQUOTE_VARIANT_PRESETS.pull.align`, résolu au rang PRESET de la
88
+ * chaîne. La sémantique est identique à celle du `computed`
89
+ * `effectiveAlign` qu'il remplace — un `align` écrit au site d'appel
90
+ * gagne, parce que le rang 1 du résolveur (`if (wasPassed) return
91
+ * fallback`) précède le rang preset.
92
+ *
93
+ * ⚠️ **Rupture, assumée.** Le centrage de `pull` dépend désormais du
94
+ * résolveur, que seul `createOrigam()` installe. Un consommateur qui
95
+ * importe le composant sans installer le plugin obtient `'left'` (la
96
+ * valeur `withDefaults`, qui n'existe que comme plancher sans variant).
97
+ * Avant la conversion, le `computed` centrait sans plugin.
98
+ *
99
+ * @default 'left' — plancher `withDefaults`, que le preset de `pull` bat
86
100
  */
87
101
  align?: TBlockquoteAlign;
102
+ /*********************************************************
103
+ * quoteMark
104
+ *
105
+ * @description
106
+ * Monte le glyphe d'ouverture decoratif en filigrane de fond
107
+ * (`<span class="origam-blockquote__mark--bg">`), avec la paire de
108
+ * guillemets que `lang` selectionne.
109
+ *
110
+ * @description
111
+ * ⛔ ADR-005 D7 — EXEMPTION « FAMILLE B », DOCUMENTEE ICI ET NON
112
+ * IMPLICITEMENT. Ce prop existe parce que `quoted` ne se reduit PAS a
113
+ * des props de peinture : il MONTE UN ELEMENT. D7 interdit de laisser
114
+ * cet effet accroche au variant et exige que l'exemption soit ecrite
115
+ * sur la prop — c'est ce paragraphe.
116
+ *
117
+ * @description
118
+ * Le glyphe est donc pilote par `quoteMark`, et
119
+ * `BLOCKQUOTE_VARIANT_PRESETS.quoted` le pose a `true`. Deux
120
+ * consequences voulues : `quoted` reste le raccourci qu'il a toujours
121
+ * ete, et le glyphe devient atteignable sur N'IMPORTE QUEL variant
122
+ * (`<origam-blockquote variant="pull" quote-mark>`), ce que le modele
123
+ * SCSS rendait impossible.
124
+ *
125
+ * @description
126
+ * Les deux regles d'empilement que `quoted` portait (`position:
127
+ * relative; z-index: 1` sur `__body` et `__attribution`, pour que le
128
+ * texte passe devant le glyphe) suivent desormais la PRESENCE DU
129
+ * GLYPHE et non le variant : ce sont des selecteurs de voisinage
130
+ * (`__mark--bg + __body`, `__mark--bg ~ __attribution`), donc ils se
131
+ * declenchent exactement quand il y a quelque chose a surmonter, et
132
+ * laissent zero ecart de style calcule sur les quatre autres variants.
133
+ *
134
+ * @description
135
+ * ⚠️ Le sur-remplissage haut qui laisse de la place au glyphe
136
+ * (`paddingTop`) reste porte par le preset de `quoted`, pas par ce
137
+ * prop. `quote-mark` sur un autre variant rend donc le glyphe sans ce
138
+ * supplement — passer `padding-top` soi-meme le retablit.
139
+ *
140
+ * @default false
141
+ ********************************************************/
142
+ quoteMark?: boolean;
88
143
  }
89
144
  /**
90
145
  * Slot signatures for `<OrigamBlockquote>`. The `default` slot owns the