@m11g/library 0.0.2 → 0.0.3

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 (69) hide show
  1. package/dist/dist-C8cpIyO1.js +3039 -0
  2. package/dist/library.css +2 -0
  3. package/dist/library.js +4057 -0
  4. package/dist/library.umd.cjs +3 -0
  5. package/package.json +13 -1
  6. package/.editorconfig +0 -8
  7. package/.gitattributes +0 -1
  8. package/.oxfmtrc.json +0 -5
  9. package/.oxlintrc.json +0 -10
  10. package/.stylelintrc +0 -33
  11. package/.vscode/extensions.json +0 -8
  12. package/env.d.ts +0 -1
  13. package/eslint.config.ts +0 -35
  14. package/index.html +0 -13
  15. package/postcss.config.ts +0 -23
  16. package/src/App.vue +0 -28
  17. package/src/assets/css/base.css +0 -2
  18. package/src/assets/css/elements/_base.css +0 -5
  19. package/src/assets/css/elements/buttons.css +0 -23
  20. package/src/assets/css/elements/form.css +0 -75
  21. package/src/assets/css/elements/scaffolding.css +0 -62
  22. package/src/assets/css/elements/transition.css +0 -4
  23. package/src/assets/css/elements/typography.css +0 -80
  24. package/src/assets/css/media-queries/media-queries.css +0 -3
  25. package/src/assets/css/mixins/list-reset.css +0 -5
  26. package/src/assets/css/variables/_base.css +0 -7
  27. package/src/assets/css/variables/chakra.css +0 -160
  28. package/src/assets/css/variables/colors.css +0 -205
  29. package/src/assets/css/variables/grid.css +0 -6
  30. package/src/assets/css/variables/spacings.css +0 -10
  31. package/src/assets/css/variables/transitions.css +0 -10
  32. package/src/assets/css/variables/typography.css +0 -17
  33. package/src/components/AppBreadcrumb.vue +0 -63
  34. package/src/components/AppButton.vue +0 -105
  35. package/src/components/AppCarousel.vue +0 -145
  36. package/src/components/AppDialog.vue +0 -126
  37. package/src/components/AppNotification.vue +0 -68
  38. package/src/components/AppPagination.vue +0 -127
  39. package/src/components/AppPopover.vue +0 -57
  40. package/src/components/AppTabs.vue +0 -176
  41. package/src/components/CenterWrapper.vue +0 -50
  42. package/src/components/ClickableWrapper.vue +0 -48
  43. package/src/components/Forms/AppForm.vue +0 -61
  44. package/src/components/Forms/FormErrorMessage.vue +0 -17
  45. package/src/components/Forms/FormField.vue +0 -30
  46. package/src/components/Forms/FormFieldset.vue +0 -28
  47. package/src/components/Forms/RadioGroup.vue +0 -85
  48. package/src/components/Forms/SearchField.vue +0 -38
  49. package/src/components/Forms/SelectField.vue +0 -125
  50. package/src/components/Forms/TextField.vue +0 -41
  51. package/src/components/Forms/TextareaField.vue +0 -32
  52. package/src/components/ScrollSpy.vue +0 -111
  53. package/src/components/SummaryDetails.vue +0 -83
  54. package/src/composables/useTheme.ts +0 -20
  55. package/src/index.ts +0 -47
  56. package/src/main.ts +0 -10
  57. package/src/router/index.ts +0 -26
  58. package/src/types/Theme.ts +0 -11
  59. package/src/views/CarouselView.vue +0 -27
  60. package/src/views/FormView.vue +0 -111
  61. package/src/views/HomeView.vue +0 -100
  62. package/src/views/ScrollSpyView.vue +0 -58
  63. package/theme-dark +0 -117
  64. package/theme-light +0 -191
  65. package/tsconfig.app.json +0 -18
  66. package/tsconfig.json +0 -11
  67. package/tsconfig.node.json +0 -28
  68. package/vite.config.ts +0 -26
  69. /package/{public → dist}/favicon.ico +0 -0
@@ -1,17 +0,0 @@
1
- :root {
2
- --font-size-base: clamp(16px, 2.75vw, 18px);
3
- --scale-base: 1rem;
4
- --scale-ratio: 1.1;
5
- --font-size-h1: calc(var(--scale-base) * pow(var(--scale-ratio), 4));
6
- --font-size-h2: calc(var(--scale-base) * pow(var(--scale-ratio), 3));
7
- --font-size-h3: calc(var(--scale-base) * pow(var(--scale-ratio), 2));
8
- --font-size-h4: calc(var(--scale-base) * pow(var(--scale-ratio), 1));
9
- --font-size-sm: calc(var(--scale-base) * pow(var(--scale-ratio), -1));
10
- --line-height: 1.5;
11
- --line-height-heading: 1.1;
12
- --font-family: "Domine", arial, helvetica, sans-serif;
13
- --font-family-heading: "Sora", var(--font-family);
14
- --font-weight-normal: 400;
15
- --font-weight-medium: 500;
16
- --font-weight-bold: 700;
17
- }
@@ -1,63 +0,0 @@
1
- <script lang="ts" setup>
2
- import { RouterLink, type RouteLocationRaw } from "vue-router";
3
-
4
- defineProps<{
5
- pages: {
6
- title: string;
7
- to: RouteLocationRaw;
8
- }[];
9
- }>();
10
- </script>
11
-
12
- <template>
13
- <nav v-if="pages.length" aria-label="Breadcrumb" class="breadcrumb">
14
- <ol>
15
- <li v-for="(page, index) in pages" :key="page.title">
16
- <router-link :aria-current="index === pages.length - 1 ? 'page' : undefined" :to="page.to">
17
- {{ page.title }}
18
- </router-link>
19
- </li>
20
- </ol>
21
- </nav>
22
- </template>
23
-
24
- <style lang="css" scoped>
25
- @scope (.breadcrumb) {
26
- :scope {
27
- margin-block-end: var(--spacing-4);
28
- }
29
-
30
- ol {
31
- display: flex;
32
- gap: var(--spacing-2);
33
- padding: 0;
34
- margin: 0;
35
- list-style: none outside;
36
- }
37
-
38
- li {
39
- display: flex;
40
- gap: var(--spacing-2);
41
- align-items: center;
42
-
43
- &:not(:last-child)::after {
44
- content: "/";
45
- }
46
- }
47
-
48
- a {
49
- &[aria-current="page"] {
50
- color: var(--color-fg);
51
-
52
- &:not(:hover) {
53
- text-decoration: none;
54
- }
55
- }
56
- }
57
-
58
- svg {
59
- inline-size: 1.25em;
60
- translate: 0 -1px;
61
- }
62
- }
63
- </style>
@@ -1,105 +0,0 @@
1
- <script lang="ts" setup>
2
- import useTheme from "@/composables/useTheme";
3
- import type { Theme } from "@/types/Theme";
4
- import { computed, resolveComponent } from "vue";
5
- import type { RouteLocationRaw } from "vue-router";
6
-
7
- const props = withDefaults(
8
- defineProps<{
9
- to?: RouteLocationRaw;
10
- type?: "submit" | "button";
11
- variant?: "primary" | "ghost" | "secondary";
12
- theme?: Theme
13
- title: string;
14
- disabled?: boolean;
15
- }>(),
16
- {
17
- theme: undefined,
18
- to: undefined,
19
- variant: "primary",
20
- type: "button",
21
- disabled: false,
22
- },
23
- );
24
-
25
- const { colors } = useTheme(props.theme);
26
-
27
- const component = computed(() => {
28
- if (props.to) {
29
- return resolveComponent("RouterLink");
30
- } else {
31
- return "button";
32
- }
33
- });
34
-
35
- </script>
36
-
37
- <template>
38
- <component
39
- :is="component"
40
- :to
41
- :class="variant"
42
- :type="component === 'button' ? type : undefined"
43
- :disabled
44
- >
45
- {{ title }}
46
- </component>
47
- </template>
48
-
49
- <style lang="css" scoped>
50
- a,
51
- button {
52
- --btn-border-radius: 0.5em;
53
-
54
- &.primary {
55
- --btn-background-color: v-bind(colors.solid);
56
- --btn-background-color-hover: v-bind(colors.emphasized);
57
- --btn-text-color: v-bind(colors.contrast);
58
- --focus-ring-color: v-bind(colors.focusRing);
59
- }
60
-
61
- &.ghost {
62
- --btn-background-color: transparant;
63
- --btn-background-color-hover: v-bind(colors.subtle);
64
- --btn-text-color: v-bind(colors.solid);
65
- --btn-border-color: currentcolor;
66
- --focus-ring-color: var(--btn-text-color);
67
- }
68
-
69
- display: inline-block;
70
- inline-size: auto;
71
- padding: var(--spacing-2) var(--spacing-8);
72
- font-family: var(--font-family-heading);
73
- font-size: var(--font-size-base);
74
- font-weight: var(--font-weight-bold);
75
- line-height: var(--line-height-heading);
76
- color: var(--btn-text-color);
77
- text-align: center;
78
- text-transform: uppercase;
79
- text-decoration: none;
80
- background-color: var(--btn-background-color);
81
- border: 2px solid var(--btn-border-color);
82
- border-radius: var(--btn-border-radius);
83
- transition:
84
- background-color var(--transition),
85
- text-decoration var(--transition),
86
- opacity var(--transition);
87
-
88
- &:hover:not(:disabled) {
89
- background-color: var(--btn-background-color-hover);
90
- }
91
-
92
- &:active:not(:disabled) {
93
- padding-block: calc(var(--spacing-2) + 1px) calc(var(--spacing-2) - 1px);
94
- }
95
-
96
- &:focus-visible {
97
- outline: var(--focus-ring-color) solid 2px;
98
- outline-offset: 2px;
99
- }
100
- }
101
-
102
- button:disabled {
103
- opacity: 0.5;
104
- }
105
- </style>
@@ -1,145 +0,0 @@
1
- <script lang="ts" setup>
2
- import useTheme from "@/composables/useTheme";
3
- import { computed } from "vue";
4
-
5
- const props = defineProps<{
6
- items: string[];
7
- }>();
8
-
9
- const total = computed(() => {
10
- return props.items.length;
11
- });
12
-
13
- const { colors } = useTheme()
14
- </script>
15
-
16
- <template>
17
- <div class="wrapper">
18
- <ul>
19
- <li v-for="item in items" :key="item">
20
- <slot :name="item" />
21
- </li>
22
- </ul>
23
- </div>
24
- </template>
25
-
26
- <style lang="css" scoped>
27
- .wrapper {
28
- position: relative;
29
-
30
- @supports (scroll-marker-group: after) {
31
- margin-block-end: var(--spacing-12);
32
- }
33
- }
34
-
35
- ul {
36
- display: grid;
37
- grid-template-columns: repeat(v-bind(total), 100%);
38
- gap: var(--spacing-2);
39
- padding-inline-start: 0;
40
- margin-block-end: var(--spacing-4);
41
- list-style: none;
42
- scroll-snap-type: x mandatory;
43
- scrollbar-color: var(--chakra-colors-gray-400) transparent;
44
- scrollbar-width: thin;
45
-
46
- @supports (scroll-marker-group: after) {
47
- margin-block-end: var(--spacing-2);
48
- }
49
-
50
- &::scroll-button(*) {
51
- position: absolute;
52
- inset-block-start: 50%;
53
- display: none;
54
- inline-size: 1.5em;
55
- aspect-ratio: 0.571;
56
- margin-block-start: calc(var(--spacing-8) * -1);
57
- cursor: pointer;
58
- content: "";
59
- background-color: var(--chakra-colors-gray-900);
60
- border: 1px solid var(--chakra-colors-gray-300);
61
- opacity: 0.7;
62
- clip-path:
63
- shape(
64
- from 96.34% 44.96%,
65
- curve by 0% 10.11% with 4.88% 2.79%/4.88% 7.32%,
66
- line by -74.99% 42.84%,
67
- curve by -17.69% 0% with -4.88% 2.79%/-12.81% 2.79%,
68
- smooth by 0% -10.11% with -4.88% -7.32%,
69
- line to 69.82% 50%,
70
- line to 3.7% 12.2%,
71
- curve by 0% -10.11% with -4.88% -2.79%/-4.88% -7.32%,
72
- smooth by 17.69% 0% with 12.81% -2.79%,
73
- line by 74.99% 42.84%,
74
- close
75
- );
76
- transition: opacity var(--transition);
77
- }
78
-
79
- &::scroll-button(*):hover,
80
- &::scroll-button(*):focus {
81
- opacity: 1;
82
- }
83
-
84
- &::scroll-button(*):active {
85
- translate: 0 1px;
86
- }
87
-
88
- &::scroll-button(*):disabled {
89
- opacity: 0.2;
90
- }
91
-
92
- &::scroll-button(left) {
93
- inset-inline-start: 1em;
94
- rotate: 180deg;
95
- }
96
-
97
- &::scroll-button(right) {
98
- inset-inline-end: 1em;
99
- }
100
-
101
- &:has(> li:nth-child(2)) {
102
- overflow-x: scroll;
103
- scroll-behavior: smooth;
104
- scroll-marker-group: after;
105
-
106
- &::scroll-button(left),
107
- &::scroll-button(right) {
108
- display: block;
109
- }
110
- }
111
-
112
- &::scroll-marker-group {
113
- display: flex;
114
- gap: var(--spacing-2);
115
- place-content: center;
116
- }
117
- }
118
-
119
- li {
120
- scroll-snap-align: center;
121
-
122
- &::scroll-marker {
123
- display: block;
124
- inline-size: 0.5em;
125
- block-size: 0.5em;
126
- aspect-ratio: 1;
127
- content: "";
128
- background-color: var(--color-white);
129
- border: 3px solid var(--color-white);
130
- border-radius: 50%;
131
- transition:
132
- border var(--transition),
133
- background var(--transition);
134
- }
135
-
136
- &::scroll-marker:target-current,
137
- &::scroll-marker:hover {
138
- background-color: v-bind(colors.solid);
139
- }
140
-
141
- &::scroll-marker:target-current {
142
- border-color: v-bind(colors.solid);
143
- }
144
- }
145
- </style>
@@ -1,126 +0,0 @@
1
- <script lang="ts" setup>
2
- import { Icon } from "@iconify/vue";
3
-
4
- defineProps<{
5
- id: string;
6
- title: string;
7
- }>();
8
- </script>
9
-
10
- <template>
11
- <dialog :id="id" closedby="any">
12
- <header>
13
- <h2>{{ title }}</h2>
14
- <button :commandfor="id" command="close" class="btn-close">
15
- <icon icon="solar:close-circle-bold" />
16
- </button>
17
- </header>
18
- <div class="content">
19
- <slot />
20
- </div>
21
- </dialog>
22
- </template>
23
-
24
- <style lang="css">
25
- dialog {
26
- inline-size: calc(100vw - (var(--spacing-4) * 2));
27
- max-inline-size: var(--container-size-md);
28
- padding: 0;
29
- overscroll-behavior: contain;
30
- color: var(--color-fg);
31
- background-color: var(--color-bg-panel);
32
- border: 0;
33
- border-radius: 0.25em;
34
- box-shadow: var(--shadow);
35
- transition:
36
- display var(--transition) allow-discrete,
37
- overlay var(--transition) allow-discrete;
38
- animation: dialog-hide var(--transition);
39
-
40
- &[open] {
41
- animation: dialog-show var(--transition);
42
-
43
- &::backdrop {
44
- animation: backdrop-show var(--transition);
45
- }
46
- }
47
- }
48
-
49
- ::backdrop {
50
- overflow: hidden;
51
- overscroll-behavior: contain;
52
- background-color: rgb(0 0 0 / 50%);
53
- backdrop-filter: blur(0.25em);
54
- animation: backdrop-hide var(--transition);
55
- }
56
-
57
- @scope (dialog) {
58
- svg {
59
- font-size: 2em;
60
- cursor: pointer;
61
- }
62
-
63
- header {
64
- position: sticky;
65
- inset-block-start: 0;
66
- display: flex;
67
- gap: var(--spacing-2);
68
- align-items: start;
69
- justify-content: space-between;
70
- padding: var(--spacing-2) var(--spacing-4) 0;
71
- background-color: var(--color-panel-bg);
72
- }
73
-
74
- .content {
75
- padding: var(--spacing-4);
76
- }
77
- }
78
-
79
- @keyframes dialog-hide {
80
- from {
81
- opacity: 1;
82
- translate: 0 0;
83
- }
84
-
85
- to {
86
- opacity: 0;
87
- translate: 0 -1em;
88
- }
89
- }
90
-
91
- @keyframes dialog-show {
92
- from {
93
- opacity: 0;
94
- translate: 0 -1em;
95
- }
96
-
97
- to {
98
- opacity: 1;
99
- translate: 0 0;
100
- }
101
- }
102
-
103
- @keyframes backdrop-show {
104
- from {
105
- opacity: 0;
106
- backdrop-filter: blur(0);
107
- }
108
-
109
- to {
110
- opacity: 1;
111
- backdrop-filter: blur(0.25em);
112
- }
113
- }
114
-
115
- @keyframes backdrop-hide {
116
- from {
117
- opacity: 1;
118
- backdrop-filter: blur(0.25em);
119
- }
120
-
121
- to {
122
- opacity: 0;
123
- backdrop-filter: blur(0);
124
- }
125
- }
126
- </style>
@@ -1,68 +0,0 @@
1
- <script lang="ts" setup>
2
- import { Icon } from "@iconify/vue";
3
- import { computed, ref } from "vue";
4
-
5
- const props = defineProps<{
6
- title?: string;
7
- variant: "error" | "info" | "success" | "warning";
8
- }>();
9
-
10
- const variantIcon = computed(() => {
11
- switch (props.variant) {
12
- case "error":
13
- return "solar:danger-triangle-bold";
14
- case "info":
15
- return "solar:info-circle-bold";
16
- case "warning":
17
- return "solar:danger-circle-bold";
18
- case "success":
19
- default:
20
- return "solar:check-circle-bold";
21
- }
22
- });
23
-
24
- const colors = ref({
25
- bg: `var(--color-bg-${props.variant})`,
26
- fg: `var(--color-fg-${props.variant})`,
27
- border: `var(--color-border-${props.variant})`,
28
- })
29
-
30
- </script>
31
-
32
- <template>
33
- <div class="notification" :class="variant">
34
- <icon :icon="variantIcon" />
35
- <div>
36
- <div v-if="title" class="title">
37
- {{ title }}
38
- </div>
39
- <slot />
40
- </div>
41
- </div>
42
- </template>
43
-
44
- <style lang="css" scoped>
45
- .notification {
46
- display: flex;
47
- gap: var(--spacing-1);
48
- padding: var(--spacing-2);
49
- margin-block-end: var(--spacing-4);
50
- color: v-bind(colors.fg);
51
- background-color: v-bind(colors.bg);
52
- border: 1px solid v-bind(colors.border);
53
- border-inline-start-width: 0.25em;
54
- }
55
-
56
- .title {
57
- font-weight: var(--font-weight-bold);
58
- }
59
-
60
- svg {
61
- --size: 1.25em;
62
-
63
- flex: 0 0 auto;
64
- inline-size: var(--size);
65
- block-size: var(--size);
66
- margin-block-start: 0.1em;
67
- }
68
- </style>
@@ -1,127 +0,0 @@
1
- <script lang="ts" setup>
2
- import { computed } from "vue";
3
- import { useRoute } from "vue-router";
4
-
5
- defineProps<{
6
- totalPages: number;
7
- }>();
8
-
9
- const route = useRoute();
10
-
11
- const currentPage = computed(() => (route.query.page ? Number(route.query.page) : 1));
12
- </script>
13
-
14
- <template>
15
- <div v-if="totalPages > 1" class="paging">
16
- <router-link
17
- v-if="currentPage > 1"
18
- :to="{
19
- query: {
20
- ...route.query,
21
- page: currentPage - 1,
22
- },
23
- }"
24
- >
25
- Vorige pagina
26
- </router-link>
27
- <span v-else>Vorige pagina</span>
28
- <ul>
29
- <li v-for="page in totalPages" :key="page" :class="{ current: page === currentPage }">
30
- <router-link
31
- :to="{
32
- query: {
33
- ...route.query,
34
- page,
35
- },
36
- }"
37
- >
38
- {{ page }}
39
- </router-link>
40
- </li>
41
- </ul>
42
- <router-link
43
- v-if="currentPage < totalPages"
44
- :to="{
45
- query: {
46
- ...route.query,
47
- page: currentPage + 1,
48
- },
49
- }"
50
- >
51
- Volgende pagina
52
- </router-link>
53
- <span v-else>Volgende pagina</span>
54
- </div>
55
- </template>
56
-
57
- <style lang="css" scoped>
58
- .paging {
59
- display: flex;
60
- flex-wrap: wrap;
61
- gap: var(--spacing-2);
62
- align-items: start;
63
- justify-content: space-between;
64
- font-family: var(--font-family-heading);
65
- font-weight: var(--font-weight-medium);
66
- line-height: var(--line-height-heading);
67
- }
68
-
69
- ul {
70
- @mixin list-reset;
71
-
72
- display: flex;
73
- gap: var(--spacing-2);
74
- align-items: center;
75
- justify-content: center;
76
- }
77
-
78
- li {
79
- display: none;
80
-
81
- &:first-child,
82
- &:last-child {
83
- display: block;
84
- }
85
-
86
- &:has(+ .current),
87
- &:has(+ li + .current),
88
- &.current {
89
- &,
90
- + li,
91
- + li + li {
92
- display: block;
93
- }
94
- }
95
- }
96
-
97
- span,
98
- a {
99
- display: block;
100
- padding: var(--spacing-1) var(--spacing-3);
101
- text-decoration: none;
102
- border: 1px solid currentcolor;
103
-
104
- &:hover {
105
- color: var(--color-black);
106
- background-color: var(--color-white);
107
- }
108
- }
109
-
110
- span {
111
- display: none;
112
- visibility: hidden;
113
-
114
- @media (--md) {
115
- display: block;
116
- }
117
- }
118
-
119
- a {
120
- display: block;
121
- }
122
-
123
- .current a {
124
- color: var(--color-black);
125
- background-color: var(--color-white);
126
- }
127
- </style>
@@ -1,57 +0,0 @@
1
- <script lang="ts" setup>
2
- import { computed, useId } from "vue";
3
-
4
- const id = useId();
5
-
6
- const anchor = computed(() => {
7
- return `--${id}`;
8
- });
9
-
10
- defineOptions({
11
- inheritAttrs: false,
12
- });
13
- </script>
14
-
15
- <template>
16
- <button :interestfor="id" :popovertarget="id" v-bind="$attrs"><slot name="anchor" /></button>
17
-
18
- <div :id popover="hint"><slot /></div>
19
- </template>
20
-
21
- <style lang="css" scoped>
22
- button {
23
- anchor-name: v-bind(anchor);
24
- interest-delay: 0s var(--transition-duration);
25
- }
26
-
27
- [popover] {
28
- position: absolute;
29
- padding: var(--spacing-1) var(--spacing-2);
30
- margin: var(--spacing-2);
31
- position-area: top;
32
- position-anchor: v-bind(anchor);
33
- position-try-fallbacks: flip-block;
34
- color: rgb(250 250 250);
35
- zoom: 0.9;
36
- background-color: rgb(17 17 17);
37
- border: 1px solid rgb(39 39 42);
38
- opacity: 0;
39
- transition:
40
- opacity var(--transition),
41
- zoom var(--transition),
42
- overlay allow-discrete,
43
- display allow-discrete;
44
-
45
- &:popover-open {
46
- zoom: 1;
47
- opacity: 1;
48
- }
49
- }
50
-
51
- @starting-style {
52
- [popover]:popover-open {
53
- zoom: 0.9;
54
- opacity: 0;
55
- }
56
- }
57
- </style>