@techsio/ui-kit 0.41.1 → 0.42.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 (151) hide show
  1. package/README.md +2 -1
  2. package/dist/atoms/numeric-input.js +3 -3
  3. package/dist/atoms/rating.js +3 -3
  4. package/dist/atoms/tooltip.js +3 -3
  5. package/dist/internal/molecules/drawer.context.js +133 -0
  6. package/dist/internal/molecules/drawer.styles.js +107 -0
  7. package/dist/internal/organisms/sidebar.context.js +223 -0
  8. package/dist/internal/organisms/sidebar.focus.js +169 -0
  9. package/dist/internal/organisms/sidebar.styles.js +146 -0
  10. package/dist/molecules/accordion.js +3 -3
  11. package/dist/molecules/carousel.js +3 -3
  12. package/dist/molecules/chart.js +1 -1
  13. package/dist/molecules/dialog.js +3 -3
  14. package/dist/molecules/drawer.js +262 -0
  15. package/dist/molecules/menu.js +5 -5
  16. package/dist/molecules/radio-group.js +3 -3
  17. package/dist/molecules/select.js +4 -4
  18. package/dist/molecules/slider.js +3 -3
  19. package/dist/molecules/switch.js +3 -3
  20. package/dist/molecules/tabs.js +3 -3
  21. package/dist/molecules/toast.js +6 -6
  22. package/dist/molecules/tree-view.js +4 -4
  23. package/dist/organisms/data-table.fields.js +1 -1
  24. package/dist/organisms/data-table.js +7 -7
  25. package/dist/organisms/sidebar.js +448 -0
  26. package/dist/src/atoms/action-icon.d.ts +1 -1
  27. package/dist/src/atoms/button.d.ts +1 -1
  28. package/dist/src/atoms/link-button.d.ts +1 -1
  29. package/dist/src/atoms/numeric-input.d.ts +1 -1
  30. package/dist/src/atoms/status-text.d.ts +1 -1
  31. package/dist/src/internal/molecules/drawer.context.d.ts +53 -0
  32. package/dist/src/internal/molecules/drawer.context.d.ts.map +1 -0
  33. package/dist/src/internal/molecules/drawer.styles.d.ts +115 -0
  34. package/dist/src/internal/molecules/drawer.styles.d.ts.map +1 -0
  35. package/dist/src/internal/organisms/sidebar.context.d.ts +83 -0
  36. package/dist/src/internal/organisms/sidebar.context.d.ts.map +1 -0
  37. package/dist/src/internal/organisms/sidebar.focus.d.ts +16 -0
  38. package/dist/src/internal/organisms/sidebar.focus.d.ts.map +1 -0
  39. package/dist/src/internal/organisms/sidebar.styles.d.ts +149 -0
  40. package/dist/src/internal/organisms/sidebar.styles.d.ts.map +1 -0
  41. package/dist/src/molecules/accordion.d.ts +1 -1
  42. package/dist/src/molecules/breadcrumb.d.ts +2 -2
  43. package/dist/src/molecules/carousel.d.ts +2 -2
  44. package/dist/src/molecules/combobox.d.ts +1 -1
  45. package/dist/src/molecules/drawer.d.ts +112 -0
  46. package/dist/src/molecules/drawer.d.ts.map +1 -0
  47. package/dist/src/molecules/form-input.d.ts +1 -1
  48. package/dist/src/molecules/form-numeric-input.d.ts +1 -1
  49. package/dist/src/molecules/form-textarea.d.ts +1 -1
  50. package/dist/src/molecules/menu.d.ts +1 -1
  51. package/dist/src/molecules/pagination.d.ts +1 -1
  52. package/dist/src/molecules/phone-input.d.ts +3 -3
  53. package/dist/src/molecules/popover.d.ts +1 -1
  54. package/dist/src/molecules/product-card.d.ts +4 -4
  55. package/dist/src/molecules/radio-card.d.ts +2 -2
  56. package/dist/src/molecules/radio-group.d.ts +2 -2
  57. package/dist/src/molecules/search-form.d.ts +5 -5
  58. package/dist/src/molecules/select.d.ts +1 -1
  59. package/dist/src/molecules/steps.d.ts +1 -1
  60. package/dist/src/molecules/switch.d.ts +3 -3
  61. package/dist/src/molecules/tabs.d.ts +1 -1
  62. package/dist/src/molecules/toast.d.ts +6 -6
  63. package/dist/src/molecules/tree-view.d.ts +1 -1
  64. package/dist/src/organisms/data-table.d.ts +8 -8
  65. package/dist/src/organisms/data-table.fields.d.ts +2 -2
  66. package/dist/src/organisms/data-table.helpers.d.ts +1 -1
  67. package/dist/src/organisms/gallery.d.ts +2 -2
  68. package/dist/src/organisms/sidebar.d.ts +93 -0
  69. package/dist/src/organisms/sidebar.d.ts.map +1 -0
  70. package/dist/src/templates/accordion.d.ts +2 -2
  71. package/dist/src/templates/breadcrumb.d.ts +2 -2
  72. package/dist/src/templates/carousel.d.ts +2 -2
  73. package/dist/src/templates/gallery.d.ts +3 -3
  74. package/dist/src/templates/numeric-input.d.ts +2 -2
  75. package/dist/src/templates/popover.d.ts +1 -1
  76. package/dist/src/templates/product-card.d.ts +2 -2
  77. package/dist/src/templates/select.d.ts +1 -1
  78. package/dist/src/templates/tabs.d.ts +1 -1
  79. package/dist/src/theme/theme-provider.d.ts +1 -1
  80. package/dist/src/types/zag.d.ts +1 -0
  81. package/dist/src/types/zag.d.ts.map +1 -1
  82. package/dist/stories/atoms/badge.stories.d.ts +1 -1
  83. package/dist/stories/atoms/button.stories.d.ts +1 -1
  84. package/dist/stories/atoms/checkbox.stories.d.ts +1 -1
  85. package/dist/stories/atoms/icon.stories.d.ts +1 -1
  86. package/dist/stories/atoms/image.stories.d.ts +1 -1
  87. package/dist/stories/atoms/input.stories.d.ts +1 -1
  88. package/dist/stories/atoms/numeric-input.stories.d.ts +1 -1
  89. package/dist/stories/atoms/rating.stories.d.ts +1 -1
  90. package/dist/stories/atoms/skeleton.stories.d.ts +1 -1
  91. package/dist/stories/atoms/status-text.stories.d.ts +1 -1
  92. package/dist/stories/atoms/textarea.stories.d.ts +1 -1
  93. package/dist/stories/atoms/tooltip.stories.d.ts +2 -2
  94. package/dist/stories/changelog/changelog.stories.d.ts.map +1 -1
  95. package/dist/stories/helpers/icon-options.d.ts +1 -1
  96. package/dist/stories/molecules/accordion.stories.d.ts +1 -1
  97. package/dist/stories/molecules/breadcrumb.stories.d.ts +1 -1
  98. package/dist/stories/molecules/carousel.stories.d.ts +1 -1
  99. package/dist/stories/molecules/chart.stories.d.ts +1 -1
  100. package/dist/stories/molecules/color-select.stories.d.ts +1 -1
  101. package/dist/stories/molecules/combobox.stories.d.ts +1 -1
  102. package/dist/stories/molecules/dialog.stories.d.ts +1 -1
  103. package/dist/stories/molecules/drawer.stories.d.ts +158 -0
  104. package/dist/stories/molecules/drawer.stories.d.ts.map +1 -0
  105. package/dist/stories/molecules/form-checkbox.stories.d.ts +1 -1
  106. package/dist/stories/molecules/form-input.stories.d.ts +1 -1
  107. package/dist/stories/molecules/form-numeric-input.stories.d.ts +1 -1
  108. package/dist/stories/molecules/form-textarea.stories.d.ts +1 -1
  109. package/dist/stories/molecules/menu.stories.d.ts +1 -1
  110. package/dist/stories/molecules/pagination.stories.d.ts +1 -1
  111. package/dist/stories/molecules/phone-input.stories.d.ts +1 -1
  112. package/dist/stories/molecules/popover.stories.d.ts +1 -1
  113. package/dist/stories/molecules/product-card.stories.d.ts +1 -1
  114. package/dist/stories/molecules/radio-card.stories.d.ts +1 -1
  115. package/dist/stories/molecules/radio-group.stories.d.ts +1 -1
  116. package/dist/stories/molecules/search-form.stories.d.ts +1 -1
  117. package/dist/stories/molecules/select.stories.d.ts +1 -1
  118. package/dist/stories/molecules/slider.stories.d.ts +1 -1
  119. package/dist/stories/molecules/steps.stories.d.ts +1 -1
  120. package/dist/stories/molecules/switch.stories.d.ts +1 -1
  121. package/dist/stories/molecules/tabs.stories.d.ts +1 -1
  122. package/dist/stories/molecules/tree-view.stories.d.ts +1 -1
  123. package/dist/stories/organisms/data-table.stories.d.ts +1 -1
  124. package/dist/stories/organisms/footer.stories.d.ts +1 -1
  125. package/dist/stories/organisms/gallery.stories.d.ts +2 -2
  126. package/dist/stories/organisms/header.stories.d.ts +1 -1
  127. package/dist/stories/organisms/sidebar.stories.d.ts +66 -0
  128. package/dist/stories/organisms/sidebar.stories.d.ts.map +1 -0
  129. package/dist/stories/organisms/table.stories.d.ts +1 -1
  130. package/dist/stories/templates/accordion.stories.d.ts +1 -1
  131. package/dist/stories/templates/breadcrumb.stories.d.ts +1 -1
  132. package/dist/stories/templates/carousel.stories.d.ts +1 -1
  133. package/dist/stories/templates/gallery.stories.d.ts +1 -1
  134. package/dist/stories/templates/numeric-input.stories.d.ts +1 -1
  135. package/dist/stories/templates/popover.stories.d.ts +1 -1
  136. package/dist/stories/templates/product-card.stories.d.ts +1 -1
  137. package/dist/stories/templates/select.stories.d.ts +1 -1
  138. package/dist/stories/templates/tabs.stories.d.ts +1 -1
  139. package/dist/test/drawer.behavior.spec.d.ts +2 -0
  140. package/dist/test/drawer.behavior.spec.d.ts.map +1 -0
  141. package/dist/test/sidebar.behavior.spec.d.ts +2 -0
  142. package/dist/test/sidebar.behavior.spec.d.ts.map +1 -0
  143. package/dist/test/sidebar.ssr.bun.d.ts +2 -0
  144. package/dist/test/sidebar.ssr.bun.d.ts.map +1 -0
  145. package/dist/theme/theme-provider.js +4 -4
  146. package/dist/theme/theme-toggle.js +1 -1
  147. package/package.json +43 -33
  148. package/src/tokens/components/components.css +2 -0
  149. package/src/tokens/components/molecules/_drawer.css +369 -0
  150. package/src/tokens/components/organisms/_sidebar.css +93 -0
  151. package/src/tokens/styles.d.ts +3 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@techsio/ui-kit",
3
- "version": "0.41.1",
3
+ "version": "0.42.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "repository": {
@@ -14,18 +14,22 @@
14
14
  "import": "./dist/types/zag.js"
15
15
  },
16
16
  "./tokens": {
17
+ "types": "./src/tokens/styles.d.ts",
17
18
  "style": "./src/tokens/tokens-only.css",
18
19
  "default": "./src/tokens/tokens-only.css"
19
20
  },
20
21
  "./tokens-with-tailwind": {
22
+ "types": "./src/tokens/styles.d.ts",
21
23
  "style": "./src/tokens/index.css",
22
24
  "default": "./src/tokens/index.css"
23
25
  },
24
26
  "./theme.css": {
27
+ "types": "./src/tokens/styles.d.ts",
25
28
  "style": "./src/tokens/theme.css",
26
29
  "default": "./src/tokens/theme.css"
27
30
  },
28
31
  "./tokens/*": {
32
+ "types": "./src/tokens/styles.d.ts",
29
33
  "style": "./src/tokens/*.css",
30
34
  "default": "./src/tokens/*.css"
31
35
  },
@@ -60,6 +64,7 @@
60
64
  ],
61
65
  "scripts": {
62
66
  "build": "rslib build",
67
+ "check:package": "cross-env RSLIB_CHECK_OUTPUT=true rslib build && node scripts/validate-package-exports.mjs",
63
68
  "build:storybook": "storybook build",
64
69
  "dev": "rslib build --watch",
65
70
  "storybook": "storybook dev",
@@ -69,9 +74,10 @@
69
74
  "storybook:a11y": "bash scripts/storybook-a11y.sh",
70
75
  "test:components": "node scripts/run-component-tests.mjs",
71
76
  "test:components:update": "node scripts/run-component-tests.mjs --update-snapshots",
77
+ "test:sidebar:ssr": "bun test ./test/sidebar.ssr.bun.tsx",
72
78
  "lint:tailwind": "eslint \"**/*.{js,jsx,ts,tsx}\" --config eslint.config.js",
73
79
  "lint:tailwind:fix": "eslint \"**/*.{js,jsx,ts,tsx}\" --config eslint.config.js --fix",
74
- "prepare": "pnpm build",
80
+ "prepare": "node -e \"if (!process.env.RSLIB_CHECK_OUTPUT) require('node:child_process').execSync('pnpm build', { stdio: 'inherit' })\"",
75
81
  "check:unused-tokens": "bun scripts/check-unused-tokens.js",
76
82
  "validate:tokens": "bun scripts/validate-token-usage.js && bun scripts/validate-token-definitions.js",
77
83
  "validate:token-usage": "bun scripts/validate-token-usage.js",
@@ -92,27 +98,29 @@
92
98
  "@tanstack/react-charts": "^0.6.5",
93
99
  "@tanstack/react-table": "^9.1.2",
94
100
  "@tanstack/react-virtual": "^3.14.8",
95
- "@zag-js/accordion": "^1.41.2",
96
- "@zag-js/carousel": "^1.41.2",
97
- "@zag-js/checkbox": "^1.41.2",
98
- "@zag-js/combobox": "^1.41.2",
99
- "@zag-js/dialog": "^1.41.2",
100
- "@zag-js/i18n-utils": "^1.41.2",
101
- "@zag-js/menu": "^1.41.2",
102
- "@zag-js/number-input": "^1.41.2",
103
- "@zag-js/pagination": "^1.41.2",
104
- "@zag-js/popover": "^1.41.2",
105
- "@zag-js/radio-group": "^1.41.2",
106
- "@zag-js/rating-group": "^1.41.2",
107
- "@zag-js/react": "^1.41.2",
108
- "@zag-js/select": "^1.41.2",
109
- "@zag-js/slider": "^1.41.2",
110
- "@zag-js/steps": "^1.41.2",
111
- "@zag-js/switch": "^1.41.2",
112
- "@zag-js/tabs": "^1.41.2",
113
- "@zag-js/toast": "^1.41.2",
114
- "@zag-js/tooltip": "^1.41.2",
115
- "@zag-js/tree-view": "^1.41.2",
101
+ "@zag-js/accordion": "1.43.3",
102
+ "@zag-js/carousel": "1.43.3",
103
+ "@zag-js/checkbox": "1.43.3",
104
+ "@zag-js/combobox": "1.43.3",
105
+ "@zag-js/dialog": "1.43.3",
106
+ "@zag-js/drawer": "1.43.3",
107
+ "@zag-js/i18n-utils": "1.43.3",
108
+ "@zag-js/menu": "1.43.3",
109
+ "@zag-js/number-input": "1.43.3",
110
+ "@zag-js/pagination": "1.43.3",
111
+ "@zag-js/popover": "1.43.3",
112
+ "@zag-js/presence": "1.43.3",
113
+ "@zag-js/radio-group": "1.43.3",
114
+ "@zag-js/rating-group": "1.43.3",
115
+ "@zag-js/react": "1.43.3",
116
+ "@zag-js/select": "1.43.3",
117
+ "@zag-js/slider": "1.43.3",
118
+ "@zag-js/steps": "1.43.3",
119
+ "@zag-js/switch": "1.43.3",
120
+ "@zag-js/tabs": "1.43.3",
121
+ "@zag-js/toast": "1.43.3",
122
+ "@zag-js/tooltip": "1.43.3",
123
+ "@zag-js/tree-view": "1.43.3",
116
124
  "better-themes": "^1.1.0",
117
125
  "d3-scale": "^4.0.2",
118
126
  "d3-shape": "^3.2.0",
@@ -125,18 +133,18 @@
125
133
  "@eslint/js": "^9.39.1",
126
134
  "@figma/code-connect": "^2.0.0",
127
135
  "@iconify/json": "^2.2.409",
128
- "@rsbuild/core": "1.6.7",
129
- "@rsbuild/plugin-react": "^1.4.1",
130
- "@rslib/core": "^0.18.0",
136
+ "@rsbuild/core": "2.2.2",
137
+ "@rsbuild/plugin-react": "^2.1.0",
138
+ "@rslib/core": "^1.0.0",
131
139
  "@semantic-release/changelog": "^6.0.3",
132
140
  "@semantic-release/commit-analyzer": "^13.0.1",
133
141
  "@semantic-release/git": "^10.0.1",
134
142
  "@semantic-release/github": "^12.0.2",
135
143
  "@semantic-release/npm": "^13.1.2",
136
144
  "@semantic-release/release-notes-generator": "^14.1.0",
137
- "@storybook/addon-a11y": "^10.4.4",
138
- "@storybook/addon-themes": "^10.4.4",
139
- "@storybook/react": "^10.4.4",
145
+ "@storybook/addon-a11y": "^10.6.0",
146
+ "@storybook/addon-themes": "^10.6.0",
147
+ "@storybook/react": "^10.6.0",
140
148
  "@storybook/test-runner": "^0.24.4",
141
149
  "@tailwindcss/postcss": "^4.1.17",
142
150
  "@techsio/storybook-a11y-reporter": "0.1.3",
@@ -144,15 +152,17 @@
144
152
  "@types/d3-scale": "^4.0.9",
145
153
  "@types/d3-shape": "^3.1.8",
146
154
  "@typescript-eslint/parser": "^8.47.0",
155
+ "cross-env": "^7.0.3",
147
156
  "eslint": "^9.39.1",
148
157
  "eslint-plugin-tailwindcss": "beta",
149
158
  "glob": "^11.0.2",
150
159
  "postcss": "^8.5.6",
151
- "rsbuild-plugin-publint": "^0.3.3",
160
+ "rsbuild-plugin-arethetypeswrong": "0.3.1",
161
+ "rsbuild-plugin-publint": "^1.0.0",
152
162
  "semantic-release": "^25.0.2",
153
- "storybook": "^10.4.4",
154
- "storybook-addon-rslib": "^3.3.4",
155
- "storybook-react-rsbuild": "^3.3.4",
163
+ "storybook": "^10.6.0",
164
+ "storybook-addon-rslib": "^3.4.2",
165
+ "storybook-react-rsbuild": "^3.4.2",
156
166
  "tailwindcss": "^4.1.17",
157
167
  "typescript": "^5.9.3"
158
168
  },
@@ -23,6 +23,7 @@
23
23
  @import "./molecules/_color-select.css";
24
24
  @import "./molecules/_combobox.css";
25
25
  @import "./molecules/_dialog.css";
26
+ @import "./molecules/_drawer.css";
26
27
  @import "./molecules/_pagination.css";
27
28
  @import "./molecules/_popover.css";
28
29
  @import "./molecules/_radio-card.css";
@@ -43,3 +44,4 @@
43
44
  @import "./organisms/_footer.css";
44
45
  @import "./organisms/_header.css";
45
46
  @import "./organisms/_gallery.css";
47
+ @import "./organisms/_sidebar.css";
@@ -0,0 +1,369 @@
1
+ @theme static {
2
+ /* BASE COLOR MAPPING */
3
+ --color-drawer-surface: var(--color-fill-surface);
4
+ --color-drawer-foreground: var(--color-fg-primary);
5
+ --color-drawer-muted-foreground: var(--color-fg-secondary);
6
+ --color-drawer-border: var(--color-border-primary);
7
+ --color-drawer-overlay: var(--color-bg-scrim);
8
+ --color-drawer-focus: var(--color-primary);
9
+
10
+ /* DERIVED COLORS */
11
+ --color-drawer-content-bg: var(--color-drawer-surface);
12
+ --color-drawer-content-fg: var(--color-drawer-foreground);
13
+ --color-drawer-content-border: var(--color-drawer-border);
14
+ --color-drawer-title-fg: var(--color-drawer-foreground);
15
+ --color-drawer-description-fg: var(--color-drawer-muted-foreground);
16
+ --color-drawer-backdrop-bg: var(--color-drawer-overlay);
17
+ --color-drawer-grabber-bg: var(--color-drawer-border);
18
+ --color-drawer-ring: var(--color-drawer-focus);
19
+
20
+ /* SPACING */
21
+ --padding-drawer-header: var(--dimension-24);
22
+ --padding-drawer-body: var(--dimension-24);
23
+ --padding-drawer-footer: var(--dimension-24);
24
+ --padding-drawer-grabber: var(--dimension-8);
25
+ --spacing-drawer-bleed: var(--dimension-48);
26
+ --spacing-drawer-indent-offset: var(--dimension-8);
27
+ --gap-drawer-header: var(--dimension-8);
28
+ --gap-drawer-footer: var(--dimension-10);
29
+
30
+ /* TYPOGRAPHY */
31
+ --text-drawer-title: var(--text-md);
32
+ --font-weight-drawer-title: var(--font-weight-semibold);
33
+ --text-drawer-description: var(--text-sm);
34
+
35
+ /* BORDERS & RADIUS */
36
+ --border-width-drawer: var(--border-width-sm);
37
+ --radius-drawer-content: var(--radius-md);
38
+ --radius-drawer-grabber: var(--radius-full);
39
+
40
+ /* SHADOWS */
41
+ --shadow-drawer-content: var(--shadow-xl);
42
+
43
+ /* FOCUS RINGS */
44
+ --outline-drawer-focus-style: var(--default-ring-style);
45
+ --outline-drawer-focus-width: var(--default-ring-width);
46
+ --outline-drawer-focus-offset: var(--default-ring-offset);
47
+
48
+ /* MOTION */
49
+ --duration-drawer-backdrop-enter: 200ms;
50
+ --duration-drawer-backdrop-exit: 160ms;
51
+ --duration-drawer-enter: 240ms;
52
+ --duration-drawer-exit: 180ms;
53
+ --duration-drawer-stack: 240ms;
54
+
55
+ /* SIZES */
56
+ --container-drawer-xs: var(--container-xs);
57
+ --container-drawer-sm: var(--container-sm);
58
+ --container-drawer-md: var(--container-md);
59
+ --container-drawer-lg: var(--container-lg);
60
+ --container-drawer-xl: var(--container-xl);
61
+ --height-drawer-xs: var(--container-xs);
62
+ --height-drawer-sm: var(--container-sm);
63
+ --height-drawer-md: var(--container-md);
64
+ --height-drawer-lg: var(--container-lg);
65
+ --height-drawer-xl: var(--container-xl);
66
+ --height-drawer-grabber-thickness: var(--dimension-4);
67
+ --width-drawer-grabber-thickness: var(--dimension-4);
68
+ --height-drawer-grabber-length: var(--dimension-40);
69
+ --width-drawer-grabber-length: var(--dimension-40);
70
+ --height-drawer-swipe-area: var(--dimension-16);
71
+ --width-drawer-swipe-area: var(--dimension-16);
72
+
73
+ /* LAYERS */
74
+ --z-drawer-layer: 50;
75
+ --z-drawer-swipe-area: 49;
76
+ }
77
+
78
+ @utility token-icon-drawer-close {
79
+ @apply token-icon-close;
80
+ }
81
+
82
+ @utility drawer-physical-axis {
83
+ direction: ltr;
84
+ }
85
+
86
+ @utility drawer-focus-ring {
87
+ outline-color: var(--color-drawer-ring);
88
+ outline-offset: var(--outline-drawer-focus-offset);
89
+ outline-style: var(--outline-drawer-focus-style);
90
+ outline-width: var(--outline-drawer-focus-width);
91
+ }
92
+
93
+ @utility drawer-title-typography {
94
+ font-size: var(--text-drawer-title);
95
+ }
96
+
97
+ @utility drawer-description-typography {
98
+ font-size: var(--text-drawer-description);
99
+ }
100
+
101
+ /* Zag Presence 1.43.x completes lifecycle callbacks on animationend. */
102
+ @keyframes drawer-enter-presence {
103
+ from,
104
+ to {
105
+ opacity: 1;
106
+ }
107
+ }
108
+
109
+ @keyframes drawer-backdrop-out {
110
+ from {
111
+ opacity: calc(1 - var(--drawer-swipe-progress, 0));
112
+ }
113
+ to {
114
+ opacity: 0;
115
+ }
116
+ }
117
+
118
+ @keyframes drawer-exit-left {
119
+ to {
120
+ transform: translate3d(-100%, 0, 0);
121
+ }
122
+ }
123
+
124
+ @keyframes drawer-exit-right {
125
+ to {
126
+ transform: translate3d(100%, 0, 0);
127
+ }
128
+ }
129
+
130
+ @keyframes drawer-exit-up {
131
+ to {
132
+ transform: translate3d(0, -100%, 0);
133
+ }
134
+ }
135
+
136
+ @keyframes drawer-exit-down {
137
+ to {
138
+ transform: translate3d(0, 100%, 0);
139
+ }
140
+ }
141
+
142
+ @utility drawer-backdrop-motion {
143
+ opacity: calc(1 - var(--drawer-swipe-progress, 0));
144
+ transition-duration: calc(
145
+ var(--duration-drawer-backdrop-enter) *
146
+ var(--drawer-swipe-strength, 1)
147
+ );
148
+ transition-property: opacity;
149
+ transition-timing-function: ease-out;
150
+
151
+ &[data-state="open"] {
152
+ animation: drawer-enter-presence
153
+ calc(
154
+ var(--duration-drawer-backdrop-enter) *
155
+ var(--drawer-swipe-strength, 1)
156
+ )
157
+ linear;
158
+ }
159
+
160
+ &[data-state="closed"] {
161
+ animation: drawer-backdrop-out
162
+ calc(
163
+ var(--duration-drawer-backdrop-exit) *
164
+ var(--drawer-swipe-strength, 1)
165
+ )
166
+ ease-in both;
167
+ }
168
+
169
+ &[data-swiping] {
170
+ transition-duration: 0ms;
171
+ }
172
+
173
+ @starting-style {
174
+ &[data-state="open"]:not([data-swiping]) {
175
+ opacity: 0;
176
+ }
177
+ }
178
+
179
+ @media (prefers-reduced-motion: reduce) {
180
+ animation-duration: 0s !important;
181
+ transition-duration: 0s;
182
+ }
183
+ }
184
+
185
+ @utility drawer-content-motion {
186
+ translate: 0 0;
187
+ transition-duration: calc(
188
+ var(--duration-drawer-enter) *
189
+ var(--drawer-swipe-strength, 1)
190
+ );
191
+ transition-property: transform, translate;
192
+ transition-timing-function: ease-out;
193
+
194
+ &[data-state="open"] {
195
+ animation: drawer-enter-presence
196
+ calc(var(--duration-drawer-enter) * var(--drawer-swipe-strength, 1))
197
+ linear;
198
+ }
199
+
200
+ &[data-state="closed"][data-swipe-direction="left"] {
201
+ animation: drawer-exit-left
202
+ calc(var(--duration-drawer-exit) * var(--drawer-swipe-strength, 1))
203
+ ease-in both;
204
+ }
205
+
206
+ &[data-state="closed"][data-swipe-direction="right"] {
207
+ animation: drawer-exit-right
208
+ calc(var(--duration-drawer-exit) * var(--drawer-swipe-strength, 1))
209
+ ease-in both;
210
+ }
211
+
212
+ &[data-state="closed"][data-swipe-direction="up"] {
213
+ animation: drawer-exit-up
214
+ calc(var(--duration-drawer-exit) * var(--drawer-swipe-strength, 1))
215
+ ease-in both;
216
+ }
217
+
218
+ &[data-state="closed"][data-swipe-direction="down"] {
219
+ animation: drawer-exit-down
220
+ calc(var(--duration-drawer-exit) * var(--drawer-swipe-strength, 1))
221
+ ease-in both;
222
+ }
223
+
224
+ @starting-style {
225
+ &[data-state="open"][data-swipe-direction="left"]:not([data-swiping]) {
226
+ translate: -100% 0;
227
+ }
228
+
229
+ &[data-state="open"][data-swipe-direction="right"]:not([data-swiping]) {
230
+ translate: 100% 0;
231
+ }
232
+
233
+ &[data-state="open"][data-swipe-direction="up"]:not([data-swiping]) {
234
+ translate: 0 -100%;
235
+ }
236
+
237
+ &[data-state="open"][data-swipe-direction="down"]:not([data-swiping]) {
238
+ translate: 0 100%;
239
+ }
240
+ }
241
+
242
+ @media (prefers-reduced-motion: reduce) {
243
+ animation-duration: 0s !important;
244
+ transition-duration: 0s !important;
245
+ }
246
+ }
247
+
248
+ @utility drawer-backdrop-layer {
249
+ z-index: calc(var(--z-drawer-layer) + var(--layer-index, 0) - 1);
250
+ }
251
+
252
+ @utility drawer-positioner-layer {
253
+ z-index: calc(var(--z-drawer-layer) + var(--layer-index, 0));
254
+ }
255
+
256
+ @utility drawer-content-layer {
257
+ z-index: calc(var(--z-drawer-layer) + var(--layer-index, 0));
258
+ }
259
+
260
+ @utility drawer-swipe-area-layer {
261
+ z-index: var(--z-drawer-swipe-area);
262
+ }
263
+
264
+ @utility drawer-content-bleed {
265
+ --drawer-bleed: var(--spacing-drawer-bleed);
266
+
267
+ &::after {
268
+ position: absolute;
269
+ background: inherit;
270
+ content: "";
271
+ pointer-events: none;
272
+ }
273
+
274
+ &[data-swipe-direction="up"]::after {
275
+ right: 0;
276
+ bottom: 100%;
277
+ left: 0;
278
+ height: var(--drawer-bleed);
279
+ }
280
+
281
+ &[data-swipe-direction="down"]::after {
282
+ top: 100%;
283
+ right: 0;
284
+ left: 0;
285
+ height: var(--drawer-bleed);
286
+ }
287
+
288
+ &[data-swipe-direction="left"]::after {
289
+ top: 0;
290
+ right: 100%;
291
+ bottom: 0;
292
+ width: var(--drawer-bleed);
293
+ }
294
+
295
+ &[data-swipe-direction="right"]::after {
296
+ top: 0;
297
+ bottom: 0;
298
+ left: 100%;
299
+ width: var(--drawer-bleed);
300
+ }
301
+ }
302
+
303
+ @utility drawer-content-top {
304
+ border-radius: 0 0 var(--radius-drawer-content) var(--radius-drawer-content);
305
+ }
306
+
307
+ @utility drawer-content-bottom {
308
+ border-radius: var(--radius-drawer-content) var(--radius-drawer-content) 0 0;
309
+ }
310
+
311
+ @utility drawer-content-left {
312
+ border-radius: 0 var(--radius-drawer-content) var(--radius-drawer-content) 0;
313
+ }
314
+
315
+ @utility drawer-content-right {
316
+ border-radius: var(--radius-drawer-content) 0 0 var(--radius-drawer-content);
317
+ }
318
+
319
+ @utility drawer-indent {
320
+ --drawer-indent-progress: clamp(0, var(--drawer-swipe-progress, 0), 1);
321
+
322
+ position: relative;
323
+ transform-origin: center top;
324
+ transition:
325
+ transform var(--duration-drawer-stack) ease-out,
326
+ border-radius var(--duration-drawer-stack) ease-out;
327
+ will-change: transform;
328
+
329
+ &[data-active] {
330
+ border-radius: calc(
331
+ var(--radius-drawer-content) *
332
+ (1 - var(--drawer-indent-progress))
333
+ );
334
+ transform: scale(calc(0.97 + 0.03 * var(--drawer-indent-progress)))
335
+ translateY(
336
+ calc(
337
+ var(--spacing-drawer-indent-offset) *
338
+ (1 - var(--drawer-indent-progress))
339
+ )
340
+ );
341
+ }
342
+
343
+ &[data-inactive] {
344
+ border-radius: 0;
345
+ transform: none;
346
+ }
347
+
348
+ @media (prefers-reduced-motion: reduce) {
349
+ transition-duration: 0s;
350
+ }
351
+ }
352
+
353
+ @utility drawer-indent-background {
354
+ position: fixed;
355
+ inset: 0;
356
+ z-index: calc(var(--z-drawer-layer) - 1);
357
+ background: var(--color-drawer-content-bg);
358
+ opacity: 0;
359
+ pointer-events: none;
360
+ transition: opacity var(--duration-drawer-stack) ease-out;
361
+
362
+ &[data-active] {
363
+ opacity: 1;
364
+ }
365
+
366
+ @media (prefers-reduced-motion: reduce) {
367
+ transition-duration: 0s;
368
+ }
369
+ }
@@ -0,0 +1,93 @@
1
+ @theme static {
2
+ /* BASE COLOR MAPPING */
3
+ --color-sidebar-surface: var(--color-fill-surface);
4
+ --color-sidebar-base: var(--color-base);
5
+ --color-sidebar-foreground: var(--color-fg-primary);
6
+ --color-sidebar-muted-foreground: var(--color-fg-secondary);
7
+ --color-sidebar-border: var(--color-border-primary);
8
+ --color-sidebar-interactive: var(--color-fill-overlay);
9
+ --color-sidebar-focus: var(--color-primary);
10
+
11
+ /* DERIVED COLORS */
12
+ --color-sidebar-root-bg: var(--color-sidebar-base);
13
+ --color-sidebar-root-fg: var(--color-sidebar-foreground);
14
+ --color-sidebar-panel-bg: var(--color-sidebar-surface);
15
+ --color-sidebar-panel-fg: var(--color-sidebar-foreground);
16
+ --color-sidebar-panel-border: var(--color-sidebar-border);
17
+ --color-sidebar-inset-bg: var(--color-sidebar-base);
18
+ --color-sidebar-inset-fg: var(--color-sidebar-foreground);
19
+ --color-sidebar-group-label-fg: var(--color-sidebar-muted-foreground);
20
+ --color-sidebar-pane-border: var(--color-sidebar-border);
21
+ --color-sidebar-separator-bg: var(--color-sidebar-border);
22
+ --color-sidebar-trigger-bg: transparent;
23
+ --color-sidebar-trigger-bg-hover: var(--color-sidebar-interactive);
24
+ --color-sidebar-trigger-bg-active: var(--color-sidebar-interactive);
25
+ --color-sidebar-trigger-fg: var(--color-sidebar-foreground);
26
+ --color-sidebar-rail-bg-hover: var(--color-sidebar-interactive);
27
+ --color-sidebar-rail-fg: var(--color-sidebar-muted-foreground);
28
+ --color-sidebar-rail-indicator-bg: var(--color-sidebar-border);
29
+ --color-sidebar-ring: var(--color-sidebar-focus);
30
+
31
+ /* RESPONSIVE CONTRACT */
32
+ --breakpoint-sidebar-desktop: 64rem;
33
+
34
+ /* VIEWPORT AND WIDTHS */
35
+ --spacing-sidebar-offset: 0rem;
36
+ --height-sidebar-viewport: calc(100dvh - var(--spacing-sidebar-offset));
37
+ --width-sidebar-expanded: var(--container-3xs);
38
+ --width-sidebar-icon: var(--dimension-56);
39
+ --container-sidebar-mobile: var(--container-2xs);
40
+ --width-sidebar-rail: var(--dimension-12);
41
+ --width-sidebar-rail-indicator: var(--dimension-2);
42
+ --height-sidebar-rail-indicator: var(--dimension-32);
43
+ --height-sidebar-separator: var(--dimension-1);
44
+
45
+ /* SPACING */
46
+ --padding-sidebar-section: var(--dimension-16);
47
+ --padding-sidebar-section-compact: var(--dimension-8);
48
+ --padding-sidebar-content: var(--dimension-12);
49
+ --padding-sidebar-content-compact: var(--dimension-8);
50
+ --padding-sidebar-group-label: var(--dimension-8);
51
+ --gap-sidebar-section: var(--dimension-8);
52
+ --gap-sidebar-content: var(--dimension-16);
53
+ --gap-sidebar-group: var(--dimension-8);
54
+ --gap-sidebar-group-content: var(--dimension-4);
55
+ --gap-sidebar-menu: var(--dimension-4);
56
+ --spacing-sidebar-rail: 0rem;
57
+
58
+ /* TYPOGRAPHY */
59
+ --text-sidebar-group-label: var(--text-xs);
60
+ --font-weight-sidebar-group-label: var(--font-weight-semibold);
61
+
62
+ /* BORDER, RADIUS, MOTION, LAYER */
63
+ --border-width-sidebar: var(--border-width-sm);
64
+ --radius-sidebar-rail: var(--radius-full);
65
+ --outline-sidebar-focus-offset: var(--default-ring-offset);
66
+ --outline-sidebar-focus-style: var(--default-ring-style);
67
+ --outline-sidebar-focus-width: var(--default-ring-width);
68
+ --duration-sidebar: 200ms;
69
+ --z-sidebar-rail: 10;
70
+ }
71
+
72
+ @utility token-icon-sidebar-trigger {
73
+ @apply token-icon-menu;
74
+ }
75
+
76
+ @utility token-icon-sidebar-close {
77
+ @apply token-icon-close;
78
+ }
79
+
80
+ @utility sidebar-focus-ring {
81
+ outline-color: var(--color-sidebar-ring);
82
+ outline-offset: var(--outline-sidebar-focus-offset);
83
+ outline-style: var(--outline-sidebar-focus-style);
84
+ outline-width: var(--outline-sidebar-focus-width);
85
+ }
86
+
87
+ @utility sidebar-group-label-typography {
88
+ font-size: var(--text-sidebar-group-label);
89
+ }
90
+
91
+ @utility sidebar-rail-layer {
92
+ z-index: var(--z-sidebar-rail);
93
+ }
@@ -0,0 +1,3 @@
1
+ declare const stylesheet: string
2
+
3
+ export default stylesheet