@tekkare/romulus 0.1.74 → 0.1.75
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 +1 -1
- package/dist/runtime/components/ComplexSelect.vue +10 -2
- package/dist/runtime/components/DropdownSelect.vue +10 -2
- package/dist/runtime/components/FilterBar.vue +1 -1
- package/dist/runtime/components/MultipleSelect.vue +10 -2
- package/dist/runtime/utils/panels.d.ts +8 -0
- package/dist/runtime/utils/panels.js +10 -0
- package/package.json +1 -1
package/dist/module.json
CHANGED
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
commentaire dans Auriga, et aucune page ne l'appelait.
|
|
27
27
|
-->
|
|
28
28
|
<script setup lang="ts">
|
|
29
|
-
import { computed, nextTick, onUnmounted, ref, watch } from 'vue'
|
|
29
|
+
import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'
|
|
30
|
+
import { rmPanelOpened, rmPanelRegister } from '../utils/panels'
|
|
30
31
|
|
|
31
32
|
export interface RmComplexSelectPreset {
|
|
32
33
|
label: string
|
|
@@ -179,6 +180,7 @@ async function toggle() {
|
|
|
179
180
|
if (isOpen.value) return close()
|
|
180
181
|
|
|
181
182
|
isOpen.value = true
|
|
183
|
+
rmPanelOpened(close)
|
|
182
184
|
document.addEventListener('click', onDocumentClick)
|
|
183
185
|
await nextTick()
|
|
184
186
|
addRef.value?.focus()
|
|
@@ -219,7 +221,13 @@ function applyPreset(preset: RmComplexSelectPreset) {
|
|
|
219
221
|
activePreset.value = preset.label
|
|
220
222
|
}
|
|
221
223
|
|
|
224
|
+
let unregister: (() => void) | undefined
|
|
225
|
+
onMounted(() => {
|
|
226
|
+
unregister = rmPanelRegister(close)
|
|
227
|
+
})
|
|
228
|
+
|
|
222
229
|
onUnmounted(() => {
|
|
230
|
+
unregister?.()
|
|
223
231
|
clearTimeout(debounceId)
|
|
224
232
|
document.removeEventListener('click', onDocumentClick)
|
|
225
233
|
})
|
|
@@ -241,7 +249,7 @@ onUnmounted(() => {
|
|
|
241
249
|
:disabled="disabled"
|
|
242
250
|
:aria-expanded="isOpen"
|
|
243
251
|
aria-haspopup="true"
|
|
244
|
-
@click
|
|
252
|
+
@click="toggle"
|
|
245
253
|
>
|
|
246
254
|
<RmTooltip :text="summary" :disabled="selected.length === 0" class="rm-csel__value-slot">
|
|
247
255
|
<span class="rm-csel__value" :class="{ 'is-empty': selected.length === 0 }">
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
JSON de locale au montage.
|
|
27
27
|
-->
|
|
28
28
|
<script setup lang="ts">
|
|
29
|
-
import { computed, nextTick, onUnmounted, ref, watch } from 'vue'
|
|
29
|
+
import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'
|
|
30
|
+
import { rmPanelOpened, rmPanelRegister } from '../utils/panels'
|
|
30
31
|
|
|
31
32
|
const props = withDefaults(defineProps<{
|
|
32
33
|
/** Intitule pose au-dessus du champ. */
|
|
@@ -120,6 +121,7 @@ async function toggle() {
|
|
|
120
121
|
if (isOpen.value) return close()
|
|
121
122
|
|
|
122
123
|
isOpen.value = true
|
|
124
|
+
rmPanelOpened(close)
|
|
123
125
|
searchTerm.value = ''
|
|
124
126
|
activeIndex.value = props.options.indexOf(selected.value ?? '')
|
|
125
127
|
document.addEventListener('click', onDocumentClick)
|
|
@@ -155,7 +157,13 @@ function onKeydown(event: KeyboardEvent) {
|
|
|
155
157
|
}
|
|
156
158
|
}
|
|
157
159
|
|
|
160
|
+
let unregister: (() => void) | undefined
|
|
161
|
+
onMounted(() => {
|
|
162
|
+
unregister = rmPanelRegister(close)
|
|
163
|
+
})
|
|
164
|
+
|
|
158
165
|
onUnmounted(() => {
|
|
166
|
+
unregister?.()
|
|
159
167
|
clearTimeout(debounceId)
|
|
160
168
|
document.removeEventListener('click', onDocumentClick)
|
|
161
169
|
})
|
|
@@ -172,7 +180,7 @@ onUnmounted(() => {
|
|
|
172
180
|
:disabled="disabled"
|
|
173
181
|
:aria-expanded="isOpen"
|
|
174
182
|
aria-haspopup="listbox"
|
|
175
|
-
@click
|
|
183
|
+
@click="toggle"
|
|
176
184
|
>
|
|
177
185
|
<RmTooltip :text="selected ?? ''" :disabled="!selected" class="rm-dsel__value-slot">
|
|
178
186
|
<span class="rm-dsel__value" :class="{ 'is-empty': !selected }">
|
|
@@ -275,5 +275,5 @@ onBeforeUnmount(() => {
|
|
|
275
275
|
</template>
|
|
276
276
|
|
|
277
277
|
<style scoped>
|
|
278
|
-
.rm-fbar{margin-inline:calc((min(var(--oip-content-max, 100%), 100%) - var(--oip-main-w, 100%))/2);position:sticky;width:var(--oip-main-w,100%);z-index:91;--rm-fbar-field-h:32px;backdrop-filter:blur(12px);background:rgba(245,245,249,.8);border-bottom:1px solid var(--border-default);display:flex;flex-direction:column;font-family:var(--font-sans)}.rm-fbar__views{align-items:center;display:flex;flex:0 0 auto}.rm-fbar__views:empty{display:none}.rm-fbar__row{align-items:flex-start;display:flex;gap:12px;padding-block:8px;padding-inline:max(32px,(100% - var(--oip-content-max,100%))/2 + 32px)}.rm-fbar--open .rm-fbar__row:not(:has(~.rm-fbar__rail-row)){border-bottom:1px solid var(--border-default)}.rm-fbar__toggle :deep(p),.rm-fbar__toggle :deep(span){font-size:inherit;font-weight:inherit;line-height:inherit;margin:0}.rm-fbar__toggle{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-pill);color:var(--text-primary);cursor:pointer;display:flex;flex:0 0 auto;font-family:inherit;font-size:var(--font-14);font-weight:var(--weight-medium);gap:6px;height:var(--rm-fbar-field-h);justify-content:center;padding:0 14px}.rm-fbar__toggle:hover{background:var(--bg-surface-3)}.rm-fbar__toggle.is-active,.rm-fbar__toggle.is-active:hover{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-text-inverse)}.rm-fbar__toggle.is-active .rm-fbar__badge{background:var(--color-text-inverse);color:var(--color-primary)}.rm-fbar__badge{align-items:center;background:var(--color-primary);border-radius:16px;color:var(--color-text-inverse);display:inline-flex;font-size:var(--font-11);font-weight:var(--weight-bold);justify-content:center;min-width:18px;padding:0 5px}.rm-fbar__view{align-items:center;display:flex;flex:0 0 auto}.rm-fbar__advanced{align-items:center;background:none;border:none;border-left:1px solid var(--border-default);color:var(--color-primary);cursor:pointer;display:inline-flex;font-family:inherit;font-size:var(--font-13);font-weight:var(--weight-medium);height:var(--rm-fbar-field-h);padding:0 0 0 12px;position:absolute;right:14px;text-decoration-line:underline;top:0;white-space:nowrap;z-index:2}.rm-fbar__advanced.is-active,.rm-fbar__advanced:hover{color:var(--color-primary-hover,var(--color-primary));text-decoration-thickness:2px}.rm-fbar__rail-row{display:flex;padding-bottom:8px;padding-inline:max(32px,(100% - var(--oip-content-max,100%))/2 + 32px)}.rm-fbar--open .rm-fbar__rail-row{border-bottom:1px solid var(--border-default)}.rm-fbar__rail{align-items:center;display:flex;flex:0 1 auto;min-width:0;overflow-x:auto;scrollbar-width:thin}.rm-fbar__rail:empty{display:none}.rm-fbar__search{align-items:center;display:flex;flex:1 1 auto;gap:8px;min-width:0;position:relative}.rm-fbar__search:empty{display:none}.rm-fbar__search :deep(.search-bar-wrapper){flex:1 1 auto;min-width:0}.rm-fbar__search :deep(.search-bar){background:var(--bg-surface);box-sizing:border-box;display:flex;height:var(--rm-fbar-field-h);width:100%}.rm-fbar__search :deep(.filters_input_search){border-radius:var(--radius-pill);box-sizing:border-box;height:auto;min-height:var(--rm-fbar-field-h);padding-right:calc(var(--rm-fbar-advanced-w, 0px) + 12px);width:100%}.rm-fbar__search :deep(.research_tags:not(:has(*))){display:none}.rm-fbar__search :deep(.select_shortcut){box-sizing:border-box;font-size:var(--font-11);height:24px;padding-block:0}.rm-fbar__search :deep(.select_shortcut:hover){background:var(--bg-surface-3)!important;border-color:var(--border-default)!important;color:inherit!important}.rm-fbar__search :deep(.select_shortcut:hover svg){color:inherit!important}.rm-fbar__search :deep(.remove_search_section){border-left:none;border-radius:0 var(--radius-pill) var(--radius-pill) 0}.rm-fbar__search :deep(.remove_search_section:hover){background:transparent!important}.rm-fbar__search :deep(.remove_search_section:hover svg){color:var(--text-primary)!important}.rm-fbar__search :deep(.filters_input_search.no_bottom){border-bottom:1.5px solid var(--color-primary)!important;border-radius:var(--radius-pill)}.rm-fbar__search :deep(.search_suggestions){border:1px solid var(--border-default);border-radius:var(--radius-2xl);box-shadow:var(--shadow-lg);left:0;padding:6px;right:0;top:calc(100% + 6px);width:auto}.rm-fbar__search :deep(.sugg_container>*){border-radius:var(--radius-lg)}.rm-fbar__search :deep(.sugg_container>.selected){background:color-mix(in srgb,var(--color-primary) 6%,transparent)!important}.rm-fbar__panel{--rm-filter-col:224px;--rm-fbar-panel-field-h:40px;align-items:end;display:grid;gap:
|
|
278
|
+
.rm-fbar{margin-inline:calc((min(var(--oip-content-max, 100%), 100%) - var(--oip-main-w, 100%))/2);position:sticky;width:var(--oip-main-w,100%);z-index:91;--rm-fbar-field-h:32px;backdrop-filter:blur(12px);background:rgba(245,245,249,.8);border-bottom:1px solid var(--border-default);display:flex;flex-direction:column;font-family:var(--font-sans)}.rm-fbar__views{align-items:center;display:flex;flex:0 0 auto}.rm-fbar__views:empty{display:none}.rm-fbar__row{align-items:flex-start;display:flex;gap:12px;padding-block:8px;padding-inline:max(32px,(100% - var(--oip-content-max,100%))/2 + 32px)}.rm-fbar--open .rm-fbar__row:not(:has(~.rm-fbar__rail-row)){border-bottom:1px solid var(--border-default)}.rm-fbar__toggle :deep(p),.rm-fbar__toggle :deep(span){font-size:inherit;font-weight:inherit;line-height:inherit;margin:0}.rm-fbar__toggle{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-pill);color:var(--text-primary);cursor:pointer;display:flex;flex:0 0 auto;font-family:inherit;font-size:var(--font-14);font-weight:var(--weight-medium);gap:6px;height:var(--rm-fbar-field-h);justify-content:center;padding:0 14px}.rm-fbar__toggle:hover{background:var(--bg-surface-3)}.rm-fbar__toggle.is-active,.rm-fbar__toggle.is-active:hover{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-text-inverse)}.rm-fbar__toggle.is-active .rm-fbar__badge{background:var(--color-text-inverse);color:var(--color-primary)}.rm-fbar__badge{align-items:center;background:var(--color-primary);border-radius:16px;color:var(--color-text-inverse);display:inline-flex;font-size:var(--font-11);font-weight:var(--weight-bold);justify-content:center;min-width:18px;padding:0 5px}.rm-fbar__view{align-items:center;display:flex;flex:0 0 auto}.rm-fbar__advanced{align-items:center;background:none;border:none;border-left:1px solid var(--border-default);color:var(--color-primary);cursor:pointer;display:inline-flex;font-family:inherit;font-size:var(--font-13);font-weight:var(--weight-medium);height:var(--rm-fbar-field-h);padding:0 0 0 12px;position:absolute;right:14px;text-decoration-line:underline;top:0;white-space:nowrap;z-index:2}.rm-fbar__advanced.is-active,.rm-fbar__advanced:hover{color:var(--color-primary-hover,var(--color-primary));text-decoration-thickness:2px}.rm-fbar__rail-row{display:flex;padding-bottom:8px;padding-inline:max(32px,(100% - var(--oip-content-max,100%))/2 + 32px)}.rm-fbar--open .rm-fbar__rail-row{border-bottom:1px solid var(--border-default)}.rm-fbar__rail{align-items:center;display:flex;flex:0 1 auto;min-width:0;overflow-x:auto;scrollbar-width:thin}.rm-fbar__rail:empty{display:none}.rm-fbar__search{align-items:center;display:flex;flex:1 1 auto;gap:8px;min-width:0;position:relative}.rm-fbar__search:empty{display:none}.rm-fbar__search :deep(.search-bar-wrapper){flex:1 1 auto;min-width:0}.rm-fbar__search :deep(.search-bar){background:var(--bg-surface);box-sizing:border-box;display:flex;height:var(--rm-fbar-field-h);width:100%}.rm-fbar__search :deep(.filters_input_search){border-radius:var(--radius-pill);box-sizing:border-box;height:auto;min-height:var(--rm-fbar-field-h);padding-right:calc(var(--rm-fbar-advanced-w, 0px) + 12px);width:100%}.rm-fbar__search :deep(.research_tags:not(:has(*))){display:none}.rm-fbar__search :deep(.select_shortcut){box-sizing:border-box;font-size:var(--font-11);height:24px;padding-block:0}.rm-fbar__search :deep(.select_shortcut:hover){background:var(--bg-surface-3)!important;border-color:var(--border-default)!important;color:inherit!important}.rm-fbar__search :deep(.select_shortcut:hover svg){color:inherit!important}.rm-fbar__search :deep(.remove_search_section){border-left:none;border-radius:0 var(--radius-pill) var(--radius-pill) 0}.rm-fbar__search :deep(.remove_search_section:hover){background:transparent!important}.rm-fbar__search :deep(.remove_search_section:hover svg){color:var(--text-primary)!important}.rm-fbar__search :deep(.filters_input_search.no_bottom){border-bottom:1.5px solid var(--color-primary)!important;border-radius:var(--radius-pill)}.rm-fbar__search :deep(.search_suggestions){border:1px solid var(--border-default);border-radius:var(--radius-2xl);box-shadow:var(--shadow-lg);left:0;padding:6px;right:0;top:calc(100% + 6px);width:auto}.rm-fbar__search :deep(.sugg_container>*){border-radius:var(--radius-lg)}.rm-fbar__search :deep(.sugg_container>.selected){background:color-mix(in srgb,var(--color-primary) 6%,transparent)!important}.rm-fbar__panel{--rm-filter-col:224px;--rm-fbar-panel-field-h:40px;align-items:end;display:grid;gap:8px;grid-template-columns:repeat(auto-fit,minmax(0,var(--rm-filter-col)));justify-content:center;padding-block:16px 20px;padding-inline:56px}.rm-fbar__panel--wide{align-items:stretch;display:flex;flex-direction:column;gap:12px}.rm-fbar__filters{display:contents}.rm-fbar__filters :deep(.filter-chip),.rm-fbar__filters :deep(.filter-complex__trigger),.rm-fbar__filters :deep(.rm-number__box){border-radius:var(--radius-lg);height:var(--rm-fbar-panel-field-h);width:100%}.rm-fbar__panel-head{align-items:baseline;display:flex;gap:16px;grid-column:1/-1;width:100%}.rm-fbar__customize{grid-column:1/-1}.rm-fbar__panel :deep(.filters_row_break){grid-column:1/-1}.rm-fbar__panel-title{font-size:var(--font-18);font-weight:800;margin:0}.rm-fbar__action{background:none;border:none;cursor:pointer;font-family:inherit;font-size:var(--font-14);font-weight:var(--weight-medium);padding:0;text-decoration-line:underline}.rm-fbar__action--save{color:var(--color-primary)}.rm-fbar__action--clear{color:var(--color-danger)}.rm-fbar__action--clear:hover{opacity:.8;text-decoration-thickness:2px}
|
|
279
279
|
</style>
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
identifiant cassait des que la liste etait filtree.
|
|
25
25
|
-->
|
|
26
26
|
<script setup lang="ts">
|
|
27
|
-
import { computed, nextTick, onUnmounted, ref, watch } from 'vue'
|
|
27
|
+
import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'
|
|
28
|
+
import { rmPanelOpened, rmPanelRegister } from '../utils/panels'
|
|
28
29
|
|
|
29
30
|
const props = withDefaults(defineProps<{
|
|
30
31
|
/** Intitule pose au-dessus du champ. */
|
|
@@ -134,6 +135,7 @@ async function toggle() {
|
|
|
134
135
|
if (isOpen.value) return close()
|
|
135
136
|
|
|
136
137
|
isOpen.value = true
|
|
138
|
+
rmPanelOpened(close)
|
|
137
139
|
searchTerm.value = ''
|
|
138
140
|
document.addEventListener('click', onDocumentClick)
|
|
139
141
|
if (!props.search) return
|
|
@@ -156,7 +158,13 @@ function toggleAll() {
|
|
|
156
158
|
commit(allSelected.value ? [] : [...props.options])
|
|
157
159
|
}
|
|
158
160
|
|
|
161
|
+
let unregister: (() => void) | undefined
|
|
162
|
+
onMounted(() => {
|
|
163
|
+
unregister = rmPanelRegister(close)
|
|
164
|
+
})
|
|
165
|
+
|
|
159
166
|
onUnmounted(() => {
|
|
167
|
+
unregister?.()
|
|
160
168
|
clearTimeout(debounceId)
|
|
161
169
|
document.removeEventListener('click', onDocumentClick)
|
|
162
170
|
})
|
|
@@ -178,7 +186,7 @@ onUnmounted(() => {
|
|
|
178
186
|
:disabled="disabled"
|
|
179
187
|
:aria-expanded="isOpen"
|
|
180
188
|
aria-haspopup="true"
|
|
181
|
-
@click
|
|
189
|
+
@click="toggle"
|
|
182
190
|
>
|
|
183
191
|
<RmTooltip :text="summary" :disabled="selected.length === 0" class="rm-msel__value-slot">
|
|
184
192
|
<span class="rm-msel__value" :class="{ 'is-empty': selected.length === 0 }">
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inscrit un panneau. A appeler au montage, cote client seulement : sur le
|
|
3
|
+
* serveur le registre est partage par toutes les requetes et personne ne le
|
|
4
|
+
* vide.
|
|
5
|
+
*/
|
|
6
|
+
export declare function rmPanelRegister(close: () => void): () => boolean;
|
|
7
|
+
/** Ferme tous les panneaux sauf celui qui vient de s'ouvrir. */
|
|
8
|
+
export declare function rmPanelOpened(self: () => void): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const closers = /* @__PURE__ */ new Set();
|
|
2
|
+
export function rmPanelRegister(close) {
|
|
3
|
+
closers.add(close);
|
|
4
|
+
return () => closers.delete(close);
|
|
5
|
+
}
|
|
6
|
+
export function rmPanelOpened(self) {
|
|
7
|
+
closers.forEach((close) => {
|
|
8
|
+
if (close !== self) close();
|
|
9
|
+
});
|
|
10
|
+
}
|