@nospt/plugin-dev-ai-hub 0.1.0 → 0.2.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 (71) hide show
  1. package/dev/index.tsx +17 -217
  2. package/dist/api/DevAiHubClient.esm.js +2 -0
  3. package/dist/api/DevAiHubClient.esm.js.map +1 -1
  4. package/dist/components/AssetCard/AssetCard.esm.js +60 -134
  5. package/dist/components/AssetCard/AssetCard.esm.js.map +1 -1
  6. package/dist/components/AssetCard/AssetCard.module.css.esm.js +8 -0
  7. package/dist/components/AssetCard/AssetCard.module.css.esm.js.map +1 -0
  8. package/dist/components/AssetDetailPanel/AssetDetailPanel.esm.js +175 -281
  9. package/dist/components/AssetDetailPanel/AssetDetailPanel.esm.js.map +1 -1
  10. package/dist/components/AssetDetailPanel/AssetDetailPanel.module.css.esm.js +8 -0
  11. package/dist/components/AssetDetailPanel/AssetDetailPanel.module.css.esm.js.map +1 -0
  12. package/dist/components/AssetFilters/AssetFilters.esm.js +94 -134
  13. package/dist/components/AssetFilters/AssetFilters.esm.js.map +1 -1
  14. package/dist/components/AssetFilters/AssetFilters.module.css.esm.js +8 -0
  15. package/dist/components/AssetFilters/AssetFilters.module.css.esm.js.map +1 -0
  16. package/dist/components/AssetInstallDialog/AssetInstallDialog.esm.js +70 -126
  17. package/dist/components/AssetInstallDialog/AssetInstallDialog.esm.js.map +1 -1
  18. package/dist/components/AssetInstallDialog/AssetInstallDialog.module.css.esm.js +8 -0
  19. package/dist/components/AssetInstallDialog/AssetInstallDialog.module.css.esm.js.map +1 -0
  20. package/dist/components/DevAiHubPage/DevAiHubPage.esm.js +64 -189
  21. package/dist/components/DevAiHubPage/DevAiHubPage.esm.js.map +1 -1
  22. package/dist/components/DevAiHubPage/DevAiHubPage.module.css.esm.js +8 -0
  23. package/dist/components/DevAiHubPage/DevAiHubPage.module.css.esm.js.map +1 -0
  24. package/dist/components/McpConfigPage/McpConfigPage.esm.js +200 -0
  25. package/dist/components/McpConfigPage/McpConfigPage.esm.js.map +1 -0
  26. package/dist/components/McpConfigPage/McpConfigPage.module.css.esm.js +8 -0
  27. package/dist/components/McpConfigPage/McpConfigPage.module.css.esm.js.map +1 -0
  28. package/dist/components/McpConfigPage/index.esm.js +6 -0
  29. package/dist/components/McpConfigPage/index.esm.js.map +1 -0
  30. package/dist/components/ToolIcon/ToolIcon.esm.js +25 -13
  31. package/dist/components/ToolIcon/ToolIcon.esm.js.map +1 -1
  32. package/dist/index.d.ts +10 -5
  33. package/dist/index.esm.js +1 -1
  34. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js +29 -0
  35. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js.map +1 -0
  36. package/dist/plugin.esm.js +24 -6
  37. package/dist/plugin.esm.js.map +1 -1
  38. package/dist/routes.esm.js +2 -1
  39. package/dist/routes.esm.js.map +1 -1
  40. package/package.json +24 -14
  41. package/package.json-prepack +24 -14
  42. package/src/components/AssetCard/AssetCard.module.css +153 -0
  43. package/src/components/AssetCard/AssetCard.tsx +79 -148
  44. package/src/components/AssetDetailPanel/AssetDetailPanel.module.css +207 -0
  45. package/src/components/AssetDetailPanel/AssetDetailPanel.tsx +228 -292
  46. package/src/components/AssetFilters/AssetFilters.module.css +67 -0
  47. package/src/components/AssetFilters/AssetFilters.tsx +136 -178
  48. package/src/components/AssetInstallDialog/AssetInstallDialog.module.css +72 -0
  49. package/src/components/AssetInstallDialog/AssetInstallDialog.tsx +95 -135
  50. package/src/components/DevAiHubPage/DevAiHubPage.module.css +105 -0
  51. package/src/components/DevAiHubPage/DevAiHubPage.tsx +73 -222
  52. package/src/components/McpConfigDialog/McpConfigDialog.module.css +111 -0
  53. package/src/components/McpConfigDialog/McpConfigDialog.tsx +178 -208
  54. package/src/components/McpConfigPage/McpConfigPage.module.css +121 -0
  55. package/src/components/McpConfigPage/McpConfigPage.tsx +242 -0
  56. package/src/components/McpConfigPage/index.ts +1 -0
  57. package/src/components/ToolIcon/ToolIcon.tsx +31 -15
  58. package/src/css-modules.d.ts +4 -0
  59. package/src/index.ts +1 -1
  60. package/src/plugin.tsx +23 -3
  61. package/src/routes.ts +1 -0
  62. package/tests/e2e/.auth.json +14 -0
  63. package/tests/e2e/asset-detail.spec.ts +90 -0
  64. package/tests/e2e/asset-filtering.spec.ts +145 -0
  65. package/tests/e2e/asset-installation.spec.ts +74 -0
  66. package/tests/e2e/dev-ai-hub-page.spec.ts +89 -0
  67. package/tests/e2e/fixtures/base.ts +61 -0
  68. package/tests/e2e/fixtures/mock-api.ts +221 -0
  69. package/tests/e2e/mcp-config.spec.ts +88 -0
  70. package/dist/components/McpConfigDialog/McpConfigDialog.esm.js +0 -274
  71. package/dist/components/McpConfigDialog/McpConfigDialog.esm.js.map +0 -1
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
+
3
+ var css_248z = "@layer components {\n .AssetDetailPanel_drawer__6af6db61b0 {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 640px;\n max-width: 100vw;\n background-color: var(--bui-bg-neutral-1);\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.15);\n z-index: 1300;\n display: flex;\n flex-direction: column;\n }\n\n .AssetDetailPanel_overlay__6af6db61b0 {\n position: fixed;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.9);\n z-index: 1299;\n }\n\n .AssetDetailPanel_panelContainer__6af6db61b0 {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .AssetDetailPanel_header__6af6db61b0 {\n padding: var(--bui-space-4);\n display: flex;\n align-items: flex-start;\n gap: var(--bui-space-4);\n border-bottom: 1px solid var(--bui-border-1);\n }\n\n .AssetDetailPanel_headerContent__6af6db61b0 {\n flex: 1;\n }\n\n .AssetDetailPanel_loadingRow__6af6db61b0 {\n display: flex;\n align-items: center;\n gap: var(--bui-space-2);\n }\n\n .AssetDetailPanel_nameRow__6af6db61b0 {\n display: flex;\n align-items: center;\n gap: var(--bui-space-2);\n margin-bottom: var(--bui-space-1);\n }\n\n .AssetDetailPanel_typeTag__6af6db61b0 {\n font-weight: 600;\n }\n\n .AssetDetailPanel_tabBar__6af6db61b0 {\n border-bottom: 1px solid var(--bui-border-1);\n padding: 0 var(--bui-space-4);\n }\n\n .AssetDetailPanel_contentArea__6af6db61b0 {\n flex: 1;\n overflow: auto;\n padding: var(--bui-space-4);\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 {\n font-size: 0.9375rem;\n line-height: 1.7;\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 h1,\n .AssetDetailPanel_markdownContent__6af6db61b0 h2,\n .AssetDetailPanel_markdownContent__6af6db61b0 h3,\n .AssetDetailPanel_markdownContent__6af6db61b0 h4,\n .AssetDetailPanel_markdownContent__6af6db61b0 h5,\n .AssetDetailPanel_markdownContent__6af6db61b0 h6 {\n margin-top: var(--bui-space-4);\n margin-bottom: var(--bui-space-2);\n font-weight: 700;\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 p {\n margin-bottom: var(--bui-space-2);\n line-height: 1.7;\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 ul,\n .AssetDetailPanel_markdownContent__6af6db61b0 ol {\n padding-left: var(--bui-space-6);\n margin-bottom: var(--bui-space-2);\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 li {\n margin-bottom: var(--bui-space-1);\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 blockquote {\n border-left: 3px solid var(--bui-ring);\n padding-left: var(--bui-space-3);\n color: var(--bui-fg-secondary);\n margin: var(--bui-space-2) 0;\n margin-left: 0;\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: var(--bui-space-2);\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 th,\n .AssetDetailPanel_markdownContent__6af6db61b0 td {\n border: 1px solid var(--bui-border-1);\n padding: var(--bui-space-2) var(--bui-space-3);\n font-size: 0.875rem;\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 th {\n background-color: var(--bui-bg-neutral-1-hover);\n font-weight: 700;\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 code {\n background-color: var(--bui-bg-neutral-1-hover);\n padding: 1px var(--bui-space-1);\n border-radius: var(--bui-radius-2);\n font-family: monospace;\n font-size: 0.875em;\n }\n\n .AssetDetailPanel_markdownContent__6af6db61b0 pre code {\n background-color: transparent;\n padding: 0;\n }\n\n .AssetDetailPanel_codeBlockWrapper__6af6db61b0 {\n margin: var(--bui-space-2) 0;\n }\n\n .AssetDetailPanel_metaSection__6af6db61b0 {\n display: flex;\n flex-direction: column;\n gap: var(--bui-space-3);\n }\n\n .AssetDetailPanel_metaRow__6af6db61b0 {\n display: flex;\n align-items: baseline;\n gap: var(--bui-space-2);\n }\n\n .AssetDetailPanel_metaLabel__6af6db61b0 {\n min-width: 90px;\n flex-shrink: 0;\n }\n\n .AssetDetailPanel_chipsRow__6af6db61b0 {\n display: flex;\n gap: var(--bui-space-2);\n flex-wrap: wrap;\n margin-top: var(--bui-space-1);\n }\n\n .AssetDetailPanel_bundledHeader__6af6db61b0 {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: var(--bui-space-1);\n }\n\n .AssetDetailPanel_rawYaml__6af6db61b0 {\n margin: 0;\n padding: var(--bui-space-4);\n border-radius: var(--bui-radius-2);\n border: 1px solid var(--bui-border-1);\n overflow: auto;\n font-size: 0.8rem;\n font-family: monospace;\n white-space: pre-wrap;\n word-break: break-word;\n background-color: var(--bui-bg-neutral-1-hover);\n }\n\n .AssetDetailPanel_actions__6af6db61b0 {\n padding: var(--bui-space-4);\n border-top: 1px solid var(--bui-border-1);\n display: flex;\n gap: var(--bui-space-2);\n flex-wrap: wrap;\n }\n\n .AssetDetailPanel_repoLink__6af6db61b0 {\n display: inline-flex;\n align-items: center;\n gap: var(--bui-space-1);\n }\n\n .AssetDetailPanel_divider__6af6db61b0 {\n height: 1px;\n background-color: var(--bui-border-1);\n border: none;\n margin: 0;\n }\n}\n";
4
+ var styles = {"drawer":"AssetDetailPanel_drawer__6af6db61b0","overlay":"AssetDetailPanel_overlay__6af6db61b0","panelContainer":"AssetDetailPanel_panelContainer__6af6db61b0","header":"AssetDetailPanel_header__6af6db61b0","headerContent":"AssetDetailPanel_headerContent__6af6db61b0","loadingRow":"AssetDetailPanel_loadingRow__6af6db61b0","nameRow":"AssetDetailPanel_nameRow__6af6db61b0","typeTag":"AssetDetailPanel_typeTag__6af6db61b0","tabBar":"AssetDetailPanel_tabBar__6af6db61b0","contentArea":"AssetDetailPanel_contentArea__6af6db61b0","markdownContent":"AssetDetailPanel_markdownContent__6af6db61b0","codeBlockWrapper":"AssetDetailPanel_codeBlockWrapper__6af6db61b0","metaSection":"AssetDetailPanel_metaSection__6af6db61b0","metaRow":"AssetDetailPanel_metaRow__6af6db61b0","metaLabel":"AssetDetailPanel_metaLabel__6af6db61b0","chipsRow":"AssetDetailPanel_chipsRow__6af6db61b0","bundledHeader":"AssetDetailPanel_bundledHeader__6af6db61b0","rawYaml":"AssetDetailPanel_rawYaml__6af6db61b0","actions":"AssetDetailPanel_actions__6af6db61b0","repoLink":"AssetDetailPanel_repoLink__6af6db61b0","divider":"AssetDetailPanel_divider__6af6db61b0"};
5
+ styleInject(css_248z);
6
+
7
+ export { styles as default };
8
+ //# sourceMappingURL=AssetDetailPanel.module.css.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetDetailPanel.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -1,24 +1,15 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import Box from '@mui/material/Box';
3
- import Chip from '@mui/material/Chip';
4
- import InputAdornment from '@mui/material/InputAdornment';
5
- import TextField from '@mui/material/TextField';
6
- import Typography from '@mui/material/Typography';
7
- import SearchIcon from '@mui/icons-material/Search';
8
- import StorageIcon from '@mui/icons-material/Storage';
9
- import ArticleIcon from '@mui/icons-material/Article';
10
- import SmartToyIcon from '@mui/icons-material/SmartToy';
11
- import BuildIcon from '@mui/icons-material/Build';
12
- import AccountTreeIcon from '@mui/icons-material/AccountTree';
13
- import AppsIcon from '@mui/icons-material/Apps';
2
+ import { Flex, SearchField, Box, Text, ToggleButton } from '@backstage/ui';
3
+ import { RiAppsLine, RiArticleLine, RiRobot2Line, RiToolsLine, RiGitBranchLine, RiDatabase2Line } from '@remixicon/react';
14
4
  import { ToolIcon } from '../ToolIcon/ToolIcon.esm.js';
5
+ import styles from './AssetFilters.module.css.esm.js';
15
6
 
16
7
  const ASSET_TYPES = [
17
- { value: "all", label: "All", color: "#64748b", Icon: AppsIcon },
18
- { value: "instruction", label: "Instructions", color: "#2563EB", Icon: ArticleIcon },
19
- { value: "agent", label: "Agents", color: "#7C3AED", Icon: SmartToyIcon },
20
- { value: "skill", label: "Skills", color: "#059669", Icon: BuildIcon },
21
- { value: "workflow", label: "Workflows", color: "#D97706", Icon: AccountTreeIcon }
8
+ { value: "all", label: "All", color: "#DCDDE1", Icon: RiAppsLine },
9
+ { value: "instruction", label: "Instructions", color: "#54A0FF", Icon: RiArticleLine },
10
+ { value: "agent", label: "Agents", color: "#FF6B9D", Icon: RiRobot2Line },
11
+ { value: "skill", label: "Skills", color: "#6AB04C", Icon: RiToolsLine },
12
+ { value: "workflow", label: "Workflows", color: "#F9CA24", Icon: RiGitBranchLine }
22
13
  ];
23
14
  const AI_TOOLS = [
24
15
  { value: "all", label: "All Tools" },
@@ -44,142 +35,106 @@ function AssetFilters({ value, onChange, availableTags = [], providers }) {
44
35
  const handleProviderClick = (id) => {
45
36
  onChange({ ...value, providerId: id });
46
37
  };
47
- return /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", flexDirection: "column", gap: 2, mb: 3 }, children: [
38
+ return /* @__PURE__ */ jsxs(Flex, { className: styles.container, children: [
48
39
  /* @__PURE__ */ jsx(
49
- TextField,
40
+ SearchField,
50
41
  {
51
- fullWidth: true,
52
- size: "small",
42
+ "aria-label": "Search assets",
43
+ className: styles.searchField,
53
44
  placeholder: "Search assets by name, description or content\u2026",
54
45
  value: value.search,
55
- onChange: (e) => onChange({ ...value, search: e.target.value }),
56
- InputProps: {
57
- startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(SearchIcon, { fontSize: "small" }) })
58
- },
59
- sx: {
60
- "& .MuiOutlinedInput-root": {
61
- borderRadius: 2
62
- }
63
- }
46
+ onChange: (v) => onChange({ ...value, search: v })
64
47
  }
65
48
  ),
66
- /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", gap: 3, flexWrap: "wrap", alignItems: "flex-start" }, children: [
49
+ /* @__PURE__ */ jsxs(Flex, { className: styles.filtersRow, children: [
67
50
  /* @__PURE__ */ jsxs(Box, { children: [
68
- /* @__PURE__ */ jsx(Typography, { variant: "caption", fontWeight: 600, color: "text.secondary", sx: { mb: 1, display: "block", textTransform: "uppercase", letterSpacing: 0.5 }, children: "Type" }),
69
- /* @__PURE__ */ jsx(Box, { sx: { display: "flex", gap: 0.75, flexWrap: "wrap" }, children: ASSET_TYPES.map((t) => {
51
+ /* @__PURE__ */ jsx(Text, { variant: "body-x-small", color: "secondary", className: styles.filterLabel, children: "Type" }),
52
+ /* @__PURE__ */ jsx(Flex, { className: styles.filterChips, children: ASSET_TYPES.map((t) => {
70
53
  const isSelected = selectedType === t.value;
71
54
  const TypeIcon = t.Icon;
72
55
  return /* @__PURE__ */ jsx(
73
- Chip,
56
+ ToggleButton,
74
57
  {
75
- icon: /* @__PURE__ */ jsx(TypeIcon, { sx: { fontSize: "0.9rem !important", color: isSelected ? "#fff !important" : t.color } }),
76
- label: t.label,
58
+ id: t.value,
77
59
  size: "small",
78
- clickable: true,
79
- onClick: () => handleTypeClick(t.value),
80
- sx: {
81
- fontWeight: 600,
82
- fontSize: "0.75rem",
83
- borderRadius: 2,
84
- border: "1.5px solid",
85
- borderColor: isSelected ? t.color : `${t.color}60`,
86
- backgroundColor: isSelected ? t.color : "transparent",
87
- color: isSelected ? "#fff" : t.color,
88
- transition: "all 0.15s ease",
89
- "&:hover": {
90
- backgroundColor: isSelected ? t.color : `${t.color}18`,
91
- borderColor: t.color
92
- }
93
- }
60
+ className: `${styles.filterChip} ${isSelected ? styles.filterChipSelected : ""}`,
61
+ iconStart: /* @__PURE__ */ jsx(TypeIcon, { size: 14, style: { color: isSelected ? "#fff" : t.color } }),
62
+ isSelected,
63
+ onChange: () => handleTypeClick(t.value),
64
+ style: {
65
+ borderColor: isSelected ? t.color : `${t.color}30`,
66
+ backgroundColor: isSelected ? t.color : `${t.color}10`,
67
+ color: isSelected ? "#fff" : t.color
68
+ },
69
+ children: t.label
94
70
  },
95
71
  t.value
96
72
  );
97
73
  }) })
98
74
  ] }),
99
75
  /* @__PURE__ */ jsxs(Box, { children: [
100
- /* @__PURE__ */ jsx(Typography, { variant: "caption", fontWeight: 600, color: "text.secondary", sx: { mb: 1, display: "block", textTransform: "uppercase", letterSpacing: 0.5 }, children: "AI Tool" }),
101
- /* @__PURE__ */ jsx(Box, { sx: { display: "flex", gap: 0.75, flexWrap: "wrap" }, children: AI_TOOLS.map((t) => {
76
+ /* @__PURE__ */ jsx(Text, { variant: "body-x-small", color: "secondary", className: styles.filterLabel, children: "AI Tool" }),
77
+ /* @__PURE__ */ jsx(Flex, { className: styles.filterChips, children: AI_TOOLS.map((t) => {
102
78
  const isSelected = selectedTool === t.value;
103
- const iconEl = t.value !== "all" ? /* @__PURE__ */ jsx(ToolIcon, { tool: t.value, branded: !isSelected, sx: { fontSize: "0.85rem !important", color: isSelected ? "background.paper" : "inherit" } }) : void 0;
79
+ const iconEl = t.value !== "all" ? /* @__PURE__ */ jsx(ToolIcon, { tool: t.value, branded: true, size: 14 }) : void 0;
104
80
  return /* @__PURE__ */ jsx(
105
- Chip,
81
+ ToggleButton,
106
82
  {
107
- icon: iconEl,
108
- label: t.label,
83
+ id: t.value,
109
84
  size: "small",
110
- clickable: true,
111
- onClick: () => handleToolClick(t.value),
112
- sx: {
113
- fontWeight: 600,
114
- fontSize: "0.75rem",
115
- borderRadius: 2,
116
- border: "1.5px solid",
117
- borderColor: isSelected ? "text.primary" : "divider",
118
- backgroundColor: isSelected ? "text.primary" : "transparent",
119
- color: isSelected ? "background.paper" : "text.secondary",
120
- transition: "all 0.15s ease",
121
- "&:hover": {
122
- borderColor: "text.primary",
123
- backgroundColor: isSelected ? "text.primary" : "action.hover"
124
- }
125
- }
85
+ className: `${styles.filterChip} ${isSelected ? styles.toolChipSelected : ""}`,
86
+ iconStart: iconEl,
87
+ isSelected,
88
+ onChange: () => handleToolClick(t.value),
89
+ style: {
90
+ borderColor: isSelected ? "var(--bui-fg-link)" : "var(--bui-border-1)",
91
+ backgroundColor: isSelected ? "var(--bui-bg-accent-1)" : "transparent",
92
+ color: isSelected ? "var(--bui-fg-link)" : "var(--bui-fg-secondary)"
93
+ },
94
+ children: t.label
126
95
  },
127
96
  t.value
128
97
  );
129
98
  }) })
130
99
  ] }),
131
100
  showProviderFilter && /* @__PURE__ */ jsxs(Box, { children: [
132
- /* @__PURE__ */ jsx(Typography, { variant: "caption", fontWeight: 600, color: "text.secondary", sx: { mb: 1, display: "block", textTransform: "uppercase", letterSpacing: 0.5 }, children: "Provider" }),
133
- /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", gap: 0.75, flexWrap: "wrap" }, children: [
101
+ /* @__PURE__ */ jsx(Text, { variant: "body-x-small", color: "secondary", className: styles.filterLabel, children: "Provider" }),
102
+ /* @__PURE__ */ jsxs(Flex, { className: styles.filterChips, children: [
134
103
  /* @__PURE__ */ jsx(
135
- Chip,
104
+ ToggleButton,
136
105
  {
137
- icon: /* @__PURE__ */ jsx(AppsIcon, { sx: { fontSize: "0.9rem !important" } }),
138
- label: "All",
106
+ id: "all-providers",
139
107
  size: "small",
140
- clickable: true,
141
- onClick: () => handleProviderClick(void 0),
142
- sx: {
143
- fontWeight: 600,
144
- fontSize: "0.75rem",
145
- borderRadius: 2,
146
- border: "1.5px solid",
147
- borderColor: !value.providerId ? "text.primary" : "divider",
148
- backgroundColor: !value.providerId ? "text.primary" : "transparent",
149
- color: !value.providerId ? "background.paper" : "text.secondary",
150
- transition: "all 0.15s ease",
151
- "&:hover": {
152
- borderColor: "text.primary",
153
- backgroundColor: !value.providerId ? "text.primary" : "action.hover"
154
- }
155
- }
108
+ className: `${styles.filterChip} ${!value.providerId ? styles.filterChipSelected : ""}`,
109
+ iconStart: /* @__PURE__ */ jsx(RiAppsLine, { size: 14 }),
110
+ isSelected: !value.providerId,
111
+ onChange: () => handleProviderClick(void 0),
112
+ style: {
113
+ borderColor: !value.providerId ? "var(--bui-fg-primary)" : "var(--bui-border-1)",
114
+ backgroundColor: !value.providerId ? "var(--bui-fg-primary)" : "transparent",
115
+ color: !value.providerId ? "var(--bui-bg-neutral-1)" : "var(--bui-fg-secondary)"
116
+ },
117
+ children: "All"
156
118
  }
157
119
  ),
158
120
  providers.map((p) => {
159
121
  const isSelected = value.providerId === p.id;
160
122
  const label = p.target.split("/").slice(-1)[0]?.replace(/\.git$/, "") ?? p.id;
161
123
  return /* @__PURE__ */ jsx(
162
- Chip,
124
+ ToggleButton,
163
125
  {
164
- icon: /* @__PURE__ */ jsx(StorageIcon, { sx: { fontSize: "0.85rem !important", color: isSelected ? "background.paper" : "inherit" } }),
165
- label,
126
+ id: p.id,
166
127
  size: "small",
167
- clickable: true,
168
- onClick: () => handleProviderClick(p.id),
169
- sx: {
170
- fontWeight: 600,
171
- fontSize: "0.75rem",
172
- borderRadius: 2,
173
- border: "1.5px solid",
174
- borderColor: isSelected ? "text.primary" : "divider",
175
- backgroundColor: isSelected ? "text.primary" : "transparent",
176
- color: isSelected ? "background.paper" : "text.secondary",
177
- transition: "all 0.15s ease",
178
- "&:hover": {
179
- borderColor: "text.primary",
180
- backgroundColor: isSelected ? "text.primary" : "action.hover"
181
- }
182
- }
128
+ className: `${styles.filterChip} ${isSelected ? styles.filterChipSelected : ""}`,
129
+ iconStart: /* @__PURE__ */ jsx(RiDatabase2Line, { size: 14, style: { color: isSelected ? "var(--bui-bg-neutral-1)" : "inherit" } }),
130
+ isSelected,
131
+ onChange: () => handleProviderClick(isSelected ? void 0 : p.id),
132
+ style: {
133
+ borderColor: isSelected ? "var(--bui-fg-primary)" : "var(--bui-border-1)",
134
+ backgroundColor: isSelected ? "var(--bui-fg-primary)" : "transparent",
135
+ color: isSelected ? "var(--bui-bg-neutral-1)" : "var(--bui-fg-secondary)"
136
+ },
137
+ children: label
183
138
  },
184
139
  p.id
185
140
  );
@@ -188,26 +143,31 @@ function AssetFilters({ value, onChange, availableTags = [], providers }) {
188
143
  ] })
189
144
  ] }),
190
145
  availableTags.length > 0 && /* @__PURE__ */ jsxs(Box, { children: [
191
- /* @__PURE__ */ jsx(Typography, { variant: "caption", fontWeight: 600, color: "text.secondary", sx: { mb: 1, display: "block", textTransform: "uppercase", letterSpacing: 0.5 }, children: "Tags" }),
192
- /* @__PURE__ */ jsx(Box, { sx: { display: "flex", gap: 0.75, flexWrap: "wrap" }, children: availableTags.map((tag) => /* @__PURE__ */ jsx(
193
- Chip,
194
- {
195
- label: `#${tag}`,
196
- size: "small",
197
- clickable: true,
198
- onClick: () => handleTagToggle(tag),
199
- sx: {
200
- fontSize: "0.7rem",
201
- fontWeight: value.tags.includes(tag) ? 700 : 400,
202
- borderRadius: 1.5,
203
- backgroundColor: value.tags.includes(tag) ? "primary.main" : "transparent",
204
- color: value.tags.includes(tag) ? "#fff" : "text.secondary",
205
- border: "1px solid",
206
- borderColor: value.tags.includes(tag) ? "primary.main" : "divider"
207
- }
208
- },
209
- tag
210
- )) })
146
+ /* @__PURE__ */ jsx(Text, { variant: "body-x-small", color: "secondary", className: styles.filterLabel, children: "Tags" }),
147
+ /* @__PURE__ */ jsx(Flex, { className: styles.filterChips, children: availableTags.map((tag) => {
148
+ const isActive = value.tags.includes(tag);
149
+ return /* @__PURE__ */ jsxs(
150
+ ToggleButton,
151
+ {
152
+ id: tag,
153
+ size: "small",
154
+ className: `${styles.tagChip} ${isActive ? styles.tagChipSelected : ""}`,
155
+ isSelected: isActive,
156
+ onChange: () => handleTagToggle(tag),
157
+ style: {
158
+ fontWeight: isActive ? 700 : 400,
159
+ backgroundColor: isActive ? "var(--bui-bg-solid)" : "transparent",
160
+ color: isActive ? "#fff" : "var(--bui-fg-secondary)",
161
+ borderColor: isActive ? "var(--bui-bg-solid)" : "var(--bui-border-1)"
162
+ },
163
+ children: [
164
+ "#",
165
+ tag
166
+ ]
167
+ },
168
+ tag
169
+ );
170
+ }) })
211
171
  ] })
212
172
  ] });
213
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AssetFilters.esm.js","sources":["../../../src/components/AssetFilters/AssetFilters.tsx"],"sourcesContent":["import type { ElementType } from 'react';\nimport Box from '@mui/material/Box';\nimport Chip from '@mui/material/Chip';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport SearchIcon from '@mui/icons-material/Search';\nimport StorageIcon from '@mui/icons-material/Storage';\nimport ArticleIcon from '@mui/icons-material/Article';\nimport SmartToyIcon from '@mui/icons-material/SmartToy';\nimport BuildIcon from '@mui/icons-material/Build';\nimport AccountTreeIcon from '@mui/icons-material/AccountTree';\nimport AppsIcon from '@mui/icons-material/Apps';\nimport type { AssetType, AiTool, AiHubProvider } from '@nospt/plugin-dev-ai-hub-common';\nimport { ToolIcon } from '../ToolIcon';\n\nconst ASSET_TYPES: { value: AssetType | 'all'; label: string; color: string; Icon: ElementType }[] = [\n { value: 'all', label: 'All', color: '#64748b', Icon: AppsIcon },\n { value: 'instruction', label: 'Instructions', color: '#2563EB', Icon: ArticleIcon },\n { value: 'agent', label: 'Agents', color: '#7C3AED', Icon: SmartToyIcon },\n { value: 'skill', label: 'Skills', color: '#059669', Icon: BuildIcon },\n { value: 'workflow', label: 'Workflows', color: '#D97706', Icon: AccountTreeIcon },\n];\n\nconst AI_TOOLS: { value: AiTool | 'all'; label: string }[] = [\n { value: 'all', label: 'All Tools' },\n { value: 'claude-code', label: 'Claude Code' },\n { value: 'github-copilot', label: 'GitHub Copilot' },\n { value: 'google-gemini', label: 'Google Gemini' },\n { value: 'cursor', label: 'Cursor' },\n];\n\nexport interface AssetFiltersValue {\n types: AssetType[];\n tools: AiTool[];\n search: string;\n tags: string[];\n providerId?: string;\n}\n\ninterface AssetFiltersProps {\n value: AssetFiltersValue;\n onChange: (value: AssetFiltersValue) => void;\n availableTags?: string[];\n providers?: AiHubProvider[];\n}\n\nexport function AssetFilters({ value, onChange, availableTags = [], providers }: AssetFiltersProps) {\n const selectedType = value.types.length === 1 ? value.types[0] : 'all';\n const selectedTool = value.tools.length === 1 ? value.tools[0] : 'all';\n const showProviderFilter = providers && providers.length > 1;\n\n const handleTypeClick = (type: AssetType | 'all') => {\n onChange({ ...value, types: type === 'all' ? [] : [type] });\n };\n\n const handleToolClick = (tool: AiTool | 'all') => {\n onChange({ ...value, tools: tool === 'all' ? [] : [tool] });\n };\n\n const handleTagToggle = (tag: string) => {\n const next = value.tags.includes(tag)\n ? value.tags.filter(t => t !== tag)\n : [...value.tags, tag];\n onChange({ ...value, tags: next });\n };\n\n const handleProviderClick = (id: string | undefined) => {\n onChange({ ...value, providerId: id });\n };\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mb: 3 }}>\n <TextField\n fullWidth\n size=\"small\"\n placeholder=\"Search assets by name, description or content…\"\n value={value.search}\n onChange={e => onChange({ ...value, search: e.target.value })}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n sx={{\n '& .MuiOutlinedInput-root': {\n borderRadius: 2,\n },\n }}\n />\n\n <Box sx={{ display: 'flex', gap: 3, flexWrap: 'wrap', alignItems: 'flex-start' }}>\n {/* Type filter */}\n <Box>\n <Typography variant=\"caption\" fontWeight={600} color=\"text.secondary\" sx={{ mb: 1, display: 'block', textTransform: 'uppercase', letterSpacing: 0.5 }}>\n Type\n </Typography>\n <Box sx={{ display: 'flex', gap: 0.75, flexWrap: 'wrap' }}>\n {ASSET_TYPES.map(t => {\n const isSelected = selectedType === t.value;\n const TypeIcon = t.Icon;\n return (\n <Chip\n key={t.value}\n icon={<TypeIcon sx={{ fontSize: '0.9rem !important', color: isSelected ? '#fff !important' : t.color }} />}\n label={t.label}\n size=\"small\"\n clickable\n onClick={() => handleTypeClick(t.value as AssetType | 'all')}\n sx={{\n fontWeight: 600,\n fontSize: '0.75rem',\n borderRadius: 2,\n border: '1.5px solid',\n borderColor: isSelected ? t.color : `${t.color}60`,\n backgroundColor: isSelected ? t.color : 'transparent',\n color: isSelected ? '#fff' : t.color,\n transition: 'all 0.15s ease',\n '&:hover': {\n backgroundColor: isSelected ? t.color : `${t.color}18`,\n borderColor: t.color,\n },\n }}\n />\n );\n })}\n </Box>\n </Box>\n\n {/* AI Tool filter */}\n <Box>\n <Typography variant=\"caption\" fontWeight={600} color=\"text.secondary\" sx={{ mb: 1, display: 'block', textTransform: 'uppercase', letterSpacing: 0.5 }}>\n AI Tool\n </Typography>\n <Box sx={{ display: 'flex', gap: 0.75, flexWrap: 'wrap' }}>\n {AI_TOOLS.map(t => {\n const isSelected = selectedTool === t.value;\n const iconEl = t.value !== 'all'\n ? <ToolIcon tool={t.value as AiTool} branded={!isSelected} sx={{ fontSize: '0.85rem !important', color: isSelected ? 'background.paper' : 'inherit' }} />\n : undefined;\n return (\n <Chip\n key={t.value}\n icon={iconEl}\n label={t.label}\n size=\"small\"\n clickable\n onClick={() => handleToolClick(t.value as AiTool | 'all')}\n sx={{\n fontWeight: 600,\n fontSize: '0.75rem',\n borderRadius: 2,\n border: '1.5px solid',\n borderColor: isSelected ? 'text.primary' : 'divider',\n backgroundColor: isSelected ? 'text.primary' : 'transparent',\n color: isSelected ? 'background.paper' : 'text.secondary',\n transition: 'all 0.15s ease',\n '&:hover': {\n borderColor: 'text.primary',\n backgroundColor: isSelected ? 'text.primary' : 'action.hover',\n },\n }}\n />\n );\n })}\n </Box>\n </Box>\n\n {/* Provider filter — only shown when there are 2+ providers */}\n {showProviderFilter && (\n <Box>\n <Typography variant=\"caption\" fontWeight={600} color=\"text.secondary\" sx={{ mb: 1, display: 'block', textTransform: 'uppercase', letterSpacing: 0.5 }}>\n Provider\n </Typography>\n <Box sx={{ display: 'flex', gap: 0.75, flexWrap: 'wrap' }}>\n <Chip\n icon={<AppsIcon sx={{ fontSize: '0.9rem !important' }} />}\n label=\"All\"\n size=\"small\"\n clickable\n onClick={() => handleProviderClick(undefined)}\n sx={{\n fontWeight: 600,\n fontSize: '0.75rem',\n borderRadius: 2,\n border: '1.5px solid',\n borderColor: !value.providerId ? 'text.primary' : 'divider',\n backgroundColor: !value.providerId ? 'text.primary' : 'transparent',\n color: !value.providerId ? 'background.paper' : 'text.secondary',\n transition: 'all 0.15s ease',\n '&:hover': {\n borderColor: 'text.primary',\n backgroundColor: !value.providerId ? 'text.primary' : 'action.hover',\n },\n }}\n />\n {providers.map(p => {\n const isSelected = value.providerId === p.id;\n const label = p.target.split('/').slice(-1)[0]?.replace(/\\.git$/, '') ?? p.id;\n return (\n <Chip\n key={p.id}\n icon={<StorageIcon sx={{ fontSize: '0.85rem !important', color: isSelected ? 'background.paper' : 'inherit' }} />}\n label={label}\n size=\"small\"\n clickable\n onClick={() => handleProviderClick(p.id)}\n sx={{\n fontWeight: 600,\n fontSize: '0.75rem',\n borderRadius: 2,\n border: '1.5px solid',\n borderColor: isSelected ? 'text.primary' : 'divider',\n backgroundColor: isSelected ? 'text.primary' : 'transparent',\n color: isSelected ? 'background.paper' : 'text.secondary',\n transition: 'all 0.15s ease',\n '&:hover': {\n borderColor: 'text.primary',\n backgroundColor: isSelected ? 'text.primary' : 'action.hover',\n },\n }}\n />\n );\n })}\n </Box>\n </Box>\n )}\n </Box>\n\n {availableTags.length > 0 && (\n <Box>\n <Typography variant=\"caption\" fontWeight={600} color=\"text.secondary\" sx={{ mb: 1, display: 'block', textTransform: 'uppercase', letterSpacing: 0.5 }}>\n Tags\n </Typography>\n <Box sx={{ display: 'flex', gap: 0.75, flexWrap: 'wrap' }}>\n {availableTags.map(tag => (\n <Chip\n key={tag}\n label={`#${tag}`}\n size=\"small\"\n clickable\n onClick={() => handleTagToggle(tag)}\n sx={{\n fontSize: '0.7rem',\n fontWeight: value.tags.includes(tag) ? 700 : 400,\n borderRadius: 1.5,\n backgroundColor: value.tags.includes(tag) ? 'primary.main' : 'transparent',\n color: value.tags.includes(tag) ? '#fff' : 'text.secondary',\n border: '1px solid',\n borderColor: value.tags.includes(tag) ? 'primary.main' : 'divider',\n }}\n />\n ))}\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssetFilters.esm.js","sources":["../../../src/components/AssetFilters/AssetFilters.tsx"],"sourcesContent":["import type { ElementType } from 'react';\nimport { Box, Flex, Text, SearchField, ToggleButton, ToggleButtonGroup } from '@backstage/ui';\nimport { RiAppsLine, RiArticleLine, RiRobot2Line, RiToolsLine, RiGitBranchLine, RiDatabase2Line } from '@remixicon/react';\nimport type { AssetType, AiTool, AiHubProvider } from '@nospt/plugin-dev-ai-hub-common';\nimport { ToolIcon } from '../ToolIcon';\nimport styles from './AssetFilters.module.css';\n\nconst ASSET_TYPES: { value: AssetType | 'all'; label: string; color: string; Icon: ElementType }[] = [\n { value: 'all', label: 'All', color: '#DCDDE1', Icon: RiAppsLine },\n { value: 'instruction', label: 'Instructions', color: '#54A0FF', Icon: RiArticleLine },\n { value: 'agent', label: 'Agents', color: '#FF6B9D', Icon: RiRobot2Line },\n { value: 'skill', label: 'Skills', color: '#6AB04C', Icon: RiToolsLine },\n { value: 'workflow', label: 'Workflows', color: '#F9CA24', Icon: RiGitBranchLine },\n];\n\nconst AI_TOOLS: { value: AiTool | 'all'; label: string }[] = [\n { value: 'all', label: 'All Tools' },\n { value: 'claude-code', label: 'Claude Code' },\n { value: 'github-copilot', label: 'GitHub Copilot' },\n { value: 'google-gemini', label: 'Google Gemini' },\n { value: 'cursor', label: 'Cursor' },\n];\n\nexport interface AssetFiltersValue {\n types: AssetType[];\n tools: AiTool[];\n search: string;\n tags: string[];\n providerId?: string;\n}\n\ninterface AssetFiltersProps {\n value: AssetFiltersValue;\n onChange: (value: AssetFiltersValue) => void;\n availableTags?: string[];\n providers?: AiHubProvider[];\n}\n\nexport function AssetFilters({ value, onChange, availableTags = [], providers }: AssetFiltersProps) {\n const selectedType = value.types.length === 1 ? value.types[0] : 'all';\n const selectedTool = value.tools.length === 1 ? value.tools[0] : 'all';\n const showProviderFilter = providers && providers.length > 1;\n\n const handleTypeClick = (type: AssetType | 'all') => {\n onChange({ ...value, types: type === 'all' ? [] : [type] });\n };\n\n const handleToolClick = (tool: AiTool | 'all') => {\n onChange({ ...value, tools: tool === 'all' ? [] : [tool] });\n };\n\n const handleTagToggle = (tag: string) => {\n const next = value.tags.includes(tag)\n ? value.tags.filter(t => t !== tag)\n : [...value.tags, tag];\n onChange({ ...value, tags: next });\n };\n\n const handleProviderClick = (id: string | undefined) => {\n onChange({ ...value, providerId: id });\n };\n\n return (\n <Flex className={styles.container}>\n <SearchField\n aria-label=\"Search assets\"\n className={styles.searchField}\n placeholder=\"Search assets by name, description or content…\"\n value={value.search}\n onChange={v => onChange({ ...value, search: v })}\n />\n\n <Flex className={styles.filtersRow}>\n {/* Type filter */}\n <Box>\n <Text variant=\"body-x-small\" color=\"secondary\" className={styles.filterLabel}>\n Type\n </Text>\n <Flex className={styles.filterChips}>\n {ASSET_TYPES.map(t => {\n const isSelected = selectedType === t.value;\n const TypeIcon = t.Icon;\n return (\n <ToggleButton\n key={t.value}\n id={t.value}\n size=\"small\"\n className={`${styles.filterChip} ${isSelected ? styles.filterChipSelected : ''}`}\n iconStart={<TypeIcon size={14} style={{ color: isSelected ? '#fff' : t.color }} />}\n isSelected={isSelected}\n onChange={() => handleTypeClick(t.value as AssetType | 'all')}\n style={{\n borderColor: isSelected ? t.color : `${t.color}30`,\n backgroundColor: isSelected ? t.color : `${t.color}10`,\n color: isSelected ? '#fff' : t.color,\n }}\n >\n {t.label}\n </ToggleButton>\n );\n })}\n </Flex>\n </Box>\n\n {/* AI Tool filter */}\n <Box>\n <Text variant=\"body-x-small\" color=\"secondary\" className={styles.filterLabel}>\n AI Tool\n </Text>\n <Flex className={styles.filterChips}>\n {AI_TOOLS.map(t => {\n const isSelected = selectedTool === t.value;\n const iconEl = t.value !== 'all'\n ? <ToolIcon tool={t.value as AiTool} branded size={14} />\n : undefined;\n return (\n <ToggleButton\n key={t.value}\n id={t.value}\n size=\"small\"\n className={`${styles.filterChip} ${isSelected ? styles.toolChipSelected : ''}`}\n iconStart={iconEl}\n isSelected={isSelected}\n onChange={() => handleToolClick(t.value as AiTool | 'all')}\n style={{\n borderColor: isSelected ? 'var(--bui-fg-link)' : 'var(--bui-border-1)',\n backgroundColor: isSelected ? 'var(--bui-bg-accent-1)' : 'transparent',\n color: isSelected ? 'var(--bui-fg-link)' : 'var(--bui-fg-secondary)',\n }}\n >\n {t.label}\n </ToggleButton>\n );\n })}\n </Flex>\n </Box>\n\n {/* Provider filter — only shown when there are 2+ providers */}\n {showProviderFilter && (\n <Box>\n <Text variant=\"body-x-small\" color=\"secondary\" className={styles.filterLabel}>\n Provider\n </Text>\n <Flex className={styles.filterChips}>\n <ToggleButton\n id=\"all-providers\"\n size=\"small\"\n className={`${styles.filterChip} ${!value.providerId ? styles.filterChipSelected : ''}`}\n iconStart={<RiAppsLine size={14} />}\n isSelected={!value.providerId}\n onChange={() => handleProviderClick(undefined)}\n style={{\n borderColor: !value.providerId ? 'var(--bui-fg-primary)' : 'var(--bui-border-1)',\n backgroundColor: !value.providerId ? 'var(--bui-fg-primary)' : 'transparent',\n color: !value.providerId ? 'var(--bui-bg-neutral-1)' : 'var(--bui-fg-secondary)',\n }}\n >\n All\n </ToggleButton>\n {providers.map(p => {\n const isSelected = value.providerId === p.id;\n const label = p.target.split('/').slice(-1)[0]?.replace(/\\.git$/, '') ?? p.id;\n return (\n <ToggleButton\n key={p.id}\n id={p.id}\n size=\"small\"\n className={`${styles.filterChip} ${isSelected ? styles.filterChipSelected : ''}`}\n iconStart={<RiDatabase2Line size={14} style={{ color: isSelected ? 'var(--bui-bg-neutral-1)' : 'inherit' }} />}\n isSelected={isSelected}\n onChange={() => handleProviderClick(isSelected ? undefined : p.id)}\n style={{\n borderColor: isSelected ? 'var(--bui-fg-primary)' : 'var(--bui-border-1)',\n backgroundColor: isSelected ? 'var(--bui-fg-primary)' : 'transparent',\n color: isSelected ? 'var(--bui-bg-neutral-1)' : 'var(--bui-fg-secondary)',\n }}\n >\n {label}\n </ToggleButton>\n );\n })}\n </Flex>\n </Box>\n )}\n </Flex>\n\n {availableTags.length > 0 && (\n <Box>\n <Text variant=\"body-x-small\" color=\"secondary\" className={styles.filterLabel}>\n Tags\n </Text>\n <Flex className={styles.filterChips}>\n {availableTags.map(tag => {\n const isActive = value.tags.includes(tag);\n return (\n <ToggleButton\n key={tag}\n id={tag}\n size=\"small\"\n className={`${styles.tagChip} ${isActive ? styles.tagChipSelected : ''}`}\n isSelected={isActive}\n onChange={() => handleTagToggle(tag)}\n style={{\n fontWeight: isActive ? 700 : 400,\n backgroundColor: isActive ? 'var(--bui-bg-solid)' : 'transparent',\n color: isActive ? '#fff' : 'var(--bui-fg-secondary)',\n borderColor: isActive ? 'var(--bui-bg-solid)' : 'var(--bui-border-1)',\n }}\n >\n #{tag}\n </ToggleButton>\n );\n })}\n </Flex>\n </Box>\n )}\n </Flex>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
+
3
+ var css_248z = "@layer components {\n .AssetFilters_container__284e9c626f {\n display: flex;\n flex-direction: column;\n gap: var(--bui-space-4);\n margin-bottom: var(--bui-space-6);\n }\n\n .AssetFilters_searchField__284e9c626f {\n width: 100%;\n }\n\n .AssetFilters_filtersRow__284e9c626f {\n display: flex;\n gap: var(--bui-space-6);\n flex-wrap: wrap;\n align-items: flex-start;\n }\n\n .AssetFilters_filterLabel__284e9c626f {\n margin-bottom: var(--bui-space-2);\n display: block;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n font-weight: 600;\n }\n\n .AssetFilters_filterChips__284e9c626f {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n }\n\n .AssetFilters_filterChip__284e9c626f {\n font-weight: 600;\n font-size: 0.75rem;\n border-radius: var(--bui-radius-2);\n border: 1.5px solid;\n transition: all 0.15s ease;\n cursor: pointer;\n }\n\n .AssetFilters_filterChip__284e9c626f .bui-ToggleButtonContent {\n display: flex;\n align-items: center;\n }\n\n .AssetFilters_filterChip__284e9c626f svg {\n display: block;\n }\n\n .AssetFilters_toolChipSelected__284e9c626f {\n font-weight: 700;\n }\n\n .AssetFilters_tagChip__284e9c626f {\n font-size: 0.7rem;\n border-radius: var(--bui-radius-2);\n border: 1px solid;\n cursor: pointer;\n }\n\n .AssetFilters_tagChip__284e9c626f .bui-ToggleButtonContent {\n display: flex;\n align-items: center;\n }\n}\n";
4
+ var styles = {"container":"AssetFilters_container__284e9c626f","searchField":"AssetFilters_searchField__284e9c626f","filtersRow":"AssetFilters_filtersRow__284e9c626f","filterLabel":"AssetFilters_filterLabel__284e9c626f","filterChips":"AssetFilters_filterChips__284e9c626f","filterChip":"AssetFilters_filterChip__284e9c626f","toolChipSelected":"AssetFilters_toolChipSelected__284e9c626f","tagChip":"AssetFilters_tagChip__284e9c626f"};
5
+ styleInject(css_248z);
6
+
7
+ export { styles as default };
8
+ //# sourceMappingURL=AssetFilters.module.css.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetFilters.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}