@xsolla/xui-multi-select 0.216.0 → 0.217.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/web/index.d.mts CHANGED
@@ -11,6 +11,19 @@ interface MultiSelectOption {
11
11
  label: ReactNode;
12
12
  value: string | number;
13
13
  disabled?: boolean;
14
+ /**
15
+ * When `false`, this option is **locked**: once selected it cannot be
16
+ * removed. Its tag renders without a remove button, clicking the tag does
17
+ * nothing, toggling the option off in the dropdown is a no-op, the
18
+ * `extraClear` clear-all button leaves it in place, and select-all /
19
+ * deselect-all skips it.
20
+ *
21
+ * Unlike `disabled`, a locked option is **not** greyed out — use it for a
22
+ * required, default-selected value (e.g. a base language that must always
23
+ * stay selected) that should still look like a normal selection.
24
+ * @default true
25
+ */
26
+ removable?: boolean;
14
27
  }
15
28
  interface MultiSelectProps extends ThemeOverrideProps {
16
29
  /**
@@ -70,12 +83,14 @@ interface MultiSelectProps extends ThemeOverrideProps {
70
83
  */
71
84
  flexible?: boolean;
72
85
  /**
73
- * Switch on displaying a remove button in each tag.
86
+ * Switch on displaying a remove button in each tag. This is the
87
+ * component-wide default; an individual option can opt out with
88
+ * `MultiSelectOption.removable: false`.
74
89
  * @default true
75
90
  */
76
91
  removeTagsButtons?: boolean;
77
92
  /**
78
- * Add clear all button.
93
+ * Add clear all button. Options with `removable: false` are kept.
79
94
  * @default false
80
95
  */
81
96
  extraClear?: boolean;
@@ -113,6 +128,32 @@ interface MultiSelectProps extends ThemeOverrideProps {
113
128
  * @default "No results"
114
129
  */
115
130
  noOptionsMessage?: string;
131
+ /**
132
+ * When true, shows a select-all / deselect-all row at the top of the
133
+ * built-in dropdown (below the search input when `searchable`).
134
+ *
135
+ * Scope is **the options currently listed**: with `searchable` active and a
136
+ * search query typed, it applies only to the filtered options, matching what
137
+ * the user can see. Options with `disabled: true` are skipped, and options
138
+ * with `removable: false` are never deselected. The row flips to
139
+ * deselect-all once every selectable listed option is selected.
140
+ *
141
+ * Ignored when `dropdownMenu` is false.
142
+ * @default false
143
+ */
144
+ selectAll?: boolean;
145
+ /**
146
+ * Label of the select-all row. Only used when `selectAll` is true.
147
+ * @default "Select all"
148
+ */
149
+ selectAllLabel?: string;
150
+ /**
151
+ * Label of the select-all row once everything listed is selected, at which
152
+ * point activating it clears the listed selection. Only used when
153
+ * `selectAll` is true.
154
+ * @default "Deselect all"
155
+ */
156
+ deselectAllLabel?: string;
116
157
  /**
117
158
  * When false, the built-in options list and backdrop are not shown and the control
118
159
  * does not open on click. Use with an external picker (e.g. grouped select) wired
package/web/index.d.ts CHANGED
@@ -11,6 +11,19 @@ interface MultiSelectOption {
11
11
  label: ReactNode;
12
12
  value: string | number;
13
13
  disabled?: boolean;
14
+ /**
15
+ * When `false`, this option is **locked**: once selected it cannot be
16
+ * removed. Its tag renders without a remove button, clicking the tag does
17
+ * nothing, toggling the option off in the dropdown is a no-op, the
18
+ * `extraClear` clear-all button leaves it in place, and select-all /
19
+ * deselect-all skips it.
20
+ *
21
+ * Unlike `disabled`, a locked option is **not** greyed out — use it for a
22
+ * required, default-selected value (e.g. a base language that must always
23
+ * stay selected) that should still look like a normal selection.
24
+ * @default true
25
+ */
26
+ removable?: boolean;
14
27
  }
15
28
  interface MultiSelectProps extends ThemeOverrideProps {
16
29
  /**
@@ -70,12 +83,14 @@ interface MultiSelectProps extends ThemeOverrideProps {
70
83
  */
71
84
  flexible?: boolean;
72
85
  /**
73
- * Switch on displaying a remove button in each tag.
86
+ * Switch on displaying a remove button in each tag. This is the
87
+ * component-wide default; an individual option can opt out with
88
+ * `MultiSelectOption.removable: false`.
74
89
  * @default true
75
90
  */
76
91
  removeTagsButtons?: boolean;
77
92
  /**
78
- * Add clear all button.
93
+ * Add clear all button. Options with `removable: false` are kept.
79
94
  * @default false
80
95
  */
81
96
  extraClear?: boolean;
@@ -113,6 +128,32 @@ interface MultiSelectProps extends ThemeOverrideProps {
113
128
  * @default "No results"
114
129
  */
115
130
  noOptionsMessage?: string;
131
+ /**
132
+ * When true, shows a select-all / deselect-all row at the top of the
133
+ * built-in dropdown (below the search input when `searchable`).
134
+ *
135
+ * Scope is **the options currently listed**: with `searchable` active and a
136
+ * search query typed, it applies only to the filtered options, matching what
137
+ * the user can see. Options with `disabled: true` are skipped, and options
138
+ * with `removable: false` are never deselected. The row flips to
139
+ * deselect-all once every selectable listed option is selected.
140
+ *
141
+ * Ignored when `dropdownMenu` is false.
142
+ * @default false
143
+ */
144
+ selectAll?: boolean;
145
+ /**
146
+ * Label of the select-all row. Only used when `selectAll` is true.
147
+ * @default "Select all"
148
+ */
149
+ selectAllLabel?: string;
150
+ /**
151
+ * Label of the select-all row once everything listed is selected, at which
152
+ * point activating it clears the listed selection. Only used when
153
+ * `selectAll` is true.
154
+ * @default "Deselect all"
155
+ */
156
+ deselectAllLabel?: string;
116
157
  /**
117
158
  * When false, the built-in options list and backdrop are not shown and the control
118
159
  * does not open on click. Use with an external picker (e.g. grouped select) wired