@hina-ui/vue 1.0.0 → 1.1.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.
Files changed (70) hide show
  1. package/dist/index.js +299 -84
  2. package/dist/index.js.map +1 -1
  3. package/dist/types/components/checkbox/Checkbox.vue.d.ts +2 -0
  4. package/dist/types/components/checkbox/Checkbox.vue.d.ts.map +1 -1
  5. package/dist/types/components/checkbox/checkbox.variants.d.ts +75 -2
  6. package/dist/types/components/checkbox/checkbox.variants.d.ts.map +1 -1
  7. package/dist/types/components/checkbox-group/CheckboxGroup.vue.d.ts +2 -0
  8. package/dist/types/components/checkbox-group/CheckboxGroup.vue.d.ts.map +1 -1
  9. package/dist/types/components/checkbox-group/checkbox-group.variants.d.ts +34 -0
  10. package/dist/types/components/checkbox-group/checkbox-group.variants.d.ts.map +1 -1
  11. package/dist/types/components/combobox/Combobox.vue.d.ts.map +1 -1
  12. package/dist/types/components/date-picker/DatePicker.vue.d.ts.map +1 -1
  13. package/dist/types/components/date-range-picker/DateRangePicker.vue.d.ts.map +1 -1
  14. package/dist/types/components/date-time-picker/DateTimePicker.vue.d.ts.map +1 -1
  15. package/dist/types/components/form-field/FormField.vue.d.ts +7 -4
  16. package/dist/types/components/form-field/FormField.vue.d.ts.map +1 -1
  17. package/dist/types/components/form-field/form-field.variants.d.ts +73 -1
  18. package/dist/types/components/form-field/form-field.variants.d.ts.map +1 -1
  19. package/dist/types/components/form-field/types.d.ts +6 -0
  20. package/dist/types/components/form-field/types.d.ts.map +1 -0
  21. package/dist/types/components/form-layout/FormLayout.vue.d.ts +2 -1
  22. package/dist/types/components/form-layout/FormLayout.vue.d.ts.map +1 -1
  23. package/dist/types/components/form-layout/context.d.ts +7 -0
  24. package/dist/types/components/form-layout/context.d.ts.map +1 -0
  25. package/dist/types/components/input/InputBase.vue.d.ts.map +1 -1
  26. package/dist/types/components/input/input.variants.d.ts +1 -1
  27. package/dist/types/components/input/input.variants.d.ts.map +1 -1
  28. package/dist/types/components/input-group/InputGroup.vue.d.ts.map +1 -1
  29. package/dist/types/components/multi-combobox/MultiCombobox.vue.d.ts.map +1 -1
  30. package/dist/types/components/multi-select/MultiSelect.vue.d.ts.map +1 -1
  31. package/dist/types/components/number-input/NumberInput.vue.d.ts.map +1 -1
  32. package/dist/types/components/radio-group/RadioGroup.vue.d.ts +2 -0
  33. package/dist/types/components/radio-group/RadioGroup.vue.d.ts.map +1 -1
  34. package/dist/types/components/select/Select.vue.d.ts.map +1 -1
  35. package/dist/types/components/switch/Switch.vue.d.ts +3 -0
  36. package/dist/types/components/switch/Switch.vue.d.ts.map +1 -1
  37. package/dist/types/components/tags-input/TagsInput.vue.d.ts.map +1 -1
  38. package/dist/types/components/textarea/Textarea.vue.d.ts.map +1 -1
  39. package/dist/types/components/tree-select/TreeSelect.vue.d.ts.map +1 -1
  40. package/dist/types/index.d.ts +1 -0
  41. package/dist/types/index.d.ts.map +1 -1
  42. package/package.json +1 -1
  43. package/src/components/checkbox/Checkbox.vue +25 -4
  44. package/src/components/checkbox/checkbox.variants.ts +34 -3
  45. package/src/components/checkbox-group/CheckboxGroup.vue +11 -2
  46. package/src/components/checkbox-group/checkbox-group.variants.ts +9 -0
  47. package/src/components/combobox/Combobox.vue +1 -0
  48. package/src/components/date-picker/DatePicker.vue +1 -0
  49. package/src/components/date-range-picker/DateRangePicker.vue +1 -0
  50. package/src/components/date-time-picker/DateTimePicker.vue +1 -0
  51. package/src/components/form-field/FormField.vue +82 -37
  52. package/src/components/form-field/form-field.variants.ts +39 -0
  53. package/src/components/form-field/types.ts +5 -0
  54. package/src/components/form-layout/FormLayout.vue +13 -7
  55. package/src/components/form-layout/context.ts +19 -0
  56. package/src/components/input/InputBase.vue +1 -0
  57. package/src/components/input/input.variants.ts +7 -3
  58. package/src/components/input-group/InputGroup.vue +5 -1
  59. package/src/components/multi-combobox/MultiCombobox.vue +1 -0
  60. package/src/components/multi-select/MultiSelect.vue +1 -0
  61. package/src/components/number-input/NumberInput.vue +1 -0
  62. package/src/components/radio-group/RadioGroup.vue +26 -5
  63. package/src/components/select/Select.vue +1 -0
  64. package/src/components/switch/Switch.vue +26 -4
  65. package/src/components/tags-input/TagsInput.vue +1 -0
  66. package/src/components/textarea/Textarea.vue +1 -0
  67. package/src/components/textarea/textarea.variants.ts +1 -1
  68. package/src/components/tree-select/TreeSelect.vue +1 -0
  69. package/src/index.ts +1 -0
  70. package/src/styles/interaction.css +2 -2
@@ -4,6 +4,7 @@
4
4
  import { useFieldControl } from '../form-field/context'
5
5
  import {
6
6
  checkbox,
7
+ checkboxControl,
7
8
  checkboxBox,
8
9
  checkboxDescription,
9
10
  checkboxTitle,
@@ -12,6 +13,7 @@
12
13
  } from '../checkbox/checkbox.variants'
13
14
  import {
14
15
  checkboxGroup,
16
+ checkboxGroupItem,
15
17
  type CheckboxGroupVariants,
16
18
  } from '../checkbox-group/checkbox-group.variants'
17
19
  import type { SelectOption } from '../select/types'
@@ -23,6 +25,8 @@
23
25
  options: SelectOption[]
24
26
  orientation?: CheckboxGroupVariants['orientation']
25
27
  size?: CheckboxVariants['size']
28
+ controlPlacement?: CheckboxVariants['controlPlacement']
29
+ block?: boolean
26
30
  disabled?: boolean
27
31
  invalid?: boolean
28
32
  class?: string
@@ -46,7 +50,7 @@
46
50
  :aria-describedby="describedBy"
47
51
  :aria-invalid="invalid || undefined"
48
52
  data-hn-radio-group
49
- :class="cn(checkboxGroup({ orientation: props.orientation }), props.class)"
53
+ :class="cn(checkboxGroup({ orientation: props.orientation, block: props.block }), props.class)"
50
54
  >
51
55
  <label
52
56
  v-for="option in props.options"
@@ -54,7 +58,16 @@
54
58
  data-hn-radio
55
59
  data-hn-state-group
56
60
  :data-disabled="disabled || option.disabled ? '' : undefined"
57
- :class="checkbox({ size: props.size })"
61
+ :class="
62
+ cn(
63
+ checkbox({
64
+ size: props.size,
65
+ controlPlacement: props.controlPlacement,
66
+ block: props.block,
67
+ }),
68
+ checkboxGroupItem({ orientation: props.orientation, block: props.block }),
69
+ )
70
+ "
58
71
  >
59
72
  <RadioGroupItem
60
73
  v-slot="{ checked }"
@@ -62,7 +75,12 @@
62
75
  :disabled="option.disabled"
63
76
  :aria-invalid="invalid || undefined"
64
77
  :data-invalid="invalid ? '' : undefined"
65
- :class="checkboxBox({ shape: 'round', size: props.size })"
78
+ :class="
79
+ cn(
80
+ checkboxBox({ shape: 'round', size: props.size }),
81
+ checkboxControl({ controlPlacement: props.controlPlacement }),
82
+ )
83
+ "
66
84
  >
67
85
  <Transition
68
86
  enter-active-class="hn-transition-press"
@@ -73,12 +91,15 @@
73
91
  <span v-if="checked" :class="radioDot()" />
74
92
  </Transition>
75
93
  </RadioGroupItem>
76
- <span :class="checkboxTitle()">
94
+ <span :class="checkboxTitle({ controlPlacement: props.controlPlacement })">
77
95
  <span :class="checkboxTitleText()">
78
96
  <slot name="option" :option="option">{{ option.label }}</slot>
79
97
  </span>
80
98
  </span>
81
- <span v-if="option.description" :class="checkboxDescription({ size: props.size })">
99
+ <span
100
+ v-if="option.description"
101
+ :class="checkboxDescription({ size: props.size, controlPlacement: props.controlPlacement })"
102
+ >
82
103
  {{ option.description }}
83
104
  </span>
84
105
  </label>
@@ -74,6 +74,7 @@
74
74
  @keydown="keyboard = true"
75
75
  @pointerdown="keyboard = false"
76
76
  :data-invalid="invalid ? '' : undefined"
77
+ :data-disabled="disabled ? '' : undefined"
77
78
  :aria-invalid="invalid || undefined"
78
79
  :class="
79
80
  cn(
@@ -5,9 +5,11 @@
5
5
  import { useFieldControl } from '../form-field/context'
6
6
  import {
7
7
  checkbox,
8
+ checkboxControl,
8
9
  checkboxDescription,
9
10
  checkboxTitle,
10
11
  checkboxTitleText,
12
+ type CheckboxVariants,
11
13
  } from '../checkbox/checkbox.variants'
12
14
  import { switchThumb, switchTrack, type SwitchVariants } from './switch.variants'
13
15
 
@@ -16,6 +18,8 @@
16
18
  const props = defineProps<{
17
19
  size?: SwitchVariants['size']
18
20
  description?: string
21
+ controlPlacement?: CheckboxVariants['controlPlacement']
22
+ block?: boolean
19
23
  disabled?: boolean
20
24
  invalid?: boolean
21
25
  class?: string
@@ -41,7 +45,17 @@
41
45
  data-hn-switch
42
46
  data-hn-state-group
43
47
  :data-disabled="disabled ? '' : undefined"
44
- :class="cn(checkbox({ size: props.size }), props.class)"
48
+ :class="
49
+ cn(
50
+ checkbox({
51
+ size: props.size,
52
+ controlPlacement: props.controlPlacement,
53
+ block: props.block,
54
+ bare: !slots.default && !props.description,
55
+ }),
56
+ props.class,
57
+ )
58
+ "
45
59
  >
46
60
  <SwitchRoot
47
61
  v-bind="$attrs"
@@ -52,14 +66,22 @@
52
66
  :aria-describedby="describedBy"
53
67
  :data-invalid="invalid ? '' : undefined"
54
68
  :data-hn-on="model ? '' : undefined"
55
- :class="switchTrack({ size: props.size })"
69
+ :class="
70
+ cn(
71
+ switchTrack({ size: props.size }),
72
+ checkboxControl({ controlPlacement: props.controlPlacement }),
73
+ )
74
+ "
56
75
  >
57
76
  <span data-hn-thumb aria-hidden="true" :class="switchThumb()" />
58
77
  </SwitchRoot>
59
- <span v-if="slots.default" :class="checkboxTitle()">
78
+ <span v-if="slots.default" :class="checkboxTitle({ controlPlacement: props.controlPlacement })">
60
79
  <span :class="checkboxTitleText()"><slot /></span>
61
80
  </span>
62
- <span v-if="props.description" :class="checkboxDescription({ size: props.size })">
81
+ <span
82
+ v-if="props.description"
83
+ :class="checkboxDescription({ size: props.size, controlPlacement: props.controlPlacement })"
84
+ >
63
85
  {{ props.description }}
64
86
  </span>
65
87
  </label>
@@ -78,6 +78,7 @@
78
78
  <div
79
79
  data-hn-tags-input
80
80
  :data-invalid="invalid ? '' : undefined"
81
+ :data-disabled="disabled ? '' : undefined"
81
82
  @click="focusFieldFrom($event.currentTarget as HTMLElement, $event.target as HTMLElement)"
82
83
  :class="
83
84
  cn(
@@ -79,6 +79,7 @@
79
79
  <div
80
80
  data-hn-textarea
81
81
  :data-invalid="invalid ? '' : undefined"
82
+ :data-disabled="disabled ? '' : undefined"
82
83
  :style="{ '--hn-textarea-rows': bounds.min, '--hn-textarea-max-rows': bounds.max }"
83
84
  :class="
84
85
  cn(
@@ -3,7 +3,7 @@ import { tv, type VariantProps } from '../../lib/tv'
3
3
  export const textarea = tv({
4
4
  base: [
5
5
  'hn-field text-fg flex w-full min-w-0 cursor-text flex-col overflow-hidden rounded-md border font-medium',
6
- 'has-disabled:cursor-not-allowed has-disabled:opacity-50',
6
+ 'data-disabled:cursor-not-allowed data-disabled:opacity-50',
7
7
  ],
8
8
  variants: {
9
9
  variant: {
@@ -106,6 +106,7 @@
106
106
  :disabled="disabled"
107
107
  :data-placeholder="selected ? undefined : ''"
108
108
  :data-invalid="invalid ? '' : undefined"
109
+ :data-disabled="disabled ? '' : undefined"
109
110
  :aria-invalid="invalid || undefined"
110
111
  :class="
111
112
  cn(
package/src/index.ts CHANGED
@@ -118,6 +118,7 @@ export { default as MenubarRadioGroup } from './components/menubar/MenubarRadioG
118
118
  export { default as MenubarRadioItem } from './components/menubar/MenubarRadioItem.vue'
119
119
  export { default as Form } from './components/form/Form.vue'
120
120
  export { default as FormField } from './components/form-field/FormField.vue'
121
+ export type { FormFieldLayoutProps } from './components/form-field/types'
121
122
  export { default as FormLayout } from './components/form-layout/FormLayout.vue'
122
123
  export type { FormLayoutVariants } from './components/form-layout/form-layout.variants'
123
124
  export type { FormValidateOn } from './components/form/composables/useForm'
@@ -128,7 +128,7 @@
128
128
  opacity var(--hn-duration-fast) var(--hn-ease-enter);
129
129
 
130
130
  @media (hover: hover) {
131
- &:hover:not(:disabled):not(:has(:disabled)):not(
131
+ &:hover:not(:disabled):not([data-disabled]):not(
132
132
  :has(:is(input, textarea, [data-hn-segment]):focus-visible)
133
133
  ):not([data-invalid]) {
134
134
  background-color: color-mix(
@@ -138,7 +138,7 @@
138
138
  );
139
139
  }
140
140
 
141
- &[data-invalid]:hover:not(:disabled):not(:has(:disabled)):not(
141
+ &[data-invalid]:hover:not(:disabled):not([data-disabled]):not(
142
142
  :has(:is(input, textarea, [data-hn-segment]):focus-visible)
143
143
  ) {
144
144
  background-color: color-mix(