@k8slens/lds 0.58.2 → 0.58.4
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/lib/cjs/Avatar/Avatar.d.ts +3 -1
- package/lib/cjs/Avatar/Avatar.js +1 -1
- package/lib/cjs/Badge/Badge.d.ts +6 -4
- package/lib/cjs/Button/Button.d.ts +34 -6
- package/lib/cjs/Button/Button.js +1 -1
- package/lib/cjs/Button/shared.d.ts +30 -1
- package/lib/cjs/ButtonBar/ButtonBar.d.ts +17 -0
- package/lib/cjs/ButtonBar/ButtonBar.js +1 -1
- package/lib/cjs/Checkbox/Checkbox.d.ts +7 -0
- package/lib/cjs/ConfirmDialog/ConfirmDialog.d.ts +16 -0
- package/lib/cjs/ConfirmDialog/ConfirmDialog.js +1 -1
- package/lib/cjs/ContextMenu/ContextMenu.js +1 -1
- package/lib/cjs/DrawerTransition/DrawerTransition.d.ts +20 -0
- package/lib/cjs/DrawerTransition/DrawerTransition.js +1 -1
- package/lib/cjs/Input/Input.d.ts +8 -0
- package/lib/cjs/Input/Input.js +1 -1
- package/lib/cjs/LinkButton/LinkButton.d.ts +7 -0
- package/lib/cjs/LinkButton/LinkButton.js +1 -1
- package/lib/cjs/LoadingIndicator/LoadingIndicator.d.ts +8 -2
- package/lib/cjs/Lozenge/Lozenge.d.ts +4 -2
- package/lib/cjs/Lozenge/Lozenge.js +1 -1
- package/lib/cjs/Modal/Modal.d.ts +26 -0
- package/lib/cjs/Modal/Modal.js +1 -1
- package/lib/cjs/Notification/Notification.d.ts +18 -2
- package/lib/cjs/Notification/Notification.js +1 -1
- package/lib/cjs/NumberBadge/NumberBadge.d.ts +1 -1
- package/lib/cjs/Panel/Panel.d.ts +28 -0
- package/lib/cjs/Panel/Panel.js +1 -1
- package/lib/cjs/ProfileBlock/ProfileBlock.d.ts +8 -0
- package/lib/cjs/ProgressBar/ProgressBar.d.ts +11 -0
- package/lib/cjs/ProgressBar/ProgressBar.js +1 -1
- package/lib/cjs/RadioCard/RadioCard.d.ts +27 -1
- package/lib/cjs/RadioCard/RadioCard.js +1 -1
- package/lib/cjs/Select/MultiOption.d.ts +14 -4
- package/lib/cjs/Select/MultiOption.js +1 -1
- package/lib/cjs/Select/Option.d.ts +6 -0
- package/lib/cjs/Select/Option.js +1 -1
- package/lib/cjs/Select/Select.d.ts +39 -5
- package/lib/cjs/Select/Select.js +1 -1
- package/lib/cjs/Select/SelectDropdown.js +1 -1
- package/lib/cjs/SideNav/SideNav.d.ts +9 -3
- package/lib/cjs/SideNav/SideNav.js +1 -1
- package/lib/cjs/SideNav/SideNavGroup.d.ts +13 -5
- package/lib/cjs/SideNav/SideNavGroup.js +1 -1
- package/lib/cjs/SideNav/SideNavItem.d.ts +22 -5
- package/lib/cjs/SideNav/SideNavItem.js +1 -1
- package/lib/cjs/Switch/Switch.d.ts +2 -0
- package/lib/cjs/Table/Table.js +1 -1
- package/lib/cjs/Textarea/Textarea.js +1 -1
- package/lib/cjs/Tooltip/Tooltip.d.ts +15 -3
- package/lib/cjs/Tooltip/Tooltip.js +1 -1
- package/lib/cjs/UserMenu/UserMenu.d.ts +9 -2
- package/lib/cjs/UserMenu/UserMenu.js +1 -1
- package/lib/cjs/UserMenu/UserMenuDropdown.d.ts +10 -6
- package/lib/cjs/UserMenu/UserMenuDropdown.js +1 -1
- package/lib/cjs/UserMenu/UserMenuItem.d.ts +22 -1
- package/lib/cjs/UserMenu/UserMenuItem.js +1 -1
- package/lib/cjs/_virtual/_tslib.js +1 -1
- package/lib/cjs/node_modules/lodash/_basePick.js +1 -1
- package/lib/cjs/node_modules/lodash/_baseToString.js +1 -1
- package/lib/cjs/node_modules/lodash/_memoizeCapped.js +1 -1
- package/lib/cjs/node_modules/lodash/_stringToPath.js +1 -1
- package/lib/cjs/node_modules/lodash/_toKey.js +1 -1
- package/lib/cjs/node_modules/lodash/pick.js +1 -1
- package/lib/es/Avatar/Avatar.d.ts +3 -1
- package/lib/es/Avatar/Avatar.js +1 -1
- package/lib/es/Badge/Badge.d.ts +6 -4
- package/lib/es/Button/Button.d.ts +34 -6
- package/lib/es/Button/Button.js +1 -1
- package/lib/es/Button/shared.d.ts +30 -1
- package/lib/es/ButtonBar/ButtonBar.d.ts +17 -0
- package/lib/es/ButtonBar/ButtonBar.js +1 -1
- package/lib/es/Checkbox/Checkbox.d.ts +7 -0
- package/lib/es/ConfirmDialog/ConfirmDialog.d.ts +16 -0
- package/lib/es/ConfirmDialog/ConfirmDialog.js +1 -1
- package/lib/es/ContextMenu/ContextMenu.js +1 -1
- package/lib/es/DrawerTransition/DrawerTransition.d.ts +20 -0
- package/lib/es/DrawerTransition/DrawerTransition.js +1 -1
- package/lib/es/Input/Input.d.ts +8 -0
- package/lib/es/Input/Input.js +1 -1
- package/lib/es/LinkButton/LinkButton.d.ts +7 -0
- package/lib/es/LinkButton/LinkButton.js +1 -1
- package/lib/es/LoadingIndicator/LoadingIndicator.d.ts +8 -2
- package/lib/es/Lozenge/Lozenge.d.ts +4 -2
- package/lib/es/Lozenge/Lozenge.js +1 -1
- package/lib/es/Modal/Modal.d.ts +26 -0
- package/lib/es/Modal/Modal.js +1 -1
- package/lib/es/Notification/Notification.d.ts +18 -2
- package/lib/es/Notification/Notification.js +1 -1
- package/lib/es/NumberBadge/NumberBadge.d.ts +1 -1
- package/lib/es/Panel/Panel.d.ts +28 -0
- package/lib/es/Panel/Panel.js +1 -1
- package/lib/es/ProfileBlock/ProfileBlock.d.ts +8 -0
- package/lib/es/ProgressBar/ProgressBar.d.ts +11 -0
- package/lib/es/ProgressBar/ProgressBar.js +1 -1
- package/lib/es/RadioCard/RadioCard.d.ts +27 -1
- package/lib/es/RadioCard/RadioCard.js +1 -1
- package/lib/es/Select/MultiOption.d.ts +14 -4
- package/lib/es/Select/MultiOption.js +1 -1
- package/lib/es/Select/Option.d.ts +6 -0
- package/lib/es/Select/Option.js +1 -1
- package/lib/es/Select/Select.d.ts +39 -5
- package/lib/es/Select/Select.js +1 -1
- package/lib/es/Select/SelectDropdown.js +1 -1
- package/lib/es/SideNav/SideNav.d.ts +9 -3
- package/lib/es/SideNav/SideNav.js +1 -1
- package/lib/es/SideNav/SideNavGroup.d.ts +13 -5
- package/lib/es/SideNav/SideNavGroup.js +1 -1
- package/lib/es/SideNav/SideNavItem.d.ts +22 -5
- package/lib/es/SideNav/SideNavItem.js +1 -1
- package/lib/es/Switch/Switch.d.ts +2 -0
- package/lib/es/Table/Table.js +1 -1
- package/lib/es/Textarea/Textarea.js +1 -1
- package/lib/es/Tooltip/Tooltip.d.ts +15 -3
- package/lib/es/Tooltip/Tooltip.js +1 -1
- package/lib/es/UserMenu/UserMenu.d.ts +9 -2
- package/lib/es/UserMenu/UserMenu.js +1 -1
- package/lib/es/UserMenu/UserMenuDropdown.d.ts +10 -6
- package/lib/es/UserMenu/UserMenuDropdown.js +1 -1
- package/lib/es/UserMenu/UserMenuItem.d.ts +22 -1
- package/lib/es/UserMenu/UserMenuItem.js +1 -1
- package/lib/es/_virtual/_tslib.js +1 -1
- package/lib/es/node_modules/lodash/_basePick.js +1 -1
- package/lib/es/node_modules/lodash/_baseToString.js +1 -1
- package/lib/es/node_modules/lodash/_memoizeCapped.js +1 -1
- package/lib/es/node_modules/lodash/_stringToPath.js +1 -1
- package/lib/es/node_modules/lodash/_toKey.js +1 -1
- package/lib/es/node_modules/lodash/pick.js +1 -1
- package/lib/es/node_modules/lodash/throttle.js +1 -1
- package/lib/web/lds-v0-58-3/index.js +28 -0
- package/llms.txt +262 -102
- package/package.json +4 -4
- package/lib/web/lds-v0-58-1/index.js +0 -28
- /package/lib/web/{lds-v0-58-1 → lds-v0-58-3}/index.css +0 -0
- /package/lib/web/{lds-v0-58-1 → lds-v0-58-3}/typography.css +0 -0
package/lib/cjs/Panel/Panel.d.ts
CHANGED
|
@@ -1,17 +1,45 @@
|
|
|
1
1
|
import React, { Fragment, ReactNode } from "react";
|
|
2
2
|
import type { ExtractProps } from "../types/ExtractProps.d";
|
|
3
|
+
/** Props for the Panel component. */
|
|
3
4
|
export interface PanelProps<WrapperComponent extends keyof JSX.IntrinsicElements | React.ElementType = typeof Fragment, HeaderComponent extends keyof JSX.IntrinsicElements | React.ElementType = "header", ContentComponent extends keyof JSX.IntrinsicElements | React.ElementType = "div", FooterComponent extends keyof JSX.IntrinsicElements | React.ElementType = "footer"> {
|
|
5
|
+
/** Content rendered in the header section. */
|
|
4
6
|
header?: ReactNode;
|
|
7
|
+
/** Content rendered in the footer section. */
|
|
5
8
|
footer?: ReactNode;
|
|
9
|
+
/** Optional class name applied to header, content, and footer elements. */
|
|
6
10
|
className?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Component used to wrap the entire panel.
|
|
13
|
+
* @default Fragment
|
|
14
|
+
*/
|
|
7
15
|
wrapperComponent?: WrapperComponent;
|
|
16
|
+
/** Props forwarded to the wrapper component. */
|
|
8
17
|
wrapperProps?: ExtractProps<WrapperComponent>;
|
|
18
|
+
/**
|
|
19
|
+
* Component used for the header section.
|
|
20
|
+
* @default "header"
|
|
21
|
+
*/
|
|
9
22
|
headerComponent?: HeaderComponent;
|
|
23
|
+
/** Props forwarded to the header component. */
|
|
10
24
|
headerProps?: ExtractProps<HeaderComponent>;
|
|
25
|
+
/**
|
|
26
|
+
* Component used for the content section.
|
|
27
|
+
* @default "div"
|
|
28
|
+
*/
|
|
11
29
|
contentComponent?: ContentComponent | undefined;
|
|
30
|
+
/** Props forwarded to the content component. */
|
|
12
31
|
contentProps?: ExtractProps<ContentComponent>;
|
|
32
|
+
/**
|
|
33
|
+
* Component used for the footer section.
|
|
34
|
+
* @default "footer"
|
|
35
|
+
*/
|
|
13
36
|
footerComponent?: FooterComponent;
|
|
37
|
+
/** Props forwarded to the footer component. */
|
|
14
38
|
footerProps?: ExtractProps<FooterComponent>;
|
|
39
|
+
/**
|
|
40
|
+
* Whether to show a loading indicator overlay.
|
|
41
|
+
* @default false
|
|
42
|
+
*/
|
|
15
43
|
loading?: boolean;
|
|
16
44
|
}
|
|
17
45
|
/**
|
package/lib/cjs/Panel/Panel.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react"),n=require("clsx"),r=require("../node_modules/lodash/pick.js"),t=require("../LoadingIndicator/LoadingIndicator.js"),o=require("./Panel.module.css.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(a),i=s(n),u=function(e){return e===a.Fragment||e&&e.$$typeof&&"Symbol(react.fragment)"===e.$$typeof.toString()};module.exports=function(n){var s=n.header,d=n.footer,c=n.className,m=n.wrapperComponent,f=n.wrapperProps,_=n.headerComponent,g=n.headerProps,p=n.contentComponent,v=n.contentProps,y=n.footerComponent,N=n.footerProps,h=n.loading,q=n.children,j=m||a.Fragment,k=_||"header",E=p||"div",P=y||"footer",x=a.useMemo(
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react"),n=require("clsx"),r=require("../node_modules/lodash/pick.js"),t=require("../LoadingIndicator/LoadingIndicator.js"),o=require("./Panel.module.css.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(a),i=s(n),u=function(e){return e===a.Fragment||e&&e.$$typeof&&"Symbol(react.fragment)"===e.$$typeof.toString()};module.exports=function(n){var s=n.header,d=n.footer,c=n.className,m=n.wrapperComponent,f=n.wrapperProps,_=n.headerComponent,g=n.headerProps,p=n.contentComponent,v=n.contentProps,y=n.footerComponent,N=n.footerProps,h=n.loading,q=n.children,j=m||a.Fragment,k=_||"header",E=p||"div",P=y||"footer",x=a.useMemo(function(){var e=f||{};return u(j)?r(e,"key"):e},[f,j]),C=a.useMemo(function(){var a,n=g||{};return u(k)?r(n,"key"):e.__assign(e.__assign({},n),{className:i.default(o.panel,o.header,c,null==g?void 0:g.className,(a={},a[o.loading]=h,a))})},[g,k,c,h]),M=a.useMemo(function(){var a,n=N||{};return u(P)?r(n,"key"):e.__assign(e.__assign({},n),{className:i.default(o.panel,o.footer,c,null==N?void 0:N.className,(a={},a[o.loading]=h,a))})},[N,P,c,h]),$=a.useMemo(function(){var a,n=v||{};return u(E)?r(n,"key"):e.__assign(e.__assign({},n),{className:i.default(o.panel,o.content,c,null==v?void 0:v.className,(a={},a[o.loading]=h,a))})},[v,E,c,h]);return l.default.createElement(j,e.__assign({},x),s&&l.default.createElement(k,e.__assign({},C),s),l.default.createElement(E,e.__assign({},$),q,h&&l.default.createElement(t,{size:"xxl",className:o.loadingIndicator})),d&&l.default.createElement(P,e.__assign({},M),d))};
|
|
@@ -6,10 +6,18 @@ declare type Item = {
|
|
|
6
6
|
avatar?: AvatarProps["image"];
|
|
7
7
|
avatarTitle: string;
|
|
8
8
|
};
|
|
9
|
+
/** Props for the ProfileBlock component. */
|
|
9
10
|
export declare type ProfileBlockProps = HTMLProps<HTMLDivElement> & {
|
|
11
|
+
/**
|
|
12
|
+
* Whether to show a loading indicator instead of text content.
|
|
13
|
+
* @default false
|
|
14
|
+
*/
|
|
10
15
|
loading?: boolean;
|
|
16
|
+
/** User data to display (title, subtitle, avatar). */
|
|
11
17
|
item: Item;
|
|
18
|
+
/** Custom formatter for the title text. */
|
|
12
19
|
formatTitle?: (item: Item) => string | ReactElement;
|
|
20
|
+
/** Custom formatter for the subtitle text. */
|
|
13
21
|
formatSubtitle?: (item: Item) => string | ReactElement;
|
|
14
22
|
};
|
|
15
23
|
/**
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
/** Props for the ProgressBar component. */
|
|
2
3
|
export interface ProgressBarProps extends React.ProgressHTMLAttributes<HTMLProgressElement> {
|
|
4
|
+
/** Current progress value. */
|
|
3
5
|
value: number;
|
|
6
|
+
/**
|
|
7
|
+
* Maximum value for the progress bar.
|
|
8
|
+
* @default 1
|
|
9
|
+
*/
|
|
4
10
|
max?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Color of the progress bar.
|
|
13
|
+
* @default "default"
|
|
14
|
+
*/
|
|
5
15
|
type?: "default" | "ok" | "caution" | "danger";
|
|
16
|
+
/** Accessible title text. Falls back to percentage display if not provided. */
|
|
6
17
|
title?: string;
|
|
7
18
|
}
|
|
8
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react"),t=require("./ProgressBar.module.css.js")
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react"),t=require("clsx"),r=require("./ProgressBar.module.css.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=s(a),l=s(t);module.exports=function(a){var t,s=a.value,i=a.type,o=void 0===i?"default":i,c=a.max,n=void 0===c?1:c,d=a.title,m=a.className,v=e.__rest(a,["value","type","max","title","className"]),f=isNaN(s)?0:Math.max(0,s),x=isNaN(n)||n<=0?1:n,N=Math.min(100,Math.round(f/x*100)),p=d||"".concat(N,"%");return u.default.createElement("progress",e.__assign({},v,{className:l.default(r.progressBar,m,(t={},t[r[o]]="default"!==o,t)),value:f,max:x,"aria-valuetext":p,title:d}),p)};
|
|
@@ -10,16 +10,33 @@ declare type ItemState = {
|
|
|
10
10
|
selected?: boolean;
|
|
11
11
|
disabled?: boolean;
|
|
12
12
|
};
|
|
13
|
+
/** Props for the RadioCard component. */
|
|
13
14
|
export interface RadioCardProps<T> {
|
|
15
|
+
/** HTML `id` attribute for the radio group. */
|
|
14
16
|
id?: string;
|
|
17
|
+
/** Accessible label for the radio group. */
|
|
15
18
|
"aria-label"?: string;
|
|
19
|
+
/** Array of options to render as radio cards. */
|
|
16
20
|
options: Array<T>;
|
|
21
|
+
/** Currently selected option. */
|
|
17
22
|
value: T | undefined;
|
|
23
|
+
/** Change handler receiving the selected option. */
|
|
18
24
|
onChange(d: T): void;
|
|
25
|
+
/** Name attribute for the radio group. */
|
|
19
26
|
name: string;
|
|
27
|
+
/** Optional class name for the radio group container. */
|
|
20
28
|
className?: string;
|
|
29
|
+
/** Optional class name applied to each radio card item. */
|
|
21
30
|
itemClassName?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Whether the entire radio group is disabled.
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
22
35
|
disabled?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Whether the radio group is in an invalid state.
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
23
40
|
invalid?: boolean;
|
|
24
41
|
/**
|
|
25
42
|
* Function to render the content of card item.
|
|
@@ -30,9 +47,18 @@ export interface RadioCardProps<T> {
|
|
|
30
47
|
renderItem?(d: T | undefined, state: ItemState): ReactNode;
|
|
31
48
|
}
|
|
32
49
|
/**
|
|
33
|
-
* A
|
|
50
|
+
* A card-based radio group for visual option selection. Renders each option as a styled card with a radio indicator.
|
|
34
51
|
*
|
|
35
52
|
* Usage: `import { RadioCard } from "@k8slens/lds"`
|
|
53
|
+
*
|
|
54
|
+
* ```tsx
|
|
55
|
+
* <RadioCard
|
|
56
|
+
* name="plan"
|
|
57
|
+
* options={[{ id: "1", label: "Free" }, { id: "2", label: "Pro" }]}
|
|
58
|
+
* value={selected}
|
|
59
|
+
* onChange={setSelected}
|
|
60
|
+
* />
|
|
61
|
+
* ```
|
|
36
62
|
*/
|
|
37
63
|
export default function RadioCard<T extends DefaultOption>({ id, "aria-label": ariaLabel, value, options, onChange, name, invalid, disabled, itemClassName, className, renderItem, ...radioGroupProps }: RadioCardProps<T>): React.JSX.Element;
|
|
38
64
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react"),l=require("clsx"),t=require("@headlessui/react"),n=require("./RadioCard.module.css.js");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=r(a),i=r(l);module.exports=function(a){var l=a.id,r=a["aria-label"],s=a.value,u=a.options,c=a.onChange,m=a.name,o=a.invalid,f=a.disabled,b=a.itemClassName,v=a.className,p=a.renderItem,N=void 0===p?function(e){return d.default.createElement("span",{className:n.content},d.default.createElement("span",{className:n.label},e.label),d.default.createElement("span",{className:n.subtitle},e.subtitle))}:p,E=e.__rest(a,["id","aria-label","value","options","onChange","name","invalid","disabled","itemClassName","className","renderItem"]);return d.default.createElement(t.RadioGroup,e.__assign({},E,{id:l,by:"id",value:s,onChange:c,"aria-label":r,className:i.default(n.radioCard,v),name:m}),u.map(
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react"),l=require("clsx"),t=require("@headlessui/react"),n=require("./RadioCard.module.css.js");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=r(a),i=r(l);module.exports=function(a){var l=a.id,r=a["aria-label"],s=a.value,u=a.options,c=a.onChange,m=a.name,o=a.invalid,f=a.disabled,b=a.itemClassName,v=a.className,p=a.renderItem,N=void 0===p?function(e){return d.default.createElement("span",{className:n.content},d.default.createElement("span",{className:n.label},e.label),d.default.createElement("span",{className:n.subtitle},e.subtitle))}:p,E=e.__rest(a,["id","aria-label","value","options","onChange","name","invalid","disabled","itemClassName","className","renderItem"]);return d.default.createElement(t.RadioGroup,e.__assign({},E,{id:l,by:"id",value:s,onChange:c,"aria-label":r,className:i.default(n.radioCard,v),name:m}),u.map(function(e){return d.default.createElement(t.Radio,{key:e.id,value:e,disabled:f||e.disabled,className:function(e){var a,l=e.checked;return i.default(n.item,b,((a={})[n.selected]=l,a[n.invalid]=o,a))}},function(a){var l=a.checked;return d.default.createElement(d.default.Fragment,null,d.default.createElement("span",{className:n.dot},d.default.createElement("span",null)),N(e,{invalid:o,selected:l,disabled:f||e.disabled}))})}))};
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import React, { type ReactNode } from "react";
|
|
2
|
-
|
|
2
|
+
/** Props for the MultiOption component. */
|
|
3
|
+
interface MultiOptionProps {
|
|
4
|
+
/** Display text of the option, used for the accessible label. */
|
|
3
5
|
label: string;
|
|
4
|
-
|
|
6
|
+
/** Optional class name for the multi-option pill. */
|
|
7
|
+
className?: string;
|
|
8
|
+
/** Content rendered inside the option pill. */
|
|
5
9
|
children: ReactNode;
|
|
10
|
+
/** Called when the remove button is clicked or activated via keyboard. */
|
|
6
11
|
onRemove: (e: React.MouseEvent | React.KeyboardEvent) => void;
|
|
7
|
-
|
|
8
|
-
|
|
12
|
+
/** Called on arrow key press for keyboard navigation between pills. */
|
|
13
|
+
onArrowNavigate?: (direction: "next" | "prev") => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Removable pill for selected values in a multi-select. Supports keyboard navigation and accessible removal.
|
|
17
|
+
*/
|
|
18
|
+
declare const MultiOption: React.ForwardRefExoticComponent<MultiOptionProps & React.RefAttributes<HTMLSpanElement>>;
|
|
9
19
|
export default MultiOption;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("react"),r=require("clsx"),t=require("@k8slens/lds-icons"),n=require("../Lozenge/Lozenge.js"),o=require("./Select.module.css.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=a(e),i=a(r),u=t.navigation.CloseIcon,c=e.forwardRef(
|
|
1
|
+
"use strict";var e=require("react"),r=require("clsx"),t=require("@k8slens/lds-icons"),n=require("../Lozenge/Lozenge.js"),o=require("./Select.module.css.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=a(e),i=a(r),u=t.navigation.CloseIcon,c=e.forwardRef(function(e,r){var t=e.label,a=e.className,c=e.children,s=e.onRemove,f=e.onArrowNavigate;return l.default.createElement(n,{ref:r,size:"lg",type:"primary",className:i.default(o.multiOption,a),onClick:s,onKeyDown:function(e){" "!==e.key&&"Spacebar"!==e.key&&"Enter"!==e.key||(e.preventDefault(),s(e)),"ArrowRight"===e.key&&f&&(e.preventDefault(),f("next")),"ArrowLeft"===e.key&&f&&(e.preventDefault(),f("prev"))},role:"button",tabIndex:0,"aria-label":"Remove option ".concat(t)},c,l.default.createElement(u,{size:"sm",color:"on-dark",className:o.multiOptionRemove}))});module.exports=c;
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { type DefaultOption, type SelectProps } from "./Select";
|
|
3
|
+
/** Props for the Option component. */
|
|
3
4
|
export declare type OptionProps<T> = Pick<SelectProps<T>, "size" | "itemClassName" | "placeholder"> & NonNullable<Pick<SelectProps<T>, "renderContent">> & {
|
|
5
|
+
/** Currently selected values, used to determine selection state. */
|
|
4
6
|
currentValues?: T[] | null;
|
|
7
|
+
/** The option data to render. */
|
|
5
8
|
option: T;
|
|
6
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* Individual option item rendered within a Select dropdown. Handles active, selected, and custom render states.
|
|
12
|
+
*/
|
|
7
13
|
export default function Option<T extends DefaultOption>({ option, currentValues, size, itemClassName, renderContent, placeholder, }: OptionProps<T>): React.JSX.Element;
|
package/lib/cjs/Select/Option.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),t=require("react"),r=require("@headlessui/react"),i=require("clsx"),n=require("./Select.module.css.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=u(t),l=u(i);module.exports=function(t){var i=t.option,u=t.currentValues,c=t.size,a=t.itemClassName,o=t.renderContent,d=t.placeholder;return s.default.createElement(r.ListboxOption,{value:i,className:function(t){var r,s;return l.default(n.item,((r={})[n.active]=t.active,r[n.selected]=t.selected||(u||[]).some(
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),t=require("react"),r=require("@headlessui/react"),i=require("clsx"),n=require("./Select.module.css.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=u(t),l=u(i);module.exports=function(t){var i=t.option,u=t.currentValues,c=t.size,a=t.itemClassName,o=t.renderContent,d=t.placeholder;return s.default.createElement(r.ListboxOption,{value:i,className:function(t){var r,s;return l.default(n.item,((r={})[n.active]=t.active,r[n.selected]=t.selected||(u||[]).some(function(e){return e.id===i.id}),r[n.lg]="lg"===c,r),null!==(s="function"==typeof a?a(e.__assign(e.__assign({},t),{selected:t.selected||(u||[]).some(function(e){return e.id===i.id})})):a)&&void 0!==s?s:"")}},o?o(i,{selected:(u||[]).some(function(e){return e.id===i.id})},d):null)};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { ReactNode } from "react";
|
|
2
|
+
/** Default shape for select options. */
|
|
2
3
|
export declare type DefaultOption = {
|
|
3
4
|
id: string;
|
|
4
5
|
label: string;
|
|
@@ -8,17 +9,28 @@ declare type ItemState = {
|
|
|
8
9
|
selected?: boolean;
|
|
9
10
|
disabled?: boolean;
|
|
10
11
|
};
|
|
12
|
+
/** A labelled group of options within a Select dropdown. */
|
|
11
13
|
export declare type Group<T> = {
|
|
12
14
|
id: string;
|
|
13
15
|
label: string;
|
|
14
16
|
options: Array<T>;
|
|
15
17
|
};
|
|
18
|
+
/** Base props shared by single and multi Select variants. */
|
|
16
19
|
interface BaseProps<T> {
|
|
20
|
+
/** HTML `id` for the select button. */
|
|
17
21
|
id?: string;
|
|
22
|
+
/** Accessible label for the select element. */
|
|
18
23
|
"aria-label"?: string;
|
|
24
|
+
/** List of selectable options or option groups. */
|
|
19
25
|
options: Array<T | Group<T>>;
|
|
26
|
+
/**
|
|
27
|
+
* Placeholder text shown when no value is selected.
|
|
28
|
+
* @default ""
|
|
29
|
+
*/
|
|
20
30
|
placeholder?: string;
|
|
31
|
+
/** HTML `name` attribute passed to the underlying Listbox. */
|
|
21
32
|
name?: string;
|
|
33
|
+
/** Additional class name for the select wrapper. */
|
|
22
34
|
className?: string;
|
|
23
35
|
/** `className` to be passed (and merged with default className) to `<Listbox.Options />` */
|
|
24
36
|
dropdownClassName?: string;
|
|
@@ -29,9 +41,11 @@ interface BaseProps<T> {
|
|
|
29
41
|
disabled?: boolean;
|
|
30
42
|
invalid?: boolean;
|
|
31
43
|
}) => string);
|
|
44
|
+
/** Whether the select element is disabled. */
|
|
32
45
|
disabled?: boolean;
|
|
46
|
+
/** Whether the select element is in an invalid state. */
|
|
33
47
|
invalid?: boolean;
|
|
34
|
-
/**
|
|
48
|
+
/** Tooltip of the select element. */
|
|
35
49
|
title?: string;
|
|
36
50
|
/**
|
|
37
51
|
* Function to render the content of the select element.
|
|
@@ -43,43 +57,63 @@ interface BaseProps<T> {
|
|
|
43
57
|
renderContent?(d: T | undefined | null, state: ItemState, placeholder?: string): ReactNode;
|
|
44
58
|
/**
|
|
45
59
|
* Loading state of the select element.
|
|
60
|
+
* @default false
|
|
46
61
|
*/
|
|
47
62
|
loading?: boolean;
|
|
48
63
|
/**
|
|
49
|
-
* Define which way the dropdown should open
|
|
64
|
+
* Define which way the dropdown should open.
|
|
50
65
|
*
|
|
51
66
|
* @default "auto"
|
|
52
67
|
*/
|
|
53
68
|
openingDirection?: "above" | "below" | "auto";
|
|
54
69
|
/**
|
|
55
|
-
* Maximum height of the dropdown in pixels
|
|
70
|
+
* Maximum height of the dropdown in pixels.
|
|
56
71
|
*/
|
|
57
72
|
maxHeight?: number;
|
|
58
73
|
/**
|
|
59
|
-
* Size of the select element
|
|
74
|
+
* Size of the select element.
|
|
60
75
|
*
|
|
61
76
|
* @default "md"
|
|
62
77
|
*/
|
|
63
78
|
size?: "md" | "lg";
|
|
64
79
|
}
|
|
80
|
+
/** Props for a single-value Select. */
|
|
65
81
|
interface SingleSelectionProps<T> extends BaseProps<T> {
|
|
82
|
+
/** Currently selected value. */
|
|
66
83
|
value: T | undefined | null;
|
|
84
|
+
/** Called when the selected value changes. */
|
|
67
85
|
onChange(d: T): void;
|
|
86
|
+
/** Must be `false` or omitted for single selection. */
|
|
68
87
|
multiple?: false;
|
|
69
88
|
}
|
|
89
|
+
/** Props for a multi-value Select. */
|
|
70
90
|
interface MultiSelectionProps<T> extends BaseProps<T> {
|
|
91
|
+
/** Currently selected values. */
|
|
71
92
|
value: T[] | undefined | null;
|
|
93
|
+
/** Called when the selected values change. */
|
|
72
94
|
onChange(d: T[]): void;
|
|
95
|
+
/** Must be `true` for multi selection. */
|
|
73
96
|
multiple: true;
|
|
97
|
+
/** Additional class name for multi-option pills. */
|
|
74
98
|
multiOptionClassName?: string;
|
|
75
99
|
}
|
|
100
|
+
/** Props for the Select component. */
|
|
76
101
|
export declare type SelectProps<T> = (SingleSelectionProps<T> | MultiSelectionProps<T>) & {
|
|
102
|
+
/** Ref forwarded to the select button element. */
|
|
77
103
|
buttonRef?: React.MutableRefObject<HTMLButtonElement | null>;
|
|
78
104
|
};
|
|
79
105
|
/**
|
|
80
|
-
* A
|
|
106
|
+
* A dropdown select with single and multi-value modes, grouped options, custom renderers, and keyboard navigation.
|
|
81
107
|
*
|
|
82
108
|
* Usage: `import { Select } from "@k8slens/lds"`
|
|
109
|
+
*
|
|
110
|
+
* ```tsx
|
|
111
|
+
* <Select
|
|
112
|
+
* options={[{ id: "1", label: "Option 1" }]}
|
|
113
|
+
* value={selected}
|
|
114
|
+
* onChange={setSelected}
|
|
115
|
+
* />
|
|
116
|
+
* ```
|
|
83
117
|
*/
|
|
84
118
|
export default function Select<T extends DefaultOption>({ id, "aria-label": ariaLabel, value, options, onChange, placeholder, name, invalid, disabled, className, dropdownClassName, itemClassName, renderContent, loading, title, openingDirection, maxHeight, multiple, size, ...selectProps }: SelectProps<T>): React.JSX.Element;
|
|
85
119
|
export {};
|
package/lib/cjs/Select/Select.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),t=require("react"),n=require("clsx"),a=require("@headlessui/react"),l=require("@k8slens/lds-icons"),r=require("../LoadingIndicator/LoadingIndicator.js"),i=require("./SelectDropdown.js"),o=require("./Option.js"),u=require("./MultiOption.js"),s=require("./Select.module.css.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=d(t),f=d(n),m=l.navigation.ArrowDownIcon,p=l.navigation.ArrowUpIcon;module.exports=function(n){var l=n.id,d=n["aria-label"],v=n.value,g=n.options,b=n.onChange,N=n.placeholder,h=void 0===N?"":N,E=n.name,y=n.invalid,C=n.disabled,A=n.className,R=n.dropdownClassName,q=n.itemClassName,w=n.renderContent,x=void 0===w?function(e,t,n){return e?e.label:n}:w,I=n.loading,L=n.title,_=n.openingDirection,j=n.maxHeight,D=n.multiple,k=n.size,B=e.__rest(n,["id","aria-label","value","options","onChange","placeholder","name","invalid","disabled","className","dropdownClassName","itemClassName","renderContent","loading","title","openingDirection","maxHeight","multiple","size"]),O=t.useRef(null),z=t.useRef(null),M=t.useRef([]),H=1===g.length;t.useEffect(
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),t=require("react"),n=require("clsx"),a=require("@headlessui/react"),l=require("@k8slens/lds-icons"),r=require("../LoadingIndicator/LoadingIndicator.js"),i=require("./SelectDropdown.js"),o=require("./Option.js"),u=require("./MultiOption.js"),s=require("./Select.module.css.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=d(t),f=d(n),m=l.navigation.ArrowDownIcon,p=l.navigation.ArrowUpIcon;module.exports=function(n){var l=n.id,d=n["aria-label"],v=n.value,g=n.options,b=n.onChange,N=n.placeholder,h=void 0===N?"":N,E=n.name,y=n.invalid,C=n.disabled,A=n.className,R=n.dropdownClassName,q=n.itemClassName,w=n.renderContent,x=void 0===w?function(e,t,n){return e?e.label:n}:w,I=n.loading,L=n.title,_=n.openingDirection,j=n.maxHeight,D=n.multiple,k=n.size,B=e.__rest(n,["id","aria-label","value","options","onChange","placeholder","name","invalid","disabled","className","dropdownClassName","itemClassName","renderContent","loading","title","openingDirection","maxHeight","multiple","size"]),O=t.useRef(null),z=t.useRef(null),M=t.useRef([]),H=1===g.length;t.useEffect(function(){var e,t;(null===(e=B.buttonRef)||void 0===e?void 0:e.current)&&(O.current=null===(t=B.buttonRef)||void 0===t?void 0:t.current)},[B.buttonRef]);var S=t.useMemo(function(){var t=function(e){return!D||!Array.isArray(v)||!v.some(function(t){return t.id===e.id})};return g.map(function(n){if("options"in n){var a=n.options.filter(function(e){return t(e)});return a.length>0?e.__assign(e.__assign({},n),{options:a}):null}return t(n)?n:null}).filter(function(e){return null!==e})},[D,g,v]),V=t.useMemo(function(){return D?Array.isArray(v)?v:[]:null===v?void 0:v},[D,v]),P=function(e){var t,n,N,E=e.open;return c.default.createElement("div",{className:f.default(s.select,A,(t={},t[s.invalid]=y,t[s.locked]=H,t[s.disabled]=C||I,t[s.open]=E,t))},c.default.createElement(a.ListboxButton,{id:l,ref:B.buttonRef?B.buttonRef:O,"aria-label":d,className:f.default(s.selectButton),title:L},c.default.createElement("span",{className:f.default(s.item,s.selectedItem,(n={},n[s.multiple]=D,n[s.disabled]=C||I,n[s.invalid]=y,n[s.placeholder]=!v,n[s.lg]="lg"===k,n),null!==(N="function"==typeof q?q({disabled:Boolean(C),invalid:Boolean(y)}):q)&&void 0!==N?N:"")},I?c.default.createElement(r,{className:s.loadingIndicator}):D&&Array.isArray(v)?c.default.createElement("span",{className:s.multiOptionContainer},v.map(function(e,t){return c.default.createElement(u,{ref:function(e){return M.current[t]=e},label:e.label,className:"multiOptionClassName"in B?B.multiOptionClassName:void 0,onRemove:function(n){n.stopPropagation();var a=v.filter(function(t){return t.id!==e.id});b(a),setTimeout(function(){var e,n,l=Math.min(t,a.length-1);a.length>0?null===(e=M.current[l])||void 0===e||e.focus():null===(n=O.current)||void 0===n||n.focus()},0)},onArrowNavigate:function(e){var n,a="next"===e?t+1:t-1;null===(n=M.current[a])||void 0===n||n.focus()},key:e.id},x(e,{invalid:y,disabled:C},h))})):x(v,{invalid:y,disabled:C},h)),E&&S.length>0?c.default.createElement(p,{className:s.dropDownIcon}):c.default.createElement(m,{className:s.dropDownIcon})),c.default.createElement(i,{listRef:z,buttonRef:O,openingDirection:_,maxHeight:j,grouped:g.some(function(e){return"options"in e})},c.default.createElement(a.ListboxOptions,{ref:z,className:f.default(s.dropdown,R)},S.length>0?S.map(function(e){var t;if("options"in e){var n="".concat(e.id,"-label");return c.default.createElement("li",{key:e.id,className:s.group,role:"group","aria-labelledby":n},c.default.createElement("span",{id:n,className:f.default(s.groupLabel,(t={},t[s.lg]="lg"===k,t))},e.label),c.default.createElement("ul",{className:s.groupList},e.options.map(function(e){return c.default.createElement(o,{key:e.id,option:e,currentValues:Array.isArray(v)?v:[v].filter(Boolean),size:k,itemClassName:q,renderContent:x,placeholder:h})})))}return c.default.createElement(o,{key:e.id,option:e,currentValues:Array.isArray(v)?v:[v].filter(Boolean),size:k,itemClassName:q,renderContent:x,placeholder:h})}):null)))};return D?c.default.createElement(a.Listbox,{value:V,onChange:b,name:E,disabled:C,multiple:!0},P):c.default.createElement(a.Listbox,{value:V,onChange:b,name:E,disabled:C,multiple:!1},P)};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var t=require("react"),e=require("@headlessui/react"),n=require("../node_modules/@k8slens/lds-tokens/lib/web/tokens.base.js"),r=require("../helpers.js");function o(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var a=o(t),i=r.convertRemToPixels(n.SpacingMd)||0;module.exports=function(n){var o=n.buttonRef,u=n.listRef,c=n.openingDirection,l=void 0===c?"auto":c,s=n.maxHeight,d=n.children,v=n.grouped,p=t.useCallback(
|
|
1
|
+
"use strict";var t=require("react"),e=require("@headlessui/react"),n=require("../node_modules/@k8slens/lds-tokens/lib/web/tokens.base.js"),r=require("../helpers.js");function o(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var a=o(t),i=r.convertRemToPixels(n.SpacingMd)||0;module.exports=function(n){var o=n.buttonRef,u=n.listRef,c=n.openingDirection,l=void 0===c?"auto":c,s=n.maxHeight,d=n.children,v=n.grouped,p=t.useCallback(function(){var t;if((null==u?void 0:u.current)&&o.current&&null===u.current.getAttribute("data-placement")){var e=r.getScrollableContainer(o.current),n=window.getComputedStyle(e),a=parseFloat(n.paddingTop),c=parseFloat(n.paddingBottom),d=o.current.getBoundingClientRect().height||0,v=o.current.getBoundingClientRect().width||0,p=(e.getBoundingClientRect().height||0)-a-c,m=e.getBoundingClientRect().top||0,g=(o.current.getBoundingClientRect().top||0)-m||m,f=g,b=p-g-d,h=(null===(t=u.current)||void 0===t?void 0:t.getBoundingClientRect().height)||0;if("auto"===l?"above"===(!(b>=h)&&f>1.5*b?"above":"below"):"above"===l){var y=f-i;u.current.setAttribute("data-placement","top"),u.current.style.top="auto",u.current.style.bottom="".concat(d,"px"),u.current.style.maxHeight="".concat(void 0!==s?Math.min(s,y):y,"px")}else{var x=b-i;u.current.setAttribute("data-placement","bottom"),u.current.style.bottom="auto",u.current.style.top="".concat(d,"px"),u.current.style.maxHeight="".concat(void 0!==s?Math.min(s,x):x,"px")}u.current.style.maxWidth="".concat(v,"px")}},[o,u,l,s]);return t.useEffect(function(){var t,e=u.current;if(e){var n=new MutationObserver(function(){var t;null===(t=null==u?void 0:u.current)||void 0===t||t.removeAttribute("data-placement"),p()});return n.observe(e,{childList:!0,subtree:null!=v&&v}),null===(t=null==u?void 0:u.current)||void 0===t||t.removeAttribute("data-placement"),p(),function(){n.disconnect()}}},[v,u,null==u?void 0:u.current,p]),a.default.createElement(e.Transition,{beforeEnter:function(){p()},afterLeave:function(){var t;null===(t=null==u?void 0:u.current)||void 0===t||t.removeAttribute("data-placement")},enter:"transition duration-75 ease-in-out",enterFrom:"transform scale-95 opacity-0",enterTo:"transform scale-100 opacity-100",leave:"transition duration-100 ease-in-out",leaveFrom:"transform scale-100 opacity-100",leaveTo:"transform scale-95 opacity-0"},d)};
|
|
@@ -4,16 +4,22 @@ import React, { HTMLProps } from "react";
|
|
|
4
4
|
*/
|
|
5
5
|
export declare type ChildKey = "__isChildOfSideNav";
|
|
6
6
|
export declare const CHILD_KEY: ChildKey;
|
|
7
|
+
/** Props for the SideNav component. */
|
|
7
8
|
export declare type SideNavProps = Omit<HTMLProps<HTMLDivElement>, "className"> & {
|
|
9
|
+
/** Optional class name. */
|
|
8
10
|
className?: string;
|
|
9
11
|
};
|
|
10
12
|
/**
|
|
11
|
-
* Side navigation
|
|
13
|
+
* Side navigation container. Use `SideNavGroup` with `SideNavItem` as direct children.
|
|
12
14
|
*
|
|
13
|
-
*
|
|
15
|
+
* Usage: `import { SideNav } from "@k8slens/lds"`
|
|
14
16
|
*
|
|
15
17
|
* ```tsx
|
|
16
|
-
*
|
|
18
|
+
* <SideNav>
|
|
19
|
+
* <SideNavGroup label="Settings">
|
|
20
|
+
* <SideNavItem active>General</SideNavItem>
|
|
21
|
+
* </SideNavGroup>
|
|
22
|
+
* </SideNav>
|
|
17
23
|
* ```
|
|
18
24
|
*/
|
|
19
25
|
declare const SideNav: React.FC<SideNavProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("clsx"),t=require("./SideNav.module.css.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=a(e),l=a(r),u="__isChildOfSideNav",d=function(r){var a=r.className,d=r.children,n=e.useMemo(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("clsx"),t=require("./SideNav.module.css.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=a(e),l=a(r),u="__isChildOfSideNav",d=function(r){var a=r.className,d=r.children,n=e.useMemo(function(){return"development"===process.env.NODE_ENV?i.default.Children.map(d,function(r){var t;return e.isValidElement(r)&&"SideNavGroup"===r.type.displayName?e.cloneElement(r,((t={})[u]=!0,t)):r}):d},[d]);return i.default.createElement("div",{className:l.default(t.sideNav,a)},n)};d.displayName="SideNav",exports.CHILD_KEY=u,exports.default=d;
|
|
@@ -5,17 +5,20 @@ import type { ExtractProps } from "../types/ExtractProps.d";
|
|
|
5
5
|
*/
|
|
6
6
|
export declare type ChildKey = "__isChildOfSideNavGroup";
|
|
7
7
|
export declare const CHILD_KEY: ChildKey;
|
|
8
|
+
/** Props for the SideNavGroup component. */
|
|
8
9
|
export interface SideNavGroupProps<Component extends React.ElementType | keyof JSX.IntrinsicElements = "nav"> {
|
|
9
10
|
/**
|
|
10
|
-
* Component to be used instead of nav
|
|
11
|
+
* Component to be used instead of nav.
|
|
12
|
+
* @default "nav"
|
|
11
13
|
*/
|
|
12
14
|
component?: Component;
|
|
13
|
-
/**
|
|
14
|
-
* Props for the component passed as `component` prop
|
|
15
|
-
*/
|
|
15
|
+
/** Props forwarded to the component passed as `component` prop. */
|
|
16
16
|
componentProps?: Omit<ExtractProps<Component>, "id" | "className" | "children" | "aria-labelledby" | "aria-label">;
|
|
17
|
+
/** HTML `id` attribute. */
|
|
17
18
|
id?: string;
|
|
19
|
+
/** Optional class name. */
|
|
18
20
|
className?: string;
|
|
21
|
+
/** Child elements, should be `SideNavItem` components. */
|
|
19
22
|
children?: React.ReactNode;
|
|
20
23
|
}
|
|
21
24
|
export interface SideNavGroupPropsWithLabel<Component extends React.ElementType | keyof JSX.IntrinsicElements = "nav"> extends SideNavGroupProps<Component> {
|
|
@@ -27,8 +30,13 @@ export interface SideNavGroupPropsWithoutLabel<Component extends React.ElementTy
|
|
|
27
30
|
/**
|
|
28
31
|
* Side navigation group, use as a direct child of `SideNav`.
|
|
29
32
|
*
|
|
33
|
+
* Usage: `import { SideNavGroup } from "@k8slens/lds"`
|
|
34
|
+
*
|
|
30
35
|
* ```tsx
|
|
31
|
-
*
|
|
36
|
+
* <SideNavGroup label="Settings">
|
|
37
|
+
* <SideNavItem href="/general">General</SideNavItem>
|
|
38
|
+
* <SideNavItem href="/security">Security</SideNavItem>
|
|
39
|
+
* </SideNavGroup>
|
|
32
40
|
* ```
|
|
33
41
|
*/
|
|
34
42
|
declare function SideNavGroup<C extends keyof JSX.IntrinsicElements | React.ElementType = "nav">({ component, componentProps, id, className, children, ...props }: SideNavGroupPropsWithLabel<C> | SideNavGroupPropsWithoutLabel<C>): React.JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../_virtual/_tslib.js"),a=require("react"),l=require("clsx"),r=require("./SideNav.js"),i=require("./unique-id.js"),n=require("./SideNavGroup.module.css.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=t(a),o=t(l),s="__isChildOfSideNavGroup";function u(l){var t=l.component,u=l.componentProps,c=l.id,p=l.className,v=l.children,m=e.__rest(l,["component","componentProps","id","className","children"]),N=t||"nav",f="label"in m?m.label:void 0,_=a.useMemo(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../_virtual/_tslib.js"),a=require("react"),l=require("clsx"),r=require("./SideNav.js"),i=require("./unique-id.js"),n=require("./SideNavGroup.module.css.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=t(a),o=t(l),s="__isChildOfSideNavGroup";function u(l){var t=l.component,u=l.componentProps,c=l.id,p=l.className,v=l.children,m=e.__rest(l,["component","componentProps","id","className","children"]),N=t||"nav",f="label"in m?m.label:void 0,_=a.useMemo(function(){return c?"".concat(c,"-label"):"lds-nav-group-label-".concat(i())},[c]);r.CHILD_KEY in m&&!0===m[r.CHILD_KEY]||"development"!==process.env.NODE_ENV||console.warn("SideNavGroup should be a direct child of SideNav");var b=a.useMemo(function(){return"development"===process.env.NODE_ENV?d.default.Children.map(v,function(e){var l;return a.isValidElement(e)&&"SideNavItem"===e.type.displayName?a.cloneElement(e,((l={})[s]=!0,l)):(a.isValidElement(e)&&"SideNavItem"!==e.type.displayName&&console.warn("SideNavGroup should only have SideNavItem as direct children"),e)}):v},[v]);return d.default.createElement(N,e.__assign({},u,{id:c,className:o.default(n.sideNavGroup,p)},f?{"aria-labelledby":_}:{},"aria-label"in m?{"aria-label":m["aria-label"]}:{}),f&&d.default.createElement("span",{id:_,className:o.default("lds-h3",n.label)},f),b)}u.displayName="SideNavGroup",exports.CHILD_KEY=s,exports.default=u;
|
|
@@ -1,30 +1,47 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { ExtractProps } from "../types/ExtractProps.d";
|
|
3
3
|
export declare type Type = "default" | "danger";
|
|
4
|
+
/** Props for the SideNavItem component. */
|
|
4
5
|
export interface SideNavItemProps<Component extends React.ElementType | keyof JSX.IntrinsicElements = "a"> {
|
|
5
6
|
/**
|
|
6
|
-
* Component to be used instead of anchor, for example `Link` when used with [react-router](https://reactrouter.com/en/main/components/link)
|
|
7
|
+
* Component to be used instead of anchor, for example `Link` when used with [react-router](https://reactrouter.com/en/main/components/link).
|
|
8
|
+
* @default "a"
|
|
7
9
|
*/
|
|
8
10
|
component?: Component;
|
|
11
|
+
/** Props forwarded to the component passed as `component` prop. */
|
|
12
|
+
componentProps?: Omit<ExtractProps<Component>, "children" | "className" | "aria-disabled">;
|
|
9
13
|
/**
|
|
10
|
-
*
|
|
14
|
+
* Whether the item is disabled.
|
|
15
|
+
* @default false
|
|
11
16
|
*/
|
|
12
|
-
componentProps?: Omit<ExtractProps<Component>, "children" | "className" | "aria-disabled">;
|
|
13
17
|
disabled?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Whether the item is currently active (sets `aria-current="page"`).
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
14
22
|
active?: boolean;
|
|
23
|
+
/** Child content. */
|
|
15
24
|
children?: React.ReactNode;
|
|
25
|
+
/** Optional class name. */
|
|
16
26
|
className?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Visual style type.
|
|
29
|
+
* @default "default"
|
|
30
|
+
*/
|
|
17
31
|
type?: Type;
|
|
18
32
|
/**
|
|
19
|
-
* If true, renders a visual indication of an external link
|
|
33
|
+
* If true, renders a visual indication of an external link.
|
|
34
|
+
* @default false
|
|
20
35
|
*/
|
|
21
36
|
externalLink?: boolean;
|
|
22
37
|
}
|
|
23
38
|
/**
|
|
24
39
|
* Side navigation item, use as a direct child of `SideNavGroup`.
|
|
25
40
|
*
|
|
41
|
+
* Usage: `import { SideNavItem } from "@k8slens/lds"`
|
|
42
|
+
*
|
|
26
43
|
* ```tsx
|
|
27
|
-
*
|
|
44
|
+
* <SideNavItem active href="/settings">Settings</SideNavItem>
|
|
28
45
|
* ```
|
|
29
46
|
*/
|
|
30
47
|
declare function SideNavItem<C extends keyof JSX.IntrinsicElements | React.ElementType = "a">({ component, componentProps, active, disabled, className, children, type, externalLink, ...props }: SideNavItemProps<C>): React.JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react"),t=require("clsx"),r=require("./SideNavItem.module.css.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=i(a),s=i(t);function l(t){var i,l=t.component,c=t.componentProps,d=t.active,u=t.disabled,o=t.className,m=t.children,p=t.type,v=void 0===p?"default":p,f=t.externalLink;e.__rest(t,["component","componentProps","active","disabled","className","children","type","externalLink"]);var N=l||"a",b=a.useMemo(
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react"),t=require("clsx"),r=require("./SideNavItem.module.css.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=i(a),s=i(t);function l(t){var i,l=t.component,c=t.componentProps,d=t.active,u=t.disabled,o=t.className,m=t.children,p=t.type,v=void 0===p?"default":p,f=t.externalLink;e.__rest(t,["component","componentProps","active","disabled","className","children","type","externalLink"]);var N=l||"a",b=a.useMemo(function(){return c&&"aria-current"in c||!d?{}:{"aria-current":"page"}},[d,c]);return n.default.createElement(N,e.__assign({},c,{className:s.default(r.sideNavItem,o,(i={},i[r.disabled]=u,i[r.active]=d,i[r.external]=f,i[r[v]]="default"!==v,i)),"aria-disabled":u},b),m)}l.displayName="SideNavItem",module.exports=l;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { ChangeEvent, HTMLProps } from "react";
|
|
2
2
|
import React from "react";
|
|
3
|
+
/** Props for the Switch component. */
|
|
3
4
|
export interface SwitchProps extends Omit<HTMLProps<HTMLInputElement>, "onChange"> {
|
|
5
|
+
/** Change handler receiving the new checked state and the original event. */
|
|
4
6
|
onChange?: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;
|
|
5
7
|
}
|
|
6
8
|
/**
|
package/lib/cjs/Table/Table.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../_virtual/_tslib.js"),a=require("react"),t=require("clsx"),r=require("@k8slens/lds-icons"),l=require("./Table.module.css.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(a),i=n(t),d=r.navigation.ArrowUpIcon,o=r.navigation.ArrowDownIcon,c=a.createContext({responsive:!0}),u=function(a){var t=a.visibility,r=void 0===t?"sr-only":t,n=a.className,d=a.children,o=e.__rest(a,["visibility","className","children"]);return s.default.createElement("caption",e.__assign({},o,{className:i.default(l.caption,n,{"lds-only-aria":"sr-only"===r}),hidden:"hidden"===r||void 0}),d)},v=function(a){var t=a.children,r=e.__rest(a,["children"]);return s.default.createElement("thead",e.__assign({},r),t)},f=function(a){var t=a.loading,r=void 0!==t&&t,l=a.children,n=e.__rest(a,["loading","children"]);return s.default.createElement("tbody",e.__assign({},n,{"aria-busy":r||void 0}),l)},m=function(a){var t,r=a.error,n=void 0!==r&&r,d=a.className,o=a.children,c=e.__rest(a,["error","className","children"]);return s.default.createElement("tr",e.__assign({},c,{className:i.default(l.row,d,(t={},t[l.rowError]=n,t))}),o)},_=function(a){var t,r,n,c=a.align,u=a.sortable,v=void 0!==u&&u,f=a.sorted,m=void 0!==f&&f,_=a.className,p=a.children,b=e.__rest(a,["align","sortable","sorted","className","children"]),h="center"===c?l.center:"end"===c?l.end:void 0;return s.default.createElement("th",e.__assign({},b,{scope:null!==(n=b.scope)&&void 0!==n?n:"col","aria-sort":"asc"===m?"ascending":"desc"===m?"descending":void 0,className:i.default(l.tableHeader,_,h,(t={},t[l.sortable]=v,t))}),s.default.createElement("span",null,p,v&&("asc"===m?s.default.createElement(d,{className:l.sortIcon}):s.default.createElement(o,{className:i.default(l.sortIcon,(r={},r[l.inactive]=!m,r))}))))},p={accent:l.textAccent,secondary:l.textSecondary,tertiary:l.textTertiary,quarternary:l.textQuarternary,default:l.textDefault},b=function(t){var r=t.primary,n=void 0!==r&&r,d=t.align,o=t.textStyle,u=t.responsiveHeader,v=t.className,f=t.children,m=e.__rest(t,["primary","align","textStyle","responsiveHeader","className","children"]),_=a.useContext(c).responsive,b=n?"th":"td",h="center"===d?l.center:"end"===d?l.end:void 0,y=o?p[o]:void 0;return s.default.createElement(b,e.__assign({},m,n?{scope:"row"}:{},{className:i.default(l.tableCell,v,h,y)}),_&&null!=u&&s.default.createElement("div",{"aria-hidden":!0,className:l.cellHeader},u),f)},h=function(a){var t=a.colSpan,r=a.children,n=e.__rest(a,["colSpan","children"]);return s.default.createElement("tr",e.__assign({},n),s.default.createElement("td",{colSpan:t},s.default.createElement("div",{className:l.noData},r)))},y=Object.assign(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../_virtual/_tslib.js"),a=require("react"),t=require("clsx"),r=require("@k8slens/lds-icons"),l=require("./Table.module.css.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(a),i=n(t),d=r.navigation.ArrowUpIcon,o=r.navigation.ArrowDownIcon,c=a.createContext({responsive:!0}),u=function(a){var t=a.visibility,r=void 0===t?"sr-only":t,n=a.className,d=a.children,o=e.__rest(a,["visibility","className","children"]);return s.default.createElement("caption",e.__assign({},o,{className:i.default(l.caption,n,{"lds-only-aria":"sr-only"===r}),hidden:"hidden"===r||void 0}),d)},v=function(a){var t=a.children,r=e.__rest(a,["children"]);return s.default.createElement("thead",e.__assign({},r),t)},f=function(a){var t=a.loading,r=void 0!==t&&t,l=a.children,n=e.__rest(a,["loading","children"]);return s.default.createElement("tbody",e.__assign({},n,{"aria-busy":r||void 0}),l)},m=function(a){var t,r=a.error,n=void 0!==r&&r,d=a.className,o=a.children,c=e.__rest(a,["error","className","children"]);return s.default.createElement("tr",e.__assign({},c,{className:i.default(l.row,d,(t={},t[l.rowError]=n,t))}),o)},_=function(a){var t,r,n,c=a.align,u=a.sortable,v=void 0!==u&&u,f=a.sorted,m=void 0!==f&&f,_=a.className,p=a.children,b=e.__rest(a,["align","sortable","sorted","className","children"]),h="center"===c?l.center:"end"===c?l.end:void 0;return s.default.createElement("th",e.__assign({},b,{scope:null!==(n=b.scope)&&void 0!==n?n:"col","aria-sort":"asc"===m?"ascending":"desc"===m?"descending":void 0,className:i.default(l.tableHeader,_,h,(t={},t[l.sortable]=v,t))}),s.default.createElement("span",null,p,v&&("asc"===m?s.default.createElement(d,{className:l.sortIcon}):s.default.createElement(o,{className:i.default(l.sortIcon,(r={},r[l.inactive]=!m,r))}))))},p={accent:l.textAccent,secondary:l.textSecondary,tertiary:l.textTertiary,quarternary:l.textQuarternary,default:l.textDefault},b=function(t){var r=t.primary,n=void 0!==r&&r,d=t.align,o=t.textStyle,u=t.responsiveHeader,v=t.className,f=t.children,m=e.__rest(t,["primary","align","textStyle","responsiveHeader","className","children"]),_=a.useContext(c).responsive,b=n?"th":"td",h="center"===d?l.center:"end"===d?l.end:void 0,y=o?p[o]:void 0;return s.default.createElement(b,e.__assign({},m,n?{scope:"row"}:{},{className:i.default(l.tableCell,v,h,y)}),_&&null!=u&&s.default.createElement("div",{"aria-hidden":!0,className:l.cellHeader},u),f)},h=function(a){var t=a.colSpan,r=a.children,n=e.__rest(a,["colSpan","children"]);return s.default.createElement("tr",e.__assign({},n),s.default.createElement("td",{colSpan:t},s.default.createElement("div",{className:l.noData},r)))},y=Object.assign(function(a){var t,r=a.responsive,n=void 0===r||r,d=a.bordered,o=void 0!==d&&d,u=a.className,v=a.children,f=e.__rest(a,["responsive","bordered","className","children"]);return s.default.createElement(c.Provider,{value:{responsive:n}},s.default.createElement("table",e.__assign({},f,{className:i.default(l.table,u,(t={},t[l.bordered]=o,t[l.responsive]=n,t))}),v))},{Caption:u,Head:v,Body:f,Row:m,HeaderCell:_,Cell:b,StatusRow:h});exports.TableBody=f,exports.TableCaption=u,exports.TableCell=b,exports.TableHead=v,exports.TableHeaderCell=_,exports.TableRow=m,exports.TableStatusRow=h,exports.default=y;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),t=require("react"),a=require("clsx"),l=require("./Textarea.module.css.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(t),r=n(a),s=t.forwardRef(
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),t=require("react"),a=require("clsx"),l=require("./Textarea.module.css.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(t),r=n(a),s=t.forwardRef(function(a,n){var s,c,i=a.icon,o=a.autoResize,f=void 0!==o&&o,g=a.wrapperProps,d=a.maxLength,p=a.className,h=a.onChange,m=a.value,v=a.defaultValue,x=e.__rest(a,["icon","autoResize","wrapperProps","maxLength","className","onChange","value","defaultValue"]),_=t.useRef(null),y=t.useState(function(){return"string"==typeof m?m.length:"string"==typeof v?v.length:0}),N=y[0],C=y[1],E=t.useCallback(function(e){_.current=e,"function"==typeof n?n(e):n&&(n.current=e)},[n]),b=t.useCallback(function(){var e=_.current;e&&f&&(e.style.height="auto",e.style.height="".concat(e.scrollHeight,"px"))},[f]);t.useEffect(function(){b()},[m,b]),t.useEffect(function(){"string"==typeof m&&null!=d&&C(m.length)},[m,d]);var w=t.useCallback(function(e){null!=d&&C(e.target.value.length),b(),null==h||h(e)},[h,b,d]);return u.default.createElement("div",e.__assign({},g,{className:r.default(l.wrapper,null==g?void 0:g.className,(s={},s[l.withIcon]=i,s))}),u.default.createElement("textarea",e.__assign({ref:E},x,{value:m,defaultValue:v,maxLength:d,onChange:w,className:r.default(l.textarea,p,(c={},c[l.autoResize]=f,c))})),i&&u.default.createElement(i,{className:l.icon}),null!=d&&u.default.createElement("span",{className:l.counter,"aria-live":"polite"},N,"/",d))});module.exports=s;
|
|
@@ -1,25 +1,37 @@
|
|
|
1
1
|
import React, { type HTMLAttributes, type ReactElement } from "react";
|
|
2
2
|
import { type Placement } from "@popperjs/core";
|
|
3
|
+
/** Props for the Tooltip component. */
|
|
3
4
|
export interface TooltipProps {
|
|
4
5
|
/**
|
|
5
|
-
* Popper placement
|
|
6
|
+
* Popper placement of the tooltip popup.
|
|
7
|
+
* @default "auto"
|
|
6
8
|
*/
|
|
7
9
|
placement?: Placement;
|
|
8
10
|
/**
|
|
9
|
-
* Which element to listen for mutations on
|
|
11
|
+
* Which element to listen for DOM mutations on to reposition the tooltip.
|
|
12
|
+
* @default document.body
|
|
10
13
|
*/
|
|
11
14
|
mutationsListenerElement?: HTMLElement;
|
|
12
15
|
/**
|
|
13
|
-
* Wrapper element type
|
|
16
|
+
* Wrapper element type used around the children.
|
|
17
|
+
* @default "span"
|
|
14
18
|
*/
|
|
15
19
|
wrapper?: "span" | "div";
|
|
20
|
+
/** Additional class name for the tooltip popup element. */
|
|
16
21
|
popupClassName?: string;
|
|
22
|
+
/** Content displayed inside the tooltip popup. */
|
|
17
23
|
text?: ReactElement | string;
|
|
24
|
+
/**
|
|
25
|
+
* Whether the tooltip is always visible (ignores hover/focus).
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
18
28
|
alwaysVisible?: boolean;
|
|
19
29
|
}
|
|
30
|
+
/** Props when the Tooltip wrapper is a `<span>` element (default). */
|
|
20
31
|
export interface SpanTooltipProps extends Omit<HTMLAttributes<HTMLSpanElement>, "onFocus" | "onBlur" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "aria-describedby">, TooltipProps {
|
|
21
32
|
wrapper?: "span";
|
|
22
33
|
}
|
|
34
|
+
/** Props when the Tooltip wrapper is a `<div>` element. */
|
|
23
35
|
export interface DivTooltipProps extends Omit<HTMLAttributes<HTMLDivElement>, "onFocus" | "onBlur" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "aria-describedby">, TooltipProps {
|
|
24
36
|
wrapper: "div";
|
|
25
37
|
}
|