@dnax/ui 0.0.34 → 0.0.36
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/components/QBreadcrumbs.vue +132 -0
- package/components/QBreadcrumbsEl.vue +84 -0
- package/components/QBtnActions.vue +113 -19
- package/components/QBtnDropdown.vue +134 -0
- package/components/_QBtnActionsLegacy.vue +254 -0
- package/components/internal/RenderNodes.vue +23 -0
- package/index.ts +5 -0
- package/lib/ripple.ts +322 -0
- package/module.ts +8 -2
- package/package.json +2 -2
- package/scripts/generate-exports.ts +3 -1
- package/styles/main.css +176 -0
package/styles/main.css
CHANGED
|
@@ -2440,6 +2440,15 @@ html.dark body {
|
|
|
2440
2440
|
margin-left: -1px;
|
|
2441
2441
|
}
|
|
2442
2442
|
|
|
2443
|
+
.q-btn-group--stretch {
|
|
2444
|
+
/* stretch : la racine doit faire 100 % de large. Sinon `display: inline-flex`
|
|
2445
|
+
réduit le groupe à la taille de son contenu et `flex: 1 1 auto` sur les
|
|
2446
|
+
boutons (règle ci-dessous) n'a aucun effet. Même correctif que QTabs
|
|
2447
|
+
(`.q-tabs--stretch`) — un simple `class="w-full"` côté consommateur
|
|
2448
|
+
contournait le problème. */
|
|
2449
|
+
width: 100%;
|
|
2450
|
+
}
|
|
2451
|
+
|
|
2443
2452
|
.q-btn-group--stretch > .q-btn {
|
|
2444
2453
|
flex: 1 1 auto;
|
|
2445
2454
|
}
|
|
@@ -2451,10 +2460,23 @@ html.dark body {
|
|
|
2451
2460
|
vertical-align: middle;
|
|
2452
2461
|
}
|
|
2453
2462
|
|
|
2463
|
+
.q-btn-actions--stretch {
|
|
2464
|
+
/* stretch : la racine doit elle-même faire 100 % de large, sinon son parent
|
|
2465
|
+
`inline-flex` « shrink-to-fit » l'épouse au contenu et le `width: 100%` du
|
|
2466
|
+
QBtn interne (`.q-btn--stretch`) n'a pas de référentiel → rien ne s'étire.
|
|
2467
|
+
Même correctif que QTabs (`.q-tabs--stretch`). */
|
|
2468
|
+
width: 100%;
|
|
2469
|
+
}
|
|
2470
|
+
|
|
2454
2471
|
.q-btn-actions__caret {
|
|
2455
2472
|
width: 1em;
|
|
2456
2473
|
height: 1em;
|
|
2457
2474
|
flex-shrink: 0;
|
|
2475
|
+
/* Caret toujours à l'extrémité DROITE du bouton : quand le bouton est plus
|
|
2476
|
+
large que son contenu (stretch / largeur fixe type 400px), la marge auto
|
|
2477
|
+
absorbe l'espace libre et colle le chevron au bord — sans toucher aux
|
|
2478
|
+
boutons à taille naturelle (aucun espace libre → aucun effet). */
|
|
2479
|
+
margin-left: auto;
|
|
2458
2480
|
transition: transform 0.2s ease;
|
|
2459
2481
|
}
|
|
2460
2482
|
|
|
@@ -3954,6 +3976,117 @@ html.dark body {
|
|
|
3954
3976
|
height: 2px;
|
|
3955
3977
|
}
|
|
3956
3978
|
|
|
3979
|
+
/* ===== QBreadcrumbs ===== */
|
|
3980
|
+
.q-breadcrumbs {
|
|
3981
|
+
--q-breadcrumbs-gutter: 8px;
|
|
3982
|
+
--q-breadcrumbs-color: rgb(0 0 0 / 0.6);
|
|
3983
|
+
--q-breadcrumbs-sep-color: rgb(0 0 0 / 0.42);
|
|
3984
|
+
--q-breadcrumbs-active-color: var(--primary);
|
|
3985
|
+
|
|
3986
|
+
font-size: 14px;
|
|
3987
|
+
line-height: 1.5;
|
|
3988
|
+
color: var(--foreground);
|
|
3989
|
+
}
|
|
3990
|
+
|
|
3991
|
+
.dark .q-breadcrumbs {
|
|
3992
|
+
--q-breadcrumbs-color: rgb(255 255 255 / 0.66);
|
|
3993
|
+
--q-breadcrumbs-sep-color: rgb(255 255 255 / 0.42);
|
|
3994
|
+
}
|
|
3995
|
+
|
|
3996
|
+
.q-breadcrumbs__list {
|
|
3997
|
+
display: flex;
|
|
3998
|
+
align-items: center;
|
|
3999
|
+
flex-wrap: wrap;
|
|
4000
|
+
gap: var(--q-breadcrumbs-gutter);
|
|
4001
|
+
margin: 0;
|
|
4002
|
+
padding: 0;
|
|
4003
|
+
list-style: none;
|
|
4004
|
+
}
|
|
4005
|
+
|
|
4006
|
+
.q-breadcrumbs--center .q-breadcrumbs__list {
|
|
4007
|
+
justify-content: center;
|
|
4008
|
+
}
|
|
4009
|
+
|
|
4010
|
+
.q-breadcrumbs--right .q-breadcrumbs__list {
|
|
4011
|
+
justify-content: flex-end;
|
|
4012
|
+
}
|
|
4013
|
+
|
|
4014
|
+
.q-breadcrumbs__item {
|
|
4015
|
+
display: inline-flex;
|
|
4016
|
+
align-items: center;
|
|
4017
|
+
min-width: 0;
|
|
4018
|
+
color: var(--q-breadcrumbs-color);
|
|
4019
|
+
transition: color 0.15s ease;
|
|
4020
|
+
}
|
|
4021
|
+
|
|
4022
|
+
.q-breadcrumbs__item--last {
|
|
4023
|
+
color: var(--q-breadcrumbs-active-color);
|
|
4024
|
+
font-weight: 600;
|
|
4025
|
+
}
|
|
4026
|
+
|
|
4027
|
+
.q-breadcrumbs__el {
|
|
4028
|
+
display: inline-flex;
|
|
4029
|
+
align-items: center;
|
|
4030
|
+
gap: 6px;
|
|
4031
|
+
max-width: 100%;
|
|
4032
|
+
color: inherit;
|
|
4033
|
+
text-decoration: none;
|
|
4034
|
+
cursor: default;
|
|
4035
|
+
transition: color 0.15s ease;
|
|
4036
|
+
}
|
|
4037
|
+
|
|
4038
|
+
.q-breadcrumbs__el svg {
|
|
4039
|
+
width: 1.15em;
|
|
4040
|
+
height: 1.15em;
|
|
4041
|
+
flex-shrink: 0;
|
|
4042
|
+
}
|
|
4043
|
+
|
|
4044
|
+
.q-breadcrumbs__el-icon {
|
|
4045
|
+
display: inline-flex;
|
|
4046
|
+
}
|
|
4047
|
+
|
|
4048
|
+
a.q-breadcrumbs__el {
|
|
4049
|
+
cursor: pointer;
|
|
4050
|
+
}
|
|
4051
|
+
|
|
4052
|
+
a.q-breadcrumbs__el:hover {
|
|
4053
|
+
color: var(--q-breadcrumbs-active-color);
|
|
4054
|
+
text-decoration: underline;
|
|
4055
|
+
text-underline-offset: 3px;
|
|
4056
|
+
}
|
|
4057
|
+
|
|
4058
|
+
.q-breadcrumbs__el:focus-visible {
|
|
4059
|
+
outline: 2px solid var(--q-breadcrumbs-active-color);
|
|
4060
|
+
outline-offset: 2px;
|
|
4061
|
+
border-radius: 4px;
|
|
4062
|
+
}
|
|
4063
|
+
|
|
4064
|
+
.q-breadcrumbs__el--disabled {
|
|
4065
|
+
opacity: 0.45;
|
|
4066
|
+
pointer-events: none;
|
|
4067
|
+
}
|
|
4068
|
+
|
|
4069
|
+
.q-breadcrumbs__separator {
|
|
4070
|
+
display: inline-flex;
|
|
4071
|
+
align-items: center;
|
|
4072
|
+
flex-shrink: 0;
|
|
4073
|
+
color: var(--q-breadcrumbs-sep-color);
|
|
4074
|
+
user-select: none;
|
|
4075
|
+
}
|
|
4076
|
+
|
|
4077
|
+
.q-breadcrumbs__separator svg {
|
|
4078
|
+
width: 1em;
|
|
4079
|
+
height: 1em;
|
|
4080
|
+
}
|
|
4081
|
+
|
|
4082
|
+
.q-breadcrumbs--dense {
|
|
4083
|
+
font-size: 12.5px;
|
|
4084
|
+
}
|
|
4085
|
+
|
|
4086
|
+
.q-breadcrumbs--dense .q-breadcrumbs__el {
|
|
4087
|
+
gap: 4px;
|
|
4088
|
+
}
|
|
4089
|
+
|
|
3957
4090
|
/* ===== QSeparator ===== */
|
|
3958
4091
|
.q-separator {
|
|
3959
4092
|
border: none;
|
|
@@ -10651,3 +10784,46 @@ html.dark body {
|
|
|
10651
10784
|
.q-board--dense .q-board__cell-label {
|
|
10652
10785
|
font-size: 9px;
|
|
10653
10786
|
}
|
|
10787
|
+
|
|
10788
|
+
/* ===== v-ripple — onde « material ripple » =====
|
|
10789
|
+
Conteneur injecté par la directive dans l'élément hôte (position absolute,
|
|
10790
|
+
100 %×100 %, overflow hidden + border-radius: inherit → l'onde est clippée à
|
|
10791
|
+
la forme de l'hôte, sans imposer `overflow: hidden` au consommateur).
|
|
10792
|
+
La pastille utilise `currentColor` par défaut ; `v-ripple:primary` ou
|
|
10793
|
+
`{ color }` posent la couleur en inline (tokens → var(--token)). */
|
|
10794
|
+
.q-ripple {
|
|
10795
|
+
position: absolute;
|
|
10796
|
+
top: 0;
|
|
10797
|
+
left: 0;
|
|
10798
|
+
width: 100%;
|
|
10799
|
+
height: 100%;
|
|
10800
|
+
z-index: 0;
|
|
10801
|
+
contain: strict;
|
|
10802
|
+
overflow: hidden;
|
|
10803
|
+
border-radius: inherit;
|
|
10804
|
+
color: inherit;
|
|
10805
|
+
pointer-events: none;
|
|
10806
|
+
}
|
|
10807
|
+
|
|
10808
|
+
.q-ripple__inner {
|
|
10809
|
+
position: absolute;
|
|
10810
|
+
top: 0;
|
|
10811
|
+
left: 0;
|
|
10812
|
+
border-radius: 50%;
|
|
10813
|
+
background: currentColor;
|
|
10814
|
+
opacity: 0;
|
|
10815
|
+
pointer-events: none;
|
|
10816
|
+
will-change: transform, opacity;
|
|
10817
|
+
}
|
|
10818
|
+
|
|
10819
|
+
.q-ripple__inner--enter {
|
|
10820
|
+
transition:
|
|
10821
|
+
transform 0.225s cubic-bezier(0.4, 0, 0.2, 1),
|
|
10822
|
+
opacity 0.1s cubic-bezier(0.4, 0, 0.2, 1);
|
|
10823
|
+
}
|
|
10824
|
+
|
|
10825
|
+
.q-ripple__inner--leave {
|
|
10826
|
+
transition:
|
|
10827
|
+
transform 0.225s cubic-bezier(0.4, 0, 0.2, 1),
|
|
10828
|
+
opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1);
|
|
10829
|
+
}
|