@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.
- package/LICENSE +19 -6
- package/README.md +1 -0
- package/dist/components/cv-accordion-item.d.ts +1 -1
- package/dist/components/cv-accordion.d.ts +1 -1
- package/dist/components/cv-accordion.js +2 -1
- package/dist/components/cv-alert-dialog.d.ts +1 -1
- package/dist/components/cv-alert-dialog.js +17 -2
- package/dist/components/cv-alert.d.ts +1 -1
- package/dist/components/cv-alert.js +2 -1
- package/dist/components/cv-badge.d.ts +1 -1
- package/dist/components/cv-badge.js +2 -1
- package/dist/components/cv-bottom-sheet.d.ts +127 -0
- package/dist/components/cv-bottom-sheet.js +513 -0
- package/dist/components/cv-breadcrumb-item.d.ts +1 -1
- package/dist/components/cv-breadcrumb-item.js +1 -1
- package/dist/components/cv-breadcrumb.d.ts +1 -1
- package/dist/components/cv-breadcrumb.js +2 -1
- package/dist/components/cv-button.d.ts +23 -1
- package/dist/components/cv-button.js +194 -37
- package/dist/components/cv-callout.d.ts +8 -1
- package/dist/components/cv-callout.js +18 -1
- package/dist/components/cv-card.d.ts +1 -1
- package/dist/components/cv-card.js +2 -2
- package/dist/components/cv-carousel-slide.d.ts +1 -1
- package/dist/components/cv-carousel.d.ts +1 -1
- package/dist/components/cv-carousel.js +2 -1
- package/dist/components/cv-checkbox.d.ts +1 -1
- package/dist/components/cv-combobox-group.d.ts +1 -1
- package/dist/components/cv-combobox-option.d.ts +1 -1
- package/dist/components/cv-combobox-option.js +2 -2
- package/dist/components/cv-combobox.d.ts +3 -1
- package/dist/components/cv-combobox.js +49 -8
- package/dist/components/cv-command-item.d.ts +1 -1
- package/dist/components/cv-command-item.js +2 -2
- package/dist/components/cv-command-palette.d.ts +1 -1
- package/dist/components/cv-command-palette.js +21 -1
- package/dist/components/cv-context-menu.d.ts +1 -1
- package/dist/components/cv-context-menu.js +2 -1
- package/dist/components/cv-copy-button.d.ts +37 -9
- package/dist/components/cv-copy-button.js +129 -41
- package/dist/components/cv-date-picker.d.ts +1 -1
- package/dist/components/cv-date-picker.js +20 -1
- package/dist/components/cv-dialog.d.ts +44 -2
- package/dist/components/cv-dialog.js +686 -74
- package/dist/components/cv-disclosure.d.ts +1 -1
- package/dist/components/cv-disclosure.js +2 -1
- package/dist/components/cv-drawer.d.ts +29 -1
- package/dist/components/cv-drawer.js +229 -4
- package/dist/components/cv-feed-article.d.ts +1 -1
- package/dist/components/cv-feed-article.js +2 -1
- package/dist/components/cv-feed.d.ts +1 -1
- package/dist/components/cv-feed.js +2 -1
- package/dist/components/cv-grid-cell.d.ts +1 -1
- package/dist/components/cv-grid-cell.js +3 -3
- package/dist/components/cv-grid-column.d.ts +1 -1
- package/dist/components/cv-grid-column.js +1 -1
- package/dist/components/cv-grid-row.d.ts +1 -1
- package/dist/components/cv-grid.d.ts +1 -1
- package/dist/components/cv-grid.js +2 -1
- package/dist/components/cv-guidance-anchor.d.ts +47 -0
- package/dist/components/cv-guidance-anchor.js +113 -0
- package/dist/components/cv-guidance-panel.d.ts +29 -0
- package/dist/components/cv-guidance-panel.js +245 -0
- package/dist/components/cv-icon.d.ts +2 -1
- package/dist/components/cv-icon.js +28 -3
- package/dist/components/cv-input.d.ts +7 -1
- package/dist/components/cv-input.js +33 -1
- package/dist/components/cv-landmark.d.ts +1 -1
- package/dist/components/cv-landmark.js +2 -1
- package/dist/components/cv-link.d.ts +1 -1
- package/dist/components/cv-link.js +2 -1
- package/dist/components/cv-listbox-group.d.ts +1 -1
- package/dist/components/cv-listbox.d.ts +1 -1
- package/dist/components/cv-listbox.js +2 -1
- package/dist/components/cv-menu-button.d.ts +24 -1
- package/dist/components/cv-menu-button.js +226 -18
- package/dist/components/cv-menu-group.d.ts +1 -1
- package/dist/components/cv-menu-item.d.ts +1 -1
- package/dist/components/cv-menu-item.js +6 -2
- package/dist/components/cv-menu.d.ts +1 -1
- package/dist/components/cv-menu.js +21 -1
- package/dist/components/cv-meter.d.ts +1 -1
- package/dist/components/cv-meter.js +6 -22
- package/dist/components/cv-number.d.ts +1 -1
- package/dist/components/cv-option.d.ts +1 -1
- package/dist/components/cv-option.js +3 -9
- package/dist/components/cv-popover-positioning.d.ts +22 -0
- package/dist/components/cv-popover-positioning.js +112 -0
- package/dist/components/cv-popover.d.ts +45 -8
- package/dist/components/cv-popover.js +395 -113
- package/dist/components/cv-progress-ring.d.ts +1 -1
- package/dist/components/cv-progress-ring.js +2 -1
- package/dist/components/cv-progress.d.ts +8 -1
- package/dist/components/cv-progress.js +41 -10
- package/dist/components/cv-radio-group.d.ts +1 -1
- package/dist/components/cv-radio.d.ts +1 -1
- package/dist/components/cv-radio.js +1 -1
- package/dist/components/cv-select-group.d.ts +1 -1
- package/dist/components/cv-select-option.d.ts +1 -1
- package/dist/components/cv-select-option.js +2 -2
- package/dist/components/cv-select.d.ts +1 -1
- package/dist/components/cv-select.js +28 -1
- package/dist/components/cv-sidebar-item.d.ts +1 -1
- package/dist/components/cv-sidebar.d.ts +1 -1
- package/dist/components/cv-sidebar.js +3 -2
- package/dist/components/cv-slider-multi-thumb.d.ts +1 -1
- package/dist/components/cv-slider-multi-thumb.js +2 -1
- package/dist/components/cv-slider.d.ts +17 -4
- package/dist/components/cv-slider.js +63 -21
- package/dist/components/cv-spinbutton.d.ts +1 -1
- package/dist/components/cv-spinner.d.ts +1 -1
- package/dist/components/cv-spinner.js +2 -1
- package/dist/components/cv-switch.d.ts +1 -1
- package/dist/components/cv-tab-panel.d.ts +1 -1
- package/dist/components/cv-tab.d.ts +1 -1
- package/dist/components/cv-table-cell.d.ts +1 -1
- package/dist/components/cv-table-cell.js +1 -1
- package/dist/components/cv-table-column.d.ts +1 -1
- package/dist/components/cv-table-column.js +1 -1
- package/dist/components/cv-table-row.d.ts +1 -1
- package/dist/components/cv-table-row.js +1 -4
- package/dist/components/cv-table.d.ts +1 -3
- package/dist/components/cv-table.js +4 -11
- package/dist/components/cv-tabs.d.ts +1 -1
- package/dist/components/cv-tabs.js +3 -2
- package/dist/components/cv-textarea.d.ts +11 -1
- package/dist/components/cv-textarea.js +33 -0
- package/dist/components/cv-toast-region.d.ts +1 -1
- package/dist/components/cv-toast-region.js +2 -1
- package/dist/components/cv-toast.d.ts +1 -1
- package/dist/components/cv-toast.js +20 -27
- package/dist/components/cv-toolbar-item.d.ts +1 -1
- package/dist/components/cv-toolbar-separator.d.ts +1 -1
- package/dist/components/cv-toolbar.d.ts +1 -1
- package/dist/components/cv-toolbar.js +2 -1
- package/dist/components/cv-tooltip.d.ts +1 -1
- package/dist/components/cv-tooltip.js +2 -1
- package/dist/components/cv-treegrid-cell.d.ts +1 -1
- package/dist/components/cv-treegrid-cell.js +1 -1
- package/dist/components/cv-treegrid-column.d.ts +1 -1
- package/dist/components/cv-treegrid-column.js +1 -1
- package/dist/components/cv-treegrid-row.d.ts +1 -1
- package/dist/components/cv-treegrid-row.js +1 -1
- package/dist/components/cv-treegrid.d.ts +1 -1
- package/dist/components/cv-treegrid.js +4 -3
- package/dist/components/cv-treeitem.d.ts +1 -1
- package/dist/components/cv-treeitem.js +2 -2
- package/dist/components/cv-treeview.d.ts +1 -1
- package/dist/components/cv-treeview.js +2 -1
- package/dist/components/cv-window-splitter.d.ts +1 -1
- package/dist/components/cv-window-splitter.js +2 -1
- package/dist/components/index.d.ts +7 -0
- package/dist/components/index.js +3 -0
- package/dist/dialog/create-dialog-controller.d.ts +12 -4
- package/dist/dialog/create-dialog-controller.js +84 -22
- package/dist/dialog/index.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/reatom-lit/ReatomLitElement.d.ts +6 -3
- package/dist/reatom-lit/ReatomLitElement.js +18 -8
- package/dist/reatom-lit/createAfterRenderScheduler.d.ts +10 -0
- package/dist/reatom-lit/createAfterRenderScheduler.js +33 -0
- package/dist/reatom-lit/index.d.ts +2 -0
- package/dist/reatom-lit/index.js +1 -0
- package/dist/reatom-lit/watch.d.ts +1 -1
- package/dist/reatom-lit/withReatomElement.js +16 -2
- package/dist/register.js +4 -1
- package/dist/styles/component-styles.js +4 -0
- package/dist/styles/uno-generated.d.ts +2 -0
- package/dist/styles/uno-generated.js +1 -0
- package/dist/styles/uno-utilities.d.ts +5 -0
- package/dist/styles/uno-utilities.js +7 -0
- package/dist/theme/cv-theme-provider.d.ts +1 -1
- package/dist/theme/cv-theme-provider.js +2 -2
- package/dist/theme/tokens.css +619 -162
- package/package.json +9 -5
- package/specs/components/bottom-sheet.md +93 -0
- package/specs/components/button.md +8 -0
- package/specs/components/callout.md +8 -0
- package/specs/components/copy-button.md +54 -17
- package/specs/components/dialog.md +72 -43
- package/specs/components/drawer.md +18 -13
- package/specs/components/guidance-anchor.md +64 -0
- package/specs/components/guidance-panel.md +92 -0
- package/specs/components/input.md +7 -0
- package/specs/components/menu.md +8 -0
- package/specs/components/option.md +9 -9
- package/specs/components/progress.md +11 -0
- package/specs/components/sidebar.md +12 -12
- package/specs/components/table.md +13 -13
- package/specs/components/theme.md +13 -13
- package/specs/components/treegrid.md +15 -15
- 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
|
|
4
|
-
|
|
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
|
-
|
|
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 {};
|