nuance-ui 0.2.19 → 0.2.22

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 (82) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/components/action-icon/action-icon.d.vue.ts +1 -1
  3. package/dist/runtime/components/action-icon/action-icon.module.css +1 -1
  4. package/dist/runtime/components/action-icon/action-icon.vue.d.ts +1 -1
  5. package/dist/runtime/components/alert.vue +1 -1
  6. package/dist/runtime/components/badge.vue +1 -1
  7. package/dist/runtime/components/button/button.d.vue.ts +1 -1
  8. package/dist/runtime/components/button/button.module.css +1 -1
  9. package/dist/runtime/components/button/button.vue.d.ts +1 -1
  10. package/dist/runtime/components/calendar/ui/core/calendar-cell.d.vue.ts +1 -1
  11. package/dist/runtime/components/calendar/ui/core/calendar-cell.vue.d.ts +1 -1
  12. package/dist/runtime/components/calendar/ui/core/calendar-header.vue +1 -1
  13. package/dist/runtime/components/calendar/ui/levels/calendar-month.vue +1 -1
  14. package/dist/runtime/components/checkbox/checkbox.vue +1 -1
  15. package/dist/runtime/components/chip/chip.vue +1 -1
  16. package/dist/runtime/components/combobox/combobox.module.css +1 -1
  17. package/dist/runtime/components/dialog/index.d.ts +2 -0
  18. package/dist/runtime/components/dialog/ui/dialog-footer.d.vue.ts +16 -0
  19. package/dist/runtime/components/dialog/ui/dialog-footer.vue +16 -0
  20. package/dist/runtime/components/dialog/ui/dialog-footer.vue.d.ts +16 -0
  21. package/dist/runtime/components/dialog/ui/dialog-root.d.vue.ts +2 -2
  22. package/dist/runtime/components/dialog/ui/dialog-root.vue +9 -4
  23. package/dist/runtime/components/dialog/ui/dialog-root.vue.d.ts +2 -2
  24. package/dist/runtime/components/dialog/ui/dialog-section.d.vue.ts +17 -0
  25. package/dist/runtime/components/dialog/ui/dialog-section.vue +17 -0
  26. package/dist/runtime/components/dialog/ui/dialog-section.vue.d.ts +17 -0
  27. package/dist/runtime/components/dialog/ui/dialog.module.css +1 -1
  28. package/dist/runtime/components/drawer/drawer-footer.d.vue.ts +16 -0
  29. package/dist/runtime/components/drawer/drawer-footer.vue +13 -0
  30. package/dist/runtime/components/drawer/drawer-footer.vue.d.ts +16 -0
  31. package/dist/runtime/components/drawer/drawer-root.vue +1 -0
  32. package/dist/runtime/components/drawer/drawer-section.d.vue.ts +16 -0
  33. package/dist/runtime/components/drawer/drawer-section.vue +14 -0
  34. package/dist/runtime/components/drawer/drawer-section.vue.d.ts +16 -0
  35. package/dist/runtime/components/drawer/index.d.ts +2 -0
  36. package/dist/runtime/components/input/password-input.d.vue.ts +5 -5
  37. package/dist/runtime/components/input/password-input.vue +1 -2
  38. package/dist/runtime/components/input/password-input.vue.d.ts +5 -5
  39. package/dist/runtime/components/input/ui/button-input.d.vue.ts +1 -1
  40. package/dist/runtime/components/input/ui/button-input.vue.d.ts +1 -1
  41. package/dist/runtime/components/input/ui/input-base.vue +3 -3
  42. package/dist/runtime/components/input/ui/input-inline.vue +1 -1
  43. package/dist/runtime/components/input/ui/input-label.vue +1 -1
  44. package/dist/runtime/components/input/ui/input-wrapper.vue +1 -1
  45. package/dist/runtime/components/modal/index.d.ts +0 -2
  46. package/dist/runtime/components/modal/modal-footer.d.vue.ts +14 -0
  47. package/dist/runtime/components/modal/modal-footer.vue +13 -0
  48. package/dist/runtime/components/modal/modal-footer.vue.d.ts +14 -0
  49. package/dist/runtime/components/modal/modal-header.d.vue.ts +1 -3
  50. package/dist/runtime/components/modal/modal-header.vue.d.ts +1 -3
  51. package/dist/runtime/components/modal/modal-root.d.vue.ts +1 -2
  52. package/dist/runtime/components/modal/modal-root.vue +3 -1
  53. package/dist/runtime/components/modal/modal-root.vue.d.ts +1 -2
  54. package/dist/runtime/components/modal/modal-section.d.vue.ts +14 -0
  55. package/dist/runtime/components/modal/modal-section.vue +14 -0
  56. package/dist/runtime/components/modal/modal-section.vue.d.ts +14 -0
  57. package/dist/runtime/components/modal/modal-title.d.vue.ts +1 -3
  58. package/dist/runtime/components/modal/modal-title.vue.d.ts +1 -3
  59. package/dist/runtime/components/nav-link/nav-link.vue +1 -1
  60. package/dist/runtime/components/pin-input/pin-input.vue +2 -2
  61. package/dist/runtime/components/segmented-control.d.vue.ts +2 -1
  62. package/dist/runtime/components/segmented-control.vue +5 -2
  63. package/dist/runtime/components/segmented-control.vue.d.ts +2 -1
  64. package/dist/runtime/components/table/ui/table.vue +1 -1
  65. package/dist/runtime/components/tabs/lib.d.ts +26 -26
  66. package/dist/runtime/components/tabs/lib.js +1 -1
  67. package/dist/runtime/components/tabs/tabs-list.vue +5 -5
  68. package/dist/runtime/components/tabs/tabs-panel.vue +1 -1
  69. package/dist/runtime/components/tabs/tabs-root.d.vue.ts +5 -1
  70. package/dist/runtime/components/tabs/tabs-root.vue +16 -30
  71. package/dist/runtime/components/tabs/tabs-root.vue.d.ts +5 -1
  72. package/dist/runtime/components/tabs/tabs-tab.vue +4 -4
  73. package/dist/runtime/components/tabs/tabs.module.css +1 -1
  74. package/dist/runtime/components/text.vue +1 -1
  75. package/dist/runtime/components/time-picker/time-picker.vue +1 -1
  76. package/dist/runtime/components/tree/_ui/tree-item.vue +1 -0
  77. package/dist/runtime/components/tree/_ui/tree-root.vue +1 -1
  78. package/dist/runtime/components/tree/tree.vue +1 -1
  79. package/dist/runtime/modals/_confirm-modal/confirm-modal.vue +16 -6
  80. package/dist/runtime/styles/const.css +1 -1
  81. package/dist/runtime/types/styling.d.ts +2 -1
  82. package/package.json +2 -1
@@ -2,7 +2,7 @@ import type { Classes } from '@nui/types';
2
2
  import type { InputBaseProps } from '../types.js';
3
3
  import type { BaseInputProps } from './input-base.vue.js';
4
4
  import type { InputWrapperProps } from './input-wrapper.vue.js';
5
- export interface ButtonInputProps extends InputWrapperProps, BaseInputProps, InputBaseProps {
5
+ export interface ButtonInputProps extends InputWrapperProps, Omit<BaseInputProps, 'error'>, InputBaseProps {
6
6
  /**
7
7
  * If set, the input can have multiple lines, for example when `component="textarea"`
8
8
  * @default `false`
@@ -1,5 +1,5 @@
1
1
  <script setup>
2
- import { getFontSize, getRadius, getSize } from "@nui/utils";
2
+ import { getRadius, getSize } from "@nui/utils";
3
3
  import { computed } from "vue";
4
4
  import Box from "../../box.vue";
5
5
  import { useInputWrapperState } from "../lib/input-wrapper.context";
@@ -19,7 +19,7 @@ defineSlots();
19
19
  const api = computed(() => useInputWrapperState() ?? props);
20
20
  const style = computed(() => ({
21
21
  "--input-height": getSize(api.value.size, "input-height"),
22
- "--input-fz": getFontSize(api.value.size),
22
+ "--input-fz": getSize(api.value.size, "input-fz"),
23
23
  "--input-radius": api.value.radius === void 0 ? void 0 : getRadius(api.value.radius),
24
24
  "--input-padding-y": api.value.multiline ? getSize(api.value.size, "input-padding-y") : void 0,
25
25
  "--input-left-section-pointer-events": api.value.leftSectionPE,
@@ -60,5 +60,5 @@ const style = computed(() => ({
60
60
  </template>
61
61
 
62
62
  <style module>
63
- .root{--input-height-xs:rem(30px);--input-height-sm:rem(36px);--input-height-md:rem(42px);--input-height-lg:rem(50px);--input-height-xl:rem(60px);--input-padding-y-xs:rem(5px);--input-padding-y-sm:rem(6px);--input-padding-y-md:rem(8px);--input-padding-y-lg:rem(10px);--input-padding-y-xl:rem(13px);--input-height:var(--input-height-sm);--input-radius:var(--radius-default);--input-cursor:text;--input-text-align:left;--input-line-height:calc(var(--input-height) - rem(2px));--input-padding:calc(var(--input-height)/3);--input-padding-inline-start:var(--input-padding);--input-padding-inline-end:var(--input-padding);--input-placeholder-color:var(--color-placeholder);--input-color:var(--color-text);--input-left-section-width:calc(var(--input-height) - rem(2px));--input-right-section-width:calc(var(--input-height) - rem(2px));--input-left-section-pointer-events:none;--input-right-section-pointer-events:none;--input-left-section-size:var(--input-left-section-width);--input-right-section-size:var(--input-right-section-width);--input-fz:var(--font-size-sm);--input-size:var(--input-height);--input-resize:none;--section-y:1px;--left-section-start:1px;--left-section-border-radius:var(--input-radius) 0 0 var(--input-radius);--right-section-end:1px;--right-section-border-radius:0 var(--input-radius) var(--input-radius) 0;position:relative}.root[data-variant=unstyled]{--input-padding:0;--input-padding-y:0;--input-padding-inline-start:0;--input-padding-inline-end:0}.root[data-pointer]{--input-cursor:pointer}.root[data-multiline]{--input-padding-y-xs:4.5px;--input-padding-y-sm:5.5px;--input-padding-y-md:7px;--input-padding-y-lg:9.5px;--input-padding-y-xl:13px;--input-size:auto;--input-line-height:var(--line-height);--input-padding-y:var(--input-padding-y-sm)}.root[data-with-left-section]{--input-padding-inline-start:var(--input-left-section-size)}.root[data-with-right-section]{--input-padding-inline-end:var(--input-right-section-size)}.root{@mixin where-light{--input-disabled-bg:var(--color-gray-1);--input-disabled-color:var(--color-gray-6);&[data-variant=default]:not(&[data-error]){--input-bd:var(--color-gray-4);--input-bg:var(--color-white);--input-bd-focus:var(--color-primary-filled)}&[data-variant=filled]:not(&[data-error]){--input-bd:transparent;--input-bg:var(--color-gray-1);--input-bd-focus:var(--color-primary-filled)}&[data-variant=unstyled]:not(&[data-error]){--input-bd:transparent;--input-bg:transparent;--input-bd-focus:transparent}}}.root{@mixin where-dark{--input-disabled-bg:var(--color-dark-6);--input-disabled-color:var(--color-dark-2);&[data-variant=default]:not(&[data-error]){--input-bd:var(--color-dark-4);--input-bg:var(--color-dark-6);--input-bd-focus:var(--color-primary-filled)}&[data-variant=filled]:not(&[data-error]){--input-bd:transparent;--input-bg:var(--color-dark-5);--input-bd-focus:var(--color-primary-filled)}&[data-variant=unstyled]:not(&[data-error]){--input-bd:transparent;--input-bg:transparent;--input-bd-focus:transparent}}}.root[data-error]{--input-color:var(--color-error);--input-placeholder-color:var(--color-error);--input-section-color:var(--color-error);--input-bd:var(--color-error)}.root{@mixin where-rtl{--input-text-align:right;--left-section-border-radius:0 var(--input-radius) var(--input-radius) 0;--right-section-border-radius:var(--input-radius) 0 0 var(--input-radius)}}.input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-bg);border:rem(1px) solid var(--input-bd);border-radius:var(--input-radius);color:var(--input-color);cursor:var(--input-cursor);display:block;font-family:var(--font-family),serif;font-size:var(--input-fz);height:var(--input-size);line-height:var(--input-line-height);min-height:var(--input-height);overflow:var(--input-overflow);padding-bottom:var(--input-padding-y,0);padding-inline-end:var(--input-padding-inline-end);padding-top:var(--input-padding-y,0);padding-inline-start:var(--input-padding-inline-start);resize:var(--input-resize,none);text-align:var(--input-text-align);transition:border-color .1s ease;width:100%;-webkit-tap-highlight-color:transparent}.input[data-no-overflow]{--input-overflow:hidden}.input:focus,.input:focus-within{--input-bd:var(--input-bd-focus);outline:none}[data-error] .input:focus,[data-error] .input:focus-within{--input-bd:var(--color-error)}.input::-moz-placeholder{color:var(--input-placeholder-color);opacity:1}.input::placeholder{color:var(--input-placeholder-color);opacity:1}.input::-webkit-inner-spin-button,.input::-webkit-outer-spin-button,.input::-webkit-search-cancel-button,.input::-webkit-search-decoration,.input::-webkit-search-results-button,.input::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none}.input[type=number]{-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.input:disabled,.input:has(input:disabled),.input[data-disabled]{background-color:var(--input-disabled-bg);color:var(--input-disabled-color);cursor:not-allowed;opacity:.6}.input:-moz-read-only{cursor:default}.input:read-only{cursor:default}.section{align-items:center;border-radius:var(--section-border-radius);bottom:var(--section-y);color:var(--input-section-color,var(--color-dimmed));display:flex;inset-inline-end:var(--section-end);inset-inline-start:var(--section-start);justify-content:center;pointer-events:var(--section-pointer-events);position:absolute;top:var(--section-y);width:var(--section-size);z-index:1}.section[data-position=right]{--section-pointer-events:var(--input-right-section-pointer-events);--section-end:var(--right-section-end);--section-size:var(--input-right-section-size);--section-border-radius:var(--right-section-border-radius)}.section[data-position=left]{--section-pointer-events:var(--input-left-section-pointer-events);--section-start:var(--left-section-start);--section-size:var(--input-left-section-size);--section-border-radius:var(--left-section-border-radius)}
63
+ .root{--input-height-xs:rem(30px);--input-height-sm:rem(36px);--input-height-md:rem(42px);--input-height-lg:rem(50px);--input-height-xl:rem(60px);--input-fz-xs:var(--font-size-sm);--input-fz-sm:var(--font-size-md);--input-fz-md:var(--font-size-md);--input-fz-lg:var(--font-size-lg);--input-fz-xl:var(--font-size-xl);--input-padding-y-xs:rem(5px);--input-padding-y-sm:rem(6px);--input-padding-y-md:rem(8px);--input-padding-y-lg:rem(10px);--input-padding-y-xl:rem(13px);--input-height:var(--input-height-sm);--input-radius:var(--radius-default);--input-cursor:text;--input-text-align:left;--input-line-height:calc(var(--input-height) - rem(2px));--input-padding:calc(var(--input-height)/3);--input-padding-inline-start:var(--input-padding);--input-padding-inline-end:var(--input-padding);--input-placeholder-color:var(--color-placeholder);--input-color:var(--color-text);--input-left-section-width:calc(var(--input-height) - rem(2px));--input-right-section-width:calc(var(--input-height) - rem(2px));--input-left-section-pointer-events:none;--input-right-section-pointer-events:none;--input-left-section-size:var(--input-left-section-width);--input-right-section-size:var(--input-right-section-width);--input-fz:var(--font-size-md);--input-size:var(--input-height);--input-resize:none;--section-y:1px;--left-section-start:1px;--left-section-border-radius:var(--input-radius) 0 0 var(--input-radius);--right-section-end:1px;--right-section-border-radius:0 var(--input-radius) var(--input-radius) 0;position:relative}.root[data-variant=unstyled]{--input-padding:0;--input-padding-y:0;--input-padding-inline-start:0;--input-padding-inline-end:0}.root[data-pointer]{--input-cursor:pointer}.root[data-multiline]{--input-padding-y-xs:4.5px;--input-padding-y-sm:5.5px;--input-padding-y-md:7px;--input-padding-y-lg:9.5px;--input-padding-y-xl:13px;--input-size:auto;--input-line-height:var(--line-height);--input-padding-y:var(--input-padding-y-sm)}.root[data-with-left-section]{--input-padding-inline-start:var(--input-left-section-size)}.root[data-with-right-section]{--input-padding-inline-end:var(--input-right-section-size)}.root{@mixin where-light{--input-disabled-bg:var(--color-gray-1);--input-disabled-color:var(--color-gray-6);&[data-variant=default]:not(&[data-error]){--input-bd:var(--color-gray-4);--input-bg:var(--color-white);--input-bd-focus:var(--color-primary-filled)}&[data-variant=filled]:not(&[data-error]){--input-bd:transparent;--input-bg:var(--color-gray-1);--input-bd-focus:var(--color-primary-filled)}&[data-variant=unstyled]:not(&[data-error]){--input-bd:transparent;--input-bg:transparent;--input-bd-focus:transparent}}}.root{@mixin where-dark{--input-disabled-bg:var(--color-dark-6);--input-disabled-color:var(--color-dark-2);&[data-variant=default]:not(&[data-error]){--input-bd:var(--color-dark-4);--input-bg:var(--color-dark-6);--input-bd-focus:var(--color-primary-filled)}&[data-variant=filled]:not(&[data-error]){--input-bd:transparent;--input-bg:var(--color-dark-5);--input-bd-focus:var(--color-primary-filled)}&[data-variant=unstyled]:not(&[data-error]){--input-bd:transparent;--input-bg:transparent;--input-bd-focus:transparent}}}.root[data-error]{--input-color:var(--color-error);--input-placeholder-color:var(--color-error);--input-section-color:var(--color-error);--input-bd:var(--color-error)}.root{@mixin where-rtl{--input-text-align:right;--left-section-border-radius:0 var(--input-radius) var(--input-radius) 0;--right-section-border-radius:var(--input-radius) 0 0 var(--input-radius)}}.input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-bg);border:rem(1px) solid var(--input-bd);border-radius:var(--input-radius);color:var(--input-color);cursor:var(--input-cursor);display:block;font-family:var(--font-family),serif;font-size:var(--input-fz);height:var(--input-size);line-height:var(--input-line-height);min-height:var(--input-height);overflow:var(--input-overflow);padding-bottom:var(--input-padding-y,0);padding-inline-end:var(--input-padding-inline-end);padding-top:var(--input-padding-y,0);padding-inline-start:var(--input-padding-inline-start);resize:var(--input-resize,none);text-align:var(--input-text-align);transition:border-color .1s ease;width:100%;-webkit-tap-highlight-color:transparent}.input[data-no-overflow]{--input-overflow:hidden}.input:focus,.input:focus-within{--input-bd:var(--input-bd-focus);outline:none}[data-error] .input:focus,[data-error] .input:focus-within{--input-bd:var(--color-error)}.input::-moz-placeholder{color:var(--input-placeholder-color);opacity:1}.input::placeholder{color:var(--input-placeholder-color);opacity:1}.input::-webkit-inner-spin-button,.input::-webkit-outer-spin-button,.input::-webkit-search-cancel-button,.input::-webkit-search-decoration,.input::-webkit-search-results-button,.input::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none}.input[type=number]{-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.input:disabled,.input:has(input:disabled),.input[data-disabled]{background-color:var(--input-disabled-bg);color:var(--input-disabled-color);cursor:not-allowed;opacity:.6}.input:-moz-read-only{cursor:default}.input:read-only{cursor:default}.section{align-items:center;border-radius:var(--section-border-radius);bottom:var(--section-y);color:var(--input-section-color,var(--color-dimmed));display:flex;inset-inline-end:var(--section-end);inset-inline-start:var(--section-start);justify-content:center;pointer-events:var(--section-pointer-events);position:absolute;top:var(--section-y);width:var(--section-size);z-index:1}.section[data-position=right]{--section-pointer-events:var(--input-right-section-pointer-events);--section-end:var(--right-section-end);--section-size:var(--input-right-section-size);--section-border-radius:var(--right-section-border-radius)}.section[data-position=left]{--section-pointer-events:var(--input-left-section-pointer-events);--section-start:var(--left-section-start);--section-size:var(--input-left-section-size);--section-border-radius:var(--left-section-border-radius)}
64
64
  </style>
@@ -61,5 +61,5 @@ const style = computed(() => ({
61
61
  </template>
62
62
 
63
63
  <style module>
64
- .root{--label-lh-xs:rem(16px);--label-lh-sm:rem(20px);--label-lh-md:rem(24px);--label-lh-lg:rem(30px);--label-lh-xl:rem(36px);--label-lh:var(--label-lh-sm);--label-fz:var(--font-size-sm)}.root[data-label-position=left]{--label-order:0}.root[data-label-position=right]{--label-order:1}.body{display:flex;gap:var(--spacing-sm)}.wrapper{--label-cursor:default;cursor:var(--label-cursor);display:inline-flex;flex-direction:column;font-size:var(--label-fz);gap:.25rem;line-height:var(--label-lh);order:var(--label-order);-webkit-tap-highlight-color:transparent}.wrapper[data-disabled],fieldset:disabled .wrapper{--label-cursor:not-allowed}.wrapper:empty{display:none}.label{color:inherit;cursor:var(--label-cursor)}.label:where([data-disabled]),fieldset:disabled .label{color:var(--color-gray-5)}.description,.error{display:block;line-height:1.2;margin:0;overflow-wrap:break-word;padding:0}.description{color:var(--color-dimmed);font-size:var(--input-description-size,calc(var(--font-size-sm) - rem(2px)))}.error{color:var(--color-error);font-size:var(--input-error-size)}
64
+ .root{--label-lh-xs:rem(16px);--label-lh-sm:rem(20px);--label-lh-md:rem(24px);--label-lh-lg:rem(30px);--label-lh-xl:rem(36px);--label-lh:var(--label-lh-md);--label-fz:var(--font-size-md)}.root[data-label-position=left]{--label-order:0}.root[data-label-position=right]{--label-order:1}.body{display:flex;gap:var(--spacing-sm)}.wrapper{--label-cursor:default;cursor:var(--label-cursor);display:inline-flex;flex-direction:column;font-size:var(--label-fz);gap:.25rem;line-height:var(--label-lh);order:var(--label-order);-webkit-tap-highlight-color:transparent}.wrapper[data-disabled],fieldset:disabled .wrapper{--label-cursor:not-allowed}.wrapper:empty{display:none}.label{color:inherit;cursor:var(--label-cursor)}.label:where([data-disabled]),fieldset:disabled .label{color:var(--color-gray-5)}.description,.error{display:block;line-height:1.2;margin:0;overflow-wrap:break-word;padding:0}.description{color:var(--color-dimmed);font-size:var(--input-description-size,calc(var(--font-size-sm) - rem(2px)))}.error{color:var(--color-error);font-size:var(--input-error-size)}
65
65
  </style>
@@ -19,5 +19,5 @@ const style = computed(() => ({
19
19
  </template>
20
20
 
21
21
  <style module>
22
- .root{--input-label-size:var(--font-size-sm);--input-asterisk-color:var(--color-error);cursor:default;display:block;font-size:var(--input-label-size);font-weight:500;overflow-wrap:anywhere;word-break:normal;-webkit-tap-highlight-color:transparent}.required{color:var(--input-asterisk-color)}
22
+ .root{--input-label-size:var(--font-size-md);--input-asterisk-color:var(--color-error);cursor:default;display:block;font-size:var(--input-label-size);font-weight:500;overflow-wrap:anywhere;word-break:normal;-webkit-tap-highlight-color:transparent}.required{color:var(--input-asterisk-color)}
23
23
  </style>
@@ -56,5 +56,5 @@ const style = computed(() => ({
56
56
  </template>
57
57
 
58
58
  <style module>
59
- .wrapper{--input-error-size:calc(var(--font-size-sm) - rem(2px));--input-description-size:calc(var(--font-size-sm) - rem(2px));line-height:var(--line-height)}.description,.error{display:block;line-height:1.2;margin:0;overflow-wrap:break-word;padding:0}.error{color:var(--color-error);font-size:var(--input-error-size)}.description{color:var(--color-dimmed);font-size:var(--input-description-size,calc(var(--font-size-sm) - rem(2px)))}
59
+ .wrapper{--input-error-size:calc(var(--font-size-sm) - rem(2px));--input-description-size:calc(var(--font-size-sm) - rem(2px));line-height:var(--line-height)}.description,.error{display:block;line-height:1.2;margin:0;overflow-wrap:break-word;padding:0}.label{margin-bottom:.125rem}.error{color:var(--color-error);font-size:var(--input-error-size)}.description{color:var(--color-dimmed);font-size:var(--input-description-size,calc(var(--font-size-sm) - rem(2px)))}
60
60
  </style>
@@ -1,3 +1 @@
1
- export type * from './modal-header.vue';
2
1
  export type * from './modal-root.vue';
3
- export type * from './modal-title.vue';
@@ -0,0 +1,14 @@
1
+ import type { DialogFooterProps } from '../dialog/index.js';
2
+ declare var __VLS_8: {};
3
+ type __VLS_Slots = {} & {
4
+ default?: (props: typeof __VLS_8) => any;
5
+ };
6
+ declare const __VLS_base: import("vue").DefineComponent<DialogFooterProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DialogFooterProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
10
+ type __VLS_WithSlots<T, S> = T & {
11
+ new (): {
12
+ $slots: S;
13
+ };
14
+ };
@@ -0,0 +1,13 @@
1
+ <script setup>
2
+ import DialogFooter from "../dialog/ui/dialog-footer.vue";
3
+ const props = defineProps({
4
+ is: { type: null, required: false },
5
+ mod: { type: [Object, Array, null], required: false }
6
+ });
7
+ </script>
8
+
9
+ <template>
10
+ <DialogFooter v-bind='props'>
11
+ <slot />
12
+ </DialogFooter>
13
+ </template>
@@ -0,0 +1,14 @@
1
+ import type { DialogFooterProps } from '../dialog/index.js';
2
+ declare var __VLS_8: {};
3
+ type __VLS_Slots = {} & {
4
+ default?: (props: typeof __VLS_8) => any;
5
+ };
6
+ declare const __VLS_base: import("vue").DefineComponent<DialogFooterProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DialogFooterProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
10
+ type __VLS_WithSlots<T, S> = T & {
11
+ new (): {
12
+ $slots: S;
13
+ };
14
+ };
@@ -1,11 +1,9 @@
1
1
  import type { DialogHeaderProps } from '../dialog/index.js';
2
- export interface ModalHeaderProps extends DialogHeaderProps {
3
- }
4
2
  declare var __VLS_8: {};
5
3
  type __VLS_Slots = {} & {
6
4
  default?: (props: typeof __VLS_8) => any;
7
5
  };
8
- declare const __VLS_base: import("vue").DefineComponent<ModalHeaderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ModalHeaderProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const __VLS_base: import("vue").DefineComponent<DialogHeaderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DialogHeaderProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
7
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
8
  declare const _default: typeof __VLS_export;
11
9
  export default _default;
@@ -1,11 +1,9 @@
1
1
  import type { DialogHeaderProps } from '../dialog/index.js';
2
- export interface ModalHeaderProps extends DialogHeaderProps {
3
- }
4
2
  declare var __VLS_8: {};
5
3
  type __VLS_Slots = {} & {
6
4
  default?: (props: typeof __VLS_8) => any;
7
5
  };
8
- declare const __VLS_base: import("vue").DefineComponent<ModalHeaderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ModalHeaderProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const __VLS_base: import("vue").DefineComponent<DialogHeaderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DialogHeaderProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
7
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
8
  declare const _default: typeof __VLS_export;
11
9
  export default _default;
@@ -1,6 +1,5 @@
1
1
  import type { DialogModel, DialogRootProps } from '../dialog/index.js';
2
- type OmittedDialogRootProps = Omit<DialogRootProps, 'rootClass'>;
3
- export interface ModalRootProps extends OmittedDialogRootProps {
2
+ export interface ModalRootProps extends DialogRootProps {
4
3
  /** If set, the modal is centered vertically @default `false` */
5
4
  centered?: boolean;
6
5
  /** If set, the modal takes the entire screen @default `false` */
@@ -8,6 +8,7 @@ const {
8
8
  withoutOverlay = false,
9
9
  withinPortal = false,
10
10
  closeOnClickOutside = true,
11
+ classes,
11
12
  ...rest
12
13
  } = defineProps({
13
14
  centered: { type: Boolean, required: false },
@@ -15,6 +16,7 @@ const {
15
16
  closeOnClickOutside: { type: Boolean, required: false },
16
17
  withinPortal: { type: Boolean, required: false },
17
18
  withoutOverlay: { type: Boolean, required: false },
19
+ classes: { type: Object, required: false },
18
20
  portalTarget: { type: [String, Object, null], required: false },
19
21
  is: { type: null, required: false },
20
22
  mod: { type: [Object, Array, null], required: false },
@@ -34,11 +36,11 @@ const opened = defineModel("open", { type: Boolean, ...{ default: false } });
34
36
  <DialogRoot
35
37
  v-model:open='opened'
36
38
  :mod='[{ centered, "full-screen": fullScreen }, mod]'
37
- :root-class='css.root'
38
39
  :within-portal
39
40
  :close-on-click-outside
40
41
  :without-overlay
41
42
  v-bind='rest'
43
+ :classes='{ ...classes, root: [css.root, classes?.root] }'
42
44
  @open='$emit("open")'
43
45
  @close='$emit("close")'
44
46
  >
@@ -1,6 +1,5 @@
1
1
  import type { DialogModel, DialogRootProps } from '../dialog/index.js';
2
- type OmittedDialogRootProps = Omit<DialogRootProps, 'rootClass'>;
3
- export interface ModalRootProps extends OmittedDialogRootProps {
2
+ export interface ModalRootProps extends DialogRootProps {
4
3
  /** If set, the modal is centered vertically @default `false` */
5
4
  centered?: boolean;
6
5
  /** If set, the modal takes the entire screen @default `false` */
@@ -0,0 +1,14 @@
1
+ import type { DialogSectionProps } from '../dialog/index.js';
2
+ declare var __VLS_8: {};
3
+ type __VLS_Slots = {} & {
4
+ default?: (props: typeof __VLS_8) => any;
5
+ };
6
+ declare const __VLS_base: import("vue").DefineComponent<DialogSectionProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DialogSectionProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
10
+ type __VLS_WithSlots<T, S> = T & {
11
+ new (): {
12
+ $slots: S;
13
+ };
14
+ };
@@ -0,0 +1,14 @@
1
+ <script setup>
2
+ import DialogSection from "../dialog/ui/dialog-section.vue";
3
+ const props = defineProps({
4
+ bordered: { type: Boolean, required: false },
5
+ is: { type: null, required: false },
6
+ mod: { type: [Object, Array, null], required: false }
7
+ });
8
+ </script>
9
+
10
+ <template>
11
+ <DialogSection v-bind='props'>
12
+ <slot />
13
+ </DialogSection>
14
+ </template>
@@ -0,0 +1,14 @@
1
+ import type { DialogSectionProps } from '../dialog/index.js';
2
+ declare var __VLS_8: {};
3
+ type __VLS_Slots = {} & {
4
+ default?: (props: typeof __VLS_8) => any;
5
+ };
6
+ declare const __VLS_base: import("vue").DefineComponent<DialogSectionProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DialogSectionProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
10
+ type __VLS_WithSlots<T, S> = T & {
11
+ new (): {
12
+ $slots: S;
13
+ };
14
+ };
@@ -1,11 +1,9 @@
1
1
  import type { DialogTitleProps } from '../dialog/index.js';
2
- export interface ModalTitleProps extends DialogTitleProps {
3
- }
4
2
  declare var __VLS_8: {};
5
3
  type __VLS_Slots = {} & {
6
4
  default?: (props: typeof __VLS_8) => any;
7
5
  };
8
- declare const __VLS_base: import("vue").DefineComponent<ModalTitleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ModalTitleProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const __VLS_base: import("vue").DefineComponent<DialogTitleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DialogTitleProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
7
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
8
  declare const _default: typeof __VLS_export;
11
9
  export default _default;
@@ -1,11 +1,9 @@
1
1
  import type { DialogTitleProps } from '../dialog/index.js';
2
- export interface ModalTitleProps extends DialogTitleProps {
3
- }
4
2
  declare var __VLS_8: {};
5
3
  type __VLS_Slots = {} & {
6
4
  default?: (props: typeof __VLS_8) => any;
7
5
  };
8
- declare const __VLS_base: import("vue").DefineComponent<ModalTitleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ModalTitleProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const __VLS_base: import("vue").DefineComponent<DialogTitleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DialogTitleProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
7
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
8
  declare const _default: typeof __VLS_export;
11
9
  export default _default;
@@ -108,5 +108,5 @@ const style = useVarsResolver((theme) => {
108
108
  </template>
109
109
 
110
110
  <style module>
111
- .root{--nl-spacing-xs:.25rem;--nl-spacing-sm:.5rem;--nl-spacing-md:.75rem;--nl-spacing-lg:1rem;--nl-spacing-xl:1.25rem;--nl-bg:var(--color-primary-light);--nl-hover:var(--color-primary-light-hover);--nl-color:var(--color-primary-light-color);--nl-spacing:var(--nl-spacing-xs);align-items:center;border-radius:var(--radius-default);display:flex;gap:var(--nl-spacing);padding:.25rem var(--spacing-sm);-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.root:where([data-disabled]){opacity:.4;pointer-events:none}.root:hover{@mixin where-light{background-color:var(--color-gray-0)}@mixin where-dark{background-color:var(--color-dark-6)}}.root:where([data-active]){background-color:var(--nl-bg);color:var(--nl-color)}.root:where([data-active]) .description{--description-opacity:0.9;--description-color:var(--nl-color)}.root:where([data-active]):hover{background-color:var(--nl-hover)}.section{align-items:center;display:flex;justify-content:center;transition:transform .15s ease}.section>svg{display:block}.section:where([data-rotate]){transform:rotate(90deg)}.label{font-size:var(--font-size-sm)}.body{flex:1;overflow:hidden;text-overflow:ellipsis}.body:where([data-no-wrap]){white-space:nowrap}.description{color:var(--description-color,var(--color-dimmed));font-size:var(--font-size-xs);opacity:var(--description-opacity,1);overflow:hidden;text-overflow:ellipsis}:where([data-no-wrap]) .description{white-space:nowrap}
111
+ .root{--nl-spacing-xs:.25rem;--nl-spacing-sm:.5rem;--nl-spacing-md:.75rem;--nl-spacing-lg:1rem;--nl-spacing-xl:1.25rem;--nl-bg:var(--color-primary-light);--nl-hover:var(--color-primary-light-hover);--nl-color:var(--color-primary-light-color);--nl-spacing:var(--nl-spacing-xs);align-items:center;border-radius:var(--radius-default);display:flex;gap:var(--nl-spacing);padding:.25rem var(--spacing-sm);-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.root:where([data-disabled]){opacity:.4;pointer-events:none}.root:hover{@mixin where-light{background-color:var(--color-gray-0)}@mixin where-dark{background-color:var(--color-dark-6)}}.root:where([data-active]){background-color:var(--nl-bg);color:var(--nl-color)}.root:where([data-active]) .description{--description-opacity:0.9;--description-color:var(--nl-color)}.root:where([data-active]):hover{background-color:var(--nl-hover)}.section{align-items:center;display:flex;justify-content:center;transition:transform .15s ease}.section>svg{display:block}.section:where([data-rotate]){transform:rotate(90deg)}.label{font-size:var(--font-size-md)}.body{flex:1;overflow:hidden;text-overflow:ellipsis}.body:where([data-no-wrap]){white-space:nowrap}.description{color:var(--description-color,var(--color-dimmed));font-size:var(--font-size-sm);opacity:var(--description-opacity,1);overflow:hidden;text-overflow:ellipsis}:where([data-no-wrap]) .description{white-space:nowrap}
112
112
  </style>
@@ -16,7 +16,7 @@ const {
16
16
  otp = true,
17
17
  type = "number",
18
18
  mask,
19
- gap,
19
+ gap = "xs",
20
20
  placeholder,
21
21
  autoFocus,
22
22
  manageFocus = true,
@@ -142,7 +142,7 @@ const style = useVarsResolver(() => ({
142
142
  :input-mode
143
143
  :type='mask ? "password" : "text"'
144
144
  :placeholder
145
- :auto-focus='autoFocus && ix === 0'
145
+ :autofocus='autoFocus && ix === 0'
146
146
  :readonly='readOnly'
147
147
  :disabled
148
148
  @input='handleInput($event, ix)'
@@ -4,11 +4,12 @@ export interface SegmentedControlItem {
4
4
  value: string;
5
5
  label: string;
6
6
  disabled?: boolean;
7
+ icon?: string;
7
8
  }
8
9
  export interface SegmentedControlProps extends BoxProps {
9
10
  /** Items to render as controls */
10
11
  data: (string | SegmentedControlItem)[];
11
- /** Component size */
12
+ /** Component size @default 'md' */
12
13
  size?: NuanceSize | AnyString;
13
14
  /** Border radius */
14
15
  radius?: NuanceRadius;
@@ -119,12 +119,15 @@ const style = useVarsResolver((theme) => ({
119
119
  "read-only": readOnly
120
120
  }'
121
121
  >
122
- <span :class='$style.innerLabel'>{{ item.label }}</span>
122
+ <span :class='$style.innerLabel'>
123
+ <Icon v-if='item?.icon' :name='item.icon' />
124
+ {{ item.label }}
125
+ </span>
123
126
  </Box>
124
127
  </Box>
125
128
  </Box>
126
129
  </template>
127
130
 
128
131
  <style module>
129
- .root{--sc-padding-xs:2px 6px;--sc-padding-sm:3px 10px;--sc-padding-md:4px 14px;--sc-padding-lg:7px 16px;--sc-padding-xl:10px 20px;--sc-padding:var(--sc-padding-sm);--sc-radius:var(--radius-md);--sc-transition-duration:200ms;--sc-transition-timing-function:ease;--sc-font-size:var(--font-size-sm);border-radius:var(--sc-radius,var(--radius-md));display:inline-flex;flex-direction:row;overflow:hidden;padding:4px;position:relative;width:auto}.root:where([data-full-width]){display:flex}.root:where([data-orientation=vertical]){display:flex;flex-direction:column;width:-moz-max-content;width:max-content}.root:where([data-orientation=vertical]):where([data-full-width]){width:auto}.root{@mixin where-light{background-color:var(--color-gray-1)}}.root{@mixin where-dark{background-color:var(--color-dark-8)}}.indicator{border-radius:calc(var(--sc-radius, var(--radius-md)) + 2px);display:block;position:absolute;z-index:1}.indicator:where([data-orientation=horizontal]){bottom:4px;top:4px}.indicator:where([data-orientation=vertical]){left:4px;right:4px}.indicator{@mixin where-light{background-color:var(--sc-color,var(--color-white));box-shadow:var(--sc-shadow,none)}}.indicator{@mixin where-dark{background-color:var(--sc-color,var(--color-dark-5));box-shadow:none}}.label{border-radius:calc(var(--sc-radius, var(--radius-md)) + 2px);cursor:pointer;display:block;font-size:var(--sc-font-size);font-weight:500;outline:var(--segmented-control-outline,none);overflow:hidden;padding:var(--sc-padding);text-align:center;text-overflow:ellipsis;transition:color var(--sc-transition-duration) var(--sc-transition-timing-function);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;-webkit-tap-highlight-color:transparent;@mixin where-light{color:var(--color-gray-7)}@mixin where-dark{color:var(--color-dark-1)}}.label:where([data-read-only]){cursor:default}.label:where([data-active]){@mixin where-light{color:var(--sc-label-color,var(--color-black))}@mixin where-dark{color:var(--sc-label-color,var(--color-white))}}.label:where([data-active]):before{border-radius:calc(var(--sc-radius, var(--radius-md)) + 2px);content:"";inset:0;position:absolute;z-index:0}.root:where([data-initialized]) .label:where([data-active]):before{display:none}.label:where([data-active]):before{@mixin where-light{box-shadow:var(--sc-shadow,none)}}.label:where([data-active]):before{@mixin where-dark{box-shadow:none}}.label:where([data-active])[data-disabled],fieldset:disabled .label:where([data-active]){color:var(--color-disabled-text);cursor:not-allowed}.label:where(:not([data-disabled],[data-active],[data-read-only])){@mixin hover{@mixin where-light{color:var(--color-black)}@mixin where-dark{color:var(--color-white)}}}fieldset:disabled .label{@mixin hover{color:var(--color-disabled-text)!important}}.input{height:0;opacity:0;overflow:hidden;position:absolute;white-space:nowrap;width:0}.input:focus-visible+.label{--segmented-control-outline:2px solid var(--color-primary-filled)}.control{flex:1;position:relative;transition:border-color var(--sc-transition-duration) var(--sc-transition-timing-function);z-index:2}.root[data-with-items-borders] :where(.control):before{background-color:var(--separator-color);bottom:0;content:"";inset-inline-start:0;position:absolute;top:0;transition:background-color var(--sc-transition-duration) var(--sc-transition-timing-function);width:1px}.control[data-orientation=vertical]:before{bottom:auto;height:1px;top:0;inset-inline:0;width:auto}.control:first-of-type:before,[data-mantine-color-scheme] .control[data-active]+.control:before,[data-mantine-color-scheme] .control[data-active]:before{--separator-color:transparent}.control{@mixin where-light{--separator-color:var(--color-gray-3)}}.control{@mixin where-dark{--separator-color:var(--color-dark-4)}}.innerLabel{position:relative;z-index:2}
132
+ .root{--sc-padding-xs:2px 6px;--sc-padding-sm:3px 10px;--sc-padding-md:4px 14px;--sc-padding-lg:7px 16px;--sc-padding-xl:10px 20px;--sc-padding:var(--sc-padding-md);--sc-radius:var(--radius-sm);--sc-transition-duration:200ms;--sc-transition-timing-function:ease;--sc-font-size:var(--font-size-md);border-radius:var(--sc-radius,var(--radius-default));display:inline-flex;flex-direction:row;overflow:hidden;padding:4px;position:relative;width:auto}.root:where([data-full-width]){display:flex}.root:where([data-orientation=vertical]){display:flex;flex-direction:column;width:-moz-max-content;width:max-content}.root:where([data-orientation=vertical]):where([data-full-width]){width:auto}.root{@mixin where-light{background-color:var(--color-gray-1)}}.root{@mixin where-dark{background-color:var(--color-dark-8)}}.indicator{border-radius:var(--sc-radius,var(--radius-md));display:block;position:absolute;z-index:1}.indicator:where([data-orientation=horizontal]){bottom:4px;top:4px}.indicator:where([data-orientation=vertical]){left:4px;right:4px}.indicator{@mixin where-light{background-color:var(--sc-color,var(--color-white));box-shadow:var(--sc-shadow,none)}}.indicator{@mixin where-dark{background-color:var(--sc-color,var(--color-dark-5));box-shadow:none}}.label{border-radius:var(--sc-radius,var(--radius-md));cursor:pointer;display:block;font-size:var(--sc-font-size);font-weight:500;outline:var(--segmented-control-outline,none);overflow:hidden;padding:var(--sc-padding);text-align:center;text-overflow:ellipsis;transition:color var(--sc-transition-duration) var(--sc-transition-timing-function);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;-webkit-tap-highlight-color:transparent;@mixin where-light{color:var(--color-gray-7)}@mixin where-dark{color:var(--color-dark-1)}}.label:where([data-read-only]){cursor:default}.label:where([data-active]){@mixin where-light{color:var(--sc-label-color,var(--color-black))}@mixin where-dark{color:var(--sc-label-color,var(--color-white))}}.label:where([data-active]):before{border-radius:var(--sc-radius,var(--radius-md));content:"";inset:0;position:absolute;z-index:0}.root:where([data-initialized]) .label:where([data-active]):before{display:none}.label:where([data-active]):before{@mixin where-light{box-shadow:var(--sc-shadow,none)}}.label:where([data-active]):before{@mixin where-dark{box-shadow:none}}.label:where([data-active])[data-disabled],fieldset:disabled .label:where([data-active]){color:var(--color-disabled-text);cursor:not-allowed}.label:where(:not([data-disabled],[data-active],[data-read-only])){@mixin hover{@mixin where-light{color:var(--color-black)}@mixin where-dark{color:var(--color-white)}}}fieldset:disabled .label{@mixin hover{color:var(--color-disabled-text)!important}}.input{height:0;opacity:0;overflow:hidden;position:absolute;white-space:nowrap;width:0}.input:focus-visible+.label{--segmented-control-outline:2px solid var(--color-primary-filled)}.control{flex:1;position:relative;transition:border-color var(--sc-transition-duration) var(--sc-transition-timing-function);z-index:2}.root[data-with-items-borders] :where(.control):before{background-color:var(--separator-color);bottom:0;content:"";inset-inline-start:0;position:absolute;top:0;transition:background-color var(--sc-transition-duration) var(--sc-transition-timing-function);width:1px}.control[data-orientation=vertical]:before{bottom:auto;height:1px;top:0;inset-inline:0;width:auto}.control:first-of-type:before,[data-mantine-color-scheme] .control[data-active]+.control:before,[data-mantine-color-scheme] .control[data-active]:before{--separator-color:transparent}.control{@mixin where-light{--separator-color:var(--color-gray-3)}}.control{@mixin where-dark{--separator-color:var(--color-dark-4)}}.innerLabel{align-items:center;display:inline-flex;gap:var(--spacing-2xs);position:relative;z-index:2}
130
133
  </style>
@@ -4,11 +4,12 @@ export interface SegmentedControlItem {
4
4
  value: string;
5
5
  label: string;
6
6
  disabled?: boolean;
7
+ icon?: string;
7
8
  }
8
9
  export interface SegmentedControlProps extends BoxProps {
9
10
  /** Items to render as controls */
10
11
  data: (string | SegmentedControlItem)[];
11
- /** Component size */
12
+ /** Component size @default 'md' */
12
13
  size?: NuanceSize | AnyString;
13
14
  /** Border radius */
14
15
  radius?: NuanceRadius;
@@ -365,5 +365,5 @@ defineExpose({
365
365
  </template>
366
366
 
367
367
  <style module>
368
- .root{--table-color:var(--color-primary-4);--table-loader-color:var(--table-color);--table-loader-animation:carousel 2s ease-in-out infinite;--table-padding-x:.5rem;--table-padding-y:.5rem;--vertical-align:baseline;overflow:auto;position:relative}.root:not([data-virtualize]) .table{overflow:clip}.root:not([data-virtualize]) .tbody>tr:not(:last-of-type){border-bottom:1px solid var(--table-bd-color)}.root{@mixin where-light{--table-active-bg:alpha(var(--color-dark-1),.5);--table-c:var(--color-dark-7);--table-bd-color:var(--color-dark-3)}}.root{@mixin where-dark{--table-active-bg:alpha(var(--color-dark-7),.5);--table-c:var(--color-dark-4);--table-bd-color:var(--color-dark-7)}}.table{border-collapse:collapse;min-width:100%}.thead{position:relative}.thead[data-loading]:after{animation:var(--table-loader-animation);background-color:alpha(var(--table-loader-color),.75);content:"";height:1px;position:absolute;z-index:1}.thead[data-sticky]{backdrop-filter:blur(8px);background-color:alpha(var(--color-body),.75);position:sticky;top:0;inset-inline:0;z-index:1}.th{color:var(--table-c);font-weight:600;padding-block:var(--table-padding-y);padding-inline:var(--table-padding-x);text-align:left;vertical-align:var(--vertical-align)}.th:has([role=checkbox]){padding-inline-end:0}.th[data-pinned],.tr td[data-pinned]{background-color:alpha(var(--color-body),.75);position:sticky;z-index:1}.tbody{isolation:isolate}.tfoot{position:relative}.tfoot[data-sticky]{backdrop-filter:blur(8px);background-color:var(--color-body);bottom:0;inset-inline:0;position:sticky;z-index:1}.tr[data-selectable]:hover{background-color:var(--table-active-bg)}.tr[data-selectable]:focus-visible{outline:1px solid var(--table-color)}.tr[data-selected]{background-color:var(--table-active-bg)}.tr td{color:var(--table-c);padding-block:var(--table-padding-y);padding-inline:var(--table-padding-x);vertical-align:var(--vertical-align);white-space:nowrap}.tr td:has([role=checkbox]){padding-inline-end:0}.separator{background-color:var(--table-bd-color);height:1px;left:0;position:absolute;width:100%;z-index:1}.empty,.loading{padding-inline:1.5rem;text-align:center}@keyframes carousel{0%{transform:translate(-100%);width:50%}to{transform:translate(200%);width:50%}}
368
+ .root{--table-color:var(--color-primary-4);--table-loader-color:var(--table-color);--table-loader-animation:carousel 2s ease-in-out infinite;--table-padding-x:.5rem;--table-padding-y:.5rem;--vertical-align:baseline;--table-active-bg:var(--color-default);--table-c:var(--color-text);overflow:auto;position:relative}.root:not([data-virtualize]) .table{overflow:clip}.root:not([data-virtualize]) .tbody>tr:not(:last-of-type){border-bottom:1px solid var(--color-default-border)}.table{border-collapse:collapse;min-width:100%}.thead{position:relative}.thead[data-loading]:after{animation:var(--table-loader-animation);background-color:alpha(var(--table-loader-color),.75);content:"";height:1px;position:absolute;z-index:1}.thead[data-sticky]{backdrop-filter:blur(8px);background-color:alpha(var(--color-body),.75);position:sticky;top:0;inset-inline:0;z-index:1}.th{color:var(--table-c);font-weight:600;padding-block:var(--table-padding-y);padding-inline:var(--table-padding-x);text-align:left;vertical-align:var(--vertical-align)}.th:has([role=checkbox]){padding-inline-end:0}.th[data-pinned],.tr td[data-pinned]{background-color:alpha(var(--color-body),.75);position:sticky;z-index:1}.tbody{isolation:isolate}.tfoot{position:relative}.tfoot[data-sticky]{backdrop-filter:blur(8px);background-color:var(--color-body);bottom:0;inset-inline:0;position:sticky;z-index:1}.tr[data-selectable]:hover{background-color:var(--table-active-bg)}.tr[data-selectable]:focus-visible{outline:1px solid var(--table-color)}.tr[data-selected]{background-color:var(--table-active-bg)}.tr td{color:var(--table-c);padding-block:var(--table-padding-y);padding-inline:var(--table-padding-x);vertical-align:var(--vertical-align);white-space:nowrap}.tr td:has([role=checkbox]){padding-inline-end:0}.separator{background-color:var(--color-default-border);height:1px;left:0;position:absolute;width:100%;z-index:1}.empty,.loading{padding-inline:1.5rem;text-align:center}@keyframes carousel{0%{transform:translate(-100%);width:50%}to{transform:translate(200%);width:50%}}
369
369
  </style>
@@ -1,40 +1,40 @@
1
- import type { ModelRef } from 'vue';
1
+ import type { ComputedRef, ModelRef, Ref } from 'vue';
2
2
  export interface TabsContext {
3
3
  /**
4
4
  * Unique identifier for the entire tabs group.
5
5
  * Used as a prefix for generating accessible tab and panel IDs.
6
6
  */
7
- id: string;
7
+ id: ComputedRef<string>;
8
8
  /**
9
9
  * Two-way bound active tab value.
10
10
  * `null` means no tab is selected (only possible when `allowTabDeactivation` is `true`).
11
11
  */
12
12
  active: ModelRef<string | null>;
13
13
  /** Whether keyboard navigation should loop from last to first (and vice versa). */
14
- loop: boolean;
14
+ loop: Ref<boolean>;
15
15
  /** Whether pressing Enter/Space on a focused tab should activate it. */
16
- activateTabWithKeyboard: boolean;
16
+ activateTabWithKeyboard: Ref<boolean>;
17
17
  /**
18
18
  * Allows clicking an already active tab to deactivate it (sets `active` to `null`).
19
19
  * Useful for "deselectable" tabs.
20
20
  */
21
- allowTabDeactivation: boolean;
21
+ allowTabDeactivation: Ref<boolean>;
22
22
  /** Visual variant of the tabs component. */
23
- variant: 'default' | 'pills' | 'outline';
23
+ variant: Ref<'default' | 'pills' | 'outline'>;
24
24
  /** Inverted color scheme (typically used on dark backgrounds). */
25
- inverted: boolean;
25
+ inverted: Ref<boolean | undefined>;
26
26
  /**
27
27
  * Keep tab panels mounted in the DOM when inactive.
28
28
  * Useful for preserving state, animations, or SEO.
29
29
  */
30
- keepMounted: boolean;
30
+ keepMounted: Ref<boolean>;
31
31
  /**
32
32
  * For vertical tabs: placement of the tab list relative to the panels.
33
33
  * `'left'` → tabs on the left, `'right'` → tabs on the right.
34
34
  */
35
- placement: 'right' | 'left';
35
+ placement: Ref<'right' | 'left'>;
36
36
  /** Explicit orientation. Usually inferred from layout, but can be forced. */
37
- orientation?: 'vertical' | 'horizontal';
37
+ orientation: Ref<'vertical' | 'horizontal'>;
38
38
  /**
39
39
  * Generates a unique accessible ID for a tab element based on its value.
40
40
  * @param value - The logical value of the tab (e.g. `'profile'`, `'settings'`)
@@ -55,27 +55,27 @@ export declare const useProvideTabsContext: (args_0: TabsContext) => {
55
55
  * Unique identifier for the entire tabs group.
56
56
  * Used as a prefix for generating accessible tab and panel IDs.
57
57
  */
58
- id: string;
58
+ id: ComputedRef<string>;
59
59
  /** Whether keyboard navigation should loop from last to first (and vice versa). */
60
- loop: boolean;
60
+ loop: Ref<boolean>;
61
61
  /** Whether pressing Enter/Space on a focused tab should activate it. */
62
- activateTabWithKeyboard: boolean;
62
+ activateTabWithKeyboard: Ref<boolean>;
63
63
  /** Visual variant of the tabs component. */
64
- variant: "default" | "pills" | "outline";
64
+ variant: Ref<"default" | "pills" | "outline">;
65
65
  /** Inverted color scheme (typically used on dark backgrounds). */
66
- inverted: boolean;
66
+ inverted: Ref<boolean | undefined>;
67
67
  /**
68
68
  * Keep tab panels mounted in the DOM when inactive.
69
69
  * Useful for preserving state, animations, or SEO.
70
70
  */
71
- keepMounted: boolean;
71
+ keepMounted: Ref<boolean>;
72
72
  /**
73
73
  * For vertical tabs: placement of the tab list relative to the panels.
74
74
  * `'left'` → tabs on the left, `'right'` → tabs on the right.
75
75
  */
76
- placement: "right" | "left";
76
+ placement: Ref<"right" | "left">;
77
77
  /** Explicit orientation. Usually inferred from layout, but can be forced. */
78
- orientation?: "vertical" | "horizontal";
78
+ orientation: Ref<"vertical" | "horizontal">;
79
79
  /**
80
80
  * Generates a unique accessible ID for a tab element based on its value.
81
81
  * @param value - The logical value of the tab (e.g. `'profile'`, `'settings'`)
@@ -106,27 +106,27 @@ export declare const useTabsState: () => {
106
106
  * Unique identifier for the entire tabs group.
107
107
  * Used as a prefix for generating accessible tab and panel IDs.
108
108
  */
109
- id: string;
109
+ id: ComputedRef<string>;
110
110
  /** Whether keyboard navigation should loop from last to first (and vice versa). */
111
- loop: boolean;
111
+ loop: Ref<boolean>;
112
112
  /** Whether pressing Enter/Space on a focused tab should activate it. */
113
- activateTabWithKeyboard: boolean;
113
+ activateTabWithKeyboard: Ref<boolean>;
114
114
  /** Visual variant of the tabs component. */
115
- variant: "default" | "pills" | "outline";
115
+ variant: Ref<"default" | "pills" | "outline">;
116
116
  /** Inverted color scheme (typically used on dark backgrounds). */
117
- inverted: boolean;
117
+ inverted: Ref<boolean | undefined>;
118
118
  /**
119
119
  * Keep tab panels mounted in the DOM when inactive.
120
120
  * Useful for preserving state, animations, or SEO.
121
121
  */
122
- keepMounted: boolean;
122
+ keepMounted: Ref<boolean>;
123
123
  /**
124
124
  * For vertical tabs: placement of the tab list relative to the panels.
125
125
  * `'left'` → tabs on the left, `'right'` → tabs on the right.
126
126
  */
127
- placement: "right" | "left";
127
+ placement: Ref<"right" | "left">;
128
128
  /** Explicit orientation. Usually inferred from layout, but can be forced. */
129
- orientation?: "vertical" | "horizontal";
129
+ orientation: Ref<"vertical" | "horizontal">;
130
130
  /**
131
131
  * Generates a unique accessible ID for a tab element based on its value.
132
132
  * @param value - The logical value of the tab (e.g. `'profile'`, `'settings'`)
@@ -6,7 +6,7 @@ const [
6
6
  ...state,
7
7
  active,
8
8
  onUpdate: (tab) => {
9
- if (allowTabDeactivation)
9
+ if (allowTabDeactivation.value)
10
10
  return active.value = active.value === tab ? null : tab;
11
11
  return active.value = tab;
12
12
  }
@@ -20,13 +20,13 @@ const style = computed(() => ({ "--tabs-justify": justify }));
20
20
  :class='css.list'
21
21
  role='tablist'
22
22
  :mod='[mod, {
23
- variant: ctx?.variant,
23
+ variant: ctx?.variant.value,
24
24
  grow,
25
- orientation: ctx?.orientation,
26
- placement: ctx?.orientation === "vertical" && ctx.placement,
27
- inverted: ctx?.inverted
25
+ orientation: ctx?.orientation.value,
26
+ placement: ctx?.orientation.value === "vertical" && ctx.placement.value,
27
+ inverted: ctx?.inverted.value
28
28
  }]'
29
- :aria-orientation='ctx?.orientation'
29
+ :aria-orientation='ctx?.orientation.value'
30
30
  >
31
31
  <slot />
32
32
  </Box>
@@ -14,7 +14,7 @@ const ctx = useTabsState();
14
14
  <Box
15
15
  :is
16
16
  :id='ctx?.getPanelId(value)'
17
- :mod='[mod, { orientation: ctx?.orientation }]'
17
+ :mod='[mod, { orientation: ctx?.orientation.value }]'
18
18
  :data-active='ctx?.active.value === value'
19
19
  :class='css.panel'
20
20
  role='tabpanel'
@@ -61,7 +61,11 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
61
61
  "update:modelValue": (value: string | null) => any;
62
62
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
63
63
  "onUpdate:modelValue"?: ((value: string | null) => any) | undefined;
64
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
64
+ }>, {
65
+ orientation: "vertical" | "horizontal";
66
+ variant: TabsVariant;
67
+ placement: "left" | "right";
68
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
65
69
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
66
70
  declare const _default: typeof __VLS_export;
67
71
  export default _default;