@webiny/admin-ui 6.5.0-beta.0 → 6.5.0-beta.10
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/Command/components/List.d.ts +1 -1
- package/Command/components/List.js +9 -5
- package/Command/components/List.js.map +1 -1
- package/DataTable/DataTable.d.ts +16 -6
- package/DataTable/DataTable.js +14 -6
- package/DataTable/DataTable.js.map +1 -1
- package/DataTable/components/ColumnsVisibility.d.ts +5 -4
- package/DataTable/components/ColumnsVisibility.js +6 -3
- package/DataTable/components/ColumnsVisibility.js.map +1 -1
- package/DatePicker/primitives/DateOnlyPicker.js +2 -2
- package/DatePicker/primitives/DateOnlyPicker.js.map +1 -1
- package/DatePicker/primitives/DateRangePicker.js +3 -3
- package/DatePicker/primitives/DateRangePicker.js.map +1 -1
- package/DatePicker/primitives/DateTimePicker.js +8 -7
- package/DatePicker/primitives/DateTimePicker.js.map +1 -1
- package/DatePicker/primitives/MultipleDatesPicker.js +3 -3
- package/DatePicker/primitives/MultipleDatesPicker.js.map +1 -1
- package/DatePicker/utils/dateHelpers.d.ts +5 -0
- package/DatePicker/utils/dateHelpers.js +11 -4
- package/DatePicker/utils/dateHelpers.js.map +1 -1
- package/DatePicker/utils/dateHelpers.test.d.ts +1 -0
- package/DatePicker/utils/dateHelpers.test.js +32 -0
- package/DatePicker/utils/dateHelpers.test.js.map +1 -0
- package/Drawer/Drawer.d.ts +10 -6
- package/Drawer/Drawer.js +2 -1
- package/Drawer/Drawer.js.map +1 -1
- package/Drawer/Drawer.stories.d.ts +1 -0
- package/Drawer/Drawer.stories.js +20 -2
- package/Drawer/Drawer.stories.js.map +1 -1
- package/Drawer/components/DrawerHeader.d.ts +2 -2
- package/Drawer/components/DrawerHeader.js +11 -8
- package/Drawer/components/DrawerHeader.js.map +1 -1
- package/Drawer/components/Icon.d.ts +1 -1
- package/Drawer/components/Icon.js +3 -4
- package/Drawer/components/Icon.js.map +1 -1
- package/FilePicker/FilePicker.stories.d.ts +6 -0
- package/FilePicker/FilePicker.stories.js +24 -1
- package/FilePicker/FilePicker.stories.js.map +1 -1
- package/FilePicker/primitives/components/previews/ItemActions.js.map +1 -1
- package/FilePicker/primitives/components/previews/ItemDescription.js +1 -1
- package/FilePicker/primitives/components/previews/ItemDescription.js.map +1 -1
- package/FilePicker/primitives/components/previews/RichItemPreview/FileType.d.ts +4 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/FileType.js.map +1 -1
- package/FilePicker/primitives/components/previews/RichItemPreview/Placeholder.d.ts +3 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/Placeholder.js.map +1 -1
- package/FilePicker/primitives/components/previews/RichItemPreview/RichItemPreview.js.map +1 -1
- package/FilePicker/primitives/components/previews/RichItemPreview/Thumbnail.d.ts +4 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/Thumbnail.js.map +1 -1
- package/FilePicker/primitives/components/previews/RichItemPreview/ThumbnailActions.d.ts +5 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/ThumbnailActions.js.map +1 -1
- package/FilePicker/primitives/components/previews/TruncatedFileName.d.ts +4 -0
- package/FilePicker/primitives/components/previews/TruncatedFileName.js.map +1 -1
- package/FilePicker/primitives/components/previews/fileName.d.ts +8 -0
- package/FilePicker/primitives/components/previews/fileName.js.map +1 -1
- package/IconPicker/domains/IconPickerIcon.js +1 -1
- package/IconPicker/domains/IconPickerIcon.js.map +1 -1
- package/IconPicker/primitives/IconPickerPrimitive.js +1 -2
- package/IconPicker/primitives/IconPickerPrimitive.js.map +1 -1
- package/ImageEditor/types.js +1 -1
- package/ImageEditor/types.js.map +1 -1
- package/MultiAutoComplete/primitives/presenters/MultiAutoCompletePresenter.test.js +1 -1
- package/MultiAutoComplete/primitives/presenters/MultiAutoCompletePresenter.test.js.map +1 -1
- package/MultiAutoComplete/primitives/useMultiAutoComplete.js +3 -2
- package/MultiAutoComplete/primitives/useMultiAutoComplete.js.map +1 -1
- package/MultiSelect/primitives/MultiSelectPrimitive.js +12 -5
- package/MultiSelect/primitives/MultiSelectPrimitive.js.map +1 -1
- package/Popover/Popover.stories.d.ts +7 -0
- package/Popover/Popover.stories.js +24 -1
- package/Popover/Popover.stories.js.map +1 -1
- package/Popover/primitives/components/PopoverContent.js +6 -1
- package/Popover/primitives/components/PopoverContent.js.map +1 -1
- package/ScrollArea/ScrollArea.d.ts +12 -2
- package/ScrollArea/ScrollArea.js +11 -4
- package/ScrollArea/ScrollArea.js.map +1 -1
- package/Select/primitives/components/SelectContent.js +4 -6
- package/Select/primitives/components/SelectContent.js.map +1 -1
- package/Tabs/Tabs.d.ts +7 -2
- package/Tabs/Tabs.js +29 -11
- package/Tabs/Tabs.js.map +1 -1
- package/Tabs/Tabs.mdx +27 -0
- package/Tabs/Tabs.stories.d.ts +1 -0
- package/Tabs/Tabs.stories.js +19 -1
- package/Tabs/Tabs.stories.js.map +1 -1
- package/Toast/useToast.stories.js.map +1 -1
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +1 -0
- package/hooks/useEscapeScrollLock.d.ts +13 -0
- package/hooks/useEscapeScrollLock.js +21 -0
- package/hooks/useEscapeScrollLock.js.map +1 -0
- package/package.json +26 -26
- package/theme.css +28 -0
package/Tabs/Tabs.d.ts
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Tabs as TabsPrimitive } from "radix-ui";
|
|
3
3
|
import { type VariantProps } from "../utils.js";
|
|
4
|
-
import type { TabProps
|
|
4
|
+
import type { TabProps } from "./components/index.js";
|
|
5
|
+
import { tabListVariants } from "./components/index.js";
|
|
5
6
|
interface TabsProps extends Omit<TabsPrimitive.TabsProps, "children"> {
|
|
6
7
|
tabs: React.ReactElement<TabProps>[];
|
|
7
8
|
size?: VariantProps<typeof tabListVariants>["size"];
|
|
8
9
|
spacing?: VariantProps<typeof tabListVariants>["spacing"];
|
|
9
10
|
separator?: VariantProps<typeof tabListVariants>["separator"];
|
|
10
11
|
loading?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Controls rendered at the end of the tab row, e.g. a filter checkbox or a button.
|
|
14
|
+
*/
|
|
15
|
+
actions?: React.ReactNode;
|
|
11
16
|
}
|
|
12
|
-
declare const DecoratableTabs: ({ defaultValue: initialValue, size, spacing, separator, loading, tabs: tabComponents, ...props }: TabsProps) => React.JSX.Element;
|
|
17
|
+
declare const DecoratableTabs: ({ defaultValue: initialValue, size, spacing, separator, loading, actions, tabs: tabComponents, ...props }: TabsProps) => React.JSX.Element;
|
|
13
18
|
declare const Tabs: typeof DecoratableTabs & {
|
|
14
19
|
original: typeof DecoratableTabs;
|
|
15
20
|
originalName: string;
|
package/Tabs/Tabs.js
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
import react, { useMemo, useState } from "react";
|
|
2
2
|
import { Tabs } from "radix-ui";
|
|
3
|
-
import { makeDecoratable, withStaticProps } from "../utils.js";
|
|
4
|
-
import { Content, List, Tab, TabsContext, Trigger } from "./components/index.js";
|
|
3
|
+
import { cn, makeDecoratable, withStaticProps } from "../utils.js";
|
|
4
|
+
import { Content, List, Tab, TabsContext, Trigger, tabListVariants } from "./components/index.js";
|
|
5
5
|
const Root = Tabs.Root;
|
|
6
|
-
const DecoratableTabs = ({ defaultValue: initialValue, size, spacing, separator, loading, tabs: tabComponents, ...props })=>{
|
|
6
|
+
const DecoratableTabs = ({ defaultValue: initialValue, size, spacing, separator, loading, actions, tabs: tabComponents, ...props })=>{
|
|
7
7
|
const [tabs, setTabs] = useState([]);
|
|
8
8
|
const defaultValue = useMemo(()=>initialValue || tabComponents.find((tab)=>!tab.props.disabled && false !== tab.props.visible)?.props.value, [
|
|
9
9
|
initialValue,
|
|
10
10
|
tabComponents
|
|
11
11
|
]);
|
|
12
|
-
const triggers = useMemo(()
|
|
13
|
-
|
|
14
|
-
size: size,
|
|
15
|
-
spacing: spacing,
|
|
16
|
-
separator: separator
|
|
17
|
-
}, tabs.map((tab)=>/*#__PURE__*/ react.createElement(Trigger, {
|
|
12
|
+
const triggers = useMemo(()=>{
|
|
13
|
+
const triggerList = tabs.map((tab)=>/*#__PURE__*/ react.createElement(Trigger, {
|
|
18
14
|
"data-testid": tab["data-testid"],
|
|
19
15
|
disabled: tab.disabled,
|
|
20
16
|
icon: tab.icon,
|
|
@@ -24,12 +20,34 @@ const DecoratableTabs = ({ defaultValue: initialValue, size, spacing, separator,
|
|
|
24
20
|
text: tab.trigger,
|
|
25
21
|
value: tab.value,
|
|
26
22
|
visible: tab.visible
|
|
27
|
-
}))
|
|
23
|
+
}));
|
|
24
|
+
const listKey = tabs.map((tab)=>tab.id).join(";");
|
|
25
|
+
if (!actions) return /*#__PURE__*/ react.createElement(List, {
|
|
26
|
+
key: listKey,
|
|
27
|
+
size: size,
|
|
28
|
+
spacing: spacing,
|
|
29
|
+
separator: separator
|
|
30
|
+
}, triggerList);
|
|
31
|
+
return /*#__PURE__*/ react.createElement("div", {
|
|
32
|
+
className: cn(tabListVariants({
|
|
33
|
+
size,
|
|
34
|
+
spacing,
|
|
35
|
+
separator
|
|
36
|
+
}))
|
|
37
|
+
}, /*#__PURE__*/ react.createElement(List, {
|
|
38
|
+
key: listKey,
|
|
39
|
+
size: size,
|
|
40
|
+
className: "w-auto"
|
|
41
|
+
}, triggerList), /*#__PURE__*/ react.createElement("div", {
|
|
42
|
+
className: "ml-auto flex items-center gap-sm"
|
|
43
|
+
}, actions));
|
|
44
|
+
}, [
|
|
28
45
|
tabs,
|
|
29
46
|
size,
|
|
30
47
|
spacing,
|
|
31
48
|
separator,
|
|
32
|
-
loading
|
|
49
|
+
loading,
|
|
50
|
+
actions
|
|
33
51
|
]);
|
|
34
52
|
const contents = useMemo(()=>tabs.map((tab)=>/*#__PURE__*/ react.createElement(Content, {
|
|
35
53
|
key: tab.id,
|
package/Tabs/Tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs/Tabs.js","sources":["../../src/Tabs/Tabs.tsx"],"sourcesContent":["import React, { useMemo, useState } from \"react\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport { makeDecoratable, type VariantProps, withStaticProps } from \"~/utils.js\";\nimport type { ITabsContext, TabItem, TabProps
|
|
1
|
+
{"version":3,"file":"Tabs/Tabs.js","sources":["../../src/Tabs/Tabs.tsx"],"sourcesContent":["import React, { useMemo, useState } from \"react\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport { cn, makeDecoratable, type VariantProps, withStaticProps } from \"~/utils.js\";\nimport type { ITabsContext, TabItem, TabProps } from \"./components/index.js\";\nimport { Content, List, Tab, TabsContext, Trigger, tabListVariants } from \"./components/index.js\";\n\nconst Root = TabsPrimitive.Root;\n\ninterface TabsProps extends Omit<TabsPrimitive.TabsProps, \"children\"> {\n tabs: React.ReactElement<TabProps>[];\n size?: VariantProps<typeof tabListVariants>[\"size\"];\n spacing?: VariantProps<typeof tabListVariants>[\"spacing\"];\n separator?: VariantProps<typeof tabListVariants>[\"separator\"];\n loading?: boolean;\n /**\n * Controls rendered at the end of the tab row, e.g. a filter checkbox or a button.\n */\n actions?: React.ReactNode;\n}\n\nconst DecoratableTabs = ({\n defaultValue: initialValue,\n size,\n spacing,\n separator,\n loading,\n actions,\n tabs: tabComponents,\n ...props\n}: TabsProps) => {\n const [tabs, setTabs] = useState<TabItem[]>([]);\n\n const defaultValue = useMemo(() => {\n return (\n initialValue ||\n tabComponents.find(tab => !tab.props.disabled && tab.props.visible !== false)?.props\n .value\n );\n }, [initialValue, tabComponents]);\n\n const triggers = useMemo(() => {\n const triggerList = tabs.map(tab => (\n <Trigger\n data-testid={tab[\"data-testid\"]}\n disabled={tab.disabled}\n icon={tab.icon}\n key={tab.id}\n loading={loading}\n size={size}\n text={tab.trigger}\n value={tab.value}\n visible={tab.visible}\n />\n ));\n const listKey = tabs.map(tab => tab.id).join(\";\");\n\n if (!actions) {\n return (\n <List key={listKey} size={size} spacing={spacing} separator={separator}>\n {triggerList}\n </List>\n );\n }\n\n // Actions sit outside the tablist, so arrow keys only move between tabs.\n return (\n <div className={cn(tabListVariants({ size, spacing, separator }))}>\n <List key={listKey} size={size} className={\"w-auto\"}>\n {triggerList}\n </List>\n <div className={\"ml-auto flex items-center gap-sm\"}>{actions}</div>\n </div>\n );\n }, [tabs, size, spacing, separator, loading, actions]);\n\n const contents = useMemo(\n () =>\n tabs.map(tab => (\n <Content\n key={tab.id}\n value={tab.value}\n content={tab.content}\n spacing={tab.spacing ?? spacing}\n className={tab.className}\n />\n )),\n [tabs, spacing]\n );\n\n const context: ITabsContext = useMemo(\n () => ({\n addTab(props) {\n setTabs(tabs => {\n const existingIndex = tabs.findIndex(tab => tab.value === props.value);\n if (existingIndex > -1) {\n return [\n ...tabs.slice(0, existingIndex),\n props,\n ...tabs.slice(existingIndex + 1)\n ];\n }\n return [...tabs, props];\n });\n },\n removeTab(id) {\n setTabs(tabs => tabs.filter(tab => tab.id !== id));\n }\n }),\n [setTabs]\n );\n\n return (\n <Root {...props} defaultValue={defaultValue}>\n {triggers}\n {contents}\n <TabsContext.Provider value={context}>{tabComponents}</TabsContext.Provider>\n </Root>\n );\n};\n\nconst BaseTabs = makeDecoratable(\"Tabs\", DecoratableTabs);\n\nconst Tabs = withStaticProps(BaseTabs, {\n Tab\n});\n\nexport { Tabs, type TabsProps };\n"],"names":["Root","TabsPrimitive","DecoratableTabs","initialValue","size","spacing","separator","loading","actions","tabComponents","props","tabs","setTabs","useState","defaultValue","useMemo","tab","triggers","triggerList","Trigger","listKey","List","cn","tabListVariants","contents","Content","context","existingIndex","id","TabsContext","BaseTabs","makeDecoratable","Tabs","withStaticProps","Tab"],"mappings":";;;;AAMA,MAAMA,OAAOC,KAAAA,IAAkB;AAc/B,MAAMC,kBAAkB,CAAC,EACrB,cAAcC,YAAY,EAC1BC,IAAI,EACJC,OAAO,EACPC,SAAS,EACTC,OAAO,EACPC,OAAO,EACP,MAAMC,aAAa,EACnB,GAAGC,OACK;IACR,MAAM,CAACC,MAAMC,QAAQ,GAAGC,SAAoB,EAAE;IAE9C,MAAMC,eAAeC,QAAQ,IAErBZ,gBACAM,cAAc,IAAI,CAACO,CAAAA,MAAO,CAACA,IAAI,KAAK,CAAC,QAAQ,IAAIA,AAAsB,UAAtBA,IAAI,KAAK,CAAC,OAAO,GAAa,MAC1E,OAEV;QAACb;QAAcM;KAAc;IAEhC,MAAMQ,WAAWF,QAAQ;QACrB,MAAMG,cAAcP,KAAK,GAAG,CAACK,CAAAA,MAAAA,WAAAA,GACzB,oBAACG,SAAOA;gBACJ,eAAaH,GAAG,CAAC,cAAc;gBAC/B,UAAUA,IAAI,QAAQ;gBACtB,MAAMA,IAAI,IAAI;gBACd,KAAKA,IAAI,EAAE;gBACX,SAAST;gBACT,MAAMH;gBACN,MAAMY,IAAI,OAAO;gBACjB,OAAOA,IAAI,KAAK;gBAChB,SAASA,IAAI,OAAO;;QAG5B,MAAMI,UAAUT,KAAK,GAAG,CAACK,CAAAA,MAAOA,IAAI,EAAE,EAAE,IAAI,CAAC;QAE7C,IAAI,CAACR,SACD,OAAO,WAAP,GACI,oBAACa,MAAIA;YAAC,KAAKD;YAAS,MAAMhB;YAAM,SAASC;YAAS,WAAWC;WACxDY;QAMb,OAAO,WAAP,GACI,oBAAC;YAAI,WAAWI,GAAGC,gBAAgB;gBAAEnB;gBAAMC;gBAASC;YAAU;yBAC1D,oBAACe,MAAIA;YAAC,KAAKD;YAAS,MAAMhB;YAAM,WAAW;WACtCc,cAAAA,WAAAA,GAEL,oBAAC;YAAI,WAAW;WAAqCV;IAGjE,GAAG;QAACG;QAAMP;QAAMC;QAASC;QAAWC;QAASC;KAAQ;IAErD,MAAMgB,WAAWT,QACb,IACIJ,KAAK,GAAG,CAACK,CAAAA,MAAAA,WAAAA,GACL,oBAACS,SAAOA;gBACJ,KAAKT,IAAI,EAAE;gBACX,OAAOA,IAAI,KAAK;gBAChB,SAASA,IAAI,OAAO;gBACpB,SAASA,IAAI,OAAO,IAAIX;gBACxB,WAAWW,IAAI,SAAS;iBAGpC;QAACL;QAAMN;KAAQ;IAGnB,MAAMqB,UAAwBX,QAC1B,IAAO;YACH,QAAOL,KAAK;gBACRE,QAAQD,CAAAA;oBACJ,MAAMgB,gBAAgBhB,KAAK,SAAS,CAACK,CAAAA,MAAOA,IAAI,KAAK,KAAKN,MAAM,KAAK;oBACrE,IAAIiB,gBAAgB,IAChB,OAAO;2BACAhB,KAAK,KAAK,CAAC,GAAGgB;wBACjBjB;2BACGC,KAAK,KAAK,CAACgB,gBAAgB;qBACjC;oBAEL,OAAO;2BAAIhB;wBAAMD;qBAAM;gBAC3B;YACJ;YACA,WAAUkB,EAAE;gBACRhB,QAAQD,CAAAA,OAAQA,KAAK,MAAM,CAACK,CAAAA,MAAOA,IAAI,EAAE,KAAKY;YAClD;QACJ,IACA;QAAChB;KAAQ;IAGb,OAAO,WAAP,GACI,oBAACZ,MAAIA;QAAE,GAAGU,KAAK;QAAE,cAAcI;OAC1BG,UACAO,UAAAA,WAAAA,GACD,oBAACK,YAAY,QAAQ;QAAC,OAAOH;OAAUjB;AAGnD;AAEA,MAAMqB,WAAWC,gBAAgB,QAAQ7B;AAEzC,MAAM8B,YAAOC,gBAAgBH,UAAU;IACnCI,KAAGA;AACP"}
|
package/Tabs/Tabs.mdx
CHANGED
|
@@ -385,6 +385,33 @@ const [value, setValue] = useState("password");
|
|
|
385
385
|
export default WithControlledValueExample;
|
|
386
386
|
` } } />
|
|
387
387
|
|
|
388
|
+
### With Actions
|
|
389
|
+
|
|
390
|
+
Use `actions` to put controls at the end of the tab row, such as a filter checkbox or a button. They render outside the tab list, so arrow keys still move only between tabs.
|
|
391
|
+
|
|
392
|
+
<Canvas of={Tabs.WithActions} source={ { code: `
|
|
393
|
+
import React, { useState } from "react";
|
|
394
|
+
import { Checkbox, Tabs } from "@webiny/admin-ui";
|
|
395
|
+
|
|
396
|
+
const WithActionsExample = () => {
|
|
397
|
+
const [unreadOnly, setUnreadOnly] = useState(false);
|
|
398
|
+
|
|
399
|
+
return (
|
|
400
|
+
<Tabs
|
|
401
|
+
separator={true}
|
|
402
|
+
actions={<Checkbox label="Unread only" checked={unreadOnly} onChange={setUnreadOnly} />}
|
|
403
|
+
tabs={[
|
|
404
|
+
<Tabs.Tab key="inbox" value="inbox" trigger="Inbox" content="Inbox content" />,
|
|
405
|
+
<Tabs.Tab key="archive" value="archive" trigger="Archive" content="Archive content" />
|
|
406
|
+
]}
|
|
407
|
+
/>
|
|
408
|
+
);
|
|
409
|
+
|
|
410
|
+
};
|
|
411
|
+
|
|
412
|
+
export default WithActionsExample;
|
|
413
|
+
` } } />
|
|
414
|
+
|
|
388
415
|
### With Icons
|
|
389
416
|
|
|
390
417
|
<Canvas of={Tabs.WithIcons} source={ { code: `
|
package/Tabs/Tabs.stories.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare const SpacingDoubleExtraLarge: Story;
|
|
|
17
17
|
export declare const WithSeparator: Story;
|
|
18
18
|
export declare const WithDefaultValue: Story;
|
|
19
19
|
export declare const WithControlledValue: Story;
|
|
20
|
+
export declare const WithActions: Story;
|
|
20
21
|
export declare const WithIcons: Story;
|
|
21
22
|
export declare const WithDisabledTab: Story;
|
|
22
23
|
export declare const WithHiddenTab: Story;
|
package/Tabs/Tabs.stories.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import react, { useState } from "react";
|
|
2
2
|
import { ReactComponent } from "@webiny/icons/person.svg";
|
|
3
3
|
import { ReactComponent as lock_svg_ReactComponent } from "@webiny/icons/lock.svg";
|
|
4
|
+
import { Checkbox } from "../Checkbox/index.js";
|
|
4
5
|
import { Tabs } from "./Tabs.js";
|
|
5
6
|
const meta = {
|
|
6
7
|
title: "Components/Tabs",
|
|
@@ -114,6 +115,23 @@ const WithControlledValue = {
|
|
|
114
115
|
});
|
|
115
116
|
}
|
|
116
117
|
};
|
|
118
|
+
const WithActions = {
|
|
119
|
+
args: {
|
|
120
|
+
...Default.args,
|
|
121
|
+
separator: true
|
|
122
|
+
},
|
|
123
|
+
render: (args)=>{
|
|
124
|
+
const [unreadOnly, setUnreadOnly] = useState(false);
|
|
125
|
+
return /*#__PURE__*/ react.createElement(Tabs, {
|
|
126
|
+
...args,
|
|
127
|
+
actions: /*#__PURE__*/ react.createElement(Checkbox, {
|
|
128
|
+
label: "Unread only",
|
|
129
|
+
checked: unreadOnly,
|
|
130
|
+
onChange: setUnreadOnly
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
};
|
|
117
135
|
const WithIcons = {
|
|
118
136
|
args: {
|
|
119
137
|
...Default.args,
|
|
@@ -271,6 +289,6 @@ const Documentation = {
|
|
|
271
289
|
}
|
|
272
290
|
};
|
|
273
291
|
export default Tabs_stories;
|
|
274
|
-
export { Default, Documentation, SizeExtraLarge, SizeLarge, SizeMedium, SizeSmall, SpacingDoubleExtraLarge, SpacingExtraLarge, SpacingExtraSmall, SpacingLarge, SpacingMedium, SpacingSmall, WithControlledValue, WithCustomTabSpacing, WithDefaultValue, WithDisabledTab, WithHiddenTab, WithIcons, WithSeparator };
|
|
292
|
+
export { Default, Documentation, SizeExtraLarge, SizeLarge, SizeMedium, SizeSmall, SpacingDoubleExtraLarge, SpacingExtraLarge, SpacingExtraSmall, SpacingLarge, SpacingMedium, SpacingSmall, WithActions, WithControlledValue, WithCustomTabSpacing, WithDefaultValue, WithDisabledTab, WithHiddenTab, WithIcons, WithSeparator };
|
|
275
293
|
|
|
276
294
|
//# sourceMappingURL=Tabs.stories.js.map
|
package/Tabs/Tabs.stories.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs/Tabs.stories.js","sources":["../../src/Tabs/Tabs.stories.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { ReactComponent as PersonIcon } from \"@webiny/icons/person.svg\";\nimport { ReactComponent as LockIcon } from \"@webiny/icons/lock.svg\";\nimport { Tabs } from \"./Tabs.js\";\n\nconst meta: Meta<typeof Tabs> = {\n title: \"Components/Tabs\",\n component: Tabs,\n parameters: {\n layout: \"padded\"\n }\n};\n\nexport default meta;\ntype Story = StoryObj<typeof Tabs>;\n\nexport const Default: Story = {\n args: {\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Account content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum.\"\n }\n />,\n <Tabs.Tab\n key={\"password\"}\n value={\"password\"}\n trigger={\"Password\"}\n content={\n \"Password content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. \"\n }\n />\n ]\n }\n};\n\nexport const SizeSmall: Story = {\n args: {\n ...Default.args,\n size: \"sm\"\n }\n};\n\nexport const SizeMedium: Story = {\n args: {\n ...Default.args,\n size: \"md\"\n }\n};\n\nexport const SizeLarge: Story = {\n args: {\n ...Default.args,\n size: \"lg\"\n }\n};\n\nexport const SizeExtraLarge: Story = {\n args: {\n ...Default.args,\n size: \"xl\"\n }\n};\n\nexport const SpacingExtraSmall: Story = {\n args: {\n ...Default.args,\n spacing: \"xs\"\n }\n};\n\nexport const SpacingSmall: Story = {\n args: {\n ...Default.args,\n spacing: \"sm\"\n }\n};\n\nexport const SpacingMedium: Story = {\n args: {\n ...Default.args,\n spacing: \"md\"\n }\n};\n\nexport const SpacingLarge: Story = {\n args: {\n ...Default.args,\n spacing: \"lg\"\n }\n};\n\nexport const SpacingExtraLarge: Story = {\n args: {\n ...Default.args,\n spacing: \"xl\"\n }\n};\n\nexport const SpacingDoubleExtraLarge: Story = {\n args: {\n ...Default.args,\n spacing: \"xxl\"\n }\n};\n\nexport const WithSeparator: Story = {\n args: {\n ...Default.args,\n separator: true\n }\n};\n\nexport const WithDefaultValue: Story = {\n args: {\n ...Default.args,\n defaultValue: \"password\"\n }\n};\n\nexport const WithControlledValue: Story = {\n args: {\n ...Default.args,\n value: \"password\"\n },\n render: args => {\n const [value, setValue] = useState(args.value);\n return <Tabs {...args} value={value} onValueChange={setValue} />;\n }\n};\n\nexport const WithIcons: Story = {\n args: {\n ...Default.args,\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Account content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum.\"\n }\n icon={<PersonIcon />}\n />,\n <Tabs.Tab\n key={\"password\"}\n value={\"password\"}\n trigger={\"Password\"}\n content={\n \"Password content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. \"\n }\n icon={<LockIcon />}\n />\n ]\n }\n};\n\nexport const WithDisabledTab: Story = {\n args: {\n ...Default.args,\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Account content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum.\"\n }\n disabled={true}\n />,\n <Tabs.Tab\n key={\"password\"}\n value={\"password\"}\n trigger={\"Password\"}\n content={\n \"Password content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. \"\n }\n />\n ]\n }\n};\n\nexport const WithHiddenTab: Story = {\n args: {\n ...Default.args,\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Account content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum.\"\n }\n visible={false}\n />,\n <Tabs.Tab\n key={\"password\"}\n value={\"password\"}\n trigger={\"Password\"}\n content={\n \"Password content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. \"\n }\n />\n ]\n }\n};\n\nexport const WithCustomTabSpacing: Story = {\n args: {\n ...Default.args,\n spacing: \"sm\",\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Tab with custom spacing XXL - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum.\"\n }\n spacing={\"xxl\"}\n />,\n <Tabs.Tab\n key={\"password\"}\n value={\"password\"}\n trigger={\"Password\"}\n content={\n \"Tab with inherited spacing - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. \"\n }\n />\n ]\n }\n};\n\n// Update the Documentation story to properly handle control changes\nexport const Documentation: Story = {\n render: args => {\n // Force re-render when args change by using a key\n return <Tabs key={JSON.stringify(args)} {...args} />;\n },\n args: {\n size: \"md\",\n spacing: \"lg\",\n separator: true,\n defaultValue: \"account\",\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Account content - This tab contains account settings and personal information. Users can update their profile details, change email address, and manage notification preferences.\"\n }\n />,\n <Tabs.Tab\n key={\"security\"}\n value={\"security\"}\n trigger={\"Security\"}\n content={\n \"Security content - This tab contains security settings. Users can change their password, enable two-factor authentication, and review recent account activity.\"\n }\n />,\n <Tabs.Tab\n key={\"preferences\"}\n value={\"preferences\"}\n trigger={\"Preferences\"}\n content={\n \"Preferences content - This tab contains user preferences. Users can customize the interface, set language preferences, and configure other application settings.\"\n }\n />\n ],\n value: undefined\n },\n argTypes: {\n size: {\n description: \"Size of the tabs\",\n control: \"select\",\n options: [\"sm\", \"md\", \"lg\", \"xl\"],\n defaultValue: \"md\"\n },\n spacing: {\n description: \"Spacing around the tabs and content\",\n control: \"select\",\n options: [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"],\n defaultValue: \"lg\"\n },\n separator: {\n description:\n \"Whether to show a separator line below the tabs, by default it's `false`.\",\n control: \"boolean\",\n defaultValue: false\n },\n defaultValue: {\n description: \"The value of the tab that should be active by default\",\n control: \"text\"\n },\n value: {\n description:\n \"The controlled value of the active tab, please refer to the example code for details.\"\n },\n tabs: {\n description: \"The tabs to render, please refer to the example code for details.\"\n }\n }\n};\n"],"names":["meta","Tabs","Default","SizeSmall","SizeMedium","SizeLarge","SizeExtraLarge","SpacingExtraSmall","SpacingSmall","SpacingMedium","SpacingLarge","SpacingExtraLarge","SpacingDoubleExtraLarge","WithSeparator","WithDefaultValue","WithControlledValue","args","value","setValue","useState","WithIcons","PersonIcon","LockIcon","WithDisabledTab","WithHiddenTab","WithCustomTabSpacing","Documentation","JSON","undefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs/Tabs.stories.js","sources":["../../src/Tabs/Tabs.stories.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { ReactComponent as PersonIcon } from \"@webiny/icons/person.svg\";\nimport { ReactComponent as LockIcon } from \"@webiny/icons/lock.svg\";\nimport { Checkbox } from \"~/Checkbox/index.js\";\nimport { Tabs } from \"./Tabs.js\";\n\nconst meta: Meta<typeof Tabs> = {\n title: \"Components/Tabs\",\n component: Tabs,\n parameters: {\n layout: \"padded\"\n }\n};\n\nexport default meta;\ntype Story = StoryObj<typeof Tabs>;\n\nexport const Default: Story = {\n args: {\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Account content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum.\"\n }\n />,\n <Tabs.Tab\n key={\"password\"}\n value={\"password\"}\n trigger={\"Password\"}\n content={\n \"Password content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. \"\n }\n />\n ]\n }\n};\n\nexport const SizeSmall: Story = {\n args: {\n ...Default.args,\n size: \"sm\"\n }\n};\n\nexport const SizeMedium: Story = {\n args: {\n ...Default.args,\n size: \"md\"\n }\n};\n\nexport const SizeLarge: Story = {\n args: {\n ...Default.args,\n size: \"lg\"\n }\n};\n\nexport const SizeExtraLarge: Story = {\n args: {\n ...Default.args,\n size: \"xl\"\n }\n};\n\nexport const SpacingExtraSmall: Story = {\n args: {\n ...Default.args,\n spacing: \"xs\"\n }\n};\n\nexport const SpacingSmall: Story = {\n args: {\n ...Default.args,\n spacing: \"sm\"\n }\n};\n\nexport const SpacingMedium: Story = {\n args: {\n ...Default.args,\n spacing: \"md\"\n }\n};\n\nexport const SpacingLarge: Story = {\n args: {\n ...Default.args,\n spacing: \"lg\"\n }\n};\n\nexport const SpacingExtraLarge: Story = {\n args: {\n ...Default.args,\n spacing: \"xl\"\n }\n};\n\nexport const SpacingDoubleExtraLarge: Story = {\n args: {\n ...Default.args,\n spacing: \"xxl\"\n }\n};\n\nexport const WithSeparator: Story = {\n args: {\n ...Default.args,\n separator: true\n }\n};\n\nexport const WithDefaultValue: Story = {\n args: {\n ...Default.args,\n defaultValue: \"password\"\n }\n};\n\nexport const WithControlledValue: Story = {\n args: {\n ...Default.args,\n value: \"password\"\n },\n render: args => {\n const [value, setValue] = useState(args.value);\n return <Tabs {...args} value={value} onValueChange={setValue} />;\n }\n};\n\nexport const WithActions: Story = {\n args: {\n ...Default.args,\n separator: true\n },\n render: args => {\n const [unreadOnly, setUnreadOnly] = useState(false);\n return (\n <Tabs\n {...args}\n actions={\n <Checkbox label=\"Unread only\" checked={unreadOnly} onChange={setUnreadOnly} />\n }\n />\n );\n }\n};\n\nexport const WithIcons: Story = {\n args: {\n ...Default.args,\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Account content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum.\"\n }\n icon={<PersonIcon />}\n />,\n <Tabs.Tab\n key={\"password\"}\n value={\"password\"}\n trigger={\"Password\"}\n content={\n \"Password content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. \"\n }\n icon={<LockIcon />}\n />\n ]\n }\n};\n\nexport const WithDisabledTab: Story = {\n args: {\n ...Default.args,\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Account content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum.\"\n }\n disabled={true}\n />,\n <Tabs.Tab\n key={\"password\"}\n value={\"password\"}\n trigger={\"Password\"}\n content={\n \"Password content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. \"\n }\n />\n ]\n }\n};\n\nexport const WithHiddenTab: Story = {\n args: {\n ...Default.args,\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Account content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum.\"\n }\n visible={false}\n />,\n <Tabs.Tab\n key={\"password\"}\n value={\"password\"}\n trigger={\"Password\"}\n content={\n \"Password content - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. \"\n }\n />\n ]\n }\n};\n\nexport const WithCustomTabSpacing: Story = {\n args: {\n ...Default.args,\n spacing: \"sm\",\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Tab with custom spacing XXL - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum.\"\n }\n spacing={\"xxl\"}\n />,\n <Tabs.Tab\n key={\"password\"}\n value={\"password\"}\n trigger={\"Password\"}\n content={\n \"Tab with inherited spacing - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel libero nec libero lacinia fermentum. Nullam nec nunc nec libero lacinia fermentum. \"\n }\n />\n ]\n }\n};\n\n// Update the Documentation story to properly handle control changes\nexport const Documentation: Story = {\n render: args => {\n // Force re-render when args change by using a key\n return <Tabs key={JSON.stringify(args)} {...args} />;\n },\n args: {\n size: \"md\",\n spacing: \"lg\",\n separator: true,\n defaultValue: \"account\",\n tabs: [\n <Tabs.Tab\n key={\"account\"}\n value={\"account\"}\n trigger={\"Account\"}\n content={\n \"Account content - This tab contains account settings and personal information. Users can update their profile details, change email address, and manage notification preferences.\"\n }\n />,\n <Tabs.Tab\n key={\"security\"}\n value={\"security\"}\n trigger={\"Security\"}\n content={\n \"Security content - This tab contains security settings. Users can change their password, enable two-factor authentication, and review recent account activity.\"\n }\n />,\n <Tabs.Tab\n key={\"preferences\"}\n value={\"preferences\"}\n trigger={\"Preferences\"}\n content={\n \"Preferences content - This tab contains user preferences. Users can customize the interface, set language preferences, and configure other application settings.\"\n }\n />\n ],\n value: undefined\n },\n argTypes: {\n size: {\n description: \"Size of the tabs\",\n control: \"select\",\n options: [\"sm\", \"md\", \"lg\", \"xl\"],\n defaultValue: \"md\"\n },\n spacing: {\n description: \"Spacing around the tabs and content\",\n control: \"select\",\n options: [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"],\n defaultValue: \"lg\"\n },\n separator: {\n description:\n \"Whether to show a separator line below the tabs, by default it's `false`.\",\n control: \"boolean\",\n defaultValue: false\n },\n defaultValue: {\n description: \"The value of the tab that should be active by default\",\n control: \"text\"\n },\n value: {\n description:\n \"The controlled value of the active tab, please refer to the example code for details.\"\n },\n tabs: {\n description: \"The tabs to render, please refer to the example code for details.\"\n }\n }\n};\n"],"names":["meta","Tabs","Default","SizeSmall","SizeMedium","SizeLarge","SizeExtraLarge","SpacingExtraSmall","SpacingSmall","SpacingMedium","SpacingLarge","SpacingExtraLarge","SpacingDoubleExtraLarge","WithSeparator","WithDefaultValue","WithControlledValue","args","value","setValue","useState","WithActions","unreadOnly","setUnreadOnly","Checkbox","WithIcons","PersonIcon","LockIcon","WithDisabledTab","WithHiddenTab","WithCustomTabSpacing","Documentation","JSON","undefined"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast/useToast.stories.js","sources":["../../src/Toast/useToast.stories.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { Toast } from \"./Toast.js\";\nimport { useToast, type ShowToastParams } from \"./useToast.js\";\nimport { Button } from \"~/Button/index.js\";\nimport { Icon } from \"~/Icon/index.js\";\n\nconst ToastComponent = (props: ShowToastParams) => {\n const [lastToast, setLastToast] = useState<string | number>(\"\");\n const { showToast, hideToast, hideAllToasts } = useToast();\n return (\n <>\n <Button\n text={\"Show Toast\"}\n onClick={() => {\n const toast = showToast(props);\n setLastToast(toast);\n }}\n />\n <Button text={\"Hide latest toast\"} onClick={() => hideToast(lastToast)} />\n <Button text={\"Hide all toasts\"} onClick={() => hideAllToasts()} />\n </>\n );\n};\n\nconst meta: Meta<ShowToastParams> = {\n title: \"Components/Toast\",\n component: ToastComponent,\n parameters: {\n layout: \"fullscreen\"\n },\n argTypes: {\n variant: { control: \"select\", options: [\"default\", \"subtle\"] }\n },\n decorators: [\n Story => (\n <div className=\"w-full h-64 flex justify-center items-center gap-sm\">\n <Story />\n <Toast.Provider />\n </div>\n )\n ]\n};\n\nexport default meta;\n\ntype Story = StoryObj<ShowToastParams>;\n\nexport const Default: Story = {\n args: {\n title: \"New entry created\"\n }\n};\n\nexport const SubtleVariant: Story = {\n args: {\n ...Default.args,\n variant: \"subtle\"\n }\n};\n\nexport const WithTitleComponent: Story = {\n args: {\n title: <Toast.Title text={\"New entry created\"} />\n }\n};\n\nexport const WithDescription: Story = {\n args: {\n ...Default.args,\n description: 'Entry \"Article One\" has been successfully created'\n }\n};\n\nexport const WithDescriptionComponent: Story = {\n args: {\n ...Default.args,\n description: (\n <Toast.Description text={'Entry \"Article One\" has been successfully created'} />\n )\n }\n};\n\nexport const WithActions: Story = {\n args: {\n ...Default.args,\n actions: (\n <Toast.Actions>\n <Button\n key={\"action-1\"}\n text={\"Do the action\"}\n onClick={() => console.log(\"doTheAction\")}\n />\n <Button\n key={\"action-2\"}\n text={\"Dismiss\"}\n onClick={() => console.log(\"dismiss\")}\n variant={\"secondary\"}\n />\n </Toast.Actions>\n )\n }\n};\n\nexport const WithDescriptionAndActions: Story = {\n args: {\n ...Default.args,\n description: (\n <Toast.Description text={'Entry \"Article One\" has been successfully created'} />\n ),\n actions: (\n <Toast.Actions>\n <Button\n key={\"action-1\"}\n text={\"Do the action\"}\n onClick={() => console.log(\"doTheAction\")}\n />\n <Button\n key={\"action-2\"}\n text={\"Dismiss\"}\n onClick={() => console.log(\"dismiss\")}\n variant={\"secondary\"}\n />\n </Toast.Actions>\n )\n }\n};\n\nexport const WithCustomIcon: Story = {\n args: {\n ...Default.args,\n icon: <Icon icon={<SettingsIcon />} label={\"Settings\"} />\n }\n};\n\nexport const WithInfiniteDuration: Story = {\n args: {\n ...Default.args,\n duration: Infinity\n }\n};\n\nexport const NotDismissible: Story = {\n args: {\n ...Default.args,\n dismissible: false\n }\n};\n\nexport const withCustomPosition: Story = {\n args: {\n ...Default.args,\n position: \"bottom-right\"\n }\n};\n\nexport const Documentation: Story = {\n args: {\n title: \"New entry created\",\n description: \"Entry has been successfully created\",\n variant: \"default\",\n position: \"top-right\",\n duration: 6000,\n dismissible: true,\n actions: undefined,\n icon: undefined\n },\n argTypes: {\n title: {\n description: \"Please refer to the 'With Title Component' example below for details.\"\n },\n description: {\n description:\n \"Please refer to the 'With Description' and 'With Description Component' examples below for details.\"\n },\n variant: {\n description: \"Variant of the toast.\"\n },\n actions: {\n description: \"Please refer to the 'With Actions' example below for details.\"\n },\n icon: {\n description: \"Please refer to the 'With Custom Icon' example below for details.\"\n },\n duration: {\n description:\n \"Duration in milliseconds before the toast auto-dismisses. Please refer to the 'With Infinite Duration' example below for details.\",\n control: \"number\"\n },\n dismissible: {\n description: \"Please refer to the 'Not Dismissible' example below for details.\"\n },\n position: {\n description: \"Please refer to the 'With Custom Position' example below for details.\",\n control: \"select\",\n options: [\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n \"top-center\",\n \"bottom-center\"\n ]\n }\n }\n};\n"],"names":["ToastComponent","props","lastToast","setLastToast","useState","showToast","hideToast","hideAllToasts","useToast","Button","toast","meta","Story","Toast","Default","SubtleVariant","WithTitleComponent","WithDescription","WithDescriptionComponent","WithActions","console","WithDescriptionAndActions","WithCustomIcon","Icon","SettingsIcon","WithInfiniteDuration","Infinity","NotDismissible","withCustomPosition","Documentation","undefined"],"mappings":";;;;;;AAQA,MAAMA,iBAAiB,CAACC;IACpB,MAAM,CAACC,WAAWC,aAAa,GAAGC,SAA0B;IAC5D,MAAM,EAAEC,SAAS,EAAEC,SAAS,EAAEC,aAAa,EAAE,GAAGC;IAChD,OAAO,WAAP,GACI,wDACI,oBAACC,QAAMA;QACH,MAAM;QACN,SAAS;YACL,MAAMC,QAAQL,UAAUJ;YACxBE,aAAaO;QACjB;sBAEJ,oBAACD,QAAMA;QAAC,MAAM;QAAqB,SAAS,IAAMH,UAAUJ;sBAC5D,oBAACO,QAAMA;QAAC,MAAM;QAAmB,SAAS,IAAMF;;AAG5D;AAEA,MAAMI,OAA8B;IAChC,OAAO;IACP,WAAWX;IACX,YAAY;QACR,QAAQ;IACZ;IACA,UAAU;QACN,SAAS;YAAE,SAAS;YAAU,SAAS;gBAAC;gBAAW;aAAS;QAAC;IACjE;IACA,YAAY;QACRY,CAAAA,QAAAA,WAAAA,GACI,oBAAC;gBAAI,WAAU;6BACX,oBAACA,OAAAA,OAAAA,WAAAA,GACD,oBAACC,MAAM,QAAQ;KAG1B;AACL;AAEA,yBAAeF;AAIR,MAAMG,UAAiB;IAC1B,MAAM;QACF,OAAO;IACX;AACJ;AAEO,MAAMC,gBAAuB;IAChC,MAAM;QACF,GAAGD,QAAQ,IAAI;QACf,SAAS;IACb;AACJ;AAEO,MAAME,qBAA4B;IACrC,MAAM;QACF,OAAO,WAAP,GAAO,oBAACH,MAAM,KAAK;YAAC,MAAM;;IAC9B;AACJ;AAEO,MAAMI,kBAAyB;IAClC,MAAM;QACF,GAAGH,QAAQ,IAAI;QACf,aAAa;IACjB;AACJ;AAEO,MAAMI,2BAAkC;IAC3C,MAAM;QACF,GAAGJ,QAAQ,IAAI;QACf,aAAa,WAAb,GACI,oBAACD,MAAM,WAAW;YAAC,MAAM;;IAEjC;AACJ;AAEO,MAAMM,cAAqB;IAC9B,MAAM;QACF,GAAGL,QAAQ,IAAI;QACf,SAAS,WAAT,GACI,oBAACD,MAAM,OAAO,sBACV,oBAACJ,QAAMA;YACH,KAAK;YACL,MAAM;YACN,SAAS,IAAMW,QAAQ,GAAG,CAAC;0BAE/B,oBAACX,QAAMA;YACH,KAAK;YACL,MAAM;YACN,SAAS,IAAMW,QAAQ,GAAG,CAAC;YAC3B,SAAS;;IAIzB;AACJ;AAEO,MAAMC,4BAAmC;IAC5C,MAAM;QACF,GAAGP,QAAQ,IAAI;QACf,aAAa,WAAb,GACI,oBAACD,MAAM,WAAW;YAAC,MAAM;;QAE7B,SAAS,WAAT,GACI,oBAACA,MAAM,OAAO,sBACV,oBAACJ,QAAMA;YACH,KAAK;YACL,MAAM;YACN,SAAS,IAAMW,QAAQ,GAAG,CAAC;0BAE/B,oBAACX,QAAMA;YACH,KAAK;YACL,MAAM;YACN,SAAS,IAAMW,QAAQ,GAAG,CAAC;YAC3B,SAAS;;IAIzB;AACJ;AAEO,MAAME,iBAAwB;IACjC,MAAM;QACF,GAAGR,QAAQ,IAAI;QACf,MAAM,WAAN,GAAM,oBAACS,MAAIA;YAAC,oBAAM,oBAACC,gBAAYA;YAAK,OAAO;;IAC/C;AACJ;AAEO,MAAMC,uBAA8B;IACvC,MAAM;QACF,GAAGX,QAAQ,IAAI;QACf,UAAUY;
|
|
1
|
+
{"version":3,"file":"Toast/useToast.stories.js","sources":["../../src/Toast/useToast.stories.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { Toast } from \"./Toast.js\";\nimport { useToast, type ShowToastParams } from \"./useToast.js\";\nimport { Button } from \"~/Button/index.js\";\nimport { Icon } from \"~/Icon/index.js\";\n\nconst ToastComponent = (props: ShowToastParams) => {\n const [lastToast, setLastToast] = useState<string | number>(\"\");\n const { showToast, hideToast, hideAllToasts } = useToast();\n return (\n <>\n <Button\n text={\"Show Toast\"}\n onClick={() => {\n const toast = showToast(props);\n setLastToast(toast);\n }}\n />\n <Button text={\"Hide latest toast\"} onClick={() => hideToast(lastToast)} />\n <Button text={\"Hide all toasts\"} onClick={() => hideAllToasts()} />\n </>\n );\n};\n\nconst meta: Meta<ShowToastParams> = {\n title: \"Components/Toast\",\n component: ToastComponent,\n parameters: {\n layout: \"fullscreen\"\n },\n argTypes: {\n variant: { control: \"select\", options: [\"default\", \"subtle\"] }\n },\n decorators: [\n Story => (\n <div className=\"w-full h-64 flex justify-center items-center gap-sm\">\n <Story />\n <Toast.Provider />\n </div>\n )\n ]\n};\n\nexport default meta;\n\ntype Story = StoryObj<ShowToastParams>;\n\nexport const Default: Story = {\n args: {\n title: \"New entry created\"\n }\n};\n\nexport const SubtleVariant: Story = {\n args: {\n ...Default.args,\n variant: \"subtle\"\n }\n};\n\nexport const WithTitleComponent: Story = {\n args: {\n title: <Toast.Title text={\"New entry created\"} />\n }\n};\n\nexport const WithDescription: Story = {\n args: {\n ...Default.args,\n description: 'Entry \"Article One\" has been successfully created'\n }\n};\n\nexport const WithDescriptionComponent: Story = {\n args: {\n ...Default.args,\n description: (\n <Toast.Description text={'Entry \"Article One\" has been successfully created'} />\n )\n }\n};\n\nexport const WithActions: Story = {\n args: {\n ...Default.args,\n actions: (\n <Toast.Actions>\n <Button\n key={\"action-1\"}\n text={\"Do the action\"}\n onClick={() => console.log(\"doTheAction\")}\n />\n <Button\n key={\"action-2\"}\n text={\"Dismiss\"}\n onClick={() => console.log(\"dismiss\")}\n variant={\"secondary\"}\n />\n </Toast.Actions>\n )\n }\n};\n\nexport const WithDescriptionAndActions: Story = {\n args: {\n ...Default.args,\n description: (\n <Toast.Description text={'Entry \"Article One\" has been successfully created'} />\n ),\n actions: (\n <Toast.Actions>\n <Button\n key={\"action-1\"}\n text={\"Do the action\"}\n onClick={() => console.log(\"doTheAction\")}\n />\n <Button\n key={\"action-2\"}\n text={\"Dismiss\"}\n onClick={() => console.log(\"dismiss\")}\n variant={\"secondary\"}\n />\n </Toast.Actions>\n )\n }\n};\n\nexport const WithCustomIcon: Story = {\n args: {\n ...Default.args,\n icon: <Icon icon={<SettingsIcon />} label={\"Settings\"} />\n }\n};\n\nexport const WithInfiniteDuration: Story = {\n args: {\n ...Default.args,\n duration: Infinity\n }\n};\n\nexport const NotDismissible: Story = {\n args: {\n ...Default.args,\n dismissible: false\n }\n};\n\nexport const withCustomPosition: Story = {\n args: {\n ...Default.args,\n position: \"bottom-right\"\n }\n};\n\nexport const Documentation: Story = {\n args: {\n title: \"New entry created\",\n description: \"Entry has been successfully created\",\n variant: \"default\",\n position: \"top-right\",\n duration: 6000,\n dismissible: true,\n actions: undefined,\n icon: undefined\n },\n argTypes: {\n title: {\n description: \"Please refer to the 'With Title Component' example below for details.\"\n },\n description: {\n description:\n \"Please refer to the 'With Description' and 'With Description Component' examples below for details.\"\n },\n variant: {\n description: \"Variant of the toast.\"\n },\n actions: {\n description: \"Please refer to the 'With Actions' example below for details.\"\n },\n icon: {\n description: \"Please refer to the 'With Custom Icon' example below for details.\"\n },\n duration: {\n description:\n \"Duration in milliseconds before the toast auto-dismisses. Please refer to the 'With Infinite Duration' example below for details.\",\n control: \"number\"\n },\n dismissible: {\n description: \"Please refer to the 'Not Dismissible' example below for details.\"\n },\n position: {\n description: \"Please refer to the 'With Custom Position' example below for details.\",\n control: \"select\",\n options: [\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n \"top-center\",\n \"bottom-center\"\n ]\n }\n }\n};\n"],"names":["ToastComponent","props","lastToast","setLastToast","useState","showToast","hideToast","hideAllToasts","useToast","Button","toast","meta","Story","Toast","Default","SubtleVariant","WithTitleComponent","WithDescription","WithDescriptionComponent","WithActions","console","WithDescriptionAndActions","WithCustomIcon","Icon","SettingsIcon","WithInfiniteDuration","Infinity","NotDismissible","withCustomPosition","Documentation","undefined"],"mappings":"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"}
|
package/hooks/index.d.ts
CHANGED
package/hooks/index.js
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A modal `Dialog` locks scrolling by preventing every `wheel` and `touchmove` event that lands
|
|
3
|
+
* outside of its content. The listener sits on `document`, so layers that are portaled to
|
|
4
|
+
* `document.body` - popovers and the lists they render - count as "outside" and stop scrolling
|
|
5
|
+
* while the dialog is open.
|
|
6
|
+
*
|
|
7
|
+
* Stopping those events on the layer itself keeps them away from the `document` listener: the
|
|
8
|
+
* browser scrolls the layer as it normally would, and the lock still holds everywhere else.
|
|
9
|
+
*
|
|
10
|
+
* Attach the returned callback ref to the element whose subtree must remain scrollable. It has to
|
|
11
|
+
* be a callback ref, because layers like the popover mount their element after the first render.
|
|
12
|
+
*/
|
|
13
|
+
export declare const useEscapeScrollLock: <T extends HTMLElement>() => (element: T | null) => void;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useCallback, useRef } from "react";
|
|
2
|
+
const useEscapeScrollLock = ()=>{
|
|
3
|
+
const detach = useRef(null);
|
|
4
|
+
return useCallback((element)=>{
|
|
5
|
+
if (detach.current) {
|
|
6
|
+
detach.current();
|
|
7
|
+
detach.current = null;
|
|
8
|
+
}
|
|
9
|
+
if (!element) return;
|
|
10
|
+
const stopPropagation = (event)=>event.stopPropagation();
|
|
11
|
+
element.addEventListener("wheel", stopPropagation);
|
|
12
|
+
element.addEventListener("touchmove", stopPropagation);
|
|
13
|
+
detach.current = ()=>{
|
|
14
|
+
element.removeEventListener("wheel", stopPropagation);
|
|
15
|
+
element.removeEventListener("touchmove", stopPropagation);
|
|
16
|
+
};
|
|
17
|
+
}, []);
|
|
18
|
+
};
|
|
19
|
+
export { useEscapeScrollLock };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=useEscapeScrollLock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks/useEscapeScrollLock.js","sources":["../../src/hooks/useEscapeScrollLock.ts"],"sourcesContent":["import { useCallback, useRef } from \"react\";\n\n/**\n * A modal `Dialog` locks scrolling by preventing every `wheel` and `touchmove` event that lands\n * outside of its content. The listener sits on `document`, so layers that are portaled to\n * `document.body` - popovers and the lists they render - count as \"outside\" and stop scrolling\n * while the dialog is open.\n *\n * Stopping those events on the layer itself keeps them away from the `document` listener: the\n * browser scrolls the layer as it normally would, and the lock still holds everywhere else.\n *\n * Attach the returned callback ref to the element whose subtree must remain scrollable. It has to\n * be a callback ref, because layers like the popover mount their element after the first render.\n */\nexport const useEscapeScrollLock = <T extends HTMLElement>() => {\n const detach = useRef<(() => void) | null>(null);\n\n return useCallback((element: T | null) => {\n if (detach.current) {\n detach.current();\n detach.current = null;\n }\n\n if (!element) {\n return;\n }\n\n const stopPropagation = (event: Event) => event.stopPropagation();\n\n element.addEventListener(\"wheel\", stopPropagation);\n element.addEventListener(\"touchmove\", stopPropagation);\n\n detach.current = () => {\n element.removeEventListener(\"wheel\", stopPropagation);\n element.removeEventListener(\"touchmove\", stopPropagation);\n };\n }, []);\n};\n"],"names":["useEscapeScrollLock","detach","useRef","useCallback","element","stopPropagation","event"],"mappings":";AAcO,MAAMA,sBAAsB;IAC/B,MAAMC,SAASC,OAA4B;IAE3C,OAAOC,YAAY,CAACC;QAChB,IAAIH,OAAO,OAAO,EAAE;YAChBA,OAAO,OAAO;YACdA,OAAO,OAAO,GAAG;QACrB;QAEA,IAAI,CAACG,SACD;QAGJ,MAAMC,kBAAkB,CAACC,QAAiBA,MAAM,eAAe;QAE/DF,QAAQ,gBAAgB,CAAC,SAASC;QAClCD,QAAQ,gBAAgB,CAAC,aAAaC;QAEtCJ,OAAO,OAAO,GAAG;YACbG,QAAQ,mBAAmB,CAAC,SAASC;YACrCD,QAAQ,mBAAmB,CAAC,aAAaC;QAC7C;IACJ,GAAG,EAAE;AACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/admin-ui",
|
|
3
|
-
"version": "6.5.0-beta.
|
|
3
|
+
"version": "6.5.0-beta.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -17,55 +17,55 @@
|
|
|
17
17
|
"@fortawesome/react-fontawesome": "3.5.0",
|
|
18
18
|
"@minoru/react-dnd-treeview": "3.5.4",
|
|
19
19
|
"@monaco-editor/react": "4.7.0",
|
|
20
|
-
"@radix-ui/react-scroll-area": "1.2.
|
|
21
|
-
"@tanstack/react-table": "
|
|
22
|
-
"@webiny/icons": "6.5.0-beta.
|
|
23
|
-
"@webiny/react-composition": "6.5.0-beta.
|
|
24
|
-
"@webiny/utils": "6.5.0-beta.
|
|
20
|
+
"@radix-ui/react-scroll-area": "1.2.18",
|
|
21
|
+
"@tanstack/react-table": "9.2.5",
|
|
22
|
+
"@webiny/icons": "6.5.0-beta.10",
|
|
23
|
+
"@webiny/react-composition": "6.5.0-beta.10",
|
|
24
|
+
"@webiny/utils": "6.5.0-beta.10",
|
|
25
25
|
"bytes": "3.1.2",
|
|
26
26
|
"class-variance-authority": "0.7.1",
|
|
27
27
|
"clsx": "2.1.1",
|
|
28
28
|
"cmdk": "1.1.1",
|
|
29
29
|
"date-fns": "4.4.0",
|
|
30
30
|
"lodash": "4.18.1",
|
|
31
|
-
"minimatch": "10.2.
|
|
32
|
-
"mobx": "
|
|
31
|
+
"minimatch": "10.2.6",
|
|
32
|
+
"mobx": "7.0.6",
|
|
33
33
|
"monaco-editor": "0.53.0",
|
|
34
|
-
"radix-ui": "1.6.
|
|
34
|
+
"radix-ui": "1.6.7",
|
|
35
35
|
"react": "18.3.1",
|
|
36
36
|
"react-color": "2.19.3",
|
|
37
37
|
"react-custom-scrollbars": "4.2.1",
|
|
38
|
-
"react-day-picker": "10.0.
|
|
38
|
+
"react-day-picker": "10.0.2",
|
|
39
39
|
"react-dnd": "16.0.1",
|
|
40
40
|
"react-virtualized": "9.22.6",
|
|
41
|
-
"sonner": "2.0.
|
|
42
|
-
"tailwind-merge": "3.
|
|
41
|
+
"sonner": "2.0.8",
|
|
42
|
+
"tailwind-merge": "3.7.0",
|
|
43
43
|
"tailwindcss": "4.3.3",
|
|
44
44
|
"tw-animate-css": "1.4.0",
|
|
45
|
-
"type-fest": "5.
|
|
45
|
+
"type-fest": "5.10.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@fortawesome/free-solid-svg-icons": "7.3.1",
|
|
49
|
-
"@rsbuild/core": "2.
|
|
49
|
+
"@rsbuild/core": "2.2.11",
|
|
50
50
|
"@rsbuild/plugin-svgr": "2.0.5",
|
|
51
|
-
"@storybook/addon-a11y": "10.
|
|
52
|
-
"@storybook/addon-docs": "10.
|
|
53
|
-
"@storybook/react": "10.
|
|
51
|
+
"@storybook/addon-a11y": "10.6.1",
|
|
52
|
+
"@storybook/addon-docs": "10.6.1",
|
|
53
|
+
"@storybook/react": "10.6.1",
|
|
54
54
|
"@tailwindcss/postcss": "4.3.3",
|
|
55
55
|
"@types/react": "18.3.31",
|
|
56
56
|
"@types/react-color": "3.0.13",
|
|
57
57
|
"@types/react-custom-scrollbars": "4.0.13",
|
|
58
|
-
"@types/react-virtualized": "9.22.
|
|
59
|
-
"@webiny/build-tools": "6.5.0-beta.
|
|
60
|
-
"@webiny/project": "6.5.0-beta.
|
|
61
|
-
"chalk": "
|
|
62
|
-
"oxfmt": "0.
|
|
58
|
+
"@types/react-virtualized": "9.22.4",
|
|
59
|
+
"@webiny/build-tools": "6.5.0-beta.10",
|
|
60
|
+
"@webiny/project": "6.5.0-beta.10",
|
|
61
|
+
"chalk": "6.0.1",
|
|
62
|
+
"oxfmt": "0.71.0",
|
|
63
63
|
"rimraf": "6.1.3",
|
|
64
|
-
"sass": "1.
|
|
65
|
-
"storybook": "10.
|
|
66
|
-
"storybook-react-rsbuild": "3.
|
|
64
|
+
"sass": "1.105.1",
|
|
65
|
+
"storybook": "10.6.1",
|
|
66
|
+
"storybook-react-rsbuild": "3.6.0",
|
|
67
67
|
"typescript": "7.0.2",
|
|
68
|
-
"vitest": "
|
|
68
|
+
"vitest": "5.0.3"
|
|
69
69
|
},
|
|
70
70
|
"publishConfig": {
|
|
71
71
|
"access": "public"
|
package/theme.css
CHANGED
|
@@ -366,6 +366,34 @@
|
|
|
366
366
|
@apply bg-neutral-light;
|
|
367
367
|
}
|
|
368
368
|
|
|
369
|
+
/*
|
|
370
|
+
* A Select hides its scrollbar and offers scroll buttons instead, which leaves a long list looking
|
|
371
|
+
* like it ends where it is cut off. These rules bring the scrollbar back, shaped like the thumb
|
|
372
|
+
* `ScrollArea` draws, so the two kinds of dropdown read the same. Radix injects the rules that hide
|
|
373
|
+
* it when the list opens, hence `!important`.
|
|
374
|
+
*/
|
|
375
|
+
[data-radix-select-viewport] {
|
|
376
|
+
/* Back to the initial value, both to undo Radix and because Chrome drops the rules below when
|
|
377
|
+
`scrollbar-width` or `scrollbar-color` say anything else. */
|
|
378
|
+
scrollbar-width: auto !important;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
[data-radix-select-viewport]::-webkit-scrollbar {
|
|
382
|
+
display: block !important;
|
|
383
|
+
width: 10px;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
[data-radix-select-viewport]::-webkit-scrollbar-track {
|
|
387
|
+
background: transparent;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
[data-radix-select-viewport]::-webkit-scrollbar-thumb {
|
|
391
|
+
background-color: color-mix(in oklab, var(--color-neutral-strong) 70%, transparent);
|
|
392
|
+
background-clip: content-box;
|
|
393
|
+
border: 2px solid transparent;
|
|
394
|
+
border-radius: calc(infinity * 1px);
|
|
395
|
+
}
|
|
396
|
+
|
|
369
397
|
@layer base {
|
|
370
398
|
a {
|
|
371
399
|
@apply text-accent-primary hover:underline focus-visible:outline-none focus-visible:ring-lg focus-visible:ring-primary-dimmed rounded-xs;
|