@limetech/lime-elements 39.45.2 → 40.0.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 (103) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/cjs/lime-elements.cjs.js +1 -1
  3. package/dist/cjs/limel-action-bar_3.cjs.entry.js +1 -1
  4. package/dist/cjs/limel-ai-avatar.cjs.entry.js +1 -1
  5. package/dist/cjs/limel-callout.cjs.entry.js +1 -1
  6. package/dist/cjs/limel-chart.cjs.entry.js +1 -1
  7. package/dist/cjs/limel-chip-set.cjs.entry.js +1 -1
  8. package/dist/cjs/limel-chip_2.cjs.entry.js +1 -1
  9. package/dist/cjs/limel-code-diff.cjs.entry.js +1 -1
  10. package/dist/cjs/limel-code-editor.cjs.entry.js +1 -1
  11. package/dist/cjs/limel-collapsible-section.cjs.entry.js +1 -1
  12. package/dist/cjs/limel-drag-handle.cjs.entry.js +1 -1
  13. package/dist/cjs/limel-email-viewer.cjs.entry.js +1 -1
  14. package/dist/cjs/limel-file-viewer.cjs.entry.js +701 -345
  15. package/dist/cjs/limel-file.cjs.entry.js +1 -1
  16. package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +1 -1
  17. package/dist/cjs/limel-form.cjs.entry.js +17 -43
  18. package/dist/cjs/limel-list-item.cjs.entry.js +1 -1
  19. package/dist/cjs/limel-picker.cjs.entry.js +1 -1
  20. package/dist/cjs/limel-profile-picture.cjs.entry.js +1 -1
  21. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +40 -40
  22. package/dist/cjs/limel-slider.cjs.entry.js +140 -16
  23. package/dist/cjs/limel-snackbar.cjs.entry.js +1 -1
  24. package/dist/cjs/limel-table.cjs.entry.js +1 -1
  25. package/dist/cjs/limel-text-editor-link-menu.cjs.entry.js +1 -1
  26. package/dist/cjs/loader.cjs.js +1 -1
  27. package/dist/cjs/{translations-Bnw00bkf.js → translations-Do_D3pxu.js} +39 -2
  28. package/dist/collection/components/slider/slider.css +95 -0
  29. package/dist/collection/components/slider/slider.js +174 -21
  30. package/dist/collection/global/translations.js +15 -2
  31. package/dist/collection/translations/da.js +3 -0
  32. package/dist/collection/translations/de.js +3 -0
  33. package/dist/collection/translations/en.js +3 -0
  34. package/dist/collection/translations/fi.js +3 -0
  35. package/dist/collection/translations/fr.js +3 -0
  36. package/dist/collection/translations/nl.js +3 -0
  37. package/dist/collection/translations/no.js +3 -0
  38. package/dist/collection/translations/sv.js +3 -0
  39. package/dist/esm/lime-elements.js +1 -1
  40. package/dist/esm/limel-action-bar_3.entry.js +1 -1
  41. package/dist/esm/limel-ai-avatar.entry.js +1 -1
  42. package/dist/esm/limel-callout.entry.js +1 -1
  43. package/dist/esm/limel-chart.entry.js +1 -1
  44. package/dist/esm/limel-chip-set.entry.js +1 -1
  45. package/dist/esm/limel-chip_2.entry.js +1 -1
  46. package/dist/esm/limel-code-diff.entry.js +1 -1
  47. package/dist/esm/limel-code-editor.entry.js +1 -1
  48. package/dist/esm/limel-collapsible-section.entry.js +1 -1
  49. package/dist/esm/limel-drag-handle.entry.js +1 -1
  50. package/dist/esm/limel-email-viewer.entry.js +1 -1
  51. package/dist/esm/limel-file-viewer.entry.js +701 -345
  52. package/dist/esm/limel-file.entry.js +1 -1
  53. package/dist/esm/limel-flatpickr-adapter.entry.js +1 -1
  54. package/dist/esm/limel-form.entry.js +17 -43
  55. package/dist/esm/limel-list-item.entry.js +1 -1
  56. package/dist/esm/limel-picker.entry.js +1 -1
  57. package/dist/esm/limel-profile-picture.entry.js +1 -1
  58. package/dist/esm/limel-prosemirror-adapter.entry.js +40 -40
  59. package/dist/esm/limel-slider.entry.js +140 -16
  60. package/dist/esm/limel-snackbar.entry.js +1 -1
  61. package/dist/esm/limel-table.entry.js +1 -1
  62. package/dist/esm/limel-text-editor-link-menu.entry.js +1 -1
  63. package/dist/esm/loader.js +1 -1
  64. package/dist/esm/{translations-Cb9R_zmF.js → translations-DgqE77nk.js} +39 -2
  65. package/dist/lime-elements/lime-elements.esm.js +1 -1
  66. package/dist/lime-elements/{p-421612f9.entry.js → p-21b54196.entry.js} +4 -4
  67. package/dist/lime-elements/p-3e316685.entry.js +1 -0
  68. package/dist/lime-elements/{p-c8116a01.entry.js → p-565f688a.entry.js} +1 -1
  69. package/dist/lime-elements/{p-aa080a8f.entry.js → p-5dde5d72.entry.js} +1 -1
  70. package/dist/lime-elements/{p-31713caf.entry.js → p-5e432a44.entry.js} +1 -1
  71. package/dist/lime-elements/{p-4a09fb2e.entry.js → p-62a25deb.entry.js} +1 -1
  72. package/dist/lime-elements/{p-8aa4a38e.entry.js → p-72a1d432.entry.js} +1 -1
  73. package/dist/lime-elements/{p-9a04a686.entry.js → p-83bdbaf7.entry.js} +1 -1
  74. package/dist/lime-elements/{p-ca0b86ee.entry.js → p-8c3798ee.entry.js} +1 -1
  75. package/dist/lime-elements/{p-8aeeeb53.entry.js → p-8cf79fa1.entry.js} +1 -1
  76. package/dist/lime-elements/{p-7487d65d.entry.js → p-9ed9d0de.entry.js} +1 -1
  77. package/dist/lime-elements/p-DgqE77nk.js +1 -0
  78. package/dist/lime-elements/{p-2284caa7.entry.js → p-a6500046.entry.js} +1 -1
  79. package/dist/lime-elements/{p-e545c9e8.entry.js → p-b04c6602.entry.js} +1 -1
  80. package/dist/lime-elements/{p-d97df2cd.entry.js → p-b4b43404.entry.js} +1 -1
  81. package/dist/lime-elements/p-b6528083.entry.js +1 -0
  82. package/dist/lime-elements/{p-6722e6e2.entry.js → p-cafebc7d.entry.js} +1 -1
  83. package/dist/lime-elements/{p-2f223e46.entry.js → p-cdcd9880.entry.js} +1 -1
  84. package/dist/lime-elements/{p-2e5d5e79.entry.js → p-dd116bb1.entry.js} +1 -1
  85. package/dist/lime-elements/{p-d7bb4310.entry.js → p-dda63b8b.entry.js} +1 -1
  86. package/dist/lime-elements/{p-7f7e2180.entry.js → p-e8783848.entry.js} +1 -1
  87. package/dist/lime-elements/{p-19c81ded.entry.js → p-eeddce38.entry.js} +1 -1
  88. package/dist/lime-elements/{p-9ae7d11b.entry.js → p-f53d8bda.entry.js} +1 -1
  89. package/dist/lime-elements/{p-03fd2181.entry.js → p-fa4edcf5.entry.js} +1 -1
  90. package/dist/types/components/slider/slider.d.ts +67 -4
  91. package/dist/types/components.d.ts +25 -10
  92. package/dist/types/translations/da.d.ts +3 -0
  93. package/dist/types/translations/de.d.ts +3 -0
  94. package/dist/types/translations/en.d.ts +3 -0
  95. package/dist/types/translations/fi.d.ts +3 -0
  96. package/dist/types/translations/fr.d.ts +3 -0
  97. package/dist/types/translations/nl.d.ts +3 -0
  98. package/dist/types/translations/no.d.ts +3 -0
  99. package/dist/types/translations/sv.d.ts +3 -0
  100. package/package.json +9 -9
  101. package/dist/lime-elements/p-Cb9R_zmF.js +0 -1
  102. package/dist/lime-elements/p-ee58f0b4.entry.js +0 -1
  103. package/dist/lime-elements/p-f51b5651.entry.js +0 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-DYg_7kkT.js');
4
- var translations = require('./translations-Bnw00bkf.js');
4
+ var translations = require('./translations-Do_D3pxu.js');
5
5
  var fileMetadata = require('./file-metadata-BrhOssGG.js');
6
6
  var formatBytes = require('./format-bytes-CpUKKU86.js');
7
7
  var imageResize = require('./image-resize-CG2fitJT.js');
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-DYg_7kkT.js');
4
- var translations = require('./translations-Bnw00bkf.js');
4
+ var translations = require('./translations-Do_D3pxu.js');
5
5
  var _commonjsHelpers = require('./_commonjsHelpers-CFO10eej.js');
6
6
  require('./sv-BSR4W58y.js');
7
7
  var moment = require('./moment-CqRdiK10.js');
@@ -29155,8 +29155,15 @@ function NullField(props) {
29155
29155
  return null;
29156
29156
  }
29157
29157
 
29158
- // Static matchers for standard '.' separator used during normalization inside handleChange
29158
+ // Matches a string that ends in a . character, optionally followed by a sequence of
29159
+ // digits followed by any number of 0 characters up until the end of the line.
29160
+ // Ensuring that there is at least one prefixed character is important so that
29161
+ // you don't incorrectly match against "0".
29159
29162
  const trailingCharMatcherWithPrefix = /\.([0-9]*0)*$/;
29163
+ // This is used for trimming the trailing 0 and . characters without affecting
29164
+ // the rest of the string. Its possible to use one RegEx with groups for this
29165
+ // functionality, but it is fairly complex compared to simply defining two
29166
+ // different matchers.
29160
29167
  const trailingCharMatcher = /[0.]0*$/;
29161
29168
  /**
29162
29169
  * The NumberField class has some special handling for dealing with trailing
@@ -29179,8 +29186,6 @@ function NumberField(props) {
29179
29186
  const { registry, onChange, formData, value: initialValue } = props;
29180
29187
  const [lastValue, setLastValue] = reactExports.useState(initialValue);
29181
29188
  const { StringField } = registry.fields;
29182
- const separator = getDecimalSeparator();
29183
- const escapedSeparator = separator === '.' ? '\\.' : separator;
29184
29189
  let value = formData;
29185
29190
  /** Handle the change from the `StringField` to properly convert to a number
29186
29191
  *
@@ -29189,11 +29194,9 @@ function NumberField(props) {
29189
29194
  const handleChange = reactExports.useCallback((newValue, path, errorSchema, id) => {
29190
29195
  // Cache the original value in component state
29191
29196
  setLastValue(newValue);
29192
- // Convert locale separator to standard '.' first
29193
- const standardValue = typeof newValue === 'string' ? newValue.replace(separator, '.') : newValue;
29194
29197
  // Normalize decimals that don't start with a zero character in advance so
29195
29198
  // that the rest of the normalization logic is simpler
29196
- const normalizedValue = `${standardValue}`.startsWith('.') ? `0${standardValue}` : standardValue;
29199
+ const normalizedValue = `${newValue}`.startsWith('.') ? `0${newValue}` : newValue;
29197
29200
  // Check that the value is a string (this can happen if the widget used is a
29198
29201
  // <select>, due to an enum declaration etc) then, if the value ends in a
29199
29202
  // trailing decimal point or multiple zeroes, strip the trailing values
@@ -29201,33 +29204,19 @@ function NumberField(props) {
29201
29204
  ? asNumber(normalizedValue.replace(trailingCharMatcher, ''))
29202
29205
  : asNumber(normalizedValue);
29203
29206
  onChange(processed, path, errorSchema, id);
29204
- }, [onChange, separator]);
29207
+ }, [onChange]);
29205
29208
  if (typeof lastValue === 'string' && typeof value === 'number') {
29206
29209
  // Construct a regular expression that checks for a string that consists
29207
- // of the formData value suffixed with zero or one locale separator characters and zero
29210
+ // of the formData value suffixed with zero or one '.' characters and zero
29208
29211
  // or more '0' characters
29209
- const re = new RegExp(`^(${String(value).replace('.', escapedSeparator)})?${escapedSeparator}?0*$`);
29212
+ const re = new RegExp(`^(${String(value).replace('.', '\\.')})?\\.?0*$`);
29210
29213
  // If the cached "lastValue" is a match, use that instead of the formData
29211
29214
  // value to prevent the input value from changing in the UI
29212
29215
  if (lastValue.match(re)) {
29213
29216
  value = lastValue;
29214
29217
  }
29215
29218
  }
29216
- // Format value to use the locale separator for rendering if it is a number
29217
- let displayValue = value;
29218
- if (typeof value === 'number' && separator !== '.') {
29219
- const { schema, uiSchema } = props;
29220
- const { schemaUtils } = registry;
29221
- const enumOptions = schemaUtils.isSelect(schema) ? optionsList(schema, uiSchema) : undefined;
29222
- const defaultWidget = enumOptions ? 'select' : 'text';
29223
- const { widget = defaultWidget } = getUiOptions(uiSchema);
29224
- // Do not convert the value to a locale-specific string for radio, select,
29225
- // or hidden widgets because option matching relies on the original numeric value.
29226
- if (widget !== 'radio' && widget !== 'select' && widget !== 'hidden') {
29227
- displayValue = String(value).replace('.', separator);
29228
- }
29229
- }
29230
- return jsxRuntimeExports.jsx(StringField, { ...props, formData: displayValue, onChange: handleChange });
29219
+ return jsxRuntimeExports.jsx(StringField, { ...props, formData: value, onChange: handleChange });
29231
29220
  }
29232
29221
 
29233
29222
  var q={af:"\u2061",applyfunction:"\u2061",ic:"\u2063",invisiblecomma:"\u2063",invisibletimes:"\u2062",it:"\u2062",lrm:"\u200E",negativemediumspace:"\u200B",negativethickspace:"\u200B",negativethinspace:"\u200B",negativeverythinspace:"\u200B",nobreak:"\u2060",rlm:"\u200F",shy:"\xAD",zerowidthspace:"\u200B",zwj:"\u200D",zwnj:"\u200C",downbreve:"\u0311",tdot:"\u20DB",tripledot:"\u20DB",dotdot:"\u20DC",tab:" ",newline:`
@@ -29320,12 +29309,6 @@ function getDefaultValue(translateString, type) {
29320
29309
  return translateString(TranslatableString.NewStringDefault);
29321
29310
  }
29322
29311
  }
29323
- function isAdditionalPropertySchema(schema) {
29324
- return Boolean(schema?.[ADDITIONAL_PROPERTY_FLAG]);
29325
- }
29326
- function getAdditionalPropertyOrder(schemaProperties) {
29327
- return Object.keys(schemaProperties).filter((property) => isAdditionalPropertySchema(schemaProperties[property]));
29328
- }
29329
29312
  /** The `ObjectFieldProperty` component is used to render the `SchemaField` for a child property of an object
29330
29313
  */
29331
29314
  function ObjectFieldPropertyFn(props) {
@@ -29390,15 +29373,10 @@ function ObjectField$1(props) {
29390
29373
  formDataRef.current = formData;
29391
29374
  const schema = reactExports.useMemo(() => schemaUtils.retrieveSchema(rawSchema, formData, true), [schemaUtils, rawSchema, formData]);
29392
29375
  const uiOptions = reactExports.useMemo(() => getUiOptions(uiSchema, globalUiOptions), [uiSchema, globalUiOptions]);
29393
- const schemaProperties = reactExports.useMemo(() => schema.properties ?? {}, [schema.properties]);
29376
+ const { properties: schemaProperties = {} } = schema;
29394
29377
  // All the children will use childFieldPathId if present in the props, falling back to the fieldPathId
29395
29378
  const childFieldPathId = props.childFieldPathId ?? fieldPathId;
29396
29379
  const lastRenamedProperty = reactExports.useRef({ previousKey: '', currentKey: undefined });
29397
- const [additionalPropertyOrder, setAdditionalPropertyOrder] = reactExports.useState(() => getAdditionalPropertyOrder(schemaProperties));
29398
- const definedPropertyOrder = reactExports.useMemo(() => {
29399
- const additionalPropertySet = new Set(getAdditionalPropertyOrder(schemaProperties));
29400
- return Object.keys(schemaProperties).filter((property) => !additionalPropertySet.has(property));
29401
- }, [schemaProperties]);
29402
29380
  const templateTitle = uiOptions.title ?? schema.title ?? title ?? name;
29403
29381
  const description = uiOptions.description ?? schema.description;
29404
29382
  const renderOptionalField = shouldRenderOptionalField(registry, schema, required, uiSchema);
@@ -29461,7 +29439,6 @@ function ObjectField$1(props) {
29461
29439
  lastRenamedProperty.current.currentKey = newKey;
29462
29440
  lastRenamedProperty.current.previousKey = getAvailableKey(newKey, newFormData);
29463
29441
  }
29464
- setAdditionalPropertyOrder((order) => [...order, newKey]);
29465
29442
  onChange(newFormData, childFieldPathId.path);
29466
29443
  }, [formData, onChange, translateString, schemaUtils, childFieldPathId, getAvailableKey, schema]);
29467
29444
  /** Returns a callback function that deals with the rename of a key for an additional property for a schema. That
@@ -29490,7 +29467,6 @@ function ObjectField$1(props) {
29490
29467
  lastRenamedProperty.current.previousKey = oldKey;
29491
29468
  }
29492
29469
  lastRenamedProperty.current.currentKey = actualNewKey;
29493
- setAdditionalPropertyOrder((order) => order.map((property) => (property === oldKey ? actualNewKey : property)));
29494
29470
  onChange(renamedObj, childFieldPathId.path);
29495
29471
  }
29496
29472
  }, [onChange, childFieldPathId, getAvailableKey]);
@@ -29498,7 +29474,6 @@ function ObjectField$1(props) {
29498
29474
  * value for the path plus the key to be removed
29499
29475
  */
29500
29476
  const handleRemoveProperty = reactExports.useCallback((key) => {
29501
- setAdditionalPropertyOrder((order) => order.filter((property) => property !== key));
29502
29477
  onChange(ADDITIONAL_PROPERTY_KEY_REMOVE, [...childFieldPathId.path, key]);
29503
29478
  }, [onChange, childFieldPathId]);
29504
29479
  /** Returns the stable React key for a property. For the most recently renamed
@@ -29514,9 +29489,8 @@ function ObjectField$1(props) {
29514
29489
  }, []);
29515
29490
  if (!renderOptionalField || hasFormData) {
29516
29491
  try {
29517
- const definedPropertySet = new Set(definedPropertyOrder);
29518
- const currentAdditionalProperties = additionalPropertyOrder.filter((property) => Object.hasOwn(schemaProperties, property) && !definedPropertySet.has(property));
29519
- orderedProperties = orderProperties([...definedPropertyOrder, ...currentAdditionalProperties], uiOptions.order);
29492
+ const properties = Object.keys(schemaProperties);
29493
+ orderedProperties = orderProperties(properties, uiOptions.order);
29520
29494
  }
29521
29495
  catch (err) {
29522
29496
  return (jsxRuntimeExports.jsxs("div", { children: [jsxRuntimeExports.jsx("p", { className: 'rjsf-config-error', style: { color: 'red' }, children: jsxRuntimeExports.jsx(AZ, { options: { disableParsingRawHTML: true }, children: translateString(TranslatableString.InvalidObjectField, [name || 'root', err.message]) }) }), jsxRuntimeExports.jsx("pre", { children: JSON.stringify(schema) })] }));
@@ -29529,7 +29503,7 @@ function ObjectField$1(props) {
29529
29503
  title: uiOptions.label === false ? '' : templateTitle,
29530
29504
  description: uiOptions.label === false ? undefined : description,
29531
29505
  properties: orderedProperties.map((propertyName) => {
29532
- const addedByAdditionalProperties = isAdditionalPropertySchema(schema.properties?.[propertyName]);
29506
+ const addedByAdditionalProperties = Boolean(schema.properties?.[propertyName]?.[ADDITIONAL_PROPERTY_FLAG]);
29533
29507
  const fieldUiSchema = addedByAdditionalProperties ? uiSchema.additionalProperties : uiSchema[propertyName];
29534
29508
  const hidden = getUiOptions(fieldUiSchema).widget === 'hidden';
29535
29509
  const content = (jsxRuntimeExports.jsx(ObjectFieldProperty, { propertyName: propertyName, required: isRequired(schema, propertyName), schema: _baseIteratee.get(schema, [PROPERTIES_KEY, propertyName], {}), uiSchema: fieldUiSchema, errorSchema: _baseIteratee.get(errorSchema, [propertyName]), fieldPathId: childFieldPathId, formData: _baseIteratee.get(formData, [propertyName]), handleKeyRename: handleKeyRename, handleRemoveProperty: handleRemoveProperty, addedByAdditionalProperties: addedByAdditionalProperties, onChange: onChange, onBlur: onBlur, onFocus: onFocus, registry: registry, disabled: disabled, readonly: readonly, hideError: hideError }, getStableKey(propertyName)));
@@ -5,7 +5,7 @@ var getIconProps = require('./get-icon-props-CwpDdQDI.js');
5
5
  var randomString = require('./random-string-BTzDB2ee.js');
6
6
  var renderListComponent = require('./render-list-component-1GrRKk_R.js');
7
7
  var checkbox_template = require('./checkbox.template-BewtdTin.js');
8
- var translations = require('./translations-Bnw00bkf.js');
8
+ var translations = require('./translations-Do_D3pxu.js');
9
9
  var image_template = require('./image.template-DZC6_5a4.js');
10
10
 
11
11
  const listItemCss = () => `@charset "UTF-8";*,*:before,*:after{box-sizing:border-box}.boolean-input{--limel-boolean-input-box-size:1.25rem;--limel-boolean-input-gap-size:0.5rem;position:relative;isolation:isolate;display:flex;align-items:center;min-height:var(--limel-checkbox-min-height, 2.5rem);width:100%}.boolean-input input[type=checkbox],.boolean-input input[type=radio]{position:absolute;width:0;height:0;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0, 0, 0, 0);clip-path:inset(50%);white-space:nowrap;-webkit-appearance:none;-moz-appearance:none;appearance:none}label.boolean-input-label{min-width:var(--limel-boolean-input-box-size);min-height:var(--limel-boolean-input-box-size);padding-top:0.125rem;cursor:pointer;position:relative;width:100%;overflow-wrap:var(--limel-boolean-input-label-overflow-wrap, normal);font-size:var(--limel-theme-default-small-font-size);color:var(--limel-theme-text-primary-on-background-color);padding-left:calc(var(--limel-boolean-input-box-size) + var(--limel-boolean-input-gap-size))}.disabled:not([readonly]):not([readonly=true]) label.boolean-input-label{cursor:not-allowed;color:var(--limel-theme-text-disabled-color)}.required label.boolean-input-label:after{margin-left:0.0625rem;content:"*"}.invalid:not(.readonly) label.boolean-input-label{color:var(--limel-theme-error-text-color)}:host(limel-checkbox.hide-label) label.boolean-input-label,.hide-label label.boolean-input-label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;opacity:0;width:var(--limel-boolean-input-box-size)}.box{position:absolute;pointer-events:none;transition:border-color 0.4s ease 0.2s, background-color 0.2s ease, box-shadow var(--limel-clickable-transform-speed, 0.4s) ease;display:inline-block;vertical-align:middle;width:var(--limel-boolean-input-box-size);height:var(--limel-boolean-input-box-size);margin-right:var(--limel-boolean-input-gap-size);border-radius:var(--limel-boolean-input-box-border-radius);border:0.125rem solid;border-color:var(--checkbox-unchecked-border-color, rgb(var(--contrast-900)));background-color:var(--limel-checkbox-background-color, rgb(var(--contrast-300)));}.checked .box,.boolean-input>input[type=checkbox]:checked+.box,.boolean-input>input[type=radio]:checked+.box{background-color:var(--lime-primary-color, var(--limel-theme-primary-color));border-color:var(--lime-primary-color, var(--limel-theme-primary-color))}.disabled .box{opacity:0.4}.box{}.boolean-input:not(.disabled):hover .box{will-change:box-shadow;box-shadow:var(--button-shadow-hovered)}.boolean-input:not(.disabled):active .box{will-change:box-shadow;box-shadow:var(--button-shadow-pressed)}.box:before{transition:color var(--limel-clickable-transition-speed, 0.4s) ease, background-color var(--limel-clickable-transition-speed, 0.4s) ease, box-shadow var(--limel-clickable-transform-speed, 0.4s) ease, transform var(--limel-clickable-transform-speed, 0.4s) var(--limel-clickable-transform-timing-function, ease);content:"";position:absolute;inset:-0.1875rem;border-radius:inherit;}.boolean-input>input[type=checkbox]:focus-visible+.box:before,.boolean-input>input[type=radio]:focus-visible+.box:before{will-change:box-shadow;box-shadow:var(--shadow-depth-8-focused)}.box:after{transition:opacity 0.2s ease, width 0.4s ease, box-shadow 0.6s cubic-bezier(0.68, -0.55, 0, 1.87), transform 0.6s cubic-bezier(0.68, -0.55, 0, 1.87);content:"";position:absolute;inset:0;margin:auto;border-radius:1rem;opacity:0;background-color:rgb(var(--color-white));}.boolean-input:not(.disabled):hover .box:after{will-change:opacity, box-shadow, transform, width}:host(limel-checkbox){--limel-boolean-input-label-overflow-wrap:var( --checkbox-label-overflow-wrap, normal );min-height:var(--limel-checkbox-min-height, 2.5rem)}.box:after{height:0.125rem;width:0.25rem}.indeterminate .box:after{opacity:1;width:calc(var(--limel-boolean-input-box-size) - 0.5rem)}.checkbox{--limel-boolean-input-box-border-radius:0.25rem}.checkbox svg.check-mark{position:absolute;z-index:1;inset:0;transform:translate3d(-0.125rem, -0.125rem, 0);width:var(--limel-boolean-input-box-size);height:var(--limel-boolean-input-box-size);padding:0.25rem;color:rgb(var(--color-white));opacity:0;stroke-width:0.1875rem;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round}.checkbox svg.check-mark path{stroke-dashoffset:29.7833;stroke-dasharray:29.7833;transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1)}.checkbox{}.checkbox:not(.indeterminate)>input[type=checkbox]:checked+.box svg.check-mark{opacity:1}.checkbox:not(.indeterminate)>input[type=checkbox]:checked+.box svg.check-mark path{stroke-dashoffset:0}limel-dynamic-label{margin-top:0.375rem;margin-left:-0.25rem}:host(limel-checkbox:focus),:host(limel-checkbox:focus-visible),:host(limel-checkbox:focus-within){--limel-h-l-grid-template-rows-transition-speed:0.46s;--limel-h-l-grid-template-rows:1fr}:host(limel-checkbox){--limel-h-l-grid-template-rows-transition-speed:0.3s;--limel-h-l-grid-template-rows:0fr}:host(limel-checkbox:focus) limel-helper-line,:host(limel-checkbox:focus-visible) limel-helper-line,:host(limel-checkbox:focus-within) limel-helper-line,:host(limel-checkbox:hover) limel-helper-line{will-change:grid-template-rows}*,*:before,*:after{box-sizing:border-box}limel-list-item{min-height:2.5rem}limel-list-item:focus{outline:none}limel-list-item:focus-visible{outline:none;box-shadow:var(--shadow-depth-8-focused)}limel-list-item{transition:background-color 0.6s ease;position:relative;isolation:isolate;display:flex;align-items:center;gap:0.5rem;padding:0 1rem;background-color:rgb(var(--contrast-100))}limel-list-item:hover{z-index:1;transition:background-color 0.2s ease;border-radius:0.5rem}limel-list-item:focus,limel-list-item:focus-visible,limel-list-item:active{z-index:1;border-radius:0.5rem}limel-list-item:first-of-type{border-top-left-radius:0.5rem;border-top-right-radius:0.5rem}limel-list-item:last-of-type{border-bottom-left-radius:0.5rem;border-bottom-right-radius:0.5rem}limel-list-item:not([disabled]):not([disabled=true]){cursor:pointer}limel-list-item[disabled]:not([disabled=false]){cursor:not-allowed}limel-list-item[disabled]:not([disabled=false]){cursor:not-allowed}limel-list-item[disabled]:not([disabled=false]) .text,limel-list-item[disabled]:not([disabled=false]) limel-icon,limel-list-item[disabled]:not([disabled=false]) img,limel-list-item[disabled]:not([disabled=false]) .boolean-input{opacity:0.4}limel-list-item:not([disabled]):not([disabled=true]):hover,limel-list-item:not([disabled]):not([disabled=true]):focus-visible{background-color:rgb(var(--contrast-400))}limel-list-item[type=option]:before{transition:background-color 0.6s ease;content:"";position:absolute;inset:0;opacity:0.2;border-radius:0.5rem}limel-list-item[type=option][selected]:not([selected=false]):before{transition:background-color 0.2s ease;background-color:var(--mdc-theme-primary)}limel-list-item .text{flex-grow:1;min-width:0;display:flex;flex-direction:column;padding:0.5rem 0;color:var(--limel-theme-text-primary-on-background-color)}limel-list-item .label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:var(--limel-theme-default-font-size);line-height:1rem}limel-list-item .description{display:-webkit-box;overflow:hidden;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:var(--maxLinesSecondaryText);line-height:1rem;font-size:var(--limel-theme-default-small-font-size);opacity:0.6}limel-list-item limel-icon{color:var(--limel-theme-text-secondary-on-background-color);flex-shrink:0;margin-left:-0.5rem}limel-list-item limel-icon:has(+img){margin-left:0;position:absolute;top:0.125rem;left:0.125rem;padding:0.1875rem;width:1.25rem;background-color:rgb(var(--contrast-200), 0.8)}limel-list-item img{flex-shrink:0;object-fit:var(--list-item-image-object-fit, cover);border-radius:var(--list-item-image-border-radius, 50%);width:2rem;height:2rem;box-shadow:0 0 0 1px rgb(var(--contrast-800), 0.5)}limel-list-item limel-menu{margin-right:-0.5rem;order:var(--limel-list-item-menu-order, 3)}limel-list-item[role=menuitem] limel-list-item .label{font-size:var(--limel-theme-default-small-font-size)}.boolean-input,limel-radio-button{width:var(--limel-boolean-input-box-size) !important;margin-left:-0.25rem !important}.boolean-input.checkbox{margin-right:0.25rem}limel-list-item:has(limel-icon) .boolean-input,limel-list-item:has(img) .boolean-input{margin-right:-0.25rem;margin-left:0;order:2}.boolean-input .boolean-input-label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;opacity:0;width:var(--limel-boolean-input-box-size)}`;
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-DYg_7kkT.js');
4
- var translations = require('./translations-Bnw00bkf.js');
4
+ var translations = require('./translations-Do_D3pxu.js');
5
5
  var dom = require('./dom-BWMDM6En.js');
6
6
  var keycodes = require('./keycodes-k-EdzcMX.js');
7
7
  var randomString = require('./random-string-BTzDB2ee.js');
@@ -3,7 +3,7 @@
3
3
  var index = require('./index-DYg_7kkT.js');
4
4
  var files = require('./files-DI4jItxi.js');
5
5
  var getIconProps = require('./get-icon-props-CwpDdQDI.js');
6
- var translations = require('./translations-Bnw00bkf.js');
6
+ var translations = require('./translations-Do_D3pxu.js');
7
7
  var randomString = require('./random-string-BTzDB2ee.js');
8
8
  var imageResize = require('./image-resize-CG2fitJT.js');
9
9
  var image_template = require('./image.template-DZC6_5a4.js');
@@ -4,7 +4,7 @@ var index$1 = require('./index-DYg_7kkT.js');
4
4
  var types = require('./types-C7gNcwzE.js');
5
5
  var markdownParser = require('./markdown-parser-YH5HSSgF.js');
6
6
  var cloneDeep = require('./cloneDeep-hE40Q8aw.js');
7
- var translations = require('./translations-Bnw00bkf.js');
7
+ var translations = require('./translations-Do_D3pxu.js');
8
8
  var index = require('./index-ETPz91V5.js');
9
9
  var randomString = require('./random-string-BTzDB2ee.js');
10
10
  var isItem = require('./is-item-DMELyaao.js');
@@ -23296,34 +23296,6 @@ class MarkdownSerializerState {
23296
23296
  let next = parent.child(index + 1);
23297
23297
  return m.isInSet(next.marks) && (!next.isText || /\S/.test(next.text));
23298
23298
  });
23299
- let leading = trailing;
23300
- trailing = "";
23301
- // If whitespace has to be expelled from the node, adjust
23302
- // leading and trailing accordingly.
23303
- if (node && node.isText && marks.some(mark => {
23304
- let info = this.getMark(mark.type.name);
23305
- return info && info.expelEnclosingWhitespace && !mark.isInSet(active);
23306
- })) {
23307
- let [_, lead, rest] = /^(\s*)(.*)$/m.exec(node.text);
23308
- if (lead) {
23309
- leading += lead;
23310
- node = rest ? node.withText(rest) : null;
23311
- if (!node)
23312
- marks = active;
23313
- }
23314
- }
23315
- if (node && node.isText && marks.some(mark => {
23316
- let info = this.getMark(mark.type.name);
23317
- return info && info.expelEnclosingWhitespace && !this.isMarkAhead(parent, index + 1, mark);
23318
- })) {
23319
- let [_, rest, trail] = /^(.*?)(\s*)$/m.exec(node.text);
23320
- if (trail) {
23321
- trailing = trail;
23322
- node = rest ? node.withText(rest) : null;
23323
- if (!node)
23324
- marks = active;
23325
- }
23326
- }
23327
23299
  let inner = marks.length ? marks[marks.length - 1] : null;
23328
23300
  let noEsc = inner && this.getMark(inner.type.name).escape === false;
23329
23301
  let len = marks.length - (noEsc ? 1 : 0);
@@ -23352,9 +23324,38 @@ class MarkdownSerializerState {
23352
23324
  let keep = 0;
23353
23325
  while (keep < Math.min(active.length, len) && marks[keep].eq(active[keep]))
23354
23326
  ++keep;
23327
+ let leading = trailing;
23328
+ trailing = "";
23329
+ // If whitespace has to be expelled from the node, adjust
23330
+ // leading and trailing accordingly.
23331
+ if (node && node.isText && marks.some(mark => {
23332
+ let info = this.getMark(mark.type.name);
23333
+ return info && info.expelEnclosingWhitespace && !active.some((m, i) => i < keep && m.eq(mark));
23334
+ })) {
23335
+ let [_, lead, rest] = /^(\s*)(.*)$/m.exec(node.text);
23336
+ if (lead) {
23337
+ leading += lead;
23338
+ node = rest ? node.withText(rest) : null;
23339
+ if (!node)
23340
+ marks = active;
23341
+ }
23342
+ }
23343
+ if (node && node.isText && marks.some(mark => {
23344
+ let info = this.getMark(mark.type.name);
23345
+ return info && info.expelEnclosingWhitespace && !this.isMarkAhead(parent, index + 1, mark);
23346
+ })) {
23347
+ let [_, rest, trail] = /^(.*?)(\s*)$/m.exec(node.text);
23348
+ if (trail) {
23349
+ trailing = trail;
23350
+ node = rest ? node.withText(rest) : null;
23351
+ if (!node)
23352
+ marks = active;
23353
+ }
23354
+ }
23355
23355
  // Close the marks that need to be closed
23356
- while (keep < active.length)
23357
- this.text(this.markString(active.pop(), false, parent, index), false);
23356
+ if (node || index == parent.childCount)
23357
+ while (keep < active.length)
23358
+ this.text(this.markString(active.pop(), false, parent, index), false);
23358
23359
  // Output any previously expelled trailing whitespace outside the marks
23359
23360
  if (leading)
23360
23361
  this.text(leading);
@@ -23374,15 +23375,14 @@ class MarkdownSerializerState {
23374
23375
  else
23375
23376
  this.render(node, parent, index);
23376
23377
  this.atBlockStart = false;
23377
- }
23378
- // After the first non-empty text node is rendered, the end of output
23379
- // is no longer at block start.
23380
- //
23381
- // FIXME: If a non-text node writes something to the output for this
23382
- // block, the end of output is also no longer at block start. But how
23383
- // can we detect that?
23384
- if ((node === null || node === void 0 ? void 0 : node.isText) && node.nodeSize > 0) {
23385
- this.atBlockStart = false;
23378
+ // After the first non-empty text node is rendered, the end of output
23379
+ // is no longer at block start.
23380
+ //
23381
+ // FIXME: If a non-text node writes something to the output for this
23382
+ // block, the end of output is also no longer at block start. But how
23383
+ // can we detect that?
23384
+ if (node.isText && node.nodeSize > 0)
23385
+ this.atBlockStart = false;
23386
23386
  }
23387
23387
  };
23388
23388
  parent.forEach(progress);
@@ -2,6 +2,7 @@
2
2
 
3
3
  var index = require('./index-DYg_7kkT.js');
4
4
  var randomString = require('./random-string-BTzDB2ee.js');
5
+ var translations = require('./translations-Do_D3pxu.js');
5
6
 
6
7
  /**
7
8
  *
@@ -50,12 +51,23 @@ function getPercentageClass(value) {
50
51
  return 'percent-90-100';
51
52
  }
52
53
 
53
- const sliderCss = () => `@charset "UTF-8";:host([displays-percentage-colors].percent-0){--lime-primary-color:var(--color-percent--0)}:host([displays-percentage-colors].percent-0-10){--lime-primary-color:var(--color-percent--0to10)}:host([displays-percentage-colors].percent-10-20){--lime-primary-color:var(--color-percent--10to20)}:host([displays-percentage-colors].percent-20-30){--lime-primary-color:var(--color-percent--20to30)}:host([displays-percentage-colors].percent-30-40){--lime-primary-color:var(--color-percent--30to40)}:host([displays-percentage-colors].percent-40-50){--lime-primary-color:var(--color-percent--40to50)}:host([displays-percentage-colors].percent-50-60){--lime-primary-color:var(--color-percent--50to60)}:host([displays-percentage-colors].percent-60-70){--lime-primary-color:var(--color-percent--60to70)}:host([displays-percentage-colors].percent-70-80){--lime-primary-color:var(--color-percent--70to80)}:host([displays-percentage-colors].percent-80-90){--lime-primary-color:var(--color-percent--80to90)}:host([displays-percentage-colors].percent-90-100){--lime-primary-color:var(--color-percent--90to100)}:host([displays-percentage-colors].percent-30-40) .indicator,:host([displays-percentage-colors].percent-40-50) .indicator,:host([displays-percentage-colors].percent-70-80) .indicator{color:rgb(var(--color-gray-darker))}:host([displays-percentage-colors].percent-50-60) .indicator,:host([displays-percentage-colors].percent-60-70) .indicator{color:rgb(var(--color-gray-dark))}:host([readonly]:not([readonly=false])) input[type=range]{cursor:default}:host([readonly]:not([readonly=false])) .track,:host([readonly]:not([readonly=false])) .active,:host([readonly]:not([readonly=false])) .indicator{height:0.75rem}:host([readonly]:not([readonly=false])) .indicator{box-shadow:none}:host([readonly]:not([readonly=false])) .knob{opacity:0}:host([readonly]:not([readonly=false])) .active{background-color:var(--lime-primary-color, var(--limel-theme-primary-color))}.thumb{position:absolute;left:calc(var(--slider-fraction) * 100%);top:0;bottom:0;width:0;z-index:1}.knob{transition:border-color 0.5s ease;position:absolute;top:50%;left:0;transform:translate3d(-50%, -50%, 0);width:1.25rem;height:1.25rem;border-radius:50%;border:0.5rem solid;border-color:var(--lime-primary-color, var(--limel-theme-primary-color));background-color:rgb(var(--contrast-100))}.knob:before,.knob:after{transition:all 0.2s ease 0.2s;content:"";display:block;position:absolute;top:0;bottom:0;margin:auto;width:0;height:0;border:0.375rem solid transparent}:host([disabled]:not([disabled=false])) .knob:before,:host([disabled]:not([disabled=false])) .knob:after{content:none}.knob:before{opacity:calc(var(--slider-fraction) * 100);left:-1rem;transform:rotate(90deg)}.knob:after{opacity:calc((1 - var(--slider-fraction)) * 100);right:-1rem;transform:rotate(-90deg)}.slider:hover .knob,.slider:has(input[type=range]:active) .knob,.slider:has(input[type=range]:focus) .knob{box-shadow:var(--button-shadow-normal)}.slider:hover .knob:before,.slider:has(input[type=range]:active) .knob:before,.slider:has(input[type=range]:focus) .knob:before{left:-1.5rem;border-top-color:rgb(var(--contrast-1400), 0.5)}.slider:hover .knob:after,.slider:has(input[type=range]:active) .knob:after,.slider:has(input[type=range]:focus) .knob:after{right:-1.5rem;border-top-color:rgb(var(--contrast-1400), 0.5)}.indicator{user-select:none;position:absolute;left:0;top:50%;z-index:1;transform:translate3d(-50%, -50%, 0);transform-origin:bottom center;transition:transform 0.2s ease-out, box-shadow 0.2s ease-out, background-color 0.5s ease;border-radius:1.25rem;padding:0 0.375rem;height:1.25rem;display:flex;align-items:center;white-space:nowrap;color:rgb(var(--color-white));font-size:0.6875rem;background-color:var(--lime-primary-color, var(--limel-theme-primary-color));box-shadow:var(--button-shadow-normal)}:host(:not([disabled]):not([readonly])) input[type=range]:active~.thumb .indicator,:host(:not([disabled]):not([readonly])) input[type=range]:focus~.thumb .indicator{transform:translate3d(-50%, calc(-100% - 0.75rem), 0) scale(1.25);box-shadow:var(--shadow-depth-16)}*,*:before,*:after{box-sizing:border-box;min-width:0;min-height:0}:host(limel-slider){box-sizing:border-box;isolation:isolate;position:relative;display:flex;flex-direction:column}:host(limel-slider:not([invalid]):not([invalid=true])) .limel-notched-outline,:host(limel-slider[disabled]:not([disabled=false])) .limel-notched-outline{--limel-notched-outline-border-color:transparent;--limel-notched-outline-background-color:transparent}div[slot=content]{display:flex;flex-direction:column;width:100%;padding:0 0.25rem}.slider{position:relative;height:2.5rem;margin:0 0.75rem}input[type=range]{position:absolute;width:100%;height:100%;opacity:0;cursor:pointer;z-index:2;margin:0;appearance:none}:host([disabled]:not([disabled=false])) input[type=range]{cursor:not-allowed}:host([disabled]:not([disabled=false])) .track .active{opacity:0.5}:host([disabled]:not([disabled=false])) .indicator{border-radius:0.125rem;box-shadow:var(--button-shadow-pressed)}.track{transition:background-color 0.5s ease;display:flex;align-items:center;justify-content:space-between;position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);height:0.5rem;border-radius:1rem;background-color:rgba(var(--contrast-700), 0.6)}.track:before,.track:after{content:"";display:inline-block;position:absolute;top:0;bottom:0;margin:auto;width:0.375rem;height:0.375rem;border-radius:50%;background-color:rgba(var(--contrast-700), 0.6)}.track:before{left:-0.75rem}.track:after{right:-0.75rem}.track .active{transition:background-color 0.5s ease;position:absolute;height:100%;width:calc(var(--slider-fraction) * 100%);border-radius:inherit;background-color:var(--lime-primary-color, var(--limel-theme-primary-color))}.step-dot{transform:translateX(-50%);border-radius:50%;height:0.25rem;width:0.25rem;background-color:rgb(var(--contrast-100), 0.6)}.step-dot:first-of-type,.step-dot:last-of-type{opacity:0}.range-labels{display:flex;justify-content:space-between;margin-top:-0.75rem;width:100%}.range-labels .min,.range-labels .max{line-height:1;font-size:0.75rem;color:var(--limel-notched-outline-label-color, rgb(var(--contrast-1200)))}:host(limel-slider:focus),:host(limel-slider:focus-visible),:host(limel-slider:focus-within){--limel-h-l-grid-template-rows-transition-speed:0.46s;--limel-h-l-grid-template-rows:1fr}:host(limel-slider){--limel-h-l-grid-template-rows-transition-speed:0.3s;--limel-h-l-grid-template-rows:0fr}:host(limel-slider:focus) limel-helper-line,:host(limel-slider:focus-visible) limel-helper-line,:host(limel-slider:focus-within) limel-helper-line,:host(limel-slider:hover) limel-helper-line{will-change:grid-template-rows}`;
54
+ const sliderCss = () => `@charset "UTF-8";:host([displays-percentage-colors].percent-0){--lime-primary-color:var(--color-percent--0)}:host([displays-percentage-colors].percent-0-10){--lime-primary-color:var(--color-percent--0to10)}:host([displays-percentage-colors].percent-10-20){--lime-primary-color:var(--color-percent--10to20)}:host([displays-percentage-colors].percent-20-30){--lime-primary-color:var(--color-percent--20to30)}:host([displays-percentage-colors].percent-30-40){--lime-primary-color:var(--color-percent--30to40)}:host([displays-percentage-colors].percent-40-50){--lime-primary-color:var(--color-percent--40to50)}:host([displays-percentage-colors].percent-50-60){--lime-primary-color:var(--color-percent--50to60)}:host([displays-percentage-colors].percent-60-70){--lime-primary-color:var(--color-percent--60to70)}:host([displays-percentage-colors].percent-70-80){--lime-primary-color:var(--color-percent--70to80)}:host([displays-percentage-colors].percent-80-90){--lime-primary-color:var(--color-percent--80to90)}:host([displays-percentage-colors].percent-90-100){--lime-primary-color:var(--color-percent--90to100)}:host([displays-percentage-colors].percent-30-40) .indicator,:host([displays-percentage-colors].percent-40-50) .indicator,:host([displays-percentage-colors].percent-70-80) .indicator{color:rgb(var(--color-gray-darker))}:host([displays-percentage-colors].percent-50-60) .indicator,:host([displays-percentage-colors].percent-60-70) .indicator{color:rgb(var(--color-gray-dark))}:host([readonly]:not([readonly=false])) input[type=range]{cursor:default}:host([readonly]:not([readonly=false])) .track,:host([readonly]:not([readonly=false])) .active,:host([readonly]:not([readonly=false])) .indicator{height:0.75rem}:host([readonly]:not([readonly=false])) .indicator{box-shadow:none}:host([readonly]:not([readonly=false])) .knob{opacity:0}:host([readonly]:not([readonly=false])) .active{background-color:var(--lime-primary-color, var(--limel-theme-primary-color))}.thumb{position:absolute;left:calc(var(--slider-fraction) * 100%);top:0;bottom:0;width:0;z-index:1}.knob{transition:border-color 0.5s ease;position:absolute;top:50%;left:0;transform:translate3d(-50%, -50%, 0);width:1.25rem;height:1.25rem;border-radius:50%;border:0.5rem solid;border-color:var(--lime-primary-color, var(--limel-theme-primary-color));background-color:rgb(var(--contrast-100))}.knob:before,.knob:after{transition:all 0.2s ease 0.2s;content:"";display:block;position:absolute;top:0;bottom:0;margin:auto;width:0;height:0;border:0.375rem solid transparent}:host([disabled]:not([disabled=false])) .knob:before,:host([disabled]:not([disabled=false])) .knob:after{content:none}.knob:before{opacity:calc(var(--slider-fraction) * 100);left:-1rem;transform:rotate(90deg)}.knob:after{opacity:calc((1 - var(--slider-fraction)) * 100);right:-1rem;transform:rotate(-90deg)}.slider:hover .knob,.slider:has(input[type=range]:active) .knob,.slider:has(input[type=range]:focus) .knob{box-shadow:var(--button-shadow-normal)}.slider:hover .knob:before,.slider:has(input[type=range]:active) .knob:before,.slider:has(input[type=range]:focus) .knob:before{left:-1.5rem;border-top-color:rgb(var(--contrast-1400), 0.5)}.slider:hover .knob:after,.slider:has(input[type=range]:active) .knob:after,.slider:has(input[type=range]:focus) .knob:after{right:-1.5rem;border-top-color:rgb(var(--contrast-1400), 0.5)}.indicator{user-select:none;position:absolute;left:0;top:50%;z-index:1;transform:translate3d(-50%, -50%, 0);transform-origin:bottom center;transition:transform 0.2s ease-out, box-shadow 0.2s ease-out, background-color 0.5s ease;border-radius:1.25rem;padding:0 0.375rem;height:1.25rem;min-width:1.25rem;display:flex;align-items:center;justify-content:center;white-space:nowrap;color:rgb(var(--color-white));font-size:0.6875rem;background-color:var(--lime-primary-color, var(--limel-theme-primary-color));box-shadow:var(--button-shadow-normal)}:host(:not([disabled]):not([readonly])) input[type=range]:active~.thumb .indicator,:host(:not([disabled]):not([readonly])) input[type=range]:focus~.thumb .indicator{transform:translate3d(-50%, calc(-100% - 0.75rem), 0) scale(1.25);box-shadow:var(--shadow-depth-16)}*,*:before,*:after{box-sizing:border-box;min-width:0;min-height:0}:host(limel-slider){box-sizing:border-box;isolation:isolate;position:relative;display:flex;flex-direction:column}:host(limel-slider:not([invalid]):not([invalid=true])) .limel-notched-outline,:host(limel-slider[disabled]:not([disabled=false])) .limel-notched-outline{--limel-notched-outline-border-color:transparent;--limel-notched-outline-background-color:transparent}div[slot=content]{display:flex;flex-direction:column;width:100%;padding:0 0.25rem}.slider{position:relative;height:2.5rem;margin:0 0.75rem}input[type=range]{position:absolute;width:100%;height:100%;opacity:0;cursor:pointer;z-index:2;margin:0;appearance:none}:host([disabled]:not([disabled=false])) input[type=range]{cursor:not-allowed}:host([disabled]:not([disabled=false])) .track .active{opacity:0.5}:host([disabled]:not([disabled=false])) .indicator{border-radius:0.125rem;box-shadow:var(--button-shadow-pressed)}.track{transition:background-color 0.5s ease;display:flex;align-items:center;justify-content:space-between;position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);height:0.5rem;border-radius:1rem;background-color:rgba(var(--contrast-700), 0.6)}.track:before,.track:after{content:"";display:inline-block;position:absolute;top:0;bottom:0;margin:auto;width:0.375rem;height:0.375rem;border-radius:50%;background-color:rgba(var(--contrast-700), 0.6)}.track:before{left:-0.75rem}.track:after{right:-0.75rem}.track .active{transition:background-color 0.5s ease;position:absolute;height:100%;width:calc(var(--slider-fraction) * 100%);border-radius:inherit;background-color:var(--lime-primary-color, var(--limel-theme-primary-color))}.step-dot{transform:translateX(-50%);border-radius:50%;height:0.25rem;width:0.25rem;background-color:rgb(var(--contrast-100), 0.6)}.step-dot:first-of-type,.step-dot:last-of-type{opacity:0}.range-labels{display:flex;justify-content:space-between;margin-top:-0.75rem;width:100%}.range-labels .min,.range-labels .max{line-height:1;font-size:0.75rem;color:var(--limel-notched-outline-label-color, rgb(var(--contrast-1200)))}:host(.has-clear-button) div[slot=content]{padding-right:calc(1rem + 0.25rem)}:host(.is-unset) .track .active{width:0}:host(.is-unset) .thumb{left:50%}button.clear-button{appearance:none;background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;text-align:inherit}button.clear-button:focus{outline:none}button.clear-button:focus-visible{outline:none;box-shadow:var(--shadow-depth-8-focused)}button.clear-button:not([disabled]){transition:color var(--limel-clickable-transition-speed, 0.4s) ease, background-color var(--limel-clickable-transition-speed, 0.4s) ease, box-shadow var(--limel-clickable-transform-speed, 0.4s) ease, transform var(--limel-clickable-transform-speed, 0.4s) var(--limel-clickable-transform-timing-function, ease);cursor:pointer;color:rgb(var(--contrast-1100));background-color:rgba(var(--contrast-700), 0.6)}button.clear-button:not([disabled]):hover,button.clear-button:not([disabled]):focus,button.clear-button:not([disabled]):focus-visible{will-change:color, background-color, box-shadow, transform}button.clear-button:not([disabled]):hover,button.clear-button:not([disabled]):focus-visible{transform:translate3d(0, 0.01rem, 0);color:rgb(var(--contrast-100));background-color:rgb(var(--contrast-1000))}button.clear-button:not([disabled]):hover{box-shadow:var(--button-shadow-hovered)}button.clear-button:not([disabled]):active{--limel-clickable-transform-timing-function:cubic-bezier( 0.83, -0.15, 0.49, 1.16 );transform:translate3d(0, 0.05rem, 0);box-shadow:var(--button-shadow-pressed)}button.clear-button:not([disabled]):hover,button.clear-button:not([disabled]):active{--limel-clickable-transition-speed:0.2s;--limel-clickable-transform-speed:0.16s}button.clear-button:not([disabled]):focus-visible{background-color:rgb(var(--contrast-1000))}button.clear-button{position:absolute;inset:0.75rem 0 0 auto;display:flex;align-items:center;justify-content:center;height:1rem;width:1rem;border-radius:50%}button.clear-button svg{width:calc(1rem - 0.25rem);height:calc(1rem - 0.25rem);fill:currentColor}button.clear-button:before{content:"";position:absolute;inset:0 auto 0 0;margin:auto;height:0.125rem;width:0.25rem;background-color:rgba(var(--contrast-700), 0.6);transform:translate(-100%, 0)}button.clear-button[disabled]{color:rgb(var(--contrast-1000));background-color:rgb(var(--contrast-600));cursor:not-allowed}:host(limel-slider:focus),:host(limel-slider:focus-visible),:host(limel-slider:focus-within){--limel-h-l-grid-template-rows-transition-speed:0.46s;--limel-h-l-grid-template-rows:1fr}:host(limel-slider){--limel-h-l-grid-template-rows-transition-speed:0.3s;--limel-h-l-grid-template-rows:0fr}:host(limel-slider:focus) limel-helper-line,:host(limel-slider:focus-visible) limel-helper-line,:host(limel-slider:focus-within) limel-helper-line,:host(limel-slider:hover) limel-helper-line{will-change:grid-template-rows}`;
54
55
 
55
56
  const DEFAULT_FACTOR = 1;
56
57
  const DEFAULT_MAX_VALUE = 100;
57
58
  const DEFAULT_MIN_VALUE = 0;
58
59
  const MAX_VISIBLE_STEP_DOTS = 20;
60
+ /**
61
+ * Whether the slider holds a value at all. `Number.isFinite` is typed
62
+ * `(number: unknown) => boolean`, so it tests the right thing but narrows
63
+ * nothing; this does, which lets the unset check double as proof that what
64
+ * remains is a number the arithmetic can use. `null`, `undefined` and `NaN`
65
+ * all mean unset.
66
+ * @param value - the slider's `value` prop, which may not be a number.
67
+ */
68
+ const isSetValue = (value) => {
69
+ return Number.isFinite(value);
70
+ };
59
71
  const Slider = class {
60
72
  constructor(hostRef) {
61
73
  index.registerInstance(this, hostRef);
@@ -82,6 +94,9 @@ const Slider = class {
82
94
  this.factor = DEFAULT_FACTOR;
83
95
  /**
84
96
  * Set to `true` to indicate that the slider is required.
97
+ * A required slider does not offer the clear button, since a required
98
+ * value cannot be unset. It can still be initialized unset (with a
99
+ * non-finite `value`) to prompt the user to make a choice.
85
100
  */
86
101
  this.required = false;
87
102
  /**
@@ -98,6 +113,10 @@ const Slider = class {
98
113
  * Unit to display next to the value
99
114
  */
100
115
  this.unit = '';
116
+ /**
117
+ * Defines the language for translations of the accessible labels.
118
+ */
119
+ this.language = 'en';
101
120
  /**
102
121
  * The maximum value allowed
103
122
  */
@@ -106,6 +125,37 @@ const Slider = class {
106
125
  * The minimum value allowed
107
126
  */
108
127
  this.valuemin = DEFAULT_MIN_VALUE;
128
+ /**
129
+ * `true` while the value on display is one the consumer has been told
130
+ * about — either it came from the `value` prop, or it has been emitted on
131
+ * `change`. It is `false` from the moment the slider becomes unset until a
132
+ * value is committed again.
133
+ *
134
+ * The native input always holds a value, so while unset it rests at the
135
+ * midpoint. A press that lands on that midpoint, or a drag that returns to
136
+ * it before releasing, leaves the input's value untouched and fires neither
137
+ * `input` nor `change`. Without this flag such an interaction is swallowed:
138
+ * the slider either stays unset, or shows a number the consumer never
139
+ * received.
140
+ */
141
+ this.valueIsCommitted = false;
142
+ this.syncStateFromValue = () => {
143
+ const value = this.value;
144
+ if (!isSetValue(value)) {
145
+ this.enterUnsetState();
146
+ return;
147
+ }
148
+ this.isUnset = false;
149
+ this.valueIsCommitted = true;
150
+ this.displayValue = this.multiplyByFactor(value);
151
+ this.setPercentageClass(value);
152
+ };
153
+ this.enterUnsetState = () => {
154
+ this.isUnset = true;
155
+ this.valueIsCommitted = false;
156
+ this.displayValue = this.getRestingDisplayValue();
157
+ this.percentageClass = undefined;
158
+ };
109
159
  this.renderStepDots = (min, max) => {
110
160
  if (!this.step) {
111
161
  return;
@@ -123,24 +173,87 @@ const Slider = class {
123
173
  }
124
174
  return (index.h("limel-helper-line", { helperText: this.helperText, helperTextId: this.helperTextId, invalid: this.invalid }));
125
175
  };
176
+ /**
177
+ * A required slider must hold a value, so it offers no way to clear it,
178
+ * and a readonly one cannot be edited at all. The styling needs the same
179
+ * answer to reserve room for the button, so both read it from here rather
180
+ * than each deriving it — the stylesheet cannot see a parsed prop, only
181
+ * the attribute string, and `required="false"` is a present attribute.
182
+ */
183
+ this.hasClearButton = () => {
184
+ return !this.readonly && !this.required;
185
+ };
186
+ this.renderClearButton = () => {
187
+ if (!this.hasClearButton()) {
188
+ return;
189
+ }
190
+ const label = this.label
191
+ ? translations.translate.get('clear-value-of', this.language, {
192
+ label: this.label,
193
+ })
194
+ : translations.translate.get('clear-value', this.language);
195
+ return (index.h("button", { type: "button", id: this.clearButtonId, class: "clear-button", "aria-label": label, onClick: this.handleClear, disabled: this.isUnset || this.disabled }, index.h("svg", { viewBox: "0 0 32 32", "aria-hidden": "true", focusable: "false" }, index.h("path", { d: "M7.219 5.781L5.78 7.22 14.563 16 5.78 24.781 7.22 26.22 16 17.437l8.781 8.782 1.438-1.438L17.437 16l8.782-8.781L24.78 5.78 16 14.563z" })), index.h("limel-tooltip", { elementId: this.clearButtonId, label: label })));
196
+ };
126
197
  this.handleInput = (event) => {
127
198
  event.stopPropagation();
128
199
  const input = event.target;
129
200
  const value = Number(input.value);
201
+ this.isUnset = false;
130
202
  this.displayValue = value;
131
203
  this.setPercentageClass(value / this.factor);
132
204
  };
133
205
  this.handleChange = (event) => {
134
206
  event.stopPropagation();
135
207
  const input = event.target;
136
- let value = Number(input.value);
208
+ this.commitValue(Number(input.value));
209
+ };
210
+ this.handleClick = (event) => {
211
+ if (this.valueIsCommitted) {
212
+ return;
213
+ }
214
+ // The interaction is over and the value on display still hasn't
215
+ // reached the consumer, so the native input never fired a `change`.
216
+ // Commit what it holds. The click is left to bubble, so consumers
217
+ // listening for clicks still see it.
218
+ const input = event.target;
219
+ this.commitValue(Number(input.value));
220
+ };
221
+ /**
222
+ * Leaves the unset state and emits the value, keeping the rendered state
223
+ * and the emitted value in step so the two cannot diverge.
224
+ * @param displayValue - the value held by the native input, already
225
+ * multiplied by `factor`.
226
+ */
227
+ this.commitValue = (displayValue) => {
137
228
  const step = this.multiplyByFactor(this.step);
138
- if (!this.isMultipleOfStep(value, step)) {
139
- value = this.roundToStep(value, step);
229
+ const min = this.multiplyByFactor(this.valuemin);
230
+ let value = displayValue;
231
+ // Steps are counted from `valuemin`, not from zero — a range of 1–5 in
232
+ // steps of 2 stops at 1, 3 and 5. Rounding against zero would push
233
+ // every one of those to the next even number, past `valuemax`.
234
+ if (!this.isMultipleOfStep(value - min, step)) {
235
+ value = min + this.roundToStep(value - min, step);
140
236
  }
237
+ this.valueIsCommitted = true;
238
+ this.isUnset = false;
239
+ this.displayValue = value;
240
+ this.setPercentageClass(value / this.factor);
141
241
  this.change.emit(value / this.factor);
142
242
  };
243
+ this.handleClear = (event) => {
244
+ var _a;
245
+ event.stopPropagation();
246
+ this.enterUnsetState();
247
+ this.change.emit(null);
248
+ // Move focus to the slider itself so keyboard users can immediately
249
+ // set a new value, and so assistive tech announces the now-unset state
250
+ // instead of focus falling to the body when the button self-disables.
251
+ (_a = this.inputElement) === null || _a === void 0 ? void 0 : _a.focus();
252
+ };
143
253
  this.getContainerClassList = () => {
254
+ return Object.assign({ 'is-unset': this.isUnset, 'has-clear-button': this.hasClearButton() }, this.getPercentageClassList());
255
+ };
256
+ this.getPercentageClassList = () => {
144
257
  if (!this.percentageClass) {
145
258
  return {};
146
259
  }
@@ -151,12 +264,18 @@ const Slider = class {
151
264
  this.multiplyByFactor = (value) => {
152
265
  return Math.round(value * this.factor);
153
266
  };
154
- this.getValue = () => {
155
- let value = this.value;
156
- if (!Number.isFinite(value)) {
157
- value = this.valuemin;
158
- }
159
- return value;
267
+ /**
268
+ * The display value the thumb rests at while unset: the midpoint of the
269
+ * range, so both arrow-key directions are live (unlike anchoring at the
270
+ * minimum). Aligned to the step — native range inputs default to a step of
271
+ * 1 — so it matches a real input value and the first key press doesn't jump.
272
+ */
273
+ this.getRestingDisplayValue = () => {
274
+ const min = this.multiplyByFactor(this.valuemin);
275
+ const max = this.multiplyByFactor(this.valuemax);
276
+ const midpoint = (min + max) / 2;
277
+ const step = this.step ? this.multiplyByFactor(this.step) : 1;
278
+ return min + Math.round((midpoint - min) / step) * step;
160
279
  };
161
280
  this.getFraction = () => {
162
281
  const min = this.multiplyByFactor(this.valuemin);
@@ -180,10 +299,10 @@ const Slider = class {
180
299
  };
181
300
  this.labelId = randomString.createRandomString();
182
301
  this.helperTextId = randomString.createRandomString();
302
+ this.clearButtonId = randomString.createRandomString();
183
303
  }
184
304
  componentWillLoad() {
185
- this.displayValue = this.multiplyByFactor(this.getValue());
186
- this.setPercentageClass(this.getValue());
305
+ this.syncStateFromValue();
187
306
  }
188
307
  render() {
189
308
  const min = this.multiplyByFactor(this.valuemin);
@@ -196,13 +315,18 @@ const Slider = class {
196
315
  if (this.disabled || this.readonly) {
197
316
  inputProps.disabled = true;
198
317
  }
199
- return (index.h(index.Host, { key: 'b525c7a5774b9832788a9fb18c3f00798e910d81', class: this.getContainerClassList() }, index.h("limel-notched-outline", { key: 'e0d97ce8992401fc85b370971a503cb4968bc182', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid, disabled: this.disabled, readonly: this.readonly, hasValue: !!this.value, hasFloatingLabel: true }, index.h("div", { key: 'fe53bc1695fdc29c42139677d0e0dd76ba17ec9e', slot: "content" }, index.h("div", { key: '45effbc8e70d5be0fbbbd30fac34d7a9cf7ef2a8', class: "slider", style: { '--slider-fraction': `${fraction}` } }, index.h("input", Object.assign({ key: '0e7b5da8cca6f95df8528d478619e0e1cc41ee7e', type: "range", min: min, max: max, value: this.displayValue, "aria-labelledby": this.labelId, "aria-describedby": this.helperText
318
+ return (index.h(index.Host, { key: 'eecd22982d9180f24f947fd2ab9af9a25e64647e', class: this.getContainerClassList() }, index.h("limel-notched-outline", { key: '848578a10d64a4af81e296c9f961e9be788484a7', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid, disabled: this.disabled, readonly: this.readonly, hasValue: !this.isUnset, hasFloatingLabel: true }, index.h("div", { key: '7ad977107b79fc9ca416562d5c7905b4a962053c', slot: "content" }, index.h("div", { key: 'dcb137a44b5244e63a4c8a95341d3918dc65445c', class: "slider", style: { '--slider-fraction': `${fraction}` } }, index.h("input", Object.assign({ key: '73af46f062991f3c715d13c0f44b0fb9478dc37c', type: "range", min: min, max: max, value: this.displayValue, "aria-labelledby": this.labelId, "aria-describedby": this.helperText
200
319
  ? this.helperTextId
201
- : undefined, onInput: this.handleInput, onChange: this.handleChange }, inputProps)), index.h("div", { key: '7a064053a0e89209813c68637991f0e23c6ec877', class: "track" }, index.h("div", { key: '042a6185e0fa842bcd077cefe0934116827432fa', class: "active" }), this.renderStepDots(min, max)), index.h("div", { key: '09f11ca04aa46a02f498507acae7d84e37210f14', class: "thumb" }, index.h("div", { key: 'd1b2513e6694a3bb0bba05a97139cc5fecca62e5', class: "knob" }), index.h("div", { key: 'cc135f641c78e80c9b57e86369e6cdf2cbf152a1', class: "indicator", "aria-hidden": "true" }, this.displayValue))), index.h("div", { key: '76baf35402525fc825667f04a7fdea5d1ff551cc', class: "range-labels" }, index.h("span", { key: 'c7d50a897ae0dcea864b8d98fca72cd1aef19f3b', class: "min" }, this.multiplyByFactor(this.valuemin), this.unit), index.h("span", { key: '65c5dee93cc75c978eaf9c6dc7be89f734e74913', class: "max" }, this.multiplyByFactor(this.valuemax), this.unit)))), this.renderHelperLine()));
320
+ : undefined, "aria-valuetext": this.isUnset
321
+ ? translations.translate.get('value-not-set', this.language)
322
+ : undefined, ref: (el) => {
323
+ this.inputElement = el;
324
+ }, onInput: this.handleInput, onChange: this.handleChange, onClick: this.handleClick }, inputProps)), index.h("div", { key: 'e9fb2af7f43cc040c382930d336c8eb903bc0162', class: "track" }, index.h("div", { key: '2cec88a4b8c99296473bbd9b064bccd0a6450b8f', class: "active" }), this.renderStepDots(min, max)), index.h("div", { key: '5a090fb0528478450510ff0240e6b5499a177238', class: "thumb" }, index.h("div", { key: 'fde6792041312183af0328d9fc75d19d2553bf46', class: "knob" }), index.h("div", { key: 'de717ffa20723870bb27aa22e99fe9fe5ebdd563', class: "indicator", "aria-hidden": "true" }, this.isUnset
325
+ ? '\u2194\uFE0E'
326
+ : this.displayValue))), index.h("div", { key: 'd0c38d092fecc4bf9690680d8541c8d658056f08', class: "range-labels" }, index.h("span", { key: '581387615da0cdaf105a568e02212f8bdd22eeb6', class: "min" }, this.multiplyByFactor(this.valuemin), this.unit), index.h("span", { key: '33c5673d8e56995bffdc35340381f2e87ae0918c', class: "max" }, this.multiplyByFactor(this.valuemax), this.unit)))), this.renderClearButton(), this.renderHelperLine()));
202
327
  }
203
328
  watchValue() {
204
- this.displayValue = this.multiplyByFactor(this.getValue());
205
- this.setPercentageClass(this.getValue());
329
+ this.syncStateFromValue();
206
330
  }
207
331
  static get watchers() { return {
208
332
  "value": [{
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-DYg_7kkT.js');
4
- var translations = require('./translations-Bnw00bkf.js');
4
+ var translations = require('./translations-Do_D3pxu.js');
5
5
  var randomString = require('./random-string-BTzDB2ee.js');
6
6
 
7
7
  /**
@@ -4,7 +4,7 @@ var index = require('./index-DYg_7kkT.js');
4
4
  var pickBy = require('./pickBy-D-X6S5kg.js');
5
5
  var layout = require('./layout-CL_D-afg.js');
6
6
  var isEqual = require('./isEqual-Cd9J8a5-.js');
7
- var translations = require('./translations-Bnw00bkf.js');
7
+ var translations = require('./translations-Do_D3pxu.js');
8
8
  require('./_baseIteratee-DDklwtn9.js');
9
9
  require('./_baseIsEqual-CQZKiKbe.js');
10
10
  require('./eq-DFcUoVzv.js');