@jobber/components 9.3.0 → 9.5.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.
Files changed (194) hide show
  1. package/dist/Autocomplete/index.cjs +0 -1
  2. package/dist/Autocomplete/index.mjs +0 -1
  3. package/dist/Card/index.cjs +7 -7
  4. package/dist/Card/index.mjs +7 -7
  5. package/dist/Chip/index.cjs +0 -1
  6. package/dist/Chip/index.mjs +0 -1
  7. package/dist/Chips/InternalChipDismissible/hooks/index.cjs +0 -1
  8. package/dist/Chips/InternalChipDismissible/hooks/index.mjs +0 -1
  9. package/dist/Chips/InternalChipDismissible/index.cjs +0 -1
  10. package/dist/Chips/InternalChipDismissible/index.mjs +0 -1
  11. package/dist/Chips/index.cjs +0 -1
  12. package/dist/Chips/index.mjs +0 -1
  13. package/dist/ComboboxChipRemove-cjs.js +181 -184
  14. package/dist/ComboboxChipRemove-es.js +4 -7
  15. package/dist/ConfirmationModal/index.cjs +0 -1
  16. package/dist/ConfirmationModal/index.mjs +0 -1
  17. package/dist/DataDump/DataDump.d.ts +1 -1
  18. package/dist/DataDump/DataDump.messages.d.ts +6 -0
  19. package/dist/DataDump/index.cjs +9 -9
  20. package/dist/DataDump/index.mjs +9 -9
  21. package/dist/DataDump-cjs.js +11 -1
  22. package/dist/DataDump-es.js +11 -1
  23. package/dist/DataList/components/DataListActions/index.cjs +0 -1
  24. package/dist/DataList/components/DataListActions/index.mjs +0 -1
  25. package/dist/DataList/components/DataListBulkActions/index.cjs +0 -1
  26. package/dist/DataList/components/DataListBulkActions/index.mjs +0 -1
  27. package/dist/DataList/components/DataListFilters/components/DataListSort/index.cjs +0 -1
  28. package/dist/DataList/components/DataListFilters/components/DataListSort/index.mjs +0 -1
  29. package/dist/DataList/components/DataListFilters/index.cjs +0 -1
  30. package/dist/DataList/components/DataListFilters/index.mjs +0 -1
  31. package/dist/DataList/components/DataListHeader/index.cjs +0 -1
  32. package/dist/DataList/components/DataListHeader/index.mjs +0 -1
  33. package/dist/DataList/components/DataListItem/index.cjs +0 -1
  34. package/dist/DataList/components/DataListItem/index.mjs +0 -1
  35. package/dist/DataList/components/DataListItemActions/index.cjs +0 -1
  36. package/dist/DataList/components/DataListItemActions/index.mjs +0 -1
  37. package/dist/DataList/components/DataListItemActionsOverflow/index.cjs +0 -1
  38. package/dist/DataList/components/DataListItemActionsOverflow/index.mjs +0 -1
  39. package/dist/DataList/components/DataListItems/index.cjs +0 -1
  40. package/dist/DataList/components/DataListItems/index.mjs +0 -1
  41. package/dist/DataList/components/DataListLayout/index.cjs +0 -1
  42. package/dist/DataList/components/DataListLayout/index.mjs +0 -1
  43. package/dist/DataList/components/DataListLayoutActions/index.cjs +0 -1
  44. package/dist/DataList/components/DataListLayoutActions/index.mjs +0 -1
  45. package/dist/DataList/index.cjs +0 -1
  46. package/dist/DataList/index.mjs +0 -1
  47. package/dist/DataTable/DataTable.messages.d.ts +22 -0
  48. package/dist/DataTable/index.cjs +2 -2
  49. package/dist/DataTable/index.mjs +2 -2
  50. package/dist/DataTable-cjs.js +34 -5
  51. package/dist/DataTable-es.js +34 -5
  52. package/dist/DatePicker/index.cjs +0 -2
  53. package/dist/DatePicker/index.mjs +0 -2
  54. package/dist/DatePicker-cjs.js +19 -18
  55. package/dist/DatePicker-es.js +2 -1
  56. package/dist/Dialog/index.cjs +11 -6
  57. package/dist/Dialog/index.mjs +11 -6
  58. package/dist/DrawerDescription-cjs.js +7 -8
  59. package/dist/DrawerDescription-es.js +1 -2
  60. package/dist/DrawerTitle-cjs.js +4 -4
  61. package/dist/DrawerTitle-es.js +1 -1
  62. package/dist/FeatureSwitch/FeatureSwitch.messages.d.ts +10 -0
  63. package/dist/FeatureSwitch/index.cjs +2 -0
  64. package/dist/FeatureSwitch/index.mjs +2 -0
  65. package/dist/FeatureSwitch-cjs.js +15 -2
  66. package/dist/FeatureSwitch-es.js +15 -2
  67. package/dist/FieldDescription-cjs.js +49 -49
  68. package/dist/FieldDescription-es.js +2 -2
  69. package/dist/FilterPicker/components/FilterPickerActivator/index.cjs +0 -1
  70. package/dist/FilterPicker/components/FilterPickerActivator/index.mjs +0 -1
  71. package/dist/FilterPicker/components/FilterPickerContent/index.cjs +0 -1
  72. package/dist/FilterPicker/components/FilterPickerContent/index.mjs +0 -1
  73. package/dist/FilterPicker/components/FilterPickerTrigger/index.cjs +0 -1
  74. package/dist/FilterPicker/components/FilterPickerTrigger/index.mjs +0 -1
  75. package/dist/FilterPicker/index.cjs +0 -1
  76. package/dist/FilterPicker/index.mjs +0 -1
  77. package/dist/FormatFile/FormatFile.messages.d.ts +18 -0
  78. package/dist/FormatFile/index.cjs +2 -3
  79. package/dist/FormatFile/index.mjs +2 -3
  80. package/dist/FormatFile-cjs.js +24 -2
  81. package/dist/FormatFile-es.js +24 -2
  82. package/dist/Gallery/index.cjs +0 -1
  83. package/dist/Gallery/index.mjs +0 -1
  84. package/dist/HelperText-cjs.js +3 -2
  85. package/dist/HelperText-es.js +3 -2
  86. package/dist/InputDate/index.cjs +0 -2
  87. package/dist/InputDate/index.mjs +0 -2
  88. package/dist/InputNumber/InputNumber.d.ts +75 -5
  89. package/dist/InputNumber/index.cjs +27 -3
  90. package/dist/InputNumber/index.d.ts +2 -2
  91. package/dist/InputNumber/index.mjs +27 -3
  92. package/dist/{primitives/InputNumberExperimental → InputNumber}/types.d.ts +48 -35
  93. package/dist/InputNumber-cjs.js +267 -4986
  94. package/dist/InputNumber-es.js +268 -4987
  95. package/dist/LightBox/index.cjs +0 -1
  96. package/dist/LightBox/index.mjs +0 -1
  97. package/dist/Menu/index.cjs +7 -7
  98. package/dist/Menu/index.mjs +7 -7
  99. package/dist/Menu-cjs.js +5 -1
  100. package/dist/Menu-es.js +5 -2
  101. package/dist/MenuSubmenuTrigger-cjs.js +142 -143
  102. package/dist/MenuSubmenuTrigger-es.js +5 -6
  103. package/dist/Modal/index.cjs +0 -1
  104. package/dist/Modal/index.mjs +0 -1
  105. package/dist/NumberFieldInput-cjs.js +63 -63
  106. package/dist/NumberFieldInput-es.js +5 -5
  107. package/dist/Page/index.cjs +18 -19
  108. package/dist/Page/index.mjs +18 -19
  109. package/dist/Page-cjs.js +6 -3
  110. package/dist/Page-es.js +6 -3
  111. package/dist/Popover/index.cjs +0 -1
  112. package/dist/Popover/index.mjs +0 -1
  113. package/dist/ProgressBar/ProgressBar.messages.d.ts +6 -0
  114. package/dist/ProgressBar/index.cjs +2 -0
  115. package/dist/ProgressBar/index.mjs +2 -0
  116. package/dist/ProgressBar-cjs.js +13 -1
  117. package/dist/ProgressBar-es.js +13 -1
  118. package/dist/ScrollAreaViewport-cjs.js +119 -121
  119. package/dist/ScrollAreaViewport-es.js +3 -5
  120. package/dist/Select/index.cjs +3 -9
  121. package/dist/Select/index.mjs +3 -9
  122. package/dist/SelectGroupLabel-cjs.js +117 -107
  123. package/dist/SelectGroupLabel-es.js +20 -12
  124. package/dist/Toast/Toast.messages.d.ts +6 -0
  125. package/dist/Toast/index.cjs +3 -1
  126. package/dist/Toast/index.mjs +3 -1
  127. package/dist/Toast/showToast.d.ts +12 -1
  128. package/dist/Tooltip/index.cjs +0 -1
  129. package/dist/Tooltip/index.mjs +0 -1
  130. package/dist/dialogReturnFocus-cjs.js +4 -1
  131. package/dist/dialogReturnFocus-es.js +4 -1
  132. package/dist/docs/DataDump/DataDump.md +1 -1
  133. package/dist/docs/InputNumber/InputNumber.md +564 -56
  134. package/dist/docs/Page/Page.md +1 -1
  135. package/dist/docs/index.md +0 -1
  136. package/dist/floating-ui.react-cjs.js +34 -35
  137. package/dist/floating-ui.react-dom-cjs.js +64 -65
  138. package/dist/floating-ui.react-dom-es.js +1 -2
  139. package/dist/floating-ui.react-es.js +1 -2
  140. package/dist/floating-ui.utils-cjs.js +183 -0
  141. package/dist/floating-ui.utils-es.js +165 -1
  142. package/dist/index.cjs +10 -15
  143. package/dist/index.mjs +10 -15
  144. package/dist/primitives/BottomSheet/index.cjs +2 -5
  145. package/dist/primitives/BottomSheet/index.mjs +2 -5
  146. package/dist/primitives/ComboboxPrimitive/index.cjs +3 -7
  147. package/dist/primitives/ComboboxPrimitive/index.mjs +3 -7
  148. package/dist/primitives/HelperText/HelperText.d.ts +4 -1
  149. package/dist/primitives/HelperText/index.cjs +1 -1
  150. package/dist/primitives/HelperText/index.mjs +1 -1
  151. package/dist/primitives/SelectPrimitive/index.cjs +3 -9
  152. package/dist/primitives/SelectPrimitive/index.mjs +3 -9
  153. package/dist/primitives/index.cjs +2 -16
  154. package/dist/primitives/index.d.ts +0 -2
  155. package/dist/primitives/index.mjs +2 -15
  156. package/dist/scrollEdges-cjs.js +6 -2
  157. package/dist/scrollEdges-es.js +5 -2
  158. package/dist/sharedHelpers/i18n/renderWithLocale.d.ts +11 -0
  159. package/dist/showToast-cjs.js +20 -6
  160. package/dist/showToast-es.js +20 -6
  161. package/dist/styles.css +573 -902
  162. package/dist/unstyledPrimitives/index.cjs +105 -111
  163. package/dist/unstyledPrimitives/index.mjs +5 -11
  164. package/dist/useCompositeListItem-cjs.js +516 -90
  165. package/dist/useCompositeListItem-es.js +407 -6
  166. package/dist/useLabel-cjs.js +10 -10
  167. package/dist/useLabel-es.js +3 -3
  168. package/dist/useRenderElement-es.js +1 -1
  169. package/dist/useScrollLock-cjs.js +1332 -203
  170. package/dist/useScrollLock-es.js +1068 -5
  171. package/dist/utils/meta/meta.json +12 -0
  172. package/package.json +2 -3
  173. package/dist/InputNumber/InputNumber.types.d.ts +0 -20
  174. package/dist/InputNumberExperimental-cjs.js +0 -277
  175. package/dist/InputNumberExperimental-es.js +0 -275
  176. package/dist/clamp-cjs.js +0 -7
  177. package/dist/clamp-es.js +0 -5
  178. package/dist/clsx-cjs.js +0 -5
  179. package/dist/clsx-es.js +0 -3
  180. package/dist/docs/InputNumberExperimental/InputNumberExperimental.md +0 -578
  181. package/dist/floating-ui.utils.dom-cjs.js +0 -185
  182. package/dist/floating-ui.utils.dom-es.js +0 -165
  183. package/dist/isElementDisabled-cjs.js +0 -40
  184. package/dist/isElementDisabled-es.js +0 -18
  185. package/dist/primitives/InputNumberExperimental/InputNumberExperimental.d.ts +0 -77
  186. package/dist/primitives/InputNumberExperimental/index.cjs +0 -30
  187. package/dist/primitives/InputNumberExperimental/index.d.ts +0 -2
  188. package/dist/primitives/InputNumberExperimental/index.mjs +0 -24
  189. package/dist/resolveAriaLabelledBy-cjs.js +0 -200
  190. package/dist/resolveAriaLabelledBy-es.js +0 -166
  191. package/dist/useButton-cjs.js +0 -1164
  192. package/dist/useButton-es.js +0 -1071
  193. package/dist/useLabelableId-cjs.js +0 -278
  194. package/dist/useLabelableId-es.js +0 -247
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var useButton = require('./useButton-cjs.js');
5
- var useLabelableId = require('./useLabelableId-cjs.js');
4
+ var useScrollLock = require('./useScrollLock-cjs.js');
5
+ var useCompositeListItem = require('./useCompositeListItem-cjs.js');
6
6
  var useRenderElement = require('./useRenderElement-cjs.js');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
8
  var useLabel = require('./useLabel-cjs.js');
@@ -46,7 +46,7 @@ function useFieldsetRootContext(optional = false) {
46
46
  }
47
47
 
48
48
  const LabelableProvider = function LabelableProvider(props) {
49
- const defaultId = useButton.useBaseUiId();
49
+ const defaultId = useScrollLock.useBaseUiId();
50
50
  const initialControlId = props.controlId === undefined ? defaultId : props.controlId;
51
51
  const [controlId, setControlIdState] = React__namespace.useState(initialControlId);
52
52
  const [labelId, setLabelId] = React__namespace.useState(props.labelId);
@@ -54,8 +54,8 @@ const LabelableProvider = function LabelableProvider(props) {
54
54
  const registrationsRef = useRenderElement.useRefWithInit(() => new Map());
55
55
  const {
56
56
  messageIds: parentMessageIds
57
- } = useLabelableId.useLabelableContext();
58
- const registerControlId = useButton.useStableCallback((source, nextId) => {
57
+ } = useCompositeListItem.useLabelableContext();
58
+ const registerControlId = useScrollLock.useStableCallback((source, nextId) => {
59
59
  const registrations = registrationsRef.current;
60
60
  if (nextId === undefined) {
61
61
  registrations.delete(source);
@@ -99,7 +99,7 @@ const LabelableProvider = function LabelableProvider(props) {
99
99
  setMessageIds,
100
100
  getDescriptionProps
101
101
  }), [controlId, registerControlId, labelId, setLabelId, messageIds, setMessageIds, getDescriptionProps]);
102
- return /*#__PURE__*/jsxRuntime.jsx(useLabelableId.LabelableContext.Provider, {
102
+ return /*#__PURE__*/jsxRuntime.jsx(useCompositeListItem.LabelableContext.Provider, {
103
103
  value: contextValue,
104
104
  children: props.children
105
105
  });
@@ -120,7 +120,7 @@ function getCombinedFieldValidityData(validityData, invalid) {
120
120
  };
121
121
  }
122
122
 
123
- const validityKeys = Object.keys(useLabelableId.DEFAULT_VALIDITY_STATE);
123
+ const validityKeys = Object.keys(useCompositeListItem.DEFAULT_VALIDITY_STATE);
124
124
  function isOnlyValueMissing(state) {
125
125
  if (!state || state.valid || !state.valueMissing) {
126
126
  return false;
@@ -171,7 +171,7 @@ function clearCustomValidity(element, inputs) {
171
171
  function useFieldValidation(params) {
172
172
  const {
173
173
  formRef
174
- } = useLabelableId.useFormContext();
174
+ } = useCompositeListItem.useFormContext();
175
175
  const {
176
176
  setValidityData,
177
177
  validate,
@@ -186,8 +186,8 @@ function useFieldValidation(params) {
186
186
  const {
187
187
  controlId,
188
188
  getDescriptionProps
189
- } = useLabelableId.useLabelableContext();
190
- const timeout = useButton.useTimeout();
189
+ } = useCompositeListItem.useLabelableContext();
190
+ const timeout = useScrollLock.useTimeout();
191
191
  const inputRef = React__namespace.useRef(null);
192
192
  const registeredInputs = useRenderElement.useRefWithInit(() => new Set()).current;
193
193
  const validationCommitIdRef = React__namespace.useRef(0);
@@ -203,7 +203,7 @@ function useFieldValidation(params) {
203
203
  registeredInputs.delete(element);
204
204
  };
205
205
  }, [registeredInputs]);
206
- const commit = useButton.useStableCallback(async (value, revalidate = false) => {
206
+ const commit = useScrollLock.useStableCallback(async (value, revalidate = false) => {
207
207
  // A field can own several inputs (a checkbox group), but only the last-mounted one wins the shared
208
208
  // `inputRef`. Validate against the registry instead so every input counts; `inputRef` is the
209
209
  // fallback only when no registered input applies (none registered, or all of them disabled).
@@ -240,7 +240,7 @@ function useFieldValidation(params) {
240
240
  const nextValidityData = {
241
241
  value,
242
242
  state: {
243
- ...useLabelableId.DEFAULT_VALIDITY_STATE,
243
+ ...useCompositeListItem.DEFAULT_VALIDITY_STATE,
244
244
  valid: true
245
245
  },
246
246
  error: '',
@@ -361,7 +361,7 @@ function useFieldValidation(params) {
361
361
  updateRegisteredFieldValidity(nextValidityData);
362
362
  setValidityData(nextValidityData);
363
363
  });
364
- const change = useButton.useStableCallback(value => {
364
+ const change = useScrollLock.useStableCallback(value => {
365
365
  timeout.clear();
366
366
  const validateOnChange = shouldValidateOnChange();
367
367
  if (validateOnChange && value !== '' && validationDebounceTime) {
@@ -398,11 +398,11 @@ function useFieldControlRegistration(params) {
398
398
  } = params;
399
399
  const {
400
400
  formRef
401
- } = useLabelableId.useFormContext();
401
+ } = useCompositeListItem.useFormContext();
402
402
  const activeFieldControlSourceRef = React__namespace.useRef(null);
403
403
  const registrationRef = React__namespace.useRef(null);
404
404
  const fallbackControlRef = React__namespace.useRef(null);
405
- const getValueForForm = useButton.useStableCallback(() => {
405
+ const getValueForForm = useScrollLock.useStableCallback(() => {
406
406
  const registration = registrationRef.current;
407
407
  if (!registration) {
408
408
  return undefined;
@@ -415,7 +415,7 @@ function useFieldControlRegistration(params) {
415
415
  function getRegistrationValue(registration) {
416
416
  return registration.value === undefined ? getValueForForm() : registration.value;
417
417
  }
418
- const validate = useButton.useStableCallback(() => {
418
+ const validate = useScrollLock.useStableCallback(() => {
419
419
  const registration = registrationRef.current;
420
420
  markedDirtyRef.current = true;
421
421
  if (!registration) {
@@ -455,7 +455,7 @@ function useFieldControlRegistration(params) {
455
455
  }));
456
456
  }
457
457
  }
458
- useButton.useIsoLayoutEffect(() => {
458
+ useScrollLock.useIsoLayoutEffect(() => {
459
459
  const registration = registrationRef.current;
460
460
  if (!registration || !registration.id) {
461
461
  return;
@@ -469,7 +469,7 @@ function useFieldControlRegistration(params) {
469
469
  validate
470
470
  });
471
471
  }, [formRef, getValueForForm, invalid, name, setRegisteredFieldName, validate, validityData]);
472
- useButton.useIsoLayoutEffect(() => {
472
+ useScrollLock.useIsoLayoutEffect(() => {
473
473
  const fields = formRef.current.fields;
474
474
  return () => {
475
475
  const id = registrationRef.current?.id;
@@ -478,7 +478,7 @@ function useFieldControlRegistration(params) {
478
478
  }
479
479
  };
480
480
  }, [formRef]);
481
- const register = useButton.useStableCallback((source, registration) => {
481
+ const register = useScrollLock.useStableCallback((source, registration) => {
482
482
  if (!registration) {
483
483
  if (activeFieldControlSourceRef.current === source) {
484
484
  activeFieldControlSourceRef.current = null;
@@ -510,7 +510,7 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
510
510
  errors,
511
511
  validationMode: formValidationMode,
512
512
  submitAttemptedRef
513
- } = useLabelableId.useFormContext();
513
+ } = useCompositeListItem.useFormContext();
514
514
  const {
515
515
  render,
516
516
  className,
@@ -527,7 +527,7 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
527
527
  ...elementProps
528
528
  } = componentProps;
529
529
  const disabledFieldset = useFieldsetRootContext(true)?.disabled;
530
- const validate = useButton.useStableCallback(validateProp || (() => null));
530
+ const validate = useScrollLock.useStableCallback(validateProp || (() => null));
531
531
  const disabled = disabledFieldset || disabledProp;
532
532
  const [touchedState, setTouchedUnwrapped] = React__namespace.useState(false);
533
533
  const [dirtyState, setDirtyUnwrapped] = React__namespace.useState(false);
@@ -539,7 +539,7 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
539
539
  const registeredFieldIdRef = React__namespace.useRef(undefined);
540
540
  const [registeredFieldName, setRegisteredFieldName] = React__namespace.useState();
541
541
  const effectiveName = name ?? registeredFieldName;
542
- useButton.useIsoLayoutEffect(() => {
542
+ useScrollLock.useIsoLayoutEffect(() => {
543
543
  if (dirtyProp !== undefined) {
544
544
  markedDirtyRef.current = dirtyProp;
545
545
  }
@@ -548,7 +548,7 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
548
548
  const setRegisteredFieldId = React__namespace.useCallback(id => {
549
549
  registeredFieldIdRef.current = id;
550
550
  }, []);
551
- const setDirty = useButton.useStableCallback(value => {
551
+ const setDirty = useScrollLock.useStableCallback(value => {
552
552
  if (dirtyProp !== undefined) {
553
553
  return;
554
554
  }
@@ -557,18 +557,18 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
557
557
  }
558
558
  setDirtyUnwrapped(value);
559
559
  });
560
- const setTouched = useButton.useStableCallback(value => {
560
+ const setTouched = useScrollLock.useStableCallback(value => {
561
561
  if (touchedProp !== undefined) {
562
562
  return;
563
563
  }
564
564
  setTouchedUnwrapped(value);
565
565
  });
566
- const shouldValidateOnChange = useButton.useStableCallback(() => validationMode === 'onChange' || validationMode === 'onSubmit' && submitAttemptedRef.current);
566
+ const shouldValidateOnChange = useScrollLock.useStableCallback(() => validationMode === 'onChange' || validationMode === 'onSubmit' && submitAttemptedRef.current);
567
567
  const formError = effectiveName && Object.hasOwn(errors, effectiveName) ? errors[effectiveName] : null;
568
568
  const hasFormError = !!(Array.isArray(formError) ? formError.length : formError);
569
569
  const invalid = invalidProp === true || hasFormError;
570
570
  const [validityData, setValidityData] = React__namespace.useState({
571
- state: useLabelableId.DEFAULT_VALIDITY_STATE,
571
+ state: useCompositeListItem.DEFAULT_VALIDITY_STATE,
572
572
  error: '',
573
573
  errors: [],
574
574
  value: null,
@@ -634,9 +634,9 @@ const FieldRootInner = /*#__PURE__*/React__namespace.forwardRef(function FieldRo
634
634
  ref: forwardedRef,
635
635
  state,
636
636
  props: elementProps,
637
- stateAttributesMapping: useLabelableId.fieldValidityMapping
637
+ stateAttributesMapping: useCompositeListItem.fieldValidityMapping
638
638
  });
639
- return /*#__PURE__*/jsxRuntime.jsx(useLabelableId.FieldRootContext.Provider, {
639
+ return /*#__PURE__*/jsxRuntime.jsx(useCompositeListItem.FieldRootContext.Provider, {
640
640
  value: contextValue,
641
641
  children: element
642
642
  });
@@ -674,11 +674,11 @@ const FieldLabel = /*#__PURE__*/React__namespace.forwardRef(function FieldLabel(
674
674
  nativeLabel = true,
675
675
  ...elementProps
676
676
  } = componentProps;
677
- const fieldRootContext = useLabelableId.useFieldRootContext(false);
677
+ const fieldRootContext = useCompositeListItem.useFieldRootContext(false);
678
678
  const fieldItemContext = useFieldItemContext();
679
679
  const {
680
680
  labelId
681
- } = useLabelableId.useLabelableContext();
681
+ } = useCompositeListItem.useLabelableContext();
682
682
  const state = {
683
683
  ...fieldRootContext.state,
684
684
  disabled: fieldRootContext.disabled || fieldItemContext.disabled
@@ -697,14 +697,14 @@ const FieldLabel = /*#__PURE__*/React__namespace.forwardRef(function FieldLabel(
697
697
  const isLabelTag = labelRef.current.tagName === 'LABEL';
698
698
  if (nativeLabel) {
699
699
  if (!isLabelTag) {
700
- const ownerStackMessage = useButton.SafeReact.captureOwnerStack?.() || '';
700
+ const ownerStackMessage = useScrollLock.SafeReact.captureOwnerStack?.() || '';
701
701
  const message = '<Field.Label> expected a <label> element because the `nativeLabel` prop is true. ' + 'Rendering a non-<label> disables native label association, so `htmlFor` will not ' + 'work. Use a real <label> in the `render` prop, or set `nativeLabel` to `false`.';
702
- useButton.error(`${message}${ownerStackMessage}`);
702
+ useScrollLock.error(`${message}${ownerStackMessage}`);
703
703
  }
704
704
  } else if (isLabelTag) {
705
- const ownerStackMessage = useButton.SafeReact.captureOwnerStack?.() || '';
705
+ const ownerStackMessage = useScrollLock.SafeReact.captureOwnerStack?.() || '';
706
706
  const message = '<Field.Label> expected a non-<label> element because the `nativeLabel` prop is false. ' + 'Rendering a <label> assumes native label behavior while Base UI treats it as ' + 'non-native, which can cause unexpected pointer behavior. Use a non-<label> in the ' + '`render` prop, or set `nativeLabel` to `true`.';
707
- useButton.error(`${message}${ownerStackMessage}`);
707
+ useScrollLock.error(`${message}${ownerStackMessage}`);
708
708
  }
709
709
  }, [nativeLabel]);
710
710
  }
@@ -712,15 +712,15 @@ const FieldLabel = /*#__PURE__*/React__namespace.forwardRef(function FieldLabel(
712
712
  ref: [forwardedRef, labelRef],
713
713
  state,
714
714
  props: [labelProps, elementProps],
715
- stateAttributesMapping: useLabelableId.fieldValidityMapping
715
+ stateAttributesMapping: useCompositeListItem.fieldValidityMapping
716
716
  });
717
717
  return element;
718
718
  });
719
719
  if (process.env.NODE_ENV !== "production") FieldLabel.displayName = "FieldLabel";
720
720
 
721
721
  const stateAttributesMapping = {
722
- ...useLabelableId.fieldValidityMapping,
723
- ...useButton.transitionStatusMapping
722
+ ...useCompositeListItem.fieldValidityMapping,
723
+ ...useScrollLock.transitionStatusMapping
724
724
  };
725
725
 
726
726
  /**
@@ -738,18 +738,18 @@ const FieldError = /*#__PURE__*/React__namespace.forwardRef(function FieldError(
738
738
  style,
739
739
  ...elementProps
740
740
  } = componentProps;
741
- const id = useButton.useBaseUiId(idProp);
741
+ const id = useScrollLock.useBaseUiId(idProp);
742
742
  const {
743
743
  validityData,
744
744
  state: fieldState,
745
745
  name
746
- } = useLabelableId.useFieldRootContext(false);
746
+ } = useCompositeListItem.useFieldRootContext(false);
747
747
  const {
748
748
  setMessageIds
749
- } = useLabelableId.useLabelableContext();
749
+ } = useCompositeListItem.useLabelableContext();
750
750
  const {
751
751
  errors
752
- } = useLabelableId.useFormContext();
752
+ } = useCompositeListItem.useFormContext();
753
753
  const formError = name && Object.hasOwn(errors, name) ? errors[name] : null;
754
754
  const hasFormError = !!(Array.isArray(formError) ? formError.length : formError);
755
755
  const hasSpecificMatch = typeof match === 'string';
@@ -767,8 +767,8 @@ const FieldError = /*#__PURE__*/React__namespace.forwardRef(function FieldError(
767
767
  mounted,
768
768
  transitionStatus,
769
769
  setMounted
770
- } = useButton.useTransitionStatus(rendered);
771
- useButton.useIsoLayoutEffect(() => {
770
+ } = useScrollLock.useTransitionStatus(rendered);
771
+ useScrollLock.useIsoLayoutEffect(() => {
772
772
  if (!rendered || !id) {
773
773
  return undefined;
774
774
  }
@@ -799,7 +799,7 @@ const FieldError = /*#__PURE__*/React__namespace.forwardRef(function FieldError(
799
799
  setLastRenderedMessageKey(errorKey);
800
800
  setLastRenderedMessage(errorMessage);
801
801
  }
802
- useButton.useOpenChangeComplete({
802
+ useScrollLock.useOpenChangeComplete({
803
803
  open: rendered,
804
804
  ref: errorRef,
805
805
  onComplete() {
@@ -843,17 +843,17 @@ const FieldDescription = /*#__PURE__*/React__namespace.forwardRef(function Field
843
843
  style,
844
844
  ...elementProps
845
845
  } = componentProps;
846
- const id = useButton.useBaseUiId(idProp);
847
- const fieldRootContext = useLabelableId.useFieldRootContext(false);
846
+ const id = useScrollLock.useBaseUiId(idProp);
847
+ const fieldRootContext = useCompositeListItem.useFieldRootContext(false);
848
848
  const fieldItemContext = useFieldItemContext();
849
849
  const {
850
850
  setMessageIds
851
- } = useLabelableId.useLabelableContext();
851
+ } = useCompositeListItem.useLabelableContext();
852
852
  const state = {
853
853
  ...fieldRootContext.state,
854
854
  disabled: fieldRootContext.disabled || fieldItemContext.disabled
855
855
  };
856
- useButton.useIsoLayoutEffect(() => {
856
+ useScrollLock.useIsoLayoutEffect(() => {
857
857
  if (!id) {
858
858
  return undefined;
859
859
  }
@@ -868,7 +868,7 @@ const FieldDescription = /*#__PURE__*/React__namespace.forwardRef(function Field
868
868
  props: [{
869
869
  id
870
870
  }, elementProps],
871
- stateAttributesMapping: useLabelableId.fieldValidityMapping
871
+ stateAttributesMapping: useCompositeListItem.fieldValidityMapping
872
872
  });
873
873
  return element;
874
874
  });
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { u as useBaseUiId, b as useStableCallback, h as useTimeout, a as useIsoLayoutEffect, S as SafeReact, j as error, t as transitionStatusMapping, k as useTransitionStatus, f as useOpenChangeComplete } from './useButton-es.js';
3
- import { u as useLabelableContext, L as LabelableContext, a as useFormContext, D as DEFAULT_VALIDITY_STATE, f as fieldValidityMapping, F as FieldRootContext, b as useFieldRootContext } from './useLabelableId-es.js';
2
+ import { u as useBaseUiId, b as useStableCallback, k as useTimeout, a as useIsoLayoutEffect, S as SafeReact, l as error, t as transitionStatusMapping, m as useTransitionStatus, f as useOpenChangeComplete } from './useScrollLock-es.js';
3
+ import { u as useLabelableContext, L as LabelableContext, a as useFormContext, D as DEFAULT_VALIDITY_STATE, f as fieldValidityMapping, F as FieldRootContext, b as useFieldRootContext } from './useCompositeListItem-es.js';
4
4
  import { f as formatErrorMessage, a as useRefWithInit, m as mergeProps, E as EMPTY_OBJECT, u as useRenderElement } from './useRenderElement-es.js';
5
5
  import { jsx } from 'react/jsx-runtime';
6
6
  import { u as useLabel } from './useLabel-es.js';
@@ -18,7 +18,6 @@ require('../../../useAtlantisI18n-cjs.js');
18
18
  require('../../../AtlantisContext-cjs.js');
19
19
  require('../../../Tooltip-cjs.js');
20
20
  require('../../../floating-ui.react-cjs.js');
21
- require('../../../floating-ui.utils.dom-cjs.js');
22
21
  require('../../../floating-ui.utils-cjs.js');
23
22
  require('react/jsx-runtime');
24
23
  require('react-dom');
@@ -16,7 +16,6 @@ import '../../../useAtlantisI18n-es.js';
16
16
  import '../../../AtlantisContext-es.js';
17
17
  import '../../../Tooltip-es.js';
18
18
  import '../../../floating-ui.react-es.js';
19
- import '../../../floating-ui.utils.dom-es.js';
20
19
  import '../../../floating-ui.utils-es.js';
21
20
  import 'react/jsx-runtime';
22
21
  import 'react-dom';
@@ -4,7 +4,6 @@ var FilterPickerContent = require('../../../FilterPickerContent-cjs.js');
4
4
  require('react');
5
5
  require('classnames');
6
6
  require('../../../floating-ui.react-cjs.js');
7
- require('../../../floating-ui.utils.dom-cjs.js');
8
7
  require('../../../floating-ui.utils-cjs.js');
9
8
  require('react/jsx-runtime');
10
9
  require('react-dom');
@@ -2,7 +2,6 @@ export { F as FilterPickerContent } from '../../../FilterPickerContent-es.js';
2
2
  import 'react';
3
3
  import 'classnames';
4
4
  import '../../../floating-ui.react-es.js';
5
- import '../../../floating-ui.utils.dom-es.js';
6
5
  import '../../../floating-ui.utils-es.js';
7
6
  import 'react/jsx-runtime';
8
7
  import 'react-dom';
@@ -16,7 +16,6 @@ require('../../../AtlantisContext-cjs.js');
16
16
  require('../../../Typography-cjs.js');
17
17
  require('../../../Tooltip-cjs.js');
18
18
  require('../../../floating-ui.react-cjs.js');
19
- require('../../../floating-ui.utils.dom-cjs.js');
20
19
  require('../../../floating-ui.utils-cjs.js');
21
20
  require('react/jsx-runtime');
22
21
  require('react-dom');
@@ -14,7 +14,6 @@ import '../../../AtlantisContext-es.js';
14
14
  import '../../../Typography-es.js';
15
15
  import '../../../Tooltip-es.js';
16
16
  import '../../../floating-ui.react-es.js';
17
- import '../../../floating-ui.utils.dom-es.js';
18
17
  import '../../../floating-ui.utils-es.js';
19
18
  import 'react/jsx-runtime';
20
19
  import 'react-dom';
@@ -6,7 +6,6 @@ require('react');
6
6
  require('../FilterPickerContent-cjs.js');
7
7
  require('classnames');
8
8
  require('../floating-ui.react-cjs.js');
9
- require('../floating-ui.utils.dom-cjs.js');
10
9
  require('../floating-ui.utils-cjs.js');
11
10
  require('react/jsx-runtime');
12
11
  require('react-dom');
@@ -4,7 +4,6 @@ import 'react';
4
4
  import '../FilterPickerContent-es.js';
5
5
  import 'classnames';
6
6
  import '../floating-ui.react-es.js';
7
- import '../floating-ui.utils.dom-es.js';
8
7
  import '../floating-ui.utils-es.js';
9
8
  import 'react/jsx-runtime';
10
9
  import 'react-dom';
@@ -0,0 +1,18 @@
1
+ export declare const formatFileMessages: {
2
+ deleteFile: {
3
+ en: string;
4
+ es: string;
5
+ };
6
+ confirmDeletion: {
7
+ en: string;
8
+ es: string;
9
+ };
10
+ confirmDeletionMessage: {
11
+ en: string;
12
+ es: string;
13
+ };
14
+ delete: {
15
+ en: string;
16
+ es: string;
17
+ };
18
+ };
@@ -4,6 +4,8 @@ var FormatFile = require('../FormatFile-cjs.js');
4
4
  require('react');
5
5
  require('filesize');
6
6
  require('classnames');
7
+ require('../useAtlantisI18n-cjs.js');
8
+ require('../AtlantisContext-cjs.js');
7
9
  require('../Thumbnail-cjs.js');
8
10
  require('../Glimmer-cjs.js');
9
11
  require('../tslib.es6-cjs.js');
@@ -21,14 +23,11 @@ require('../Modal/index.cjs');
21
23
  require('react-dom');
22
24
  require('framer-motion');
23
25
  require('../nestedEscape-cjs.js');
24
- require('../useAtlantisI18n-cjs.js');
25
- require('../AtlantisContext-cjs.js');
26
26
  require('../Heading-cjs.js');
27
27
  require('../ButtonDismiss-cjs.js');
28
28
  require('../noop-cjs.js');
29
29
  require('../_commonjsHelpers-cjs.js');
30
30
  require('../floating-ui.react-cjs.js');
31
- require('../floating-ui.utils.dom-cjs.js');
32
31
  require('../floating-ui.utils-cjs.js');
33
32
  require('react/jsx-runtime');
34
33
  require('../floating-ui.react-dom-cjs.js');
@@ -2,6 +2,8 @@ export { F as FormatFile, u as useFormatFile, a as useFormatFileStyles } from '.
2
2
  import 'react';
3
3
  import 'filesize';
4
4
  import 'classnames';
5
+ import '../useAtlantisI18n-es.js';
6
+ import '../AtlantisContext-es.js';
5
7
  import '../Thumbnail-es.js';
6
8
  import '../Glimmer-es.js';
7
9
  import '../tslib.es6-es.js';
@@ -19,14 +21,11 @@ import '../Modal/index.mjs';
19
21
  import 'react-dom';
20
22
  import 'framer-motion';
21
23
  import '../nestedEscape-es.js';
22
- import '../useAtlantisI18n-es.js';
23
- import '../AtlantisContext-es.js';
24
24
  import '../Heading-es.js';
25
25
  import '../ButtonDismiss-es.js';
26
26
  import '../noop-es.js';
27
27
  import '../_commonjsHelpers-es.js';
28
28
  import '../floating-ui.react-es.js';
29
- import '../floating-ui.utils.dom-es.js';
30
29
  import '../floating-ui.utils-es.js';
31
30
  import 'react/jsx-runtime';
32
31
  import '../floating-ui.react-dom-es.js';
@@ -3,6 +3,7 @@
3
3
  var React = require('react');
4
4
  var getHumanReadableFileSize = require('filesize');
5
5
  var classnames = require('classnames');
6
+ var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
6
7
  var Thumbnail = require('./Thumbnail-cjs.js');
7
8
  var Text = require('./Text-cjs.js');
8
9
  var ProgressBar = require('./ProgressBar-cjs.js');
@@ -49,8 +50,28 @@ function isHoverable({ display, isComplete, onClick, onDelete, }) {
49
50
  return false;
50
51
  }
51
52
 
53
+ const formatFileMessages = useAtlantisI18n.defineMessages({
54
+ deleteFile: {
55
+ en: "Delete File",
56
+ es: "Eliminar archivo",
57
+ },
58
+ confirmDeletion: {
59
+ en: "Confirm Deletion",
60
+ es: "Confirmar eliminación",
61
+ },
62
+ confirmDeletionMessage: {
63
+ en: "Are you sure you want to delete this file?",
64
+ es: "¿Estás seguro de que deseas eliminar este archivo?",
65
+ },
66
+ delete: {
67
+ en: "Delete",
68
+ es: "Eliminar",
69
+ },
70
+ });
71
+
52
72
  function FormatFile({ file, display = "expanded", displaySize = "base", onDelete, onClick, }) {
53
73
  const [deleteConfirmationOpen, setDeleteConfirmationOpen] = React.useState(false);
74
+ const { t } = useAtlantisI18n.useAtlantisI18n(formatFileMessages);
54
75
  const { isComplete, fileSize } = useFormatFile({
55
76
  file,
56
77
  display,
@@ -76,7 +97,7 @@ function FormatFile({ file, display = "expanded", displaySize = "base", onDelete
76
97
  React.createElement(FormatFile.DeleteButton, { onDelete: () => {
77
98
  setDeleteConfirmationOpen(true);
78
99
  } },
79
- React.createElement(ConfirmationModal.ConfirmationModal, { title: "Confirm Deletion", message: `Are you sure you want to delete this file?`, confirmLabel: "Delete", variation: "destructive", open: deleteConfirmationOpen, onConfirm: () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(), onRequestClose: () => setDeleteConfirmationOpen(false) })))));
100
+ React.createElement(ConfirmationModal.ConfirmationModal, { title: t("confirmDeletion"), message: t("confirmDeletionMessage"), confirmLabel: t("delete"), variation: "destructive", open: deleteConfirmationOpen, onConfirm: () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(), onRequestClose: () => setDeleteConfirmationOpen(false) })))));
80
101
  }
81
102
  FormatFile.DeleteButtonContainer = function FormatFileDeleteButtonContainer({ children, className, isHidden, }) {
82
103
  if (isHidden)
@@ -106,10 +127,11 @@ FormatFile.Wrapper = function FormatFileWrapper({ children, className, }) {
106
127
  return React.createElement("div", { className: className }, children);
107
128
  };
108
129
  FormatFile.DeleteButton = function FormatFileDeleteButton({ onDelete, children, }) {
130
+ const { t } = useAtlantisI18n.useAtlantisI18n(formatFileMessages);
109
131
  return (React.createElement(React.Fragment, null,
110
132
  React.createElement(Button.Button, { UNSAFE_className: {
111
133
  container: styles.customDeleteButton,
112
- }, onClick: onDelete, variation: "destructive", type: "tertiary", icon: "trash", ariaLabel: "Delete File", size: "small" }),
134
+ }, onClick: onDelete, variation: "destructive", type: "tertiary", icon: "trash", ariaLabel: t("deleteFile"), size: "small" }),
113
135
  children));
114
136
  };
115
137
 
@@ -1,6 +1,7 @@
1
1
  import React__default, { useState } from 'react';
2
2
  import getHumanReadableFileSize from 'filesize';
3
3
  import classnames from 'classnames';
4
+ import { d as defineMessages, u as useAtlantisI18n } from './useAtlantisI18n-es.js';
4
5
  import { T as Thumbnail } from './Thumbnail-es.js';
5
6
  import { T as Text } from './Text-es.js';
6
7
  import { P as ProgressBar } from './ProgressBar-es.js';
@@ -47,8 +48,28 @@ function isHoverable({ display, isComplete, onClick, onDelete, }) {
47
48
  return false;
48
49
  }
49
50
 
51
+ const formatFileMessages = defineMessages({
52
+ deleteFile: {
53
+ en: "Delete File",
54
+ es: "Eliminar archivo",
55
+ },
56
+ confirmDeletion: {
57
+ en: "Confirm Deletion",
58
+ es: "Confirmar eliminación",
59
+ },
60
+ confirmDeletionMessage: {
61
+ en: "Are you sure you want to delete this file?",
62
+ es: "¿Estás seguro de que deseas eliminar este archivo?",
63
+ },
64
+ delete: {
65
+ en: "Delete",
66
+ es: "Eliminar",
67
+ },
68
+ });
69
+
50
70
  function FormatFile({ file, display = "expanded", displaySize = "base", onDelete, onClick, }) {
51
71
  const [deleteConfirmationOpen, setDeleteConfirmationOpen] = useState(false);
72
+ const { t } = useAtlantisI18n(formatFileMessages);
52
73
  const { isComplete, fileSize } = useFormatFile({
53
74
  file,
54
75
  display,
@@ -74,7 +95,7 @@ function FormatFile({ file, display = "expanded", displaySize = "base", onDelete
74
95
  React__default.createElement(FormatFile.DeleteButton, { onDelete: () => {
75
96
  setDeleteConfirmationOpen(true);
76
97
  } },
77
- React__default.createElement(ConfirmationModal, { title: "Confirm Deletion", message: `Are you sure you want to delete this file?`, confirmLabel: "Delete", variation: "destructive", open: deleteConfirmationOpen, onConfirm: () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(), onRequestClose: () => setDeleteConfirmationOpen(false) })))));
98
+ React__default.createElement(ConfirmationModal, { title: t("confirmDeletion"), message: t("confirmDeletionMessage"), confirmLabel: t("delete"), variation: "destructive", open: deleteConfirmationOpen, onConfirm: () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(), onRequestClose: () => setDeleteConfirmationOpen(false) })))));
78
99
  }
79
100
  FormatFile.DeleteButtonContainer = function FormatFileDeleteButtonContainer({ children, className, isHidden, }) {
80
101
  if (isHidden)
@@ -104,10 +125,11 @@ FormatFile.Wrapper = function FormatFileWrapper({ children, className, }) {
104
125
  return React__default.createElement("div", { className: className }, children);
105
126
  };
106
127
  FormatFile.DeleteButton = function FormatFileDeleteButton({ onDelete, children, }) {
128
+ const { t } = useAtlantisI18n(formatFileMessages);
107
129
  return (React__default.createElement(React__default.Fragment, null,
108
130
  React__default.createElement(Button, { UNSAFE_className: {
109
131
  container: styles.customDeleteButton,
110
- }, onClick: onDelete, variation: "destructive", type: "tertiary", icon: "trash", ariaLabel: "Delete File", size: "small" }),
132
+ }, onClick: onDelete, variation: "destructive", type: "tertiary", icon: "trash", ariaLabel: t("deleteFile"), size: "small" }),
111
133
  children));
112
134
  };
113
135
 
@@ -22,7 +22,6 @@ require('../Text-cjs.js');
22
22
  require('../Heading-cjs.js');
23
23
  require('../Tooltip-cjs.js');
24
24
  require('../floating-ui.react-cjs.js');
25
- require('../floating-ui.utils.dom-cjs.js');
26
25
  require('../floating-ui.utils-cjs.js');
27
26
  require('react/jsx-runtime');
28
27
  require('../floating-ui.react-dom-cjs.js');
@@ -20,7 +20,6 @@ import '../Text-es.js';
20
20
  import '../Heading-es.js';
21
21
  import '../Tooltip-es.js';
22
22
  import '../floating-ui.react-es.js';
23
- import '../floating-ui.utils.dom-es.js';
24
23
  import '../floating-ui.utils-es.js';
25
24
  import 'react/jsx-runtime';
26
25
  import '../floating-ui.react-dom-es.js';
@@ -2,16 +2,17 @@
2
2
 
3
3
  var tslib_es6 = require('./tslib.es6-cjs.js');
4
4
  var React = require('react');
5
+ var classnames = require('classnames');
5
6
  var Text = require('./Text-cjs.js');
6
7
  var Icon = require('./Icon-cjs.js');
7
8
 
8
9
  var styles = {"helperText":"yL7--3ni8BM-","neutral":"T8y6sv17efg-","critical":"VOiBogstpjU-","leadingIcon":"bvlhcaSPuO8-","spinning":"tsQaIzvraoE-"};
9
10
 
10
11
  const HelperText = React.forwardRef(function HelperText(_a, ref) {
11
- var { message, status = "neutral", id } = _a, rest = tslib_es6.__rest(_a, ["message", "status", "id"]);
12
+ var { message, status = "neutral", id, className } = _a, rest = tslib_es6.__rest(_a, ["message", "status", "id", "className"]);
12
13
  const generatedId = React.useId();
13
14
  const isCritical = status === "critical";
14
- return (React.createElement("div", Object.assign({}, rest, { ref: ref, id: id !== null && id !== void 0 ? id : generatedId, className: `${styles.helperText} ${isCritical ? styles.critical : styles.neutral}`, role: isCritical ? "alert" : undefined }),
15
+ return (React.createElement("div", Object.assign({}, rest, { ref: ref, id: id !== null && id !== void 0 ? id : generatedId, className: classnames(styles.helperText, isCritical ? styles.critical : styles.neutral, className), role: isCritical ? "alert" : undefined }),
15
16
  isCritical && (React.createElement("span", { className: styles.leadingIcon },
16
17
  React.createElement(Icon.Icon, { name: "alert", size: "small", color: "critical" }))),
17
18
  React.createElement(Text.Text, { size: "small", variation: isCritical ? "error" : "subdued" }, message)));