@warp-ds/elements 1.3.1-next.1 → 1.3.2-next.1

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 (33) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +199 -129
  3. package/dist/index.js.map +4 -4
  4. package/dist/packages/affix/index.js +139 -62
  5. package/dist/packages/affix/index.js.map +4 -4
  6. package/dist/packages/alert/index.js +148 -71
  7. package/dist/packages/alert/index.js.map +4 -4
  8. package/dist/packages/attention/index.d.ts +1 -1
  9. package/dist/packages/attention/index.js +139 -62
  10. package/dist/packages/attention/index.js.map +4 -4
  11. package/dist/packages/badge/index.js +114 -46
  12. package/dist/packages/badge/index.js.map +3 -3
  13. package/dist/packages/box/index.js +105 -39
  14. package/dist/packages/box/index.js.map +3 -3
  15. package/dist/packages/breadcrumbs/index.js +142 -65
  16. package/dist/packages/breadcrumbs/index.js.map +4 -4
  17. package/dist/packages/broadcast/index.js.map +1 -1
  18. package/dist/packages/button/index.js +139 -62
  19. package/dist/packages/button/index.js.map +4 -4
  20. package/dist/packages/card/index.js +112 -46
  21. package/dist/packages/card/index.js.map +3 -3
  22. package/dist/packages/expandable/index.js +139 -62
  23. package/dist/packages/expandable/index.js.map +4 -4
  24. package/dist/packages/pill/index.js +141 -64
  25. package/dist/packages/pill/index.js.map +4 -4
  26. package/dist/packages/select/index.js +153 -80
  27. package/dist/packages/select/index.js.map +4 -4
  28. package/dist/packages/textfield/index.d.ts +0 -1
  29. package/dist/packages/textfield/index.js +119 -55
  30. package/dist/packages/textfield/index.js.map +3 -3
  31. package/dist/packages/toast/index.js +146 -69
  32. package/dist/packages/toast/index.js.map +4 -4
  33. package/package.json +25 -37
@@ -1054,26 +1054,27 @@ function fclasses(definition) {
1054
1054
  return classMap(defn);
1055
1055
  }
1056
1056
 
1057
- // node_modules/.pnpm/@warp-ds+css@1.7.0/node_modules/@warp-ds/css/component-classes/index.js
1057
+ // node_modules/.pnpm/@warp-ds+css@1.9.1/node_modules/@warp-ds/css/component-classes/index.js
1058
1058
  var box = {
1059
1059
  box: "group block relative break-words last-child:mb-0 p-16 rounded-8",
1060
1060
  // Relative here enables w-clickable
1061
1061
  bleed: "-mx-16 sm:mx-0 rounded-l-0 rounded-r-0 sm:rounded-8",
1062
1062
  // We target L and R to override the default rounded-8
1063
- info: "i-bg-$color-box-info-background i-text-$color-box-info-text",
1064
- neutral: "i-bg-$color-box-neutral-background i-text-$color-box-neutral-text",
1065
- bordered: "border-2 i-border-$color-box-bordered-border i-bg-$color-box-bordered-background i-text-$color-box-bordered-text",
1066
- infoClickable: "hover:i-bg-$color-box-info-background-hover active:i-bg-$color-box-info-background-hover",
1067
- neutralClickable: "hover:i-bg-$color-box-neutral-background-hover active:i-bg-$color-box-neutral-background-hover",
1068
- borderedClickable: "hover:i-bg-$color-box-bordered-background-hover active:i-bg-$color-box-bordered-background-hover hover:i-border-$color-box-bordered-border-hover active:i-border-$color-box-bordered-border-hover"
1063
+ info: "s-bg-info-subtle",
1064
+ neutral: "bg-[--w-s-color-surface-sunken]",
1065
+ bordered: "border-2 s-border s-bg",
1066
+ infoClickable: "hover:s-bg-info-subtle-hover active:s-bg-info-subtle-hover",
1067
+ neutralClickable: "hover:s-bg-subtle-hover active:s-bg-subtle-hover",
1068
+ borderedClickable: "hover:s-bg-hover active:s-bg-hover hover:s-border-hover active:s-border-hover"
1069
1069
  };
1070
1070
  var buttonReset = "focus:outline-none appearance-none cursor-pointer bg-transparent border-0 m-0 p-0 inline-block";
1071
1071
  var expandable = {
1072
1072
  expandable: "will-change-height",
1073
- expandableTitle: "font-bold i-text-$color-expandable-title-text",
1074
- expandableBox: "i-bg-$color-expandable-background hover:i-bg-$color-expandable-background-hover py-0 px-0 " + box.box,
1073
+ expandableTitle: "font-bold s-text",
1074
+ expandableBox: "s-bg-subtle hover:s-bg-subtle-hover py-0 px-0 " + box.box,
1075
+ expandableInfo: "s-bg-info-subtle! hover:s-bg-info-subtle-hover!",
1075
1076
  expandableBleed: box.bleed,
1076
- chevron: "inline-block align-middle i-text-$color-expandable-icon",
1077
+ chevron: "inline-block align-middle s-icon",
1077
1078
  chevronNonBox: "ml-8",
1078
1079
  chevronBox: "",
1079
1080
  chevronTransform: "transform transition-transform transform-gpu ease-in-out",
@@ -1093,17 +1094,17 @@ var expandable = {
1093
1094
  };
1094
1095
  var buttonDefaultStyling = "font-bold focusable justify-center transition-colors ease-in-out";
1095
1096
  var buttonColors = {
1096
- primary: "i-text-$color-button-primary-text hover:i-text-$color-button-primary-text i-bg-$color-button-primary-background hover:i-bg-$color-button-primary-background-hover active:i-bg-$color-button-primary-background-active",
1097
- secondary: "i-text-$color-button-secondary-text hover:i-text-$color-button-secondary-text i-border-$color-button-secondary-border i-bg-$color-button-secondary-background hover:i-bg-$color-button-secondary-background-hover hover:i-border-$color-button-secondary-border-hover active:i-bg-$color-button-secondary-background-active",
1098
- utility: "i-text-$color-button-utility-text hover:i-text-$color-button-utility-text i-bg-$color-button-utility-background i-border-$color-button-utility-border hover:i-bg-$color-button-utility-background hover:i-border-$color-button-utility-border-hover active:i-border-$color-button-utility-border-active",
1099
- destructive: "i-bg-$color-button-negative-background i-text-$color-button-negative-text hover:i-text-$color-button-negative-text hover:i-bg-$color-button-negative-background-hover active:i-bg-$color-button-negative-background-active",
1100
- pill: "i-text-$color-button-pill-icon hover:i-text-$color-button-pill-icon-hover active:i-text-$color-button-pill-icon-active i-bg-$color-button-pill-background hover:i-bg-$color-button-pill-background-hover active:i-bg-$color-button-pill-background-active",
1101
- disabled: "i-text-$color-button-disabled-text i-bg-$color-button-disabled-background",
1102
- quiet: "i-bg-$color-button-quiet-background i-text-$color-button-quiet-text hover:i-bg-$color-button-quiet-background-hover active:i-bg-$color-button-quiet-background-active",
1103
- utilityQuiet: "i-text-$color-button-utility-quiet-text i-bg-$color-button-utility-quiet-background hover:i-bg-$color-button-utility-quiet-background-hover",
1104
- negativeQuiet: "i-bg-$color-button-negative-quiet-background i-text-$color-button-negative-quiet-text hover:i-bg-$color-button-negative-quiet-background-hover active:i-bg-$color-button-negative-quiet-background-active",
1105
- loading: "i-text-$color-button-loading-text i-bg-$color-button-loading-background",
1106
- link: "i-text-$color-button-link-text"
1097
+ primary: "s-text-inverted bg-[--w-color-button-primary-background] hover:bg-[--w-color-button-primary-background-hover] active:bg-[--w-color-button-primary-background-active]",
1098
+ secondary: "s-text-link s-border s-bg hover:s-bg-hover hover:s-border-hover active:s-bg-active",
1099
+ utility: "s-text s-bg hover:s-bg-hover active:s-bg-active s-border hover:s-border-hover active:s-border-active",
1100
+ destructive: "s-bg-negative s-text-inverted hover:s-bg-negative-hover active:s-bg-negative-active",
1101
+ pill: "s-icon hover:s-icon-hover active:s-icon-active bg-transparent hover:bg-[--w-color-button-pill-background-hover] active:bg-[--w-color-button-pill-background-active]",
1102
+ disabled: "s-text-inverted s-bg-disabled",
1103
+ quiet: "bg-transparent s-text-link hover:s-bg-hover active:s-bg-active",
1104
+ utilityQuiet: "s-text bg-transparent hover:s-bg-hover active:s-bg-active",
1105
+ negativeQuiet: "bg-transparent s-text-negative hover:s-bg-negative-subtle-hover active:s-bg-negative-subtle-active",
1106
+ loading: "s-text s-bg-subtle",
1107
+ link: "s-text-link"
1107
1108
  };
1108
1109
  var buttonTypes = {
1109
1110
  primary: `border-0 rounded-8 ${buttonDefaultStyling}`,
@@ -1207,10 +1208,10 @@ var button = {
1207
1208
  contentWidth: "max-w-max"
1208
1209
  };
1209
1210
  var modal = {
1210
- //TODO: this class can be removed when we have the solution for opacity and we can add rgba values to the background of the backdrop
1211
- transparentBg: `before:i-bg-$color-modal-backdrop-background before:content-[""] before:absolute before:top-0 before:bottom-0 before:left-0 before:right-0 before:opacity-25`,
1212
- backdrop: "fixed inset-0 flex sm:place-content-center sm:place-items-center items-end z-30 [--w-modal-max-height:80%] [--w-modal-width:640px]",
1213
- modal: "pb-safe-[32] i-shadow-$shadow-modal max-h-[--w-modal-max-height] min-h-[--w-modal-min-height] w-[--w-modal-width] h-[--w-modal-height] relative transition-300 ease-in-out backface-hidden will-change-height rounded-8 mx-0 sm:mx-16 i-bg-$color-modal-background flex flex-col overflow-hidden outline-none space-y-16 pt-8 sm:pt-32 sm:pb-32 rounded-b-0 sm:rounded-b-8",
1211
+ transparentBg: "",
1212
+ //TODO: Remove in v2 - previously used for opacity before changing to a rgba background in backdrop
1213
+ backdrop: "fixed inset-0 flex sm:place-content-center sm:place-items-center items-end z-30 [--w-modal-max-height:80%] [--w-modal-width:640px] bg-[--w-black/25]",
1214
+ modal: "pb-safe-[32] shadow-m max-h-[--w-modal-max-height] min-h-[--w-modal-min-height] w-[--w-modal-width] h-[--w-modal-height] relative transition-300 ease-in-out backface-hidden will-change-height rounded-8 mx-0 sm:mx-16 bg-[--w-s-color-surface-elevated-100] flex flex-col overflow-hidden outline-none space-y-16 pt-8 sm:pt-32 sm:pb-32 rounded-b-0 sm:rounded-b-8",
1214
1215
  content: "block overflow-y-auto overflow-x-hidden last-child:mb-0 grow shrink px-16 sm:px-32 relative",
1215
1216
  footer: "flex justify-end shrink-0 px-16 sm:px-32",
1216
1217
  transitionTitle: "transition-all duration-300",
@@ -1225,22 +1226,79 @@ var modal = {
1225
1226
  titleButtonIconRotated: "transform rotate-90"
1226
1227
  };
1227
1228
  var label = {
1228
- label: "antialiased block relative text-s font-bold pb-4 cursor-pointer i-text-$color-label-text",
1229
- labelInvalid: "i-text-$color-label-text-negative",
1230
- optional: "pl-8 font-normal text-s i-text-$color-label-optional-text"
1229
+ label: "antialiased block relative text-s font-bold pb-4 cursor-pointer s-text",
1230
+ optional: "pl-8 font-normal text-s s-text-subtle",
1231
+ labelInvalid: "s-text-negative"
1232
+ // TODO: Remove in v2 - kept for backwards compatibility
1231
1233
  };
1232
- var prefixSuffixWrapperBase = "absolute top-0 bottom-0 flex justify-center items-center focusable focus:[--w-outline-offset:-2px] bg-transparent ";
1234
+ var prefixSuffixWrapperBase = "absolute top-0 bottom-0 flex justify-center items-center focusable rounded-4 focus:[--w-outline-offset:-2px] bg-transparent ";
1233
1235
  var suffix = {
1234
1236
  wrapper: prefixSuffixWrapperBase + "right-0",
1235
1237
  wrapperWithLabel: "w-max pr-12",
1236
1238
  wrapperWithIcon: "w-40",
1237
- label: "antialiased block relative cursor-default pb-0 font-bold text-xs i-text-$color-label-text"
1239
+ label: "antialiased block relative cursor-default pb-0 font-bold text-xs s-text"
1238
1240
  };
1239
1241
  var prefix = {
1240
1242
  wrapper: prefixSuffixWrapperBase + "left-0",
1241
1243
  wrapperWithLabel: "w-max pl-12",
1242
1244
  wrapperWithIcon: "w-40",
1243
- label: "antialiased block relative cursor-default pb-0 font-bold text-xs i-text-$color-label-text"
1245
+ label: "antialiased block relative cursor-default pb-0 font-bold text-xs s-text"
1246
+ };
1247
+ var toggle = {
1248
+ // wrapper classes
1249
+ field: "relative text-m",
1250
+ // true
1251
+ wrapper: "relative py-1",
1252
+ // true
1253
+ wrapperRadioButtons: "inline-flex font-bold rounded-8 focus-within:focusable",
1254
+ // isRadioButton && !isEqualWidth
1255
+ wrapperRadioButtonsJustified: "flex font-bold rounded-8 focus-within:focusable",
1256
+ // isRadioButton && isEqualWidth,
1257
+ // group classes
1258
+ radioButtonsGroup: "group",
1259
+ // isRadioButton
1260
+ radioButtonsGroupJustified: "grow-1 shrink-0 basis-auto",
1261
+ // isRadioButton && isEqualWidth
1262
+ // input classes
1263
+ input: "peer",
1264
+ a11y: "sr-only",
1265
+ // label classes
1266
+ label: "peer-focus:focusable cursor-pointer text-m s-text s-border py-2 pl-28 select-none relative block before:border before:absolute before:transition-all before:left-0 before:w-20 before:h-20 before:top-2",
1267
+ // !isRadioButton
1268
+ labelBefore: 'before:content-[""] before:block',
1269
+ // !isRadioButton && !isIndeterminate
1270
+ checkbox: "before:s-bg before:rounded-2 hover:before:s-border-primary hover:before:s-bg-hover peer-checked:before:bg-center peer-checked:before:bg-[url(var(--w-form-check-mark))] peer-checked:before:s-border-primary peer-checked:before:s-bg-primary peer-checked:peer-hover:before:s-border-primary-hover peer-checked:peer-hover:before:s-bg-primary-hover",
1271
+ // isCheckbox && !isIndeterminate && !isInvalid && !isDisabled
1272
+ checkboxInvalid: "before:s-bg before:s-border-negative before:rounded-2 hover:before:s-bg-negative-subtle-hover hover:before:s-border-negative-hover peer-checked:before:bg-center peer-checked:before:bg-[url(var(--w-form-check-mark))] peer-checked:before:s-bg-negative peer-checked:before:s-border-negative peer-checked:peer-hover:before:s-bg-negative-hover peer-checked:peer-hover:before:s-border-negative-hover",
1273
+ // isCheckbox && !isIndeterminate && isInvalid && !isDisabled
1274
+ checkboxDisabled: "before:s-bg-disabled-subtle before:s-border-disabled pointer-events-none before:rounded-2 peer-checked:before:bg-center peer-checked:before:bg-[url(var(--w-form-check-mark))] peer-checked:before:s-border-disabled peer-checked:before:s-bg-disabled",
1275
+ // isCheckbox && !isIndeterminate && !isInvalid && isDisabled
1276
+ indeterminate: 'before:content-["\u2013"] before:rounded-2 before:leading-xs before:text-center before:font-bold before:s-icon-inverted peer-indeterminate:before:s-border-primary peer-indeterminate:before:s-bg-primary peer-indeterminate:hover:before:s-border-primary-hover peer-indeterminate:hover:before:s-bg-primary-hover',
1277
+ // isCheckbox && isIndeterminate && !isInvalid && !isDisabled
1278
+ indeterminateInvalid: 'before:content-["\u2013"] before:rounded-2 before:leading-xs before:text-center before:font-bold before:s-icon-inverted peer-indeterminate:before:s-border-negative peer-indeterminate:before:s-bg-negative peer-indeterminate:hover:before:s-border-negative-hover peer-indeterminate:hover:before:s-bg-negative-hover',
1279
+ // isCheckbox && isIndeterminate && isInvalid && !isDisabled
1280
+ indeterminateDisabled: 'before:content-["\u2013"] before:rounded-2 before:leading-xs before:text-center before:font-bold pointer-events-none before:s-icon-inverted peer-indeterminate:before:s-border-disabled peer-indeterminate:before:s-bg-disabled',
1281
+ // isCheckbox && isIndeterminate && !isInvalid && isDisabled
1282
+ radio: "before:s-bg before:rounded-full peer-checked:before:border-[6] peer-checked:before:s-border-selected peer-checked:peer-hover:before:s-border-selected-hover peer-hover:before:s-border-primary peer-hover:before:s-bg-hover",
1283
+ // isRadio && !isDisabled && !isInvalid
1284
+ radioInvalid: "before:s-bg before:s-border-negative before:rounded-full peer-checked:before:border-[6] peer-hover:before:s-bg-negative-subtle peer-hover:before:s-border-negative-hover peer-checked:before:s-border-negative peer-checked:peer-hover:before:s-border-negative-hover",
1285
+ // isRadio && isInvalid && !isDisabled
1286
+ radioDisabled: "before:s-bg-disabled-subtle before:s-border-disabled pointer-events-none before:rounded-full peer-checked:before:border-[6]",
1287
+ // isRadio && !isInvalid && isDisabled
1288
+ radioButtonsLabel: "peer-hover:peer-not-checked:s-bg-hover peer-checked:s-text-inverted peer-checked:s-bg-primary peer-checked:s-border-primary block relative font-bold cursor-pointer s-text-link text-center s-bg border-2 s-border group-first-of-type:rounded-tl-8 group-first-of-type:rounded-bl-8 group-last-of-type:rounded-tr-8 group-last-of-type:rounded-br-8 group-not-last-of-type:border-r-0 peer-checked:z-10 group-not-first:-ml-2",
1289
+ // isRadioButtons
1290
+ radioButtonsRegular: "text-s py-8 pl-12 pr-14",
1291
+ // isRadioButtons && !isSmall
1292
+ radioButtonsSmall: "text-xs py-[5px] px-[8px]"
1293
+ // isRadioButtons && isSmall
1294
+ };
1295
+ var deadToggle = {
1296
+ wrapper: `${toggle.wrapper} h-20 w-20 pointer-events-none`,
1297
+ input: `${toggle.input} hidden`,
1298
+ inputVue: "hidden",
1299
+ labelRadio: `${toggle.label} ${toggle.labelBefore} ${toggle.radio}`,
1300
+ labelCheckbox: `${toggle.label} ${toggle.labelBefore} ${toggle.checkbox}`,
1301
+ labelVue: "-mt-2"
1244
1302
  };
1245
1303
  var clickable = {
1246
1304
  toggle: "absolute inset-0 h-full w-full appearance-none cursor-pointer focusable focusable-inset",
@@ -1250,19 +1308,27 @@ var clickable = {
1250
1308
  };
1251
1309
  var attention = {
1252
1310
  base: "border-2 relative flex items-start",
1253
- tooltip: "i-bg-$color-tooltip-background i-border-$color-tooltip-background i-shadow-$shadow-tooltip i-text-$color-tooltip-text rounded-4 py-6 px-8",
1254
- callout: "i-bg-$color-callout-background i-border-$color-callout-border i-text-$color-callout-text py-8 px-16 rounded-8",
1255
- highlight: "i-bg-$color-callout-background i-border-$color-callout-border i-text-$color-callout-text py-8 px-16 rounded-8 drop-shadow-m",
1256
- popover: "i-bg-$color-popover-background i-border-$color-popover-background i-text-$color-popover-paragraph-text rounded-8 p-16 drop-shadow-m",
1311
+ tooltip: "s-bg-inverted border-[--w-s-color-background-inverted] shadow-m s-text-inverted-static rounded-4 py-6 px-8",
1312
+ callout: "bg-[--w-color-callout-background] border-[--w-color-callout-border] s-text py-8 px-16 rounded-8",
1313
+ highlight: "bg-[--w-color-callout-background] border-[--w-color-callout-border] s-text py-8 px-16 rounded-8 drop-shadow-m translate-z-0",
1314
+ popover: "bg-[--w-s-color-surface-elevated-300] border-[--w-s-color-surface-elevated-300] s-text rounded-8 p-16 drop-shadow-m translate-z-0",
1257
1315
  arrowBase: "absolute h-[14px] w-[14px] border-2 border-b-0 border-r-0 rounded-tl-4 transform",
1316
+ arrowDirectionLeftStart: "-left-[8px]",
1258
1317
  arrowDirectionLeft: "-left-[8px]",
1318
+ arrowDirectionLeftEnd: "-left-[8px]",
1319
+ arrowDirectionRightStart: "-right-[8px]",
1259
1320
  arrowDirectionRight: "-right-[8px]",
1321
+ arrowDirectionRightEnd: "-right-[8px]",
1322
+ arrowDirectionBottomStart: "-bottom-[8px]",
1260
1323
  arrowDirectionBottom: "-bottom-[8px]",
1324
+ arrowDirectionBottomEnd: "-bottom-[8px]",
1325
+ arrowDirectionTopStart: "-top-[8px]",
1261
1326
  arrowDirectionTop: "-top-[8px]",
1262
- arrowTooltip: "i-bg-$color-tooltip-background i-border-$color-tooltip-background",
1263
- arrowCallout: "i-bg-$color-callout-background i-border-$color-callout-border",
1264
- arrowPopover: "i-bg-$color-popover-background i-border-$color-popover-background",
1265
- arrowHighlight: "i-bg-$color-callout-background i-border-$color-callout-border",
1327
+ arrowDirectionTopEnd: "-top-[8px]",
1328
+ arrowTooltip: "s-bg-inverted border-[--w-s-color-background-inverted]",
1329
+ arrowCallout: "bg-[--w-color-callout-background] border-[--w-color-callout-border]",
1330
+ arrowPopover: "bg-[--w-s-color-surface-elevated-300] border-[--w-s-color-surface-elevated-300]",
1331
+ arrowHighlight: "bg-[--w-color-callout-background] border-[--w-color-callout-border]",
1266
1332
  content: "last-child:mb-0",
1267
1333
  notCallout: "absolute z-50",
1268
1334
  closeBtn: `${buttonTextSizes.medium} ${buttonTypes.pill} ${buttonColors.pill} justify-self-end -mr-8 ml-8`
@@ -1272,10 +1338,10 @@ var attention = {
1272
1338
  import { LitElement } from "lit";
1273
1339
  import { unsafeStatic, html } from "lit/static-html.js";
1274
1340
 
1275
- // node_modules/.pnpm/@lingui+core@4.7.0/node_modules/@lingui/core/dist/index.mjs
1341
+ // node_modules/.pnpm/@lingui+core@4.7.1/node_modules/@lingui/core/dist/index.mjs
1276
1342
  var import_unraw = __toESM(require_dist(), 1);
1277
1343
 
1278
- // node_modules/.pnpm/@lingui+message-utils@4.7.0/node_modules/@lingui/message-utils/dist/compileMessage.mjs
1344
+ // node_modules/.pnpm/@lingui+message-utils@4.7.1/node_modules/@lingui/message-utils/dist/compileMessage.mjs
1279
1345
  var import_parser = __toESM(require_parser(), 1);
1280
1346
  function processTokens(tokens, mapText) {
1281
1347
  if (!tokens.filter((token) => token.type !== "content").length) {
@@ -1325,7 +1391,7 @@ Message: ${message}`);
1325
1391
  }
1326
1392
  }
1327
1393
 
1328
- // node_modules/.pnpm/@lingui+core@4.7.0/node_modules/@lingui/core/dist/index.mjs
1394
+ // node_modules/.pnpm/@lingui+core@4.7.1/node_modules/@lingui/core/dist/index.mjs
1329
1395
  var isString = (s) => typeof s === "string";
1330
1396
  var isFunction = (f) => typeof f === "function";
1331
1397
  var cache = /* @__PURE__ */ new Map();
@@ -1377,6 +1443,7 @@ function cacheKey(type, locales, options) {
1377
1443
  return `${type}-${localeKey}-${JSON.stringify(options)}`;
1378
1444
  }
1379
1445
  var UNICODE_REGEX = /\\u[a-fA-F0-9]{4}|\\x[a-fA-F0-9]{2}/g;
1446
+ var OCTOTHORPE_PH = "%__lingui_octothorpe__%";
1380
1447
  var getDefaultFormats = (locale, passedLocales, formats = {}) => {
1381
1448
  const locales = passedLocales || locale;
1382
1449
  const style = (format) => {
@@ -1385,7 +1452,7 @@ var getDefaultFormats = (locale, passedLocales, formats = {}) => {
1385
1452
  const replaceOctothorpe = (value, message) => {
1386
1453
  const numberFormat = Object.keys(formats).length ? style("number") : void 0;
1387
1454
  const valueStr = number(locales, value, numberFormat);
1388
- return message.replace("#", valueStr);
1455
+ return message.replace(new RegExp(OCTOTHORPE_PH, "g"), valueStr);
1389
1456
  };
1390
1457
  return {
1391
1458
  plural: (value, cases) => {
@@ -1400,43 +1467,53 @@ var getDefaultFormats = (locale, passedLocales, formats = {}) => {
1400
1467
  },
1401
1468
  select: selectFormatter,
1402
1469
  number: (value, format) => number(locales, value, style(format)),
1403
- date: (value, format) => date(locales, value, style(format)),
1404
- undefined: undefinedFormatter
1470
+ date: (value, format) => date(locales, value, style(format))
1405
1471
  };
1406
1472
  };
1407
1473
  var selectFormatter = (value, rules) => {
1408
1474
  var _a;
1409
1475
  return (_a = rules[value]) != null ? _a : rules.other;
1410
1476
  };
1411
- var undefinedFormatter = (value) => value;
1412
1477
  function interpolate(translation, locale, locales) {
1413
1478
  return (values = {}, formats) => {
1414
1479
  const formatters = getDefaultFormats(locale, locales, formats);
1415
- const formatMessage = (message) => {
1416
- if (!Array.isArray(message))
1417
- return message;
1418
- return message.reduce((message2, token) => {
1419
- if (isString(token))
1420
- return message2 + token;
1480
+ const formatMessage = (tokens) => {
1481
+ if (!Array.isArray(tokens))
1482
+ return tokens;
1483
+ return tokens.reduce((message, token) => {
1484
+ if (token === "#") {
1485
+ return message + OCTOTHORPE_PH;
1486
+ }
1487
+ if (isString(token)) {
1488
+ return message + token;
1489
+ }
1421
1490
  const [name, type, format] = token;
1422
1491
  let interpolatedFormat = {};
1423
- if (format != null && typeof format === "object") {
1424
- Object.entries(format).forEach(([key, value2]) => {
1425
- interpolatedFormat[key] = formatMessage(value2);
1426
- });
1492
+ if (type === "plural" || type === "selectordinal" || type === "select") {
1493
+ Object.entries(format).forEach(
1494
+ ([key, value2]) => {
1495
+ interpolatedFormat[key] = formatMessage(value2);
1496
+ }
1497
+ );
1427
1498
  } else {
1428
1499
  interpolatedFormat = format;
1429
1500
  }
1430
- const formatter = formatters[type];
1431
- const value = formatter(values[name], interpolatedFormat);
1432
- if (value == null)
1433
- return message2;
1434
- return message2 + value;
1501
+ let value;
1502
+ if (type) {
1503
+ const formatter = formatters[type];
1504
+ value = formatter(values[name], interpolatedFormat);
1505
+ } else {
1506
+ value = values[name];
1507
+ }
1508
+ if (value == null) {
1509
+ return message;
1510
+ }
1511
+ return message + value;
1435
1512
  }, "");
1436
1513
  };
1437
1514
  const result = formatMessage(translation);
1438
1515
  if (isString(result) && UNICODE_REGEX.test(result)) {
1439
- return (0, import_unraw.default)(result.trim());
1516
+ return (0, import_unraw.unraw)(result.trim());
1440
1517
  }
1441
1518
  if (isString(result))
1442
1519
  return result.trim();