@ds-mo/ui 14.7.0 → 14.9.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 (112) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +273 -7
  4. package/dist/angular/ds-select.d.ts +7 -1
  5. package/dist/angular/ds-select.js +5 -2
  6. package/dist/angular/ds-table-saved-views.d.ts +49 -0
  7. package/dist/angular/ds-table-saved-views.js +57 -0
  8. package/dist/angular/ds-table-toolbar.d.ts +12 -0
  9. package/dist/angular/ds-table-toolbar.js +38 -0
  10. package/dist/angular/ds-table.d.ts +4 -1
  11. package/dist/angular/ds-table.js +7 -4
  12. package/dist/angular/index.d.ts +1 -1
  13. package/dist/angular/index.js +2 -0
  14. package/dist/angular/proxies.d.ts +2 -0
  15. package/dist/angular/proxies.js +2 -0
  16. package/dist/components/ds-bar-nav.js +1 -1
  17. package/dist/components/ds-bar-title.js +1 -1
  18. package/dist/components/ds-bar-workflow.js +1 -1
  19. package/dist/components/ds-bar-workflow.js.map +1 -1
  20. package/dist/components/ds-conversation-list-item.js +1 -1
  21. package/dist/components/ds-conversation-list-item.js.map +1 -1
  22. package/dist/components/ds-field.js +1 -1
  23. package/dist/components/ds-field.js.map +1 -1
  24. package/dist/components/ds-filter-menu.js +1 -1
  25. package/dist/components/ds-filter-menu.js.map +1 -1
  26. package/dist/components/ds-input.js +1 -1
  27. package/dist/components/ds-input.js.map +1 -1
  28. package/dist/components/ds-menu.js +1 -1
  29. package/dist/components/ds-mobile-header.js +1 -1
  30. package/dist/components/ds-mobile-section-switcher.js +1 -1
  31. package/dist/components/ds-modal.js +1 -1
  32. package/dist/components/ds-modal.js.map +1 -1
  33. package/dist/components/ds-pagination.js +1 -1
  34. package/dist/components/ds-panel-tool-search.js +1 -1
  35. package/dist/components/ds-select.js +1 -1
  36. package/dist/components/ds-shell-app.js +1 -1
  37. package/dist/components/ds-shell-tools.js +1 -1
  38. package/dist/components/ds-table-saved-views.d.ts +11 -0
  39. package/dist/components/ds-table-saved-views.js +2 -0
  40. package/dist/components/ds-table-saved-views.js.map +1 -0
  41. package/dist/components/ds-table-toolbar.d.ts +11 -0
  42. package/dist/components/ds-table-toolbar.js +2 -0
  43. package/dist/components/ds-table-toolbar.js.map +1 -0
  44. package/dist/components/ds-table.js +1 -1
  45. package/dist/components/ds-table.js.map +1 -1
  46. package/dist/components/ds-toast.js +1 -1
  47. package/dist/components/ds-typing-indicator.js +1 -1
  48. package/dist/components/{p-B5um-ps9.js → p-BCg_6ErW.js} +2 -2
  49. package/dist/components/p-BFSnIEsC.js +2 -0
  50. package/dist/components/p-BFSnIEsC.js.map +1 -0
  51. package/dist/components/p-BPnmiiIS.js +2 -0
  52. package/dist/components/p-BPnmiiIS.js.map +1 -0
  53. package/dist/components/p-BVmKcpyP.js +2 -0
  54. package/dist/components/p-BVmKcpyP.js.map +1 -0
  55. package/dist/components/p-BiTwXttN.js +2 -0
  56. package/dist/components/{p-BKWgofxz.js.map → p-BiTwXttN.js.map} +1 -1
  57. package/dist/components/{p-DQUxg6Si.js → p-BmWWU20X.js} +2 -2
  58. package/dist/components/{p-BAebDW3a.js → p-BuGGwWmt.js} +2 -2
  59. package/dist/components/{p-BmqfTAXM.js → p-Bv1CFHgD.js} +2 -2
  60. package/dist/components/{p--VFa9x3k.js → p-C-Zgq_Fx.js} +2 -2
  61. package/dist/components/p-C1q-tq3U.js +2 -0
  62. package/dist/components/p-C1q-tq3U.js.map +1 -0
  63. package/dist/components/p-C6DNhlES.js +2 -0
  64. package/dist/components/p-C6DNhlES.js.map +1 -0
  65. package/dist/components/{p-DOC4RaAy.js → p-CqbMoVDQ.js} +2 -2
  66. package/dist/components/{p-BAgjMUt3.js → p-Cxr0IQjC.js} +1 -1
  67. package/dist/components/p-Cxr0IQjC.js.map +1 -0
  68. package/dist/docs/components.json +844 -64
  69. package/dist/lib/utils/choice-list.d.ts +8 -1
  70. package/dist/mcp-data/registry/empty-state.json +1 -0
  71. package/dist/mcp-data/registry/registry.json +278 -6
  72. package/dist/mcp-data/registry/select.json +20 -3
  73. package/dist/mcp-data/registry/table-saved-views.json +383 -0
  74. package/dist/mcp-data/registry/table-toolbar.json +146 -0
  75. package/dist/mcp-data/registry/table.json +113 -8
  76. package/dist/react/components.d.ts +2 -0
  77. package/dist/react/components.js +2 -0
  78. package/dist/react/ds-select.d.ts +2 -1
  79. package/dist/react/ds-select.js +2 -1
  80. package/dist/react/ds-table-saved-views.d.ts +17 -0
  81. package/dist/react/ds-table-saved-views.js +19 -0
  82. package/dist/react/ds-table-toolbar.d.ts +9 -0
  83. package/dist/react/ds-table-toolbar.js +12 -0
  84. package/dist/react/ds-table.d.ts +2 -1
  85. package/dist/react/ds-table.js +2 -1
  86. package/dist/styles/table.css +49 -1
  87. package/dist/types/components/Select/Select.d.ts +7 -0
  88. package/dist/types/components/Select/index.d.ts +1 -1
  89. package/dist/types/components/Table/Table.d.ts +19 -1
  90. package/dist/types/components/Table/index.d.ts +1 -1
  91. package/dist/types/components/Table/table-data-mode-switcher.d.ts +9 -0
  92. package/dist/types/components/Table/table-types.d.ts +7 -0
  93. package/dist/types/components/TableSavedViews/TableSavedViews.d.ts +61 -0
  94. package/dist/types/components/TableSavedViews/index.d.ts +2 -0
  95. package/dist/types/components/TableSavedViews/table-saved-views-types.d.ts +24 -0
  96. package/dist/types/components/TableToolbar/TableToolbar.d.ts +6 -0
  97. package/dist/types/components.d.ts +232 -4
  98. package/dist/types/utils/choice-list-parts.d.ts +1 -0
  99. package/dist/types/utils/choice-list.d.ts +8 -1
  100. package/package.json +1 -1
  101. package/dist/components/p-BAgjMUt3.js.map +0 -1
  102. package/dist/components/p-BKWgofxz.js +0 -2
  103. package/dist/components/p-mLRtp5A4.js +0 -2
  104. package/dist/components/p-mLRtp5A4.js.map +0 -1
  105. package/dist/components/p-tR8INOIN.js +0 -2
  106. package/dist/components/p-tR8INOIN.js.map +0 -1
  107. /package/dist/components/{p-B5um-ps9.js.map → p-BCg_6ErW.js.map} +0 -0
  108. /package/dist/components/{p-DQUxg6Si.js.map → p-BmWWU20X.js.map} +0 -0
  109. /package/dist/components/{p-BAebDW3a.js.map → p-BuGGwWmt.js.map} +0 -0
  110. /package/dist/components/{p-BmqfTAXM.js.map → p-Bv1CFHgD.js.map} +0 -0
  111. /package/dist/components/{p--VFa9x3k.js.map → p-C-Zgq_Fx.js.map} +0 -0
  112. /package/dist/components/{p-DOC4RaAy.js.map → p-CqbMoVDQ.js.map} +0 -0
@@ -1 +1 @@
1
- {"schemaVersion":1,"package":"@ds-mo/ui","version":"14.7.0","components":70,"digest":"4d1976acb1ef3f2b1b320e810a04676eabe2f5a21144b751a7e6c5a6d98db08d","completedAt":"2026-08-20T23:50:41.765Z"}
1
+ {"schemaVersion":1,"package":"@ds-mo/ui","version":"14.9.0","components":72,"digest":"1ca8377391f4827408635f876e002129658e4574004d636ecc5da5981139d48f","completedAt":"2026-08-21T18:00:05.482Z"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
3
  "package": "@ds-mo/ui",
4
- "packageVersion": "14.7.0",
4
+ "packageVersion": "14.9.0",
5
5
  "kind": "patterns",
6
6
  "entries": [
7
7
  {
package/dist/agent.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
3
  "package": "@ds-mo/ui",
4
- "packageVersion": "14.7.0",
4
+ "packageVersion": "14.9.0",
5
5
  "kind": "components",
6
6
  "entries": [
7
7
  {
@@ -3556,6 +3556,7 @@
3556
3556
  }
3557
3557
  ],
3558
3558
  "commonlyComposedWith": [
3559
+ "component:ds-table",
3559
3560
  "component:ds-select",
3560
3561
  "component:ds-text",
3561
3562
  "component:ds-icon"
@@ -7051,6 +7052,7 @@
7051
7052
  "When any option supplies subtext, every row uses the same subtext structure and missing values render an em dash. Subtext should disambiguate or add decision-helpful information.",
7052
7053
  "Option labels and the selected trigger label stay on one line and truncate when constrained. Option subtext may wrap to at most two lines.",
7053
7054
  "Use an option action only for a contextual menu about that user-managed option. The fixed ellipsis action appears on hover, keyboard activity, focus, and touch; expanded keeps it visible while its controlled menu is open. Activating it emits dsOptionAction without selecting the option or closing the Select popup.",
7055
+ "Use option subtextActions for a compact set of immediate actions that belong to one option. They render beneath only that option's label using the standard supporting-text inset and rhythm, use action or negative semantic color, and emit dsOptionSubtextAction without selecting the option or closing the popup. Unlike descriptive subtext, they do not reserve a blank supporting line on neighboring options.",
7054
7056
  "The optional prefix icon and trailing indicator always use the parent surface's secondary foreground color, including when a selected value promotes the label to primary. The default down indicator communicates disclosure; up-down is reserved for compact value steppers such as pagination page size.",
7055
7057
  "While the popup is open, the trigger holds the pressed interaction wash without changing its resting foreground or selected-value treatment.",
7056
7058
  "The shared popup search control follows the Select density, using the same text, icon, and internal spacing as a borderless trigger. Its container uses menu-item padding on every side and owns a 1px bottom divider that becomes a 1.5px bold-brand stroke while search has focus. Search placeholder text is secondary at rest and quaternary while focused because it becomes decorative once the editable field is active.",
@@ -7076,7 +7078,7 @@
7076
7078
  "Assign options, sections, and multiple-mode array values through JavaScript properties because arrays and objects cannot be represented safely as attributes."
7077
7079
  ],
7078
7080
  "react": [
7079
- "Pass options or sections as wrapper props, set multiple for array values, and handle onDsChange, onDsClear, onDsOpenChange, onDsFooterAction, and onDsOptionAction."
7081
+ "Pass options or sections as wrapper props, set multiple for array values, and handle onDsChange, onDsClear, onDsOpenChange, onDsFooterAction, onDsOptionAction, and onDsOptionSubtextAction."
7080
7082
  ],
7081
7083
  "angular": [
7082
7084
  "Import DsSelect and SelectValueAccessor when integrating with Angular Forms; bind options and sections as properties."
@@ -7264,6 +7266,10 @@
7264
7266
  {
7265
7267
  "name": "dsOptionAction",
7266
7268
  "detail": "SelectOptionActionDetail"
7269
+ },
7270
+ {
7271
+ "name": "dsOptionSubtextAction",
7272
+ "detail": "SelectOptionSubtextActionDetail"
7267
7273
  }
7268
7274
  ],
7269
7275
  "slots": []
@@ -8633,7 +8639,7 @@
8633
8639
  "summary": "Semantic, controlled data table with durable visual primitives for cell geometry, grouping, sorting, multi-selection, sticky overflow, incremental loading, and top-level pagination.",
8634
8640
  "useWhen": [
8635
8641
  "A structured dataset needs native row and column relationships, optional one-level grouping, or comparable values across records.",
8636
- "An application needs controlled sorting, loaded-row selection, infinite loading, pagination, or an opted-in table-owned column customizer while retaining ownership of the data query, catalog, and persistence.",
8642
+ "An application needs controlled sorting, loaded-row selection, infinite loading, pagination, or opted-in table-owned data-mode and column controls while retaining ownership of the data query, catalog, and persistence.",
8637
8643
  "A product table needs a token-backed recipe whose individual header, group, row, cell, selection, state, and load-more layers remain easy to restyle."
8638
8644
  ],
8639
8645
  "avoidWhen": [
@@ -8647,6 +8653,8 @@
8647
8653
  "component:ds-skeleton",
8648
8654
  "component:ds-loader",
8649
8655
  "component:ds-pagination",
8656
+ "component:ds-table-toolbar",
8657
+ "component:ds-table-saved-views",
8650
8658
  "component:ds-bar-action",
8651
8659
  "component:ds-button-unfilled",
8652
8660
  "component:ds-menu",
@@ -8659,8 +8667,9 @@
8659
8667
  ],
8660
8668
  "accessibility": [
8661
8669
  "The rendered structure uses a native table, caption, column headers, row groups, and data cells; keep the caption non-empty. The native caption remains visually hidden as the table's accessible name. When caption visibility is enabled, a 48px header bar renders as component chrome outside the horizontal scrollport. It defaults to a presentational caption title that does not duplicate the accessible name. Application-owned labeled controls supplied through the single named header slot replace that fallback and occupy the leading content width inside the component-owned 8px inset. When columnCustomizer is enabled, the table adds a trailing Preferences control named Customize table; otherwise the header slot receives the complete content width.",
8670
+ "The data-mode switcher is the shared Menu of the table's supported infinite and pagination modes. It is the final caption-bar action; when the column customizer is also present, a decorative vertical divider separates the two controls. dataMode remains controlled, and the application responds to change intent by supplying the matching records, pagination state, loading behavior, and query consequences. Escape, dismissal, and selection return focus to the trigger.",
8662
8671
  "The column customizer is the shared Menu of switch rows, not a table-owned dialog. Data columns can be shown, hidden, and reordered. Locked action columns stay visible, inactive, and last. The selection checkbox is not a column and never appears. The last remaining visible data column cannot be hidden, but it stays focusable so it can still be reordered. Escape and outside click restore focus to the trigger. Persistence stays in the application.",
8663
- "Sorting controls remain buttons inside column headers and expose the table's one controlled member-row sort through aria-sort. Grouping never adds a second sort indicator or header control; the application supplies groups in its fixed product order.",
8672
+ "Sorting controls remain buttons inside column headers and expose the table's one controlled member-row sort through aria-sort. Grouping never adds a second sort indicator or header control; the application supplies groups in its fixed product order. Optional column help underlines the header label with the shared dotted decoration and shows ds-tooltip from that label; it does not add a second header control or replace the column name.",
8664
8673
  "Selection controls expose checkbox semantics and explicit row names; select-all affects selectable loaded rows only and preserves selected identities outside the loaded window. When grouping is active with multi-selection, each group section header also exposes a checkbox that selects or clears that group's selectable loaded rows.",
8665
8674
  "Interactive rows are focusable as native rows, activate with Enter or Space, and do not steal activation from their nested selection, action, overflow-menu, or primary-text link controls.",
8666
8675
  "Scrollable table regions become keyboard focusable and named only when overflow exists.",
@@ -8668,12 +8677,12 @@
8668
8677
  "Static and infinite tables may show an optional result summary footer when displayedCount and totalCount are finite. Pagination mode instead renders a named Pagination control with a compact selected-size total, vertical divider, and page position; range changes are announced independently with complete phrasing. While focus is anywhere inside a paginated table, unmodified Left and Right Arrow request the adjacent page; editable fields, choice controls, sliders, and modified key combinations retain their own keyboard behavior. The footer slot can replace summary copy, while footer-leading and footer-trailing remain available in the same compact-bar anatomy."
8669
8678
  ],
8670
8679
  "states": [
8671
- "Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, hiddenColumnIds, columnOrder, dataMode, pagination, displayedCount, totalCount, and incremental-loading state are controlled inputs. Events communicate intent and never mutate those inputs. The optional header is one composable table-local surface: the component owns its 48px chrome, 8px inset on every side, and sticky placement while the application owns the leading slot's internal layout, controls, labels, filtering behavior, and action handling. Opting into columnCustomizer adds a trailing Customize table Menu trigger and requires caption visibility. The footer retains its compact-bar composition: application-owned leading status sits left while a controlled result summary or Pagination aligns right, before any trailing action. Content-sized tables remain natural for sparse or fixed-count results. height bounds the complete header, frame, and footer composition. fitViewport reserves the compact-state composition height in the nearest vertical scrollport while growing the visible table into that reservation as surrounding page chrome collapses.",
8680
+ "Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, hiddenColumnIds, columnOrder, dataMode, pagination, displayedCount, totalCount, and incremental-loading state are controlled inputs. Events communicate intent and never mutate those inputs. The optional header is one composable table-local surface: the component owns its 48px chrome, 8px inset on every side, and sticky placement while the application owns the leading slot's internal layout, controls, labels, filtering behavior, and action handling. Opting into dataModeSwitcher and columnCustomizer adds their trailing Menu triggers and requires caption visibility. When both are present, Customize table precedes a decorative divider and the data-mode trigger remains the final action. The table closes one trailing Menu before opening the other. The footer retains its compact-bar composition: application-owned leading status sits left while a controlled result summary or Pagination aligns right, before any trailing action. Content-sized tables remain natural for sparse or fixed-count results. height bounds the complete header, frame, and footer composition. fitViewport reserves the compact-state composition height in the nearest vertical scrollport while growing the visible table into that reservation as surrounding page chrome collapses.",
8672
8681
  "Grouping supports one level. The application supplies groups in a fixed product-defined order and supplies ordered member rows independently. Group section headers show an emphasized text-body-medium label followed by a middle dot and plain secondary loaded progress, for example Critical · 50 of 166. The loaded value comes from the supplied member rows and the total comes from totalCount. A localized countLabel total phrase remains available for the complete assistive progress announcement. Groups may declare an optional intent (brand, neutral, negative, warning, caution, positive) that paints an LTR gradient from the faint intent surface at the label edge into faint neutral at the trailing edge, plus a bold intent title color. Neutral groups remain solid faint neutral. Section separators are painted inside that viewport-width surface so translucent border tokens composite with each intent background. Internal sections keep their separators; a collapsed or empty section header yields its separator only when it is the table's final rendered item. A trailing visually neutral icon-only ButtonUnfilled uses the 24px md double-inset action recipe and toggles controlled collapsedGroupIds, showing ChevronUp while expanded and ChevronDown while collapsed. While any group is expanded, a ChevronDownUp action uses the xs sort-control recipe widened to a table-owned 24px lane and collapses every group. It appears at the inline-end edge of the trailing column declared with kind action when one exists; otherwise a button-hugging 24px by 16px medium-elevation surface floats at the visible scrollport's header edge so the action remains reachable while member columns scroll beneath it. With stickyHeader enabled, each contained section uses its one real section row as a native sticky header inside its real row-group boundary. The browser therefore owns pinning, push-off, scrolling, and resize layout in one pass without a duplicated lane, active-section state, transforms, or scroll-time geometry. Shared grid tracks retain exact header and member-cell alignment. The section surface also stays pinned to the visible horizontal scrollport and spans the smaller of the visible viewport or table width.",
8673
8682
  "When columnCustomizer is false, columns render in catalog order. When it is true, columns remains the catalog: hiddenColumnIds and columnOrder control visibility and data-column sequence, action columns stay last and cannot be hidden, and dsColumnsConfigChange reports the next hidden ids and data-column order without mutating those inputs. The customizer Menu live-applies show/hide and data-column reorder. The table does not persist preferences.",
8674
8683
  "An active member sort toggles only between ascending and descending; activating a different sortable label moves the one sorting state to that key. Applications may still clear the controlled sort state explicitly. Grouping does not introduce another interactive direction.",
8675
8684
  "Compound headers can expose multiple related labels with independent sort keys. Each label owns only its content-width interaction target while the active direction remains in the column's alignment-aware sort lane.",
8676
- "Initial loading defaults to ten row-shaped skeletons and preserves row dividers, column dividers, selection lanes, and sticky boundaries. A selectable table renders a checkbox-sized control skeleton in its selection lane so loading geometry matches the real checkbox instead of a generic icon. Each column may declare representative text, multiline text, image, Tag, icon, icon-and-text, action, or intentionally blank loading geometry; the table applies the matching resolved-cell padding and track anatomy so the placeholder row has the same height and rhythm as its data row. Columns without a declaration use one text line, while action columns infer an icon action placeholder. Empty, initial error, load-more, retry, loading-more, and terminal bands remain fixed to the visible table width while data columns scroll horizontally beneath them. Incremental loading retains existing rows and supports automatic sentinel, manual load-more, retry, and terminal states. When grouping is active, each expanded group owns its load band at the end of its member rows; internal group load bands keep their bottom divider, while a terminal group load band yields it to the table edge or footer. The global bottom-of-table loader is not rendered.",
8685
+ "Initial loading defaults to ten row-shaped skeletons and preserves row dividers, column dividers, selection lanes, and sticky boundaries. A selectable table renders a checkbox-sized control skeleton in its selection lane so loading geometry matches the real checkbox instead of a generic icon. Each column may declare representative text, multiline text, image, Tag, icon, icon-and-text, action, or intentionally blank loading geometry; the table applies the matching resolved-cell padding and track anatomy so the placeholder row has the same height and rhythm as its data row. Columns without a declaration use one text line, while action columns infer an icon action placeholder. Empty and initial error replace only the body with ds-empty-state, using Inbox or ErrorTriangle plus the table heading and body copy. In height-bounded and maxHeight tables that region fills the remaining viewport below the column header; content-sized tables keep a minimum empty-region height. Empty, initial error, load-more, retry, loading-more, and terminal bands remain fixed to the visible table width while data columns scroll horizontally beneath them. Incremental loading retains existing rows and supports automatic sentinel, manual load-more, retry, and terminal states. When grouping is active, each expanded group owns its load band at the end of its member rows; internal group load bands keep their bottom divider, while a terminal group load band yields it to the table edge or footer. The global bottom-of-table loader is not rendered.",
8677
8686
  "dataMode selects the top-level window: infinite appends ungrouped rows through dsLoadMore when hasMore is true, and pagination renders the controlled page supplied by the application and emits dsPaginationChange. Infinite mode also covers fixed result sets by leaving hasMore false. In a grouped paginated table, pagination counts and windows only parent groups; each expanded parent can still append its own members through dsGroupLoadMore. The application owns requests, cancellation, cursors, deduplication, slicing, and query identity.",
8678
8687
  "When pagination enables Fit to page on a bounded table, the table proposes the number of complete top-level rows that fit below its column header. Grouped tables count group headers only; member rows never affect capacity. Selecting Fit captures that numeric snapshot. A changed fitIdentity requests one fresh snapshot for a new query shape, while viewport resizing alone does not change the active controlled page size.",
8679
8688
  "Rows opt into complete-row activation with interactive and emit dsRowActivate without owning navigation. Selection paints through the shared selected ::before layer; interactive hover and press paint through the shared ::after layer.",
@@ -8686,7 +8695,7 @@
8686
8695
  "stickyHeader follows the active vertical scroll owner: a maxHeight, height, or fitViewport table keeps its native header and group sections inside one bounded table scrollport, while a document-flow table retains a semantic native header and renders a sticky control header whose columns follow the body's native inline scroll timeline. Consumers set --ds-table-sticky-header-offset when page chrome occupies an unbounded document scrollport edge. When the 48px table header bar is visible, it sticks at that external offset and the column header stacks immediately below it.",
8687
8696
  "fitViewport uses viewportInsetBlockStart and viewportInsetBlockEnd to describe compact surrounding chrome and page gutters relative to the nearest vertical scroll owner. Before the table reaches that compact position, its host reserves the eventual height while the visible composition grows and vertical input remains owned by the outer page. Once settled, the internal table viewport becomes the vertical scroll owner. Bounded grouped tables use browser-native sticky section rows inside real block row-group boundaries, so scroll and resize do not run component JavaScript or trigger reactive section swaps. Document-flow tables retain the synchronized visual lane required by their separate horizontal scrollport.",
8688
8697
  "Without maxHeight the table grows the document and automatic lazy loading observes the browser viewport. Horizontal scrolling chains vertical wheel and trackpad movement to the page instead of trapping it.",
8689
- "Explicit column sizes establish the horizontal overflow width; unsized columns share remaining space.",
8698
+ "Explicit column sizes establish the horizontal overflow width; unsized columns share remaining space. Set imageTracks on an image column to derive its fixed width from the matching 1-, 2-, or 3-track 16:9 image geometry plus table cell padding instead of copying a numeric width.",
8690
8699
  "Prefer the named xs through xl column sizes, which resolve through TokoMo's table-column width tokens; numeric pixel sizes remain an escape hatch for exceptional application-owned widths.",
8691
8700
  "Column headers use one 32px geometry. Body rows use a 40px single-track minimum with shared 8px cell padding; additional tracks grow downward. Image previews fill the same content box as their declared track count. The second text track and the third text track share one subdued body-small recipe so line 3 lines up with line 2.",
8692
8701
  "Long content truncates to one line by default. Hover (or keyboard-focus a primary link) shows the omitted value in one table-owned tooltip when that track overflows. maxLines 2 or 3 wrap onto the named 2-track and 3-track row heights, then ellipsize with the same tooltip. wrap: true remains unlimited and does not show a truncation tooltip. Wrapping 1-track primary occupies the named 2-track and 3-track row heights instead of a private line-height scale. Wrapping secondary on a 2-track cell occupies the named 3-track row and a 106px fourth track for three lines."
@@ -8753,6 +8762,18 @@
8753
8762
  "type": "TableDataMode",
8754
8763
  "required": false
8755
8764
  },
8765
+ "dataModeMenuLabel": {
8766
+ "type": "string",
8767
+ "required": false
8768
+ },
8769
+ "dataModeSwitcher": {
8770
+ "type": "boolean",
8771
+ "required": false
8772
+ },
8773
+ "dataModeSwitcherLabel": {
8774
+ "type": "string",
8775
+ "required": false
8776
+ },
8756
8777
  "displayedCount": {
8757
8778
  "type": "number | undefined",
8758
8779
  "required": false
@@ -8833,6 +8854,10 @@
8833
8854
  "type": "string[]",
8834
8855
  "required": false
8835
8856
  },
8857
+ "infiniteModeLabel": {
8858
+ "type": "string",
8859
+ "required": false
8860
+ },
8836
8861
  "loadIdentity": {
8837
8862
  "type": "string | number",
8838
8863
  "required": false
@@ -8873,6 +8898,10 @@
8873
8898
  "type": "TablePaginationState | null",
8874
8899
  "required": false
8875
8900
  },
8901
+ "paginationModeLabel": {
8902
+ "type": "string",
8903
+ "required": false
8904
+ },
8876
8905
  "resultSummaryLabel": {
8877
8906
  "type": "string",
8878
8907
  "required": false
@@ -8935,6 +8964,10 @@
8935
8964
  "name": "dsColumnsConfigChange",
8936
8965
  "detail": "TableColumnsConfigChangeDetail"
8937
8966
  },
8967
+ {
8968
+ "name": "dsDataModeChange",
8969
+ "detail": "TableDataModeChangeDetail"
8970
+ },
8938
8971
  {
8939
8972
  "name": "dsGroupCollapseChange",
8940
8973
  "detail": "TableGroupCollapseChangeDetail"
@@ -8979,6 +9012,7 @@
8979
9012
  "componentDependencies": [
8980
9013
  "button-unfilled",
8981
9014
  "checkbox",
9015
+ "divider",
8982
9016
  "empty-state",
8983
9017
  "icon",
8984
9018
  "loader",
@@ -8990,6 +9024,238 @@
8990
9024
  "tooltip"
8991
9025
  ]
8992
9026
  },
9027
+ {
9028
+ "id": "component:ds-table-saved-views",
9029
+ "tag": "ds-table-saved-views",
9030
+ "name": "table-saved-views",
9031
+ "title": "TableSavedViews",
9032
+ "summary": "Controlled saved-views UI for table toolbars, including selection, dirty state, create, save, discard, rename, remove, validation, and focus behavior without owning table configuration or persistence.",
9033
+ "intentStatus": "complete",
9034
+ "intent": {
9035
+ "audience": "general",
9036
+ "status": "stable",
9037
+ "summary": "Controlled saved-views UI for table toolbars, including selection, dirty state, create, save, discard, rename, remove, validation, and focus behavior without owning table configuration or persistence.",
9038
+ "useWhen": [
9039
+ "A table workspace lets people recall and manage named combinations of table controls.",
9040
+ "Several products need the same saved-view interaction while retaining different view payloads and storage systems."
9041
+ ],
9042
+ "avoidWhen": [
9043
+ "The choices do not represent restorable table configurations.",
9044
+ "The application expects the component to serialize filters, grouping, sorting, columns, pagination, or product-specific state."
9045
+ ],
9046
+ "commonlyComposedWith": [
9047
+ "component:ds-table-toolbar",
9048
+ "component:ds-table",
9049
+ "component:ds-select",
9050
+ "component:ds-menu",
9051
+ "component:ds-modal"
9052
+ ],
9053
+ "patterns": [
9054
+ "pattern:menu-trigger"
9055
+ ],
9056
+ "accessibility": [
9057
+ "The primary control retains combobox semantics and exposes a direct accessible name.",
9058
+ "Each custom view exposes a separately named options trigger. The options menu supports keyboard navigation and returns focus through the shared Select and Menu behavior.",
9059
+ "The naming dialog traps focus through Modal behavior, associates validation text with the input through Field, and restores focus to the saved-views control after closing."
9060
+ ],
9061
+ "states": [
9062
+ "views, value, and dirty are controlled. Selection, create, save, discard, rename, and remove events communicate intent and never mutate application records.",
9063
+ "The component owns only transient interaction state: the contextual menu, naming dialog, draft name, duplicate-name validation, and focus restoration.",
9064
+ "The default view is a non-editable template. Application-owned custom views appear in a separate section with Rename and Remove actions. New view opens the naming dialog. When an editable selected view is dirty, that view row shows Save and negative Discard supporting actions while the footer remains dedicated to New view. The application decides which table state to capture, restore, and persist."
9065
+ ],
9066
+ "responsiveBehavior": [
9067
+ "The control remains a single toolbar item and relies on Select, Menu, and Modal collision and viewport behavior.",
9068
+ "Place it in the leading region of ds-table-toolbar so narrow table headers preserve the expected control order."
9069
+ ],
9070
+ "frameworkCaveats": {
9071
+ "customElements": [
9072
+ "Assign views through the JavaScript property and update value after handling dsViewChange."
9073
+ ],
9074
+ "react": [
9075
+ "Keep view records and serialized table configuration in application state; update controlled props in response to the component events."
9076
+ ],
9077
+ "angular": [
9078
+ "Import the generated DsTableSavedViews adapter and bind views, value, and dirty; handle event.detail for selection and mutations."
9079
+ ]
9080
+ },
9081
+ "references": [
9082
+ {
9083
+ "label": "Storybook review states",
9084
+ "path": "src/wc/components/TableSavedViews/TableSavedViews.stories.ts"
9085
+ },
9086
+ {
9087
+ "label": "Toolbar composition owner",
9088
+ "path": "src/wc/components/TableToolbar/TableToolbar.agent.json"
9089
+ }
9090
+ ]
9091
+ },
9092
+ "api": {
9093
+ "props": {
9094
+ "createLabel": {
9095
+ "type": "string",
9096
+ "required": false
9097
+ },
9098
+ "defaultViewId": {
9099
+ "type": "string",
9100
+ "required": false
9101
+ },
9102
+ "defaultViewLabel": {
9103
+ "type": "string",
9104
+ "required": false
9105
+ },
9106
+ "dirty": {
9107
+ "type": "boolean",
9108
+ "required": false
9109
+ },
9110
+ "label": {
9111
+ "type": "string",
9112
+ "required": false
9113
+ },
9114
+ "triggerLabel": {
9115
+ "type": "string",
9116
+ "required": false
9117
+ },
9118
+ "value": {
9119
+ "type": "string",
9120
+ "required": false
9121
+ },
9122
+ "views": {
9123
+ "type": "TableSavedView[]",
9124
+ "required": false
9125
+ }
9126
+ },
9127
+ "events": [
9128
+ {
9129
+ "name": "dsViewChange",
9130
+ "detail": "TableSavedViewChangeDetail"
9131
+ },
9132
+ {
9133
+ "name": "dsViewCreate",
9134
+ "detail": "TableSavedViewCreateDetail"
9135
+ },
9136
+ {
9137
+ "name": "dsViewDiscard",
9138
+ "detail": "TableSavedViewDiscardDetail"
9139
+ },
9140
+ {
9141
+ "name": "dsViewRemove",
9142
+ "detail": "TableSavedViewRemoveDetail"
9143
+ },
9144
+ {
9145
+ "name": "dsViewRename",
9146
+ "detail": "TableSavedViewRenameDetail"
9147
+ },
9148
+ {
9149
+ "name": "dsViewSave",
9150
+ "detail": "TableSavedViewSaveDetail"
9151
+ }
9152
+ ],
9153
+ "slots": []
9154
+ },
9155
+ "exports": {
9156
+ "customElement": "ds-table-saved-views",
9157
+ "react": "DsTableSavedViews",
9158
+ "angular": "DsTableSavedViews"
9159
+ },
9160
+ "dependencies": [
9161
+ "@ds-mo/ui",
9162
+ "@ds-mo/tokens"
9163
+ ],
9164
+ "componentDependencies": [
9165
+ "button-filled",
9166
+ "button-unfilled",
9167
+ "field",
9168
+ "input",
9169
+ "menu",
9170
+ "modal",
9171
+ "select"
9172
+ ]
9173
+ },
9174
+ {
9175
+ "id": "component:ds-table-toolbar",
9176
+ "tag": "ds-table-toolbar",
9177
+ "name": "table-toolbar",
9178
+ "title": "TableToolbar",
9179
+ "summary": "Data-agnostic companion layout for application-owned controls in a table header, with leading and trailing control groups and narrow-width horizontal overflow.",
9180
+ "intentStatus": "complete",
9181
+ "intent": {
9182
+ "audience": "general",
9183
+ "status": "stable",
9184
+ "summary": "Data-agnostic companion layout for application-owned controls in a table header, with leading and trailing control groups and narrow-width horizontal overflow.",
9185
+ "useWhen": [
9186
+ "Several table pages repeat the same leading discovery controls and trailing result-shaping controls.",
9187
+ "A ds-table header slot needs consistent control spacing, alignment, grouping, and narrow-width overflow without moving product behavior into the table."
9188
+ ],
9189
+ "avoidWhen": [
9190
+ "The controls do not operate on a table or structured result set.",
9191
+ "The application expects the toolbar to define filters, saved views, grouping choices, persistence, or data transformations.",
9192
+ "Only one standalone control is present and needs no grouped toolbar semantics."
9193
+ ],
9194
+ "commonlyComposedWith": [
9195
+ "component:ds-table",
9196
+ "component:ds-table-saved-views",
9197
+ "component:ds-input",
9198
+ "component:ds-filter-menu",
9199
+ "component:ds-button-unfilled"
9200
+ ],
9201
+ "patterns": [],
9202
+ "accessibility": [
9203
+ "The component exposes a named toolbar while each slotted control retains its own accessible name and native keyboard behavior.",
9204
+ "Use the leading slot for discovery and context controls such as saved views and search. Use the trailing slot for result-shaping controls such as filters and grouping.",
9205
+ "Tab order follows authored DOM order. The toolbar does not add roving focus because it may contain heterogeneous form and popup controls."
9206
+ ],
9207
+ "states": [
9208
+ "The component owns layout only. Slotted controls, values, menus, loading, persistence, and consequences remain controlled by the application. Use ds-table-saved-views when saved-view interaction needs the shared CompoMo behavior while application storage remains external.",
9209
+ "Either region may be empty. The populated region continues to occupy the available width without adding placeholder chrome."
9210
+ ],
9211
+ "responsiveBehavior": [
9212
+ "The two control groups stay on one line and horizontally scroll when their complete controls no longer fit.",
9213
+ "The scrollbar is visually suppressed without removing touch, trackpad, mouse-wheel, or keyboard scrolling from the overflow container.",
9214
+ "Trailing controls remain grouped after leading controls; the toolbar does not collapse controls into an application-specific overflow menu."
9215
+ ],
9216
+ "frameworkCaveats": {
9217
+ "customElements": [
9218
+ "Project controls through slot=leading or slot=trailing and provide a label that names their table context when Table controls is insufficient."
9219
+ ],
9220
+ "react": [
9221
+ "Set slot=leading or slot=trailing on each child control; keep values and event handlers in the application."
9222
+ ],
9223
+ "angular": [
9224
+ "Set slot=leading or slot=trailing on each child control and import the generated DsTableToolbar adapter alongside those controls."
9225
+ ]
9226
+ },
9227
+ "references": [
9228
+ {
9229
+ "label": "Storybook review states",
9230
+ "path": "src/wc/components/TableToolbar/TableToolbar.stories.ts"
9231
+ },
9232
+ {
9233
+ "label": "Table composition owner",
9234
+ "path": "src/wc/components/Table/Table.agent.json"
9235
+ }
9236
+ ]
9237
+ },
9238
+ "api": {
9239
+ "props": {
9240
+ "label": {
9241
+ "type": "string",
9242
+ "required": false
9243
+ }
9244
+ },
9245
+ "events": [],
9246
+ "slots": []
9247
+ },
9248
+ "exports": {
9249
+ "customElement": "ds-table-toolbar",
9250
+ "react": "DsTableToolbar",
9251
+ "angular": "DsTableToolbar"
9252
+ },
9253
+ "dependencies": [
9254
+ "@ds-mo/ui",
9255
+ "@ds-mo/tokens"
9256
+ ],
9257
+ "componentDependencies": []
9258
+ },
8993
9259
  {
8994
9260
  "id": "component:ds-tag",
8995
9261
  "tag": "ds-tag",
@@ -3,6 +3,7 @@ import type { Components } from '@ds-mo/ui/components';
3
3
  import type { DsSelectCustomEvent } from '@ds-mo/ui/components';
4
4
  import type { SelectValue as IDsSelectSelectValue } from '@ds-mo/ui/components';
5
5
  import type { SelectOptionActionDetail as IDsSelectSelectOptionActionDetail } from '@ds-mo/ui/components';
6
+ import type { SelectOptionSubtextActionDetail as IDsSelectSelectOptionSubtextActionDetail } from '@ds-mo/ui/components';
6
7
  import * as i0 from "@angular/core";
7
8
  export declare class DsSelect {
8
9
  protected z: NgZone;
@@ -12,9 +13,10 @@ export declare class DsSelect {
12
13
  dsOpenChange: EventEmitter<DsSelectCustomEvent<boolean>>;
13
14
  dsFooterAction: EventEmitter<DsSelectCustomEvent<void>>;
14
15
  dsOptionAction: EventEmitter<DsSelectCustomEvent<IDsSelectSelectOptionActionDetail>>;
16
+ dsOptionSubtextAction: EventEmitter<DsSelectCustomEvent<IDsSelectSelectOptionSubtextActionDetail>>;
15
17
  constructor(c: ChangeDetectorRef, r: ElementRef, z: NgZone);
16
18
  static ɵfac: i0.ɵɵFactoryDeclaration<DsSelect, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<DsSelect, "ds-select", never, { "activeFill": { "alias": "activeFill"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; }; "background": { "alias": "background"; "required": false; }; "clearLabel": { "alias": "clearLabel"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "dot": { "alias": "dot"; "required": false; }; "error": { "alias": "error"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "footerActionLabel": { "alias": "footerActionLabel"; "required": false; }; "hasBorder": { "alias": "hasBorder"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "indicator": { "alias": "indicator"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "isInactive": { "alias": "isInactive"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "loadingLabel": { "alias": "loadingLabel"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "name": { "alias": "name"; "required": false; }; "noResultsText": { "alias": "noResultsText"; "required": false; }; "open": { "alias": "open"; "required": false; }; "options": { "alias": "options"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "popupAlign": { "alias": "popupAlign"; "required": false; }; "required": { "alias": "required"; "required": false; }; "requiredMessage": { "alias": "requiredMessage"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "sections": { "alias": "sections"; "required": false; }; "selectedLabel": { "alias": "selectedLabel"; "required": false; }; "size": { "alias": "size"; "required": false; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; }; "triggerLabelPlaceholder": { "alias": "triggerLabelPlaceholder"; "required": false; }; "value": { "alias": "value"; "required": false; }; "width": { "alias": "width"; "required": false; }; }, { "dsChange": "dsChange"; "dsClear": "dsClear"; "dsOpenChange": "dsOpenChange"; "dsFooterAction": "dsFooterAction"; "dsOptionAction": "dsOptionAction"; }, never, ["*"], true, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<DsSelect, "ds-select", never, { "activeFill": { "alias": "activeFill"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; }; "background": { "alias": "background"; "required": false; }; "clearLabel": { "alias": "clearLabel"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "dot": { "alias": "dot"; "required": false; }; "error": { "alias": "error"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "footerActionLabel": { "alias": "footerActionLabel"; "required": false; }; "hasBorder": { "alias": "hasBorder"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "indicator": { "alias": "indicator"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "isInactive": { "alias": "isInactive"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "loadingLabel": { "alias": "loadingLabel"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "name": { "alias": "name"; "required": false; }; "noResultsText": { "alias": "noResultsText"; "required": false; }; "open": { "alias": "open"; "required": false; }; "options": { "alias": "options"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "popupAlign": { "alias": "popupAlign"; "required": false; }; "required": { "alias": "required"; "required": false; }; "requiredMessage": { "alias": "requiredMessage"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "sections": { "alias": "sections"; "required": false; }; "selectedLabel": { "alias": "selectedLabel"; "required": false; }; "size": { "alias": "size"; "required": false; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; }; "triggerLabelPlaceholder": { "alias": "triggerLabelPlaceholder"; "required": false; }; "value": { "alias": "value"; "required": false; }; "width": { "alias": "width"; "required": false; }; }, { "dsChange": "dsChange"; "dsClear": "dsClear"; "dsOpenChange": "dsOpenChange"; "dsFooterAction": "dsFooterAction"; "dsOptionAction": "dsOptionAction"; "dsOptionSubtextAction": "dsOptionSubtextAction"; }, never, ["*"], true, never>;
18
20
  }
19
21
  export declare interface DsSelect extends Components.DsSelect {
20
22
  /**
@@ -37,4 +39,8 @@ export declare interface DsSelect extends Components.DsSelect {
37
39
  * Emitted when an option's contextual ellipsis action is activated.
38
40
  */
39
41
  dsOptionAction: EventEmitter<DsSelectCustomEvent<IDsSelectSelectOptionActionDetail>>;
42
+ /**
43
+ * Emitted when an option's supporting text action is activated.
44
+ */
45
+ dsOptionSubtextAction: EventEmitter<DsSelectCustomEvent<IDsSelectSelectOptionSubtextActionDetail>>;
40
46
  }
@@ -18,11 +18,12 @@ let DsSelect = class DsSelect {
18
18
  this.dsOpenChange = new EventEmitter();
19
19
  this.dsFooterAction = new EventEmitter();
20
20
  this.dsOptionAction = new EventEmitter();
21
+ this.dsOptionSubtextAction = new EventEmitter();
21
22
  c.detach();
22
23
  this.el = r.nativeElement;
23
24
  }
24
25
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: DsSelect, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
25
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.0", type: DsSelect, isStandalone: true, selector: "ds-select", inputs: { activeFill: "activeFill", allowClear: "allowClear", ariaDescribedby: "ariaDescribedby", ariaLabel: "ariaLabel", ariaLabelledby: "ariaLabelledby", background: "background", clearLabel: "clearLabel", disabled: "disabled", dot: "dot", error: "error", errorMessage: "errorMessage", footerActionLabel: "footerActionLabel", hasBorder: "hasBorder", icon: "icon", indicator: "indicator", inputId: "inputId", isInactive: "isInactive", isLoading: "isLoading", loadingLabel: "loadingLabel", multiple: "multiple", name: "name", noResultsText: "noResultsText", open: "open", options: "options", placeholder: "placeholder", popupAlign: "popupAlign", required: "required", requiredMessage: "requiredMessage", searchPlaceholder: "searchPlaceholder", searchable: "searchable", sections: "sections", selectedLabel: "selectedLabel", size: "size", triggerLabel: "triggerLabel", triggerLabelPlaceholder: "triggerLabelPlaceholder", value: "value", width: "width" }, outputs: { dsChange: "dsChange", dsClear: "dsClear", dsOpenChange: "dsOpenChange", dsFooterAction: "dsFooterAction", dsOptionAction: "dsOptionAction" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.0", type: DsSelect, isStandalone: true, selector: "ds-select", inputs: { activeFill: "activeFill", allowClear: "allowClear", ariaDescribedby: "ariaDescribedby", ariaLabel: "ariaLabel", ariaLabelledby: "ariaLabelledby", background: "background", clearLabel: "clearLabel", disabled: "disabled", dot: "dot", error: "error", errorMessage: "errorMessage", footerActionLabel: "footerActionLabel", hasBorder: "hasBorder", icon: "icon", indicator: "indicator", inputId: "inputId", isInactive: "isInactive", isLoading: "isLoading", loadingLabel: "loadingLabel", multiple: "multiple", name: "name", noResultsText: "noResultsText", open: "open", options: "options", placeholder: "placeholder", popupAlign: "popupAlign", required: "required", requiredMessage: "requiredMessage", searchPlaceholder: "searchPlaceholder", searchable: "searchable", sections: "sections", selectedLabel: "selectedLabel", size: "size", triggerLabel: "triggerLabel", triggerLabelPlaceholder: "triggerLabelPlaceholder", value: "value", width: "width" }, outputs: { dsChange: "dsChange", dsClear: "dsClear", dsOpenChange: "dsOpenChange", dsFooterAction: "dsFooterAction", dsOptionAction: "dsOptionAction", dsOptionSubtextAction: "dsOptionSubtextAction" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26
27
  };
27
28
  DsSelect = __decorate([
28
29
  ProxyCmp({
@@ -40,7 +41,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
40
41
  template: '<ng-content></ng-content>',
41
42
  // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
42
43
  inputs: ['activeFill', 'allowClear', 'ariaDescribedby', 'ariaLabel', 'ariaLabelledby', 'background', 'clearLabel', 'disabled', 'dot', 'error', 'errorMessage', 'footerActionLabel', 'hasBorder', 'icon', 'indicator', 'inputId', 'isInactive', 'isLoading', 'loadingLabel', 'multiple', 'name', 'noResultsText', 'open', 'options', 'placeholder', 'popupAlign', 'required', 'requiredMessage', 'searchPlaceholder', 'searchable', 'sections', 'selectedLabel', 'size', 'triggerLabel', 'triggerLabelPlaceholder', 'value', 'width'],
43
- outputs: ['dsChange', 'dsClear', 'dsOpenChange', 'dsFooterAction', 'dsOptionAction'],
44
+ outputs: ['dsChange', 'dsClear', 'dsOpenChange', 'dsFooterAction', 'dsOptionAction', 'dsOptionSubtextAction'],
44
45
  }]
45
46
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { dsChange: [{
46
47
  type: Output
@@ -52,4 +53,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
52
53
  type: Output
53
54
  }], dsOptionAction: [{
54
55
  type: Output
56
+ }], dsOptionSubtextAction: [{
57
+ type: Output
55
58
  }] } });
@@ -0,0 +1,49 @@
1
+ import { ChangeDetectorRef, ElementRef, NgZone, EventEmitter } from '@angular/core';
2
+ import type { Components } from '@ds-mo/ui/components';
3
+ import type { DsTableSavedViewsCustomEvent } from '@ds-mo/ui/components';
4
+ import type { TableSavedViewChangeDetail as IDsTableSavedViewsTableSavedViewChangeDetail } from '@ds-mo/ui/components';
5
+ import type { TableSavedViewCreateDetail as IDsTableSavedViewsTableSavedViewCreateDetail } from '@ds-mo/ui/components';
6
+ import type { TableSavedViewRenameDetail as IDsTableSavedViewsTableSavedViewRenameDetail } from '@ds-mo/ui/components';
7
+ import type { TableSavedViewRemoveDetail as IDsTableSavedViewsTableSavedViewRemoveDetail } from '@ds-mo/ui/components';
8
+ import type { TableSavedViewSaveDetail as IDsTableSavedViewsTableSavedViewSaveDetail } from '@ds-mo/ui/components';
9
+ import type { TableSavedViewDiscardDetail as IDsTableSavedViewsTableSavedViewDiscardDetail } from '@ds-mo/ui/components';
10
+ import * as i0 from "@angular/core";
11
+ export declare class DsTableSavedViews {
12
+ protected z: NgZone;
13
+ protected el: HTMLDsTableSavedViewsElement;
14
+ dsViewChange: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewChangeDetail>>;
15
+ dsViewCreate: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewCreateDetail>>;
16
+ dsViewRename: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewRenameDetail>>;
17
+ dsViewRemove: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewRemoveDetail>>;
18
+ dsViewSave: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewSaveDetail>>;
19
+ dsViewDiscard: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewDiscardDetail>>;
20
+ constructor(c: ChangeDetectorRef, r: ElementRef, z: NgZone);
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<DsTableSavedViews, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<DsTableSavedViews, "ds-table-saved-views", never, { "createLabel": { "alias": "createLabel"; "required": false; }; "defaultViewId": { "alias": "defaultViewId"; "required": false; }; "defaultViewLabel": { "alias": "defaultViewLabel"; "required": false; }; "dirty": { "alias": "dirty"; "required": false; }; "label": { "alias": "label"; "required": false; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; }; "value": { "alias": "value"; "required": false; }; "views": { "alias": "views"; "required": false; }; }, { "dsViewChange": "dsViewChange"; "dsViewCreate": "dsViewCreate"; "dsViewRename": "dsViewRename"; "dsViewRemove": "dsViewRemove"; "dsViewSave": "dsViewSave"; "dsViewDiscard": "dsViewDiscard"; }, never, ["*"], true, never>;
23
+ }
24
+ export declare interface DsTableSavedViews extends Components.DsTableSavedViews {
25
+ /**
26
+ * Emitted when a view selection is requested.
27
+ */
28
+ dsViewChange: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewChangeDetail>>;
29
+ /**
30
+ * Emitted after a valid create-view name is submitted.
31
+ */
32
+ dsViewCreate: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewCreateDetail>>;
33
+ /**
34
+ * Emitted after a valid renamed view name is submitted.
35
+ */
36
+ dsViewRename: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewRenameDetail>>;
37
+ /**
38
+ * Emitted when a custom view removal is requested.
39
+ */
40
+ dsViewRemove: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewRemoveDetail>>;
41
+ /**
42
+ * Emitted when changes to the active custom view should replace its stored payload.
43
+ */
44
+ dsViewSave: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewSaveDetail>>;
45
+ /**
46
+ * Emitted when the active custom view's stored payload should be restored.
47
+ */
48
+ dsViewDiscard: EventEmitter<DsTableSavedViewsCustomEvent<IDsTableSavedViewsTableSavedViewDiscardDetail>>;
49
+ }
@@ -0,0 +1,57 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ /* tslint:disable */
8
+ /* auto-generated angular directive proxies */
9
+ import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';
10
+ import { ProxyCmp } from './angular-component-lib/utils.js';
11
+ import { defineCustomElement as defineDsTableSavedViews } from '@ds-mo/ui/components/ds-table-saved-views.js';
12
+ import * as i0 from "@angular/core";
13
+ let DsTableSavedViews = class DsTableSavedViews {
14
+ constructor(c, r, z) {
15
+ this.z = z;
16
+ this.dsViewChange = new EventEmitter();
17
+ this.dsViewCreate = new EventEmitter();
18
+ this.dsViewRename = new EventEmitter();
19
+ this.dsViewRemove = new EventEmitter();
20
+ this.dsViewSave = new EventEmitter();
21
+ this.dsViewDiscard = new EventEmitter();
22
+ c.detach();
23
+ this.el = r.nativeElement;
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: DsTableSavedViews, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.0", type: DsTableSavedViews, isStandalone: true, selector: "ds-table-saved-views", inputs: { createLabel: "createLabel", defaultViewId: "defaultViewId", defaultViewLabel: "defaultViewLabel", dirty: "dirty", label: "label", triggerLabel: "triggerLabel", value: "value", views: "views" }, outputs: { dsViewChange: "dsViewChange", dsViewCreate: "dsViewCreate", dsViewRename: "dsViewRename", dsViewRemove: "dsViewRemove", dsViewSave: "dsViewSave", dsViewDiscard: "dsViewDiscard" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27
+ };
28
+ DsTableSavedViews = __decorate([
29
+ ProxyCmp({
30
+ defineCustomElementFn: defineDsTableSavedViews,
31
+ inputs: ['createLabel', 'defaultViewId', 'defaultViewLabel', 'dirty', 'label', 'triggerLabel', 'value', 'views']
32
+ })
33
+ ], DsTableSavedViews);
34
+ export { DsTableSavedViews };
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: DsTableSavedViews, decorators: [{
36
+ type: Component,
37
+ args: [{
38
+ selector: 'ds-table-saved-views',
39
+ changeDetection: ChangeDetectionStrategy.OnPush,
40
+ template: '<ng-content></ng-content>',
41
+ // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
42
+ inputs: ['createLabel', 'defaultViewId', 'defaultViewLabel', 'dirty', 'label', 'triggerLabel', 'value', 'views'],
43
+ outputs: ['dsViewChange', 'dsViewCreate', 'dsViewRename', 'dsViewRemove', 'dsViewSave', 'dsViewDiscard'],
44
+ }]
45
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { dsViewChange: [{
46
+ type: Output
47
+ }], dsViewCreate: [{
48
+ type: Output
49
+ }], dsViewRename: [{
50
+ type: Output
51
+ }], dsViewRemove: [{
52
+ type: Output
53
+ }], dsViewSave: [{
54
+ type: Output
55
+ }], dsViewDiscard: [{
56
+ type: Output
57
+ }] } });