@redocly/theme 0.59.0-next.0 → 0.59.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/lib/components/Accordion/Accordion.d.ts +12 -0
  2. package/lib/components/Accordion/Accordion.js +75 -0
  3. package/lib/components/Accordion/AccordionBody.d.ts +8 -0
  4. package/lib/components/Accordion/AccordionBody.js +63 -0
  5. package/lib/components/Accordion/AccordionHeader.d.ts +10 -0
  6. package/lib/components/Accordion/AccordionHeader.js +37 -0
  7. package/lib/components/Accordion/AccordionTitle.d.ts +6 -0
  8. package/lib/components/Accordion/AccordionTitle.js +20 -0
  9. package/lib/components/Accordion/variables.d.ts +1 -0
  10. package/lib/components/Accordion/variables.js +59 -0
  11. package/lib/components/Buttons/AIAssistantButton.d.ts +2 -0
  12. package/lib/components/Buttons/AIAssistantButton.js +125 -0
  13. package/lib/components/Buttons/variables.d.ts +1 -0
  14. package/lib/components/Buttons/variables.dark.d.ts +1 -0
  15. package/lib/components/Buttons/variables.dark.js +10 -0
  16. package/lib/components/Buttons/variables.js +51 -0
  17. package/lib/components/Catalog/Catalog.js +3 -3
  18. package/lib/components/Catalog/CatalogFilter/CatalogFilter.d.ts +6 -0
  19. package/lib/components/Catalog/CatalogFilter/CatalogFilter.js +35 -0
  20. package/lib/components/Catalog/CatalogFilter/CatalogFilterCheckboxes.d.ts +6 -0
  21. package/lib/components/Catalog/CatalogFilter/CatalogFilterCheckboxes.js +142 -0
  22. package/lib/components/Catalog/CatalogFilter/CatalogFilterContent.d.ts +13 -0
  23. package/lib/components/Catalog/CatalogFilter/CatalogFilterContent.js +92 -0
  24. package/lib/components/Catalog/CatalogFilter/CatalogFilterDateRange.d.ts +6 -0
  25. package/lib/components/Catalog/CatalogFilter/CatalogFilterDateRange.js +111 -0
  26. package/lib/components/Catalog/CatalogFilter/CatalogFilterSelect.d.ts +6 -0
  27. package/lib/components/Catalog/CatalogFilter/CatalogFilterSelect.js +116 -0
  28. package/lib/components/Catalog/CatalogSelector.js +0 -1
  29. package/lib/components/Catalog/variables.js +0 -1
  30. package/lib/components/Filter/FilterInput.d.ts +1 -0
  31. package/lib/components/Filter/FilterInput.js +2 -2
  32. package/lib/components/Filter/FilterOptions.js +2 -0
  33. package/lib/components/Filter/variables.js +7 -4
  34. package/lib/components/Search/SearchAiDialog.js +2 -3
  35. package/lib/components/Search/SearchAiResponse.js +2 -3
  36. package/lib/components/Search/SearchDialog.d.ts +2 -1
  37. package/lib/components/Search/SearchDialog.js +2 -2
  38. package/lib/components/Tag/variables.dark.js +2 -2
  39. package/lib/core/styles/dark.js +29 -26
  40. package/lib/core/styles/global.js +64 -59
  41. package/lib/core/types/l10n.d.ts +1 -1
  42. package/lib/icons/RedoclyIcon/RedoclyIcon.d.ts +9 -0
  43. package/lib/icons/RedoclyIcon/RedoclyIcon.js +27 -0
  44. package/lib/index.d.ts +2 -0
  45. package/lib/index.js +2 -0
  46. package/lib/layouts/RootLayout.js +6 -1
  47. package/package.json +1 -1
  48. package/src/components/Accordion/Accordion.tsx +100 -0
  49. package/src/components/Accordion/AccordionBody.tsx +65 -0
  50. package/src/components/Accordion/AccordionHeader.tsx +68 -0
  51. package/src/components/Accordion/AccordionTitle.tsx +26 -0
  52. package/src/components/Accordion/variables.ts +56 -0
  53. package/src/components/Buttons/AIAssistantButton.tsx +141 -0
  54. package/src/components/Buttons/variables.dark.ts +7 -0
  55. package/src/components/Buttons/variables.ts +48 -0
  56. package/src/components/Catalog/Catalog.tsx +3 -2
  57. package/src/components/Catalog/CatalogFilter/CatalogFilter.tsx +56 -0
  58. package/src/components/Catalog/CatalogFilter/CatalogFilterCheckboxes.tsx +169 -0
  59. package/src/components/Catalog/CatalogFilter/CatalogFilterContent.tsx +121 -0
  60. package/src/components/Catalog/CatalogFilter/CatalogFilterDateRange.tsx +147 -0
  61. package/src/components/Catalog/CatalogFilter/CatalogFilterSelect.tsx +136 -0
  62. package/src/components/Catalog/CatalogSelector.tsx +0 -1
  63. package/src/components/Catalog/variables.ts +0 -1
  64. package/src/components/Filter/FilterInput.tsx +3 -2
  65. package/src/components/Filter/FilterOptions.tsx +2 -0
  66. package/src/components/Filter/variables.ts +7 -4
  67. package/src/components/Search/SearchAiDialog.tsx +2 -2
  68. package/src/components/Search/SearchAiResponse.tsx +2 -2
  69. package/src/components/Search/SearchDialog.tsx +7 -2
  70. package/src/components/Tag/variables.dark.ts +2 -2
  71. package/src/core/styles/dark.ts +11 -8
  72. package/src/core/styles/global.ts +7 -2
  73. package/src/core/types/l10n.ts +1 -0
  74. package/src/icons/RedoclyIcon/RedoclyIcon.tsx +44 -0
  75. package/src/index.ts +2 -0
  76. package/src/layouts/RootLayout.tsx +6 -0
@@ -0,0 +1,12 @@
1
+ import type { PropsWithChildren, ReactNode, JSX } from 'react';
2
+ import type { AccordionHeaderProps } from '../../components/Accordion/AccordionHeader';
3
+ export type AccordionProps = {
4
+ expanded?: boolean;
5
+ isExpandable?: boolean;
6
+ className?: string;
7
+ renderChildrenHidden?: boolean;
8
+ header?: ReactNode | ((props: AccordionHeaderProps) => ReactNode);
9
+ onToggle?: (expanded: boolean) => void;
10
+ dataTestId?: string;
11
+ };
12
+ export declare function Accordion({ expanded, isExpandable, renderChildrenHidden, header, className, children, onToggle, dataTestId, }: PropsWithChildren<AccordionProps>): JSX.Element;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Accordion = Accordion;
30
+ const react_1 = __importStar(require("react"));
31
+ const styled_components_1 = __importDefault(require("styled-components"));
32
+ const AccordionBody_1 = require("../../components/Accordion/AccordionBody");
33
+ const AccordionHeader_1 = require("../../components/Accordion/AccordionHeader");
34
+ const AccordionTitle_1 = require("../../components/Accordion/AccordionTitle");
35
+ const ChevronDownIcon_1 = require("../../icons/ChevronDownIcon/ChevronDownIcon");
36
+ const ChevronRightIcon_1 = require("../../icons/ChevronRightIcon/ChevronRightIcon");
37
+ function Accordion({ expanded = true, isExpandable = true, renderChildrenHidden = false, header, className, children, onToggle, dataTestId, }) {
38
+ const [isExpanded, setExpanded] = (0, react_1.useState)(expanded);
39
+ const [animate, setAnimate] = (0, react_1.useState)(false);
40
+ const toggle = ({ target }) => {
41
+ if (target instanceof HTMLAnchorElement || !isExpandable)
42
+ return;
43
+ setAnimate(true);
44
+ setExpanded(!isExpanded);
45
+ onToggle === null || onToggle === void 0 ? void 0 : onToggle(!isExpanded);
46
+ };
47
+ (0, react_1.useEffect)(() => setExpanded(expanded), [expanded]);
48
+ return (react_1.default.createElement(AccordionWrapper, { className: className, "data-testid": dataTestId, "data-component-name": "Accordion/Accordion" },
49
+ header &&
50
+ (typeof header === 'function' ? (header({ expanded: isExpanded })) : (react_1.default.createElement(AccordionHeader_1.AccordionHeader, { "data-testid": "accordion-header", onClick: toggle, expanded: isExpanded, isExpandable: isExpandable },
51
+ react_1.default.createElement(HeaderContent, null,
52
+ react_1.default.createElement(AccordionTitle_1.AccordionTitle, { "data-testid": "title" }, header),
53
+ isExpandable &&
54
+ (isExpanded ? (react_1.default.createElement(ChevronDownIcon_1.ChevronDownIcon, { color: "--accordion-chevron-icon-color" })) : (react_1.default.createElement(ChevronRightIcon_1.ChevronRightIcon, { color: "--accordion-chevron-icon-color" }))))))),
55
+ (isExpanded || renderChildrenHidden) && (react_1.default.createElement(AccordionBody_1.AccordionBody, { "data-testid": "accordion-body", hidden: !isExpanded, animate: animate }, children))));
56
+ }
57
+ const AccordionWrapper = styled_components_1.default.div `
58
+ background-color: transparent;
59
+ font-family: var(--accordion-font-family);
60
+ font-size: var(--accordion-font-size);
61
+ font-weight: var(--accordion-font-weight);
62
+ border-radius: var(--accordion-border-radius);
63
+ border: var(--accordion-border);
64
+
65
+ &:not(:last-child) {
66
+ margin-bottom: var(--accordion-gap);
67
+ }
68
+ `;
69
+ const HeaderContent = styled_components_1.default.div `
70
+ display: flex;
71
+ align-items: center;
72
+ width: 100%;
73
+ gap: var(--spacing-xs);
74
+ `;
75
+ //# sourceMappingURL=Accordion.js.map
@@ -0,0 +1,8 @@
1
+ import type { JSX, ReactNode } from 'react';
2
+ export type AccordionBodyProps = {
3
+ animate?: boolean;
4
+ hidden?: boolean;
5
+ children?: ReactNode;
6
+ className?: string;
7
+ };
8
+ export declare function AccordionBody({ animate, hidden, children, className, }: AccordionBodyProps): JSX.Element;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.AccordionBody = AccordionBody;
30
+ const react_1 = __importDefault(require("react"));
31
+ const styled_components_1 = __importStar(require("styled-components"));
32
+ function AccordionBody({ animate, hidden, children, className, }) {
33
+ return (react_1.default.createElement(AccordionBodyWrapper, { className: className, "$animate": animate, "$hidden": hidden, "data-component-name": "Accordion/AccordionBody" }, children));
34
+ }
35
+ const showAccordion = (0, styled_components_1.keyframes) `
36
+ 0% {
37
+ opacity: 0;
38
+ transform: translateY(-5px);
39
+ }
40
+ 100% {
41
+ opacity: 1;
42
+ transform: translateY(0);
43
+ }
44
+ `;
45
+ const showAccordionAnimation = (0, styled_components_1.css) `
46
+ animation: ${showAccordion} 0.15s ease-out;
47
+ `;
48
+ const AccordionBodyWrapper = styled_components_1.default.div `
49
+ ${({ $animate }) => $animate && showAccordionAnimation};
50
+ ${({ $hidden }) => $hidden && 'visibility: hidden'};
51
+
52
+ background-color: var(--accordion-body-bg-color);
53
+
54
+ font-family: var(--accordion-body-font-family);
55
+ font-size: var(--accordion-body-font-size);
56
+ font-weight: var(--accordion-body-font-weight);
57
+ border: var(--accordion-body-border);
58
+ padding: var(--accordion-body-padding);
59
+ color: var(--accordion-body-text-color);
60
+
61
+ border-radius: var(--accordion-border-radius);
62
+ `;
63
+ //# sourceMappingURL=AccordionBody.js.map
@@ -0,0 +1,10 @@
1
+ import type { BaseSyntheticEvent, JSX, ReactNode } from 'react';
2
+ export type AccordionHeaderProps = {
3
+ isExpandable?: boolean;
4
+ expanded?: boolean;
5
+ disabled?: boolean;
6
+ children?: ReactNode;
7
+ className?: string;
8
+ onClick?: (e: BaseSyntheticEvent) => void;
9
+ };
10
+ export declare function AccordionHeader({ isExpandable, expanded, disabled, children, className, onClick, }: AccordionHeaderProps): JSX.Element;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AccordionHeader = AccordionHeader;
7
+ const react_1 = __importDefault(require("react"));
8
+ const styled_components_1 = __importDefault(require("styled-components"));
9
+ function AccordionHeader({ isExpandable, expanded, disabled, children, className, onClick, }) {
10
+ return (react_1.default.createElement(AccordionHeaderWrapper, { className: className, "$isExpandable": isExpandable, "$expanded": expanded, "$disabled": disabled, onClick: onClick, "data-component-name": "Accordion/AccordionHeader" }, children));
11
+ }
12
+ const AccordionHeaderWrapper = styled_components_1.default.div `
13
+ display: flex;
14
+ gap: var(--spacing-xs);
15
+ align-items: center;
16
+ justify-content: space-between;
17
+ min-height: 32px;
18
+ color: var(--accordion-header-text-color);
19
+
20
+ cursor: ${({ $isExpandable = true }) => ($isExpandable ? 'pointer' : 'default')};
21
+
22
+ line-height: var(--accordion-header-line-height);
23
+ font-size: var(--accordion-header-font-size);
24
+ font-family: var(--accordion-header-font-family);
25
+ font-weight: var(--accordion-header-font-weight);
26
+ padding: var(--accordion-header-padding);
27
+ border: var(--accordion-header-border);
28
+ background-color: var(--accordion-header-bg-color);
29
+ border-radius: var(--accordion-border-radius);
30
+
31
+ pointer-events: ${({ $disabled }) => ($disabled ? 'none' : 'auto')};
32
+
33
+ &:hover {
34
+ color: ${({ $isExpandable = true }) => $isExpandable ? 'var(--text-color-primary)' : 'var(--accordion-header-text-color)'};
35
+ }
36
+ `;
37
+ //# sourceMappingURL=AccordionHeader.js.map
@@ -0,0 +1,6 @@
1
+ import type { JSX, ReactNode } from 'react';
2
+ export type AccordionTitleProps = {
3
+ children?: ReactNode;
4
+ className?: string;
5
+ };
6
+ export declare function AccordionTitle({ children, className }: AccordionTitleProps): JSX.Element;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AccordionTitle = AccordionTitle;
7
+ const react_1 = __importDefault(require("react"));
8
+ const styled_components_1 = __importDefault(require("styled-components"));
9
+ function AccordionTitle({ children, className }) {
10
+ return (react_1.default.createElement(AccordionTitleWrapper, { className: className, "data-component-name": "Accordion/AccordionTitle" }, children));
11
+ }
12
+ const AccordionTitleWrapper = styled_components_1.default.span `
13
+ font-weight: var(--accordion-header-font-weight);
14
+ line-height: var(--line-height-base);
15
+ overflow: hidden;
16
+ text-overflow: ellipsis;
17
+ color: var(--accordion-header-text-color);
18
+ flex: 1;
19
+ `;
20
+ //# sourceMappingURL=AccordionTitle.js.map
@@ -0,0 +1 @@
1
+ export declare const accordion: import("styled-components").FlattenSimpleInterpolation;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.accordion = void 0;
4
+ const styled_components_1 = require("styled-components");
5
+ exports.accordion = (0, styled_components_1.css) `
6
+ /**
7
+ * @tokens Accordion spacing
8
+ * @presenter Spacing
9
+ */
10
+
11
+ --accordion-gap: var(--spacing-base);
12
+
13
+ /**
14
+ * @tokens Accordion common
15
+ */
16
+
17
+ --accordion-border-radius: var(--border-radius); // @presenter BorderRadius
18
+ --accordion-border: none; // @presenter Border
19
+
20
+ --accordion-line-height: var(--line-height-base); // @presenter LineHeight
21
+ --accordion-font-size: var(--font-size-base); // @presenter FontSize
22
+ --accordion-font-family: var(--font-family-base); // @presenter FontFamily
23
+ --accordion-font-weight: var(--font-weight-regular); // @presenter FontWeight
24
+
25
+ /**
26
+ * @tokens Accordion header common
27
+ */
28
+
29
+ --accordion-header-font-family: var(--font-family-base); // @presenter FontFamily
30
+ --accordion-header-font-size: var(--font-size-base); // @presenter FontSize
31
+ --accordion-header-font-weight: var(--font-weight-medium, 500); // @presenter FontWeight
32
+ --accordion-header-text-color: var(--text-color-primary);
33
+ --accordion-header-padding: var(--spacing-sm) var(--spacing-base);
34
+ --accordion-header-line-height: var(--line-height-base); // @presenter LineHeight
35
+ --accordion-header-bg-color: transparent; // @presenter Color
36
+ --accordion-header-border: none; // @presenter Border
37
+
38
+ /**
39
+ * @tokens Accordion body common
40
+ */
41
+
42
+ --accordion-body-font-family: var(--font-family-base); // @presenter FontFamily
43
+ --accordion-body-font-size: var(--font-size-base); // @presenter FontSize
44
+ --accordion-body-font-weight: var(--font-weight-regular); // @presenter FontWeight
45
+ --accordion-body-text-color: var(--text-color-secondary);
46
+ --accordion-body-padding: 0 var(--spacing-xs) var(--spacing-sm);
47
+ --accordion-body-bg-color: transparent; // @presenter Color
48
+ --accordion-body-border: none; // @presenter Border
49
+
50
+ /**
51
+ * @tokens Accordion chevron icon
52
+ */
53
+
54
+ --accordion-chevron-icon-color: var(--text-color-secondary); // @presenter Color
55
+ --accordion-chevron-icon-size: 16px;
56
+
57
+ // @tokens End
58
+ `;
59
+ //# sourceMappingURL=variables.js.map
@@ -0,0 +1,2 @@
1
+ import * as React from 'react';
2
+ export declare function AIAssistantButton(): React.JSX.Element | null;
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.AIAssistantButton = AIAssistantButton;
30
+ const React = __importStar(require("react"));
31
+ const react_1 = require("react");
32
+ const styled_components_1 = __importDefault(require("styled-components"));
33
+ const Button_1 = require("../../components/Button/Button");
34
+ const SearchDialog_1 = require("../../components/Search/SearchDialog");
35
+ const hooks_1 = require("../../core/hooks");
36
+ const ChatIcon_1 = require("../../icons/ChatIcon/ChatIcon");
37
+ const AiStarsGradientIcon_1 = require("../../icons/AiStarsGradientIcon/AiStarsGradientIcon");
38
+ const RedoclyIcon_1 = require("../../icons/RedoclyIcon/RedoclyIcon");
39
+ const defaultConfig = {
40
+ hide: false,
41
+ inputType: 'button',
42
+ inputIcon: 'redocly',
43
+ };
44
+ const getIcon = (iconType, inputType = 'button') => {
45
+ const iconSize = inputType === 'icon'
46
+ ? 'var(--ai-assistant-button-icon-icon-size)'
47
+ : 'var(--ai-assistant-button-text-icon-size)';
48
+ const redoclyIcon = (React.createElement(RedoclyIcon_1.RedoclyIcon, { size: iconSize, color: "var(--ai-assistant-button-redocly-icon-color)" }));
49
+ const sparklesIcon = (React.createElement(AiStarsGradientIcon_1.AiStarsGradientIcon, { size: iconSize, color: "var(--search-ai-button-icon-color)" }));
50
+ const chatIcon = React.createElement(ChatIcon_1.ChatIcon, { size: iconSize });
51
+ switch (iconType) {
52
+ case 'chat':
53
+ return chatIcon;
54
+ case 'sparkles':
55
+ return sparklesIcon;
56
+ case 'redocly':
57
+ return redoclyIcon;
58
+ default:
59
+ return redoclyIcon;
60
+ }
61
+ };
62
+ function AIAssistantButton() {
63
+ var _a, _b;
64
+ const [isOpen, setIsOpen] = (0, react_1.useState)(false);
65
+ const themeConfig = (0, hooks_1.useThemeConfig)();
66
+ const { useTranslate } = (0, hooks_1.useThemeHooks)();
67
+ const { translate } = useTranslate();
68
+ const buttonConfig = Object.assign(Object.assign({}, defaultConfig), ((_b = (_a = themeConfig.aiAssistant) === null || _a === void 0 ? void 0 : _a.trigger) !== null && _b !== void 0 ? _b : {}));
69
+ const { hide, inputIcon, inputType } = buttonConfig;
70
+ if (hide) {
71
+ return null;
72
+ }
73
+ const icon = getIcon(inputIcon, inputType);
74
+ const text = translate('aiAssistant.trigger', 'Ask AI');
75
+ const handleOpen = () => {
76
+ setIsOpen(true);
77
+ };
78
+ const handleClose = () => {
79
+ setIsOpen(false);
80
+ };
81
+ return (React.createElement(React.Fragment, null,
82
+ React.createElement(StyledAIAssistantButton, { variant: "outlined", size: "medium", "$inputType": inputType, onClick: handleOpen, "aria-label": `AI Assistant button - ${inputIcon}`, "data-component-name": "Buttons/AIAssistantButton" },
83
+ icon,
84
+ inputType === 'button' && text),
85
+ isOpen && React.createElement(SearchDialog_1.SearchDialog, { onClose: handleClose, initialMode: "ai-dialog" })));
86
+ }
87
+ const StyledAIAssistantButton = (0, styled_components_1.default)(Button_1.Button) `
88
+ position: fixed;
89
+ bottom: var(--ai-assistant-button-bottom);
90
+ right: var(--ai-assistant-button-right);
91
+ ${({ $inputType }) => $inputType === 'icon'
92
+ ? `
93
+ border-radius: var(--ai-assistant-button-border-radius-icon);
94
+ width: var(--ai-assistant-button-icon-size);
95
+ height: var(--ai-assistant-button-icon-size);
96
+ `
97
+ : `
98
+ border-radius: var(--ai-assistant-button-border-radius-text);
99
+ padding: var(--ai-assistant-button-text-padding);
100
+ height: var(--ai-assistant-button-text-height);
101
+ `}
102
+ min-width: var(--ai-assistant-button-min-width);
103
+ font-size: var(--ai-assistant-button-font-size);
104
+ font-weight: var(--ai-assistant-button-font-weight);
105
+ box-shadow: var(--bg-raised-shadow);
106
+ z-index: var(--ai-assistant-button-z-index);
107
+ display: flex;
108
+ align-items: center;
109
+ justify-content: center;
110
+ gap: var(--ai-assistant-button-gap);
111
+ background-color: var(--ai-assistant-button-bg-color) !important;
112
+
113
+ transition: var(--ai-assistant-button-transition);
114
+
115
+ &:hover {
116
+ box-shadow: var(--ai-assistant-button-shadow-hover);
117
+ transform: var(--ai-assistant-button-transform-hover);
118
+ }
119
+
120
+ &:active {
121
+ transform: var(--bg-raised-shadow);
122
+ box-shadow: var(--ai-assistant-button-shadow-active);
123
+ }
124
+ `;
125
+ //# sourceMappingURL=AIAssistantButton.js.map
@@ -0,0 +1 @@
1
+ export declare const aiAssistantButton: import("styled-components").FlattenSimpleInterpolation;
@@ -0,0 +1 @@
1
+ export declare const aiAssistantButtonDarkMode: import("styled-components").FlattenSimpleInterpolation;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aiAssistantButtonDarkMode = void 0;
4
+ const styled_components_1 = require("styled-components");
5
+ exports.aiAssistantButtonDarkMode = (0, styled_components_1.css) `
6
+
7
+ /* Background color */
8
+ --ai-assistant-button-bg-color: var(--color-warm-grey-4);
9
+ `;
10
+ //# sourceMappingURL=variables.dark.js.map
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aiAssistantButton = void 0;
4
+ const styled_components_1 = require("styled-components");
5
+ exports.aiAssistantButton = (0, styled_components_1.css) `
6
+ /**
7
+ * @tokens AI Assistant Button
8
+ * @presenter Color
9
+ */
10
+
11
+ /* Button sizing */
12
+ --ai-assistant-button-icon-size: 40px;
13
+ --ai-assistant-button-text-height: 40px;
14
+ --ai-assistant-button-text-padding: var(--spacing-sm) var(--spacing-md);
15
+ --ai-assistant-button-border-radius-icon: 50%;
16
+ --ai-assistant-button-border-radius-text: 1.75rem;
17
+ --ai-assistant-button-min-width: auto;
18
+
19
+ /* Icon sizing */
20
+ --ai-assistant-button-icon-icon-size: 18px;
21
+ --ai-assistant-button-text-icon-size: 20px;
22
+
23
+ /* Positioning */
24
+ --ai-assistant-button-bottom: var(--spacing-xl);
25
+ --ai-assistant-button-right: var(--spacing-xl);
26
+ --ai-assistant-button-z-index: 1000;
27
+
28
+ /* Typography */
29
+ --ai-assistant-button-font-size: var(--font-size-base);
30
+ --ai-assistant-button-font-weight: var(--font-weight-medium);
31
+ --ai-assistant-button-gap: var(--spacing-xs);
32
+
33
+ /* Background color */
34
+ --ai-assistant-button-bg-color: var(--color-static-white);
35
+
36
+ /* Icon colors */
37
+ --ai-assistant-button-redocly-icon-color: #297AFE;
38
+
39
+ /* Transform */
40
+ --ai-assistant-button-transform-hover: none;
41
+ --ai-assistant-button-transform-active: translateY(0);
42
+
43
+ /* Shadow */
44
+ --ai-assistant-button-shadow-hover:
45
+ 2px 1px 12px 4px rgba(143, 98, 254, 0.2),
46
+ -3px -2px 24px 0px rgba(41, 122, 254, 0.2);
47
+
48
+ /* Transition */
49
+ --ai-assistant-button-transition: box-shadow 0.3s ease, transform 0.2s ease;
50
+ `;
51
+ //# sourceMappingURL=variables.js.map
@@ -9,7 +9,7 @@ const styled_components_1 = __importDefault(require("styled-components"));
9
9
  const utils_1 = require("../../core/utils");
10
10
  const hooks_1 = require("../../core/hooks");
11
11
  const H3_1 = require("../../components/Typography/H3");
12
- const FilterContent_1 = require("../../components/Filter/FilterContent");
12
+ const CatalogFilterContent_1 = require("../../components/Catalog/CatalogFilter/CatalogFilterContent");
13
13
  const Sidebar_1 = require("../../components/Sidebar/Sidebar");
14
14
  const CatalogSelector_1 = require("../../components/Catalog/CatalogSelector");
15
15
  const SidebarActions_1 = require("../../components/SidebarActions/SidebarActions");
@@ -38,7 +38,7 @@ function Catalog(props) {
38
38
  const { filters, searchQuery, setSearchQuery, filterQuery, sortOption, setSortOption, handleSortClick, isColumnSorted, viewMode, setViewMode, entitiesCounter, setEntitiesCounter, onChangeViewClick, onChangeCollapseSidebarClick, layout, collapsedSidebar, } = useCatalog(catalogConfig, (initialEntitiesList === null || initialEntitiesList === void 0 ? void 0 : initialEntitiesList.page.total) || 0, initialViewMode);
39
39
  return (react_1.default.createElement(react_1.default.Fragment, null,
40
40
  react_1.default.createElement(CatalogPageWrapper, { "data-component-name": "Catalog/Catalog" },
41
- react_1.default.createElement(FiltersSidebar, { collapsed: collapsedSidebar, header: collapsedSidebar ? null : (react_1.default.createElement(CatalogSelector_1.CatalogSelector, { catalogSwitcherItems: catalogSwitcherItems, setSearchQuery: setSearchQuery, setSortOption: setSortOption })), menu: react_1.default.createElement(FilterContent_1.FilterContent, { setFilterTerm: setSearchQuery, filters: filters, filterTerm: searchQuery, hideSearch: true, showCounter: false, filterValuesCasing: customCatalogOptionsCasing }), footer: react_1.default.createElement(SidebarActions_1.SidebarActions, { layout: layout, collapsedSidebar: collapsedSidebar, isApiDocs: false, onChangeViewClick: onChangeViewClick, onChangeCollapseSidebarClick: onChangeCollapseSidebarClick }) }),
41
+ react_1.default.createElement(FiltersSidebar, { collapsed: collapsedSidebar, header: collapsedSidebar ? null : (react_1.default.createElement(CatalogSelector_1.CatalogSelector, { catalogSwitcherItems: catalogSwitcherItems, setSearchQuery: setSearchQuery, setSortOption: setSortOption })), menu: react_1.default.createElement(CatalogFilterContent_1.CatalogFilterContent, { setFilterTerm: setSearchQuery, filters: filters, filterTerm: searchQuery, hideSearch: true, showCounter: false, filterValuesCasing: customCatalogOptionsCasing }), footer: react_1.default.createElement(SidebarActions_1.SidebarActions, { layout: layout, collapsedSidebar: collapsedSidebar, isApiDocs: false, onChangeViewClick: onChangeViewClick, onChangeCollapseSidebarClick: onChangeCollapseSidebarClick }) }),
42
42
  react_1.default.createElement(CatalogPageContent, null,
43
43
  react_1.default.createElement(CatalogPageDescription, null,
44
44
  react_1.default.createElement(CatalogTitleWrapper, null,
@@ -51,7 +51,7 @@ function Catalog(props) {
51
51
  react_1.default.createElement(CatalogDescription, { "data-translation-key": catalogConfig === null || catalogConfig === void 0 ? void 0 : catalogConfig.descriptionTranslationKey }, translate(catalogConfig === null || catalogConfig === void 0 ? void 0 : catalogConfig.descriptionTranslationKey))),
52
52
  react_1.default.createElement(CatalogActionsRow, null,
53
53
  react_1.default.createElement(CatalogSearchInputWrapper, null,
54
- react_1.default.createElement(FilterInput_1.FilterInput, { value: searchQuery, onChange: (updatedTerm) => setSearchQuery(updatedTerm) })),
54
+ react_1.default.createElement(FilterInput_1.FilterInput, { value: searchQuery, onChange: (updatedTerm) => setSearchQuery(updatedTerm), dataTestId: "catalog-search-input" })),
55
55
  react_1.default.createElement(CatalogControlsWrapper, null,
56
56
  react_1.default.createElement(CatalogSortButton_1.CatalogSortButton, { onSortChange: setSortOption, currentSort: sortOption }),
57
57
  react_1.default.createElement(CatalogViewModeToggle_1.CatalogViewModeToggle, { viewMode: viewMode, onViewModeChange: setViewMode }))),
@@ -0,0 +1,6 @@
1
+ import type { JSX } from 'react';
2
+ import type { FilterProps } from '../../../core/types';
3
+ export type CatalogFilterProps = FilterProps & {
4
+ className?: string;
5
+ };
6
+ export declare function CatalogFilter({ filter, filterValuesCasing, showCounter, className, }: CatalogFilterProps): JSX.Element | null;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CatalogFilter = CatalogFilter;
7
+ const react_1 = __importDefault(require("react"));
8
+ const styled_components_1 = __importDefault(require("styled-components"));
9
+ const CatalogFilterSelect_1 = require("../../../components/Catalog/CatalogFilter/CatalogFilterSelect");
10
+ const CatalogFilterCheckboxes_1 = require("../../../components/Catalog/CatalogFilter/CatalogFilterCheckboxes");
11
+ const CatalogFilterDateRange_1 = require("../../../components/Catalog/CatalogFilter/CatalogFilterDateRange");
12
+ const filterComponents = {
13
+ select: CatalogFilterSelect_1.CatalogFilterSelect,
14
+ 'date-range': CatalogFilterDateRange_1.CatalogFilterDateRange,
15
+ checkboxes: CatalogFilterCheckboxes_1.CatalogFilterCheckboxes,
16
+ };
17
+ function CatalogFilter({ filter, filterValuesCasing, showCounter = true, className, }) {
18
+ if (!filter.parentUsed)
19
+ return null;
20
+ const FilterComponent = filterComponents[(filter.type || 'checkboxes')];
21
+ return (react_1.default.createElement(CatalogFilterGroup, { className: className, "data-component-name": "Catalog/CatalogFilter", key: filter.property + filter.title },
22
+ react_1.default.createElement(FilterComponent, { filter: filter, filterValuesCasing: filterValuesCasing, showCounter: showCounter })));
23
+ }
24
+ const CatalogFilterGroup = styled_components_1.default.div `
25
+ padding: var(--filter-group-padding);
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: var(--filter-group-gap);
29
+ border-bottom: 1px solid var(--catalog-table-border-color);
30
+
31
+ &:first-child {
32
+ border-top: 1px solid var(--catalog-table-border-color);
33
+ }
34
+ `;
35
+ //# sourceMappingURL=CatalogFilter.js.map
@@ -0,0 +1,6 @@
1
+ import type { JSX } from 'react';
2
+ import type { FilterProps } from '../../../core/types';
3
+ export type CatalogFilterCheckboxesProps = FilterProps & {
4
+ className?: string;
5
+ };
6
+ export declare function CatalogFilterCheckboxes({ filter, filterValuesCasing, showCounter, className, }: CatalogFilterCheckboxesProps): JSX.Element;