tyrell-react 1.0.0-TC23 → 1.0.0-TC25
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/components/TyCalendar.d.ts +2 -0
- package/dist/components/TyCalendar.d.ts.map +1 -1
- package/dist/components/TyCalendar.js +10 -2
- package/dist/components/TyCalendar.js.map +1 -1
- package/dist/components/TyCopy.d.ts +4 -0
- package/dist/components/TyCopy.d.ts.map +1 -1
- package/dist/components/TyCopy.js +19 -1
- package/dist/components/TyCopy.js.map +1 -1
- package/dist/components/TyDropdown.d.ts +2 -0
- package/dist/components/TyDropdown.d.ts.map +1 -1
- package/dist/components/TyDropdown.js +14 -2
- package/dist/components/TyDropdown.js.map +1 -1
- package/dist/components/TyMultiselect.d.ts +2 -0
- package/dist/components/TyMultiselect.d.ts.map +1 -1
- package/dist/components/TyMultiselect.js +14 -2
- package/dist/components/TyMultiselect.js.map +1 -1
- package/dist/components/TyScrollContainer.d.ts +26 -1
- package/dist/components/TyScrollContainer.d.ts.map +1 -1
- package/dist/components/TyScrollContainer.js +41 -24
- package/dist/components/TyScrollContainer.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/components/TyCalendar.tsx +14 -1
- package/src/components/TyCopy.tsx +25 -1
- package/src/components/TyDropdown.tsx +14 -2
- package/src/components/TyMultiselect.tsx +12 -1
- package/src/components/TyScrollContainer.tsx +74 -24
- package/src/version.ts +1 -1
|
@@ -58,6 +58,8 @@ export interface TyCalendarProps extends Omit<React.HTMLAttributes<HTMLElement>,
|
|
|
58
58
|
onChange?: (event: CustomEvent<TyCalendarChangeEventDetail>) => void;
|
|
59
59
|
/** Callback when navigation changes month/year */
|
|
60
60
|
onNavigate?: (event: CustomEvent<TyCalendarNavigateEventDetail>) => void;
|
|
61
|
+
/** Callback when a day cell is clicked (fires alongside change) */
|
|
62
|
+
onDayClick?: (event: CustomEvent) => void;
|
|
61
63
|
}
|
|
62
64
|
export declare const TyCalendar: React.ForwardRefExoticComponent<TyCalendarProps & React.RefAttributes<HTMLElement>>;
|
|
63
65
|
//# sourceMappingURL=TyCalendar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TyCalendar.d.ts","sourceRoot":"","sources":["../../src/components/TyCalendar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAK9D,MAAM,WAAW,2BAA2B;IAC1C,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,MAAM,EAAE,QAAQ,CAAC;IACjB,wCAAwC;IACxC,MAAM,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,UAAU,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,MAAM,EAAE,UAAU,CAAC;IACnB,yCAAyC;IACzC,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAC1F,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEtB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,oBAAoB;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAE1B,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,WAAW,GAAG,MAAM,CAAC;IAEzD,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC;IAE7C,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,2BAA2B,CAAC,KAAK,IAAI,CAAC;IAErE,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,6BAA6B,CAAC,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"TyCalendar.d.ts","sourceRoot":"","sources":["../../src/components/TyCalendar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAK9D,MAAM,WAAW,2BAA2B;IAC1C,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,MAAM,EAAE,QAAQ,CAAC;IACjB,wCAAwC;IACxC,MAAM,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,UAAU,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,MAAM,EAAE,UAAU,CAAC;IACnB,yCAAyC;IACzC,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAC1F,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEtB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,oBAAoB;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAE1B,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,WAAW,GAAG,MAAM,CAAC;IAEzD,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC;IAE7C,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,2BAA2B,CAAC,KAAK,IAAI,CAAC;IAErE,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,6BAA6B,CAAC,KAAK,IAAI,CAAC;IAEzE,mEAAmE;IACnE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAGD,eAAO,MAAM,UAAU,qFAyKtB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import React, { useEffect, useRef, useCallback } from 'react';
|
|
|
2
2
|
import { needsPropertyBridge } from '../utils/react-version';
|
|
3
3
|
import { useBooleanProperty } from '../utils/use-boolean-prop';
|
|
4
4
|
// React wrapper for ty-calendar web component
|
|
5
|
-
export const TyCalendar = React.forwardRef(({ year, month, day, showNavigation, stateless, size, locale, width, minWidth, maxWidth, name, value, dayContentFn, dayClassesFn, customCSS, onChange, onNavigate, ...props }, ref) => {
|
|
5
|
+
export const TyCalendar = React.forwardRef(({ year, month, day, showNavigation, stateless, size, locale, width, minWidth, maxWidth, name, value, dayContentFn, dayClassesFn, customCSS, onChange, onNavigate, onDayClick, ...props }, ref) => {
|
|
6
6
|
const elementRef = useRef(null);
|
|
7
7
|
// Handle ref forwarding
|
|
8
8
|
useEffect(() => {
|
|
@@ -29,6 +29,10 @@ export const TyCalendar = React.forwardRef(({ year, month, day, showNavigation,
|
|
|
29
29
|
onNavigate(customEvent);
|
|
30
30
|
}
|
|
31
31
|
}, [onNavigate]);
|
|
32
|
+
const handleDayClick = useCallback((event) => {
|
|
33
|
+
if (onDayClick)
|
|
34
|
+
onDayClick(event);
|
|
35
|
+
}, [onDayClick]);
|
|
32
36
|
// Set up event listeners
|
|
33
37
|
useEffect(() => {
|
|
34
38
|
const element = elementRef.current;
|
|
@@ -43,12 +47,16 @@ export const TyCalendar = React.forwardRef(({ year, month, day, showNavigation,
|
|
|
43
47
|
element.addEventListener('navigate', handleNavigate);
|
|
44
48
|
listeners.push(['navigate', handleNavigate]);
|
|
45
49
|
}
|
|
50
|
+
if (onDayClick) {
|
|
51
|
+
element.addEventListener('day-click', handleDayClick);
|
|
52
|
+
listeners.push(['day-click', handleDayClick]);
|
|
53
|
+
}
|
|
46
54
|
return () => {
|
|
47
55
|
listeners.forEach(([eventName, handler]) => {
|
|
48
56
|
element.removeEventListener(eventName, handler);
|
|
49
57
|
});
|
|
50
58
|
};
|
|
51
|
-
}, [handleChange, handleNavigate, onChange, onNavigate]);
|
|
59
|
+
}, [handleChange, handleNavigate, handleDayClick, onChange, onNavigate, onDayClick]);
|
|
52
60
|
// Set function/object properties directly on the element. Required on
|
|
53
61
|
// React 18, which can't bridge non-string props onto custom elements.
|
|
54
62
|
// React 19+ handles function/object prop-to-property bridging natively.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TyCalendar.js","sourceRoot":"","sources":["../../src/components/TyCalendar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"TyCalendar.js","sourceRoot":"","sources":["../../src/components/TyCalendar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,10 @@ export interface TyCopyProps extends Omit<React.HTMLAttributes<HTMLElement>, 'on
|
|
|
16
16
|
disabled?: boolean;
|
|
17
17
|
/** Required field */
|
|
18
18
|
required?: boolean;
|
|
19
|
+
/** Fired after the value is copied to the clipboard */
|
|
20
|
+
onCopySuccess?: (event: CustomEvent) => void;
|
|
21
|
+
/** Fired when copying to the clipboard fails */
|
|
22
|
+
onCopyError?: (event: CustomEvent) => void;
|
|
19
23
|
}
|
|
20
24
|
export declare const TyCopy: React.ForwardRefExoticComponent<TyCopyProps & React.RefAttributes<HTMLElement>>;
|
|
21
25
|
//# sourceMappingURL=TyCopy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TyCopy.d.ts","sourceRoot":"","sources":["../../src/components/TyCopy.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IACtF,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qBAAqB;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAExC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAEhF,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB,yBAAyB;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TyCopy.d.ts","sourceRoot":"","sources":["../../src/components/TyCopy.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IACtF,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qBAAqB;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAExC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAEhF,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB,yBAAyB;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,uDAAuD;IACvD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAE7C,gDAAgD;IAChD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5C;AAGD,eAAO,MAAM,MAAM,iFAmElB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useEffect, useRef } from 'react';
|
|
2
2
|
import { useBooleanProperty } from '../utils/use-boolean-prop';
|
|
3
3
|
// React wrapper for ty-copy web component
|
|
4
|
-
export const TyCopy = React.forwardRef(({ value, label, size, flavor, format, multiline, disabled, required, ...props }, ref) => {
|
|
4
|
+
export const TyCopy = React.forwardRef(({ value, label, size, flavor, format, multiline, disabled, required, onCopySuccess, onCopyError, ...props }, ref) => {
|
|
5
5
|
const elementRef = useRef(null);
|
|
6
6
|
// Handle ref forwarding
|
|
7
7
|
useEffect(() => {
|
|
@@ -14,6 +14,24 @@ export const TyCopy = React.forwardRef(({ value, label, size, flavor, format, mu
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
}, [ref]);
|
|
17
|
+
// Custom events → React callbacks
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const el = elementRef.current;
|
|
20
|
+
if (!el)
|
|
21
|
+
return;
|
|
22
|
+
const bound = [];
|
|
23
|
+
if (onCopySuccess) {
|
|
24
|
+
const h = (e) => onCopySuccess(e);
|
|
25
|
+
el.addEventListener('copy-success', h);
|
|
26
|
+
bound.push(['copy-success', h]);
|
|
27
|
+
}
|
|
28
|
+
if (onCopyError) {
|
|
29
|
+
const h = (e) => onCopyError(e);
|
|
30
|
+
el.addEventListener('copy-error', h);
|
|
31
|
+
bound.push(['copy-error', h]);
|
|
32
|
+
}
|
|
33
|
+
return () => bound.forEach(([n, h]) => el.removeEventListener(n, h));
|
|
34
|
+
}, [onCopySuccess, onCopyError]);
|
|
17
35
|
const isMultiline = useBooleanProperty(elementRef, 'multiline', multiline);
|
|
18
36
|
const isDisabled = useBooleanProperty(elementRef, 'disabled', disabled);
|
|
19
37
|
const isRequired = useBooleanProperty(elementRef, 'required', required);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TyCopy.js","sourceRoot":"","sources":["../../src/components/TyCopy.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"TyCopy.js","sourceRoot":"","sources":["../../src/components/TyCopy.tsx"],"names":[],"mappings":"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"}
|
|
@@ -56,6 +56,8 @@ export interface TyDropdownProps extends Omit<React.HTMLAttributes<HTMLElement>,
|
|
|
56
56
|
query: string;
|
|
57
57
|
element: HTMLElement;
|
|
58
58
|
}>) => void;
|
|
59
|
+
onOpen?: (event: CustomEvent) => void;
|
|
60
|
+
onClose?: (event: CustomEvent) => void;
|
|
59
61
|
children?: React.ReactNode;
|
|
60
62
|
}
|
|
61
63
|
export declare const TyDropdown: React.ForwardRefExoticComponent<TyDropdownProps & React.RefAttributes<HTMLElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TyDropdown.d.ts","sourceRoot":"","sources":["../../src/components/TyDropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAK9D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,CAAC;CACrB;AAGD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IACpG,KAAK,CAAC,EAAE,OAAO,WAAW,EAAE,oBAAoB,CAAC;IACjD,+BAA+B;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAEhF,oBAAoB;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAExC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,gDAAgD;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,qHAAqH;IACrH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAGvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"TyDropdown.d.ts","sourceRoot":"","sources":["../../src/components/TyDropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAK9D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,CAAC;CACrB;AAGD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IACpG,KAAK,CAAC,EAAE,OAAO,WAAW,EAAE,oBAAoB,CAAC;IACjD,+BAA+B;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAEhF,oBAAoB;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAExC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,gDAAgD;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,qHAAqH;IACrH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAGvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACjF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAGvC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAGD,eAAO,MAAM,UAAU,qFA+JtB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import React, { useEffect, useRef, useCallback } from 'react';
|
|
|
2
2
|
import { needsPropertyBridge } from '../utils/react-version';
|
|
3
3
|
import { useBooleanProperty, coerceBool } from '../utils/use-boolean-prop';
|
|
4
4
|
// React wrapper for ty-dropdown web component
|
|
5
|
-
export const TyDropdown = React.forwardRef(({ options, children, onChange, onSearch, disabled, loading, externalSearch, notSearchable, searchable, clearable, notClearable, debounce, name, value, ...props }, ref) => {
|
|
5
|
+
export const TyDropdown = React.forwardRef(({ options, children, onChange, onSearch, onOpen, onClose, disabled, loading, externalSearch, notSearchable, searchable, clearable, notClearable, debounce, name, value, ...props }, ref) => {
|
|
6
6
|
const elementRef = useRef(null);
|
|
7
7
|
const handleChange = useCallback((event) => {
|
|
8
8
|
if (onChange) {
|
|
@@ -14,6 +14,10 @@ export const TyDropdown = React.forwardRef(({ options, children, onChange, onSea
|
|
|
14
14
|
onSearch(event);
|
|
15
15
|
}
|
|
16
16
|
}, [onSearch]);
|
|
17
|
+
const handleOpen = useCallback((event) => { if (onOpen)
|
|
18
|
+
onOpen(event); }, [onOpen]);
|
|
19
|
+
const handleClose = useCallback((event) => { if (onClose)
|
|
20
|
+
onClose(event); }, [onClose]);
|
|
17
21
|
useEffect(() => {
|
|
18
22
|
const element = elementRef.current;
|
|
19
23
|
if (!element)
|
|
@@ -25,6 +29,10 @@ export const TyDropdown = React.forwardRef(({ options, children, onChange, onSea
|
|
|
25
29
|
if (onSearch) {
|
|
26
30
|
element.addEventListener('search', handleSearch);
|
|
27
31
|
}
|
|
32
|
+
if (onOpen)
|
|
33
|
+
element.addEventListener('open', handleOpen);
|
|
34
|
+
if (onClose)
|
|
35
|
+
element.addEventListener('close', handleClose);
|
|
28
36
|
return () => {
|
|
29
37
|
if (onChange) {
|
|
30
38
|
element.removeEventListener('change', handleChange);
|
|
@@ -32,8 +40,12 @@ export const TyDropdown = React.forwardRef(({ options, children, onChange, onSea
|
|
|
32
40
|
if (onSearch) {
|
|
33
41
|
element.removeEventListener('search', handleSearch);
|
|
34
42
|
}
|
|
43
|
+
if (onOpen)
|
|
44
|
+
element.removeEventListener('open', handleOpen);
|
|
45
|
+
if (onClose)
|
|
46
|
+
element.removeEventListener('close', handleClose);
|
|
35
47
|
};
|
|
36
|
-
}, [handleChange, handleSearch, onChange, onSearch]);
|
|
48
|
+
}, [handleChange, handleSearch, handleOpen, handleClose, onChange, onSearch, onOpen, onClose]);
|
|
37
49
|
// Imperatively sync `value` to the underlying element's property whenever
|
|
38
50
|
// it changes. React 18's prop-to-property bridging for custom elements is
|
|
39
51
|
// unreliable for empty strings (programmatic resets), so we set the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TyDropdown.js","sourceRoot":"","sources":["../../src/components/TyDropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"TyDropdown.js","sourceRoot":"","sources":["../../src/components/TyDropdown.tsx"],"names":[],"mappings":"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"}
|
|
@@ -50,6 +50,8 @@ export interface TyMultiselectProps extends Omit<React.HTMLAttributes<HTMLElemen
|
|
|
50
50
|
query: string;
|
|
51
51
|
element: HTMLElement;
|
|
52
52
|
}>) => void;
|
|
53
|
+
onOpen?: (event: CustomEvent) => void;
|
|
54
|
+
onClose?: (event: CustomEvent) => void;
|
|
53
55
|
/** Children should be TyTag components, not TyOption */
|
|
54
56
|
children?: React.ReactNode;
|
|
55
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TyMultiselect.d.ts","sourceRoot":"","sources":["../../src/components/TyMultiselect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAK9D,MAAM,WAAW,wBAAwB;IACvC,yCAAyC;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,yDAAyD;IACzD,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;IACzB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IACvG,KAAK,CAAC,EAAE,OAAO,WAAW,EAAE,oBAAoB,CAAC;IACjD,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE1B,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAEhF,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,wBAAwB,CAAC,KAAK,IAAI,CAAC;IAElE,oHAAoH;IACpH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"TyMultiselect.d.ts","sourceRoot":"","sources":["../../src/components/TyMultiselect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAK9D,MAAM,WAAW,wBAAwB;IACvC,yCAAyC;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,yDAAyD;IACzD,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;IACzB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IACvG,KAAK,CAAC,EAAE,OAAO,WAAW,EAAE,oBAAoB,CAAC;IACjD,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE1B,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAEhF,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,wBAAwB,CAAC,KAAK,IAAI,CAAC;IAElE,oHAAoH;IACpH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACjF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAEvC,wDAAwD;IACxD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAGD,eAAO,MAAM,aAAa,wFA6IzB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import React, { useEffect, useRef, useCallback } from 'react';
|
|
|
2
2
|
import { needsPropertyBridge } from '../utils/react-version';
|
|
3
3
|
import { useBooleanProperty } from '../utils/use-boolean-prop';
|
|
4
4
|
// React wrapper for ty-multiselect web component
|
|
5
|
-
export const TyMultiselect = React.forwardRef(({ value, placeholder, disabled, loading, readonly, flavor, label, required, externalSearch, debounce, selectedLabel, name, onChange, onSearch, children, ...props }, ref) => {
|
|
5
|
+
export const TyMultiselect = React.forwardRef(({ value, placeholder, disabled, loading, readonly, flavor, label, required, externalSearch, debounce, selectedLabel, name, onChange, onSearch, onOpen, onClose, children, ...props }, ref) => {
|
|
6
6
|
const elementRef = useRef(null);
|
|
7
7
|
// Handle ref forwarding
|
|
8
8
|
useEffect(() => {
|
|
@@ -42,6 +42,10 @@ export const TyMultiselect = React.forwardRef(({ value, placeholder, disabled, l
|
|
|
42
42
|
onSearch(customEvent);
|
|
43
43
|
}
|
|
44
44
|
}, [onSearch]);
|
|
45
|
+
const handleOpen = useCallback((event) => { if (onOpen)
|
|
46
|
+
onOpen(event); }, [onOpen]);
|
|
47
|
+
const handleClose = useCallback((event) => { if (onClose)
|
|
48
|
+
onClose(event); }, [onClose]);
|
|
45
49
|
// Set up event listeners
|
|
46
50
|
useEffect(() => {
|
|
47
51
|
const element = elementRef.current;
|
|
@@ -51,13 +55,21 @@ export const TyMultiselect = React.forwardRef(({ value, placeholder, disabled, l
|
|
|
51
55
|
element.addEventListener('change', handleChange);
|
|
52
56
|
if (onSearch)
|
|
53
57
|
element.addEventListener('search', handleSearch);
|
|
58
|
+
if (onOpen)
|
|
59
|
+
element.addEventListener('open', handleOpen);
|
|
60
|
+
if (onClose)
|
|
61
|
+
element.addEventListener('close', handleClose);
|
|
54
62
|
return () => {
|
|
55
63
|
if (onChange)
|
|
56
64
|
element.removeEventListener('change', handleChange);
|
|
57
65
|
if (onSearch)
|
|
58
66
|
element.removeEventListener('search', handleSearch);
|
|
67
|
+
if (onOpen)
|
|
68
|
+
element.removeEventListener('open', handleOpen);
|
|
69
|
+
if (onClose)
|
|
70
|
+
element.removeEventListener('close', handleClose);
|
|
59
71
|
};
|
|
60
|
-
}, [handleChange, handleSearch, onChange, onSearch]);
|
|
72
|
+
}, [handleChange, handleSearch, handleOpen, handleClose, onChange, onSearch, onOpen, onClose]);
|
|
61
73
|
// Imperative property sync for boolean props (see use-boolean-prop.ts).
|
|
62
74
|
const isDisabled = useBooleanProperty(elementRef, 'disabled', disabled);
|
|
63
75
|
const isLoading = useBooleanProperty(elementRef, 'loading', loading);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TyMultiselect.js","sourceRoot":"","sources":["../../src/components/TyMultiselect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"TyMultiselect.js","sourceRoot":"","sources":["../../src/components/TyMultiselect.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,30 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
/** Detail payload for nearstart / nearend events. */
|
|
3
|
+
export interface TyScrollNearEdgeDetail {
|
|
4
|
+
distance: number;
|
|
5
|
+
scrollTop: number;
|
|
6
|
+
scrollHeight: number;
|
|
7
|
+
clientHeight: number;
|
|
8
|
+
}
|
|
2
9
|
export interface TyScrollContainerProps extends React.HTMLAttributes<HTMLElement> {
|
|
3
10
|
/** Maximum height of the scroll container */
|
|
4
11
|
maxHeight?: string;
|
|
5
12
|
/** Enable/disable scroll shadows (default: true) */
|
|
6
13
|
shadow?: boolean;
|
|
7
|
-
/** Hide native scrollbar */
|
|
14
|
+
/** Hide native scrollbar (no custom scrollbar) */
|
|
8
15
|
hideScrollbar?: boolean;
|
|
16
|
+
/** Use the styled custom scrollbar */
|
|
17
|
+
customScrollbar?: boolean;
|
|
18
|
+
/** Enable horizontal scrolling */
|
|
19
|
+
overflowX?: boolean;
|
|
20
|
+
/** Preserve visual position when content is prepended above the viewport */
|
|
21
|
+
scrollAnchoring?: boolean;
|
|
22
|
+
/** Distance (px) from an edge at which nearstart/nearend fire (default 100) */
|
|
23
|
+
nearEdgeThreshold?: number;
|
|
24
|
+
/** Fired once when scrolled within the threshold of the bottom */
|
|
25
|
+
onNearEnd?: (event: CustomEvent<TyScrollNearEdgeDetail>) => void;
|
|
26
|
+
/** Fired once when scrolled within the threshold of the top */
|
|
27
|
+
onNearStart?: (event: CustomEvent<TyScrollNearEdgeDetail>) => void;
|
|
9
28
|
/** Content to scroll */
|
|
10
29
|
children?: React.ReactNode;
|
|
11
30
|
}
|
|
@@ -16,6 +35,12 @@ export interface TyScrollContainerRef {
|
|
|
16
35
|
scrollToTop: (smooth?: boolean) => void;
|
|
17
36
|
/** Scroll to bottom */
|
|
18
37
|
scrollToBottom: (smooth?: boolean) => void;
|
|
38
|
+
/** Scroll to far left */
|
|
39
|
+
scrollToLeft: (smooth?: boolean) => void;
|
|
40
|
+
/** Scroll to far right */
|
|
41
|
+
scrollToRight: (smooth?: boolean) => void;
|
|
42
|
+
/** Scroll a descendant (element or CSS selector) into view */
|
|
43
|
+
scrollToElement: (target: Element | string, smooth?: boolean) => void;
|
|
19
44
|
/** Get the underlying scroll element */
|
|
20
45
|
scrollElement: HTMLElement | null;
|
|
21
46
|
/** Get the native element */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TyScrollContainer.d.ts","sourceRoot":"","sources":["../../src/components/TyScrollContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TyScrollContainer.d.ts","sourceRoot":"","sources":["../../src/components/TyScrollContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAItE,qDAAqD;AACrD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,sBAAuB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IAC/E,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oDAAoD;IACpD,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,sCAAsC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,kEAAkE;IAClE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,sBAAsB,CAAC,KAAK,IAAI,CAAC;IAEjE,+DAA+D;IAC/D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,sBAAsB,CAAC,KAAK,IAAI,CAAC;IAEnE,wBAAwB;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAGD,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,oBAAoB;IACpB,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,uBAAuB;IACvB,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,yBAAyB;IACzB,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,0BAA0B;IAC1B,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,8DAA8D;IAC9D,eAAe,EAAE,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACtE,wCAAwC;IACxC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,6BAA6B;IAC7B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAGD,eAAO,MAAM,iBAAiB,qGAmF7B,CAAC"}
|
|
@@ -2,32 +2,20 @@ import React, { useEffect, useRef, useImperativeHandle } from 'react';
|
|
|
2
2
|
import { needsPropertyBridge } from '../utils/react-version';
|
|
3
3
|
import { useBooleanProperty, coerceBool } from '../utils/use-boolean-prop';
|
|
4
4
|
// React wrapper for ty-scroll-container web component
|
|
5
|
-
export const TyScrollContainer = React.forwardRef(({ children, maxHeight, shadow, hideScrollbar, ...props }, ref) => {
|
|
5
|
+
export const TyScrollContainer = React.forwardRef(({ children, maxHeight, shadow, hideScrollbar, customScrollbar, overflowX, scrollAnchoring, nearEdgeThreshold, onNearEnd, onNearStart, ...props }, ref) => {
|
|
6
6
|
const elementRef = useRef(null);
|
|
7
7
|
// Expose imperative methods via ref
|
|
8
8
|
useImperativeHandle(ref, () => ({
|
|
9
|
-
updateShadows: () => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
},
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
scrollToBottom: (smooth = true) => {
|
|
18
|
-
const el = elementRef.current;
|
|
19
|
-
el?.scrollToBottom?.(smooth);
|
|
20
|
-
},
|
|
21
|
-
get scrollElement() {
|
|
22
|
-
const el = elementRef.current;
|
|
23
|
-
return el?.scrollElement ?? null;
|
|
24
|
-
},
|
|
25
|
-
get element() {
|
|
26
|
-
return elementRef.current;
|
|
27
|
-
}
|
|
9
|
+
updateShadows: () => { elementRef.current?.updateShadows?.(); },
|
|
10
|
+
scrollToTop: (smooth = true) => { elementRef.current?.scrollToTop?.(smooth); },
|
|
11
|
+
scrollToBottom: (smooth = true) => { elementRef.current?.scrollToBottom?.(smooth); },
|
|
12
|
+
scrollToLeft: (smooth = true) => { elementRef.current?.scrollToLeft?.(smooth); },
|
|
13
|
+
scrollToRight: (smooth = true) => { elementRef.current?.scrollToRight?.(smooth); },
|
|
14
|
+
scrollToElement: (target, smooth = true) => { elementRef.current?.scrollToElement?.(target, smooth); },
|
|
15
|
+
get scrollElement() { return elementRef.current?.scrollElement ?? null; },
|
|
16
|
+
get element() { return elementRef.current; }
|
|
28
17
|
}), []);
|
|
29
|
-
// shadow defaults to true;
|
|
30
|
-
// attribute level. Bridge it imperatively so flipping back to true
|
|
18
|
+
// shadow defaults to true; bridge it imperatively so flipping back to true
|
|
31
19
|
// propagates on React 18.
|
|
32
20
|
useEffect(() => {
|
|
33
21
|
if (!needsPropertyBridge)
|
|
@@ -42,19 +30,48 @@ export const TyScrollContainer = React.forwardRef(({ children, maxHeight, shadow
|
|
|
42
30
|
el.shadow = next;
|
|
43
31
|
}, [shadow]);
|
|
44
32
|
const isHideScrollbar = useBooleanProperty(elementRef, 'hideScrollbar', hideScrollbar);
|
|
33
|
+
const isCustomScrollbar = useBooleanProperty(elementRef, 'customScrollbar', customScrollbar);
|
|
34
|
+
const isOverflowX = useBooleanProperty(elementRef, 'overflowX', overflowX);
|
|
35
|
+
const isScrollAnchoring = useBooleanProperty(elementRef, 'scrollAnchoring', scrollAnchoring);
|
|
36
|
+
// Custom events → React callbacks
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const el = elementRef.current;
|
|
39
|
+
if (!el)
|
|
40
|
+
return;
|
|
41
|
+
const bound = [];
|
|
42
|
+
if (onNearEnd) {
|
|
43
|
+
const h = (e) => onNearEnd(e);
|
|
44
|
+
el.addEventListener('nearend', h);
|
|
45
|
+
bound.push(['nearend', h]);
|
|
46
|
+
}
|
|
47
|
+
if (onNearStart) {
|
|
48
|
+
const h = (e) => onNearStart(e);
|
|
49
|
+
el.addEventListener('nearstart', h);
|
|
50
|
+
bound.push(['nearstart', h]);
|
|
51
|
+
}
|
|
52
|
+
return () => bound.forEach(([n, h]) => el.removeEventListener(n, h));
|
|
53
|
+
}, [onNearEnd, onNearStart]);
|
|
45
54
|
// Convert React props to web component attributes
|
|
46
55
|
const webComponentProps = {
|
|
47
56
|
...props,
|
|
48
57
|
ref: elementRef,
|
|
49
58
|
};
|
|
50
|
-
//
|
|
59
|
+
// String attributes
|
|
51
60
|
if (maxHeight)
|
|
52
61
|
webComponentProps['max-height'] = maxHeight;
|
|
53
|
-
|
|
62
|
+
if (nearEdgeThreshold != null)
|
|
63
|
+
webComponentProps['near-edge-threshold'] = String(nearEdgeThreshold);
|
|
64
|
+
// Boolean attributes
|
|
54
65
|
if (shadow !== undefined && !coerceBool(shadow))
|
|
55
66
|
webComponentProps.shadow = 'false';
|
|
56
67
|
if (isHideScrollbar)
|
|
57
68
|
webComponentProps['hide-scrollbar'] = '';
|
|
69
|
+
if (isCustomScrollbar)
|
|
70
|
+
webComponentProps['custom-scrollbar'] = '';
|
|
71
|
+
if (isOverflowX)
|
|
72
|
+
webComponentProps['overflow-x'] = '';
|
|
73
|
+
if (isScrollAnchoring)
|
|
74
|
+
webComponentProps['scroll-anchoring'] = '';
|
|
58
75
|
return React.createElement('ty-scroll-container', webComponentProps, children);
|
|
59
76
|
});
|
|
60
77
|
TyScrollContainer.displayName = 'TyScrollContainer';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TyScrollContainer.js","sourceRoot":"","sources":["../../src/components/TyScrollContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"TyScrollContainer.js","sourceRoot":"","sources":["../../src/components/TyScrollContainer.tsx"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
// Generated from package.json by scripts/generate-version.js
|
|
3
3
|
// Run 'npm run generate:version' to regenerate.
|
|
4
4
|
/** Current version of tyrell-react. Synced with package.json on build. */
|
|
5
|
-
export const VERSION = '1.0.0-
|
|
5
|
+
export const VERSION = '1.0.0-TC25';
|
|
6
6
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -80,6 +80,9 @@ export interface TyCalendarProps extends Omit<React.HTMLAttributes<HTMLElement>,
|
|
|
80
80
|
|
|
81
81
|
/** Callback when navigation changes month/year */
|
|
82
82
|
onNavigate?: (event: CustomEvent<TyCalendarNavigateEventDetail>) => void;
|
|
83
|
+
|
|
84
|
+
/** Callback when a day cell is clicked (fires alongside change) */
|
|
85
|
+
onDayClick?: (event: CustomEvent) => void;
|
|
83
86
|
}
|
|
84
87
|
|
|
85
88
|
// React wrapper for ty-calendar web component
|
|
@@ -102,6 +105,7 @@ export const TyCalendar = React.forwardRef<HTMLElement, TyCalendarProps>(
|
|
|
102
105
|
customCSS,
|
|
103
106
|
onChange,
|
|
104
107
|
onNavigate,
|
|
108
|
+
onDayClick,
|
|
105
109
|
...props
|
|
106
110
|
}, ref) => {
|
|
107
111
|
const elementRef = useRef<HTMLElement>(null);
|
|
@@ -133,6 +137,10 @@ export const TyCalendar = React.forwardRef<HTMLElement, TyCalendarProps>(
|
|
|
133
137
|
}
|
|
134
138
|
}, [onNavigate]);
|
|
135
139
|
|
|
140
|
+
const handleDayClick = useCallback((event: Event) => {
|
|
141
|
+
if (onDayClick) onDayClick(event as CustomEvent);
|
|
142
|
+
}, [onDayClick]);
|
|
143
|
+
|
|
136
144
|
// Set up event listeners
|
|
137
145
|
useEffect(() => {
|
|
138
146
|
const element = elementRef.current;
|
|
@@ -150,12 +158,17 @@ export const TyCalendar = React.forwardRef<HTMLElement, TyCalendarProps>(
|
|
|
150
158
|
listeners.push(['navigate', handleNavigate]);
|
|
151
159
|
}
|
|
152
160
|
|
|
161
|
+
if (onDayClick) {
|
|
162
|
+
element.addEventListener('day-click', handleDayClick);
|
|
163
|
+
listeners.push(['day-click', handleDayClick]);
|
|
164
|
+
}
|
|
165
|
+
|
|
153
166
|
return () => {
|
|
154
167
|
listeners.forEach(([eventName, handler]) => {
|
|
155
168
|
element.removeEventListener(eventName, handler);
|
|
156
169
|
});
|
|
157
170
|
};
|
|
158
|
-
}, [handleChange, handleNavigate, onChange, onNavigate]);
|
|
171
|
+
}, [handleChange, handleNavigate, handleDayClick, onChange, onNavigate, onDayClick]);
|
|
159
172
|
|
|
160
173
|
// Set function/object properties directly on the element. Required on
|
|
161
174
|
// React 18, which can't bridge non-string props onto custom elements.
|
|
@@ -26,6 +26,12 @@ export interface TyCopyProps extends Omit<React.HTMLAttributes<HTMLElement>, 'on
|
|
|
26
26
|
|
|
27
27
|
/** Required field */
|
|
28
28
|
required?: boolean;
|
|
29
|
+
|
|
30
|
+
/** Fired after the value is copied to the clipboard */
|
|
31
|
+
onCopySuccess?: (event: CustomEvent) => void;
|
|
32
|
+
|
|
33
|
+
/** Fired when copying to the clipboard fails */
|
|
34
|
+
onCopyError?: (event: CustomEvent) => void;
|
|
29
35
|
}
|
|
30
36
|
|
|
31
37
|
// React wrapper for ty-copy web component
|
|
@@ -39,7 +45,9 @@ export const TyCopy = React.forwardRef<HTMLElement, TyCopyProps>(
|
|
|
39
45
|
multiline,
|
|
40
46
|
disabled,
|
|
41
47
|
required,
|
|
42
|
-
|
|
48
|
+
onCopySuccess,
|
|
49
|
+
onCopyError,
|
|
50
|
+
...props
|
|
43
51
|
}, ref) => {
|
|
44
52
|
const elementRef = useRef<HTMLElement>(null);
|
|
45
53
|
|
|
@@ -54,6 +62,22 @@ export const TyCopy = React.forwardRef<HTMLElement, TyCopyProps>(
|
|
|
54
62
|
}
|
|
55
63
|
}, [ref]);
|
|
56
64
|
|
|
65
|
+
// Custom events → React callbacks
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
const el = elementRef.current;
|
|
68
|
+
if (!el) return;
|
|
69
|
+
const bound: Array<[string, EventListener]> = [];
|
|
70
|
+
if (onCopySuccess) {
|
|
71
|
+
const h = (e: Event) => onCopySuccess(e as CustomEvent);
|
|
72
|
+
el.addEventListener('copy-success', h); bound.push(['copy-success', h]);
|
|
73
|
+
}
|
|
74
|
+
if (onCopyError) {
|
|
75
|
+
const h = (e: Event) => onCopyError(e as CustomEvent);
|
|
76
|
+
el.addEventListener('copy-error', h); bound.push(['copy-error', h]);
|
|
77
|
+
}
|
|
78
|
+
return () => bound.forEach(([n, h]) => el.removeEventListener(n, h));
|
|
79
|
+
}, [onCopySuccess, onCopyError]);
|
|
80
|
+
|
|
57
81
|
const isMultiline = useBooleanProperty(elementRef, 'multiline', multiline);
|
|
58
82
|
const isDisabled = useBooleanProperty(elementRef, 'disabled', disabled);
|
|
59
83
|
const isRequired = useBooleanProperty(elementRef, 'required', required);
|
|
@@ -80,7 +80,9 @@ export interface TyDropdownProps extends Omit<React.HTMLAttributes<HTMLElement>,
|
|
|
80
80
|
// React event handlers
|
|
81
81
|
onChange?: (event: CustomEvent<TyDropdownEventDetail>) => void;
|
|
82
82
|
onSearch?: (event: CustomEvent<{ query: string; element: HTMLElement }>) => void;
|
|
83
|
-
|
|
83
|
+
onOpen?: (event: CustomEvent) => void;
|
|
84
|
+
onClose?: (event: CustomEvent) => void;
|
|
85
|
+
|
|
84
86
|
// Children for slotted approach
|
|
85
87
|
children?: React.ReactNode;
|
|
86
88
|
}
|
|
@@ -92,6 +94,8 @@ export const TyDropdown = React.forwardRef<HTMLElement, TyDropdownProps>(
|
|
|
92
94
|
children,
|
|
93
95
|
onChange,
|
|
94
96
|
onSearch,
|
|
97
|
+
onOpen,
|
|
98
|
+
onClose,
|
|
95
99
|
disabled,
|
|
96
100
|
loading,
|
|
97
101
|
externalSearch,
|
|
@@ -118,6 +122,9 @@ export const TyDropdown = React.forwardRef<HTMLElement, TyDropdownProps>(
|
|
|
118
122
|
}
|
|
119
123
|
}, [onSearch]);
|
|
120
124
|
|
|
125
|
+
const handleOpen = useCallback((event: Event) => { if (onOpen) onOpen(event as CustomEvent); }, [onOpen]);
|
|
126
|
+
const handleClose = useCallback((event: Event) => { if (onClose) onClose(event as CustomEvent); }, [onClose]);
|
|
127
|
+
|
|
121
128
|
useEffect(() => {
|
|
122
129
|
const element = elementRef.current;
|
|
123
130
|
if (!element) return;
|
|
@@ -131,6 +138,9 @@ export const TyDropdown = React.forwardRef<HTMLElement, TyDropdownProps>(
|
|
|
131
138
|
element.addEventListener('search', handleSearch as EventListener);
|
|
132
139
|
}
|
|
133
140
|
|
|
141
|
+
if (onOpen) element.addEventListener('open', handleOpen);
|
|
142
|
+
if (onClose) element.addEventListener('close', handleClose);
|
|
143
|
+
|
|
134
144
|
return () => {
|
|
135
145
|
if (onChange) {
|
|
136
146
|
element.removeEventListener('change', handleChange as EventListener);
|
|
@@ -138,8 +148,10 @@ export const TyDropdown = React.forwardRef<HTMLElement, TyDropdownProps>(
|
|
|
138
148
|
if (onSearch) {
|
|
139
149
|
element.removeEventListener('search', handleSearch as EventListener);
|
|
140
150
|
}
|
|
151
|
+
if (onOpen) element.removeEventListener('open', handleOpen);
|
|
152
|
+
if (onClose) element.removeEventListener('close', handleClose);
|
|
141
153
|
};
|
|
142
|
-
}, [handleChange, handleSearch, onChange, onSearch]);
|
|
154
|
+
}, [handleChange, handleSearch, handleOpen, handleClose, onChange, onSearch, onOpen, onClose]);
|
|
143
155
|
|
|
144
156
|
// Imperatively sync `value` to the underlying element's property whenever
|
|
145
157
|
// it changes. React 18's prop-to-property bridging for custom elements is
|
|
@@ -65,6 +65,8 @@ export interface TyMultiselectProps extends Omit<React.HTMLAttributes<HTMLElemen
|
|
|
65
65
|
|
|
66
66
|
/** Callback fired on each search input change (debounced by `debounce`). Use for external/server-side filtering. */
|
|
67
67
|
onSearch?: (event: CustomEvent<{ query: string; element: HTMLElement }>) => void;
|
|
68
|
+
onOpen?: (event: CustomEvent) => void;
|
|
69
|
+
onClose?: (event: CustomEvent) => void;
|
|
68
70
|
|
|
69
71
|
/** Children should be TyTag components, not TyOption */
|
|
70
72
|
children?: React.ReactNode;
|
|
@@ -87,6 +89,8 @@ export const TyMultiselect = React.forwardRef<HTMLElement, TyMultiselectProps>(
|
|
|
87
89
|
name,
|
|
88
90
|
onChange,
|
|
89
91
|
onSearch,
|
|
92
|
+
onOpen,
|
|
93
|
+
onClose,
|
|
90
94
|
children,
|
|
91
95
|
...props
|
|
92
96
|
}, ref) => {
|
|
@@ -131,6 +135,9 @@ export const TyMultiselect = React.forwardRef<HTMLElement, TyMultiselectProps>(
|
|
|
131
135
|
}
|
|
132
136
|
}, [onSearch]);
|
|
133
137
|
|
|
138
|
+
const handleOpen = useCallback((event: Event) => { if (onOpen) onOpen(event as CustomEvent); }, [onOpen]);
|
|
139
|
+
const handleClose = useCallback((event: Event) => { if (onClose) onClose(event as CustomEvent); }, [onClose]);
|
|
140
|
+
|
|
134
141
|
// Set up event listeners
|
|
135
142
|
useEffect(() => {
|
|
136
143
|
const element = elementRef.current;
|
|
@@ -138,12 +145,16 @@ export const TyMultiselect = React.forwardRef<HTMLElement, TyMultiselectProps>(
|
|
|
138
145
|
|
|
139
146
|
if (onChange) element.addEventListener('change', handleChange);
|
|
140
147
|
if (onSearch) element.addEventListener('search', handleSearch);
|
|
148
|
+
if (onOpen) element.addEventListener('open', handleOpen);
|
|
149
|
+
if (onClose) element.addEventListener('close', handleClose);
|
|
141
150
|
|
|
142
151
|
return () => {
|
|
143
152
|
if (onChange) element.removeEventListener('change', handleChange);
|
|
144
153
|
if (onSearch) element.removeEventListener('search', handleSearch);
|
|
154
|
+
if (onOpen) element.removeEventListener('open', handleOpen);
|
|
155
|
+
if (onClose) element.removeEventListener('close', handleClose);
|
|
145
156
|
};
|
|
146
|
-
}, [handleChange, handleSearch, onChange, onSearch]);
|
|
157
|
+
}, [handleChange, handleSearch, handleOpen, handleClose, onChange, onSearch, onOpen, onClose]);
|
|
147
158
|
|
|
148
159
|
// Imperative property sync for boolean props (see use-boolean-prop.ts).
|
|
149
160
|
const isDisabled = useBooleanProperty(elementRef, 'disabled', disabled);
|
|
@@ -2,6 +2,14 @@ import React, { useEffect, useRef, useImperativeHandle } from 'react';
|
|
|
2
2
|
import { needsPropertyBridge } from '../utils/react-version';
|
|
3
3
|
import { useBooleanProperty, coerceBool } from '../utils/use-boolean-prop';
|
|
4
4
|
|
|
5
|
+
/** Detail payload for nearstart / nearend events. */
|
|
6
|
+
export interface TyScrollNearEdgeDetail {
|
|
7
|
+
distance: number;
|
|
8
|
+
scrollTop: number;
|
|
9
|
+
scrollHeight: number;
|
|
10
|
+
clientHeight: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
5
13
|
// Type definitions for Ty ScrollContainer component
|
|
6
14
|
export interface TyScrollContainerProps extends React.HTMLAttributes<HTMLElement> {
|
|
7
15
|
/** Maximum height of the scroll container */
|
|
@@ -10,9 +18,27 @@ export interface TyScrollContainerProps extends React.HTMLAttributes<HTMLElement
|
|
|
10
18
|
/** Enable/disable scroll shadows (default: true) */
|
|
11
19
|
shadow?: boolean;
|
|
12
20
|
|
|
13
|
-
/** Hide native scrollbar */
|
|
21
|
+
/** Hide native scrollbar (no custom scrollbar) */
|
|
14
22
|
hideScrollbar?: boolean;
|
|
15
23
|
|
|
24
|
+
/** Use the styled custom scrollbar */
|
|
25
|
+
customScrollbar?: boolean;
|
|
26
|
+
|
|
27
|
+
/** Enable horizontal scrolling */
|
|
28
|
+
overflowX?: boolean;
|
|
29
|
+
|
|
30
|
+
/** Preserve visual position when content is prepended above the viewport */
|
|
31
|
+
scrollAnchoring?: boolean;
|
|
32
|
+
|
|
33
|
+
/** Distance (px) from an edge at which nearstart/nearend fire (default 100) */
|
|
34
|
+
nearEdgeThreshold?: number;
|
|
35
|
+
|
|
36
|
+
/** Fired once when scrolled within the threshold of the bottom */
|
|
37
|
+
onNearEnd?: (event: CustomEvent<TyScrollNearEdgeDetail>) => void;
|
|
38
|
+
|
|
39
|
+
/** Fired once when scrolled within the threshold of the top */
|
|
40
|
+
onNearStart?: (event: CustomEvent<TyScrollNearEdgeDetail>) => void;
|
|
41
|
+
|
|
16
42
|
/** Content to scroll */
|
|
17
43
|
children?: React.ReactNode;
|
|
18
44
|
}
|
|
@@ -25,6 +51,12 @@ export interface TyScrollContainerRef {
|
|
|
25
51
|
scrollToTop: (smooth?: boolean) => void;
|
|
26
52
|
/** Scroll to bottom */
|
|
27
53
|
scrollToBottom: (smooth?: boolean) => void;
|
|
54
|
+
/** Scroll to far left */
|
|
55
|
+
scrollToLeft: (smooth?: boolean) => void;
|
|
56
|
+
/** Scroll to far right */
|
|
57
|
+
scrollToRight: (smooth?: boolean) => void;
|
|
58
|
+
/** Scroll a descendant (element or CSS selector) into view */
|
|
59
|
+
scrollToElement: (target: Element | string, smooth?: boolean) => void;
|
|
28
60
|
/** Get the underlying scroll element */
|
|
29
61
|
scrollElement: HTMLElement | null;
|
|
30
62
|
/** Get the native element */
|
|
@@ -38,35 +70,29 @@ export const TyScrollContainer = React.forwardRef<TyScrollContainerRef, TyScroll
|
|
|
38
70
|
maxHeight,
|
|
39
71
|
shadow,
|
|
40
72
|
hideScrollbar,
|
|
73
|
+
customScrollbar,
|
|
74
|
+
overflowX,
|
|
75
|
+
scrollAnchoring,
|
|
76
|
+
nearEdgeThreshold,
|
|
77
|
+
onNearEnd,
|
|
78
|
+
onNearStart,
|
|
41
79
|
...props
|
|
42
80
|
}, ref) => {
|
|
43
81
|
const elementRef = useRef<HTMLElement>(null);
|
|
44
82
|
|
|
45
83
|
// Expose imperative methods via ref
|
|
46
84
|
useImperativeHandle(ref, () => ({
|
|
47
|
-
updateShadows: () => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
},
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
scrollToBottom: (smooth = true) => {
|
|
56
|
-
const el = elementRef.current as any;
|
|
57
|
-
el?.scrollToBottom?.(smooth);
|
|
58
|
-
},
|
|
59
|
-
get scrollElement() {
|
|
60
|
-
const el = elementRef.current as any;
|
|
61
|
-
return el?.scrollElement ?? null;
|
|
62
|
-
},
|
|
63
|
-
get element() {
|
|
64
|
-
return elementRef.current;
|
|
65
|
-
}
|
|
85
|
+
updateShadows: () => { (elementRef.current as any)?.updateShadows?.(); },
|
|
86
|
+
scrollToTop: (smooth = true) => { (elementRef.current as any)?.scrollToTop?.(smooth); },
|
|
87
|
+
scrollToBottom: (smooth = true) => { (elementRef.current as any)?.scrollToBottom?.(smooth); },
|
|
88
|
+
scrollToLeft: (smooth = true) => { (elementRef.current as any)?.scrollToLeft?.(smooth); },
|
|
89
|
+
scrollToRight: (smooth = true) => { (elementRef.current as any)?.scrollToRight?.(smooth); },
|
|
90
|
+
scrollToElement: (target, smooth = true) => { (elementRef.current as any)?.scrollToElement?.(target, smooth); },
|
|
91
|
+
get scrollElement() { return (elementRef.current as any)?.scrollElement ?? null; },
|
|
92
|
+
get element() { return elementRef.current; }
|
|
66
93
|
}), []);
|
|
67
94
|
|
|
68
|
-
// shadow defaults to true;
|
|
69
|
-
// attribute level. Bridge it imperatively so flipping back to true
|
|
95
|
+
// shadow defaults to true; bridge it imperatively so flipping back to true
|
|
70
96
|
// propagates on React 18.
|
|
71
97
|
useEffect(() => {
|
|
72
98
|
if (!needsPropertyBridge) return;
|
|
@@ -76,7 +102,27 @@ export const TyScrollContainer = React.forwardRef<TyScrollContainerRef, TyScroll
|
|
|
76
102
|
const next = coerceBool(shadow);
|
|
77
103
|
if (Boolean(el.shadow) !== next) el.shadow = next;
|
|
78
104
|
}, [shadow]);
|
|
105
|
+
|
|
79
106
|
const isHideScrollbar = useBooleanProperty(elementRef, 'hideScrollbar', hideScrollbar);
|
|
107
|
+
const isCustomScrollbar = useBooleanProperty(elementRef, 'customScrollbar', customScrollbar);
|
|
108
|
+
const isOverflowX = useBooleanProperty(elementRef, 'overflowX', overflowX);
|
|
109
|
+
const isScrollAnchoring = useBooleanProperty(elementRef, 'scrollAnchoring', scrollAnchoring);
|
|
110
|
+
|
|
111
|
+
// Custom events → React callbacks
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
const el = elementRef.current;
|
|
114
|
+
if (!el) return;
|
|
115
|
+
const bound: Array<[string, EventListener]> = [];
|
|
116
|
+
if (onNearEnd) {
|
|
117
|
+
const h = (e: Event) => onNearEnd(e as CustomEvent<TyScrollNearEdgeDetail>);
|
|
118
|
+
el.addEventListener('nearend', h); bound.push(['nearend', h]);
|
|
119
|
+
}
|
|
120
|
+
if (onNearStart) {
|
|
121
|
+
const h = (e: Event) => onNearStart(e as CustomEvent<TyScrollNearEdgeDetail>);
|
|
122
|
+
el.addEventListener('nearstart', h); bound.push(['nearstart', h]);
|
|
123
|
+
}
|
|
124
|
+
return () => bound.forEach(([n, h]) => el.removeEventListener(n, h));
|
|
125
|
+
}, [onNearEnd, onNearStart]);
|
|
80
126
|
|
|
81
127
|
// Convert React props to web component attributes
|
|
82
128
|
const webComponentProps: Record<string, any> = {
|
|
@@ -84,12 +130,16 @@ export const TyScrollContainer = React.forwardRef<TyScrollContainerRef, TyScroll
|
|
|
84
130
|
ref: elementRef,
|
|
85
131
|
};
|
|
86
132
|
|
|
87
|
-
//
|
|
133
|
+
// String attributes
|
|
88
134
|
if (maxHeight) webComponentProps['max-height'] = maxHeight;
|
|
135
|
+
if (nearEdgeThreshold != null) webComponentProps['near-edge-threshold'] = String(nearEdgeThreshold);
|
|
89
136
|
|
|
90
|
-
//
|
|
137
|
+
// Boolean attributes
|
|
91
138
|
if (shadow !== undefined && !coerceBool(shadow)) webComponentProps.shadow = 'false';
|
|
92
139
|
if (isHideScrollbar) webComponentProps['hide-scrollbar'] = '';
|
|
140
|
+
if (isCustomScrollbar) webComponentProps['custom-scrollbar'] = '';
|
|
141
|
+
if (isOverflowX) webComponentProps['overflow-x'] = '';
|
|
142
|
+
if (isScrollAnchoring) webComponentProps['scroll-anchoring'] = '';
|
|
93
143
|
|
|
94
144
|
return React.createElement(
|
|
95
145
|
'ty-scroll-container',
|
package/src/version.ts
CHANGED