@1001-digital/components 2.0.4 → 2.0.5

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1001-digital/components",
3
- "version": "2.0.4",
3
+ "version": "2.0.5",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "sideEffects": [
@@ -94,22 +94,32 @@ const props = withDefaults(
94
94
  )
95
95
 
96
96
  const resolveLabel = (v: any) => {
97
- const option = props.options.find(o => o[props.valueKey] === v)
97
+ if (v == null) return ''
98
+ const option = props.options.find((o) => o[props.valueKey] === v)
98
99
  return option ? String(option[props.labelKey]) : String(v)
99
100
  }
100
101
 
101
102
  const resolveDisplayValue = (val: any) => {
103
+ if (val == null) return ''
104
+ if (Array.isArray(val) && val.length === 0) return ''
102
105
  if (Array.isArray(val)) return val.map(resolveLabel).join(', ')
103
106
  return resolveLabel(val)
104
107
  }
105
108
  </script>
106
109
 
107
110
  <style scoped>
111
+ /* &:has(> .combobox-root) { */
112
+ /* } */
113
+
108
114
  @layer components {
115
+ :global(.form-item:has(> .combobox-root)) {
116
+ inline-size: max-content !important;
117
+ max-inline-size: none;
118
+ }
119
+
109
120
  .combobox-root {
110
121
  inline-size: 100%;
111
122
  }
112
-
113
123
  .combobox-anchor {
114
124
  display: flex;
115
125
  align-items: center;
@@ -166,7 +176,7 @@ const resolveDisplayValue = (val: any) => {
166
176
  }
167
177
  }
168
178
 
169
- .combobox-content {
179
+ :deep(.combobox-content) {
170
180
  background: var(--combobox-background);
171
181
  border: var(--combobox-border);
172
182
  border-radius: var(--combobox-border-radius);
@@ -198,11 +208,11 @@ const resolveDisplayValue = (val: any) => {
198
208
  }
199
209
  }
200
210
 
201
- .combobox-viewport {
211
+ :deep(.combobox-viewport) {
202
212
  padding: var(--combobox-padding);
203
213
  }
204
214
 
205
- .combobox-empty {
215
+ :deep(.combobox-empty) {
206
216
  padding: var(--size-2) var(--size-3);
207
217
  color: var(--muted);
208
218
  font-family: var(--font-family);
@@ -210,7 +220,7 @@ const resolveDisplayValue = (val: any) => {
210
220
  user-select: none;
211
221
  }
212
222
 
213
- .combobox-item {
223
+ :deep(.combobox-item) {
214
224
  padding: var(--size-2) var(--size-3);
215
225
  border-radius: calc(var(--combobox-border-radius) / 2);
216
226
  display: flex;
@@ -237,7 +247,7 @@ const resolveDisplayValue = (val: any) => {
237
247
  }
238
248
  }
239
249
 
240
- .combobox-indicator {
250
+ :deep(.combobox-indicator) {
241
251
  color: var(--accent);
242
252
  }
243
253
  }
@@ -161,6 +161,7 @@ onBeforeUnmount(() => {
161
161
  display: flex;
162
162
  align-items: center;
163
163
  block-size: calc(var(--spacer) * 2);
164
+ background: var(--dialog-header-background);
164
165
  box-shadow: var(--border-shadow);
165
166
  padding-inline-start: var(--spacer);
166
167
  font-family: var(--font-family);
@@ -73,98 +73,100 @@ const open = defineModel<boolean>('open', { required: true })
73
73
 
74
74
  <style scoped>
75
75
  @layer components {
76
- .dropdown {
77
- background: var(--dropdown-background);
78
- color: var(--color);
79
- border: var(--dropdown-border);
80
- border-radius: var(--dropdown-border-radius);
81
- padding: 0;
82
- font-family: var(--font-family);
83
- font-size: var(--ui-font-size);
84
- z-index: var(--z-index-ui);
85
- min-inline-size: var(--reka-dropdown-menu-trigger-width);
86
- max-block-size: var(--reka-dropdown-menu-content-available-height);
87
- transform-origin: var(--reka-dropdown-menu-content-transform-origin);
88
-
89
- /* Entry/exit animations */
90
- opacity: 1;
91
- scale: 1;
92
- transition:
93
- opacity var(--speed) ease,
94
- scale var(--speed) ease;
95
-
96
- @starting-style {
97
- opacity: 0;
98
- scale: 0.95;
76
+ :deep() {
77
+ .dropdown {
78
+ background: var(--dropdown-background);
79
+ color: var(--color);
80
+ border: var(--dropdown-border);
81
+ border-radius: var(--dropdown-border-radius);
82
+ padding: 0;
83
+ font-family: var(--font-family);
84
+ font-size: var(--ui-font-size);
85
+ z-index: var(--z-index-ui);
86
+ min-inline-size: var(--reka-dropdown-menu-trigger-width);
87
+ max-block-size: var(--reka-dropdown-menu-content-available-height);
88
+ transform-origin: var(--reka-dropdown-menu-content-transform-origin);
89
+
90
+ /* Entry/exit animations */
91
+ opacity: 1;
92
+ scale: 1;
93
+ transition:
94
+ opacity var(--speed) ease,
95
+ scale var(--speed) ease;
96
+
97
+ @starting-style {
98
+ opacity: 0;
99
+ scale: 0.95;
100
+ }
101
+
102
+ &[data-state='closed'] {
103
+ opacity: 0;
104
+ scale: 0.95;
105
+ }
106
+
107
+ &:focus {
108
+ outline: none;
109
+ }
110
+
111
+ .dropdown-arrow {
112
+ fill: var(--dropdown-arrow-fill);
113
+ stroke: var(--border-color);
114
+ }
99
115
  }
100
116
 
101
- &[data-state='closed'] {
102
- opacity: 0;
103
- scale: 0.95;
117
+ .dropdown-items {
118
+ padding: var(--dropdown-padding);
119
+ overflow-y: auto;
120
+ overscroll-behavior: contain;
104
121
  }
105
122
 
106
- &:focus {
123
+ .dropdown-item {
124
+ padding: var(--size-2) var(--size-3);
125
+ border-radius: calc(var(--dropdown-border-radius) / 2);
126
+ display: flex;
127
+ align-items: center;
128
+ gap: var(--size-2);
129
+ cursor: pointer;
107
130
  outline: none;
108
- }
109
-
110
- .dropdown-arrow {
111
- fill: var(--dropdown-arrow-fill);
112
- stroke: var(--border-color);
113
- }
114
- }
131
+ user-select: none;
115
132
 
116
- .dropdown-items {
117
- padding: var(--dropdown-padding);
118
- overflow-y: auto;
119
- overscroll-behavior: contain;
120
- }
133
+ &[data-highlighted] {
134
+ background: var(--button-background-highlight);
135
+ }
121
136
 
122
- .dropdown-item {
123
- padding: var(--size-2) var(--size-3);
124
- border-radius: calc(var(--dropdown-border-radius) / 2);
125
- display: flex;
126
- align-items: center;
127
- gap: var(--size-2);
128
- cursor: pointer;
129
- outline: none;
130
- user-select: none;
131
-
132
- &[data-highlighted] {
133
- background: var(--button-background-highlight);
137
+ &[data-disabled] {
138
+ opacity: 0.5;
139
+ cursor: not-allowed;
140
+ }
134
141
  }
135
142
 
136
- &[data-disabled] {
137
- opacity: 0.5;
138
- cursor: not-allowed;
143
+ .dropdown-label {
144
+ padding: var(--size-2) var(--size-3);
145
+ color: var(--muted);
146
+ font-weight: 500;
147
+ user-select: none;
139
148
  }
140
- }
141
-
142
- .dropdown-label {
143
- padding: var(--size-2) var(--size-3);
144
- color: var(--muted);
145
- font-weight: 500;
146
- user-select: none;
147
- }
148
149
 
149
- .dropdown-separator {
150
- block-size: 1px;
151
- background: var(--border-color);
152
- margin-block: var(--size-1);
153
- }
150
+ .dropdown-separator {
151
+ block-size: 1px;
152
+ background: var(--border-color);
153
+ margin-block: var(--size-1);
154
+ }
154
155
 
155
- .dropdown-item-indicator {
156
- display: inline-flex;
157
- align-items: center;
158
- justify-content: center;
159
- }
156
+ .dropdown-item-indicator {
157
+ display: inline-flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ }
160
161
 
161
- .dropdown-sub-trigger {
162
- justify-content: space-between;
163
- }
162
+ .dropdown-sub-trigger {
163
+ justify-content: space-between;
164
+ }
164
165
 
165
- .dropdown-sub-icon {
166
- color: var(--muted);
167
- margin-inline-start: auto;
166
+ .dropdown-sub-icon {
167
+ color: var(--muted);
168
+ margin-inline-start: auto;
169
+ }
168
170
  }
169
171
  }
170
172
  </style>
@@ -148,6 +148,7 @@ const onInteractOutside = (e: Event) => {
148
148
  display: flex;
149
149
  align-items: center;
150
150
  block-size: calc(var(--spacer) * 2);
151
+ background: var(--popover-header-background);
151
152
  border-start-start-radius: var(--popover-border-radius);
152
153
  border-start-end-radius: var(--popover-border-radius);
153
154
  box-shadow: var(--border-shadow);
@@ -171,6 +172,7 @@ const onInteractOutside = (e: Event) => {
171
172
  position: absolute !important;
172
173
  top: 0;
173
174
  right: 0;
175
+ background: var(--popover-header-background) !important;
174
176
  box-shadow: var(--border-shadow) !important;
175
177
  border-radius: 0 !important;
176
178
  border-start-end-radius: var(--popover-border-radius) !important;
@@ -171,6 +171,7 @@ const onClose = (id: string) => {
171
171
 
172
172
  /* Variants */
173
173
  &.info {
174
+ --toast-header-background: var(--toast-info-header-background);
174
175
  --border-color: var(--toast-info-border-color);
175
176
  color: var(--toast-info-color);
176
177
  background: var(--toast-info-background);
@@ -183,6 +184,7 @@ const onClose = (id: string) => {
183
184
  }
184
185
 
185
186
  &.success {
187
+ --toast-header-background: var(--toast-success-header-background);
186
188
  --border-color: var(--toast-success-border-color);
187
189
  color: var(--toast-success-color);
188
190
  background: var(--toast-success-background);
@@ -195,6 +197,7 @@ const onClose = (id: string) => {
195
197
  }
196
198
 
197
199
  &.error {
200
+ --toast-header-background: var(--toast-error-header-background);
198
201
  --border-color: var(--toast-error-border-color);
199
202
  color: var(--toast-error-color);
200
203
  background: var(--toast-error-background);
@@ -211,6 +214,7 @@ const onClose = (id: string) => {
211
214
  align-items: center;
212
215
  gap: var(--spacer-sm);
213
216
  block-size: calc(var(--spacer) * 2);
217
+ background: var(--toast-header-background);
214
218
  box-shadow: var(--border-shadow);
215
219
  padding-inline-start: var(--ui-padding-inline);
216
220
  padding-right: calc(var(--spacer) * 3);
@@ -246,6 +250,7 @@ const onClose = (id: string) => {
246
250
  position: absolute !important;
247
251
  top: 0;
248
252
  right: 0;
253
+ background: var(--toast-header-background) !important;
249
254
  box-shadow: var(--border-shadow) !important;
250
255
  border-radius: 0 !important;
251
256
  border-start-end-radius: var(--toast-border-radius) !important;
@@ -66,37 +66,39 @@ const props = withDefaults(
66
66
 
67
67
  <style scoped>
68
68
  @layer components {
69
- .tooltip {
70
- background: var(--tooltip-background);
71
- color: var(--color);
72
- border: var(--tooltip-border);
73
- border-radius: var(--tooltip-border-radius);
74
- padding: var(--tooltip-padding);
75
- font-family: var(--font-family);
76
- font-size: var(--ui-font-size);
77
- z-index: var(--z-index-ui);
78
- transform-origin: var(--reka-tooltip-content-transform-origin);
69
+ :deep() {
70
+ .tooltip {
71
+ background: var(--tooltip-background);
72
+ color: var(--color);
73
+ border: var(--tooltip-border);
74
+ border-radius: var(--tooltip-border-radius);
75
+ padding: var(--tooltip-padding);
76
+ font-family: var(--font-family);
77
+ font-size: var(--ui-font-size);
78
+ z-index: var(--z-index-ui);
79
+ transform-origin: var(--reka-tooltip-content-transform-origin);
79
80
 
80
- /* Entry/exit animations */
81
- opacity: 1;
82
- scale: 1;
83
- transition:
84
- opacity var(--speed) ease,
85
- scale var(--speed) ease;
81
+ /* Entry/exit animations */
82
+ opacity: 1;
83
+ scale: 1;
84
+ transition:
85
+ opacity var(--speed) ease,
86
+ scale var(--speed) ease;
86
87
 
87
- @starting-style {
88
- opacity: 0;
89
- scale: 0.95;
90
- }
88
+ @starting-style {
89
+ opacity: 0;
90
+ scale: 0.95;
91
+ }
91
92
 
92
- &[data-state='closed'] {
93
- opacity: 0;
94
- scale: 0.95;
95
- }
93
+ &[data-state='closed'] {
94
+ opacity: 0;
95
+ scale: 0.95;
96
+ }
96
97
 
97
- .tooltip-arrow {
98
- fill: var(--tooltip-arrow-fill);
99
- stroke: var(--border-color);
98
+ .tooltip-arrow {
99
+ fill: var(--tooltip-arrow-fill);
100
+ stroke: var(--border-color);
101
+ }
100
102
  }
101
103
  }
102
104
  }
@@ -1,5 +1,7 @@
1
1
  import { DateTime } from 'luxon'
2
2
 
3
+ export type UTCDateTime = DateTime<true>
4
+
3
5
  export const delay = (ms: number): Promise<void> =>
4
6
  new Promise((resolve) => setTimeout(resolve, ms))
5
7
 
@@ -7,7 +9,7 @@ export const daysInSeconds = (days: number): number => days * 60 * 60 * 24
7
9
 
8
10
  export const nowInSeconds = (): number => Math.floor(Date.now() / 1000)
9
11
 
10
- export const asUTCDate = (date: Date | null) =>
12
+ export const asUTCDate = (date: Date | null): UTCDateTime | null =>
11
13
  date
12
14
  ? DateTime.utc(
13
15
  date.getFullYear(),
package/src/index.ts CHANGED
@@ -76,6 +76,7 @@ export {
76
76
  nowInSeconds,
77
77
  asUTCDate,
78
78
  } from './base/utils/time'
79
+ export type { UTCDateTime } from './base/utils/time'
79
80
 
80
81
  // Date types
81
82
  export {