@pequity/squirrel 8.4.5 → 8.5.1

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 (94) hide show
  1. package/README.md +31 -2
  2. package/dist/cjs/chunks/index.js +530 -179
  3. package/dist/cjs/chunks/p-alert.js +11 -16
  4. package/dist/cjs/chunks/p-btn.js +1 -1
  5. package/dist/cjs/chunks/p-input-percent.js +2 -2
  6. package/dist/cjs/chunks/p-table-header-cell.js +57 -0
  7. package/dist/cjs/index.js +41 -33
  8. package/dist/cjs/inputClasses.js +3 -3
  9. package/dist/cjs/p-icon.js +2 -1
  10. package/dist/cjs/p-loading.js +2 -2
  11. package/dist/cjs/p-modal.js +45 -43
  12. package/dist/cjs/p-table-header-cell.js +2 -116
  13. package/dist/cjs/p-table.js +2 -0
  14. package/dist/cjs/usePTableHeaderWrap.js +38 -0
  15. package/dist/es/chunks/index.js +530 -179
  16. package/dist/es/chunks/p-alert.js +11 -16
  17. package/dist/es/chunks/p-btn.js +2 -2
  18. package/dist/es/chunks/p-input-percent.js +2 -2
  19. package/dist/es/chunks/p-table-header-cell.js +58 -0
  20. package/dist/es/index.js +49 -41
  21. package/dist/es/inputClasses.js +4 -4
  22. package/dist/es/p-icon.js +2 -1
  23. package/dist/es/p-loading.js +2 -2
  24. package/dist/es/p-modal.js +45 -43
  25. package/dist/es/p-table-header-cell.js +2 -116
  26. package/dist/es/p-table.js +2 -0
  27. package/dist/es/usePTableHeaderWrap.js +38 -0
  28. package/dist/squirrel/components/index.d.ts +1 -2
  29. package/dist/squirrel/components/p-action-bar/p-action-bar.vue.d.ts +1 -1
  30. package/dist/squirrel/components/p-alert/p-alert.vue.d.ts +2 -2
  31. package/dist/squirrel/components/p-avatar/p-avatar.vue.d.ts +1 -1
  32. package/dist/squirrel/components/p-btn/p-btn.vue.d.ts +3 -3
  33. package/dist/squirrel/components/p-card/p-card.vue.d.ts +1 -1
  34. package/dist/squirrel/components/p-checkbox/p-checkbox.vue.d.ts +1 -1
  35. package/dist/squirrel/components/p-close-btn/p-close-btn.vue.d.ts +1 -1
  36. package/dist/squirrel/components/p-date-picker/p-date-picker.vue.d.ts +1 -1
  37. package/dist/squirrel/components/p-drawer/p-drawer.vue.d.ts +12 -12
  38. package/dist/squirrel/components/p-dropdown-select/p-dropdown-select.vue.d.ts +1 -1
  39. package/dist/squirrel/components/p-file-upload/p-file-upload.vue.d.ts +1 -1
  40. package/dist/squirrel/components/p-icon/p-icon.types.d.ts +1 -0
  41. package/dist/squirrel/components/p-icon/p-icon.vue.d.ts +1 -1
  42. package/dist/squirrel/components/p-info-icon/p-info-icon.vue.d.ts +1 -1
  43. package/dist/squirrel/components/p-inline-date-picker/p-inline-date-picker.vue.d.ts +1 -1
  44. package/dist/squirrel/components/p-input/p-input.vue.d.ts +1 -1
  45. package/dist/squirrel/components/p-input-percent/p-input-percent.vue.d.ts +1 -1
  46. package/dist/squirrel/components/p-input-search/p-input-search.vue.d.ts +1 -1
  47. package/dist/squirrel/components/p-link/p-link.vue.d.ts +1 -1
  48. package/dist/squirrel/components/p-loading/p-loading.vue.d.ts +1 -1
  49. package/dist/squirrel/components/p-modal/p-modal.vue.d.ts +5 -1
  50. package/dist/squirrel/components/p-pagination/p-pagination.vue.d.ts +1 -1
  51. package/dist/squirrel/components/p-pagination-info/p-pagination-info.vue.d.ts +1 -1
  52. package/dist/squirrel/components/p-progress-bar/p-progress-bar.vue.d.ts +1 -1
  53. package/dist/squirrel/components/p-ring-loader/p-ring-loader.vue.d.ts +1 -1
  54. package/dist/squirrel/components/p-select/p-select.vue.d.ts +1 -1
  55. package/dist/squirrel/components/p-select-btn/p-select-btn.vue.d.ts +1 -1
  56. package/dist/squirrel/components/p-select-list/p-select-list.vue.d.ts +1 -1
  57. package/dist/squirrel/components/p-steps/p-steps.vue.d.ts +1 -1
  58. package/dist/squirrel/components/p-table/p-table.types.d.ts +1 -0
  59. package/dist/squirrel/components/p-table/p-table.vue.d.ts +1 -1
  60. package/dist/squirrel/components/p-table/usePTableHeaderWrap.d.ts +4 -0
  61. package/dist/squirrel/components/p-table-header-cell/p-table-header-cell.vue.d.ts +14 -161
  62. package/dist/squirrel/components/p-table-loader/p-table-loader.vue.d.ts +1 -1
  63. package/dist/squirrel/components/p-table-sort/p-table-sort.vue.d.ts +1 -1
  64. package/dist/squirrel/components/p-table-td/p-table-td.vue.d.ts +1 -1
  65. package/dist/squirrel/components/p-tabs/p-tabs.vue.d.ts +1 -1
  66. package/dist/squirrel/components/p-tabs-pills/p-tabs-pills.vue.d.ts +1 -1
  67. package/dist/squirrel/components/p-textarea/p-textarea.vue.d.ts +1 -1
  68. package/dist/squirrel/components/p-toggle/p-toggle.vue.d.ts +1 -1
  69. package/dist/squirrel.css +22 -33
  70. package/package.json +23 -21
  71. package/squirrel/components/index.ts +0 -2
  72. package/squirrel/components/p-alert/p-alert.spec.js +4 -4
  73. package/squirrel/components/p-alert/p-alert.stories.js +19 -13
  74. package/squirrel/components/p-alert/p-alert.vue +9 -11
  75. package/squirrel/components/p-icon/p-icon.types.ts +1 -0
  76. package/squirrel/components/p-modal/p-modal-basic.spec.js +29 -3
  77. package/squirrel/components/p-modal/p-modal.vue +44 -33
  78. package/squirrel/components/p-table/p-table.spec.js +79 -10
  79. package/squirrel/components/p-table/p-table.types.ts +2 -0
  80. package/squirrel/components/p-table/p-table.vue +12 -5
  81. package/squirrel/components/p-table/usePTableHeaderWrap.spec.js +118 -0
  82. package/squirrel/components/p-table/usePTableHeaderWrap.ts +45 -0
  83. package/squirrel/components/p-table-header-cell/p-table-header-cell.spec.js +17 -9
  84. package/squirrel/components/p-table-header-cell/p-table-header-cell.vue +69 -83
  85. package/dist/cjs/p-table-filter-icon.js +0 -28
  86. package/dist/es/p-table-filter-icon.js +0 -29
  87. package/dist/squirrel/components/p-table-header-cell/p-table-filter-icon.vue.d.ts +0 -20
  88. package/squirrel/assets/filter-icon-active-hover.svg +0 -4
  89. package/squirrel/assets/filter-icon-active.svg +0 -4
  90. package/squirrel/assets/filter-icon-hover.svg +0 -7
  91. package/squirrel/assets/filter-icon.svg +0 -6
  92. package/squirrel/components/p-table-header-cell/p-filter-icon.spec.js +0 -20
  93. package/squirrel/components/p-table-header-cell/p-filter-icon.stories.js +0 -33
  94. package/squirrel/components/p-table-header-cell/p-table-filter-icon.vue +0 -41
@@ -1,168 +1,21 @@
1
- /**
2
- * A table header cell component that displays text with optional tooltip and filter icon.
3
- * Provides consistent styling for table headers with support for custom text colors,
4
- * tooltips, and filter functionality.
5
- *
6
- * @displayName PTableHeaderCell
7
- */
8
- declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
9
- /**
10
- * The text content to display in the header cell.
11
- * Also used as the title attribute for accessibility.
12
- */
13
- text: {
14
- type: StringConstructor;
15
- default: string;
16
- };
17
- /**
18
- * CSS classes to apply to the text element.
19
- * Can be a string, object, or array for flexible styling.
20
- */
21
- textClass: {
22
- type: (StringConstructor | ObjectConstructor | ArrayConstructor)[];
23
- default: string;
24
- };
25
- /**
26
- * Whether the filter icon is in an active state.
27
- * Controls the visual appearance of the filter icon and text color.
28
- */
29
- filterActive: {
30
- type: BooleanConstructor;
31
- default: boolean;
32
- };
33
- /**
34
- * Whether to show the filter icon.
35
- * When false, the filter icon is hidden regardless of other states.
36
- */
37
- showFilterIcon: {
38
- type: BooleanConstructor;
39
- default: boolean;
40
- };
41
- /**
42
- * Tooltip text to display when hovering over the info icon.
43
- * When provided, shows an info icon with the tooltip content.
44
- */
45
- tooltipText: {
46
- type: StringConstructor;
47
- default: string;
48
- };
49
- /**
50
- * Custom text color to apply to the header text.
51
- * Overrides the default text color when provided.
52
- */
53
- textColor: {
54
- type: StringConstructor;
55
- default: string;
56
- };
57
- }>, {}, {
58
- DEFAULT_CLASSES: string;
59
- }, {
60
- textColorClass(): "" | "text-active-blue" | "text-p-gray-60";
61
- style(): {
62
- color?: undefined;
63
- } | {
64
- color: string;
65
- };
66
- }, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "click-filter-icon"[], "click-filter-icon", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
67
- /**
68
- * The text content to display in the header cell.
69
- * Also used as the title attribute for accessibility.
70
- */
71
- text: {
72
- type: StringConstructor;
73
- default: string;
74
- };
75
- /**
76
- * CSS classes to apply to the text element.
77
- * Can be a string, object, or array for flexible styling.
78
- */
79
- textClass: {
80
- type: (StringConstructor | ObjectConstructor | ArrayConstructor)[];
81
- default: string;
82
- };
83
- /**
84
- * Whether the filter icon is in an active state.
85
- * Controls the visual appearance of the filter icon and text color.
86
- */
87
- filterActive: {
88
- type: BooleanConstructor;
89
- default: boolean;
90
- };
91
- /**
92
- * Whether to show the filter icon.
93
- * When false, the filter icon is hidden regardless of other states.
94
- */
95
- showFilterIcon: {
96
- type: BooleanConstructor;
97
- default: boolean;
98
- };
99
- /**
100
- * Tooltip text to display when hovering over the info icon.
101
- * When provided, shows an info icon with the tooltip content.
102
- */
103
- tooltipText: {
104
- type: StringConstructor;
105
- default: string;
106
- };
107
- /**
108
- * Custom text color to apply to the header text.
109
- * Overrides the default text color when provided.
110
- */
111
- textColor: {
112
- type: StringConstructor;
113
- default: string;
114
- };
115
- }>> & Readonly<{
116
- "onClick-filter-icon"?: ((...args: any[]) => any) | undefined;
1
+ type Props = {
2
+ text?: string;
3
+ textClass?: string;
4
+ filterActive?: boolean;
5
+ showFilterIcon?: boolean;
6
+ tooltipText?: string;
7
+ textColor?: string;
8
+ };
9
+ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
+ "click-filter-icon": (event: Event, filterActive: boolean) => any;
11
+ }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
12
+ "onClick-filter-icon"?: ((event: Event, filterActive: boolean) => any) | undefined;
117
13
  }>, {
118
14
  text: string;
119
15
  tooltipText: string;
120
- textClass: string | Record<string, any> | unknown[];
16
+ textClass: string;
121
17
  filterActive: boolean;
122
18
  showFilterIcon: boolean;
123
19
  textColor: string;
124
- }, {}, {
125
- PTableFilterIcon: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
126
- active: {
127
- type: BooleanConstructor;
128
- default: boolean;
129
- };
130
- }>, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
131
- active: {
132
- type: BooleanConstructor;
133
- default: boolean;
134
- };
135
- }>> & Readonly<{}>, {
136
- active: boolean;
137
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
138
- PInfoIcon: {
139
- new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<{
140
- text?: string | null;
141
- }> & Readonly<{}>, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, import("vue").PublicProps, {
142
- text: string | null;
143
- }, false, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
144
- P: {};
145
- B: {};
146
- D: {};
147
- C: {};
148
- M: {};
149
- Defaults: {};
150
- }, Readonly<{
151
- text?: string | null;
152
- }> & Readonly<{}>, {}, {}, {}, {}, {
153
- text: string | null;
154
- }>;
155
- __isFragment?: never;
156
- __isTeleport?: never;
157
- __isSuspense?: never;
158
- } & import("vue").ComponentOptionsBase<Readonly<{
159
- text?: string | null;
160
- }> & Readonly<{}>, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, {
161
- text: string | null;
162
- }, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & (new () => {
163
- $slots: {
164
- default?: () => unknown;
165
- };
166
- });
167
- }, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
20
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
168
21
  export default _default;
@@ -39,7 +39,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
39
39
  type: BooleanConstructor;
40
40
  default: boolean;
41
41
  };
42
- }>, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
42
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
43
43
  /**
44
44
  * The number of rows to display in the skeleton table.
45
45
  * Controls the vertical size of the loading placeholder.
@@ -11,7 +11,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
11
11
  default: "noSorting";
12
12
  validator(value: SortingType): boolean;
13
13
  };
14
- }>, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
15
  "update:modelValue": (value: SortingType) => any;
16
16
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
17
17
  /**
@@ -19,7 +19,7 @@ declare var __VLS_1: {};
19
19
  type __VLS_Slots = {} & {
20
20
  default?: (props: typeof __VLS_1) => any;
21
21
  };
22
- declare const __VLS_component: import("vue").DefineComponent<Props, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
22
+ declare const __VLS_component: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
23
23
  isSelected: boolean;
24
24
  isEditable: boolean;
25
25
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -38,7 +38,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
38
38
  type: NumberConstructor;
39
39
  default: number;
40
40
  };
41
- }>, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
41
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
42
42
  "click:tab": (tabName: string) => any;
43
43
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
44
44
  /**
@@ -30,7 +30,7 @@ type Props = {
30
30
  */
31
31
  itemValue?: string;
32
32
  };
33
- declare const _default: import("vue").DefineComponent<Props, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
33
+ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
34
34
  "update:modelValue": (val: Value) => any;
35
35
  }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
36
36
  "onUpdate:modelValue"?: ((val: Value) => any) | undefined;
@@ -53,7 +53,7 @@ declare const __VLS_component: import("vue").DefineComponent<import("vue").Extra
53
53
  default: string;
54
54
  validator(value: Size): boolean;
55
55
  };
56
- }>, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
56
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
57
57
  "update:modelValue": (value: string) => any;
58
58
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
59
59
  /**
@@ -43,7 +43,7 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<import("vu
43
43
  default: string;
44
44
  validator(value: Size): boolean;
45
45
  };
46
- }>, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
46
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
47
47
  "update:modelValue": (value: boolean) => any;
48
48
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
49
49
  /**
package/dist/squirrel.css CHANGED
@@ -295,33 +295,33 @@ to {
295
295
  opacity: 0;
296
296
  transform: translate3d(0, -100%, 0);
297
297
  }
298
- }.pm[data-v-bb3daa48] {
298
+ }.pm[data-v-5c370dbc] {
299
299
  width: calc(100% - 32px);
300
300
  min-width: 110px;
301
- max-width: var(--5951a2a6);
301
+ max-width: var(--a8364442);
302
302
  max-height: calc(100vh - 32px);
303
303
  }
304
- .fadeIn[data-v-bb3daa48] {
304
+ .fadeIn[data-v-5c370dbc] {
305
305
  animation-duration: 0.4s;
306
- animation-name: fadeInFrames-bb3daa48;
306
+ animation-name: fadeInFrames-5c370dbc;
307
307
  animation-fill-mode: both;
308
308
  }
309
- .fadeOut[data-v-bb3daa48] {
309
+ .fadeOut[data-v-5c370dbc] {
310
310
  animation-duration: 0.2s;
311
- animation-name: fadeOutFrames-bb3daa48;
311
+ animation-name: fadeOutFrames-5c370dbc;
312
312
  animation-fill-mode: both;
313
313
  }
314
- .slideInTop[data-v-bb3daa48] {
314
+ .slideInTop[data-v-5c370dbc] {
315
315
  animation-duration: 0.4s;
316
- animation-name: fadeInFrames-bb3daa48,slideInTopFrames-bb3daa48;
316
+ animation-name: fadeInFrames-5c370dbc,slideInTopFrames-5c370dbc;
317
317
  animation-fill-mode: both;
318
318
  }
319
- .slideOutTop[data-v-bb3daa48] {
319
+ .slideOutTop[data-v-5c370dbc] {
320
320
  animation-duration: 0.2s;
321
- animation-name: fadeOutFrames-bb3daa48,slideOutTopFrames-bb3daa48;
321
+ animation-name: fadeOutFrames-5c370dbc,slideOutTopFrames-5c370dbc;
322
322
  animation-fill-mode: both;
323
323
  }
324
- @keyframes slideInTopFrames-bb3daa48 {
324
+ @keyframes slideInTopFrames-5c370dbc {
325
325
  from {
326
326
  transform: translate(0, -12px);
327
327
  animation-timing-function: cubic-bezier(0, 0, 0, 1);
@@ -330,7 +330,7 @@ to {
330
330
  transform: translate(0, 0);
331
331
  }
332
332
  }
333
- @keyframes slideOutTopFrames-bb3daa48 {
333
+ @keyframes slideOutTopFrames-5c370dbc {
334
334
  from {
335
335
  transform: translate(0, 0);
336
336
  animation-timing-function: cubic-bezier(0.33, 0, 0.67, 1);
@@ -339,7 +339,7 @@ to {
339
339
  transform: translate(0, -12px);
340
340
  }
341
341
  }
342
- @keyframes fadeInFrames-bb3daa48 {
342
+ @keyframes fadeInFrames-5c370dbc {
343
343
  from {
344
344
  opacity: 0;
345
345
  animation-timing-function: cubic-bezier(0, 0, 1, 1);
@@ -348,7 +348,7 @@ to {
348
348
  opacity: 1;
349
349
  }
350
350
  }
351
- @keyframes fadeOutFrames-bb3daa48 {
351
+ @keyframes fadeOutFrames-5c370dbc {
352
352
  from {
353
353
  opacity: 1;
354
354
  animation-timing-function: cubic-bezier(0.33, 0, 0.67, 1);
@@ -364,17 +364,6 @@ to {
364
364
  100% {
365
365
  transform: translateX(100%);
366
366
  }
367
- }.filter[data-v-5c047926] {
368
- background: url("data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M15.5%206.73H4.5C4.36739%206.73%204.24021%206.67732%204.14645%206.58355C4.05268%206.48978%204%206.3626%204%206.23C4%206.09739%204.05268%205.97021%204.14645%205.87644C4.24021%205.78267%204.36739%205.73%204.5%205.73H15.5C15.6326%205.73%2015.7598%205.78267%2015.8536%205.87644C15.9473%205.97021%2016%206.09739%2016%206.23C16%206.3626%2015.9473%206.48978%2015.8536%206.58355C15.7598%206.67732%2015.6326%206.73%2015.5%206.73Z'%20fill='%23424E6E'/%3e%3cpath%20d='M14.33%209.245H5.67C5.53739%209.245%205.41021%209.19232%205.31644%209.09855C5.22268%209.00478%205.17%208.8776%205.17%208.745C5.17%208.61239%205.22268%208.48521%205.31644%208.39144C5.41021%208.29767%205.53739%208.245%205.67%208.245H14.33C14.4626%208.245%2014.5898%208.29767%2014.6836%208.39144C14.7773%208.48521%2014.83%208.61239%2014.83%208.745C14.83%208.8776%2014.7773%209.00478%2014.6836%209.09855C14.5898%209.19232%2014.4626%209.245%2014.33%209.245Z'%20fill='%23424E6E'/%3e%3cpath%20d='M11.605%2014.27H8.395C8.2624%2014.27%208.13522%2014.2173%208.04145%2014.1235C7.94768%2014.0298%207.895%2013.9026%207.895%2013.77C7.895%2013.6374%207.94768%2013.5102%208.04145%2013.4164C8.13522%2013.3227%208.2624%2013.27%208.395%2013.27H11.605C11.7376%2013.27%2011.8648%2013.3227%2011.9586%2013.4164C12.0523%2013.5102%2012.105%2013.6374%2012.105%2013.77C12.105%2013.9026%2012.0523%2014.0298%2011.9586%2014.1235C11.8648%2014.2173%2011.7376%2014.27%2011.605%2014.27Z'%20fill='%23424E6E'/%3e%3cpath%20d='M13.155%2011.755H6.845C6.71239%2011.755%206.58522%2011.7023%206.49145%2011.6085C6.39768%2011.5148%206.345%2011.3876%206.345%2011.255C6.345%2011.1224%206.39768%2010.9952%206.49145%2010.9014C6.58522%2010.8077%206.71239%2010.755%206.845%2010.755H13.155C13.2876%2010.755%2013.4148%2010.8077%2013.5086%2010.9014C13.6023%2010.9952%2013.655%2011.1224%2013.655%2011.255C13.655%2011.3876%2013.6023%2011.5148%2013.5086%2011.6085C13.4148%2011.7023%2013.2876%2011.755%2013.155%2011.755Z'%20fill='%23424E6E'/%3e%3c/svg%3e") no-repeat;
369
- }
370
- .filter[data-v-5c047926]:hover {
371
- background: url("data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='20'%20height='20'%20rx='4'%20fill='black'%20fill-opacity='0.05'/%3e%3cpath%20d='M15.5%206.73001H4.5C4.36739%206.73001%204.24021%206.67733%204.14645%206.58356C4.05268%206.4898%204%206.36262%204%206.23001C4%206.0974%204.05268%205.97023%204.14645%205.87646C4.24021%205.78269%204.36739%205.73001%204.5%205.73001H15.5C15.6326%205.73001%2015.7598%205.78269%2015.8536%205.87646C15.9473%205.97023%2016%206.0974%2016%206.23001C16%206.36262%2015.9473%206.4898%2015.8536%206.58356C15.7598%206.67733%2015.6326%206.73001%2015.5%206.73001Z'%20fill='%23424E6E'/%3e%3cpath%20d='M14.33%209.24503H5.67C5.53739%209.24503%205.41021%209.19235%205.31644%209.09858C5.22268%209.00481%205.17%208.87763%205.17%208.74503C5.17%208.61242%205.22268%208.48524%205.31644%208.39147C5.41021%208.2977%205.53739%208.24503%205.67%208.24503H14.33C14.4626%208.24503%2014.5898%208.2977%2014.6836%208.39147C14.7773%208.48524%2014.83%208.61242%2014.83%208.74503C14.83%208.87763%2014.7773%209.00481%2014.6836%209.09858C14.5898%209.19235%2014.4626%209.24503%2014.33%209.24503Z'%20fill='%23424E6E'/%3e%3cpath%20d='M11.605%2014.27H8.395C8.2624%2014.27%208.13522%2014.2173%208.04145%2014.1236C7.94768%2014.0298%207.895%2013.9026%207.895%2013.77C7.895%2013.6374%207.94768%2013.5102%208.04145%2013.4165C8.13522%2013.3227%208.2624%2013.27%208.395%2013.27H11.605C11.7376%2013.27%2011.8648%2013.3227%2011.9586%2013.4165C12.0523%2013.5102%2012.105%2013.6374%2012.105%2013.77C12.105%2013.9026%2012.0523%2014.0298%2011.9586%2014.1236C11.8648%2014.2173%2011.7376%2014.27%2011.605%2014.27Z'%20fill='%23424E6E'/%3e%3cpath%20d='M13.155%2011.755H6.845C6.71239%2011.755%206.58522%2011.7023%206.49145%2011.6086C6.39768%2011.5148%206.345%2011.3876%206.345%2011.255C6.345%2011.1224%206.39768%2010.9952%206.49145%2010.9015C6.58522%2010.8077%206.71239%2010.755%206.845%2010.755H13.155C13.2876%2010.755%2013.4148%2010.8077%2013.5086%2010.9015C13.6023%2010.9952%2013.655%2011.1224%2013.655%2011.255C13.655%2011.3876%2013.6023%2011.5148%2013.5086%2011.6086C13.4148%2011.7023%2013.2876%2011.755%2013.155%2011.755Z'%20fill='%23424E6E'/%3e%3c/svg%3e") no-repeat;
372
- }
373
- .filter.active[data-v-5c047926] {
374
- background: url("data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M10%2014L4%205V3h16v2l-6%209v6l-4%202z'%20fill='%230F45AF'%20/%3e%3c/svg%3e") no-repeat;
375
- }
376
- .filter.active[data-v-5c047926]:hover {
377
- background: url("data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='24'%20height='24'%20rx='4'%20fill='black'%20fill-opacity='0.05'/%3e%3cpath%20d='M10%2014L4%205V3h16v2l-6%209v6l-4%202z'%20fill='%230F45AF'%20/%3e%3c/svg%3e") no-repeat;
378
367
  }.td-shadow-right[data-v-9a0c95c7] {
379
368
  box-shadow: -1px 1px 5px 4px rgba(0, 0, 0, 0.15);
380
369
  clip-path: inset(0px -12px 0px 0px);
@@ -1128,35 +1117,35 @@ to {
1128
1117
  background-image: url("data:image/svg+xml,%3csvg%20width='33'%20height='30'%20viewBox='0%200%2033%2030'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M31.0143%2029.9524C31.1862%2029.9516%2031.3551%2029.9066%2031.5045%2029.8215C31.6539%2029.7365%2031.7789%2029.6144%2031.8674%2029.4669C31.9558%2029.3195%2032.0048%2029.1517%2032.0095%2028.9799C32.0142%2028.808%2031.9745%2028.6378%2031.8943%2028.4857L16.8943%200.485744C16.8006%200.337008%2016.6708%200.214443%2016.5169%200.129498C16.363%200.0445534%2016.1901%200%2016.0143%200C15.8385%200%2015.6656%200.0445534%2015.5117%200.129498C15.3578%200.214443%2015.228%200.337008%2015.1343%200.485744L0.134286%2028.4857C0.0463617%2028.6353%200%2028.8056%200%2028.9791C0%2029.1526%200.0463617%2029.3229%200.134286%2029.4724C0.221436%2029.6207%200.346313%2029.7432%200.496207%2029.8275C0.6461%2029.9118%200.815658%2029.9549%200.98762%2029.9524H31.0143ZM16.0143%2026.2857C15.6176%2026.2857%2015.2299%2026.1677%2014.9004%2025.9467C14.571%2025.7258%2014.3147%2025.4118%2014.1641%2025.0448C14.0136%2024.6778%2013.9755%2024.2743%2014.0549%2023.8857C14.1342%2023.497%2014.3274%2023.1407%2014.6098%2022.8621C14.8922%2022.5835%2015.251%2022.3951%2015.6407%2022.321C16.0304%2022.2468%2016.4334%2022.2903%2016.7983%2022.4458C17.1633%2022.6012%2017.4737%2022.8617%2017.6903%2023.1941C17.9068%2023.5265%2018.0196%2023.9158%2018.0143%2024.3124C18.0073%2024.8382%2017.7935%2025.3401%2017.4192%2025.7094C17.0448%2026.0787%2016.5401%2026.2858%2016.0143%2026.2857ZM16.0143%209.95241C16.3679%209.95241%2016.707%2010.0929%2016.9571%2010.3429C17.2071%2010.593%2017.3476%2010.9321%2017.3476%2011.2857V18.5791C17.3476%2018.9327%2017.2071%2019.2718%2016.9571%2019.5219C16.707%2019.7719%2016.3679%2019.9124%2016.0143%2019.9124C15.6607%2019.9124%2015.3215%2019.7719%2015.0715%2019.5219C14.8214%2019.2718%2014.681%2018.9327%2014.681%2018.5791V11.2857C14.681%2010.9321%2014.8214%2010.593%2015.0715%2010.3429C15.3215%2010.0929%2015.6607%209.95241%2016.0143%209.95241Z'%20fill='%23F2C94C'%20/%3e%3c/svg%3e");
1129
1118
  }
1130
1119
 
1131
- /*# sourceMappingURL=squirrel.css.map */.p-table[data-v-b51c1939] {
1120
+ /*# sourceMappingURL=squirrel.css.map */.p-table[data-v-58c21732] {
1132
1121
  color: rgb(var(--color-night));
1133
1122
  height: 1px;
1134
1123
  }
1135
- .p-table th[data-v-b51c1939] {
1124
+ .p-table th[data-v-58c21732] {
1136
1125
  position: sticky;
1137
1126
  top: 0px;
1138
1127
  z-index: 20;
1139
1128
  padding: 0px;
1140
1129
  }
1141
- .p-table.first-col-fixed th[data-v-b51c1939]:first-child {
1130
+ .p-table.first-col-fixed th[data-v-58c21732]:first-child {
1142
1131
  left: 0px;
1143
1132
  z-index: 30;
1144
1133
  }
1145
- .p-table.first-col-fixed th:first-child .th-shadow[data-v-b51c1939] {
1134
+ .p-table.first-col-fixed th:first-child .th-shadow[data-v-58c21732] {
1146
1135
  box-shadow: -1px 1px 5px 4px rgba(0, 0, 0, 0.15);
1147
1136
  clip-path: inset(0px -12px 0px 0px);
1148
1137
  }
1149
- .p-table.last-col-fixed th[data-v-b51c1939]:last-child {
1138
+ .p-table.last-col-fixed th[data-v-58c21732]:last-child {
1150
1139
  right: 0px;
1151
1140
  z-index: 30;
1152
1141
  }
1153
- .p-table.last-col-fixed th:last-child .th-shadow[data-v-b51c1939] {
1142
+ .p-table.last-col-fixed th:last-child .th-shadow[data-v-58c21732] {
1154
1143
  box-shadow: -2px 1px 8px rgba(0, 0, 0, 0.15);
1155
1144
  clip-path: inset(0px 0px 0px -12px);
1156
1145
  }
1157
- [data-v-b51c1939] .p-table tr:last-child td {
1146
+ [data-v-58c21732] .p-table tr:last-child td {
1158
1147
  border-bottom-width: 0px;
1159
1148
  }
1160
- [data-v-b51c1939] .p-table tr:last-child td.td-col-fixed-border-b::after {
1149
+ [data-v-58c21732] .p-table tr:last-child td.td-col-fixed-border-b::after {
1161
1150
  height: 0px;
1162
1151
  }
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@pequity/squirrel",
3
3
  "description": "Squirrel component library",
4
- "version": "8.4.5",
5
- "packageManager": "pnpm@10.13.1",
4
+ "version": "8.5.1",
5
+ "packageManager": "pnpm@10.15.1",
6
6
  "type": "module",
7
7
  "scripts": {
8
8
  "preinstall": "npx only-allow pnpm",
@@ -13,6 +13,7 @@
13
13
  "lint": "eslint \"**/*.{vue,ts,js}\"",
14
14
  "lint-fix": "eslint --fix \"**/*.{vue,ts,js}\"",
15
15
  "test:unit": "vitest --project=unit",
16
+ "test:unit-nowatch": "vitest run --project=unit",
16
17
  "test:unit-coverage": "vitest run --project=unit --coverage && make-coverage-badge",
17
18
  "typecheck": "vue-tsc --noEmit",
18
19
  "storybook": "storybook dev -p 6006",
@@ -49,57 +50,58 @@
49
50
  "devDependencies": {
50
51
  "@commitlint/cli": "^19.8.1",
51
52
  "@commitlint/config-conventional": "^19.8.1",
52
- "@pequity/eslint-config": "^2.0.2",
53
- "@playwright/test": "^1.54.1",
53
+ "@pequity/eslint-config": "^2.0.3",
54
+ "@playwright/test": "^1.55.0",
54
55
  "@semantic-release/changelog": "^6.0.3",
55
56
  "@semantic-release/git": "^10.0.1",
56
- "@storybook/addon-a11y": "^9.0.18",
57
- "@storybook/addon-docs": "^9.0.18",
58
- "@storybook/addon-links": "^9.0.18",
59
- "@storybook/addon-vitest": "^9.0.18",
60
- "@storybook/vue3-vite": "^9.0.18",
57
+ "@storybook/addon-a11y": "^9.1.4",
58
+ "@storybook/addon-docs": "^9.1.4",
59
+ "@storybook/addon-links": "^9.1.4",
60
+ "@storybook/addon-vitest": "^9.1.4",
61
+ "@storybook/vue3-vite": "^9.1.4",
61
62
  "@tanstack/vue-virtual": "3.13.12",
62
63
  "@types/jsdom": "^21.1.7",
63
64
  "@types/lodash-es": "^4.17.12",
64
- "@types/node": "^24.1.0",
65
+ "@types/node": "^24.3.0",
65
66
  "@vitejs/plugin-vue": "^6.0.1",
66
67
  "@vitest/browser": "3.2.4",
67
68
  "@vitest/coverage-v8": "^3.2.4",
68
- "@vue/compiler-sfc": "3.5.18",
69
+ "@vue/compiler-sfc": "3.5.21",
69
70
  "@vue/test-utils": "^2.4.6",
70
71
  "@vuepic/vue-datepicker": "11.0.2",
71
72
  "autoprefixer": "^10.4.21",
72
- "eslint": "^9.32.0",
73
- "eslint-plugin-storybook": "^9.0.18",
73
+ "eslint": "^9.34.0",
74
+ "eslint-plugin-storybook": "^9.1.4",
74
75
  "floating-vue": "5.2.2",
75
76
  "glob": "^11.0.3",
76
77
  "husky": "^9.1.7",
77
78
  "iconify-icon": "^3.0.0",
78
79
  "jsdom": "^26.1.0",
79
- "lint-staged": "^16.1.2",
80
+ "lint-staged": "^16.1.6",
80
81
  "lodash-es": "4.17.21",
81
82
  "make-coverage-badge": "^1.2.0",
82
- "playwright": "^1.54.1",
83
+ "playwright": "^1.55.0",
83
84
  "postcss": "^8.5.6",
84
85
  "prettier": "^3.6.2",
85
86
  "prettier-plugin-tailwindcss": "^0.6.14",
86
87
  "resolve-tspaths": "^0.8.23",
87
88
  "rimraf": "^6.0.1",
88
- "sass": "^1.89.2",
89
+ "sass": "^1.92.0",
89
90
  "semantic-release": "^24.2.7",
90
- "storybook": "^9.0.18",
91
+ "storybook": "^9.1.4",
91
92
  "svgo": "^4.0.0",
92
93
  "tailwindcss": "^3.4.17",
93
94
  "typescript": "5.8.3",
94
- "vite": "^7.0.6",
95
+ "vite": "^7.1.4",
95
96
  "vitest": "^3.2.4",
96
- "vue": "3.5.18",
97
+ "vue": "3.5.21",
97
98
  "vue-currency-input": "3.2.1",
98
99
  "vue-router": "4.5.1",
99
100
  "vue-toastification": "2.0.0-rc.5",
100
- "vue-tsc": "3.0.4"
101
+ "vue-tsc": "3.0.6"
101
102
  },
102
103
  "dependencies": {
103
- "tailwind-variants": "^1.0.0"
104
+ "tailwind-merge": "^3.3.1",
105
+ "tailwind-variants": "^3.1.0"
104
106
  }
105
107
  }
@@ -52,7 +52,6 @@ import {
52
52
  import PTable from '@squirrel/components/p-table/p-table.vue';
53
53
  import { usePTableColResize } from '@squirrel/components/p-table/usePTableColResize';
54
54
  import { usePTableRowVirtualizer } from '@squirrel/components/p-table/usePTableRowVirtualizer';
55
- import PFilterIcon from '@squirrel/components/p-table-header-cell/p-table-filter-icon.vue';
56
55
  import PTableHeaderCell from '@squirrel/components/p-table-header-cell/p-table-header-cell.vue';
57
56
  import PTableLoader from '@squirrel/components/p-table-loader/p-table-loader.vue';
58
57
  import {
@@ -90,7 +89,6 @@ export {
90
89
  PDropdown,
91
90
  PDropdownSelect,
92
91
  PFileUpload,
93
- PFilterIcon,
94
92
  PIcon,
95
93
  PIconAlias,
96
94
  PInfoIcon,
@@ -3,10 +3,10 @@ import { createWrapperFor } from '@tests/vitest.helpers';
3
3
 
4
4
  describe('PAlert.vue', () => {
5
5
  it.each([
6
- ['info', ['bg-info', 'text-on-info'], 'streamline:information-circle-solid'],
7
- ['warning', ['bg-warning', 'text-on-warning'], 'streamline:warning-triangle-solid'],
8
- ['error', ['bg-error', 'text-on-error'], 'streamline:warning-octagon-solid'],
9
- ['success', ['bg-success', 'text-on-success'], 'streamline:check-square-solid'],
6
+ ['info', ['bg-info', 'text-on-info'], 'material-symbols:info-outline'],
7
+ ['warning', ['bg-warning', 'text-on-warning'], 'warning'],
8
+ ['error', ['bg-error', 'text-on-error'], 'cancel-circle'],
9
+ ['success', ['bg-success', 'text-on-success'], 'ok-circle'],
10
10
  ])('renders an alert of type %s', async (type, classes, iconName) => {
11
11
  const wrapper = createWrapperFor(PAlert, { props: { type }, global: { stubs: { PIcon: true } } });
12
12
 
@@ -5,6 +5,13 @@ export default {
5
5
  title: 'Components/PAlert',
6
6
  component: PAlert,
7
7
  tags: ['autodocs'],
8
+ render: (args) => ({
9
+ components: { PAlert },
10
+ setup() {
11
+ return { args };
12
+ },
13
+ template: `<PAlert v-bind="args">${args.default}</PAlert>`,
14
+ }),
8
15
  argTypes: {
9
16
  type: {
10
17
  control: { type: 'select' },
@@ -22,16 +29,10 @@ export default {
22
29
  };
23
30
 
24
31
  export const Info = {
25
- render: (args) => ({
26
- components: { PAlert },
27
- setup() {
28
- return { args };
29
- },
30
- template: `<PAlert v-bind="args">${args.default}</PAlert>`,
31
- }),
32
32
  args: {
33
33
  type: 'info',
34
- default: 'Lorem ipsum dolor sit amet',
34
+ default:
35
+ 'Your account has been updated with the latest security features.<br />Two-factor authentication is now enabled for enhanced protection.',
35
36
  },
36
37
  };
37
38
 
@@ -39,28 +40,33 @@ Info.play = async ({ canvasElement }) => {
39
40
  const canvas = within(canvasElement);
40
41
  const alertDiv = await canvas.getByRole('alert');
41
42
 
42
- await expect(alertDiv.innerText).toBe('Lorem ipsum dolor sit amet');
43
- await expect(alertDiv).toHaveClass('p-4 rounded text-xs font-semibold bg-info text-on-info');
43
+ await expect(alertDiv.innerText).toBe(
44
+ 'Your account has been updated with the latest security features.\nTwo-factor authentication is now enabled for enhanced protection.'
45
+ );
46
+ await expect(alertDiv).toHaveClass('p-4 rounded-lg text-xs font-semibold bg-info text-on-info');
44
47
  await expect(alertDiv).toHaveStyle('background-color: #e4edfa');
45
48
  };
46
49
 
47
50
  export const Success = {
48
51
  args: {
49
- ...Info.args,
50
52
  type: 'success',
53
+ default:
54
+ 'Your profile has been successfully updated and changes are now live.<br />Other team members can now see your updated information.',
51
55
  },
52
56
  };
53
57
 
54
58
  export const Warning = {
55
59
  args: {
56
- ...Info.args,
57
60
  type: 'warning',
61
+ default:
62
+ 'You have unsaved changes that will be lost if you navigate away from this page.<br />Make sure to save your work before continuing.',
58
63
  },
59
64
  };
60
65
 
61
66
  export const Error = {
62
67
  args: {
63
- ...Info.args,
64
68
  type: 'error',
69
+ default:
70
+ 'Failed to save changes. Please check your internet connection and try again.<br />If the problem persists, contact support at help@pequity.com.',
65
71
  },
66
72
  };
@@ -1,11 +1,9 @@
1
1
  <template>
2
- <div :class="['rounded p-4 text-xs font-semibold', ALERT_TYPES[props.type].classes]" role="alert">
3
- <div class="flex">
4
- <div class="pr-2">
5
- <slot name="icon">
6
- <PIcon :icon="ALERT_TYPES[props.type].icon" width="16" class="-mb-0.5" inline />
7
- </slot>
8
- </div>
2
+ <div :class="['rounded-lg p-4 text-xs font-semibold', ALERT_TYPES[props.type].classes]" role="alert">
3
+ <div class="flex items-center gap-4">
4
+ <slot name="icon">
5
+ <PIcon :icon="ALERT_TYPES[props.type].icon" width="20" />
6
+ </slot>
9
7
  <div>
10
8
  <slot></slot>
11
9
  </div>
@@ -18,10 +16,10 @@ import PIcon from '@squirrel/components/p-icon/p-icon.vue';
18
16
  import { type PropType } from 'vue';
19
17
 
20
18
  const ALERT_TYPES = {
21
- info: { classes: `bg-info text-on-info`, icon: 'streamline:information-circle-solid' },
22
- warning: { classes: `bg-warning text-on-warning`, icon: 'streamline:warning-triangle-solid' },
23
- error: { classes: `bg-error text-on-error`, icon: 'streamline:warning-octagon-solid' },
24
- success: { classes: `bg-success text-on-success`, icon: 'streamline:check-square-solid' },
19
+ info: { classes: `bg-info text-on-info`, icon: 'material-symbols:info-outline' },
20
+ warning: { classes: `bg-warning text-on-warning`, icon: 'warning' },
21
+ error: { classes: `bg-error text-on-error`, icon: 'cancel-circle' },
22
+ success: { classes: `bg-success text-on-success`, icon: 'ok-circle' },
25
23
  };
26
24
  </script>
27
25
 
@@ -35,6 +35,7 @@ export const P_ICON_ALIASES = {
35
35
  info: 'streamline:information-circle',
36
36
  help: 'ph:question',
37
37
  search: 'streamline:magnifying-glass-solid',
38
+ warning: 'ri:error-warning-line',
38
39
  } as const;
39
40
 
40
41
  export type PIconAlias = keyof typeof P_ICON_ALIASES;