@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
@@ -1029,26 +1029,27 @@ import { html as html3 } from "lit";
1029
1029
  import WarpElement from "@warp-ds/elements-core";
1030
1030
  import { ifDefined } from "lit/directives/if-defined.js";
1031
1031
 
1032
- // node_modules/.pnpm/@warp-ds+css@1.7.0/node_modules/@warp-ds/css/component-classes/index.js
1032
+ // node_modules/.pnpm/@warp-ds+css@1.9.1/node_modules/@warp-ds/css/component-classes/index.js
1033
1033
  var box = {
1034
1034
  box: "group block relative break-words last-child:mb-0 p-16 rounded-8",
1035
1035
  // Relative here enables w-clickable
1036
1036
  bleed: "-mx-16 sm:mx-0 rounded-l-0 rounded-r-0 sm:rounded-8",
1037
1037
  // We target L and R to override the default rounded-8
1038
- info: "i-bg-$color-box-info-background i-text-$color-box-info-text",
1039
- neutral: "i-bg-$color-box-neutral-background i-text-$color-box-neutral-text",
1040
- bordered: "border-2 i-border-$color-box-bordered-border i-bg-$color-box-bordered-background i-text-$color-box-bordered-text",
1041
- infoClickable: "hover:i-bg-$color-box-info-background-hover active:i-bg-$color-box-info-background-hover",
1042
- neutralClickable: "hover:i-bg-$color-box-neutral-background-hover active:i-bg-$color-box-neutral-background-hover",
1043
- 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"
1038
+ info: "s-bg-info-subtle",
1039
+ neutral: "bg-[--w-s-color-surface-sunken]",
1040
+ bordered: "border-2 s-border s-bg",
1041
+ infoClickable: "hover:s-bg-info-subtle-hover active:s-bg-info-subtle-hover",
1042
+ neutralClickable: "hover:s-bg-subtle-hover active:s-bg-subtle-hover",
1043
+ borderedClickable: "hover:s-bg-hover active:s-bg-hover hover:s-border-hover active:s-border-hover"
1044
1044
  };
1045
1045
  var buttonReset = "focus:outline-none appearance-none cursor-pointer bg-transparent border-0 m-0 p-0 inline-block";
1046
1046
  var expandable = {
1047
1047
  expandable: "will-change-height",
1048
- expandableTitle: "font-bold i-text-$color-expandable-title-text",
1049
- expandableBox: "i-bg-$color-expandable-background hover:i-bg-$color-expandable-background-hover py-0 px-0 " + box.box,
1048
+ expandableTitle: "font-bold s-text",
1049
+ expandableBox: "s-bg-subtle hover:s-bg-subtle-hover py-0 px-0 " + box.box,
1050
+ expandableInfo: "s-bg-info-subtle! hover:s-bg-info-subtle-hover!",
1050
1051
  expandableBleed: box.bleed,
1051
- chevron: "inline-block align-middle i-text-$color-expandable-icon",
1052
+ chevron: "inline-block align-middle s-icon",
1052
1053
  chevronNonBox: "ml-8",
1053
1054
  chevronBox: "",
1054
1055
  chevronTransform: "transform transition-transform transform-gpu ease-in-out",
@@ -1068,17 +1069,17 @@ var expandable = {
1068
1069
  };
1069
1070
  var buttonDefaultStyling = "font-bold focusable justify-center transition-colors ease-in-out";
1070
1071
  var buttonColors = {
1071
- 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",
1072
- 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",
1073
- 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",
1074
- 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",
1075
- 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",
1076
- disabled: "i-text-$color-button-disabled-text i-bg-$color-button-disabled-background",
1077
- 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",
1078
- utilityQuiet: "i-text-$color-button-utility-quiet-text i-bg-$color-button-utility-quiet-background hover:i-bg-$color-button-utility-quiet-background-hover",
1079
- 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",
1080
- loading: "i-text-$color-button-loading-text i-bg-$color-button-loading-background",
1081
- link: "i-text-$color-button-link-text"
1072
+ 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]",
1073
+ secondary: "s-text-link s-border s-bg hover:s-bg-hover hover:s-border-hover active:s-bg-active",
1074
+ utility: "s-text s-bg hover:s-bg-hover active:s-bg-active s-border hover:s-border-hover active:s-border-active",
1075
+ destructive: "s-bg-negative s-text-inverted hover:s-bg-negative-hover active:s-bg-negative-active",
1076
+ 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]",
1077
+ disabled: "s-text-inverted s-bg-disabled",
1078
+ quiet: "bg-transparent s-text-link hover:s-bg-hover active:s-bg-active",
1079
+ utilityQuiet: "s-text bg-transparent hover:s-bg-hover active:s-bg-active",
1080
+ negativeQuiet: "bg-transparent s-text-negative hover:s-bg-negative-subtle-hover active:s-bg-negative-subtle-active",
1081
+ loading: "s-text s-bg-subtle",
1082
+ link: "s-text-link"
1082
1083
  };
1083
1084
  var buttonTypes = {
1084
1085
  primary: `border-0 rounded-8 ${buttonDefaultStyling}`,
@@ -1182,10 +1183,10 @@ var button = {
1182
1183
  contentWidth: "max-w-max"
1183
1184
  };
1184
1185
  var modal = {
1185
- //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
1186
- 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`,
1187
- 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]",
1188
- 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",
1186
+ transparentBg: "",
1187
+ //TODO: Remove in v2 - previously used for opacity before changing to a rgba background in backdrop
1188
+ 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]",
1189
+ 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",
1189
1190
  content: "block overflow-y-auto overflow-x-hidden last-child:mb-0 grow shrink px-16 sm:px-32 relative",
1190
1191
  footer: "flex justify-end shrink-0 px-16 sm:px-32",
1191
1192
  transitionTitle: "transition-all duration-300",
@@ -1200,22 +1201,79 @@ var modal = {
1200
1201
  titleButtonIconRotated: "transform rotate-90"
1201
1202
  };
1202
1203
  var label = {
1203
- label: "antialiased block relative text-s font-bold pb-4 cursor-pointer i-text-$color-label-text",
1204
- labelInvalid: "i-text-$color-label-text-negative",
1205
- optional: "pl-8 font-normal text-s i-text-$color-label-optional-text"
1204
+ label: "antialiased block relative text-s font-bold pb-4 cursor-pointer s-text",
1205
+ optional: "pl-8 font-normal text-s s-text-subtle",
1206
+ labelInvalid: "s-text-negative"
1207
+ // TODO: Remove in v2 - kept for backwards compatibility
1206
1208
  };
1207
- var prefixSuffixWrapperBase = "absolute top-0 bottom-0 flex justify-center items-center focusable focus:[--w-outline-offset:-2px] bg-transparent ";
1209
+ var prefixSuffixWrapperBase = "absolute top-0 bottom-0 flex justify-center items-center focusable rounded-4 focus:[--w-outline-offset:-2px] bg-transparent ";
1208
1210
  var suffix = {
1209
1211
  wrapper: prefixSuffixWrapperBase + "right-0",
1210
1212
  wrapperWithLabel: "w-max pr-12",
1211
1213
  wrapperWithIcon: "w-40",
1212
- label: "antialiased block relative cursor-default pb-0 font-bold text-xs i-text-$color-label-text"
1214
+ label: "antialiased block relative cursor-default pb-0 font-bold text-xs s-text"
1213
1215
  };
1214
1216
  var prefix = {
1215
1217
  wrapper: prefixSuffixWrapperBase + "left-0",
1216
1218
  wrapperWithLabel: "w-max pl-12",
1217
1219
  wrapperWithIcon: "w-40",
1218
- label: "antialiased block relative cursor-default pb-0 font-bold text-xs i-text-$color-label-text"
1220
+ label: "antialiased block relative cursor-default pb-0 font-bold text-xs s-text"
1221
+ };
1222
+ var toggle = {
1223
+ // wrapper classes
1224
+ field: "relative text-m",
1225
+ // true
1226
+ wrapper: "relative py-1",
1227
+ // true
1228
+ wrapperRadioButtons: "inline-flex font-bold rounded-8 focus-within:focusable",
1229
+ // isRadioButton && !isEqualWidth
1230
+ wrapperRadioButtonsJustified: "flex font-bold rounded-8 focus-within:focusable",
1231
+ // isRadioButton && isEqualWidth,
1232
+ // group classes
1233
+ radioButtonsGroup: "group",
1234
+ // isRadioButton
1235
+ radioButtonsGroupJustified: "grow-1 shrink-0 basis-auto",
1236
+ // isRadioButton && isEqualWidth
1237
+ // input classes
1238
+ input: "peer",
1239
+ a11y: "sr-only",
1240
+ // label classes
1241
+ 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",
1242
+ // !isRadioButton
1243
+ labelBefore: 'before:content-[""] before:block',
1244
+ // !isRadioButton && !isIndeterminate
1245
+ 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",
1246
+ // isCheckbox && !isIndeterminate && !isInvalid && !isDisabled
1247
+ 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",
1248
+ // isCheckbox && !isIndeterminate && isInvalid && !isDisabled
1249
+ 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",
1250
+ // isCheckbox && !isIndeterminate && !isInvalid && isDisabled
1251
+ 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',
1252
+ // isCheckbox && isIndeterminate && !isInvalid && !isDisabled
1253
+ 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',
1254
+ // isCheckbox && isIndeterminate && isInvalid && !isDisabled
1255
+ 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',
1256
+ // isCheckbox && isIndeterminate && !isInvalid && isDisabled
1257
+ 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",
1258
+ // isRadio && !isDisabled && !isInvalid
1259
+ 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",
1260
+ // isRadio && isInvalid && !isDisabled
1261
+ radioDisabled: "before:s-bg-disabled-subtle before:s-border-disabled pointer-events-none before:rounded-full peer-checked:before:border-[6]",
1262
+ // isRadio && !isInvalid && isDisabled
1263
+ 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",
1264
+ // isRadioButtons
1265
+ radioButtonsRegular: "text-s py-8 pl-12 pr-14",
1266
+ // isRadioButtons && !isSmall
1267
+ radioButtonsSmall: "text-xs py-[5px] px-[8px]"
1268
+ // isRadioButtons && isSmall
1269
+ };
1270
+ var deadToggle = {
1271
+ wrapper: `${toggle.wrapper} h-20 w-20 pointer-events-none`,
1272
+ input: `${toggle.input} hidden`,
1273
+ inputVue: "hidden",
1274
+ labelRadio: `${toggle.label} ${toggle.labelBefore} ${toggle.radio}`,
1275
+ labelCheckbox: `${toggle.label} ${toggle.labelBefore} ${toggle.checkbox}`,
1276
+ labelVue: "-mt-2"
1219
1277
  };
1220
1278
  var clickable = {
1221
1279
  toggle: "absolute inset-0 h-full w-full appearance-none cursor-pointer focusable focusable-inset",
@@ -1225,19 +1283,27 @@ var clickable = {
1225
1283
  };
1226
1284
  var attention = {
1227
1285
  base: "border-2 relative flex items-start",
1228
- 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",
1229
- callout: "i-bg-$color-callout-background i-border-$color-callout-border i-text-$color-callout-text py-8 px-16 rounded-8",
1230
- 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",
1231
- popover: "i-bg-$color-popover-background i-border-$color-popover-background i-text-$color-popover-paragraph-text rounded-8 p-16 drop-shadow-m",
1286
+ tooltip: "s-bg-inverted border-[--w-s-color-background-inverted] shadow-m s-text-inverted-static rounded-4 py-6 px-8",
1287
+ callout: "bg-[--w-color-callout-background] border-[--w-color-callout-border] s-text py-8 px-16 rounded-8",
1288
+ 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",
1289
+ 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",
1232
1290
  arrowBase: "absolute h-[14px] w-[14px] border-2 border-b-0 border-r-0 rounded-tl-4 transform",
1291
+ arrowDirectionLeftStart: "-left-[8px]",
1233
1292
  arrowDirectionLeft: "-left-[8px]",
1293
+ arrowDirectionLeftEnd: "-left-[8px]",
1294
+ arrowDirectionRightStart: "-right-[8px]",
1234
1295
  arrowDirectionRight: "-right-[8px]",
1296
+ arrowDirectionRightEnd: "-right-[8px]",
1297
+ arrowDirectionBottomStart: "-bottom-[8px]",
1235
1298
  arrowDirectionBottom: "-bottom-[8px]",
1299
+ arrowDirectionBottomEnd: "-bottom-[8px]",
1300
+ arrowDirectionTopStart: "-top-[8px]",
1236
1301
  arrowDirectionTop: "-top-[8px]",
1237
- arrowTooltip: "i-bg-$color-tooltip-background i-border-$color-tooltip-background",
1238
- arrowCallout: "i-bg-$color-callout-background i-border-$color-callout-border",
1239
- arrowPopover: "i-bg-$color-popover-background i-border-$color-popover-background",
1240
- arrowHighlight: "i-bg-$color-callout-background i-border-$color-callout-border",
1302
+ arrowDirectionTopEnd: "-top-[8px]",
1303
+ arrowTooltip: "s-bg-inverted border-[--w-s-color-background-inverted]",
1304
+ arrowCallout: "bg-[--w-color-callout-background] border-[--w-color-callout-border]",
1305
+ arrowPopover: "bg-[--w-s-color-surface-elevated-300] border-[--w-s-color-surface-elevated-300]",
1306
+ arrowHighlight: "bg-[--w-color-callout-background] border-[--w-color-callout-border]",
1241
1307
  content: "last-child:mb-0",
1242
1308
  notCallout: "absolute z-50",
1243
1309
  closeBtn: `${buttonTextSizes.medium} ${buttonTypes.pill} ${buttonColors.pill} justify-self-end -mr-8 ml-8`
@@ -1247,10 +1313,10 @@ var attention = {
1247
1313
  import { LitElement } from "lit";
1248
1314
  import { unsafeStatic, html } from "lit/static-html.js";
1249
1315
 
1250
- // node_modules/.pnpm/@lingui+core@4.7.0/node_modules/@lingui/core/dist/index.mjs
1316
+ // node_modules/.pnpm/@lingui+core@4.7.1/node_modules/@lingui/core/dist/index.mjs
1251
1317
  var import_unraw = __toESM(require_dist(), 1);
1252
1318
 
1253
- // node_modules/.pnpm/@lingui+message-utils@4.7.0/node_modules/@lingui/message-utils/dist/compileMessage.mjs
1319
+ // node_modules/.pnpm/@lingui+message-utils@4.7.1/node_modules/@lingui/message-utils/dist/compileMessage.mjs
1254
1320
  var import_parser = __toESM(require_parser(), 1);
1255
1321
  function processTokens(tokens, mapText) {
1256
1322
  if (!tokens.filter((token) => token.type !== "content").length) {
@@ -1300,7 +1366,7 @@ Message: ${message}`);
1300
1366
  }
1301
1367
  }
1302
1368
 
1303
- // node_modules/.pnpm/@lingui+core@4.7.0/node_modules/@lingui/core/dist/index.mjs
1369
+ // node_modules/.pnpm/@lingui+core@4.7.1/node_modules/@lingui/core/dist/index.mjs
1304
1370
  var isString = (s) => typeof s === "string";
1305
1371
  var isFunction = (f) => typeof f === "function";
1306
1372
  var cache = /* @__PURE__ */ new Map();
@@ -1352,6 +1418,7 @@ function cacheKey(type, locales, options) {
1352
1418
  return `${type}-${localeKey}-${JSON.stringify(options)}`;
1353
1419
  }
1354
1420
  var UNICODE_REGEX = /\\u[a-fA-F0-9]{4}|\\x[a-fA-F0-9]{2}/g;
1421
+ var OCTOTHORPE_PH = "%__lingui_octothorpe__%";
1355
1422
  var getDefaultFormats = (locale, passedLocales, formats = {}) => {
1356
1423
  const locales = passedLocales || locale;
1357
1424
  const style = (format) => {
@@ -1360,7 +1427,7 @@ var getDefaultFormats = (locale, passedLocales, formats = {}) => {
1360
1427
  const replaceOctothorpe = (value, message) => {
1361
1428
  const numberFormat = Object.keys(formats).length ? style("number") : void 0;
1362
1429
  const valueStr = number(locales, value, numberFormat);
1363
- return message.replace("#", valueStr);
1430
+ return message.replace(new RegExp(OCTOTHORPE_PH, "g"), valueStr);
1364
1431
  };
1365
1432
  return {
1366
1433
  plural: (value, cases) => {
@@ -1375,43 +1442,53 @@ var getDefaultFormats = (locale, passedLocales, formats = {}) => {
1375
1442
  },
1376
1443
  select: selectFormatter,
1377
1444
  number: (value, format) => number(locales, value, style(format)),
1378
- date: (value, format) => date(locales, value, style(format)),
1379
- undefined: undefinedFormatter
1445
+ date: (value, format) => date(locales, value, style(format))
1380
1446
  };
1381
1447
  };
1382
1448
  var selectFormatter = (value, rules) => {
1383
1449
  var _a;
1384
1450
  return (_a = rules[value]) != null ? _a : rules.other;
1385
1451
  };
1386
- var undefinedFormatter = (value) => value;
1387
1452
  function interpolate(translation, locale, locales) {
1388
1453
  return (values = {}, formats) => {
1389
1454
  const formatters = getDefaultFormats(locale, locales, formats);
1390
- const formatMessage = (message) => {
1391
- if (!Array.isArray(message))
1392
- return message;
1393
- return message.reduce((message2, token) => {
1394
- if (isString(token))
1395
- return message2 + token;
1455
+ const formatMessage = (tokens) => {
1456
+ if (!Array.isArray(tokens))
1457
+ return tokens;
1458
+ return tokens.reduce((message, token) => {
1459
+ if (token === "#") {
1460
+ return message + OCTOTHORPE_PH;
1461
+ }
1462
+ if (isString(token)) {
1463
+ return message + token;
1464
+ }
1396
1465
  const [name, type, format] = token;
1397
1466
  let interpolatedFormat = {};
1398
- if (format != null && typeof format === "object") {
1399
- Object.entries(format).forEach(([key, value2]) => {
1400
- interpolatedFormat[key] = formatMessage(value2);
1401
- });
1467
+ if (type === "plural" || type === "selectordinal" || type === "select") {
1468
+ Object.entries(format).forEach(
1469
+ ([key, value2]) => {
1470
+ interpolatedFormat[key] = formatMessage(value2);
1471
+ }
1472
+ );
1402
1473
  } else {
1403
1474
  interpolatedFormat = format;
1404
1475
  }
1405
- const formatter = formatters[type];
1406
- const value = formatter(values[name], interpolatedFormat);
1407
- if (value == null)
1408
- return message2;
1409
- return message2 + value;
1476
+ let value;
1477
+ if (type) {
1478
+ const formatter = formatters[type];
1479
+ value = formatter(values[name], interpolatedFormat);
1480
+ } else {
1481
+ value = values[name];
1482
+ }
1483
+ if (value == null) {
1484
+ return message;
1485
+ }
1486
+ return message + value;
1410
1487
  }, "");
1411
1488
  };
1412
1489
  const result = formatMessage(translation);
1413
1490
  if (isString(result) && UNICODE_REGEX.test(result)) {
1414
- return (0, import_unraw.default)(result.trim());
1491
+ return (0, import_unraw.unraw)(result.trim());
1415
1492
  }
1416
1493
  if (isString(result))
1417
1494
  return result.trim();