@flightlesslabs/dodo-ui-date 0.2.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 (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/components/Calendar/Calendar.scss +147 -0
  4. package/dist/components/Calendar/Calendar.stories.svelte +136 -0
  5. package/dist/components/Calendar/Calendar.stories.svelte.d.ts +22 -0
  6. package/dist/components/Calendar/Calendar.svelte +59 -0
  7. package/dist/components/Calendar/Calendar.svelte.d.ts +6 -0
  8. package/dist/components/Calendar/CalendarGrid/CalendarGrid.svelte +16 -0
  9. package/dist/components/Calendar/CalendarGrid/CalendarGrid.svelte.d.ts +4 -0
  10. package/dist/components/Calendar/CalendarGrid/TableBody.svelte +25 -0
  11. package/dist/components/Calendar/CalendarGrid/TableBody.svelte.d.ts +8 -0
  12. package/dist/components/Calendar/CalendarGrid/TableHead.svelte +19 -0
  13. package/dist/components/Calendar/CalendarGrid/TableHead.svelte.d.ts +6 -0
  14. package/dist/components/Calendar/Header.svelte +25 -0
  15. package/dist/components/Calendar/Header.svelte.d.ts +3 -0
  16. package/dist/components/DatePicker/DatePicker.scss +55 -0
  17. package/dist/components/DatePicker/DatePicker.stories.svelte +136 -0
  18. package/dist/components/DatePicker/DatePicker.stories.svelte.d.ts +22 -0
  19. package/dist/components/DatePicker/DatePicker.svelte +134 -0
  20. package/dist/components/DatePicker/DatePicker.svelte.d.ts +63 -0
  21. package/dist/components/DatePicker/DatePickerInput/DatePickerInput.svelte +95 -0
  22. package/dist/components/DatePicker/DatePickerInput/DatePickerInput.svelte.d.ts +22 -0
  23. package/dist/components/DatePicker/DatePickerInput/Segments.svelte +17 -0
  24. package/dist/components/DatePicker/DatePickerInput/Segments.svelte.d.ts +8 -0
  25. package/dist/components/DatePicker/DatePickerInput/utils.d.ts +10 -0
  26. package/dist/components/DatePicker/DatePickerInput/utils.js +26 -0
  27. package/dist/components/DatePicker/DatePickerPopup/CalendarGrid.svelte +35 -0
  28. package/dist/components/DatePicker/DatePickerPopup/CalendarGrid.svelte.d.ts +4 -0
  29. package/dist/components/DatePicker/DatePickerPopup/DatePickerPopup.svelte +50 -0
  30. package/dist/components/DatePicker/DatePickerPopup/DatePickerPopup.svelte.d.ts +6 -0
  31. package/dist/components/DatePicker/DatePickerPopup/Header.svelte +25 -0
  32. package/dist/components/DatePicker/DatePickerPopup/Header.svelte.d.ts +3 -0
  33. package/dist/index.d.ts +10 -0
  34. package/dist/index.js +10 -0
  35. package/dist/storybook-types.d.ts +129 -0
  36. package/dist/storybook-types.js +1 -0
  37. package/dist/styles/global/_breakpoints.scss +38 -0
  38. package/dist/styles/main.css +155 -0
  39. package/dist/styles/main.css.map +1 -0
  40. package/dist/styles/main.scss +2 -0
  41. package/dist/test/setup.d.ts +1 -0
  42. package/dist/test/setup.js +12 -0
  43. package/package.json +114 -0
  44. package/src/lib/components/Calendar/Calendar.scss +147 -0
  45. package/src/lib/components/Calendar/Calendar.stories.svelte +136 -0
  46. package/src/lib/components/Calendar/Calendar.svelte +59 -0
  47. package/src/lib/components/Calendar/CalendarGrid/CalendarGrid.svelte +16 -0
  48. package/src/lib/components/Calendar/CalendarGrid/TableBody.svelte +25 -0
  49. package/src/lib/components/Calendar/CalendarGrid/TableHead.svelte +19 -0
  50. package/src/lib/components/Calendar/Header.svelte +25 -0
  51. package/src/lib/components/DatePicker/DatePicker.scss +55 -0
  52. package/src/lib/components/DatePicker/DatePicker.stories.svelte +136 -0
  53. package/src/lib/components/DatePicker/DatePicker.svelte +134 -0
  54. package/src/lib/components/DatePicker/DatePickerInput/DatePickerInput.svelte +95 -0
  55. package/src/lib/components/DatePicker/DatePickerInput/Segments.svelte +17 -0
  56. package/src/lib/components/DatePicker/DatePickerInput/utils.ts +55 -0
  57. package/src/lib/components/DatePicker/DatePickerPopup/CalendarGrid.svelte +35 -0
  58. package/src/lib/components/DatePicker/DatePickerPopup/DatePickerPopup.svelte +50 -0
  59. package/src/lib/components/DatePicker/DatePickerPopup/Header.svelte +25 -0
  60. package/src/lib/index.ts +16 -0
  61. package/src/lib/storybook-types.ts +182 -0
  62. package/src/lib/styles/global/_breakpoints.scss +38 -0
  63. package/src/lib/styles/main.scss +2 -0
  64. package/src/lib/test/setup.ts +13 -0
@@ -0,0 +1,10 @@
1
+ /**
2
+ * DatePicker component and related prop types.
3
+ */
4
+ export { default as DatePicker, type DatePickerProps, } from './components/DatePicker/DatePicker.svelte';
5
+ export { type DatePickerInputProps } from './components/DatePicker/DatePickerInput/DatePickerInput.svelte';
6
+ export { type DatePickerPopupProps } from './components/DatePicker/DatePickerPopup/DatePickerPopup.svelte';
7
+ /**
8
+ * Calendar component and related prop types.
9
+ */
10
+ export { default as Calendar, type CalendarProps } from './components/Calendar/Calendar.svelte';
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * DatePicker component and related prop types.
3
+ */
4
+ export { default as DatePicker, } from './components/DatePicker/DatePicker.svelte';
5
+ export {} from './components/DatePicker/DatePickerInput/DatePickerInput.svelte';
6
+ export {} from './components/DatePicker/DatePickerPopup/DatePickerPopup.svelte';
7
+ /**
8
+ * Calendar component and related prop types.
9
+ */
10
+ export { default as Calendar } from './components/Calendar/Calendar.svelte';
@@ -0,0 +1,129 @@
1
+ type ControlType = 'object' | 'boolean' | 'check' | 'inline-check' | 'radio' | 'inline-radio' | 'select' | 'multi-select' | 'number' | 'range' | 'file' | 'color' | 'date' | 'text';
2
+ interface ControlBase {
3
+ [key: string]: any;
4
+ /** @see https://storybook.js.org/docs/api/arg-types#controltype */
5
+ type?: ControlType;
6
+ disable?: boolean;
7
+ }
8
+ type Control = ControlType | false | (ControlBase & (ControlBase | {
9
+ type: 'color';
10
+ /** @see https://storybook.js.org/docs/api/arg-types#controlpresetcolors */
11
+ presetColors?: string[];
12
+ } | {
13
+ type: 'file';
14
+ /** @see https://storybook.js.org/docs/api/arg-types#controlaccept */
15
+ accept?: string;
16
+ } | {
17
+ type: 'inline-check' | 'radio' | 'inline-radio' | 'select' | 'multi-select';
18
+ /** @see https://storybook.js.org/docs/api/arg-types#controllabels */
19
+ labels?: {
20
+ [options: string]: string;
21
+ };
22
+ } | {
23
+ type: 'number' | 'range';
24
+ /** @see https://storybook.js.org/docs/api/arg-types#controlmax */
25
+ max?: number;
26
+ /** @see https://storybook.js.org/docs/api/arg-types#controlmin */
27
+ min?: number;
28
+ /** @see https://storybook.js.org/docs/api/arg-types#controlstep */
29
+ step?: number;
30
+ }));
31
+ type ConditionalTest = {
32
+ truthy?: boolean;
33
+ } | {
34
+ exists: boolean;
35
+ } | {
36
+ eq: any;
37
+ } | {
38
+ neq: any;
39
+ };
40
+ type ConditionalValue = {
41
+ arg: string;
42
+ } | {
43
+ global: string;
44
+ };
45
+ type Conditional = ConditionalValue & ConditionalTest;
46
+ interface Args {
47
+ [name: string]: any;
48
+ }
49
+ interface SBBaseType {
50
+ required?: boolean;
51
+ raw?: string;
52
+ }
53
+ type SBScalarType = SBBaseType & {
54
+ name: 'boolean' | 'string' | 'number' | 'function' | 'symbol';
55
+ };
56
+ type SBArrayType = SBBaseType & {
57
+ name: 'array';
58
+ value: SBType;
59
+ };
60
+ type SBObjectType = SBBaseType & {
61
+ name: 'object';
62
+ value: Record<string, SBType>;
63
+ };
64
+ type SBEnumType = SBBaseType & {
65
+ name: 'enum';
66
+ value: (string | number)[];
67
+ };
68
+ type SBIntersectionType = SBBaseType & {
69
+ name: 'intersection';
70
+ value: SBType[];
71
+ };
72
+ type SBUnionType = SBBaseType & {
73
+ name: 'union';
74
+ value: SBType[];
75
+ };
76
+ type SBOtherType = SBBaseType & {
77
+ name: 'other';
78
+ value: string;
79
+ };
80
+ type SBType = SBScalarType | SBEnumType | SBArrayType | SBObjectType | SBIntersectionType | SBUnionType | SBOtherType;
81
+ interface InputType {
82
+ /** @see https://storybook.js.org/docs/api/arg-types#control */
83
+ control?: Control;
84
+ /** @see https://storybook.js.org/docs/api/arg-types#description */
85
+ description?: string;
86
+ /** @see https://storybook.js.org/docs/api/arg-types#if */
87
+ if?: Conditional;
88
+ /** @see https://storybook.js.org/docs/api/arg-types#mapping */
89
+ mapping?: {
90
+ [key: string]: any;
91
+ };
92
+ /** @see https://storybook.js.org/docs/api/arg-types#name */
93
+ name?: string;
94
+ /** @see https://storybook.js.org/docs/api/arg-types#options */
95
+ options?: readonly any[];
96
+ /** @see https://storybook.js.org/docs/api/arg-types#table */
97
+ table?: {
98
+ [key: string]: unknown;
99
+ /** @see https://storybook.js.org/docs/api/arg-types#tablecategory */
100
+ category?: string;
101
+ /** @see https://storybook.js.org/docs/api/arg-types#tabledefaultvalue */
102
+ defaultValue?: {
103
+ summary?: string;
104
+ detail?: string;
105
+ };
106
+ /** @see https://storybook.js.org/docs/api/arg-types#tabledisable */
107
+ disable?: boolean;
108
+ /** @see https://storybook.js.org/docs/api/arg-types#tablesubcategory */
109
+ subcategory?: string;
110
+ /** @see https://storybook.js.org/docs/api/arg-types#tabletype */
111
+ type?: {
112
+ summary?: string;
113
+ detail?: string;
114
+ };
115
+ };
116
+ /** @see https://storybook.js.org/docs/api/arg-types#type */
117
+ type?: SBType | SBScalarType['name'];
118
+ /**
119
+ * @deprecated Use `table.defaultValue.summary` instead.
120
+ * @see https://storybook.js.org/docs/api/arg-types#defaultvalue
121
+ */
122
+ defaultValue?: any;
123
+ [key: string]: any;
124
+ }
125
+ export type ArgTypes<TArgs = Args> = {
126
+ [name in keyof TArgs]: InputType;
127
+ };
128
+ export type StoryBookArgTypes = Partial<ArgTypes<Args>>;
129
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,38 @@
1
+ @use 'sass:map';
2
+
3
+ $breakpoints-default: (
4
+ sm: 40rem,
5
+ md: 48rem,
6
+ lg: 64rem,
7
+ xl: 80rem,
8
+ xxl: 96rem,
9
+ );
10
+
11
+ $breakpoints: () !default;
12
+
13
+ $breakpoints: map.merge($breakpoints-default, $breakpoints);
14
+
15
+ @function breakpoint($key) {
16
+ @if not map.has-key($breakpoints, $key) {
17
+ @error "Invalid breakpoint: #{$key}";
18
+ }
19
+ @return map.get($breakpoints, $key);
20
+ }
21
+
22
+ @mixin up($key) {
23
+ @media (min-width: breakpoint($key)) {
24
+ @content;
25
+ }
26
+ }
27
+
28
+ @mixin down($key) {
29
+ @media (max-width: breakpoint($key)) {
30
+ @content;
31
+ }
32
+ }
33
+
34
+ @mixin between($min, $max) {
35
+ @media (min-width: breakpoint($min)) and (max-width: breakpoint($max)) {
36
+ @content;
37
+ }
38
+ }
@@ -0,0 +1,155 @@
1
+ :root {
2
+ --dodo-ui-Calendar-date-selected-bg: var(--dodo-color-primary-500);
3
+ --dodo-ui-Calendar-date-selected-hover-bg: var(--dodo-color-primary-600);
4
+ }
5
+
6
+ .dodo-theme--dark {
7
+ --dodo-ui-Calendar-date-selected-bg: var(--dodo-color-primary-300);
8
+ --dodo-ui-Calendar-date-selected-hover-bg: var(--dodo-color-primary-400);
9
+ }
10
+
11
+ .dodo-ui-Calendar {
12
+ font-size: 1rem;
13
+ color: var(--dodo-color-neutral-900);
14
+ display: inline-flex;
15
+ flex-direction: column;
16
+ }
17
+ @media (min-width: 40rem) {
18
+ .dodo-ui-Calendar {
19
+ padding: var(--dodo-ui-space);
20
+ }
21
+ }
22
+ .dodo-ui-Calendar [data-calendar-header] {
23
+ display: flex;
24
+ justify-content: space-between;
25
+ align-items: center;
26
+ padding: 0 calc(var(--dodo-ui-space) / 2);
27
+ margin-bottom: calc(var(--dodo-ui-space) * 2);
28
+ margin-top: var(--dodo-ui-space);
29
+ }
30
+ .dodo-ui-Calendar [data-calendar-heading] {
31
+ margin: 0 calc(var(--dodo-ui-space) / 2);
32
+ font-weight: 500;
33
+ }
34
+ .dodo-ui-Calendar button[data-calendar-next-button],
35
+ .dodo-ui-Calendar button[data-calendar-prev-button] {
36
+ font-size: 1.4em;
37
+ }
38
+ .dodo-ui-Calendar [data-calendar-grid] {
39
+ width: 100%;
40
+ user-select: none;
41
+ }
42
+ .dodo-ui-Calendar [data-calendar-grid-row] {
43
+ display: flex;
44
+ width: 100%;
45
+ justify-content: space-around;
46
+ }
47
+ .dodo-ui-Calendar [data-calendar-grid-head] {
48
+ margin-bottom: var(--dodo-ui-space);
49
+ display: block;
50
+ }
51
+ .dodo-ui-Calendar [data-calendar-head-cell] {
52
+ display: inline-flex;
53
+ width: var(--dodo-ui-element-height-normal);
54
+ justify-content: center;
55
+ font-weight: 600;
56
+ color: var(--dodo-color-neutral-600);
57
+ font-size: 0.9rem;
58
+ }
59
+ .dodo-ui-Calendar [data-calendar-cell] {
60
+ display: inline-flex;
61
+ }
62
+ .dodo-ui-Calendar [data-calendar-day] {
63
+ transition: background-color 70ms, color 70ms, border-color 70ms;
64
+ display: inline-flex;
65
+ justify-content: center;
66
+ align-items: center;
67
+ width: var(--dodo-ui-element-height-normal);
68
+ height: var(--dodo-ui-element-height-normal);
69
+ border-radius: var(--dodo-ui-element-roundness-1);
70
+ border: var(--dodo-ui-element-border-width) solid transparent;
71
+ position: relative;
72
+ }
73
+ .dodo-ui-Calendar [data-calendar-day]:hover {
74
+ background-color: var(--dodo-color-neutral-100);
75
+ border-color: var(--dodo-color-neutral-400);
76
+ }
77
+ .dodo-ui-Calendar [data-calendar-day][data-selected] {
78
+ background-color: var(--dodo-ui-Calendar-date-selected-bg);
79
+ color: var(--dodo-color-constant-white);
80
+ }
81
+ .dodo-ui-Calendar [data-calendar-day][data-selected]:hover {
82
+ background-color: var(--dodo-ui-Calendar-date-selected-hover-bg);
83
+ }
84
+ .dodo-ui-Calendar [data-calendar-day][data-selected][data-today] {
85
+ background-color: var(--dodo-ui-Calendar-date-selected-bg);
86
+ color: var(--dodo-color-constant-white);
87
+ }
88
+ .dodo-ui-Calendar [data-calendar-day][data-selected][data-today]:hover {
89
+ background-color: var(--dodo-ui-Calendar-date-selected-hover-bg);
90
+ }
91
+ .dodo-ui-Calendar [data-calendar-day][data-selected][data-today]::after {
92
+ background-color: var(--dodo-color-constant-white);
93
+ }
94
+ .dodo-ui-Calendar [data-calendar-day][data-selected][data-today]::after:hover {
95
+ background-color: var(--dodo-color-constant-white);
96
+ }
97
+ .dodo-ui-Calendar [data-calendar-day][data-today] {
98
+ background-color: var(--dodo-color-primary-50);
99
+ }
100
+ .dodo-ui-Calendar [data-calendar-day][data-today]::after {
101
+ content: "";
102
+ width: var(--dodo-ui-track-element-height-small);
103
+ height: var(--dodo-ui-track-element-height-small);
104
+ border-radius: 50%;
105
+ display: inline-flex;
106
+ background-color: var(--dodo-color-primary-600);
107
+ position: absolute;
108
+ bottom: 0.2em;
109
+ }
110
+ .dodo-ui-Calendar [data-calendar-day][data-outside-month], .dodo-ui-Calendar [data-calendar-day][data-disabled] {
111
+ color: var(--dodo-color-neutral-400);
112
+ }
113
+ .dodo-ui-Calendar [data-calendar-day][data-outside-month]:hover, .dodo-ui-Calendar [data-calendar-day][data-disabled]:hover {
114
+ background-color: initial;
115
+ border-color: transparent;
116
+ }
117
+ .dodo-ui-Calendar [data-calendar-day][data-outside-month][data-today], .dodo-ui-Calendar [data-calendar-day][data-disabled][data-today] {
118
+ background-color: initial;
119
+ }
120
+
121
+ .dodo-ui-DatePicker button[data-popover-trigger] {
122
+ font-size: 1.4em;
123
+ }
124
+ .dodo-ui-DatePicker [data-date-field-input] {
125
+ display: flex;
126
+ align-items: center;
127
+ }
128
+ .dodo-ui-DatePicker [data-date-field-segment] {
129
+ height: 80%;
130
+ display: inline-flex;
131
+ align-items: center;
132
+ }
133
+ .dodo-ui-DatePicker [data-segment=literal] {
134
+ color: var(--dodo-color-neutral-500);
135
+ }
136
+ .dodo-ui-DatePicker.size--normal button[data-popover-trigger] {
137
+ margin: 0 calc(var(--dodo-ui-space) / 2.5);
138
+ }
139
+ .dodo-ui-DatePicker.size--normal [data-date-field-segment] {
140
+ padding: 0 calc(var(--dodo-ui-space) / 3);
141
+ }
142
+ .dodo-ui-DatePicker.size--small button[data-popover-trigger] {
143
+ margin: 0 calc(var(--dodo-ui-space--small) / 2.5);
144
+ }
145
+ .dodo-ui-DatePicker.size--small [data-date-field-segment] {
146
+ padding: 0 calc(var(--dodo-ui-space-small) / 3);
147
+ }
148
+ .dodo-ui-DatePicker.size--large button[data-popover-trigger] {
149
+ margin: 0 calc(var(--dodo-ui-space--large) / 2.5);
150
+ }
151
+ .dodo-ui-DatePicker.size--large [data-date-field-segment] {
152
+ padding: 0 calc(var(--dodo-ui-space-large) / 3);
153
+ }
154
+
155
+ /*# sourceMappingURL=main.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../../src/lib/components/Calendar/Calendar.scss","../../src/lib/styles/global/_breakpoints.scss","../../src/lib/components/DatePicker/DatePicker.scss"],"names":[],"mappings":"AAKA;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;ACGA;EDPF;IAOI;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE,YACE;EAGF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;AAMR;EACE;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EAEE;;AAEA;EACE;EACA;;AAGF;EACE;;;AE7IN;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAQE;EACE;;AAGF;EACE;;AAKF;EACE;;AAGF;EACE;;AAKF;EACE;;AAGF;EACE","file":"main.css"}
@@ -0,0 +1,2 @@
1
+ @use '../components/Calendar/Calendar.scss';
2
+ @use '../components/DatePicker/DatePicker.scss';
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom/vitest';
@@ -0,0 +1,12 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ import { vi } from 'vitest';
3
+ // mock matchMedia globally
4
+ Object.defineProperty(window, 'matchMedia', {
5
+ writable: true,
6
+ value: vi.fn().mockImplementation((query) => ({
7
+ matches: false,
8
+ media: query,
9
+ addEventListener: vi.fn(),
10
+ removeEventListener: vi.fn(),
11
+ })),
12
+ });
package/package.json ADDED
@@ -0,0 +1,114 @@
1
+ {
2
+ "name": "@flightlesslabs/dodo-ui-date",
3
+ "version": "0.2.0",
4
+ "scripts": {
5
+ "scss:main": "sh -c \"mkdir -p dist/styles && sass src/lib/styles/main.scss dist/styles/main.css\"",
6
+ "scss": "pnpm scss:main",
7
+ "build": "vite build && pnpm run prepack",
8
+ "preview": "vite preview",
9
+ "prepare": "svelte-kit sync || echo ''",
10
+ "prepack": "svelte-kit sync && svelte-package && pnpm run scss && publint",
11
+ "svelte-check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
12
+ "format": "prettier --write .",
13
+ "lint": "prettier --check . && eslint .",
14
+ "dev": "storybook dev -p 6006",
15
+ "build-storybook": "storybook build && touch ./storybook-static/.nojekyll",
16
+ "check": "pnpm run svelte-check && eslint . && pnpm run lint",
17
+ "check:fix": "pnpm run svelte-check && eslint . && pnpm run format",
18
+ "create:component": "node --experimental-strip-types scripts/create-component/create-component.ts",
19
+ "test": "vitest run"
20
+ },
21
+ "homepage": "https://flightlesslabs.github.io/dodo-ui",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/flightlesslabs/dodo-ui-date.git"
25
+ },
26
+ "license": "MIT",
27
+ "files": [
28
+ "dist",
29
+ "!dist/**/*.test.*",
30
+ "!dist/**/*.spec.*",
31
+ "src/lib",
32
+ "!src/lib/**/*.test.*",
33
+ "!src/lib/**/*.spec.*",
34
+ "!src/lib/stories/**/*.stories.*",
35
+ "!src/lib/stories/**/*.mdx",
36
+ "!src/lib/stories/assets/**/*.png",
37
+ "!src/lib/stories/assets/**/*.jpg",
38
+ "!src/lib/stories/philosophy"
39
+ ],
40
+ "sideEffects": [
41
+ "**/*.css"
42
+ ],
43
+ "svelte": "./dist/index.js",
44
+ "types": "./dist/index.d.ts",
45
+ "type": "module",
46
+ "exports": {
47
+ ".": {
48
+ "types": "./dist/index.d.ts",
49
+ "svelte": "./dist/index.js"
50
+ },
51
+ "./styles/main.css": "./dist/styles/main.css",
52
+ "./styles/*": {
53
+ "sass": "./dist/styles/*",
54
+ "default": "./dist/styles/*"
55
+ }
56
+ },
57
+ "peerDependencies": {
58
+ "@flightlesslabs/dodo-ui": "^0.22.2",
59
+ "@internationalized/date": "^3.0.0",
60
+ "bits-ui": "^2.0.0",
61
+ "svelte": "^5.0.0"
62
+ },
63
+ "devDependencies": {
64
+ "@chromatic-com/storybook": "^5.1.1",
65
+ "@eslint/compat": "^2.0.4",
66
+ "@eslint/js": "^10.0.1",
67
+ "@flightlesslabs/dodo-ui": "^0.22.2",
68
+ "@iconify/svelte": "^5.2.1",
69
+ "@internationalized/date": "^3.12.0",
70
+ "@storybook/addon-a11y": "^10.3.5",
71
+ "@storybook/addon-docs": "^10.3.5",
72
+ "@storybook/addon-svelte-csf": "^5.1.2",
73
+ "@storybook/addon-vitest": "^10.3.5",
74
+ "@storybook/sveltekit": "^10.3.5",
75
+ "@sveltejs/adapter-auto": "^7.0.1",
76
+ "@sveltejs/adapter-static": "^3.0.10",
77
+ "@sveltejs/kit": "^2.57.0",
78
+ "@sveltejs/package": "^2.5.7",
79
+ "@sveltejs/vite-plugin-svelte": "^7.0.0",
80
+ "@testing-library/jest-dom": "^6.9.1",
81
+ "@testing-library/svelte": "^5.3.1",
82
+ "@testing-library/user-event": "^14.6.1",
83
+ "@types/file-saver": "^2.0.7",
84
+ "@types/node": "^24",
85
+ "@vitest/browser": "^4.1.3",
86
+ "@vitest/browser-playwright": "^4.1.3",
87
+ "@vitest/coverage-v8": "^4.1.3",
88
+ "bits-ui": "^2.17.2",
89
+ "dayjs": "^1.11.20",
90
+ "eslint": "^10.2.0",
91
+ "eslint-config-prettier": "^10.1.8",
92
+ "eslint-plugin-storybook": "^10.3.5",
93
+ "eslint-plugin-svelte": "^3.17.0",
94
+ "esm-env": "^1.2.2",
95
+ "file-saver": "^2.0.5",
96
+ "globals": "^17.4.0",
97
+ "jsdom": "^29.0.2",
98
+ "playwright": "^1.59.1",
99
+ "prettier": "^3.8.1",
100
+ "prettier-plugin-svelte": "^3.5.1",
101
+ "publint": "^0.3.18",
102
+ "sass": "^1.99.0",
103
+ "storybook": "^10.3.5",
104
+ "svelte": "^5.55.2",
105
+ "svelte-check": "^4.4.6",
106
+ "typescript": "^6.0.2",
107
+ "typescript-eslint": "^8.58.1",
108
+ "vite": "^8.0.7",
109
+ "vitest": "^4.1.3"
110
+ },
111
+ "keywords": [
112
+ "svelte"
113
+ ]
114
+ }
@@ -0,0 +1,147 @@
1
+ @use '../../styles/global/breakpoints' as breakpoints;
2
+
3
+ // ----------------------------------------
4
+ // Theme tokens (global CSS variables)
5
+ // ----------------------------------------
6
+ :root {
7
+ --dodo-ui-Calendar-date-selected-bg: var(--dodo-color-primary-500);
8
+ --dodo-ui-Calendar-date-selected-hover-bg: var(--dodo-color-primary-600);
9
+ }
10
+
11
+ .dodo-theme--dark {
12
+ --dodo-ui-Calendar-date-selected-bg: var(--dodo-color-primary-300);
13
+ --dodo-ui-Calendar-date-selected-hover-bg: var(--dodo-color-primary-400);
14
+ }
15
+
16
+ .dodo-ui-Calendar {
17
+ font-size: 1rem;
18
+ color: var(--dodo-color-neutral-900);
19
+ display: inline-flex;
20
+ flex-direction: column;
21
+
22
+ @include breakpoints.up('sm') {
23
+ padding: var(--dodo-ui-space);
24
+ }
25
+
26
+ [data-calendar-header] {
27
+ display: flex;
28
+ justify-content: space-between;
29
+ align-items: center;
30
+ padding: 0 calc(var(--dodo-ui-space) / 2);
31
+ margin-bottom: calc(var(--dodo-ui-space) * 2);
32
+ margin-top: var(--dodo-ui-space);
33
+ }
34
+
35
+ [data-calendar-heading] {
36
+ margin: 0 calc(var(--dodo-ui-space) / 2);
37
+ font-weight: 500;
38
+ }
39
+
40
+ button[data-calendar-next-button],
41
+ button[data-calendar-prev-button] {
42
+ font-size: 1.4em;
43
+ }
44
+
45
+ [data-calendar-grid] {
46
+ width: 100%;
47
+ user-select: none;
48
+ }
49
+
50
+ [data-calendar-grid-row] {
51
+ display: flex;
52
+ width: 100%;
53
+ justify-content: space-around;
54
+ }
55
+
56
+ [data-calendar-grid-head] {
57
+ margin-bottom: var(--dodo-ui-space);
58
+ display: block;
59
+ }
60
+
61
+ [data-calendar-head-cell] {
62
+ display: inline-flex;
63
+ width: var(--dodo-ui-element-height-normal);
64
+ justify-content: center;
65
+ font-weight: 600;
66
+ color: var(--dodo-color-neutral-600);
67
+ font-size: 0.9rem;
68
+ }
69
+
70
+ [data-calendar-cell] {
71
+ display: inline-flex;
72
+ }
73
+
74
+ [data-calendar-day] {
75
+ transition:
76
+ background-color 70ms,
77
+ color 70ms,
78
+ border-color 70ms;
79
+ display: inline-flex;
80
+ justify-content: center;
81
+ align-items: center;
82
+ width: var(--dodo-ui-element-height-normal);
83
+ height: var(--dodo-ui-element-height-normal);
84
+ border-radius: var(--dodo-ui-element-roundness-1);
85
+ border: var(--dodo-ui-element-border-width) solid transparent;
86
+ position: relative;
87
+
88
+ &:hover {
89
+ background-color: var(--dodo-color-neutral-100);
90
+ border-color: var(--dodo-color-neutral-400);
91
+ }
92
+
93
+ &[data-selected] {
94
+ background-color: var(--dodo-ui-Calendar-date-selected-bg);
95
+ color: var(--dodo-color-constant-white);
96
+
97
+ &:hover {
98
+ background-color: var(--dodo-ui-Calendar-date-selected-hover-bg);
99
+ }
100
+
101
+ &[data-today] {
102
+ background-color: var(--dodo-ui-Calendar-date-selected-bg);
103
+ color: var(--dodo-color-constant-white);
104
+
105
+ &:hover {
106
+ background-color: var(--dodo-ui-Calendar-date-selected-hover-bg);
107
+ }
108
+
109
+ &::after {
110
+ background-color: var(--dodo-color-constant-white);
111
+
112
+ &:hover {
113
+ background-color: var(--dodo-color-constant-white);
114
+ }
115
+ }
116
+ }
117
+ }
118
+
119
+ &[data-today] {
120
+ background-color: var(--dodo-color-primary-50);
121
+ &::after {
122
+ content: '';
123
+ width: var(--dodo-ui-track-element-height-small);
124
+ height: var(--dodo-ui-track-element-height-small);
125
+ border-radius: 50%;
126
+ display: inline-flex;
127
+ background-color: var(--dodo-color-primary-600);
128
+ position: absolute;
129
+ bottom: 0.2em;
130
+ }
131
+ }
132
+
133
+ &[data-outside-month],
134
+ &[data-disabled] {
135
+ color: var(--dodo-color-neutral-400);
136
+
137
+ &:hover {
138
+ background-color: initial;
139
+ border-color: transparent;
140
+ }
141
+
142
+ &[data-today] {
143
+ background-color: initial;
144
+ }
145
+ }
146
+ }
147
+ }