playbook_ui 14.25.0.pre.alpha.testingcss9798 → 14.25.0.pre.alpha.testingcss10064

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5be7aa941d1c03b6131a2df30b8d11f4dfddf7c8f5dc4372b2369df7d58fe6ed
4
- data.tar.gz: f8879e9b0dfd2a424a1e17931b0a06710b58a6a352604f7c3bc637903be79252
3
+ metadata.gz: 3e87c0470bff796e237c63f993cede71218d1e88755e07b892a23af2c251b38f
4
+ data.tar.gz: 1542b3c097c5ac6d3dd47b0c4098ab7df31fa5226b4d3a03b3d66d56beffdc2b
5
5
  SHA512:
6
- metadata.gz: d2c3c2321c62420d0296f925a3a5b8468ecb25e08eba3b5b1e2d1e80c6141462bf536cef0c2b3610117d7f499e9cd2dca14b99ad9922b5b24f8f0a77e69823c8
7
- data.tar.gz: 588a432377d4322d6371f8d41e157467240a63ee95975d84aea02da07e74d8db24100ad78534b8202466892e53333333ebc32f5d11b9da7503d7055189271915
6
+ metadata.gz: d40d2fd146e983865122a237a8bd7af908ad8418369227fe0ff71c622ee160af8bb30895198a26839c194e1badb927e530fbfd4f42c2ab1510fe4021c8991ea1
7
+ data.tar.gz: fb04f80c66bb59e996bb00b13de44479d13e96bb4b69ac406b5fd3fa881ab0a384de79f524472dfc4dac21973851292cf0f13b889e1a3866f98c1b8255a61f4f
@@ -0,0 +1,506 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+ import PbDate from './_date'
4
+ import DateTime from '../pb_kit/dateTime'
5
+
6
+ // Mock DateTime utility functions
7
+ jest.mock('../pb_kit/dateTime', () => ({
8
+ toWeekday: jest.fn(),
9
+ toMonth: jest.fn(),
10
+ toDay: jest.fn(),
11
+ toYear: jest.fn(),
12
+ }))
13
+
14
+ // Set test date
15
+ const TEST_DATE = new Date('2025-08-19T10:30:00Z') // Monday, August 19, 2025
16
+ const CURRENT_YEAR = new Date().getFullYear()
17
+
18
+ describe('PbDate Kit', () => {
19
+ beforeEach(() => {
20
+ // Reset mocks before each test
21
+ jest.clearAllMocks()
22
+
23
+ // Set up default mock returns
24
+ DateTime.toWeekday.mockReturnValue('Monday')
25
+ DateTime.toMonth.mockReturnValue('August')
26
+ DateTime.toDay.mockReturnValue('19')
27
+ DateTime.toYear.mockReturnValue(2025)
28
+
29
+ // Mock console.error to avoid noise in tests
30
+ jest.spyOn(console, 'error').mockImplementation(() => {})
31
+ })
32
+
33
+ afterEach(() => {
34
+ console.error.mockRestore()
35
+ })
36
+
37
+ // Default Props
38
+ describe('Default Props', () => {
39
+ test('renders with minimal required props', () => {
40
+ const testId = 'pb-date-default'
41
+ render(
42
+ <PbDate
43
+ data={{ testid: testId }}
44
+ value={TEST_DATE}
45
+ />
46
+ )
47
+
48
+ const kit = screen.getByTestId(testId)
49
+ expect(kit).toBeInTheDocument()
50
+ expect(kit).toHaveClass('pb_date_kit_left')
51
+ })
52
+
53
+ test('displays date in default format without day of week', () => {
54
+ // Mock current year to test hiding logic
55
+ DateTime.toYear.mockReturnValue(CURRENT_YEAR)
56
+
57
+ const testId = 'pb-date-format'
58
+ render(
59
+ <PbDate
60
+ data={{ testid: testId }}
61
+ value={TEST_DATE}
62
+ />
63
+ )
64
+
65
+ const kit = screen.getByTestId(testId)
66
+ expect(kit).toHaveTextContent('August 19')
67
+ expect(kit).not.toHaveTextContent('Monday')
68
+ expect(kit).not.toHaveTextContent(`, ${CURRENT_YEAR}`)
69
+ })
70
+
71
+ test('applies default CSS classes', () => {
72
+ const testId = 'pb-date-css'
73
+ render(
74
+ <PbDate
75
+ data={{ testid: testId }}
76
+ value={TEST_DATE}
77
+ />
78
+ )
79
+
80
+ const kit = screen.getByTestId(testId)
81
+ expect(kit).toHaveClass('pb_date_kit_left')
82
+ })
83
+ })
84
+
85
+ // Prop Variations
86
+ describe('Prop Variations', () => {
87
+ test('renders with showDayOfWeek enabled', () => {
88
+ const testId = 'pb-date-weekday'
89
+ render(
90
+ <PbDate
91
+ data={{ testid: testId }}
92
+ showDayOfWeek
93
+ value={TEST_DATE}
94
+ />
95
+ )
96
+
97
+ const kit = screen.getByTestId(testId)
98
+ expect(kit).toHaveTextContent('Monday')
99
+ expect(kit).toHaveTextContent('•')
100
+ expect(kit).toHaveTextContent('August 19')
101
+ })
102
+
103
+ test('renders with showCurrentYear enabled', () => {
104
+ const testId = 'pb-date-current-year'
105
+ render(
106
+ <PbDate
107
+ data={{ testid: testId }}
108
+ showCurrentYear
109
+ value={TEST_DATE}
110
+ />
111
+ )
112
+
113
+ const kit = screen.getByTestId(testId)
114
+ expect(kit).toHaveTextContent(', 2025')
115
+ })
116
+
117
+ test('renders with showIcon enabled for medium size', () => {
118
+ const testId = 'pb-date-icon-md'
119
+ render(
120
+ <PbDate
121
+ data={{ testid: testId }}
122
+ showIcon
123
+ size="md"
124
+ value={TEST_DATE}
125
+ />
126
+ )
127
+
128
+ const kit = screen.getByTestId(testId)
129
+ const iconContainer = kit.querySelector('.pb_icon_kit_container')
130
+ expect(iconContainer).toBeInTheDocument()
131
+ })
132
+
133
+ test('renders with showIcon enabled for small size', () => {
134
+ const testId = 'pb-date-icon-sm'
135
+ render(
136
+ <PbDate
137
+ data={{ testid: testId }}
138
+ showIcon
139
+ size="sm"
140
+ value={TEST_DATE}
141
+ />
142
+ )
143
+
144
+ const kit = screen.getByTestId(testId)
145
+ const iconContainer = kit.querySelector('.pb_icon_kit_container')
146
+ expect(iconContainer).toBeInTheDocument()
147
+ })
148
+
149
+ test('renders different sizes correctly', () => {
150
+ const sizes = ['sm', 'md', 'lg']
151
+
152
+ sizes.forEach(size => {
153
+ const testId = `pb-date-size-${size}`
154
+ render(
155
+ <PbDate
156
+ data={{ testid: testId }}
157
+ size={size}
158
+ value={TEST_DATE}
159
+ />
160
+ )
161
+
162
+ const kit = screen.getByTestId(testId)
163
+ expect(kit).toBeInTheDocument()
164
+
165
+ expect(kit).toHaveTextContent('August 19')
166
+ })
167
+ })
168
+
169
+ test('renders different alignments correctly', () => {
170
+ const alignments = ['left', 'center', 'right']
171
+
172
+ alignments.forEach(alignment => {
173
+ const testId = `pb-date-align-${alignment}`
174
+ render(
175
+ <PbDate
176
+ alignment={alignment}
177
+ data={{ testid: testId }}
178
+ value={TEST_DATE}
179
+ />
180
+ )
181
+
182
+ const kit = screen.getByTestId(testId)
183
+ expect(kit).toHaveClass(`pb_date_kit_${alignment}`)
184
+ })
185
+ })
186
+
187
+ test('renders in dark mode', () => {
188
+ const testId = 'pb-date-dark'
189
+ render(
190
+ <PbDate
191
+ dark
192
+ data={{ testid: testId }}
193
+ value={TEST_DATE}
194
+ />
195
+ )
196
+
197
+ const kit = screen.getByTestId(testId)
198
+ expect(kit).toBeInTheDocument()
199
+ })
200
+
201
+ test('renders in unstyled mode', () => {
202
+ const testId = 'pb-date-unstyled'
203
+ render(
204
+ <PbDate
205
+ data={{ testid: testId }}
206
+ showDayOfWeek
207
+ showIcon
208
+ unstyled
209
+ value={TEST_DATE}
210
+ />
211
+ )
212
+
213
+ const kit = screen.getByTestId(testId)
214
+ expect(kit).toHaveTextContent('Monday')
215
+ expect(kit).toHaveTextContent('•')
216
+ expect(kit).toHaveTextContent('August 19')
217
+
218
+ expect(kit.querySelector('.pb_title_kit')).not.toBeInTheDocument()
219
+ expect(kit.querySelector('.pb_caption_kit')).not.toBeInTheDocument()
220
+ })
221
+
222
+ test('applies custom className', () => {
223
+ const testId = 'pb-date-custom-class'
224
+ const customClass = 'my-custom-date-class'
225
+
226
+ render(
227
+ <PbDate
228
+ className={customClass}
229
+ data={{ testid: testId }}
230
+ value={TEST_DATE}
231
+ />
232
+ )
233
+
234
+ const kit = screen.getByTestId(testId)
235
+ expect(kit).toHaveClass(customClass)
236
+ })
237
+
238
+ test('applies custom id', () => {
239
+ const customId = 'my-custom-date-id'
240
+
241
+ render(
242
+ <PbDate
243
+ id={customId}
244
+ value={TEST_DATE}
245
+ />
246
+ )
247
+
248
+ const kit = document.getElementById(customId)
249
+ expect(kit).toBeInTheDocument()
250
+ expect(kit).toHaveAttribute('id', customId)
251
+ })
252
+ })
253
+
254
+ // Year Display
255
+ describe('Year Display Logic', () => {
256
+ test('hides current year by default', () => {
257
+ DateTime.toYear.mockReturnValue(CURRENT_YEAR)
258
+
259
+ const testId = 'pb-date-current-year-hidden'
260
+ render(
261
+ <PbDate
262
+ data={{ testid: testId }}
263
+ value={TEST_DATE}
264
+ />
265
+ )
266
+
267
+ const kit = screen.getByTestId(testId)
268
+ expect(kit).not.toHaveTextContent(`, ${CURRENT_YEAR}`)
269
+ })
270
+
271
+ test('shows current year when showCurrentYear is true', () => {
272
+ DateTime.toYear.mockReturnValue(CURRENT_YEAR)
273
+
274
+ const testId = 'pb-date-force-current-year'
275
+ render(
276
+ <PbDate
277
+ data={{ testid: testId }}
278
+ showCurrentYear
279
+ value={TEST_DATE}
280
+ />
281
+ )
282
+
283
+ const kit = screen.getByTestId(testId)
284
+ expect(kit).toHaveTextContent(`, ${CURRENT_YEAR}`)
285
+ })
286
+
287
+ test('shows non-current year automatically', () => {
288
+ const pastYear = CURRENT_YEAR - 1
289
+ DateTime.toYear.mockReturnValue(pastYear)
290
+
291
+ const testId = 'pb-date-past-year'
292
+ render(
293
+ <PbDate
294
+ data={{ testid: testId }}
295
+ value={TEST_DATE}
296
+ />
297
+ )
298
+
299
+ const kit = screen.getByTestId(testId)
300
+ expect(kit).toHaveTextContent(`, ${pastYear}`)
301
+ })
302
+
303
+ test('shows future year automatically', () => {
304
+ const futureYear = CURRENT_YEAR + 1
305
+ DateTime.toYear.mockReturnValue(futureYear)
306
+
307
+ const testId = 'pb-date-future-year'
308
+ render(
309
+ <PbDate
310
+ data={{ testid: testId }}
311
+ value={TEST_DATE}
312
+ />
313
+ )
314
+
315
+ const kit = screen.getByTestId(testId)
316
+ expect(kit).toHaveTextContent(`, ${futureYear}`)
317
+ })
318
+ })
319
+
320
+ // Edge Cases
321
+ describe('Edge Cases', () => {
322
+ test('handles leap year date', () => {
323
+ const leapYearDate = new Date('2024-02-29T12:00:00Z')
324
+ DateTime.toMonth.mockReturnValue('February')
325
+ DateTime.toDay.mockReturnValue('29')
326
+ DateTime.toYear.mockReturnValue(2024)
327
+ DateTime.toWeekday.mockReturnValue('Thursday')
328
+
329
+ const testId = 'pb-date-leap-year'
330
+ render(
331
+ <PbDate
332
+ data={{ testid: testId }}
333
+ value={leapYearDate}
334
+ />
335
+ )
336
+
337
+ const kit = screen.getByTestId(testId)
338
+ expect(kit).toHaveTextContent('February 29')
339
+ })
340
+
341
+ test('handles beginning of year', () => {
342
+ const newYearDate = new Date('2023-01-01T00:00:00Z')
343
+ DateTime.toMonth.mockReturnValue('January')
344
+ DateTime.toDay.mockReturnValue('1')
345
+ DateTime.toYear.mockReturnValue(2023)
346
+ DateTime.toWeekday.mockReturnValue('Sunday')
347
+
348
+ const testId = 'pb-date-new-year'
349
+ render(
350
+ <PbDate
351
+ data={{ testid: testId }}
352
+ value={newYearDate}
353
+ />
354
+ )
355
+
356
+ const kit = screen.getByTestId(testId)
357
+ expect(kit).toHaveTextContent('January 1')
358
+ })
359
+
360
+ test('handles end of year', () => {
361
+ const endYearDate = new Date('2023-12-31T23:59:59Z')
362
+ DateTime.toMonth.mockReturnValue('December')
363
+ DateTime.toDay.mockReturnValue('31')
364
+ DateTime.toYear.mockReturnValue(2023)
365
+ DateTime.toWeekday.mockReturnValue('Sunday')
366
+
367
+ const testId = 'pb-date-end-year'
368
+ render(
369
+ <PbDate
370
+ data={{ testid: testId }}
371
+ value={endYearDate}
372
+ />
373
+ )
374
+
375
+ const kit = screen.getByTestId(testId)
376
+ expect(kit).toHaveTextContent('December 31')
377
+ })
378
+
379
+ test('handles very old date', () => {
380
+ const oldDate = new Date('1900-01-01T00:00:00Z')
381
+ DateTime.toMonth.mockReturnValue('January')
382
+ DateTime.toDay.mockReturnValue('1')
383
+ DateTime.toYear.mockReturnValue(1900)
384
+ DateTime.toWeekday.mockReturnValue('Monday')
385
+
386
+ const testId = 'pb-date-old'
387
+ render(
388
+ <PbDate
389
+ data={{ testid: testId }}
390
+ value={oldDate}
391
+ />
392
+ )
393
+
394
+ const kit = screen.getByTestId(testId)
395
+ expect(kit).toHaveTextContent('January 1')
396
+ expect(kit).toHaveTextContent(', 1900')
397
+ })
398
+
399
+ test('handles far future date', () => {
400
+ const futureDate = new Date('2099-12-31T23:59:59Z')
401
+ DateTime.toMonth.mockReturnValue('December')
402
+ DateTime.toDay.mockReturnValue('31')
403
+ DateTime.toYear.mockReturnValue(2099)
404
+ DateTime.toWeekday.mockReturnValue('Friday')
405
+
406
+ const testId = 'pb-date-future'
407
+ render(
408
+ <PbDate
409
+ data={{ testid: testId }}
410
+ value={futureDate}
411
+ />
412
+ )
413
+
414
+ const kit = screen.getByTestId(testId)
415
+ expect(kit).toHaveTextContent('December 31')
416
+ expect(kit).toHaveTextContent(', 2099')
417
+ })
418
+ })
419
+
420
+ // Accessibility and HTML
421
+ describe('Accessibility and HTML Attributes', () => {
422
+ test('applies aria attributes correctly', () => {
423
+ const testId = 'pb-date-aria'
424
+ const ariaLabel = 'Custom date label'
425
+
426
+ render(
427
+ <PbDate
428
+ aria={{ label: ariaLabel }}
429
+ data={{ testid: testId }}
430
+ value={TEST_DATE}
431
+ />
432
+ )
433
+
434
+ const kit = screen.getByTestId(testId)
435
+ expect(kit).toHaveAttribute('aria-label', ariaLabel)
436
+ })
437
+
438
+ test('applies data attributes correctly', () => {
439
+ const testId = 'pb-date-data'
440
+ const customData = 'custom-value'
441
+
442
+ render(
443
+ <PbDate
444
+ data={{ testid: testId, custom: customData }}
445
+ value={TEST_DATE}
446
+ />
447
+ )
448
+
449
+ const kit = screen.getByTestId(testId)
450
+ expect(kit).toHaveAttribute('data-custom', customData)
451
+ })
452
+
453
+ test('applies HTML options correctly', () => {
454
+ const testId = 'pb-date-html'
455
+ const title = 'Custom title'
456
+
457
+ render(
458
+ <PbDate
459
+ data={{ testid: testId }}
460
+ htmlOptions={{ title }}
461
+ value={TEST_DATE}
462
+ />
463
+ )
464
+
465
+ const kit = screen.getByTestId(testId)
466
+ expect(kit).toHaveAttribute('title', title)
467
+ })
468
+ })
469
+
470
+ // Componenet Integration
471
+ describe('Component Integration', () => {
472
+ test('calls DateTime utility functions correctly', () => {
473
+ render(
474
+ <PbDate value={TEST_DATE} />
475
+ )
476
+
477
+ expect(DateTime.toWeekday).toHaveBeenCalledWith(TEST_DATE)
478
+ expect(DateTime.toMonth).toHaveBeenCalledWith(TEST_DATE)
479
+ expect(DateTime.toDay).toHaveBeenCalledWith(TEST_DATE)
480
+ expect(DateTime.toYear).toHaveBeenCalledWith(TEST_DATE)
481
+ })
482
+
483
+ test('renders all components together correctly', () => {
484
+ const testId = 'pb-date-full-featured'
485
+ render(
486
+ <PbDate
487
+ alignment="center"
488
+ data={{ testid: testId }}
489
+ showDayOfWeek
490
+ showIcon
491
+ size="lg"
492
+ value={TEST_DATE}
493
+ />
494
+ )
495
+
496
+ const kit = screen.getByTestId(testId)
497
+ expect(kit).toHaveClass('pb_date_kit_center')
498
+ expect(kit).toHaveTextContent('Monday')
499
+ expect(kit).toHaveTextContent('•')
500
+ expect(kit).toHaveTextContent('August 19')
501
+
502
+ const iconContainer = kit.querySelector('.pb_icon_kit_container')
503
+ expect(iconContainer).toBeInTheDocument()
504
+ })
505
+ })
506
+ })
@@ -2,7 +2,8 @@
2
2
  | Name | Type | Description | Default | Values |
3
3
  | --- | ----------- | --------- | --------- | --------- |
4
4
  | **text** | `String` |`Value for the toast message` | `nil` | |
5
- | **variant** | `Variant` | `Determines the type pf toast message being displayed` | `.custom()` | `error`, `success`,
6
- `neutral`, `custom()` |
5
+ | **font** | `PBFont` |`Value for the toast message font style` | `.title4` | |
6
+ | **animatedIcon** | `AnyView` |`Value for the option to use an animated icon` | `nil` | |
7
+ | **variant** | `Variant` | `Determines the type pf toast message being displayed` | `.custom()` | `error` `success` `neutral` `custom()` |
7
8
  | **actionView** | `dismissAction` | Dismisses the toast message | `.default` | `default` `custom()` `withTimer()` |
8
9
  | **dismissAction** | `(() -> Void)` | `Triggers the dismiss action` | | |
@@ -378,7 +378,7 @@ $colors: (
378
378
  // Collapse Settings for each position and breakpoint
379
379
  @each $position in $positions {
380
380
  @each $breakpoint_name, $breakpoint in $breakpoints {
381
- .pb_layout_kit_sidebar_#{$position}_collapse_#{$breakpoint_name} {
381
+ .layout_#{$position}_collapse_#{$breakpoint_name} {
382
382
  @include break_at($breakpoint) {
383
383
  @if $position == 'left' {
384
384
  grid-template-areas: "layout_collapsed_#{$breakpoint_name}_sidebar" "layout_collapsed_#{$breakpoint_name}_body";
@@ -1,11 +1,18 @@
1
1
  ### Props
2
2
  | Name | Type | Description | Default | Values |
3
3
  | --- | ----------- | --------- | --------- | --------- |
4
- | **name** | `String` | Sets the User's name | | |
4
+ | **name** | `String` | Sets the User's name | `""` | |
5
+ | **nameFont** | `Typography` | Font styling for the user's name | `.init(font: .title4, variant: .bold)` | |
6
+ | **image** | `Image?` | Sets image for the avatar | `nil` | |
7
+ | **orientation** | `Orientation` | Changes the orientation of the User | `.horizontal` | `.horizontal` `.vertical` |
8
+ | **size** | `Size` | Changes the size of the User | `.medium` | `.xxSmall` `.xSmall` `.small` `.medium` `.large` `.xLarge` |
9
+ | **territory** | `String?` | Adds the User's territory | `nil` | |
10
+ | **title** | `String?` | Adds a title | `nil` | |
11
+ | **subtitle** | `AnyView?` | Adds a subtitle view | `nil` | |
12
+ | **status** | `PBOnlineStatus.Status?` | An indicator for the current status of the user | `nil` | `.online` `.away` `.offline` |
5
13
  | **displayAvatar** | `Bool` | Displays the User's avatar | `true` | `true` `false` |
6
- | **image** | `Image` | Sets image for the avatar | | |
7
- | **orientation** | `Orientation` | Changes the orientation of the User | `.horizontal` | `.horizontal` `.verticle` |
8
- | **size** | `UserAvatarSize` | Changes the size of the User | `.medium` | `.small` `.medium` `.large` |
9
- | **territory** | `String` | Adds the User's territory | | |
10
- | **title** | `String` | Adds a title | | |
11
- | **status** | `PBAvatar.PresenceStatus?` | An idicator for the current status of the user | `.none` | `.online` `.away` `.offline` |
14
+ | **territoryTitleFont** | `PBFont` | Font for territory and title text | `.subcaption` | `.title1` `.body` `.caption` `.subcaption` `.badgeText` `.title4` |
15
+ | **isActive** | `Bool` | Sets whether the user is active | `true` | `true` `false` |
16
+ | **hasInactiveBadge** | `Bool` | Shows inactive badge when user is not active | `false` | `true` `false` |
17
+ | **spacing** | `CGFloat` | Controls spacing between elements | `Spacing.small` | `.none` `.xxSmall` `.xSmall` `.small` `.medium` `.large` `.xLarge` |
18
+