@proj-airi/ui 0.8.0 → 0.8.1-beta.10

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 (63) hide show
  1. package/package.json +4 -3
  2. package/src/components/animations/index.ts +9 -0
  3. package/src/components/{Form/Checkbox/Checkbox.vue → form/checkbox/checkbox.vue} +1 -0
  4. package/src/components/form/checkbox/index.ts +1 -0
  5. package/src/components/form/combobox/combobox.vue +138 -0
  6. package/src/components/form/combobox/index.ts +1 -0
  7. package/src/components/{Form/Field/FieldCheckbox.vue → form/field/field-checkbox.vue} +1 -1
  8. package/src/components/{Form/Field/FieldInput.vue → form/field/field-input.vue} +20 -9
  9. package/src/components/{Form/Field/FieldKeyValues.vue → form/field/field-key-values.vue} +2 -2
  10. package/src/components/{Form/Field/FieldRange.vue → form/field/field-range.vue} +1 -1
  11. package/src/components/{Form/Field/FieldSelect.vue → form/field/field-select.vue} +1 -1
  12. package/src/components/{Form/Field/FieldTextArea.vue → form/field/field-text-area.vue} +2 -2
  13. package/src/components/{Form/Field/FieldValues.vue → form/field/field-values.vue} +1 -1
  14. package/src/components/form/field/index.ts +7 -0
  15. package/src/components/form/index.ts +9 -0
  16. package/src/components/form/input/index.ts +4 -0
  17. package/src/components/{Form/Input/InputFile.vue → form/input/input-file.vue} +1 -1
  18. package/src/components/{Form/Input/InputKeyValue.vue → form/input/input-key-value.vue} +1 -1
  19. package/src/components/form/input/input.vue +88 -0
  20. package/src/components/form/radio/index.ts +1 -0
  21. package/src/components/form/range/index.ts +3 -0
  22. package/src/components/form/select/index.ts +2 -0
  23. package/src/components/{Form/Select/Select.vue → form/select/select.vue} +1 -1
  24. package/src/components/form/select-tab/index.ts +1 -0
  25. package/src/components/{Form/SelectTab/SelectTab.vue → form/select-tab/select-tab.vue} +1 -0
  26. package/src/components/form/textarea/index.ts +2 -0
  27. package/src/components/{Form/Textarea/Textarea.vue → form/textarea/textarea.vue} +1 -1
  28. package/src/components/layouts/collapsible.vue +39 -0
  29. package/src/components/layouts/index.ts +3 -0
  30. package/src/components/layouts/screen.vue +72 -0
  31. package/src/components/layouts/skeleton.vue +75 -0
  32. package/src/components/misc/button.vue +174 -0
  33. package/src/components/misc/callout.vue +77 -0
  34. package/src/components/{Misc/DoubleCheckButton.vue → misc/double-check-button.vue} +1 -1
  35. package/src/components/misc/index.ts +4 -0
  36. package/src/components/misc/progress.vue +44 -0
  37. package/src/fallback.css +4 -0
  38. package/src/index.ts +4 -3
  39. package/src/components/Animations/index.ts +0 -3
  40. package/src/components/Form/Checkbox/index.ts +0 -1
  41. package/src/components/Form/Combobox/Combobox.vue +0 -130
  42. package/src/components/Form/Combobox/index.ts +0 -1
  43. package/src/components/Form/Field/index.ts +0 -7
  44. package/src/components/Form/Input/Input.vue +0 -23
  45. package/src/components/Form/Input/index.ts +0 -4
  46. package/src/components/Form/Radio/index.ts +0 -1
  47. package/src/components/Form/Range/index.ts +0 -3
  48. package/src/components/Form/Select/index.ts +0 -2
  49. package/src/components/Form/SelectTab/index.ts +0 -1
  50. package/src/components/Form/Textarea/index.ts +0 -2
  51. package/src/components/Form/index.ts +0 -9
  52. package/src/components/Misc/Button.vue +0 -118
  53. package/src/components/Misc/index.ts +0 -2
  54. /package/src/components/{Animations/BidirectionalTransition.vue → animations/transition-bidirectional.vue} +0 -0
  55. /package/src/components/{Animations/TransitionHorizontal.vue → animations/transition-horizontal.vue} +0 -0
  56. /package/src/components/{Animations/TransitionVertical.vue → animations/transition-vertical.vue} +0 -0
  57. /package/src/components/{Form/Input/BasicInputFile.vue → form/input/basic-input-file.vue} +0 -0
  58. /package/src/components/{Form/Radio/Radio.vue → form/radio/radio.vue} +0 -0
  59. /package/src/components/{Form/Range/ColorHueRange.vue → form/range/color-hue-range.vue} +0 -0
  60. /package/src/components/{Form/Range/Range.vue → form/range/range.vue} +0 -0
  61. /package/src/components/{Form/Range/RoundRange.vue → form/range/round-range.vue} +0 -0
  62. /package/src/components/{Form/Select/Option.vue → form/select/option.vue} +0 -0
  63. /package/src/components/{Form/Textarea/Basic.vue → form/textarea/basic-text-area.vue} +0 -0
@@ -1,118 +0,0 @@
1
- <script setup lang="ts">
2
- import { BidirectionalTransition } from '@proj-airi/ui'
3
- import { computed } from 'vue'
4
-
5
- // Define button variants for better type safety and maintainability
6
- type ButtonVariant = 'primary' | 'secondary' | 'secondary-muted' | 'danger' | 'caution' | 'pure'
7
-
8
- type ButtonTheme = 'default'
9
-
10
- // Define size options for better flexibility
11
- type ButtonSize = 'sm' | 'md' | 'lg'
12
-
13
- interface ButtonProps {
14
- toggled?: boolean // Optional toggled state for toggle buttons
15
- icon?: string // Icon class name
16
- label?: string // Button text label
17
- disabled?: boolean // Disabled state
18
- loading?: boolean // Loading state
19
- variant?: ButtonVariant // Button style variant
20
- size?: ButtonSize // Button size variant
21
- theme?: ButtonTheme // Button theme
22
- block?: boolean // Full width button
23
- }
24
-
25
- const props = withDefaults(defineProps<ButtonProps>(), {
26
- toggled: false,
27
- variant: 'primary',
28
- disabled: false,
29
- loading: false,
30
- size: 'md',
31
- theme: 'default',
32
- block: false,
33
- })
34
-
35
- const isDisabled = computed(() => props.disabled || props.loading)
36
-
37
- // Extract variant styles for better organization
38
- const variantClasses: Record<ButtonVariant, Record<ButtonTheme, {
39
- default: string
40
- nonToggled?: string
41
- toggled?: string
42
- }>> = {
43
- 'primary': {
44
- default: {
45
- default: 'bg-primary-500/15 hover:bg-primary-500/20 active:bg-primary-500/30 dark:bg-primary-700/30 dark:hover:bg-primary-700/40 dark:active:bg-primary-700/30 focus:ring-primary-300/60 dark:focus:ring-primary-600/30 border-2 border-solid border-primary-500/5 dark:border-primary-900/40 text-primary-950 dark:text-primary-100',
46
- },
47
- },
48
- 'secondary': {
49
- default: {
50
- default: 'bg-neutral-100/55 hover:bg-neutral-400/20 active:bg-neutral-400/30 dark:bg-neutral-700/60 dark:hover:bg-neutral-700/80 dark:active:bg-neutral-700/60 focus:ring-neutral-300/30 dark:focus:ring-neutral-600/60 dark:focus:ring-neutral-600/30 border-2 border-solid border-neutral-300/30 dark:border-neutral-700/30 text-neutral-950 dark:text-neutral-100',
51
- },
52
- },
53
- 'secondary-muted': {
54
- default: {
55
- default: 'hover:bg-neutral-50/50 active:bg-neutral-50/90 hover:dark:bg-neutral-800/50 active:dark:bg-neutral-800/90 border-2 border-solid border-neutral-100/60 dark:border-neutral-800/30 focus:ring-neutral-300/30 dark:focus:ring-neutral-600/60 dark:focus:ring-neutral-600/30',
56
- nonToggled: 'bg-neutral-50/70 dark:bg-neutral-800/70 text-neutral-500 dark:text-neutral-400',
57
- toggled: 'bg-white/90 dark:bg-neutral-500/70 ring-neutral-300/30 dark:ring-neutral-600/60 ring-2 dark:ring-neutral-600/30 text-primary-500 dark:text-primary-100',
58
- },
59
- },
60
- 'danger': {
61
- default: {
62
- default: 'bg-red-500/15 hover:bg-red-500/20 active:bg-red-500/30 dark:bg-red-700/30 dark:hover:bg-red-700/40 dark:active:bg-red-700/30 focus:ring-red-300/30 dark:focus:ring-red-600/60 dark:focus:ring-red-600/30 border-2 border-solid border-red-200/30 dark:border-red-900/30 text-red-950 dark:text-red-100',
63
- },
64
- },
65
- 'caution': {
66
- default: {
67
- default: 'bg-amber-400/20 hover:bg-amber-400/25 active:bg-amber-400/35 dark:bg-amber-500/20 dark:hover:bg-amber-500/30 dark:active:bg-amber-500/35 focus:ring-amber-300/40 dark:focus:ring-amber-400/40 border-2 border-solid border-amber-300/40 dark:border-amber-500/40 text-amber-900 dark:text-amber-50',
68
- },
69
- },
70
- 'pure': {
71
- default: {
72
- default: 'bg-white hover:bg-neutral-50 active:bg-neutral-100 dark:bg-neutral-900 dark:hover:bg-neutral-800 dark:active:bg-neutral-700 border-2 border-solid border-neutral-100 dark:border-neutral-800 focus:ring-neutral-200/40 dark:focus:ring-neutral-600/40 text-neutral-900 dark:text-neutral-50',
73
- },
74
- },
75
- }
76
-
77
- // Extract size styles for better organization
78
- const sizeClasses: Record<ButtonSize, string> = {
79
- sm: 'px-3 py-1.5 text-xs',
80
- md: 'px-4 py-2 text-sm',
81
- lg: 'px-6 py-3 text-base',
82
- }
83
-
84
- // Base classes that are always applied
85
- const baseClasses = computed(() => [
86
- 'rounded-lg font-medium outline-none',
87
- 'transition-all duration-200 ease-in-out',
88
- 'disabled:cursor-not-allowed disabled:opacity-50',
89
- 'backdrop-blur-md',
90
- props.block ? 'w-full' : '',
91
- sizeClasses[props.size],
92
- variantClasses[props.variant][props.theme].default,
93
- props.toggled ? variantClasses[props.variant][props.theme].toggled || '' : variantClasses[props.variant][props.theme].nonToggled || '',
94
- { 'opacity-50 cursor-not-allowed': isDisabled.value },
95
- 'focus:ring-2',
96
- ])
97
- </script>
98
-
99
- <template>
100
- <button
101
- :disabled="isDisabled"
102
- :class="baseClasses"
103
- >
104
- <div class="flex flex-row items-center justify-center gap-2">
105
- <BidirectionalTransition
106
- from-class="opacity-0 mr-0! w-0!"
107
- active-class="transition-[width,margin] ease-in-out overflow-hidden transition-100"
108
- >
109
- <div v-if="loading || icon" class="w-4">
110
- <div v-if="loading" class="i-svg-spinners:ring-resize h-4 w-4" />
111
- <div v-else-if="icon" class="h-4 w-4" :class="icon" />
112
- </div>
113
- </BidirectionalTransition>
114
- <span v-if="label">{{ label }}</span>
115
- <slot v-else />
116
- </div>
117
- </button>
118
- </template>
@@ -1,2 +0,0 @@
1
- export { default as Button } from './Button.vue'
2
- export { default as DoubleCheckButton } from './DoubleCheckButton.vue'