@acusti/dropdown 0.46.0 → 0.47.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/dist/Dropdown.js +939 -455
- package/dist/Dropdown.js.map +1 -1
- package/package.json +18 -15
- package/dist/Dropdown.js.flow +0 -78
- package/dist/Dropdown.test.d.ts +0 -1
- package/dist/Dropdown.test.js +0 -102
- package/dist/Dropdown.test.js.flow +0 -6
- package/dist/Dropdown.test.js.map +0 -1
- package/dist/helpers.js +0 -130
- package/dist/helpers.js.flow +0 -49
- package/dist/helpers.js.map +0 -1
- package/dist/styles.js +0 -86
- package/dist/styles.js.flow +0 -20
- package/dist/styles.js.map +0 -1
- package/src/Dropdown.test.tsx +0 -128
- package/src/Dropdown.tsx +0 -733
- package/src/helpers.ts +0 -179
- package/src/styles.ts +0 -90
package/dist/helpers.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/styles.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { SYSTEM_UI_FONT } from '@acusti/styling';
|
|
2
|
-
export const ROOT_CLASS_NAME = 'uktdropdown';
|
|
3
|
-
export const ROOT_SELECTOR = `.${ROOT_CLASS_NAME}`;
|
|
4
|
-
export const BODY_CLASS_NAME = `${ROOT_CLASS_NAME}-body`;
|
|
5
|
-
export const LABEL_CLASS_NAME = `${ROOT_CLASS_NAME}-label`;
|
|
6
|
-
export const LABEL_TEXT_CLASS_NAME = `${ROOT_CLASS_NAME}-label-text`;
|
|
7
|
-
export const TRIGGER_CLASS_NAME = `${ROOT_CLASS_NAME}-trigger`;
|
|
8
|
-
export const BODY_SELECTOR = `.${BODY_CLASS_NAME}`;
|
|
9
|
-
export const LABEL_SELECTOR = `.${LABEL_CLASS_NAME}`;
|
|
10
|
-
export const LABEL_TEXT_SELECTOR = `.${LABEL_TEXT_CLASS_NAME}`;
|
|
11
|
-
export const TRIGGER_SELECTOR = `.${TRIGGER_CLASS_NAME}`;
|
|
12
|
-
export const BODY_MAX_HEIGHT_VAR = '--uktdd-body-max-height';
|
|
13
|
-
export const BODY_MAX_WIDTH_VAR = '--uktdd-body-max-width';
|
|
14
|
-
export const STYLES = `
|
|
15
|
-
:root {
|
|
16
|
-
--uktdd-font-family: ${SYSTEM_UI_FONT};
|
|
17
|
-
--uktdd-body-bg-color: #fff;
|
|
18
|
-
--uktdd-body-bg-color-hover: rgb(105,162,249);
|
|
19
|
-
--uktdd-body-color-hover: #fff;
|
|
20
|
-
--uktdd-body-buffer: 10px;
|
|
21
|
-
${BODY_MAX_HEIGHT_VAR}: calc(100vh - var(--uktdd-body-buffer));
|
|
22
|
-
${BODY_MAX_WIDTH_VAR}: calc(100vw - var(--uktdd-body-buffer));
|
|
23
|
-
--uktdd-body-pad-bottom: 9px;
|
|
24
|
-
--uktdd-body-pad-left: 12px;
|
|
25
|
-
--uktdd-body-pad-right: 12px;
|
|
26
|
-
--uktdd-body-pad-top: 9px;
|
|
27
|
-
--uktdd-label-pad-right: 10px;
|
|
28
|
-
}
|
|
29
|
-
${ROOT_SELECTOR},
|
|
30
|
-
${TRIGGER_SELECTOR} {
|
|
31
|
-
font-family: var(--uktdd-font-family);
|
|
32
|
-
}
|
|
33
|
-
${ROOT_SELECTOR} {
|
|
34
|
-
position: relative;
|
|
35
|
-
display: inline-block;
|
|
36
|
-
}
|
|
37
|
-
${ROOT_SELECTOR}.disabled {
|
|
38
|
-
pointer-events: none;
|
|
39
|
-
}
|
|
40
|
-
${ROOT_SELECTOR} > * {
|
|
41
|
-
cursor: default;
|
|
42
|
-
}
|
|
43
|
-
${LABEL_SELECTOR} {
|
|
44
|
-
display: flex;
|
|
45
|
-
}
|
|
46
|
-
${LABEL_TEXT_SELECTOR} {
|
|
47
|
-
padding-right: var(--uktdd-label-pad-right);
|
|
48
|
-
}
|
|
49
|
-
${BODY_SELECTOR} {
|
|
50
|
-
box-sizing: border-box;
|
|
51
|
-
position: absolute;
|
|
52
|
-
top: 100%;
|
|
53
|
-
max-height: var(${BODY_MAX_HEIGHT_VAR});
|
|
54
|
-
min-height: 50px;
|
|
55
|
-
max-width: var(${BODY_MAX_WIDTH_VAR});
|
|
56
|
-
min-width: 100%;
|
|
57
|
-
overflow: auto;
|
|
58
|
-
z-index: 2;
|
|
59
|
-
padding: var(--uktdd-body-pad-top) var(--uktdd-body-pad-right) var(--uktdd-body-pad-bottom) var(--uktdd-body-pad-left);
|
|
60
|
-
background-color: var(--uktdd-body-bg-color);
|
|
61
|
-
box-shadow: 0 8px 18px rgba(0,0,0,0.25);
|
|
62
|
-
}
|
|
63
|
-
${BODY_SELECTOR}.calculating-position {
|
|
64
|
-
visibility: hidden;
|
|
65
|
-
}
|
|
66
|
-
${BODY_SELECTOR}.out-of-bounds-bottom:not(.out-of-bounds-top) {
|
|
67
|
-
top: auto;
|
|
68
|
-
bottom: 100%;
|
|
69
|
-
}
|
|
70
|
-
${BODY_SELECTOR}.out-of-bounds-right:not(.out-of-bounds-left) {
|
|
71
|
-
left: auto;
|
|
72
|
-
right: 0px;
|
|
73
|
-
}
|
|
74
|
-
${LABEL_SELECTOR} + ${BODY_SELECTOR} {
|
|
75
|
-
left: auto;
|
|
76
|
-
right: 0;
|
|
77
|
-
}
|
|
78
|
-
${BODY_SELECTOR}.has-items {
|
|
79
|
-
user-select: none;
|
|
80
|
-
}
|
|
81
|
-
${BODY_SELECTOR} [data-ukt-active] {
|
|
82
|
-
background-color: var(--uktdd-body-bg-color-hover);
|
|
83
|
-
color: var(--uktdd-body-color-hover);
|
|
84
|
-
}
|
|
85
|
-
`;
|
|
86
|
-
//# sourceMappingURL=styles.js.map
|
package/dist/styles.js.flow
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Flowtype definitions for styles
|
|
3
|
-
* Generated by Flowgen from a Typescript Definition
|
|
4
|
-
* Flowgen v1.21.0
|
|
5
|
-
* @flow
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
declare export var ROOT_CLASS_NAME: "uktdropdown";
|
|
9
|
-
declare export var ROOT_SELECTOR: ".uktdropdown";
|
|
10
|
-
declare export var BODY_CLASS_NAME: "uktdropdown-body";
|
|
11
|
-
declare export var LABEL_CLASS_NAME: "uktdropdown-label";
|
|
12
|
-
declare export var LABEL_TEXT_CLASS_NAME: "uktdropdown-label-text";
|
|
13
|
-
declare export var TRIGGER_CLASS_NAME: "uktdropdown-trigger";
|
|
14
|
-
declare export var BODY_SELECTOR: ".uktdropdown-body";
|
|
15
|
-
declare export var LABEL_SELECTOR: ".uktdropdown-label";
|
|
16
|
-
declare export var LABEL_TEXT_SELECTOR: ".uktdropdown-label-text";
|
|
17
|
-
declare export var TRIGGER_SELECTOR: ".uktdropdown-trigger";
|
|
18
|
-
declare export var BODY_MAX_HEIGHT_VAR: "--uktdd-body-max-height";
|
|
19
|
-
declare export var BODY_MAX_WIDTH_VAR: "--uktdd-body-max-width";
|
|
20
|
-
declare export var STYLES: '\n:root {\n --uktdd-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;\n --uktdd-body-bg-color: #fff;\n --uktdd-body-bg-color-hover: rgb(105,162,249);\n --uktdd-body-color-hover: #fff;\n --uktdd-body-buffer: 10px;\n --uktdd-body-max-height: calc(100vh - var(--uktdd-body-buffer));\n --uktdd-body-max-width: calc(100vw - var(--uktdd-body-buffer));\n --uktdd-body-pad-bottom: 9px;\n --uktdd-body-pad-left: 12px;\n --uktdd-body-pad-right: 12px;\n --uktdd-body-pad-top: 9px;\n --uktdd-label-pad-right: 10px;\n}\n.uktdropdown,\n.uktdropdown-trigger {\n font-family: var(--uktdd-font-family);\n}\n.uktdropdown {\n position: relative;\n display: inline-block;\n}\n.uktdropdown.disabled {\n pointer-events: none;\n}\n.uktdropdown > * {\n cursor: default;\n}\n.uktdropdown-label {\n display: flex;\n}\n.uktdropdown-label-text {\n padding-right: var(--uktdd-label-pad-right);\n}\n.uktdropdown-body {\n box-sizing: border-box;\n position: absolute;\n top: 100%;\n max-height: var(--uktdd-body-max-height);\n min-height: 50px;\n max-width: var(--uktdd-body-max-width);\n min-width: 100%;\n overflow: auto;\n z-index: 2;\n padding: var(--uktdd-body-pad-top) var(--uktdd-body-pad-right) var(--uktdd-body-pad-bottom) var(--uktdd-body-pad-left);\n background-color: var(--uktdd-body-bg-color);\n box-shadow: 0 8px 18px rgba(0,0,0,0.25);\n}\n.uktdropdown-body.calculating-position {\n visibility: hidden;\n}\n.uktdropdown-body.out-of-bounds-bottom:not(.out-of-bounds-top) {\n top: auto;\n bottom: 100%;\n}\n.uktdropdown-body.out-of-bounds-right:not(.out-of-bounds-left) {\n left: auto;\n right: 0px;\n}\n.uktdropdown-label + .uktdropdown-body {\n left: auto;\n right: 0;\n}\n.uktdropdown-body.has-items {\n user-select: none;\n}\n.uktdropdown-body [data-ukt-active] {\n background-color: var(--uktdd-body-bg-color-hover);\n color: var(--uktdd-body-color-hover);\n}\n';
|
package/dist/styles.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;AAC7C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,eAAe,EAAE,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,eAAe,OAAO,CAAC;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,eAAe,QAAQ,CAAC;AAC3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,eAAe,aAAa,CAAC;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,eAAe,UAAU,CAAC;AAE/D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,eAAe,EAAE,CAAC;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,gBAAgB,EAAE,CAAC;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAE3D,MAAM,CAAC,MAAM,MAAM,GAAG;;yBAEG,cAAc;;;;;IAKnC,mBAAmB;IACnB,kBAAkB;;;;;;;EAOpB,aAAa;EACb,gBAAgB;;;EAGhB,aAAa;;;;EAIb,aAAa;;;EAGb,aAAa;;;EAGb,cAAc;;;EAGd,mBAAmB;;;EAGnB,aAAa;;;;oBAIK,mBAAmB;;mBAEpB,kBAAkB;;;;;;;;EAQnC,aAAa;;;EAGb,aAAa;;;;EAIb,aAAa;;;;EAIb,cAAc,MAAM,aAAa;;;;EAIjC,aAAa;;;EAGb,aAAa;;;;CAId,CAAC"}
|
package/src/Dropdown.test.tsx
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
// @vitest-environment happy-dom
|
|
2
|
-
import { cleanup, render, screen } from '@testing-library/react';
|
|
3
|
-
import { userEvent } from '@testing-library/user-event';
|
|
4
|
-
import React from 'react';
|
|
5
|
-
import { afterEach, describe, expect, it } from 'vitest';
|
|
6
|
-
|
|
7
|
-
import Dropdown from './Dropdown.js';
|
|
8
|
-
|
|
9
|
-
afterEach(cleanup);
|
|
10
|
-
|
|
11
|
-
describe('@acusti/dropdown', () => {
|
|
12
|
-
it('renders its contents as a dropdown menu with an empty button to trigger it when it’s rendered with a single child', async () => {
|
|
13
|
-
const user = userEvent.setup();
|
|
14
|
-
render(
|
|
15
|
-
<Dropdown>
|
|
16
|
-
<ul data-testid="dropdown-list">
|
|
17
|
-
<li>0px</li>
|
|
18
|
-
<li>4px</li>
|
|
19
|
-
<li>9px</li>
|
|
20
|
-
<li>18px</li>
|
|
21
|
-
<li>36px</li>
|
|
22
|
-
<li>54px</li>
|
|
23
|
-
<li>72px</li>
|
|
24
|
-
<li>144px</li>
|
|
25
|
-
<li>167px</li>
|
|
26
|
-
<li>198px</li>
|
|
27
|
-
</ul>
|
|
28
|
-
</Dropdown>,
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
const trigger = screen.getByRole('button');
|
|
32
|
-
expect(trigger.innerHTML).toBe('');
|
|
33
|
-
await user.click(trigger);
|
|
34
|
-
expect(screen.getByTestId('dropdown-list')).toBeTruthy();
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('renders the first child as a trigger and the second child as a dropdown when given two children', async () => {
|
|
38
|
-
const user = userEvent.setup();
|
|
39
|
-
render(
|
|
40
|
-
<Dropdown>
|
|
41
|
-
File
|
|
42
|
-
<ul data-testid="file-menu">
|
|
43
|
-
<li>New Window</li>
|
|
44
|
-
<li>New Private Window</li>
|
|
45
|
-
<li>New Tab</li>
|
|
46
|
-
<li>New Empty Tab Group</li>
|
|
47
|
-
<li>Open File…</li>
|
|
48
|
-
<li>Open Location…</li>
|
|
49
|
-
<li className="separator" />
|
|
50
|
-
<li>Close Window</li>
|
|
51
|
-
<li>Close All Window</li>
|
|
52
|
-
<li>Close Tab</li>
|
|
53
|
-
<li>Save As…</li>
|
|
54
|
-
<li className="separator" />
|
|
55
|
-
<li>Print…</li>
|
|
56
|
-
</ul>
|
|
57
|
-
</Dropdown>,
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
const trigger = screen.getByRole('button');
|
|
61
|
-
expect(trigger.innerHTML).toBe('File');
|
|
62
|
-
await user.click(trigger);
|
|
63
|
-
expect(screen.getByTestId('file-menu')).toBeTruthy();
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
it('triggers props.onClose and props.onOpen at the appropriate times', async () => {
|
|
67
|
-
let closedCount = 0;
|
|
68
|
-
const handleClose = () => closedCount++;
|
|
69
|
-
let openedCount = 0;
|
|
70
|
-
const handleOpen = () => openedCount++;
|
|
71
|
-
|
|
72
|
-
const user = userEvent.setup();
|
|
73
|
-
render(
|
|
74
|
-
<Dropdown onClose={handleClose} onOpen={handleOpen}>
|
|
75
|
-
File
|
|
76
|
-
<ul data-testid="file-menu">
|
|
77
|
-
<li>New Window</li>
|
|
78
|
-
<li>New Private Window</li>
|
|
79
|
-
<li>New Tab</li>
|
|
80
|
-
<li>New Empty Tab Group</li>
|
|
81
|
-
<li>Open File…</li>
|
|
82
|
-
<li>Open Location…</li>
|
|
83
|
-
<li className="separator" />
|
|
84
|
-
<li>Close Window</li>
|
|
85
|
-
<li>Close All Window</li>
|
|
86
|
-
<li>Close Tab</li>
|
|
87
|
-
<li>Save As…</li>
|
|
88
|
-
<li className="separator" />
|
|
89
|
-
<li>Print…</li>
|
|
90
|
-
</ul>
|
|
91
|
-
</Dropdown>,
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
const trigger = screen.getByRole('button');
|
|
95
|
-
expect(closedCount).toBe(0);
|
|
96
|
-
expect(openedCount).toBe(0);
|
|
97
|
-
await user.click(trigger);
|
|
98
|
-
expect(closedCount).toBe(0);
|
|
99
|
-
expect(openedCount).toBe(1);
|
|
100
|
-
expect(screen.getByTestId('file-menu')).toBeTruthy();
|
|
101
|
-
await user.type(trigger, '{Esc}');
|
|
102
|
-
expect(closedCount).toBe(1);
|
|
103
|
-
expect(openedCount).toBe(1);
|
|
104
|
-
expect(screen.queryByTestId('file-menu')).toBe(null);
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
it('triggers props.onOpen immediately if props.isOpenOnMount', async () => {
|
|
108
|
-
let closedCount = 0;
|
|
109
|
-
const handleClose = () => closedCount++;
|
|
110
|
-
let openedCount = 0;
|
|
111
|
-
const handleOpen = () => openedCount++;
|
|
112
|
-
|
|
113
|
-
const user = userEvent.setup();
|
|
114
|
-
render(
|
|
115
|
-
<Dropdown isOpenOnMount onClose={handleClose} onOpen={handleOpen}>
|
|
116
|
-
<p data-testid="dropdown-body">this is the dropdown contents</p>
|
|
117
|
-
</Dropdown>,
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
const trigger = screen.getByRole('button');
|
|
121
|
-
expect(screen.getByTestId('dropdown-body')).toBeTruthy();
|
|
122
|
-
expect(openedCount).toBe(1);
|
|
123
|
-
await user.click(trigger);
|
|
124
|
-
expect(closedCount).toBe(1);
|
|
125
|
-
expect(openedCount).toBe(1);
|
|
126
|
-
expect(screen.queryByTestId('dropdown-body')).toBe(null);
|
|
127
|
-
});
|
|
128
|
-
});
|