origam 2.32.0 → 2.32.2
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.
- package/CHANGELOG.md +20 -0
- package/dist/src/components/Bracket/OrigamBracketCompetitor.vue +1 -1
- package/dist/src/components/Bracket/OrigamBracketMatch.vue +1 -1
- package/dist/src/components/Breadcrumb/OrigamBreadcrumbItem.vue +1 -1
- package/dist/src/components/Btn/OrigamBtn.vue +20 -10
- package/dist/src/components/Select/OrigamSelect.vue +2 -2
- package/dist/src/components/Sheet/OrigamSheet.vue +1 -1
- package/dist/src/components/TextareaField/OrigamTextareaField.vue +1 -4
- package/dist/src/composables/Commons/dragResizer.composable.cjs +3 -3
- package/dist/src/composables/Commons/dragResizer.composable.d.ts +15 -2
- package/dist/src/composables/Commons/dragResizer.composable.js +5 -5
- package/dist/src/interfaces/Bracket/bracket-competitor-component.interface.d.ts +2 -2
- package/dist/src/interfaces/Bracket/bracket-match-component.interface.d.ts +2 -2
- package/dist/src/interfaces/Breadcrumb/breadcrumb-item.interface.d.ts +9 -3
- package/dist/src/interfaces/Btn/btn.interface.d.ts +9 -2
- package/dist/src/interfaces/Sheet/sheet-emits.interface.d.ts +6 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -18,6 +18,26 @@ This project follows [Semantic Versioning](https://semver.org).
|
|
|
18
18
|
|
|
19
19
|
## [Unreleased]
|
|
20
20
|
|
|
21
|
+
## [2.32.2] - 2026-10-17
|
|
22
|
+
|
|
23
|
+
### Fixed — `OrigamBtn` : libellé collé en haut au lieu d'être centré (#1168)
|
|
24
|
+
|
|
25
|
+
Régression publiée de 2.29.1 à 2.32.1, introduite par #1094. La hauteur du bouton est devenue `height: auto` + `min-height`, et le `height: 100%` de la grille interne `.origam-btn__loader` ne se résolvait plus contre une hauteur automatique. La racine était `inline-block`, donc son `align-items: center` restait sans effet. Résultat : un bouton rendu en `<a>` (`href` / `to`) affichait son contenu d'une ligne collé en haut de la boîte. Mesuré en Chromium : écart de 4 à 21 px entre le centre du contenu et le centre du bouton, 35 boutons `<a>` d'une ligne décentrés sur les 40 de la matrice. Les 5 autres avaient une hauteur fixe (`icon`, prop `height`), étaient en `block` (déjà en flex), ou avaient un contenu aussi haut que le minimum (x-small compact). Un `<button>` natif masquait le défaut, puisque le navigateur centre lui-même son contenu.
|
|
26
|
+
|
|
27
|
+
- La racine passe de `inline-block` à `inline-flex`, et son `align-items: center` prend enfin effet. Elle reste de niveau inline (#933). Dans un parent flex ou grid, elle est blockifiée en `flex` au lieu de `block`. `block` (`display: flex`, #1095) et `wrap` (le bouton grandit avec son contenu, #1094) sont inchangés.
|
|
28
|
+
- `inline-flex` plutôt que `inline-grid`, d'après la mesure : la directive ripple ajoute un `origam-ripple__container` dans le flux pendant l'appui. Avec une racine en grille, ce conteneur prend une rangée implicite et le libellé saute de 4 px à chaque clic.
|
|
29
|
+
- Effet de bord mesuré : les boutons perdent environ 1 px de largeur (0,9 à 1,6 px). Ce pixel venait du `letter-spacing` ajouté après la grille interne quand elle était posée dans une ligne inline. Le libellé est maintenant à égale distance des deux bords (12 px / 12 px au lieu de 13,1 px / 12 px). Aucune hauteur ne change.
|
|
30
|
+
|
|
31
|
+
## [2.32.1] - 2026-10-16
|
|
32
|
+
|
|
33
|
+
### Fixed — trois avertissements console en dev (#1152)
|
|
34
|
+
|
|
35
|
+
Relevés pendant les e2e du playground, tous trois venaient de `packages/ds/src`, donc de tous les consommateurs en mode dev :
|
|
36
|
+
|
|
37
|
+
- **`update:hover` émis sans être déclaré** par `OrigamBtn`, `OrigamBreadcrumbItem`, `OrigamBracketMatch`, `OrigamBracketCompetitor` et `OrigamSheet`. `useStateFlag(props, {state: 'hover'})` écrit dans le v-model `hover` à chaque `mouseenter` / `mouseleave`. Vue avertissait donc à chaque survol, et le handler `onUpdate:hover` restait dans `$attrs`. Les cinq interfaces d'emits étendent maintenant `IHoverEmits`, et chaque story a sa Variant `Events - update:hover`, rangée dans la section EMITS. Les index positionnels des specs qui suivent sont recalés : `btn`, `btn-wrap-height`, `btn-block-flex`, `btn-border`, `btn-cascade-layer-probe`, `vrt/btn-variant` et `breadcrumb`.
|
|
38
|
+
- **`[Origam] A clickable icon is a button…`** au montage de chaque `OrigamSelect`, deux fois (sur `OrigamIcon` et sur l'`OrigamClassIcon` où l'écouteur retombait). En cause, le chevron du menu, qui portait un `@click="noop"` hérité de Vuetify. Ce handler sans effet faisait aussi passer le chevron à `aria-hidden="false"` : un glyphe décoratif était exposé aux technologies d'assistance, sans nom ni chemin clavier. Le handler est retiré. Le chevron redevient `aria-hidden="true"`, et le curseur `pointer` est conservé par une règle scopée sur `.origam-select__menu-icon`. Avant, il venait de `.origam-icon--clickable`. Sans la règle, le curseur mesuré passe à `auto`, et avec elle à `pointer`. L'ouverture du menu à la souris passe toujours par `@mousedown`.
|
|
39
|
+
- **`onUnmounted is called when there is no active component instance`** venait de `OrigamTextareaField`, qui appelait `useDragResizer` depuis un `watch`. Le nettoyage des écouteurs `window` n'était donc jamais enregistré, et chaque changement de `rows` / `maxRows` ajoutait un `mousedown` de plus sur la poignée (3 écouteurs mesurés après deux changements). `useDragResizer` accepte maintenant un `Ref` pour `el` et des `Ref` / getters pour `min` / `max`, s'appelle une seule fois dans `setup()` et nettoie via `tryOnScopeDispose`. La signature est élargie, sans rupture : les valeurs brutes restent acceptées.
|
|
40
|
+
|
|
21
41
|
## [2.32.0] - 2026-10-15
|
|
22
42
|
|
|
23
43
|
### Added — `OrigamCard` : `contentDisplay`, `hover` en objet (#1100)
|
|
@@ -151,7 +151,7 @@ const props = defineProps({
|
|
|
151
151
|
fontSize: { type: null, required: false },
|
|
152
152
|
fontWeight: { type: null, required: false }
|
|
153
153
|
});
|
|
154
|
-
const emit = defineEmits(["click", "update:active"]);
|
|
154
|
+
const emit = defineEmits(["click", "update:active", "update:hover"]);
|
|
155
155
|
defineSlots();
|
|
156
156
|
const { filterProps } = useProps(props);
|
|
157
157
|
const { typographyStyles: competitorTypographyStyles } = useTypography(props, "bracket-competitor");
|
|
@@ -176,7 +176,7 @@ const props = defineProps({
|
|
|
176
176
|
marginBlockStart: { type: [Boolean, Number, String], required: false },
|
|
177
177
|
marginBlockEnd: { type: [Boolean, Number, String], required: false }
|
|
178
178
|
});
|
|
179
|
-
const emit = defineEmits(["click", "competitor-click", "winner-click", "update:active"]);
|
|
179
|
+
const emit = defineEmits(["click", "competitor-click", "winner-click", "update:active", "update:hover"]);
|
|
180
180
|
defineSlots();
|
|
181
181
|
const { filterProps } = useProps(props);
|
|
182
182
|
const resolvedStatus = computed(() => props.status ?? props.match.status);
|
|
@@ -158,7 +158,7 @@ const props = defineProps({
|
|
|
158
158
|
active: { type: [Boolean, Object], required: false },
|
|
159
159
|
activeClass: { type: String, required: false }
|
|
160
160
|
});
|
|
161
|
-
defineEmits(["click:append", "click:prepend"]);
|
|
161
|
+
defineEmits(["click:append", "click:prepend", "update:hover"]);
|
|
162
162
|
defineSlots();
|
|
163
163
|
const { filterProps } = useProps(props);
|
|
164
164
|
const attrs = useAttrs();
|
|
@@ -249,7 +249,7 @@ const props = defineProps({
|
|
|
249
249
|
letterSpacing: { type: null, required: false }
|
|
250
250
|
});
|
|
251
251
|
const colorLocked = computed(() => props.color ? "true" : void 0);
|
|
252
|
-
defineEmits(["group:selected"]);
|
|
252
|
+
defineEmits(["group:selected", "update:hover"]);
|
|
253
253
|
defineSlots();
|
|
254
254
|
const { filterProps } = useProps(props);
|
|
255
255
|
const origamProgressRef = ref();
|
|
@@ -455,15 +455,25 @@ defineExpose({
|
|
|
455
455
|
// Btn roots computed `display: block` with a `display: flex` parent,
|
|
456
456
|
// and the single Btn inside a `<p>` computed `inline` at 984px wide.
|
|
457
457
|
//
|
|
458
|
-
//
|
|
459
|
-
//
|
|
460
|
-
//
|
|
461
|
-
//
|
|
462
|
-
//
|
|
463
|
-
|
|
464
|
-
//
|
|
465
|
-
//
|
|
466
|
-
//
|
|
458
|
+
// The root must stay INLINE-LEVEL (#933) — `vertical-align: middle` right
|
|
459
|
+
// below only has meaning on an inline-level box, and a Btn in a `<p>`
|
|
460
|
+
// must shrink to its content. Inside a flex/grid parent it blockifies to
|
|
461
|
+
// `flex`; `&--block` declares `flex` explicitly.
|
|
462
|
+
//
|
|
463
|
+
// ⛔ #1168 — it is `inline-flex`, not `inline-block`. Since #1094 the
|
|
464
|
+
// height is `auto` + `min-height`, and `__loader`'s `height: 100%` no
|
|
465
|
+
// longer resolves against an auto height: on an `<a>` (`href` / `to`) the
|
|
466
|
+
// label sat at the TOP of the box — 12 px of content glued under the top
|
|
467
|
+
// edge of a 28 px button (published 2.29.1 → 2.32.1). A `<button>` hid
|
|
468
|
+
// it, because the UA centres a button's content on its own. A flex root
|
|
469
|
+
// centres `__loader` with `align-items: center` below, on every tag.
|
|
470
|
+
//
|
|
471
|
+
// `inline-flex` rather than `inline-grid`, measured: the ripple directive
|
|
472
|
+
// appends an in-flow `origam-ripple__container` to this root while the
|
|
473
|
+
// pointer is down. A grid root gives it an implicit row that takes half
|
|
474
|
+
// the free height, and the label jumps 4 px on every press; a flex row
|
|
475
|
+
// leaves the label where it is.
|
|
476
|
+
display: inline-flex;
|
|
467
477
|
align-items: center;
|
|
468
478
|
|
|
469
479
|
position: var(--origam-btn---position, relative);
|
|
@@ -246,7 +246,6 @@
|
|
|
246
246
|
<origam-icon
|
|
247
247
|
:icon="menuIcon"
|
|
248
248
|
class="origam-select__menu-icon"
|
|
249
|
-
@click="noop"
|
|
250
249
|
@mousedown="handleMousedownMenuIcon"
|
|
251
250
|
/>
|
|
252
251
|
</slot>
|
|
@@ -316,7 +315,7 @@ import { MDI_ICONS } from "../../enums/Commons/mdi.enum";
|
|
|
316
315
|
import { SELECT_STRATEGY } from "../../enums/Commons/nested.enum";
|
|
317
316
|
import { SIZES } from "../../enums/Commons/size.enum";
|
|
318
317
|
import { TEXT_FIELD_TYPE } from "../../enums/TextField/text-field.enum";
|
|
319
|
-
import { deepEqual, matchesSelector,
|
|
318
|
+
import { deepEqual, matchesSelector, wrapInArray } from "../../utils/Commons/commons.util";
|
|
320
319
|
import { forwardRefs } from "../../utils/Commons/forwardRefs.util";
|
|
321
320
|
import { getUid } from "../../utils/Commons/getCurrentInstance.util";
|
|
322
321
|
const props = defineProps({
|
|
@@ -1066,6 +1065,7 @@ defineExpose(forwardRefs({
|
|
|
1066
1065
|
}
|
|
1067
1066
|
|
|
1068
1067
|
&__menu-icon {
|
|
1068
|
+
cursor: pointer;
|
|
1069
1069
|
margin-inline-start: 4px;
|
|
1070
1070
|
transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
1071
1071
|
}
|
|
@@ -123,7 +123,7 @@ const props = defineProps({
|
|
|
123
123
|
hover: { type: [Boolean, Object], required: false },
|
|
124
124
|
hoverClass: { type: String, required: false }
|
|
125
125
|
});
|
|
126
|
-
const emit = defineEmits(["update:snap", "update:open", "update:active"]);
|
|
126
|
+
const emit = defineEmits(["update:snap", "update:open", "update:active", "update:hover"]);
|
|
127
127
|
defineSlots();
|
|
128
128
|
const { filterProps } = useProps(props);
|
|
129
129
|
const { colorClasses, colorStyles } = useBothColor(
|
|
@@ -611,10 +611,7 @@ watch([model, () => props.maxRows, () => props.density, () => props.rows, active
|
|
|
611
611
|
watch(minHeight, () => {
|
|
612
612
|
controlHeight.value = minHeight.value;
|
|
613
613
|
});
|
|
614
|
-
|
|
615
|
-
if (!verticalDragger.value) return;
|
|
616
|
-
useDragResizer(verticalDragger.value, controlHeight, minHeight.value, maxHeight.value, AXIS.Y);
|
|
617
|
-
});
|
|
614
|
+
useDragResizer(verticalDragger, controlHeight, minHeight, maxHeight, AXIS.Y);
|
|
618
615
|
watch(controlHeight, (newHeight) => {
|
|
619
616
|
nextTick(() => {
|
|
620
617
|
if (!textareaRef.value) return;
|
|
@@ -12,7 +12,7 @@ function useDragResizer(el, value, min, max, axis) {
|
|
|
12
12
|
const resizing = (0, _vue.ref)(false);
|
|
13
13
|
const removeListeners = [];
|
|
14
14
|
const onUnmountedCleanupFns = [];
|
|
15
|
-
(0,
|
|
15
|
+
(0, _commons.tryOnScopeDispose)(() => {
|
|
16
16
|
onUnmountedCleanupFns.forEach(fn => fn());
|
|
17
17
|
});
|
|
18
18
|
const isHorizontal = (0, _vue.computed)(() => {
|
|
@@ -31,7 +31,7 @@ function useDragResizer(el, value, min, max, axis) {
|
|
|
31
31
|
const onMouseMove = e2 => {
|
|
32
32
|
const clickOffset = (0, _commons.getPosition)(e2, isHorizontal.value ? _enums.CLIENT_POSITION.X : _enums.CLIENT_POSITION.Y);
|
|
33
33
|
const delta = clickOffset - start;
|
|
34
|
-
value.value = (0, _commons.clamp)(initialStart + delta, min, max);
|
|
34
|
+
value.value = (0, _commons.clamp)(initialStart + delta, (0, _vue.toValue)(min), (0, _vue.toValue)(max));
|
|
35
35
|
};
|
|
36
36
|
const onMouseUp = onDragEnd;
|
|
37
37
|
removeListeners.push(...[(0, _commons.addWindowListener)("mousemove", onMouseMove, onUnmountedCleanupFns), (0, _commons.addWindowListener)("mouseup", onMouseUp, onUnmountedCleanupFns)]);
|
|
@@ -45,7 +45,7 @@ function useDragResizer(el, value, min, max, axis) {
|
|
|
45
45
|
const onTouchMove = e2 => {
|
|
46
46
|
const clickOffset = (0, _commons.getPosition)(e2, isHorizontal.value ? _enums.CLIENT_POSITION.X : _enums.CLIENT_POSITION.Y);
|
|
47
47
|
const delta = clickOffset - start;
|
|
48
|
-
value.value =
|
|
48
|
+
value.value = (0, _commons.clamp)(initialStart + delta, (0, _vue.toValue)(min), (0, _vue.toValue)(max));
|
|
49
49
|
};
|
|
50
50
|
const onTouchEnd = onDragEnd;
|
|
51
51
|
removeListeners.push(...[(0, _commons.addWindowListener)("touchmove", onTouchMove, onUnmountedCleanupFns), (0, _commons.addWindowListener)("touchend", onTouchEnd, onUnmountedCleanupFns), (0, _commons.addWindowListener)("touchcancel", onTouchEnd, onUnmountedCleanupFns)]);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ref } from 'vue';
|
|
1
|
+
import type { MaybeRef, MaybeRefOrGetter, Ref } from 'vue';
|
|
2
2
|
import type { TAxis } from '../../types/Commons/axis.type';
|
|
3
3
|
/*********************************************************
|
|
4
4
|
* useDragResizer
|
|
@@ -15,5 +15,18 @@ import type { TAxis } from '../../types/Commons/axis.type';
|
|
|
15
15
|
* commente en mort dans le code et un `// TODO - Rework for both axis`
|
|
16
16
|
* l'annonce explicitement. Passer `AXIS.Y` fait juste tomber dans la
|
|
17
17
|
* branche verticale de `getPosition` sans etre teste par ce composable.
|
|
18
|
+
*
|
|
19
|
+
* @description
|
|
20
|
+
* ⛔ #1152 — `el`, `min` et `max` acceptent un `Ref` (ou un getter pour
|
|
21
|
+
* les bornes) pour que le composable s'appelle UNE fois, dans `setup()`.
|
|
22
|
+
* Son seul consommateur, `OrigamTextareaField`, l'appelait depuis un
|
|
23
|
+
* `watch` sur `[poignee, minHeight, maxHeight]` parce que la poignee
|
|
24
|
+
* n'existe qu'apres le montage et que les bornes bougent. Deux defauts en
|
|
25
|
+
* decoulaient : `onUnmounted` hors instance (Vue avertissait, le nettoyage
|
|
26
|
+
* des listeners `window` n'etait JAMAIS enregistre), et un `mousedown`
|
|
27
|
+
* SUPPLEMENTAIRE a chaque changement de borne, chacun avec ses bornes
|
|
28
|
+
* figees. `useEventListener` suit deja une cible `Ref`, et les bornes sont
|
|
29
|
+
* lues a chaque geste : rien n'oblige plus a rappeler le composable. Le
|
|
30
|
+
* nettoyage passe par `tryOnScopeDispose`, comme `useEventListener`.
|
|
18
31
|
********************************************************/
|
|
19
|
-
export declare function useDragResizer(el: HTMLElement | undefined
|
|
32
|
+
export declare function useDragResizer(el: MaybeRef<HTMLElement | undefined>, value: Ref<number>, min: MaybeRefOrGetter<number>, max: MaybeRefOrGetter<number>, axis: TAxis): void;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { computed,
|
|
1
|
+
import { computed, ref, toValue } from "vue";
|
|
2
2
|
import { useEventListener } from "./eventListener.composable.js";
|
|
3
3
|
import { AXIS, CLIENT_POSITION } from "../../enums/index.js";
|
|
4
|
-
import { addWindowListener, clamp, getPosition } from "../../utils/Commons/commons.util.js";
|
|
4
|
+
import { addWindowListener, clamp, getPosition, tryOnScopeDispose } from "../../utils/Commons/commons.util.js";
|
|
5
5
|
export function useDragResizer(el, value, min, max, axis) {
|
|
6
6
|
const resizing = ref(false);
|
|
7
7
|
const removeListeners = [];
|
|
8
8
|
const onUnmountedCleanupFns = [];
|
|
9
|
-
|
|
9
|
+
tryOnScopeDispose(() => {
|
|
10
10
|
onUnmountedCleanupFns.forEach((fn) => fn());
|
|
11
11
|
});
|
|
12
12
|
const isHorizontal = computed(() => {
|
|
@@ -25,7 +25,7 @@ export function useDragResizer(el, value, min, max, axis) {
|
|
|
25
25
|
const onMouseMove = (e2) => {
|
|
26
26
|
const clickOffset = getPosition(e2, isHorizontal.value ? CLIENT_POSITION.X : CLIENT_POSITION.Y);
|
|
27
27
|
const delta = clickOffset - start;
|
|
28
|
-
value.value = clamp(initialStart + delta, min, max);
|
|
28
|
+
value.value = clamp(initialStart + delta, toValue(min), toValue(max));
|
|
29
29
|
};
|
|
30
30
|
const onMouseUp = onDragEnd;
|
|
31
31
|
removeListeners.push(...[
|
|
@@ -42,7 +42,7 @@ export function useDragResizer(el, value, min, max, axis) {
|
|
|
42
42
|
const onTouchMove = (e2) => {
|
|
43
43
|
const clickOffset = getPosition(e2, isHorizontal.value ? CLIENT_POSITION.X : CLIENT_POSITION.Y);
|
|
44
44
|
const delta = clickOffset - start;
|
|
45
|
-
value.value =
|
|
45
|
+
value.value = clamp(initialStart + delta, toValue(min), toValue(max));
|
|
46
46
|
};
|
|
47
47
|
const onTouchEnd = onDragEnd;
|
|
48
48
|
removeListeners.push(...[
|
|
@@ -5,7 +5,7 @@ import type { ICommonsComponentProps, ITagProps } from '../Commons/commons.inter
|
|
|
5
5
|
import type { IDensityProps } from '../Commons/density.interface';
|
|
6
6
|
import type { IDimensionProps } from '../Commons/dimension.interface';
|
|
7
7
|
import type { IElevationProps } from '../Commons/elevation.interface';
|
|
8
|
-
import type { IHoverProps } from '../Commons/hover.interface';
|
|
8
|
+
import type { IHoverEmits, IHoverProps } from '../Commons/hover.interface';
|
|
9
9
|
import type { IMarginProps } from '../Commons/margin.interface';
|
|
10
10
|
import type { IPaddingProps } from '../Commons/padding.interface';
|
|
11
11
|
import type { IRoundedProps } from '../Commons/rounded.interface';
|
|
@@ -75,7 +75,7 @@ export interface IBracketCompetitorProps extends ICommonsComponentProps, ITagPro
|
|
|
75
75
|
}
|
|
76
76
|
/** Emits fired by `<OrigamBracketCompetitor>` — click (mouse) / activation
|
|
77
77
|
* (Enter / Space when `interactive`) on the row. */
|
|
78
|
-
export interface IBracketCompetitorEmits extends IActiveEmits {
|
|
78
|
+
export interface IBracketCompetitorEmits extends IActiveEmits, IHoverEmits {
|
|
79
79
|
(e: 'click', event: MouseEvent | KeyboardEvent): void;
|
|
80
80
|
}
|
|
81
81
|
/*********************************************************
|
|
@@ -5,7 +5,7 @@ import type { ICommonsComponentProps, ITagProps } from '../Commons/commons.inter
|
|
|
5
5
|
import type { IDensityProps } from '../Commons/density.interface';
|
|
6
6
|
import type { IDimensionProps } from '../Commons/dimension.interface';
|
|
7
7
|
import type { IElevationProps } from '../Commons/elevation.interface';
|
|
8
|
-
import type { IHoverProps } from '../Commons/hover.interface';
|
|
8
|
+
import type { IHoverEmits, IHoverProps } from '../Commons/hover.interface';
|
|
9
9
|
import type { IMarginProps } from '../Commons/margin.interface';
|
|
10
10
|
import type { IPaddingProps } from '../Commons/padding.interface';
|
|
11
11
|
import type { IRoundedProps } from '../Commons/rounded.interface';
|
|
@@ -64,7 +64,7 @@ export interface IBracketMatchProps extends ICommonsComponentProps, ITagProps, I
|
|
|
64
64
|
/** Emits fired by `<OrigamBracketMatch>` — click on the card itself
|
|
65
65
|
* (outside a competitor row), and the two per-competitor channels the
|
|
66
66
|
* card re-emits on behalf of its `competitor` slot / default rows. */
|
|
67
|
-
export interface IBracketMatchEmits extends IActiveEmits {
|
|
67
|
+
export interface IBracketMatchEmits extends IActiveEmits, IHoverEmits {
|
|
68
68
|
(e: 'click', match: IBracketMatch, event: MouseEvent): void;
|
|
69
69
|
(e: 'competitor-click', competitor: IBracketCompetitor, match: IBracketMatch, side: 'A' | 'B', event: MouseEvent | KeyboardEvent): void;
|
|
70
70
|
(e: 'winner-click', competitor: IBracketCompetitor, match: IBracketMatch, event: MouseEvent | KeyboardEvent): void;
|
|
@@ -4,7 +4,7 @@ import type { IBorderProps } from '../Commons/border.interface';
|
|
|
4
4
|
import type { IBgColorProps, IColorProps } from '../Commons/color.interface';
|
|
5
5
|
import type { ICommonsComponentProps, ITagProps } from '../Commons/commons.interface';
|
|
6
6
|
import type { IDensityProps } from '../Commons/density.interface';
|
|
7
|
-
import type { IHoverProps } from '../Commons/hover.interface';
|
|
7
|
+
import type { IHoverEmits, IHoverProps } from '../Commons/hover.interface';
|
|
8
8
|
import type { ILinkProps } from '../Commons/router.interface';
|
|
9
9
|
import type { IMarginProps } from '../Commons/margin.interface';
|
|
10
10
|
import type { IPaddingProps } from '../Commons/padding.interface';
|
|
@@ -13,8 +13,14 @@ export interface IBreadcrumbItemProps extends ICommonsComponentProps, ITagProps,
|
|
|
13
13
|
title: string;
|
|
14
14
|
disabled?: boolean;
|
|
15
15
|
}
|
|
16
|
-
/** Emits fired by `<OrigamBreadcrumbItem>` — clicks on prepend/append icons
|
|
17
|
-
|
|
16
|
+
/** Emits fired by `<OrigamBreadcrumbItem>` — clicks on prepend/append icons,
|
|
17
|
+
* plus `update:hover`.
|
|
18
|
+
*
|
|
19
|
+
* ⛔ #1152 — `update:hover` partait sans etre declare : `useStateFlag(props,
|
|
20
|
+
* {state: 'hover'})` ecrit dans le v-model `hover` depuis `set()` /
|
|
21
|
+
* `unset()`, cables sur `@mouseenter` / `@mouseleave`. Prouve dans
|
|
22
|
+
* `packages/tests/TU/origam/relay-emits-declaration.spec.ts`. */
|
|
23
|
+
export interface IBreadcrumbItemEmits extends IAdjacentEmits, IHoverEmits {
|
|
18
24
|
}
|
|
19
25
|
/** Slot signatures for `<OrigamBreadcrumbItem>`. */
|
|
20
26
|
export interface IBreadcrumbItemSlots extends IAdjacentSlots {
|
|
@@ -7,7 +7,7 @@ import type { IDensityProps } from '../Commons/density.interface';
|
|
|
7
7
|
import type { IDimensionProps } from '../Commons/dimension.interface';
|
|
8
8
|
import type { IElevationProps } from '../Commons/elevation.interface';
|
|
9
9
|
import type { IGroupEmits, IGroupItemProps } from '../Commons/group.interface';
|
|
10
|
-
import type { IHoverProps } from '../Commons/hover.interface';
|
|
10
|
+
import type { IHoverEmits, IHoverProps } from '../Commons/hover.interface';
|
|
11
11
|
import type { ILinkProps } from '../Commons/router.interface';
|
|
12
12
|
import type { IControlLoaderProps } from '../Commons/loader.interface';
|
|
13
13
|
import type { ILocationProps } from '../Commons/location.interface';
|
|
@@ -56,8 +56,15 @@ export interface IBtnProps extends ICommonsComponentProps, IColorProps, IBgColor
|
|
|
56
56
|
*
|
|
57
57
|
* Two actions are two buttons: compose them with `<origam-btn-group>`. The
|
|
58
58
|
* `prepend` / `append` SLOTS are unaffected — see {@link IBtnSlots}.
|
|
59
|
+
*
|
|
60
|
+
* ⛔ #1152 — `update:hover` used to leave UNDECLARED: `useStateFlag(props,
|
|
61
|
+
* {state: 'hover'})` writes through the `hover` v-model from `set()` /
|
|
62
|
+
* `unset()`, wired on `@mouseenter` / `@mouseleave`. Vue warned on EVERY
|
|
63
|
+
* hover of every button ("neither declared in the emits option"), and the
|
|
64
|
+
* `onUpdate:hover` handler stayed in `$attrs`. Pinned by
|
|
65
|
+
* `packages/tests/TU/origam/relay-emits-declaration.spec.ts`.
|
|
59
66
|
*/
|
|
60
|
-
export interface IBtnEmits extends IGroupEmits {
|
|
67
|
+
export interface IBtnEmits extends IGroupEmits, IHoverEmits {
|
|
61
68
|
}
|
|
62
69
|
/** Slot signatures for `<OrigamBtn>`. */
|
|
63
70
|
export interface IBtnSlots extends IAdjacentSlots {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { IActiveEmits } from '../Commons/active.interface';
|
|
2
|
+
import type { IHoverEmits } from '../Commons/hover.interface';
|
|
2
3
|
import type { TSheetSnapId } from '../../types/Sheet/sheet.type';
|
|
3
4
|
/**
|
|
4
5
|
* Emit signature for `<OrigamSheet>`.
|
|
@@ -21,8 +22,12 @@ import type { TSheetSnapId } from '../../types/Sheet/sheet.type';
|
|
|
21
22
|
* lie que `@click`, et son `tag` par défaut est `div` — donc aucun
|
|
22
23
|
* élément natif ne convertit une touche en clic. Le chemin clavier
|
|
23
24
|
* n'existe pas.
|
|
25
|
+
* - `update:hover` (⛔ #1152) vient de `useStateFlag(props, { state: 'hover' })` :
|
|
26
|
+
* `set()` / `unset()` cables sur `@mouseenter` / `@mouseleave`. Partait
|
|
27
|
+
* sans etre declare. Prouve dans
|
|
28
|
+
* `packages/tests/TU/origam/relay-emits-declaration.spec.ts`.
|
|
24
29
|
*/
|
|
25
|
-
export interface ISheetEmits extends IActiveEmits {
|
|
30
|
+
export interface ISheetEmits extends IActiveEmits, IHoverEmits {
|
|
26
31
|
(e: 'update:snap', id: TSheetSnapId): void;
|
|
27
32
|
(e: 'update:open', value: boolean): void;
|
|
28
33
|
}
|