@acusti/dropdown 0.44.0 → 0.44.1
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/README.md +1 -1
- package/dist/Dropdown.d.ts +25 -3
- package/dist/Dropdown.js +466 -333
- package/dist/Dropdown.js.flow +59 -59
- package/dist/Dropdown.test.js +80 -47
- package/dist/helpers.d.ts +47 -32
- package/dist/helpers.js +35 -36
- package/dist/helpers.js.flow +37 -37
- package/dist/styles.d.ts +14 -13
- package/dist/styles.js +1 -1
- package/dist/styles.js.flow +12 -12
- package/package.json +5 -5
- package/src/Dropdown.tsx +8 -8
- package/src/helpers.ts +1 -1
package/dist/styles.js
CHANGED
package/dist/styles.js.flow
CHANGED
|
@@ -5,16 +5,16 @@
|
|
|
5
5
|
* @flow
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare export var ROOT_CLASS_NAME:
|
|
9
|
-
declare export var ROOT_SELECTOR:
|
|
10
|
-
declare export var BODY_CLASS_NAME:
|
|
11
|
-
declare export var LABEL_CLASS_NAME:
|
|
12
|
-
declare export var LABEL_TEXT_CLASS_NAME:
|
|
13
|
-
declare export var TRIGGER_CLASS_NAME:
|
|
14
|
-
declare export var BODY_SELECTOR:
|
|
15
|
-
declare export var LABEL_SELECTOR:
|
|
16
|
-
declare export var LABEL_TEXT_SELECTOR:
|
|
17
|
-
declare export var TRIGGER_SELECTOR:
|
|
18
|
-
declare export var BODY_MAX_HEIGHT_VAR:
|
|
19
|
-
declare export var BODY_MAX_WIDTH_VAR:
|
|
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
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acusti/dropdown",
|
|
3
|
-
"version": "0.44.
|
|
3
|
+
"version": "0.44.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": "./dist/Dropdown.js",
|
|
@@ -49,15 +49,15 @@
|
|
|
49
49
|
"happy-dom": "^15.11.7",
|
|
50
50
|
"react": "^19",
|
|
51
51
|
"react-dom": "^19",
|
|
52
|
-
"typescript": "5.
|
|
52
|
+
"typescript": "5.7.3",
|
|
53
53
|
"vitest": "^2.1.8"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@acusti/input-text": "^1.9.
|
|
56
|
+
"@acusti/input-text": "^1.9.1",
|
|
57
57
|
"@acusti/matchmaking": "^0.8.0",
|
|
58
|
-
"@acusti/styling": "^1",
|
|
58
|
+
"@acusti/styling": "^1.0.1",
|
|
59
59
|
"@acusti/use-is-out-of-bounds": "^0.13.0",
|
|
60
|
-
"@acusti/use-keyboard-events": "^0.9.
|
|
60
|
+
"@acusti/use-keyboard-events": "^0.9.1",
|
|
61
61
|
"clsx": "^2"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
package/src/Dropdown.tsx
CHANGED
|
@@ -26,8 +26,6 @@ import {
|
|
|
26
26
|
TRIGGER_CLASS_NAME,
|
|
27
27
|
} from './styles.js';
|
|
28
28
|
|
|
29
|
-
type ChildrenTuple = [React.ReactNode, React.ReactNode];
|
|
30
|
-
|
|
31
29
|
export type Item = {
|
|
32
30
|
element: HTMLElement | null;
|
|
33
31
|
event: Event | React.SyntheticEvent<HTMLElement>;
|
|
@@ -49,7 +47,7 @@ export type Props = {
|
|
|
49
47
|
/**
|
|
50
48
|
* Can take a single React element or exactly two renderable children.
|
|
51
49
|
*/
|
|
52
|
-
children: React.JSX.Element
|
|
50
|
+
children: ChildrenTuple | React.JSX.Element;
|
|
53
51
|
className?: string;
|
|
54
52
|
disabled?: boolean;
|
|
55
53
|
/**
|
|
@@ -91,10 +89,12 @@ export type Props = {
|
|
|
91
89
|
value?: string;
|
|
92
90
|
};
|
|
93
91
|
|
|
94
|
-
type
|
|
92
|
+
type ChildrenTuple = [React.ReactNode, React.ReactNode];
|
|
95
93
|
|
|
96
94
|
type MousePosition = { clientX: number; clientY: number };
|
|
97
95
|
|
|
96
|
+
type TimeoutID = ReturnType<typeof setTimeout>;
|
|
97
|
+
|
|
98
98
|
const { Children, Fragment, useCallback, useEffect, useMemo, useRef, useState } = React;
|
|
99
99
|
|
|
100
100
|
const noop = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function
|
|
@@ -148,10 +148,10 @@ export default function Dropdown({
|
|
|
148
148
|
|
|
149
149
|
const dropdownElementRef = useRef<HTMLDivElement | null>(null);
|
|
150
150
|
const inputElementRef = useRef<HTMLInputElement | null>(null);
|
|
151
|
-
const closingTimerRef = useRef<
|
|
152
|
-
const isOpeningTimerRef = useRef<
|
|
153
|
-
const currentInputMethodRef = useRef<'
|
|
154
|
-
const clearEnteredCharactersTimerRef = useRef<
|
|
151
|
+
const closingTimerRef = useRef<null | TimeoutID>(null);
|
|
152
|
+
const isOpeningTimerRef = useRef<null | TimeoutID>(null);
|
|
153
|
+
const currentInputMethodRef = useRef<'keyboard' | 'mouse'>('mouse');
|
|
154
|
+
const clearEnteredCharactersTimerRef = useRef<null | TimeoutID>(null);
|
|
155
155
|
const enteredCharactersRef = useRef<string>('');
|
|
156
156
|
const mouseDownPositionRef = useRef<MousePosition | null>(null);
|
|
157
157
|
const outOfBounds = useIsOutOfBounds(dropdownBodyElement);
|
package/src/helpers.ts
CHANGED
|
@@ -10,7 +10,7 @@ export const getItemElements = (dropdownElement: HTMLElement | null) => {
|
|
|
10
10
|
const bodyElement = dropdownElement.querySelector(BODY_SELECTOR);
|
|
11
11
|
if (!bodyElement) return null;
|
|
12
12
|
|
|
13
|
-
let items: NodeListOf<Element>
|
|
13
|
+
let items: HTMLCollection | NodeListOf<Element> =
|
|
14
14
|
bodyElement.querySelectorAll(ITEM_SELECTOR);
|
|
15
15
|
|
|
16
16
|
if (items.length) return items;
|