@grantbii/design-system 1.19.6 → 1.20.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 (40) hide show
  1. package/core/archive/Badges.js +1 -1
  2. package/core/archive/Badges.js.map +1 -1
  3. package/core/archive/RadioButtons.js +1 -1
  4. package/core/archive/RadioButtons.js.map +1 -1
  5. package/core/archive/TallyModal.js +7 -2
  6. package/core/archive/TallyModal.js.map +1 -1
  7. package/core/integrations/registry.js +1 -1
  8. package/core/integrations/registry.js.map +1 -1
  9. package/core/molecules/PageLoader.js +1 -1
  10. package/core/molecules/PageLoader.js.map +1 -1
  11. package/core/molecules/RadioButton.d.ts +1 -1
  12. package/core/molecules/RadioButton.js +1 -1
  13. package/core/molecules/RadioButton.js.map +1 -1
  14. package/core/organisms/Dropdown.js +1 -1
  15. package/core/organisms/Dropdown.js.map +1 -1
  16. package/core/organisms/FileDrop.js +2 -2
  17. package/core/organisms/FileDrop.js.map +1 -1
  18. package/core/organisms/Modal.js +1 -1
  19. package/core/organisms/Modal.js.map +1 -1
  20. package/core/organisms/SearchBar.d.ts +10 -0
  21. package/core/organisms/SearchBar.js +86 -0
  22. package/core/organisms/SearchBar.js.map +1 -0
  23. package/core/organisms/index.d.ts +1 -0
  24. package/core/organisms/index.js +1 -0
  25. package/core/organisms/index.js.map +1 -1
  26. package/core/templates/GrantMatch/OpenModalButton.d.ts +5 -0
  27. package/core/templates/GrantMatch/OpenModalButton.js +62 -0
  28. package/core/templates/GrantMatch/OpenModalButton.js.map +1 -0
  29. package/core/templates/GrantMatch/index.js +31 -4
  30. package/core/templates/GrantMatch/index.js.map +1 -1
  31. package/package.json +1 -1
  32. package/stories/organisms/SearchBar.stories.d.ts +6 -0
  33. package/stories/organisms/SearchBar.stories.js +27 -0
  34. package/stories/organisms/SearchBar.stories.js.map +1 -0
  35. package/tsconfig.tsbuildinfo +1 -1
  36. package/vitest.config.js +3 -3
  37. package/vitest.config.js.map +1 -1
  38. package/core/templates/GrantMatch/SearchBar.d.ts +0 -6
  39. package/core/templates/GrantMatch/SearchBar.js +0 -165
  40. package/core/templates/GrantMatch/SearchBar.js.map +0 -1
package/vitest.config.js CHANGED
@@ -3,9 +3,9 @@ import path from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { defineConfig } from "vitest/config";
5
5
  import { storybookTest } from "@storybook/addon-vitest/vitest-plugin";
6
- const dirname = typeof __dirname !== "undefined"
7
- ? __dirname
8
- : path.dirname(fileURLToPath(import.meta.url));
6
+ const dirname = typeof __dirname === "undefined"
7
+ ? path.dirname(fileURLToPath(import.meta.url))
8
+ : __dirname;
9
9
  // More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon
10
10
  export default defineConfig({
11
11
  test: {
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,MAAM,OAAO,GACX,OAAO,SAAS,KAAK,WAAW;IAC9B,CAAC,CAAC,SAAS;IACX,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEnD,2FAA2F;AAC3F,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR;gBACE,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP,6EAA6E;oBAC7E,2GAA2G;oBAC3G,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC;iBAC/D;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE;wBACP,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,UAAU,EAAE;wBACtB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;qBACrC;oBACD,UAAU,EAAE,CAAC,4BAA4B,CAAC;iBAC3C;aACF;SACF;KACF;CACF,CAAC,CAAC","sourcesContent":["import { playwright } from \"@vitest/browser-playwright\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { defineConfig } from \"vitest/config\";\n\nimport { storybookTest } from \"@storybook/addon-vitest/vitest-plugin\";\n\nconst dirname =\n typeof __dirname !== \"undefined\"\n ? __dirname\n : path.dirname(fileURLToPath(import.meta.url));\n\n// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon\nexport default defineConfig({\n test: {\n projects: [\n {\n extends: true,\n plugins: [\n // The plugin will run tests for the stories defined in your Storybook config\n // See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest\n storybookTest({ configDir: path.join(dirname, \".storybook\") }),\n ],\n test: {\n name: \"storybook\",\n browser: {\n enabled: true,\n headless: true,\n provider: playwright(),\n instances: [{ browser: \"chromium\" }],\n },\n setupFiles: [\".storybook/vitest.setup.ts\"],\n },\n },\n ],\n },\n});\n"]}
1
+ {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,MAAM,OAAO,GACX,OAAO,SAAS,KAAK,WAAW;IAC9B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,SAAS,CAAC;AAEhB,2FAA2F;AAC3F,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR;gBACE,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP,6EAA6E;oBAC7E,2GAA2G;oBAC3G,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC;iBAC/D;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE;wBACP,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,UAAU,EAAE;wBACtB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;qBACrC;oBACD,UAAU,EAAE,CAAC,4BAA4B,CAAC;iBAC3C;aACF;SACF;KACF;CACF,CAAC,CAAC","sourcesContent":["import { playwright } from \"@vitest/browser-playwright\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { defineConfig } from \"vitest/config\";\n\nimport { storybookTest } from \"@storybook/addon-vitest/vitest-plugin\";\n\nconst dirname =\n typeof __dirname === \"undefined\"\n ? path.dirname(fileURLToPath(import.meta.url))\n : __dirname;\n\n// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon\nexport default defineConfig({\n test: {\n projects: [\n {\n extends: true,\n plugins: [\n // The plugin will run tests for the stories defined in your Storybook config\n // See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest\n storybookTest({ configDir: path.join(dirname, \".storybook\") }),\n ],\n test: {\n name: \"storybook\",\n browser: {\n enabled: true,\n headless: true,\n provider: playwright(),\n instances: [{ browser: \"chromium\" }],\n },\n setupFiles: [\".storybook/vitest.setup.ts\"],\n },\n },\n ],\n },\n});\n"]}
@@ -1,6 +0,0 @@
1
- type SearchBarProps = {
2
- textSearchCallback?: () => void;
3
- openModalCallback?: () => void;
4
- };
5
- declare const SearchBar: ({ textSearchCallback, openModalCallback, }: SearchBarProps) => import("react/jsx-runtime").JSX.Element;
6
- export default SearchBar;
@@ -1,165 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import styled from "styled-components";
3
- import { applyTypography } from "../../integrations";
4
- import { Color, Responsive, SystemIcon, Typography } from "../../atoms";
5
- import { Button } from "../../molecules";
6
- import { useGrantMatchContext } from "./context";
7
- const SearchBar = ({ textSearchCallback, openModalCallback, }) => {
8
- const { activeQuery, queryText } = useGrantMatchContext();
9
- return (_jsxs(BaseSearchBar, { children: [_jsxs(TextSearchArea, { "$showBorder": activeQuery.text !== "", children: [_jsx(QueryTextInput, {}), queryText === "" ? (_jsx(ResetTextButtonPlaceholder, {})) : (_jsx(ResetTextButton, {}))] }), _jsx(TextSearchButton, { textSearchCallback: textSearchCallback }), _jsx(OpenModalButton, { openModalCallback: openModalCallback })] }));
10
- };
11
- export default SearchBar;
12
- const BaseSearchBar = styled.div `
13
- display: flex;
14
- align-items: center;
15
- justify-content: space-between;
16
-
17
- width: 100%;
18
-
19
- color: ${Color.typography.blackHigh};
20
- background-color: ${Color.neutral.white};
21
-
22
- @media (width < ${Responsive.WIDTH_BREAKPOINTS.laptop}) {
23
- gap: 8px;
24
- padding: 0px;
25
-
26
- box-shadow: none;
27
- border-radius: 0px;
28
- }
29
-
30
- @media (width >= ${Responsive.WIDTH_BREAKPOINTS.laptop}) {
31
- gap: 16px;
32
- padding: 12px 16px;
33
-
34
- box-shadow: 0px 0px 40px 0px #00000008;
35
- border-radius: 12px;
36
- }
37
- `;
38
- const TextSearchArea = styled.div `
39
- display: flex;
40
- align-items: center;
41
-
42
- height: 40px;
43
- width: 100%;
44
-
45
- background-color: ${Color.neutral.grey4};
46
- border-radius: 8px;
47
-
48
- border: 1px solid
49
- ${({ $showBorder }) => $showBorder ? Color.accent.yellow1 : Color.neutral.grey2};
50
-
51
- &:focus-within {
52
- border: 1px solid ${Color.accent.yellow1};
53
- }
54
- `;
55
- const QueryTextInput = () => {
56
- const { activeQuery, updateActiveQuery, queryText, updateQueryText } = useGrantMatchContext();
57
- const onKeyDown = (event) => {
58
- if (event.key === "Enter" && !event.repeat) {
59
- event.preventDefault();
60
- updateActiveQuery({ files: activeQuery.files, text: queryText });
61
- }
62
- };
63
- return (_jsx(BaseQueryTextInput, { value: queryText, onChange: (event) => updateQueryText(event.target.value), onKeyDown: onKeyDown, placeholder: "Search grant or describe your project" }));
64
- };
65
- const BaseQueryTextInput = styled.input `
66
- width: 100%;
67
- margin-left: 16px;
68
- outline: none;
69
- border: none;
70
-
71
- background-color: ${Color.neutral.grey4};
72
- text-overflow: ellipsis;
73
- `;
74
- const ResetTextButton = () => {
75
- const { activeQuery, updateActiveQuery, updateQueryText } = useGrantMatchContext();
76
- const onClick = () => {
77
- updateQueryText("");
78
- updateActiveQuery({ files: activeQuery.files, text: "" });
79
- };
80
- return (_jsx(BaseResetTextButton, { type: "button", onClick: onClick, children: _jsx(SystemIcon.XIcon, { size: 14, color: Color.neutral.black }) }));
81
- };
82
- const BaseResetTextButton = styled.button `
83
- display: flex;
84
- align-items: center;
85
- justify-content: center;
86
-
87
- width: 38px;
88
- min-width: 38px;
89
- height: 38px;
90
-
91
- background-color: ${Color.neutral.grey4};
92
- border-radius: 8px;
93
- `;
94
- const ResetTextButtonPlaceholder = styled.div `
95
- width: 38px;
96
- height: 38px;
97
-
98
- border-radius: 8px;
99
- `;
100
- const TextSearchButton = ({ textSearchCallback }) => {
101
- const { activeQuery, updateActiveQuery, queryText } = useGrantMatchContext();
102
- const onClick = () => {
103
- if (textSearchCallback) {
104
- textSearchCallback();
105
- }
106
- updateActiveQuery({ files: activeQuery.files, text: queryText });
107
- };
108
- return (_jsx(Button, { Icon: SystemIcon.MagnifyingGlassIcon, onClick: onClick, size: "small" }));
109
- };
110
- const OpenModalButton = ({ openModalCallback }) => {
111
- const { openModal } = useGrantMatchContext();
112
- const onClickOpen = () => {
113
- if (openModalCallback) {
114
- openModalCallback();
115
- }
116
- openModal();
117
- };
118
- return (_jsxs(BaseOpenModalButton, { onClick: onClickOpen, children: [_jsx(SystemIcon.FileArrowUpIcon, { size: 20 }), _jsx(OpenModalButtonText, { children: "File Drop" })] }));
119
- };
120
- const BaseOpenModalButton = styled.button `
121
- display: flex;
122
- align-items: center;
123
- justify-content: center;
124
- gap: 10px;
125
-
126
- height: 40px;
127
-
128
- border-radius: 8px;
129
-
130
- background-color: ${Color.neutral.grey3};
131
- color: ${Color.typography.blackHigh};
132
-
133
- ${applyTypography(Typography.bodySecondaryRegular)}
134
-
135
- &:hover {
136
- background-color: ${Color.accent.blue3};
137
- }
138
-
139
- @media (width < ${Responsive.WIDTH_BREAKPOINTS.laptop}) {
140
- width: 40px;
141
- min-width: 40px;
142
- padding: 0px;
143
- }
144
-
145
- @media (width >= ${Responsive.WIDTH_BREAKPOINTS.laptop}) {
146
- width: auto;
147
- min-width: 90px;
148
- padding: 2px 16px;
149
- }
150
- `;
151
- const OpenModalButtonText = styled.p `
152
- font-weight: 500;
153
- overflow: hidden;
154
- white-space: nowrap;
155
- text-overflow: ellipsis;
156
-
157
- @media (width < ${Responsive.WIDTH_BREAKPOINTS.laptop}) {
158
- display: none;
159
- }
160
-
161
- @media (width >= ${Responsive.WIDTH_BREAKPOINTS.laptop}) {
162
- display: inline;
163
- }
164
- `;
165
- //# sourceMappingURL=SearchBar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SearchBar.js","sourceRoot":"","sources":["../../../../core/templates/GrantMatch/SearchBar.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { KeyboardEvent } from \"react\";\nimport styled from \"styled-components\";\nimport { applyTypography } from \"../../integrations\";\nimport { Color, Responsive, SystemIcon, Typography } from \"../../atoms\";\nimport { Button } from \"../../molecules\";\nimport { useGrantMatchContext } from \"./context\";\n\ntype SearchBarProps = {\n textSearchCallback?: () => void;\n openModalCallback?: () => void;\n};\n\nconst SearchBar = ({\n textSearchCallback,\n openModalCallback,\n}: SearchBarProps) => {\n const { activeQuery, queryText } = useGrantMatchContext();\n\n return (\n <BaseSearchBar>\n <TextSearchArea $showBorder={activeQuery.text !== \"\"}>\n <QueryTextInput />\n\n {queryText === \"\" ? (\n <ResetTextButtonPlaceholder />\n ) : (\n <ResetTextButton />\n )}\n </TextSearchArea>\n\n <TextSearchButton textSearchCallback={textSearchCallback} />\n <OpenModalButton openModalCallback={openModalCallback} />\n </BaseSearchBar>\n );\n};\n\nexport default SearchBar;\n\nconst BaseSearchBar = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n width: 100%;\n\n color: ${Color.typography.blackHigh};\n background-color: ${Color.neutral.white};\n\n @media (width < ${Responsive.WIDTH_BREAKPOINTS.laptop}) {\n gap: 8px;\n padding: 0px;\n\n box-shadow: none;\n border-radius: 0px;\n }\n\n @media (width >= ${Responsive.WIDTH_BREAKPOINTS.laptop}) {\n gap: 16px;\n padding: 12px 16px;\n\n box-shadow: 0px 0px 40px 0px #00000008;\n border-radius: 12px;\n }\n`;\n\nconst TextSearchArea = styled.div<{ $showBorder: boolean }>`\n display: flex;\n align-items: center;\n\n height: 40px;\n width: 100%;\n\n background-color: ${Color.neutral.grey4};\n border-radius: 8px;\n\n border: 1px solid\n ${({ $showBorder }) =>\n $showBorder ? Color.accent.yellow1 : Color.neutral.grey2};\n\n &:focus-within {\n border: 1px solid ${Color.accent.yellow1};\n }\n`;\n\nconst QueryTextInput = () => {\n const { activeQuery, updateActiveQuery, queryText, updateQueryText } =\n useGrantMatchContext();\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && !event.repeat) {\n event.preventDefault();\n updateActiveQuery({ files: activeQuery.files, text: queryText });\n }\n };\n\n return (\n <BaseQueryTextInput\n value={queryText}\n onChange={(event) => updateQueryText(event.target.value)}\n onKeyDown={onKeyDown}\n placeholder=\"Search grant or describe your project\"\n />\n );\n};\n\nconst BaseQueryTextInput = styled.input`\n width: 100%;\n margin-left: 16px;\n outline: none;\n border: none;\n\n background-color: ${Color.neutral.grey4};\n text-overflow: ellipsis;\n`;\n\nconst ResetTextButton = () => {\n const { activeQuery, updateActiveQuery, updateQueryText } =\n useGrantMatchContext();\n\n const onClick = () => {\n updateQueryText(\"\");\n updateActiveQuery({ files: activeQuery.files, text: \"\" });\n };\n\n return (\n <BaseResetTextButton type=\"button\" onClick={onClick}>\n <SystemIcon.XIcon size={14} color={Color.neutral.black} />\n </BaseResetTextButton>\n );\n};\n\nconst BaseResetTextButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 38px;\n min-width: 38px;\n height: 38px;\n\n background-color: ${Color.neutral.grey4};\n border-radius: 8px;\n`;\n\nconst ResetTextButtonPlaceholder = styled.div`\n width: 38px;\n height: 38px;\n\n border-radius: 8px;\n`;\n\ntype TextSearchButtonProps = {\n textSearchCallback?: () => void;\n};\n\nconst TextSearchButton = ({ textSearchCallback }: TextSearchButtonProps) => {\n const { activeQuery, updateActiveQuery, queryText } = useGrantMatchContext();\n\n const onClick = () => {\n if (textSearchCallback) {\n textSearchCallback();\n }\n\n updateActiveQuery({ files: activeQuery.files, text: queryText });\n };\n\n return (\n <Button\n Icon={SystemIcon.MagnifyingGlassIcon}\n onClick={onClick}\n size=\"small\"\n />\n );\n};\n\ntype OpenModalButtonProps = {\n openModalCallback?: () => void;\n};\n\nconst OpenModalButton = ({ openModalCallback }: OpenModalButtonProps) => {\n const { openModal } = useGrantMatchContext();\n\n const onClickOpen = () => {\n if (openModalCallback) {\n openModalCallback();\n }\n\n openModal();\n };\n\n return (\n <BaseOpenModalButton onClick={onClickOpen}>\n <SystemIcon.FileArrowUpIcon size={20} />\n <OpenModalButtonText>File Drop</OpenModalButtonText>\n </BaseOpenModalButton>\n );\n};\n\nconst BaseOpenModalButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n\n height: 40px;\n\n border-radius: 8px;\n\n background-color: ${Color.neutral.grey3};\n color: ${Color.typography.blackHigh};\n\n ${applyTypography(Typography.bodySecondaryRegular)}\n\n &:hover {\n background-color: ${Color.accent.blue3};\n }\n\n @media (width < ${Responsive.WIDTH_BREAKPOINTS.laptop}) {\n width: 40px;\n min-width: 40px;\n padding: 0px;\n }\n\n @media (width >= ${Responsive.WIDTH_BREAKPOINTS.laptop}) {\n width: auto;\n min-width: 90px;\n padding: 2px 16px;\n }\n`;\n\nconst OpenModalButtonText = styled.p`\n font-weight: 500;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n @media (width < ${Responsive.WIDTH_BREAKPOINTS.laptop}) {\n display: none;\n }\n\n @media (width >= ${Responsive.WIDTH_BREAKPOINTS.laptop}) {\n display: inline;\n }\n`;\n"]}