@m11g/library 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 (66) hide show
  1. package/.editorconfig +8 -0
  2. package/.gitattributes +1 -0
  3. package/.oxfmtrc.json +5 -0
  4. package/.oxlintrc.json +10 -0
  5. package/.stylelintrc +33 -0
  6. package/.vscode/extensions.json +8 -0
  7. package/README.md +48 -0
  8. package/env.d.ts +1 -0
  9. package/eslint.config.ts +35 -0
  10. package/index.html +13 -0
  11. package/package.json +61 -0
  12. package/postcss.config.ts +23 -0
  13. package/public/favicon.ico +0 -0
  14. package/src/App.vue +28 -0
  15. package/src/assets/css/base.css +2 -0
  16. package/src/assets/css/elements/_base.css +5 -0
  17. package/src/assets/css/elements/buttons.css +23 -0
  18. package/src/assets/css/elements/form.css +75 -0
  19. package/src/assets/css/elements/scaffolding.css +62 -0
  20. package/src/assets/css/elements/transition.css +4 -0
  21. package/src/assets/css/elements/typography.css +80 -0
  22. package/src/assets/css/media-queries/media-queries.css +3 -0
  23. package/src/assets/css/mixins/list-reset.css +5 -0
  24. package/src/assets/css/variables/_base.css +7 -0
  25. package/src/assets/css/variables/chakra.css +160 -0
  26. package/src/assets/css/variables/colors.css +205 -0
  27. package/src/assets/css/variables/grid.css +6 -0
  28. package/src/assets/css/variables/spacings.css +10 -0
  29. package/src/assets/css/variables/transitions.css +10 -0
  30. package/src/assets/css/variables/typography.css +17 -0
  31. package/src/components/AppBreadcrumb.vue +63 -0
  32. package/src/components/AppButton.vue +105 -0
  33. package/src/components/AppCarousel.vue +145 -0
  34. package/src/components/AppDialog.vue +126 -0
  35. package/src/components/AppNotification.vue +68 -0
  36. package/src/components/AppPagination.vue +127 -0
  37. package/src/components/AppPopover.vue +57 -0
  38. package/src/components/AppTabs.vue +176 -0
  39. package/src/components/CenterWrapper.vue +50 -0
  40. package/src/components/ClickableWrapper.vue +48 -0
  41. package/src/components/Forms/AppForm.vue +61 -0
  42. package/src/components/Forms/FormErrorMessage.vue +17 -0
  43. package/src/components/Forms/FormField.vue +30 -0
  44. package/src/components/Forms/FormFieldset.vue +28 -0
  45. package/src/components/Forms/RadioGroup.vue +85 -0
  46. package/src/components/Forms/SearchField.vue +38 -0
  47. package/src/components/Forms/SelectField.vue +125 -0
  48. package/src/components/Forms/TextField.vue +41 -0
  49. package/src/components/Forms/TextareaField.vue +32 -0
  50. package/src/components/ScrollSpy.vue +111 -0
  51. package/src/components/SummaryDetails.vue +83 -0
  52. package/src/composables/useTheme.ts +20 -0
  53. package/src/index.ts +48 -0
  54. package/src/main.ts +10 -0
  55. package/src/router/index.ts +26 -0
  56. package/src/types/Theme.ts +11 -0
  57. package/src/views/CarouselView.vue +27 -0
  58. package/src/views/FormView.vue +111 -0
  59. package/src/views/HomeView.vue +100 -0
  60. package/src/views/ScrollSpyView.vue +58 -0
  61. package/theme-dark +117 -0
  62. package/theme-light +191 -0
  63. package/tsconfig.app.json +18 -0
  64. package/tsconfig.json +11 -0
  65. package/tsconfig.node.json +28 -0
  66. package/vite.config.ts +26 -0
package/.editorconfig ADDED
@@ -0,0 +1,8 @@
1
+ [*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}]
2
+ charset = utf-8
3
+ indent_size = 2
4
+ indent_style = space
5
+ insert_final_newline = true
6
+ trim_trailing_whitespace = true
7
+ end_of_line = lf
8
+ max_line_length = 100
package/.gitattributes ADDED
@@ -0,0 +1 @@
1
+ * text=auto eol=lf
package/.oxfmtrc.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "./node_modules/oxfmt/configuration_schema.json",
3
+ "semi": false,
4
+ "singleQuote": true
5
+ }
package/.oxlintrc.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "./node_modules/oxlint/configuration_schema.json",
3
+ "plugins": ["eslint", "typescript", "unicorn", "oxc", "vue"],
4
+ "env": {
5
+ "browser": true
6
+ },
7
+ "categories": {
8
+ "correctness": "error"
9
+ }
10
+ }
package/.stylelintrc ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "extends": [
3
+ "stylelint-config-standard",
4
+ "stylelint-config-standard-vue",
5
+ "@stylistic/stylelint-config",
6
+ "stylelint-config-recess-order"
7
+ ],
8
+ "plugins": [
9
+ "stylelint-use-logical"
10
+ ],
11
+ "rules": {
12
+ "csstools/use-logical": "always",
13
+ "import-notation": null,
14
+ "at-rule-no-unknown": [
15
+ true,
16
+ {
17
+ "ignoreAtRules": ["mixin", "define-mixin"]
18
+ }
19
+ ],
20
+ "selector-pseudo-class-no-unknown": [
21
+ true,
22
+ {
23
+ "ignorePseudoClasses": ["global", "readonly", "deep", "scroll-button", "scroll-marker", "target-current"]
24
+ }
25
+ ],
26
+ "color-no-hex": true,
27
+
28
+ "selector-type-no-unknown": [true, { "ignoreTypes": ["left", "right"] }],
29
+ "nesting-selector-no-missing-scoping-root": null,
30
+ "property-no-deprecated": [true, { "ignoreProperties": ["clip"] }],
31
+ "property-no-unknown": [true, { "ignoreProperties": ["border-shape"] }]
32
+ }
33
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "recommendations": [
3
+ "Vue.volar",
4
+ "dbaeumer.vscode-eslint",
5
+ "EditorConfig.EditorConfig",
6
+ "oxc.oxc-vscode"
7
+ ]
8
+ }
package/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # library
2
+
3
+ This template should help get you started developing with Vue 3 in Vite.
4
+
5
+ ## Recommended IDE Setup
6
+
7
+ [VS Code](https://code.visualstudio.com/) + [Vue (Official)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
8
+
9
+ ## Recommended Browser Setup
10
+
11
+ - Chromium-based browsers (Chrome, Edge, Brave, etc.):
12
+ - [Vue.js devtools](https://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd)
13
+ - [Turn on Custom Object Formatter in Chrome DevTools](http://bit.ly/object-formatters)
14
+ - Firefox:
15
+ - [Vue.js devtools](https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/)
16
+ - [Turn on Custom Object Formatter in Firefox DevTools](https://fxdx.dev/firefox-devtools-custom-object-formatters/)
17
+
18
+ ## Type Support for `.vue` Imports in TS
19
+
20
+ TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types.
21
+
22
+ ## Customize configuration
23
+
24
+ See [Vite Configuration Reference](https://vite.dev/config/).
25
+
26
+ ## Project Setup
27
+
28
+ ```sh
29
+ pnpm install
30
+ ```
31
+
32
+ ### Compile and Hot-Reload for Development
33
+
34
+ ```sh
35
+ pnpm dev
36
+ ```
37
+
38
+ ### Type-Check, Compile and Minify for Production
39
+
40
+ ```sh
41
+ pnpm build
42
+ ```
43
+
44
+ ### Lint with [ESLint](https://eslint.org/)
45
+
46
+ ```sh
47
+ pnpm lint
48
+ ```
package/env.d.ts ADDED
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
@@ -0,0 +1,35 @@
1
+ import { globalIgnores } from "eslint/config";
2
+ import { defineConfigWithVueTs, vueTsConfigs } from "@vue/eslint-config-typescript";
3
+ import pluginVue from "eslint-plugin-vue";
4
+ import pluginOxlint from "eslint-plugin-oxlint";
5
+ import skipFormatting from "eslint-config-prettier/flat";
6
+
7
+ // To allow more languages other than `ts` in `.vue` files, uncomment the following lines:
8
+ // import { configureVueProject } from '@vue/eslint-config-typescript'
9
+ // configureVueProject({ scriptLangs: ['ts', 'tsx'] })
10
+ // More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup
11
+
12
+ export default defineConfigWithVueTs(
13
+ {
14
+ name: "app/files-to-lint",
15
+ files: ["**/*.{vue,ts,mts,tsx}"],
16
+ rules: {
17
+ "vue/component-name-in-template-casing": [
18
+ "error",
19
+ "kebab-case",
20
+ {
21
+ registeredComponentsOnly: false,
22
+ },
23
+ ],
24
+ },
25
+ },
26
+
27
+ globalIgnores(["**/dist/**", "**/dist-ssr/**", "**/coverage/**"]),
28
+
29
+ ...pluginVue.configs["flat/recommended"],
30
+ vueTsConfigs.recommended,
31
+
32
+ ...pluginOxlint.buildFromOxlintConfigFile(".oxlintrc.json"),
33
+
34
+ skipFormatting,
35
+ );
package/index.html ADDED
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="nl-NL">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <link rel="icon" href="/favicon.ico">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Vite App</title>
8
+ </head>
9
+ <body>
10
+ <div id="app"></div>
11
+ <script type="module" src="/src/main.ts"></script>
12
+ </body>
13
+ </html>
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@m11g/library",
3
+ "version": "0.0.0",
4
+ "type": "module",
5
+ "dependencies": {
6
+ "@vee-validate/zod": "^4.15.1",
7
+ "vee-validate": "^4.15.1",
8
+ "vue": "^3.5.43",
9
+ "vue-router": "^5.3.1",
10
+ "zod": "^4.6.5"
11
+ },
12
+ "devDependencies": {
13
+ "@iconify/vue": "^5.0.3",
14
+ "@stylistic/stylelint-config": "^5.0.0",
15
+ "@tsconfig/node24": "^24.0.5",
16
+ "@types/node": "^26.6.3",
17
+ "@vitejs/plugin-vue": "^6.0.9",
18
+ "@vue/eslint-config-typescript": "^14.9.0",
19
+ "@vue/tsconfig": "^0.9.1",
20
+ "eslint": "^10.11.0",
21
+ "eslint-config-prettier": "^10.1.8",
22
+ "eslint-plugin-oxlint": "~1.85.0",
23
+ "eslint-plugin-vue": "~10.11.1",
24
+ "jiti": "^2.7.0",
25
+ "npm-run-all2": "^9.0.3",
26
+ "oxfmt": "^0.70.0",
27
+ "oxlint": "~1.85.0",
28
+ "postcss-custom-media-generator": "^1.1.0",
29
+ "postcss-html": "^2.0.0",
30
+ "postcss-import": "^17.0.0",
31
+ "postcss-mixins": "^12.1.2",
32
+ "postcss-preset-env": "^11.5.4",
33
+ "postcss-url": "^10.1.4",
34
+ "stylelint": "^17.15.0",
35
+ "stylelint-config-recess-order": "^7.8.0",
36
+ "stylelint-config-recommended-vue": "^2.0.0",
37
+ "stylelint-config-standard": "^40.0.0",
38
+ "stylelint-config-standard-vue": "^2.0.0",
39
+ "stylelint-use-logical": "^2.1.3",
40
+ "typescript": "~6.0.3",
41
+ "vite": "^8.3.1",
42
+ "vite-plugin-vue-devtools": "^8.2.1",
43
+ "vue-eslint-parser": "^10.4.1",
44
+ "vue-tsc": "^3.3.11"
45
+ },
46
+ "engines": {
47
+ "node": "^22.18.0 || >=24.12.0"
48
+ },
49
+ "scripts": {
50
+ "dev": "vite --host",
51
+ "build": "run-p type-check \"build-only {@}\" --",
52
+ "preview": "vite preview",
53
+ "build-only": "vite build",
54
+ "type-check": "vue-tsc --build",
55
+ "lint": "run-s \"lint:*\"",
56
+ "lint:oxlint": "oxlint . --fix",
57
+ "lint:eslint": "eslint . --fix --cache",
58
+ "lint:css": "stylelint \"**/*.{css,vue}\" --fix",
59
+ "format": "oxfmt src/"
60
+ }
61
+ }
@@ -0,0 +1,23 @@
1
+ module.exports = {
2
+ plugins: {
3
+ 'postcss-custom-media-generator': {
4
+ xs: 480,
5
+ sm: 640,
6
+ md: 768,
7
+ lg: 1024,
8
+ xlg: 1240,
9
+ },
10
+ 'postcss-mixins': {
11
+ mixinsDir: './app/assets/css/mixins/',
12
+ },
13
+ 'postcss-preset-env': {
14
+ browsers: 'last 2 versions',
15
+ stage: 4,
16
+ features: {
17
+ 'nesting-rules': true,
18
+ 'custom-media-queries': true,
19
+ 'media-query-ranges': true,
20
+ },
21
+ },
22
+ }
23
+ }
Binary file
package/src/App.vue ADDED
@@ -0,0 +1,28 @@
1
+ <script setup lang="ts">
2
+ import { RouterView } from "vue-router";
3
+ import CenterWrapper from "./components/CenterWrapper.vue";
4
+ </script>
5
+
6
+ <template>
7
+ <header>
8
+ <center-wrapper>
9
+ <nav>
10
+ <router-link to="/">Home</router-link>
11
+ <router-link to="/scroll-spy">Scroll spy</router-link>
12
+ <router-link to="/form">Form</router-link>
13
+ <router-link to="/carousel">Carousel</router-link>
14
+ </nav>
15
+ </center-wrapper>
16
+ </header>
17
+ <main>
18
+ <router-view />
19
+ </main>
20
+ </template>
21
+
22
+ <style lang="css" scoped>
23
+ nav {
24
+ display: flex;
25
+ gap: var(--spacing-2);
26
+ margin-block-end: var(--spacing-4);
27
+ }
28
+ </style>
@@ -0,0 +1,2 @@
1
+ @import "./variables/_base.css";
2
+ @import "./elements/_base.css";
@@ -0,0 +1,5 @@
1
+ @import "./typography.css";
2
+ @import "./scaffolding.css";
3
+ @import "./form.css";
4
+ @import "./buttons.css";
5
+ @import "./transition.css";
@@ -0,0 +1,23 @@
1
+ button {
2
+ padding: 0;
3
+ font-family: var(--font-family);
4
+ font-size: 1em;
5
+ color: currentcolor;
6
+ cursor: pointer;
7
+ background-color: transparent;
8
+ border: 0;
9
+
10
+ &:disabled {
11
+ cursor: not-allowed;
12
+ }
13
+ }
14
+
15
+ a {
16
+ color: var(--color-fg);
17
+ text-decoration-thickness: 1px;
18
+ text-underline-offset: 0.2em;
19
+
20
+ &:hover {
21
+ text-decoration-thickness: 2px;
22
+ }
23
+ }
@@ -0,0 +1,75 @@
1
+ form {
2
+ margin-block-end: var(--spacing-4);
3
+ }
4
+
5
+ fieldset {
6
+ padding: 0;
7
+ margin: 0 0 var(--spacing-2);
8
+ border: 0;
9
+ }
10
+
11
+ legend {
12
+ display: block;
13
+ padding: 0;
14
+ margin-block-end: var(--spacing-2);
15
+ font-family: var(--font-family-heading);
16
+ font-size: var(--font-size-h2);
17
+ font-weight: var(--font-weight-medium);
18
+ line-height: var(--line-height-heading);
19
+ }
20
+
21
+ label {
22
+ display: block;
23
+ margin-block-end: var(--spacing-1);
24
+ }
25
+
26
+ textarea {
27
+ line-height: var(--line-height);
28
+ resize: vertical;
29
+
30
+ @supports (field-sizing: content) {
31
+ min-block-size: 7lh;
32
+ resize: none;
33
+ field-sizing: content;
34
+ }
35
+ }
36
+
37
+ select,
38
+ input[type="date"],
39
+ input[type="email"],
40
+ input[type="number"],
41
+ input[type="password"],
42
+ input[type="search"],
43
+ input[type="tel"],
44
+ input[type="text"],
45
+ input[type="time"],
46
+ input[type="url"],
47
+ textarea {
48
+ display: block;
49
+ inline-size: 100%;
50
+ padding: var(--spacing-3) var(--spacing-2);
51
+ margin-block-end: var(--spacing-1);
52
+ font-family: var(--font-family);
53
+ font-size: var(--font-size-base);
54
+ line-height: var(--line-height-heading);
55
+ color: currentcolor;
56
+ background: transparent;
57
+ border: 2px solid var(--chakra-colors-gray-800);
58
+ border-radius: 0;
59
+ transition: border-color var(--transition);
60
+
61
+ &:focus-visible {
62
+ outline: none;
63
+ border-color: var(--color-primary-solid);
64
+ }
65
+ }
66
+
67
+ input[type="checkbox"],
68
+ input[type="radio"],
69
+ input[type="range"] {
70
+ accent-color: var(--color-primary-solid);
71
+ }
72
+
73
+ ::placeholder {
74
+ color: var(--chakra-colors-gray-400);
75
+ }
@@ -0,0 +1,62 @@
1
+ :root {
2
+ color-scheme: light dark;
3
+ interpolate-size: allow-keywords;
4
+ }
5
+
6
+ ::selection {
7
+ color: var(--color-primary-fg);
8
+ background: var(--color-primary-emphasized);
9
+ }
10
+
11
+ * {
12
+ &,
13
+ &::after,
14
+ &::before {
15
+ box-sizing: border-box;
16
+ }
17
+ }
18
+
19
+ :focus-visible {
20
+ outline: var(--color-primary-solid) solid 2px;
21
+ outline-offset: 2px;
22
+ }
23
+
24
+ html {
25
+ scroll-behavior: smooth;
26
+ text-size-adjust: 100%;
27
+ }
28
+
29
+ body {
30
+ margin: 0;
31
+ color: var(--color-fg);
32
+ background: var(--color-bg);
33
+ }
34
+
35
+ ul,
36
+ ol {
37
+ padding-inline-start: 0;
38
+ margin: 0 0 var(--spacing-4);
39
+ list-style-position: outside;
40
+ }
41
+
42
+ figure {
43
+ display: block;
44
+ margin: 0;
45
+ }
46
+
47
+ img {
48
+ max-inline-size: 100%;
49
+ block-size: auto;
50
+ }
51
+
52
+ dl {
53
+ margin: 0 0 var(--spacing-4);
54
+ }
55
+
56
+ dt {
57
+ font-weight: var(--font-weight-bold);
58
+ }
59
+
60
+ dd {
61
+ margin: 0 0 var(--spacing-2);
62
+ }
@@ -0,0 +1,4 @@
1
+ :root {
2
+ /* Prevent the default animation */
3
+ view-transition-name: none;
4
+ }
@@ -0,0 +1,80 @@
1
+ html {
2
+ font-size: var(--font-size-base);
3
+ text-size-adjust: 100%;
4
+ }
5
+
6
+ body {
7
+ scrollbar-gutter: stable;
8
+ font-family: var(--font-family);
9
+ font-weight: var(--font-weight-normal);
10
+ line-height: var(--line-height);
11
+ -webkit-font-smoothing: antialiased;
12
+ -moz-osx-font-smoothing: grayscale;
13
+ }
14
+
15
+ p {
16
+ margin: 0 0 var(--spacing-4);
17
+ text-wrap: pretty;
18
+ }
19
+
20
+ h1,
21
+ h2,
22
+ h3 {
23
+ font-family: var(--font-family-heading);
24
+ font-weight: var(--font-weight-medium);
25
+ line-height: var(--line-height-heading);
26
+ text-wrap: balance;
27
+ overflow-wrap: break-word;
28
+ }
29
+
30
+ h1 {
31
+ margin: var(--spacing-1) 0 var(--spacing-4);
32
+ font-size: var(--font-size-h1);
33
+ font-weight: var(--font-weight-bold);
34
+ }
35
+
36
+ h2 {
37
+ margin: var(--spacing-1) 0 var(--spacing-2);
38
+ font-size: var(--font-size-h2);
39
+ font-weight: var(--font-weight-bold);
40
+ }
41
+
42
+ h3 {
43
+ margin: 0 0 var(--spacing-2);
44
+ font-size: var(--font-size-h3);
45
+ font-weight: var(--font-weight-bold);
46
+ }
47
+
48
+ pre,
49
+ blockquote {
50
+ font-family: var(--font-family-heading);
51
+ font-weight: var(--font-weight-medium);
52
+ line-height: var(--line-height-heading);
53
+ }
54
+
55
+ pre {
56
+ padding: var(--spacing-4);
57
+ font-family: "Courier New", Courier, monospace;
58
+ line-height: var(--line-height-heading);
59
+ white-space: pre-wrap;
60
+ background-color: var(--color-panel-bg);
61
+ box-shadow: var(--shadow);
62
+ }
63
+
64
+ blockquote {
65
+ position: relative;
66
+ padding-inline-start: var(--spacing-6);
67
+ margin: var(--spacing-4) var(--spacing-4) var(--spacing-6);
68
+
69
+ &::before {
70
+ position: absolute;
71
+ inset-inline-start: 0;
72
+ display: inline-block;
73
+ font-size: var(--font-size-h1);
74
+ content: "“";
75
+ }
76
+ }
77
+
78
+ strong {
79
+ font-weight: var(--font-weight-bold);
80
+ }
@@ -0,0 +1,3 @@
1
+ @custom-media --sm (width >= 640px);
2
+ @custom-media --md (width >= 768px);
3
+ @custom-media --lg (width >= 1024px);
@@ -0,0 +1,5 @@
1
+ @define-mixin list-reset {
2
+ padding-inline-start: 0;
3
+ margin-block-end: 0;
4
+ list-style: none;
5
+ }
@@ -0,0 +1,7 @@
1
+ @import "./colors.css";
2
+ @import "./grid.css";
3
+ @import "./spacings.css";
4
+ @import "./typography.css";
5
+ @import "./transitions.css";
6
+ @import "./z-index.css";
7
+ @import "./chakra.css";