@jirawatpyk/aura-react 5.41.0 → 5.43.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.
@@ -1,11 +1,14 @@
1
1
  'use client';
2
2
  import * as React from "react";
3
3
  import { Icon } from "./Icon.js";
4
+ import { Button } from "./Button.js";
5
+ import { Dialog } from "./Dialog.js";
4
6
  import { IconButton } from "./IconButton.js";
5
7
  import { Tag } from "./Tag.js";
6
- import { cx, touchClass, uid } from "./internal.js";
8
+ import { cx, devWarnOnce, FilterSheet, touchClass, uid, useMergedRef } from "./internal.js";
9
+ import { breakpoints } from "./breakpoints.js";
7
10
  import { useStrings } from "./locale.js";
8
- import { IconSearch, IconX } from "./icons.js";
11
+ import { IconSearch, IconSlidersHorizontal, IconX } from "./icons.js";
9
12
  const FilterBar = React.forwardRef(function FilterBar2(props, ref) {
10
13
  const t = useStrings();
11
14
  const id = uid();
@@ -47,12 +50,109 @@ const FilterBar = React.forwardRef(function FilterBar2(props, ref) {
47
50
  );
48
51
  }
49
52
  const filters = props.filters || [];
53
+ const hasChildren = React.Children.toArray(props.children).length > 0;
54
+ const collapse = props.collapseBelow && hasChildren ? props.collapseBelow : null;
55
+ const sheet = React.useState(false), open = !!collapse && sheet[0];
56
+ const sheetId = id + "-filters";
57
+ const doneRef = React.useRef(null), moreRef = React.useRef(null), own = React.useRef(null), rootRef = useMergedRef(ref, own);
58
+ if (collapse)
59
+ React.Children.forEach(props.children, function(c) {
60
+ if (!React.isValidElement(c) || c.type === Button || c.type === IconButton) return;
61
+ const p = c.props;
62
+ if (p.defaultValue !== void 0 || p.defaultChecked !== void 0 || "label" in p && !("value" in p) && !("selected" in p) && !("checked" in p))
63
+ devWarnOnce(
64
+ "filterbar-uncontrolled",
65
+ "FilterBar collapseBelow: a filter without `value` resets when the Filters sheet opens or closes (its children move there and back). Keep each filter's value with the page: `value` + `onChange`."
66
+ );
67
+ });
68
+ function backTo() {
69
+ const m = moreRef.current;
70
+ if (m && m.getClientRects().length) return m;
71
+ const bar = own.current;
72
+ if (!bar) return null;
73
+ return bar.querySelector(
74
+ '.aura-filterbar__controls :is(button, input, select, [tabindex]):not([disabled]):not([tabindex="-1"])'
75
+ ) || bar.querySelector(".aura-filterbar__search input");
76
+ }
77
+ const applied = props.filterCount != null ? props.filterCount : filters.length;
78
+ React.useEffect(
79
+ function() {
80
+ if (!open || !collapse || typeof window.matchMedia !== "function") return;
81
+ const mq = window.matchMedia("(min-width: " + breakpoints[collapse] + "px)");
82
+ function check() {
83
+ if (mq.matches) sheet[1](false);
84
+ }
85
+ check();
86
+ if (mq.addEventListener) mq.addEventListener("change", check);
87
+ else mq.addListener(check);
88
+ return function() {
89
+ if (mq.removeEventListener) mq.removeEventListener("change", check);
90
+ else mq.removeListener(check);
91
+ };
92
+ },
93
+ [open, collapse]
94
+ );
95
+ function clearAll() {
96
+ draft[1]("");
97
+ sent.current = "";
98
+ if (timer.current) clearTimeout(timer.current);
99
+ props.onClearAll();
100
+ }
50
101
  const anything = filters.length > 0 || !!(props.search || draft[0]);
51
102
  const count = props.resultCount == null ? null : typeof props.resultCount === "number" ? t.results(props.resultCount) : props.resultCount;
103
+ const searchBox = hasSearch ? /* @__PURE__ */ React.createElement("div", { className: "aura-input has-icon aura-filterbar__search" }, /* @__PURE__ */ React.createElement(Icon, { name: /* @__PURE__ */ React.createElement(IconSearch, null), className: "aura-input__icon" }), /* @__PURE__ */ React.createElement(
104
+ "input",
105
+ {
106
+ id,
107
+ type: "search",
108
+ className: "aura-input__control",
109
+ "aria-label": props.searchLabel || t.search,
110
+ placeholder: props.searchPlaceholder || props.searchLabel || t.search,
111
+ value: draft[0],
112
+ onChange: function(e) {
113
+ type(e.target.value);
114
+ },
115
+ onKeyDown: function(e) {
116
+ if (e.key === "Enter") send(draft[0]);
117
+ if (e.key === "Escape" && draft[0]) {
118
+ e.preventDefault();
119
+ draft[1]("");
120
+ send("");
121
+ }
122
+ }
123
+ }
124
+ ), draft[0] ? /* @__PURE__ */ React.createElement(
125
+ IconButton,
126
+ {
127
+ icon: /* @__PURE__ */ React.createElement(IconX, null),
128
+ label: t.clear((props.searchLabel || t.search).toLowerCase()),
129
+ className: "aura-filterbar__clear-search",
130
+ onClick: function() {
131
+ draft[1]("");
132
+ send("");
133
+ }
134
+ }
135
+ ) : null) : null;
136
+ const more = collapse ? /* @__PURE__ */ React.createElement(
137
+ Button,
138
+ {
139
+ ref: moreRef,
140
+ variant: "secondary",
141
+ icon: /* @__PURE__ */ React.createElement(IconSlidersHorizontal, null),
142
+ className: "aura-filterbar__more",
143
+ "aria-haspopup": "dialog",
144
+ "aria-expanded": open,
145
+ "aria-controls": open ? sheetId : void 0,
146
+ onClick: function() {
147
+ sheet[1](true);
148
+ }
149
+ },
150
+ applied > 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "aura-sr-only" }, t.filtersApplied(applied)), /* @__PURE__ */ React.createElement("span", { "aria-hidden": true }, t.filters + " (" + applied + ")")) : t.filters
151
+ ) : null;
52
152
  return /* @__PURE__ */ React.createElement(
53
153
  "div",
54
154
  {
55
- ref,
155
+ ref: rootRef,
56
156
  role: "region",
57
157
  "aria-label": props.label || t.filters,
58
158
  className: cx(
@@ -60,59 +160,56 @@ const FilterBar = React.forwardRef(function FilterBar2(props, ref) {
60
160
  props.searchGrow && "aura-filterbar--grow",
61
161
  props.controlsLayout === "fill" && "aura-filterbar--fill",
62
162
  props.stackBelow === "lg" && "aura-filterbar--stack-lg",
163
+ collapse && "aura-filterbar--collapse-" + collapse,
63
164
  touchClass(props.touchHeight),
64
165
  props.className
65
166
  )
66
167
  },
67
- /* @__PURE__ */ React.createElement("div", { className: "aura-filterbar__row" }, hasSearch ? /* @__PURE__ */ React.createElement("div", { className: "aura-input has-icon aura-filterbar__search" }, /* @__PURE__ */ React.createElement(Icon, { name: /* @__PURE__ */ React.createElement(IconSearch, null), className: "aura-input__icon" }), /* @__PURE__ */ React.createElement(
68
- "input",
69
- {
70
- id,
71
- type: "search",
72
- className: "aura-input__control",
73
- "aria-label": props.searchLabel || t.search,
74
- placeholder: props.searchPlaceholder || props.searchLabel || t.search,
75
- value: draft[0],
76
- onChange: function(e) {
77
- type(e.target.value);
78
- },
79
- onKeyDown: function(e) {
80
- if (e.key === "Enter") send(draft[0]);
81
- if (e.key === "Escape" && draft[0]) {
82
- e.preventDefault();
83
- draft[1]("");
84
- send("");
85
- }
86
- }
87
- }
88
- ), draft[0] ? /* @__PURE__ */ React.createElement(
89
- IconButton,
90
- {
91
- icon: /* @__PURE__ */ React.createElement(IconX, null),
92
- label: t.clear((props.searchLabel || t.search).toLowerCase()),
93
- className: "aura-filterbar__clear-search",
94
- onClick: function() {
95
- draft[1]("");
96
- send("");
97
- }
98
- }
99
- ) : null) : null, props.children ? /* @__PURE__ */ React.createElement("div", { className: "aura-filterbar__controls" }, props.children) : null, /* @__PURE__ */ React.createElement("span", { className: "aura-filterbar__spacer" }), count != null ? /* @__PURE__ */ React.createElement("span", { className: "aura-filterbar__count", "aria-live": "polite" }, count) : null, props.actions ? /* @__PURE__ */ React.createElement("div", { className: "aura-filterbar__actions" }, props.actions) : null),
168
+ /* @__PURE__ */ React.createElement("div", { className: "aura-filterbar__row" }, collapse ? (
169
+ /* 5.42: the search and the Filters button share a row of their own below the breakpoint (count and actions
170
+ * wrap under them); from the breakpoint up this box is display: contents and the bar is as before. */
171
+ /* @__PURE__ */ React.createElement("div", { className: cx("aura-filterbar__lead", !hasSearch && "is-alone") }, searchBox, more)
172
+ ) : searchBox, hasChildren && !open ? /* @__PURE__ */ React.createElement("div", { className: "aura-filterbar__controls" }, props.children) : null, /* @__PURE__ */ React.createElement("span", { className: "aura-filterbar__spacer" }), count != null ? /* @__PURE__ */ React.createElement("span", { className: "aura-filterbar__count", "aria-live": "polite" }, count) : null, props.actions ? /* @__PURE__ */ React.createElement("div", { className: "aura-filterbar__actions" }, props.actions) : null),
100
173
  filters.length || props.onClearAll && anything ? /* @__PURE__ */ React.createElement("div", { className: "aura-filterbar__chips" }, filters.map(function(f) {
101
174
  return /* @__PURE__ */ React.createElement(Tag, { key: f.id, onRemove: f.onRemove }, f.label);
102
- }), props.onClearAll && anything ? /* @__PURE__ */ React.createElement(
103
- "button",
175
+ }), props.onClearAll && anything ? /* @__PURE__ */ React.createElement("button", { type: "button", className: "aura-filterbar__clear", onClick: clearAll }, t.clearFilters) : null) : null,
176
+ collapse ? /* @__PURE__ */ React.createElement(
177
+ Dialog,
104
178
  {
105
- type: "button",
106
- className: "aura-filterbar__clear",
107
- onClick: function() {
108
- draft[1]("");
109
- sent.current = "";
110
- if (timer.current) clearTimeout(timer.current);
111
- props.onClearAll();
112
- }
179
+ open,
180
+ onClose: function() {
181
+ sheet[1](false);
182
+ },
183
+ id: sheetId,
184
+ finalFocus: backTo,
185
+ title: t.filters,
186
+ size: "sm",
187
+ className: "aura-filterbar__sheet",
188
+ footer: /* @__PURE__ */ React.createElement(React.Fragment, null, props.onClearAll && filters.length ? /* @__PURE__ */ React.createElement(
189
+ Button,
190
+ {
191
+ variant: "secondary",
192
+ touchHeight: true,
193
+ onClick: function() {
194
+ clearAll();
195
+ if (doneRef.current) doneRef.current.focus();
196
+ }
197
+ },
198
+ t.clearFilters
199
+ ) : null, /* @__PURE__ */ React.createElement(
200
+ Button,
201
+ {
202
+ ref: doneRef,
203
+ touchHeight: true,
204
+ onClick: function() {
205
+ sheet[1](false);
206
+ }
207
+ },
208
+ t.done
209
+ ))
113
210
  },
114
- t.clearFilters
115
- ) : null) : null
211
+ /* @__PURE__ */ React.createElement(FilterSheet.Provider, { value: true }, /* @__PURE__ */ React.createElement("div", { className: "aura-filterbar aura-filterbar--sheet is-touch-always" }, props.children))
212
+ ) : null
116
213
  );
117
214
  });
118
215
  export {
@@ -5,7 +5,7 @@ import { Calendar, allowedDate, useCalendarPopover } from "./DatePicker.js";
5
5
  import { Button } from "./Button.js";
6
6
  import { Icon } from "./Icon.js";
7
7
  import { IconChevronDown } from "./icons.js";
8
- import { cx, touchClass, trapTab, uid, useMaybeControlled, useMergedRef } from "./internal.js";
8
+ import { cx, FilterSheet, touchClass, trapTab, uid, useMaybeControlled, useMergedRef } from "./internal.js";
9
9
  import { useAuraLocale } from "./locale.js";
10
10
  import { dateText, defaultCalendar, formatDateRange } from "./dates.js";
11
11
  const NONE = { start: null, end: null };
@@ -22,6 +22,7 @@ const FilterDateRange = React.forwardRef(
22
22
  const anyLabel = props.anyLabel || dt.anyTime;
23
23
  const value = v.start && v.end ? formatDateRange(v.start, v.end, { locale, calendar }) : anyLabel;
24
24
  const setFace = useMergedRef(ref, faceRef);
25
+ const inSheet = React.useContext(FilterSheet);
25
26
  const limits = {
26
27
  min: props.min,
27
28
  max: props.max,
@@ -122,7 +123,7 @@ const FilterDateRange = React.forwardRef(
122
123
  ),
123
124
  document.body
124
125
  ) : null;
125
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
126
+ const box = /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
126
127
  "div",
127
128
  {
128
129
  ref: boxRef,
@@ -130,6 +131,7 @@ const FilterDateRange = React.forwardRef(
130
131
  "aura-filterselect",
131
132
  pop.open && "is-open",
132
133
  props.disabled && "is-disabled",
134
+ inSheet && "aura-filterselect--sheet",
133
135
  touchClass(props.touchHeight),
134
136
  props.className
135
137
  )
@@ -158,6 +160,8 @@ const FilterDateRange = React.forwardRef(
158
160
  /* @__PURE__ */ React.createElement(Icon, { name: /* @__PURE__ */ React.createElement(IconChevronDown, null), className: "aura-filterselect__chevron" })
159
161
  )
160
162
  ), cal);
163
+ if (!inSheet) return box;
164
+ return /* @__PURE__ */ React.createElement("div", { className: cx("aura-field", props.disabled && "is-disabled") }, /* @__PURE__ */ React.createElement("span", { className: "aura-field__label", "aria-hidden": own ? void 0 : true }, props.label), box);
161
165
  }
162
166
  );
163
167
  export {
@@ -1,15 +1,21 @@
1
1
  'use client';
2
2
  import * as React from "react";
3
3
  import { Select, FILTER_KEY } from "./Select.js";
4
- import { omit } from "./internal.js";
4
+ import { FilterSheet, omit } from "./internal.js";
5
5
  const FilterSelect = React.forwardRef(function FilterSelect2(props, ref) {
6
6
  const onChange = props.onChange;
7
- const pass = Object.assign(omit(props, ["label", "allLabel", "onChange"]), {
8
- [FILTER_KEY]: { name: props.label, allLabel: props.allLabel },
9
- onChange: onChange ? function(e) {
10
- onChange(e.target.value);
11
- } : void 0
12
- });
7
+ const inSheet = React.useContext(FilterSheet);
8
+ const pass = Object.assign(
9
+ omit(props, ["label", "allLabel", "onChange"]),
10
+ inSheet ? { label: props.label } : {
11
+ [FILTER_KEY]: { name: props.label, allLabel: props.allLabel }
12
+ },
13
+ {
14
+ onChange: onChange ? function(e) {
15
+ onChange(e.target.value);
16
+ } : void 0
17
+ }
18
+ );
13
19
  return /* @__PURE__ */ React.createElement(Select, { ...pass, ref });
14
20
  });
15
21
  export {
package/dist/esm/Icon.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import * as React from "react";
3
3
  import { cx, devWarnOnce } from "./classes.js";
4
4
  import { iconSize, iconSvg, shapesOf } from "./iconSvg.js";
5
- const map = { "check": [["path", { "d": "M20 6 9 17l-5-5" }]], "x": [["path", { "d": "M18 6 6 18" }], ["path", { "d": "m6 6 12 12" }]], "plus": [["path", { "d": "M5 12h14" }], ["path", { "d": "M12 5v14" }]], "minus": [["path", { "d": "M5 12h14" }]], "search": [["path", { "d": "m21 21-4.34-4.34" }], ["circle", { "cx": "11", "cy": "11", "r": "8" }]], "chevron-down": [["path", { "d": "m6 9 6 6 6-6" }]], "chevron-up": [["path", { "d": "m18 15-6-6-6 6" }]], "chevron-left": [["path", { "d": "m15 18-6-6 6-6" }]], "chevron-right": [["path", { "d": "m9 18 6-6-6-6" }]], "arrow-right": [["path", { "d": "M5 12h14" }], ["path", { "d": "m12 5 7 7-7 7" }]], "arrow-up-right": [["path", { "d": "M7 7h10v10" }], ["path", { "d": "M7 17 17 7" }]], "arrow-up-down": [["path", { "d": "m21 16-4 4-4-4" }], ["path", { "d": "M17 20V4" }], ["path", { "d": "m3 8 4-4 4 4" }], ["path", { "d": "M7 4v16" }]], "loader-circle": [["path", { "d": "M21 12a9 9 0 1 1-6.219-8.56" }]], "circle-alert": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["line", { "x1": "12", "x2": "12", "y1": "8", "y2": "12" }], ["line", { "x1": "12", "x2": "12.01", "y1": "16", "y2": "16" }]], "circle-check": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "m16 9-5.5 5.5L8 12" }]], "info": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 16v-4" }], ["path", { "d": "M12 8h.01" }]], "triangle-alert": [["path", { "d": "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }], ["path", { "d": "M12 9v4" }], ["path", { "d": "M12 17h.01" }]], "settings": [["path", { "d": "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915" }], ["circle", { "cx": "12", "cy": "12", "r": "3" }]], "user": [["path", { "d": "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }], ["circle", { "cx": "12", "cy": "7", "r": "4" }]], "users": [["path", { "d": "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }], ["path", { "d": "M16 3.128a4 4 0 0 1 0 7.744" }], ["path", { "d": "M22 21v-2a4 4 0 0 0-3-3.87" }], ["circle", { "cx": "9", "cy": "7", "r": "4" }]], "filter": [["path", { "d": "M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z" }]], "ellipsis": [["circle", { "cx": "12", "cy": "12", "r": "1" }], ["circle", { "cx": "19", "cy": "12", "r": "1" }], ["circle", { "cx": "5", "cy": "12", "r": "1" }]], "external-link": [["path", { "d": "M15 3h6v6" }], ["path", { "d": "M10 14 21 3" }], ["path", { "d": "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }]], "copy": [["rect", { "width": "14", "height": "14", "x": "8", "y": "8", "rx": "2", "ry": "2" }], ["path", { "d": "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" }]], "trash-2": [["path", { "d": "M10 11v6" }], ["path", { "d": "M14 11v6" }], ["path", { "d": "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" }], ["path", { "d": "M3 6h18" }], ["path", { "d": "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }]], "pencil": [["path", { "d": "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" }], ["path", { "d": "m15 5 4 4" }]], "download": [["path", { "d": "M12 15V3" }], ["path", { "d": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }], ["path", { "d": "m7 10 5 5 5-5" }]], "upload": [["path", { "d": "M12 3v12" }], ["path", { "d": "m17 8-5-5-5 5" }], ["path", { "d": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }]], "calendar": [["path", { "d": "M8 2v3" }], ["path", { "d": "M16 2v3" }], ["rect", { "x": "3", "y": "3", "width": "18", "height": "18", "rx": "2" }], ["path", { "d": "M3 9h18" }]], "bell": [["path", { "d": "M10.268 21a2 2 0 0 0 3.464 0" }], ["path", { "d": "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" }]], "menu": [["path", { "d": "M4 5h16" }], ["path", { "d": "M4 12h16" }], ["path", { "d": "M4 19h16" }]], "eye": [["path", { "d": "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" }], ["circle", { "cx": "12", "cy": "12", "r": "3" }]], "log-out": [["path", { "d": "m16 17 5-5-5-5" }], ["path", { "d": "M21 12H9" }], ["path", { "d": "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }]], "circle": [["circle", { "cx": "12", "cy": "12", "r": "10" }]], "circle-dot-dashed": [["path", { "d": "M10.1 2.18a9.93 9.93 0 0 1 3.8 0" }], ["path", { "d": "M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7" }], ["path", { "d": "M21.82 10.1a9.93 9.93 0 0 1 0 3.8" }], ["path", { "d": "M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69" }], ["path", { "d": "M13.9 21.82a9.94 9.94 0 0 1-3.8 0" }], ["path", { "d": "M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7" }], ["path", { "d": "M2.18 13.9a9.93 9.93 0 0 1 0-3.8" }], ["path", { "d": "M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69" }], ["circle", { "cx": "12", "cy": "12", "r": "1" }]], "ban": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M4.929 4.929 19.07 19.071" }]], "arrow-up": [["path", { "d": "m5 12 7-7 7 7" }], ["path", { "d": "M12 19V5" }]], "arrow-down": [["path", { "d": "M12 5v14" }], ["path", { "d": "m19 12-7 7-7-7" }]], "inbox": [["polyline", { "points": "22 12 16 12 14 15 10 15 8 12 2 12" }], ["path", { "d": "M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z" }]], "pin": [["path", { "d": "M12 17v5" }], ["path", { "d": "M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z" }]], "pin-off": [["path", { "d": "M12 17v5" }], ["path", { "d": "M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89" }], ["path", { "d": "m2 2 20 20" }], ["path", { "d": "M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11" }]], "eye-off": [["path", { "d": "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49" }], ["path", { "d": "M14.084 14.158a3 3 0 0 1-4.242-4.242" }], ["path", { "d": "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143" }], ["path", { "d": "m2 2 20 20" }]], "columns-3": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "M15 3v18" }]], "arrow-left": [["path", { "d": "m12 19-7-7 7-7" }], ["path", { "d": "M19 12H5" }]], "rotate-ccw": [["path", { "d": "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }], ["path", { "d": "M3 3v5h5" }]], "house": [["path", { "d": "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" }], ["path", { "d": "M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }]], "layout-dashboard": [["rect", { "width": "7", "height": "9", "x": "3", "y": "3", "rx": "1" }], ["rect", { "width": "7", "height": "5", "x": "14", "y": "3", "rx": "1" }], ["rect", { "width": "7", "height": "9", "x": "14", "y": "12", "rx": "1" }], ["rect", { "width": "7", "height": "5", "x": "3", "y": "16", "rx": "1" }]], "folder": [["path", { "d": "M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" }]], "chart-column": [["path", { "d": "M3 3v16a2 2 0 0 0 2 2h16" }], ["path", { "d": "M18 17V9" }], ["path", { "d": "M13 17V5" }], ["path", { "d": "M8 17v-3" }]], "file-text": [["path", { "d": "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }], ["path", { "d": "M14 2v5a1 1 0 0 0 1 1h5" }], ["path", { "d": "M10 9H8" }], ["path", { "d": "M16 13H8" }], ["path", { "d": "M16 17H8" }]], "mail": [["path", { "d": "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" }], ["rect", { "x": "2", "y": "4", "width": "20", "height": "16", "rx": "2" }]], "lock": [["rect", { "width": "18", "height": "11", "x": "3", "y": "11", "rx": "2", "ry": "2" }], ["path", { "d": "M7 11V7a5 5 0 0 1 10 0v4" }]], "clock": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 6v6l4 2" }]], "trending-up": [["path", { "d": "M16 7h6v6" }], ["path", { "d": "m22 7-8.5 8.5-5-5L2 17" }]], "trending-down": [["path", { "d": "M16 17h6v-6" }], ["path", { "d": "m22 17-8.5-8.5-5 5L2 7" }]], "image": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2", "ry": "2" }], ["circle", { "cx": "9", "cy": "9", "r": "2" }], ["path", { "d": "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" }]], "paperclip": [["path", { "d": "m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551" }]], "cloud-upload": [["path", { "d": "M12 13v8" }], ["path", { "d": "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" }], ["path", { "d": "m8 17 4-4 4 4" }]], "file": [["path", { "d": "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }], ["path", { "d": "M14 2v5a1 1 0 0 0 1 1h5" }]], "sun": [["circle", { "cx": "12", "cy": "12", "r": "4" }], ["path", { "d": "M12 2v2" }], ["path", { "d": "M12 20v2" }], ["path", { "d": "m4.93 4.93 1.41 1.41" }], ["path", { "d": "m17.66 17.66 1.41 1.41" }], ["path", { "d": "M2 12h2" }], ["path", { "d": "M20 12h2" }], ["path", { "d": "m6.34 17.66-1.41 1.41" }], ["path", { "d": "m19.07 4.93-1.41 1.41" }]], "moon": [["path", { "d": "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" }]], "monitor": [["rect", { "width": "20", "height": "14", "x": "2", "y": "3", "rx": "2" }], ["line", { "x1": "8", "x2": "16", "y1": "21", "y2": "21" }], ["line", { "x1": "12", "x2": "12", "y1": "17", "y2": "21" }]], "panel-left-close": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "m16 15-3-3 3-3" }]], "panel-left-open": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "m14 9 3 3-3 3" }]], "server": [["rect", { "width": "20", "height": "8", "x": "2", "y": "2", "rx": "2", "ry": "2" }], ["rect", { "width": "20", "height": "8", "x": "2", "y": "14", "rx": "2", "ry": "2" }], ["line", { "x1": "6", "x2": "6.01", "y1": "6", "y2": "6" }], ["line", { "x1": "6", "x2": "6.01", "y1": "18", "y2": "18" }]], "globe": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" }], ["path", { "d": "M2 12h20" }]], "activity": [["path", { "d": "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2" }]], "shield-alert": [["path", { "d": "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" }], ["path", { "d": "M12 8v4" }], ["path", { "d": "M12 16h.01" }]], "phone": [["path", { "d": "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384" }]], "wrench": [["path", { "d": "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z" }]] };
5
+ const map = { "check": [["path", { "d": "M20 6 9 17l-5-5" }]], "x": [["path", { "d": "M18 6 6 18" }], ["path", { "d": "m6 6 12 12" }]], "plus": [["path", { "d": "M5 12h14" }], ["path", { "d": "M12 5v14" }]], "minus": [["path", { "d": "M5 12h14" }]], "search": [["path", { "d": "m21 21-4.34-4.34" }], ["circle", { "cx": "11", "cy": "11", "r": "8" }]], "chevron-down": [["path", { "d": "m6 9 6 6 6-6" }]], "chevron-up": [["path", { "d": "m18 15-6-6-6 6" }]], "chevron-left": [["path", { "d": "m15 18-6-6 6-6" }]], "chevron-right": [["path", { "d": "m9 18 6-6-6-6" }]], "arrow-right": [["path", { "d": "M5 12h14" }], ["path", { "d": "m12 5 7 7-7 7" }]], "arrow-up-right": [["path", { "d": "M7 7h10v10" }], ["path", { "d": "M7 17 17 7" }]], "arrow-up-down": [["path", { "d": "m21 16-4 4-4-4" }], ["path", { "d": "M17 20V4" }], ["path", { "d": "m3 8 4-4 4 4" }], ["path", { "d": "M7 4v16" }]], "loader-circle": [["path", { "d": "M21 12a9 9 0 1 1-6.219-8.56" }]], "circle-alert": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["line", { "x1": "12", "x2": "12", "y1": "8", "y2": "12" }], ["line", { "x1": "12", "x2": "12.01", "y1": "16", "y2": "16" }]], "circle-check": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "m16 9-5.5 5.5L8 12" }]], "info": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 16v-4" }], ["path", { "d": "M12 8h.01" }]], "triangle-alert": [["path", { "d": "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }], ["path", { "d": "M12 9v4" }], ["path", { "d": "M12 17h.01" }]], "settings": [["path", { "d": "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915" }], ["circle", { "cx": "12", "cy": "12", "r": "3" }]], "user": [["path", { "d": "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }], ["circle", { "cx": "12", "cy": "7", "r": "4" }]], "users": [["path", { "d": "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }], ["path", { "d": "M16 3.128a4 4 0 0 1 0 7.744" }], ["path", { "d": "M22 21v-2a4 4 0 0 0-3-3.87" }], ["circle", { "cx": "9", "cy": "7", "r": "4" }]], "filter": [["path", { "d": "M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z" }]], "ellipsis": [["circle", { "cx": "12", "cy": "12", "r": "1" }], ["circle", { "cx": "19", "cy": "12", "r": "1" }], ["circle", { "cx": "5", "cy": "12", "r": "1" }]], "external-link": [["path", { "d": "M15 3h6v6" }], ["path", { "d": "M10 14 21 3" }], ["path", { "d": "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }]], "copy": [["rect", { "width": "14", "height": "14", "x": "8", "y": "8", "rx": "2", "ry": "2" }], ["path", { "d": "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" }]], "trash-2": [["path", { "d": "M10 11v6" }], ["path", { "d": "M14 11v6" }], ["path", { "d": "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" }], ["path", { "d": "M3 6h18" }], ["path", { "d": "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }]], "pencil": [["path", { "d": "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" }], ["path", { "d": "m15 5 4 4" }]], "download": [["path", { "d": "M12 15V3" }], ["path", { "d": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }], ["path", { "d": "m7 10 5 5 5-5" }]], "upload": [["path", { "d": "M12 3v12" }], ["path", { "d": "m17 8-5-5-5 5" }], ["path", { "d": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }]], "calendar": [["path", { "d": "M8 2v3" }], ["path", { "d": "M16 2v3" }], ["rect", { "x": "3", "y": "3", "width": "18", "height": "18", "rx": "2" }], ["path", { "d": "M3 9h18" }]], "bell": [["path", { "d": "M10.268 21a2 2 0 0 0 3.464 0" }], ["path", { "d": "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" }]], "menu": [["path", { "d": "M4 5h16" }], ["path", { "d": "M4 12h16" }], ["path", { "d": "M4 19h16" }]], "eye": [["path", { "d": "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" }], ["circle", { "cx": "12", "cy": "12", "r": "3" }]], "log-out": [["path", { "d": "m16 17 5-5-5-5" }], ["path", { "d": "M21 12H9" }], ["path", { "d": "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }]], "circle": [["circle", { "cx": "12", "cy": "12", "r": "10" }]], "circle-dot-dashed": [["path", { "d": "M10.1 2.18a9.93 9.93 0 0 1 3.8 0" }], ["path", { "d": "M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7" }], ["path", { "d": "M21.82 10.1a9.93 9.93 0 0 1 0 3.8" }], ["path", { "d": "M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69" }], ["path", { "d": "M13.9 21.82a9.94 9.94 0 0 1-3.8 0" }], ["path", { "d": "M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7" }], ["path", { "d": "M2.18 13.9a9.93 9.93 0 0 1 0-3.8" }], ["path", { "d": "M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69" }], ["circle", { "cx": "12", "cy": "12", "r": "1" }]], "ban": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M4.929 4.929 19.07 19.071" }]], "arrow-up": [["path", { "d": "m5 12 7-7 7 7" }], ["path", { "d": "M12 19V5" }]], "arrow-down": [["path", { "d": "M12 5v14" }], ["path", { "d": "m19 12-7 7-7-7" }]], "inbox": [["polyline", { "points": "22 12 16 12 14 15 10 15 8 12 2 12" }], ["path", { "d": "M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z" }]], "pin": [["path", { "d": "M12 17v5" }], ["path", { "d": "M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z" }]], "pin-off": [["path", { "d": "M12 17v5" }], ["path", { "d": "M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89" }], ["path", { "d": "m2 2 20 20" }], ["path", { "d": "M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11" }]], "eye-off": [["path", { "d": "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49" }], ["path", { "d": "M14.084 14.158a3 3 0 0 1-4.242-4.242" }], ["path", { "d": "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143" }], ["path", { "d": "m2 2 20 20" }]], "columns-3": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "M15 3v18" }]], "arrow-left": [["path", { "d": "m12 19-7-7 7-7" }], ["path", { "d": "M19 12H5" }]], "rotate-ccw": [["path", { "d": "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }], ["path", { "d": "M3 3v5h5" }]], "house": [["path", { "d": "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" }], ["path", { "d": "M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }]], "layout-dashboard": [["rect", { "width": "7", "height": "9", "x": "3", "y": "3", "rx": "1" }], ["rect", { "width": "7", "height": "5", "x": "14", "y": "3", "rx": "1" }], ["rect", { "width": "7", "height": "9", "x": "14", "y": "12", "rx": "1" }], ["rect", { "width": "7", "height": "5", "x": "3", "y": "16", "rx": "1" }]], "folder": [["path", { "d": "M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" }]], "chart-column": [["path", { "d": "M3 3v16a2 2 0 0 0 2 2h16" }], ["path", { "d": "M18 17V9" }], ["path", { "d": "M13 17V5" }], ["path", { "d": "M8 17v-3" }]], "file-text": [["path", { "d": "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }], ["path", { "d": "M14 2v5a1 1 0 0 0 1 1h5" }], ["path", { "d": "M10 9H8" }], ["path", { "d": "M16 13H8" }], ["path", { "d": "M16 17H8" }]], "mail": [["path", { "d": "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" }], ["rect", { "x": "2", "y": "4", "width": "20", "height": "16", "rx": "2" }]], "lock": [["rect", { "width": "18", "height": "11", "x": "3", "y": "11", "rx": "2", "ry": "2" }], ["path", { "d": "M7 11V7a5 5 0 0 1 10 0v4" }]], "clock": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 6v6l4 2" }]], "trending-up": [["path", { "d": "M16 7h6v6" }], ["path", { "d": "m22 7-8.5 8.5-5-5L2 17" }]], "trending-down": [["path", { "d": "M16 17h6v-6" }], ["path", { "d": "m22 17-8.5-8.5-5 5L2 7" }]], "image": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2", "ry": "2" }], ["circle", { "cx": "9", "cy": "9", "r": "2" }], ["path", { "d": "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" }]], "paperclip": [["path", { "d": "m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551" }]], "cloud-upload": [["path", { "d": "M12 13v8" }], ["path", { "d": "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" }], ["path", { "d": "m8 17 4-4 4 4" }]], "file": [["path", { "d": "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }], ["path", { "d": "M14 2v5a1 1 0 0 0 1 1h5" }]], "sun": [["circle", { "cx": "12", "cy": "12", "r": "4" }], ["path", { "d": "M12 2v2" }], ["path", { "d": "M12 20v2" }], ["path", { "d": "m4.93 4.93 1.41 1.41" }], ["path", { "d": "m17.66 17.66 1.41 1.41" }], ["path", { "d": "M2 12h2" }], ["path", { "d": "M20 12h2" }], ["path", { "d": "m6.34 17.66-1.41 1.41" }], ["path", { "d": "m19.07 4.93-1.41 1.41" }]], "moon": [["path", { "d": "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" }]], "monitor": [["rect", { "width": "20", "height": "14", "x": "2", "y": "3", "rx": "2" }], ["line", { "x1": "8", "x2": "16", "y1": "21", "y2": "21" }], ["line", { "x1": "12", "x2": "12", "y1": "17", "y2": "21" }]], "panel-left-close": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "m16 15-3-3 3-3" }]], "panel-left-open": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "m14 9 3 3-3 3" }]], "server": [["rect", { "width": "20", "height": "8", "x": "2", "y": "2", "rx": "2", "ry": "2" }], ["rect", { "width": "20", "height": "8", "x": "2", "y": "14", "rx": "2", "ry": "2" }], ["line", { "x1": "6", "x2": "6.01", "y1": "6", "y2": "6" }], ["line", { "x1": "6", "x2": "6.01", "y1": "18", "y2": "18" }]], "globe": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" }], ["path", { "d": "M2 12h20" }]], "activity": [["path", { "d": "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2" }]], "shield-alert": [["path", { "d": "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" }], ["path", { "d": "M12 8v4" }], ["path", { "d": "M12 16h.01" }]], "phone": [["path", { "d": "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384" }]], "wrench": [["path", { "d": "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z" }]], "sliders-horizontal": [["path", { "d": "M10 5H3" }], ["path", { "d": "M12 19H3" }], ["path", { "d": "M14 3v4" }], ["path", { "d": "M16 17v4" }], ["path", { "d": "M21 12h-9" }], ["path", { "d": "M21 19h-5" }], ["path", { "d": "M21 5h-7" }], ["path", { "d": "M8 10v4" }], ["path", { "d": "M8 12H3" }]] };
6
6
  const ICONS = map;
7
7
  const registered = {};
8
8
  function registerIcons(icons) {
package/dist/esm/icons.js CHANGED
@@ -383,6 +383,17 @@ const IconWrench = /* @__PURE__ */ defineIcon("wrench", [
383
383
  }
384
384
  ]
385
385
  ]);
386
+ const IconSlidersHorizontal = /* @__PURE__ */ defineIcon("sliders-horizontal", [
387
+ ["path", { d: "M10 5H3" }],
388
+ ["path", { d: "M12 19H3" }],
389
+ ["path", { d: "M14 3v4" }],
390
+ ["path", { d: "M16 17v4" }],
391
+ ["path", { d: "M21 12h-9" }],
392
+ ["path", { d: "M21 19h-5" }],
393
+ ["path", { d: "M21 5h-7" }],
394
+ ["path", { d: "M8 10v4" }],
395
+ ["path", { d: "M8 12H3" }]
396
+ ]);
386
397
  const allIcons = [
387
398
  IconCheck,
388
399
  IconX,
@@ -453,7 +464,8 @@ const allIcons = [
453
464
  IconActivity,
454
465
  IconShieldAlert,
455
466
  IconPhone,
456
- IconWrench
467
+ IconWrench,
468
+ IconSlidersHorizontal
457
469
  ];
458
470
  export {
459
471
  IconActivity,
@@ -516,6 +528,7 @@ export {
516
528
  IconServer,
517
529
  IconSettings,
518
530
  IconShieldAlert,
531
+ IconSlidersHorizontal,
519
532
  IconSun,
520
533
  IconTrash2,
521
534
  IconTrendingDown,
@@ -80,8 +80,10 @@ function useMergedRef(a, b) {
80
80
  function plainClick(e) {
81
81
  return !e.defaultPrevented && e.button === 0 && !e.metaKey && !e.ctrlKey && !e.shiftKey && !e.altKey;
82
82
  }
83
+ const FilterSheet = React.createContext(false);
83
84
  export {
84
85
  FOCUSABLE,
86
+ FilterSheet,
85
87
  collator,
86
88
  compare,
87
89
  cx,
@@ -133,6 +133,10 @@ const STRINGS = {
133
133
  statusOk: "OK",
134
134
  statusUnknown: "No data",
135
135
  opensInNewTab: "opens in a new tab",
136
+ filtersApplied: function(n2) {
137
+ return "Filters, " + n2.toLocaleString("en") + " applied";
138
+ },
139
+ done: "Done",
136
140
  accepts: function(list, max) {
137
141
  return [list, max && "up to " + max + " each"].filter(Boolean).join(", ");
138
142
  }
@@ -129,6 +129,10 @@ const sv = {
129
129
  statusOk: "OK",
130
130
  statusUnknown: "Ingen data",
131
131
  opensInNewTab: "\xF6ppnas i en ny flik",
132
+ filtersApplied: function(n) {
133
+ return "Filter, " + n.toLocaleString("sv-SE") + " aktiva";
134
+ },
135
+ done: "Klar",
132
136
  accepts: function(list, max) {
133
137
  return [list, max && "h\xF6gst " + max + " per fil"].filter(Boolean).join(", ");
134
138
  }
@@ -129,6 +129,10 @@ const th = {
129
129
  statusOk: "\u0E1B\u0E01\u0E15\u0E34",
130
130
  statusUnknown: "\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25",
131
131
  opensInNewTab: "\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E19\u0E41\u0E17\u0E47\u0E1A\u0E43\u0E2B\u0E21\u0E48",
132
+ filtersApplied: function(n2) {
133
+ return "\u0E15\u0E31\u0E27\u0E01\u0E23\u0E2D\u0E07, \u0E43\u0E0A\u0E49\u0E2D\u0E22\u0E39\u0E48 " + n2.toLocaleString("en") + " \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23";
134
+ },
135
+ done: "\u0E40\u0E2A\u0E23\u0E47\u0E08\u0E2A\u0E34\u0E49\u0E19",
132
136
  accepts: function(list, max) {
133
137
  return [list, max && "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 " + max + " \u0E15\u0E48\u0E2D\u0E44\u0E1F\u0E25\u0E4C"].filter(Boolean).join(" \xB7 ");
134
138
  }
@@ -90,6 +90,7 @@ __export(icons_exports, {
90
90
  IconServer: () => IconServer,
91
91
  IconSettings: () => IconSettings,
92
92
  IconShieldAlert: () => IconShieldAlert,
93
+ IconSlidersHorizontal: () => IconSlidersHorizontal,
93
94
  IconSun: () => IconSun,
94
95
  IconTrash2: () => IconTrash2,
95
96
  IconTrendingDown: () => IconTrendingDown,
@@ -539,6 +540,17 @@ var IconWrench = /* @__PURE__ */ defineIcon("wrench", [
539
540
  }
540
541
  ]
541
542
  ]);
543
+ var IconSlidersHorizontal = /* @__PURE__ */ defineIcon("sliders-horizontal", [
544
+ ["path", { d: "M10 5H3" }],
545
+ ["path", { d: "M12 19H3" }],
546
+ ["path", { d: "M14 3v4" }],
547
+ ["path", { d: "M16 17v4" }],
548
+ ["path", { d: "M21 12h-9" }],
549
+ ["path", { d: "M21 19h-5" }],
550
+ ["path", { d: "M21 5h-7" }],
551
+ ["path", { d: "M8 10v4" }],
552
+ ["path", { d: "M8 12H3" }]
553
+ ]);
542
554
  var allIcons = [
543
555
  IconCheck,
544
556
  IconX,
@@ -609,5 +621,6 @@ var allIcons = [
609
621
  IconActivity,
610
622
  IconShieldAlert,
611
623
  IconPhone,
612
- IconWrench
624
+ IconWrench,
625
+ IconSlidersHorizontal
613
626
  ];
@@ -2,7 +2,7 @@ import * as React$1 from 'react';
2
2
 
3
3
  /** An AURA icon name, or any icon element (e.g. `<Building />` from lucide-react). AURA sizes it and hides it from screen readers. */
4
4
  export type IconInput = IconName | React$1.ReactElement;
5
- export type IconName = "check" | "x" | "plus" | "minus" | "search" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-right" | "arrow-up-right" | "arrow-up-down" | "loader-circle" | "circle-alert" | "circle-check" | "info" | "triangle-alert" | "settings" | "user" | "users" | "filter" | "ellipsis" | "external-link" | "copy" | "trash-2" | "pencil" | "download" | "upload" | "calendar" | "bell" | "menu" | "eye" | "log-out" | "circle" | "circle-dot-dashed" | "ban" | "arrow-up" | "arrow-down" | "inbox" | "pin" | "pin-off" | "eye-off" | "columns-3" | "arrow-left" | "rotate-ccw" | "house" | "layout-dashboard" | "folder" | "chart-column" | "file-text" | "mail" | "lock" | "clock" | "trending-up" | "trending-down" | "image" | "paperclip" | "cloud-upload" | "file" | "sun" | "moon" | "monitor" | "panel-left-close" | "panel-left-open" | "server" | "globe" | "activity" | "shield-alert" | "phone" | "wrench";
5
+ export type IconName = "check" | "x" | "plus" | "minus" | "search" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-right" | "arrow-up-right" | "arrow-up-down" | "loader-circle" | "circle-alert" | "circle-check" | "info" | "triangle-alert" | "settings" | "user" | "users" | "filter" | "ellipsis" | "external-link" | "copy" | "trash-2" | "pencil" | "download" | "upload" | "calendar" | "bell" | "menu" | "eye" | "log-out" | "circle" | "circle-dot-dashed" | "ban" | "arrow-up" | "arrow-down" | "inbox" | "pin" | "pin-off" | "eye-off" | "columns-3" | "arrow-left" | "rotate-ccw" | "house" | "layout-dashboard" | "folder" | "chart-column" | "file-text" | "mail" | "lock" | "clock" | "trending-up" | "trending-down" | "image" | "paperclip" | "cloud-upload" | "file" | "sun" | "moon" | "monitor" | "panel-left-close" | "panel-left-open" | "server" | "globe" | "activity" | "shield-alert" | "phone" | "wrench" | "sliders-horizontal";
6
6
  /** Lucide stroke icon drawn inline in currentColor. */
7
7
  export interface IconProps {
8
8
  /** A name from the set, or an icon element of your own (sized and styled the same way). */
@@ -100,6 +100,7 @@ export declare const IconActivity: AuraIcon;
100
100
  export declare const IconShieldAlert: AuraIcon;
101
101
  export declare const IconPhone: AuraIcon;
102
102
  export declare const IconWrench: AuraIcon;
103
+ export declare const IconSlidersHorizontal: AuraIcon;
103
104
  /** Every icon — what `registerIcons(allIcons)` takes to keep icon names as strings working in 6.0. */
104
105
  export declare const allIcons: AuraIcon[];
105
106
 
@@ -2,7 +2,7 @@ import * as React$1 from 'react';
2
2
 
3
3
  /** An AURA icon name, or any icon element (e.g. `<Building />` from lucide-react). AURA sizes it and hides it from screen readers. */
4
4
  export type IconInput = IconName | React$1.ReactElement;
5
- export type IconName = "check" | "x" | "plus" | "minus" | "search" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-right" | "arrow-up-right" | "arrow-up-down" | "loader-circle" | "circle-alert" | "circle-check" | "info" | "triangle-alert" | "settings" | "user" | "users" | "filter" | "ellipsis" | "external-link" | "copy" | "trash-2" | "pencil" | "download" | "upload" | "calendar" | "bell" | "menu" | "eye" | "log-out" | "circle" | "circle-dot-dashed" | "ban" | "arrow-up" | "arrow-down" | "inbox" | "pin" | "pin-off" | "eye-off" | "columns-3" | "arrow-left" | "rotate-ccw" | "house" | "layout-dashboard" | "folder" | "chart-column" | "file-text" | "mail" | "lock" | "clock" | "trending-up" | "trending-down" | "image" | "paperclip" | "cloud-upload" | "file" | "sun" | "moon" | "monitor" | "panel-left-close" | "panel-left-open" | "server" | "globe" | "activity" | "shield-alert" | "phone" | "wrench";
5
+ export type IconName = "check" | "x" | "plus" | "minus" | "search" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-right" | "arrow-up-right" | "arrow-up-down" | "loader-circle" | "circle-alert" | "circle-check" | "info" | "triangle-alert" | "settings" | "user" | "users" | "filter" | "ellipsis" | "external-link" | "copy" | "trash-2" | "pencil" | "download" | "upload" | "calendar" | "bell" | "menu" | "eye" | "log-out" | "circle" | "circle-dot-dashed" | "ban" | "arrow-up" | "arrow-down" | "inbox" | "pin" | "pin-off" | "eye-off" | "columns-3" | "arrow-left" | "rotate-ccw" | "house" | "layout-dashboard" | "folder" | "chart-column" | "file-text" | "mail" | "lock" | "clock" | "trending-up" | "trending-down" | "image" | "paperclip" | "cloud-upload" | "file" | "sun" | "moon" | "monitor" | "panel-left-close" | "panel-left-open" | "server" | "globe" | "activity" | "shield-alert" | "phone" | "wrench" | "sliders-horizontal";
6
6
  /** Lucide stroke icon drawn inline in currentColor. */
7
7
  export interface IconProps {
8
8
  /** A name from the set, or an icon element of your own (sized and styled the same way). */
@@ -100,6 +100,7 @@ export declare const IconActivity: AuraIcon;
100
100
  export declare const IconShieldAlert: AuraIcon;
101
101
  export declare const IconPhone: AuraIcon;
102
102
  export declare const IconWrench: AuraIcon;
103
+ export declare const IconSlidersHorizontal: AuraIcon;
103
104
  /** Every icon — what `registerIcons(allIcons)` takes to keep icon names as strings working in 6.0. */
104
105
  export declare const allIcons: AuraIcon[];
105
106
 
package/dist/index.d.cts CHANGED
@@ -264,7 +264,7 @@ export interface DataTableProps<Row extends Record<string, any> = Record<string,
264
264
  }
265
265
  /** An AURA icon name, or any icon element (e.g. `<Building />` from lucide-react). AURA sizes it and hides it from screen readers. */
266
266
  export type IconInput = IconName | React$1.ReactElement;
267
- export type IconName = "check" | "x" | "plus" | "minus" | "search" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-right" | "arrow-up-right" | "arrow-up-down" | "loader-circle" | "circle-alert" | "circle-check" | "info" | "triangle-alert" | "settings" | "user" | "users" | "filter" | "ellipsis" | "external-link" | "copy" | "trash-2" | "pencil" | "download" | "upload" | "calendar" | "bell" | "menu" | "eye" | "log-out" | "circle" | "circle-dot-dashed" | "ban" | "arrow-up" | "arrow-down" | "inbox" | "pin" | "pin-off" | "eye-off" | "columns-3" | "arrow-left" | "rotate-ccw" | "house" | "layout-dashboard" | "folder" | "chart-column" | "file-text" | "mail" | "lock" | "clock" | "trending-up" | "trending-down" | "image" | "paperclip" | "cloud-upload" | "file" | "sun" | "moon" | "monitor" | "panel-left-close" | "panel-left-open" | "server" | "globe" | "activity" | "shield-alert" | "phone" | "wrench";
267
+ export type IconName = "check" | "x" | "plus" | "minus" | "search" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-right" | "arrow-up-right" | "arrow-up-down" | "loader-circle" | "circle-alert" | "circle-check" | "info" | "triangle-alert" | "settings" | "user" | "users" | "filter" | "ellipsis" | "external-link" | "copy" | "trash-2" | "pencil" | "download" | "upload" | "calendar" | "bell" | "menu" | "eye" | "log-out" | "circle" | "circle-dot-dashed" | "ban" | "arrow-up" | "arrow-down" | "inbox" | "pin" | "pin-off" | "eye-off" | "columns-3" | "arrow-left" | "rotate-ccw" | "house" | "layout-dashboard" | "folder" | "chart-column" | "file-text" | "mail" | "lock" | "clock" | "trending-up" | "trending-down" | "image" | "paperclip" | "cloud-upload" | "file" | "sun" | "moon" | "monitor" | "panel-left-close" | "panel-left-open" | "server" | "globe" | "activity" | "shield-alert" | "phone" | "wrench" | "sliders-horizontal";
268
268
  /** Lucide stroke icon drawn inline in currentColor. */
269
269
  export interface IconProps {
270
270
  /** A name from the set, or an icon element of your own (sized and styled the same way). */
@@ -508,6 +508,16 @@ export interface FilterBarProps {
508
508
  /** Below this width (the viewport's) the search takes a row of its own above the controls. Default `md` (768px);
509
509
  * `lg` (1024px) for bars with several filters (5.15, Chamber-OS 92). */
510
510
  stackBelow?: "md" | "lg" | undefined;
511
+ /** 5.42 (Chamber-OS 146): below this width (the viewport's: `sm` 640px, `md` 768px) the `children` fold into a
512
+ * "Filters" sheet behind one button at the end of the search's row — "Filters (2)", read "Filters, 2 applied". The
513
+ * search, chips, Clear all, `resultCount` and `actions` stay in the bar. In the sheet the children stack at full
514
+ * width with their labels showing (a FilterSelect is a labelled Select there), 44px high; changes apply at once,
515
+ * and Done, Escape or the scrim close it, focus going back to the button. The children render in one place at a
516
+ * time, so they move to the sheet when it opens: keep their state with the page (`value` + `onChange`), not in
517
+ * `defaultValue`. No children, no button. From the breakpoint up the bar is as without the prop. */
518
+ collapseBelow?: "sm" | "md" | undefined;
519
+ /** 5.42: the number on the "Filters" button. Default the number of `filters` (chips). 0 shows no number. */
520
+ filterCount?: number | undefined;
511
521
  className?: string | undefined;
512
522
  }
513
523
  /** One command in the palette. */
@@ -2050,6 +2060,10 @@ export interface AuraStrings {
2050
2060
  statusUnknown: string;
2051
2061
  /** Read after a Menu link item with `target="_blank"` (5.41): "Visit site (opens in a new tab)". */
2052
2062
  opensInNewTab: string;
2063
+ /** 5.42: FilterBar's collapsed-filters button, read with its count ("Filters, 2 applied"). */
2064
+ filtersApplied: (n: number) => string;
2065
+ /** 5.42: closes FilterBar's "Filters" sheet. */
2066
+ done: string;
2053
2067
  }
2054
2068
  /** Built-in strings by locale. th and sv also ship as packs (`@jirawatpyk/aura-react/locales/th`, `/sv`, 5.9); in 6.0
2055
2069
  * only en stays built in and a Thai or Swedish app passes its pack to AuraProvider `strings`. */