origam 2.17.0 → 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 (213) hide show
  1. package/CHANGELOG.md +744 -1
  2. package/dist/src/assets/css/main.css +1 -1
  3. package/dist/src/assets/css/tokens/dark.css +125 -24
  4. package/dist/src/assets/css/tokens/light.css +49 -12
  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 +2846 -12
  9. package/dist/src/assets/scss/tokens/_light.scss +49 -12
  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 +43 -18
  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 +34 -14
  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 +83 -28
  51. package/dist/src/components/FileField/OrigamFileField.vue +20 -15
  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 +19 -3
  60. package/dist/src/components/Menu/OrigamMenu.vue +79 -9
  61. package/dist/src/components/NumberField/OrigamNumberField.vue +26 -16
  62. package/dist/src/components/OtpInputField/OrigamOtpInputField.vue +48 -24
  63. package/dist/src/components/PasswordField/OrigamPasswordField.vue +20 -15
  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 +57 -34
  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/Switch/OrigamSwitchTrack.vue +20 -0
  73. package/dist/src/components/Tabs/OrigamTab.vue +7 -4
  74. package/dist/src/components/Tabs/OrigamTabPanel.vue +4 -2
  75. package/dist/src/components/Tabs/OrigamTabs.vue +7 -5
  76. package/dist/src/components/TextField/OrigamTextField.vue +20 -15
  77. package/dist/src/components/TextareaField/OrigamTextareaField.vue +20 -15
  78. package/dist/src/components/Transition/OrigamExpandX.vue +19 -3
  79. package/dist/src/components/Transition/OrigamExpandY.vue +19 -3
  80. package/dist/src/components/Transition/OrigamTranslateScale.vue +26 -4
  81. package/dist/src/components/Video/OrigamVideo.vue +3 -2
  82. package/dist/src/components/VirtualScroll/OrigamVirtualScroll.vue +1 -1
  83. package/dist/src/components/Window/OrigamWindow.vue +20 -3
  84. package/dist/src/composables/Commons/accessibleCommand.composable.cjs +26 -0
  85. package/dist/src/composables/Commons/accessibleCommand.composable.d.ts +78 -0
  86. package/dist/src/composables/Commons/accessibleCommand.composable.js +20 -0
  87. package/dist/src/composables/Commons/activator.composable.cjs +10 -1
  88. package/dist/src/composables/Commons/activator.composable.js +11 -2
  89. package/dist/src/composables/Commons/adjacent.composable.cjs +17 -0
  90. package/dist/src/composables/Commons/adjacent.composable.d.ts +12 -0
  91. package/dist/src/composables/Commons/adjacent.composable.js +17 -0
  92. package/dist/src/composables/Commons/adjacentInner.composable.cjs +20 -0
  93. package/dist/src/composables/Commons/adjacentInner.composable.d.ts +24 -5
  94. package/dist/src/composables/Commons/adjacentInner.composable.js +20 -0
  95. package/dist/src/composables/Commons/audio.composable.cjs +14 -1
  96. package/dist/src/composables/Commons/audio.composable.js +14 -1
  97. package/dist/src/composables/Commons/backButton.composable.cjs +3 -1
  98. package/dist/src/composables/Commons/backButton.composable.js +3 -1
  99. package/dist/src/composables/Commons/border.composable.d.ts +13 -0
  100. package/dist/src/composables/Commons/colorEffect.composable.cjs +58 -46
  101. package/dist/src/composables/Commons/colorEffect.composable.d.ts +10 -5
  102. package/dist/src/composables/Commons/colorEffect.composable.js +70 -46
  103. package/dist/src/composables/Commons/createLayout.composable.cjs +21 -12
  104. package/dist/src/composables/Commons/createLayout.composable.js +21 -12
  105. package/dist/src/composables/Commons/delay.composable.d.ts +16 -0
  106. package/dist/src/composables/Commons/dimension.composable.d.ts +11 -0
  107. package/dist/src/composables/Commons/elevation.composable.cjs +6 -2
  108. package/dist/src/composables/Commons/elevation.composable.d.ts +37 -1
  109. package/dist/src/composables/Commons/elevation.composable.js +7 -2
  110. package/dist/src/composables/Commons/goTo.composable.cjs +4 -2
  111. package/dist/src/composables/Commons/goTo.composable.js +5 -3
  112. package/dist/src/composables/Commons/group.composable.cjs +14 -14
  113. package/dist/src/composables/Commons/group.composable.js +14 -14
  114. package/dist/src/composables/Commons/hotkey.composable.d.ts +18 -7
  115. package/dist/src/composables/Commons/hydration.composable.d.ts +8 -0
  116. package/dist/src/composables/Commons/link.composable.d.ts +20 -0
  117. package/dist/src/composables/Commons/locationStrategies.composable.d.ts +17 -0
  118. package/dist/src/composables/Commons/message.composable.d.ts +19 -5
  119. package/dist/src/composables/Commons/position.composable.d.ts +17 -6
  120. package/dist/src/composables/Commons/refs.composable.d.ts +11 -5
  121. package/dist/src/composables/Commons/rounded.composable.d.ts +11 -1
  122. package/dist/src/composables/Commons/scrolling.composable.cjs +15 -12
  123. package/dist/src/composables/Commons/scrolling.composable.js +15 -12
  124. package/dist/src/composables/Commons/size.composable.d.ts +15 -0
  125. package/dist/src/composables/Commons/ssrBoot.composable.cjs +9 -1
  126. package/dist/src/composables/Commons/ssrBoot.composable.js +10 -2
  127. package/dist/src/composables/Commons/stack.composable.cjs +13 -1
  128. package/dist/src/composables/Commons/stack.composable.js +13 -1
  129. package/dist/src/composables/Commons/theme-props-resolver.composable.cjs +41 -32
  130. package/dist/src/composables/Commons/theme-props-resolver.composable.js +41 -32
  131. package/dist/src/composables/Commons/validation.composable.cjs +3 -3
  132. package/dist/src/composables/Commons/validation.composable.js +3 -3
  133. package/dist/src/composables/Commons/virtual.composable.cjs +24 -8
  134. package/dist/src/composables/Commons/virtual.composable.js +24 -8
  135. package/dist/src/composables/Masonry/masonry.composable.cjs +18 -11
  136. package/dist/src/composables/Masonry/masonry.composable.js +18 -11
  137. package/dist/src/composables/Parallax/parallax.composable.cjs +1 -1
  138. package/dist/src/composables/Parallax/parallax.composable.js +1 -1
  139. package/dist/src/composables/index.cjs +36 -0
  140. package/dist/src/composables/index.d.ts +3 -0
  141. package/dist/src/composables/index.js +3 -0
  142. package/dist/src/consts/Chart/chart-cartesian.const.cjs +5 -2
  143. package/dist/src/consts/Chart/chart-cartesian.const.d.ts +42 -0
  144. package/dist/src/consts/Chart/chart-cartesian.const.js +3 -0
  145. package/dist/src/consts/Commons/border.const.cjs +2 -1
  146. package/dist/src/consts/Commons/border.const.d.ts +19 -0
  147. package/dist/src/consts/Commons/border.const.js +15 -0
  148. package/dist/src/consts/Commons/elevation.const.cjs +5 -1
  149. package/dist/src/consts/Commons/elevation.const.d.ts +52 -2
  150. package/dist/src/consts/Commons/elevation.const.js +4 -0
  151. package/dist/src/consts/Commons/ripple.const.cjs +13 -3
  152. package/dist/src/consts/Commons/ripple.const.js +13 -3
  153. package/dist/src/consts/RatingField/rating-field.const.cjs +10 -0
  154. package/dist/src/consts/RatingField/rating-field.const.d.ts +36 -0
  155. package/dist/src/consts/RatingField/rating-field.const.js +12 -0
  156. package/dist/src/consts/index.cjs +11 -0
  157. package/dist/src/consts/index.d.ts +1 -0
  158. package/dist/src/consts/index.js +1 -0
  159. package/dist/src/directives/ClickOutside/clickOutside.directive.cjs +2 -0
  160. package/dist/src/directives/ClickOutside/clickOutside.directive.js +2 -0
  161. package/dist/src/directives/Ripple/ripple.directive.cjs +2 -0
  162. package/dist/src/directives/Ripple/ripple.directive.js +2 -0
  163. package/dist/src/enums/Commons/color.enum.cjs +0 -1
  164. package/dist/src/enums/Commons/color.enum.d.ts +14 -5
  165. package/dist/src/enums/Commons/color.enum.js +0 -1
  166. package/dist/src/enums/Sheet/sheet.enum.d.ts +1 -1
  167. package/dist/src/interfaces/Chart/chart-cartesian.interface.d.ts +6 -2
  168. package/dist/src/interfaces/Commons/activator.interface.d.ts +3 -2
  169. package/dist/src/interfaces/Commons/adjacent.interface.d.ts +29 -0
  170. package/dist/src/interfaces/Commons/group.interface.d.ts +13 -2
  171. package/dist/src/interfaces/Commons/ripple.interface.d.ts +16 -0
  172. package/dist/src/interfaces/Commons/scroll.interface.d.ts +3 -2
  173. package/dist/src/interfaces/DataTable/data-table-header.interface.d.ts +2 -2
  174. package/dist/src/interfaces/DatePicker/date-picker-month.interface.d.ts +2 -1
  175. package/dist/src/interfaces/Field/field.interface.d.ts +21 -1
  176. package/dist/src/interfaces/Menu/menu.interface.d.ts +28 -1
  177. package/dist/src/interfaces/OtpInputField/otp-input-field.interface.d.ts +21 -1
  178. package/dist/src/interfaces/RatingField/rating-field-item.interface.d.ts +16 -1
  179. package/dist/src/interfaces/index.cjs +11 -0
  180. package/dist/src/interfaces/index.d.ts +1 -0
  181. package/dist/src/interfaces/index.js +1 -0
  182. package/dist/src/themes/origam.theme.cjs +8 -14
  183. package/dist/src/themes/origam.theme.js +6 -8
  184. package/dist/src/types/Commons/color.type.d.ts +4 -3
  185. package/dist/src/types/Commons/commons.type.d.ts +33 -0
  186. package/dist/src/types/Commons/theme.type.d.ts +2 -1
  187. package/dist/src/types/Sheet/sheet.type.d.ts +2 -1
  188. package/dist/src/types/index.cjs +22 -0
  189. package/dist/src/types/index.d.ts +2 -0
  190. package/dist/src/types/index.js +2 -0
  191. package/dist/src/types/tokens.type.d.ts +1 -1
  192. package/dist/src/utils/Commons/a11y.util.cjs +35 -0
  193. package/dist/src/utils/Commons/a11y.util.d.ts +63 -0
  194. package/dist/src/utils/Commons/a11y.util.js +33 -0
  195. package/dist/src/utils/Commons/clickOutside.util.cjs +5 -1
  196. package/dist/src/utils/Commons/clickOutside.util.js +5 -1
  197. package/dist/src/utils/Commons/color.util.cjs +10 -5
  198. package/dist/src/utils/Commons/color.util.d.ts +34 -5
  199. package/dist/src/utils/Commons/color.util.js +9 -5
  200. package/dist/src/utils/Commons/goTo.util.cjs +31 -14
  201. package/dist/src/utils/Commons/goTo.util.d.ts +1 -1
  202. package/dist/src/utils/Commons/goTo.util.js +31 -16
  203. package/dist/src/utils/Commons/location.util.cjs +18 -3
  204. package/dist/src/utils/Commons/location.util.js +18 -3
  205. package/dist/src/utils/Commons/ripple.util.cjs +5 -1
  206. package/dist/src/utils/Commons/ripple.util.js +5 -1
  207. package/dist/src/utils/index.cjs +11 -0
  208. package/dist/src/utils/index.d.ts +1 -0
  209. package/dist/src/utils/index.js +1 -0
  210. package/package.json +13 -2
  211. package/dist/src/types/Commons/locale.type.cjs +0 -1
  212. package/dist/src/types/Commons/locale.type.d.ts +0 -0
  213. package/dist/src/types/Commons/locale.type.js +0 -0
@@ -12,8 +12,7 @@
12
12
  <div
13
13
  key="prepend"
14
14
  class="origam-date-picker-header__prepend"
15
- :role="isPrependClickable ? 'button' : undefined"
16
- :tabindex="isPrependClickable ? 0 : undefined"
15
+ v-bind="prependCommandAttrs"
17
16
  @click="handleClickPrepend"
18
17
  @keydown="handleKeydownPrepend"
19
18
  >
@@ -54,8 +53,7 @@
54
53
  <div
55
54
  key="append"
56
55
  class="origam-date-picker-header__append"
57
- :role="isAppendClickable ? 'button' : undefined"
58
- :tabindex="isAppendClickable ? 0 : undefined"
56
+ v-bind="appendCommandAttrs"
59
57
  @click="handleClickAppend"
60
58
  @keydown="handleKeydownAppend"
61
59
  >
@@ -102,6 +100,8 @@ const props = defineProps({
102
100
  appendIcon: { type: null, required: false },
103
101
  prependAvatar: { type: String, required: false },
104
102
  prependIcon: { type: null, required: false },
103
+ prependAriaLabel: { type: String, required: false },
104
+ appendAriaLabel: { type: String, required: false },
105
105
  density: { type: null, required: false }
106
106
  });
107
107
  const emits = defineEmits(["click"]);
@@ -117,8 +117,8 @@ const {
117
117
  onClickAppend: handleClickAppend,
118
118
  onKeydownPrepend: handleKeydownPrepend,
119
119
  onKeydownAppend: handleKeydownAppend,
120
- isPrependClickable,
121
- isAppendClickable,
120
+ prependCommandAttrs,
121
+ appendCommandAttrs,
122
122
  hasAppend,
123
123
  hasPrepend
124
124
  } = useAdjacent(props, toRef(props, "prependIcon"), toRef(props, "appendIcon"));
@@ -16,6 +16,7 @@
16
16
  @blur="handleBlur"
17
17
  @change="handleChange"
18
18
  @click:clear="handleClear"
19
+ @input="handleInput"
19
20
  @mousedown:control="handleMousedownControl"
20
21
  >
21
22
  <template
@@ -244,6 +245,21 @@ const props = defineProps({
244
245
  prependInnerIcon: { type: null, required: false },
245
246
  clearIcon: { type: null, required: false },
246
247
  clearable: { type: Boolean, required: false },
248
+ prependInnerAriaLabel: { type: String, required: false },
249
+ appendInnerAriaLabel: { type: String, required: false },
250
+ border: { type: [Boolean, Number, String, Array], required: false, skipCheck: true, default: true },
251
+ borderTop: { type: [Boolean, Number, String], required: false },
252
+ borderLeft: { type: [Boolean, Number, String], required: false },
253
+ borderBottom: { type: [Boolean, Number, String], required: false },
254
+ borderRight: { type: [Boolean, Number, String], required: false },
255
+ borderBlock: { type: [Boolean, Number, String], required: false },
256
+ borderInline: { type: [Boolean, Number, String], required: false },
257
+ borderColor: { type: String, required: false },
258
+ borderStyle: { type: String, required: false },
259
+ borderTopColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
260
+ borderRightColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
261
+ borderBottomColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
262
+ borderLeftColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
247
263
  focused: { type: Boolean, required: false },
248
264
  text: { type: String, required: false },
249
265
  floating: { type: Boolean, required: false },
@@ -262,19 +278,6 @@ const props = defineProps({
262
278
  paddingRight: { type: [Boolean, Number, String], required: false },
263
279
  paddingBlock: { type: [Boolean, Number, String], required: false },
264
280
  paddingInline: { type: [Boolean, Number, String], required: false },
265
- border: { type: [Boolean, Number, String, Array], required: false, skipCheck: true, default: true },
266
- borderTop: { type: [Boolean, Number, String], required: false },
267
- borderLeft: { type: [Boolean, Number, String], required: false },
268
- borderBottom: { type: [Boolean, Number, String], required: false },
269
- borderRight: { type: [Boolean, Number, String], required: false },
270
- borderBlock: { type: [Boolean, Number, String], required: false },
271
- borderInline: { type: [Boolean, Number, String], required: false },
272
- borderColor: { type: String, required: false },
273
- borderStyle: { type: String, required: false },
274
- borderTopColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
275
- borderRightColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
276
- borderBottomColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
277
- borderLeftColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
278
281
  rounded: { type: [Boolean, Number, String, null], required: false, skipCheck: true, default: true },
279
282
  roundedTopRight: { type: [Boolean, Number, String], required: false },
280
283
  roundedTopLeft: { type: [Boolean, Number, String], required: false },
@@ -312,6 +315,8 @@ const props = defineProps({
312
315
  appendIcon: { type: null, required: false },
313
316
  prependAvatar: { type: String, required: false },
314
317
  prependIcon: { type: null, required: false },
318
+ prependAriaLabel: { type: String, required: false },
319
+ appendAriaLabel: { type: String, required: false },
315
320
  transition: { type: [Boolean, String, Object], required: false, default: () => ({ component: OrigamTranslateScale }) }
316
321
  });
317
322
  defineEmits(["update:menu", "update:modelValue"]);
@@ -373,6 +378,17 @@ const isMultiple = computed(() => {
373
378
  const isRange = computed(() => {
374
379
  return props.range && model.value.length > 1;
375
380
  });
381
+ const commitTypedDate = (raw) => {
382
+ if (props.multiple || props.range) return;
383
+ if (raw === "") {
384
+ model.value = [];
385
+ return;
386
+ }
387
+ const parsed = adapter.date(raw);
388
+ if (!parsed || !adapter.isValid(parsed)) return;
389
+ if (adapter.format(parsed, "keyboardDate") !== raw) return;
390
+ model.value = [adapter.toISO(parsed)];
391
+ };
376
392
  const isFocused = shallowRef(false);
377
393
  const form = inject(ORIGAM_FORM_KEY, null);
378
394
  const menuDisabled = computed(() => {
@@ -419,8 +435,12 @@ const handleBlur = (e) => {
419
435
  isFocused.value = true;
420
436
  }
421
437
  };
422
- const handleChange = () => {
438
+ const handleInput = (e) => {
439
+ commitTypedDate(e.target?.value ?? "");
440
+ };
441
+ const handleChange = (e) => {
423
442
  if (matchesSelector(origamTextFieldRef.value, ":autofill") || matchesSelector(origamTextFieldRef.value, ":-webkit-autofill")) {
443
+ commitTypedDate(e.target?.value ?? "");
424
444
  }
425
445
  };
426
446
  const handleAfterLeave = () => {
@@ -266,6 +266,8 @@ const props = defineProps({
266
266
  appendIcon: { type: null, required: false },
267
267
  prependAvatar: { type: String, required: false },
268
268
  prependIcon: { type: null, required: false },
269
+ prependAriaLabel: { type: String, required: false },
270
+ appendAriaLabel: { type: String, required: false },
269
271
  active: { type: [Boolean, Object], required: false },
270
272
  activeClass: { type: String, required: false },
271
273
  status: { type: null, required: false },
@@ -398,6 +400,29 @@ defineExpose(forwardRefs({
398
400
  border-radius: var(--origam-dialog---border-radius, 12px);
399
401
  box-shadow: var(--origam-dialog---box-shadow);
400
402
 
403
+ // #563 — la boite qui porte le PLAFOND doit porter le DEFILEMENT.
404
+ //
405
+ // `.origam-overlay__content` est `position: absolute` et de hauteur
406
+ // AUTO : le `max-height: 100%` pose plus bas sur `.origam-card` se
407
+ // resout donc en `none` (pourcentage contre un parent sans hauteur
408
+ // definie). La carte grandit sans plafond, et cette boite la laissait
409
+ // deborder en `overflow: visible`. Mesure Chromium sur `develop`,
410
+ // dialogue Design + 900px injectes dans `#footer` :
411
+ //
412
+ // .origam-card overflow hidden clientH 1047 scrollH 1047 -> ne defile pas
413
+ // .origam-overlay__content visible -> ne rogne pas
414
+ // document -> bloque (scrollStrategy 'block')
415
+ // => pied du dialogue 459px SOUS le viewport, aucun recours.
416
+ //
417
+ // Contrairement a ce que decrit le ticket, `.origam-card__content`
418
+ // ne defilait pas davantage : sans hauteur definie en amont il
419
+ // grandit lui aussi (clientH 1647 === scrollH 1647). AUCUNE boite du
420
+ // dialogue ne defilait.
421
+ //
422
+ // La branche `&--fullscreen` ci-dessous pose deja exactement cette
423
+ // declaration : ceci aligne le mode par defaut sur elle.
424
+ overflow-y: auto;
425
+
401
426
  &,
402
427
  > form {
403
428
  > .origam-card {
@@ -3,6 +3,8 @@
3
3
  :id="id"
4
4
  ref="origamDialogRef"
5
5
  v-model="isActive"
6
+ :class="rootClasses"
7
+ :style="rootStyles"
6
8
  v-bind="dialogProps"
7
9
  @is-read="handleIsRead"
8
10
  >
@@ -240,6 +242,8 @@ const props = defineProps({
240
242
  appendIcon: { type: null, required: false },
241
243
  prependAvatar: { type: String, required: false },
242
244
  prependIcon: { type: null, required: false },
245
+ prependAriaLabel: { type: String, required: false },
246
+ appendAriaLabel: { type: String, required: false },
243
247
  active: { type: [Boolean, Object], required: false },
244
248
  activeClass: { type: String, required: false },
245
249
  status: { type: null, required: false },
@@ -256,6 +260,8 @@ const origamDialogRef = ref();
256
260
  const slots = useSlots();
257
261
  const isActive = useVModel(props, "modelValue");
258
262
  const validatable = ref(false);
263
+ const rootClasses = computed(() => [props.class]);
264
+ const rootStyles = computed(() => props.style);
259
265
  const dialogProps = computed(() => {
260
266
  return origamDialogRef.value?.filterProps(props, ["class", "style", "id", "modelValue"]);
261
267
  });
@@ -175,6 +175,8 @@ const props = defineProps({
175
175
  appendIcon: { type: null, required: false },
176
176
  prependAvatar: { type: String, required: false },
177
177
  prependIcon: { type: null, required: false },
178
+ prependAriaLabel: { type: String, required: false },
179
+ appendAriaLabel: { type: String, required: false },
178
180
  ripple: { type: [Boolean, Object], required: false },
179
181
  active: { type: [Boolean, Object], required: false },
180
182
  activeClass: { type: String, required: false },
@@ -20,8 +20,7 @@
20
20
  v-if="hasPrepend"
21
21
  key="prepend"
22
22
  class="origam-expansion-panel-header__prepend"
23
- :role="isPrependClickable ? 'button' : undefined"
24
- :tabindex="isPrependClickable ? 0 : undefined"
23
+ v-bind="prependCommandAttrs"
25
24
  @click="handleClickPrepend"
26
25
  @keydown="handleKeydownPrepend"
27
26
  >
@@ -65,8 +64,7 @@
65
64
  v-if="hasAppend || !hideActions"
66
65
  key="append"
67
66
  class="origam-expansion-panel-header__append"
68
- :role="isAppendClickable ? 'button' : undefined"
69
- :tabindex="isAppendClickable ? 0 : undefined"
67
+ v-bind="appendCommandAttrs"
70
68
  @click="handleClickAppend"
71
69
  @keydown="handleKeydownAppend"
72
70
  >
@@ -163,6 +161,8 @@ const props = defineProps({
163
161
  appendIcon: { type: null, required: false },
164
162
  prependAvatar: { type: String, required: false },
165
163
  prependIcon: { type: null, required: false },
164
+ prependAriaLabel: { type: String, required: false },
165
+ appendAriaLabel: { type: String, required: false },
166
166
  ripple: { type: [Boolean, Object], required: false },
167
167
  active: { type: [Boolean, Object], required: false },
168
168
  activeClass: { type: String, required: false },
@@ -207,8 +207,8 @@ const hasTitle = computed(() => {
207
207
  const {
208
208
  hasAppend,
209
209
  hasPrepend,
210
- isPrependClickable,
211
- isAppendClickable,
210
+ prependCommandAttrs,
211
+ appendCommandAttrs,
212
212
  onClickPrepend: handleClickPrepend,
213
213
  onClickAppend: handleClickAppend,
214
214
  onKeydownPrepend: handleKeydownPrepend,
@@ -40,8 +40,7 @@
40
40
  v-if="hasPrependInner"
41
41
  key="prependInner"
42
42
  class="origam-field__prepend-inner"
43
- :role="isPrependInnerClickable ? 'button' : undefined"
44
- :tabindex="isPrependInnerClickable ? 0 : undefined"
43
+ v-bind="prependInnerCommandAttrs"
45
44
  @click="handleClickPrependInner"
46
45
  @keydown="handleKeydownPrependInner"
47
46
  >
@@ -129,8 +128,7 @@
129
128
  v-if="hasAppendInner"
130
129
  key="appendInner"
131
130
  class="origam-field__append-inner"
132
- :role="isAppendInnerClickable ? 'button' : undefined"
133
- :tabindex="isAppendInnerClickable ? 0 : undefined"
131
+ v-bind="appendInnerCommandAttrs"
134
132
  @click="handleClickAppendInner"
135
133
  @keydown="handleKeydownAppendInner"
136
134
  >
@@ -174,7 +172,7 @@
174
172
  </template>
175
173
 
176
174
  <script lang="ts" setup>
177
- import { computed, onMounted, ref, StyleValue, useAttrs, useSlots, watch } from "vue";
175
+ import { computed, onBeforeUnmount, onMounted, ref, StyleValue, useAttrs, useSlots, watch } from "vue";
178
176
  import OrigamAvatar from "../Avatar/OrigamAvatar.vue";
179
177
  import OrigamExpandX from "../Transition/OrigamExpandX.vue";
180
178
  import OrigamIcon from "../Icon/OrigamIcon.vue";
@@ -182,6 +180,7 @@ import OrigamLabel from "../Label/OrigamLabel.vue";
182
180
  import OrigamProgress from "../Progress/OrigamProgress.vue";
183
181
  import OrigamSkeleton from "../Skeleton/OrigamSkeleton.vue";
184
182
  import { useAdjacentInner } from "../../composables/Commons/adjacentInner.composable";
183
+ import { useBorder } from "../../composables/Commons/border.composable";
185
184
  import { useBothColor } from "../../composables/Commons/bothColor.composable";
186
185
  import { useDensity } from "../../composables/Commons/density.composable";
187
186
  import { useFocus } from "../../composables/Commons/focus.composable";
@@ -195,6 +194,7 @@ import { useStateFlag } from "../../composables/Commons/stateFlag.composable";
195
194
  import { useStyle } from "../../composables/Commons/style.composable";
196
195
  import { useTypography } from "../../composables/Commons/typography.composable";
197
196
  import { useVariant } from "../../composables/Commons/variant.composable";
197
+ import { IN_BROWSER } from "../../consts/Commons/commons.const";
198
198
  import vContrast from "../../directives/Contrast/contrast.directive";
199
199
  import { DENSITY } from "../../enums/Commons/density.enum";
200
200
  import { EASING } from "../../enums/Transition/transition.enum";
@@ -232,6 +232,21 @@ const props = defineProps({
232
232
  prependInnerIcon: { type: null, required: false },
233
233
  clearIcon: { type: null, required: false, default: MDI_ICONS.CLOSE_CIRCLE_OUTLINE },
234
234
  clearable: { type: Boolean, required: false },
235
+ prependInnerAriaLabel: { type: String, required: false },
236
+ appendInnerAriaLabel: { type: String, required: false },
237
+ border: { type: [Boolean, Number, String, Array], required: false, skipCheck: true },
238
+ borderTop: { type: [Boolean, Number, String], required: false },
239
+ borderLeft: { type: [Boolean, Number, String], required: false },
240
+ borderBottom: { type: [Boolean, Number, String], required: false },
241
+ borderRight: { type: [Boolean, Number, String], required: false },
242
+ borderBlock: { type: [Boolean, Number, String], required: false },
243
+ borderInline: { type: [Boolean, Number, String], required: false },
244
+ borderColor: { type: String, required: false },
245
+ borderStyle: { type: String, required: false },
246
+ borderTopColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
247
+ borderRightColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
248
+ borderBottomColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
249
+ borderLeftColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
235
250
  focused: { type: Boolean, required: false },
236
251
  density: { type: null, required: false, default: DENSITY.DEFAULT },
237
252
  text: { type: String, required: false },
@@ -251,19 +266,6 @@ const props = defineProps({
251
266
  paddingRight: { type: [Boolean, Number, String], required: false },
252
267
  paddingBlock: { type: [Boolean, Number, String], required: false },
253
268
  paddingInline: { type: [Boolean, Number, String], required: false },
254
- border: { type: [Boolean, Number, String, Array], required: false, skipCheck: true },
255
- borderTop: { type: [Boolean, Number, String], required: false },
256
- borderLeft: { type: [Boolean, Number, String], required: false },
257
- borderBottom: { type: [Boolean, Number, String], required: false },
258
- borderRight: { type: [Boolean, Number, String], required: false },
259
- borderBlock: { type: [Boolean, Number, String], required: false },
260
- borderInline: { type: [Boolean, Number, String], required: false },
261
- borderColor: { type: String, required: false },
262
- borderStyle: { type: String, required: false },
263
- borderTopColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
264
- borderRightColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
265
- borderBottomColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
266
- borderLeftColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
267
269
  rounded: { type: [Boolean, Number, String, null], required: false, skipCheck: true },
268
270
  roundedTopRight: { type: [Boolean, Number, String], required: false },
269
271
  roundedTopLeft: { type: [Boolean, Number, String], required: false },
@@ -285,13 +287,13 @@ const slots = useSlots();
285
287
  const attrs = useAttrs();
286
288
  const { t } = useLocale();
287
289
  const {
290
+ prependInnerCommandAttrs,
291
+ appendInnerCommandAttrs,
288
292
  hasAppendInner,
289
293
  onClickAppendInner: handleClickAppendInner,
290
294
  onClickPrependInner: handleClickPrependInner,
291
295
  onKeydownAppendInner: handleKeydownAppendInner,
292
296
  onKeydownPrependInner: handleKeydownPrependInner,
293
- isAppendInnerClickable,
294
- isPrependInnerClickable,
295
297
  clickClear: handleClickClear,
296
298
  hasPrependInner,
297
299
  hasClear
@@ -400,6 +402,21 @@ const { isOn: active, config: activeState, toggle: handleActive } = useStateFlag
400
402
  const isActive = computed(() => {
401
403
  return props.dirty || active.value || hasPrefix.value || hasSuffix.value;
402
404
  });
405
+ const labelFrames = /* @__PURE__ */ new Set();
406
+ let disposed = false;
407
+ const scheduleLabelFrame = (cb) => {
408
+ if (disposed || !IN_BROWSER) return;
409
+ const id2 = requestAnimationFrame(() => {
410
+ labelFrames.delete(id2);
411
+ cb();
412
+ });
413
+ labelFrames.add(id2);
414
+ };
415
+ onBeforeUnmount(() => {
416
+ disposed = true;
417
+ for (const id2 of labelFrames) cancelAnimationFrame(id2);
418
+ labelFrames.clear();
419
+ });
403
420
  onMounted(() => {
404
421
  watch(isFocused, (newVal, oldVal) => {
405
422
  if (newVal !== oldVal) {
@@ -410,7 +427,7 @@ onMounted(() => {
410
427
  if (hasLabel.value && newVal !== oldVal) {
411
428
  const el = origamLabelRef.value.$el;
412
429
  const targetEl = origamFloatingLabelRef.value.$el;
413
- requestAnimationFrame(() => {
430
+ scheduleLabelFrame(() => {
414
431
  const rect = nullifyTransforms(el);
415
432
  const targetRect = targetEl.getBoundingClientRect();
416
433
  const x = targetRect.x - rect.x;
@@ -447,6 +464,7 @@ const bgColor = computed(() => {
447
464
  return isActive.value && isFocused.value && activeState.value?.bgColor ? activeState.value.bgColor : props.bgColor;
448
465
  });
449
466
  const { colorClasses, colorStyles } = useBothColor(bgColor, color);
467
+ const { borderStyles } = useBorder(props);
450
468
  const { densityClasses } = useDensity(props);
451
469
  const {
452
470
  roundedClasses,
@@ -464,11 +482,32 @@ const fieldRadiusVarStyles = computed(() => {
464
482
  if (!radius) return [];
465
483
  return [`--origam-field---border-radius: ${radius.slice("border-radius:".length).trim()}`];
466
484
  });
485
+ const fieldBorderVarStyles = computed(() => {
486
+ const declarations = borderStyles.value;
487
+ if (!Array.isArray(declarations)) return [];
488
+ const vars = [];
489
+ const lastValueOf = (property) => {
490
+ const prefix = `${property}:`;
491
+ const match = declarations.filter((declaration) => declaration.startsWith(prefix)).pop();
492
+ return match ? match.slice(prefix.length).trim() : null;
493
+ };
494
+ const width = lastValueOf("border-width");
495
+ const style = lastValueOf("border-style");
496
+ const color2 = lastValueOf("border-color");
497
+ if (width) vars.push(`--origam-field---border-width: ${width}`);
498
+ if (style) vars.push(`--origam-field__outline---border-style: ${style}`);
499
+ if (color2) {
500
+ vars.push(`--origam-field---border-color: ${color2}`);
501
+ vars.push("--origam-field---border-opacity: 1");
502
+ }
503
+ return vars;
504
+ });
467
505
  const fieldStyles = computed(() => {
468
506
  return [
469
507
  colorStyles.value,
470
508
  roundedStyles.value,
471
509
  fieldRadiusVarStyles.value,
510
+ fieldBorderVarStyles.value,
472
511
  elevationStyles.value,
473
512
  props.style
474
513
  ];
@@ -546,8 +585,23 @@ defineExpose({
546
585
  // Floor the inline padding at the effective radius (capped at the control
547
586
  // height for pills). Prepended fields opt out below — their prepend icon
548
587
  // already fills the corner.
588
+ //
589
+ // ⛔ LE PLANCHER EST UN CANAL, PAS UNE EXPRESSION FIGEE (#800).
590
+ // Un champ dont le contenu est CENTRE et sans etiquette (OtpInputField)
591
+ // n'a aucun risque de collision avec le coin : le plancher n'y a pas
592
+ // lieu d'etre, et l'appliquer decentre le chiffre. Ce cas s'exprimait
593
+ // jusqu'ici par un `--origam-field---padding-start: 0` SANS UNITE, qui
594
+ // melange `<number>` et `<length>` dans le `max()` et fait JETER la
595
+ // declaration entiere au computed-value time. Le rendu voulu etait donc
596
+ // obtenu par une erreur CSS — mesure Chromium : mettre l'unite donne
597
+ // `padding-inline-start: 4px` avec `padding-inline-end: 0px`, soit un
598
+ // chiffre decentre de 2px. Un consommateur qui veut vraiment zero met
599
+ // desormais `--origam-field---corner-clearance: 0px` : c'est explicite,
600
+ // ca survit a un refactor du `max()`, et ca ne repose sur rien d'invalide.
601
+ --origam-field---corner-clearance:
602
+ min(var(--origam-field---border-radius, 8px), var(--origam-input__control---height, 36px));
549
603
  padding-inline:
550
- max(var(--origam-field---padding-start), min(var(--origam-field---border-radius, 8px), var(--origam-input__control---height, 36px)))
604
+ max(var(--origam-field---padding-start), var(--origam-field---corner-clearance))
551
605
  var(--origam-field---padding-end);
552
606
  backdrop-filter: var(--origam-field---backdrop-filter, none);
553
607
  -webkit-backdrop-filter: var(--origam-field---backdrop-filter, none);
@@ -591,7 +645,7 @@ defineExpose({
591
645
  padding-bottom: var(--origam-field__input---padding-bottom);
592
646
  position: relative;
593
647
  width: 100%;
594
- row-gap: calc(8px - var(--origam-input---density, 0));
648
+ row-gap: calc(8px - var(--origam-input---density, 0px));
595
649
  border: none;
596
650
  background: transparent;
597
651
 
@@ -723,9 +777,9 @@ defineExpose({
723
777
  &__label {
724
778
  contain: layout paint;
725
779
  display: block;
726
- margin-inline-start: var(--origam-field__input---padding-start, 0);
727
- margin-inline-end: var(--origam-field__input---padding-end, 0);
728
- max-width: calc(100% - var(--origam-field__input---padding-start, 0) - var(--origam-field__input---padding-end, 0));
780
+ margin-inline-start: var(--origam-field__input---padding-start, 0px);
781
+ margin-inline-end: var(--origam-field__input---padding-end, 0px);
782
+ max-width: calc(100% - var(--origam-field__input---padding-start, 0px) - var(--origam-field__input---padding-end, 0px));
729
783
  pointer-events: none;
730
784
  position: absolute;
731
785
  top: calc(var(--origam-input---padding-top, 16px) + var(--origam-input---density, 0px) - 8px);
@@ -755,7 +809,8 @@ defineExpose({
755
809
 
756
810
  #{$this}__outline {
757
811
  &--start {
758
- flex: 0 0 max(var(--origam-field---padding-start), min(var(--origam-field---border-radius, 8px), var(--origam-input__control---height, 36px)));
812
+ // Meme plancher que le padding, meme canal — cf. #800.
813
+ flex: 0 0 max(var(--origam-field---padding-start), var(--origam-field---corner-clearance));
759
814
  }
760
815
 
761
816
  &--end {
@@ -1060,7 +1115,7 @@ defineExpose({
1060
1115
  // label"). Keep the 4px on the inline-end for notch
1061
1116
  // breathing room.
1062
1117
  margin-block: 0;
1063
- margin-inline: var(--origam-field__input---padding-start, 0) 4px;
1118
+ margin-inline: var(--origam-field__input---padding-start, 0px) 4px;
1064
1119
  }
1065
1120
  }
1066
1121
 
@@ -387,6 +387,7 @@ import OrigamIcon from "../Icon/OrigamIcon.vue";
387
387
  import OrigamInput from "../Input/OrigamInput.vue";
388
388
  import OrigamFileFieldDragNDropItem from "./OrigamFileFieldDragNDropItem.vue";
389
389
  import OrigamFileFieldListItem from "./OrigamFileFieldListItem.vue";
390
+ import { BORDER_PROP_KEYS } from "../../consts/Commons/border.const";
390
391
  import { useAdjacent } from "../../composables/Commons/adjacent.composable";
391
392
  import { useAdjacentInner } from "../../composables/Commons/adjacentInner.composable";
392
393
  import { useBothColor } from "../../composables/Commons/bothColor.composable";
@@ -453,6 +454,21 @@ const props = defineProps({
453
454
  prependInnerIcon: { type: null, required: false, default: MDI_ICONS.PAPERCLIP },
454
455
  clearIcon: { type: null, required: false },
455
456
  clearable: { type: Boolean, required: false, default: true },
457
+ prependInnerAriaLabel: { type: String, required: false },
458
+ appendInnerAriaLabel: { type: String, required: false },
459
+ border: { type: [Boolean, Number, String, Array], required: false, skipCheck: true, default: true },
460
+ borderTop: { type: [Boolean, Number, String], required: false },
461
+ borderLeft: { type: [Boolean, Number, String], required: false },
462
+ borderBottom: { type: [Boolean, Number, String], required: false },
463
+ borderRight: { type: [Boolean, Number, String], required: false },
464
+ borderBlock: { type: [Boolean, Number, String], required: false },
465
+ borderInline: { type: [Boolean, Number, String], required: false },
466
+ borderColor: { type: String, required: false },
467
+ borderStyle: { type: String, required: false },
468
+ borderTopColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
469
+ borderRightColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
470
+ borderBottomColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
471
+ borderLeftColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
456
472
  focused: { type: Boolean, required: false },
457
473
  text: { type: String, required: false },
458
474
  floating: { type: Boolean, required: false },
@@ -471,19 +487,6 @@ const props = defineProps({
471
487
  paddingRight: { type: [Boolean, Number, String], required: false },
472
488
  paddingBlock: { type: [Boolean, Number, String], required: false },
473
489
  paddingInline: { type: [Boolean, Number, String], required: false },
474
- border: { type: [Boolean, Number, String, Array], required: false, skipCheck: true, default: true },
475
- borderTop: { type: [Boolean, Number, String], required: false },
476
- borderLeft: { type: [Boolean, Number, String], required: false },
477
- borderBottom: { type: [Boolean, Number, String], required: false },
478
- borderRight: { type: [Boolean, Number, String], required: false },
479
- borderBlock: { type: [Boolean, Number, String], required: false },
480
- borderInline: { type: [Boolean, Number, String], required: false },
481
- borderColor: { type: String, required: false },
482
- borderStyle: { type: String, required: false },
483
- borderTopColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
484
- borderRightColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
485
- borderBottomColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
486
- borderLeftColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
487
490
  rounded: { type: [Boolean, Number, String, null], required: false, skipCheck: true, default: true },
488
491
  roundedTopRight: { type: [Boolean, Number, String], required: false },
489
492
  roundedTopLeft: { type: [Boolean, Number, String], required: false },
@@ -519,7 +522,9 @@ const props = defineProps({
519
522
  appendAvatar: { type: String, required: false },
520
523
  appendIcon: { type: null, required: false },
521
524
  prependAvatar: { type: String, required: false },
522
- prependIcon: { type: null, required: false }
525
+ prependIcon: { type: null, required: false },
526
+ prependAriaLabel: { type: String, required: false },
527
+ appendAriaLabel: { type: String, required: false }
523
528
  });
524
529
  const isDropzoneMode = computed(() => Boolean(props.dropzone || props.dragndrop));
525
530
  const displayMode = computed(() => {
@@ -740,7 +745,7 @@ const dropzoneSubtitleText = computed(() => {
740
745
  });
741
746
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
742
747
  const inputProps = computed(() => {
743
- return origamInputRef.value?.filterProps(props, ["modelValue", "class", "style", "focused"]);
748
+ return origamInputRef.value?.filterProps(props, ["modelValue", "class", "style", "focused", ...BORDER_PROP_KEYS]);
744
749
  });
745
750
  const fieldProps = computed(() => {
746
751
  return origamFieldRef.value?.filterProps(props, ["class", "style", "id", "active", "dirty", "disabled", "focused", "error"]);
@@ -6,7 +6,7 @@
6
6
  :style="iconStyles"
7
7
  >
8
8
  <svg
9
- aria-hidden="true"
9
+ :aria-hidden="ariaHidden"
10
10
  class="origam-icon__svg"
11
11
  focusable="false"
12
12
  viewBox="0 0 24 24"
@@ -40,6 +40,7 @@ import { computed, StyleValue, toRef } from "vue";
40
40
  import { useBorder } from "../../composables/Commons/border.composable";
41
41
  import { useBothColor } from "../../composables/Commons/bothColor.composable";
42
42
  import { useDimension } from "../../composables/Commons/dimension.composable";
43
+ import { useIconAccessibility } from "../../composables/Icon/iconAccessibility.composable";
43
44
  import { useMargin } from "../../composables/Commons/margin.composable";
44
45
  import { usePadding } from "../../composables/Commons/padding.composable";
45
46
  import { useProps } from "../../composables/Commons/props.composable";
@@ -101,6 +102,7 @@ defineSlots();
101
102
  const isArray = (data) => {
102
103
  return Array.isArray(data);
103
104
  };
105
+ const { ariaHidden } = useIconAccessibility();
104
106
  const { colorClasses, colorStyles } = useBothColor(toRef(props, "bgColor"), toRef(props, "color"));
105
107
  const { borderClasses, borderStyles } = useBorder(props);
106
108
  const { paddingClasses, paddingStyles } = usePadding(props);
@@ -260,8 +260,11 @@ const getSrc = () => {
260
260
  if (img) currentSrc.value = img.currentSrc || img.src;
261
261
  };
262
262
  let timer = -1;
263
+ const bootFrames = /* @__PURE__ */ new Set();
263
264
  onBeforeUnmount(() => {
264
265
  clearTimeout(timer);
266
+ for (const id2 of bootFrames) cancelAnimationFrame(id2);
267
+ bootFrames.clear();
265
268
  });
266
269
  const pollForSize = (img, timeout = 100) => {
267
270
  const poll = () => {
@@ -285,11 +288,15 @@ let stop = null;
285
288
  const markBooted = (val) => {
286
289
  if (val) {
287
290
  if (IN_BROWSER) {
288
- requestAnimationFrame(() => {
289
- requestAnimationFrame(() => {
291
+ const outer = requestAnimationFrame(() => {
292
+ bootFrames.delete(outer);
293
+ const inner = requestAnimationFrame(() => {
294
+ bootFrames.delete(inner);
290
295
  isBooted.value = true;
291
296
  });
297
+ bootFrames.add(inner);
292
298
  });
299
+ bootFrames.add(outer);
293
300
  }
294
301
  stop?.();
295
302
  }