origam 2.9.0 → 2.10.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.
@@ -880,8 +880,8 @@
880
880
  --origam-field__input---padding-block-xl: 14px;
881
881
  --origam-field__input---padding-top: var(--origam-field__input---padding-block-md);
882
882
  --origam-field__input---padding-bottom: var(--origam-field__input---padding-block-md);
883
- --origam-field__input---padding-start: var(--origam-space---4);
884
- --origam-field__input---padding-end: var(--origam-space---4);
883
+ --origam-field__input---padding-start: 0;
884
+ --origam-field__input---padding-end: 0;
885
885
  --origam-field__input---opacity: 0.7;
886
886
  --origam-field__label---font-size: 0.75em;
887
887
  --origam-field__label---transition-duration: var(--origam-motion__duration---normal);
@@ -2255,6 +2255,7 @@
2255
2255
  --origam-slider-field---padding-block: var(--origam-space---2);
2256
2256
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
2257
2257
  --origam-slider-field---transition-timing-function: var(--origam-motion__easing---standard);
2258
+ --origam-slider-field---border-radius: var(--origam-radius---full);
2258
2259
  --origam-slider-field__track---height: 4px;
2259
2260
  --origam-slider-field__track---background-color: var(--origam-color__surface---disabled);
2260
2261
  --origam-slider-field__track---border-radius: var(--origam-radius---full);
@@ -3651,8 +3652,8 @@
3651
3652
  --origam-field__input---padding-block-xl: 14px;
3652
3653
  --origam-field__input---padding-top: var(--origam-field__input---padding-block-md);
3653
3654
  --origam-field__input---padding-bottom: var(--origam-field__input---padding-block-md);
3654
- --origam-field__input---padding-start: var(--origam-space---4);
3655
- --origam-field__input---padding-end: var(--origam-space---4);
3655
+ --origam-field__input---padding-start: 0;
3656
+ --origam-field__input---padding-end: 0;
3656
3657
  --origam-field__input---opacity: 0.7;
3657
3658
  --origam-field__label---font-size: 0.75em;
3658
3659
  --origam-field__label---transition-duration: var(--origam-motion__duration---normal);
@@ -5026,6 +5027,7 @@
5026
5027
  --origam-slider-field---padding-block: var(--origam-space---2);
5027
5028
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
5028
5029
  --origam-slider-field---transition-timing-function: var(--origam-motion__easing---standard);
5030
+ --origam-slider-field---border-radius: var(--origam-radius---full);
5029
5031
  --origam-slider-field__track---height: 4px;
5030
5032
  --origam-slider-field__track---background-color: var(--origam-color__surface---disabled);
5031
5033
  --origam-slider-field__track---border-radius: var(--origam-radius---full);
@@ -881,8 +881,8 @@
881
881
  --origam-field__input---padding-block-xl: 14px;
882
882
  --origam-field__input---padding-top: var(--origam-field__input---padding-block-md);
883
883
  --origam-field__input---padding-bottom: var(--origam-field__input---padding-block-md);
884
- --origam-field__input---padding-start: var(--origam-space---4);
885
- --origam-field__input---padding-end: var(--origam-space---4);
884
+ --origam-field__input---padding-start: 0;
885
+ --origam-field__input---padding-end: 0;
886
886
  --origam-field__input---opacity: 0.7;
887
887
  --origam-field__label---font-size: 0.75em;
888
888
  --origam-field__label---transition-duration: var(--origam-motion__duration---normal);
@@ -2256,6 +2256,7 @@
2256
2256
  --origam-slider-field---padding-block: var(--origam-space---2);
2257
2257
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
2258
2258
  --origam-slider-field---transition-timing-function: var(--origam-motion__easing---standard);
2259
+ --origam-slider-field---border-radius: var(--origam-radius---full);
2259
2260
  --origam-slider-field__track---height: 4px;
2260
2261
  --origam-slider-field__track---background-color: var(--origam-color__surface---disabled);
2261
2262
  --origam-slider-field__track---border-radius: var(--origam-radius---full);
@@ -880,8 +880,8 @@
880
880
  --origam-field__input---padding-block-xl: 14px;
881
881
  --origam-field__input---padding-top: var(--origam-field__input---padding-block-md);
882
882
  --origam-field__input---padding-bottom: var(--origam-field__input---padding-block-md);
883
- --origam-field__input---padding-start: var(--origam-space---4);
884
- --origam-field__input---padding-end: var(--origam-space---4);
883
+ --origam-field__input---padding-start: 0;
884
+ --origam-field__input---padding-end: 0;
885
885
  --origam-field__input---opacity: 0.7;
886
886
  --origam-field__label---font-size: 0.75em;
887
887
  --origam-field__label---transition-duration: var(--origam-motion__duration---normal);
@@ -2255,6 +2255,7 @@
2255
2255
  --origam-slider-field---padding-block: var(--origam-space---2);
2256
2256
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
2257
2257
  --origam-slider-field---transition-timing-function: var(--origam-motion__easing---standard);
2258
+ --origam-slider-field---border-radius: var(--origam-radius---full);
2258
2259
  --origam-slider-field__track---height: 4px;
2259
2260
  --origam-slider-field__track---background-color: var(--origam-color__surface---disabled);
2260
2261
  --origam-slider-field__track---border-radius: var(--origam-radius---full);
@@ -881,8 +881,8 @@
881
881
  --origam-field__input---padding-block-xl: 14px;
882
882
  --origam-field__input---padding-top: var(--origam-field__input---padding-block-md);
883
883
  --origam-field__input---padding-bottom: var(--origam-field__input---padding-block-md);
884
- --origam-field__input---padding-start: var(--origam-space---4);
885
- --origam-field__input---padding-end: var(--origam-space---4);
884
+ --origam-field__input---padding-start: 0;
885
+ --origam-field__input---padding-end: 0;
886
886
  --origam-field__input---opacity: 0.7;
887
887
  --origam-field__label---font-size: 0.75em;
888
888
  --origam-field__label---transition-duration: var(--origam-motion__duration---normal);
@@ -2256,6 +2256,7 @@
2256
2256
  --origam-slider-field---padding-block: var(--origam-space---2);
2257
2257
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
2258
2258
  --origam-slider-field---transition-timing-function: var(--origam-motion__easing---standard);
2259
+ --origam-slider-field---border-radius: var(--origam-radius---full);
2259
2260
  --origam-slider-field__track---height: 4px;
2260
2261
  --origam-slider-field__track---background-color: var(--origam-color__surface---disabled);
2261
2262
  --origam-slider-field__track---border-radius: var(--origam-radius---full);
@@ -4,10 +4,10 @@
4
4
  ref="origamAppRef"
5
5
  :class="appClasses"
6
6
  :style="appStyles"
7
- :color="color"
8
- :bg-color="bgColor"
9
- :full-height="fullHeight"
10
- :overlaps="overlaps"
7
+ :color="props.color"
8
+ :bg-color="props.bgColor"
9
+ :full-height="props.fullHeight"
10
+ :overlaps="props.overlaps"
11
11
  >
12
12
  <template #default>
13
13
  <slot name="default"/>
@@ -17,9 +17,9 @@
17
17
 
18
18
  <script lang="ts" setup>
19
19
  import { OrigamLayout } from "../../components";
20
- import { useProps, useRtl, useStyle } from "../../composables";
20
+ import { useDefaults, useProps, useRtl, useStyle } from "../../composables";
21
21
  import { computed, ref, StyleValue } from "vue";
22
- const props = defineProps({
22
+ const _props = defineProps({
23
23
  fullHeight: { type: Boolean, required: false, default: true },
24
24
  overlaps: { type: Array, required: false },
25
25
  id: { type: String, required: false },
@@ -28,6 +28,7 @@ const props = defineProps({
28
28
  color: { type: [String, Object, Boolean, null], required: false, skipCheck: true },
29
29
  bgColor: { type: [String, Object, Boolean, null], required: false, skipCheck: true }
30
30
  });
31
+ const props = useDefaults(_props);
31
32
  const { filterProps } = useProps(props);
32
33
  const { rtlClasses } = useRtl();
33
34
  const origamAppRef = ref();
@@ -148,7 +148,7 @@ defineExpose({
148
148
  width: 100%;
149
149
  margin: 0;
150
150
 
151
- :deep(.origam-slider-track__fill) {
151
+ :deep(.origam-slider-field-track__fill) {
152
152
  display: none;
153
153
  }
154
154
  }
@@ -404,6 +404,22 @@ defineExpose(forwardRefs({
404
404
  padding-bottom: 0;
405
405
  padding-inline-start: 0;
406
406
  overflow: hidden;
407
+ border-start-start-radius: var(--origam-field---border-radius, 8px);
408
+ border-end-start-radius: var(--origam-field---border-radius, 8px);
409
+
410
+ // The swatch must sit FLUSH against the field's inline-start edge.
411
+ // `OrigamField` applies `--origam-field---padding-start` to the whole
412
+ // grid (prepend-inner included), so any consumer that raises it pushes
413
+ // the swatch inward and opens a gap between the colour and the left
414
+ // border. The Theme Builder does exactly this — it forces
415
+ // `--origam-field---padding-start: 14px` on prepended control fields to
416
+ // widen the outline's start leg so the left corner rounds — which left
417
+ // a ~14px gap in front of the swatch. Cancel the padding for the
418
+ // prepend cell only (negative margin = -padding-start) so the swatch
419
+ // bleeds back to the edge while the outline keeps its rounded corner.
420
+ // No-op when padding-start resolves to 0 (the component's own default),
421
+ // so there is zero regression for plain consumers.
422
+ margin-inline-start: calc(-1 * var(--origam-field---padding-start, 0px));
407
423
 
408
424
  > .origam-sheet {
409
425
  width: var(--origam-color-picker-field__swatch---width, 24px);
@@ -418,6 +434,10 @@ defineExpose(forwardRefs({
418
434
  font-family: var(--origam-font__family---mono);
419
435
  font-size: 0.875em;
420
436
  letter-spacing: 0.03em;
437
+ overflow: hidden;
438
+ text-overflow: ellipsis;
439
+ white-space: nowrap;
440
+ min-width: 0;
421
441
  }
422
442
 
423
443
  // `.origam-field__input` is `display: flex; flex-wrap: wrap` by
@@ -432,8 +452,21 @@ defineExpose(forwardRefs({
432
452
  // `colorSelection` span is the real display value) — forcing
433
453
  // `nowrap` lets the invisible native input shrink instead of
434
454
  // pushing a wrap, with zero visual loss.
455
+ // Same single-line fix as OrigamSelect: the underlying native
456
+ // `<input>` is taken OUT of flow (`position: absolute`, `flex: 0 0`)
457
+ // so it can't sit beside the formatted hex `colorSelection` span and
458
+ // push the field onto a second line. The span is the real display
459
+ // value; the input only carries focus / the editable value. `nowrap`
460
+ // alone was insufficient — the in-flow input still forced a wrap in a
461
+ // narrow container.
435
462
  :deep(.origam-field__input) {
436
463
  flex-wrap: nowrap;
464
+
465
+ > input {
466
+ position: absolute;
467
+ flex: 0 0;
468
+ min-width: 0;
469
+ }
437
470
  }
438
471
  }
439
472
  </style>
@@ -509,3 +509,32 @@ defineExpose(forwardRefs({
509
509
  isLoaded
510
510
  }, origamTextFieldRef));
511
511
  </script>
512
+
513
+ <style lang="scss" scoped>
514
+ .origam-date-picker-field {
515
+ :deep(.origam-date-picker-field__selection-text) {
516
+ overflow: hidden;
517
+ text-overflow: ellipsis;
518
+ white-space: nowrap;
519
+ min-width: 0;
520
+ }
521
+
522
+ // Same single-line fix as OrigamSelect / OrigamColorPickerField: the
523
+ // underlying native `<input>` is taken OUT of flow so it can't sit
524
+ // beside the formatted `selectionText`/`rangeSelection` span and push
525
+ // the field onto a second line. The span is the real display value;
526
+ // the input only carries focus / the editable value. `nowrap` alone
527
+ // is insufficient — the in-flow input still forces a wrap in a
528
+ // narrow container (confirmed: 61px vs 36px at 150px width on the
529
+ // range variant).
530
+ :deep(.origam-field__input) {
531
+ flex-wrap: nowrap;
532
+
533
+ > input {
534
+ position: absolute;
535
+ flex: 0 0;
536
+ min-width: 0;
537
+ }
538
+ }
539
+ }
540
+ </style>
@@ -519,7 +519,14 @@ defineExpose({
519
519
  flex: 1 0;
520
520
  grid-area: control;
521
521
  position: relative;
522
- padding-inline: var(--origam-field---padding-start) var(--origam-field---padding-end);
522
+ // Corner-clearing: when the corner radius is larger than the inline
523
+ // padding, the text / floating label collide with the rounded outline.
524
+ // Floor the inline padding at the effective radius (capped at the control
525
+ // height for pills). Prepended fields opt out below — their prepend icon
526
+ // already fills the corner.
527
+ padding-inline:
528
+ max(var(--origam-field---padding-start), min(var(--origam-field---border-radius, 8px), var(--origam-input__control---height, 36px)))
529
+ var(--origam-field---padding-end);
523
530
  backdrop-filter: var(--origam-field---backdrop-filter, none);
524
531
  -webkit-backdrop-filter: var(--origam-field---backdrop-filter, none);
525
532
 
@@ -704,7 +711,7 @@ defineExpose({
704
711
 
705
712
  #{$this}__outline {
706
713
  &--start {
707
- flex: 0 0 var(--origam-field---padding-start);
714
+ flex: 0 0 max(var(--origam-field---padding-start), min(var(--origam-field---border-radius, 8px), var(--origam-input__control---height, 36px)));
708
715
  }
709
716
 
710
717
  &--end {
@@ -775,6 +782,16 @@ defineExpose({
775
782
 
776
783
  &--prepended {
777
784
  --origam-field---padding-start: 6px;
785
+
786
+ // A prepend-inner (icon / swatch) already fills the left corner, so
787
+ // opt out of the corner-clearing floor: keep the inline padding and
788
+ // the start outline leg at the raw padding-start (widening them would
789
+ // draw the outline over the prepend content).
790
+ padding-inline: var(--origam-field---padding-start) var(--origam-field---padding-end);
791
+
792
+ #{$this}__outline--start {
793
+ flex-basis: var(--origam-field---padding-start);
794
+ }
778
795
  }
779
796
 
780
797
  &--appended {
@@ -974,7 +991,19 @@ defineExpose({
974
991
  &#{$this}__label--floating {
975
992
  transform: translateY(-50%);
976
993
  transform-origin: center;
977
- margin: 0 4px;
994
+ // Align the floating label's inline-start with the input
995
+ // text (and the resting label), both of which sit at
996
+ // `--origam-field__input---padding-start`. The old hard
997
+ // `margin: 0 4px` pinned the floating label to the notch
998
+ // corner instead, leaving it inset by (input-padding − 4)
999
+ // px LESS than the value — a visible label/value
1000
+ // misalignment that grows with the corner radius (most
1001
+ // obvious on large-radius themes, e.g. cartoon `rounded-lg`,
1002
+ // where it read as "the input is more indented than the
1003
+ // label"). Keep the 4px on the inline-end for notch
1004
+ // breathing room.
1005
+ margin-block: 0;
1006
+ margin-inline: var(--origam-field__input---padding-start, 0) 4px;
978
1007
  }
979
1008
  }
980
1009
 
@@ -44,6 +44,7 @@
44
44
  :is-vertical="isVertical"
45
45
  :max="resolvedMax"
46
46
  :min="resolvedMin"
47
+ :rounded="resolvedRounded"
47
48
  :show-ticks="showTicks"
48
49
  :start="isRange ? trackRangeStart : 0"
49
50
  :stop="isRange ? trackRangeStop : trackStop"
@@ -273,6 +274,7 @@
273
274
  :is-vertical="isVertical"
274
275
  :max="resolvedMax"
275
276
  :min="resolvedMin"
277
+ :rounded="resolvedRounded"
276
278
  :show-ticks="showTicks"
277
279
  :start="isRange ? trackRangeStart : 0"
278
280
  :stop="isRange ? trackRangeStop : trackStop"
@@ -426,6 +428,7 @@ import {
426
428
  useDefaults,
427
429
  useFocus,
428
430
  useProps,
431
+ useRounded,
429
432
  useRtl,
430
433
  useSteps,
431
434
  useStyle,
@@ -584,12 +587,14 @@ const bufferedPercentage = computed(() => {
584
587
  const clamped = clamp(props.buffered, resolvedMin.value, resolvedMax.value);
585
588
  return toPercent(clamped);
586
589
  });
587
- const bufferedStyles = computed(() => {
590
+ const bufferedPosition = computed(() => {
588
591
  const pct = bufferedPercentage.value;
589
- if (isVertical.value) {
590
- return { height: `${pct}%`, bottom: "0" };
591
- }
592
- return indexFromEnd.value ? { width: `${pct}%`, insetInlineEnd: "0" } : { width: `${pct}%`, insetInlineStart: "0" };
592
+ if (isVertical.value) return { height: `${pct}%`, bottom: "0" };
593
+ if (indexFromEnd.value) return { width: `${pct}%`, insetInlineEnd: "0" };
594
+ return { width: `${pct}%`, insetInlineStart: "0" };
595
+ });
596
+ const bufferedStyles = computed(() => {
597
+ return [bufferedPosition.value, roundedStyles.value];
593
598
  });
594
599
  const hasPeaks = computed(() => {
595
600
  if (!isAudioVariant.value) return false;
@@ -767,6 +772,10 @@ const bgColor = computed(() => {
767
772
  });
768
773
  const { backgroundColorClasses: thumbBgClasses, backgroundColorStyles: thumbBgStyles } = useBackgroundColor(color);
769
774
  const { textColorClasses: thumbTextClasses, textColorStyles: thumbTextStyles } = useTextColor(color);
775
+ const resolvedRounded = computed(() => {
776
+ return props.trackProps?.rounded ?? props.rounded;
777
+ });
778
+ const { roundedClasses, roundedStyles } = useRounded(resolvedRounded);
770
779
  const inputProps = computed(() => {
771
780
  return origamInputRef.value?.filterProps(props, ["modelValue", "class", "style", "id", "focused", "centerAffix", "color", "bgColor", "activeColor", "activeBgColor", "hoverColor", "hoverBgColor"]);
772
781
  });
@@ -845,6 +854,7 @@ const sliderFieldClasses = computed(() => {
845
854
  variantClass.value,
846
855
  sharedStateClasses.value,
847
856
  rtlClasses.value,
857
+ roundedClasses.value,
848
858
  props.class
849
859
  ];
850
860
  });
@@ -855,6 +865,7 @@ const bareWrapperClasses = computed(() => {
855
865
  variantClass.value,
856
866
  sharedStateClasses.value,
857
867
  rtlClasses.value,
868
+ roundedClasses.value,
858
869
  props.class
859
870
  ];
860
871
  });
@@ -964,7 +975,7 @@ defineExpose({
964
975
  pointer-events: none;
965
976
  background: var(--origam-slider-field__buffered---background-color, color-mix(in srgb, currentColor 40%, transparent));
966
977
  opacity: var(--origam-slider-field__buffered---opacity, 0.5);
967
- border-radius: 999px;
978
+ border-radius: var(--origam-slider-field---border-radius, 999px);
968
979
  top: 50%;
969
980
  transform: translateY(-50%);
970
981
  height: var(--origam-slider-field--variant--field---track-thickness, var(--origam-slider-field---track-size, 4px));
@@ -1187,15 +1198,15 @@ defineExpose({
1187
1198
 
1188
1199
  :deep(.origam-slider-field-track) {
1189
1200
  background: transparent;
1190
- border-radius: 999px;
1201
+ border-radius: var(--origam-slider-field---border-radius, 999px);
1191
1202
  }
1192
1203
 
1193
1204
  :deep(.origam-slider-field-track__background) {
1194
- border-radius: 999px;
1205
+ border-radius: var(--origam-slider-field---border-radius, 999px);
1195
1206
  }
1196
1207
 
1197
1208
  :deep(.origam-slider-field-track__fill) {
1198
- border-radius: 999px;
1209
+ border-radius: var(--origam-slider-field---border-radius, 999px);
1199
1210
  }
1200
1211
 
1201
1212
  &.origam-slider-field--horizontal {
@@ -1263,7 +1274,7 @@ defineExpose({
1263
1274
 
1264
1275
  :deep(.origam-slider-field-track) {
1265
1276
  background-color: var(--origam-slider-field--bare---track-background-color, color-mix(in srgb, currentColor 25%, transparent));
1266
- border-radius: 999px;
1277
+ border-radius: var(--origam-slider-field---border-radius, 999px);
1267
1278
  height: var(--origam-slider-field--variant--field---track-thickness);
1268
1279
  width: 100%;
1269
1280
  transition: height 140ms ease;
@@ -1276,14 +1287,14 @@ defineExpose({
1276
1287
  .origam-slider-field-track__fill {
1277
1288
  background: currentColor;
1278
1289
  height: 100%;
1279
- border-radius: 999px;
1290
+ border-radius: var(--origam-slider-field---border-radius, 999px);
1280
1291
  }
1281
1292
  }
1282
1293
 
1283
1294
  .origam-slider-field__buffered {
1284
1295
  background: var(--origam-slider-field__buffered--bare---background-color, color-mix(in srgb, currentColor 40%, transparent));
1285
1296
  opacity: 1;
1286
- border-radius: 999px;
1297
+ border-radius: var(--origam-slider-field---border-radius, 999px);
1287
1298
  height: var(--origam-slider-field--variant--field---track-thickness);
1288
1299
  z-index: 1;
1289
1300
  }