@ketvietlab/design-system 0.1.25 → 0.1.30

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 (208) hide show
  1. package/README.md +130 -5
  2. package/dist/atlas/island-runtime.d.mts +2 -0
  3. package/dist/atlas/island-runtime.d.mts.map +1 -0
  4. package/dist/atlas/island-runtime.mjs +2 -0
  5. package/dist/atlas/island-runtime.mjs.map +1 -0
  6. package/dist/atlas/relation-select-hydration.d.ts +2 -0
  7. package/dist/atlas/relation-select-hydration.d.ts.map +1 -0
  8. package/dist/atlas/relation-select-hydration.js +40 -0
  9. package/dist/atlas/relation-select-hydration.js.map +1 -0
  10. package/dist/atlas-cli.d.ts.map +1 -1
  11. package/dist/atlas-cli.js +28 -10
  12. package/dist/atlas-cli.js.map +1 -1
  13. package/dist/catalogue/date-pickers.d.ts +6 -0
  14. package/dist/catalogue/date-pickers.d.ts.map +1 -0
  15. package/dist/catalogue/date-pickers.js +16 -0
  16. package/dist/catalogue/date-pickers.js.map +1 -0
  17. package/dist/catalogue/index.d.ts +7 -2
  18. package/dist/catalogue/index.d.ts.map +1 -1
  19. package/dist/catalogue/index.js +20 -4
  20. package/dist/catalogue/index.js.map +1 -1
  21. package/dist/catalogue/inventory-policy.json +49 -0
  22. package/dist/catalogue/inventory.generated.js +1 -1
  23. package/dist/catalogue/inventory.generated.js.map +1 -1
  24. package/dist/catalogue/inventory.generated.json +2815 -1108
  25. package/dist/catalogue/layering.d.ts +10 -0
  26. package/dist/catalogue/layering.d.ts.map +1 -0
  27. package/dist/catalogue/layering.js +67 -0
  28. package/dist/catalogue/layering.js.map +1 -0
  29. package/dist/catalogue/primitives.css +77 -0
  30. package/dist/catalogue/primitives.d.ts +34 -0
  31. package/dist/catalogue/primitives.d.ts.map +1 -0
  32. package/dist/catalogue/primitives.js +149 -0
  33. package/dist/catalogue/primitives.js.map +1 -0
  34. package/dist/catalogue/registry.d.ts.map +1 -1
  35. package/dist/catalogue/registry.js +18 -0
  36. package/dist/catalogue/registry.js.map +1 -1
  37. package/dist/catalogue/specimens.d.ts.map +1 -1
  38. package/dist/catalogue/specimens.js +142 -22
  39. package/dist/catalogue/specimens.js.map +1 -1
  40. package/dist/catalogue/styles.css +1 -0
  41. package/dist/contract/index.d.ts +2 -0
  42. package/dist/contract/index.d.ts.map +1 -1
  43. package/dist/contract/index.js +11 -0
  44. package/dist/contract/index.js.map +1 -1
  45. package/dist/contract/layout-audit.d.ts +32 -0
  46. package/dist/contract/layout-audit.d.ts.map +1 -0
  47. package/dist/contract/layout-audit.js +204 -0
  48. package/dist/contract/layout-audit.js.map +1 -0
  49. package/dist/forms/date-time/date-math.d.ts +23 -0
  50. package/dist/forms/date-time/date-math.d.ts.map +1 -0
  51. package/dist/forms/date-time/date-math.js +83 -0
  52. package/dist/forms/date-time/date-math.js.map +1 -0
  53. package/dist/forms/date-time/index.d.ts +37 -6
  54. package/dist/forms/date-time/index.d.ts.map +1 -1
  55. package/dist/forms/date-time/index.js +140 -6
  56. package/dist/forms/date-time/index.js.map +1 -1
  57. package/dist/forms/date-time/runtime.d.ts +4 -0
  58. package/dist/forms/date-time/runtime.d.ts.map +1 -0
  59. package/dist/forms/date-time/runtime.js +637 -0
  60. package/dist/forms/date-time/runtime.js.map +1 -0
  61. package/dist/forms/date-time/styles.css +251 -12
  62. package/dist/foundations/tokens.css +48 -28
  63. package/dist/index.d.ts +15 -4
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +8 -3
  66. package/dist/index.js.map +1 -1
  67. package/dist/interactions/ket-table/demo.d.ts +4 -0
  68. package/dist/interactions/ket-table/demo.d.ts.map +1 -0
  69. package/dist/interactions/ket-table/demo.js +147 -0
  70. package/dist/interactions/ket-table/demo.js.map +1 -0
  71. package/dist/interactions/ket-table/index.d.ts +199 -0
  72. package/dist/interactions/ket-table/index.d.ts.map +1 -0
  73. package/dist/interactions/ket-table/index.js +376 -0
  74. package/dist/interactions/ket-table/index.js.map +1 -0
  75. package/dist/interactions/ket-table/styles.css +282 -0
  76. package/dist/interactions/lightbox/demo.d.ts +3 -0
  77. package/dist/interactions/lightbox/demo.d.ts.map +1 -0
  78. package/dist/interactions/lightbox/demo.js +21 -0
  79. package/dist/interactions/lightbox/demo.js.map +1 -0
  80. package/dist/interactions/lightbox/index.d.ts +58 -0
  81. package/dist/interactions/lightbox/index.d.ts.map +1 -0
  82. package/dist/interactions/lightbox/index.js +220 -0
  83. package/dist/interactions/lightbox/index.js.map +1 -0
  84. package/dist/interactions/lightbox/styles.css +153 -0
  85. package/dist/interactions/relation-select/demo.d.ts +3 -0
  86. package/dist/interactions/relation-select/demo.d.ts.map +1 -0
  87. package/dist/interactions/relation-select/demo.js +36 -0
  88. package/dist/interactions/relation-select/demo.js.map +1 -0
  89. package/dist/interactions/relation-select/index.d.ts +87 -0
  90. package/dist/interactions/relation-select/index.d.ts.map +1 -0
  91. package/dist/interactions/relation-select/index.js +307 -0
  92. package/dist/interactions/relation-select/index.js.map +1 -0
  93. package/dist/interactions/relation-select/styles.css +299 -0
  94. package/dist/interactions/reorder-list/index.d.ts +23 -0
  95. package/dist/interactions/reorder-list/index.d.ts.map +1 -0
  96. package/dist/interactions/reorder-list/index.js +15 -0
  97. package/dist/interactions/reorder-list/index.js.map +1 -0
  98. package/dist/interactions/reorder-list/runtime.d.ts +5 -0
  99. package/dist/interactions/reorder-list/runtime.d.ts.map +1 -0
  100. package/dist/interactions/reorder-list/runtime.js +85 -0
  101. package/dist/interactions/reorder-list/runtime.js.map +1 -0
  102. package/dist/interactions/reorder-list/styles.css +33 -0
  103. package/dist/interactions/search-filter/demo.d.ts +3 -0
  104. package/dist/interactions/search-filter/demo.d.ts.map +1 -0
  105. package/dist/interactions/search-filter/demo.js +74 -0
  106. package/dist/interactions/search-filter/demo.js.map +1 -0
  107. package/dist/interactions/search-filter/index.d.ts +153 -0
  108. package/dist/interactions/search-filter/index.d.ts.map +1 -0
  109. package/dist/interactions/search-filter/index.js +824 -0
  110. package/dist/interactions/search-filter/index.js.map +1 -0
  111. package/dist/interactions/search-filter/styles.css +568 -0
  112. package/dist/layout-audit-cli.d.ts +7 -0
  113. package/dist/layout-audit-cli.d.ts.map +1 -0
  114. package/dist/layout-audit-cli.js +63 -0
  115. package/dist/layout-audit-cli.js.map +1 -0
  116. package/dist/layouts/app-navigation/index.d.ts +11 -5
  117. package/dist/layouts/app-navigation/index.d.ts.map +1 -1
  118. package/dist/layouts/app-navigation/index.js +5 -3
  119. package/dist/layouts/app-navigation/index.js.map +1 -1
  120. package/dist/layouts/app-navigation/styles.css +47 -0
  121. package/dist/layouts/grouped/styles.css +5 -36
  122. package/dist/layouts/layering/styles.css +159 -0
  123. package/dist/layouts/layout/index.d.ts +6 -0
  124. package/dist/layouts/layout/index.d.ts.map +1 -1
  125. package/dist/layouts/layout/index.js +6 -1
  126. package/dist/layouts/layout/index.js.map +1 -1
  127. package/dist/layouts/layout/styles.css +15 -6
  128. package/dist/layouts/page-identity/index.d.ts +10 -7
  129. package/dist/layouts/page-identity/index.d.ts.map +1 -1
  130. package/dist/layouts/page-identity/index.js +9 -4
  131. package/dist/layouts/page-identity/index.js.map +1 -1
  132. package/dist/layouts/shell/index.d.ts +34 -1
  133. package/dist/layouts/shell/index.d.ts.map +1 -1
  134. package/dist/layouts/shell/index.js +26 -3
  135. package/dist/layouts/shell/index.js.map +1 -1
  136. package/dist/layouts/shell/styles.css +284 -2
  137. package/dist/patterns/board-page/index.d.ts +1 -1
  138. package/dist/patterns/board-page/index.d.ts.map +1 -1
  139. package/dist/patterns/board-page/index.js +0 -1
  140. package/dist/patterns/board-page/index.js.map +1 -1
  141. package/dist/patterns/board-page/styles.css +0 -12
  142. package/dist/patterns/dashboard-page/index.d.ts +1 -1
  143. package/dist/patterns/dashboard-page/index.d.ts.map +1 -1
  144. package/dist/patterns/dashboard-page/index.js +0 -1
  145. package/dist/patterns/dashboard-page/index.js.map +1 -1
  146. package/dist/patterns/dashboard-page/styles.css +0 -13
  147. package/dist/patterns/data-table/styles.css +1 -1
  148. package/dist/patterns/form-page/index.d.ts +1 -1
  149. package/dist/patterns/form-page/index.d.ts.map +1 -1
  150. package/dist/patterns/form-page/index.js +0 -1
  151. package/dist/patterns/form-page/index.js.map +1 -1
  152. package/dist/patterns/form-page/styles.css +0 -12
  153. package/dist/patterns/list-page/index.d.ts +10 -4
  154. package/dist/patterns/list-page/index.d.ts.map +1 -1
  155. package/dist/patterns/list-page/index.js +10 -8
  156. package/dist/patterns/list-page/index.js.map +1 -1
  157. package/dist/patterns/list-page/responsive.css +1 -13
  158. package/dist/patterns/list-page/styles.css +20 -20
  159. package/dist/patterns/modal-sheet/index.d.ts +2 -0
  160. package/dist/patterns/modal-sheet/index.d.ts.map +1 -1
  161. package/dist/patterns/modal-sheet/index.js +3 -1
  162. package/dist/patterns/modal-sheet/index.js.map +1 -1
  163. package/dist/patterns/modal-sheet/styles.css +1 -1
  164. package/dist/patterns/page-shell/styles.css +0 -12
  165. package/dist/patterns/record-form/styles.css +34 -0
  166. package/dist/patterns/record-page/index.d.ts +1 -2
  167. package/dist/patterns/record-page/index.d.ts.map +1 -1
  168. package/dist/patterns/record-page/index.js +2 -3
  169. package/dist/patterns/record-page/index.js.map +1 -1
  170. package/dist/patterns/record-page/styles.css +0 -12
  171. package/dist/patterns/workspace-page/index.d.ts +1 -2
  172. package/dist/patterns/workspace-page/index.d.ts.map +1 -1
  173. package/dist/patterns/workspace-page/index.js +0 -1
  174. package/dist/patterns/workspace-page/index.js.map +1 -1
  175. package/dist/primitives/actions/index.d.ts +4 -0
  176. package/dist/primitives/actions/index.d.ts.map +1 -1
  177. package/dist/primitives/actions/index.js +2 -2
  178. package/dist/primitives/actions/index.js.map +1 -1
  179. package/dist/primitives/actions/styles.css +3 -1
  180. package/dist/primitives/feedback/styles.css +11 -6
  181. package/dist/primitives/field/index.d.ts +5 -0
  182. package/dist/primitives/field/index.d.ts.map +1 -1
  183. package/dist/primitives/field/index.js +1 -1
  184. package/dist/primitives/field/index.js.map +1 -1
  185. package/dist/primitives/field/native-control.d.ts.map +1 -1
  186. package/dist/primitives/field/native-control.js +3 -3
  187. package/dist/primitives/field/native-control.js.map +1 -1
  188. package/dist/primitives/field/styles.css +124 -2
  189. package/dist/primitives/progress/styles.css +3 -0
  190. package/dist/primitives/status/index.d.ts +12 -1
  191. package/dist/primitives/status/index.d.ts.map +1 -1
  192. package/dist/primitives/status/index.js +16 -1
  193. package/dist/primitives/status/index.js.map +1 -1
  194. package/dist/primitives/status/styles.css +34 -2
  195. package/dist/record/display/index.d.ts +6 -0
  196. package/dist/record/display/index.d.ts.map +1 -1
  197. package/dist/record/display/index.js +6 -1
  198. package/dist/record/display/index.js.map +1 -1
  199. package/dist/record/display/styles.css +25 -0
  200. package/dist/record/formatted-values/index.d.ts +2 -1
  201. package/dist/record/formatted-values/index.d.ts.map +1 -1
  202. package/dist/record/formatted-values/index.js +2 -1
  203. package/dist/record/formatted-values/index.js.map +1 -1
  204. package/dist/runtime/index.d.ts.map +1 -1
  205. package/dist/runtime/index.js +132 -2
  206. package/dist/runtime/index.js.map +1 -1
  207. package/dist/styles.css +1 -1
  208. package/package.json +4 -3
@@ -0,0 +1,282 @@
1
+ @layer ket.app {
2
+ :where([data-kv-design-system]) [data-ui="ket-table"] {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: var(--kv-space-2);
6
+ }
7
+ :where([data-kv-design-system]) [data-ui="ket-table"][data-busy="true"] {
8
+ opacity: 0.75;
9
+ }
10
+
11
+ :where([data-kv-design-system]) [data-ui="kt-scroll"] {
12
+ width: 100%;
13
+ overflow-x: auto;
14
+ border: 1px solid var(--kv-panel-border);
15
+ border-radius: var(--kv-radius-md);
16
+ background: var(--kv-table-bg);
17
+ }
18
+ :where([data-kv-design-system]) [data-ui="kt-tools"] {
19
+ display: flex;
20
+ justify-content: flex-end;
21
+ }
22
+ :where([data-kv-design-system]) [data-ui="kt-caption"] {
23
+ padding: var(--kv-space-3);
24
+ text-align: start;
25
+ color: var(--kv-text-secondary);
26
+ }
27
+ :where([data-kv-design-system])
28
+ [data-ui="ket-table"][data-gutter="compact"]
29
+ :is([data-ui="kt-col"], [data-ui="kt-cell"]) {
30
+ padding-inline: var(--kv-space-2);
31
+ }
32
+ :where([data-kv-design-system]) [data-ui="kt-grid"] {
33
+ width: 100%;
34
+ min-width: 38rem;
35
+ border-collapse: separate;
36
+ border-spacing: 0;
37
+ background: transparent;
38
+ font-size: var(--kv-text-sm);
39
+ }
40
+
41
+ :where([data-kv-design-system]) [data-ui="kt-col"] {
42
+ height: var(--kv-table-header-height);
43
+ padding: 0 var(--kv-space-3);
44
+ border-bottom: 1px solid var(--kv-table-border);
45
+ background: var(--kv-table-header-bg);
46
+ color: var(--kv-table-header-text);
47
+ font-size: var(--kv-text-2xs);
48
+ font-weight: var(--kv-weight-semibold);
49
+ text-align: left;
50
+ text-transform: none;
51
+ white-space: nowrap;
52
+ }
53
+ /* Badge deliberately shrinks-and-breaks (`overflow-wrap: anywhere`) for tight
54
+ spaces elsewhere in the system; inside a table cell that reads as one
55
+ character per line once the column gets squeezed. `nowrap` on the cell
56
+ alone doesn't stop it — Badge's own rule re-declares `white-space: normal`
57
+ on itself, which wins for its own text — so it needs overriding directly. */
58
+ :where([data-kv-design-system]) [data-ui="kt-cell"] [data-ui="badge"] {
59
+ white-space: nowrap;
60
+ }
61
+ :where([data-kv-design-system]) [data-ui="kt-col"][data-align="end"] {
62
+ text-align: right;
63
+ }
64
+ :where([data-kv-design-system]) [data-ui="kt-sort-button"] {
65
+ text-decoration: none;
66
+ display: inline-flex;
67
+ align-items: center;
68
+ gap: 0.25rem;
69
+ padding: 0;
70
+ border: 0;
71
+ background: transparent;
72
+ color: inherit;
73
+ font: inherit;
74
+ font-weight: inherit;
75
+ text-transform: inherit;
76
+ cursor: pointer;
77
+ }
78
+ :where([data-kv-design-system]) [data-ui="kt-sort-icon"] {
79
+ font-size: var(--kv-text-xs);
80
+ }
81
+
82
+ :where([data-kv-design-system]) [data-ui="kt-select-col"],
83
+ :where([data-kv-design-system]) [data-ui="kt-select-cell"] {
84
+ position: relative;
85
+ z-index: 1;
86
+ width: 2.5rem;
87
+ min-width: 2.5rem;
88
+ text-align: center;
89
+ }
90
+ :where([data-kv-design-system]) [data-ui="kt-select-col"] {
91
+ height: var(--kv-table-header-height);
92
+ border-bottom: 1px solid var(--kv-table-border);
93
+ background: var(--kv-table-header-bg);
94
+ }
95
+ :where([data-kv-design-system]) [data-ui="kt-select-cell"] {
96
+ height: var(--kv-row-height);
97
+ border-bottom: 1px solid var(--kv-table-border);
98
+ background: var(--kv-table-row-bg);
99
+ vertical-align: middle;
100
+ }
101
+ :where([data-kv-design-system]) [data-ui="kt-select-all"],
102
+ :where([data-kv-design-system]) [data-ui="kt-row-select"] {
103
+ width: 0.875rem;
104
+ height: 0.875rem;
105
+ margin: 0;
106
+ accent-color: var(--kv-color-accent);
107
+ }
108
+ :where([data-kv-design-system]) [data-ui="kt-select-persisted"] {
109
+ position: absolute;
110
+ width: 0;
111
+ height: 0;
112
+ overflow: hidden;
113
+ }
114
+
115
+ :where([data-kv-design-system]) [data-ui="kt-row"] {
116
+ position: relative;
117
+ background: var(--kv-table-row-bg);
118
+ }
119
+ :where([data-kv-design-system]) [data-ui="kt-row"]:hover {
120
+ background: var(--kv-surface-hover);
121
+ }
122
+ :where([data-kv-design-system]) [data-ui="kt-row"][data-selected="true"] {
123
+ background: var(--kv-accent-subtle);
124
+ }
125
+ :where([data-kv-design-system]) [data-ui="kt-cell"] {
126
+ height: var(--kv-row-height);
127
+ padding: 0.4375rem var(--kv-space-3);
128
+ border-bottom: 1px solid var(--kv-table-border);
129
+ white-space: nowrap;
130
+ vertical-align: middle;
131
+ }
132
+ :where([data-kv-design-system]) [data-ui="kt-cell"][data-align="end"] {
133
+ text-align: right;
134
+ }
135
+ :where([data-kv-design-system]) [data-ui="kt-row-link"] {
136
+ color: inherit;
137
+ text-decoration: none;
138
+ }
139
+ :where([data-kv-design-system]) [data-ui="kt-row-link"][data-primary="true"]::after {
140
+ position: absolute;
141
+ inset: 0;
142
+ content: "";
143
+ }
144
+ :where([data-kv-design-system])
145
+ [data-ui="kt-cell"]
146
+ :is(a:not([data-primary="true"]), button, input, select) {
147
+ position: relative;
148
+ z-index: 1;
149
+ }
150
+ :where([data-kv-design-system]) [data-ui="kt-person"] {
151
+ display: inline-flex;
152
+ align-items: center;
153
+ gap: var(--kv-space-2);
154
+ }
155
+
156
+ :where([data-kv-design-system]) [data-ui="kt-group-row"] [data-ui="kt-group-cell"] {
157
+ padding: var(--kv-space-2) var(--kv-space-3);
158
+ border-bottom: 1px solid var(--kv-table-border);
159
+ background: var(--kv-table-header-bg);
160
+ }
161
+ :where([data-kv-design-system]) [data-ui="kt-group-toggle"] {
162
+ text-decoration: none;
163
+ display: inline-flex;
164
+ align-items: center;
165
+ gap: var(--kv-space-2);
166
+ border: 0;
167
+ background: transparent;
168
+ color: inherit;
169
+ font: inherit;
170
+ font-weight: var(--kv-weight-semibold);
171
+ cursor: pointer;
172
+ }
173
+ :where([data-kv-design-system]) [data-ui="kt-group-indent"] {
174
+ display: inline-block;
175
+ inline-size: calc(var(--kt-group-depth, 0) * var(--kv-space-4));
176
+ }
177
+ :where([data-kv-design-system]) [data-ui="kt-group-count"] {
178
+ padding: 0 0.375rem;
179
+ border-radius: var(--kv-radius-sm);
180
+ background: var(--kv-panel-bg-subtle);
181
+ color: var(--kv-text-secondary);
182
+ font-size: var(--kv-text-2xs);
183
+ font-weight: var(--kv-weight-semibold);
184
+ }
185
+ :where([data-kv-design-system]) [data-ui="kt-group-pager"] td {
186
+ padding: var(--kv-space-2) var(--kv-space-3);
187
+ border-bottom: 1px solid var(--kv-table-border);
188
+ background: var(--kv-table-row-bg);
189
+ }
190
+
191
+ :where([data-kv-design-system]) [data-ui="kt-pager"] {
192
+ display: flex;
193
+ align-items: center;
194
+ justify-content: flex-end;
195
+ gap: var(--kv-space-2);
196
+ }
197
+ :where([data-kv-design-system]) [data-ui="kt-pager-label"] {
198
+ color: var(--kv-text-secondary);
199
+ font-size: var(--kv-text-sm);
200
+ }
201
+ :where([data-kv-design-system]) [data-ui="kt-pager-button"] {
202
+ text-decoration: none;
203
+ display: inline-flex;
204
+ align-items: center;
205
+ justify-content: center;
206
+ inline-size: 1.75rem;
207
+ block-size: 1.75rem;
208
+ border: 1px solid var(--kv-border-default);
209
+ border-radius: var(--kv-radius-sm);
210
+ background: var(--kv-panel-bg);
211
+ color: var(--kv-text-main);
212
+ cursor: pointer;
213
+ }
214
+ :where([data-kv-design-system]) [data-ui="kt-pager-button"]:is(:hover, :focus-visible):not(:disabled) {
215
+ background: var(--kv-surface-hover);
216
+ }
217
+ :where([data-kv-design-system]) [data-ui="kt-pager-button"]:disabled {
218
+ color: var(--kv-text-disabled);
219
+ cursor: not-allowed;
220
+ }
221
+ }
222
+
223
+ @media (max-width: 48rem) {
224
+ :where([data-kv-design-system]) [data-ui="ket-table"][data-responsive="stack"] [data-ui="kt-grid"] {
225
+ min-width: 0;
226
+ }
227
+ :where([data-kv-design-system]) [data-ui="ket-table"][data-responsive="stack"] thead {
228
+ position: absolute;
229
+ clip-path: inset(50%);
230
+ inline-size: 1px;
231
+ block-size: 1px;
232
+ overflow: hidden;
233
+ }
234
+ :where([data-kv-design-system]) [data-ui="ket-table"][data-responsive="stack"] [data-ui="kt-row"] {
235
+ display: grid;
236
+ padding: var(--kv-space-2);
237
+ border-bottom: 1px solid var(--kv-table-border);
238
+ }
239
+ :where([data-kv-design-system]) [data-ui="ket-table"][data-responsive="stack"] [data-ui="kt-cell"] {
240
+ display: flex;
241
+ min-height: var(--kv-row-height);
242
+ height: auto;
243
+ gap: var(--kv-space-3);
244
+ justify-content: space-between;
245
+ white-space: normal;
246
+ }
247
+ :where([data-kv-design-system]) [data-ui="ket-table"][data-responsive="stack"] [data-ui="kt-cell"]::before {
248
+ content: attr(data-label);
249
+ color: var(--kv-text-secondary);
250
+ font-weight: var(--kv-weight-semibold);
251
+ }
252
+ }
253
+
254
+ @layer ket.app {
255
+ :where([data-kv-design-system]) [data-ui="kt-selection-target"] {
256
+ position: relative;
257
+ z-index: 1;
258
+ display: inline-flex;
259
+ align-items: center;
260
+ justify-content: center;
261
+ min-inline-size: var(--kv-space-6);
262
+ min-block-size: var(--kv-space-6);
263
+ vertical-align: middle;
264
+ cursor: pointer;
265
+ }
266
+ :where([data-kv-design-system]) [data-ui="kt-scroll"]:focus-visible {
267
+ outline: 2px solid var(--kv-accent);
268
+ outline-offset: -2px;
269
+ }
270
+ @media (max-width: 48rem) {
271
+ :where([data-kv-design-system]) [data-ui="ket-table"] {
272
+ --kv-row-height: var(--kv-touch-target);
273
+ }
274
+ :where([data-kv-design-system]) [data-ui="kt-selection-target"] {
275
+ min-inline-size: var(--kv-touch-target);
276
+ min-block-size: var(--kv-touch-target);
277
+ }
278
+ :where([data-kv-design-system]) [data-ui="kt-select-cell"] {
279
+ padding-block: 0;
280
+ }
281
+ }
282
+ }
@@ -0,0 +1,3 @@
1
+ import type { LightboxConfig } from './index.tsx';
2
+ export declare const lightboxDemoConfig: LightboxConfig;
3
+ //# sourceMappingURL=demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/interactions/lightbox/demo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAQjD,eAAO,MAAM,kBAAkB,EAAE,cAiBhC,CAAA"}
@@ -0,0 +1,21 @@
1
+ // Inline SVG pictures, so the catalogue specimen needs no network or asset files.
2
+ const picture = (fill, label) => `data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" width="960" height="720" viewBox="0 0 960 720"><rect width="960" height="720" fill="${fill}"/><text x="480" y="380" font-family="sans-serif" font-size="64" fill="#fff" text-anchor="middle">${label}</text></svg>`)}`;
3
+ export const lightboxDemoConfig = {
4
+ thumbnails: 'all',
5
+ items: [
6
+ { src: picture('#1d4ed8', 'Front'), alt: 'Jacket, front', caption: 'Front' },
7
+ { src: picture('#b45309', 'Back'), alt: 'Jacket, back', caption: 'Back' },
8
+ { src: picture('#047857', 'Detail'), alt: 'Jacket, collar detail', caption: 'Collar detail' },
9
+ ],
10
+ labels: {
11
+ open: 'Open {alt}',
12
+ close: 'Close',
13
+ previous: 'Previous image',
14
+ next: 'Next image',
15
+ zoomIn: 'Zoom in',
16
+ zoomOut: 'Zoom out',
17
+ counter: '{index} / {total}',
18
+ empty: 'No image',
19
+ },
20
+ };
21
+ //# sourceMappingURL=demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/interactions/lightbox/demo.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CACtD,sBAAsB,kBAAkB,CACtC,+HAA+H,IAAI,qGAAqG,KAAK,eAAe,CAC7P,EAAE,CAAA;AAEL,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE;QACL,EAAE,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE;QAC5E,EAAE,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE;QACzE,EAAE,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE,OAAO,EAAE,eAAe,EAAE;KAC9F;IACD,MAAM,EAAE;QACN,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,gBAAgB;QAC1B,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,mBAAmB;QAC5B,KAAK,EAAE,UAAU;KAClB;CACF,CAAA"}
@@ -0,0 +1,58 @@
1
+ import type { IslandController, IslandProps, TemplateResult } from '@ketvietlab/ketjs-view';
2
+ export declare const HOOKS: readonly ['lightbox', 'lightbox-thumbs', 'lightbox-thumb', 'lightbox-empty', 'lightbox-layer', 'lightbox-backdrop', 'lightbox-toolbar', 'lightbox-counter', 'lightbox-tool', 'lightbox-stage', 'lightbox-image', 'lightbox-nav', 'lightbox-caption'];
3
+ export type LightboxItem = {
4
+ src: string;
5
+ alt: string;
6
+ /** A smaller rendition for the trigger; the full `src` is used when omitted. */
7
+ thumbnail?: string | null;
8
+ caption?: string | null;
9
+ };
10
+ export type LightboxLabels = {
11
+ /** The trigger's accessible name, `{alt}` interpolated. */
12
+ open: string;
13
+ close: string;
14
+ previous: string;
15
+ next: string;
16
+ zoomIn: string;
17
+ zoomOut: string;
18
+ /** `{index}` and `{total}` interpolated. */
19
+ counter: string;
20
+ /** Shown in place of a thumbnail when there are no items. */
21
+ empty?: string;
22
+ };
23
+ export type LightboxConfig = {
24
+ items: readonly LightboxItem[];
25
+ labels: LightboxLabels;
26
+ /** `first` shows one thumbnail that opens the whole set; `all` shows one per item. */
27
+ thumbnails?: 'first' | 'all';
28
+ size?: 'small' | 'medium' | 'large';
29
+ };
30
+ export type LightboxIslandProps = {
31
+ id: string;
32
+ config: LightboxConfig;
33
+ };
34
+ /**
35
+ * The viewer without a trigger of its own: whatever renders thumbnails (a record's
36
+ * image field, the rows of a variant editor) calls `open` with the set to show and
37
+ * places `layer()` anywhere in its own view. `attach` wires the keyboard once, for
38
+ * the lifetime of the island that owns it.
39
+ */
40
+ export type LightboxController = {
41
+ open: (items: readonly LightboxItem[], at: number, trigger: EventTarget | null) => void;
42
+ close: () => void;
43
+ isOpen: () => boolean;
44
+ layer: () => TemplateResult | null;
45
+ attach: (lifetime: AbortSignal) => void;
46
+ };
47
+ export declare function createLightbox(labels: LightboxLabels, id?: string): LightboxController;
48
+ /** A thumbnail — or one per item — that opens the whole set in the viewer. */
49
+ export declare function createLightboxView(props: LightboxIslandProps): IslandController;
50
+ /** One thumbnail button, for a view that drives its own `createLightbox` controller. */
51
+ export declare const LightboxThumb: (props: {
52
+ item: LightboxItem;
53
+ labels: Pick<LightboxLabels, 'open'>;
54
+ size?: 'small' | 'medium' | 'large';
55
+ onOpen: (trigger: EventTarget | null) => void;
56
+ }) => TemplateResult;
57
+ export declare const lightbox: (props: IslandProps) => IslandController;
58
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/interactions/lightbox/index.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE3F,eAAO,MAAM,KAAK,YAChB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,CACV,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAA;IAC9B,MAAM,EAAE,cAAc,CAAA;IACtB,sFAAsF;IACtF,UAAU,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;IAC5B,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAA;AAWxE;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IACvF,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,MAAM,EAAE,MAAM,OAAO,CAAA;IACrB,KAAK,EAAE,MAAM,cAAc,GAAG,IAAI,CAAA;IAClC,MAAM,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAA;CACxC,CAAA;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,SAAa,GAAG,kBAAkB,CA+P1F;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,gBAAgB,CAwC/E;AAED,wFAAwF;AACxF,eAAO,MAAM,aAAa,UAAW;IACnC,IAAI,EAAE,YAAY,CAAA;IAClB,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;IACnC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;CAC9C,KAAG,cAWH,CAAA;AAED,eAAO,MAAM,QAAQ,UAAW,WAAW,KAAG,gBACe,CAAA"}
@@ -0,0 +1,220 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ // A Fancybox-style image viewer, as a ketjs-view island: a thumbnail (or a row of
3
+ // them) that opens a full-screen stage over several images, with zoom (buttons,
4
+ // wheel, keyboard, tap), pan (drag), pinch-to-zoom (two fingers), previous/next
5
+ // (buttons, arrow keys) and a counter.
6
+ //
7
+ // Like relation-select, it owns reactive state rather than being a static control
8
+ // wired by the shared delegator — zoom level, pan offset and the open item all
9
+ // change on every pointer move. A consuming app mounts it through its own island
10
+ // runtime; everything it needs (the images, the labels) arrives as JSON props.
11
+ import { each, signal } from '@ketvietlab/ketjs-view';
12
+ export const HOOKS = [
13
+ 'lightbox',
14
+ 'lightbox-thumbs',
15
+ 'lightbox-thumb',
16
+ 'lightbox-empty',
17
+ 'lightbox-layer',
18
+ 'lightbox-backdrop',
19
+ 'lightbox-toolbar',
20
+ 'lightbox-counter',
21
+ 'lightbox-tool',
22
+ 'lightbox-stage',
23
+ 'lightbox-image',
24
+ 'lightbox-nav',
25
+ 'lightbox-caption',
26
+ ];
27
+ const MIN_ZOOM = 1;
28
+ const MAX_ZOOM = 4;
29
+ const ZOOM_STEP = 0.5;
30
+ const fill = (template, params) => template.replace(/\{(\w+)\}/g, (_, name) => String(params[name] ?? `{${name}}`));
31
+ const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
32
+ export function createLightbox(labels, id = 'lightbox') {
33
+ const items = signal([]);
34
+ const open = signal(false);
35
+ const index = signal(0);
36
+ const zoom = signal(MIN_ZOOM);
37
+ const pan = signal({ x: 0, y: 0 });
38
+ let returnFocus = null;
39
+ // Every pointer down on the stage, so two fingers read as a pinch and one as a pan.
40
+ const pointers = new Map();
41
+ let gesture = null;
42
+ const resetView = () => {
43
+ zoom.set(MIN_ZOOM);
44
+ pan.set({ x: 0, y: 0 });
45
+ };
46
+ const show = (set, at, trigger) => {
47
+ if (!set.length)
48
+ return;
49
+ returnFocus = trigger instanceof HTMLElement ? trigger : null;
50
+ items.set(set);
51
+ index.set(clamp(at, 0, set.length - 1));
52
+ resetView();
53
+ open.set(true);
54
+ queueMicrotask(() => {
55
+ if (typeof document === 'undefined')
56
+ return;
57
+ document.getElementById(`${id}-lightbox-close`)?.focus();
58
+ });
59
+ };
60
+ const hide = () => {
61
+ if (!open())
62
+ return;
63
+ open.set(false);
64
+ resetView();
65
+ pointers.clear();
66
+ gesture = null;
67
+ returnFocus?.focus();
68
+ returnFocus = null;
69
+ };
70
+ const step = (delta) => {
71
+ const total = items().length;
72
+ if (total < 2)
73
+ return;
74
+ index.set((index() + delta + total) % total);
75
+ resetView();
76
+ };
77
+ const zoomTo = (next) => {
78
+ const value = clamp(next, MIN_ZOOM, MAX_ZOOM);
79
+ zoom.set(value);
80
+ // Back at fit size there is nothing to pan across.
81
+ if (value === MIN_ZOOM)
82
+ pan.set({ x: 0, y: 0 });
83
+ };
84
+ const centerOf = () => {
85
+ const points = [...pointers.values()];
86
+ if (!points.length)
87
+ return { x: 0, y: 0 };
88
+ return {
89
+ x: points.reduce((sum, point) => sum + point.x, 0) / points.length,
90
+ y: points.reduce((sum, point) => sum + point.y, 0) / points.length,
91
+ };
92
+ };
93
+ const distanceOf = () => {
94
+ const [a, b] = [...pointers.values()];
95
+ return a && b ? Math.hypot(a.x - b.x, a.y - b.y) : 0;
96
+ };
97
+ const endPointer = (event, completed) => {
98
+ // At fit size a horizontal swipe with one finger moves to the neighbouring image.
99
+ if (completed && gesture && pointers.size === 1 && zoom() === MIN_ZOOM && gesture.distance === null) {
100
+ const dx = event.clientX - gesture.start.x;
101
+ if (Math.abs(dx) > 60 && Math.abs(dx) > Math.abs(event.clientY - gesture.start.y))
102
+ step(dx < 0 ? 1 : -1);
103
+ }
104
+ pointers.delete(event.pointerId);
105
+ event.currentTarget?.releasePointerCapture?.(event.pointerId);
106
+ if (!pointers.size) {
107
+ // Keep `moved` until the click that follows this pointerup has been read.
108
+ const finished = gesture;
109
+ if (finished && completed)
110
+ setTimeout(() => (gesture === finished ? (gesture = null) : null), 0);
111
+ else
112
+ gesture = null;
113
+ return;
114
+ }
115
+ // One finger lifted from a pinch: carry on as a pan from where things are now.
116
+ if (gesture)
117
+ gesture = { ...gesture, start: centerOf(), origin: pan(), zoom: zoom(), distance: null };
118
+ };
119
+ const layer = () => {
120
+ const set = items();
121
+ const item = set[index()];
122
+ if (!open() || !item)
123
+ return null;
124
+ const scale = zoom();
125
+ const offset = pan();
126
+ const many = set.length > 1;
127
+ return (_jsxs("div", { "data-ui": "lightbox-layer", role: "dialog", "aria-modal": "true", "aria-label": item.alt, id: `${id}-lightbox`, children: [_jsx("div", { "data-ui": "lightbox-backdrop", "aria-hidden": "true", onClick: hide }), _jsxs("div", { "data-ui": "lightbox-toolbar", children: [_jsx("span", { "data-ui": "lightbox-counter", "aria-live": "polite", children: many ? fill(labels.counter, { index: index() + 1, total: set.length }) : '' }), _jsx("button", { type: "button", "data-ui": "lightbox-tool", "data-tool": "zoom-out", "aria-label": labels.zoomOut, title: labels.zoomOut, disabled: scale <= MIN_ZOOM, onClick: () => zoomTo(scale - ZOOM_STEP), children: "\u2212" }), _jsx("button", { type: "button", "data-ui": "lightbox-tool", "data-tool": "zoom-in", "aria-label": labels.zoomIn, title: labels.zoomIn, disabled: scale >= MAX_ZOOM, onClick: () => zoomTo(scale + ZOOM_STEP), children: "+" }), _jsx("button", { type: "button", "data-ui": "lightbox-tool", "data-tool": "close", id: `${id}-lightbox-close`, "aria-label": labels.close, title: labels.close, onClick: hide, children: "\u00D7" })] }), _jsx("div", { role: "presentation", "data-ui": "lightbox-stage", "data-zoomed": String(scale > MIN_ZOOM), onClick: (event) => {
128
+ // A click on the empty stage around the picture closes, like the backdrop.
129
+ if (event.target === event.currentTarget && !gesture?.moved)
130
+ hide();
131
+ }, onWheel: (event) => {
132
+ event.preventDefault();
133
+ zoomTo(zoom() * (event.deltaY < 0 ? 1.15 : 1 / 1.15));
134
+ }, onPointerDown: (event) => {
135
+ pointers.set(event.pointerId, { x: event.clientX, y: event.clientY });
136
+ event.currentTarget.setPointerCapture?.(event.pointerId);
137
+ gesture = {
138
+ start: centerOf(),
139
+ origin: pan(),
140
+ zoom: zoom(),
141
+ distance: pointers.size > 1 ? distanceOf() : null,
142
+ moved: gesture?.moved === true && pointers.size > 1,
143
+ };
144
+ }, onPointerMove: (event) => {
145
+ if (!gesture || !pointers.has(event.pointerId))
146
+ return;
147
+ pointers.set(event.pointerId, { x: event.clientX, y: event.clientY });
148
+ const center = centerOf();
149
+ const dx = center.x - gesture.start.x;
150
+ const dy = center.y - gesture.start.y;
151
+ if (Math.abs(dx) + Math.abs(dy) > 4)
152
+ gesture.moved = true;
153
+ if (pointers.size > 1 && gesture.distance) {
154
+ // Pinch: scale by how far the fingers spread since they both came down.
155
+ zoomTo(gesture.zoom * (distanceOf() / gesture.distance));
156
+ gesture.moved = true;
157
+ }
158
+ if (zoom() > MIN_ZOOM)
159
+ pan.set({ x: gesture.origin.x + dx, y: gesture.origin.y + dy });
160
+ }, onPointerUp: (event) => endPointer(event, true), onPointerCancel: (event) => endPointer(event, false), children: _jsx("img", { "data-ui": "lightbox-image", src: item.src, alt: item.alt, draggable: "false", style: `transform: translate(${offset.x}px, ${offset.y}px) scale(${scale})`, onClick: () => {
161
+ // A tap (not the end of a pan or pinch) toggles between fit and 2×.
162
+ if (!gesture?.moved)
163
+ zoomTo(zoom() > MIN_ZOOM ? MIN_ZOOM : 2);
164
+ } }) }), many ? (_jsx("button", { type: "button", "data-ui": "lightbox-nav", "data-direction": "previous", "aria-label": labels.previous, title: labels.previous, onClick: () => step(-1), children: "\u2039" })) : null, many ? (_jsx("button", { type: "button", "data-ui": "lightbox-nav", "data-direction": "next", "aria-label": labels.next, title: labels.next, onClick: () => step(1), children: "\u203A" })) : null, item.caption ? _jsx("p", { "data-ui": "lightbox-caption", children: item.caption }) : null] }));
165
+ };
166
+ const attach = (lifetime) => {
167
+ // Capture phase: an enclosing record modal also closes on Escape, and the
168
+ // viewer on top of it must be the only layer that answers.
169
+ document.addEventListener('keydown', (event) => {
170
+ if (!open())
171
+ return;
172
+ if (event.key === 'Escape')
173
+ hide();
174
+ else if (event.key === 'ArrowLeft')
175
+ step(-1);
176
+ else if (event.key === 'ArrowRight')
177
+ step(1);
178
+ else if (event.key === '+' || event.key === '=')
179
+ zoomTo(zoom() + ZOOM_STEP);
180
+ else if (event.key === '-')
181
+ zoomTo(zoom() - ZOOM_STEP);
182
+ else
183
+ return;
184
+ event.preventDefault();
185
+ event.stopImmediatePropagation();
186
+ }, { signal: lifetime, capture: true });
187
+ lifetime.addEventListener('abort', () => {
188
+ open.set(false);
189
+ pointers.clear();
190
+ gesture = null;
191
+ });
192
+ };
193
+ return { open: show, close: hide, isOpen: () => open(), layer, attach };
194
+ }
195
+ /** A thumbnail — or one per item — that opens the whole set in the viewer. */
196
+ export function createLightboxView(props) {
197
+ const { id, config } = props;
198
+ const labels = config.labels;
199
+ const items = config.items;
200
+ const viewer = createLightbox(labels, id);
201
+ const thumbs = () => {
202
+ const shown = config.thumbnails === 'all' ? items : items.slice(0, 1);
203
+ if (!shown.length)
204
+ return (_jsx("span", { "data-ui": "lightbox-empty", "data-size": config.size ?? 'medium', children: labels.empty ?? '' }));
205
+ return (_jsx("div", { "data-ui": "lightbox-thumbs", children: each([...shown], (item) => item.src, (item) => LightboxThumb({
206
+ item,
207
+ labels,
208
+ size: config.size,
209
+ onOpen: (trigger) => viewer.open(items, items.indexOf(item), trigger),
210
+ })) }));
211
+ };
212
+ return {
213
+ view: () => (_jsxs("div", { "data-ui": "lightbox", id: id, children: [thumbs(), viewer.layer()] })),
214
+ mount: ({ lifetime }) => viewer.attach(lifetime),
215
+ };
216
+ }
217
+ /** One thumbnail button, for a view that drives its own `createLightbox` controller. */
218
+ export const LightboxThumb = (props) => (_jsx("button", { type: "button", "data-ui": "lightbox-thumb", "data-size": props.size ?? 'medium', "aria-label": fill(props.labels.open, { alt: props.item.alt }), "aria-haspopup": "dialog", onClick: (event) => props.onOpen(event.currentTarget), children: _jsx("img", { src: props.item.thumbnail ?? props.item.src, alt: "", loading: "lazy", decoding: "async" }) }));
219
+ export const lightbox = (props) => createLightboxView(props);
220
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/interactions/lightbox/index.tsx"],"names":[],"mappings":"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"}