@cccsaurora/howler-ui 2.13.0-dev.162 → 2.13.0-dev.164

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.
@@ -3,6 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useMonaco } from '@monaco-editor/react';
4
4
  import { OpenInNew, PlayArrowOutlined, SsidChart } from '@mui/icons-material';
5
5
  import { Alert, AlertTitle, Autocomplete, Box, Card, Checkbox, Chip, CircularProgress, FormControlLabel, IconButton, ListItemText, Slider, Stack, TextField, Tooltip, Typography, useMediaQuery, useTheme } from '@mui/material';
6
+ import Popper, {} from '@mui/material/Popper';
6
7
  import api from '@cccsaurora/howler-ui/api';
7
8
  import PageCenter from '@cccsaurora/howler-ui/commons/components/pages/PageCenter';
8
9
  import { parseEvent } from '@cccsaurora/howler-ui/commons/components/utils/keyboard';
@@ -61,6 +62,10 @@ falsepositives:
61
62
  level: informational
62
63
  `
63
64
  };
65
+ const LUCENE_QUERY_OPTIONS = ['default', 'facet', 'groupby'];
66
+ const CustomPopper = (props) => {
67
+ return _jsx(Popper, { ...props, style: { width: 'fit-content' }, placement: "bottom-start" });
68
+ };
64
69
  const QueryBuilder = () => {
65
70
  const { t } = useTranslation();
66
71
  const theme = useTheme();
@@ -73,6 +78,8 @@ const QueryBuilder = () => {
73
78
  const [type, setType] = useState('lucene');
74
79
  const [loading, setLoading] = useState(false);
75
80
  const [query, setQuery] = useState(DEFAULT_VALUES.lucene);
81
+ const [queryType, setQueryType] = useState(LUCENE_QUERY_OPTIONS[0]);
82
+ const [groupByField, setGroupByField] = useState(null);
76
83
  const [allFields, setAllFields] = useState(true);
77
84
  const [fields, setFields] = useState(['howler.id']);
78
85
  const [response, setResponse] = useState(null);
@@ -90,10 +97,25 @@ const QueryBuilder = () => {
90
97
  };
91
98
  let result;
92
99
  if (type === 'lucene') {
93
- result = await api.search.hit.post({
94
- query: sanitizeMultilineLucene(query),
95
- ...searchProperties
96
- });
100
+ if (queryType === 'facet') {
101
+ result = await api.search.facet.hit.post({
102
+ query: sanitizeMultilineLucene(query),
103
+ rows: STEPS[rows],
104
+ fields
105
+ });
106
+ }
107
+ else if (queryType === 'groupby') {
108
+ result = await api.search.grouped.hit.post(groupByField, {
109
+ query: sanitizeMultilineLucene(query),
110
+ ...searchProperties
111
+ });
112
+ }
113
+ else {
114
+ result = await api.search.hit.post({
115
+ query: sanitizeMultilineLucene(query),
116
+ ...searchProperties
117
+ });
118
+ }
97
119
  }
98
120
  else if (type === 'eql') {
99
121
  result = await api.search.hit.eql.post({
@@ -116,7 +138,7 @@ const QueryBuilder = () => {
116
138
  finally {
117
139
  setLoading(false);
118
140
  }
119
- }, [allFields, fields, query, rows, type]);
141
+ }, [allFields, fields, groupByField, query, queryType, rows, type]);
120
142
  const onKeyDown = useCallback(event => {
121
143
  const parsedEvent = parseEvent(event);
122
144
  if (parsedEvent.isCtrl && parsedEvent.isEnter) {
@@ -146,6 +168,12 @@ const QueryBuilder = () => {
146
168
  maxHeight: '85vh'
147
169
  }));
148
170
  }, [query, response, showModal, showWarningMessage, t, type]);
171
+ const searchDisabled = useMemo(() => type === 'lucene' && queryType === 'groupby' && !groupByField, [groupByField, queryType, type]);
172
+ useEffect(() => {
173
+ if (type !== 'lucene' && queryType !== 'default') {
174
+ setQueryType('default');
175
+ }
176
+ }, [queryType, type]);
149
177
  useEffect(() => {
150
178
  if (!monaco) {
151
179
  return;
@@ -190,13 +218,21 @@ const QueryBuilder = () => {
190
218
  display: 'flex',
191
219
  alignSelf: 'stretch'
192
220
  }
193
- }, children: [smallButtons ? (_jsx(Tooltip, { title: t('route.actions.execute'), children: _jsx(IconButton, { size: "small", sx: { alignSelf: 'start' }, color: "success", onClick: execute, children: loading ? _jsx(CircularProgress, { size: 18, color: "success" }) : _jsx(PlayArrowOutlined, { color: "success" }) }) })) : (_jsx(CustomButton, { size: "small", variant: "outlined", startIcon: loading ? (_jsx(CircularProgress, { size: 18, color: "success" })) : (_jsx(PlayArrowOutlined, { color: "success", sx: { '& path': { stroke: 'currentcolor', strokeWidth: '1px' } } })), color: "success", onClick: execute, children: t('route.actions.execute') })), _jsxs(Stack, { direction: compactLayout ? 'column' : 'row', spacing: 1, children: [_jsx(Autocomplete, { value: type, onChange: (__, value) => setType(value), options: QUERY_TYPES, getOptionLabel: option => t(`route.advanced.query.${option}`), renderOption: (props, option) => (_jsx(ListItemText, { ...props, sx: { flexDirection: 'column', alignItems: 'start !important' }, primary: t(`route.advanced.query.${option}`), secondary: t(`route.advanced.query.${option}.description`) })), renderInput: params => (_jsx(TextField, { ...params, size: "small", label: t('route.advanced.type'), sx: { minWidth: '250px' } })), sx: [
221
+ }, children: [smallButtons ? (_jsx(Tooltip, { title: t('route.actions.execute'), children: _jsx(IconButton, { size: "small", sx: { alignSelf: 'start' }, color: "success", onClick: execute, disabled: searchDisabled, children: loading ? (_jsx(CircularProgress, { size: 18, color: "success" })) : (_jsx(PlayArrowOutlined, { color: searchDisabled ? 'disabled' : 'success' })) }) })) : (_jsx(CustomButton, { size: "small", variant: "outlined", startIcon: loading ? (_jsx(CircularProgress, { size: 18, color: "success" })) : (_jsx(PlayArrowOutlined, { color: searchDisabled ? 'disabled' : 'success', sx: { '& path': { stroke: 'currentcolor', strokeWidth: '1px' } } })), color: "success", onClick: execute, disabled: searchDisabled, children: t('route.actions.execute') })), _jsxs(Stack, { direction: compactLayout ? 'column' : 'row', spacing: 1, children: [_jsx(Autocomplete, { value: type, onChange: (__, value) => setType(value), options: QUERY_TYPES, getOptionLabel: option => t(`route.advanced.query.${option}`), renderOption: (props, option) => (_jsx(ListItemText, { ...props, sx: { flexDirection: 'column', alignItems: 'start !important' }, primary: t(`route.advanced.query.${option}`), secondary: t(`route.advanced.query.${option}.description`) })), renderInput: params => (_jsx(TextField, { ...params, size: "small", label: t('route.advanced.type'), sx: { minWidth: '250px' } })), sx: [
194
222
  !compactLayout && {
195
223
  height: '100%',
196
224
  '& .MuiFormControl-root': { height: '100%', '& > div': { height: '100%' } }
197
225
  }
198
- ], slotProps: { paper: { sx: { minWidth: '600px' } } } }), _jsx(Card, { variant: "outlined", sx: { flex: 1, maxWidth: '350px', minWidth: '210px' }, children: _jsxs(Stack, { spacing: 0.5, sx: { px: 1, alignItems: 'start' }, children: [_jsxs(Typography, { variant: "caption", color: "text.secondary", sx: { whiteSpace: 'nowrap' }, children: [t('route.advanced.rows'), ": ", STEPS[rows]] }), _jsx(Slider, { size: "small", valueLabelDisplay: "off", value: rows, onChange: (_, value) => setRows(value), min: 0, max: 9, step: 1, marks: true, track: false, sx: { py: 0.5 } })] }) })] }), allFields ? (_jsx(FormControlLabel, { control: _jsx(Checkbox, { checked: allFields, onChange: (__, checked) => setAllFields(checked) }), label: t('route.advanced.fields.all'), sx: { '& > span': { color: 'text.secondary' }, alignSelf: 'start' } })) : (_jsx(Autocomplete, { fullWidth: true, renderTags: values => values.length <= 3 ? (_jsx(Stack, { direction: "row", spacing: 0.5, children: values.map(_value => (_jsx(Chip, { size: "small", label: _value }, _value))) })) : (_jsx(Tooltip, { title: _jsx(Stack, { spacing: 1, children: values.map(_value => (_jsx("span", { children: _value }, _value))) }), children: _jsx(Chip, { size: "small", label: values.length }) })), multiple: true, size: "small", options: fieldOptions, value: fields, onChange: (__, values) => (values.length > 0 ? setFields(values) : setAllFields(true)), renderInput: params => _jsx(TextField, { ...params, label: t('route.advanced.fields') }), sx: { maxWidth: '500px', width: '20vw', minWidth: '200px', '& label': { zIndex: 1200 } }, onKeyDown: onKeyDown })), _jsx(FlexOne, {}), type === 'lucene' &&
199
- (smallButtons ? (_jsx(Tooltip, { title: t('route.advanced.open'), children: _jsx(IconButton, { color: "primary", sx: { alignSelf: 'center' }, component: Link, disabled: !response, to: `/hits?query=${sanitizeMultilineLucene(query).replaceAll('\n', ' ').trim()}`, children: _jsx(OpenInNew, { fontSize: "small" }) }) })) : (_jsx(CustomButton, { size: "small", variant: "outlined", startIcon: _jsx(OpenInNew, {}), component: Link, disabled: !response, ...{ to: `/hits?query=${sanitizeMultilineLucene(query).replaceAll('\n', ' ').trim()}` }, children: t('route.advanced.open') }))), smallButtons ? (_jsx(Tooltip, { title: response ? t('route.advanced.create.rule') : t('route.advanced.create.rule.disabled'), children: _jsx(IconButton, { size: "small", sx: { alignSelf: 'center' }, color: "info", onClick: onCreateRule, disabled: !response, children: _jsx(SsidChart, {}) }) })) : (_jsx(CustomButton, { size: "small", variant: "outlined", color: "info", startIcon: _jsx(SsidChart, {}), onClick: onCreateRule, disabled: !response, ...{ to: `/hits?query=${sanitizeMultilineLucene(query).replaceAll('\n', ' ').trim()}` }, tooltip: !response && t('route.advanced.create.rule.disabled'), children: t('route.advanced.create.rule') }))] }), _jsxs(Box, { width: "100%", height: "calc(100vh - 112px)", sx: { position: 'relative', overflow: 'hidden', borderTop: `thin solid ${theme.palette.divider}` }, children: [_jsx(Box, { sx: { position: 'absolute', top: 0, left: 0, bottom: 0, right: `calc(50% + 7px - ${x}px)`, pt: 1 }, children: _jsx(QueryEditor, { query: query, setQuery: setQuery, language: type }) }), _jsx(Box, { sx: {
226
+ ], slotProps: { paper: { sx: { minWidth: '600px' } } } }), _jsx(Card, { variant: "outlined", sx: { flex: 1, maxWidth: '350px', minWidth: '210px' }, children: _jsxs(Stack, { spacing: 0.5, sx: { px: 1, alignItems: 'start' }, children: [_jsxs(Typography, { variant: "caption", color: "text.secondary", sx: { whiteSpace: 'nowrap' }, children: [t('route.advanced.rows'), ": ", STEPS[rows]] }), _jsx(Slider, { size: "small", valueLabelDisplay: "off", value: rows, onChange: (_, value) => setRows(value), min: 0, max: 9, step: 1, marks: true, track: false, sx: { py: 0.5 } })] }) })] }), type === 'lucene' && (_jsx(Autocomplete, { size: "small", getOptionLabel: opt => t(`route.advanced.query.type.${opt}`), options: LUCENE_QUERY_OPTIONS, value: queryType, onChange: (_event, value) => setQueryType(value), renderInput: params => (_jsx(TextField, { ...params, label: t('route.advanced.query.type'), sx: { minWidth: '200px' } })) })), queryType === 'groupby' && (_jsx(Autocomplete, { size: "small", options: fieldOptions, value: groupByField, onChange: (__, value) => setGroupByField(value), renderInput: params => _jsx(TextField, { ...params, label: t('route.advanced.pivot.field') }), sx: { minWidth: '200px', '& label': { zIndex: 1200 } }, onKeyDown: onKeyDown, PopperComponent: CustomPopper })), allFields && queryType !== 'facet' ? (_jsx(FormControlLabel, { control: _jsx(Checkbox, { size: "small", checked: allFields, onChange: (__, checked) => setAllFields(checked) }), label: t('route.advanced.fields.all'), sx: { '& > span': { color: 'text.secondary' }, alignSelf: 'start' } })) : (_jsx(Autocomplete, { fullWidth: true, renderTags: values => values.length <= 3 ? (_jsx(Stack, { direction: "row", spacing: 0.5, children: values.map(_value => (_jsx(Chip, { size: "small", label: _value }, _value))) })) : (_jsx(Tooltip, { title: _jsx(Stack, { spacing: 1, children: values.map(_value => (_jsx("span", { children: _value }, _value))) }), children: _jsx(Chip, { size: "small", label: values.length }) })), multiple: true, size: "small", options: fieldOptions, value: fields, onChange: (__, values) => (values.length > 0 ? setFields(values) : setAllFields(true)), renderInput: params => _jsx(TextField, { ...params, label: t('route.advanced.fields') }), sx: { maxWidth: '500px', width: '20vw', minWidth: '200px', '& label': { zIndex: 1200 } }, onKeyDown: onKeyDown, PopperComponent: CustomPopper })), _jsx(FlexOne, {}), type === 'lucene' &&
227
+ (smallButtons ? (_jsx(Tooltip, { title: t('route.advanced.open'), children: _jsx(IconButton, { color: "primary", sx: { alignSelf: 'center' }, component: Link, disabled: !response, to: `/hits?query=${sanitizeMultilineLucene(query).replaceAll('\n', ' ').trim()}`, children: _jsx(OpenInNew, { fontSize: "small" }) }) })) : (_jsx(CustomButton, { size: "small", variant: "outlined", startIcon: _jsx(OpenInNew, {}), component: Link, disabled: !response, ...{ to: `/hits?query=${sanitizeMultilineLucene(query).replaceAll('\n', ' ').trim()}` }, children: t('route.advanced.open') }))), smallButtons ? (_jsx(Tooltip, { title: response ? t('route.advanced.create.rule') : t('route.advanced.create.rule.disabled'), children: _jsx(IconButton, { size: "small", sx: { alignSelf: 'center' }, color: "info", onClick: onCreateRule, disabled: !response, children: _jsx(SsidChart, {}) }) })) : (_jsx(CustomButton, { size: "small", variant: "outlined", color: "info", startIcon: _jsx(SsidChart, {}), onClick: onCreateRule, disabled: !response, ...{ to: `/hits?query=${sanitizeMultilineLucene(query).replaceAll('\n', ' ').trim()}` }, tooltip: !response && t('route.advanced.create.rule.disabled'), children: t('route.advanced.create.rule') }))] }), _jsxs(Box, { width: "100%", height: "calc(100vh - 112px)", sx: { position: 'relative', overflow: 'hidden', borderTop: `thin solid ${theme.palette.divider}` }, children: [_jsx(Box, { sx: {
228
+ position: 'absolute',
229
+ top: 0,
230
+ left: 0,
231
+ bottom: 0,
232
+ right: `calc(50% + 7px - ${x}px)`,
233
+ pt: 1,
234
+ display: 'flex'
235
+ }, children: _jsx(QueryEditor, { query: query, setQuery: setQuery, language: type, height: "100%" }) }), _jsx(Box, { sx: {
200
236
  position: 'absolute',
201
237
  top: 0,
202
238
  bottom: 0,
@@ -60,6 +60,7 @@ const TOC_CONFIGS = [
60
60
  id: 'fields',
61
61
  subItems: [{ id: 'fields.legend' }, { id: 'fields.idx_hit' }, { id: 'fields.idx_user', is_admin: true }]
62
62
  },
63
+ { id: 'text vs keywords' },
63
64
  { id: 'wildcard' },
64
65
  {
65
66
  id: 'regex',
@@ -108,6 +109,6 @@ const SearchDocumentation = () => {
108
109
  return (_jsx(PageCenterRoot, { margin: 4, width: "100%", maxWidth: "1750px", textAlign: "left", children: _jsxs(Stack, { sx: { flexDirection: useHorizontal ? 'column' : 'row', '& h1': { mt: 0 } }, children: [_jsx(HelpTabs, { value: location.hash || '#overview', children: TOC_CONFIGS.flatMap(value => [
109
110
  _jsx(Tab, { href: `#${value.id}`, label: _jsx(Typography, { variant: "caption", children: t(value.id) }), value: `#${value.id}` }, value.id),
110
111
  ...(!useHorizontal && value.subItems ? value.subItems : []).map(subItem => (!subItem.is_admin || user.is_admin) && (_jsx(Tab, { sx: { '& > span': { pl: 1 } }, href: `#${subItem.id}`, label: _jsx(Typography, { variant: "caption", children: t(subItem.id) }), value: `#${subItem.id}` }, subItem.id)))
111
- ]) }), _jsxs(Box, { children: [_jsx(Typography, { variant: "h4", children: t('title') }), _jsx(Typography, { variant: "subtitle2", children: t('subtitle') }), _jsxs(Paragraph, { id: "overview", children: [_jsx(Typography, { variant: "h5", children: t('overview') }), _jsx(_Fragment, { children: t('overview.text') })] }), _jsxs(Paragraph, { id: "basic", children: [_jsx(Typography, { variant: "h5", children: t('basic') }), _jsx(_Fragment, { children: t('basic.text') }), _jsx(Typography, { variant: "subtitle2", className: "padded", children: t('exemples') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('basic.ex1') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('basic.ex2') })] }), _jsxs(Paragraph, { id: "fields", children: [_jsx(Typography, { variant: "h5", children: t('fields') }), _jsx(_Fragment, { children: t('fields.text') }), _jsx(Typography, { variant: "subtitle2", className: "padded", children: t('exemples') }), _jsxs("ul", { className: "multipleEx", children: [_jsxs("li", { children: [t('fields.ex1.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('fields.ex1') })] }), _jsxs("li", { children: [t('fields.ex2.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('fields.ex2') })] }), _jsxs("li", { children: [t('fields.ex3.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('fields.ex3') })] }), _jsxs("li", { children: [t('fields.ex4.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('fields.ex4') })] }), _jsxs("li", { children: [t('fields.ex5.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('fields.ex5') })] })] }), _jsx("div", { className: "padded", children: t('fields.text2') }), _jsxs("div", { children: [_jsx("b", { children: _jsx("i", { children: `${t('fields.important')}:` }) }), ` ${t('fields.important.text')}`] })] }), _jsxs(Paragraph, { id: "fields.legend", children: [_jsx(Typography, { variant: "h6", children: t('fields.legend') }), _jsx(_Fragment, { children: t('fields.legend.text') }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("b", { children: 'text' }), `: ${t('fields.legend.text_field')}`] }), _jsxs("li", { children: [_jsx("b", { children: 'ip' }), `: ${t('fields.legend.ip_field')}`] }), _jsxs("li", { children: [_jsx(SquareChip, { color: "primary", size: "small", label: t('fields.att.default') }), ":", ' ', t('fields.legend.default')] }), _jsxs("li", { children: [_jsx(SquareChip, { color: "warning", size: "small", label: t('fields.att.list') }), ": ", t('fields.legend.list')] }), _jsxs("li", { children: [_jsx(SquareChip, { color: "info", size: "small", label: t('fields.att.stored') }), ": ", t('fields.legend.stored')] })] })] }), Object.keys(indexes).map(idx => (_jsxs(Accordion, { sx: { mb: 2, backgroundColor: 'background.paper' }, children: [_jsx(AccordionSummary, { expandIcon: _jsx(ExpandMore, {}), children: _jsx(Typography, { variant: "h6", children: t(`fields.idx_${idx}`) }) }), _jsx(AccordionDetails, { sx: { px: '0 !important', mt: -6 }, children: _jsx(Paragraph, { id: `fields.idx_${idx}`, children: _jsx(TableRoot, { children: _jsxs(Table, { size: "small", children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [_jsx(TableCell, { children: t('fields.table.name') }), _jsx(TableCell, { children: t('fields.table.type') }), _jsx(TableCell, { children: t('fields.table.attrib') })] }) }), _jsx(TableBody, { children: Object.keys(indexes[idx]).map(field => indexes[idx][field].indexed && (_jsxs(TableRow, { hover: true, children: [_jsx(TableCell, { width: "50%", style: { wordBreak: 'break-word' }, children: field }), _jsx(TableCell, { children: indexes[idx][field].type }), _jsxs(TableCell, { children: [indexes[idx][field].stored && (_jsx(SquareChip, { color: "info", size: "small", label: t('fields.att.stored') })), indexes[idx][field].list && (_jsx(SquareChip, { color: "warning", size: "small", label: t('fields.att.list') })), indexes[idx][field].default && (_jsx(SquareChip, { color: "primary", size: "small", label: t('fields.att.default') }))] })] }, field))) })] }) }) }) })] }, idx))), _jsxs(Paragraph, { id: "wildcard", children: [_jsx(Typography, { variant: "h5", children: t('wildcard') }), _jsx("div", { className: "padded", children: t('wildcard.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('wildcard.ex') }), _jsx("div", { className: "padded", children: t('wildcard.text2') }), _jsxs("div", { children: [_jsx("b", { children: _jsx("i", { children: `${t('wildcard.note')}:` }) }), ` ${t('wildcard.note.text')}`] })] }), _jsxs(Paragraph, { id: "regex", children: [_jsx(Typography, { variant: "h5", children: t('regex') }), _jsx("div", { className: "padded", children: t('regex.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.ex') }), _jsx("div", { children: _jsx("b", { children: _jsx("i", { children: t('regex.warning') }) }) }), _jsx("div", { className: "padded", children: t('regex.warning.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.warning.ex') }), _jsx("div", { className: "padded", children: t('regex.warning.follow') })] }), _jsxs(Paragraph, { id: "regex.anchoring", children: [_jsx(Typography, { variant: "h6", children: t('regex.anchoring') }), _jsx("div", { className: "padded", children: t('regex.anchoring.text') }), _jsx("div", { className: "padded", children: t('regex.anchoring.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.anchoring.ex') })] }), _jsxs(Paragraph, { id: "regex.chars", children: [_jsx(Typography, { variant: "h6", children: t('regex.chars') }), _jsx("div", { className: "padded", children: t('regex.chars.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.chars.ex') }), _jsx("div", { className: "padded", children: t('regex.chars.text2') }), _jsx("div", { className: "padded", children: t('regex.chars.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.chars.ex2') })] }), _jsxs(Paragraph, { id: "regex.any", children: [_jsx(Typography, { variant: "h6", children: t('regex.any') }), _jsx("div", { className: "padded", children: t('regex.any.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.any.ex') })] }), _jsxs(Paragraph, { id: "regex.oneplus", children: [_jsx(Typography, { variant: "h6", children: t('regex.oneplus') }), _jsx("div", { className: "padded", children: t('regex.oneplus.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.oneplus.ex') })] }), _jsxs(Paragraph, { id: "regex.zeroplus", children: [_jsx(Typography, { variant: "h6", children: t('regex.zeroplus') }), _jsx("div", { className: "padded", children: t('regex.zeroplus.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.zeroplus.ex') })] }), _jsxs(Paragraph, { id: "regex.zeroone", children: [_jsx(Typography, { variant: "h6", children: t('regex.zeroone') }), _jsx("div", { className: "padded", children: t('regex.zeroone.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.zeroone.ex') })] }), _jsxs(Paragraph, { id: "regex.minmax", children: [_jsx(Typography, { variant: "h6", children: t('regex.minmax') }), _jsx("div", { className: "padded", children: t('regex.minmax.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.minmax.ex') }), _jsx("div", { className: "padded", children: t('regex.minmax.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.minmax.ex2') })] }), _jsxs(Paragraph, { id: "regex.grouping", children: [_jsx(Typography, { variant: "h6", children: t('regex.grouping') }), _jsx("div", { className: "padded", children: t('regex.grouping.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.grouping.ex') })] }), _jsxs(Paragraph, { id: "regex.alternation", children: [_jsx(Typography, { variant: "h6", children: t('regex.alternation') }), _jsx("div", { className: "padded", children: t('regex.alternation.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.alternation.ex') })] }), _jsxs(Paragraph, { id: "regex.class", children: [_jsx(Typography, { variant: "h6", children: t('regex.class') }), _jsx("div", { className: "padded", children: t('regex.class.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.class.ex') }), _jsx("div", { className: "padded", children: t('regex.class.text2') }), _jsx("div", { className: "padded", children: t('regex.class.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.class.ex2') })] }), _jsxs(Paragraph, { id: "fuzziness", children: [_jsx(Typography, { variant: "h5", children: t('fuzziness') }), _jsx("div", { className: "padded", children: t('fuzziness.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('fuzziness.ex') }), _jsx("div", { className: "padded", children: t('fuzziness.text2') }), _jsx("div", { className: "padded", children: t('fuzziness.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('fuzziness.ex2') })] }), _jsxs(Paragraph, { id: "proximity", children: [_jsx(Typography, { variant: "h5", children: t('proximity') }), _jsx("div", { className: "padded", children: t('proximity.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('proximity.ex') }), _jsx("div", { className: "padded", children: t('proximity.text2') })] }), _jsxs(Paragraph, { id: "ranges", children: [_jsx(Typography, { variant: "h5", children: t('ranges') }), _jsx(_Fragment, { children: t('ranges.text') }), _jsx(Typography, { variant: "subtitle2", className: "padded", children: t('exemples') }), _jsxs("ul", { className: "multipleEx", children: [_jsxs("li", { children: [t('ranges.ex1.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex1') })] }), _jsxs("li", { children: [t('ranges.ex2.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex2') })] }), _jsxs("li", { children: [t('ranges.ex3.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex3') })] }), _jsxs("li", { children: [t('ranges.ex4.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex4') })] }), _jsxs("li", { children: [t('ranges.ex5.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex5') })] }), _jsxs("li", { children: [t('ranges.ex6.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex6') })] }), _jsxs("li", { children: [t('ranges.ex7.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex7') })] })] }), _jsx("div", { className: "padded", children: t('ranges.text2') }), _jsx("ul", { className: "multipleEx", children: _jsxs("li", { children: [t('ranges.ex8.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex8') })] }) }), _jsx("div", { className: "padded", children: t('ranges.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex9') }), _jsx("div", { className: "padded", children: t('ranges.text4') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex10') })] }), _jsxs(Paragraph, { id: "ranges.datemath", children: [_jsx(Typography, { variant: "h6", children: t('ranges.datemath') }), _jsx("div", { className: "padded", children: t('ranges.datemath.text') }), _jsxs("ul", { children: [_jsx("li", { children: t('ranges.datemath.list1') }), _jsx("li", { children: t('ranges.datemath.list2') }), _jsx("li", { children: t('ranges.datemath.list3') })] }), _jsx("div", { className: "padded", children: t('ranges.datemath.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.datemath.ex1') }), _jsx("div", { className: "padded", children: t('ranges.datemath.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.datemath.ex2') })] }), _jsxs(Paragraph, { id: "operator", children: [_jsx(Typography, { variant: "h5", children: t('operator') }), _jsx("div", { className: "padded", children: t('operator.text') }), _jsx("div", { className: "padded", children: t('operator.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('operator.ex1') }), _jsx("div", { className: "padded", children: t('operator.text3') }), _jsxs("ul", { children: [_jsx("li", { children: t('operator.list1') }), _jsx("li", { children: t('operator.list2') }), _jsx("li", { children: t('operator.list3') })] }), _jsx("div", { className: "padded", children: t('operator.text4') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('operator.ex2') }), _jsx("div", { className: "padded", children: t('operator.text5') })] }), _jsxs(Paragraph, { id: "grouping", children: [_jsx(Typography, { variant: "h5", children: t('grouping') }), _jsx("div", { className: "padded", children: t('grouping.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('grouping.ex') }), _jsx("div", { className: "padded", children: t('grouping.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('grouping.ex2') })] }), _jsxs(Paragraph, { id: "reserved", children: [_jsx(Typography, { variant: "h5", children: t('reserved') }), _jsx("div", { className: "padded", children: t('reserved.text') }), _jsx("div", { className: "padded", children: t('reserved.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('reserved.ex') }), _jsx("div", { className: "padded", children: t('reserved.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('reserved.ex2') }), _jsx("div", { className: "padded", children: t('reserved.text4') }), _jsxs("div", { className: "padded", children: [_jsx("b", { children: _jsx("i", { children: t('reserved.note') }) }), `: ${t('reserved.text5')}`] })] })] })] }) }));
112
+ ]) }), _jsxs(Box, { children: [_jsx(Typography, { variant: "h4", children: t('title') }), _jsx(Typography, { variant: "subtitle2", children: t('subtitle') }), _jsxs(Paragraph, { id: "overview", children: [_jsx(Typography, { variant: "h5", children: t('overview') }), _jsx(_Fragment, { children: t('overview.text') })] }), _jsxs(Paragraph, { id: "basic", children: [_jsx(Typography, { variant: "h5", children: t('basic') }), _jsx(_Fragment, { children: t('basic.text') }), _jsx(Typography, { variant: "subtitle2", className: "padded", children: t('exemples') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('basic.ex1') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('basic.ex2') })] }), _jsxs(Paragraph, { id: "fields", children: [_jsx(Typography, { variant: "h5", children: t('fields') }), _jsx(_Fragment, { children: t('fields.text') }), _jsx(Typography, { variant: "subtitle2", className: "padded", children: t('exemples') }), _jsxs("ul", { className: "multipleEx", children: [_jsxs("li", { children: [t('fields.ex1.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('fields.ex1') })] }), _jsxs("li", { children: [t('fields.ex2.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('fields.ex2') })] }), _jsxs("li", { children: [t('fields.ex3.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('fields.ex3') })] }), _jsxs("li", { children: [t('fields.ex4.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('fields.ex4') })] }), _jsxs("li", { children: [t('fields.ex5.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('fields.ex5') })] })] }), _jsx("div", { className: "padded", children: t('fields.text2') }), _jsxs("div", { children: [_jsx("b", { children: _jsx("i", { children: `${t('fields.important')}:` }) }), ` ${t('fields.important.text')}`] })] }), _jsxs(Paragraph, { id: "text vs keywords", children: [_jsx(Typography, { variant: "h5", children: t('fields.textvskeywords') }), _jsx(_Fragment, { children: t('fields.textvskeywords.description') }), _jsx(Typography, { variant: "subtitle2", className: "padded", children: t('fields.textvskeywords.keywordfamily') }), _jsxs("ul", { className: "multipleEx", children: [_jsxs("li", { children: [_jsx(Card, { variant: "outlined", className: "pre", children: t('fields.textvskeywords.wildcard') }), t('fields.textvskeywords.wildcard.description')] }), _jsxs("li", { children: [_jsx(Card, { variant: "outlined", className: "pre", children: t('fields.textvskeywords.keyword') }), t('fields.textvskeywords.keyword.description')] }), _jsxs("li", { children: [_jsx(Card, { variant: "outlined", className: "pre", children: t('fields.textvskeywords.constantkeyword') }), t('fields.textvskeywords.constantkeyword.description')] })] }), _jsxs(Typography, { variant: "subtitle2", className: "padded", children: [t('fields.textvskeywords.keyword.more.info'), ' ', _jsx("a", { href: "https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/keyword", style: { color: 'info', textDecoration: 'underline' }, children: "https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/keyword" })] }), _jsx(Typography, { variant: "subtitle2", className: "padded", children: t('fields.textvskeywords.textfamily') }), _jsxs("ul", { className: "multipleEx", children: [_jsxs("li", { children: [_jsx(Card, { variant: "outlined", className: "pre", children: t('fields.textvskeywords.text') }), t('fields.textvskeywords.text.description')] }), _jsxs("li", { children: [_jsx(Card, { variant: "outlined", className: "pre", children: t('fields.textvskeywords.matchonlytext') }), t('fields.textvskeywords.matchonlytext.description')] })] }), _jsxs(Typography, { variant: "subtitle2", className: "padded", children: [t('fields.textvskeywords.text.more.info'), ' ', _jsx("a", { href: "https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/text", style: { color: 'info', textDecoration: 'underline' }, children: "https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/text" })] }), _jsxs(Typography, { variant: "subtitle2", className: "padded", children: [t('fields.textvskeywords.text.keyword.compare'), ' ', _jsx("a", { href: "https://www.elastic.co/blog/strings-are-dead-long-live-strings", style: { color: 'info', textDecoration: 'underline' }, children: "https://www.elastic.co/blog/strings-are-dead-long-live-strings" })] }), _jsx("div", {})] }), _jsxs(Paragraph, { id: "fields.legend", children: [_jsx(Typography, { variant: "h6", children: t('fields.legend') }), _jsx(_Fragment, { children: t('fields.legend.text') }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("b", { children: 'text' }), `: ${t('fields.legend.text_field')}`] }), _jsxs("li", { children: [_jsx("b", { children: 'ip' }), `: ${t('fields.legend.ip_field')}`] }), _jsxs("li", { children: [_jsx(SquareChip, { color: "primary", size: "small", label: t('fields.att.default') }), ":", ' ', t('fields.legend.default')] }), _jsxs("li", { children: [_jsx(SquareChip, { color: "warning", size: "small", label: t('fields.att.list') }), ": ", t('fields.legend.list')] }), _jsxs("li", { children: [_jsx(SquareChip, { color: "info", size: "small", label: t('fields.att.stored') }), ": ", t('fields.legend.stored')] })] })] }), Object.keys(indexes).map(idx => (_jsxs(Accordion, { sx: { mb: 2, backgroundColor: 'background.paper' }, children: [_jsx(AccordionSummary, { expandIcon: _jsx(ExpandMore, {}), children: _jsx(Typography, { variant: "h6", children: t(`fields.idx_${idx}`) }) }), _jsx(AccordionDetails, { sx: { px: '0 !important', mt: -6 }, children: _jsx(Paragraph, { id: `fields.idx_${idx}`, children: _jsx(TableRoot, { children: _jsxs(Table, { size: "small", children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [_jsx(TableCell, { children: t('fields.table.name') }), _jsx(TableCell, { children: t('fields.table.type') }), _jsx(TableCell, { children: t('fields.table.attrib') })] }) }), _jsx(TableBody, { children: Object.keys(indexes[idx]).map(field => indexes[idx][field].indexed && (_jsxs(TableRow, { hover: true, children: [_jsx(TableCell, { width: "50%", style: { wordBreak: 'break-word' }, children: field }), _jsx(TableCell, { children: indexes[idx][field].type }), _jsxs(TableCell, { children: [indexes[idx][field].stored && (_jsx(SquareChip, { color: "info", size: "small", label: t('fields.att.stored') })), indexes[idx][field].list && (_jsx(SquareChip, { color: "warning", size: "small", label: t('fields.att.list') })), indexes[idx][field].default && (_jsx(SquareChip, { color: "primary", size: "small", label: t('fields.att.default') }))] })] }, field))) })] }) }) }) })] }, idx))), _jsxs(Paragraph, { id: "wildcard", children: [_jsx(Typography, { variant: "h5", children: t('wildcard') }), _jsx("div", { className: "padded", children: t('wildcard.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('wildcard.ex') }), _jsx("div", { className: "padded", children: t('wildcard.text2') }), _jsxs("div", { children: [_jsx("b", { children: _jsx("i", { children: `${t('wildcard.note')}:` }) }), ` ${t('wildcard.note.text')}`] })] }), _jsxs(Paragraph, { id: "regex", children: [_jsx(Typography, { variant: "h5", children: t('regex') }), _jsx("div", { className: "padded", children: t('regex.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.ex') }), _jsx("div", { children: _jsx("b", { children: _jsx("i", { children: t('regex.warning') }) }) }), _jsx("div", { className: "padded", children: t('regex.warning.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.warning.ex') }), _jsx("div", { className: "padded", children: t('regex.warning.follow') })] }), _jsxs(Paragraph, { id: "regex.anchoring", children: [_jsx(Typography, { variant: "h6", children: t('regex.anchoring') }), _jsx("div", { className: "padded", children: t('regex.anchoring.text') }), _jsx("div", { className: "padded", children: t('regex.anchoring.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.anchoring.ex') })] }), _jsxs(Paragraph, { id: "regex.chars", children: [_jsx(Typography, { variant: "h6", children: t('regex.chars') }), _jsx("div", { className: "padded", children: t('regex.chars.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.chars.ex') }), _jsx("div", { className: "padded", children: t('regex.chars.text2') }), _jsx("div", { className: "padded", children: t('regex.chars.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.chars.ex2') })] }), _jsxs(Paragraph, { id: "regex.any", children: [_jsx(Typography, { variant: "h6", children: t('regex.any') }), _jsx("div", { className: "padded", children: t('regex.any.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.any.ex') })] }), _jsxs(Paragraph, { id: "regex.oneplus", children: [_jsx(Typography, { variant: "h6", children: t('regex.oneplus') }), _jsx("div", { className: "padded", children: t('regex.oneplus.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.oneplus.ex') })] }), _jsxs(Paragraph, { id: "regex.zeroplus", children: [_jsx(Typography, { variant: "h6", children: t('regex.zeroplus') }), _jsx("div", { className: "padded", children: t('regex.zeroplus.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.zeroplus.ex') })] }), _jsxs(Paragraph, { id: "regex.zeroone", children: [_jsx(Typography, { variant: "h6", children: t('regex.zeroone') }), _jsx("div", { className: "padded", children: t('regex.zeroone.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.zeroone.ex') })] }), _jsxs(Paragraph, { id: "regex.minmax", children: [_jsx(Typography, { variant: "h6", children: t('regex.minmax') }), _jsx("div", { className: "padded", children: t('regex.minmax.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.minmax.ex') }), _jsx("div", { className: "padded", children: t('regex.minmax.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.minmax.ex2') })] }), _jsxs(Paragraph, { id: "regex.grouping", children: [_jsx(Typography, { variant: "h6", children: t('regex.grouping') }), _jsx("div", { className: "padded", children: t('regex.grouping.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.grouping.ex') })] }), _jsxs(Paragraph, { id: "regex.alternation", children: [_jsx(Typography, { variant: "h6", children: t('regex.alternation') }), _jsx("div", { className: "padded", children: t('regex.alternation.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.alternation.ex') })] }), _jsxs(Paragraph, { id: "regex.class", children: [_jsx(Typography, { variant: "h6", children: t('regex.class') }), _jsx("div", { className: "padded", children: t('regex.class.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.class.ex') }), _jsx("div", { className: "padded", children: t('regex.class.text2') }), _jsx("div", { className: "padded", children: t('regex.class.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('regex.class.ex2') })] }), _jsxs(Paragraph, { id: "fuzziness", children: [_jsx(Typography, { variant: "h5", children: t('fuzziness') }), _jsx("div", { className: "padded", children: t('fuzziness.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('fuzziness.ex') }), _jsx("div", { className: "padded", children: t('fuzziness.text2') }), _jsx("div", { className: "padded", children: t('fuzziness.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('fuzziness.ex2') })] }), _jsxs(Paragraph, { id: "proximity", children: [_jsx(Typography, { variant: "h5", children: t('proximity') }), _jsx("div", { className: "padded", children: t('proximity.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('proximity.ex') }), _jsx("div", { className: "padded", children: t('proximity.text2') })] }), _jsxs(Paragraph, { id: "ranges", children: [_jsx(Typography, { variant: "h5", children: t('ranges') }), _jsx(_Fragment, { children: t('ranges.text') }), _jsx(Typography, { variant: "subtitle2", className: "padded", children: t('exemples') }), _jsxs("ul", { className: "multipleEx", children: [_jsxs("li", { children: [t('ranges.ex1.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex1') })] }), _jsxs("li", { children: [t('ranges.ex2.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex2') })] }), _jsxs("li", { children: [t('ranges.ex3.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex3') })] }), _jsxs("li", { children: [t('ranges.ex4.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex4') })] }), _jsxs("li", { children: [t('ranges.ex5.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex5') })] }), _jsxs("li", { children: [t('ranges.ex6.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex6') })] }), _jsxs("li", { children: [t('ranges.ex7.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex7') })] })] }), _jsx("div", { className: "padded", children: t('ranges.text2') }), _jsx("ul", { className: "multipleEx", children: _jsxs("li", { children: [t('ranges.ex8.title'), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex8') })] }) }), _jsx("div", { className: "padded", children: t('ranges.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex9') }), _jsx("div", { className: "padded", children: t('ranges.text4') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.ex10') })] }), _jsxs(Paragraph, { id: "ranges.datemath", children: [_jsx(Typography, { variant: "h6", children: t('ranges.datemath') }), _jsx("div", { className: "padded", children: t('ranges.datemath.text') }), _jsxs("ul", { children: [_jsx("li", { children: t('ranges.datemath.list1') }), _jsx("li", { children: t('ranges.datemath.list2') }), _jsx("li", { children: t('ranges.datemath.list3') })] }), _jsx("div", { className: "padded", children: t('ranges.datemath.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.datemath.ex1') }), _jsx("div", { className: "padded", children: t('ranges.datemath.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('ranges.datemath.ex2') })] }), _jsxs(Paragraph, { id: "operator", children: [_jsx(Typography, { variant: "h5", children: t('operator') }), _jsx("div", { className: "padded", children: t('operator.text') }), _jsx("div", { className: "padded", children: t('operator.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('operator.ex1') }), _jsx("div", { className: "padded", children: t('operator.text3') }), _jsxs("ul", { children: [_jsx("li", { children: t('operator.list1') }), _jsx("li", { children: t('operator.list2') }), _jsx("li", { children: t('operator.list3') })] }), _jsx("div", { className: "padded", children: t('operator.text4') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('operator.ex2') }), _jsx("div", { className: "padded", children: t('operator.text5') })] }), _jsxs(Paragraph, { id: "grouping", children: [_jsx(Typography, { variant: "h5", children: t('grouping') }), _jsx("div", { className: "padded", children: t('grouping.text') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('grouping.ex') }), _jsx("div", { className: "padded", children: t('grouping.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('grouping.ex2') })] }), _jsxs(Paragraph, { id: "reserved", children: [_jsx(Typography, { variant: "h5", children: t('reserved') }), _jsx("div", { className: "padded", children: t('reserved.text') }), _jsx("div", { className: "padded", children: t('reserved.text2') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('reserved.ex') }), _jsx("div", { className: "padded", children: t('reserved.text3') }), _jsx(Card, { variant: "outlined", className: "pre", children: t('reserved.ex2') }), _jsx("div", { className: "padded", children: t('reserved.text4') }), _jsxs("div", { className: "padded", children: [_jsx("b", { children: _jsx("i", { children: t('reserved.note') }) }), `: ${t('reserved.text5')}`] })] })] })] }) }));
112
113
  };
113
114
  export default SearchDocumentation;
@@ -26,6 +26,23 @@
26
26
  "fields.idx_view": "View index",
27
27
  "fields.important": "Important",
28
28
  "fields.important.text": "When using the search engine in the UI, your search query is performed on all these indexes at the same time unless you explicitly specify which index you want to target.",
29
+ "fields.textvskeywords": "Text vs Keywords",
30
+ "fields.textvskeywords.description": "The text field and the keyword field in Howler have differences which grant them their own use cases. These differences are shown as follows:",
31
+ "fields.textvskeywords.keywordfamily": "The keyword family is optimized for fields that represent individual data and includes the following field types:",
32
+ "fields.textvskeywords.wildcard": "wildcard",
33
+ "fields.textvskeywords.wildcard.description": "The wildcard type is optimized for fields with large values or high cardinality. This is the case for most telemetry fields.",
34
+ "fields.textvskeywords.keyword": "keyword",
35
+ "fields.textvskeywords.keyword.description": "Used for structured content with defined values, such as Howler specific fields. These fields do not support wildcard searches.",
36
+ "fields.textvskeywords.constantkeyword": "constant_keyword",
37
+ "fields.textvskeywords.constantkeyword.description": "For keyword fields that always contain the same value. This type should seldom be necessary.",
38
+ "fields.textvskeywords.keyword.more.info": "For more information regarding the Keyword field please checkout the official Elasticsearch documentation:",
39
+ "fields.textvskeywords.textfamily": "The Text family is optimized for searching unstructured human-readable content and includes the following field types:",
40
+ "fields.textvskeywords.text": "text",
41
+ "fields.textvskeywords.text.description": "Traditional field type for full-text content such as the body of an email or document.",
42
+ "fields.textvskeywords.matchonlytext": "match_only_text",
43
+ "fields.textvskeywords.matchonlytext.description": "A space-optimized variant of text that disables scoring and performs slower on queries that need positions. It is best suited for indexing log messages.",
44
+ "fields.textvskeywords.text.more.info": "For more information regarding the Text field please checkout the official Elasticsearch documentation:",
45
+ "fields.textvskeywords.text.keyword.compare": "To get a full list of the different use cases for both Keyword and Text fields, please checkout:",
29
46
  "fields.legend": "Legend",
30
47
  "fields.legend.default": "Queried when no fields are specified",
31
48
  "fields.legend.ip_field": "Can be queried using CIDR notation",
@@ -431,8 +431,13 @@
431
431
  "route.advanced.query.yaml": "Sigma Rule",
432
432
  "route.advanced.query.yaml.description": "Sigma is a generic and open signature format that allows you to describe relevant log events in a straightforward manner. The rule format is very flexible, easy to write and applicable to any type of log file.",
433
433
  "route.advanced.result.title": "Howler Advanced Search",
434
- "route.advanced.result.description": "Excecute a query to show results here.",
435
- "route.advanced.type": "Rule Type",
434
+ "route.advanced.result.description": "Execute a query to show results here.",
435
+ "route.advanced.rule.type": "Rule Type",
436
+ "route.advanced.pivot.field": "Group By Field",
437
+ "route.advanced.query.type": "Query Type",
438
+ "route.advanced.query.type.default": "Default",
439
+ "route.advanced.query.type.facet": "Facet",
440
+ "route.advanced.query.type.groupby": "Group By",
436
441
  "route.analytics": "Analytics",
437
442
  "route.analytics.deleted": "Deleted Rule!",
438
443
  "route.analytics.detections": "Detections:",
@@ -26,6 +26,23 @@
26
26
  "fields.idx_view": "Index des vues",
27
27
  "fields.important": "Important",
28
28
  "fields.important.text": "Lorsque vous utilisez le moteur de recherche dans l'interface utilisateur, votre requête de recherche est effectuée sur tous ces index en même temps, sauf si vous spécifiez explicitement l'index que vous souhaitez cibler.",
29
+ "fields.textvskeywords": "Texte vs mots-clés",
30
+ "fields.textvskeywords.description": "Le champ de texte et le champ de mot-clé dans Howler présentent des différences qui leur confèrent leurs propres cas d'utilisation. Ces différences sont présentées comme suit :",
31
+ "fields.textvskeywords.keywordfamily": "La famille de mots-clés est optimisée pour les champs qui représentent des données individuelles et comprend les types de champs suivants :",
32
+ "fields.textvskeywords.wildcard": "wildcard",
33
+ "fields.textvskeywords.wildcard.description": "Le type générique est optimisé pour les champs contenant des valeurs importantes ou présentant une cardinalité élevée. C'est le cas de la plupart des champs de télémétrie.",
34
+ "fields.textvskeywords.keyword": "keyword",
35
+ "fields.textvskeywords.keyword.description": "Utilisé pour le contenu structuré avec des valeurs définies, telles que les champs spécifiques à Howler. Ces champs ne prennent pas en charge les recherches avec caractères génériques.",
36
+ "fields.textvskeywords.constantkeyword": "constant_keyword",
37
+ "fields.textvskeywords.constantkeyword.description": "Pour les champs de mots-clés qui contiennent toujours la même valeur. Ce type devrait rarement être nécessaire.",
38
+ "fields.textvskeywords.keyword.more.info": "Pour plus d'informations sur le champ Keyword, veuillez consulter la documentation officielle d'Elasticsearch :",
39
+ "fields.textvskeywords.textfamily": "La famille Text est optimisée pour la recherche de contenu non structuré lisible par l'homme et comprend les types de champs suivants :",
40
+ "fields.textvskeywords.text": "text",
41
+ "fields.textvskeywords.text.description": "Type de champ traditionnel pour le contenu en texte intégral, tel que le corps d'un e-mail ou d'un document.",
42
+ "fields.textvskeywords.matchonlytext": "match_only_text",
43
+ "fields.textvskeywords.matchonlytext.description": "Une variante du texte optimisée pour l'espace qui désactive le scoring et est moins performante pour les requêtes nécessitant des positions. Elle est particulièrement adaptée à l'indexation des messages de journal.",
44
+ "fields.textvskeywords.text.more.info": "Pour plus d'informations concernant le champ Texte, veuillez consulter la documentation officielle d'Elasticsearch :",
45
+ "fields.textvskeywords.text.keyword.compare": "Pour obtenir la liste complète des différents cas d'utilisation des champs Mot-clé et Texte, veuillez consulter :",
29
46
  "fields.legend": "Légende",
30
47
  "fields.legend.default": "Interrogé lorsqu'aucun champ n'est spécifié",
31
48
  "fields.legend.ip_field": "Peut être interrogé en utilisant la notation CIDR",
@@ -431,8 +431,13 @@
431
431
  "route.advanced.query.yaml": "Règle Sigma",
432
432
  "route.advanced.query.yaml.description": "Sigma est un format de signature générique et ouvert qui vous permet de décrire des événements de journal pertinents de manière directe. Le format de règle est très flexible, facile à écrire et applicable à tout type de fichier journal.",
433
433
  "route.advanced.result.title": "Recherche avancée de howler",
434
- "route.advanced.result.description": "Excecutez une requête pour afficher les résultats ici.",
435
- "route.advanced.type": "Type de règle",
434
+ "route.advanced.result.description": "Exécutez une requête pour afficher les résultats ici.",
435
+ "route.advanced.rule.type": "Type de règle",
436
+ "route.advanced.pivot.field": "Champ à regrouper par",
437
+ "route.advanced.query.type": "Type de requête",
438
+ "route.advanced.query.type.default": "Défaut",
439
+ "route.advanced.query.type.facet": "Facette",
440
+ "route.advanced.query.type.groupby": "Regrouper",
436
441
  "route.analytics": "Analyses",
437
442
  "route.analytics.deleted": "Règle supprimée!",
438
443
  "route.analytics.detections": "Détections:",
package/package.json CHANGED
@@ -96,7 +96,7 @@
96
96
  "internal-slot": "1.0.7"
97
97
  },
98
98
  "type": "module",
99
- "version": "2.13.0-dev.162",
99
+ "version": "2.13.0-dev.164",
100
100
  "exports": {
101
101
  "./i18n": "./i18n.js",
102
102
  "./index.css": "./index.css",