@pequity/squirrel 6.1.0 → 7.0.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 (98) hide show
  1. package/dist/cjs/chunks/p-alert.js +52 -0
  2. package/dist/cjs/chunks/p-avatar.js +65 -0
  3. package/dist/cjs/chunks/p-btn.js +4 -4
  4. package/dist/cjs/chunks/p-date-picker.js +2 -2
  5. package/dist/cjs/chunks/p-input-number.js +161 -0
  6. package/dist/cjs/chunks/p-input-percent.js +2 -2
  7. package/dist/cjs/chunks/p-input.js +111 -0
  8. package/dist/cjs/chunks/p-progress-bar.js +38 -0
  9. package/dist/cjs/chunks/p-select-btn.js +3 -4
  10. package/dist/cjs/chunks/p-textarea.js +89 -0
  11. package/dist/cjs/index.js +69 -76
  12. package/dist/cjs/inputClasses.js +8 -2
  13. package/dist/cjs/p-alert.js +2 -64
  14. package/dist/cjs/p-avatar.js +2 -70
  15. package/dist/cjs/p-drawer.js +2 -2
  16. package/dist/cjs/p-input-number.js +2 -145
  17. package/dist/cjs/p-input-search.js +2 -2
  18. package/dist/cjs/p-input.js +2 -92
  19. package/dist/cjs/p-modal.js +2 -2
  20. package/dist/cjs/p-progress-bar.js +2 -40
  21. package/dist/cjs/p-table-filter-icon.js +14 -9
  22. package/dist/cjs/p-textarea.js +2 -72
  23. package/dist/cjs/p-toggle.js +76 -64
  24. package/dist/cjs/useInputClasses.js +13 -18
  25. package/dist/es/chunks/p-alert.js +53 -0
  26. package/dist/es/chunks/p-avatar.js +66 -0
  27. package/dist/es/chunks/p-btn.js +4 -4
  28. package/dist/es/chunks/p-date-picker.js +2 -2
  29. package/dist/es/chunks/p-input-number.js +162 -0
  30. package/dist/es/chunks/p-input-percent.js +2 -2
  31. package/dist/es/chunks/p-input.js +112 -0
  32. package/dist/es/chunks/p-progress-bar.js +39 -0
  33. package/dist/es/chunks/p-select-btn.js +4 -5
  34. package/dist/es/chunks/p-textarea.js +90 -0
  35. package/dist/es/index.js +119 -126
  36. package/dist/es/inputClasses.js +8 -2
  37. package/dist/es/p-alert.js +2 -64
  38. package/dist/es/p-avatar.js +2 -70
  39. package/dist/es/p-drawer.js +2 -2
  40. package/dist/es/p-input-number.js +2 -145
  41. package/dist/es/p-input-search.js +2 -2
  42. package/dist/es/p-input.js +2 -92
  43. package/dist/es/p-modal.js +2 -2
  44. package/dist/es/p-progress-bar.js +2 -40
  45. package/dist/es/p-table-filter-icon.js +14 -9
  46. package/dist/es/p-textarea.js +2 -72
  47. package/dist/es/p-toggle.js +77 -65
  48. package/dist/es/useInputClasses.js +14 -19
  49. package/dist/squirrel/components/p-alert/p-alert.vue.d.ts +27 -10
  50. package/dist/squirrel/components/p-avatar/p-avatar.vue.d.ts +9 -10
  51. package/dist/squirrel/components/p-btn/p-btn.vue.d.ts +28 -28
  52. package/dist/squirrel/components/p-date-picker/p-date-picker.vue.d.ts +2 -2
  53. package/dist/squirrel/components/p-drawer/p-drawer.vue.d.ts +37 -13
  54. package/dist/squirrel/components/p-inline-date-picker/p-inline-date-picker.vue.d.ts +2 -2
  55. package/dist/squirrel/components/p-input/p-input.vue.d.ts +30 -61
  56. package/dist/squirrel/components/p-input-number/p-input-number.vue.d.ts +101 -65
  57. package/dist/squirrel/components/p-input-search/p-input-search.vue.d.ts +113 -83
  58. package/dist/squirrel/components/p-modal/p-modal.vue.d.ts +2 -2
  59. package/dist/squirrel/components/p-progress-bar/p-progress-bar.vue.d.ts +5 -20
  60. package/dist/squirrel/components/p-table-header-cell/p-table-header-cell.vue.d.ts +1 -1
  61. package/dist/squirrel/components/p-table-loader/p-table-loader.vue.d.ts +1 -1
  62. package/dist/squirrel/components/p-table-sort/p-table-sort.vue.d.ts +3 -7
  63. package/dist/squirrel/components/p-textarea/p-textarea.vue.d.ts +79 -42
  64. package/dist/squirrel/components/p-toggle/p-toggle.vue.d.ts +25 -62
  65. package/dist/squirrel/composables/useInputClasses.d.ts +2 -1
  66. package/dist/squirrel/utils/index.d.ts +1 -3
  67. package/dist/squirrel/utils/inputClasses.d.ts +12 -0
  68. package/dist/squirrel.css +5 -5
  69. package/package.json +19 -19
  70. package/squirrel/components/p-alert/p-alert.spec.js +9 -8
  71. package/squirrel/components/p-alert/p-alert.vue +19 -31
  72. package/squirrel/components/p-avatar/p-avatar.spec.ts +10 -3
  73. package/squirrel/components/p-avatar/p-avatar.vue +40 -42
  74. package/squirrel/components/p-btn/p-btn.spec.js +7 -7
  75. package/squirrel/components/p-btn/p-btn.vue +4 -4
  76. package/squirrel/components/p-input/p-input.vue +63 -40
  77. package/squirrel/components/p-input-number/p-input-number.vue +101 -86
  78. package/squirrel/components/p-progress-bar/p-progress-bar.vue +9 -14
  79. package/squirrel/components/p-select-btn/p-select-btn.spec.js +24 -5
  80. package/squirrel/components/p-select-btn/p-select-btn.vue +1 -1
  81. package/squirrel/components/p-table-header-cell/p-table-filter-icon.vue +8 -9
  82. package/squirrel/components/p-table-sort/p-table-sort.vue +13 -16
  83. package/squirrel/components/p-textarea/p-textarea.vue +55 -37
  84. package/squirrel/components/p-toggle/p-toggle.vue +59 -43
  85. package/squirrel/composables/useInputClasses.spec.js +50 -13
  86. package/squirrel/composables/useInputClasses.ts +18 -24
  87. package/squirrel/utils/index.ts +0 -7
  88. package/squirrel/utils/inputClasses.ts +8 -2
  89. package/dist/cjs/inputClassesMixin.js +0 -58
  90. package/dist/cjs/tailwind.js +0 -25
  91. package/dist/es/inputClassesMixin.js +0 -59
  92. package/dist/es/tailwind.js +0 -25
  93. package/dist/squirrel/utils/inputClassesMixin.d.ts +0 -56
  94. package/dist/squirrel/utils/tailwind.d.ts +0 -8
  95. package/squirrel/utils/inputClassesMixin.spec.js +0 -241
  96. package/squirrel/utils/inputClassesMixin.ts +0 -60
  97. package/squirrel/utils/tailwind.spec.js +0 -27
  98. package/squirrel/utils/tailwind.ts +0 -28
@@ -1,241 +0,0 @@
1
- import inputClassesMixin from '@squirrel/utils/inputClassesMixin';
2
- import { shallowMount } from '@vue/test-utils';
3
-
4
- const baseInputClassesMd = () => [
5
- 'text-night',
6
- 'w-full',
7
- 'bg-surface',
8
- 'focus:outline-none',
9
- 'border-0',
10
- 'ring-1',
11
- 'ring-inset',
12
- 'focus:ring-2',
13
- 'disabled:ring-p-gray-30',
14
- 'disabled:hover:ring-p-gray-30',
15
- 'disabled:bg-p-blue-10',
16
- 'disabled:cursor-default',
17
- 'placeholder:text-p-gray-40',
18
- 'h-10',
19
- 'text-base',
20
- 'rounded',
21
- 'pl-4',
22
- 'pr-4',
23
- 'ring-p-gray-30',
24
- 'hover:ring-primary',
25
- 'focus:ring-primary',
26
- ];
27
-
28
- const baseInputClassesSm = () => {
29
- return baseInputClassesMd().map((item) => {
30
- return (
31
- {
32
- 'h-10': 'h-8',
33
- 'text-base': 'text-sm',
34
- 'pl-4': 'pl-3',
35
- 'pr-4': 'pr-3',
36
- }[item] || item
37
- );
38
- });
39
- };
40
-
41
- const baseInputClassesLg = () => {
42
- return baseInputClassesMd().map((item) => {
43
- return (
44
- {
45
- 'h-10': 'h-12',
46
- 'text-base': 'text-lg',
47
- 'pl-4': 'pl-5',
48
- 'pr-4': 'pr-5',
49
- }[item] || item
50
- );
51
- });
52
- };
53
-
54
- const baseLabelClassesMd = ['block', 'mb-1', 'font-medium', 'text-sm'];
55
-
56
- const createWrapper = (opts) => {
57
- const TestComponent = {
58
- render() {
59
- //
60
- },
61
- mixins: [inputClassesMixin],
62
- };
63
-
64
- return shallowMount(TestComponent, opts);
65
- };
66
-
67
- describe('inputClassesMixin', () => {
68
- it('generates input classes md', () => {
69
- const wrapper = createWrapper({ props: { size: 'md' } });
70
-
71
- const inputClasses = wrapper.vm.inputClasses.split(' ');
72
-
73
- expect(inputClasses).toEqual(expect.arrayContaining(baseInputClassesMd()));
74
- });
75
-
76
- it('generates input classes sm', () => {
77
- const wrapper = createWrapper({ props: { size: 'sm' } });
78
-
79
- const inputClasses = wrapper.vm.inputClasses.split(' ');
80
-
81
- expect(inputClasses).toEqual(expect.arrayContaining(baseInputClassesSm()));
82
- });
83
-
84
- it('generates input classes lg', () => {
85
- const wrapper = createWrapper({ props: { size: 'lg' } });
86
-
87
- const inputClasses = wrapper.vm.inputClasses.split(' ');
88
-
89
- expect(inputClasses).toEqual(expect.arrayContaining(baseInputClassesLg()));
90
- });
91
-
92
- it('generates label classes md', () => {
93
- const wrapper = createWrapper({ props: { size: 'md' } });
94
-
95
- const labelClasses = wrapper.vm.labelClasses.split(' ');
96
-
97
- expect(labelClasses).toEqual(expect.arrayContaining(baseLabelClassesMd));
98
- });
99
-
100
- it('generates label classes sm', () => {
101
- const wrapper = createWrapper({ props: { size: 'sm' } });
102
-
103
- const labelClasses = wrapper.vm.labelClasses.split(' ');
104
- const baseLabelClasses = baseLabelClassesMd.map((item) => {
105
- return (
106
- {
107
- 'text-sm': 'text-xs',
108
- }[item] || item
109
- );
110
- });
111
-
112
- expect(labelClasses).toEqual(expect.arrayContaining(baseLabelClasses));
113
- });
114
-
115
- it('generates label classes lg', () => {
116
- const wrapper = createWrapper({ props: { size: 'lg' } });
117
-
118
- const labelClasses = wrapper.vm.labelClasses.split(' ');
119
- const baseLabelClassesLg = baseLabelClassesMd.map((item) => {
120
- return (
121
- {
122
- 'text-sm': 'text-base',
123
- }[item] || item
124
- );
125
- });
126
-
127
- expect(labelClasses).toEqual(expect.arrayContaining(baseLabelClassesLg));
128
- });
129
-
130
- it('generates select classes md', () => {
131
- const wrapper = createWrapper({ props: { size: 'md' } });
132
-
133
- const selectClasses = wrapper.vm.selectClasses.split(' ');
134
- const baseInputClasses = baseInputClassesMd().filter((item) => {
135
- return !['pr-4', 'bg-surface'].includes(item);
136
- });
137
- const baseSelectClasses = [
138
- 'appearance-none',
139
- 'bg-[position:right_1rem_center]',
140
- 'bg-no-repeat',
141
- 'pr-10',
142
- 'squirrel-bg-chevron-down',
143
- 'truncate',
144
- ];
145
-
146
- const res = baseInputClasses.concat(baseSelectClasses);
147
-
148
- expect(selectClasses).toEqual(expect.arrayContaining(res));
149
- });
150
-
151
- it('generates select classes sm', () => {
152
- const wrapper = createWrapper({ props: { size: 'sm' } });
153
-
154
- const selectClasses = wrapper.vm.selectClasses.split(' ');
155
- const baseInputClasses = baseInputClassesSm().filter((item) => {
156
- return !['pr-3', 'bg-surface'].includes(item);
157
- });
158
- const baseSelectClasses = [
159
- 'appearance-none',
160
- 'bg-[position:right_0.675rem_center]',
161
- 'bg-no-repeat',
162
- 'pr-8',
163
- 'squirrel-bg-chevron-down',
164
- 'truncate',
165
- ];
166
- const res = baseInputClasses.concat(baseSelectClasses);
167
-
168
- expect(selectClasses).toEqual(expect.arrayContaining(res));
169
- });
170
-
171
- it('generates select classes lg', () => {
172
- const wrapper = createWrapper({ props: { size: 'lg' } });
173
-
174
- const selectClasses = wrapper.vm.selectClasses.split(' ');
175
- const baseInputClasses = baseInputClassesLg().filter((item) => {
176
- return !['pr-5', 'bg-surface'].includes(item);
177
- });
178
- const baseSelectClasses = [
179
- 'appearance-none',
180
- 'bg-[position:right_1.25rem_center]',
181
- 'bg-no-repeat',
182
- 'pr-12',
183
- 'squirrel-bg-chevron-down',
184
- 'truncate',
185
- ];
186
- const res = baseInputClasses.concat(baseSelectClasses);
187
-
188
- expect(selectClasses).toEqual(expect.arrayContaining(res));
189
- });
190
-
191
- it('generates textarea classes md', () => {
192
- const wrapper = createWrapper({ props: { size: 'md' } });
193
-
194
- const textareaClasses = wrapper.vm.textareaClasses.split(' ');
195
- const baseInputClasses = baseInputClassesMd().filter((item) => {
196
- return !['pl-3', 'pr-3', 'h-10'].includes(item);
197
- });
198
- const res = baseInputClasses.concat(['resize-y', 'px-3', 'py-3', 'overflow-auto', 'h-auto']);
199
-
200
- expect(textareaClasses).toEqual(expect.arrayContaining(res));
201
- });
202
-
203
- it('generates textarea classes sm', () => {
204
- const wrapper = createWrapper({ props: { size: 'sm' } });
205
-
206
- const textareaClasses = wrapper.vm.textareaClasses.split(' ');
207
- const baseInputClasses = baseInputClassesSm().filter((item) => {
208
- return !['pr-3', 'pl-3', 'h-8', 'text-sm'].includes(item);
209
- });
210
- const res = baseInputClasses.concat(['resize-y', 'px-3', 'py-3', 'overflow-auto', 'h-auto', 'pr-4', 'pl-4']);
211
-
212
- expect(textareaClasses).toEqual(expect.arrayContaining(res));
213
- });
214
-
215
- it('generates textarea classes lg', () => {
216
- const wrapper = createWrapper({ props: { size: 'lg' } });
217
-
218
- const textareaClasses = wrapper.vm.textareaClasses.split(' ');
219
- const baseInputClasses = baseInputClassesLg().filter((item) => {
220
- return !['pr-5', 'pl-5', 'h-12', 'text-lg'].includes(item);
221
- });
222
- const res = baseInputClasses.concat(['resize-y', 'px-3', 'py-3', 'overflow-auto', 'h-auto', 'pr-4', 'pl-4']);
223
-
224
- expect(textareaClasses).toEqual(expect.arrayContaining(res));
225
- });
226
-
227
- it('generates error classes', () => {
228
- const wrapper = createWrapper({ props: { size: 'md', errorMsg: 'Test error' } });
229
-
230
- const inputClasses = wrapper.vm.inputClasses.split(' ');
231
- const resInputClasses = baseInputClassesMd()
232
- .filter((item) => {
233
- return !['ring-p-gray-30', 'hover:ring-primary', 'focus:ring-primary'].includes(item);
234
- })
235
- .concat(['ring-on-error', 'hover:ring-on-error', 'focus:ring-on-error']);
236
- const errorMsgClasses = wrapper.vm.errorMsgClasses.split(' ');
237
-
238
- expect(inputClasses).toEqual(expect.arrayContaining(resInputClasses));
239
- expect(errorMsgClasses).toEqual(expect.arrayContaining(['text-xs', 'text-on-error', 'mt-1']));
240
- });
241
- });
@@ -1,60 +0,0 @@
1
- import { type Size, SIZES } from '@squirrel/components/p-btn/p-btn.types';
2
- import { inputClasses, selectClasses, textareaClasses } from '@squirrel/utils/inputClasses';
3
- import { defineComponent, type PropType } from 'vue';
4
-
5
- export default defineComponent({
6
- props: {
7
- size: {
8
- type: String as PropType<Size>,
9
- default: 'md',
10
- validator(value: Size) {
11
- return SIZES.includes(value);
12
- },
13
- },
14
- errorMsg: {
15
- type: String,
16
- default: '',
17
- },
18
- required: {
19
- type: Boolean,
20
- default: false,
21
- },
22
- rounded: {
23
- type: Boolean,
24
- default: false,
25
- },
26
- },
27
- computed: {
28
- allClasses() {
29
- const { input, label, errorMessage } = inputClasses({
30
- size: this.size,
31
- prefix: !!this.$slots.prefix,
32
- suffix: !!this.$slots.suffix,
33
- required: this.required,
34
- error: !!this.errorMsg,
35
- rounded: this.rounded,
36
- });
37
-
38
- return { input: input(), label: label(), errorMessage: errorMessage() };
39
- },
40
- inputClasses() {
41
- return this.allClasses.input;
42
- },
43
- labelClasses() {
44
- return this.allClasses.label;
45
- },
46
- errorMsgClasses() {
47
- return this.allClasses.errorMessage;
48
- },
49
- selectClasses() {
50
- const { input } = selectClasses({ size: this.size, required: this.required, error: !!this.errorMsg });
51
-
52
- return input();
53
- },
54
- textareaClasses() {
55
- const { input } = textareaClasses({ required: this.required, error: !!this.errorMsg });
56
-
57
- return input();
58
- },
59
- },
60
- });
@@ -1,27 +0,0 @@
1
- import { getScreen } from '@squirrel/utils/tailwind';
2
- import { cloneDeep } from 'lodash-es';
3
-
4
- const screens = { sm: '640px', md: '768px' };
5
-
6
- describe('tailwind', () => {
7
- it('should return the correct screen size for a valid key', () => {
8
- // Mock the theme.screens object
9
- const originalScreens = global.screens;
10
- global.screens = cloneDeep(screens);
11
-
12
- expect(getScreen('sm')).toBe('640px');
13
- expect(getScreen('md')).toBe('768px');
14
-
15
- // Restore the original screens object
16
- global.screens = originalScreens;
17
- });
18
-
19
- it('should return undefined for an invalid key', () => {
20
- const originalScreens = global.screens;
21
- global.screens = cloneDeep(screens);
22
-
23
- expect(getScreen('xxl')).toBeUndefined();
24
-
25
- global.screens = originalScreens;
26
- });
27
- });
@@ -1,28 +0,0 @@
1
- import { squirrelTailwindConfig } from '@squirrel/tailwind/config';
2
- import { get } from 'lodash-es';
3
- import type { Config } from 'tailwindcss';
4
- import resolveConfig from 'tailwindcss/resolveConfig';
5
-
6
- const config = resolveConfig(squirrelTailwindConfig);
7
- const theme = config.theme as Config['theme'];
8
- const colors = theme?.colors;
9
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
- const extendedColors = theme?.extend?.colors;
11
- const screens = theme?.screens;
12
-
13
- export type Color = keyof typeof colors | keyof typeof extendedColors;
14
-
15
- export const getColor = (name: Color) => {
16
- return colors?.[name];
17
- };
18
-
19
- export const getColorDeep = (color: string) => {
20
- const baseColor = color.split('-').slice(0, -1).join('-') as Color;
21
- const colorNumber = String(color.split('-').pop());
22
-
23
- return get(getColor(baseColor), colorNumber);
24
- };
25
-
26
- export const getScreen = (size: keyof typeof screens) => {
27
- return screens?.[size];
28
- };