nuxt-ui-tools 0.1.0 → 0.1.1
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.d.mts +4 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +30 -15
- package/dist/runtime/form/components/actions/FormActions.d.vue.ts +0 -2
- package/dist/runtime/form/components/actions/FormActions.vue +5 -8
- package/dist/runtime/form/components/actions/FormActions.vue.d.ts +0 -2
- package/dist/runtime/form/components/layout/DrawerLayout.vue +5 -1
- package/dist/runtime/form/components/layout/ModalLayout.vue +5 -1
- package/dist/runtime/form/components/renderer/FormCompositeControl.d.vue.ts +15 -0
- package/dist/runtime/form/components/renderer/FormCompositeControl.vue +13 -0
- package/dist/runtime/form/components/renderer/FormCompositeControl.vue.d.ts +15 -0
- package/dist/runtime/form/components/renderer/FormFieldRenderer.d.vue.ts +1 -0
- package/dist/runtime/form/components/renderer/FormFieldRenderer.vue +19 -3
- package/dist/runtime/form/components/renderer/FormFieldRenderer.vue.d.ts +1 -0
- package/dist/runtime/form/components/renderer/FormFieldShell.d.vue.ts +4 -4
- package/dist/runtime/form/components/renderer/FormFieldShell.vue +15 -1
- package/dist/runtime/form/components/renderer/FormFieldShell.vue.d.ts +4 -4
- package/dist/runtime/form/components/root/Form.vue +5 -3
- package/dist/runtime/form/composables/use-field-control.d.ts +1 -1
- package/dist/runtime/form/composables/use-field-control.js +4 -0
- package/dist/runtime/form/composables/use-field-options.d.ts +1 -1
- package/dist/runtime/form/composables/use-field-options.js +75 -31
- package/dist/runtime/form/composables/use-form-field-chrome.d.ts +3 -0
- package/dist/runtime/form/composables/use-form-field-chrome.js +9 -0
- package/dist/runtime/form/composables/use-form-runtime.js +17 -5
- package/dist/runtime/form/fields/array-list/component.vue +4 -1
- package/dist/runtime/form/fields/auto-complete/component.vue +23 -16
- package/dist/runtime/form/fields/checkbox-card/component.vue +28 -29
- package/dist/runtime/form/fields/checkbox-group/component.vue +28 -29
- package/dist/runtime/form/fields/color-picker/component.vue +4 -2
- package/dist/runtime/form/fields/date-family/component.vue +9 -4
- package/dist/runtime/form/fields/hierarchy/SelectionCheckbox.d.vue.ts +13 -0
- package/dist/runtime/form/fields/hierarchy/SelectionCheckbox.vue +24 -0
- package/dist/runtime/form/fields/hierarchy/SelectionCheckbox.vue.d.ts +13 -0
- package/dist/runtime/form/fields/hierarchy/SelectionRadio.d.vue.ts +14 -0
- package/dist/runtime/form/fields/hierarchy/SelectionRadio.vue +27 -0
- package/dist/runtime/form/fields/hierarchy/SelectionRadio.vue.d.ts +14 -0
- package/dist/runtime/form/fields/hierarchy/component.vue +257 -142
- package/dist/runtime/form/fields/hierarchy/utils.d.ts +9 -0
- package/dist/runtime/form/fields/hierarchy/utils.js +32 -0
- package/dist/runtime/form/fields/input-group/component.vue +7 -30
- package/dist/runtime/form/fields/matrix/component.vue +9 -3
- package/dist/runtime/form/fields/phone-number/component.vue +7 -2
- package/dist/runtime/form/fields/rating/component.vue +25 -2
- package/dist/runtime/form/fields/select/component.vue +29 -21
- package/dist/runtime/form/fields/switch-group/component.vue +8 -3
- package/dist/runtime/form/fields/time/component.vue +7 -5
- package/dist/runtime/form/fields/upload/component.vue +5 -3
- package/dist/runtime/form/types/api.d.ts +9 -3
- package/dist/runtime/form/types/field-base.d.ts +3 -1
- package/dist/runtime/form/types/runtime.d.ts +2 -0
- package/dist/runtime/form/types/ui.d.ts +1 -0
- package/dist/runtime/form/utils/api.js +3 -0
- package/dist/runtime/form/utils/options.d.ts +11 -2
- package/dist/runtime/form/utils/options.js +57 -9
- package/dist/runtime/form/utils/state.js +10 -2
- package/dist/runtime/i18n/locales/en.js +38 -0
- package/dist/runtime/i18n/locales/fr.js +38 -0
- package/dist/runtime/i18n/types.d.ts +38 -0
- package/dist/runtime/i18n/use-locale.d.ts +2 -2
- package/dist/runtime/i18n/use-locale.js +3 -3
- package/dist/runtime/table/components/DataList.d.vue.ts +2 -0
- package/dist/runtime/table/components/DataList.vue.d.ts +2 -0
- package/dist/runtime/table/components/actions/RowActions.d.vue.ts +4 -2
- package/dist/runtime/table/components/actions/RowActions.vue +2 -0
- package/dist/runtime/table/components/actions/RowActions.vue.d.ts +4 -2
- package/dist/runtime/table/components/data-list/DataListAddFilter.d.vue.ts +5 -3
- package/dist/runtime/table/components/data-list/DataListAddFilter.vue +6 -1
- package/dist/runtime/table/components/data-list/DataListAddFilter.vue.d.ts +5 -3
- package/dist/runtime/table/components/data-list/DataListContent.d.vue.ts +24 -17
- package/dist/runtime/table/components/data-list/DataListContent.vue +70 -17
- package/dist/runtime/table/components/data-list/DataListContent.vue.d.ts +24 -17
- package/dist/runtime/table/components/data-list/DataListDefault.d.vue.ts +2 -0
- package/dist/runtime/table/components/data-list/DataListDefault.vue.d.ts +2 -0
- package/dist/runtime/table/components/data-list/DataListFilterTags.d.vue.ts +2 -0
- package/dist/runtime/table/components/data-list/DataListFilterTags.vue.d.ts +2 -0
- package/dist/runtime/table/components/data-list/DataListLayoutSwitch.vue +17 -11
- package/dist/runtime/table/components/data-list/DataListRoot.vue +2 -46
- package/dist/runtime/table/components/data-list/DataListSortMenu.vue +6 -0
- package/dist/runtime/table/components/filters/shared/DynamicFilterPicker.d.vue.ts +5 -0
- package/dist/runtime/table/components/filters/shared/DynamicFilterPicker.vue +182 -59
- package/dist/runtime/table/components/filters/shared/DynamicFilterPicker.vue.d.ts +5 -0
- package/dist/runtime/table/components/filters/shared/FilterMatchModeButton.d.vue.ts +3 -1
- package/dist/runtime/table/components/filters/shared/FilterMatchModeButton.vue +29 -5
- package/dist/runtime/table/components/filters/shared/FilterMatchModeButton.vue.d.ts +3 -1
- package/dist/runtime/table/components/filters/shared/FilterMatchModePanel.d.vue.ts +17 -0
- package/dist/runtime/table/components/filters/shared/FilterMatchModePanel.vue +47 -0
- package/dist/runtime/table/components/filters/shared/FilterMatchModePanel.vue.d.ts +17 -0
- package/dist/runtime/table/components/filters/shared/FilterOptionMultipleList.d.vue.ts +3 -1
- package/dist/runtime/table/components/filters/shared/FilterOptionMultipleList.vue +12 -3
- package/dist/runtime/table/components/filters/shared/FilterOptionMultipleList.vue.d.ts +3 -1
- package/dist/runtime/table/components/filters/shared/FilterOptionPickerContent.d.vue.ts +3 -0
- package/dist/runtime/table/components/filters/shared/FilterOptionPickerContent.vue +11 -1
- package/dist/runtime/table/components/filters/shared/FilterOptionPickerContent.vue.d.ts +3 -0
- package/dist/runtime/table/components/filters/shared/FilterOptionRow.d.vue.ts +3 -0
- package/dist/runtime/table/components/filters/shared/FilterOptionRow.vue +48 -9
- package/dist/runtime/table/components/filters/shared/FilterOptionRow.vue.d.ts +3 -0
- package/dist/runtime/table/components/filters/shared/FilterOptionSingleList.d.vue.ts +3 -0
- package/dist/runtime/table/components/filters/shared/FilterOptionSingleList.vue +35 -9
- package/dist/runtime/table/components/filters/shared/FilterOptionSingleList.vue.d.ts +3 -0
- package/dist/runtime/table/components/filters/shared/FilterOptionTreeContent.d.vue.ts +3 -0
- package/dist/runtime/table/components/filters/shared/FilterOptionTreeContent.vue +77 -20
- package/dist/runtime/table/components/filters/shared/FilterOptionTreeContent.vue.d.ts +3 -0
- package/dist/runtime/table/components/filters/shared/FilterPopoverShell.d.vue.ts +27 -0
- package/dist/runtime/table/components/filters/shared/FilterPopoverShell.vue +36 -0
- package/dist/runtime/table/components/filters/shared/FilterPopoverShell.vue.d.ts +27 -0
- package/dist/runtime/table/components/filters/shared/FilterSearchablePanel.d.vue.ts +3 -0
- package/dist/runtime/table/components/filters/shared/FilterSearchablePanel.vue +40 -10
- package/dist/runtime/table/components/filters/shared/FilterSearchablePanel.vue.d.ts +3 -0
- package/dist/runtime/table/components/filters/shared/FilterStageTransition.d.vue.ts +23 -0
- package/dist/runtime/table/components/filters/shared/FilterStageTransition.vue +21 -0
- package/dist/runtime/table/components/filters/shared/FilterStageTransition.vue.d.ts +23 -0
- package/dist/runtime/table/components/filters/shared/FilterTriggerTag.d.vue.ts +3 -2
- package/dist/runtime/table/components/filters/shared/FilterTriggerTag.vue +26 -25
- package/dist/runtime/table/components/filters/shared/FilterTriggerTag.vue.d.ts +3 -2
- package/dist/runtime/table/components/filters/tags/BooleanFilterTag.d.vue.ts +1 -1
- package/dist/runtime/table/components/filters/tags/BooleanFilterTag.vue +75 -22
- package/dist/runtime/table/components/filters/tags/BooleanFilterTag.vue.d.ts +1 -1
- package/dist/runtime/table/components/filters/tags/DateFilterTag.d.vue.ts +3 -1
- package/dist/runtime/table/components/filters/tags/DateFilterTag.vue +254 -160
- package/dist/runtime/table/components/filters/tags/DateFilterTag.vue.d.ts +3 -1
- package/dist/runtime/table/components/filters/tags/FilterTagsBar.d.vue.ts +7 -6
- package/dist/runtime/table/components/filters/tags/FilterTagsBar.vue +12 -27
- package/dist/runtime/table/components/filters/tags/FilterTagsBar.vue.d.ts +7 -6
- package/dist/runtime/table/components/filters/tags/NumberFilterTag.d.vue.ts +3 -2
- package/dist/runtime/table/components/filters/tags/NumberFilterTag.vue +192 -106
- package/dist/runtime/table/components/filters/tags/NumberFilterTag.vue.d.ts +3 -2
- package/dist/runtime/table/components/filters/tags/OptionFilterTag.d.vue.ts +3 -2
- package/dist/runtime/table/components/filters/tags/OptionFilterTag.vue +110 -48
- package/dist/runtime/table/components/filters/tags/OptionFilterTag.vue.d.ts +3 -2
- package/dist/runtime/table/components/filters/tags/TextFilterTag.d.vue.ts +3 -2
- package/dist/runtime/table/components/filters/tags/TextFilterTag.vue +120 -57
- package/dist/runtime/table/components/filters/tags/TextFilterTag.vue.d.ts +3 -2
- package/dist/runtime/table/components/grid/GridRenderer.vue +1 -1
- package/dist/runtime/table/components/layout/TableFooter.vue +1 -0
- package/dist/runtime/table/components/table/TableRenderer.vue +18 -9
- package/dist/runtime/table/composables/use-filter-tag-session.d.ts +3 -4
- package/dist/runtime/table/composables/use-filter-tag-session.js +12 -32
- package/dist/runtime/table/composables/use-query-state.d.ts +3 -3
- package/dist/runtime/table/composables/use-query-state.js +7 -32
- package/dist/runtime/table/composables/use-table-api.js +2 -2
- package/dist/runtime/table/composables/use-table-columns.d.ts +1 -11
- package/dist/runtime/table/composables/use-table-filter-presentation.d.ts +0 -3
- package/dist/runtime/table/composables/use-table-filter-presentation.js +0 -9
- package/dist/runtime/table/composables/use-table-filters.js +18 -7
- package/dist/runtime/table/composables/use-table-internals.d.ts +3 -42
- package/dist/runtime/table/types/actions.d.ts +1 -1
- package/dist/runtime/table/types/data-list.d.ts +41 -8
- package/dist/runtime/table/types/filters.d.ts +4 -0
- package/dist/runtime/table/utils/actions.d.ts +1 -1
- package/dist/runtime/table/utils/columns/menu.d.ts +2 -11
- package/dist/runtime/table/utils/columns/render.d.ts +2 -9
- package/dist/runtime/table/utils/columns/render.js +4 -4
- package/dist/runtime/table/utils/data-list-ui.d.ts +3 -1
- package/dist/runtime/table/utils/data-list-ui.js +45 -0
- package/dist/runtime/table/utils/filters/editor-size.d.ts +11 -0
- package/dist/runtime/table/utils/filters/editor-size.js +45 -0
- package/dist/runtime/table/utils/filters/index.d.ts +1 -1
- package/dist/runtime/table/utils/filters/index.js +1 -1
- package/dist/runtime/table/utils/query-state.d.ts +18 -1
- package/dist/runtime/table/utils/query-state.js +109 -0
- package/package.json +4 -2
- package/dist/runtime/table/utils/filters/operators.d.ts +0 -4
- package/dist/runtime/table/utils/filters/operators.js +0 -6
|
@@ -3,36 +3,47 @@ import { CalendarDate, getLocalTimeZone } from "@internationalized/date";
|
|
|
3
3
|
import UButton from "@nuxt/ui/components/Button.vue";
|
|
4
4
|
import UCalendar from "@nuxt/ui/components/Calendar.vue";
|
|
5
5
|
import UInputDate from "@nuxt/ui/components/InputDate.vue";
|
|
6
|
-
import UPopover from "@nuxt/ui/components/Popover.vue";
|
|
7
6
|
import { useMediaQuery } from "@vueuse/core";
|
|
8
|
-
import { computed, ref, shallowRef,
|
|
7
|
+
import { computed, ref, shallowRef, watch } from "vue";
|
|
9
8
|
import { useUiToolsLocale } from "#ui-tools/i18n";
|
|
9
|
+
import { useDataListUi } from "../../../composables/use-data-list-ui";
|
|
10
10
|
import { useFilterTagSession } from "../../../composables/use-filter-tag-session";
|
|
11
11
|
import { useTableInternals } from "../../../composables/use-table-internals";
|
|
12
12
|
import {
|
|
13
13
|
formatFilterDate,
|
|
14
14
|
getDateRangeValue,
|
|
15
|
+
mergeDataListUiClass,
|
|
15
16
|
resolveFilterTriggerIcon,
|
|
16
17
|
resolveDateFilterRangeCalendarPanels,
|
|
17
18
|
resolveDateFilterRangePresets,
|
|
18
19
|
resolveDateFilterScalarPresets,
|
|
19
20
|
resolveDateFilterUi
|
|
20
21
|
} from "../../../utils";
|
|
22
|
+
import FilterMatchModePanel from "../shared/FilterMatchModePanel.vue";
|
|
23
|
+
import FilterPopoverShell from "../shared/FilterPopoverShell.vue";
|
|
24
|
+
import FilterStageTransition from "../shared/FilterStageTransition.vue";
|
|
21
25
|
import TableFilterTrigger from "../shared/FilterTriggerTag.vue";
|
|
22
26
|
const props = defineProps({
|
|
23
27
|
definition: { type: Object, required: true },
|
|
24
28
|
dynamic: { type: Boolean, required: false },
|
|
25
29
|
session: { type: Boolean, required: false },
|
|
26
|
-
|
|
30
|
+
embedded: { type: Boolean, required: false },
|
|
31
|
+
initialOperator: { type: String, required: false }
|
|
27
32
|
});
|
|
28
33
|
const emit = defineEmits(["dismiss", "sessionClosed"]);
|
|
29
34
|
const internals = useTableInternals();
|
|
35
|
+
const dataListUi = useDataListUi();
|
|
36
|
+
const dataListFilterUi = computed(() => dataListUi.ui.value.filterTags?.ui);
|
|
37
|
+
const size = computed(() => dataListUi.ui.value.filterTags?.size ?? dataListUi.controlSize.value);
|
|
30
38
|
const { t } = useUiToolsLocale();
|
|
31
39
|
const isMobile = useMediaQuery("(max-width: 639px)");
|
|
32
|
-
const pendingOperator = ref();
|
|
40
|
+
const pendingOperator = ref(props.initialOperator);
|
|
33
41
|
const localDate = shallowRef(void 0);
|
|
34
42
|
const localRangeStart = shallowRef(void 0);
|
|
35
43
|
const localRangeEnd = shallowRef(void 0);
|
|
44
|
+
const stage = ref("editor");
|
|
45
|
+
const stageDirection = ref("forward");
|
|
46
|
+
const stageTransitioning = ref(false);
|
|
36
47
|
const preview = computed(
|
|
37
48
|
() => internals.filters.getFilterPreview({
|
|
38
49
|
key: props.definition.key
|
|
@@ -88,11 +99,10 @@ const rangeSummary = computed(() => {
|
|
|
88
99
|
return t("table.filters.preview.empty");
|
|
89
100
|
});
|
|
90
101
|
const session = useFilterTagSession({
|
|
91
|
-
activationToken: toRef(props, "activationToken"),
|
|
92
102
|
session: props.session,
|
|
93
103
|
dynamic: props.dynamic,
|
|
104
|
+
embedded: props.embedded,
|
|
94
105
|
hasCommittedState: () => internals.filters.getFilterState({ key: props.definition.key }) != null,
|
|
95
|
-
onActivated: () => handleActivate(operator.value),
|
|
96
106
|
onOpen: initLocalState,
|
|
97
107
|
onClose: () => {
|
|
98
108
|
pendingOperator.value = void 0;
|
|
@@ -108,7 +118,15 @@ watch(
|
|
|
108
118
|
);
|
|
109
119
|
function handleActivate(op) {
|
|
110
120
|
pendingOperator.value = op;
|
|
111
|
-
|
|
121
|
+
stage.value = "editor";
|
|
122
|
+
stageDirection.value = "backward";
|
|
123
|
+
session.open();
|
|
124
|
+
}
|
|
125
|
+
function handleRequestMatchMode() {
|
|
126
|
+
stageDirection.value = "forward";
|
|
127
|
+
stageTransitioning.value = true;
|
|
128
|
+
stage.value = "match-mode";
|
|
129
|
+
session.open();
|
|
112
130
|
}
|
|
113
131
|
function initLocalState() {
|
|
114
132
|
const rule = internals.filters.getFilterState({ key: props.definition.key });
|
|
@@ -156,14 +174,13 @@ function clearFilter() {
|
|
|
156
174
|
session.close();
|
|
157
175
|
}
|
|
158
176
|
function handleOperatorChange(op) {
|
|
159
|
-
if (filterUi.value.clearOnOperatorChange) {
|
|
160
|
-
internals.filters.clearFilter({ key: props.definition.key });
|
|
161
|
-
}
|
|
162
177
|
localDate.value = void 0;
|
|
163
178
|
localRangeStart.value = void 0;
|
|
164
179
|
localRangeEnd.value = void 0;
|
|
165
|
-
|
|
166
|
-
|
|
180
|
+
pendingOperator.value = op;
|
|
181
|
+
stageDirection.value = "forward";
|
|
182
|
+
stageTransitioning.value = true;
|
|
183
|
+
stage.value = "editor";
|
|
167
184
|
}
|
|
168
185
|
function applyScalarPreset(value) {
|
|
169
186
|
localDate.value = toCalendarDate(value);
|
|
@@ -236,13 +253,18 @@ function areSameCalendarDay(left, right) {
|
|
|
236
253
|
</script>
|
|
237
254
|
|
|
238
255
|
<template>
|
|
239
|
-
<
|
|
256
|
+
<FilterPopoverShell
|
|
240
257
|
:open="session.isOpen.value"
|
|
241
|
-
:
|
|
242
|
-
:
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
258
|
+
:embedded="embedded"
|
|
259
|
+
:transitioning="stageTransitioning"
|
|
260
|
+
:content-class="
|
|
261
|
+
mergeDataListUiClass(
|
|
262
|
+
'max-w-[calc(100vw-1rem)] overflow-hidden p-0',
|
|
263
|
+
void 0,
|
|
264
|
+
dataListFilterUi?.popoverContent
|
|
265
|
+
)
|
|
266
|
+
"
|
|
267
|
+
@update-open="session.handleOpenChange"
|
|
246
268
|
>
|
|
247
269
|
<slot
|
|
248
270
|
name="trigger"
|
|
@@ -258,203 +280,275 @@ function areSameCalendarDay(left, right) {
|
|
|
258
280
|
<TableFilterTrigger
|
|
259
281
|
:label="internals.filters.getFilterLabelText({ label: definition.label })"
|
|
260
282
|
:leading-icon="resolveFilterTriggerIcon(definition)"
|
|
283
|
+
:operator="operator"
|
|
261
284
|
:operator-label="operatorLabel"
|
|
262
285
|
:operator-items="operatorItems"
|
|
263
286
|
:preview-summary="preview.summary"
|
|
264
287
|
:active="preview.active"
|
|
265
|
-
@select-operator="handleOperatorChange"
|
|
266
288
|
@activate="handleActivate"
|
|
289
|
+
@request-match-mode="handleRequestMatchMode"
|
|
267
290
|
@clear="clearFilter"
|
|
268
291
|
/>
|
|
269
292
|
</slot>
|
|
270
293
|
|
|
271
294
|
<template #content>
|
|
272
|
-
<
|
|
273
|
-
|
|
274
|
-
:
|
|
295
|
+
<FilterStageTransition
|
|
296
|
+
:stage-key="stage"
|
|
297
|
+
:direction="stageDirection"
|
|
298
|
+
@settled="stageTransitioning = false"
|
|
275
299
|
>
|
|
276
|
-
<
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
300
|
+
<FilterMatchModePanel
|
|
301
|
+
v-if="stage === 'match-mode'"
|
|
302
|
+
:items="operatorItems"
|
|
303
|
+
:selected="operator"
|
|
304
|
+
:size="size"
|
|
305
|
+
:ui="dataListFilterUi"
|
|
306
|
+
@select="handleOperatorChange"
|
|
307
|
+
/>
|
|
308
|
+
<div
|
|
309
|
+
v-else
|
|
310
|
+
:class="
|
|
311
|
+
mergeDataListUiClass(
|
|
312
|
+
`bg-default ${operator === 'between' ? 'w-[min(100vw-1rem,48rem)]' : 'w-[min(100vw-1rem,22rem)]'}`,
|
|
313
|
+
void 0,
|
|
314
|
+
dataListFilterUi?.editor
|
|
315
|
+
)
|
|
281
316
|
"
|
|
282
|
-
|
|
317
|
+
>
|
|
318
|
+
<div v-if="operator === 'between'">
|
|
283
319
|
<div
|
|
284
|
-
|
|
285
|
-
class="
|
|
286
|
-
|
|
320
|
+
class="grid gap-0"
|
|
321
|
+
:class="
|
|
322
|
+
filterUi.range.presetsPlacement === 'side' ? 'lg:grid-cols-[14rem_minmax(0,1fr)]' : 'grid-cols-1'
|
|
323
|
+
"
|
|
287
324
|
>
|
|
288
|
-
<div class="text-[11px] font-medium uppercase tracking-[0.18em] text-muted">
|
|
289
|
-
Date range
|
|
290
|
-
</div>
|
|
291
|
-
|
|
292
325
|
<div
|
|
293
|
-
|
|
294
|
-
:class="
|
|
326
|
+
v-if="rangePresets.length"
|
|
327
|
+
:class="
|
|
328
|
+
mergeDataListUiClass(
|
|
329
|
+
`border-b border-default p-3 ${filterUi.range.presetsPlacement === 'side' ? 'lg:border-r lg:border-b-0' : ''}`,
|
|
330
|
+
void 0,
|
|
331
|
+
dataListFilterUi?.presets
|
|
332
|
+
)
|
|
333
|
+
"
|
|
295
334
|
>
|
|
296
|
-
<
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
335
|
+
<div class="text-[11px] font-medium uppercase tracking-[0.18em] text-muted">
|
|
336
|
+
Date range
|
|
337
|
+
</div>
|
|
338
|
+
|
|
339
|
+
<div
|
|
340
|
+
class="mt-3 flex gap-1.5"
|
|
341
|
+
:class="filterUi.range.presetsPlacement === 'side' ? 'flex-col' : 'flex-wrap'"
|
|
302
342
|
>
|
|
303
|
-
|
|
304
|
-
|
|
343
|
+
<UButton
|
|
344
|
+
v-for="preset in rangePresets"
|
|
345
|
+
:key="preset.label"
|
|
346
|
+
:variant="isRangePresetActive(preset.value) ? 'subtle' : 'ghost'"
|
|
347
|
+
:size="size"
|
|
348
|
+
:class="
|
|
349
|
+
mergeDataListUiClass(
|
|
350
|
+
'justify-start rounded-lg px-3',
|
|
351
|
+
void 0,
|
|
352
|
+
dataListFilterUi?.preset
|
|
353
|
+
)
|
|
354
|
+
"
|
|
355
|
+
@click="applyRangePreset(preset.value)"
|
|
356
|
+
>
|
|
357
|
+
{{ preset.label }}
|
|
358
|
+
</UButton>
|
|
359
|
+
</div>
|
|
305
360
|
</div>
|
|
306
|
-
</div>
|
|
307
361
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
:
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
362
|
+
<div
|
|
363
|
+
v-if="filterUi.range.display !== 'inputs'"
|
|
364
|
+
:class="mergeDataListUiClass('p-3', void 0, dataListFilterUi?.calendar)"
|
|
365
|
+
>
|
|
366
|
+
<UCalendar
|
|
367
|
+
:model-value="calendarRange"
|
|
368
|
+
range
|
|
369
|
+
:number-of-months="rangeCalendarPanels"
|
|
370
|
+
:paged-navigation="
|
|
314
371
|
filterUi.range.calendar.pagedNavigation ?? rangeCalendarPanels > 1
|
|
315
372
|
"
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
root: 'border-0 bg-transparent p-0 shadow-none',
|
|
373
|
+
:fixed-weeks="filterUi.range.calendar.fixedWeeks"
|
|
374
|
+
:maximum-days="filterUi.range.calendar.maxRangeDays"
|
|
375
|
+
:ui="{
|
|
320
376
|
header: 'px-1 pb-2',
|
|
321
377
|
body: 'gap-3',
|
|
322
378
|
grid: 'gap-y-1',
|
|
323
379
|
cell: 'p-0.5',
|
|
324
|
-
cellTrigger: 'rounded-md'
|
|
380
|
+
cellTrigger: 'rounded-md',
|
|
381
|
+
root: mergeDataListUiClass(
|
|
382
|
+
'border-0 bg-transparent p-0',
|
|
383
|
+
void 0,
|
|
384
|
+
dataListFilterUi?.calendar
|
|
385
|
+
)
|
|
325
386
|
}"
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
</div>
|
|
329
|
-
</div>
|
|
330
|
-
|
|
331
|
-
<div
|
|
332
|
-
v-if="filterUi.range.display !== 'calendar'"
|
|
333
|
-
class="border-t border-default px-3 py-3"
|
|
334
|
-
>
|
|
335
|
-
<div class="flex items-center justify-between gap-3">
|
|
336
|
-
<div class="text-[11px] font-medium uppercase tracking-[0.18em] text-muted">
|
|
337
|
-
Custom range
|
|
338
|
-
</div>
|
|
339
|
-
<div class="truncate text-xs text-muted">
|
|
340
|
-
{{ rangeSummary }}
|
|
387
|
+
@update:model-value="setCalendarRange"
|
|
388
|
+
/>
|
|
341
389
|
</div>
|
|
342
390
|
</div>
|
|
343
391
|
|
|
344
|
-
<div
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
392
|
+
<div
|
|
393
|
+
v-if="filterUi.range.display !== 'calendar'"
|
|
394
|
+
:class="
|
|
395
|
+
mergeDataListUiClass(
|
|
396
|
+
'border-t border-default px-3 py-3',
|
|
397
|
+
void 0,
|
|
398
|
+
dataListFilterUi?.inputs
|
|
399
|
+
)
|
|
400
|
+
"
|
|
401
|
+
>
|
|
402
|
+
<div class="flex items-center justify-between gap-3">
|
|
403
|
+
<div class="text-[11px] font-medium uppercase tracking-[0.18em] text-muted">
|
|
404
|
+
Custom range
|
|
405
|
+
</div>
|
|
406
|
+
<div class="truncate text-xs text-muted">
|
|
407
|
+
{{ rangeSummary }}
|
|
408
|
+
</div>
|
|
359
409
|
</div>
|
|
360
410
|
|
|
361
|
-
<div class="
|
|
362
|
-
<
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
411
|
+
<div class="mt-3 grid gap-2 sm:grid-cols-2">
|
|
412
|
+
<div class="space-y-1">
|
|
413
|
+
<span class="px-1 text-xs text-muted">Start</span>
|
|
414
|
+
<UInputDate
|
|
415
|
+
:model-value="localRangeStart"
|
|
416
|
+
leading
|
|
417
|
+
:fixed="filterUi.range.input.fixed"
|
|
418
|
+
:highlight="filterUi.range.input.highlight"
|
|
419
|
+
:granularity="filterUi.range.input.granularity"
|
|
420
|
+
:hide-time-zone="filterUi.range.input.hideTimeZone"
|
|
421
|
+
:hour-cycle="filterUi.range.input.hourCycle"
|
|
422
|
+
leading-icon="i-lucide-arrow-right"
|
|
423
|
+
:size="size"
|
|
424
|
+
class="w-full"
|
|
425
|
+
@update:model-value="setRangeStart"
|
|
426
|
+
/>
|
|
427
|
+
</div>
|
|
428
|
+
|
|
429
|
+
<div class="space-y-1">
|
|
430
|
+
<span class="px-1 text-xs text-muted">End</span>
|
|
431
|
+
<UInputDate
|
|
432
|
+
:model-value="localRangeEnd"
|
|
433
|
+
leading
|
|
434
|
+
:fixed="filterUi.range.input.fixed"
|
|
435
|
+
:highlight="filterUi.range.input.highlight"
|
|
436
|
+
:granularity="filterUi.range.input.granularity"
|
|
437
|
+
:hide-time-zone="filterUi.range.input.hideTimeZone"
|
|
438
|
+
:hour-cycle="filterUi.range.input.hourCycle"
|
|
439
|
+
leading-icon="i-lucide-arrow-left"
|
|
440
|
+
:size="size"
|
|
441
|
+
class="w-full"
|
|
442
|
+
@update:model-value="setRangeEnd"
|
|
443
|
+
/>
|
|
444
|
+
</div>
|
|
375
445
|
</div>
|
|
376
446
|
</div>
|
|
377
447
|
</div>
|
|
378
|
-
</div>
|
|
379
448
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
class="
|
|
387
|
-
|
|
449
|
+
<div
|
|
450
|
+
v-else
|
|
451
|
+
:class="mergeDataListUiClass('grid gap-2 p-3', void 0, dataListFilterUi?.inputs)"
|
|
452
|
+
>
|
|
453
|
+
<div
|
|
454
|
+
v-if="scalarPresets.length"
|
|
455
|
+
:class="
|
|
456
|
+
mergeDataListUiClass('flex flex-wrap gap-1.5', void 0, dataListFilterUi?.presets)
|
|
457
|
+
"
|
|
388
458
|
>
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
459
|
+
<UButton
|
|
460
|
+
v-for="preset in scalarPresets"
|
|
461
|
+
:key="preset.label"
|
|
462
|
+
variant="ghost"
|
|
463
|
+
:size="size"
|
|
464
|
+
:class="
|
|
465
|
+
mergeDataListUiClass('rounded-lg px-3', void 0, dataListFilterUi?.preset)
|
|
466
|
+
"
|
|
467
|
+
@click="applyScalarPreset(preset.value)"
|
|
468
|
+
>
|
|
469
|
+
{{ preset.label }}
|
|
470
|
+
</UButton>
|
|
471
|
+
</div>
|
|
392
472
|
|
|
393
|
-
|
|
394
|
-
|
|
473
|
+
<UInputDate
|
|
474
|
+
v-if="
|
|
395
475
|
filterUi.scalar.display === 'input' || filterUi.scalar.display === 'input-calendar'
|
|
396
476
|
"
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
477
|
+
:model-value="localDate"
|
|
478
|
+
leading
|
|
479
|
+
:fixed="filterUi.scalar.input.fixed"
|
|
480
|
+
:highlight="filterUi.scalar.input.highlight"
|
|
481
|
+
:granularity="filterUi.scalar.input.granularity"
|
|
482
|
+
:hide-time-zone="filterUi.scalar.input.hideTimeZone"
|
|
483
|
+
:hour-cycle="filterUi.scalar.input.hourCycle"
|
|
484
|
+
leading-icon="i-lucide-calendar-days"
|
|
485
|
+
:size="size"
|
|
486
|
+
class="w-full"
|
|
487
|
+
@update:model-value="setSingleDate"
|
|
488
|
+
/>
|
|
408
489
|
|
|
409
|
-
|
|
410
|
-
|
|
490
|
+
<UCalendar
|
|
491
|
+
v-if="
|
|
411
492
|
filterUi.scalar.display === 'calendar' || filterUi.scalar.display === 'input-calendar'
|
|
412
493
|
"
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
root:
|
|
494
|
+
:model-value="localDate"
|
|
495
|
+
:fixed-weeks="filterUi.scalar.calendar.fixedWeeks"
|
|
496
|
+
:ui="{
|
|
497
|
+
root: mergeDataListUiClass(
|
|
498
|
+
'border-0 bg-transparent p-0',
|
|
499
|
+
void 0,
|
|
500
|
+
dataListFilterUi?.calendar
|
|
501
|
+
),
|
|
417
502
|
header: 'px-1 pb-2',
|
|
418
503
|
grid: 'gap-y-1',
|
|
419
504
|
cell: 'p-0.5',
|
|
420
505
|
cellTrigger: 'rounded-md'
|
|
421
506
|
}"
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
507
|
+
@update:model-value="setSingleDate"
|
|
508
|
+
/>
|
|
509
|
+
</div>
|
|
425
510
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
:label="filterUi.actions.clear"
|
|
437
|
-
@click="clearFilter"
|
|
438
|
-
/>
|
|
439
|
-
<div class="flex items-center gap-2">
|
|
511
|
+
<div
|
|
512
|
+
v-if="filterUi.commitMode === 'manual'"
|
|
513
|
+
:class="
|
|
514
|
+
mergeDataListUiClass(
|
|
515
|
+
`flex items-center border-t border-default p-2 ${operator === 'between' ? 'justify-between' : 'justify-end'}`,
|
|
516
|
+
void 0,
|
|
517
|
+
dataListFilterUi?.footer
|
|
518
|
+
)
|
|
519
|
+
"
|
|
520
|
+
>
|
|
440
521
|
<UButton
|
|
441
|
-
v-if="operator
|
|
522
|
+
v-if="operator === 'between'"
|
|
442
523
|
color="neutral"
|
|
443
524
|
variant="ghost"
|
|
444
|
-
size="
|
|
525
|
+
:size="size"
|
|
445
526
|
:label="filterUi.actions.clear"
|
|
527
|
+
:ui="{ base: dataListFilterUi?.clear }"
|
|
446
528
|
@click="clearFilter"
|
|
447
529
|
/>
|
|
448
|
-
<
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
530
|
+
<div class="flex items-center gap-2">
|
|
531
|
+
<UButton
|
|
532
|
+
v-if="operator !== 'between'"
|
|
533
|
+
color="neutral"
|
|
534
|
+
variant="ghost"
|
|
535
|
+
:size="size"
|
|
536
|
+
:label="filterUi.actions.clear"
|
|
537
|
+
:ui="{ base: dataListFilterUi?.clear }"
|
|
538
|
+
@click="clearFilter"
|
|
539
|
+
/>
|
|
540
|
+
<UButton
|
|
541
|
+
color="neutral"
|
|
542
|
+
variant="subtle"
|
|
543
|
+
:size="size"
|
|
544
|
+
:label="filterUi.actions.apply"
|
|
545
|
+
:ui="{ base: dataListFilterUi?.apply }"
|
|
546
|
+
@click="applyFilter"
|
|
547
|
+
/>
|
|
548
|
+
</div>
|
|
455
549
|
</div>
|
|
456
550
|
</div>
|
|
457
|
-
</
|
|
551
|
+
</FilterStageTransition>
|
|
458
552
|
</template>
|
|
459
|
-
</
|
|
553
|
+
</FilterPopoverShell>
|
|
460
554
|
</template>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import type { TableFilterOperator } from '../../../types/index.js';
|
|
1
2
|
import type { TableDateFilterDefinition } from '../../../types/filters.js';
|
|
2
3
|
type __VLS_Props = {
|
|
3
4
|
definition: TableDateFilterDefinition;
|
|
4
5
|
dynamic?: boolean;
|
|
5
6
|
session?: boolean;
|
|
6
|
-
|
|
7
|
+
embedded?: boolean;
|
|
8
|
+
initialOperator?: TableFilterOperator;
|
|
7
9
|
};
|
|
8
10
|
declare var __VLS_10: {
|
|
9
11
|
preview: import("../../../utils/index.js").FilterPreviewResult;
|
|
@@ -1,25 +1,26 @@
|
|
|
1
|
+
import type { TableUiFilterDefinition } from '../../../types/index.js';
|
|
1
2
|
type __VLS_Props = {
|
|
2
3
|
showAdd?: boolean;
|
|
3
4
|
showClear?: boolean;
|
|
4
5
|
};
|
|
5
|
-
declare var __VLS_10: any, __VLS_22:
|
|
6
|
+
declare var __VLS_10: any, __VLS_22: {
|
|
6
7
|
open: () => void;
|
|
7
8
|
close: () => void;
|
|
8
9
|
toggle: () => void;
|
|
9
10
|
openState: boolean;
|
|
11
|
+
stage: "editor" | "match-mode" | "picker";
|
|
12
|
+
definition: TableUiFilterDefinition | undefined;
|
|
10
13
|
triggerProps: {
|
|
11
14
|
type: string;
|
|
12
15
|
'aria-expanded': boolean;
|
|
13
16
|
};
|
|
14
|
-
},
|
|
17
|
+
}, __VLS_32: {};
|
|
15
18
|
type __VLS_Slots = {} & {
|
|
16
19
|
filter?: (props: typeof __VLS_10) => any;
|
|
17
20
|
} & {
|
|
18
|
-
filter?: (props: typeof __VLS_22) => any;
|
|
21
|
+
'add-filter-trigger'?: (props: typeof __VLS_22) => any;
|
|
19
22
|
} & {
|
|
20
|
-
'
|
|
21
|
-
} & {
|
|
22
|
-
'clear-filter-label'?: (props: typeof __VLS_43) => any;
|
|
23
|
+
'clear-filter-label'?: (props: typeof __VLS_32) => any;
|
|
23
24
|
};
|
|
24
25
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
25
26
|
showAdd: boolean;
|
|
@@ -40,49 +40,34 @@ function getFilterLabel(definition) {
|
|
|
40
40
|
internals.filterPresentation.activeDynamicDefinitions.value.some(
|
|
41
41
|
(item) => item.key === definition.key
|
|
42
42
|
)
|
|
43
|
-
"
|
|
44
|
-
@dismiss="internals.filterPresentation.releaseDynamicSession({ key: definition.key })"
|
|
45
|
-
>
|
|
46
|
-
<template v-if="$slots.filter" #trigger="scope">
|
|
47
|
-
<slot name="filter" v-bind="scope" :filter="definition" />
|
|
48
|
-
</template>
|
|
49
|
-
</component>
|
|
50
|
-
|
|
51
|
-
<component
|
|
52
|
-
:is="resolveFilterTagComponent(dynamicSessionDefinition)"
|
|
53
|
-
v-if="dynamicSessionDefinition"
|
|
54
|
-
:key="`dynamic-session:${dynamicSessionDefinition.key}`"
|
|
55
|
-
:definition="dynamicSessionDefinition"
|
|
56
|
-
dynamic
|
|
57
|
-
session
|
|
58
|
-
:activation-token="
|
|
59
|
-
internals.filterPresentation.getDynamicActivationToken({
|
|
60
|
-
key: dynamicSessionDefinition.key
|
|
61
|
-
})
|
|
62
43
|
"
|
|
63
44
|
@dismiss="
|
|
64
|
-
internals.filterPresentation.releaseDynamicSession({
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
internals.filterPresentation.releaseDynamicSession({ key: dynamicSessionDefinition.key })
|
|
45
|
+
internals.filterPresentation.releaseDynamicSession({
|
|
46
|
+
key: definition.key
|
|
47
|
+
})
|
|
68
48
|
"
|
|
69
49
|
>
|
|
70
50
|
<template v-if="$slots.filter" #trigger="scope">
|
|
71
|
-
<slot name="filter" v-bind="scope" :filter="
|
|
51
|
+
<slot name="filter" v-bind="scope" :filter="definition" />
|
|
72
52
|
</template>
|
|
73
53
|
</component>
|
|
74
54
|
|
|
75
55
|
<DynamicFilterPicker
|
|
76
|
-
v-
|
|
77
|
-
props.showAdd && internals.filterPresentation.dormantDynamicDefinitions.value.length
|
|
56
|
+
v-if="
|
|
57
|
+
props.showAdd && (internals.filterPresentation.dormantDynamicDefinitions.value.length || dynamicSessionDefinition)
|
|
78
58
|
"
|
|
79
59
|
:definitions="internals.filterPresentation.dormantDynamicDefinitions.value"
|
|
60
|
+
:session-definition="dynamicSessionDefinition"
|
|
80
61
|
:get-label="getFilterLabel"
|
|
81
|
-
:size="
|
|
62
|
+
:size="
|
|
63
|
+
dataListUi.ui.value.addFilter?.size ?? dataListUi.ui.value.filterTags?.size ?? dataListUi.controlSize.value
|
|
64
|
+
"
|
|
82
65
|
:ui="{
|
|
66
|
+
...dataListUi.ui.value.addFilter?.ui,
|
|
83
67
|
trigger: dataListUi.ui.value.filterTags?.ui?.addTrigger
|
|
84
68
|
}"
|
|
85
69
|
@select="internals.filterPresentation.activateDynamicFilter({ key: $event })"
|
|
70
|
+
@release="internals.filterPresentation.releaseDynamicSession({ key: $event })"
|
|
86
71
|
>
|
|
87
72
|
<template v-if="$slots['add-filter-trigger']" #trigger="scope">
|
|
88
73
|
<slot name="add-filter-trigger" v-bind="scope" />
|