@lumx/react 4.0.1-alpha.5 → 4.0.1-alpha.7

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.
@@ -0,0 +1,7 @@
1
+ /**
2
+ * JS falsy values.
3
+ * (excluding `NaN` as it can't be distinguished from `number`)
4
+ */
5
+ type Falsy = false | undefined | null | 0 | '';
6
+
7
+ export type { Falsy as F };
@@ -1,8 +1,7 @@
1
1
  import React__default, { useContext, useEffect, createContext, useMemo, useRef } from 'react';
2
2
  import { jsx, Fragment } from 'react/jsx-runtime';
3
3
  import isEmpty from 'lodash/isEmpty';
4
- import ReactDOM, { createPortal } from 'react-dom';
5
- import '@lumx/core/js/constants';
4
+ import { createPortal } from 'react-dom';
6
5
 
7
6
  const DisabledStateContext = /*#__PURE__*/React__default.createContext({
8
7
  state: null
@@ -28,21 +27,6 @@ function useDisabledStateContext() {
28
27
  return useContext(DisabledStateContext);
29
28
  }
30
29
 
31
- /**
32
- * Optional global `window` instance (not defined when running SSR).
33
- */
34
- const WINDOW = typeof window !== 'undefined' ? window : undefined;
35
-
36
- /**
37
- * Optional global `document` instance (not defined when running SSR).
38
- */
39
- const DOCUMENT = typeof document !== 'undefined' ? document : undefined;
40
-
41
- /**
42
- * Check if we are running in a true browser
43
- */
44
- const IS_BROWSER = typeof navigator !== 'undefined' && !navigator.userAgent.includes('jsdom');
45
-
46
30
  const EVENT_TYPES = ['mousedown', 'touchstart'];
47
31
  function isClickAway(targets, refs) {
48
32
  // The targets elements are not contained in any of the listed element references.
@@ -132,11 +116,6 @@ const ClickAwayProvider = ({
132
116
  };
133
117
  ClickAwayProvider.displayName = 'ClickAwayProvider';
134
118
 
135
- /** Check if user prefers reduced motion */
136
- function isReducedMotion() {
137
- return WINDOW?.matchMedia?.('(prefers-reduced-motion: reduce)').matches;
138
- }
139
-
140
119
  /**
141
120
  * Portal initializing function.
142
121
  * If it does not provide a container, the Portal children will render in classic React tree and not in a portal.
@@ -176,66 +155,5 @@ const Portal = ({
176
155
  return /*#__PURE__*/createPortal(children, context.container);
177
156
  };
178
157
 
179
- /** Unref a react ref or element */
180
- function unref(maybeElement) {
181
- if (maybeElement instanceof Element) return maybeElement;
182
- return maybeElement?.current;
183
- }
184
-
185
- function setupViewTransitionName(groups, type) {
186
- const resets = [];
187
- for (const group of groups) {
188
- const element = unref(group[type]);
189
- if (element instanceof HTMLElement) {
190
- const originalName = element.style.viewTransitionName;
191
- resets.push(() => {
192
- element.style.viewTransitionName = originalName;
193
- });
194
- element.style.viewTransitionName = group.name;
195
- }
196
- }
197
- return () => {
198
- for (const reset of resets) {
199
- reset();
200
- }
201
- };
202
- }
203
-
204
- /**
205
- * Wrapper around the `document.startViewTransition` handling browser incompatibilities, react DOM flush and
206
- * user preference.
207
- *
208
- * @param updateCallback callback containing the changes to apply within the view transition.
209
- * @param groups setup groups of old and new element pair to transition between.
210
- */
211
- async function startViewTransition(updateCallback, {
212
- groups = []
213
- } = {}) {
214
- const start = document?.startViewTransition?.bind(document);
215
- const prefersReducedMotion = isReducedMotion();
216
- const {
217
- flushSync
218
- } = ReactDOM;
219
- if (prefersReducedMotion || !start || !flushSync) {
220
- // Skip, apply changes without a transition
221
- updateCallback();
222
- return;
223
- }
224
-
225
- // Setup view transition name on old elements
226
- const resetOldElement = setupViewTransitionName(groups, 'old');
227
- let resetNewElements;
228
-
229
- // Start view transition, apply changes & flush to DOM
230
- await start(() => {
231
- resetOldElement();
232
- flushSync(updateCallback);
233
-
234
- // Setup view transition name on new elements
235
- resetNewElements = setupViewTransitionName(groups, 'new');
236
- }).updateCallbackDone;
237
- resetNewElements?.();
238
- }
239
-
240
- export { ClickAwayProvider as C, DisabledStateProvider as D, IS_BROWSER as I, Portal as P, WINDOW as W, PortalProvider as a, DOCUMENT as b, isReducedMotion as i, startViewTransition as s, useDisabledStateContext as u };
241
- //# sourceMappingURL=BYSwKsj4.js.map
158
+ export { ClickAwayProvider as C, DisabledStateProvider as D, Portal as P, PortalProvider as a, useDisabledStateContext as u };
159
+ //# sourceMappingURL=ClSM3-wl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClSM3-wl.js","sources":["../../src/utils/disabled/DisabledStateContext.tsx","../../src/hooks/useClickAway.tsx","../../src/utils/ClickAwayProvider/ClickAwayProvider.tsx","../../src/utils/Portal/PortalProvider.tsx","../../src/utils/Portal/Portal.tsx"],"sourcesContent":["import React, { useContext } from 'react';\n\n/** Disable state */\ntype DisabledStateContextValue =\n | {\n state: 'disabled';\n }\n | { state: undefined | null };\n\nexport const DisabledStateContext = React.createContext<DisabledStateContextValue>({ state: null });\n\nexport type DisabledStateProviderProps = DisabledStateContextValue & {\n children: React.ReactNode;\n};\n\n/**\n * Disabled state provider.\n * All nested LumX Design System components inherit this disabled state.\n */\nexport function DisabledStateProvider({ children, ...value }: DisabledStateProviderProps) {\n return <DisabledStateContext.Provider value={value}>{children}</DisabledStateContext.Provider>;\n}\n\n/**\n * Get DisabledState context value\n */\nexport function useDisabledStateContext(): DisabledStateContextValue {\n return useContext(DisabledStateContext);\n}\n","import { RefObject, useEffect } from 'react';\n\nimport { Falsy } from '@lumx/react/utils/type';\n\nimport isEmpty from 'lodash/isEmpty';\n\nconst EVENT_TYPES = ['mousedown', 'touchstart'];\n\nfunction isClickAway(targets: HTMLElement[], refs: Array<RefObject<HTMLElement>>): boolean {\n // The targets elements are not contained in any of the listed element references.\n return !refs.some((ref) => targets.some((target) => ref?.current?.contains(target)));\n}\n\nexport interface ClickAwayParameters {\n /**\n * A callback function to call when the user clicks away from the elements.\n */\n callback: EventListener | Falsy;\n /**\n * Elements considered within the click away context (clicking outside them will trigger the click away callback).\n */\n childrenRefs: RefObject<Array<RefObject<HTMLElement>>>;\n}\n\n/**\n * Listen to clicks away from the given elements and callback the passed in function.\n *\n * Warning: If you need to detect click away on nested React portals, please use the `ClickAwayProvider` component.\n */\nexport function useClickAway({ callback, childrenRefs }: ClickAwayParameters): void {\n useEffect(() => {\n const { current: currentRefs } = childrenRefs;\n if (!callback || !currentRefs || isEmpty(currentRefs)) {\n return undefined;\n }\n const listener: EventListener = (evt) => {\n const targets = [evt.composedPath?.()[0], evt.target] as HTMLElement[];\n if (isClickAway(targets, currentRefs)) {\n callback(evt);\n }\n };\n\n EVENT_TYPES.forEach((evtType) => document.addEventListener(evtType, listener));\n return () => {\n EVENT_TYPES.forEach((evtType) => document.removeEventListener(evtType, listener));\n };\n }, [callback, childrenRefs]);\n}\n","import { createContext, RefObject, useContext, useEffect, useMemo, useRef } from 'react';\nimport { ClickAwayParameters, useClickAway } from '@lumx/react/hooks/useClickAway';\n\ninterface ContextValue {\n childrenRefs: Array<RefObject<HTMLElement>>;\n addRefs(...newChildrenRefs: Array<RefObject<HTMLElement>>): void;\n}\n\nconst ClickAwayAncestorContext = createContext<ContextValue | null>(null);\n\ninterface ClickAwayProviderProps extends ClickAwayParameters {\n /**\n * (Optional) Element that should be considered as part of the parent\n */\n parentRef?: RefObject<HTMLElement>;\n /**\n * Children\n */\n children?: React.ReactNode;\n}\n\n/**\n * Component combining the `useClickAway` hook with a React context to hook into the React component tree and make sure\n * we take into account both the DOM tree and the React tree to detect click away.\n *\n * @return the react component.\n */\nexport const ClickAwayProvider: React.FC<ClickAwayProviderProps> = ({\n children,\n callback,\n childrenRefs,\n parentRef,\n}) => {\n const parentContext = useContext(ClickAwayAncestorContext);\n const currentContext = useMemo(() => {\n const context: ContextValue = {\n childrenRefs: [],\n /**\n * Add element refs to the current context and propagate to the parent context.\n */\n addRefs(...newChildrenRefs) {\n // Add element refs that should be considered as inside the click away context.\n context.childrenRefs.push(...newChildrenRefs);\n\n if (parentContext) {\n // Also add then to the parent context\n parentContext.addRefs(...newChildrenRefs);\n if (parentRef) {\n // The parent element is also considered as inside the parent click away context but not inside the current context\n parentContext.addRefs(parentRef);\n }\n }\n },\n };\n return context;\n }, [parentContext, parentRef]);\n\n useEffect(() => {\n const { current: currentRefs } = childrenRefs;\n if (!currentRefs) {\n return;\n }\n currentContext.addRefs(...currentRefs);\n }, [currentContext, childrenRefs]);\n\n useClickAway({ callback, childrenRefs: useRef(currentContext.childrenRefs) });\n return <ClickAwayAncestorContext.Provider value={currentContext}>{children}</ClickAwayAncestorContext.Provider>;\n};\nClickAwayProvider.displayName = 'ClickAwayProvider';\n","import React from 'react';\n\ntype Container = DocumentFragment | Element;\n\n/**\n * Portal initializing function.\n * If it does not provide a container, the Portal children will render in classic React tree and not in a portal.\n */\nexport type PortalInit = () => {\n container?: Container;\n teardown?: () => void;\n};\n\nexport const PortalContext = React.createContext<PortalInit>(() => ({ container: document.body }));\n\nexport interface PortalProviderProps {\n children?: React.ReactNode;\n value: PortalInit;\n}\n\n/**\n * Customize where <Portal> wrapped elements render (tooltip, popover, dialog, etc.)\n */\nexport const PortalProvider: React.FC<PortalProviderProps> = PortalContext.Provider;\n","import React from 'react';\nimport { createPortal } from 'react-dom';\nimport { PortalContext } from './PortalProvider';\n\nexport interface PortalProps {\n enabled?: boolean;\n children: React.ReactNode;\n}\n\n/**\n * Render children in a portal outside the current DOM position\n * (defaults to `document.body` but can be customized with the PortalContextProvider)\n */\nexport const Portal: React.FC<PortalProps> = ({ children, enabled = true }) => {\n const init = React.useContext(PortalContext);\n const context = React.useMemo(\n () => {\n return enabled ? init() : null;\n },\n // Only update on 'enabled'\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [enabled],\n );\n\n React.useLayoutEffect(() => {\n return context?.teardown;\n }, [context?.teardown, enabled]);\n\n if (!context?.container) {\n return <>{children}</>;\n }\n return createPortal(children, context.container);\n};\n"],"names":["DisabledStateContext","React","createContext","state","DisabledStateProvider","children","value","_jsx","Provider","useDisabledStateContext","useContext","EVENT_TYPES","isClickAway","targets","refs","some","ref","target","current","contains","useClickAway","callback","childrenRefs","useEffect","currentRefs","isEmpty","undefined","listener","evt","composedPath","forEach","evtType","document","addEventListener","removeEventListener","ClickAwayAncestorContext","ClickAwayProvider","parentRef","parentContext","currentContext","useMemo","context","addRefs","newChildrenRefs","push","useRef","displayName","PortalContext","container","body","PortalProvider","Portal","enabled","init","useLayoutEffect","teardown","_Fragment","createPortal"],"mappings":";;;;;AASO,MAAMA,oBAAoB,gBAAGC,cAAK,CAACC,aAAa,CAA4B;AAAEC,EAAAA,KAAK,EAAE;AAAK,CAAC,CAAC;AAMnG;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAkC,CAAC,EAAE;AACtF,EAAA,oBAAOC,GAAA,CAACP,oBAAoB,CAACQ,QAAQ,EAAA;AAACF,IAAAA,KAAK,EAAEA,KAAM;AAAAD,IAAAA,QAAA,EAAEA;AAAQ,GAAgC,CAAC;AAClG;;AAEA;AACA;AACA;AACO,SAASI,uBAAuBA,GAA8B;EACjE,OAAOC,UAAU,CAACV,oBAAoB,CAAC;AAC3C;;ACtBA,MAAMW,WAAW,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;AAE/C,SAASC,WAAWA,CAACC,OAAsB,EAAEC,IAAmC,EAAW;AACvF;EACA,OAAO,CAACA,IAAI,CAACC,IAAI,CAAEC,GAAG,IAAKH,OAAO,CAACE,IAAI,CAAEE,MAAM,IAAKD,GAAG,EAAEE,OAAO,EAAEC,QAAQ,CAACF,MAAM,CAAC,CAAC,CAAC;AACxF;AAaA;AACA;AACA;AACA;AACA;AACO,SAASG,YAAYA,CAAC;EAAEC,QAAQ;AAAEC,EAAAA;AAAkC,CAAC,EAAQ;AAChFC,EAAAA,SAAS,CAAC,MAAM;IACZ,MAAM;AAAEL,MAAAA,OAAO,EAAEM;AAAY,KAAC,GAAGF,YAAY;IAC7C,IAAI,CAACD,QAAQ,IAAI,CAACG,WAAW,IAAIC,OAAO,CAACD,WAAW,CAAC,EAAE;AACnD,MAAA,OAAOE,SAAS;AACpB,IAAA;IACA,MAAMC,QAAuB,GAAIC,GAAG,IAAK;AACrC,MAAA,MAAMf,OAAO,GAAG,CAACe,GAAG,CAACC,YAAY,IAAI,CAAC,CAAC,CAAC,EAAED,GAAG,CAACX,MAAM,CAAkB;AACtE,MAAA,IAAIL,WAAW,CAACC,OAAO,EAAEW,WAAW,CAAC,EAAE;QACnCH,QAAQ,CAACO,GAAG,CAAC;AACjB,MAAA;IACJ,CAAC;AAEDjB,IAAAA,WAAW,CAACmB,OAAO,CAAEC,OAAO,IAAKC,QAAQ,CAACC,gBAAgB,CAACF,OAAO,EAAEJ,QAAQ,CAAC,CAAC;AAC9E,IAAA,OAAO,MAAM;AACThB,MAAAA,WAAW,CAACmB,OAAO,CAAEC,OAAO,IAAKC,QAAQ,CAACE,mBAAmB,CAACH,OAAO,EAAEJ,QAAQ,CAAC,CAAC;IACrF,CAAC;AACL,EAAA,CAAC,EAAE,CAACN,QAAQ,EAAEC,YAAY,CAAC,CAAC;AAChC;;ACvCA,MAAMa,wBAAwB,gBAAGjC,aAAa,CAAsB,IAAI,CAAC;AAazE;AACA;AACA;AACA;AACA;AACA;AACO,MAAMkC,iBAAmD,GAAGA,CAAC;EAChE/B,QAAQ;EACRgB,QAAQ;EACRC,YAAY;AACZe,EAAAA;AACJ,CAAC,KAAK;AACF,EAAA,MAAMC,aAAa,GAAG5B,UAAU,CAACyB,wBAAwB,CAAC;AAC1D,EAAA,MAAMI,cAAc,GAAGC,OAAO,CAAC,MAAM;AACjC,IAAA,MAAMC,OAAqB,GAAG;AAC1BnB,MAAAA,YAAY,EAAE,EAAE;AAChB;AACZ;AACA;MACYoB,OAAOA,CAAC,GAAGC,eAAe,EAAE;AACxB;AACAF,QAAAA,OAAO,CAACnB,YAAY,CAACsB,IAAI,CAAC,GAAGD,eAAe,CAAC;AAE7C,QAAA,IAAIL,aAAa,EAAE;AACf;AACAA,UAAAA,aAAa,CAACI,OAAO,CAAC,GAAGC,eAAe,CAAC;AACzC,UAAA,IAAIN,SAAS,EAAE;AACX;AACAC,YAAAA,aAAa,CAACI,OAAO,CAACL,SAAS,CAAC;AACpC,UAAA;AACJ,QAAA;AACJ,MAAA;KACH;AACD,IAAA,OAAOI,OAAO;AAClB,EAAA,CAAC,EAAE,CAACH,aAAa,EAAED,SAAS,CAAC,CAAC;AAE9Bd,EAAAA,SAAS,CAAC,MAAM;IACZ,MAAM;AAAEL,MAAAA,OAAO,EAAEM;AAAY,KAAC,GAAGF,YAAY;IAC7C,IAAI,CAACE,WAAW,EAAE;AACd,MAAA;AACJ,IAAA;AACAe,IAAAA,cAAc,CAACG,OAAO,CAAC,GAAGlB,WAAW,CAAC;AAC1C,EAAA,CAAC,EAAE,CAACe,cAAc,EAAEjB,YAAY,CAAC,CAAC;AAElCF,EAAAA,YAAY,CAAC;IAAEC,QAAQ;AAAEC,IAAAA,YAAY,EAAEuB,MAAM,CAACN,cAAc,CAACjB,YAAY;AAAE,GAAC,CAAC;AAC7E,EAAA,oBAAOf,GAAA,CAAC4B,wBAAwB,CAAC3B,QAAQ,EAAA;AAACF,IAAAA,KAAK,EAAEiC,cAAe;AAAAlC,IAAAA,QAAA,EAAEA;AAAQ,GAAoC,CAAC;AACnH;AACA+B,iBAAiB,CAACU,WAAW,GAAG,mBAAmB;;AChEnD;AACA;AACA;AACA;;AAMO,MAAMC,aAAa,gBAAG9C,cAAK,CAACC,aAAa,CAAa,OAAO;EAAE8C,SAAS,EAAEhB,QAAQ,CAACiB;AAAK,CAAC,CAAC,CAAC;AAOlG;AACA;AACA;AACO,MAAMC,cAA6C,GAAGH,aAAa,CAACvC;;ACd3E;AACA;AACA;AACA;AACO,MAAM2C,MAA6B,GAAGA,CAAC;EAAE9C,QAAQ;AAAE+C,EAAAA,OAAO,GAAG;AAAK,CAAC,KAAK;AAC3E,EAAA,MAAMC,IAAI,GAAGpD,cAAK,CAACS,UAAU,CAACqC,aAAa,CAAC;AAC5C,EAAA,MAAMN,OAAO,GAAGxC,cAAK,CAACuC,OAAO,CACzB,MAAM;AACF,IAAA,OAAOY,OAAO,GAAGC,IAAI,EAAE,GAAG,IAAI;EAClC,CAAC;AACD;AACA;EACA,CAACD,OAAO,CACZ,CAAC;EAEDnD,cAAK,CAACqD,eAAe,CAAC,MAAM;IACxB,OAAOb,OAAO,EAAEc,QAAQ;EAC5B,CAAC,EAAE,CAACd,OAAO,EAAEc,QAAQ,EAAEH,OAAO,CAAC,CAAC;AAEhC,EAAA,IAAI,CAACX,OAAO,EAAEO,SAAS,EAAE;IACrB,oBAAOzC,GAAA,CAAAiD,QAAA,EAAA;AAAAnD,MAAAA,QAAA,EAAGA;AAAQ,KAAG,CAAC;AAC1B,EAAA;AACA,EAAA,oBAAOoD,YAAY,CAACpD,QAAQ,EAAEoC,OAAO,CAACO,SAAS,CAAC;AACpD;;;;"}
package/index.d.ts CHANGED
@@ -1,11 +1,369 @@
1
- import { Kind, HorizontalAlignment, Size, ColorPalette, Emphasis, Alignment, VerticalAlignment, Orientation, ColorWithVariants, ColorVariant, Typography, WhiteSpace, AspectRatio, GlobalSize, TypographyInterface, Theme } from '@lumx/core/js/constants';
2
- export * from '@lumx/core/js/constants';
3
- import * as _lumx_core_js_types from '@lumx/core/js/types';
4
- import { GenericProps, HasTheme, ValueOf, HasCloseMode, TextElement, HeadingElement, Falsy, HasClassName, HasAriaLabelOrLabelledBy } from '@lumx/core/js/types';
5
- export * from '@lumx/core/js/types';
1
+ import { F as Falsy } from './Falsy-e4faCDKK.js';
6
2
  import * as React$1 from 'react';
7
3
  import React__default, { Ref, ReactElement, ReactNode, SyntheticEvent, MouseEventHandler, KeyboardEventHandler, AriaAttributes, DetailedHTMLProps, ButtonHTMLAttributes, InputHTMLAttributes, RefObject, ImgHTMLAttributes, CSSProperties, SetStateAction, Key, ElementType, ComponentProps } from 'react';
8
4
 
5
+ /**
6
+ * The down key code.
7
+ */
8
+ declare const DOWN_KEY_CODE = 40;
9
+ /**
10
+ * The enter/return key code.
11
+ */
12
+ declare const ENTER_KEY_CODE = 13;
13
+ /**
14
+ * The space key code.
15
+ */
16
+ declare const SPACE_KEY_CODE = 32;
17
+ /**
18
+ * The escape key code.
19
+ */
20
+ declare const ESCAPE_KEY_CODE = 27;
21
+ /**
22
+ * The left key code.
23
+ */
24
+ declare const LEFT_KEY_CODE = 37;
25
+ /**
26
+ * The right key code.
27
+ */
28
+ declare const RIGHT_KEY_CODE = 39;
29
+ /**
30
+ * The tab key code.
31
+ */
32
+ declare const TAB_KEY_CODE = 9;
33
+ /**
34
+ * The up key code.
35
+ */
36
+ declare const UP_KEY_CODE = 38;
37
+ /**
38
+ * The up key code.
39
+ */
40
+ declare const BACKSPACE_KEY_CODE = 8;
41
+
42
+ /**
43
+ * Animation duration constants. Take into consideration that if you change one of these variables,
44
+ * you need to update their scss counterpart as well
45
+ */
46
+ declare const DIALOG_TRANSITION_DURATION = 400;
47
+ declare const EXPANSION_PANEL_TRANSITION_DURATION = 400;
48
+ declare const NOTIFICATION_TRANSITION_DURATION = 200;
49
+ declare const SLIDESHOW_TRANSITION_DURATION = 5000;
50
+ /**
51
+ * Delay on hover after which we open or close the tooltip.
52
+ * Only applies to devices supporting pointer hover.
53
+ */
54
+ declare const TOOLTIP_HOVER_DELAY: {
55
+ open: number;
56
+ close: number;
57
+ };
58
+ /**
59
+ * Delay on long press after which we open or close the tooltip.
60
+ * Only applies to devices not supporting pointer hover.
61
+ */
62
+ declare const TOOLTIP_LONG_PRESS_DELAY: {
63
+ open: number;
64
+ close: number;
65
+ };
66
+
67
+ /**
68
+ * Callback function type alias (use for readability)
69
+ */
70
+ type Callback = () => void;
71
+
72
+ /**
73
+ * Require either `aria-label` or `arial-labelledby` prop.
74
+ * If none are set, the order will prioritize `aria-labelledby` over `aria-label` as it
75
+ * needs a visible element.
76
+ */
77
+ type HasAriaLabelOrLabelledBy<T = string | undefined> = T extends string ? {
78
+ /**
79
+ * The id of the element to use as title of the dialog. Can be within or out of the dialog.
80
+ * Although it is not recommended, aria-label can be used instead if no visible element is available.
81
+ */
82
+ 'aria-labelledby': T;
83
+ /** The label of the dialog. */
84
+ 'aria-label'?: undefined;
85
+ } : {
86
+ 'aria-label': string;
87
+ 'aria-labelledby'?: undefined;
88
+ };
89
+
90
+ interface HasClassName {
91
+ /**
92
+ * Class name forwarded to the root element of the component.
93
+ */
94
+ className?: string;
95
+ }
96
+
97
+ interface HasCloseMode {
98
+ /**
99
+ * Choose how the children are hidden when closed
100
+ * ('hide' keeps the children in DOM but hide them, 'unmount' remove the children from the DOM).
101
+ */
102
+ closeMode?: 'hide' | 'unmount';
103
+ }
104
+
105
+ interface HasTheme {
106
+ /**
107
+ * Theme adapting the component to light or dark background.
108
+ */
109
+ theme?: Theme;
110
+ }
111
+
112
+ /**
113
+ * Define a generic props types.
114
+ */
115
+ interface GenericProps extends HasClassName {
116
+ /**
117
+ * Any prop (particularly any supported prop for a HTML element).
118
+ */
119
+ [propName: string]: any;
120
+ }
121
+
122
+ type JSXElement = boolean | number | string | JSX.Element | object | undefined | null;
123
+
124
+ /** Union type of all heading elements */
125
+ type HeadingElement = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
126
+
127
+ /**
128
+ * A point coordinate in 2D space
129
+ */
130
+ type Point = {
131
+ x: number;
132
+ y: number;
133
+ };
134
+
135
+ /** Predicate function type */
136
+ type Predicate<T> = (t: T) => boolean;
137
+
138
+ /**
139
+ * Rectangle size
140
+ */
141
+ type RectSize = {
142
+ width: number;
143
+ height: number;
144
+ };
145
+
146
+ /** Union type of all text elements */
147
+ type TextElement = 'span' | 'p' | HeadingElement;
148
+
149
+ /** Get types of the values of a record. */
150
+ type ValueOf<T extends Record<any, any>> = T[keyof T];
151
+
152
+ /** Transform a string literal into kebab case */
153
+ type KebabCase<S> = S extends `${infer C}${infer T}` ? T extends Uncapitalize<T> ? `${Uncapitalize<C>}${KebabCase<T>}` : `${Uncapitalize<C>}-${KebabCase<T>}` : S;
154
+
155
+ /** Transform the component name into the lumx class name. */
156
+ type LumxClassName<TComponentName extends string> = `lumx-${KebabCase<TComponentName>}`;
157
+
158
+ type Direction = 'top' | 'right' | 'bottom' | 'left' | 'vertical' | 'horizontal' | 'all';
159
+
160
+ type Spacing = 'margin' | 'padding';
161
+
162
+ /**
163
+ * Alignments.
164
+ */
165
+ declare const Alignment: {
166
+ readonly bottom: "bottom";
167
+ readonly center: "center";
168
+ readonly end: "end";
169
+ readonly left: "left";
170
+ readonly right: "right";
171
+ readonly spaceAround: "space-around";
172
+ readonly spaceBetween: "space-between";
173
+ readonly spaceEvenly: "space-evenly";
174
+ readonly start: "start";
175
+ readonly top: "top";
176
+ };
177
+ type Alignment = ValueOf<typeof Alignment>;
178
+ type VerticalAlignment = Extract<Alignment, 'top' | 'center' | 'bottom'>;
179
+ type HorizontalAlignment = Extract<Alignment, 'right' | 'center' | 'left'>;
180
+ declare const Theme: {
181
+ readonly light: "light";
182
+ readonly dark: "dark";
183
+ };
184
+ type Theme = ValueOf<typeof Theme>;
185
+ declare const Size: {
186
+ readonly xxs: "xxs";
187
+ readonly xs: "xs";
188
+ readonly s: "s";
189
+ readonly m: "m";
190
+ readonly l: "l";
191
+ readonly xl: "xl";
192
+ readonly xxl: "xxl";
193
+ readonly tiny: "tiny";
194
+ readonly regular: "regular";
195
+ readonly medium: "medium";
196
+ readonly big: "big";
197
+ readonly huge: "huge";
198
+ };
199
+ type Size = ValueOf<typeof Size>;
200
+ type GlobalSize = Extract<Size, 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl'>;
201
+ declare const Orientation: {
202
+ readonly horizontal: "horizontal";
203
+ readonly vertical: "vertical";
204
+ };
205
+ type Orientation = ValueOf<typeof Orientation>;
206
+ declare const Emphasis: {
207
+ readonly low: "low";
208
+ readonly medium: "medium";
209
+ readonly high: "high";
210
+ };
211
+ type Emphasis = ValueOf<typeof Emphasis>;
212
+ /**
213
+ * List of typographies that can't be customized.
214
+ */
215
+ declare const TypographyInterface: {
216
+ readonly overline: "overline";
217
+ readonly caption: "caption";
218
+ readonly body1: "body1";
219
+ readonly body2: "body2";
220
+ readonly subtitle1: "subtitle1";
221
+ readonly subtitle2: "subtitle2";
222
+ readonly title: "title";
223
+ readonly headline: "headline";
224
+ readonly display1: "display1";
225
+ };
226
+ type TypographyInterface = ValueOf<typeof TypographyInterface>;
227
+ /**
228
+ * List of title typographies that can be customized (via CSS variables).
229
+ */
230
+ declare const TypographyTitleCustom: {
231
+ readonly title1: "custom-title1";
232
+ readonly title2: "custom-title2";
233
+ readonly title3: "custom-title3";
234
+ readonly title4: "custom-title4";
235
+ readonly title5: "custom-title5";
236
+ readonly title6: "custom-title6";
237
+ };
238
+ type TypographyTitleCustom = ValueOf<typeof TypographyTitleCustom>;
239
+ /**
240
+ * List of typographies that can be customized (via CSS variables).
241
+ */
242
+ declare const TypographyCustom: {
243
+ readonly intro: "custom-intro";
244
+ readonly 'body-large': "custom-body-large";
245
+ readonly body: "custom-body";
246
+ readonly quote: "custom-quote";
247
+ readonly 'publish-info': "custom-publish-info";
248
+ readonly button: "custom-button";
249
+ readonly title1: "custom-title1";
250
+ readonly title2: "custom-title2";
251
+ readonly title3: "custom-title3";
252
+ readonly title4: "custom-title4";
253
+ readonly title5: "custom-title5";
254
+ readonly title6: "custom-title6";
255
+ };
256
+ type TypographyCustom = ValueOf<typeof TypographyCustom>;
257
+ /**
258
+ * List of all typographies.
259
+ */
260
+ declare const Typography: {
261
+ readonly custom: {
262
+ readonly intro: "custom-intro";
263
+ readonly 'body-large': "custom-body-large";
264
+ readonly body: "custom-body";
265
+ readonly quote: "custom-quote";
266
+ readonly 'publish-info': "custom-publish-info";
267
+ readonly button: "custom-button";
268
+ readonly title1: "custom-title1";
269
+ readonly title2: "custom-title2";
270
+ readonly title3: "custom-title3";
271
+ readonly title4: "custom-title4";
272
+ readonly title5: "custom-title5";
273
+ readonly title6: "custom-title6";
274
+ };
275
+ readonly overline: "overline";
276
+ readonly caption: "caption";
277
+ readonly body1: "body1";
278
+ readonly body2: "body2";
279
+ readonly subtitle1: "subtitle1";
280
+ readonly subtitle2: "subtitle2";
281
+ readonly title: "title";
282
+ readonly headline: "headline";
283
+ readonly display1: "display1";
284
+ };
285
+ type Typography = TypographyInterface | TypographyCustom;
286
+ /**
287
+ * All available aspect ratios.
288
+ */
289
+ declare const AspectRatio: {
290
+ /** Intrinsic content ratio. */
291
+ readonly original: "original";
292
+ /** Ratio 3:1 */
293
+ readonly panoramic: "panoramic";
294
+ /** Ratio 16:9 */
295
+ readonly wide: "wide";
296
+ /** Ratio 3:2 */
297
+ readonly horizontal: "horizontal";
298
+ /** Ratio 3:2 */
299
+ readonly vertical: "vertical";
300
+ /** Ratio 1:1 */
301
+ readonly square: "square";
302
+ /** Ratio constrained by the parent. */
303
+ readonly free: "free";
304
+ };
305
+ type AspectRatio = ValueOf<typeof AspectRatio>;
306
+ /**
307
+ * Semantic info about the purpose of the component
308
+ */
309
+ declare const Kind: {
310
+ readonly info: "info";
311
+ readonly success: "success";
312
+ readonly warning: "warning";
313
+ readonly error: "error";
314
+ };
315
+ type Kind = ValueOf<typeof Kind>;
316
+ /**
317
+ * All available white-space values
318
+ * */
319
+ declare const WhiteSpace: {
320
+ normal: string;
321
+ nowrap: string;
322
+ pre: string;
323
+ 'pre-wrap': string;
324
+ 'pre-line': string;
325
+ 'break-spaces': string;
326
+ };
327
+ type WhiteSpace = ValueOf<typeof WhiteSpace>;
328
+ /**
329
+ * See SCSS variable $lumx-color-palette
330
+ */
331
+ declare const ColorPalette: {
332
+ readonly primary: "primary";
333
+ readonly secondary: "secondary";
334
+ readonly blue: "blue";
335
+ readonly dark: "dark";
336
+ readonly green: "green";
337
+ readonly yellow: "yellow";
338
+ readonly red: "red";
339
+ readonly light: "light";
340
+ readonly grey: "grey";
341
+ };
342
+ type ColorPalette = ValueOf<typeof ColorPalette>;
343
+ type Color = ColorPalette | string;
344
+ /**
345
+ * See SCSS variable $lumx-color-variants
346
+ */
347
+ declare const ColorVariant: {
348
+ readonly D1: "D1";
349
+ readonly D2: "D2";
350
+ readonly L1: "L1";
351
+ readonly L2: "L2";
352
+ readonly L3: "L3";
353
+ readonly L4: "L4";
354
+ readonly L5: "L5";
355
+ readonly L6: "L6";
356
+ readonly N: "N";
357
+ };
358
+ type ColorVariant = ValueOf<typeof ColorVariant>;
359
+ /** ColorPalette with all possible color variant combination */
360
+ type ColorWithVariants = ColorPalette | Exclude<`${ColorPalette}-${ColorVariant}`, `light-D${number}` | `dark-D${number}`>;
361
+
362
+ /**
363
+ * Visually hidden a11y utility class name
364
+ */
365
+ declare const VISUALLY_HIDDEN = "visually-hidden";
366
+
9
367
  /** LumX Component Type. */
10
368
  type Comp<P, T = HTMLElement> = {
11
369
  (props: P & {
@@ -1232,7 +1590,7 @@ declare const HeadingLevelProvider: React.FC<HeadingLevelProviderProps>;
1232
1590
 
1233
1591
  declare const useHeadingLevel: () => {
1234
1592
  level: number;
1235
- headingElement: _lumx_core_js_types.HeadingElement;
1593
+ headingElement: HeadingElement;
1236
1594
  };
1237
1595
 
1238
1596
  type GridGutterSize = Extract<Size, 'regular' | 'big' | 'huge'>;
@@ -1333,6 +1691,7 @@ interface IconProps extends GenericProps, HasTheme {
1333
1691
  /** Sets an alternative text on the svg. Will set an `img` role to the svg. */
1334
1692
  alt?: string;
1335
1693
  }
1694
+
1336
1695
  /**
1337
1696
  * Icon component.
1338
1697
  *
@@ -1603,10 +1962,11 @@ declare const InlineList: Comp<InlineListProps, HTMLElement>;
1603
1962
  */
1604
1963
  interface InputHelperProps extends GenericProps, HasTheme {
1605
1964
  /** Helper content. */
1606
- children: string | ReactNode;
1965
+ children: JSXElement;
1607
1966
  /** Helper variant. */
1608
1967
  kind?: Kind;
1609
1968
  }
1969
+
1610
1970
  /**
1611
1971
  * InputHelper component.
1612
1972
  *
@@ -1616,19 +1976,17 @@ interface InputHelperProps extends GenericProps, HasTheme {
1616
1976
  */
1617
1977
  declare const InputHelper: Comp<InputHelperProps, HTMLParagraphElement>;
1618
1978
 
1619
- /**
1620
- * Defines the props of the component.
1621
- */
1622
1979
  interface InputLabelProps extends GenericProps, HasTheme {
1623
1980
  /** Typography variant. */
1624
1981
  typography?: Typography;
1625
1982
  /** Label content. */
1626
- children: string | ReactNode;
1983
+ children: JSXElement;
1627
1984
  /** Native htmlFor property. */
1628
1985
  htmlFor: string;
1629
1986
  /** Whether the component is required or not. */
1630
1987
  isRequired?: boolean;
1631
1988
  }
1989
+
1632
1990
  /**
1633
1991
  * InputLabel component.
1634
1992
  *
@@ -3184,5 +3542,5 @@ declare const ThemeProvider: React__default.FC<{
3184
3542
  /** Get the theme in the current context. */
3185
3543
  declare function useTheme(): ThemeContextValue;
3186
3544
 
3187
- export { AlertDialog, Autocomplete, AutocompleteMultiple, Avatar, Badge, BadgeWrapper, Button, ButtonEmphasis, ButtonGroup, Checkbox, Chip, ChipGroup, CommentBlock, CommentBlockVariant, DatePicker, DatePickerControlled, DatePickerField, Dialog, Divider, DragHandle, Dropdown, ExpansionPanel, Flag, FlexBox, GenericBlock, GenericBlockGapSize, Grid, GridColumn, GridItem, Heading, HeadingLevelProvider, Icon, IconButton, ImageBlock, ImageBlockCaptionPosition, ImageLightbox, InlineList, InputHelper, InputLabel, Lightbox, Link, LinkPreview, List, ListDivider, ListItem, ListSubheader, Message, Mosaic, Navigation, Notification, Placement, Popover, PopoverDialog, PostBlock, Progress, ProgressCircular, ProgressLinear, ProgressTracker, ProgressTrackerProvider, ProgressTrackerStep, ProgressTrackerStepPanel, ProgressVariant, RadioButton, RadioGroup, RawInputText, RawInputTextarea, Select, SelectMultiple, SelectMultipleField, SelectVariant, SideNavigation, SideNavigationItem, SkeletonCircle, SkeletonRectangle, SkeletonRectangleVariant, SkeletonTypography, Slider, Slides, Slideshow, SlideshowControls, SlideshowItem, Switch, Tab, TabList, TabListLayout, TabPanel, TabProvider, Table, TableBody, TableCell, TableCellVariant, TableHeader, TableRow, Text, TextField, ThOrder, ThemeProvider, Thumbnail, ThumbnailAspectRatio, ThumbnailObjectFit, ThumbnailVariant, Toolbar, Tooltip, Uploader, UploaderVariant, UserBlock, clamp, isClickable, useFocusPointStyle, useHeadingLevel, useTheme };
3188
- export type { AlertDialogProps, AutocompleteMultipleProps, AutocompleteProps, AvatarProps, AvatarSize, BadgeProps, BadgeWrapperProps, BaseButtonProps, ButtonGroupProps, ButtonProps, ButtonSize, CheckboxProps, ChipGroupProps, ChipProps, CommentBlockProps, DatePickerControlledProps, DatePickerFieldProps, DatePickerProps, DialogProps, DialogSizes, DividerProps, DragHandleProps, DropdownProps, Elevation, ExpansionPanelProps, FlagProps, FlexBoxProps, FlexHorizontalAlignment, FlexVerticalAlignment, FocusPoint, GapSize, GenericBlockProps, GridColumnGapSize, GridColumnProps, GridItemProps, GridProps, HeadingLevelProviderProps, HeadingProps, IconButtonProps, IconProps, IconSizes, ImageBlockProps, ImageBlockSize, ImageLightboxProps, InlineListProps, InputHelperProps, InputLabelProps, LightboxProps, LinkPreviewProps, LinkProps, ListDividerProps, ListItemProps, ListItemSize, ListProps, ListSubheaderProps, MarginAutoAlignment, MessageProps, MosaicProps, NavigationProps, NotificationProps, Offset, PopoverDialogProps, PopoverProps, PostBlockProps, ProgressCircularProps, ProgressCircularSize, ProgressLinearProps, ProgressProps, ProgressTrackerProps, ProgressTrackerProviderProps, ProgressTrackerStepPanelProps, ProgressTrackerStepProps, RadioButtonProps, RadioGroupProps, RawInputTextProps, RawInputTextareaProps, SelectMultipleProps, SelectProps, SideNavigationItemProps, SideNavigationProps, SkeletonCircleProps, SkeletonRectangleProps, SkeletonTypographyProps, SliderProps, SlidesProps, SlideshowControlsProps, SlideshowItemProps, SlideshowProps, SwitchProps, TabListProps, TabPanelProps, TabProps, TabProviderProps, TableBodyProps, TableCellProps, TableHeaderProps, TableProps, TableRowProps, TextFieldProps, TextProps, ThumbnailProps, ThumbnailSize, ToolbarProps, TooltipPlacement, TooltipProps, UploaderProps, UploaderSize, UserBlockProps, UserBlockSize };
3545
+ export { AlertDialog, Alignment, AspectRatio, Autocomplete, AutocompleteMultiple, Avatar, BACKSPACE_KEY_CODE, Badge, BadgeWrapper, Button, ButtonEmphasis, ButtonGroup, Checkbox, Chip, ChipGroup, ColorPalette, ColorVariant, CommentBlock, CommentBlockVariant, DIALOG_TRANSITION_DURATION, DOWN_KEY_CODE, DatePicker, DatePickerControlled, DatePickerField, Dialog, Divider, DragHandle, Dropdown, ENTER_KEY_CODE, ESCAPE_KEY_CODE, EXPANSION_PANEL_TRANSITION_DURATION, Emphasis, ExpansionPanel, Falsy, Flag, FlexBox, GenericBlock, GenericBlockGapSize, Grid, GridColumn, GridItem, Heading, HeadingLevelProvider, Icon, IconButton, ImageBlock, ImageBlockCaptionPosition, ImageLightbox, InlineList, InputHelper, InputLabel, Kind, LEFT_KEY_CODE, Lightbox, Link, LinkPreview, List, ListDivider, ListItem, ListSubheader, Message, Mosaic, NOTIFICATION_TRANSITION_DURATION, Navigation, Notification, Orientation, Placement, Popover, PopoverDialog, PostBlock, Progress, ProgressCircular, ProgressLinear, ProgressTracker, ProgressTrackerProvider, ProgressTrackerStep, ProgressTrackerStepPanel, ProgressVariant, RIGHT_KEY_CODE, RadioButton, RadioGroup, RawInputText, RawInputTextarea, SLIDESHOW_TRANSITION_DURATION, SPACE_KEY_CODE, Select, SelectMultiple, SelectMultipleField, SelectVariant, SideNavigation, SideNavigationItem, Size, SkeletonCircle, SkeletonRectangle, SkeletonRectangleVariant, SkeletonTypography, Slider, Slides, Slideshow, SlideshowControls, SlideshowItem, Switch, TAB_KEY_CODE, TOOLTIP_HOVER_DELAY, TOOLTIP_LONG_PRESS_DELAY, Tab, TabList, TabListLayout, TabPanel, TabProvider, Table, TableBody, TableCell, TableCellVariant, TableHeader, TableRow, Text, TextField, ThOrder, Theme, ThemeProvider, Thumbnail, ThumbnailAspectRatio, ThumbnailObjectFit, ThumbnailVariant, Toolbar, Tooltip, Typography, TypographyCustom, TypographyInterface, TypographyTitleCustom, UP_KEY_CODE, Uploader, UploaderVariant, UserBlock, VISUALLY_HIDDEN, WhiteSpace, clamp, isClickable, useFocusPointStyle, useHeadingLevel, useTheme };
3546
+ export type { AlertDialogProps, AutocompleteMultipleProps, AutocompleteProps, AvatarProps, AvatarSize, BadgeProps, BadgeWrapperProps, BaseButtonProps, ButtonGroupProps, ButtonProps, ButtonSize, Callback, CheckboxProps, ChipGroupProps, ChipProps, Color, ColorWithVariants, CommentBlockProps, DatePickerControlledProps, DatePickerFieldProps, DatePickerProps, DialogProps, DialogSizes, Direction, DividerProps, DragHandleProps, DropdownProps, Elevation, ExpansionPanelProps, FlagProps, FlexBoxProps, FlexHorizontalAlignment, FlexVerticalAlignment, FocusPoint, GapSize, GenericBlockProps, GenericProps, GlobalSize, GridColumnGapSize, GridColumnProps, GridItemProps, GridProps, HasAriaLabelOrLabelledBy, HasClassName, HasCloseMode, HasTheme, HeadingElement, HeadingLevelProviderProps, HeadingProps, HorizontalAlignment, IconButtonProps, IconProps, IconSizes, ImageBlockProps, ImageBlockSize, ImageLightboxProps, InlineListProps, InputHelperProps, InputLabelProps, JSXElement, LightboxProps, LinkPreviewProps, LinkProps, ListDividerProps, ListItemProps, ListItemSize, ListProps, ListSubheaderProps, LumxClassName, MarginAutoAlignment, MessageProps, MosaicProps, NavigationProps, NotificationProps, Offset, Point, PopoverDialogProps, PopoverProps, PostBlockProps, Predicate, ProgressCircularProps, ProgressCircularSize, ProgressLinearProps, ProgressProps, ProgressTrackerProps, ProgressTrackerProviderProps, ProgressTrackerStepPanelProps, ProgressTrackerStepProps, RadioButtonProps, RadioGroupProps, RawInputTextProps, RawInputTextareaProps, RectSize, SelectMultipleProps, SelectProps, SideNavigationItemProps, SideNavigationProps, SkeletonCircleProps, SkeletonRectangleProps, SkeletonTypographyProps, SliderProps, SlidesProps, SlideshowControlsProps, SlideshowItemProps, SlideshowProps, Spacing, SwitchProps, TabListProps, TabPanelProps, TabProps, TabProviderProps, TableBodyProps, TableCellProps, TableHeaderProps, TableProps, TableRowProps, TextElement, TextFieldProps, TextProps, ThumbnailProps, ThumbnailSize, ToolbarProps, TooltipPlacement, TooltipProps, UploaderProps, UploaderSize, UserBlockProps, UserBlockSize, ValueOf, VerticalAlignment };