origam 2.18.19 → 2.18.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/src/assets/css/main.css +1 -1
  3. package/dist/src/assets/css/tokens/origam-utilities.css +30 -0
  4. package/dist/src/assets/css/tokens/primitive.css +5 -0
  5. package/dist/src/assets/scss/tokens/_origam-utilities.scss +30 -0
  6. package/dist/src/assets/scss/tokens/_primitive.scss +5 -0
  7. package/dist/src/composables/Commons/backdrop.composable.cjs +50 -0
  8. package/dist/src/composables/Commons/backdrop.composable.d.ts +32 -0
  9. package/dist/src/composables/Commons/backdrop.composable.js +33 -0
  10. package/dist/src/composables/Commons/opacity.composable.cjs +50 -0
  11. package/dist/src/composables/Commons/opacity.composable.d.ts +33 -0
  12. package/dist/src/composables/Commons/opacity.composable.js +34 -0
  13. package/dist/src/composables/Commons/stateEffect.composable.cjs +17 -2
  14. package/dist/src/composables/Commons/stateEffect.composable.d.ts +7 -2
  15. package/dist/src/composables/Commons/stateEffect.composable.js +23 -2
  16. package/dist/src/composables/index.cjs +24 -0
  17. package/dist/src/composables/index.d.ts +2 -0
  18. package/dist/src/composables/index.js +2 -0
  19. package/dist/src/consts/Commons/backdrop.const.cjs +15 -0
  20. package/dist/src/consts/Commons/backdrop.const.d.ts +47 -0
  21. package/dist/src/consts/Commons/backdrop.const.js +9 -0
  22. package/dist/src/consts/Commons/opacity.const.cjs +20 -0
  23. package/dist/src/consts/Commons/opacity.const.d.ts +58 -0
  24. package/dist/src/consts/Commons/opacity.const.js +14 -0
  25. package/dist/src/consts/index.cjs +22 -0
  26. package/dist/src/consts/index.d.ts +2 -0
  27. package/dist/src/consts/index.js +2 -0
  28. package/dist/src/interfaces/Commons/backdrop.interface.cjs +1 -0
  29. package/dist/src/interfaces/Commons/backdrop.interface.d.ts +49 -0
  30. package/dist/src/interfaces/Commons/backdrop.interface.js +0 -0
  31. package/dist/src/interfaces/Commons/opacity.interface.cjs +1 -0
  32. package/dist/src/interfaces/Commons/opacity.interface.d.ts +37 -0
  33. package/dist/src/interfaces/Commons/opacity.interface.js +0 -0
  34. package/dist/src/interfaces/Commons/state-effect.interface.d.ts +31 -0
  35. package/dist/src/interfaces/index.cjs +22 -0
  36. package/dist/src/interfaces/index.d.ts +2 -0
  37. package/dist/src/interfaces/index.js +2 -0
  38. package/dist/src/types/Commons/backdrop.type.cjs +1 -0
  39. package/dist/src/types/Commons/backdrop.type.d.ts +23 -0
  40. package/dist/src/types/Commons/backdrop.type.js +0 -0
  41. package/dist/src/types/Commons/opacity.type.cjs +1 -0
  42. package/dist/src/types/Commons/opacity.type.d.ts +36 -0
  43. package/dist/src/types/Commons/opacity.type.js +0 -0
  44. package/dist/src/types/Commons/state-effect.type.d.ts +2 -1
  45. package/dist/src/types/index.cjs +22 -0
  46. package/dist/src/types/index.d.ts +2 -0
  47. package/dist/src/types/index.js +2 -0
  48. package/dist/src/types/tokens.type.d.ts +1 -1
  49. package/package.json +1 -1
@@ -123,3 +123,33 @@
123
123
  .origam--text-lg { font-size: var(--origam-font__size---lg); }
124
124
  .origam--text-xl { font-size: var(--origam-font__size---xl); }
125
125
  .origam--text-2xl { font-size: var(--origam-font__size---2xl); }
126
+
127
+ /* --- Opacity --------------------------------------------- */
128
+ /* */
129
+ /* Emitted by `useOpacity` when the value lands on a rung of */
130
+ /* the primitive ladder. `useOpacity` ALSO emits the matching */
131
+ /* inline `opacity:` declaration (strategy A). That is not */
132
+ /* redundancy: a scoped component rule is (0,2,0) and beats */
133
+ /* this (0,1,0) class whatever the load order, and OrigamBtn */
134
+ /* already declares `opacity` in its own SCSS. See #514. */
135
+ .origam--opacity-0 { opacity: var(--origam-opacity---0); }
136
+ .origam--opacity-12 { opacity: var(--origam-opacity---12); }
137
+ .origam--opacity-26 { opacity: var(--origam-opacity---26); }
138
+ .origam--opacity-32 { opacity: var(--origam-opacity---32); }
139
+ .origam--opacity-50 { opacity: var(--origam-opacity---50); }
140
+ .origam--opacity-60 { opacity: var(--origam-opacity---60); }
141
+ .origam--opacity-70 { opacity: var(--origam-opacity---70); }
142
+ .origam--opacity-87 { opacity: var(--origam-opacity---87); }
143
+ .origam--opacity-100 { opacity: var(--origam-opacity---100); }
144
+
145
+ /* --- Backdrop blur --------------------------------------- */
146
+ /* */
147
+ /* Emitted by `useBackdrop`. The -webkit- twin is required: */
148
+ /* Safari still ships backdrop-filter prefixed only. Rung */
149
+ /* values follow the measured distribution of blur() literals */
150
+ /* in this repo, not a tidy doubling, hence sm = 6px. */
151
+ .origam--backdrop-blur-xs { backdrop-filter: blur(var(--origam-blur---xs)); -webkit-backdrop-filter: blur(var(--origam-blur---xs)); }
152
+ .origam--backdrop-blur-sm { backdrop-filter: blur(var(--origam-blur---sm)); -webkit-backdrop-filter: blur(var(--origam-blur---sm)); }
153
+ .origam--backdrop-blur-md { backdrop-filter: blur(var(--origam-blur---md)); -webkit-backdrop-filter: blur(var(--origam-blur---md)); }
154
+ .origam--backdrop-blur-lg { backdrop-filter: blur(var(--origam-blur---lg)); -webkit-backdrop-filter: blur(var(--origam-blur---lg)); }
155
+ .origam--backdrop-blur-xl { backdrop-filter: blur(var(--origam-blur---xl)); -webkit-backdrop-filter: blur(var(--origam-blur---xl)); }
@@ -162,6 +162,11 @@
162
162
  --origam-opacity---70: 0.7;
163
163
  --origam-opacity---87: 0.87;
164
164
  --origam-opacity---100: 1;
165
+ --origam-blur---xs: 4px;
166
+ --origam-blur---sm: 6px;
167
+ --origam-blur---md: 8px;
168
+ --origam-blur---lg: 16px;
169
+ --origam-blur---xl: 24px;
165
170
  --origam-border__width---0: 0px;
166
171
  --origam-border__width---2: 2px;
167
172
  --origam-border__width---4: 4px;
@@ -123,3 +123,33 @@
123
123
  .origam--text-lg { font-size: var(--origam-font__size---lg); }
124
124
  .origam--text-xl { font-size: var(--origam-font__size---xl); }
125
125
  .origam--text-2xl { font-size: var(--origam-font__size---2xl); }
126
+
127
+ /* --- Opacity --------------------------------------------- */
128
+ /* */
129
+ /* Emitted by `useOpacity` when the value lands on a rung of */
130
+ /* the primitive ladder. `useOpacity` ALSO emits the matching */
131
+ /* inline `opacity:` declaration (strategy A). That is not */
132
+ /* redundancy: a scoped component rule is (0,2,0) and beats */
133
+ /* this (0,1,0) class whatever the load order, and OrigamBtn */
134
+ /* already declares `opacity` in its own SCSS. See #514. */
135
+ .origam--opacity-0 { opacity: var(--origam-opacity---0); }
136
+ .origam--opacity-12 { opacity: var(--origam-opacity---12); }
137
+ .origam--opacity-26 { opacity: var(--origam-opacity---26); }
138
+ .origam--opacity-32 { opacity: var(--origam-opacity---32); }
139
+ .origam--opacity-50 { opacity: var(--origam-opacity---50); }
140
+ .origam--opacity-60 { opacity: var(--origam-opacity---60); }
141
+ .origam--opacity-70 { opacity: var(--origam-opacity---70); }
142
+ .origam--opacity-87 { opacity: var(--origam-opacity---87); }
143
+ .origam--opacity-100 { opacity: var(--origam-opacity---100); }
144
+
145
+ /* --- Backdrop blur --------------------------------------- */
146
+ /* */
147
+ /* Emitted by `useBackdrop`. The -webkit- twin is required: */
148
+ /* Safari still ships backdrop-filter prefixed only. Rung */
149
+ /* values follow the measured distribution of blur() literals */
150
+ /* in this repo, not a tidy doubling, hence sm = 6px. */
151
+ .origam--backdrop-blur-xs { backdrop-filter: blur(var(--origam-blur---xs)); -webkit-backdrop-filter: blur(var(--origam-blur---xs)); }
152
+ .origam--backdrop-blur-sm { backdrop-filter: blur(var(--origam-blur---sm)); -webkit-backdrop-filter: blur(var(--origam-blur---sm)); }
153
+ .origam--backdrop-blur-md { backdrop-filter: blur(var(--origam-blur---md)); -webkit-backdrop-filter: blur(var(--origam-blur---md)); }
154
+ .origam--backdrop-blur-lg { backdrop-filter: blur(var(--origam-blur---lg)); -webkit-backdrop-filter: blur(var(--origam-blur---lg)); }
155
+ .origam--backdrop-blur-xl { backdrop-filter: blur(var(--origam-blur---xl)); -webkit-backdrop-filter: blur(var(--origam-blur---xl)); }
@@ -162,6 +162,11 @@
162
162
  --origam-opacity---70: 0.7;
163
163
  --origam-opacity---87: 0.87;
164
164
  --origam-opacity---100: 1;
165
+ --origam-blur---xs: 4px;
166
+ --origam-blur---sm: 6px;
167
+ --origam-blur---md: 8px;
168
+ --origam-blur---lg: 16px;
169
+ --origam-blur---xl: 24px;
165
170
  --origam-border__width---0: 0px;
166
171
  --origam-border__width---2: 2px;
167
172
  --origam-border__width---4: 4px;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useBackdrop = useBackdrop;
7
+ var _vue = require("vue");
8
+ var _backdrop = require("../../consts/Commons/backdrop.const.cjs");
9
+ function resolveBackdropBlur(value) {
10
+ if (value == null || value === false || value === "") return null;
11
+ if (value === true) {
12
+ return {
13
+ rung: _backdrop.BACKDROP_BLUR_DEFAULT_RUNG,
14
+ length: _backdrop.BACKDROP_BLUR_RUNG_VARS[_backdrop.BACKDROP_BLUR_DEFAULT_RUNG]
15
+ };
16
+ }
17
+ if (typeof value === "number") return {
18
+ rung: null,
19
+ length: `${value}px`
20
+ };
21
+ const key = String(value).trim();
22
+ const rungVar = _backdrop.BACKDROP_BLUR_RUNG_VARS[key];
23
+ if (rungVar) return {
24
+ rung: key,
25
+ length: rungVar
26
+ };
27
+ return {
28
+ rung: null,
29
+ length: key
30
+ };
31
+ }
32
+ function useBackdrop(props) {
33
+ const resolved = (0, _vue.computed)(() => {
34
+ return resolveBackdropBlur((0, _vue.isRef)(props) ? props.value : props.backdropBlur);
35
+ });
36
+ const backdropClasses = (0, _vue.computed)(() => {
37
+ const rung = resolved.value?.rung;
38
+ return rung ? [`${_backdrop.BACKDROP_UTILITY_CLASS_PREFIX}${rung}`] : [];
39
+ });
40
+ const backdropStyles = (0, _vue.computed)(() => {
41
+ const current = resolved.value;
42
+ if (!current) return [];
43
+ const filter = `blur(${current.length})`;
44
+ return [`backdrop-filter: ${filter}`, `-webkit-backdrop-filter: ${filter}`];
45
+ });
46
+ return {
47
+ backdropClasses,
48
+ backdropStyles
49
+ };
50
+ }
@@ -0,0 +1,32 @@
1
+ import { Ref } from 'vue';
2
+ import type { IBackdropProps } from '../../interfaces/Commons/backdrop.interface';
3
+ import { TBackdropBlur } from '../../types/Commons/backdrop.type';
4
+ /*********************************************************
5
+ * useBackdrop
6
+ *
7
+ * @description
8
+ * Translates the `backdropBlur` prop into `backdropClasses` (the global
9
+ * utility class, when the value lands on a token rung) AND
10
+ * `backdropStyles` (always a `backdrop-filter` pair). Both channels are
11
+ * emitted in PARALLEL — strategy A, same contract as `useElevation`.
12
+ *
13
+ * @description
14
+ * The `-webkit-` prefixed twin is emitted alongside the standard property
15
+ * on every path: Safari still ships `backdrop-filter` prefixed only, and
16
+ * every one of the 12 components already painting glass in this DS writes
17
+ * the pair. Dropping it would make the prop a no-op on Safari while
18
+ * looking correct everywhere the author tests.
19
+ *
20
+ * @description
21
+ * No `@supports` gate, and that is not an oversight. An unsupported
22
+ * browser drops an unknown declaration by itself, so the gate would buy
23
+ * nothing here — and an inline style cannot carry one anyway. The
24
+ * `@supports not (backdrop-filter: ...)` blocks that exist in the DS
25
+ * today thicken the BACKGROUND COLOUR when blur is unavailable, which is
26
+ * a `bgColor` decision belonging to whoever writes the preset, not to
27
+ * this composable.
28
+ ********************************************************/
29
+ export declare function useBackdrop(props: IBackdropProps | Ref<TBackdropBlur | undefined>): {
30
+ backdropClasses: import("vue").ComputedRef<string[]>;
31
+ backdropStyles: import("vue").ComputedRef<string[]>;
32
+ };
@@ -0,0 +1,33 @@
1
+ import { computed, isRef } from "vue";
2
+ import {
3
+ BACKDROP_BLUR_DEFAULT_RUNG,
4
+ BACKDROP_BLUR_RUNG_VARS,
5
+ BACKDROP_UTILITY_CLASS_PREFIX
6
+ } from "../../consts/Commons/backdrop.const.js";
7
+ function resolveBackdropBlur(value) {
8
+ if (value == null || value === false || value === "") return null;
9
+ if (value === true) {
10
+ return { rung: BACKDROP_BLUR_DEFAULT_RUNG, length: BACKDROP_BLUR_RUNG_VARS[BACKDROP_BLUR_DEFAULT_RUNG] };
11
+ }
12
+ if (typeof value === "number") return { rung: null, length: `${value}px` };
13
+ const key = String(value).trim();
14
+ const rungVar = BACKDROP_BLUR_RUNG_VARS[key];
15
+ if (rungVar) return { rung: key, length: rungVar };
16
+ return { rung: null, length: key };
17
+ }
18
+ export function useBackdrop(props) {
19
+ const resolved = computed(() => {
20
+ return resolveBackdropBlur(isRef(props) ? props.value : props.backdropBlur);
21
+ });
22
+ const backdropClasses = computed(() => {
23
+ const rung = resolved.value?.rung;
24
+ return rung ? [`${BACKDROP_UTILITY_CLASS_PREFIX}${rung}`] : [];
25
+ });
26
+ const backdropStyles = computed(() => {
27
+ const current = resolved.value;
28
+ if (!current) return [];
29
+ const filter = `blur(${current.length})`;
30
+ return [`backdrop-filter: ${filter}`, `-webkit-backdrop-filter: ${filter}`];
31
+ });
32
+ return { backdropClasses, backdropStyles };
33
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useOpacity = useOpacity;
7
+ var _vue = require("vue");
8
+ var _opacity = require("../../consts/Commons/opacity.const.cjs");
9
+ function resolveNumericOpacity(value) {
10
+ if (value <= _opacity.OPACITY_FRACTION_CEILING) return {
11
+ rung: null,
12
+ css: String(value)
13
+ };
14
+ const rung = String(value);
15
+ const rungVar = _opacity.OPACITY_RUNG_VARS[rung];
16
+ if (rungVar) return {
17
+ rung,
18
+ css: rungVar
19
+ };
20
+ return {
21
+ rung: null,
22
+ css: String(value / _opacity.OPACITY_PERCENT_SCALE)
23
+ };
24
+ }
25
+ function resolveOpacity(value) {
26
+ if (value == null || value === "") return null;
27
+ const numeric = typeof value === "number" ? value : Number(String(value).trim());
28
+ if (Number.isFinite(numeric)) return resolveNumericOpacity(numeric);
29
+ return {
30
+ rung: null,
31
+ css: String(value).trim()
32
+ };
33
+ }
34
+ function useOpacity(props) {
35
+ const resolved = (0, _vue.computed)(() => {
36
+ return resolveOpacity((0, _vue.isRef)(props) ? props.value : props.opacity);
37
+ });
38
+ const opacityClasses = (0, _vue.computed)(() => {
39
+ const rung = resolved.value?.rung;
40
+ return rung ? [`${_opacity.OPACITY_UTILITY_CLASS_PREFIX}${rung}`] : [];
41
+ });
42
+ const opacityStyles = (0, _vue.computed)(() => {
43
+ const current = resolved.value;
44
+ return current ? [`opacity: ${current.css}`] : [];
45
+ });
46
+ return {
47
+ opacityClasses,
48
+ opacityStyles
49
+ };
50
+ }
@@ -0,0 +1,33 @@
1
+ import { Ref } from 'vue';
2
+ import type { IOpacityProps } from '../../interfaces/Commons/opacity.interface';
3
+ import { TOpacity } from '../../types/Commons/opacity.type';
4
+ /*********************************************************
5
+ * useOpacity
6
+ *
7
+ * @description
8
+ * Translates the `opacity` prop into `opacityClasses` (the global utility
9
+ * class, when the value lands on a token rung) AND `opacityStyles`
10
+ * (always an `opacity:` declaration). Both channels are emitted in
11
+ * PARALLEL, never one instead of the other — strategy A, the same
12
+ * contract `useElevation` and `useRounded` honour.
13
+ *
14
+ * @description
15
+ * ⛔ THE STYLE IS NOT REDUNDANT WITH THE CLASS, and dropping it would
16
+ * break the prop on most components. A utility class is `(0,1,0)`; a Vue
17
+ * scoped component rule is `.class[data-v-hash]` = `(0,2,0)` and wins
18
+ * regardless of load order. `OrigamBtn` already declares `opacity` in its
19
+ * own scoped SCSS (`--variant-plain`, `--disabled`), so on Btn the class
20
+ * alone would paint nothing. This is the measured lesson of #514 on the
21
+ * foreground channel, applied here before it can be re-learned.
22
+ *
23
+ * @description
24
+ * REUSES the primitive ladder that already existed
25
+ * (`--origam-opacity---{0,12,26,32,50,60,70,87,100}`, `primitive.css`);
26
+ * this composable declares no token of its own. See
27
+ * {@link IOpacityProps} for why ADR-005's "add a token group" was already
28
+ * half-done.
29
+ ********************************************************/
30
+ export declare function useOpacity(props: IOpacityProps | Ref<TOpacity | undefined>): {
31
+ opacityClasses: import("vue").ComputedRef<string[]>;
32
+ opacityStyles: import("vue").ComputedRef<string[]>;
33
+ };
@@ -0,0 +1,34 @@
1
+ import { computed, isRef } from "vue";
2
+ import {
3
+ OPACITY_FRACTION_CEILING,
4
+ OPACITY_PERCENT_SCALE,
5
+ OPACITY_RUNG_VARS,
6
+ OPACITY_UTILITY_CLASS_PREFIX
7
+ } from "../../consts/Commons/opacity.const.js";
8
+ function resolveNumericOpacity(value) {
9
+ if (value <= OPACITY_FRACTION_CEILING) return { rung: null, css: String(value) };
10
+ const rung = String(value);
11
+ const rungVar = OPACITY_RUNG_VARS[rung];
12
+ if (rungVar) return { rung, css: rungVar };
13
+ return { rung: null, css: String(value / OPACITY_PERCENT_SCALE) };
14
+ }
15
+ function resolveOpacity(value) {
16
+ if (value == null || value === "") return null;
17
+ const numeric = typeof value === "number" ? value : Number(String(value).trim());
18
+ if (Number.isFinite(numeric)) return resolveNumericOpacity(numeric);
19
+ return { rung: null, css: String(value).trim() };
20
+ }
21
+ export function useOpacity(props) {
22
+ const resolved = computed(() => {
23
+ return resolveOpacity(isRef(props) ? props.value : props.opacity);
24
+ });
25
+ const opacityClasses = computed(() => {
26
+ const rung = resolved.value?.rung;
27
+ return rung ? [`${OPACITY_UTILITY_CLASS_PREFIX}${rung}`] : [];
28
+ });
29
+ const opacityStyles = computed(() => {
30
+ const current = resolved.value;
31
+ return current ? [`opacity: ${current.css}`] : [];
32
+ });
33
+ return { opacityClasses, opacityStyles };
34
+ }
@@ -8,6 +8,7 @@ var _vue = require("vue");
8
8
  var _border = require("./border.composable.cjs");
9
9
  var _elevation = require("./elevation.composable.cjs");
10
10
  var _margin = require("./margin.composable.cjs");
11
+ var _opacity = require("./opacity.composable.cjs");
11
12
  var _padding = require("./padding.composable.cjs");
12
13
  var _rounded = require("./rounded.composable.cjs");
13
14
  var _color = require("../../utils/Commons/color.util.cjs");
@@ -44,6 +45,8 @@ function useStateEffect(props, isHover = noopRef, isActive = noopRef, hoverState
44
45
  const padding = pickEffective(() => props.padding, isHover, isActive, hoverState, activeState, "padding");
45
46
  const margin = pickEffective(() => props.margin, isHover, isActive, hoverState, activeState, "margin");
46
47
  const gap = pickEffective(() => props.gap, isHover, isActive, hoverState, activeState, "gap");
48
+ const opacity = pickEffective(() => props.opacity, isHover, isActive, hoverState, activeState, "opacity");
49
+ const borderColor = pickEffective(() => props.borderColor, isHover, isActive, hoverState, activeState, "borderColor");
47
50
  const sameIntent = (a, b) => {
48
51
  return !!a && !!b && a === b && (0, _color.isIntent)(a);
49
52
  };
@@ -105,7 +108,7 @@ function useStateEffect(props, isHover = noopRef, isActive = noopRef, hoverState
105
108
  return border.value;
106
109
  },
107
110
  get borderColor() {
108
- return props.borderColor;
111
+ return borderColor.value;
109
112
  },
110
113
  get borderStyle() {
111
114
  return props.borderStyle;
@@ -225,6 +228,14 @@ function useStateEffect(props, isHover = noopRef, isActive = noopRef, hoverState
225
228
  return [`gap: ${v}`];
226
229
  });
227
230
  const gapClasses = (0, _vue.computed)(() => []);
231
+ const {
232
+ opacityClasses,
233
+ opacityStyles
234
+ } = (0, _opacity.useOpacity)((0, _vue.reactive)({
235
+ get opacity() {
236
+ return opacity.value;
237
+ }
238
+ }));
228
239
  return {
229
240
  // Resolved scalar refs (so consumers can read the effective value)
230
241
  color,
@@ -235,6 +246,8 @@ function useStateEffect(props, isHover = noopRef, isActive = noopRef, hoverState
235
246
  padding,
236
247
  margin,
237
248
  gap,
249
+ opacity,
250
+ borderColor,
238
251
  // Per-axis classes + styles (state-aware)
239
252
  colorClasses,
240
253
  colorStyles,
@@ -249,6 +262,8 @@ function useStateEffect(props, isHover = noopRef, isActive = noopRef, hoverState
249
262
  marginClasses,
250
263
  marginStyles,
251
264
  gapClasses,
252
- gapStyles
265
+ gapStyles,
266
+ opacityClasses,
267
+ opacityStyles
253
268
  };
254
269
  }
@@ -10,8 +10,9 @@ import type { TStateEffectProps } from '../../types/Commons/state-effect.type';
10
10
  * `useBorder` + `useRounded` + `useElevation` + `usePadding` + `useMargin`
11
11
  * que chaque composant visuel devait repeter. Lit les etats `isHover`/
12
12
  * `isActive`/`isDisabled` (et leurs overrides `hoverState`/`activeState`)
13
- * et resout 8 axes state-aware : color, bgColor, border, rounded,
14
- * elevation, padding, margin, gap — chacun avec classes ET styles.
13
+ * et resout 10 axes state-aware : color, bgColor, border, borderColor,
14
+ * rounded, elevation, padding, margin, gap, opacity — chacun avec
15
+ * classes ET styles.
15
16
  * Priorite de resolution par axe : HOVER gagne sur ACTIVE (survoler un
16
17
  * element presse/selectionne montre la surface hover), qui gagne sur la
17
18
  * valeur de repos (`props.xxx`).
@@ -43,6 +44,8 @@ flat?: Ref<boolean> | ComputedRef<boolean>): {
43
44
  padding: ComputedRef<string | number | boolean | undefined>;
44
45
  margin: ComputedRef<string | number | boolean | undefined>;
45
46
  gap: ComputedRef<string | number | boolean | undefined>;
47
+ opacity: ComputedRef<string | number | undefined>;
48
+ borderColor: ComputedRef<string | undefined>;
46
49
  colorClasses: ComputedRef<string[]>;
47
50
  colorStyles: ComputedRef<string[]>;
48
51
  borderClasses: ComputedRef<string[]>;
@@ -57,4 +60,6 @@ flat?: Ref<boolean> | ComputedRef<boolean>): {
57
60
  marginStyles: ComputedRef<string[]>;
58
61
  gapClasses: ComputedRef<string[]>;
59
62
  gapStyles: ComputedRef<string[]>;
63
+ opacityClasses: ComputedRef<string[]>;
64
+ opacityStyles: ComputedRef<string[]>;
60
65
  };
@@ -2,6 +2,7 @@ import { computed, reactive } from "vue";
2
2
  import { useBorder } from "./border.composable.js";
3
3
  import { useElevation } from "./elevation.composable.js";
4
4
  import { useMargin } from "./margin.composable.js";
5
+ import { useOpacity } from "./opacity.composable.js";
5
6
  import { usePadding } from "./padding.composable.js";
6
7
  import { useRounded } from "./rounded.composable.js";
7
8
  import { getForeground, intentBgExpr, isCssColor, isIntent, isParsableColor, isUtilityIntent, parseColor, rawBgExprWithState, tokenForegroundForIntent, tokenStylesForIntent, warnLegacyColor } from "../../utils/Commons/color.util.js";
@@ -45,6 +46,15 @@ export function useStateEffect(props, isHover = noopRef, isActive = noopRef, hov
45
46
  activeState,
46
47
  "gap"
47
48
  );
49
+ const opacity = pickEffective(() => props.opacity, isHover, isActive, hoverState, activeState, "opacity");
50
+ const borderColor = pickEffective(
51
+ () => props.borderColor,
52
+ isHover,
53
+ isActive,
54
+ hoverState,
55
+ activeState,
56
+ "borderColor"
57
+ );
48
58
  const sameIntent = (a, b) => {
49
59
  return !!a && !!b && a === b && isIntent(a);
50
60
  };
@@ -104,7 +114,7 @@ export function useStateEffect(props, isHover = noopRef, isActive = noopRef, hov
104
114
  return border.value;
105
115
  },
106
116
  get borderColor() {
107
- return props.borderColor;
117
+ return borderColor.value;
108
118
  },
109
119
  get borderStyle() {
110
120
  return props.borderStyle;
@@ -222,6 +232,13 @@ export function useStateEffect(props, isHover = noopRef, isActive = noopRef, hov
222
232
  return [`gap: ${v}`];
223
233
  });
224
234
  const gapClasses = computed(() => []);
235
+ const { opacityClasses, opacityStyles } = useOpacity(
236
+ reactive({
237
+ get opacity() {
238
+ return opacity.value;
239
+ }
240
+ })
241
+ );
225
242
  return {
226
243
  // Resolved scalar refs (so consumers can read the effective value)
227
244
  color,
@@ -232,6 +249,8 @@ export function useStateEffect(props, isHover = noopRef, isActive = noopRef, hov
232
249
  padding,
233
250
  margin,
234
251
  gap,
252
+ opacity,
253
+ borderColor,
235
254
  // Per-axis classes + styles (state-aware)
236
255
  colorClasses,
237
256
  colorStyles,
@@ -246,6 +265,8 @@ export function useStateEffect(props, isHover = noopRef, isActive = noopRef, hov
246
265
  marginClasses,
247
266
  marginStyles,
248
267
  gapClasses,
249
- gapStyles
268
+ gapStyles,
269
+ opacityClasses,
270
+ opacityStyles
250
271
  };
251
272
  }
@@ -168,6 +168,18 @@ Object.keys(_dimension).forEach(function (key) {
168
168
  }
169
169
  });
170
170
  });
171
+ var _backdrop = require("./Commons/backdrop.composable.cjs");
172
+ Object.keys(_backdrop).forEach(function (key) {
173
+ if (key === "default" || key === "__esModule") return;
174
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
175
+ if (key in exports && exports[key] === _backdrop[key]) return;
176
+ Object.defineProperty(exports, key, {
177
+ enumerable: true,
178
+ get: function () {
179
+ return _backdrop[key];
180
+ }
181
+ });
182
+ });
171
183
  var _elevation = require("./Commons/elevation.composable.cjs");
172
184
  Object.keys(_elevation).forEach(function (key) {
173
185
  if (key === "default" || key === "__esModule") return;
@@ -180,6 +192,18 @@ Object.keys(_elevation).forEach(function (key) {
180
192
  }
181
193
  });
182
194
  });
195
+ var _opacity = require("./Commons/opacity.composable.cjs");
196
+ Object.keys(_opacity).forEach(function (key) {
197
+ if (key === "default" || key === "__esModule") return;
198
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
199
+ if (key in exports && exports[key] === _opacity[key]) return;
200
+ Object.defineProperty(exports, key, {
201
+ enumerable: true,
202
+ get: function () {
203
+ return _opacity[key];
204
+ }
205
+ });
206
+ });
183
207
  var _group = require("./Commons/group.composable.cjs");
184
208
  Object.keys(_group).forEach(function (key) {
185
209
  if (key === "default" || key === "__esModule") return;
@@ -11,7 +11,9 @@ export * from './Commons/date-picker-calendar.composable';
11
11
  export * from './Commons/date.composable';
12
12
  export * from './Commons/density.composable';
13
13
  export * from './Commons/dimension.composable';
14
+ export * from './Commons/backdrop.composable';
14
15
  export * from './Commons/elevation.composable';
16
+ export * from './Commons/opacity.composable';
15
17
  export * from './Commons/group.composable';
16
18
  export * from './Commons/groupItem.composable';
17
19
  export * from './Commons/groupSiblingLink.composable';
@@ -11,7 +11,9 @@ export * from "./Commons/date-picker-calendar.composable.js";
11
11
  export * from "./Commons/date.composable.js";
12
12
  export * from "./Commons/density.composable.js";
13
13
  export * from "./Commons/dimension.composable.js";
14
+ export * from "./Commons/backdrop.composable.js";
14
15
  export * from "./Commons/elevation.composable.js";
16
+ export * from "./Commons/opacity.composable.js";
15
17
  export * from "./Commons/group.composable.js";
16
18
  export * from "./Commons/groupItem.composable.js";
17
19
  export * from "./Commons/groupSiblingLink.composable.js";
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BACKDROP_UTILITY_CLASS_PREFIX = exports.BACKDROP_BLUR_RUNG_VARS = exports.BACKDROP_BLUR_DEFAULT_RUNG = void 0;
7
+ const BACKDROP_BLUR_RUNG_VARS = exports.BACKDROP_BLUR_RUNG_VARS = {
8
+ xs: "var(--origam-blur---xs, 4px)",
9
+ sm: "var(--origam-blur---sm, 6px)",
10
+ md: "var(--origam-blur---md, 8px)",
11
+ lg: "var(--origam-blur---lg, 16px)",
12
+ xl: "var(--origam-blur---xl, 24px)"
13
+ };
14
+ const BACKDROP_BLUR_DEFAULT_RUNG = exports.BACKDROP_BLUR_DEFAULT_RUNG = "md";
15
+ const BACKDROP_UTILITY_CLASS_PREFIX = exports.BACKDROP_UTILITY_CLASS_PREFIX = "origam--backdrop-blur-";
@@ -0,0 +1,47 @@
1
+ /*********************************************************
2
+ * BACKDROP_BLUR_RUNG_VARS
3
+ *
4
+ * @description
5
+ * The primitive blur ladder, mapped to the `var()` expression
6
+ * `useBackdrop` wraps in `blur(...)`. Keys are the rung names as they
7
+ * appear in the token suffix and in the utility class.
8
+ *
9
+ * @description
10
+ * ⛔ WHOLE LITERAL STRINGS, same reason as `OPACITY_RUNG_VARS`: the
11
+ * dormant direction of `token-var-channels` greps `.ts` sources for the
12
+ * literal `var(--origam-…)` text, and these five tokens have NO other
13
+ * reader in the repo yet — no component consumes `useBackdrop` until
14
+ * ADR-005's lot 4 converts `ghost`. Concatenating the name would make all
15
+ * five read as dormant and turn the guard red on a correct change.
16
+ *
17
+ * @description
18
+ * RUNG VALUES ARE MEASURED, NOT INVENTED. Counted over the `blur(Npx)`
19
+ * literals in `packages/ds/src` + `packages/marketing/src`:
20
+ * `8px` x25, `16px` x21, `6px` x17, `20px` x14, `24px` x7, `12px` x7,
21
+ * `28px` x5. The five rungs below sit on that distribution rather than on
22
+ * a tidy doubling, which is why `sm` is `6px` and not `4px`.
23
+ ********************************************************/
24
+ export declare const BACKDROP_BLUR_RUNG_VARS: Readonly<Record<string, string>>;
25
+ /*********************************************************
26
+ * BACKDROP_BLUR_DEFAULT_RUNG
27
+ *
28
+ * @description
29
+ * Rung used when `backdropBlur` is passed as a bare `true`.
30
+ *
31
+ * @description
32
+ * `md` is `8px`, which is both the most frequent blur literal in the repo
33
+ * and the exact value `OrigamBtn`'s `ghost` rule paints today
34
+ * (`backdrop-filter: var(--origam-btn---backdrop-filter-ghost, blur(8px))`).
35
+ * ADR-005 lot 4 can therefore convert `ghost` to `backdropBlur: 'md'`
36
+ * with no rendering change to justify.
37
+ ********************************************************/
38
+ export declare const BACKDROP_BLUR_DEFAULT_RUNG = "md";
39
+ /*********************************************************
40
+ * BACKDROP_UTILITY_CLASS_PREFIX
41
+ *
42
+ * @description
43
+ * Root of the global backdrop utility classes emitted by `useBackdrop`
44
+ * (`.origam--backdrop-blur-md`, ...). Declared in
45
+ * `src/assets/css/tokens/origam-utilities.css`.
46
+ ********************************************************/
47
+ export declare const BACKDROP_UTILITY_CLASS_PREFIX = "origam--backdrop-blur-";
@@ -0,0 +1,9 @@
1
+ export const BACKDROP_BLUR_RUNG_VARS = {
2
+ xs: "var(--origam-blur---xs, 4px)",
3
+ sm: "var(--origam-blur---sm, 6px)",
4
+ md: "var(--origam-blur---md, 8px)",
5
+ lg: "var(--origam-blur---lg, 16px)",
6
+ xl: "var(--origam-blur---xl, 24px)"
7
+ };
8
+ export const BACKDROP_BLUR_DEFAULT_RUNG = "md";
9
+ export const BACKDROP_UTILITY_CLASS_PREFIX = "origam--backdrop-blur-";
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OPACITY_UTILITY_CLASS_PREFIX = exports.OPACITY_RUNG_VARS = exports.OPACITY_PERCENT_SCALE = exports.OPACITY_FRACTION_CEILING = void 0;
7
+ const OPACITY_RUNG_VARS = exports.OPACITY_RUNG_VARS = {
8
+ "0": "var(--origam-opacity---0, 0)",
9
+ "12": "var(--origam-opacity---12, 0.12)",
10
+ "26": "var(--origam-opacity---26, 0.26)",
11
+ "32": "var(--origam-opacity---32, 0.32)",
12
+ "50": "var(--origam-opacity---50, 0.5)",
13
+ "60": "var(--origam-opacity---60, 0.6)",
14
+ "70": "var(--origam-opacity---70, 0.7)",
15
+ "87": "var(--origam-opacity---87, 0.87)",
16
+ "100": "var(--origam-opacity---100, 1)"
17
+ };
18
+ const OPACITY_UTILITY_CLASS_PREFIX = exports.OPACITY_UTILITY_CLASS_PREFIX = "origam--opacity-";
19
+ const OPACITY_FRACTION_CEILING = exports.OPACITY_FRACTION_CEILING = 1;
20
+ const OPACITY_PERCENT_SCALE = exports.OPACITY_PERCENT_SCALE = 100;