whelk-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.
@@ -0,0 +1,3 @@
1
+ {
2
+ "recommendations": ["Vue.volar"]
3
+ }
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # Vue 3 + TypeScript + Vite
2
+
3
+ This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
4
+
5
+ Learn more about the recommended Project Setup and IDE Support in the [Vue Docs TypeScript Guide](https://vuejs.org/guide/typescript/overview.html#project-setup).
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "whelk-ui",
3
+ "private": false,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vue-tsc -b && vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "lucide-vue-next": "^0.562.0",
13
+ "vue": "^3.5.24"
14
+ },
15
+ "devDependencies": {
16
+ "@csstools/postcss-global-data": "^3.1.0",
17
+ "@types/node": "^24.10.1",
18
+ "@vitejs/plugin-vue": "^6.0.1",
19
+ "@vitest/browser-playwright": "^4.0.7",
20
+ "@vitest/coverage-v8": "^4.0.8",
21
+ "@vitest/eslint-plugin": "^1.4.0",
22
+ "@vue/tsconfig": "^0.8.1",
23
+ "postcss": "^8.5.6",
24
+ "postcss-custom-media": "^11.0.6",
25
+ "postcss-nesting": "^13.0.2",
26
+ "typescript": "~5.9.3",
27
+ "vite": "^7.2.4",
28
+ "vite-plugin-vue-devtools": "^8.0.3",
29
+ "vitest": "^4.0.8",
30
+ "vitest-browser-vue": "^2.0.1",
31
+ "vue-tsc": "^3.1.4"
32
+ }
33
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
@@ -0,0 +1,113 @@
1
+ <script setup lang="ts">
2
+ </script>
3
+
4
+ <template>
5
+ <button>
6
+ Hello World
7
+ </button>
8
+ </template>
9
+
10
+ <style scoped>
11
+ button {
12
+ padding: 0.5rem 1rem;
13
+ border: var(--border);
14
+ border-radius: var(--border-radius);
15
+ border-width: var(--border-width);
16
+ border-style: var(--border-style);
17
+ color: var(--text);
18
+
19
+ &.compact {
20
+ padding: 0.25rem 0.125rem;
21
+ font-size: 0.75rem;
22
+ line-height: 1rem;
23
+ }
24
+
25
+ &.tiny {
26
+ padding: 0.125rem 0rem;
27
+ font-size: 0.75rem;
28
+ line-height: 0.75rem;
29
+ }
30
+
31
+ &.primary {
32
+ background-color: var(--primary);
33
+ border-color: var(--primary);
34
+
35
+ &:hover {
36
+ &:enabled {
37
+ background-color: var(--primary-hover);
38
+ }
39
+ }
40
+ }
41
+
42
+ &.secondary {
43
+ background-color: var(--secondary);
44
+ border-color: var(--secondary);
45
+
46
+ &:hover {
47
+ &:enabled {
48
+ background-color: var(--secondary-hover);
49
+ }
50
+ }
51
+ }
52
+
53
+ &.danger {
54
+ background-color: var(--danger);
55
+ border-color: var(--danger);
56
+
57
+ &:hover {
58
+ &:enabled {
59
+ background-color: var(--danger-hover);
60
+ }
61
+ }
62
+ }
63
+
64
+ &.warning {
65
+ background-color: var(--warning);
66
+ border-color: var(--warning);
67
+
68
+ &:hover {
69
+ &:enabled {
70
+ background-color: var(--warning-hover);
71
+ }
72
+ }
73
+ }
74
+
75
+ &.success {
76
+ background-color: var(--success);
77
+ border-color: var(--success);
78
+
79
+ &:hover {
80
+ &:enabled {
81
+ background-color: var(--success-hover);
82
+ }
83
+ }
84
+ }
85
+
86
+ &.info {
87
+ background-color: var(--info);
88
+ border-color: var(--info);
89
+
90
+ &:hover {
91
+ &:enabled {
92
+ background-color: var(--info-hover);
93
+ }
94
+ }
95
+ }
96
+
97
+ &.loading {
98
+ animation: loading-animation 1s infinite linear;
99
+ }
100
+ }
101
+
102
+ @keyframes loading-animation {
103
+ 0% {
104
+ color: var(--text);
105
+ }
106
+ 50% {
107
+ color: var(--text-muted);
108
+ }
109
+ 100% {
110
+ color: var(--text);
111
+ }
112
+ }
113
+ </style>
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ import ButtonComponent from './components/button/ButtonComponent.vue';
2
+
3
+ export { ButtonComponent };
@@ -0,0 +1,11 @@
1
+ .hidden-visually {
2
+ position: absolute;
3
+ overflow: hidden;
4
+ white-space: nowrap;
5
+ margin: 0;
6
+ padding: 0;
7
+ height: 1px;
8
+ width: 1px;
9
+ clip: rect(0 0 0 0);
10
+ clip-path: inset(100%);
11
+ }
@@ -0,0 +1,84 @@
1
+ @import "_accessibility.css";
2
+ @import "@/styles/variables/_general_variables.css";
3
+
4
+ @font-face {
5
+ font-family: "Roboto";
6
+ src: url("@/assets/fonts/Roboto-Regular.ttf") format("truetype");
7
+ font-weight: 400;
8
+ font-style: normal;
9
+ }
10
+
11
+ @font-face {
12
+ font-family: "Roboto";
13
+ src: url("@/assets/fonts/Roboto-Thin.ttf") format("truetype");
14
+ font-weight: 100;
15
+ font-style: normal;
16
+ }
17
+
18
+ @font-face {
19
+ font-family: "CalSans";
20
+ src: url("@/assets/fonts/CalSans-Regular.ttf") format("truetype");
21
+ font-style: normal;
22
+ }
23
+
24
+ h1, h2, h3, h4, h5, h6 {
25
+ margin: 0;
26
+ font-family: "CalSans",
27
+ sans-serif;
28
+ font-weight: normal;
29
+ font-style: normal;
30
+ color: var(--text-red);
31
+ }
32
+
33
+ h1 {
34
+ font-size: 2rem;
35
+ line-height: 2.125rem;
36
+ font-weight: bold;
37
+ @media (--large-screen) {
38
+ font-size: 3rem;
39
+ line-height: 3.25rem;
40
+ }
41
+ }
42
+
43
+ h2 {
44
+ font-size: 1.5rem;
45
+ line-height: 1.625rem;
46
+ font-weight: bold;
47
+ @media (--large-screen) {
48
+ font-size: 2rem;
49
+ line-height: 2.25rem;
50
+ }
51
+ }
52
+
53
+ p, label, button {
54
+ font-size: 1.25rem;
55
+ font-family: "Roboto", sans-serif;
56
+ line-height: 1.5rem;
57
+ color: var(--text);
58
+ margin-bottom: 0;
59
+ @meida (--large-screen) {
60
+ font-size: 1rem;
61
+ line-height: 1.25rem;
62
+ }
63
+ }
64
+
65
+ input, textarea {
66
+ font-family: "Roboto", sans-serif;
67
+ font-size: 1.5rem;
68
+ line-height: 1.75rem;
69
+ padding: 0.5rem;
70
+ }
71
+
72
+ .sub-text {
73
+ font-family: "Roboto", sans-serif;
74
+ font-weight: 100;
75
+ margin: 0.5rem 0 3rem 0;
76
+ }
77
+
78
+ .mt-0 {
79
+ margin-top: 0 !important;
80
+ }
81
+
82
+ .mb-0 {
83
+ margin-bottom: 0 !important;
84
+ }
@@ -0,0 +1,84 @@
1
+ :root { /* Set all the grid size here */
2
+ --xx-small-grid-width: 320px;
3
+ --x-small-grid-width: 400px;
4
+ --small-grid-width: 640px;
5
+ --medium-grid-width: 768px;
6
+ --large-grid-width: 1024px;
7
+ --x-large-grid-width: 1280px;
8
+ --xx-large-grid-width: 1536px; /* Set all variables in here for globals */
9
+ /*--xx-small-card-width: 320px;*/ /*--x-small-card-width: 400px;*/
10
+ /*--small-card-width: 640px;*/ /*--medium-card-width: 768px;*/
11
+ /*--large-card-width: 1024px;*/ /*--x-large-card-width: 1280px;*/
12
+ /*--xx-large-card-width: 1536px;*/ /* Set all the border variables here */
13
+ --border-radius: 5px;
14
+ --border-style: solid;
15
+ --border-width: 1px;
16
+ /* Set all the
17
+ colour variables here */
18
+ --bg-dark: hsl(26 53% 89%);
19
+ --bg: hsl(26 100% 94%);
20
+ --bg-light: hsl(26 100% 100%);
21
+ --text: hsl(16 100% 4%);
22
+ --text-red: hsl(8, 93%, 43%);
23
+ --text-muted: hsl(26 35% 27%);
24
+ --highlight: hsl(26 100% 99%);
25
+ --border: hsl(26 21% 49%);
26
+ --border-muted: hsl(26 27% 61%);
27
+ --primary: hsl(27 65% 66%);
28
+ --primary-hover: hsl(27 65% 76%);
29
+ --secondary: hsl(204 74% 68%);
30
+ --secondary-hover: hsl(204 74% 78%);
31
+ --danger: hsl(9 26% 64%);
32
+ --danger-hover: hsl(9 26% 74%);
33
+ --warning: hsl(52 19% 57%);
34
+ --warning-hover: hsl(52 19% 67%);
35
+ --success: hsl(146 17% 59%);
36
+ --success-hover: hsl(146 17% 69%);
37
+ --info: hsl(217 28% 65%);
38
+ --info-hover: hsl(217 28% 75%); /* Set all the object colours here */
39
+ --document-links: hsl(203.53, 40.8%, 24.51%);
40
+ --document-links-hover: hsl(203.53, 40.8%, 75.51%);
41
+ --customer-background: hsl(203.53, 40.8%, 75.49%);
42
+ --customer-text: hsl(203.53, 40.8%, 24.51%);
43
+ --kanban-board-background: hsl(78.26, 88.46%, 89.8%);
44
+ --kanban-board-text: hsl(78.26, 88.46%, 10.2%);
45
+ --kanban-card-background: hsl(74.12, 35.56%, 53.14%);
46
+ --kanban-card-text: hsl(74.12, 35.56%, 10.86%);
47
+ --organisation-background: hsl(52.05, 85.57%, 61.96%);
48
+ --organisation-text: hsl(52.05, 85.57%, 8.04%);
49
+ --request-for-change-background: hsl(67.61, 100%, 72.16%);
50
+ --request-for-change-text: hsl(67.61, 100%, 7.84%);
51
+ --requirement-background: hsl(200.31, 94.2%, 86.47%);
52
+ --requirement-text: hsl(200.31, 94.2%, 10.53%);
53
+ --requirement-item-background: hsl(322.8, 29.76%, 67.06%);
54
+ --requirement-item-text: hsl(322.8, 29.76%, 8.94%);
55
+ --project-background: hsl(333.62, 49.57%, 45.88%);
56
+ --project-text: hsl(333.62, 49.57%, 8.12%);
57
+ --task-background: hsl(224, 10.2%, 71.82%);
58
+ --task-text: hsl(224, 10.2%, 7.18%);
59
+ }
60
+
61
+ .dark {
62
+ --bg-dark: hsl(16 100% 2%);
63
+ --bg: hsl(22 76% 4%);
64
+ --bg-light: hsl(26 50% 8%);
65
+ --text: hsl(26 100% 94%);
66
+ --text-red: hsl(8,
67
+ 93%, 23%);
68
+ --text-muted: hsl(26 34% 68%);
69
+ --highlight: hsl(26 26% 38%);
70
+ --border: hsl(26 35% 27%);
71
+ --border-muted: hsl(27 56% 16%);
72
+ --primary: hsl(32 100% 20%);
73
+ --primary-hover: hsl(32 100% 10%);
74
+ --secondary: hsl(198 100% 20%);
75
+ --secondary-hover: hsl(198 100% 10%);
76
+ --danger: hsl(9 21% 41%);
77
+ --danger-hover: hsl(9 21% 31%);
78
+ --warning: hsl(52 23% 34%);
79
+ --warning-hover: hsl(52 23% 24%);
80
+ --success: hsl(147 19% 36%);
81
+ --success-hover: hsl(147 19% 26%);
82
+ --info: hsl(217 22% 41%);
83
+ --info-hover: hsl(217 22% 31%);
84
+ }
@@ -0,0 +1,10 @@
1
+ /* Mobile phone screens will have a screen size smaller than 640 * Small screens
2
+ will have a screen size of 640px or larger * Medium screen will have a screen
3
+ size of 768px or larger * etc. * * Small screens are considered mobile phones *
4
+ Medium screens are considered tables * Large screens are considered laptops *
5
+ etc. */
6
+ @custom-media --small-screen (min-width: 640px);
7
+ @custom-media --medium-screen (min-width: 768px);
8
+ @custom-media --large-screen (min-width: 1024px);
9
+ @custom-media --x-large-screen (min-width: 1280px);
10
+ @custom-media --2x-large-screen (min-width: 1536px);
@@ -0,0 +1,16 @@
1
+ {
2
+ "extends": "@vue/tsconfig/tsconfig.dom.json",
3
+ "compilerOptions": {
4
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
5
+ "types": ["vite/client"],
6
+
7
+ /* Linting */
8
+ "strict": true,
9
+ "noUnusedLocals": true,
10
+ "noUnusedParameters": true,
11
+ "erasableSyntaxOnly": true,
12
+ "noFallthroughCasesInSwitch": true,
13
+ "noUncheckedSideEffectImports": true
14
+ },
15
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
16
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ { "path": "./tsconfig.app.json" },
5
+ { "path": "./tsconfig.node.json" }
6
+ ]
7
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
+ "target": "ES2023",
5
+ "lib": ["ES2023"],
6
+ "module": "ESNext",
7
+ "types": ["node"],
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ // "verbatimModuleSyntax": true,
14
+ "noEmit": true,
15
+
16
+ /* Linting */
17
+ "strict": true,
18
+ "noUnusedLocals": true,
19
+ "noUnusedParameters": true,
20
+ "erasableSyntaxOnly": true,
21
+ "noFallthroughCasesInSwitch": true,
22
+ "noUncheckedSideEffectImports": true
23
+ },
24
+ "include": ["vite.config.ts"]
25
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,50 @@
1
+ import { fileURLToPath, URL } from 'node:url'
2
+ import { defineConfig } from 'vite'
3
+ import vue from '@vitejs/plugin-vue'
4
+ import vueDevTools from 'vite-plugin-vue-devtools'
5
+ import postcssCustomMedia from 'postcss-custom-media'
6
+ import postcssNesting from 'postcss-nesting'
7
+ import postcssGlobalData from '@csstools/postcss-global-data'
8
+ import { resolve } from 'path'
9
+
10
+
11
+ // https://vite.dev/config/
12
+ export default defineConfig({
13
+ build: {
14
+ lib: {
15
+ entry: resolve(__dirname, 'src/index.ts'),
16
+ name: 'whelk-ui',
17
+ fileName: 'whelk-ui',
18
+ },
19
+ rollupOptions: {
20
+ external: ['vue'],
21
+ output: {
22
+ globals: {
23
+ vue: 'Vue',
24
+ },
25
+ },
26
+ },
27
+ },
28
+ css: {
29
+ postcss: {
30
+ plugins: [
31
+ postcssNesting,
32
+ postcssGlobalData({
33
+ files: [
34
+ './src/styles/variables/_media_variables.css',
35
+ ]
36
+ }),
37
+ postcssCustomMedia,
38
+ ]
39
+ }
40
+ },
41
+ plugins: [
42
+ vue(),
43
+ vueDevTools(),
44
+ ],
45
+ resolve: {
46
+ alias: {
47
+ '@': fileURLToPath(new URL('./src', import.meta.url)),
48
+ },
49
+ },
50
+ })