origam 2.17.1 → 2.18.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.
Files changed (207) hide show
  1. package/CHANGELOG.md +690 -1
  2. package/dist/src/assets/css/main.css +1 -1
  3. package/dist/src/assets/css/tokens/dark.css +119 -20
  4. package/dist/src/assets/css/tokens/light.css +46 -10
  5. package/dist/src/assets/locales/en.json +21 -6
  6. package/dist/src/assets/locales/fr.json +21 -6
  7. package/dist/src/assets/scss/main.scss +10 -2
  8. package/dist/src/assets/scss/tokens/_dark.scss +2843 -10
  9. package/dist/src/assets/scss/tokens/_light.scss +46 -10
  10. package/dist/src/components/Alert/OrigamAlert.vue +6 -6
  11. package/dist/src/components/Avatar/OrigamAvatar.vue +15 -2
  12. package/dist/src/components/Badge/OrigamBadge.vue +7 -7
  13. package/dist/src/components/Breadcrumb/OrigamBreadcrumbItem.vue +23 -4
  14. package/dist/src/components/Btn/OrigamBtn.vue +21 -3
  15. package/dist/src/components/Btn/OrigamBtnGroup.vue +1 -1
  16. package/dist/src/components/Calendar/OrigamCalendar.vue +1 -1
  17. package/dist/src/components/Card/OrigamCard.vue +2 -0
  18. package/dist/src/components/Card/OrigamCardHeader.vue +7 -7
  19. package/dist/src/components/Carousel/OrigamCarousel.vue +14 -1
  20. package/dist/src/components/Chart/OrigamChartBoxPlot.vue +1 -1
  21. package/dist/src/components/Chart/OrigamChartBullet.vue +3 -2
  22. package/dist/src/components/Chart/OrigamChartCandlestick.vue +2 -2
  23. package/dist/src/components/Chart/OrigamChartCartesian.vue +49 -4
  24. package/dist/src/components/Chart/OrigamChartLegend.vue +39 -18
  25. package/dist/src/components/Chart/OrigamChartPareto.vue +7 -1
  26. package/dist/src/components/Chart/OrigamChartPictorial.vue +2 -2
  27. package/dist/src/components/Chart/OrigamChartRadar.vue +3 -1
  28. package/dist/src/components/Chart/OrigamChartSparkline.vue +3 -1
  29. package/dist/src/components/Chart/OrigamChartStreamgraph.vue +2 -1
  30. package/dist/src/components/Checkbox/OrigamCheckbox.vue +2 -0
  31. package/dist/src/components/Checkbox/OrigamCheckboxGroup.vue +36 -11
  32. package/dist/src/components/Chip/OrigamChip.vue +19 -4
  33. package/dist/src/components/Code/OrigamCode.vue +20 -3
  34. package/dist/src/components/ColorPickerField/OrigamColorPickerField.vue +30 -5
  35. package/dist/src/components/CommandPalette/OrigamCommandPalette.vue +3 -3
  36. package/dist/src/components/ConfirmWrapper/OrigamConfirmWrapper.vue +6 -6
  37. package/dist/src/components/ContextualMenu/OrigamContextualMenu.vue +0 -4
  38. package/dist/src/components/DataList/OrigamDataList.vue +2 -0
  39. package/dist/src/components/DataList/OrigamDataText.vue +6 -6
  40. package/dist/src/components/DataList/OrigamDataTitle.vue +6 -6
  41. package/dist/src/components/DataTable/OrigamDataTableHeaderCell.vue +1 -1
  42. package/dist/src/components/DataTable/OrigamDataTableHeadersCell.vue +4 -1
  43. package/dist/src/components/DatePicker/OrigamDatePicker.vue +2 -0
  44. package/dist/src/components/DatePicker/OrigamDatePickerHeader.vue +6 -6
  45. package/dist/src/components/DatePickerField/OrigamDatePickerField.vue +21 -1
  46. package/dist/src/components/Dialog/OrigamDialog.vue +25 -0
  47. package/dist/src/components/Dialog/OrigamDialogConfirmation.vue +6 -0
  48. package/dist/src/components/ExpansionPanel/OrigamExpansionPanel.vue +2 -0
  49. package/dist/src/components/ExpansionPanel/OrigamExpansionPanelHeader.vue +6 -6
  50. package/dist/src/components/Field/OrigamField.vue +47 -15
  51. package/dist/src/components/FileField/OrigamFileField.vue +5 -1
  52. package/dist/src/components/Icon/OrigamSvgIcon.vue +3 -1
  53. package/dist/src/components/Img/OrigamImg.vue +9 -2
  54. package/dist/src/components/InfiniteScroll/OrigamInfiniteScroll.vue +34 -18
  55. package/dist/src/components/InlineEdit/OrigamInlineEdit.vue +46 -5
  56. package/dist/src/components/Input/OrigamInput.vue +6 -6
  57. package/dist/src/components/List/OrigamListGroup.vue +4 -0
  58. package/dist/src/components/List/OrigamListItem.vue +68 -4
  59. package/dist/src/components/Masonry/OrigamMasonry.vue +18 -2
  60. package/dist/src/components/Menu/OrigamMenu.vue +79 -9
  61. package/dist/src/components/NumberField/OrigamNumberField.vue +13 -3
  62. package/dist/src/components/OtpInputField/OrigamOtpInputField.vue +35 -11
  63. package/dist/src/components/PasswordField/OrigamPasswordField.vue +5 -1
  64. package/dist/src/components/Radio/OrigamRadio.vue +2 -0
  65. package/dist/src/components/Radio/OrigamRadioGroup.vue +36 -11
  66. package/dist/src/components/RatingField/OrigamRatingField.vue +58 -7
  67. package/dist/src/components/RatingField/OrigamRatingFieldItem.vue +78 -30
  68. package/dist/src/components/Select/OrigamSelect.vue +44 -21
  69. package/dist/src/components/SliderField/OrigamSliderField.vue +20 -10
  70. package/dist/src/components/Snackbar/OrigamSnackbarGroup.vue +1 -1
  71. package/dist/src/components/Switch/OrigamSwitch.vue +2 -0
  72. package/dist/src/components/Tabs/OrigamTab.vue +7 -4
  73. package/dist/src/components/Tabs/OrigamTabPanel.vue +4 -2
  74. package/dist/src/components/Tabs/OrigamTabs.vue +7 -5
  75. package/dist/src/components/TextField/OrigamTextField.vue +5 -1
  76. package/dist/src/components/TextareaField/OrigamTextareaField.vue +5 -1
  77. package/dist/src/components/Transition/OrigamExpandX.vue +19 -3
  78. package/dist/src/components/Transition/OrigamExpandY.vue +19 -3
  79. package/dist/src/components/Transition/OrigamTranslateScale.vue +26 -4
  80. package/dist/src/components/Video/OrigamVideo.vue +3 -2
  81. package/dist/src/components/Window/OrigamWindow.vue +20 -3
  82. package/dist/src/composables/Commons/accessibleCommand.composable.cjs +26 -0
  83. package/dist/src/composables/Commons/accessibleCommand.composable.d.ts +78 -0
  84. package/dist/src/composables/Commons/accessibleCommand.composable.js +20 -0
  85. package/dist/src/composables/Commons/activator.composable.cjs +10 -1
  86. package/dist/src/composables/Commons/activator.composable.js +11 -2
  87. package/dist/src/composables/Commons/adjacent.composable.cjs +17 -0
  88. package/dist/src/composables/Commons/adjacent.composable.d.ts +12 -0
  89. package/dist/src/composables/Commons/adjacent.composable.js +17 -0
  90. package/dist/src/composables/Commons/adjacentInner.composable.cjs +20 -0
  91. package/dist/src/composables/Commons/adjacentInner.composable.d.ts +24 -5
  92. package/dist/src/composables/Commons/adjacentInner.composable.js +20 -0
  93. package/dist/src/composables/Commons/audio.composable.cjs +14 -1
  94. package/dist/src/composables/Commons/audio.composable.js +14 -1
  95. package/dist/src/composables/Commons/backButton.composable.cjs +3 -1
  96. package/dist/src/composables/Commons/backButton.composable.js +3 -1
  97. package/dist/src/composables/Commons/border.composable.d.ts +13 -0
  98. package/dist/src/composables/Commons/colorEffect.composable.cjs +58 -46
  99. package/dist/src/composables/Commons/colorEffect.composable.d.ts +10 -5
  100. package/dist/src/composables/Commons/colorEffect.composable.js +70 -46
  101. package/dist/src/composables/Commons/createLayout.composable.cjs +21 -12
  102. package/dist/src/composables/Commons/createLayout.composable.js +21 -12
  103. package/dist/src/composables/Commons/delay.composable.d.ts +16 -0
  104. package/dist/src/composables/Commons/dimension.composable.d.ts +11 -0
  105. package/dist/src/composables/Commons/elevation.composable.cjs +6 -2
  106. package/dist/src/composables/Commons/elevation.composable.d.ts +37 -1
  107. package/dist/src/composables/Commons/elevation.composable.js +7 -2
  108. package/dist/src/composables/Commons/goTo.composable.cjs +4 -2
  109. package/dist/src/composables/Commons/goTo.composable.js +5 -3
  110. package/dist/src/composables/Commons/group.composable.cjs +14 -14
  111. package/dist/src/composables/Commons/group.composable.js +14 -14
  112. package/dist/src/composables/Commons/hotkey.composable.d.ts +18 -7
  113. package/dist/src/composables/Commons/hydration.composable.d.ts +8 -0
  114. package/dist/src/composables/Commons/link.composable.d.ts +20 -0
  115. package/dist/src/composables/Commons/locationStrategies.composable.d.ts +17 -0
  116. package/dist/src/composables/Commons/message.composable.d.ts +19 -5
  117. package/dist/src/composables/Commons/position.composable.d.ts +17 -6
  118. package/dist/src/composables/Commons/refs.composable.d.ts +11 -5
  119. package/dist/src/composables/Commons/rounded.composable.d.ts +11 -1
  120. package/dist/src/composables/Commons/scrolling.composable.cjs +15 -12
  121. package/dist/src/composables/Commons/scrolling.composable.js +15 -12
  122. package/dist/src/composables/Commons/size.composable.d.ts +15 -0
  123. package/dist/src/composables/Commons/ssrBoot.composable.cjs +9 -1
  124. package/dist/src/composables/Commons/ssrBoot.composable.js +10 -2
  125. package/dist/src/composables/Commons/stack.composable.cjs +13 -1
  126. package/dist/src/composables/Commons/stack.composable.js +13 -1
  127. package/dist/src/composables/Commons/theme-props-resolver.composable.cjs +41 -32
  128. package/dist/src/composables/Commons/theme-props-resolver.composable.js +41 -32
  129. package/dist/src/composables/Commons/validation.composable.cjs +3 -3
  130. package/dist/src/composables/Commons/validation.composable.js +3 -3
  131. package/dist/src/composables/Commons/virtual.composable.cjs +24 -8
  132. package/dist/src/composables/Commons/virtual.composable.js +24 -8
  133. package/dist/src/composables/Masonry/masonry.composable.cjs +18 -11
  134. package/dist/src/composables/Masonry/masonry.composable.js +18 -11
  135. package/dist/src/composables/Parallax/parallax.composable.cjs +1 -1
  136. package/dist/src/composables/Parallax/parallax.composable.js +1 -1
  137. package/dist/src/composables/index.cjs +36 -0
  138. package/dist/src/composables/index.d.ts +3 -0
  139. package/dist/src/composables/index.js +3 -0
  140. package/dist/src/consts/Chart/chart-cartesian.const.cjs +5 -2
  141. package/dist/src/consts/Chart/chart-cartesian.const.d.ts +42 -0
  142. package/dist/src/consts/Chart/chart-cartesian.const.js +3 -0
  143. package/dist/src/consts/Commons/elevation.const.cjs +5 -1
  144. package/dist/src/consts/Commons/elevation.const.d.ts +52 -2
  145. package/dist/src/consts/Commons/elevation.const.js +4 -0
  146. package/dist/src/consts/Commons/ripple.const.cjs +13 -3
  147. package/dist/src/consts/Commons/ripple.const.js +13 -3
  148. package/dist/src/consts/RatingField/rating-field.const.cjs +10 -0
  149. package/dist/src/consts/RatingField/rating-field.const.d.ts +36 -0
  150. package/dist/src/consts/RatingField/rating-field.const.js +12 -0
  151. package/dist/src/consts/index.cjs +11 -0
  152. package/dist/src/consts/index.d.ts +1 -0
  153. package/dist/src/consts/index.js +1 -0
  154. package/dist/src/directives/ClickOutside/clickOutside.directive.cjs +2 -0
  155. package/dist/src/directives/ClickOutside/clickOutside.directive.js +2 -0
  156. package/dist/src/directives/Ripple/ripple.directive.cjs +2 -0
  157. package/dist/src/directives/Ripple/ripple.directive.js +2 -0
  158. package/dist/src/enums/Commons/color.enum.cjs +0 -1
  159. package/dist/src/enums/Commons/color.enum.d.ts +14 -5
  160. package/dist/src/enums/Commons/color.enum.js +0 -1
  161. package/dist/src/enums/Sheet/sheet.enum.d.ts +1 -1
  162. package/dist/src/interfaces/Chart/chart-cartesian.interface.d.ts +6 -2
  163. package/dist/src/interfaces/Commons/activator.interface.d.ts +3 -2
  164. package/dist/src/interfaces/Commons/adjacent.interface.d.ts +29 -0
  165. package/dist/src/interfaces/Commons/group.interface.d.ts +13 -2
  166. package/dist/src/interfaces/Commons/ripple.interface.d.ts +16 -0
  167. package/dist/src/interfaces/Commons/scroll.interface.d.ts +3 -2
  168. package/dist/src/interfaces/DataTable/data-table-header.interface.d.ts +2 -2
  169. package/dist/src/interfaces/DatePicker/date-picker-month.interface.d.ts +2 -1
  170. package/dist/src/interfaces/Menu/menu.interface.d.ts +28 -1
  171. package/dist/src/interfaces/OtpInputField/otp-input-field.interface.d.ts +21 -1
  172. package/dist/src/interfaces/RatingField/rating-field-item.interface.d.ts +16 -1
  173. package/dist/src/interfaces/index.cjs +11 -0
  174. package/dist/src/interfaces/index.d.ts +1 -0
  175. package/dist/src/interfaces/index.js +1 -0
  176. package/dist/src/themes/origam.theme.cjs +8 -14
  177. package/dist/src/themes/origam.theme.js +6 -8
  178. package/dist/src/types/Commons/color.type.d.ts +4 -3
  179. package/dist/src/types/Commons/commons.type.d.ts +33 -0
  180. package/dist/src/types/Commons/theme.type.d.ts +2 -1
  181. package/dist/src/types/Sheet/sheet.type.d.ts +2 -1
  182. package/dist/src/types/index.cjs +22 -0
  183. package/dist/src/types/index.d.ts +2 -0
  184. package/dist/src/types/index.js +2 -0
  185. package/dist/src/types/tokens.type.d.ts +1 -1
  186. package/dist/src/utils/Commons/a11y.util.cjs +35 -0
  187. package/dist/src/utils/Commons/a11y.util.d.ts +63 -0
  188. package/dist/src/utils/Commons/a11y.util.js +33 -0
  189. package/dist/src/utils/Commons/clickOutside.util.cjs +5 -1
  190. package/dist/src/utils/Commons/clickOutside.util.js +5 -1
  191. package/dist/src/utils/Commons/color.util.cjs +10 -5
  192. package/dist/src/utils/Commons/color.util.d.ts +34 -5
  193. package/dist/src/utils/Commons/color.util.js +9 -5
  194. package/dist/src/utils/Commons/goTo.util.cjs +31 -14
  195. package/dist/src/utils/Commons/goTo.util.d.ts +1 -1
  196. package/dist/src/utils/Commons/goTo.util.js +31 -16
  197. package/dist/src/utils/Commons/location.util.cjs +18 -3
  198. package/dist/src/utils/Commons/location.util.js +18 -3
  199. package/dist/src/utils/Commons/ripple.util.cjs +5 -1
  200. package/dist/src/utils/Commons/ripple.util.js +5 -1
  201. package/dist/src/utils/index.cjs +11 -0
  202. package/dist/src/utils/index.d.ts +1 -0
  203. package/dist/src/utils/index.js +1 -0
  204. package/package.json +13 -2
  205. package/dist/src/types/Commons/locale.type.cjs +0 -1
  206. package/dist/src/types/Commons/locale.type.d.ts +0 -0
  207. package/dist/src/types/Commons/locale.type.js +0 -0
@@ -3,9 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.UTILITY_SHADOW_RUNGS = exports.SHADOW_UTILITY_CLASS_PREFIX = exports.SHADOW_TOKEN_PREFIX = exports.ORIGAM_SHADOW_RUNGS = exports.MATERIAL_ELEVATION_TOP_RUNG = exports.MATERIAL_ELEVATION_LADDER = exports.ELEVATION_LEGACY_BG_COLOR = exports.ELEVATION_BG_COLOR_DEPRECATION_WARNING = exports.ELEVATED_CLASS_SUFFIX = exports.CUSTOM_BOX_SHADOW_REGEX = void 0;
6
+ exports.UTILITY_SHADOW_RUNGS = exports.SHADOW_UTILITY_CLASS_PREFIX = exports.SHADOW_TOKEN_PREFIX = exports.SHADOW_RUNG_FALLBACK = exports.ORIGAM_SHADOW_RUNGS = exports.MATERIAL_ELEVATION_TOP_RUNG = exports.MATERIAL_ELEVATION_LADDER = exports.ELEVATION_LEGACY_BG_COLOR = exports.ELEVATION_BG_COLOR_DEPRECATION_WARNING = exports.ELEVATED_CLASS_SUFFIX = exports.CUSTOM_BOX_SHADOW_REGEX = void 0;
7
7
  const ORIGAM_SHADOW_RUNGS = exports.ORIGAM_SHADOW_RUNGS = /* @__PURE__ */new Set(["none", "xs", "sm", "md", "lg", "xl", "2xl", "3xl"]);
8
8
  const UTILITY_SHADOW_RUNGS = exports.UTILITY_SHADOW_RUNGS = /* @__PURE__ */new Set(["none", "xs", "sm", "md", "lg", "xl"]);
9
+ const SHADOW_RUNG_FALLBACK = exports.SHADOW_RUNG_FALLBACK = {
10
+ "2xl": "var(--origam-shadow---xl)",
11
+ "3xl": "var(--origam-shadow---xl)"
12
+ };
9
13
  const MATERIAL_ELEVATION_LADDER = exports.MATERIAL_ELEVATION_LADDER = [{
10
14
  maxLevel: 0,
11
15
  rung: "none"
@@ -18,10 +18,60 @@ export declare const ORIGAM_SHADOW_RUNGS: ReadonlySet<string>;
18
18
  * @description
19
19
  * Subset of shadow rungs for which a global utility class exists in
20
20
  * `src/assets/css/tokens/origam-utilities.css` (Phase 1 manifest).
21
- * `2xl` and `3xl` are not yet emitted as utilities — they fall back
22
- * to the inline-style path.
21
+ * `2xl` and `3xl` are not emitted as utilities — they take the
22
+ * inline-style path instead.
23
+ *
24
+ * @description
25
+ * ⚠️ This comment used to say they « fall back » to that path. The word
26
+ * was reassuring for nothing: the inline path emitted a BARE
27
+ * `var(--origam-shadow---2xl)`, and no sheet declares that token, so the
28
+ * repli led to an unresolvable reference rather than to a value (#813).
29
+ * The declaration then lost at computed-value time — and since it had
30
+ * ALREADY won the cascade, it did not cede to the component's own rule,
31
+ * it ERASED it. See {@link SHADOW_RUNG_FALLBACK}.
23
32
  ********************************************************/
24
33
  export declare const UTILITY_SHADOW_RUNGS: ReadonlySet<string>;
34
+ /*********************************************************
35
+ * SHADOW_RUNG_FALLBACK
36
+ *
37
+ * @description
38
+ * Second argument of the `var()` emitted by `useElevation`, for the rungs
39
+ * `ORIGAM_SHADOW_RUNGS` accepts but NO sheet declares. Keyed by rung; a
40
+ * rung absent from this map is emitted as a bare `var()` because its token
41
+ * genuinely exists.
42
+ *
43
+ * @description
44
+ * ⛔ #813 — `2xl` and `3xl` are accepted by the prop and declared nowhere.
45
+ * Measured in Chromium: a component rule `rgba(0,0,0,.9) 0 1px 2px`
46
+ * computed `none` once `elevation="2xl"` was passed. The unresolvable
47
+ * reference does not merely fail to paint, it DESTROYS the shadow the
48
+ * component already had.
49
+ *
50
+ * @description
51
+ * The fallback targets `xl`, the top declared rung. Consequence, and it is
52
+ * deliberate: **`2xl` and `3xl` render exactly like `xl`** — they stop
53
+ * erasing, they do not become two extra rungs. Declaring real `2xl` / `3xl`
54
+ * tokens is a DESIGN decision, not a bug fix: the ladder has no derivable
55
+ * progression (`md` is a different family — a 1px ring plus a soft shadow)
56
+ * and `xl` is already the top of the Material 0..24 scale this DS maps
57
+ * (`MATERIAL_ELEVATION_TOP_RUNG`). There is no rung above to borrow from.
58
+ * The day those tokens are declared, this fallback goes inert on its own —
59
+ * nothing here has to be undone.
60
+ *
61
+ * @description
62
+ * ⚠️ The fallback MUST be a real shadow. `var(--origam-shadow---2xl, none)`
63
+ * was measured too: the declaration becomes valid but computes `none`,
64
+ * i.e. visually identical to the defect. A `none` fallback fixes nothing.
65
+ *
66
+ * @description
67
+ * Mirrors the intent of `UTILITY_RADIUS_FALLBACK` (`spacing.const.ts`),
68
+ * which is why `useRounded` never had this defect. It deliberately does NOT
69
+ * mirror its SHAPE: that map gives every rung a hard literal (`md: '8px'`),
70
+ * which for a 3-layer box-shadow would mean copying the token values into
71
+ * TypeScript — duplication plus guaranteed drift the first time a designer
72
+ * retunes `xl`. A var-to-var fallback carries no value at all.
73
+ ********************************************************/
74
+ export declare const SHADOW_RUNG_FALLBACK: Readonly<Record<string, string>>;
25
75
  /*********************************************************
26
76
  * MATERIAL_ELEVATION_LADDER
27
77
  *
@@ -16,6 +16,10 @@ export const UTILITY_SHADOW_RUNGS = /* @__PURE__ */ new Set([
16
16
  "lg",
17
17
  "xl"
18
18
  ]);
19
+ export const SHADOW_RUNG_FALLBACK = {
20
+ "2xl": "var(--origam-shadow---xl)",
21
+ "3xl": "var(--origam-shadow---xl)"
22
+ };
19
23
  export const MATERIAL_ELEVATION_LADDER = [
20
24
  { maxLevel: 0, rung: "none" },
21
25
  { maxLevel: 1, rung: "xs" },
@@ -36,6 +36,16 @@ const RIPPLE_OPTIONS = exports.RIPPLE_OPTIONS = {
36
36
  x: 0,
37
37
  y: 0
38
38
  };
39
+ function scheduleRippleTimer(el, cb, delay) {
40
+ const store = el._ripple;
41
+ if (!store) return;
42
+ const id = setTimeout(() => {
43
+ store.timers?.delete(id);
44
+ cb();
45
+ }, delay);
46
+ store.timers ??= /* @__PURE__ */new Set();
47
+ store.timers.add(id);
48
+ }
39
49
  const RIPPLES = exports.RIPPLES = {
40
50
  show(e, el, value = {}) {
41
51
  if (!el?._ripple?.enabled) {
@@ -70,7 +80,7 @@ const RIPPLES = exports.RIPPLES = {
70
80
  animation.classList.add("origam-ripple__animation--visible");
71
81
  (0, _ripple.rippleTransform)(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
72
82
  animation.dataset.activated = String(performance.now());
73
- setTimeout(() => {
83
+ scheduleRippleTimer(el, () => {
74
84
  animation.classList.remove("origam-ripple__animation--enter");
75
85
  animation.classList.add("origam-ripple__animation--in");
76
86
  (0, _ripple.rippleTransform)(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
@@ -84,10 +94,10 @@ const RIPPLES = exports.RIPPLES = {
84
94
  if (animation.dataset?.isHiding) return;else animation.dataset.isHiding = "true";
85
95
  const diff = performance.now() - Number(animation.dataset.activated);
86
96
  const delay = Math.max(250 - diff, 0);
87
- setTimeout(() => {
97
+ scheduleRippleTimer(el, () => {
88
98
  animation.classList.remove("origam-ripple__animation--in");
89
99
  animation.classList.add("origam-ripple__animation--out");
90
- setTimeout(() => {
100
+ scheduleRippleTimer(el, () => {
91
101
  const ripples2 = el.getElementsByClassName("origam-ripple__animation");
92
102
  if (ripples2.length === 1 && el.dataset.previousPosition) {
93
103
  el.style.position = el.dataset.previousPosition;
@@ -30,6 +30,16 @@ export const RIPPLE_OPTIONS = {
30
30
  x: 0,
31
31
  y: 0
32
32
  };
33
+ function scheduleRippleTimer(el, cb, delay) {
34
+ const store = el._ripple;
35
+ if (!store) return;
36
+ const id = setTimeout(() => {
37
+ store.timers?.delete(id);
38
+ cb();
39
+ }, delay);
40
+ store.timers ??= /* @__PURE__ */ new Set();
41
+ store.timers.add(id);
42
+ }
33
43
  export const RIPPLES = {
34
44
  show(e, el, value = {}) {
35
45
  if (!el?._ripple?.enabled) {
@@ -57,7 +67,7 @@ export const RIPPLES = {
57
67
  animation.classList.add("origam-ripple__animation--visible");
58
68
  rippleTransform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
59
69
  animation.dataset.activated = String(performance.now());
60
- setTimeout(() => {
70
+ scheduleRippleTimer(el, () => {
61
71
  animation.classList.remove("origam-ripple__animation--enter");
62
72
  animation.classList.add("origam-ripple__animation--in");
63
73
  rippleTransform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
@@ -72,10 +82,10 @@ export const RIPPLES = {
72
82
  else animation.dataset.isHiding = "true";
73
83
  const diff = performance.now() - Number(animation.dataset.activated);
74
84
  const delay = Math.max(250 - diff, 0);
75
- setTimeout(() => {
85
+ scheduleRippleTimer(el, () => {
76
86
  animation.classList.remove("origam-ripple__animation--in");
77
87
  animation.classList.add("origam-ripple__animation--out");
78
- setTimeout(() => {
88
+ scheduleRippleTimer(el, () => {
79
89
  const ripples2 = el.getElementsByClassName("origam-ripple__animation");
80
90
  if (ripples2.length === 1 && el.dataset.previousPosition) {
81
91
  el.style.position = el.dataset.previousPosition;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RATING_FIELD_ROOT_SELECTOR = exports.RATING_FIELD_MUTATING_KEYS = exports.RATING_FIELD_ENABLED_RADIO_SELECTOR = void 0;
7
+ var _hotkey = require("../../enums/Commons/hotkey.enum.cjs");
8
+ const RATING_FIELD_MUTATING_KEYS = exports.RATING_FIELD_MUTATING_KEYS = [_hotkey.KEYBOARD_VALUES.UP, _hotkey.KEYBOARD_VALUES.DOWN, _hotkey.KEYBOARD_VALUES.LEFT, _hotkey.KEYBOARD_VALUES.RIGHT, _hotkey.KEYBOARD_VALUES.HOME, _hotkey.KEYBOARD_VALUES.END, _hotkey.KEYBOARD_VALUES.EMPTY];
9
+ const RATING_FIELD_ENABLED_RADIO_SELECTOR = exports.RATING_FIELD_ENABLED_RADIO_SELECTOR = 'input[type="radio"]:not(:disabled)';
10
+ const RATING_FIELD_ROOT_SELECTOR = exports.RATING_FIELD_ROOT_SELECTOR = ".origam-rating-field";
@@ -0,0 +1,36 @@
1
+ /*********************************************************
2
+ * RATING_FIELD_MUTATING_KEYS
3
+ *
4
+ * @description
5
+ * Keys whose NATIVE default action changes the selection of a radio group.
6
+ * Measured in Chromium on a bare `<input type="radio">` group, no JS at all:
7
+ * `ArrowRight` / `ArrowDown` move focus AND check the next radio (wrapping),
8
+ * `ArrowLeft` / `ArrowUp` do the same backwards, `Space` checks the focused
9
+ * radio when it is not already checked, and `Home` / `End` / `Enter` are
10
+ * no-ops.
11
+ *
12
+ * @description
13
+ * All of the above are cancelable from a `keydown` listener — verified: with
14
+ * `preventDefault()` on every `Arrow*`, focus and `:checked` both stayed put.
15
+ * That is what lets `readonly` keep the group REACHABLE (focus visible,
16
+ * announced) while staying inert, instead of dropping it out of the tab order.
17
+ *
18
+ * @description
19
+ * ⚠️ `Space` is `' '` in `KeyboardEvent.key`, NOT `'Space'` — that spelling is
20
+ * `KeyboardEvent.code`. `KEYBOARD_VALUES.SPACE` carries the `code` form and
21
+ * would never match here; `KEYBOARD_VALUES.EMPTY` is the `key` one.
22
+ ********************************************************/
23
+ export declare const RATING_FIELD_MUTATING_KEYS: string[];
24
+ /*********************************************************
25
+ * RATING_FIELD_ENABLED_RADIO_SELECTOR / RATING_FIELD_ROOT_SELECTOR
26
+ *
27
+ * @description
28
+ * The radios a keyboard user can actually reach inside the group. `:disabled`
29
+ * radios are excluded by the browser from both the tab order and the arrow
30
+ * cycle, so `Home` / `End` must skip them too.
31
+ *
32
+ * @description
33
+ * The root BEM block, used to walk up from a focused radio to its group.
34
+ ********************************************************/
35
+ export declare const RATING_FIELD_ENABLED_RADIO_SELECTOR = "input[type=\"radio\"]:not(:disabled)";
36
+ export declare const RATING_FIELD_ROOT_SELECTOR = ".origam-rating-field";
@@ -0,0 +1,12 @@
1
+ import { KEYBOARD_VALUES } from "../../enums/Commons/hotkey.enum.js";
2
+ export const RATING_FIELD_MUTATING_KEYS = [
3
+ KEYBOARD_VALUES.UP,
4
+ KEYBOARD_VALUES.DOWN,
5
+ KEYBOARD_VALUES.LEFT,
6
+ KEYBOARD_VALUES.RIGHT,
7
+ KEYBOARD_VALUES.HOME,
8
+ KEYBOARD_VALUES.END,
9
+ KEYBOARD_VALUES.EMPTY
10
+ ];
11
+ export const RATING_FIELD_ENABLED_RADIO_SELECTOR = 'input[type="radio"]:not(:disabled)';
12
+ export const RATING_FIELD_ROOT_SELECTOR = ".origam-rating-field";
@@ -630,6 +630,17 @@ Object.keys(_slideGroup).forEach(function (key) {
630
630
  }
631
631
  });
632
632
  });
633
+ var _ratingField = require("./RatingField/rating-field.const.cjs");
634
+ Object.keys(_ratingField).forEach(function (key) {
635
+ if (key === "default" || key === "__esModule") return;
636
+ if (key in exports && exports[key] === _ratingField[key]) return;
637
+ Object.defineProperty(exports, key, {
638
+ enumerable: true,
639
+ get: function () {
640
+ return _ratingField[key];
641
+ }
642
+ });
643
+ });
633
644
  var _textField = require("./TextField/text-field.const.cjs");
634
645
  Object.keys(_textField).forEach(function (key) {
635
646
  if (key === "default" || key === "__esModule") return;
@@ -55,6 +55,7 @@ export * from './Form/form.const';
55
55
  export * from './Input/input.const';
56
56
  export * from './Chip/chip-group.const';
57
57
  export * from './Slide/slide-group.const';
58
+ export * from './RatingField/rating-field.const';
58
59
  export * from './TextField/text-field.const';
59
60
  export * from './TextareaField/textarea-field.const';
60
61
  export * from './EmptyState/empty-state.const';
@@ -55,6 +55,7 @@ export * from "./Form/form.const.js";
55
55
  export * from "./Input/input.const.js";
56
56
  export * from "./Chip/chip-group.const.js";
57
57
  export * from "./Slide/slide-group.const.js";
58
+ export * from "./RatingField/rating-field.const.js";
58
59
  export * from "./TextField/text-field.const.js";
59
60
  export * from "./TextareaField/textarea-field.const.js";
60
61
  export * from "./EmptyState/empty-state.const.js";
@@ -58,6 +58,8 @@ const ClickOutside = exports.ClickOutside = {
58
58
  },
59
59
  unmounted(el, binding) {
60
60
  if (!el._clickOutside) return;
61
+ for (const id of el._clickOutside.timers ?? []) clearTimeout(id);
62
+ el._clickOutside.timers?.clear();
61
63
  (0, _clickOutside.handleShadow)(el, app => {
62
64
  if (!app || !el._clickOutside?.[binding.instance.$.uid]) return;
63
65
  const {
@@ -52,6 +52,8 @@ export const ClickOutside = {
52
52
  },
53
53
  unmounted(el, binding) {
54
54
  if (!el._clickOutside) return;
55
+ for (const id of el._clickOutside.timers ?? []) clearTimeout(id);
56
+ el._clickOutside.timers?.clear();
55
57
  handleShadow(el, (app) => {
56
58
  if (!app || !el._clickOutside?.[binding.instance.$.uid]) return;
57
59
  const { onClick, onMousedown } = el._clickOutside[binding.instance.$.uid];
@@ -10,6 +10,8 @@ const Ripple = exports.Ripple = {
10
10
  (0, _ripple.updateRipple)(el, binding, false);
11
11
  },
12
12
  unmounted: el => {
13
+ for (const id of el._ripple?.timers ?? []) clearTimeout(id);
14
+ el._ripple?.timers?.clear();
13
15
  delete el._ripple;
14
16
  (0, _ripple.rippleRemoveListeners)(el);
15
17
  },
@@ -4,6 +4,8 @@ export const Ripple = {
4
4
  updateRipple(el, binding, false);
5
5
  },
6
6
  unmounted: (el) => {
7
+ for (const id of el._ripple?.timers ?? []) clearTimeout(id);
8
+ el._ripple?.timers?.clear();
7
9
  delete el._ripple;
8
10
  rippleRemoveListeners(el);
9
11
  },
@@ -8,6 +8,5 @@ var BG_FG_ROLE = exports.BG_FG_ROLE = /* @__PURE__ */(BG_FG_ROLE2 => {
8
8
  BG_FG_ROLE2["DEFAULT"] = "default";
9
9
  BG_FG_ROLE2["HOVER"] = "hover";
10
10
  BG_FG_ROLE2["ACTIVE"] = "active";
11
- BG_FG_ROLE2["DISABLED"] = "disabled";
12
11
  return BG_FG_ROLE2;
13
12
  })(BG_FG_ROLE || {});
@@ -1,17 +1,26 @@
1
1
  /**
2
2
  * Interaction role for state-aware color resolution.
3
3
  *
4
- * Used by `useColorEffect` (and its helpers) to pick the right token
5
- * rung / math-derivation for a given visual state:
4
+ * Used by `useColorEffect` / `useStateEffect` (and their helpers) to pick
5
+ * the right token rung / math-derivation for a given visual state:
6
6
  *
7
7
  * • `default` → resting bgColor (no transformation)
8
8
  * • `hover` → cascading `var(bgHover, color-mix(bg, black 20%))`
9
9
  * • `active` → cascading `var(bgActive, color-mix(bg, black 30%))`
10
- * • `disabled` → resting `bgDisabled` token (per-intent)
10
+ *
11
+ * ⛔ There is deliberately NO `disabled` member — #823. Disabled is an
12
+ * OPACITY VEIL in this DS, never a token swap: both composables compute
13
+ * `bgRole` from `isHover` / `isActive` alone and read `isDisabled` only to
14
+ * keep the dependency wired. A `disabled` rung would resolve
15
+ * `--origam-color__feedback--{intent}---bgDisabled` / `---fgDisabled`,
16
+ * which NO sheet declares for the four `feedback` intents (`action.*` has
17
+ * them, `feedback.*` does not — see `docs/integrations/theming-authoring.md`).
18
+ * A `var()` that fails at computed-value time does not fall back: the
19
+ * declaration has already won the cascade, becomes `unset`, and ERASES the
20
+ * surface instead of yielding it (the #813 / #568 mechanism).
11
21
  */
12
22
  export declare enum BG_FG_ROLE {
13
23
  DEFAULT = "default",
14
24
  HOVER = "hover",
15
- ACTIVE = "active",
16
- DISABLED = "disabled"
25
+ ACTIVE = "active"
17
26
  }
@@ -2,6 +2,5 @@ export var BG_FG_ROLE = /* @__PURE__ */ ((BG_FG_ROLE2) => {
2
2
  BG_FG_ROLE2["DEFAULT"] = "default";
3
3
  BG_FG_ROLE2["HOVER"] = "hover";
4
4
  BG_FG_ROLE2["ACTIVE"] = "active";
5
- BG_FG_ROLE2["DISABLED"] = "disabled";
6
5
  return BG_FG_ROLE2;
7
6
  })(BG_FG_ROLE || {});
@@ -2,7 +2,7 @@
2
2
  * Well-known bottom-sheet snap-point ids understood by `<OrigamSheet>`
3
3
  * (`swipeable + side="bottom"`) out of the box.
4
4
  *
5
- * `TSheetSnapId` widens this set with `(string & {})` so brand
5
+ * `TSheetSnapId` widens this set with `TAnyString` so brand
6
6
  * integrations can add their own rungs without forking — the enum only
7
7
  * names the ones the component ships defaults for.
8
8
  */
@@ -98,8 +98,12 @@ export interface IChartCartesianProps extends IChartBaseProps {
98
98
  * zoomResetLabel
99
99
  *
100
100
  * @description
101
- * Accessible name for the "Reset zoom" control (aria-label) shown
102
- * when `zoomable` is active and the plot is currently zoomed.
101
+ * Name of the "Reset zoom" control shown when `zoomable` is active
102
+ * and the plot is currently zoomed. Drives BOTH the `aria-label`
103
+ * and the VISIBLE text of the button — until #764 the visible text
104
+ * was a hardcoded English literal, so a French consumer read
105
+ * "Reset zoom" on a control whose accessible name already said
106
+ * "Réinitialiser le zoom".
103
107
  * Carries a locale key, not final text — it is resolved through the
104
108
  * DS `t()` mechanism. Defaults to `'origam.chart.zoom.reset_aria_label'`
105
109
  * (#477).
@@ -1,8 +1,9 @@
1
1
  import type { ComponentPublicInstance } from 'vue';
2
2
  import type { IDelayProps } from './delay.interface';
3
+ import type { TAnyString } from '../../types/Commons/commons.type';
3
4
  export interface IActivatorProps extends IDelayProps {
4
- target?: 'parent' | 'cursor' | (string & {}) | Element | ComponentPublicInstance | [x: number, y: number] | undefined;
5
- activator?: 'parent' | 'cursor' | (string & {}) | Element | ComponentPublicInstance;
5
+ target?: 'parent' | 'cursor' | TAnyString | Element | ComponentPublicInstance | [x: number, y: number] | undefined;
6
+ activator?: 'parent' | 'cursor' | TAnyString | Element | ComponentPublicInstance;
6
7
  activatorProps?: any;
7
8
  openOnClick?: boolean;
8
9
  openOnContextMenu?: boolean;
@@ -1,10 +1,37 @@
1
1
  import type { TIcon } from '../../types/Icon/icon.type';
2
+ /*********************************************************
3
+ * IAdjacentProps
4
+ *
5
+ * @description
6
+ * Media and accessible name of a component's OUTER prepend/append zone.
7
+ *
8
+ * @description
9
+ * ⛔ issue #747 — `prependAriaLabel` / `appendAriaLabel` are what allow the
10
+ * zone to become a real `role="button"` tab stop when `click:prepend` /
11
+ * `click:append` is wired. Without one, `useAccessibleCommand` emits NO role
12
+ * and NO tabindex rather than an anonymous ARIA button (WCAG 2.1 4.1.2), and
13
+ * warns in development. Each accepts an i18n key or a literal string — the
14
+ * same contract as the existing `closeLabel` on Alert / Chip / Dialog.
15
+ ********************************************************/
2
16
  export interface IAdjacentProps {
3
17
  appendAvatar?: string;
4
18
  appendIcon?: TIcon;
5
19
  prependAvatar?: string;
6
20
  prependIcon?: TIcon;
21
+ prependAriaLabel?: string;
22
+ appendAriaLabel?: string;
7
23
  }
24
+ /*********************************************************
25
+ * IAdjacentInnerProps
26
+ *
27
+ * @description
28
+ * Same surface for the INNER zone — the one rendered inside the field
29
+ * chrome rather than outside it.
30
+ *
31
+ * @description
32
+ * ⛔ issue #747 — `prependInnerAriaLabel` / `appendInnerAriaLabel` carry the
33
+ * accessible name, under exactly the contract described on `IAdjacentProps`.
34
+ ********************************************************/
8
35
  export interface IAdjacentInnerProps {
9
36
  appendInnerAvatar?: string;
10
37
  appendInnerIcon?: TIcon;
@@ -12,6 +39,8 @@ export interface IAdjacentInnerProps {
12
39
  prependInnerIcon?: TIcon;
13
40
  clearIcon?: TIcon;
14
41
  clearable?: boolean;
42
+ prependInnerAriaLabel?: string;
43
+ appendInnerAriaLabel?: string;
15
44
  }
16
45
  /** Click events emitted when the user clicks the prepend/append slots. */
17
46
  export interface IAdjacentEmits {
@@ -1,4 +1,15 @@
1
1
  import type { ComponentInternalInstance, ComputedRef, Ref } from 'vue';
2
+ /*********************************************************
3
+ * prev / next (IGroupProvide)
4
+ *
5
+ * @description
6
+ * ⛔ #786 — renvoient l'id RETENU, ou `undefined` si rien n'a bouge
7
+ * (groupe vide, ou seul candidat desactive). Un appelant ne peut PAS
8
+ * relire `selected` juste apres l'appel : quand le modele est controle
9
+ * (le consommateur a pose un `v-model`), le getter de `useVModel` rend
10
+ * `props[prop]` — donc encore l'ANCIEN id. Voir le bloc `step` dans
11
+ * `group.composable.ts` pour la mesure.
12
+ ********************************************************/
2
13
  /*********************************************************
3
14
  * domId (IGroupItem / IGroupProvide.items[number])
4
15
  *
@@ -21,8 +32,8 @@ export interface IGroupProvide {
21
32
  select: (id: number, value: boolean) => void;
22
33
  selected: Ref<Readonly<Array<number>>>;
23
34
  isSelected: (id: number) => boolean;
24
- prev: () => void;
25
- next: () => void;
35
+ prev: () => number | undefined;
36
+ next: () => number | undefined;
26
37
  selectedClass: Ref<string | undefined>;
27
38
  items: ComputedRef<Array<{
28
39
  id: number;
@@ -31,6 +31,22 @@ export interface IRippleHtmlElementRipple {
31
31
  isTouch?: boolean;
32
32
  showTimer?: number;
33
33
  showTimerCommit?: null | (() => void);
34
+ /*********************************************************
35
+ * Timers d'animation en vol (#753)
36
+ *
37
+ * @description
38
+ * Les trois `setTimeout` de `RIPPLES.show` / `RIPPLES.hide`
39
+ * orchestrent les phases de l'animation (`--enter` → `--in` →
40
+ * `--out`) et retirent le noeud a la fin. Rien ne les annulait au
41
+ * `unmounted` de la directive, alors que la cadence la plus longue
42
+ * (250 ms d'attente + 300 ms de sortie) depasse largement la duree de
43
+ * vie d'un bouton qui disparait sur son propre clic.
44
+ *
45
+ * @description
46
+ * La portee est l'ELEMENT (directive), pas un scope Vue : les handles
47
+ * vivent donc ici, avec le reste de l'etat du ripple.
48
+ ********************************************************/
49
+ timers?: Set<ReturnType<typeof setTimeout>>;
34
50
  }
35
51
  export interface IRippleElement extends Element {
36
52
  dataset?: IRippleElementDataset;
@@ -1,15 +1,16 @@
1
1
  import type { TScrollBehavior } from '../../types/Toolbar/toolbar.type';
2
2
  import type { TScrollStrategy, TScrollStrategyFn } from '../../types/Commons/scroll.type';
3
+ import type { TAnyString } from '../../types/Commons/commons.type';
3
4
  import type { Ref } from 'vue';
4
5
  export interface IScrollProps {
5
6
  /**
6
7
  * Space-separated list of scroll behaviours, e.g. `"hide inverted"` or
7
8
  * `"elevate active"`. `inverted` is a MODIFIER that flips the trigger of
8
9
  * `hide` / `collapse` / `elevate` and does nothing on its own. The
9
- * `(string & {})` member keeps single-token autocomplete while allowing
10
+ * `TAnyString` member keeps single-token autocomplete while allowing
10
11
  * multi-token combinations.
11
12
  */
12
- scrollBehavior?: TScrollBehavior | (string & {});
13
+ scrollBehavior?: TScrollBehavior | TAnyString;
13
14
  scrollTarget?: string;
14
15
  scrollThreshold?: string | number;
15
16
  }
@@ -2,7 +2,7 @@ import { ALIGN } from '../../enums/Commons/align.enum';
2
2
  import type { IDataTableItem } from './items.interface';
3
3
  import type { TDataTableCompareFunction, TDataTableHeaderCell } from '../../types/DataTable/data-table.type';
4
4
  import type { TFilterFunction } from '../../types/Commons/filters.type';
5
- import type { TSelectItemKey } from '../../types/Commons/commons.type';
5
+ import type { TAnyString, TSelectItemKey } from '../../types/Commons/commons.type';
6
6
  /*********************************************************
7
7
  * IDataTableHeaderProps / IDataTableHeader / IInternalDataTableHeader
8
8
  *
@@ -18,7 +18,7 @@ export interface IDataTableHeaderProps {
18
18
  items?: Array<IDataTableItem>;
19
19
  }
20
20
  export interface IDataTableHeader<T = any> {
21
- key?: 'data-table-group' | 'data-table-select' | 'data-table-expand' | (string & {});
21
+ key?: 'data-table-group' | 'data-table-select' | 'data-table-expand' | TAnyString;
22
22
  value?: TSelectItemKey<T>;
23
23
  title?: string;
24
24
  fixed?: boolean;
@@ -2,9 +2,10 @@ import type { ICalendarProps, IDay } from './date-picker-calendar.interface';
2
2
  import type { IColorProps } from '../Commons/color.interface';
3
3
  import type { ICommonsComponentProps } from '../Commons/commons.interface';
4
4
  import type { TTransitionProps } from '../../types/Transition/transition.type';
5
+ import type { TAnyString } from '../../types/Commons/commons.type';
5
6
  export interface IDatePickerMonthProps extends ICommonsComponentProps, IColorProps, ICalendarProps {
6
7
  hideWeekdays?: boolean;
7
- multiple?: boolean | number | (string & {});
8
+ multiple?: boolean | number | TAnyString;
8
9
  range?: boolean;
9
10
  showWeek?: boolean;
10
11
  transition?: TTransitionProps;
@@ -7,7 +7,34 @@ export interface IMenuProvide {
7
7
  unregister(): void;
8
8
  closeParents(): void;
9
9
  }
10
- export interface IMenuProps extends IOverlayProps, IListProps, IListItemProps {
10
+ /*********************************************************
11
+ * IMenuProps
12
+ *
13
+ * @description
14
+ * ⛔ OUTER adjacent surface stripped (#756). `IListItemProps` carries
15
+ * `IAdjacentProps` (`prependIcon` / `appendIcon` / `prependAvatar` /
16
+ * `appendAvatar` / `prependAriaLabel` / `appendAriaLabel`) because a LIST ROW
17
+ * renders that zone. `<OrigamMenu>` does not: it renders rows from `items`,
18
+ * and each row gets its media from the ITEM object (`{ title, prependIcon }`),
19
+ * never from the menu's own props — `menuItemProps()` spreads the item, and
20
+ * `overlayProps` is filtered down to what `<origam-overlay>` declares.
21
+ *
22
+ * @description
23
+ * Measured, jsdom, sentinel values passed as props and grepped out of
24
+ * `document.body.innerHTML`: `<origam-list-item>` renders
25
+ * `.origam-list-item__prepend` / `__append` and carries the name;
26
+ * `<origam-menu model-value items=…>` renders NO such node at all. The four
27
+ * media props were already recorded as inert in
28
+ * `guards/baseline/unconsumed-props.json`; the two name props would have
29
+ * joined them, so the whole surface goes instead.
30
+ *
31
+ * @description
32
+ * ⚠️ The REST of `IListItemProps` is still inherited and still largely inert
33
+ * here (33 further entries in that same baseline: `href`, `to`, `tag`,
34
+ * `ripple`, `subtitle`, `lines`, `slim`…). Narrowing those is a separate,
35
+ * wider decision and is deliberately NOT done in this fix.
36
+ ********************************************************/
37
+ export interface IMenuProps extends IOverlayProps, IListProps, Omit<IListItemProps, 'prependIcon' | 'appendIcon' | 'prependAvatar' | 'appendAvatar' | 'prependAriaLabel' | 'appendAriaLabel'> {
11
38
  id?: string;
12
39
  }
13
40
  /** Emits fired by `<OrigamMenu>` — v-model on the open state, the
@@ -22,8 +22,28 @@ import type { TOtpInputFieldType } from '../../types/OtpInputField/otp-input-fie
22
22
  * Only `fontSize` does (the visible `.origam-otp-input-field__field` cell).
23
23
  * `Omit` strips the inherited surface back down before re-adding exactly
24
24
  * what this component supports.
25
+ *
26
+ * @description
27
+ * ⛔ OUTER adjacent surface stripped for the SAME structural reason (#756).
28
+ * `IAdjacentProps` (`prependIcon` / `appendIcon` / `prependAvatar` /
29
+ * `appendAvatar` / `prependAriaLabel` / `appendAriaLabel`) is inherited from
30
+ * `IInputProps`, and the element that renders that zone — the
31
+ * `.origam-input__prepend` / `.origam-input__append` span in
32
+ * `OrigamInput.vue` — is never mounted here, exactly as the paragraph above
33
+ * says. Measured, jsdom, sentinel values passed as props and grepped out of
34
+ * `document.body.innerHTML`: `<origam-input>` and `<origam-text-field>` both
35
+ * render the zone and carry the name; `<origam-otp-input-field>` renders NO
36
+ * `origam-input__prepend` / `__append` node at all. The four media props were
37
+ * already recorded as inert in `guards/baseline/unconsumed-props.json`; the
38
+ * two name props would have joined them, so the whole surface goes instead.
39
+ *
40
+ * @description
41
+ * The INNER zone is untouched and is the one this component really has:
42
+ * `prependInnerAriaLabel` / `appendInnerAriaLabel` come through `IFieldProps`
43
+ * → `IAdjacentInnerProps`, reach `<origam-field>` via `fieldProps()`, and were
44
+ * measured PRESENT in the same sweep.
25
45
  ********************************************************/
26
- export interface IOtpInputFieldProps extends Omit<IFieldProps, 'fontFamily' | 'fontWeight' | 'lineHeight' | 'letterSpacing'>, Omit<IInputProps, 'fontFamily' | 'fontWeight' | 'lineHeight' | 'letterSpacing'>, IVariantProps, Pick<ITypographyProps, 'fontSize'> {
46
+ export interface IOtpInputFieldProps extends Omit<IFieldProps, 'fontFamily' | 'fontWeight' | 'lineHeight' | 'letterSpacing'>, Omit<IInputProps, 'fontFamily' | 'fontWeight' | 'lineHeight' | 'letterSpacing' | 'prependIcon' | 'appendIcon' | 'prependAvatar' | 'appendAvatar' | 'prependAriaLabel' | 'appendAriaLabel'>, IVariantProps, Pick<ITypographyProps, 'fontSize'> {
27
47
  autofocus?: boolean;
28
48
  divider?: string;
29
49
  focusAll?: boolean;