├── .babelrc ├── .gitignore ├── .husky ├── .gitignore ├── commit-msg └── pre-commit ├── .prettierrc ├── .storybook ├── main.js ├── preview-head.html └── preview.js ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── commitlint.config.js ├── jest.config.ts ├── jest ├── babelTransform.js ├── cssTransform.js └── fileTransform.js ├── package.json ├── rollup.config.js ├── src ├── components │ ├── avatar │ │ ├── Avatar.stories.tsx │ │ ├── Avatar.tsx │ │ ├── StyledAvatar.ts │ │ ├── index.ts │ │ └── static │ │ │ └── image.svg │ ├── badge │ │ ├── Badge.stories.tsx │ │ ├── Badge.tsx │ │ ├── StyledContainer.ts │ │ ├── StyledIcon.ts │ │ └── index.ts │ ├── button │ │ ├── Button.stories.tsx │ │ ├── Button.test.tsx │ │ ├── Button.tsx │ │ ├── StyledButton.ts │ │ ├── StyledIcon.ts │ │ └── index.ts │ ├── checkbox │ │ ├── Checkbox.stories.tsx │ │ ├── Checkbox.tsx │ │ ├── StyledCheckbox.ts │ │ ├── StyledHiddenCheckbox.ts │ │ ├── StyledLabel.ts │ │ └── index.ts │ ├── collapse │ │ ├── Collapse.stories.tsx │ │ ├── Collapse.tsx │ │ ├── StyledCollapse.ts │ │ ├── StyledContainer.ts │ │ ├── StyledContent.ts │ │ ├── StyledHeader.ts │ │ └── index.ts │ ├── input │ │ ├── Input.stories.tsx │ │ ├── Input.tsx │ │ ├── StyledContainer.ts │ │ ├── StyledInput.ts │ │ ├── StyledLabel.ts │ │ ├── StyledTextArea.tsx │ │ └── index.ts │ ├── pagination │ │ ├── Pagination.stories.tsx │ │ ├── Pagination.tsx │ │ ├── StyledContainer.ts │ │ └── index.ts │ ├── radio │ │ ├── Radio.stories.tsx │ │ ├── Radio.tsx │ │ ├── RadioGroup.stories.tsx │ │ ├── RadioGroup.tsx │ │ ├── StyledIcon.ts │ │ ├── StyledInput.ts │ │ ├── StyledRadio.ts │ │ ├── StyledRadioGroup.ts │ │ └── index.ts │ ├── select │ │ ├── Option.tsx │ │ ├── Select.stories.tsx │ │ ├── Select.tsx │ │ ├── StyledLabel.ts │ │ ├── StyledOption.ts │ │ ├── StyledSelect.ts │ │ └── index.ts │ ├── skeleton │ │ ├── Skeleton.stories.tsx │ │ ├── Skeleton.tsx │ │ ├── StyledContainer.ts │ │ ├── StyledSkeletonRow.ts │ │ └── index.ts │ ├── sorter │ │ ├── Sorter.tsx │ │ ├── StyledArrow.ts │ │ ├── StyledContainer.ts │ │ └── index.ts │ ├── table │ │ ├── StyledTable.ts │ │ ├── StyledTableData.ts │ │ ├── StyledTableHead.ts │ │ ├── StyledTableRow.ts │ │ ├── Table.stories.tsx │ │ ├── Table.tsx │ │ ├── getDataKey.ts │ │ └── index.ts │ ├── tabs │ │ ├── StyledTab.ts │ │ ├── StyledTabs.ts │ │ ├── Tab.tsx │ │ ├── TabPane.tsx │ │ ├── Tabs.stories.tsx │ │ ├── Tabs.tsx │ │ └── index.ts │ ├── tag │ │ ├── StyledIcon.ts │ │ ├── StyledTag.ts │ │ ├── Tag.stories.tsx │ │ ├── Tag.tsx │ │ └── index.tsx │ └── typography │ │ ├── Heading.stories.tsx │ │ ├── Heading.tsx │ │ ├── StyledHeading.ts │ │ ├── StyledText.ts │ │ ├── Text.stories.tsx │ │ ├── Text.tsx │ │ └── index.ts ├── icons │ ├── AddIcon.tsx │ ├── ArrowIcon.tsx │ ├── CancelIcon.tsx │ ├── CheckedIcon.tsx │ ├── ChevronLeft.tsx │ ├── ChevronRight.tsx │ ├── EmailIcon.tsx │ └── UserIcon.tsx ├── index.ts ├── types │ └── story.d.ts └── utils │ └── with-defaults.tsx ├── tailwind.config.js ├── tsconfig.json └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["solid", "@babel/typescript"], 3 | "plugins": ["twin", "macros"] 4 | } 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | # build 26 | dist/ 27 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npx --no-install commitlint --edit "" 5 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npx lint-staged 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 2, 4 | "semi": false, 5 | "singleQuote": true, 6 | "importOrder": ["^[w+]", "^[@]", "^[./]"], 7 | "importOrderSeparation": true 8 | } 9 | -------------------------------------------------------------------------------- /.storybook/main.js: -------------------------------------------------------------------------------- 1 | // const { addDecorator, configure } = require('@storybook/html') 2 | // const { createRoot } = require('solid-js') 3 | 4 | // automatically import all files ending in *.stories.js 5 | // configure(require.context('../stories', true, /\.stories\.js$/), module) 6 | 7 | // addDecorator((story) => { 8 | // return createRoot(() => story()) 9 | // }) 10 | 11 | module.exports = { 12 | stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], 13 | addons: ['@storybook/addon-links', '@storybook/addon-essentials'], 14 | } 15 | -------------------------------------------------------------------------------- /.storybook/preview-head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 550 | -------------------------------------------------------------------------------- /.storybook/preview.js: -------------------------------------------------------------------------------- 1 | import { createRoot } from 'solid-js' 2 | import { insert, template, createComponent } from 'solid-js/web' 3 | 4 | export const decorators = [ 5 | (Story) => 6 | createRoot(() => { 7 | // Wrap the component in a
( 4 | Comp: Component
, 5 | defaultProps: Partial
6 | ) {
7 | return ((props: any) => (
8 |
10 | } 11 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: [], 3 | darkMode: false, 4 | theme: { 5 | extend: { 6 | animation: { 7 | 'skeleton-loading': 'skeleton-loading 1.4s ease infinite', 8 | }, 9 | backgroundImage: { 10 | 'gradient-skeleton-loading': 11 | 'linear-gradient(90deg,rgba(190,190,190,.2) 25%,rgba(129,129,129,.24) 37%,rgba(190,190,190,.2) 63%)', 12 | }, 13 | backgroundSize: { 14 | 'skeleton-loading': '400% 100%', 15 | }, 16 | colors: { 17 | danger: { 18 | DEFAULT: '#FF464F', 19 | dark: '#FF323C', 20 | }, 21 | primary: { 22 | light: '#66C2FF', 23 | DEFAULT: '#0099FF', 24 | dark: '#005C99', 25 | 100: '#e5f4fe', 26 | }, 27 | secondary: { 28 | light: '#F9DA9F', 29 | DEFAULT: '#F2A71B', 30 | dark: '#916108', 31 | }, 32 | blue: { 33 | light: '#E5F5FF', 34 | DEFAULT: '#0099FF', 35 | dark: '#004F83', 36 | }, 37 | orange: { 38 | light: '#FFF8ED', 39 | DEFAULT: '#F2A71B', 40 | dark: '#7A3700', 41 | }, 42 | green: { 43 | light: '#D9F7BE', 44 | DEFAULT: '#389E0D', 45 | dark: '#266B09', 46 | }, 47 | purple: { 48 | light: '#EFDBFF', 49 | DEFAULT: '#531DAB', 50 | dark: '#3A1478', 51 | }, 52 | teal: { 53 | light: '#B5F5EC', 54 | DEFAULT: '#08979C', 55 | dark: '#056569', 56 | }, 57 | grey: { 58 | light: '#EBE4E4', 59 | dark: '#594E4E', 60 | DEFAULT: '#121111', 61 | }, 62 | light: { 63 | 100: '#EBE4E4', 64 | 300: '#F5F2F2', 65 | }, 66 | dark: { 67 | 100: '#231F1F', 68 | 200: '#332C2C', 69 | 300: '#594E4E', 70 | 400: '#877878', 71 | 500: '#B2A1A1', 72 | }, 73 | }, 74 | borderRadius: { 75 | '3xl': '1.5rem', 76 | }, 77 | fontFamily: { 78 | sans: 79 | '"Inter",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"', 80 | }, 81 | fontSize: { 82 | base: '0.9375rem', 83 | 'heading-1': ['5.75rem', '7rem'], 84 | 'heading-2': ['3.625rem', '4.375rem'], 85 | 'heading-3': ['3rem', '3.5rem'], 86 | 'heading-4': ['2rem', '2.5rem'], 87 | 'heading-5': ['1.5rem', '1.75rem'], 88 | 'heading-6': ['1.1875rem', '1.5rem'], 89 | xxs: '0.625rem', 90 | }, 91 | keyframes: { 92 | 'skeleton-loading': { 93 | '0%': { backgroundPosition: '100% 50%' }, 94 | '100%': { backgroundPosition: '0 50%' }, 95 | }, 96 | }, 97 | letterSpacing: { 98 | 'heading-1': '-1.5px', 99 | 'heading-2': '-0.5px', 100 | 'heading-3': '0', 101 | 'heading-4': '0.25px', 102 | 'heading-5': '0', 103 | 'heading-6': '0.15px', 104 | }, 105 | lineHeight: { 106 | 3.5: '0.875rem', 107 | 4.5: '1.125rem', 108 | }, 109 | }, 110 | }, 111 | variants: { 112 | extend: {}, 113 | }, 114 | plugins: [], 115 | } 116 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 4 | "allowJs": true, 5 | "skipLibCheck": true, 6 | "esModuleInterop": true, 7 | "allowSyntheticDefaultImports": true, 8 | "strict": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "module": "esnext", 11 | "moduleResolution": "node", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "declaration": true, 15 | "emitDeclarationOnly": true, 16 | "noEmit": false, 17 | "jsx": "preserve", 18 | "jsxImportSource": "solid-js" 19 | }, 20 | "include": ["src", "types"] 21 | } 22 | --------------------------------------------------------------------------------