@watermarkinsights/ripple 5.31.0-alpha.6 → 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-090d85be.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 +2 -3
  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 +4 -3
  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 +15 -6
  16. package/dist/docs/skill/wm-datepicker.md +19 -5
  17. package/dist/docs/skill/wm-file-list.md +0 -1
  18. package/dist/docs/skill/wm-file.md +4 -5
  19. package/dist/docs/skill/wm-flyout.md +8 -6
  20. package/dist/docs/skill/wm-input.md +2 -2
  21. package/dist/docs/skill/wm-line-chart.md +0 -1
  22. package/dist/docs/skill/wm-menuitem.md +2 -2
  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 +14 -7
  26. package/dist/docs/skill/wm-navigation-hamburger.md +2 -2
  27. package/dist/docs/skill/wm-navigation-item.md +2 -2
  28. package/dist/docs/skill/wm-navigation.md +2 -2
  29. package/dist/docs/skill/wm-navigator.md +3 -2
  30. package/dist/docs/skill/wm-nested-select.md +2 -2
  31. package/dist/docs/skill/wm-optgroup.md +5 -4
  32. package/dist/docs/skill/wm-option.md +2 -3
  33. package/dist/docs/skill/wm-pagination.md +3 -2
  34. package/dist/docs/skill/wm-progress-indicator.md +0 -1
  35. package/dist/docs/skill/wm-progress-monitor.md +2 -2
  36. package/dist/docs/skill/wm-progress-slice.md +0 -1
  37. package/dist/docs/skill/wm-search.md +5 -3
  38. package/dist/docs/skill/wm-select.md +8 -5
  39. package/dist/docs/skill/wm-snackbar.md +7 -3
  40. package/dist/docs/skill/wm-tab-item.md +3 -2
  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 +4 -2
  44. package/dist/docs/skill/wm-tag-option.md +6 -5
  45. package/dist/docs/skill/wm-textarea.md +2 -2
  46. package/dist/docs/skill/wm-timepicker.md +10 -5
  47. package/dist/docs/skill/wm-toggletip.md +2 -2
  48. package/dist/docs/skill/wm-uploader.md +3 -2
  49. package/dist/docs/skill/wm-wrapper.md +0 -1
  50. package/dist/esm/{app-globals-7bf0ccc7.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-2e053253.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-7bf0ccc7.js +0 -1
  69. package/dist/ripple/p-a3d106b2.system.js +0 -1
  70. package/dist/ripple/p-e2bb7798.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.6";
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-090d85be.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-090d85be.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-01T20:56:49",
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
@@ -46,8 +45,8 @@ one or more wm-menuitem children.
46
45
  - _(default)_ -- One or more wm-menuitem elements.
47
46
 
48
47
  **Events:**
49
- - `menuLoaded` _(deprecated: Use wmActionMenuLoaded instead.)_
50
- - `wmActionMenuLoaded`
48
+ - `menuLoaded` -- Fires when the component finishes loading. _(deprecated: Use wmActionMenuLoaded instead.)_
49
+ - `wmActionMenuLoaded` -- Fires when the component finishes loading and child wm-menuitem elements are ready.
51
50
 
52
51
  **Accessibility:**
53
52
 
@@ -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
@@ -27,9 +26,11 @@ charts automatically. _(default: `""`)_
27
26
  legend -- suitable for printed output. _(default: `false`)_
28
27
 
29
28
  **Events:**
30
- - `wmLegendItemClick` Detail: `{{ idx: number }} idx -- zero-based index of the clicked legend item, or
29
+ - `wmLegendItemClick` -- Fires when the user clicks a legend item. The associated chart highlights
30
+ the corresponding bar(s) and fades all others. Detail: `{{ idx: number }} idx -- zero-based index of the clicked legend item, or
31
31
  `-1` to clear all highlights.`
32
- - `wmLegendItemHover` Detail: `{{ idx: number }} idx -- zero-based index of the hovered legend item, or
32
+ - `wmLegendItemHover` -- Fires when the user hovers over a legend item. The associated chart
33
+ highlights the corresponding bar(s) and fades all others. Detail: `{{ idx: number }} idx -- zero-based index of the hovered legend item, or
33
34
  `-1` to clear all highlights.`
34
35
 
35
36
  **Code example:**
@@ -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
@@ -53,16 +52,26 @@ Updated as the user types or picks from the calendar. _(default: `""`)_
53
52
  Updated as the user types or picks from the calendar. _(default: `""`)_
54
53
 
55
54
  **Events:**
56
- - `wmEndInputBlur`
57
- - `wmRangeSelection` Detail: `{{ startDate: { iso: string, us: string, int: string }, endDate: { iso: string, us: string, int: string } }}
55
+ - `wmEndInputBlur` -- Fires when the end date input loses focus.
56
+ - `wmRangeSelection` -- Fires when the user completes a range selection from the calendar popup. Detail: `{{ startDate: { iso: string, us: string, int: string }, endDate: { iso: string, us: string, int: string } }}
58
57
  startDate and endDate -- each formatted in ISO (YYYY-MM-DD), US (mm/dd/yyyy), and INT
59
58
  (dd/mm/yyyy). The dates are always returned in chronological order regardless of the order
60
59
  they were clicked.`
61
- - `wmStartInputBlur`
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.
@@ -37,12 +36,27 @@ _None documented_
37
36
  - `value` -- The date displayed in the input field, in the format specified by `date-format`. Updated as the user types. Can also be set programmatically by the application. _(default: `""`)_
38
37
 
39
38
  **Events:**
40
- - `wmDatepickerDateSelected` Detail: `{{ date: string }} date -- the selected date in ISO format (YYYY-MM-DD).`
41
- - `wmDatepickerInputBlurred`
39
+ - `wmDatepickerDateSelected` -- Fires when the user selects a date from the calendar popup. Detail: `{{ date: string }} date -- the selected date in ISO format (YYYY-MM-DD).`
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
@@ -31,10 +30,10 @@ from the parent wm-file-list or wm-uploader when set there. _(type: `"all" | "la
31
30
  (e.g. `"Uploaded by Smith, John"`).
32
31
 
33
32
  **Events:**
34
- - `wmFileDelete`
35
- - `wmFileDownload`
36
- - `wmFileErrorCleared`
37
- - `wmFilePreview`
33
+ - `wmFileDelete` -- Fires when the delete button is clicked.
34
+ - `wmFileDownload` -- Fires when the download button is clicked.
35
+ - `wmFileErrorCleared` -- Fires when the user clears a file error by clicking the Clear button.
36
+ - `wmFilePreview` -- Fires when the preview button is clicked.
38
37
 
39
38
  **Accessibility:**
40
39
 
@@ -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.
@@ -65,13 +64,16 @@ in the footer. Fires `wmFlyoutSecondaryTriggered` when clicked.
65
64
  - _(default)_ -- Main content of the flyout body.
66
65
 
67
66
  **Events:**
68
- - `wmFlyoutBreadcrumbClicked` Detail: `{{ breadcrumb: string, index: number }} breadcrumb -- the label of the clicked breadcrumb; index -- its zero-based position in the original CSV list.`
69
- - `wmFlyoutCloseTriggered`
70
- - `wmFlyoutPrimaryTriggered`
71
- - `wmFlyoutSecondaryTriggered`
67
+ - `wmFlyoutBreadcrumbClicked` -- Fires when a breadcrumb button (any non-last breadcrumb) is clicked. Detail: `{{ breadcrumb: string, index: number }} breadcrumb -- the label of the clicked breadcrumb; index -- its zero-based position in the original CSV list.`
68
+ - `wmFlyoutCloseTriggered` -- Fires when the close button is clicked, Escape is pressed, or the native
69
+ dialog close event fires. The host application must set `open` to false in response.
70
+ - `wmFlyoutPrimaryTriggered` -- Fires when the primary footer button is clicked.
71
+ - `wmFlyoutSecondaryTriggered` -- Fires when the secondary footer button is clicked.
72
72
 
73
73
  **Methods:**
74
- - `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.
75
77
 
76
78
  **Accessibility:**
77
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
@@ -52,7 +51,8 @@ symbol prefixes/suffixes, and inline info/error messaging. Use instead of a nati
52
51
  - `value` -- The initial value of the input field, or its current value when reading from the component. _(default: `""`)_
53
52
 
54
53
  **Events:**
55
- - `wmInputValueChanged` Detail: `{{ value: string }} value -- the current value of the input at the time of blur.`
54
+ - `wmInputValueChanged` -- Fires on blur when the input value has changed since the last blur. Use the
55
+ native `input` event if you need to react to every keystroke. Detail: `{{ value: string }} value -- the current value of the input at the time of blur.`
56
56
 
57
57
  **Accessibility:**
58
58
 
@@ -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.
@@ -23,7 +22,8 @@ or an MDI character code (deprecated). Incompatible with `description`.
23
22
  - _(default)_ -- The visible label text for the menu item.
24
23
 
25
24
  **Events:**
26
- - `wmMenuitemClicked`
25
+ - `wmMenuitemClicked` -- Fires when the menu item is clicked or Enter is pressed while focused.
26
+ Consumed by the parent wm-action-menu to close the dropdown.
27
27
 
28
28
  **Accessibility:**
29
29
 
@@ -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,
@@ -54,14 +53,22 @@ generated if absent -- do not set this prop manually. _(required)_
54
53
  - _(default)_ -- Modal content: wm-modal-header, body content, and wm-modal-footer.
55
54
 
56
55
  **Events:**
57
- - `wmModalCloseTriggered`
58
- - `wmModalPrimaryTriggered`
59
- - `wmModalSecondaryTriggered`
56
+ - `wmModalCloseTriggered` -- Fires when the close button is clicked or Escape is pressed. Does not bubble,
57
+ preventing nested modals from closing simultaneously. The host application must set `open`
58
+ to false in response.
59
+ - `wmModalPrimaryTriggered` -- Fires when the wm-modal-footer primary button is clicked.
60
+ - `wmModalSecondaryTriggered` -- Fires when the wm-modal-footer secondary button is clicked.
60
61
 
61
62
  **Methods:**
62
- - `emitCloseEvent() => Promise<void>`
63
- - `emitPrimaryEvent() => Promise<void>`
64
- - `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.
65
72
 
66
73
  **Accessibility:**
67
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
@@ -29,7 +28,8 @@ _None documented_
29
28
  linking and for keeping `aria-expanded` in sync with the navigation's open state.
30
29
 
31
30
  **Events:**
32
- - `wmNavigationHamburgerClicked`
31
+ - `wmNavigationHamburgerClicked` -- Fires when the button is clicked. Consumed by the associated wm-navigation
32
+ to toggle its `open` state -- not intended for direct application use.
33
33
 
34
34
  **Accessibility:**
35
35
 
@@ -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.
@@ -33,7 +32,8 @@ _None documented_
33
32
  - _(default)_ -- Optional icon element displayed before the link text.
34
33
 
35
34
  **Events:**
36
- - `wmNavigationItemClicked`
35
+ - `wmNavigationItemClicked` -- Fires when the link is clicked. Consumed by the parent wm-navigation to
36
+ close the collapsible menu on narrow viewports.
37
37
 
38
38
  **Accessibility:**
39
39
 
@@ -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
@@ -34,7 +33,8 @@ on viewports wider than 1024px where the navigation is always visible. _(default
34
33
  - _(default)_ -- One or more wm-navigation-item elements.
35
34
 
36
35
  **Events:**
37
- - `wmNavigationStateChanged`
36
+ - `wmNavigationStateChanged` -- Fires when the collapsible navigation opens or closes. Consumed by
37
+ wm-navigation-hamburger to keep its `aria-expanded` state in sync.
38
38
 
39
39
  **Accessibility:**
40
40
 
@@ -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
@@ -48,7 +47,9 @@ Each object must include `id`, `name`, `icon_url`, and either `link_url` (auth-t
48
47
  - `user-name` -- The display name of the logged-in user, shown in the menu header.
49
48
 
50
49
  **Events:**
51
- - `wmNavigatorLogout`
50
+ - `wmNavigatorLogout` -- Fires when the user clicks the logout option. Always handle this event to
51
+ run app-specific cleanup (e.g. clearing local storage or session state) before any logout
52
+ redirect. If `logout-url` is set, the component will navigate there after this event fires.
52
53
 
53
54
  **Accessibility:**
54
55
 
@@ -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
@@ -57,7 +56,8 @@ group. _(default: `false`)_
57
56
  `multiple` to be set. _(default: `false`)_
58
57
 
59
58
  **Events:**
60
- - `wmNestedSelectBlurred`
59
+ - `wmNestedSelectBlurred` -- Fires when focus leaves the component entirely (not when moving between
60
+ internal elements such as options or group buttons).
61
61
 
62
62
  **Accessibility:**
63
63
 
@@ -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.
@@ -20,11 +19,13 @@ of its options. _(default: `false`)_
20
19
  dropdown menu. _(required)_
21
20
 
22
21
  **Events:**
23
- - `wmOptgroupAllDeselected`
24
- - `wmOptgroupAllSelected`
22
+ - `wmOptgroupAllDeselected` -- Fires when the "Deselect All" button inside this group is activated.
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.
@@ -24,8 +23,8 @@ or modifies this value -- it is purely a pass-through for application code to at
24
23
  or key. _(type: `null | string`)_
25
24
 
26
25
  **Events:**
27
- - `wmOptionDeselected` Detail: ``HTMLWmOptionElement` -- the option element that was deselected.`
28
- - `wmOptionSelected` Detail: ``HTMLWmOptionElement` -- the option element that was selected.`
26
+ - `wmOptionDeselected` -- Fires when this option is deselected by the user (multiselect mode only). Detail: ``HTMLWmOptionElement` -- the option element that was deselected.`
27
+ - `wmOptionSelected` -- Fires when this option is selected by the user. Detail: ``HTMLWmOptionElement` -- the option element that was selected.`
29
28
 
30
29
  **Code example:**
31
30
 
@@ -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
@@ -45,7 +44,9 @@ calculate the total page count.
45
44
  `event.target.value` in the `wmPaginationPageClicked` handler to get the selected page. _(default: `1`)_
46
45
 
47
46
  **Events:**
48
- - `wmPaginationPageClicked`
47
+ - `wmPaginationPageClicked` -- Fires when the user clicks a page number, previous, or next button.
48
+ Read `event.target.value` to get the selected page number, then update `current-page`
49
+ and re-render your data.
49
50
 
50
51
  **Accessibility:**
51
52
 
@@ -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
@@ -33,7 +32,8 @@ and collapses to bars when it cannot. _(type: `number | string`)_
33
32
  in bar layout mode (e.g. `"Completed,Not Completed"`). Keys cannot contain commas.
34
33
 
35
34
  **Events:**
36
- - `wmProgressMonitorModeChange` Detail: ``"doughnut" | "bar"` -- the new layout mode.`
35
+ - `wmProgressMonitorModeChange` -- Fires once on load and again whenever the layout switches between `"doughnut"`
36
+ and `"bar"` modes. Use this to synchronize external UI that depends on the current layout. Detail: ``"doughnut" | "bar"` -- the new layout mode.`
37
37
 
38
38
  **Code example:**
39
39
 
@@ -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.