@clickhouse/click-ui 0.0.0

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 (151) hide show
  1. package/.eslintrc.cjs +32 -0
  2. package/.github/workflows/deployment.yml +34 -0
  3. package/.storybook/main.ts +18 -0
  4. package/.storybook/preview-head.html +4 -0
  5. package/.storybook/preview.tsx +67 -0
  6. package/README.md +11 -0
  7. package/app/.babelrc +27 -0
  8. package/app/.eslintrc.json +6 -0
  9. package/app/.storybook/main.ts +17 -0
  10. package/app/.storybook/preview.tsx +26 -0
  11. package/app/README.md +38 -0
  12. package/app/next.config.js +6 -0
  13. package/app/package-lock.json +28711 -0
  14. package/app/package.json +44 -0
  15. package/app/public/favicon.ico +0 -0
  16. package/app/public/next.svg +1 -0
  17. package/app/public/vercel.svg +1 -0
  18. package/app/src/assets/RightArrow/right-arrow.tsx +17 -0
  19. package/app/src/assets/S3Logo/s3-logo.tsx +31 -0
  20. package/app/src/assets/amazon_s3.svg +9 -0
  21. package/app/src/assets/arrow.svg +3 -0
  22. package/app/src/globals.d.ts +4 -0
  23. package/app/src/pages/_app.tsx +8 -0
  24. package/app/src/pages/_document.tsx +17 -0
  25. package/app/src/pages/api/hello.ts +13 -0
  26. package/app/src/pages/index.tsx +141 -0
  27. package/app/src/pages/label.tsx +27 -0
  28. package/app/src/stories/assets/code-brackets.svg +1 -0
  29. package/app/src/stories/assets/colors.svg +1 -0
  30. package/app/src/stories/assets/comments.svg +1 -0
  31. package/app/src/stories/assets/direction.svg +1 -0
  32. package/app/src/stories/assets/flow.svg +1 -0
  33. package/app/src/stories/assets/plugin.svg +1 -0
  34. package/app/src/stories/assets/repo.svg +1 -0
  35. package/app/src/stories/assets/stackalt.svg +1 -0
  36. package/app/src/styles/Home.module.css +235 -0
  37. package/app/src/styles/globals.css +111 -0
  38. package/app/src/styles/types.ts +1031 -0
  39. package/app/src/styles/variables.classic.css +16 -0
  40. package/app/src/styles/variables.classic.json +31 -0
  41. package/app/src/styles/variables.css +763 -0
  42. package/app/src/styles/variables.dark.css +135 -0
  43. package/app/src/styles/variables.dark.json +339 -0
  44. package/app/src/styles/variables.json +1029 -0
  45. package/app/src/styles/variables.light.css +203 -0
  46. package/app/src/styles/variables.light.json +478 -0
  47. package/app/tokens/themes/$metadata.json +9 -0
  48. package/app/tokens/themes/$themes.json +1 -0
  49. package/app/tokens/themes/classic.json +58 -0
  50. package/app/tokens/themes/component.json +868 -0
  51. package/app/tokens/themes/dark.json +937 -0
  52. package/app/tokens/themes/light.json +1380 -0
  53. package/app/tokens/themes/primitives.json +859 -0
  54. package/app/tsconfig.json +23 -0
  55. package/build-tokens.js +131 -0
  56. package/index.html +17 -0
  57. package/jest.config.ts +11 -0
  58. package/package.json +77 -0
  59. package/public/vite.svg +1 -0
  60. package/src/App.css +1 -0
  61. package/src/App.module.css +235 -0
  62. package/src/App.tsx +154 -0
  63. package/src/assets/RightArrow/RightArrow.tsx +17 -0
  64. package/src/assets/S3Logo/S3Logo.tsx +31 -0
  65. package/src/assets/react.svg +1 -0
  66. package/src/components/Accordion/Accordion.stories.tsx +78 -0
  67. package/src/components/Accordion/Accordion.test.tsx +46 -0
  68. package/src/components/Accordion/Accordion.tsx +118 -0
  69. package/src/components/Badge/Badge.stories.ts +14 -0
  70. package/src/components/Badge/Badge.test.tsx +11 -0
  71. package/src/components/Badge/Badge.tsx +24 -0
  72. package/src/components/BigStat/BigStat.stories.ts +15 -0
  73. package/src/components/BigStat/BigStat.tsx +37 -0
  74. package/src/components/Button/Button.stories.ts +82 -0
  75. package/src/components/Button/Button.test.tsx +32 -0
  76. package/src/components/Button/Button.tsx +97 -0
  77. package/src/components/ButtonGroup/ButtonGroup.stories.ts +14 -0
  78. package/src/components/ButtonGroup/ButtonGroup.tsx +78 -0
  79. package/src/components/Card/Card.stories.ts +19 -0
  80. package/src/components/Card/Card.tsx +107 -0
  81. package/src/components/FormField/FormField.stories.ts +14 -0
  82. package/src/components/FormField/FormField.tsx +22 -0
  83. package/src/components/Icon/Icon.stories.ts +46 -0
  84. package/src/components/Icon/Icon.tsx +90 -0
  85. package/src/components/Icon/types.ts +18 -0
  86. package/src/components/IconButton/IconButton.stories.ts +16 -0
  87. package/src/components/IconButton/IconButton.tsx +94 -0
  88. package/src/components/SidebarNavigationItem/SidebarNavigationItem.stories.tsx +28 -0
  89. package/src/components/SidebarNavigationItem/SidebarNavigationItem.tsx +112 -0
  90. package/src/components/Switch/Switch.stories.ts +14 -0
  91. package/src/components/Switch/Switch.tsx +106 -0
  92. package/src/components/Tabs/Tabs.stories.tsx +71 -0
  93. package/src/components/Tabs/Tabs.test.tsx +86 -0
  94. package/src/components/Tabs/Tabs.tsx +82 -0
  95. package/src/components/icons/ChatIcon.tsx +22 -0
  96. package/src/components/icons/ChevronDown.tsx +6 -0
  97. package/src/components/icons/ChevronRight.tsx +20 -0
  98. package/src/components/icons/DatabaseIcon.tsx +33 -0
  99. package/src/components/icons/FilterIcon.tsx +24 -0
  100. package/src/components/icons/Flags/EuropeanUnion.tsx +174 -0
  101. package/src/components/icons/Flags/Germany.tsx +25 -0
  102. package/src/components/icons/Flags/India.tsx +48 -0
  103. package/src/components/icons/Flags/Ireland.tsx +32 -0
  104. package/src/components/icons/Flags/Netherlands.tsx +29 -0
  105. package/src/components/icons/Flags/Singapore.tsx +43 -0
  106. package/src/components/icons/Flags/UnitedKingdom.tsx +32 -0
  107. package/src/components/icons/Flags/UnitedStates.tsx +26 -0
  108. package/src/components/icons/Flags/index.tsx +46 -0
  109. package/src/components/icons/HistoryIcon.tsx +28 -0
  110. package/src/components/icons/Icons.mdx +36 -0
  111. package/src/components/icons/InsertRowIcon.tsx +36 -0
  112. package/src/components/icons/SortAltIcon.tsx +24 -0
  113. package/src/components/icons/UserIcon.tsx +17 -0
  114. package/src/components/icons/UsersIcon.tsx +43 -0
  115. package/src/components/index.ts +14 -0
  116. package/src/components/types.ts +1 -0
  117. package/src/index.css +9 -0
  118. package/src/index.ts +2 -0
  119. package/src/main.tsx +11 -0
  120. package/src/stories/assets/code-brackets.svg +1 -0
  121. package/src/stories/assets/colors.svg +1 -0
  122. package/src/stories/assets/comments.svg +1 -0
  123. package/src/stories/assets/direction.svg +1 -0
  124. package/src/stories/assets/flow.svg +1 -0
  125. package/src/stories/assets/plugin.svg +1 -0
  126. package/src/stories/assets/repo.svg +1 -0
  127. package/src/stories/assets/stackalt.svg +1 -0
  128. package/src/styles/Home.module.css +235 -0
  129. package/src/styles/globals.css +111 -0
  130. package/src/styles/types.ts +1669 -0
  131. package/src/styles/variables.classic.css +16 -0
  132. package/src/styles/variables.classic.json +31 -0
  133. package/src/styles/variables.css +763 -0
  134. package/src/styles/variables.dark.css +135 -0
  135. package/src/styles/variables.dark.json +576 -0
  136. package/src/styles/variables.json +1667 -0
  137. package/src/styles/variables.light.css +203 -0
  138. package/src/styles/variables.light.json +789 -0
  139. package/src/theme/index.ts +22 -0
  140. package/src/theme/theme.tsx +28 -0
  141. package/src/vite-env.d.ts +1 -0
  142. package/tokens/themes/$metadata.json +9 -0
  143. package/tokens/themes/$themes.json +1 -0
  144. package/tokens/themes/classic.json +58 -0
  145. package/tokens/themes/component.json +1567 -0
  146. package/tokens/themes/dark.json +1450 -0
  147. package/tokens/themes/light.json +2059 -0
  148. package/tokens/themes/primitives.json +863 -0
  149. package/tsconfig.json +27 -0
  150. package/tsconfig.node.json +10 -0
  151. package/vite.config.ts +38 -0
@@ -0,0 +1,71 @@
1
+ import { Tabs } from "@/components";
2
+ import type { StoryObj } from "@storybook/react";
3
+
4
+ export default {
5
+ component: Tabs,
6
+ title: "Tabs",
7
+ tags: ["tabs", "autodocs"],
8
+ };
9
+
10
+ type Story = StoryObj<typeof Tabs>;
11
+
12
+ export const Default: Story = {
13
+ args: {
14
+ defaultValue: "tab2",
15
+ onValueChange: s => console.log(s),
16
+ ariaLabel: "a simple tab component",
17
+ children: (
18
+ <>
19
+ <Tabs.TriggersList>
20
+ <Tabs.Trigger value="tab1" key="tab1">
21
+ tab1
22
+ </Tabs.Trigger>
23
+ <Tabs.Trigger value="tab2" key="tab2">
24
+ tab2
25
+ </Tabs.Trigger>
26
+ <Tabs.Trigger value="tab3" key="tab3">
27
+ tab3
28
+ </Tabs.Trigger>
29
+ </Tabs.TriggersList>
30
+ <Tabs.Content value="tab1">Tab 1 content</Tabs.Content>
31
+ <Tabs.Content value="tab2">Tab 2 content</Tabs.Content>
32
+ <Tabs.Content value="tab3">Tab 3 content</Tabs.Content>
33
+ </>
34
+ ),
35
+ },
36
+ };
37
+
38
+ export const Hover = {
39
+ args: {
40
+ children: [
41
+ <>
42
+ <Tabs.TriggersList>
43
+ <Tabs.Trigger value="tab1" key="tab1">
44
+ tab1
45
+ </Tabs.Trigger>
46
+ </Tabs.TriggersList>
47
+ <Tabs.Content value="tab1">Tab 1 content</Tabs.Content>
48
+ </>,
49
+ ],
50
+ },
51
+ parameters: {
52
+ pseudo: {
53
+ hover: true,
54
+ },
55
+ },
56
+ };
57
+
58
+ export const Selected = {
59
+ args: {
60
+ children: [
61
+ <>
62
+ <Tabs.TriggersList>
63
+ <Tabs.Trigger value="tab1" data-state="active" key="tab1">
64
+ tab1
65
+ </Tabs.Trigger>
66
+ </Tabs.TriggersList>
67
+ <Tabs.Content value="tab1">Tab 1 content</Tabs.Content>
68
+ </>,
69
+ ],
70
+ },
71
+ };
@@ -0,0 +1,86 @@
1
+ import { ThemeProvider } from "../../theme";
2
+ import { render, waitFor } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
4
+ import { Tabs } from "./Tabs";
5
+ import { TabsProps } from "@/components/Tabs/Tabs";
6
+
7
+ describe("Tabs", () => {
8
+ const renderTabs = (props: TabsProps) =>
9
+ render(
10
+ <ThemeProvider theme="dark">
11
+ <Tabs {...props} />
12
+ </ThemeProvider>
13
+ );
14
+
15
+ it("should render the Tabs", () => {
16
+ const { getByText } = renderTabs({
17
+ children: <p>Common text</p>,
18
+ defaultValue: "1",
19
+ });
20
+ expect(getByText("Common text").textContent).toBe("Common text");
21
+ });
22
+
23
+ it("should switch between tabs", () => {
24
+ const { getByText } = renderTabs({
25
+ defaultValue: "tab1",
26
+ ariaLabel: "Tabs",
27
+ children: (
28
+ <>
29
+ <Tabs.TriggersList>
30
+ <Tabs.Trigger value="tab1" key="tab1">
31
+ tab1
32
+ </Tabs.Trigger>
33
+ <Tabs.Trigger value="tab2" key="tab2">
34
+ tab2
35
+ </Tabs.Trigger>
36
+ <Tabs.Trigger value="tab3" key="tab3">
37
+ tab3
38
+ </Tabs.Trigger>
39
+ </Tabs.TriggersList>
40
+ <Tabs.Content value="tab1">Tab 1 content</Tabs.Content>
41
+ <Tabs.Content value="tab2">Tab 2 content</Tabs.Content>
42
+ <Tabs.Content value="tab3">Tab 3 content</Tabs.Content>
43
+ </>
44
+ ),
45
+ });
46
+ [1, 2, 3].forEach(async n => {
47
+ const tab = getByText(`tab${n}`);
48
+ userEvent.click(tab);
49
+ await waitFor(() => {
50
+ const content = getByText(`Tab ${n} content`);
51
+ expect(content.textContent).toEqual(`Tab ${n} content`);
52
+ });
53
+ });
54
+ });
55
+
56
+ it("should execute callback on value change", async () => {
57
+ let counter = 0;
58
+ const { getByText } = renderTabs({
59
+ onValueChange: () => counter++,
60
+ children: (
61
+ <>
62
+ <Tabs.TriggersList>
63
+ <Tabs.Trigger value="tab1" key="tab1">
64
+ tab1
65
+ </Tabs.Trigger>
66
+ <Tabs.Trigger value="tab2" key="tab2">
67
+ tab2
68
+ </Tabs.Trigger>
69
+ <Tabs.Trigger value="tab3" key="tab3">
70
+ tab3
71
+ </Tabs.Trigger>
72
+ </Tabs.TriggersList>
73
+ <Tabs.Content value="tab1">Tab 1 content</Tabs.Content>
74
+ <Tabs.Content value="tab2">Tab 2 content</Tabs.Content>
75
+ <Tabs.Content value="tab3">Tab 3 content</Tabs.Content>
76
+ </>
77
+ ),
78
+ defaultValue: "tab1",
79
+ });
80
+ const tab = getByText("tab2");
81
+ userEvent.click(tab);
82
+ await waitFor(() => {
83
+ expect(counter).toEqual(1);
84
+ });
85
+ });
86
+ });
@@ -0,0 +1,82 @@
1
+ import * as RadixTabs from "@radix-ui/react-tabs";
2
+ import styled from "styled-components";
3
+
4
+ export type TabProps = {
5
+ label: React.ReactNode;
6
+ value: string;
7
+ children?: React.ReactNode;
8
+ };
9
+
10
+ export type TabsProps = {
11
+ defaultValue?: string;
12
+ ariaLabel?: string;
13
+ onValueChange?: (s: string) => unknown;
14
+ children: React.ReactElement<TabProps>[] | React.ReactElement<TabProps>;
15
+ };
16
+
17
+ const Trigger = styled(RadixTabs.Trigger)`
18
+ border: none;
19
+ padding: ${props =>
20
+ `${props.theme.click.tabs.space.y} ${props.theme.click.tabs.space.x}`};
21
+
22
+ border-top-left-radius: ${props => props.theme.click.tabs.radii.all};
23
+ border-top-right-radius: ${props => props.theme.click.tabs.radii.all};
24
+
25
+ border-bottom: ${props => props.theme.click.tabs.basic.stroke.default};
26
+ background-color: ${props =>
27
+ props.theme.click.tabs.basic.color.background.default};
28
+ color: ${props => props.theme.click.tabs.basic.color.text.default};
29
+ font: ${props => props.theme.click.tabs.typography.label.default};
30
+ cursor: pointer;
31
+
32
+ &[data-state="active"] {
33
+ border-bottom: ${props => props.theme.click.tabs.basic.stroke.active};
34
+ background-color: ${props =>
35
+ props.theme.click.tabs.basic.color.background.active};
36
+ color: ${props => props.theme.click.tabs.basic.color.text.active};
37
+ font: ${props => props.theme.click.tabs.typography.label.active};
38
+ }
39
+
40
+ &:hover {
41
+ border-bottom: ${props => props.theme.click.tabs.basic.stroke.hover};
42
+ background-color: ${props =>
43
+ props.theme.click.tabs.basic.color.background.hover};
44
+ color: ${props => props.theme.click.tabs.basic.color.text.hover};
45
+ font: ${props => props.theme.click.tabs.typography.label.hover};
46
+ }
47
+
48
+ &:hover[data-state="active"] {
49
+ border-bottom: ${props => props.theme.click.tabs.basic.stroke.active};
50
+ }
51
+ `;
52
+
53
+ const Content = styled(RadixTabs.Content)``;
54
+
55
+ const TriggersList = styled(RadixTabs.List)`
56
+ border-bottom: ${props => props.theme.click.tabs.basic.stroke.global};
57
+ `;
58
+
59
+ const Tabs = ({
60
+ defaultValue,
61
+ children,
62
+ ariaLabel,
63
+ onValueChange,
64
+ ...delegated
65
+ }: TabsProps) => {
66
+ return (
67
+ <RadixTabs.Root
68
+ aria-label={ariaLabel}
69
+ defaultValue={defaultValue}
70
+ onValueChange={onValueChange}
71
+ {...delegated}
72
+ >
73
+ {children}
74
+ </RadixTabs.Root>
75
+ );
76
+ };
77
+
78
+ Tabs.TriggersList = TriggersList;
79
+ Tabs.Trigger = Trigger;
80
+ Tabs.Content = Content;
81
+
82
+ export { Tabs };
@@ -0,0 +1,22 @@
1
+ import { SVGAttributes } from "react";
2
+
3
+ const ChatIcon = (props: SVGAttributes<SVGElement>) => (
4
+ <svg
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ width="24"
7
+ height="24"
8
+ fill="none"
9
+ viewBox="0 0 24 24"
10
+ {...props}
11
+ >
12
+ <path
13
+ stroke="#fff"
14
+ strokeLinecap="round"
15
+ strokeLinejoin="round"
16
+ strokeWidth="1.5"
17
+ d="M13 17h5a3 3 0 003-3V6a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3h2v4l5-4"
18
+ ></path>
19
+ </svg>
20
+ );
21
+
22
+ export default ChatIcon;
@@ -0,0 +1,6 @@
1
+ import styled from "styled-components";
2
+ import { ChevronRight } from "./ChevronRight";
3
+
4
+ export const ChevronDown = styled(ChevronRight)`
5
+ transform: rotate(90deg);
6
+ `;
@@ -0,0 +1,20 @@
1
+ import { SVGAttributes } from "react";
2
+
3
+ export const ChevronRight = (props: SVGAttributes<SVGElement>) => (
4
+ <svg
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ {...props}
11
+ >
12
+ <path
13
+ d="M10 16L14 12L10 8"
14
+ stroke="#242325"
15
+ strokeWidth="1.25"
16
+ strokeLinecap="round"
17
+ strokeLinejoin="round"
18
+ />
19
+ </svg>
20
+ );
@@ -0,0 +1,33 @@
1
+ import { SVGAttributes } from "react";
2
+
3
+ function DatabaseIcon(props: SVGAttributes<SVGElement>) {
4
+ return (
5
+ <svg
6
+ xmlns='http://www.w3.org/2000/svg'
7
+ width='24'
8
+ height='25'
9
+ fill='none'
10
+ viewBox='0 0 24 25'
11
+ {...props}
12
+ >
13
+ <path
14
+ fill='currentColor'
15
+ fillRule='evenodd'
16
+ stroke='currentColor'
17
+ strokeWidth='0.5'
18
+ d='M5.5 13.993c0 1.776 2.934 3.033 6.498 3.033 3.565 0 6.499-1.257 6.499-3.033a.433.433 0 10-.867 0c0 1.096-2.497 2.166-5.632 2.166s-5.632-1.07-5.632-2.166a.433.433 0 10-.866 0h0zM5.5 10.311c0 1.557 2.919 2.6 6.498 2.6 3.58 0 6.499-1.043 6.499-2.6a.433.433 0 10-.867 0c0 .836-2.512 1.733-5.632 1.733-3.12 0-5.632-.897-5.632-1.733a.433.433 0 10-.866 0h0zM17.63 6.412c0 .836-2.512 1.733-5.632 1.733-3.12 0-5.632-.897-5.632-1.733 0-.836 2.513-1.733 5.632-1.733 3.12 0 5.632.897 5.632 1.733zm.867 0c0-1.557-2.919-2.6-6.499-2.6-3.58 0-6.498 1.043-6.498 2.6 0 1.557 2.919 2.6 6.498 2.6 3.58 0 6.499-1.043 6.499-2.6z'
19
+ clipRule='evenodd'
20
+ ></path>
21
+ <path
22
+ fill='currentColor'
23
+ fillRule='evenodd'
24
+ stroke='currentColor'
25
+ strokeWidth='0.5'
26
+ d='M17.63 6.413V18.11c0 .284-.578.833-1.53 1.288-1.147.549-2.61.88-4.101.878-1.494.003-2.956-.33-4.102-.878-.953-.455-1.53-1.004-1.53-1.288V6.413a.433.433 0 10-.867 0V18.11c0 1.483 3.253 3.038 6.499 3.032 3.245.006 6.498-1.55 6.498-3.032V6.413a.433.433 0 00-.867 0h0z'
27
+ clipRule='evenodd'
28
+ ></path>
29
+ </svg>
30
+ );
31
+ }
32
+
33
+ export default DatabaseIcon;
@@ -0,0 +1,24 @@
1
+ import { SVGAttributes } from "react";
2
+
3
+ function FilterIcon(props: SVGAttributes<SVGElement>) {
4
+ return (
5
+ <svg
6
+ xmlns='http://www.w3.org/2000/svg'
7
+ width='24'
8
+ height='24'
9
+ fill='none'
10
+ viewBox='0 0 24 24'
11
+ {...props}
12
+ >
13
+ <path
14
+ stroke='#fff'
15
+ strokeLinecap='round'
16
+ strokeLinejoin='round'
17
+ strokeWidth='1.5'
18
+ d='M14.5 13.5l5.207-5.207A1 1 0 0020 7.586V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2.586c0 .265.105.52.293.707L9.5 13.5M9.5 13.5v6.249c0 .813.764 1.41 1.553 1.213l2.5-.625a1.25 1.25 0 00.947-1.213V13.5'
19
+ ></path>
20
+ </svg>
21
+ );
22
+ }
23
+
24
+ export default FilterIcon;
@@ -0,0 +1,174 @@
1
+ import React from "react";
2
+
3
+ function EuropeanUnion(
4
+ props: React.SVGAttributes<SVGElement>
5
+ ): React.ReactElement {
6
+ return (
7
+ <svg
8
+ xmlns='http://www.w3.org/2000/svg'
9
+ width={30}
10
+ height={20}
11
+ viewBox='0 0 30 20'
12
+ fill='none'
13
+ {...props}
14
+ >
15
+ <g clipPath='url(#euFlagClipPath1)'>
16
+ <g clipPath='url(#euFlagClipPath2)'>
17
+ <path fill='#039' d='M30 0H0v20h30V0Z' />
18
+ <path fill='#FC0' d='m15 2.222-.343 1.057.528.172L15 2.222Z' />
19
+ <path fill='#FC0' d='m15 2.222.343 1.057-.528.172L15 2.222Z' />
20
+ <path fill='#FC0' d='M16.057 2.99h-1.111v.555l1.11-.555Z' />
21
+ <path fill='#FC0' d='m16.057 2.99-.9.653-.326-.45 1.226-.203Z' />
22
+ <path fill='#FC0' d='m15.653 4.232-.343-1.057-.528.172.871.885Z' />
23
+ <path fill='#FC0' d='m15.653 4.232-.899-.653.327-.45.572 1.103Z' />
24
+ <path fill='#FC0' d='M13.944 2.99h1.111v.555l-1.11-.555Z' />
25
+ <path fill='#FC0' d='m13.944 2.99.9.653.326-.45-1.226-.203Z' />
26
+ <path fill='#FC0' d='m14.348 4.232.343-1.057.528.172-.871.885Z' />
27
+ <path
28
+ fill='#FC0'
29
+ d='m14.348 4.232.899-.653-.327-.45-.572 1.103ZM15 15.556l-.343 1.056.528.172L15 15.556Z'
30
+ />
31
+ <path fill='#FC0' d='m15 15.556.343 1.056-.528.172.185-1.228Z' />
32
+ <path fill='#FC0' d='M16.057 16.323h-1.111v.556l1.11-.556Z' />
33
+ <path fill='#FC0' d='m16.057 16.323-.9.653-.326-.45 1.226-.203Z' />
34
+ <path fill='#FC0' d='m15.653 17.565-.343-1.056-.528.171.871.885Z' />
35
+ <path fill='#FC0' d='m15.653 17.565-.899-.653.327-.45.572 1.103Z' />
36
+ <path fill='#FC0' d='M13.944 16.323h1.111v.556l-1.11-.556Z' />
37
+ <path fill='#FC0' d='m13.944 16.323.9.653.326-.45-1.226-.203Z' />
38
+ <path fill='#FC0' d='m14.348 17.565.343-1.056.528.171-.871.885Z' />
39
+ <path
40
+ fill='#FC0'
41
+ d='m14.348 17.565.899-.653-.327-.45-.572 1.103ZM8.333 8.889 7.99 9.945l.528.172-.185-1.228Z'
42
+ />
43
+ <path fill='#FC0' d='m8.333 8.889.343 1.056-.528.172.185-1.228Z' />
44
+ <path fill='#FC0' d='M9.39 9.656H8.279v.556l1.11-.556Z' />
45
+ <path fill='#FC0' d='m9.39 9.656-.9.653-.326-.45 1.226-.203Z' />
46
+ <path fill='#FC0' d='m8.986 10.898-.343-1.056-.528.171.871.885Z' />
47
+ <path fill='#FC0' d='m8.986 10.898-.899-.653.327-.45.572 1.103Z' />
48
+ <path fill='#FC0' d='M7.277 9.656h1.111v.556l-1.11-.556Z' />
49
+ <path fill='#FC0' d='m7.277 9.656.9.653.326-.45-1.226-.203Z' />
50
+ <path fill='#FC0' d='m7.68 10.898.344-1.056.528.171-.871.885Z' />
51
+ <path
52
+ fill='#FC0'
53
+ d='m7.68 10.898.9-.653-.327-.45-.572 1.103ZM11.014 5.126l.899-.653-.327-.45-.572 1.103Z'
54
+ />
55
+ <path fill='#FC0' d='m11.014 5.126.343-1.057.528.172-.871.885Z' />
56
+ <path fill='#FC0' d='m10.61 3.884.9.653.326-.45-1.226-.203Z' />
57
+ <path fill='#FC0' d='M10.61 3.884h1.112v.555l-1.112-.555Z' />
58
+ <path fill='#FC0' d='m11.667 3.116-.343 1.056.528.172-.185-1.228Z' />
59
+ <path fill='#FC0' d='m11.667 3.116.343 1.056-.528.172.185-1.228Z' />
60
+ <path fill='#FC0' d='m12.32 5.126-.899-.653.327-.45.572 1.103Z' />
61
+ <path fill='#FC0' d='m12.32 5.126-.343-1.057-.528.172.871.885Z' />
62
+ <path fill='#FC0' d='m12.725 3.884-.9.653-.326-.45 1.226-.203Z' />
63
+ <path
64
+ fill='#FC0'
65
+ d='M12.725 3.884h-1.111v.555l1.11-.555ZM9.879 7.566l-.343-1.057-.529.172.872.885Z'
66
+ />
67
+ <path fill='#FC0' d='m9.879 7.566-.899-.653.327-.45.572 1.103Z' />
68
+ <path fill='#FC0' d='m8.572 7.566.9-.653-.327-.45-.573 1.103Z' />
69
+ <path fill='#FC0' d='m8.572 7.566.344-1.057.528.172-.872.885Z' />
70
+ <path fill='#FC0' d='m8.168 6.324.899.653.326-.45-1.225-.203Z' />
71
+ <path fill='#FC0' d='M8.168 6.324h1.111v.555l-1.111-.555Z' />
72
+ <path fill='#FC0' d='m10.282 6.324-.899.653-.326-.45 1.225-.203Z' />
73
+ <path fill='#FC0' d='M10.282 6.324h-1.11v.555l1.11-.555Z' />
74
+ <path fill='#FC0' d='m9.226 5.556.343 1.056-.528.172.185-1.228Z' />
75
+ <path
76
+ fill='#FC0'
77
+ d='m9.226 5.556-.344 1.056.529.172-.185-1.228ZM10.283 12.99h-1.11v.556l1.11-.555Z'
78
+ />
79
+ <path fill='#FC0' d='m10.283 12.99-.899.654-.326-.45 1.225-.203Z' />
80
+ <path fill='#FC0' d='m9.88 14.233-.343-1.057-.529.172.872.885Z' />
81
+ <path fill='#FC0' d='m9.88 14.233-.899-.653.327-.45.572 1.103Z' />
82
+ <path fill='#FC0' d='m8.573 14.233.9-.653-.327-.45-.573 1.103Z' />
83
+ <path fill='#FC0' d='m8.573 14.233.344-1.057.528.172-.872.885Z' />
84
+ <path fill='#FC0' d='m9.227 12.223.343 1.057-.528.172.185-1.229Z' />
85
+ <path fill='#FC0' d='m9.227 12.223-.344 1.057.529.172-.185-1.229Z' />
86
+ <path fill='#FC0' d='M8.17 12.99H9.28v.556l-1.111-.555Z' />
87
+ <path
88
+ fill='#FC0'
89
+ d='m8.17 12.99.899.654.326-.45-1.225-.203ZM12.724 15.43h-1.111v.556l1.11-.555Z'
90
+ />
91
+ <path fill='#FC0' d='m12.724 15.43-.9.654-.326-.45 1.226-.203Z' />
92
+ <path fill='#FC0' d='m12.32 16.673-.343-1.057-.528.172.871.885Z' />
93
+ <path fill='#FC0' d='m12.32 16.673-.899-.653.327-.45.572 1.103Z' />
94
+ <path fill='#FC0' d='m11.014 16.673.899-.653-.327-.45-.572 1.103Z' />
95
+ <path fill='#FC0' d='m11.014 16.673.343-1.057.528.172-.871.885Z' />
96
+ <path fill='#FC0' d='m11.667 14.663.343 1.057-.528.171.185-1.228Z' />
97
+ <path fill='#FC0' d='m11.667 14.663-.343 1.057.528.171-.185-1.228Z' />
98
+ <path fill='#FC0' d='M10.61 15.43h1.112v.556l-1.112-.555Z' />
99
+ <path
100
+ fill='#FC0'
101
+ d='m10.61 15.43.9.654.326-.45-1.226-.203ZM21.663 8.888l.343 1.056-.528.172.185-1.228Z'
102
+ />
103
+ <path fill='#FC0' d='m21.663 8.888-.343 1.056.528.172-.185-1.228Z' />
104
+ <path fill='#FC0' d='M20.606 9.655h1.112v.556l-1.112-.556Z' />
105
+ <path fill='#FC0' d='m20.606 9.655.9.653.326-.45-1.226-.203Z' />
106
+ <path fill='#FC0' d='m21.01 10.898.343-1.057.528.171-.871.886Z' />
107
+ <path fill='#FC0' d='m21.01 10.898.899-.654-.327-.45-.572 1.104Z' />
108
+ <path fill='#FC0' d='M22.719 9.655h-1.111v.556l1.11-.556Z' />
109
+ <path fill='#FC0' d='m22.719 9.655-.9.653-.326-.45 1.226-.203Z' />
110
+ <path fill='#FC0' d='m22.315 10.898-.343-1.057-.528.171.871.886Z' />
111
+ <path
112
+ fill='#FC0'
113
+ d='m22.315 10.898-.899-.654.327-.45.572 1.104ZM18.982 5.125l-.898-.653.326-.45.572 1.103Z'
114
+ />
115
+ <path fill='#FC0' d='m18.982 5.125-.343-1.057-.528.172.871.885Z' />
116
+ <path fill='#FC0' d='m19.386 3.883-.9.653-.326-.45 1.226-.203Z' />
117
+ <path fill='#FC0' d='M19.386 3.883h-1.111v.555l1.11-.555Z' />
118
+ <path fill='#FC0' d='m18.33 3.115.343 1.056-.529.172.185-1.228Z' />
119
+ <path fill='#FC0' d='m18.33 3.115-.344 1.056.528.172-.185-1.228Z' />
120
+ <path fill='#FC0' d='m17.676 5.125.899-.653-.327-.45-.572 1.103Z' />
121
+ <path fill='#FC0' d='m17.676 5.125.343-1.057.529.172-.872.885Z' />
122
+ <path fill='#FC0' d='m17.271 3.883.9.653.326-.45-1.226-.203Z' />
123
+ <path
124
+ fill='#FC0'
125
+ d='M17.271 3.883h1.112v.555l-1.111-.555ZM20.117 7.565l.343-1.057.529.172-.872.885Z'
126
+ />
127
+ <path fill='#FC0' d='m20.117 7.565.9-.653-.328-.45-.572 1.103Z' />
128
+ <path fill='#FC0' d='m21.424 7.565-.9-.653.328-.45.572 1.103Z' />
129
+ <path fill='#FC0' d='m21.424 7.565-.343-1.057-.529.172.872.885Z' />
130
+ <path fill='#FC0' d='m21.828 6.323-.899.653-.326-.45 1.225-.203Z' />
131
+ <path fill='#FC0' d='M21.828 6.323h-1.111v.555l1.111-.555Z' />
132
+ <path fill='#FC0' d='m19.714 6.323.899.653.326-.45-1.225-.203Z' />
133
+ <path fill='#FC0' d='M19.714 6.323h1.111v.555l-1.111-.555Z' />
134
+ <path fill='#FC0' d='m20.77 5.555-.343 1.056.529.172-.186-1.228Z' />
135
+ <path
136
+ fill='#FC0'
137
+ d='m20.77 5.555.344 1.056-.529.172.185-1.228ZM19.713 12.99h1.111v.555l-1.111-.555Z'
138
+ />
139
+ <path fill='#FC0' d='m19.713 12.99.899.653.326-.45-1.225-.203Z' />
140
+ <path fill='#FC0' d='m20.116 14.232.344-1.057.528.172-.872.885Z' />
141
+ <path fill='#FC0' d='m20.116 14.232.9-.653-.327-.45-.573 1.103Z' />
142
+ <path fill='#FC0' d='m21.423 14.232-.9-.653.328-.45.572 1.103Z' />
143
+ <path fill='#FC0' d='m21.423 14.232-.343-1.057-.529.172.872.885Z' />
144
+ <path fill='#FC0' d='m20.77 12.222-.344 1.057.529.172-.185-1.229Z' />
145
+ <path fill='#FC0' d='m20.77 12.222.343 1.057-.529.172.186-1.229Z' />
146
+ <path fill='#FC0' d='M21.826 12.99h-1.11v.555l1.11-.555Z' />
147
+ <path
148
+ fill='#FC0'
149
+ d='m21.826 12.99-.899.653-.326-.45 1.225-.203ZM17.273 15.43h1.11v.555l-1.11-.555Z'
150
+ />
151
+ <path fill='#FC0' d='m17.273 15.43.898.653.327-.45-1.226-.203Z' />
152
+ <path fill='#FC0' d='m17.676 16.672.343-1.057.529.172-.872.885Z' />
153
+ <path fill='#FC0' d='m17.676 16.672.899-.653-.327-.45-.572 1.103Z' />
154
+ <path fill='#FC0' d='m18.982 16.672-.898-.653.326-.45.572 1.103Z' />
155
+ <path fill='#FC0' d='m18.982 16.672-.343-1.057-.528.172.871.885Z' />
156
+ <path fill='#FC0' d='m18.33 14.662-.344 1.057.528.171-.185-1.228Z' />
157
+ <path fill='#FC0' d='m18.33 14.662.343 1.057-.529.171.185-1.228Z' />
158
+ <path fill='#FC0' d='M19.386 15.43h-1.111v.555l1.11-.555Z' />
159
+ <path fill='#FC0' d='m19.386 15.43-.9.653-.326-.45 1.226-.203Z' />
160
+ </g>
161
+ </g>
162
+ <defs>
163
+ <clipPath id='euFlagClipPath1'>
164
+ <rect width={30} height={20} fill='#fff' rx={1} />
165
+ </clipPath>
166
+ <clipPath id='euFlagClipPath2'>
167
+ <path fill='#fff' d='M0 0h30v20H0z' />
168
+ </clipPath>
169
+ </defs>
170
+ </svg>
171
+ );
172
+ }
173
+
174
+ export default EuropeanUnion;
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ const Germany = (
3
+ props: React.SVGAttributes<SVGElement>
4
+ ): React.ReactElement => (
5
+ <svg
6
+ xmlns='http://www.w3.org/2000/svg'
7
+ width={30}
8
+ height={20}
9
+ viewBox='0 0 30 20'
10
+ fill='none'
11
+ {...props}
12
+ >
13
+ <g clipPath='url(#germanyFlagClipPath)'>
14
+ <path fill='#FFCE00' d='M30 0H0v20h30V0Z' />
15
+ <path fill='#D00' d='M30 0H0v13.333h30V0Z' />
16
+ <path fill='#000' d='M30 0H0v6.667h30V0Z' />
17
+ </g>
18
+ <defs>
19
+ <clipPath id='germanyFlagClipPath'>
20
+ <path fill='#fff' d='M0 0h30v20H0z' />
21
+ </clipPath>
22
+ </defs>
23
+ </svg>
24
+ );
25
+ export default Germany;
@@ -0,0 +1,48 @@
1
+ import React from "react";
2
+
3
+ function India(props: React.SVGAttributes<SVGElement>): React.ReactElement {
4
+ return (
5
+ <svg
6
+ xmlns='http://www.w3.org/2000/svg'
7
+ width={30}
8
+ height={20}
9
+ viewBox='0 0 30 20'
10
+ fill='none'
11
+ {...props}
12
+ >
13
+ <g clipPath='url(#indiaFlagClipPath1)'>
14
+ <g clipPath='url(#indiaFlagClipPath2)'>
15
+ <path fill='#F93' d='M30 0H0v20h30V0Z' />
16
+ <path fill='#fff' d='M30 6.667H0v6.666h30V6.666Z' />
17
+ <path fill='#128807' d='M30 13.334H0V20h30v-6.666Z' />
18
+ <path
19
+ fill='#008'
20
+ d='M15 12.667a2.667 2.667 0 1 0 0-5.333 2.667 2.667 0 0 0 0 5.333Z'
21
+ />
22
+ <path
23
+ fill='#fff'
24
+ d='M15 12.333a2.333 2.333 0 1 0 0-4.667 2.333 2.333 0 0 0 0 4.667Z'
25
+ />
26
+ <path
27
+ fill='#008'
28
+ d='M15 10.466a.467.467 0 1 0 0-.933.467.467 0 0 0 0 .934ZM17.297 10.42a.117.117 0 1 0 .03-.231.117.117 0 0 0-.03.231Z'
29
+ />
30
+ <path
31
+ fill='#008'
32
+ d='m14.999 12.333.08-1.4-.08-.666-.08.666.08 1.4ZM17.105 11a.117.117 0 1 0 .09-.215.117.117 0 0 0-.09.216ZM14.39 12.254l.44-1.332.095-.665-.25.624-.285 1.373ZM16.776 11.512a.117.117 0 1 0 .142-.185.117.117 0 0 0-.142.185ZM13.829 12.02l.77-1.172.263-.618-.402.538-.631 1.252ZM16.327 11.922a.117.117 0 1 0 .185-.142.117.117 0 0 0-.185.142ZM13.35 11.65l1.047-.934.415-.528-.528.415-.934 1.046ZM15.788 12.2a.117.117 0 1 0 .216-.09.117.117 0 0 0-.216.09ZM12.983 11.166l1.252-.63.537-.403-.617.264-1.172.77ZM15.192 12.328a.117.117 0 1 0 .231-.03.117.117 0 0 0-.23.03ZM12.75 10.603l1.372-.285.623-.25-.664.095-1.332.44ZM14.579 12.297a.117.117 0 1 0 .231.03.117.117 0 0 0-.231-.03ZM12.666 9.999l1.4.08.666-.08-.666-.08-1.4.08ZM13.998 12.11a.117.117 0 1 0 .215.09.117.117 0 0 0-.215-.09ZM12.745 9.395l1.331.44.665.095-.623-.25-1.373-.285ZM13.488 11.78a.117.117 0 1 0 .185.141.117.117 0 0 0-.185-.142ZM12.98 8.832l1.173.77.617.264-.537-.403-1.252-.63ZM13.08 11.327a.117.117 0 1 0 .142.185.117.117 0 0 0-.142-.185ZM13.351 8.349l.934 1.046.528.415-.415-.528-1.047-.933ZM12.801 10.784a.117.117 0 1 0 .09.215.117.117 0 0 0-.09-.215ZM13.834 7.978l.63 1.252.403.538-.264-.618-.77-1.172ZM12.67 10.186a.117.117 0 1 0 .03.231.117.117 0 0 0-.03-.231ZM14.394 7.743l.285 1.373.25.623-.096-.664-.44-1.332ZM12.702 9.578a.117.117 0 1 0-.03.231.117.117 0 0 0 .03-.23ZM15 7.665l-.08 1.4.08.667.08-.667-.08-1.4ZM12.894 8.998a.117.117 0 1 0-.09.216.117.117 0 0 0 .09-.216ZM15.609 7.745l-.44 1.331-.095.665.25-.623.285-1.373ZM13.223 8.486a.117.117 0 1 0-.142.185.117.117 0 0 0 .142-.185ZM16.17 7.978l-.77 1.173-.263.617.402-.537.631-1.253ZM13.672 8.077a.117.117 0 1 0-.185.142.117.117 0 0 0 .185-.142ZM16.649 8.35l-1.047.933-.414.528.527-.415.934-1.047ZM14.213 7.799a.117.117 0 1 0-.216.09.117.117 0 0 0 .216-.09ZM17.018 8.833l-1.252.63-.537.403.617-.264 1.172-.77ZM14.809 7.671a.117.117 0 1 0-.231.03.117.117 0 0 0 .23-.03ZM17.252 9.396l-1.373.285-.623.25.664-.095 1.332-.44ZM15.422 7.702a.117.117 0 1 0-.23-.03.117.117 0 0 0 .23.03ZM17.335 10l-1.4-.08-.666.08.666.08 1.4-.08ZM16.003 7.889a.117.117 0 1 0-.215-.09.117.117 0 0 0 .215.09ZM17.256 10.604l-1.331-.44-.665-.095.623.25 1.373.285ZM16.511 8.22a.117.117 0 1 0-.185-.142.117.117 0 0 0 .185.142ZM17.018 11.167l-1.172-.77-.617-.263.537.402 1.252.631ZM16.92 8.673a.117.117 0 1 0-.143-.185.117.117 0 0 0 .142.185ZM16.648 11.65l-.934-1.046-.527-.414.414.527 1.047.934ZM17.198 9.216a.117.117 0 1 0-.09-.216.117.117 0 0 0 .09.216ZM16.165 12.022l-.63-1.253-.403-.537.264.617.77 1.173ZM17.33 9.814a.117.117 0 1 0-.03-.232.117.117 0 0 0 .03.232ZM15.605 12.256l-.285-1.373-.25-.623.096.665.44 1.331Z'
33
+ />
34
+ </g>
35
+ </g>
36
+ <defs>
37
+ <clipPath id='indiaFlagClipPath1'>
38
+ <rect width={30} height={20} fill='#fff' rx={1} />
39
+ </clipPath>
40
+ <clipPath id='indiaFlagClipPath2'>
41
+ <path fill='#fff' d='M0 0h30v20H0z' />
42
+ </clipPath>
43
+ </defs>
44
+ </svg>
45
+ );
46
+ }
47
+
48
+ export default India;
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+
3
+ function Ireland(props: React.SVGAttributes<SVGElement>): React.ReactElement {
4
+ return (
5
+ <svg
6
+ xmlns='http://www.w3.org/2000/svg'
7
+ width={30}
8
+ height={20}
9
+ viewBox='0 0 30 20'
10
+ fill='none'
11
+ {...props}
12
+ >
13
+ <g clipPath='url(#irelandFlagClipPath1)'>
14
+ <g clipPath='url(#irelandFlagClipPath1)'>
15
+ <path fill='#169B62' d='M10 0H0v20h10V0Z' />
16
+ <path fill='#fff' d='M20 0H10v20h10V0Z' />
17
+ <path fill='#FF883E' d='M30 0H20v20h10V0Z' />
18
+ </g>
19
+ </g>
20
+ <defs>
21
+ <clipPath id='irelandFlagClipPath1'>
22
+ <rect width={30} height={20} fill='#fff' rx={1} />
23
+ </clipPath>
24
+ <clipPath id='irelandFlagClipPath2'>
25
+ <path fill='#fff' d='M0 0h30v20H0z' />
26
+ </clipPath>
27
+ </defs>
28
+ </svg>
29
+ );
30
+ }
31
+
32
+ export default Ireland;
@@ -0,0 +1,29 @@
1
+ import React from "react";
2
+
3
+ function Netherlands(
4
+ props: React.SVGAttributes<SVGElement>
5
+ ): React.ReactElement {
6
+ return (
7
+ <svg
8
+ xmlns='http://www.w3.org/2000/svg'
9
+ width={30}
10
+ height={20}
11
+ viewBox='0 0 30 20'
12
+ fill='none'
13
+ {...props}
14
+ >
15
+ <g clipPath='url(#netherlandsFlagClipPath)'>
16
+ <path fill='#21468B' d='M30 0H0v20h30V0Z' />
17
+ <path fill='#fff' d='M30 0H0v13.333h30V0Z' />
18
+ <path fill='#AE1C28' d='M30 0H0v6.667h30V0Z' />
19
+ </g>
20
+ <defs>
21
+ <clipPath id='netherlandsFlagClipPath'>
22
+ <rect width={30} height={20} fill='#fff' rx={1} />
23
+ </clipPath>
24
+ </defs>
25
+ </svg>
26
+ );
27
+ }
28
+
29
+ export default Netherlands;