@haniffalab/cherita-react 1.3.0-dev.2025-06-04.d986a94b → 1.3.0-dev.2025-06-04.0123fe8a

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.
@@ -378,21 +378,23 @@ function ObsContinuousStats(_ref3) {
378
378
  }
379
379
 
380
380
  // @TODO: add bin controls
381
- // @TODO: add histogram
382
381
  function ContinuousObs(_ref4) {
383
382
  let {
384
383
  obs,
385
384
  toggleAll,
386
385
  toggleObs
387
386
  } = _ref4;
387
+ const settings = (0, _SettingsContext.useSettings)();
388
388
  const {
389
389
  isSliced
390
390
  } = (0, _FilterContext.useFilteredData)();
391
391
  const totalCounts = _lodash.default.sum(_lodash.default.values(obs.value_counts));
392
392
  const min = _lodash.default.min(_lodash.default.values(obs.codes));
393
393
  const max = _lodash.default.max(_lodash.default.values(obs.codes));
394
+ const obsHistograms = useObsHistogram(obs);
394
395
  const filteredObsData = useFilteredObsData(obs);
395
- const getDataAtIndex = index => {
396
+ const getDataAtIndex = (0, _react.useCallback)(index => {
397
+ var _obsHistograms$fetche2;
396
398
  return {
397
399
  value: obs.values[index],
398
400
  code: obs.codes[obs.values[index]],
@@ -402,13 +404,21 @@ function ContinuousObs(_ref4) {
402
404
  },
403
405
  isOmitted: _lodash.default.includes(obs.omit, obs.codes[obs.values[index]]),
404
406
  label: isNaN(obs.values[index]) ? "NaN" : getContinuousLabel(obs.codes[obs.values[index]], obs.bins.binEdges),
407
+ histogramData: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? {
408
+ data: (_obsHistograms$fetche2 = obsHistograms.fetchedData) === null || _obsHistograms$fetche2 === void 0 ? void 0 : _obsHistograms$fetche2[obs.values[index]],
409
+ isPending: obsHistograms.isPending,
410
+ altColor: isSliced
411
+ } : {
412
+ data: null,
413
+ isPending: false
414
+ },
405
415
  filteredStats: {
406
416
  value_counts: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts[obs.values[index]]) || 0,
407
417
  pct: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct[obs.values[index]]) || 0
408
418
  },
409
419
  isSliced: isSliced
410
420
  };
411
- };
421
+ }, [filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts, isSliced, obs.bins.binEdges, obs.codes, obs.omit, obs.value_counts, obs.values, obsHistograms.fetchedData, obsHistograms.isPending, settings.colorEncoding, totalCounts]);
412
422
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
413
423
  variant: "flush",
414
424
  className: "cherita-list"
@@ -425,7 +435,8 @@ function ContinuousObs(_ref4) {
425
435
  min: min,
426
436
  max: max,
427
437
  onChange: toggleObs,
428
- showColor: false
438
+ showColor: false,
439
+ estimateSize: 42
429
440
  })), /*#__PURE__*/_react.default.createElement(ObsContinuousStats, {
430
441
  obs: obs
431
442
  }));
@@ -19,6 +19,11 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
19
19
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
20
20
  const SettingsContext = exports.SettingsContext = /*#__PURE__*/(0, _react.createContext)(null);
21
21
  const SettingsDispatchContext = exports.SettingsDispatchContext = /*#__PURE__*/(0, _react.createContext)(null);
22
+
23
+ // @TODO: consider splitting constant values and dataset-resolved values
24
+ // e.g. store only obs name in selectedObs, and resolved obs data (counts, values, etc.) elsewhere
25
+ // e.g. store only var name in selectedVar, and resolved var data (index, matrix_index) elsewhere
26
+ // would simplify passing and validating defaultSettings and localSettings
22
27
  const initialSettings = {
23
28
  selectedObs: null,
24
29
  selectedVar: null,
@@ -67,13 +72,51 @@ const initialSettings = {
67
72
  categoricalMode: _constants.PSEUDOSPATIAL_CATEGORICAL_MODES.ACROSS.value
68
73
  }
69
74
  };
75
+
76
+ // validate on initialization and reducer
77
+ const validateSettings = settings => {
78
+ // make sure selectedVar is in vars
79
+ if (settings.selectedVar) {
80
+ const inVars = _lodash.default.some(settings.vars, v => v.name === settings.selectedVar.name);
81
+ if (!inVars) {
82
+ settings.vars = [...settings.vars, settings.selectedVar];
83
+ }
84
+ }
85
+
86
+ // make sure selectedMultiVar are in vars
87
+ if (settings.selectedMultiVar) {
88
+ const notInVars = _lodash.default.differenceBy(settings.selectedMultiVar, settings.vars, "name");
89
+ if (notInVars.length) {
90
+ settings.vars = [...settings.vars, ...notInVars];
91
+ }
92
+ }
93
+
94
+ // make sure there's a selectedVar if colorEncoding is VAR
95
+ if (settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR) {
96
+ if (!settings.selectedVar) {
97
+ settings.colorEncoding = null;
98
+ } else if (settings.selectedVar.isSet && !settings.selectedVar.vars.length) {
99
+ settings.selectedVar = null;
100
+ settings.colorEncoding = null;
101
+ }
102
+ }
103
+
104
+ // make sure there's a selectedObs if colorEncoding is OBS
105
+ if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
106
+ if (!settings.selectedObs) {
107
+ settings.colorEncoding = null;
108
+ }
109
+ }
110
+ return settings;
111
+ };
70
112
  const initializer = _ref => {
71
113
  let {
72
114
  canOverrideSettings,
73
115
  defaultSettings,
74
116
  localSettings
75
117
  } = _ref;
76
- return canOverrideSettings ? _lodash.default.assign({}, initialSettings, defaultSettings, localSettings) : _lodash.default.assign({}, initialSettings, defaultSettings);
118
+ const mergedSettings = canOverrideSettings ? _lodash.default.assign({}, initialSettings, defaultSettings, localSettings) : _lodash.default.assign({}, initialSettings, defaultSettings);
119
+ return validateSettings(mergedSettings);
77
120
  };
78
121
  function SettingsProvider(_ref2) {
79
122
  let {
@@ -140,77 +183,65 @@ function settingsReducer(settings, action) {
140
183
  }
141
184
  case "select.var":
142
185
  {
143
- if (settings.vars.find(v => _lodash.default.isEqual(v, action.var))) {
144
- return _objectSpread(_objectSpread({}, settings), {}, {
145
- selectedVar: action.var
146
- });
147
- } else {
148
- return _objectSpread(_objectSpread({}, settings), {}, {
149
- selectedVar: action.var,
150
- vars: [...settings.vars, action.var]
151
- });
152
- }
186
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
187
+ selectedVar: action.var
188
+ }));
153
189
  }
154
190
  case "select.multivar":
155
191
  {
156
- const vars = settings.vars.find(v => _lodash.default.isEqual(v, action.var)) ? settings.vars : [...settings.vars, action.var];
157
- if (settings.selectedMultiVar.find(v => _lodash.default.isEqual(v, action.var))) {
158
- return _objectSpread(_objectSpread({}, settings), {}, {
159
- vars: vars
160
- });
192
+ const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
193
+ if (inMultiVar) {
194
+ return validateSettings(_objectSpread({}, settings));
161
195
  } else {
162
- return _objectSpread(_objectSpread({}, settings), {}, {
163
- selectedMultiVar: [...settings.selectedMultiVar, action.var],
164
- vars: vars
165
- });
196
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
197
+ selectedMultiVar: [...settings.selectedMultiVar, action.var]
198
+ }));
166
199
  }
167
200
  }
168
201
  case "deselect.multivar":
169
202
  {
170
- return _objectSpread(_objectSpread({}, settings), {}, {
203
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
171
204
  selectedMultiVar: settings.selectedMultiVar.filter(v => v !== action.var.name)
172
- });
205
+ }));
173
206
  }
174
207
  case "toggle.multivar":
175
208
  {
176
209
  const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
177
210
  if (inMultiVar) {
178
- return _objectSpread(_objectSpread({}, settings), {}, {
211
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
179
212
  selectedMultiVar: settings.selectedMultiVar.filter(v => v.name !== action.var.name)
180
- });
213
+ }));
181
214
  } else {
182
- return _objectSpread(_objectSpread({}, settings), {}, {
215
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
183
216
  selectedMultiVar: [...settings.selectedMultiVar, action.var]
184
- });
217
+ }));
185
218
  }
186
219
  }
187
220
  case "set.colorEncoding":
188
221
  {
189
- return _objectSpread(_objectSpread({}, settings), {}, {
222
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
190
223
  colorEncoding: action.value
191
- });
224
+ }));
192
225
  }
193
226
  case "reset.vars":
194
227
  {
195
- return _objectSpread(_objectSpread({}, settings), {}, {
228
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
196
229
  vars: [],
197
230
  selectedVar: null,
198
231
  selectedMultiVar: []
199
- });
232
+ }));
200
233
  }
201
234
  case "reset.multiVar":
202
235
  {
203
- return _objectSpread(_objectSpread({}, settings), {}, {
204
- selectedMultiVar: [],
205
- colorEncoding: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? null : settings.colorEncoding
206
- });
236
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
237
+ selectedMultiVar: []
238
+ }));
207
239
  }
208
240
  case "reset.var":
209
241
  {
210
- return _objectSpread(_objectSpread({}, settings), {}, {
211
- selectedVar: null,
212
- colorEncoding: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? null : settings.colorEncoding
213
- });
242
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
243
+ selectedVar: null
244
+ }));
214
245
  }
215
246
  case "add.var":
216
247
  {
@@ -227,11 +258,11 @@ function settingsReducer(settings, action) {
227
258
  var _settings$selectedVar;
228
259
  const selectedVar = ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name) === action.var.name ? null : settings.selectedVar;
229
260
  const selectedMultiVar = settings.selectedMultiVar.filter(v => v.name !== action.var.name);
230
- return _objectSpread(_objectSpread({}, settings), {}, {
261
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
231
262
  vars: settings.vars.filter(a => a.name !== action.var.name),
232
263
  selectedVar: selectedVar,
233
264
  selectedMultiVar: selectedMultiVar
234
- });
265
+ }));
235
266
  }
236
267
  case "add.varSet.var":
237
268
  {
@@ -265,11 +296,11 @@ function settingsReducer(settings, action) {
265
296
  return v;
266
297
  }
267
298
  });
268
- return _objectSpread(_objectSpread({}, settings), {}, {
299
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
269
300
  vars: vars,
270
301
  selectedVar: selectedVar,
271
302
  selectedMultiVar: selectedMultiVar
272
- });
303
+ }));
273
304
  }
274
305
  }
275
306
  case "remove.varSet.var":
@@ -296,11 +327,11 @@ function settingsReducer(settings, action) {
296
327
  var _settings$selectedVar3;
297
328
  const selectedVar = ((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.name) === action.varSet.name ? null : settings.selectedVar;
298
329
  const selectedMultiVar = settings.selectedMultiVar.filter(v => v.name !== action.varSet.name);
299
- return _objectSpread(_objectSpread({}, settings), {}, {
330
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
300
331
  vars: vars,
301
332
  selectedVar: selectedVar,
302
333
  selectedMultiVar: selectedMultiVar
303
- });
334
+ }));
304
335
  } else {
305
336
  var _settings$selectedVar4;
306
337
  // Update selected if varSet is selected
@@ -316,11 +347,11 @@ function settingsReducer(settings, action) {
316
347
  return v;
317
348
  }
318
349
  });
319
- return _objectSpread(_objectSpread({}, settings), {}, {
350
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
320
351
  vars: vars,
321
352
  selectedVar: selectedVar,
322
353
  selectedMultiVar: selectedMultiVar
323
- });
354
+ }));
324
355
  }
325
356
  }
326
357
  }
@@ -370,21 +370,23 @@ function ObsContinuousStats(_ref3) {
370
370
  }
371
371
 
372
372
  // @TODO: add bin controls
373
- // @TODO: add histogram
374
373
  export function ContinuousObs(_ref4) {
375
374
  let {
376
375
  obs,
377
376
  toggleAll,
378
377
  toggleObs
379
378
  } = _ref4;
379
+ const settings = useSettings();
380
380
  const {
381
381
  isSliced
382
382
  } = useFilteredData();
383
383
  const totalCounts = _.sum(_.values(obs.value_counts));
384
384
  const min = _.min(_.values(obs.codes));
385
385
  const max = _.max(_.values(obs.codes));
386
+ const obsHistograms = useObsHistogram(obs);
386
387
  const filteredObsData = useFilteredObsData(obs);
387
- const getDataAtIndex = index => {
388
+ const getDataAtIndex = useCallback(index => {
389
+ var _obsHistograms$fetche2;
388
390
  return {
389
391
  value: obs.values[index],
390
392
  code: obs.codes[obs.values[index]],
@@ -394,13 +396,21 @@ export function ContinuousObs(_ref4) {
394
396
  },
395
397
  isOmitted: _.includes(obs.omit, obs.codes[obs.values[index]]),
396
398
  label: isNaN(obs.values[index]) ? "NaN" : getContinuousLabel(obs.codes[obs.values[index]], obs.bins.binEdges),
399
+ histogramData: settings.colorEncoding === COLOR_ENCODINGS.VAR ? {
400
+ data: (_obsHistograms$fetche2 = obsHistograms.fetchedData) === null || _obsHistograms$fetche2 === void 0 ? void 0 : _obsHistograms$fetche2[obs.values[index]],
401
+ isPending: obsHistograms.isPending,
402
+ altColor: isSliced
403
+ } : {
404
+ data: null,
405
+ isPending: false
406
+ },
397
407
  filteredStats: {
398
408
  value_counts: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts[obs.values[index]]) || 0,
399
409
  pct: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct[obs.values[index]]) || 0
400
410
  },
401
411
  isSliced: isSliced
402
412
  };
403
- };
413
+ }, [filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts, isSliced, obs.bins.binEdges, obs.codes, obs.omit, obs.value_counts, obs.values, obsHistograms.fetchedData, obsHistograms.isPending, settings.colorEncoding, totalCounts]);
404
414
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ListGroup, {
405
415
  variant: "flush",
406
416
  className: "cherita-list"
@@ -417,7 +427,8 @@ export function ContinuousObs(_ref4) {
417
427
  min: min,
418
428
  max: max,
419
429
  onChange: toggleObs,
420
- showColor: false
430
+ showColor: false,
431
+ estimateSize: 42
421
432
  })), /*#__PURE__*/React.createElement(ObsContinuousStats, {
422
433
  obs: obs
423
434
  }));
@@ -8,6 +8,11 @@ import _ from "lodash";
8
8
  import { COLOR_ENCODINGS, DOTPLOT_SCALES, LOCAL_STORAGE_KEY, MATRIXPLOT_SCALES, OBS_TYPES, PSEUDOSPATIAL_CATEGORICAL_MODES, VAR_SORT, VAR_SORT_ORDER, VIOLINPLOT_SCALES } from "../constants/constants";
9
9
  export const SettingsContext = /*#__PURE__*/createContext(null);
10
10
  export const SettingsDispatchContext = /*#__PURE__*/createContext(null);
11
+
12
+ // @TODO: consider splitting constant values and dataset-resolved values
13
+ // e.g. store only obs name in selectedObs, and resolved obs data (counts, values, etc.) elsewhere
14
+ // e.g. store only var name in selectedVar, and resolved var data (index, matrix_index) elsewhere
15
+ // would simplify passing and validating defaultSettings and localSettings
11
16
  const initialSettings = {
12
17
  selectedObs: null,
13
18
  selectedVar: null,
@@ -56,13 +61,51 @@ const initialSettings = {
56
61
  categoricalMode: PSEUDOSPATIAL_CATEGORICAL_MODES.ACROSS.value
57
62
  }
58
63
  };
64
+
65
+ // validate on initialization and reducer
66
+ const validateSettings = settings => {
67
+ // make sure selectedVar is in vars
68
+ if (settings.selectedVar) {
69
+ const inVars = _.some(settings.vars, v => v.name === settings.selectedVar.name);
70
+ if (!inVars) {
71
+ settings.vars = [...settings.vars, settings.selectedVar];
72
+ }
73
+ }
74
+
75
+ // make sure selectedMultiVar are in vars
76
+ if (settings.selectedMultiVar) {
77
+ const notInVars = _.differenceBy(settings.selectedMultiVar, settings.vars, "name");
78
+ if (notInVars.length) {
79
+ settings.vars = [...settings.vars, ...notInVars];
80
+ }
81
+ }
82
+
83
+ // make sure there's a selectedVar if colorEncoding is VAR
84
+ if (settings.colorEncoding === COLOR_ENCODINGS.VAR) {
85
+ if (!settings.selectedVar) {
86
+ settings.colorEncoding = null;
87
+ } else if (settings.selectedVar.isSet && !settings.selectedVar.vars.length) {
88
+ settings.selectedVar = null;
89
+ settings.colorEncoding = null;
90
+ }
91
+ }
92
+
93
+ // make sure there's a selectedObs if colorEncoding is OBS
94
+ if (settings.colorEncoding === COLOR_ENCODINGS.OBS) {
95
+ if (!settings.selectedObs) {
96
+ settings.colorEncoding = null;
97
+ }
98
+ }
99
+ return settings;
100
+ };
59
101
  const initializer = _ref => {
60
102
  let {
61
103
  canOverrideSettings,
62
104
  defaultSettings,
63
105
  localSettings
64
106
  } = _ref;
65
- return canOverrideSettings ? _.assign({}, initialSettings, defaultSettings, localSettings) : _.assign({}, initialSettings, defaultSettings);
107
+ const mergedSettings = canOverrideSettings ? _.assign({}, initialSettings, defaultSettings, localSettings) : _.assign({}, initialSettings, defaultSettings);
108
+ return validateSettings(mergedSettings);
66
109
  };
67
110
  export function SettingsProvider(_ref2) {
68
111
  let {
@@ -129,77 +172,65 @@ function settingsReducer(settings, action) {
129
172
  }
130
173
  case "select.var":
131
174
  {
132
- if (settings.vars.find(v => _.isEqual(v, action.var))) {
133
- return _objectSpread(_objectSpread({}, settings), {}, {
134
- selectedVar: action.var
135
- });
136
- } else {
137
- return _objectSpread(_objectSpread({}, settings), {}, {
138
- selectedVar: action.var,
139
- vars: [...settings.vars, action.var]
140
- });
141
- }
175
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
176
+ selectedVar: action.var
177
+ }));
142
178
  }
143
179
  case "select.multivar":
144
180
  {
145
- const vars = settings.vars.find(v => _.isEqual(v, action.var)) ? settings.vars : [...settings.vars, action.var];
146
- if (settings.selectedMultiVar.find(v => _.isEqual(v, action.var))) {
147
- return _objectSpread(_objectSpread({}, settings), {}, {
148
- vars: vars
149
- });
181
+ const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
182
+ if (inMultiVar) {
183
+ return validateSettings(_objectSpread({}, settings));
150
184
  } else {
151
- return _objectSpread(_objectSpread({}, settings), {}, {
152
- selectedMultiVar: [...settings.selectedMultiVar, action.var],
153
- vars: vars
154
- });
185
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
186
+ selectedMultiVar: [...settings.selectedMultiVar, action.var]
187
+ }));
155
188
  }
156
189
  }
157
190
  case "deselect.multivar":
158
191
  {
159
- return _objectSpread(_objectSpread({}, settings), {}, {
192
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
160
193
  selectedMultiVar: settings.selectedMultiVar.filter(v => v !== action.var.name)
161
- });
194
+ }));
162
195
  }
163
196
  case "toggle.multivar":
164
197
  {
165
198
  const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
166
199
  if (inMultiVar) {
167
- return _objectSpread(_objectSpread({}, settings), {}, {
200
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
168
201
  selectedMultiVar: settings.selectedMultiVar.filter(v => v.name !== action.var.name)
169
- });
202
+ }));
170
203
  } else {
171
- return _objectSpread(_objectSpread({}, settings), {}, {
204
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
172
205
  selectedMultiVar: [...settings.selectedMultiVar, action.var]
173
- });
206
+ }));
174
207
  }
175
208
  }
176
209
  case "set.colorEncoding":
177
210
  {
178
- return _objectSpread(_objectSpread({}, settings), {}, {
211
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
179
212
  colorEncoding: action.value
180
- });
213
+ }));
181
214
  }
182
215
  case "reset.vars":
183
216
  {
184
- return _objectSpread(_objectSpread({}, settings), {}, {
217
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
185
218
  vars: [],
186
219
  selectedVar: null,
187
220
  selectedMultiVar: []
188
- });
221
+ }));
189
222
  }
190
223
  case "reset.multiVar":
191
224
  {
192
- return _objectSpread(_objectSpread({}, settings), {}, {
193
- selectedMultiVar: [],
194
- colorEncoding: settings.colorEncoding === COLOR_ENCODINGS.VAR ? null : settings.colorEncoding
195
- });
225
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
226
+ selectedMultiVar: []
227
+ }));
196
228
  }
197
229
  case "reset.var":
198
230
  {
199
- return _objectSpread(_objectSpread({}, settings), {}, {
200
- selectedVar: null,
201
- colorEncoding: settings.colorEncoding === COLOR_ENCODINGS.VAR ? null : settings.colorEncoding
202
- });
231
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
232
+ selectedVar: null
233
+ }));
203
234
  }
204
235
  case "add.var":
205
236
  {
@@ -216,11 +247,11 @@ function settingsReducer(settings, action) {
216
247
  var _settings$selectedVar;
217
248
  const selectedVar = ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name) === action.var.name ? null : settings.selectedVar;
218
249
  const selectedMultiVar = settings.selectedMultiVar.filter(v => v.name !== action.var.name);
219
- return _objectSpread(_objectSpread({}, settings), {}, {
250
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
220
251
  vars: settings.vars.filter(a => a.name !== action.var.name),
221
252
  selectedVar: selectedVar,
222
253
  selectedMultiVar: selectedMultiVar
223
- });
254
+ }));
224
255
  }
225
256
  case "add.varSet.var":
226
257
  {
@@ -254,11 +285,11 @@ function settingsReducer(settings, action) {
254
285
  return v;
255
286
  }
256
287
  });
257
- return _objectSpread(_objectSpread({}, settings), {}, {
288
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
258
289
  vars: vars,
259
290
  selectedVar: selectedVar,
260
291
  selectedMultiVar: selectedMultiVar
261
- });
292
+ }));
262
293
  }
263
294
  }
264
295
  case "remove.varSet.var":
@@ -285,11 +316,11 @@ function settingsReducer(settings, action) {
285
316
  var _settings$selectedVar3;
286
317
  const selectedVar = ((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.name) === action.varSet.name ? null : settings.selectedVar;
287
318
  const selectedMultiVar = settings.selectedMultiVar.filter(v => v.name !== action.varSet.name);
288
- return _objectSpread(_objectSpread({}, settings), {}, {
319
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
289
320
  vars: vars,
290
321
  selectedVar: selectedVar,
291
322
  selectedMultiVar: selectedMultiVar
292
- });
323
+ }));
293
324
  } else {
294
325
  var _settings$selectedVar4;
295
326
  // Update selected if varSet is selected
@@ -305,11 +336,11 @@ function settingsReducer(settings, action) {
305
336
  return v;
306
337
  }
307
338
  });
308
- return _objectSpread(_objectSpread({}, settings), {}, {
339
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
309
340
  vars: vars,
310
341
  selectedVar: selectedVar,
311
342
  selectedMultiVar: selectedMultiVar
312
- });
343
+ }));
313
344
  }
314
345
  }
315
346
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haniffalab/cherita-react",
3
- "version": "1.3.0-dev.2025-06-04.d986a94b",
3
+ "version": "1.3.0-dev.2025-06-04.0123fe8a",
4
4
  "author": "Haniffa Lab",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -126,5 +126,5 @@
126
126
  "url": "https://github.com/haniffalab/cherita-react/issues"
127
127
  },
128
128
  "homepage": "https://github.com/haniffalab/cherita-react#readme",
129
- "prereleaseSha": "d986a94bdc972b9311bb9b027e3d08030fc30d79"
129
+ "prereleaseSha": "0123fe8ae9b9e8cac1b41bc7c5f201a4bbec8214"
130
130
  }