@tekkare/romulus 0.1.214 → 0.1.216
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/dist/module.json
CHANGED
|
@@ -50,13 +50,6 @@ const props = withDefaults(
|
|
|
50
50
|
* (le bandeau de page). Sa hauteur est suivie par ResizeObserver.
|
|
51
51
|
*/
|
|
52
52
|
stickyTo?: string | null
|
|
53
|
-
/**
|
|
54
|
-
* Pose le rail sur sa propre rangee meme sans champ de recherche : pour
|
|
55
|
-
* une page dont le rail est long (les niveaux d'agregation, du produit au
|
|
56
|
-
* fabricant, plus l'unite lue) et qui veut ses puces seules sur la
|
|
57
|
-
* premiere ligne.
|
|
58
|
-
*/
|
|
59
|
-
railBelow?: boolean
|
|
60
53
|
}>(),
|
|
61
54
|
{
|
|
62
55
|
filtersAmount: 0,
|
|
@@ -69,7 +62,6 @@ const props = withDefaults(
|
|
|
69
62
|
saveScopeMsg: null,
|
|
70
63
|
lang: 'fr',
|
|
71
64
|
stickyTo: 'rm_page_header',
|
|
72
|
-
railBelow: false,
|
|
73
65
|
},
|
|
74
66
|
)
|
|
75
67
|
|
|
@@ -98,14 +90,20 @@ const slots = useSlots()
|
|
|
98
90
|
const hasAdvanced = computed(() => !!slots.Advanced)
|
|
99
91
|
const hasCustomize = computed(() => !!slots.Customize)
|
|
100
92
|
const hasRail = computed(() => !!slots.Rail)
|
|
93
|
+
const hasRailBelow = computed(() => !!slots.RailBelow)
|
|
101
94
|
const hasSearch = computed(() => !!slots.Search)
|
|
102
95
|
/**
|
|
103
96
|
* Le rail ne descend sur sa propre rangee que si la barre porte AUSSI un champ
|
|
104
97
|
* de recherche : c'est le champ qui lui dispute la place, pas les puces. Sans
|
|
105
98
|
* champ, il tient a cote de « Filtres » et une rangee de plus ne ferait
|
|
106
|
-
* qu'eloigner le contenu du bandeau.
|
|
99
|
+
* qu'eloigner le contenu du bandeau.
|
|
100
|
+
*
|
|
101
|
+
* Le slot #RailBelow, lui, a toujours sa rangee : la page y pose le reglage
|
|
102
|
+
* trop long pour la premiere ligne (les niveaux d'agregation, du produit au
|
|
103
|
+
* fabricant) et garde le court (l'unite lue) a cote des puces.
|
|
107
104
|
*/
|
|
108
|
-
const railOnOwnRow = computed(() => hasRail.value &&
|
|
105
|
+
const railOnOwnRow = computed(() => hasRail.value && hasSearch.value)
|
|
106
|
+
const hasRailRow = computed(() => railOnOwnRow.value || hasRailBelow.value)
|
|
109
107
|
|
|
110
108
|
function toggle(which: RmFilterBarPanel) {
|
|
111
109
|
panel.value = panel.value === which ? null : which
|
|
@@ -254,10 +252,11 @@ onBeforeUnmount(() => {
|
|
|
254
252
|
ses derniers segments coupes, et le champ tombait a sa largeur
|
|
255
253
|
minimale. Chacun sur sa ligne prend alors toute la largeur de la
|
|
256
254
|
colonne. -->
|
|
257
|
-
<div v-if="
|
|
255
|
+
<div v-if="hasRailRow" class="rm-fbar__band rm-fbar__band--rail">
|
|
258
256
|
<div class="rm-fbar__rail-row">
|
|
259
257
|
<div class="rm-fbar__rail">
|
|
260
|
-
<slot name="Rail" />
|
|
258
|
+
<slot v-if="railOnOwnRow" name="Rail" />
|
|
259
|
+
<slot name="RailBelow" />
|
|
261
260
|
</div>
|
|
262
261
|
</div>
|
|
263
262
|
</div>
|
|
@@ -109,6 +109,12 @@ export interface RmSavedViewMenuItem {
|
|
|
109
109
|
danger?: boolean
|
|
110
110
|
/** Demande confirmation dans la carte avant d'emettre l'action. */
|
|
111
111
|
confirm?: boolean
|
|
112
|
+
/**
|
|
113
|
+
* Question posee a la place de « Supprimer definitivement « titre » ? » :
|
|
114
|
+
* quand l'action a des consequences au-dela de la carte (une vue partagee,
|
|
115
|
+
* un template offert a des clients), c'est a l'appelant de les dire.
|
|
116
|
+
*/
|
|
117
|
+
confirmText?: string
|
|
112
118
|
}
|
|
113
119
|
|
|
114
120
|
const props = withDefaults(
|
|
@@ -405,7 +411,8 @@ function onCardClick() {
|
|
|
405
411
|
<div v-if="pending" class="rm-view__confirm" @click.stop>
|
|
406
412
|
<span>
|
|
407
413
|
<RmIcon name="WarningCircle" :size="16" />
|
|
408
|
-
|
|
414
|
+
<template v-if="pending.confirmText">{{ pending.confirmText }}</template>
|
|
415
|
+
<template v-else>{{ T.confirmPrefix }} « {{ view.title }} » ?</template>
|
|
409
416
|
</span>
|
|
410
417
|
<div class="rm-view__confirm-actions">
|
|
411
418
|
<RmButton variant="secondary" size="sm" @click="pending = null">
|
|
@@ -28,6 +28,8 @@ export interface RmShareMember {
|
|
|
28
28
|
/** Nom affiche. A defaut, l'appelant y met l'adresse. */
|
|
29
29
|
name: string
|
|
30
30
|
email?: string
|
|
31
|
+
/** Un mot apres l'adresse : d'ou vient la personne quand ce n'est pas l'espace. */
|
|
32
|
+
hint?: string
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
/** Un espace de travail a qui un modele peut etre offert. */
|
|
@@ -96,6 +98,13 @@ const props = withDefaults(
|
|
|
96
98
|
|
|
97
99
|
const emit = defineEmits<{
|
|
98
100
|
'update:modelValue': [value: boolean]
|
|
101
|
+
/**
|
|
102
|
+
* Ce que l'utilisateur tape dans « Chercher une personne ». Le dialogue
|
|
103
|
+
* filtre `members` lui-meme ; l'appelant qui sait chercher plus loin que
|
|
104
|
+
* la liste chargee (toute la plateforme, pour une administration) complete
|
|
105
|
+
* `members` en retour.
|
|
106
|
+
*/
|
|
107
|
+
search: [query: string]
|
|
99
108
|
save: [
|
|
100
109
|
value: {
|
|
101
110
|
visibility: 'private' | 'workspace'
|
|
@@ -177,6 +186,8 @@ watch(
|
|
|
177
186
|
{ immediate: true },
|
|
178
187
|
)
|
|
179
188
|
|
|
189
|
+
watch(search, value => emit('search', value.trim()))
|
|
190
|
+
|
|
180
191
|
const matches = computed(() => {
|
|
181
192
|
const q = search.value.trim().toLowerCase()
|
|
182
193
|
if (!q) return props.members
|
|
@@ -322,7 +333,7 @@ const scopes = computed<Array<{ key: RmShareScope; icon: string; label: string;
|
|
|
322
333
|
<RmCheckbox
|
|
323
334
|
:model-value="picked.includes(member.userId)"
|
|
324
335
|
:label="member.name"
|
|
325
|
-
:description="member.email"
|
|
336
|
+
:description="member.hint ? [member.email, member.hint].filter(Boolean).join(' · ') : member.email"
|
|
326
337
|
@update:model-value="toggle(member.userId)"
|
|
327
338
|
/>
|
|
328
339
|
</li>
|