@box/blueprint-web 12.17.2 → 12.19.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.
@@ -242,8 +242,131 @@
242
242
  opacity:1;
243
243
  }
244
244
  }
245
- .bp_base_button_module_button--4b9b3{
246
- border-radius:var(--radius-2);
245
+ .bp_base_button_module_button--45d14[data-modern=true]{
246
+ --button-border-radius:var(--bp-radius-10);
247
+ }
248
+ .bp_base_button_module_button--45d14[data-modern=true]:not(:disabled)[data-focus-visible]{
249
+ box-shadow:0 0 0 var(--border-1, 1px) var(--background-background), 0 0 0 var(--border-3) var(--bp-outline-focus-on-light);
250
+ }
251
+ .bp_base_button_module_button--45d14[data-modern=true].bp_base_button_module_primary--45d14{
252
+ --button-color:var(--bp-text-text-brand-on-color);
253
+ --button-background:var(--bp-surface-surface-brand);
254
+ --button-border:var(--bp-border-01) solid var(--bp-surface-surface-brand);
255
+ --button-disabled-background:var(--bp-surface-surface-brand-disabled);
256
+ --button-focus-or-hover-background:var(--bp-surface-surface-brand-hover);
257
+ --button-focus-or-hover-border:var(--bp-border-01) solid var(--bp-surface-surface-brand-hover);
258
+ --button-active-background:var(--bp-surface-surface-brand-pressed);
259
+ --button-active-border:var(--bp-border-01) solid var(--bp-surface-surface-brand-pressed);
260
+ }
261
+ .bp_base_button_module_button--45d14[data-modern=true].bp_base_button_module_secondary--45d14{
262
+ --button-color:var(--bp-text-text-on-light);
263
+ --button-background:var(--bp-surface-cta-surface-secondary);
264
+ --button-border:var(--bp-border-01) solid var(--bp-border-cta-border-secondary);
265
+ --button-focus-or-hover-background:var(--bp-surface-cta-surface-secondary-hover);
266
+ --button-focus-or-hover-border:var(--bp-border-01) solid var(--bp-border-cta-border-secondary-hover);
267
+ --button-active-background:var(--bp-surface-cta-surface-secondary-pressed);
268
+ --button-active-border:var(--bp-border-01) solid var(--bp-border-cta-border-secondary-pressed);
269
+ }
270
+ .bp_base_button_module_button--45d14[data-modern=true].bp_base_button_module_tertiary--45d14{
271
+ --button-color:var(--bp-text-cta-link);
272
+ --button-background:var(--bp-surface-cta-surface-tertiary);
273
+ --button-focus-or-hover-background:var(--bp-surface-cta-surface-tertiary-hover);
274
+ --button-active-background:var(--bp-surface-cta-surface-tertiary-pressed);
275
+ }
276
+ .bp_base_button_module_button--45d14[data-modern=true].bp_base_button_module_outline--45d14{
277
+ --button-color:var(--bp-text-text-on-light);
278
+ --button-background:var(-bp-surface-cta-surface-outline);
279
+ --button-border:var(--bp-border-01) solid var(--bp-border-cta-border-outline);
280
+ --button-focus-or-hover-background:var(--bp-surface-cta-surface-outline-hover);
281
+ --button-focus-or-hover-border:var(--bp-border-01) solid var(--bp-border-cta-border-outline-hover);
282
+ --button-active-background:var(--bp-surface-cta-surface-outline-pressed);
283
+ --button-active-border:var(--bp-border-01) solid var(--bp-border-cta-border-outline-pressed);
284
+ }
285
+ .bp_base_button_module_button--45d14[data-modern=true].bp_base_button_module_small--45d14{
286
+ --button-small-gap:var(--bp-space-010);
287
+ --button-small-min-height:var(--bp-size-080);
288
+ --button-small-padding:0 var(--bp-size-040);
289
+ }
290
+ .bp_base_button_module_button--45d14[data-modern=true].bp_base_button_module_small--45d14.bp_base_button_module_isIconButton--45d14{
291
+ --icon-button-small-width:var(--bp-size-080);
292
+ --icon-button-small-height:var(--bp-size-080);
293
+ --icon-button-small-padding:0 calc((var(--bp-size-080) - var(--bp-size-040))/2);
294
+ }
295
+ .bp_base_button_module_button--45d14[data-modern=true].bp_base_button_module_large--45d14{
296
+ --button-large-gap:var(--bp-space-020);
297
+ --button-large-min-height:var(--bp-size-100);
298
+ --button-large-padding:0 var(--bp-size-040);
299
+ }
300
+ .bp_base_button_module_button--45d14[data-modern=true].bp_base_button_module_large--45d14.bp_base_button_module_isIconButton--45d14{
301
+ --icon-button-large-width:var(--bp-size-100);
302
+ --icon-button-large-height:var(--bp-size-100);
303
+ --icon-button-large-padding:0 calc((var(--bp-size-100) - var(--bp-size-050))/2);
304
+ }
305
+
306
+ .bp_base_button_module_button--45d14[data-modern=false]{
307
+ --button-border-radius:var(--radius-2);
308
+ }
309
+ .bp_base_button_module_button--45d14[data-modern=false]:not(:disabled)[data-focus-visible]{
310
+ box-shadow:0 0 0 var(--border-1, 1px) var(--background-background), 0 0 0 var(--border-3) var(--outline-focus-on-light);
311
+ }
312
+ .bp_base_button_module_button--45d14[data-modern=false].bp_base_button_module_primary--45d14{
313
+ --button-color:var(--text-text-brand-on-color);
314
+ --button-background:var(--surface-surface-brand);
315
+ --button-border:var(--border-1) solid var(--surface-surface-brand);
316
+ --button-disabled-background:var(--surface-surface-brand-disabled);
317
+ --button-focus-or-hover-background:var(--surface-surface-brand-hover);
318
+ --button-focus-or-hover-border:var(--border-1) solid var(--surface-surface-brand-hover);
319
+ --button-active-background:var(--surface-surface-brand-pressed);
320
+ --button-active-border:var(--border-1) solid var(--surface-surface-brand-pressed);
321
+ }
322
+ .bp_base_button_module_button--45d14[data-modern=false].bp_base_button_module_secondary--45d14{
323
+ --button-color:var(--text-text-on-light);
324
+ --button-background:var(--surface-cta-surface-secondary);
325
+ --button-border:var(--border-1) solid var(--border-cta-border-secondary);
326
+ --button-focus-or-hover-background:var(--surface-cta-surface-secondary-hover);
327
+ --button-focus-or-hover-border:var(--border-1) solid var(--border-cta-border-secondary-hover);
328
+ --button-active-background:var(--surface-cta-surface-secondary-pressed);
329
+ --button-active-border:var(--border-1) solid var(--border-cta-border-secondary-pressed);
330
+ }
331
+ .bp_base_button_module_button--45d14[data-modern=false].bp_base_button_module_tertiary--45d14{
332
+ --button-color:var(--text-cta-link);
333
+ --button-background:#0000;
334
+ --button-border:var(--border-1) solid #0000;
335
+ --button-focus-or-hover-background:var(--surface-cta-surface-tertiary-hover);
336
+ --button-active-background:var(--surface-cta-surface-tertiary-pressed);
337
+ }
338
+ .bp_base_button_module_button--45d14[data-modern=false].bp_base_button_module_outline--45d14{
339
+ --button-color:var(--text-text-on-light);
340
+ --button-background:var(--surface-cta-surface-outline);
341
+ --button-border:var(--border-1) solid var(--border-cta-border-outline);
342
+ --button-focus-or-hover-background:var(--surface-cta-surface-outline-hover);
343
+ --button-focus-or-hover-border:var(--border-1) solid var(--border-cta-border-outline-hover);
344
+ --button-active-background:var(--surface-cta-surface-outline-pressed);
345
+ --button-active-border:var(--border-1) solid var(--border-cta-border-outline-pressed);
346
+ }
347
+ .bp_base_button_module_button--45d14[data-modern=false].bp_base_button_module_small--45d14{
348
+ --button-small-gap:var(--space-1);
349
+ --button-small-min-height:var(--size-8);
350
+ --button-small-padding:0 var(--space-4);
351
+ }
352
+ .bp_base_button_module_button--45d14[data-modern=false].bp_base_button_module_small--45d14.bp_base_button_module_isIconButton--45d14{
353
+ --icon-button-small-width:var(--size-8);
354
+ --icon-button-small-height:var(--size-8);
355
+ --icon-button-small-padding:0 calc((var(--space-8) - var(--space-4))/2);
356
+ }
357
+ .bp_base_button_module_button--45d14[data-modern=false].bp_base_button_module_large--45d14{
358
+ --button-large-gap:var(--space-2);
359
+ --button-large-min-height:var(--size-10);
360
+ --button-large-padding:0 var(--space-4);
361
+ }
362
+ .bp_base_button_module_button--45d14[data-modern=false].bp_base_button_module_large--45d14.bp_base_button_module_isIconButton--45d14{
363
+ --icon-button-large-width:var(--size-10);
364
+ --icon-button-large-height:var(--size-10);
365
+ --icon-button-large-padding:0 calc((var(--space-10) - var(--space-5))/2);
366
+ }
367
+
368
+ .bp_base_button_module_button--45d14{
369
+ border-radius:var(--button-border-radius);
247
370
  cursor:pointer;
248
371
  font-family:var(--body-default-bold-font-family);
249
372
  font-size:var(--body-default-bold-font-size);
@@ -259,95 +382,92 @@
259
382
  user-select:none;
260
383
  white-space:nowrap;
261
384
  }
262
- .bp_base_button_module_button--4b9b3,.bp_base_button_module_button--4b9b3 .bp_base_button_module_icon--4b9b3{
385
+ .bp_base_button_module_button--45d14,.bp_base_button_module_button--45d14 .bp_base_button_module_icon--45d14{
263
386
  align-items:center;
264
387
  display:flex;
265
388
  }
266
- .bp_base_button_module_button--4b9b3:not(:disabled)[data-focus-visible]{
267
- box-shadow:0 0 0 var(--border-1, 1px) var(--background-background), 0 0 0 var(--border-3) var(--outline-focus-on-light);
268
- }
269
- .bp_base_button_module_button--4b9b3:disabled{
389
+ .bp_base_button_module_button--45d14:disabled{
270
390
  opacity:.3;
271
391
  }
272
- .bp_base_button_module_button--4b9b3.bp_base_button_module_primary--4b9b3{
273
- background:var(--surface-surface-brand);
274
- border:var(--border-1) solid var(--surface-surface-brand);
275
- color:var(--text-text-brand-on-color);
392
+ .bp_base_button_module_button--45d14.bp_base_button_module_primary--45d14{
393
+ background:var(--button-background);
394
+ border:var(--button-border);
395
+ color:var(--button-color);
276
396
  }
277
- .bp_base_button_module_button--4b9b3.bp_base_button_module_primary--4b9b3:disabled{
278
- background:var(--surface-surface-brand-disabled);
397
+ .bp_base_button_module_button--45d14.bp_base_button_module_primary--45d14:disabled{
398
+ background:var(--button-disabled-background);
279
399
  }
280
- .bp_base_button_module_button--4b9b3.bp_base_button_module_primary--4b9b3:not(:disabled):hover,.bp_base_button_module_button--4b9b3.bp_base_button_module_primary--4b9b3:not(:disabled)[data-focus-visible]{
281
- background:var(--surface-surface-brand-hover);
282
- border:var(--border-1) solid var(--surface-surface-brand-hover);
400
+ .bp_base_button_module_button--45d14.bp_base_button_module_primary--45d14:not(:disabled):hover,.bp_base_button_module_button--45d14.bp_base_button_module_primary--45d14:not(:disabled)[data-focus-visible]{
401
+ background:var(--button-focus-or-hover-background);
402
+ border:var(--button-focus-or-hover-border);
283
403
  }
284
- .bp_base_button_module_button--4b9b3.bp_base_button_module_primary--4b9b3:not(:disabled):active{
285
- background:var(--surface-surface-brand-pressed);
286
- border:var(--border-1) solid var(--surface-surface-brand-pressed);
404
+ .bp_base_button_module_button--45d14.bp_base_button_module_primary--45d14:not(:disabled):active{
405
+ background:var(--button-active-background);
406
+ border:var(--button-active-border);
287
407
  }
288
- .bp_base_button_module_button--4b9b3.bp_base_button_module_secondary--4b9b3{
289
- background:var(--surface-cta-surface-secondary);
290
- border:var(--border-1) solid var(--border-cta-border-secondary);
291
- color:var(--text-text-on-light);
408
+ .bp_base_button_module_button--45d14.bp_base_button_module_secondary--45d14{
409
+ background:var(--button-background);
410
+ border:var(--button-border);
411
+ color:var(--button-color);
292
412
  }
293
- .bp_base_button_module_button--4b9b3.bp_base_button_module_secondary--4b9b3:not(:disabled):hover,.bp_base_button_module_button--4b9b3.bp_base_button_module_secondary--4b9b3:not(:disabled)[data-focus-visible]{
294
- background:var(--surface-cta-surface-secondary-hover);
295
- border:var(--border-1) solid var(--border-cta-border-secondary-hover);
413
+ .bp_base_button_module_button--45d14.bp_base_button_module_secondary--45d14:not(:disabled):hover,.bp_base_button_module_button--45d14.bp_base_button_module_secondary--45d14:not(:disabled)[data-focus-visible]{
414
+ background:var(--button-focus-or-hover-background);
415
+ border:var(--button-focus-or-hover-border);
296
416
  }
297
- .bp_base_button_module_button--4b9b3.bp_base_button_module_secondary--4b9b3:not(:disabled):active{
298
- background:var(--surface-cta-surface-secondary-pressed);
299
- border:var(--border-1) solid var(--border-cta-border-secondary-pressed);
417
+ .bp_base_button_module_button--45d14.bp_base_button_module_secondary--45d14:not(:disabled):active{
418
+ background:var(--button-active-background);
419
+ border:var(--button-active-border);
300
420
  }
301
- .bp_base_button_module_button--4b9b3.bp_base_button_module_tertiary--4b9b3{
302
- background:#0000;
303
- border:var(--border-1) solid #0000;
304
- color:var(--text-cta-link);
421
+ .bp_base_button_module_button--45d14.bp_base_button_module_tertiary--45d14{
422
+ background:var(--button-background);
423
+ border:var(--button-border);
424
+ color:var(--button-color);
305
425
  }
306
- .bp_base_button_module_button--4b9b3.bp_base_button_module_tertiary--4b9b3:not(:disabled):hover,.bp_base_button_module_button--4b9b3.bp_base_button_module_tertiary--4b9b3:not(:disabled)[data-focus-visible]{
307
- background:var(--surface-cta-surface-tertiary-hover);
426
+ .bp_base_button_module_button--45d14.bp_base_button_module_tertiary--45d14:not(:disabled):hover,.bp_base_button_module_button--45d14.bp_base_button_module_tertiary--45d14:not(:disabled)[data-focus-visible]{
427
+ background:var(--button-focus-or-hover-background);
308
428
  }
309
- .bp_base_button_module_button--4b9b3.bp_base_button_module_tertiary--4b9b3:not(:disabled):active{
310
- background:var(--surface-cta-surface-tertiary-pressed);
429
+ .bp_base_button_module_button--45d14.bp_base_button_module_tertiary--45d14:not(:disabled):active{
430
+ background:var(--button-active-background);
311
431
  }
312
- .bp_base_button_module_button--4b9b3.bp_base_button_module_outline--4b9b3{
313
- background:#0000;
314
- border:var(--border-1) solid var(--border-cta-border-outline);
315
- color:var(--text-text-on-light);
432
+ .bp_base_button_module_button--45d14.bp_base_button_module_outline--45d14{
433
+ background:var(--button-background);
434
+ border:var(--button-border);
435
+ color:var(--button-color);
316
436
  }
317
- .bp_base_button_module_button--4b9b3.bp_base_button_module_outline--4b9b3:not(:disabled):hover,.bp_base_button_module_button--4b9b3.bp_base_button_module_outline--4b9b3:not(:disabled)[data-focus-visible]{
318
- background:var(--surface-cta-surface-outline-hover);
319
- border:var(--border-1) solid var(--border-cta-border-outline-hover);
437
+ .bp_base_button_module_button--45d14.bp_base_button_module_outline--45d14:not(:disabled):hover,.bp_base_button_module_button--45d14.bp_base_button_module_outline--45d14:not(:disabled)[data-focus-visible]{
438
+ background:var(--button-focus-or-hover-background);
439
+ border:var(--button-focus-or-hover-border);
320
440
  }
321
- .bp_base_button_module_button--4b9b3.bp_base_button_module_outline--4b9b3:not(:disabled):active{
322
- background:var(--surface-cta-surface-outline-pressed);
323
- border:var(--border-1) solid var(--border-cta-border-outline-pressed);
441
+ .bp_base_button_module_button--45d14.bp_base_button_module_outline--45d14:not(:disabled):active{
442
+ background:var(--button-active-background);
443
+ border:var(--button-active-border);
324
444
  }
325
- .bp_base_button_module_button--4b9b3.bp_base_button_module_small--4b9b3{
326
- gap:var(--space-1);
327
- min-height:var(--size-8);
328
- padding:0 var(--space-4);
445
+ .bp_base_button_module_button--45d14.bp_base_button_module_small--45d14{
446
+ gap:var(--button-small-gap);
447
+ min-height:var(--button-small-min-height);
448
+ padding:var(--button-small-padding);
329
449
  }
330
- .bp_base_button_module_button--4b9b3.bp_base_button_module_small--4b9b3.bp_base_button_module_isIconButton--4b9b3{
331
- height:var(--size-8);
450
+ .bp_base_button_module_button--45d14.bp_base_button_module_small--45d14.bp_base_button_module_isIconButton--45d14{
451
+ height:var(--icon-button-small-height);
332
452
  min-height:unset;
333
- padding:0 calc((var(--space-8) - var(--space-4))/2);
334
- width:var(--size-8);
453
+ padding:var(--icon-button-small-padding);
454
+ width:var(--icon-button-small-width);
335
455
  }
336
- .bp_base_button_module_button--4b9b3.bp_base_button_module_large--4b9b3{
337
- gap:var(--space-2);
338
- min-height:var(--size-10);
339
- padding:0 var(--space-4);
456
+ .bp_base_button_module_button--45d14.bp_base_button_module_large--45d14{
457
+ gap:var(--button-large-gap);
458
+ min-height:var(--button-large-min-height);
459
+ padding:var(--button-large-padding);
340
460
  }
341
- .bp_base_button_module_button--4b9b3.bp_base_button_module_large--4b9b3.bp_base_button_module_isIconButton--4b9b3{
342
- height:var(--size-10);
343
- padding:0 calc((var(--space-10) - var(--space-5))/2);
344
- width:var(--size-10);
461
+ .bp_base_button_module_button--45d14.bp_base_button_module_large--45d14.bp_base_button_module_isIconButton--45d14{
462
+ height:var(--icon-button-large-height);
463
+ padding:var(--icon-button-large-padding);
464
+ width:var(--icon-button-large-width);
345
465
  }
346
- .bp_base_button_module_button--4b9b3.bp_base_button_module_hide--4b9b3{
466
+ .bp_base_button_module_button--45d14.bp_base_button_module_hide--45d14{
347
467
  pointer-events:none;
348
468
  position:relative;
349
469
  }
350
- .bp_base_button_module_button--4b9b3.bp_base_button_module_hide--4b9b3 span{
470
+ .bp_base_button_module_button--45d14.bp_base_button_module_hide--45d14 span{
351
471
  color:#0000;
352
472
  opacity:0;
353
473
  }
@@ -6908,6 +7028,147 @@ div[data-radix-popper-content-wrapper]:has([role=menu]):has([data-state=open]):h
6908
7028
  background:var(--surface-toggletext-surface-on-pressed);
6909
7029
  border-color:var(--border-toggletext-border-on-pressed);
6910
7030
  }
7031
+
7032
+ .bp_time_picker_module_timePicker--7ed90{
7033
+ --time-picker-padding-right:var(--space-4);
7034
+ --time-picker-border-width:var(--border-2);
7035
+ --time-picker-focused-border-color:var(--outline-focus-on-light);
7036
+ --clear-time-picker-button-right:var(--size-11);
7037
+ --time-picker-icon-button-size:var(--size-6);
7038
+ --time-picker-icon-size:var(--size-4);
7039
+ width:100%;
7040
+ }
7041
+ .bp_time_picker_module_timePicker--7ed90.bp_time_picker_module_disabled--7ed90{
7042
+ opacity:60%;
7043
+ pointer-events:none;
7044
+ -webkit-user-select:none;
7045
+ user-select:none;
7046
+ }
7047
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_label--7ed90{
7048
+ cursor:default;
7049
+ display:block;
7050
+ font-family:var(--body-default-bold-font-family);
7051
+ font-size:var(--body-default-bold-font-size);
7052
+ font-weight:var(--body-default-bold-font-weight);
7053
+ letter-spacing:var(--body-default-bold-letter-spacing);
7054
+ line-height:var(--body-default-bold-line-height);
7055
+ margin-block-end:var(--space-2);
7056
+ -webkit-text-decoration:var(--body-default-bold-text-decoration);
7057
+ text-decoration:var(--body-default-bold-text-decoration);
7058
+ text-transform:var(--body-default-bold-text-case);
7059
+ width:-moz-fit-content;
7060
+ width:fit-content;
7061
+ }
7062
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_group--7ed90{
7063
+ align-items:center;
7064
+ border-radius:var(--radius-2);
7065
+ box-shadow:var(--innershadow-1);
7066
+ box-sizing:border-box;
7067
+ display:inline-flex;
7068
+ font-family:var(--body-default-font-family);
7069
+ font-size:var(--body-default-font-size);
7070
+ font-weight:var(--body-default-font-weight);
7071
+ letter-spacing:var(--body-default-letter-spacing);
7072
+ line-height:var(--body-default-line-height);
7073
+ outline:var(--border-1) solid var(--border-input-border);
7074
+ padding-inline:var(--space-3) var(--time-picker-padding-right);
7075
+ position:relative;
7076
+ -webkit-text-decoration:var(--body-default-text-decoration);
7077
+ text-decoration:var(--body-default-text-decoration);
7078
+ text-transform:var(--body-default-text-case);
7079
+ width:100%;
7080
+ }
7081
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_group--7ed90:focus-within{
7082
+ outline:var(--time-picker-border-width) solid var(--time-picker-focused-border-color);
7083
+ }
7084
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_group--7ed90.bp_time_picker_module_error--7ed90:not(:focus-within){
7085
+ outline:var(--time-picker-border-width) solid var(--text-text-error-on-light);
7086
+ }
7087
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_group--7ed90.bp_time_picker_module_error--7ed90:focus-within{
7088
+ outline:var(--time-picker-border-width) solid var(--time-picker-focused-border-color);
7089
+ }
7090
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_timeInput--7ed90{
7091
+ align-items:center;
7092
+ display:inline-flex;
7093
+ height:var(--size-10);
7094
+ margin-inline-end:calc(var(--time-picker-icon-button-size) + var(--clear-time-picker-button-right));
7095
+ text-transform:uppercase;
7096
+ white-space:nowrap;
7097
+ }
7098
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_timeInputSegment--7ed90{
7099
+ border:unset;
7100
+ border-radius:unset;
7101
+ border-radius:var(--radius-1);
7102
+ box-shadow:unset;
7103
+ color:var(--text-text-on-light);
7104
+ height:-moz-fit-content;
7105
+ height:fit-content;
7106
+ padding:unset;
7107
+ transition:unset;
7108
+ width:unset;
7109
+ }
7110
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_timeInputSegment--7ed90[data-placeholder]{
7111
+ color:var(--text-text-on-light-secondary);
7112
+ }
7113
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_timeInputSegment--7ed90[role=spinbutton]{
7114
+ margin:0 var(--space-05);
7115
+ padding:0 var(--space-1);
7116
+ }
7117
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_timeInputSegment--7ed90:active,.bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_timeInputSegment--7ed90:focus{
7118
+ background:var(--box-blue-100);
7119
+ caret-color:#0000;
7120
+ color:var(--text-text-brand-on-color);
7121
+ outline:none;
7122
+ }
7123
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_timeInputSegment--7ed90:nth-child(1 of [role=spinbutton]){
7124
+ margin-inline-start:0;
7125
+ }
7126
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_timeInputSegment--7ed90[data-type=literal] + [data-type=dayPeriod]{
7127
+ margin-inline-start:calc(var(--space-1)*-1);
7128
+ }
7129
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_clearButton--7ed90{
7130
+ align-items:center;
7131
+ background-color:initial;
7132
+ border:none;
7133
+ border-radius:var(--radius-2);
7134
+ cursor:pointer;
7135
+ display:flex;
7136
+ height:var(--time-picker-icon-button-size);
7137
+ justify-content:center;
7138
+ outline:none;
7139
+ padding:0;
7140
+ position:absolute;
7141
+ right:var(--clear-time-picker-button-right);
7142
+ width:var(--time-picker-icon-button-size);
7143
+ }
7144
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_clearButton--7ed90:focus-visible,.bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_clearButton--7ed90[data-focus-visible]{
7145
+ background-color:var(--surface-cta-surface-icon-pressed);
7146
+ outline:var(--border-2) solid var(--outline-focus-on-light);
7147
+ }
7148
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_clearButton--7ed90:hover{
7149
+ background:var(--surface-cta-surface-icon-hover);
7150
+ }
7151
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_clearButton--7ed90:hover *{
7152
+ fill:var(--icon-cta-icon-hover);
7153
+ }
7154
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_clearButton--7ed90:active{
7155
+ background:var(--surface-cta-surface-icon-pressed);
7156
+ }
7157
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_clearButton--7ed90:active *{
7158
+ fill:var(--icon-cta-icon-pressed);
7159
+ }
7160
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_clearButton--7ed90:disabled{
7161
+ opacity:1;
7162
+ }
7163
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_clockIcon--7ed90{
7164
+ height:var(--time-picker-icon-size);
7165
+ position:absolute;
7166
+ right:var(--time-picker-padding-right);
7167
+ width:var(--time-picker-icon-size);
7168
+ }
7169
+ .bp_time_picker_module_timePicker--7ed90 .bp_time_picker_module_inlineError--7ed90{
7170
+ margin-block-start:var(--space-2);
7171
+ }
6911
7172
  :root{
6912
7173
  --surface-surface-brand:#0061d5;
6913
7174
  --surface-surface-brand-hover:#006ae9;
@@ -67,6 +67,7 @@ export * from './text-area';
67
67
  export * from './text-button';
68
68
  export * from './text-input';
69
69
  export * from './text-toggle-button';
70
+ export * from './time-picker';
70
71
  export * from './toolbar';
71
72
  export * from './tooltip';
72
73
  export * from './trigger-button';
@@ -85,6 +85,7 @@ export { TextArea } from './text-area/text-area.js';
85
85
  export { TextButton } from './text-button/text-button.js';
86
86
  export { TextInput } from './text-input/text-input.js';
87
87
  export { TextToggleButton } from './text-toggle-button/text-toggle-button.js';
88
+ export { TimePicker } from './time-picker/time-picker.js';
88
89
  export { Toolbar } from './toolbar/index.js';
89
90
  export { Tooltip, TooltipProvider } from './tooltip/tooltip.js';
90
91
  export { TriggerButton } from './trigger-button/trigger-button.js';
@@ -2,6 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { Button } from '@ariakit/react';
3
3
  import clsx from 'clsx';
4
4
  import { forwardRef, useRef, useMemo, Children, isValidElement } from 'react';
5
+ import { useBlueprintModernization } from '../../blueprint-modernization-context/useBlueprintModernization.js';
5
6
  import { LoadingIndicator } from '../../loading-indicator/loading-indicator.js';
6
7
  import { getButtonOptions } from '../../utils/getButtonOptions.js';
7
8
  import { useForkRef } from '../../utils/useForkRef.js';
@@ -21,6 +22,9 @@ const BaseButton = /*#__PURE__*/forwardRef((props, forwardedRef) => {
21
22
  'aria-label': ariaLabel,
22
23
  ...rest
23
24
  } = getButtonOptions(props);
25
+ const {
26
+ enableModernizedComponents
27
+ } = useBlueprintModernization();
24
28
  const ref = useRef(null);
25
29
  const isIconButton = useMemo(() => {
26
30
  const childArray = Children.toArray(children);
@@ -42,6 +46,7 @@ const BaseButton = /*#__PURE__*/forwardRef((props, forwardedRef) => {
42
46
  [styles.isIconButton]: isIconButton,
43
47
  [styles.hide]: loading
44
48
  }, className),
49
+ "data-modern": enableModernizedComponents,
45
50
  children: jsxs(BaseButtonContext.Provider, {
46
51
  value: context,
47
52
  children: [children, loading && loadingAriaLabel ? jsx(LoadingIndicator, {
@@ -1,4 +1,4 @@
1
1
  import '../../index.css';
2
- var styles = {"button":"bp_base_button_module_button--4b9b3","icon":"bp_base_button_module_icon--4b9b3","primary":"bp_base_button_module_primary--4b9b3","secondary":"bp_base_button_module_secondary--4b9b3","tertiary":"bp_base_button_module_tertiary--4b9b3","outline":"bp_base_button_module_outline--4b9b3","small":"bp_base_button_module_small--4b9b3","isIconButton":"bp_base_button_module_isIconButton--4b9b3","large":"bp_base_button_module_large--4b9b3","hide":"bp_base_button_module_hide--4b9b3"};
2
+ var styles = {"button":"bp_base_button_module_button--45d14","primary":"bp_base_button_module_primary--45d14","secondary":"bp_base_button_module_secondary--45d14","tertiary":"bp_base_button_module_tertiary--45d14","outline":"bp_base_button_module_outline--45d14","small":"bp_base_button_module_small--45d14","isIconButton":"bp_base_button_module_isIconButton--45d14","large":"bp_base_button_module_large--45d14","icon":"bp_base_button_module_icon--45d14","hide":"bp_base_button_module_hide--45d14"};
3
3
 
4
4
  export { styles as default };
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Search } from '@box/blueprint-web-assets/icons/Fill';
3
3
  import { IconCtaIcon, IconIconOnLightSecondary } from '@box/blueprint-web-assets/tokens/tokens';
4
4
  import clsx from 'clsx';
5
- import { forwardRef, Children, useMemo } from 'react';
5
+ import { forwardRef, Children, useMemo, cloneElement } from 'react';
6
6
  import { IconButton } from '../../primitives/icon-button/icon-button.js';
7
7
  import { Tooltip } from '../../tooltip/tooltip.js';
8
8
  import { switchCase } from '../../utils/switchCase.js';
@@ -14,6 +14,7 @@ const SearchInputControlled = /*#__PURE__*/forwardRef((props, forwardedRef) => {
14
14
  children,
15
15
  className,
16
16
  disabled = false,
17
+ inputClassName,
17
18
  onChange,
18
19
  onClearInput,
19
20
  onKeyDown,
@@ -22,6 +23,7 @@ const SearchInputControlled = /*#__PURE__*/forwardRef((props, forwardedRef) => {
22
23
  searchInputAriaLabel,
23
24
  searchInputClearAriaLabel,
24
25
  searchInputClearButtonTooltip,
26
+ startIcon,
25
27
  value,
26
28
  variant,
27
29
  ...rest
@@ -67,9 +69,12 @@ const SearchInputControlled = /*#__PURE__*/forwardRef((props, forwardedRef) => {
67
69
  onClick: onClearInput,
68
70
  size: 'x-small'
69
71
  }), [isGlobal, onClearInput, searchInputClearAriaLabel, showActionButton]);
72
+ const CustomStartIconComponent = useMemo(() => startIcon && /*#__PURE__*/cloneElement(startIcon, {
73
+ className: clsx(startIcon.props?.className, styles.searchIcon, isGlobal && styles.global)
74
+ }), [startIcon, isGlobal]);
70
75
  return jsxs("div", {
71
76
  className: clsx(styles.search, disabled && styles.disabled, className),
72
- children: [jsx(Search, {
77
+ children: [startIcon ? CustomStartIconComponent : jsx(Search, {
73
78
  "aria-hidden": "true",
74
79
  className: clsx(styles.searchIcon, isGlobal && styles.global),
75
80
  color: IconIconOnLightSecondary
@@ -79,7 +84,7 @@ const SearchInputControlled = /*#__PURE__*/forwardRef((props, forwardedRef) => {
79
84
  "aria-label": searchInputAriaLabel,
80
85
  className: clsx(styles.searchInput, isGlobal && styles.global, {
81
86
  [styles.withoutActionButton]: isGlobal && !showActionButton
82
- }),
87
+ }, inputClassName),
83
88
  disabled: disabled,
84
89
  onChange: onChange,
85
90
  onKeyDown: onSearchInputKeyDown,
@@ -1,6 +1,9 @@
1
1
  import type React from 'react';
2
2
  import { type IconButtonProps } from '../primitives/icon-button';
3
3
  export interface SearchInputProps extends Omit<React.ComponentPropsWithRef<'input'>, 'onChange' | 'onSubmit'> {
4
+ /**
5
+ * Class name for search input component
6
+ */
4
7
  className?: string;
5
8
  /**
6
9
  * Default value for search input.
@@ -14,6 +17,10 @@ export interface SearchInputProps extends Omit<React.ComponentPropsWithRef<'inpu
14
17
  * @default false
15
18
  */
16
19
  disabled?: boolean;
20
+ /**
21
+ * Class name for the input element within search input component
22
+ */
23
+ inputClassName?: string;
17
24
  /**
18
25
  * Handler that is called when the search value is changed.
19
26
  */
@@ -34,6 +41,10 @@ export interface SearchInputProps extends Omit<React.ComponentPropsWithRef<'inpu
34
41
  * Search through site content clear input button aria-label.
35
42
  */
36
43
  searchInputClearAriaLabel: string;
44
+ /**
45
+ * Custom icon to be displayed in the start of the search input in place of search icon
46
+ */
47
+ startIcon?: React.ReactElement;
37
48
  /**
38
49
  * Input type, fixed to 'search'.
39
50
  */
@@ -0,0 +1,2 @@
1
+ export { TimePicker } from './time-picker';
2
+ export { type TimePickerProps, type TimePickerTime } from './types';
@@ -0,0 +1,2 @@
1
+ import { type TimePickerProps } from './types';
2
+ export declare const TimePicker: import("react").ForwardRefExoticComponent<TimePickerProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,115 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { ClockBadge, XMark } from '@box/blueprint-web-assets/icons/Fill';
3
+ import { Gray65, Size4 } from '@box/blueprint-web-assets/tokens/tokens';
4
+ import clsx from 'clsx';
5
+ import { forwardRef, useRef, useCallback } from 'react';
6
+ import { TimeField, Group, DateInput, DateSegment } from 'react-aria-components';
7
+ import { IconButton } from '../primitives/icon-button/icon-button.js';
8
+ import { InlineError } from '../primitives/inline-error/inline-error.js';
9
+ import { useLabelable } from '../util-components/labelable/useLabelable.js';
10
+ import { useControllableState } from '../utils/useControllableState.js';
11
+ import { useUniqueId } from '../utils/useUniqueId.js';
12
+ import styles from './time-picker.module.js';
13
+
14
+ const ClearIcon = label => () => jsx(XMark, {
15
+ "aria-label": label,
16
+ color: Gray65,
17
+ height: Size4,
18
+ width: Size4
19
+ });
20
+ const TimePicker = /*#__PURE__*/forwardRef((props, forwardedRef) => {
21
+ const {
22
+ className,
23
+ onChange,
24
+ value,
25
+ defaultValue,
26
+ label,
27
+ error,
28
+ isDisabled,
29
+ hideLabel = false,
30
+ clearTimePickerAriaLabel,
31
+ clockIconAriaLabel,
32
+ shouldForceLeadingZeros = true,
33
+ ...rest
34
+ } = props;
35
+ // Component may be uncontrolled or controlled
36
+ const [time, setTimeValue] = useControllableState({
37
+ prop: value,
38
+ onChange,
39
+ defaultProp: defaultValue
40
+ });
41
+ const firstSegmentRef = useRef(null);
42
+ const handleClearInputButtonClicked = useCallback(() => {
43
+ setTimeValue(null);
44
+ }, [setTimeValue]);
45
+ const handleClearButtonKeypress = useCallback(({
46
+ key
47
+ }) => {
48
+ if ([' ', 'Enter'].includes(key)) {
49
+ handleClearInputButtonClicked();
50
+ firstSegmentRef.current?.focus();
51
+ }
52
+ }, [handleClearInputButtonClicked]);
53
+ const inlineErrorId = useUniqueId('inline-error-');
54
+ const Label = useLabelable(label, useUniqueId('time-picker-'));
55
+ const hasError = !!error && !isDisabled;
56
+ const ariaDescribedBy = clsx(rest['aria-describedby'], {
57
+ [inlineErrorId]: hasError
58
+ });
59
+ return jsxs(TimeField, {
60
+ ...rest,
61
+ ref: forwardedRef,
62
+ "aria-describedby": ariaDescribedBy,
63
+ className: clsx(styles.timePicker, {
64
+ [styles.disabled]: isDisabled
65
+ }, className),
66
+ isDisabled: isDisabled,
67
+ isInvalid: hasError,
68
+ onChange: setTimeValue,
69
+ shouldForceLeadingZeros: shouldForceLeadingZeros,
70
+ value: time,
71
+ children: [jsx(Label, {
72
+ className: clsx(styles.label, {
73
+ [styles.disabled]: isDisabled
74
+ }),
75
+ hideLabel: hideLabel
76
+ }), jsxs(Group, {
77
+ className: clsx(styles.group, {
78
+ [styles.error]: hasError
79
+ }),
80
+ children: [jsx(DateInput, {
81
+ className: clsx(styles.timeInput),
82
+ children: segment => jsx(DateSegment, {
83
+ ref: node => {
84
+ // We need to find the first actionable segment, i.e. spinbutton
85
+ if (!firstSegmentRef.current && node.role === 'spinbutton') {
86
+ firstSegmentRef.current = node;
87
+ }
88
+ },
89
+ className: styles.timeInputSegment,
90
+ segment: segment
91
+ })
92
+ }), (value || time) && jsx(IconButton, {
93
+ "aria-label": clearTimePickerAriaLabel,
94
+ className: styles.clearButton,
95
+ disabled: isDisabled,
96
+ icon: ClearIcon(clearTimePickerAriaLabel),
97
+ onClick: handleClearInputButtonClicked,
98
+ onKeyDownCapture: handleClearButtonKeypress,
99
+ size: "x-small"
100
+ }), jsx(ClockBadge, {
101
+ "aria-label": clockIconAriaLabel,
102
+ className: styles.clockIcon,
103
+ color: Gray65,
104
+ height: Size4,
105
+ width: Size4
106
+ })]
107
+ }), jsx(InlineError, {
108
+ className: styles.inlineError,
109
+ id: inlineErrorId,
110
+ children: error
111
+ })]
112
+ });
113
+ });
114
+
115
+ export { TimePicker };
@@ -0,0 +1,4 @@
1
+ import '../index.css';
2
+ var styles = {"timePicker":"bp_time_picker_module_timePicker--7ed90","disabled":"bp_time_picker_module_disabled--7ed90","label":"bp_time_picker_module_label--7ed90","group":"bp_time_picker_module_group--7ed90","error":"bp_time_picker_module_error--7ed90","timeInput":"bp_time_picker_module_timeInput--7ed90","timeInputSegment":"bp_time_picker_module_timeInputSegment--7ed90","clearButton":"bp_time_picker_module_clearButton--7ed90","clockIcon":"bp_time_picker_module_clockIcon--7ed90","inlineError":"bp_time_picker_module_inlineError--7ed90"};
3
+
4
+ export { styles as default };
@@ -0,0 +1,24 @@
1
+ import { type Time } from '@internationalized/date';
2
+ import { type TimeFieldProps as RACTimeFieldProps } from 'react-aria-components';
3
+ import { type Labelable } from '../util-components/labelable';
4
+ export type { Time as TimePickerTime };
5
+ export interface TimePickerProps extends Omit<RACTimeFieldProps<Time>, 'children'>, Labelable {
6
+ /**
7
+ * When `true`, label text is hidden.
8
+ *
9
+ * @default false
10
+ */
11
+ hideLabel?: boolean;
12
+ /**
13
+ * Aria label for button clearing TimePicker input
14
+ */
15
+ clearTimePickerAriaLabel: string;
16
+ /**
17
+ * Aria label for clock icon
18
+ */
19
+ clockIconAriaLabel: string;
20
+ /**
21
+ * The content of the error message.
22
+ */
23
+ error?: React.ReactNode;
24
+ }
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
 
3
- // copy of radix hook: https://github.com/radix-ui/primitives/blob/main/packages/react/use-callback-ref/src/useCallbackRef.tsx
3
+ // copy of radix hook: https://github.com/radix-ui/primitives/blob/main/packages/react/use-callback-ref/src/use-callback-ref.tsx
4
4
  /**
5
5
  * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a
6
6
  * prop or avoid re-executing effects when passed as a dependency
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@box/blueprint-web",
3
- "version": "12.17.2",
3
+ "version": "12.19.0",
4
4
  "type": "module",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "publishConfig": {