@chromvoid/uikit 0.1.0 → 0.2.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 (192) hide show
  1. package/LICENSE +19 -6
  2. package/README.md +1 -0
  3. package/dist/components/cv-accordion-item.d.ts +1 -1
  4. package/dist/components/cv-accordion.d.ts +1 -1
  5. package/dist/components/cv-accordion.js +2 -1
  6. package/dist/components/cv-alert-dialog.d.ts +1 -1
  7. package/dist/components/cv-alert-dialog.js +17 -2
  8. package/dist/components/cv-alert.d.ts +1 -1
  9. package/dist/components/cv-alert.js +2 -1
  10. package/dist/components/cv-badge.d.ts +1 -1
  11. package/dist/components/cv-badge.js +2 -1
  12. package/dist/components/cv-bottom-sheet.d.ts +127 -0
  13. package/dist/components/cv-bottom-sheet.js +513 -0
  14. package/dist/components/cv-breadcrumb-item.d.ts +1 -1
  15. package/dist/components/cv-breadcrumb-item.js +1 -1
  16. package/dist/components/cv-breadcrumb.d.ts +1 -1
  17. package/dist/components/cv-breadcrumb.js +2 -1
  18. package/dist/components/cv-button.d.ts +23 -1
  19. package/dist/components/cv-button.js +194 -37
  20. package/dist/components/cv-callout.d.ts +8 -1
  21. package/dist/components/cv-callout.js +18 -1
  22. package/dist/components/cv-card.d.ts +1 -1
  23. package/dist/components/cv-card.js +2 -2
  24. package/dist/components/cv-carousel-slide.d.ts +1 -1
  25. package/dist/components/cv-carousel.d.ts +1 -1
  26. package/dist/components/cv-carousel.js +2 -1
  27. package/dist/components/cv-checkbox.d.ts +1 -1
  28. package/dist/components/cv-combobox-group.d.ts +1 -1
  29. package/dist/components/cv-combobox-option.d.ts +1 -1
  30. package/dist/components/cv-combobox-option.js +2 -2
  31. package/dist/components/cv-combobox.d.ts +3 -1
  32. package/dist/components/cv-combobox.js +49 -8
  33. package/dist/components/cv-command-item.d.ts +1 -1
  34. package/dist/components/cv-command-item.js +2 -2
  35. package/dist/components/cv-command-palette.d.ts +1 -1
  36. package/dist/components/cv-command-palette.js +21 -1
  37. package/dist/components/cv-context-menu.d.ts +1 -1
  38. package/dist/components/cv-context-menu.js +2 -1
  39. package/dist/components/cv-copy-button.d.ts +37 -9
  40. package/dist/components/cv-copy-button.js +129 -41
  41. package/dist/components/cv-date-picker.d.ts +1 -1
  42. package/dist/components/cv-date-picker.js +20 -1
  43. package/dist/components/cv-dialog.d.ts +44 -2
  44. package/dist/components/cv-dialog.js +686 -74
  45. package/dist/components/cv-disclosure.d.ts +1 -1
  46. package/dist/components/cv-disclosure.js +2 -1
  47. package/dist/components/cv-drawer.d.ts +29 -1
  48. package/dist/components/cv-drawer.js +229 -4
  49. package/dist/components/cv-feed-article.d.ts +1 -1
  50. package/dist/components/cv-feed-article.js +2 -1
  51. package/dist/components/cv-feed.d.ts +1 -1
  52. package/dist/components/cv-feed.js +2 -1
  53. package/dist/components/cv-grid-cell.d.ts +1 -1
  54. package/dist/components/cv-grid-cell.js +3 -3
  55. package/dist/components/cv-grid-column.d.ts +1 -1
  56. package/dist/components/cv-grid-column.js +1 -1
  57. package/dist/components/cv-grid-row.d.ts +1 -1
  58. package/dist/components/cv-grid.d.ts +1 -1
  59. package/dist/components/cv-grid.js +2 -1
  60. package/dist/components/cv-guidance-anchor.d.ts +47 -0
  61. package/dist/components/cv-guidance-anchor.js +113 -0
  62. package/dist/components/cv-guidance-panel.d.ts +29 -0
  63. package/dist/components/cv-guidance-panel.js +245 -0
  64. package/dist/components/cv-icon.d.ts +2 -1
  65. package/dist/components/cv-icon.js +28 -3
  66. package/dist/components/cv-input.d.ts +7 -1
  67. package/dist/components/cv-input.js +33 -1
  68. package/dist/components/cv-landmark.d.ts +1 -1
  69. package/dist/components/cv-landmark.js +2 -1
  70. package/dist/components/cv-link.d.ts +1 -1
  71. package/dist/components/cv-link.js +2 -1
  72. package/dist/components/cv-listbox-group.d.ts +1 -1
  73. package/dist/components/cv-listbox.d.ts +1 -1
  74. package/dist/components/cv-listbox.js +2 -1
  75. package/dist/components/cv-menu-button.d.ts +24 -1
  76. package/dist/components/cv-menu-button.js +226 -18
  77. package/dist/components/cv-menu-group.d.ts +1 -1
  78. package/dist/components/cv-menu-item.d.ts +1 -1
  79. package/dist/components/cv-menu-item.js +6 -2
  80. package/dist/components/cv-menu.d.ts +1 -1
  81. package/dist/components/cv-menu.js +21 -1
  82. package/dist/components/cv-meter.d.ts +1 -1
  83. package/dist/components/cv-meter.js +6 -22
  84. package/dist/components/cv-number.d.ts +1 -1
  85. package/dist/components/cv-option.d.ts +1 -1
  86. package/dist/components/cv-option.js +3 -9
  87. package/dist/components/cv-popover-positioning.d.ts +22 -0
  88. package/dist/components/cv-popover-positioning.js +112 -0
  89. package/dist/components/cv-popover.d.ts +45 -8
  90. package/dist/components/cv-popover.js +395 -113
  91. package/dist/components/cv-progress-ring.d.ts +1 -1
  92. package/dist/components/cv-progress-ring.js +2 -1
  93. package/dist/components/cv-progress.d.ts +8 -1
  94. package/dist/components/cv-progress.js +41 -10
  95. package/dist/components/cv-radio-group.d.ts +1 -1
  96. package/dist/components/cv-radio.d.ts +1 -1
  97. package/dist/components/cv-radio.js +1 -1
  98. package/dist/components/cv-select-group.d.ts +1 -1
  99. package/dist/components/cv-select-option.d.ts +1 -1
  100. package/dist/components/cv-select-option.js +2 -2
  101. package/dist/components/cv-select.d.ts +1 -1
  102. package/dist/components/cv-select.js +28 -1
  103. package/dist/components/cv-sidebar-item.d.ts +1 -1
  104. package/dist/components/cv-sidebar.d.ts +1 -1
  105. package/dist/components/cv-sidebar.js +3 -2
  106. package/dist/components/cv-slider-multi-thumb.d.ts +1 -1
  107. package/dist/components/cv-slider-multi-thumb.js +2 -1
  108. package/dist/components/cv-slider.d.ts +17 -4
  109. package/dist/components/cv-slider.js +63 -21
  110. package/dist/components/cv-spinbutton.d.ts +1 -1
  111. package/dist/components/cv-spinner.d.ts +1 -1
  112. package/dist/components/cv-spinner.js +2 -1
  113. package/dist/components/cv-switch.d.ts +1 -1
  114. package/dist/components/cv-tab-panel.d.ts +1 -1
  115. package/dist/components/cv-tab.d.ts +1 -1
  116. package/dist/components/cv-table-cell.d.ts +1 -1
  117. package/dist/components/cv-table-cell.js +1 -1
  118. package/dist/components/cv-table-column.d.ts +1 -1
  119. package/dist/components/cv-table-column.js +1 -1
  120. package/dist/components/cv-table-row.d.ts +1 -1
  121. package/dist/components/cv-table-row.js +1 -4
  122. package/dist/components/cv-table.d.ts +1 -3
  123. package/dist/components/cv-table.js +4 -11
  124. package/dist/components/cv-tabs.d.ts +1 -1
  125. package/dist/components/cv-tabs.js +3 -2
  126. package/dist/components/cv-textarea.d.ts +11 -1
  127. package/dist/components/cv-textarea.js +33 -0
  128. package/dist/components/cv-toast-region.d.ts +1 -1
  129. package/dist/components/cv-toast-region.js +2 -1
  130. package/dist/components/cv-toast.d.ts +1 -1
  131. package/dist/components/cv-toast.js +20 -27
  132. package/dist/components/cv-toolbar-item.d.ts +1 -1
  133. package/dist/components/cv-toolbar-separator.d.ts +1 -1
  134. package/dist/components/cv-toolbar.d.ts +1 -1
  135. package/dist/components/cv-toolbar.js +2 -1
  136. package/dist/components/cv-tooltip.d.ts +1 -1
  137. package/dist/components/cv-tooltip.js +2 -1
  138. package/dist/components/cv-treegrid-cell.d.ts +1 -1
  139. package/dist/components/cv-treegrid-cell.js +1 -1
  140. package/dist/components/cv-treegrid-column.d.ts +1 -1
  141. package/dist/components/cv-treegrid-column.js +1 -1
  142. package/dist/components/cv-treegrid-row.d.ts +1 -1
  143. package/dist/components/cv-treegrid-row.js +1 -1
  144. package/dist/components/cv-treegrid.d.ts +1 -1
  145. package/dist/components/cv-treegrid.js +4 -3
  146. package/dist/components/cv-treeitem.d.ts +1 -1
  147. package/dist/components/cv-treeitem.js +2 -2
  148. package/dist/components/cv-treeview.d.ts +1 -1
  149. package/dist/components/cv-treeview.js +2 -1
  150. package/dist/components/cv-window-splitter.d.ts +1 -1
  151. package/dist/components/cv-window-splitter.js +2 -1
  152. package/dist/components/index.d.ts +7 -0
  153. package/dist/components/index.js +3 -0
  154. package/dist/dialog/create-dialog-controller.d.ts +12 -4
  155. package/dist/dialog/create-dialog-controller.js +84 -22
  156. package/dist/dialog/index.d.ts +1 -1
  157. package/dist/index.d.ts +1 -1
  158. package/dist/reatom-lit/ReatomLitElement.d.ts +6 -3
  159. package/dist/reatom-lit/ReatomLitElement.js +18 -8
  160. package/dist/reatom-lit/createAfterRenderScheduler.d.ts +10 -0
  161. package/dist/reatom-lit/createAfterRenderScheduler.js +33 -0
  162. package/dist/reatom-lit/index.d.ts +2 -0
  163. package/dist/reatom-lit/index.js +1 -0
  164. package/dist/reatom-lit/watch.d.ts +1 -1
  165. package/dist/reatom-lit/withReatomElement.js +16 -2
  166. package/dist/register.js +4 -1
  167. package/dist/styles/component-styles.js +4 -0
  168. package/dist/styles/uno-generated.d.ts +2 -0
  169. package/dist/styles/uno-generated.js +1 -0
  170. package/dist/styles/uno-utilities.d.ts +5 -0
  171. package/dist/styles/uno-utilities.js +7 -0
  172. package/dist/theme/cv-theme-provider.d.ts +1 -1
  173. package/dist/theme/cv-theme-provider.js +2 -2
  174. package/dist/theme/tokens.css +619 -162
  175. package/package.json +9 -5
  176. package/specs/components/bottom-sheet.md +93 -0
  177. package/specs/components/button.md +8 -0
  178. package/specs/components/callout.md +8 -0
  179. package/specs/components/copy-button.md +54 -17
  180. package/specs/components/dialog.md +72 -43
  181. package/specs/components/drawer.md +18 -13
  182. package/specs/components/guidance-anchor.md +64 -0
  183. package/specs/components/guidance-panel.md +92 -0
  184. package/specs/components/input.md +7 -0
  185. package/specs/components/menu.md +8 -0
  186. package/specs/components/option.md +9 -9
  187. package/specs/components/progress.md +11 -0
  188. package/specs/components/sidebar.md +12 -12
  189. package/specs/components/table.md +13 -13
  190. package/specs/components/theme.md +13 -13
  191. package/specs/components/treegrid.md +15 -15
  192. package/specs/components/treeview.md +10 -10
@@ -0,0 +1,112 @@
1
+ const mirrorSideMap = {
2
+ top: 'bottom',
3
+ right: 'left',
4
+ bottom: 'top',
5
+ left: 'right',
6
+ };
7
+ const orthogonalSidesMap = {
8
+ top: ['right', 'left'],
9
+ right: ['bottom', 'top'],
10
+ bottom: ['right', 'left'],
11
+ left: ['bottom', 'top'],
12
+ };
13
+ function parsePlacement(placement) {
14
+ const [side, align = 'center'] = placement.split('-');
15
+ return { side, align };
16
+ }
17
+ function formatPlacement(side, align) {
18
+ if (align === 'center') {
19
+ return side;
20
+ }
21
+ return `${side}-${align}`;
22
+ }
23
+ function computeCoords(anchorRect, panelRect, placement, offset) {
24
+ const { side, align } = parsePlacement(placement);
25
+ let left = 0;
26
+ let top = 0;
27
+ if (side === 'top' || side === 'bottom') {
28
+ if (align === 'start') {
29
+ left = anchorRect.left;
30
+ }
31
+ else if (align === 'end') {
32
+ left = anchorRect.right - panelRect.width;
33
+ }
34
+ else {
35
+ left = anchorRect.left + (anchorRect.width - panelRect.width) / 2;
36
+ }
37
+ top = side === 'top' ? anchorRect.top - panelRect.height - offset : anchorRect.bottom + offset;
38
+ }
39
+ else {
40
+ if (align === 'start') {
41
+ top = anchorRect.top;
42
+ }
43
+ else if (align === 'end') {
44
+ top = anchorRect.bottom - panelRect.height;
45
+ }
46
+ else {
47
+ top = anchorRect.top + (anchorRect.height - panelRect.height) / 2;
48
+ }
49
+ left = side === 'left' ? anchorRect.left - panelRect.width - offset : anchorRect.right + offset;
50
+ }
51
+ return {
52
+ left: Math.round(left),
53
+ top: Math.round(top),
54
+ placement,
55
+ };
56
+ }
57
+ function fitsViewport(position, panelRect, viewport) {
58
+ return (position.left >= viewport.padding &&
59
+ position.top >= viewport.padding &&
60
+ position.left + panelRect.width <= viewport.width - viewport.padding &&
61
+ position.top + panelRect.height <= viewport.height - viewport.padding);
62
+ }
63
+ function clampToViewport(position, panelRect, viewport) {
64
+ const maxLeft = Math.max(viewport.padding, viewport.width - panelRect.width - viewport.padding);
65
+ const maxTop = Math.max(viewport.padding, viewport.height - panelRect.height - viewport.padding);
66
+ return {
67
+ left: Math.min(Math.max(position.left, viewport.padding), maxLeft),
68
+ top: Math.min(Math.max(position.top, viewport.padding), maxTop),
69
+ placement: position.placement,
70
+ };
71
+ }
72
+ export function getPlacementFallbacks(placement) {
73
+ const { side, align } = parsePlacement(placement);
74
+ const candidates = [
75
+ placement,
76
+ formatPlacement(mirrorSideMap[side], align),
77
+ ...orthogonalSidesMap[side].map((nextSide) => formatPlacement(nextSide, align)),
78
+ ];
79
+ return Array.from(new Set(candidates));
80
+ }
81
+ export function getPositionAreaForPlacement(placement) {
82
+ const { side, align } = parsePlacement(placement);
83
+ const row = side === 'top'
84
+ ? 'top'
85
+ : side === 'bottom'
86
+ ? 'bottom'
87
+ : align === 'start'
88
+ ? 'top'
89
+ : align === 'end'
90
+ ? 'bottom'
91
+ : 'center';
92
+ const column = side === 'left'
93
+ ? 'left'
94
+ : side === 'right'
95
+ ? 'right'
96
+ : align === 'start'
97
+ ? 'left'
98
+ : align === 'end'
99
+ ? 'right'
100
+ : 'center';
101
+ return `${row} ${column}`;
102
+ }
103
+ export function resolvePopoverPosition(anchorRect, panelRect, placement, offset, viewport) {
104
+ const candidates = getPlacementFallbacks(placement);
105
+ for (const candidate of candidates) {
106
+ const position = computeCoords(anchorRect, panelRect, candidate, offset);
107
+ if (fitsViewport(position, panelRect, viewport)) {
108
+ return position;
109
+ }
110
+ }
111
+ return clampToViewport(computeCoords(anchorRect, panelRect, placement, offset), panelRect, viewport);
112
+ }
@@ -1,7 +1,19 @@
1
+ import { type PopoverDismissIntent, type PopoverOpenSource } from '@chromvoid/headless-ui/popover';
1
2
  import type { PropertyValues } from 'lit';
2
3
  import { ReatomLitElement } from '../reatom-lit/ReatomLitElement.js';
3
- type CVPopoverPlacement = 'top-start' | 'top' | 'top-end' | 'right-start' | 'right' | 'right-end' | 'bottom-start' | 'bottom' | 'bottom-end' | 'left-start' | 'left' | 'left-end';
4
- type CVPopoverAnchor = 'trigger' | 'host';
4
+ import { type CVPopoverPlacement } from './cv-popover-positioning.js';
5
+ export interface CVPopoverEventDetail {
6
+ open: boolean;
7
+ openedBy: string | null;
8
+ dismissIntent: string | null;
9
+ }
10
+ export type { CVPopoverPlacement } from './cv-popover-positioning.js';
11
+ export type CVPopoverAnchor = 'trigger' | 'host';
12
+ export type CVPopoverTriggerMode = 'internal' | 'external';
13
+ export interface CVPopoverShowOptions {
14
+ source?: HTMLElement;
15
+ openedBy?: PopoverOpenSource;
16
+ }
5
17
  export declare class CVPopover extends ReatomLitElement {
6
18
  static elementName: string;
7
19
  static get properties(): {
@@ -40,6 +52,11 @@ export declare class CVPopover extends ReatomLitElement {
40
52
  type: StringConstructor;
41
53
  reflect: boolean;
42
54
  };
55
+ triggerMode: {
56
+ type: StringConstructor;
57
+ attribute: string;
58
+ reflect: boolean;
59
+ };
43
60
  offset: {
44
61
  type: NumberConstructor;
45
62
  reflect: boolean;
@@ -57,11 +74,19 @@ export declare class CVPopover extends ReatomLitElement {
57
74
  closeOnOutsideFocus: boolean;
58
75
  placement: CVPopoverPlacement;
59
76
  anchor: CVPopoverAnchor;
77
+ triggerMode: CVPopoverTriggerMode;
60
78
  offset: number;
61
79
  arrow: boolean;
62
80
  private readonly idBase;
63
81
  private model;
64
82
  private previousOpen;
83
+ private hasLayoutListeners;
84
+ private layoutFrame;
85
+ private focusContentOnNextUpdate;
86
+ private restoreFocusTarget;
87
+ private _sourceEl;
88
+ get sourceEl(): HTMLElement | null;
89
+ set sourceEl(value: HTMLElement | null);
65
90
  constructor();
66
91
  static styles: import("lit").CSSResult[];
67
92
  static define(): void;
@@ -69,19 +94,31 @@ export declare class CVPopover extends ReatomLitElement {
69
94
  disconnectedCallback(): void;
70
95
  willUpdate(changedProperties: PropertyValues): void;
71
96
  updated(changedProperties: PropertyValues): void;
97
+ show(options?: CVPopoverShowOptions): void;
98
+ hide(intent?: PopoverDismissIntent): void;
99
+ toggle(options?: CVPopoverShowOptions): void;
72
100
  private createModel;
101
+ private getContentElement;
102
+ private getTriggerElement;
103
+ private resolveAnchorElement;
104
+ private prepareAnchorForOpen;
73
105
  private buildEventDetail;
74
- /**
75
- * Dispatches beforetoggle and toggle events and syncs open state from headless.
76
- * If beforetoggle is canceled on open, reverts headless state.
77
- */
78
106
  private emitToggleEvents;
107
+ private restoreFocus;
79
108
  private syncOutsideListeners;
80
109
  private handleDocumentPointerDown;
81
110
  private handleDocumentFocusIn;
82
111
  private handleTriggerClick;
83
112
  private handleTriggerKeyDown;
84
113
  private handleContentKeyDown;
85
- protected render(): import("lit").TemplateResult<1>;
114
+ private handleNativeToggle;
115
+ private clearInlineLayout;
116
+ private applyDirectionalOffset;
117
+ private syncNativePopover;
118
+ private syncPopoverLayout;
119
+ private cancelLayoutFrame;
120
+ private scheduleLayout;
121
+ private toggleLayoutListeners;
122
+ private handleViewportChange;
123
+ protected render(): import("lit-html").TemplateResult;
86
124
  }
87
- export {};