@sinequa/atomic-angular 1.16.0 → 1.18.0
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/fesm2022/sinequa-atomic-angular.mjs +134 -45
- package/fesm2022/sinequa-atomic-angular.mjs.map +1 -1
- package/index.d.ts +193 -2
- package/package.json +12 -36
- package/document-workspaces/i18n/de.json +0 -232
- package/document-workspaces/i18n/en.json +0 -232
- package/document-workspaces/i18n/fr.json +0 -232
- package/document-workspaces/i18n/ja.json +0 -232
- package/document-workspaces/index.d.ts +0 -2116
- package/elements/index.d.ts +0 -346
- package/fesm2022/sinequa-atomic-angular-document-workspaces.mjs +0 -8250
- package/fesm2022/sinequa-atomic-angular-document-workspaces.mjs.map +0 -1
- package/fesm2022/sinequa-atomic-angular-elements.mjs +0 -7526
- package/fesm2022/sinequa-atomic-angular-elements.mjs.map +0 -1
- package/fesm2022/sinequa-atomic-angular-workspace-elements.mjs +0 -172
- package/fesm2022/sinequa-atomic-angular-workspace-elements.mjs.map +0 -1
- package/workspace-elements/index.d.ts +0 -37
- package/workspace-elements/styles/lexiq-workspaces.css +0 -10224
|
@@ -1995,7 +1995,8 @@ const QUERY_PARAMS_DEFAULTS = {
|
|
|
1995
1995
|
aggregations: undefined,
|
|
1996
1996
|
orderBy: "",
|
|
1997
1997
|
groupBy: "",
|
|
1998
|
-
neuralSearch: undefined
|
|
1998
|
+
neuralSearch: undefined,
|
|
1999
|
+
aggregation_overrides: undefined
|
|
1999
2000
|
};
|
|
2000
2001
|
const QueryParamsStore = signalStore({ providedIn: "root" }, withDevtools("QueryParams"), withQueryParamsFeatures());
|
|
2001
2002
|
function withQueryParamsFeatures() {
|
|
@@ -2091,7 +2092,7 @@ function withQueryParamsFeatures() {
|
|
|
2091
2092
|
* - If the filter already exists, its values are updated.
|
|
2092
2093
|
*/
|
|
2093
2094
|
updateFilter(newFilter, audit, options) {
|
|
2094
|
-
patchState(store,
|
|
2095
|
+
patchState(store, state => {
|
|
2095
2096
|
if (newFilter === undefined)
|
|
2096
2097
|
return state;
|
|
2097
2098
|
// is filter contains values, check if the operator is set, otherwise set operator to "in" by default
|
|
@@ -2100,14 +2101,14 @@ function withQueryParamsFeatures() {
|
|
|
2100
2101
|
}
|
|
2101
2102
|
const currentActiveFilters = state.filters || [];
|
|
2102
2103
|
let newState;
|
|
2103
|
-
const filterFound = currentActiveFilters.find(
|
|
2104
|
+
const filterFound = currentActiveFilters.find(f => f.field === newFilter.field);
|
|
2104
2105
|
// if the filter has no name (might be coming from a metadata appliance)
|
|
2105
2106
|
if (!newFilter.name || !filterFound?.name) {
|
|
2106
2107
|
// cancel if a filter is found for the current field which contains the value we want to add
|
|
2107
2108
|
if (filterFound &&
|
|
2108
2109
|
newFilter.value &&
|
|
2109
2110
|
(filterFound.value?.toLowerCase() === newFilter.value?.toLowerCase() ||
|
|
2110
|
-
filterFound.values?.some(
|
|
2111
|
+
filterFound.values?.some(v => v?.toLowerCase() === newFilter.value?.toLowerCase()))) {
|
|
2111
2112
|
return state;
|
|
2112
2113
|
}
|
|
2113
2114
|
if (filterFound) {
|
|
@@ -2126,7 +2127,7 @@ function withQueryParamsFeatures() {
|
|
|
2126
2127
|
operator: newFilter.operator || filterFound.operator || "in"
|
|
2127
2128
|
};
|
|
2128
2129
|
// find the index of the existing filter for the field and replace it with the merged filter
|
|
2129
|
-
const existingIndex = currentActiveFilters.findIndex(
|
|
2130
|
+
const existingIndex = currentActiveFilters.findIndex(f => f.field === newFilter.field);
|
|
2130
2131
|
const filters = currentActiveFilters.toSpliced(existingIndex, 1, filterToApply);
|
|
2131
2132
|
newState = { ...state, filters };
|
|
2132
2133
|
}
|
|
@@ -2139,7 +2140,7 @@ function withQueryParamsFeatures() {
|
|
|
2139
2140
|
}
|
|
2140
2141
|
else {
|
|
2141
2142
|
// search filter by name not by field because many filters can have the same field but different names
|
|
2142
|
-
const existing = currentActiveFilters.findIndex(
|
|
2143
|
+
const existing = currentActiveFilters.findIndex(f => f.name === newFilter.name);
|
|
2143
2144
|
// Add filter if it doesn't exist and has values
|
|
2144
2145
|
if (existing === -1) {
|
|
2145
2146
|
newState = { ...state, filters: [...(currentActiveFilters || []), newFilter] };
|
|
@@ -2147,14 +2148,11 @@ function withQueryParamsFeatures() {
|
|
|
2147
2148
|
if (existing >= 0) {
|
|
2148
2149
|
// remove filter if between operator is selected but no values are selected
|
|
2149
2150
|
if (newFilter.operator === "between" && newFilter.start === undefined && newFilter.end === undefined) {
|
|
2150
|
-
newState = { ...state, filters: currentActiveFilters.filter(
|
|
2151
|
+
newState = { ...state, filters: currentActiveFilters.filter(f => f.name !== newFilter.name) };
|
|
2151
2152
|
}
|
|
2152
2153
|
// Remove filter if no values are selected
|
|
2153
|
-
if (newFilter.operator !== "between" &&
|
|
2154
|
-
|
|
2155
|
-
newFilter.value === undefined &&
|
|
2156
|
-
newFilter.values === undefined) {
|
|
2157
|
-
newState = { ...state, filters: (currentActiveFilters || []).filter((f) => f?.name !== newFilter.name) };
|
|
2154
|
+
if (newFilter.operator !== "between" && newFilter.filters === undefined && newFilter.value === undefined && newFilter.values === undefined) {
|
|
2155
|
+
newState = { ...state, filters: (currentActiveFilters || []).filter(f => f?.name !== newFilter.name) };
|
|
2158
2156
|
}
|
|
2159
2157
|
// Update filter values
|
|
2160
2158
|
if (existing >= 0) {
|
|
@@ -2175,8 +2173,8 @@ function withQueryParamsFeatures() {
|
|
|
2175
2173
|
removeFilter(field, options) {
|
|
2176
2174
|
if (!field)
|
|
2177
2175
|
return;
|
|
2178
|
-
patchState(store,
|
|
2179
|
-
const filters = state.filters?.filter(
|
|
2176
|
+
patchState(store, state => {
|
|
2177
|
+
const filters = state.filters?.filter(f => f.field !== field);
|
|
2180
2178
|
const newState = { ...state, filters };
|
|
2181
2179
|
this._updateUrlQueryParams(newState, undefined, options);
|
|
2182
2180
|
return newState;
|
|
@@ -2192,11 +2190,11 @@ function withQueryParamsFeatures() {
|
|
|
2192
2190
|
return;
|
|
2193
2191
|
const filters = getState(store).filters || [];
|
|
2194
2192
|
// if the filter is not found by name, check if it is found by field
|
|
2195
|
-
if (filters.some(
|
|
2193
|
+
if (filters.some(f => f.name === name) === false) {
|
|
2196
2194
|
return this.removeFilter(column, options);
|
|
2197
2195
|
}
|
|
2198
|
-
patchState(store,
|
|
2199
|
-
const filters = state.filters?.filter(
|
|
2196
|
+
patchState(store, state => {
|
|
2197
|
+
const filters = state.filters?.filter(f => f.name !== name);
|
|
2200
2198
|
const newState = { ...state, filters };
|
|
2201
2199
|
this._updateUrlQueryParams(newState, undefined, options);
|
|
2202
2200
|
return newState;
|
|
@@ -2210,7 +2208,7 @@ function withQueryParamsFeatures() {
|
|
|
2210
2208
|
* It uses the `patchState` function to apply the state change.
|
|
2211
2209
|
*/
|
|
2212
2210
|
clearFilters(options) {
|
|
2213
|
-
patchState(store,
|
|
2211
|
+
patchState(store, state => {
|
|
2214
2212
|
const newState = { ...state, filters: [], basket: undefined };
|
|
2215
2213
|
this._updateUrlQueryParams(newState, undefined, options);
|
|
2216
2214
|
return newState;
|
|
@@ -2223,7 +2221,7 @@ function withQueryParamsFeatures() {
|
|
|
2223
2221
|
* It uses the `patchState` function to apply the state change.
|
|
2224
2222
|
*/
|
|
2225
2223
|
clearBasket(options) {
|
|
2226
|
-
patchState(store,
|
|
2224
|
+
patchState(store, state => {
|
|
2227
2225
|
const newState = { ...state, basket: undefined };
|
|
2228
2226
|
this._updateUrlQueryParams(newState, undefined, options);
|
|
2229
2227
|
return newState;
|
|
@@ -2235,7 +2233,7 @@ function withQueryParamsFeatures() {
|
|
|
2235
2233
|
* @param params - A partial object containing the query parameters to be updated.
|
|
2236
2234
|
*/
|
|
2237
2235
|
patch(params, audit, options) {
|
|
2238
|
-
patchState(store,
|
|
2236
|
+
patchState(store, state => {
|
|
2239
2237
|
// get the hash path without the query params and without the leading '#'
|
|
2240
2238
|
const path = window.location.hash.split("?")[0].replace(/^#/, "");
|
|
2241
2239
|
const newState = { ...state, ...params, path };
|
|
@@ -2277,11 +2275,11 @@ function withQueryParamsFeatures() {
|
|
|
2277
2275
|
// first try to find the filter by name if name is provided
|
|
2278
2276
|
let filter;
|
|
2279
2277
|
if (name) {
|
|
2280
|
-
filter = getState(store).filters?.find(
|
|
2278
|
+
filter = getState(store).filters?.find(f => f?.name === name);
|
|
2281
2279
|
}
|
|
2282
2280
|
if (!filter && field) {
|
|
2283
2281
|
// if not found by name, try to find it by field if field is provided
|
|
2284
|
-
filter = getState(store).filters?.find(
|
|
2282
|
+
filter = getState(store).filters?.find(f => f?.field === field);
|
|
2285
2283
|
}
|
|
2286
2284
|
// if filter is found, return null
|
|
2287
2285
|
if (!filter)
|
|
@@ -2317,7 +2315,7 @@ function withQueryParamsFeatures() {
|
|
|
2317
2315
|
* @returns Query The constructed query object.
|
|
2318
2316
|
*/
|
|
2319
2317
|
getQuery() {
|
|
2320
|
-
const { filters: allFilters = [], sort, tab, basket, text: queryText = "", spellingCorrectionMode } = getState(store);
|
|
2318
|
+
const { filters: allFilters = [], sort, tab, basket, text: queryText = "", spellingCorrectionMode, aggregation_overrides } = getState(store);
|
|
2321
2319
|
// check if a query name is defined
|
|
2322
2320
|
// if not, try to get it from the route data or from the default query in the app store
|
|
2323
2321
|
let { name } = getState(store);
|
|
@@ -2328,16 +2326,16 @@ function withQueryParamsFeatures() {
|
|
|
2328
2326
|
}
|
|
2329
2327
|
let text = queryText;
|
|
2330
2328
|
// remove concepts filters from the query to add them in the query expression
|
|
2331
|
-
const [conceptsFilters] = allFilters.filter(
|
|
2329
|
+
const [conceptsFilters] = allFilters.filter(f => f.field === "concepts");
|
|
2332
2330
|
if (conceptsFilters) {
|
|
2333
2331
|
const concepts = conceptsFilters.filters
|
|
2334
|
-
? conceptsFilters.filters.map(
|
|
2332
|
+
? conceptsFilters.filters.map(f => f.value)
|
|
2335
2333
|
: [conceptsFilters.value];
|
|
2336
2334
|
text = addConcepts(queryText, concepts);
|
|
2337
2335
|
}
|
|
2338
|
-
const filters = allFilters.filter(
|
|
2336
|
+
const filters = allFilters.filter(f => f.field !== "concepts");
|
|
2339
2337
|
const f = filters.length > 1 ? { operator: "and", filters } : filters[0];
|
|
2340
|
-
const query = runInInjectionContext(injector, () => buildQuery({ filters: f, name, sort, spellingCorrectionMode, tab, text, basket }));
|
|
2338
|
+
const query = runInInjectionContext(injector, () => buildQuery({ filters: f, name, sort, spellingCorrectionMode, tab, text, basket, aggregation_overrides }));
|
|
2341
2339
|
return query;
|
|
2342
2340
|
}
|
|
2343
2341
|
})));
|
|
@@ -9702,6 +9700,15 @@ class AggregationDateComponent {
|
|
|
9702
9700
|
* `selectionChange` (see its live-emission timing).
|
|
9703
9701
|
*/
|
|
9704
9702
|
filtersChange = output();
|
|
9703
|
+
/**
|
|
9704
|
+
* Emits the query's `aggregation_overrides` to use with the selection, in controlled mode:
|
|
9705
|
+
* the `[query]`'s own overrides with this aggregation's entry (keyed by aggregation name)
|
|
9706
|
+
* set to the mask of the selected masked date (`YYYY`, `YYYY-MM`), or removed when the
|
|
9707
|
+
* selection has none. `undefined` when no override is left. Emitted right before
|
|
9708
|
+
* `filtersChange`, on the same occasions — the host assigns it to the query it fetches with.
|
|
9709
|
+
* In default mode the component writes it to the `QueryParamsStore` itself.
|
|
9710
|
+
*/
|
|
9711
|
+
aggregationOverridesChange = output();
|
|
9705
9712
|
/* collapse state */
|
|
9706
9713
|
isCollapsed = linkedSignal(() => this.collapsed(), ...(ngDevMode ? [{ debugName: "isCollapsed" }] : []));
|
|
9707
9714
|
expanded = computed(() => (this.isCollapsed() ? null : ""), ...(ngDevMode ? [{ debugName: "expanded" }] : []));
|
|
@@ -9860,8 +9867,61 @@ class AggregationDateComponent {
|
|
|
9860
9867
|
// a date selection is either a preset (the item's value — the real filter
|
|
9861
9868
|
// value, robust across days) or a custom range (its bounds) — never both
|
|
9862
9869
|
this.selectionChange.emit(option && option !== "custom-range" ? { kind: "option", option: this.optionToItemValue(option) ?? option } : this.toRangeSelection(filter));
|
|
9870
|
+
this.aggregationOverridesChange.emit(this.overridesWithMask(this.selectedMask()));
|
|
9863
9871
|
this.filtersChange.emit(legacyFilterToFilter(filter));
|
|
9864
9872
|
}
|
|
9873
|
+
/** Mask of the selected preset when it is a masked date; none for a custom range or a regular preset. */
|
|
9874
|
+
selectedMask() {
|
|
9875
|
+
const option = this.form.value.option;
|
|
9876
|
+
if (!option || option === "custom-range")
|
|
9877
|
+
return undefined;
|
|
9878
|
+
return this.dateOptions().find((o) => o.display === option)?.mask;
|
|
9879
|
+
}
|
|
9880
|
+
/** The `aggregation_overrides` of the query this component works against. */
|
|
9881
|
+
currentOverrides() {
|
|
9882
|
+
return this.isControlled() ? this.controlledQuery()?.aggregation_overrides : this.queryParamsStore.aggregation_overrides?.();
|
|
9883
|
+
}
|
|
9884
|
+
/**
|
|
9885
|
+
* The current overrides with this aggregation's entry set to `mask`, or removed when `mask` is
|
|
9886
|
+
* `undefined`. Entries of other aggregations are kept. `undefined` when no override is left.
|
|
9887
|
+
*/
|
|
9888
|
+
overridesWithMask(mask) {
|
|
9889
|
+
const key = this.aggregation()?.name ?? this.name();
|
|
9890
|
+
const overrides = { ...this.currentOverrides() };
|
|
9891
|
+
if (key) {
|
|
9892
|
+
if (mask)
|
|
9893
|
+
overrides[key] = { mask };
|
|
9894
|
+
else
|
|
9895
|
+
delete overrides[key];
|
|
9896
|
+
}
|
|
9897
|
+
return Object.keys(overrides).length > 0 ? overrides : undefined;
|
|
9898
|
+
}
|
|
9899
|
+
/**
|
|
9900
|
+
* Writes the mask of the selection to the store, without touching the URL. Done *before* the
|
|
9901
|
+
* filter update, which is what triggers the search, so that search already carries the override.
|
|
9902
|
+
*/
|
|
9903
|
+
storeMask(mask) {
|
|
9904
|
+
const next = this.overridesWithMask(mask);
|
|
9905
|
+
if (JSON.stringify(next) === JSON.stringify(this.currentOverrides()))
|
|
9906
|
+
return;
|
|
9907
|
+
this.queryParamsStore.patch({ aggregation_overrides: next }, undefined, { syncUrl: false });
|
|
9908
|
+
}
|
|
9909
|
+
/**
|
|
9910
|
+
* Label of a masked date item that has no `display` of its own, in the active language
|
|
9911
|
+
* (`2016`, `mars 2016` / `March 2016`). `undefined` for any other option.
|
|
9912
|
+
*/
|
|
9913
|
+
maskedLabel(option) {
|
|
9914
|
+
if (!option.mask || !option.value || option.display !== option.value)
|
|
9915
|
+
return undefined;
|
|
9916
|
+
const [year, month] = option.value.split("-").map(Number);
|
|
9917
|
+
const format = option.mask === "YYYY" ? { year: "numeric" } : { year: "numeric", month: "long" };
|
|
9918
|
+
try {
|
|
9919
|
+
return new Intl.DateTimeFormat(this.lang(), { ...format, timeZone: "UTC" }).format(new Date(Date.UTC(year, (month ?? 1) - 1, 1)));
|
|
9920
|
+
}
|
|
9921
|
+
catch {
|
|
9922
|
+
return undefined;
|
|
9923
|
+
}
|
|
9924
|
+
}
|
|
9865
9925
|
select() {
|
|
9866
9926
|
this.selection.set(true);
|
|
9867
9927
|
}
|
|
@@ -9871,7 +9931,9 @@ class AggregationDateComponent {
|
|
|
9871
9931
|
this.emitCurrentSelection();
|
|
9872
9932
|
}
|
|
9873
9933
|
else {
|
|
9874
|
-
|
|
9934
|
+
const filter = this.getFormValueFilter();
|
|
9935
|
+
this.storeMask(this.selectedMask());
|
|
9936
|
+
this.queryParamsStore.updateFilter(filter, undefined, { syncUrl: this.syncUrl() });
|
|
9875
9937
|
}
|
|
9876
9938
|
this.selection.set(false);
|
|
9877
9939
|
this.onApply.emit();
|
|
@@ -9895,9 +9957,11 @@ class AggregationDateComponent {
|
|
|
9895
9957
|
if (agg && notify) {
|
|
9896
9958
|
if (this.isControlled()) {
|
|
9897
9959
|
this.selectionChange.emit({ kind: "range" });
|
|
9960
|
+
this.aggregationOverridesChange.emit(this.overridesWithMask(undefined));
|
|
9898
9961
|
this.filtersChange.emit(undefined);
|
|
9899
9962
|
}
|
|
9900
9963
|
else {
|
|
9964
|
+
this.storeMask(undefined);
|
|
9901
9965
|
this.queryParamsStore.removeFilterByName(agg.name, undefined, { syncUrl: this.syncUrl() });
|
|
9902
9966
|
}
|
|
9903
9967
|
this.onClear.emit();
|
|
@@ -9940,8 +10004,8 @@ class AggregationDateComponent {
|
|
|
9940
10004
|
this.clear(false);
|
|
9941
10005
|
return;
|
|
9942
10006
|
}
|
|
9943
|
-
const { operator
|
|
9944
|
-
const code = this.
|
|
10007
|
+
const { operator } = filter;
|
|
10008
|
+
const code = this.findPresetCode(filter) ?? "custom-range";
|
|
9945
10009
|
let from = null, to = null;
|
|
9946
10010
|
if (code === "custom-range") {
|
|
9947
10011
|
switch (operator) {
|
|
@@ -9956,9 +10020,7 @@ class AggregationDateComponent {
|
|
|
9956
10020
|
to = filter.end;
|
|
9957
10021
|
break;
|
|
9958
10022
|
case "and": {
|
|
9959
|
-
|
|
9960
|
-
from = filters?.find((f) => f.operator === "gte")?.value ?? null;
|
|
9961
|
-
to = filters?.find((f) => f.operator === "lte")?.value ?? null;
|
|
10023
|
+
({ from, to } = this.toBounds(filter.filters));
|
|
9962
10024
|
break;
|
|
9963
10025
|
}
|
|
9964
10026
|
}
|
|
@@ -9972,6 +10034,37 @@ class AggregationDateComponent {
|
|
|
9972
10034
|
};
|
|
9973
10035
|
this.form.setValue(formValue);
|
|
9974
10036
|
}
|
|
10037
|
+
/**
|
|
10038
|
+
* Finds the preset (its option code) a committed filter stands for. A preset whose
|
|
10039
|
+
* item is a bounds expression commits as an `and` of `gte` / `lt` — the same shape
|
|
10040
|
+
* as a custom range, and one that does not always carry the item `value` back — so
|
|
10041
|
+
* besides the `operator` / `value` match the bounds are compared to each option's.
|
|
10042
|
+
*/
|
|
10043
|
+
findPresetCode(filter) {
|
|
10044
|
+
const options = this.dateOptions();
|
|
10045
|
+
const exact = options.find((option) => option.operator === filter.operator && option.value === filter.value);
|
|
10046
|
+
if (exact)
|
|
10047
|
+
return exact.display;
|
|
10048
|
+
if (filter.operator !== "and")
|
|
10049
|
+
return undefined;
|
|
10050
|
+
const { from, to } = this.toBounds(filter.filters);
|
|
10051
|
+
if (!from || !to)
|
|
10052
|
+
return undefined;
|
|
10053
|
+
return options.find((option) => {
|
|
10054
|
+
if (option.operator !== "and")
|
|
10055
|
+
return false;
|
|
10056
|
+
const bounds = this.toBounds(option.filters);
|
|
10057
|
+
return bounds.from === from && bounds.to === to;
|
|
10058
|
+
})?.display;
|
|
10059
|
+
}
|
|
10060
|
+
/** Lower (`gte`) and upper (`lt` or `lte`) bounds of an `and` filter's sub-filters. */
|
|
10061
|
+
toBounds(filters) {
|
|
10062
|
+
const bound = (...operators) => {
|
|
10063
|
+
const value = filters?.find((f) => operators.includes(f.operator))?.value;
|
|
10064
|
+
return value === undefined || value === null ? null : String(value);
|
|
10065
|
+
};
|
|
10066
|
+
return { from: bound("gte"), to: bound("lte", "lt") };
|
|
10067
|
+
}
|
|
9975
10068
|
/**
|
|
9976
10069
|
* Derives the form from a controlled selection.
|
|
9977
10070
|
* `{ kind: "option" }` re-selects the date option whose item `value` matches —
|
|
@@ -10045,12 +10138,8 @@ class AggregationDateComponent {
|
|
|
10045
10138
|
case "between":
|
|
10046
10139
|
return { kind: "range", from: filter.start, to: filter.end };
|
|
10047
10140
|
case "and": {
|
|
10048
|
-
const
|
|
10049
|
-
return {
|
|
10050
|
-
kind: "range",
|
|
10051
|
-
from: filters.find(f => f.operator === "gte")?.value,
|
|
10052
|
-
to: filters.find(f => f.operator === "lte")?.value
|
|
10053
|
-
};
|
|
10141
|
+
const { from, to } = this.toBounds(filter.filters);
|
|
10142
|
+
return { kind: "range", from: from ?? undefined, to: to ?? undefined };
|
|
10054
10143
|
}
|
|
10055
10144
|
default:
|
|
10056
10145
|
return { kind: "range", from: filter.value, to: filter.value };
|
|
@@ -10131,7 +10220,7 @@ class AggregationDateComponent {
|
|
|
10131
10220
|
throw new Error("filters.filterInvalid");
|
|
10132
10221
|
}
|
|
10133
10222
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.29", ngImport: i0, type: AggregationDateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10134
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.29", type: AggregationDateComponent, isStandalone: true, selector: "aggregation-date, AggregationDate, aggregationdate", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: true, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, showFiltersCount: { classPropertyName: "showFiltersCount", publicName: "showFiltersCount", isSignal: true, isRequired: false, transformFunction: null }, syncUrl: { classPropertyName: "syncUrl", publicName: "syncUrl", isSignal: true, isRequired: false, transformFunction: null }, controlledQuery: { classPropertyName: "controlledQuery", publicName: "query", isSignal: true, isRequired: false, transformFunction: null }, controlledAggregation: { classPropertyName: "controlledAggregation", publicName: "aggregation", isSignal: true, isRequired: false, transformFunction: null }, controlledSelection: { classPropertyName: "controlledSelection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null }, emitOn: { classPropertyName: "emitOn", publicName: "emitOn", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, displayEmptyDistributionIntervals: { classPropertyName: "displayEmptyDistributionIntervals", publicName: "displayEmptyDistributionIntervals", isSignal: true, isRequired: false, transformFunction: null }, searchText: { classPropertyName: "searchText", publicName: "searchText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect", onApply: "onApply", onClear: "onClear", selectionChange: "selectionChange", filtersChange: "filtersChange", searchText: "searchTextChange" }, host: { properties: { "class": "cn(\"@container block\", isEmpty() && \"hidden\")" } }, providers: [provideTranslocoScope("filters")], viewQueries: [{ propertyName: "dateRangeDialog", first: true, predicate: AggregationDateRangeDialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary\n [class.cursor-pointer]=\"collapsible()\"\n class=\"m-0 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\n (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @let icon = aggregation()?.icon;\n @if (icon) {\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\n }\n <span class=\"grow\">{{\n aggregation()?.display | syslang | transloco\n }}</span>\n </ng-content>\n\n @if (hasFilters()) {\n @let clearLabel = \"filters.clearFilters\" | transloco;\n <button\n type=\"button\"\n variant=\"none\"\n icon-button\n [aria-label]=\"clearLabel\"\n (click)=\"$event.stopPropagation(); clear()\">\n <filter-x-icon />\n </button>\n }\n\n @if (\n (!isControlled() || emitOn() === \"apply\") &&\n selection() &&\n validSelection()\n ) {\n @let label = \"filters.apply\" | transloco;\n <button\n type=\"button\"\n variant=\"accent\"\n size=\"sm\"\n [aria-label]=\"label\"\n (click)=\"$event.stopPropagation(); apply()\">\n <FilterIcon />\n {{ label }}\n </button>\n }\n @if (collapsible()) {\n <icon-button\n title=\"Open/Close\"\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </icon-button>\n }\n </summary>\n\n <!-- content wrapper -->\n <form [formGroup]=\"form\">\n <ul\n class=\"flex max-h-[var(--scroll-height,20rem)] snap-y snap-start scrollbar-thin flex-col gap-1 overflow-auto pt-2\"\n role=\"list\">\n @for (option of dateOptions(); track $index) {\n <li\n role=\"listitem\"\n tabindex=\"0\"\n (click)=\"radio.click()\"\n [attr.aria-label]=\"option.display | syslang | transloco\"\n [class]=\"\n cn(\n 'flex p-0 px-2 leading-7',\n form.get('option')?.value === option.display && 'bg-accent',\n option.hidden && 'hidden',\n option.disabled && 'disabled pointer-events-none text-neutral-300'\n )\n \"\n [attr.aria-hidden]=\"option.disabled\">\n <input\n #radio\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-{{ option.display }}\"\n [attr.disabled]=\"option.disabled ? true : null\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"select()\"\n value=\"{{ option.display }}\" />\n\n <label\n for=\"date-filter-{{ option.display }}\"\n class=\"grow cursor-pointer p-1\">\n {{ option.display | syslang | transloco }}\n </label>\n </li>\n }\n\n @if (allowCustomRange) {\n <li\n role=\"listitem\"\n aria-label=\"open date range picker\"\n class=\"flex px-2 leading-7\"\n [class.select]=\"form.get('option')?.value === 'custom-range'\">\n <input\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-range-dialog\"\n value=\"custom-range\"\n (click)=\"select()\" />\n <div class=\"@container flex grow gap-1 p-1 @max-[340px]:flex-wrap\">\n <div class=\"flex gap-1\">\n <label for=\"datepicker-range-start\" class=\"min-w-10 truncate\">{{\n \"filters.from\" | transloco\n }}</label>\n <input\n id=\"datepicker-range-start\"\n name=\"start\"\n type=\"text\"\n readonly\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\n [value]=\"customRangeFrom()\"\n (click)=\"selectAndOpenDialog()\" />\n </div>\n <div class=\"flex gap-1\">\n <label\n for=\"datepicker-range-end\"\n class=\"min-w-10 truncate text-right\"\n >{{ \"filters.to\" | transloco }}</label\n >\n <input\n id=\"datepicker-range-end\"\n name=\"end\"\n type=\"text\"\n readonly\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\n [value]=\"customRangeTo()\"\n (click)=\"selectAndOpenDialog()\" />\n </div>\n </div>\n </li>\n }\n </ul>\n </form>\n</details>\n\n<aggregation-date-range-dialog\n [lang]=\"lang()\"\n [useDateRange]=\"false\"\n [min]=\"form.get('customRange.from')?.value || undefined\"\n [max]=\"form.get('customRange.to')?.value || undefined\"\n (rangeSelected)=\"onRangeSelected($event)\" />\n", styles: [":host{min-width:200px}ul[role=list]{scrollbar-width:thin}\n"], dependencies: [{ kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: AggregationDateRangeDialogComponent, selector: "aggregation-date-range-dialog", inputs: ["min", "max", "lang", "useDateRange"], outputs: ["rangeSelected"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "component", type: FilterXIcon, selector: "filter-x-icon, FilterXIcon", inputs: ["class"] }, { kind: "directive", type: IconButtonComponent, selector: "button[icon-button], icon-button, IconButton", inputs: ["class", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
10223
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.29", type: AggregationDateComponent, isStandalone: true, selector: "aggregation-date, AggregationDate, aggregationdate", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: true, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, showFiltersCount: { classPropertyName: "showFiltersCount", publicName: "showFiltersCount", isSignal: true, isRequired: false, transformFunction: null }, syncUrl: { classPropertyName: "syncUrl", publicName: "syncUrl", isSignal: true, isRequired: false, transformFunction: null }, controlledQuery: { classPropertyName: "controlledQuery", publicName: "query", isSignal: true, isRequired: false, transformFunction: null }, controlledAggregation: { classPropertyName: "controlledAggregation", publicName: "aggregation", isSignal: true, isRequired: false, transformFunction: null }, controlledSelection: { classPropertyName: "controlledSelection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null }, emitOn: { classPropertyName: "emitOn", publicName: "emitOn", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, displayEmptyDistributionIntervals: { classPropertyName: "displayEmptyDistributionIntervals", publicName: "displayEmptyDistributionIntervals", isSignal: true, isRequired: false, transformFunction: null }, searchText: { classPropertyName: "searchText", publicName: "searchText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect", onApply: "onApply", onClear: "onClear", selectionChange: "selectionChange", filtersChange: "filtersChange", aggregationOverridesChange: "aggregationOverridesChange", searchText: "searchTextChange" }, host: { properties: { "class": "cn(\"@container block\", isEmpty() && \"hidden\")" } }, providers: [provideTranslocoScope("filters")], viewQueries: [{ propertyName: "dateRangeDialog", first: true, predicate: AggregationDateRangeDialogComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary\n [class.cursor-pointer]=\"collapsible()\"\n class=\"m-0 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\n (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @let icon = aggregation()?.icon;\n @if (icon) {\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\n }\n <span class=\"grow\">{{\n aggregation()?.display | syslang | transloco\n }}</span>\n </ng-content>\n\n @if (hasFilters()) {\n @let clearLabel = \"filters.clearFilters\" | transloco;\n <button\n type=\"button\"\n variant=\"none\"\n icon-button\n [aria-label]=\"clearLabel\"\n (click)=\"$event.stopPropagation(); clear()\">\n <filter-x-icon />\n </button>\n }\n\n @if (\n (!isControlled() || emitOn() === \"apply\") &&\n selection() &&\n validSelection()\n ) {\n @let label = \"filters.apply\" | transloco;\n <button\n type=\"button\"\n variant=\"accent\"\n size=\"sm\"\n [aria-label]=\"label\"\n (click)=\"$event.stopPropagation(); apply()\">\n <FilterIcon />\n {{ label }}\n </button>\n }\n @if (collapsible()) {\n <icon-button\n title=\"Open/Close\"\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </icon-button>\n }\n </summary>\n\n <!-- content wrapper -->\n <form [formGroup]=\"form\">\n <ul\n class=\"flex max-h-[var(--scroll-height,20rem)] snap-y snap-start scrollbar-thin flex-col gap-1 overflow-auto pt-2\"\n role=\"list\">\n @for (option of dateOptions(); track option.display) {\n <li\n role=\"listitem\"\n tabindex=\"0\"\n (click)=\"radio.click()\"\n [attr.aria-label]=\"\n maskedLabel(option) ?? (option.display | syslang | transloco)\n \"\n [class]=\"\n cn(\n 'flex p-0 px-2 leading-7',\n form.get('option')?.value === option.display && 'bg-accent',\n option.hidden && 'hidden',\n option.disabled && 'disabled pointer-events-none text-neutral-300'\n )\n \"\n [attr.aria-hidden]=\"option.disabled\">\n <input\n #radio\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-{{ option.display }}\"\n [attr.disabled]=\"option.disabled ? true : null\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"select()\"\n value=\"{{ option.display }}\" />\n\n <label\n for=\"date-filter-{{ option.display }}\"\n class=\"grow cursor-pointer p-1\">\n {{ maskedLabel(option) ?? (option.display | syslang | transloco) }}\n </label>\n </li>\n }\n\n @if (allowCustomRange) {\n <li\n role=\"listitem\"\n aria-label=\"open date range picker\"\n class=\"flex px-2 leading-7\"\n [class.select]=\"form.get('option')?.value === 'custom-range'\">\n <input\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-range-dialog\"\n value=\"custom-range\"\n (click)=\"select()\" />\n <div class=\"@container flex grow gap-1 p-1 @max-[340px]:flex-wrap\">\n <div class=\"flex gap-1\">\n <label for=\"datepicker-range-start\" class=\"min-w-10 truncate\">{{\n \"filters.from\" | transloco\n }}</label>\n <input\n id=\"datepicker-range-start\"\n name=\"start\"\n type=\"text\"\n readonly\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\n [value]=\"customRangeFrom()\"\n (click)=\"selectAndOpenDialog()\" />\n </div>\n <div class=\"flex gap-1\">\n <label\n for=\"datepicker-range-end\"\n class=\"min-w-10 truncate text-right\"\n >{{ \"filters.to\" | transloco }}</label\n >\n <input\n id=\"datepicker-range-end\"\n name=\"end\"\n type=\"text\"\n readonly\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\n [value]=\"customRangeTo()\"\n (click)=\"selectAndOpenDialog()\" />\n </div>\n </div>\n </li>\n }\n </ul>\n </form>\n</details>\n\n<aggregation-date-range-dialog\n [lang]=\"lang()\"\n [useDateRange]=\"false\"\n [min]=\"form.get('customRange.from')?.value || undefined\"\n [max]=\"form.get('customRange.to')?.value || undefined\"\n (rangeSelected)=\"onRangeSelected($event)\" />\n", styles: [":host{min-width:200px}ul[role=list]{scrollbar-width:thin}\n"], dependencies: [{ kind: "directive", type: InputComponent, selector: "input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"tel\"], input[type=\"url\"], input[type=\"time\"], input[type=\"file\"]", inputs: ["class", "variant", "decoration"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: AggregationDateRangeDialogComponent, selector: "aggregation-date-range-dialog", inputs: ["min", "max", "lang", "useDateRange"], outputs: ["rangeSelected"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "component", type: FilterXIcon, selector: "filter-x-icon, FilterXIcon", inputs: ["class"] }, { kind: "directive", type: IconButtonComponent, selector: "button[icon-button], icon-button, IconButton", inputs: ["class", "size"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
10135
10224
|
}
|
|
10136
10225
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.29", ngImport: i0, type: AggregationDateComponent, decorators: [{
|
|
10137
10226
|
type: Component,
|
|
@@ -10156,8 +10245,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.29", ngImpo
|
|
|
10156
10245
|
// layout — a date facet has no "empty but resolved" state to gate behind
|
|
10157
10246
|
// `hideWhenEmpty` (see `isEmpty`), unlike list/tree.
|
|
10158
10247
|
"[class]": 'cn("@container block", isEmpty() && "hidden")'
|
|
10159
|
-
}, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary\n [class.cursor-pointer]=\"collapsible()\"\n class=\"m-0 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\n (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @let icon = aggregation()?.icon;\n @if (icon) {\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\n }\n <span class=\"grow\">{{\n aggregation()?.display | syslang | transloco\n }}</span>\n </ng-content>\n\n @if (hasFilters()) {\n @let clearLabel = \"filters.clearFilters\" | transloco;\n <button\n type=\"button\"\n variant=\"none\"\n icon-button\n [aria-label]=\"clearLabel\"\n (click)=\"$event.stopPropagation(); clear()\">\n <filter-x-icon />\n </button>\n }\n\n @if (\n (!isControlled() || emitOn() === \"apply\") &&\n selection() &&\n validSelection()\n ) {\n @let label = \"filters.apply\" | transloco;\n <button\n type=\"button\"\n variant=\"accent\"\n size=\"sm\"\n [aria-label]=\"label\"\n (click)=\"$event.stopPropagation(); apply()\">\n <FilterIcon />\n {{ label }}\n </button>\n }\n @if (collapsible()) {\n <icon-button\n title=\"Open/Close\"\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </icon-button>\n }\n </summary>\n\n <!-- content wrapper -->\n <form [formGroup]=\"form\">\n <ul\n class=\"flex max-h-[var(--scroll-height,20rem)] snap-y snap-start scrollbar-thin flex-col gap-1 overflow-auto pt-2\"\n role=\"list\">\n @for (option of dateOptions(); track
|
|
10160
|
-
}], ctorParameters: () => [], propDecorators: { dateRangeDialog: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AggregationDateRangeDialogComponent), { isSignal: true }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], column: [{ type: i0.Input, args: [{ isSignal: true, alias: "column", required: true }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], showFiltersCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFiltersCount", required: false }] }], syncUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "syncUrl", required: false }] }], controlledQuery: [{ type: i0.Input, args: [{ isSignal: true, alias: "query", required: false }] }], controlledAggregation: [{ type: i0.Input, args: [{ isSignal: true, alias: "aggregation", required: false }] }], controlledSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "selection", required: false }] }], emitOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "emitOn", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], displayEmptyDistributionIntervals: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayEmptyDistributionIntervals", required: false }] }], onSelect: [{ type: i0.Output, args: ["onSelect"] }], onApply: [{ type: i0.Output, args: ["onApply"] }], onClear: [{ type: i0.Output, args: ["onClear"] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], filtersChange: [{ type: i0.Output, args: ["filtersChange"] }], searchText: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchText", required: false }] }, { type: i0.Output, args: ["searchTextChange"] }] } });
|
|
10248
|
+
}, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary\n [class.cursor-pointer]=\"collapsible()\"\n class=\"m-0 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\n (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @let icon = aggregation()?.icon;\n @if (icon) {\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\n }\n <span class=\"grow\">{{\n aggregation()?.display | syslang | transloco\n }}</span>\n </ng-content>\n\n @if (hasFilters()) {\n @let clearLabel = \"filters.clearFilters\" | transloco;\n <button\n type=\"button\"\n variant=\"none\"\n icon-button\n [aria-label]=\"clearLabel\"\n (click)=\"$event.stopPropagation(); clear()\">\n <filter-x-icon />\n </button>\n }\n\n @if (\n (!isControlled() || emitOn() === \"apply\") &&\n selection() &&\n validSelection()\n ) {\n @let label = \"filters.apply\" | transloco;\n <button\n type=\"button\"\n variant=\"accent\"\n size=\"sm\"\n [aria-label]=\"label\"\n (click)=\"$event.stopPropagation(); apply()\">\n <FilterIcon />\n {{ label }}\n </button>\n }\n @if (collapsible()) {\n <icon-button\n title=\"Open/Close\"\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </icon-button>\n }\n </summary>\n\n <!-- content wrapper -->\n <form [formGroup]=\"form\">\n <ul\n class=\"flex max-h-[var(--scroll-height,20rem)] snap-y snap-start scrollbar-thin flex-col gap-1 overflow-auto pt-2\"\n role=\"list\">\n @for (option of dateOptions(); track option.display) {\n <li\n role=\"listitem\"\n tabindex=\"0\"\n (click)=\"radio.click()\"\n [attr.aria-label]=\"\n maskedLabel(option) ?? (option.display | syslang | transloco)\n \"\n [class]=\"\n cn(\n 'flex p-0 px-2 leading-7',\n form.get('option')?.value === option.display && 'bg-accent',\n option.hidden && 'hidden',\n option.disabled && 'disabled pointer-events-none text-neutral-300'\n )\n \"\n [attr.aria-hidden]=\"option.disabled\">\n <input\n #radio\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-{{ option.display }}\"\n [attr.disabled]=\"option.disabled ? true : null\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"select()\"\n value=\"{{ option.display }}\" />\n\n <label\n for=\"date-filter-{{ option.display }}\"\n class=\"grow cursor-pointer p-1\">\n {{ maskedLabel(option) ?? (option.display | syslang | transloco) }}\n </label>\n </li>\n }\n\n @if (allowCustomRange) {\n <li\n role=\"listitem\"\n aria-label=\"open date range picker\"\n class=\"flex px-2 leading-7\"\n [class.select]=\"form.get('option')?.value === 'custom-range'\">\n <input\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-range-dialog\"\n value=\"custom-range\"\n (click)=\"select()\" />\n <div class=\"@container flex grow gap-1 p-1 @max-[340px]:flex-wrap\">\n <div class=\"flex gap-1\">\n <label for=\"datepicker-range-start\" class=\"min-w-10 truncate\">{{\n \"filters.from\" | transloco\n }}</label>\n <input\n id=\"datepicker-range-start\"\n name=\"start\"\n type=\"text\"\n readonly\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\n [value]=\"customRangeFrom()\"\n (click)=\"selectAndOpenDialog()\" />\n </div>\n <div class=\"flex gap-1\">\n <label\n for=\"datepicker-range-end\"\n class=\"min-w-10 truncate text-right\"\n >{{ \"filters.to\" | transloco }}</label\n >\n <input\n id=\"datepicker-range-end\"\n name=\"end\"\n type=\"text\"\n readonly\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\n [value]=\"customRangeTo()\"\n (click)=\"selectAndOpenDialog()\" />\n </div>\n </div>\n </li>\n }\n </ul>\n </form>\n</details>\n\n<aggregation-date-range-dialog\n [lang]=\"lang()\"\n [useDateRange]=\"false\"\n [min]=\"form.get('customRange.from')?.value || undefined\"\n [max]=\"form.get('customRange.to')?.value || undefined\"\n (rangeSelected)=\"onRangeSelected($event)\" />\n", styles: [":host{min-width:200px}ul[role=list]{scrollbar-width:thin}\n"] }]
|
|
10249
|
+
}], ctorParameters: () => [], propDecorators: { dateRangeDialog: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AggregationDateRangeDialogComponent), { isSignal: true }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], column: [{ type: i0.Input, args: [{ isSignal: true, alias: "column", required: true }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], showFiltersCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFiltersCount", required: false }] }], syncUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "syncUrl", required: false }] }], controlledQuery: [{ type: i0.Input, args: [{ isSignal: true, alias: "query", required: false }] }], controlledAggregation: [{ type: i0.Input, args: [{ isSignal: true, alias: "aggregation", required: false }] }], controlledSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "selection", required: false }] }], emitOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "emitOn", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], displayEmptyDistributionIntervals: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayEmptyDistributionIntervals", required: false }] }], onSelect: [{ type: i0.Output, args: ["onSelect"] }], onApply: [{ type: i0.Output, args: ["onApply"] }], onClear: [{ type: i0.Output, args: ["onClear"] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], filtersChange: [{ type: i0.Output, args: ["filtersChange"] }], aggregationOverridesChange: [{ type: i0.Output, args: ["aggregationOverridesChange"] }], searchText: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchText", required: false }] }, { type: i0.Output, args: ["searchTextChange"] }] } });
|
|
10161
10250
|
|
|
10162
10251
|
/**
|
|
10163
10252
|
* Component that allows users to select a date or a date range for filtering search results.
|
|
@@ -10166,7 +10255,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.29", ngImpo
|
|
|
10166
10255
|
*/
|
|
10167
10256
|
class DateComponent extends AggregationDateComponent {
|
|
10168
10257
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.29", ngImport: i0, type: DateComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
10169
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.29", type: DateComponent, isStandalone: true, selector: "date-filter,DateFilter", host: { classAttribute: "@container" }, providers: [provideTranslocoScope("filters")], usesInheritance: true, ngImport: i0, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary\n [class.cursor-pointer]=\"collapsible()\"\n class=\"m-0 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\n (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @let icon = aggregation()?.icon;\n @if (icon) {\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\n }\n <span class=\"grow\">{{\n aggregation()?.display | syslang | transloco\n }}</span>\n </ng-content>\n\n @if (hasFilters()) {\n @let clearLabel = \"filters.clearFilters\" | transloco;\n <button\n type=\"button\"\n variant=\"none\"\n icon-button\n [aria-label]=\"clearLabel\"\n (click)=\"$event.stopPropagation(); clear()\">\n <filter-x-icon />\n </button>\n }\n\n @if (\n (!isControlled() || emitOn() === \"apply\") &&\n selection() &&\n validSelection()\n ) {\n @let label = \"filters.apply\" | transloco;\n <button\n type=\"button\"\n variant=\"accent\"\n size=\"sm\"\n [aria-label]=\"label\"\n (click)=\"$event.stopPropagation(); apply()\">\n <FilterIcon />\n {{ label }}\n </button>\n }\n @if (collapsible()) {\n <icon-button\n title=\"Open/Close\"\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </icon-button>\n }\n </summary>\n\n <!-- content wrapper -->\n <form [formGroup]=\"form\">\n <ul\n class=\"flex max-h-[var(--scroll-height,20rem)] snap-y snap-start scrollbar-thin flex-col gap-1 overflow-auto pt-2\"\n role=\"list\">\n @for (option of dateOptions(); track
|
|
10258
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.29", type: DateComponent, isStandalone: true, selector: "date-filter,DateFilter", host: { classAttribute: "@container" }, providers: [provideTranslocoScope("filters")], usesInheritance: true, ngImport: i0, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary\n [class.cursor-pointer]=\"collapsible()\"\n class=\"m-0 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\n (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @let icon = aggregation()?.icon;\n @if (icon) {\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\n }\n <span class=\"grow\">{{\n aggregation()?.display | syslang | transloco\n }}</span>\n </ng-content>\n\n @if (hasFilters()) {\n @let clearLabel = \"filters.clearFilters\" | transloco;\n <button\n type=\"button\"\n variant=\"none\"\n icon-button\n [aria-label]=\"clearLabel\"\n (click)=\"$event.stopPropagation(); clear()\">\n <filter-x-icon />\n </button>\n }\n\n @if (\n (!isControlled() || emitOn() === \"apply\") &&\n selection() &&\n validSelection()\n ) {\n @let label = \"filters.apply\" | transloco;\n <button\n type=\"button\"\n variant=\"accent\"\n size=\"sm\"\n [aria-label]=\"label\"\n (click)=\"$event.stopPropagation(); apply()\">\n <FilterIcon />\n {{ label }}\n </button>\n }\n @if (collapsible()) {\n <icon-button\n title=\"Open/Close\"\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </icon-button>\n }\n </summary>\n\n <!-- content wrapper -->\n <form [formGroup]=\"form\">\n <ul\n class=\"flex max-h-[var(--scroll-height,20rem)] snap-y snap-start scrollbar-thin flex-col gap-1 overflow-auto pt-2\"\n role=\"list\">\n @for (option of dateOptions(); track option.display) {\n <li\n role=\"listitem\"\n tabindex=\"0\"\n (click)=\"radio.click()\"\n [attr.aria-label]=\"\n maskedLabel(option) ?? (option.display | syslang | transloco)\n \"\n [class]=\"\n cn(\n 'flex p-0 px-2 leading-7',\n form.get('option')?.value === option.display && 'bg-accent',\n option.hidden && 'hidden',\n option.disabled && 'disabled pointer-events-none text-neutral-300'\n )\n \"\n [attr.aria-hidden]=\"option.disabled\">\n <input\n #radio\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-{{ option.display }}\"\n [attr.disabled]=\"option.disabled ? true : null\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"select()\"\n value=\"{{ option.display }}\" />\n\n <label\n for=\"date-filter-{{ option.display }}\"\n class=\"grow cursor-pointer p-1\">\n {{ maskedLabel(option) ?? (option.display | syslang | transloco) }}\n </label>\n </li>\n }\n\n @if (allowCustomRange) {\n <li\n role=\"listitem\"\n aria-label=\"open date range picker\"\n class=\"flex px-2 leading-7\"\n [class.select]=\"form.get('option')?.value === 'custom-range'\">\n <input\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-range-dialog\"\n value=\"custom-range\"\n (click)=\"select()\" />\n <div class=\"@container flex grow gap-1 p-1 @max-[340px]:flex-wrap\">\n <div class=\"flex gap-1\">\n <label for=\"datepicker-range-start\" class=\"min-w-10 truncate\">{{\n \"filters.from\" | transloco\n }}</label>\n <input\n id=\"datepicker-range-start\"\n name=\"start\"\n type=\"text\"\n readonly\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\n [value]=\"customRangeFrom()\"\n (click)=\"selectAndOpenDialog()\" />\n </div>\n <div class=\"flex gap-1\">\n <label\n for=\"datepicker-range-end\"\n class=\"min-w-10 truncate text-right\"\n >{{ \"filters.to\" | transloco }}</label\n >\n <input\n id=\"datepicker-range-end\"\n name=\"end\"\n type=\"text\"\n readonly\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\n [value]=\"customRangeTo()\"\n (click)=\"selectAndOpenDialog()\" />\n </div>\n </div>\n </li>\n }\n </ul>\n </form>\n</details>\n\n<aggregation-date-range-dialog\n [lang]=\"lang()\"\n [useDateRange]=\"false\"\n [min]=\"form.get('customRange.from')?.value || undefined\"\n [max]=\"form.get('customRange.to')?.value || undefined\"\n (rangeSelected)=\"onRangeSelected($event)\" />\n", styles: [":host{display:block;min-width:200px}ul[role=list]{scrollbar-width:thin}\n"], dependencies: [{ kind: "directive", type: IconButtonComponent, selector: "button[icon-button], icon-button, IconButton", inputs: ["class", "size"] }, { kind: "directive", type: ListItemComponent, selector: "[role=\"listitem\"], [role=\"option\"]", inputs: ["class", "variant", "decoration"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ChevronRightIcon, selector: "chevron-right, ChevronRight, chevronright, ChevronRightIcon, chevron-right-icon, chevronrighticon", inputs: ["class"] }, { kind: "component", type: AggregationDateRangeDialogComponent, selector: "aggregation-date-range-dialog", inputs: ["min", "max", "lang", "useDateRange"], outputs: ["rangeSelected"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon, FaIcon", inputs: ["faClass", "class"] }, { kind: "component", type: FilterIcon, selector: "filter-icon, FilterIcon", inputs: ["class"] }, { kind: "component", type: FilterXIcon, selector: "filter-x-icon, FilterXIcon", inputs: ["class"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: SyslangPipe, name: "syslang" }] });
|
|
10170
10259
|
}
|
|
10171
10260
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.29", ngImport: i0, type: DateComponent, decorators: [{
|
|
10172
10261
|
type: Component,
|
|
@@ -10183,7 +10272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.29", ngImpo
|
|
|
10183
10272
|
FilterXIcon
|
|
10184
10273
|
], host: {
|
|
10185
10274
|
class: "@container"
|
|
10186
|
-
}, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary\n [class.cursor-pointer]=\"collapsible()\"\n class=\"m-0 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\n (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @let icon = aggregation()?.icon;\n @if (icon) {\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\n }\n <span class=\"grow\">{{\n aggregation()?.display | syslang | transloco\n }}</span>\n </ng-content>\n\n @if (hasFilters()) {\n @let clearLabel = \"filters.clearFilters\" | transloco;\n <button\n type=\"button\"\n variant=\"none\"\n icon-button\n [aria-label]=\"clearLabel\"\n (click)=\"$event.stopPropagation(); clear()\">\n <filter-x-icon />\n </button>\n }\n\n @if (\n (!isControlled() || emitOn() === \"apply\") &&\n selection() &&\n validSelection()\n ) {\n @let label = \"filters.apply\" | transloco;\n <button\n type=\"button\"\n variant=\"accent\"\n size=\"sm\"\n [aria-label]=\"label\"\n (click)=\"$event.stopPropagation(); apply()\">\n <FilterIcon />\n {{ label }}\n </button>\n }\n @if (collapsible()) {\n <icon-button\n title=\"Open/Close\"\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </icon-button>\n }\n </summary>\n\n <!-- content wrapper -->\n <form [formGroup]=\"form\">\n <ul\n class=\"flex max-h-[var(--scroll-height,20rem)] snap-y snap-start scrollbar-thin flex-col gap-1 overflow-auto pt-2\"\n role=\"list\">\n @for (option of dateOptions(); track
|
|
10275
|
+
}, template: "<details [attr.open]=\"expanded()\" [attr.name]=\"id()\" class=\"group space-y-2\">\n <summary\n [class.cursor-pointer]=\"collapsible()\"\n class=\"m-0 flex h-8 w-full items-center gap-1 pl-1 font-semibold select-none\"\n (click)=\"onHeaderClick($event)\">\n <ng-content select=\"label\">\n @let icon = aggregation()?.icon;\n @if (icon) {\n <FaIcon [faClass]=\"icon\" class=\"mr-1 shrink-0\" />\n }\n <span class=\"grow\">{{\n aggregation()?.display | syslang | transloco\n }}</span>\n </ng-content>\n\n @if (hasFilters()) {\n @let clearLabel = \"filters.clearFilters\" | transloco;\n <button\n type=\"button\"\n variant=\"none\"\n icon-button\n [aria-label]=\"clearLabel\"\n (click)=\"$event.stopPropagation(); clear()\">\n <filter-x-icon />\n </button>\n }\n\n @if (\n (!isControlled() || emitOn() === \"apply\") &&\n selection() &&\n validSelection()\n ) {\n @let label = \"filters.apply\" | transloco;\n <button\n type=\"button\"\n variant=\"accent\"\n size=\"sm\"\n [aria-label]=\"label\"\n (click)=\"$event.stopPropagation(); apply()\">\n <FilterIcon />\n {{ label }}\n </button>\n }\n @if (collapsible()) {\n <icon-button\n title=\"Open/Close\"\n class=\"cursor-pointer [&_svg]:transition-transform [&_svg]:duration-150 group-open:[&_svg]:rotate-90\">\n <chevronright />\n </icon-button>\n }\n </summary>\n\n <!-- content wrapper -->\n <form [formGroup]=\"form\">\n <ul\n class=\"flex max-h-[var(--scroll-height,20rem)] snap-y snap-start scrollbar-thin flex-col gap-1 overflow-auto pt-2\"\n role=\"list\">\n @for (option of dateOptions(); track option.display) {\n <li\n role=\"listitem\"\n tabindex=\"0\"\n (click)=\"radio.click()\"\n [attr.aria-label]=\"\n maskedLabel(option) ?? (option.display | syslang | transloco)\n \"\n [class]=\"\n cn(\n 'flex p-0 px-2 leading-7',\n form.get('option')?.value === option.display && 'bg-accent',\n option.hidden && 'hidden',\n option.disabled && 'disabled pointer-events-none text-neutral-300'\n )\n \"\n [attr.aria-hidden]=\"option.disabled\">\n <input\n #radio\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-{{ option.display }}\"\n [attr.disabled]=\"option.disabled ? true : null\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"select()\"\n value=\"{{ option.display }}\" />\n\n <label\n for=\"date-filter-{{ option.display }}\"\n class=\"grow cursor-pointer p-1\">\n {{ maskedLabel(option) ?? (option.display | syslang | transloco) }}\n </label>\n </li>\n }\n\n @if (allowCustomRange) {\n <li\n role=\"listitem\"\n aria-label=\"open date range picker\"\n class=\"flex px-2 leading-7\"\n [class.select]=\"form.get('option')?.value === 'custom-range'\">\n <input\n type=\"radio\"\n formControlName=\"option\"\n id=\"date-filter-range-dialog\"\n value=\"custom-range\"\n (click)=\"select()\" />\n <div class=\"@container flex grow gap-1 p-1 @max-[340px]:flex-wrap\">\n <div class=\"flex gap-1\">\n <label for=\"datepicker-range-start\" class=\"min-w-10 truncate\">{{\n \"filters.from\" | transloco\n }}</label>\n <input\n id=\"datepicker-range-start\"\n name=\"start\"\n type=\"text\"\n readonly\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\n [value]=\"customRangeFrom()\"\n (click)=\"selectAndOpenDialog()\" />\n </div>\n <div class=\"flex gap-1\">\n <label\n for=\"datepicker-range-end\"\n class=\"min-w-10 truncate text-right\"\n >{{ \"filters.to\" | transloco }}</label\n >\n <input\n id=\"datepicker-range-end\"\n name=\"end\"\n type=\"text\"\n readonly\n class=\"h-8 max-w-[13ch] min-w-[13ch]\"\n [value]=\"customRangeTo()\"\n (click)=\"selectAndOpenDialog()\" />\n </div>\n </div>\n </li>\n }\n </ul>\n </form>\n</details>\n\n<aggregation-date-range-dialog\n [lang]=\"lang()\"\n [useDateRange]=\"false\"\n [min]=\"form.get('customRange.from')?.value || undefined\"\n [max]=\"form.get('customRange.to')?.value || undefined\"\n (rangeSelected)=\"onRangeSelected($event)\" />\n", styles: [":host{display:block;min-width:200px}ul[role=list]{scrollbar-width:thin}\n"] }]
|
|
10187
10276
|
}] });
|
|
10188
10277
|
|
|
10189
10278
|
class ArticleEntities {
|
|
@@ -16036,7 +16125,7 @@ class AggregationComponent {
|
|
|
16036
16125
|
/>
|
|
16037
16126
|
}
|
|
16038
16127
|
}
|
|
16039
|
-
`, isInline: true, dependencies: [{ kind: "component", type: AggregationListComponent, selector: "AggregationList, aggregation-list, aggregationlist", inputs: ["class", "id", "name", "column", "collapsible", "collapsed", "searchable", "showFiltersCount", "showCheckbox", "applyOnSelect", "syncUrl", "query", "aggregation", "selection", "hideWhenEmpty", "itemTemplate", "searchText"], outputs: ["onSelect", "onApply", "onClear", "selectionChange", "filtersChange", "searchTextChange"] }, { kind: "component", type: AggregationTreeComponent, selector: "AggregationTree, aggregation-tree, aggregationtree", inputs: ["class", "id", "name", "column", "collapsible", "collapsed", "searchable", "showFiltersCount", "showCheckbox", "applyOnSelect", "expandedLevel", "syncUrl", "query", "aggregation", "selection", "hideWhenEmpty", "itemTemplate", "searchText"], outputs: ["onSelect", "onApply", "onClear", "selectionChange", "filtersChange", "searchTextChange"] }, { kind: "component", type: AggregationDateComponent, selector: "aggregation-date, AggregationDate, aggregationdate", inputs: ["name", "column", "id", "collapsible", "collapsed", "searchable", "showFiltersCount", "syncUrl", "query", "aggregation", "selection", "emitOn", "title", "displayEmptyDistributionIntervals", "searchText"], outputs: ["onSelect", "onApply", "onClear", "selectionChange", "filtersChange", "searchTextChange"] }] });
|
|
16128
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AggregationListComponent, selector: "AggregationList, aggregation-list, aggregationlist", inputs: ["class", "id", "name", "column", "collapsible", "collapsed", "searchable", "showFiltersCount", "showCheckbox", "applyOnSelect", "syncUrl", "query", "aggregation", "selection", "hideWhenEmpty", "itemTemplate", "searchText"], outputs: ["onSelect", "onApply", "onClear", "selectionChange", "filtersChange", "searchTextChange"] }, { kind: "component", type: AggregationTreeComponent, selector: "AggregationTree, aggregation-tree, aggregationtree", inputs: ["class", "id", "name", "column", "collapsible", "collapsed", "searchable", "showFiltersCount", "showCheckbox", "applyOnSelect", "expandedLevel", "syncUrl", "query", "aggregation", "selection", "hideWhenEmpty", "itemTemplate", "searchText"], outputs: ["onSelect", "onApply", "onClear", "selectionChange", "filtersChange", "searchTextChange"] }, { kind: "component", type: AggregationDateComponent, selector: "aggregation-date, AggregationDate, aggregationdate", inputs: ["name", "column", "id", "collapsible", "collapsed", "searchable", "showFiltersCount", "syncUrl", "query", "aggregation", "selection", "emitOn", "title", "displayEmptyDistributionIntervals", "searchText"], outputs: ["onSelect", "onApply", "onClear", "selectionChange", "filtersChange", "aggregationOverridesChange", "searchTextChange"] }] });
|
|
16040
16129
|
}
|
|
16041
16130
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.29", ngImport: i0, type: AggregationComponent, decorators: [{
|
|
16042
16131
|
type: Component,
|