allaw-ui 4.5.7 → 4.5.9

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.
@@ -17,6 +17,7 @@ export interface SelectProps<T extends string | string[]> {
17
17
  disabledItems?: string[];
18
18
  onChange?: (selected: T) => void;
19
19
  onError?: (error: string) => void;
20
+ maxLines?: false | number;
20
21
  }
21
22
  export interface SelectRef {
22
23
  validate: () => boolean;
@@ -14,21 +14,21 @@ import "../../../styles/global.css";
14
14
  import TinyInfo from "../typography/TinyInfo";
15
15
  function Select(_a, ref) {
16
16
  var _b;
17
- var items = _a.items, selectedItem = _a.selectedItem, _c = _a.placeholder, placeholder = _c === void 0 ? "Choisir..." : _c, _d = _a.multiple, multiple = _d === void 0 ? false : _d, _e = _a.isRequired, isRequired = _e === void 0 ? false : _e, _f = _a.showError, showError = _f === void 0 ? false : _f, _g = _a.width, width = _g === void 0 ? 100 : _g, maxItems = _a.maxItems, _h = _a.requireAttention, requireAttention = _h === void 0 ? false : _h, _j = _a.disabledItems, disabledItems = _j === void 0 ? [] : _j, onChange = _a.onChange, onError = _a.onError;
18
- var _k = useState(false), isOpen = _k[0], setIsOpen = _k[1];
19
- var _l = useState((multiple ? selectedItem || [] : selectedItem || "")), selected = _l[0], setSelected = _l[1];
20
- var _m = useState(""), error = _m[0], setError = _m[1];
17
+ var items = _a.items, selectedItem = _a.selectedItem, _c = _a.placeholder, placeholder = _c === void 0 ? "Choisir..." : _c, _d = _a.multiple, multiple = _d === void 0 ? false : _d, _e = _a.isRequired, isRequired = _e === void 0 ? false : _e, _f = _a.showError, showError = _f === void 0 ? false : _f, _g = _a.width, width = _g === void 0 ? 100 : _g, maxItems = _a.maxItems, _h = _a.requireAttention, requireAttention = _h === void 0 ? false : _h, _j = _a.disabledItems, disabledItems = _j === void 0 ? [] : _j, onChange = _a.onChange, onError = _a.onError, _k = _a.maxLines, maxLines = _k === void 0 ? false : _k;
18
+ var _l = useState(false), isOpen = _l[0], setIsOpen = _l[1];
19
+ var _m = useState((multiple ? selectedItem || [] : selectedItem || "")), selected = _m[0], setSelected = _m[1];
20
+ var _o = useState(""), error = _o[0], setError = _o[1];
21
21
  var selectRef = useRef(null);
22
22
  var listRef = useRef(null);
23
23
  var tagContainerRef = useRef(null);
24
- var _o = useState([]), visibleTags = _o[0], setVisibleTags = _o[1];
25
- var _p = useState(0), hiddenCount = _p[0], setHiddenCount = _p[1];
26
- var _q = useState({
24
+ var _p = useState([]), visibleTags = _p[0], setVisibleTags = _p[1];
25
+ var _q = useState(0), hiddenCount = _q[0], setHiddenCount = _q[1];
26
+ var _r = useState({
27
27
  top: 0,
28
28
  left: 0,
29
29
  width: 0,
30
- }), listPosition = _q[0], setListPosition = _q[1];
31
- var _r = useState("bottom"), placement = _r[0], setPlacement = _r[1];
30
+ }), listPosition = _r[0], setListPosition = _r[1];
31
+ var _s = useState("bottom"), placement = _s[0], setPlacement = _s[1];
32
32
  useEffect(function () {
33
33
  setSelected((multiple ? selectedItem || [] : selectedItem || ""));
34
34
  }, [selectedItem, multiple]);
@@ -215,7 +215,9 @@ function Select(_a, ref) {
215
215
  var isHighlighted = !multiple && item.value === selectedItem;
216
216
  return (React.createElement("div", { key: item.value, "data-value": item.value, className: "".concat(styles.selectItem, " ").concat(isSelected ? styles.selected : "", " ").concat(isHighlighted ? styles.highlighted : "", " ").concat(!multiple ? styles.singleSelect : "", " ").concat(isDisabled ? styles.disabledItem : ""), onClick: function () { return !isDisabled && handleSelect(item); }, "aria-disabled": isDisabled },
217
217
  multiple && React.createElement("span", { className: styles.selectItemIcon }),
218
- React.createElement("span", { className: styles.selectItemText }, item.label)));
218
+ React.createElement("span", { className: "".concat(styles.selectItemText, " ").concat(maxLines !== false ? styles.selectItemTextClamp : ""), style: maxLines !== false
219
+ ? { WebkitLineClamp: maxLines }
220
+ : undefined }, item.label)));
219
221
  }))); };
220
222
  var renderTags = function (selectedValues) {
221
223
  if (!selectedValues.length)
@@ -232,7 +234,9 @@ function Select(_a, ref) {
232
234
  }); });
233
235
  return (React.createElement("div", { ref: selectRef, className: "".concat(styles.selectContainer, " ").concat(isOpen ? styles.selectPressed : ""), style: { width: "".concat(width, "%") } },
234
236
  React.createElement("button", { type: "button", className: "".concat(styles.select, " ").concat(isOpen ? styles.selectPressed : styles.selectDefault, " ").concat(multiple ? styles.selectMultiple : styles.selectSingle, " ").concat(requireAttention ? styles.selectRequireAttention : ""), onClick: toggleOpen, style: { width: "100%" } },
235
- React.createElement("span", { className: styles.selectText }, Array.isArray(selected) && selected.length > 0
237
+ React.createElement("span", { className: "".concat(styles.selectText, " ").concat(maxLines !== false ? styles.selectTextClamp : ""), style: maxLines !== false
238
+ ? { WebkitLineClamp: maxLines }
239
+ : undefined }, Array.isArray(selected) && selected.length > 0
236
240
  ? renderTags(selected)
237
241
  : !Array.isArray(selected) && selected
238
242
  ? (_b = items.find(function (item) { return item.value === selected; })) === null || _b === void 0 ? void 0 : _b.label
@@ -46,6 +46,17 @@
46
46
  padding: 2px 0;
47
47
  }
48
48
 
49
+ /* Enable multi-line clamping when requested */
50
+ .selectTextClamp {
51
+ white-space: normal;
52
+ display: -webkit-box;
53
+ -webkit-box-orient: vertical;
54
+ overflow: hidden;
55
+ text-overflow: ellipsis;
56
+ word-break: break-word;
57
+ text-align: left;
58
+ }
59
+
49
60
  .selectIcon {
50
61
  width: 24px;
51
62
  height: 24px;
@@ -134,6 +145,15 @@
134
145
  width: 100%;
135
146
  }
136
147
 
148
+ .selectItemTextClamp {
149
+ white-space: normal;
150
+ display: -webkit-box;
151
+ -webkit-box-orient: vertical;
152
+ overflow: hidden;
153
+ text-overflow: ellipsis;
154
+ word-break: break-word;
155
+ }
156
+
137
157
  .errorMessage {
138
158
  padding-top: 4px;
139
159
  padding-left: 14px;
@@ -76,6 +76,18 @@ declare namespace _default {
76
76
  }
77
77
  export { control_8 as control };
78
78
  }
79
+ namespace maxLines {
80
+ export namespace control_9 {
81
+ let type_9: string;
82
+ export { type_9 as type };
83
+ let min_2: number;
84
+ export { min_2 as min };
85
+ let max_1: number;
86
+ export { max_1 as max };
87
+ }
88
+ export { control_9 as control };
89
+ export let description: string;
90
+ }
79
91
  }
80
92
  export namespace parameters {
81
93
  namespace backgrounds {
@@ -107,6 +119,7 @@ export const Multiple: any;
107
119
  export const Required: any;
108
120
  export const CustomWidth: any;
109
121
  export const RequireAttention: any;
122
+ export const TwoLines: any;
110
123
  export const WithDisabledItems: any;
111
124
  export const MultipleWithDisabledItems: any;
112
125
  import Select from "./Select";
@@ -73,6 +73,14 @@ export default {
73
73
  max: 100,
74
74
  },
75
75
  },
76
+ maxLines: {
77
+ control: {
78
+ type: "number",
79
+ min: 1,
80
+ max: 5,
81
+ },
82
+ description: "Nombre de lignes max affichées (laisser vide pour 1 ligne)",
83
+ },
76
84
  },
77
85
  parameters: {
78
86
  backgrounds: {
@@ -121,6 +129,7 @@ Default.args = {
121
129
  isRequired: false,
122
130
  requireAttention: false,
123
131
  width: 100,
132
+ maxLines: undefined,
124
133
  };
125
134
  export var Pressed = Template.bind({});
126
135
  Pressed.args = {
@@ -190,6 +199,26 @@ RequireAttention.args = {
190
199
  requireAttention: true,
191
200
  width: 100,
192
201
  };
202
+ export var TwoLines = Template.bind({});
203
+ TwoLines.args = {
204
+ items: [
205
+ {
206
+ label: "40 Impasse de l’enclume, Saint-Julien-De-Concelles 44450 avec une adresse très longue",
207
+ value: "addr-1",
208
+ },
209
+ {
210
+ label: "12 Rue de la Paix, Paris 75002",
211
+ value: "addr-2",
212
+ },
213
+ ],
214
+ selectedItem: "addr-1",
215
+ placeholder: "Choisir une localisation",
216
+ multiple: false,
217
+ isRequired: false,
218
+ requireAttention: false,
219
+ width: 100,
220
+ maxLines: 2,
221
+ };
193
222
  export var WithDisabledItems = Template.bind({});
194
223
  WithDisabledItems.args = {
195
224
  items: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allaw-ui",
3
- "version": "4.5.7",
3
+ "version": "4.5.9",
4
4
  "description": "Composants UI pour l'application Allaw",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",