@watermarkinsights/ripple 5.31.0-alpha.7 → 5.31.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 (71) hide show
  1. package/dist/cjs/{app-globals-f7da32e6.js → app-globals-768940fa.js} +1 -1
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/ripple.cjs.js +1 -1
  4. package/dist/cjs/wm-toggletip.cjs.entry.js +5 -5
  5. package/dist/collection/components/wm-toggletip/wm-toggletip.js +7 -6
  6. package/dist/docs/docs.json +2 -2
  7. package/dist/docs/skill/wm-action-menu.md +0 -1
  8. package/dist/docs/skill/wm-button.md +0 -1
  9. package/dist/docs/skill/wm-chart-bar.md +0 -1
  10. package/dist/docs/skill/wm-chart-column.md +0 -1
  11. package/dist/docs/skill/wm-chart-legend.md +0 -1
  12. package/dist/docs/skill/wm-chart-slice.md +0 -1
  13. package/dist/docs/skill/wm-chart-stack.md +0 -1
  14. package/dist/docs/skill/wm-chart.md +0 -1
  15. package/dist/docs/skill/wm-date-range.md +12 -3
  16. package/dist/docs/skill/wm-datepicker.md +17 -3
  17. package/dist/docs/skill/wm-file-list.md +0 -1
  18. package/dist/docs/skill/wm-file.md +0 -1
  19. package/dist/docs/skill/wm-flyout.md +3 -2
  20. package/dist/docs/skill/wm-input.md +0 -1
  21. package/dist/docs/skill/wm-line-chart.md +0 -1
  22. package/dist/docs/skill/wm-menuitem.md +0 -1
  23. package/dist/docs/skill/wm-modal-footer.md +0 -1
  24. package/dist/docs/skill/wm-modal-header.md +0 -1
  25. package/dist/docs/skill/wm-modal.md +9 -4
  26. package/dist/docs/skill/wm-navigation-hamburger.md +0 -1
  27. package/dist/docs/skill/wm-navigation-item.md +0 -1
  28. package/dist/docs/skill/wm-navigation.md +0 -1
  29. package/dist/docs/skill/wm-navigator.md +0 -1
  30. package/dist/docs/skill/wm-nested-select.md +0 -1
  31. package/dist/docs/skill/wm-optgroup.md +3 -2
  32. package/dist/docs/skill/wm-option.md +0 -1
  33. package/dist/docs/skill/wm-pagination.md +0 -1
  34. package/dist/docs/skill/wm-progress-indicator.md +0 -1
  35. package/dist/docs/skill/wm-progress-monitor.md +0 -1
  36. package/dist/docs/skill/wm-progress-slice.md +0 -1
  37. package/dist/docs/skill/wm-search.md +0 -1
  38. package/dist/docs/skill/wm-select.md +0 -1
  39. package/dist/docs/skill/wm-snackbar.md +0 -1
  40. package/dist/docs/skill/wm-tab-item.md +0 -1
  41. package/dist/docs/skill/wm-tab-list.md +0 -1
  42. package/dist/docs/skill/wm-tab-panel.md +0 -1
  43. package/dist/docs/skill/wm-tag-input.md +0 -1
  44. package/dist/docs/skill/wm-tag-option.md +4 -3
  45. package/dist/docs/skill/wm-textarea.md +0 -1
  46. package/dist/docs/skill/wm-timepicker.md +8 -3
  47. package/dist/docs/skill/wm-toggletip.md +2 -2
  48. package/dist/docs/skill/wm-uploader.md +0 -1
  49. package/dist/docs/skill/wm-wrapper.md +0 -1
  50. package/dist/esm/{app-globals-d77e6bdb.js → app-globals-7156a0c2.js} +1 -1
  51. package/dist/esm/loader.js +1 -1
  52. package/dist/esm/ripple.js +1 -1
  53. package/dist/esm/wm-toggletip.entry.js +5 -5
  54. package/dist/esm-es5/app-globals-7156a0c2.js +1 -0
  55. package/dist/esm-es5/loader.js +1 -1
  56. package/dist/esm-es5/ripple.js +1 -1
  57. package/dist/esm-es5/wm-toggletip.entry.js +1 -1
  58. package/dist/ripple/p-2ed75238.system.js +1 -0
  59. package/dist/ripple/{p-3ca113f7.system.entry.js → p-57f45772.system.entry.js} +1 -1
  60. package/dist/ripple/{p-bea24dad.system.js → p-a84bda6a.system.js} +1 -1
  61. package/dist/ripple/p-c55ad533.entry.js +1 -0
  62. package/dist/ripple/p-e5af32fd.js +1 -0
  63. package/dist/ripple/ripple.esm.js +1 -1
  64. package/dist/ripple/ripple.js +1 -1
  65. package/dist/types/components/wm-toggletip/wm-toggletip.d.ts +2 -1
  66. package/dist/types/components.d.ts +8 -4
  67. package/package.json +2 -2
  68. package/dist/esm-es5/app-globals-d77e6bdb.js +0 -1
  69. package/dist/ripple/p-18b840be.js +0 -1
  70. package/dist/ripple/p-b3eecf4a.system.js +0 -1
  71. package/dist/ripple/p-e7e4e532.entry.js +0 -1
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index-bb947bd5.js');
4
4
 
5
- const version = "5.31.0-alpha.7";
5
+ const version = "5.31.0";
6
6
 
7
7
  // PRINT RIPPLE VERSION IN CONSOLE
8
8
  // test envs return 0 for plugin.length
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-bb947bd5.js');
6
- const appGlobals = require('./app-globals-f7da32e6.js');
6
+ const appGlobals = require('./app-globals-768940fa.js');
7
7
 
8
8
  const defineCustomElements = async (win, options) => {
9
9
  if (typeof window === 'undefined') return undefined;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-bb947bd5.js');
6
- const appGlobals = require('./app-globals-f7da32e6.js');
6
+ const appGlobals = require('./app-globals-768940fa.js');
7
7
 
8
8
  /*
9
9
  Stencil Client Patch Browser v4.21.0 | MIT Licensed | https://stenciljs.com
@@ -177,8 +177,8 @@ const Toggletip = class {
177
177
  handleClick(ev) {
178
178
  if (this.isOpen) {
179
179
  const isElOrChild = ev.composedPath().includes(this.el);
180
- const isButtonClick = ev.composedPath().includes(this.buttonEl);
181
- if (isElOrChild && !isButtonClick) {
180
+ if (isElOrChild) {
181
+ // Re-announce if clicking any part of the component while open
182
182
  this.announceToggletip();
183
183
  }
184
184
  }
@@ -238,11 +238,11 @@ const Toggletip = class {
238
238
  }
239
239
  }
240
240
  render() {
241
- return (index.h(index.Host, { key: '321d03ab95c9e77b4e2b23fd833231e6fa03c64e', class: `size-${this.targetSize}` }, index.h("button", { key: '4d529ff8aa85c7802dbeca145ee0b82d6880d6db', ref: (el) => (this.buttonEl = el), class: "button", type: "button", "aria-label": this.label, popoverTarget: "toggletip", popoverTargetAction: "toggle", onClick: () => !this.isOpen && this.open(),
241
+ return (index.h(index.Host, { key: '4ec52955615c08a69684e5dc83eed0decc9fe73e', class: `size-${this.targetSize}` }, index.h("button", { key: '19e52e37cb2d712e47049f029d19ce7aaf03f111', ref: (el) => (this.buttonEl = el), class: "button", type: "button", "aria-label": this.label, popoverTarget: "toggletip", popoverTargetAction: "toggle", onClick: () => this.open(),
242
242
  // In order to position the tooltip identically to the toggletip, its presence is determined by these four events
243
- onMouseEnter: () => !this.isOpen && functions.showTooltip(this.toggletipPosition, this.el, this.tooltipMessage), onMouseLeave: () => functions.hideTooltip(), onFocus: () => !this.isOpen && functions.showTooltip(this.toggletipPosition, this.el, this.tooltipMessage), onBlur: () => this.handleBlur() }, this.renderIcon()), index.h("div", { key: 'ccc4a3a9dfa81a1b0dd8fb4ecbca7976f2aff6dc', popover: "", ref: (el) => (this.toggletipEl = el), class: `toggletip ${this.targetSize} ${this.isHidden ? "hidden" : ""}`, id: "toggletip",
243
+ onMouseEnter: () => !this.isOpen && functions.showTooltip(this.toggletipPosition, this.el, this.tooltipMessage), onMouseLeave: () => functions.hideTooltip(), onFocus: () => !this.isOpen && functions.showTooltip(this.toggletipPosition, this.el, this.tooltipMessage), onBlur: () => this.handleBlur() }, this.renderIcon()), index.h("div", { key: '4cfdda63877a73b8f0ae74dc0f04f685f64a2c0a', popover: "", ref: (el) => (this.toggletipEl = el), class: `toggletip ${this.targetSize} ${this.isHidden ? "hidden" : ""}`, id: "toggletip",
244
244
  // @ts-ignore - despite what Typescript says, this is a valid event for popover elements
245
- onToggle: (ev) => this.handlePopoverToggle(ev) }, this.tooltip), index.h("div", { key: '9dbfd9cf354be99641757f5a3495725b0e9c5485', ref: (el) => (this.liveRegionEl = el), class: "live-region sr-only", role: "status", "aria-live": "polite", "aria-atomic": "true" })));
245
+ onToggle: (ev) => this.handlePopoverToggle(ev) }, this.tooltip), index.h("div", { key: 'a563859bd11374774b51890693ff4da6a3b9f8e9', ref: (el) => (this.liveRegionEl = el), class: "live-region sr-only", role: "status", "aria-live": "polite", "aria-atomic": "true" })));
246
246
  }
247
247
  static get delegatesFocus() { return true; }
248
248
  get el() { return index.getElement(this); }
@@ -16,7 +16,8 @@ import { showTooltip, hideTooltip, shouldOpenUp, shouldOpenDown, shouldShiftLeft
16
16
  * @accessibility
17
17
  * - `label` sets the `aria-label` on the trigger button — required even though the button
18
18
  * has a visual icon.
19
- * - The panel content is announced via `role="status"` / `aria-live="polite"` when opened.
19
+ * - The panel content is announced via `role="status"` / `aria-live="polite"` when opened,
20
+ * and re-announced if the button is activated while the panel is already open.
20
21
  * - A hover/focus tooltip shows `"More information"` (info type) or `"Powered by AI"` (ai
21
22
  * type) while the panel is closed.
22
23
  *
@@ -217,8 +218,8 @@ export class Toggletip {
217
218
  handleClick(ev) {
218
219
  if (this.isOpen) {
219
220
  const isElOrChild = ev.composedPath().includes(this.el);
220
- const isButtonClick = ev.composedPath().includes(this.buttonEl);
221
- if (isElOrChild && !isButtonClick) {
221
+ if (isElOrChild) {
222
+ // Re-announce if clicking any part of the component while open
222
223
  this.announceToggletip();
223
224
  }
224
225
  }
@@ -278,11 +279,11 @@ export class Toggletip {
278
279
  }
279
280
  }
280
281
  render() {
281
- return (h(Host, { key: '321d03ab95c9e77b4e2b23fd833231e6fa03c64e', class: `size-${this.targetSize}` }, h("button", { key: '4d529ff8aa85c7802dbeca145ee0b82d6880d6db', ref: (el) => (this.buttonEl = el), class: "button", type: "button", "aria-label": this.label, popoverTarget: "toggletip", popoverTargetAction: "toggle", onClick: () => !this.isOpen && this.open(),
282
+ return (h(Host, { key: '4ec52955615c08a69684e5dc83eed0decc9fe73e', class: `size-${this.targetSize}` }, h("button", { key: '19e52e37cb2d712e47049f029d19ce7aaf03f111', ref: (el) => (this.buttonEl = el), class: "button", type: "button", "aria-label": this.label, popoverTarget: "toggletip", popoverTargetAction: "toggle", onClick: () => this.open(),
282
283
  // In order to position the tooltip identically to the toggletip, its presence is determined by these four events
283
- onMouseEnter: () => !this.isOpen && showTooltip(this.toggletipPosition, this.el, this.tooltipMessage), onMouseLeave: () => hideTooltip(), onFocus: () => !this.isOpen && showTooltip(this.toggletipPosition, this.el, this.tooltipMessage), onBlur: () => this.handleBlur() }, this.renderIcon()), h("div", { key: 'ccc4a3a9dfa81a1b0dd8fb4ecbca7976f2aff6dc', popover: "", ref: (el) => (this.toggletipEl = el), class: `toggletip ${this.targetSize} ${this.isHidden ? "hidden" : ""}`, id: "toggletip",
284
+ onMouseEnter: () => !this.isOpen && showTooltip(this.toggletipPosition, this.el, this.tooltipMessage), onMouseLeave: () => hideTooltip(), onFocus: () => !this.isOpen && showTooltip(this.toggletipPosition, this.el, this.tooltipMessage), onBlur: () => this.handleBlur() }, this.renderIcon()), h("div", { key: '4cfdda63877a73b8f0ae74dc0f04f685f64a2c0a', popover: "", ref: (el) => (this.toggletipEl = el), class: `toggletip ${this.targetSize} ${this.isHidden ? "hidden" : ""}`, id: "toggletip",
284
285
  // @ts-ignore - despite what Typescript says, this is a valid event for popover elements
285
- onToggle: (ev) => this.handlePopoverToggle(ev) }, this.tooltip), h("div", { key: '9dbfd9cf354be99641757f5a3495725b0e9c5485', ref: (el) => (this.liveRegionEl = el), class: "live-region sr-only", role: "status", "aria-live": "polite", "aria-atomic": "true" })));
286
+ onToggle: (ev) => this.handlePopoverToggle(ev) }, this.tooltip), h("div", { key: 'a563859bd11374774b51890693ff4da6a3b9f8e9', ref: (el) => (this.liveRegionEl = el), class: "live-region sr-only", role: "status", "aria-live": "polite", "aria-atomic": "true" })));
286
287
  }
287
288
  static get is() { return "wm-toggletip"; }
288
289
  static get encapsulation() { return "shadow"; }
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-07-01T21:46:53",
2
+ "timestamp": "2026-07-02T17:37:54",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.21.0",
@@ -13187,7 +13187,7 @@
13187
13187
  },
13188
13188
  {
13189
13189
  "name": "accessibility",
13190
- "text": "- `label` sets the `aria-label` on the trigger button — required even though the button\n has a visual icon.\n- The panel content is announced via `role=\"status\"` / `aria-live=\"polite\"` when opened.\n- A hover/focus tooltip shows `\"More information\"` (info type) or `\"Powered by AI\"` (ai\n type) while the panel is closed."
13190
+ "text": "- `label` sets the `aria-label` on the trigger button — required even though the button\n has a visual icon.\n- The panel content is announced via `role=\"status\"` / `aria-live=\"polite\"` when opened,\n and re-announced if the button is activated while the panel is already open.\n- A hover/focus tooltip shows `\"More information\"` (info type) or `\"Powered by AI\"` (ai\n type) while the panel is closed."
13191
13191
  },
13192
13192
  {
13193
13193
  "name": "usageNotes",
@@ -1,6 +1,5 @@
1
1
  ### Action Menu
2
2
  - **Element:** `<wm-action-menu>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Dropdown interface that displays a list of action items. When closed it shows a text
6
5
  button, icon button, or selector box depending on action-menu-type. Selecting an item
@@ -1,6 +1,5 @@
1
1
  ### Button
2
2
  - **Element:** `<wm-button>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Interactive button element that triggers actions and workflows. Has seven visual
6
5
  types plus AI variants.
@@ -1,6 +1,5 @@
1
1
  ### Chart Bar
2
2
  - **Element:** `<wm-chart-bar>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Renders a horizontal bar chart for comparing values across nominal categories. Data and
6
5
  configuration are set via JavaScript properties (`chart.config` and `chart.data`) -- not
@@ -1,6 +1,5 @@
1
1
  ### Chart Column
2
2
  - **Element:** `<wm-chart-column>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Renders a vertical column chart for comparing values across nominal categories or showing
6
5
  distribution across interval/ratio ranges. Data and configuration are set via JavaScript
@@ -1,6 +1,5 @@
1
1
  ### Chart Legend
2
2
  - **Element:** `<wm-chart-legend>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** External legend component for wm-chart-bar and wm-chart-column. Retrieves color and label
6
5
  data from one or more charts via element IDs, allowing a single legend to serve multiple
@@ -1,6 +1,5 @@
1
1
  ### Chart Slice
2
2
  - **Element:** `<wm-chart-slice>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Data slice for a wm-chart composition chart. Each slice represents one segment of the whole.
6
5
  Always used as a direct child of wm-chart.
@@ -1,6 +1,5 @@
1
1
  ### Chart Stack
2
2
  - **Element:** `<wm-chart-stack>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Renders a horizontal stacked bar chart: each stack's segments are sized as a percentage of
6
5
  that stack's total. Supports any number of stacks and segments, each occupying their own row.
@@ -1,6 +1,5 @@
1
1
  ### Chart
2
2
  - **Element:** `<wm-chart>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Composition chart component rendering doughnut or stacked bar charts. Composed of a parent
6
5
  wm-chart element and wm-chart-slice children. Has 3 doughnut subtypes and 5 bar subtypes,
@@ -1,6 +1,5 @@
1
1
  ### Date Range
2
2
  - **Element:** `<wm-date-range>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Two linked date inputs (start and end) with a shared calendar popup for selecting a date
6
5
  range. Users can type or click to set each date. Provides separate error states for start
@@ -61,8 +60,18 @@ they were clicked.`
61
60
  - `wmStartInputBlur` -- Fires when the start date input loses focus.
62
61
 
63
62
  **Methods:**
64
- - `isValidISO(input?: string) => Promise<boolean>`
65
- - `reformatDate(inputFormat: string, outputFormat: string, date?: string) => Promise<string>`
63
+ - `isValidISO(input?: string) => Promise<boolean>` -- Validates whether a string is a well-formed, calendar-correct ISO date
64
+ (YYYY-MM-DD). Accounts for invalid day-of-month values and leap years.
65
+ - `input` -- - The string to validate.
66
+ - **Returns:** `true` if the string is a valid ISO date, `false` otherwise.
67
+ - `reformatDate(inputFormat: string, outputFormat: string, date?: string) => Promise<string>` -- Converts a date string between `"US"` (mm/dd/yyyy), `"INT"` (dd/mm/yyyy),
68
+ and `"ISO"` (YYYY-MM-DD). Direct US ↔ INT conversion is not supported -- route through
69
+ ISO as an intermediate step.
70
+ - `inputFormat` -- - Format of the input date string (`"US"`, `"INT"`, or `"ISO"`).
71
+ - `outputFormat` -- - Desired output format (`"US"`, `"INT"`, or `"ISO"`).
72
+ - `date` -- - The date string to reformat.
73
+ - **Returns:** The reformatted date string, an empty string if `date` is omitted, or the original
74
+ string unchanged if it cannot be parsed.
66
75
 
67
76
  **Accessibility:**
68
77
 
@@ -1,6 +1,5 @@
1
1
  ### Datepicker
2
2
  - **Element:** `<wm-datepicker>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Date input that lets users type a date or pick one from a calendar popup. Supports
6
5
  configurable date formats, pre-selection, validation, and full keyboard navigation of the calendar.
@@ -41,8 +40,23 @@ _None documented_
41
40
  - `wmDatepickerInputBlurred` -- Fires when the text input loses focus.
42
41
 
43
42
  **Methods:**
44
- - `isValidIso(input?: string) => Promise<boolean>`
45
- - `reformatDate(inputFormat: "US" | "INT" | "ISO", outputFormat: "US" | "INT" | "ISO", date?: string) => Promise<string>`
43
+ - `isValidIso(input?: string) => Promise<boolean>` -- Validates whether a string is a well-formed, calendar-correct ISO date
44
+ (YYYY-MM-DD). Accounts for invalid day-of-month values and leap years.
45
+ - `input` -- - The string to validate.
46
+ - **Returns:** `true` if the string is a valid ISO date, `false` otherwise.
47
+ - **Example:** `isValidIso("1969-06-20") // -> true`
48
+ - **Example:** `isValidIso("1969-06-33") // -> false (day 33 does not exist)`
49
+ - **Example:** `isValidIso("2023-02-29") // -> false (2023 is not a leap year)`
50
+ - `reformatDate(inputFormat: "US" | "INT" | "ISO", outputFormat: "US" | "INT" | "ISO", date?: string) => Promise<string>` -- Converts a date string between the supported format tokens: `"US"` (mm/dd/yyyy),
51
+ `"INT"` (dd/mm/yyyy), and `"ISO"` (YYYY-MM-DD). Direct US ↔ INT conversion is not supported --
52
+ route through ISO as an intermediate step.
53
+ - `inputFormat` -- - Format of the input date string.
54
+ - `outputFormat` -- - Desired output format.
55
+ - `date` -- - The date string to reformat.
56
+ - **Returns:** The reformatted date string, an empty string if `date` is omitted or falsy, or the
57
+ original string unchanged if it cannot be parsed.
58
+ - **Example:** `reformatDate("US", "ISO", "06/20/1969") // -> "1969-06-20"`
59
+ - **Example:** `reformatDate("ISO", "US", "1969-06-20") // -> "06/20/1969"`
46
60
 
47
61
  **Accessibility:**
48
62
 
@@ -1,6 +1,5 @@
1
1
  ### File List
2
2
  - **Element:** `<wm-file-list>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Read-only list of files with optional preview and download actions. Visually similar to the
6
5
  Uploader but with no upload capability. Use when displaying existing files users can view or
@@ -1,6 +1,5 @@
1
1
  ### File
2
2
  - **Element:** `<wm-file>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Displays a single file row with its name, optional metadata, and configurable action buttons
6
5
  (preview, download, delete). Adapts responsively -- at narrow widths action buttons collapse
@@ -1,6 +1,5 @@
1
1
  ### Flyout
2
2
  - **Element:** `<wm-flyout>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Slide-in panel that renders over the main content as a modal dialog. Used for detail views,
6
5
  multi-step workflows, and forms that require focus without navigating away from the page.
@@ -72,7 +71,9 @@ dialog close event fires. The host application must set `open` to false in respo
72
71
  - `wmFlyoutSecondaryTriggered` -- Fires when the secondary footer button is clicked.
73
72
 
74
73
  **Methods:**
75
- - `focusHeading() => Promise<void>`
74
+ - `focusHeading() => Promise<void>` -- Moves focus to the flyout's heading element. Call this after updating flyout
75
+ content in a multi-step workflow so screen readers announce the new heading to the user.
76
+ - **Returns:** A promise that resolves once focus has been applied.
76
77
 
77
78
  **Accessibility:**
78
79
 
@@ -1,6 +1,5 @@
1
1
  ### Input
2
2
  - **Element:** `<wm-input>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Accessible single-line text input. Supports text and number types, character limits,
6
5
  symbol prefixes/suffixes, and inline info/error messaging. Use instead of a native
@@ -1,6 +1,5 @@
1
1
  ### Line Chart
2
2
  - **Element:** `<wm-line-chart>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Visualizes how data changes over time. Ideal for trend analysis -- tracking one or more
6
5
  metrics across chronological intervals such as semesters, academic years, or months.
@@ -1,6 +1,5 @@
1
1
  ### Menuitem
2
2
  - **Element:** `<wm-menuitem>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** A single item within a wm-action-menu dropdown. Always used as a direct child of
6
5
  wm-action-menu -- never rendered in isolation.
@@ -1,6 +1,5 @@
1
1
  ### Modal Footer
2
2
  - **Element:** `<wm-modal-footer>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Footer section for a wm-modal. Renders a primary action button, an optional secondary
6
5
  button, and optional informational text. Button clicks delegate to the parent modal's
@@ -1,6 +1,5 @@
1
1
  ### Modal Header
2
2
  - **Element:** `<wm-modal-header>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Header section for a wm-modal. Renders the modal title, an optional subheading, and the
6
5
  close button. Always used as a direct child of wm-modal -- never rendered in isolation.
@@ -1,6 +1,5 @@
1
1
  ### Modal
2
2
  - **Element:** `<wm-modal>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Modal dialog that overlays the page. Renders as a full-bleed `modal` (default) or a
6
5
  smaller centered `dialog`. Content is provided through wm-modal-header, wm-modal-footer,
@@ -61,9 +60,15 @@ to false in response.
61
60
  - `wmModalSecondaryTriggered` -- Fires when the wm-modal-footer secondary button is clicked.
62
61
 
63
62
  **Methods:**
64
- - `emitCloseEvent() => Promise<void>`
65
- - `emitPrimaryEvent() => Promise<void>`
66
- - `emitSecondaryEvent() => Promise<void>`
63
+ - `emitCloseEvent() => Promise<void>` -- Programmatically fires `wmModalCloseTriggered`. Use when you need to trigger
64
+ a close from outside the modal without simulating a button click.
65
+ - **Returns:** A promise that resolves once the event has been emitted.
66
+ - `emitPrimaryEvent() => Promise<void>` -- Programmatically fires `wmModalPrimaryTriggered`. Use when you need to trigger
67
+ the primary action from outside the modal.
68
+ - **Returns:** A promise that resolves once the event has been emitted.
69
+ - `emitSecondaryEvent() => Promise<void>` -- Programmatically fires `wmModalSecondaryTriggered`. Use when you need to trigger
70
+ the secondary action from outside the modal.
71
+ - **Returns:** A promise that resolves once the event has been emitted.
67
72
 
68
73
  **Accessibility:**
69
74
 
@@ -1,6 +1,5 @@
1
1
  ### Navigation Hamburger
2
2
  - **Element:** `<wm-navigation-hamburger>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Toggle button for the collapsible wm-navigation sidebar. Renders a hamburger/menu icon
6
5
  button that communicates with wm-navigation via window events. Place immediately before
@@ -1,6 +1,5 @@
1
1
  ### Navigation Item
2
2
  - **Element:** `<wm-navigation-item>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** A single navigation link inside a wm-navigation. Renders as an anchor element with an
6
5
  optional icon slot. Always used as a direct child of wm-navigation.
@@ -1,6 +1,5 @@
1
1
  ### Navigation
2
2
  - **Element:** `<wm-navigation>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Sidebar navigation that collapses into a hamburger menu on viewports narrower than 1024px.
6
5
  Contains wm-navigation-item children and works alongside an external wm-navigation-hamburger
@@ -1,6 +1,5 @@
1
1
  ### Navigator
2
2
  - **Element:** `<wm-navigator>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** User account menu that displays the logged-in user's name, email, and a product switcher
6
5
  for navigating between Watermark applications. Renders as a button that opens a dropdown
@@ -1,6 +1,5 @@
1
1
  ### Nested Select
2
2
  - **Element:** `<wm-nested-select>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Dropdown list of grouped options that allows single or multi-select. Like wm-select but
6
5
  options are organized into labeled categories via a two-level hierarchy. Composed of a
@@ -1,6 +1,5 @@
1
1
  ### Optgroup
2
2
  - **Element:** `<wm-optgroup>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Named group of wm-option elements used inside wm-nested-select. Renders as a slide-in
6
5
  panel that appears when the user selects the group from the top-level menu.
@@ -24,7 +23,9 @@ dropdown menu. _(required)_
24
23
  - `wmOptgroupAllSelected` -- Fires when the "Select All" button inside this group is activated.
25
24
 
26
25
  **Methods:**
27
- - `emitDeselection() => Promise<void>`
26
+ - `emitDeselection() => Promise<void>` -- Programmatically deselects all options in this group by emitting
27
+ `wmOptgroupAllDeselected`.
28
+ - **Returns:** `Promise<void>`
28
29
 
29
30
  **Code example:**
30
31
 
@@ -1,6 +1,5 @@
1
1
  ### Option
2
2
  - **Element:** `<wm-option>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Individual selectable item used inside wm-select, wm-nested-select (via wm-optgroup), and
6
5
  wm-optgroup. Renders as a listbox option with optional secondary text.
@@ -1,6 +1,5 @@
1
1
  ### Pagination
2
2
  - **Element:** `<wm-pagination>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Pagination controls for navigating large data sets. Renders a full page-number strip on
6
5
  wider viewports and a minimal prev/next/first/last layout on narrow viewports. Does not
@@ -1,6 +1,5 @@
1
1
  ### Progress Indicator
2
2
  - **Element:** `<wm-progress-indicator>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Single progress indicator used inside a wm-progress-monitor. Renders the binary completion
6
5
  data for one category as either a doughnut chart (wide layout) or a horizontal bar (narrow
@@ -1,6 +1,5 @@
1
1
  ### Progress Monitor
2
2
  - **Element:** `<wm-progress-monitor>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Container for one or more wm-progress-indicator elements, each showing binary completion
6
5
  progress (e.g. "Completed" vs "Not Completed"). Above the layout breakpoint, indicators
@@ -1,6 +1,5 @@
1
1
  ### Progress Slice
2
2
  - **Element:** `<wm-progress-slice>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Data slice for a wm-progress-indicator. Represents one state (complete or incomplete) in
6
5
  a binary progress chart. Always used as a direct child of wm-progress-indicator.
@@ -1,6 +1,5 @@
1
1
  ### Search
2
2
  - **Element:** `<wm-search>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Search input for filtering data by query. Two variants: `'basic'` for simple text
6
5
  filtering, and `'find'` which adds prev/next result navigation buttons, a result count
@@ -1,6 +1,5 @@
1
1
  ### Select
2
2
  - **Element:** `<wm-select>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Dropdown list of options that allows single or multi-select. Functionally similar to the
6
5
  native HTML `<select>` element but with Ripple styling and richer features including
@@ -1,6 +1,5 @@
1
1
  ### Snackbar
2
2
  - **Element:** `<wm-snackbar>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Toast notification stack that renders transient messages at the bottom of the page.
6
5
  Notifications auto-dismiss after 6 seconds unless they include a `link` or `action`, in
@@ -1,6 +1,5 @@
1
1
  ### Tab Item
2
2
  - **Element:** `<wm-tab-item>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Individual tab button inside a wm-tab-list. Renders as a link with `role="tab"` and
6
5
  manages selection state. Always used as a direct child of wm-tab-list.
@@ -1,6 +1,5 @@
1
1
  ### Tab List
2
2
  - **Element:** `<wm-tab-list>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Tab list container that manages a group of wm-tab-item children and their associated
6
5
  wm-tab-panel elements. Handles keyboard navigation, ARIA wiring between tabs and panels,
@@ -1,6 +1,5 @@
1
1
  ### Tab Panel
2
2
  - **Element:** `<wm-tab-panel>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Content panel associated with a wm-tab-item. Shows or hides based on whether its
6
5
  `tab-id` matches the selected tab in the parent wm-tab-list. Rendered with
@@ -1,6 +1,5 @@
1
1
  ### Tag Input
2
2
  - **Element:** `<wm-tag-input>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Input for selecting or creating a list of tags. Two variants: `'dropdown'` (options in a
6
5
  filterable list, supports creating new tags) and `'table'` (options in a filterable
@@ -1,6 +1,5 @@
1
1
  ### Tag Option
2
2
  - **Element:** `<wm-tag-option>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Option element for wm-tag-input. Represents a selectable tag in the dropdown list or
6
5
  table. Always used as a direct child of wm-tag-input. For the dropdown variant, slotted
@@ -29,8 +28,10 @@ on load pre-selects the option. _(default: `false`)_
29
28
  - `wmTagOptionSelected` -- Fires when this option is selected as a tag.
30
29
 
31
30
  **Methods:**
32
- - `emitDeselectedEvent() => Promise<void>`
33
- - `emitSelectedEvent() => Promise<void>`
31
+ - `emitDeselectedEvent() => Promise<void>` -- Programmatically deselects this option, removing it as a tag.
32
+ - **Returns:** A promise that resolves once the event has been emitted.
33
+ - `emitSelectedEvent() => Promise<void>` -- Programmatically selects this option, adding it as a tag.
34
+ - **Returns:** A promise that resolves once the event has been emitted.
34
35
 
35
36
  **Code example:**
36
37
 
@@ -1,6 +1,5 @@
1
1
  ### Textarea
2
2
  - **Element:** `<wm-textarea>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Multi-line plain-text editing control with a drag handle for vertical resizing. Shares
6
5
  most functionality with wm-input. Use instead of native `<textarea>` in all Watermark UI.
@@ -1,6 +1,5 @@
1
1
  ### Timepicker
2
2
  - **Element:** `<wm-timepicker>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Time input that lets users type a time or pick one from a dropdown list of 15-minute
6
5
  intervals. Supports 12-hour and 24-hour display and provides `reformatTime` and
@@ -52,8 +51,14 @@ be set programmatically by the application. _(default: `""`)_
52
51
  - `wmTimepickerTimeSelected` -- Fires when the user selects a time from the dropdown list. Detail: `{{ time: string }} time -- the selected time in 24-hour `hh:mm` format.`
53
52
 
54
53
  **Methods:**
55
- - `isValidTime(input: string) => Promise<boolean>`
56
- - `reformatTime(format: "12" | "24", time: TimeFormat12 | TimeFormat24) => Promise<string>`
54
+ - `isValidTime(input: string) => Promise<boolean>` -- Validates a time string against both 12-hour and 24-hour formats.
55
+ - `input` -- The time string to validate.
56
+ - **Returns:** `true` if the string is a valid time, `false` otherwise.
57
+ - `reformatTime(format: "12" | "24", time: TimeFormat12 | TimeFormat24) => Promise<string>` -- Converts a time string between 12-hour and 24-hour formats.
58
+ - `format` -- The target format: `"12"` for 12-hour (e.g. `"02:30 PM"`), `"24"` for
59
+ 24-hour (e.g. `"14:30"`).
60
+ - `time` -- The time string to convert. Accepts both 12-hour and 24-hour input.
61
+ - **Returns:** The reformatted time string.
57
62
 
58
63
  **Accessibility:**
59
64
 
@@ -1,6 +1,5 @@
1
1
  ### Toggletip
2
2
  - **Element:** `<wm-toggletip>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** Toggletip button that shows a small informational panel when clicked. Two visual types:
6
5
  `'info'` renders an info icon button; `'ai'` renders an animated AI sparkle icon. The
@@ -50,7 +49,8 @@ overflow the viewport. _(type: `"bottom" | "bottom-left" | "bottom-right" | "lef
50
49
 
51
50
  - `label` sets the `aria-label` on the trigger button -- required even though the button
52
51
  has a visual icon.
53
- - The panel content is announced via `role="status"` / `aria-live="polite"` when opened.
52
+ - The panel content is announced via `role="status"` / `aria-live="polite"` when opened,
53
+ and re-announced if the button is activated while the panel is already open.
54
54
  - A hover/focus tooltip shows `"More information"` (info type) or `"Powered by AI"` (ai
55
55
  type) while the panel is closed.
56
56
  - **Keyboard:**
@@ -1,6 +1,5 @@
1
1
  ### Uploader
2
2
  - **Element:** `<wm-uploader>`
3
- - **Status:** stable
4
3
 
5
4
  **Purpose:** File upload component for attaching files. Composed of a trigger button and a list of
6
5
  wm-file children. Two variants: `'select'` opens the browser file picker; `'drop'` adds a
@@ -1,6 +1,5 @@
1
1
  ### Wrapper
2
2
  - **Element:** `<wm-wrapper>`
3
- - **Status:** stable
4
3
 
5
4
  **Events:**
6
5
  - `wmWrapperLoaded`
@@ -1,6 +1,6 @@
1
1
  import './index-3425d80d.js';
2
2
 
3
- const version = "5.31.0-alpha.7";
3
+ const version = "5.31.0";
4
4
 
5
5
  // PRINT RIPPLE VERSION IN CONSOLE
6
6
  // test envs return 0 for plugin.length
@@ -1,6 +1,6 @@
1
1
  import { b as bootstrapLazy } from './index-3425d80d.js';
2
2
  export { s as setNonce } from './index-3425d80d.js';
3
- import { g as globalScripts } from './app-globals-d77e6bdb.js';
3
+ import { g as globalScripts } from './app-globals-7156a0c2.js';
4
4
 
5
5
  const defineCustomElements = async (win, options) => {
6
6
  if (typeof window === 'undefined') return undefined;
@@ -1,6 +1,6 @@
1
1
  import { p as promiseResolve, b as bootstrapLazy } from './index-3425d80d.js';
2
2
  export { s as setNonce } from './index-3425d80d.js';
3
- import { g as globalScripts } from './app-globals-d77e6bdb.js';
3
+ import { g as globalScripts } from './app-globals-7156a0c2.js';
4
4
 
5
5
  /*
6
6
  Stencil Client Patch Browser v4.21.0 | MIT Licensed | https://stenciljs.com