@happyvertical/smrt-projects 0.34.4 → 0.34.6

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "timestamp": 1782257908575,
3
+ "timestamp": 1782278490998,
4
4
  "packageName": "@happyvertical/smrt-projects",
5
- "packageVersion": "0.34.4",
5
+ "packageVersion": "0.34.6",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-projects:IssueCollection": {
8
8
  "name": "issuecollection",
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-06-23T23:38:29.126Z",
3
+ "generatedAt": "2026-06-24T05:21:31.498Z",
4
4
  "packageName": "@happyvertical/smrt-projects",
5
- "packageVersion": "0.34.4",
5
+ "packageVersion": "0.34.6",
6
6
  "sourceManifestPath": "dist/manifest.json",
7
7
  "agentDocPath": "AGENTS.md",
8
8
  "sourceHashes": {
9
- "manifest": "b04b16d0001fb7f9b97e421ef952150ea7ceb8b358d4496944e7e7cbdf8fe034",
10
- "packageJson": "a732fc57eacdbcc94d4ca25778ff5d9b0095c8e7be2d93df3746840f153aa678",
9
+ "manifest": "1457cd62879d29e5b90e66eb9879bb2ab1bf43b0b27a36a3602b0ee70d300230",
10
+ "packageJson": "9f4498509067643c846db050d302d58e972ae0ca1f0082bd932387ea0b4fedd9",
11
11
  "agents": "31de38c962634d69c728bab8dff270448a49718fc36ee20b9cd12216cdbed95c"
12
12
  },
13
13
  "exports": [
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  import { useI18n } from '@happyvertical/smrt-ui/i18n';
8
+ import { Button } from '@happyvertical/smrt-ui/ui';
8
9
  import { M } from '../i18n.js';
9
10
  import type { ApprovalStatus } from './utils.js';
10
11
 
@@ -47,58 +48,33 @@ const canDelete = $derived(status === 'draft' && ondelete);
47
48
 
48
49
  <div class="approval-actions" class:vertical={layout === 'vertical'}>
49
50
  {#if canSubmit}
50
- <button
51
- type="button"
52
- class="btn btn-filled"
53
- onclick={onsubmit}
54
- disabled={disabled || loading}
55
- >
51
+ <Button variant="primary" onclick={onsubmit} disabled={disabled || loading}>
56
52
  {loading ? 'Submitting...' : 'Submit for Approval'}
57
- </button>
53
+ </Button>
58
54
  {/if}
59
55
 
60
56
  {#if canApprove}
61
- <button
62
- type="button"
63
- class="btn btn-filled-tonal"
64
- onclick={onapprove}
65
- disabled={disabled || loading}
66
- >
57
+ <Button variant="primary" onclick={onapprove} disabled={disabled || loading}>
67
58
  {loading ? 'Approving...' : 'Approve'}
68
- </button>
59
+ </Button>
69
60
  {/if}
70
61
 
71
62
  {#if canReject}
72
- <button
73
- type="button"
74
- class="btn btn-error"
75
- onclick={onreject}
76
- disabled={disabled || loading}
77
- >
63
+ <Button variant="danger" onclick={onreject} disabled={disabled || loading}>
78
64
  Reject
79
- </button>
65
+ </Button>
80
66
  {/if}
81
67
 
82
68
  {#if canEdit}
83
- <button
84
- type="button"
85
- class="btn btn-outlined"
86
- onclick={onedit}
87
- disabled={disabled || loading}
88
- >
69
+ <Button variant="secondary" onclick={onedit} disabled={disabled || loading}>
89
70
  Edit
90
- </button>
71
+ </Button>
91
72
  {/if}
92
73
 
93
74
  {#if canDelete}
94
- <button
95
- type="button"
96
- class="btn btn-error-outlined"
97
- onclick={ondelete}
98
- disabled={disabled || loading}
99
- >
75
+ <Button variant="danger" onclick={ondelete} disabled={disabled || loading}>
100
76
  Delete
101
- </button>
77
+ </Button>
102
78
  {/if}
103
79
 
104
80
  {#if status === 'approved'}
@@ -127,73 +103,6 @@ const canDelete = $derived(status === 'draft' && ondelete);
127
103
  align-items: stretch;
128
104
  }
129
105
 
130
- .btn {
131
- display: inline-flex;
132
- align-items: center;
133
- justify-content: center;
134
- gap: 0.5rem;
135
- padding: 0.625rem 1.5rem;
136
- font-size: var(--smrt-typography-label-large-size, 0.875rem);
137
- font-weight: var(--smrt-typography-label-large-weight, 500);
138
- letter-spacing: var(--smrt-typography-label-large-tracking, 0.1px);
139
- border-radius: var(--smrt-radius-full, 9999px);
140
- border: none;
141
- cursor: pointer;
142
- transition: all 0.2s var(--smrt-easing-standard);
143
- }
144
-
145
- .btn:disabled {
146
- opacity: 0.38;
147
- cursor: not-allowed;
148
- }
149
-
150
- .btn-filled {
151
- background: var(--smrt-color-primary);
152
- color: var(--smrt-color-on-primary);
153
- }
154
-
155
- .btn-filled:hover:not(:disabled) {
156
- box-shadow: var(--smrt-elevation-1);
157
- }
158
-
159
- .btn-filled-tonal {
160
- background: var(--smrt-color-secondary-container);
161
- color: var(--smrt-color-on-secondary-container);
162
- }
163
-
164
- .btn-filled-tonal:hover:not(:disabled) {
165
- box-shadow: var(--smrt-elevation-1);
166
- }
167
-
168
- .btn-error {
169
- background: var(--smrt-color-error);
170
- color: var(--smrt-color-on-error);
171
- }
172
-
173
- .btn-error:hover:not(:disabled) {
174
- box-shadow: var(--smrt-elevation-1);
175
- }
176
-
177
- .btn-error-outlined {
178
- background: transparent;
179
- border: 1px solid var(--smrt-color-error);
180
- color: var(--smrt-color-error);
181
- }
182
-
183
- .btn-error-outlined:hover:not(:disabled) {
184
- background: var(--smrt-color-error-container);
185
- }
186
-
187
- .btn-outlined {
188
- background: transparent;
189
- border: 1px solid var(--smrt-color-outline);
190
- color: var(--smrt-color-on-surface);
191
- }
192
-
193
- .btn-outlined:hover:not(:disabled) {
194
- background: var(--smrt-color-surface-container-highest);
195
- }
196
-
197
106
  .status-message {
198
107
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
199
108
  font-weight: var(--smrt-typography-label-large-weight, 500);
@@ -1 +1 @@
1
- {"version":3,"file":"ApprovalActions.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ApprovalActions.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,0CAA0C;AAC1C,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;CACpC;AAiFD,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ApprovalActions.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ApprovalActions.svelte.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,0CAA0C;AAC1C,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;CACpC;AAkFD,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  import { useI18n } from '@happyvertical/smrt-ui/i18n';
8
+ import { Button } from '@happyvertical/smrt-ui/ui';
8
9
  import { M } from '../i18n.js';
9
10
 
10
11
  const { t } = useI18n();
@@ -39,55 +40,41 @@ const visible = $derived(selectedCount > 0);
39
40
  <span class="count">{selectedCount}</span>
40
41
  <span class="label">{selectedCount === 1 ? 'item' : 'items'} selected</span>
41
42
  {#if onclear}
42
- <button type="button" class="clear-btn" onclick={onclear} disabled={loading}>
43
+ <Button
44
+ variant="ghost"
45
+ size="sm"
46
+ class="clear-action"
47
+ onclick={onclear}
48
+ disabled={loading}
49
+ >
43
50
  Clear
44
- </button>
51
+ </Button>
45
52
  {/if}
46
53
  </div>
47
54
 
48
55
  <div class="actions">
49
56
  {#if onapprove}
50
- <button
51
- type="button"
52
- class="btn btn-filled"
53
- onclick={onapprove}
54
- disabled={loading}
55
- >
57
+ <Button variant="primary" onclick={onapprove} disabled={loading}>
56
58
  {t(M['projects.bulk_actions.approve_all'])}
57
- </button>
59
+ </Button>
58
60
  {/if}
59
61
 
60
62
  {#if onreject}
61
- <button
62
- type="button"
63
- class="btn btn-error"
64
- onclick={onreject}
65
- disabled={loading}
66
- >
63
+ <Button variant="danger" onclick={onreject} disabled={loading}>
67
64
  {t(M['projects.bulk_actions.reject_all'])}
68
- </button>
65
+ </Button>
69
66
  {/if}
70
67
 
71
68
  {#if onexport}
72
- <button
73
- type="button"
74
- class="btn btn-outlined"
75
- onclick={onexport}
76
- disabled={loading}
77
- >
69
+ <Button variant="secondary" onclick={onexport} disabled={loading}>
78
70
  Export
79
- </button>
71
+ </Button>
80
72
  {/if}
81
73
 
82
74
  {#if ondelete}
83
- <button
84
- type="button"
85
- class="btn btn-error-outlined"
86
- onclick={ondelete}
87
- disabled={loading}
88
- >
75
+ <Button variant="danger" onclick={ondelete} disabled={loading}>
89
76
  Delete
90
- </button>
77
+ </Button>
91
78
  {/if}
92
79
  </div>
93
80
  </div>
@@ -122,89 +109,20 @@ const visible = $derived(selectedCount > 0);
122
109
  color: var(--smrt-color-on-secondary-container);
123
110
  }
124
111
 
125
- .clear-btn {
126
- background: none;
127
- border: none;
112
+ /* Keep the bespoke text-link look for the migrated Clear Button. The
113
+ :global() pierces into the Button child's rendered <button>, which carries
114
+ its own scope hash (see #1589 scoping rule). */
115
+ .selection-info :global(.clear-action) {
128
116
  padding: 0.25rem 0.5rem;
129
117
  font-size: var(--smrt-typography-label-medium-size, 0.75rem);
130
- color: var(--smrt-color-primary);
131
- cursor: pointer;
132
118
  text-decoration: underline;
133
119
  }
134
120
 
135
- .clear-btn:hover:not(:disabled) {
136
- color: var(--smrt-color-primary);
137
- opacity: 0.8;
138
- }
139
-
140
- .clear-btn:disabled {
141
- opacity: 0.38;
142
- cursor: not-allowed;
143
- }
144
-
145
121
  .actions {
146
122
  display: flex;
147
123
  gap: 0.5rem;
148
124
  }
149
125
 
150
- .btn {
151
- display: inline-flex;
152
- align-items: center;
153
- justify-content: center;
154
- gap: 0.5rem;
155
- padding: 0.5rem 1rem;
156
- font-size: var(--smrt-typography-label-large-size, 0.875rem);
157
- font-weight: var(--smrt-typography-label-large-weight, 500);
158
- letter-spacing: var(--smrt-typography-label-large-tracking, 0.1px);
159
- border-radius: var(--smrt-radius-full, 9999px);
160
- border: none;
161
- cursor: pointer;
162
- transition: all 0.2s var(--smrt-easing-standard);
163
- }
164
-
165
- .btn:disabled {
166
- opacity: 0.38;
167
- cursor: not-allowed;
168
- }
169
-
170
- .btn-filled {
171
- background: var(--smrt-color-primary);
172
- color: var(--smrt-color-on-primary);
173
- }
174
-
175
- .btn-filled:hover:not(:disabled) {
176
- box-shadow: var(--smrt-elevation-1);
177
- }
178
-
179
- .btn-error {
180
- background: var(--smrt-color-error);
181
- color: var(--smrt-color-on-error);
182
- }
183
-
184
- .btn-error:hover:not(:disabled) {
185
- box-shadow: var(--smrt-elevation-1);
186
- }
187
-
188
- .btn-error-outlined {
189
- background: transparent;
190
- border: 1px solid var(--smrt-color-error);
191
- color: var(--smrt-color-error);
192
- }
193
-
194
- .btn-error-outlined:hover:not(:disabled) {
195
- background: var(--smrt-color-error-container);
196
- }
197
-
198
- .btn-outlined {
199
- background: transparent;
200
- border: 1px solid var(--smrt-color-outline);
201
- color: var(--smrt-color-on-surface);
202
- }
203
-
204
- .btn-outlined:hover:not(:disabled) {
205
- background: var(--smrt-color-surface-container-highest);
206
- }
207
-
208
126
  @media (max-width: 640px) {
209
127
  .bulk-actions {
210
128
  flex-direction: column;
@@ -216,7 +134,7 @@ const visible = $derived(selectedCount > 0);
216
134
  flex-wrap: wrap;
217
135
  }
218
136
 
219
- .actions .btn {
137
+ .actions :global(.button) {
220
138
  flex: 1;
221
139
  min-width: 100px;
222
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BulkActions.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/BulkActions.svelte.ts"],"names":[],"mappings":"AAWA,sCAAsC;AACtC,MAAM,WAAW,KAAK;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmED,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"BulkActions.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/BulkActions.svelte.ts"],"names":[],"mappings":"AAYA,sCAAsC;AACtC,MAAM,WAAW,KAAK;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoED,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  import { useI18n } from '@happyvertical/smrt-ui/i18n';
8
+ import { Button } from '@happyvertical/smrt-ui/ui';
8
9
  import { M } from '../i18n.js';
9
10
 
10
11
  const { t } = useI18n();
@@ -74,6 +75,7 @@ $effect(() => {
74
75
 
75
76
  {#if open}
76
77
  <div class="dialog-backdrop">
78
+ <!-- raw-primitive-allow: click-catching modal backdrop; structural overlay, not a primitive -->
77
79
  <button
78
80
  type="button"
79
81
  class="dialog-overlay"
@@ -92,6 +94,7 @@ $effect(() => {
92
94
 
93
95
  <p class="dialog-message">{message}</p>
94
96
 
97
+ <!-- raw-primitive-allow: base Textarea primitive cannot resolve in this package's vitest component tests (smrt-vitest does not map the smrt-svelte forms subpath alias); keep native until that shared harness gap is fixed -->
95
98
  <textarea
96
99
  bind:this={textarea}
97
100
  bind:value={reason}
@@ -106,22 +109,16 @@ $effect(() => {
106
109
  {/if}
107
110
 
108
111
  <div class="dialog-actions">
109
- <button
110
- type="button"
111
- class="btn btn-secondary"
112
- onclick={handleCancel}
113
- disabled={loading}
114
- >
112
+ <Button variant="secondary" onclick={handleCancel} disabled={loading}>
115
113
  {cancelLabel}
116
- </button>
117
- <button
118
- type="button"
119
- class="btn btn-error"
114
+ </Button>
115
+ <Button
116
+ variant="danger"
120
117
  onclick={handleConfirm}
121
118
  disabled={!canConfirm || loading}
122
119
  >
123
120
  {loading ? 'Rejecting...' : confirmLabel}
124
- </button>
121
+ </Button>
125
122
  </div>
126
123
  </div>
127
124
  </div>
@@ -209,42 +206,4 @@ $effect(() => {
209
206
  gap: 0.5rem;
210
207
  margin-top: 1.5rem;
211
208
  }
212
-
213
- .btn {
214
- display: inline-flex;
215
- align-items: center;
216
- justify-content: center;
217
- padding: 0.625rem 1.5rem;
218
- font-size: var(--smrt-typography-label-large-size, 0.875rem);
219
- font-weight: var(--smrt-typography-label-large-weight, 500);
220
- letter-spacing: var(--smrt-typography-label-large-tracking, 0.1px);
221
- border-radius: var(--smrt-radius-full, 9999px);
222
- border: none;
223
- cursor: pointer;
224
- transition: all 0.2s var(--smrt-easing-standard);
225
- }
226
-
227
- .btn:disabled {
228
- opacity: 0.38;
229
- cursor: not-allowed;
230
- }
231
-
232
- .btn-secondary {
233
- background: transparent;
234
- color: var(--smrt-color-primary);
235
- }
236
-
237
- .btn-secondary:hover:not(:disabled) {
238
- background: var(--smrt-color-primary);
239
- background: color-mix(in srgb, var(--smrt-color-primary) 8%, transparent);
240
- }
241
-
242
- .btn-error {
243
- background: var(--smrt-color-error);
244
- color: var(--smrt-color-on-error);
245
- }
246
-
247
- .btn-error:hover:not(:disabled) {
248
- box-shadow: var(--smrt-elevation-1);
249
- }
250
209
  </style>
@@ -1 +1 @@
1
- {"version":3,"file":"RejectDialog.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RejectDialog.svelte.ts"],"names":[],"mappings":"AAWA,uCAAuC;AACvC,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAyFD,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"RejectDialog.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RejectDialog.svelte.ts"],"names":[],"mappings":"AAYA,uCAAuC;AACvC,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AA4FD,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -74,6 +74,7 @@ function handleKeydown(event: KeyboardEvent) {
74
74
  >
75
75
  {#if selectable}
76
76
  <div class="checkbox-wrapper">
77
+ <!-- raw-primitive-allow: native checkbox; no Provider-free checkbox primitive, kept native to match the indeterminate select-all in TimeEntryList -->
77
78
  <input
78
79
  type="checkbox"
79
80
  checked={selected}
@@ -93,6 +94,7 @@ function handleKeydown(event: KeyboardEvent) {
93
94
  {@render cardBody()}
94
95
  </a>
95
96
  {:else if onclick}
97
+ <!-- raw-primitive-allow: pressable selection card wrapping rich content; structural, not a standard action button -->
96
98
  <button
97
99
  type="button"
98
100
  class="card-content"
@@ -1 +1 @@
1
- {"version":3,"file":"TimeEntryCard.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/TimeEntryCard.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACL,KAAK,QAAQ,EAKb,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AAGpB,wCAAwC;AACxC,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAkHD,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"TimeEntryCard.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/TimeEntryCard.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACL,KAAK,QAAQ,EAKb,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AAGpB,wCAAwC;AACxC,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoHD,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
@@ -85,6 +85,7 @@ function getEntryHref(entry: TimeEntry): string | undefined {
85
85
  {#if selectable && selectableEntries.length > 0}
86
86
  <div class="list-header">
87
87
  <label class="select-all">
88
+ <!-- raw-primitive-allow: select-all checkbox needs the indeterminate state; must stay native -->
88
89
  <input
89
90
  type="checkbox"
90
91
  checked={allSelected}
@@ -114,6 +115,7 @@ function getEntryHref(entry: TimeEntry): string | undefined {
114
115
  {#if selectable && selectableEntries.length > 0}
115
116
  <div class="checkbox-cell">
116
117
  {#if isSelectable}
118
+ <!-- raw-primitive-allow: native row checkbox; no Provider-free checkbox primitive, kept native to match the indeterminate select-all -->
117
119
  <input
118
120
  type="checkbox"
119
121
  checked={isSelected}
@@ -1 +1 @@
1
- {"version":3,"file":"TimeEntryList.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/TimeEntryList.svelte.ts"],"names":[],"mappings":"AASA,OAAO,EACL,KAAK,QAAQ,EAKb,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AAGpB,wCAAwC;AACxC,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iEAAiE;IACjE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;CAC3C;AAyID,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"TimeEntryList.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/TimeEntryList.svelte.ts"],"names":[],"mappings":"AASA,OAAO,EACL,KAAK,QAAQ,EAKb,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AAGpB,wCAAwC;AACxC,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iEAAiE;IACjE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;CAC3C;AA2ID,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-projects",
3
- "version": "0.34.4",
3
+ "version": "0.34.6",
4
4
  "description": "Provider-agnostic project management models (Issues, PRs, Repositories, Projects) for SMRT framework",
5
5
  "type": "module",
6
+ "smrtRawPrimitives": "strict",
6
7
  "main": "./dist/index.js",
7
8
  "types": "./dist/index.d.ts",
8
9
  "files": [
@@ -38,12 +39,12 @@
38
39
  "@happyvertical/repos": "^0.74.7",
39
40
  "@happyvertical/sql": "^0.74.7",
40
41
  "@happyvertical/utils": "^0.74.7",
41
- "@happyvertical/smrt-core": "0.34.4",
42
- "@happyvertical/smrt-config": "0.34.4",
43
- "@happyvertical/smrt-prompts": "0.34.4",
44
- "@happyvertical/smrt-tenancy": "0.34.4",
45
- "@happyvertical/smrt-ui": "0.34.4",
46
- "@happyvertical/smrt-types": "0.34.4"
42
+ "@happyvertical/smrt-config": "0.34.6",
43
+ "@happyvertical/smrt-core": "0.34.6",
44
+ "@happyvertical/smrt-prompts": "0.34.6",
45
+ "@happyvertical/smrt-tenancy": "0.34.6",
46
+ "@happyvertical/smrt-types": "0.34.6",
47
+ "@happyvertical/smrt-ui": "0.34.6"
47
48
  },
48
49
  "peerDependencies": {
49
50
  "svelte": "^5.18.0"
@@ -63,8 +64,8 @@
63
64
  "typescript": "^5.9.3",
64
65
  "vite": "^7.3.1",
65
66
  "vitest": "^4.0.17",
66
- "@happyvertical/smrt-cli": "0.34.4",
67
- "@happyvertical/smrt-vitest": "0.34.4"
67
+ "@happyvertical/smrt-cli": "0.34.6",
68
+ "@happyvertical/smrt-vitest": "0.34.6"
68
69
  },
69
70
  "keywords": [
70
71
  "ai",