create-flowmo 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.
@@ -0,0 +1,1253 @@
1
+ # OutSystems UI Patterns Reference
2
+
3
+ Verified HTML structures scraped from the official [OutSystems UI Style Guide](https://outsystemsui.outsystems.com/StyleGuidePreview/Patterns).
4
+
5
+ Notation: `tag.class1.class2` for elements, `[Block.Name]` for OutSystems block wrappers (use `data-block` attribute or just omit in visual HTML). Indentation = nesting. Content after `:` = text content.
6
+
7
+ ---
8
+
9
+ ## Adaptive
10
+
11
+ ### Columns 2
12
+
13
+ ```html
14
+ <div class="columns columns2 gutter-base">
15
+ <div class="columns-item">Column 1</div>
16
+ <div class="columns-item">Column 2</div>
17
+ </div>
18
+ ```
19
+
20
+ ### Columns 3
21
+
22
+ ```html
23
+ <div class="columns columns3 gutter-base">
24
+ <div class="columns-item">Column 1</div>
25
+ <div class="columns-item">Column 2</div>
26
+ <div class="columns-item">Column 3</div>
27
+ </div>
28
+ ```
29
+
30
+ ### Columns 4
31
+
32
+ ```html
33
+ <div class="columns columns4 gutter-base">
34
+ <div class="columns-item">Column 1</div>
35
+ <div class="columns-item">Column 2</div>
36
+ <div class="columns-item">Column 3</div>
37
+ <div class="columns-item">Column 4</div>
38
+ </div>
39
+ ```
40
+
41
+ ### Columns 5
42
+
43
+ ```html
44
+ <div class="columns columns5 gutter-base">
45
+ <div class="columns-item">...</div>
46
+ <!-- 5 columns-item -->
47
+ </div>
48
+ ```
49
+
50
+ ### Columns 6
51
+
52
+ ```html
53
+ <div class="columns columns6 gutter-base">
54
+ <div class="columns-item">...</div>
55
+ <!-- 6 columns-item -->
56
+ </div>
57
+ ```
58
+
59
+ ### Columns Medium Left
60
+
61
+ ```html
62
+ <div class="columns columns-medium-left gutter-base">
63
+ <div class="columns-item">Wider left</div>
64
+ <div class="columns-item">Narrower right</div>
65
+ </div>
66
+ ```
67
+
68
+ ### Columns Medium Right
69
+
70
+ ```html
71
+ <div class="columns columns-medium-right gutter-base">
72
+ <div class="columns-item">Narrower left</div>
73
+ <div class="columns-item">Wider right</div>
74
+ </div>
75
+ ```
76
+
77
+ ### Columns Small Left
78
+
79
+ ```html
80
+ <div class="columns columns-small-left gutter-base">
81
+ <div class="columns-item">Small left</div>
82
+ <div class="columns-item">Large right</div>
83
+ </div>
84
+ ```
85
+
86
+ ### Columns Small Right
87
+
88
+ ```html
89
+ <div class="columns columns-small-right gutter-base">
90
+ <div class="columns-item">Large left</div>
91
+ <div class="columns-item">Small right</div>
92
+ </div>
93
+ ```
94
+
95
+ ### Display On Device
96
+
97
+ Show/hide content per breakpoint.
98
+
99
+ ```html
100
+ <div class="display-on-device-desktop">Desktop only content</div>
101
+ <div class="display-on-device-tablet">Tablet only content</div>
102
+ <div class="display-on-device-phone">Phone only content</div>
103
+ ```
104
+
105
+ ### Gallery
106
+
107
+ Grid gallery with auto-flowing items.
108
+
109
+ ```html
110
+ <div class="osui-gallery">
111
+ <div>Item 1</div>
112
+ <div>Item 2</div>
113
+ <div>Item 3</div>
114
+ <!-- ... -->
115
+ </div>
116
+ ```
117
+
118
+ ### Master Detail
119
+
120
+ Split-screen list + detail layout.
121
+
122
+ ```html
123
+ <div class="split-screen-wrapper is--full-height">
124
+ <div class="split-left">
125
+ <div class="list list-group">
126
+ <div class="list-item list-item-selected">
127
+ <!-- ListItemContent -->
128
+ </div>
129
+ <div class="list-item">
130
+ <!-- ListItemContent -->
131
+ </div>
132
+ </div>
133
+ </div>
134
+ <div class="split-right">
135
+ <div class="split-right-close">
136
+ <a><i class="icon fa fa-angle-left fa-2x"></i></a>
137
+ </div>
138
+ <div class="split-right-content">
139
+ <!-- Detail content -->
140
+ </div>
141
+ </div>
142
+ </div>
143
+ ```
144
+
145
+ ---
146
+
147
+ ## Content
148
+
149
+ ### Accordion
150
+
151
+ ```html
152
+ <div class="osui-accordion">
153
+ <div class="osui-accordion-item osui-accordion-item--is-open">
154
+ <div class="osui-accordion-item__title">Title</div>
155
+ <div class="osui-accordion-item__content osui-accordion-item__content--is-expanded">
156
+ Content
157
+ </div>
158
+ </div>
159
+ <div class="osui-accordion-item">
160
+ <div class="osui-accordion-item__title">Title 2</div>
161
+ <div class="osui-accordion-item__content">Content 2</div>
162
+ </div>
163
+ </div>
164
+ ```
165
+
166
+ ### Alert
167
+
168
+ ```html
169
+ <div class="alert alert-error" role="alert">
170
+ <div class="alert-icon">
171
+ <i class="icon fa fa-times-circle"></i>
172
+ </div>
173
+ <div class="alert-message">Something went wrong.</div>
174
+ </div>
175
+ ```
176
+
177
+ Variants: `alert-success`, `alert-warning`, `alert-info`, `alert-error`.
178
+
179
+ ### Blank Slate
180
+
181
+ Empty state placeholder.
182
+
183
+ ```html
184
+ <div class="blank-slate large">
185
+ <div class="blank-slate-icon">
186
+ <img src="placeholder.png">
187
+ </div>
188
+ <div class="blank-slate-description">No records have been added yet</div>
189
+ <div class="blank-slate-actions">
190
+ <!-- Optional action buttons -->
191
+ </div>
192
+ </div>
193
+ ```
194
+
195
+ ### Card
196
+
197
+ ```html
198
+ <div class="card card-content">
199
+ Content goes here
200
+ </div>
201
+ ```
202
+
203
+ ### Card Background
204
+
205
+ ```html
206
+ <div class="card-background" style="min-height: 350px;">
207
+ <div class="card-background-content">
208
+ <!-- Overlay content -->
209
+ </div>
210
+ <div class="card-background-image">
211
+ <img class="img-cover" src="image.jpg" alt="">
212
+ </div>
213
+ <div class="card-background-color background-primary"></div>
214
+ </div>
215
+ ```
216
+
217
+ ### Card Item
218
+
219
+ Horizontal card with left/center/right zones.
220
+
221
+ ```html
222
+ <div class="card card-detail">
223
+ <div class="card-detail-left">
224
+ <img src="avatar.jpg">
225
+ </div>
226
+ <div class="card-detail-center">
227
+ <div class="card-detail-title">Title</div>
228
+ <div class="card-detail-text text-grey">Subtitle</div>
229
+ </div>
230
+ <div class="card-detail-right">
231
+ <i class="icon fa fa-angle-right"></i>
232
+ </div>
233
+ </div>
234
+ ```
235
+
236
+ ### Card Sectioned
237
+
238
+ ```html
239
+ <div class="card card-sectioned flex-direction-column">
240
+ <div class="card-image">
241
+ <img src="image.jpg">
242
+ </div>
243
+ <div class="card-sectioned-top flex-direction-column">
244
+ <div class="card-title">Title</div>
245
+ <div class="card-content">Description</div>
246
+ <div class="card-bottom">
247
+ <!-- Footer actions -->
248
+ </div>
249
+ </div>
250
+ </div>
251
+ ```
252
+
253
+ ### Chat Message
254
+
255
+ ```html
256
+ <div class="chat left">
257
+ <div class="chat-photo">
258
+ <div class="avatar border-radius-rounded background-primary" role="img">
259
+ <span>SR</span>
260
+ </div>
261
+ </div>
262
+ <div class="chat-message-wrapper">
263
+ <div class="chat-message padding">
264
+ <span class="font-semi-bold">Scott Richie</span>
265
+ <div class="margin-top-s">Message text here</div>
266
+ </div>
267
+ </div>
268
+ </div>
269
+ ```
270
+
271
+ Use `chat right` for the other speaker. Add `.margin-top-m` for spacing between messages.
272
+
273
+ ### Flip Content
274
+
275
+ ```html
276
+ <div class="osui-flip-content">
277
+ <div class="osui-flip-content__container osui-flip-content--flip-self">
278
+ <div class="osui-flip-content__container__front">
279
+ <!-- Front content -->
280
+ </div>
281
+ <!-- __back for reverse side -->
282
+ </div>
283
+ </div>
284
+ ```
285
+
286
+ ### Floating Content
287
+
288
+ Overlay content positioned over an image/container.
289
+
290
+ ```html
291
+ <div style="position: relative;">
292
+ <img class="img-cover" src="background.jpg">
293
+ <div class="floating-content floating-content-bottom floating-content-margin">
294
+ <!-- Floating content here -->
295
+ </div>
296
+ </div>
297
+ ```
298
+
299
+ Positions: `floating-content-top`, `floating-content-bottom`.
300
+
301
+ ### List Item Content
302
+
303
+ ```html
304
+ <div class="list-item-content">
305
+ <div class="list-item-content-left text-primary-color">
306
+ <img src="avatar.jpg">
307
+ </div>
308
+ <div class="list-item-content-center">
309
+ <div class="list-item-content-title">Title</div>
310
+ <div class="list-item-content-text">Subtitle</div>
311
+ </div>
312
+ <div class="list-item-content-right">
313
+ <i class="icon fa fa-angle-right fa-2x"></i>
314
+ </div>
315
+ </div>
316
+ ```
317
+
318
+ ### Section
319
+
320
+ ```html
321
+ <div class="section" role="region">
322
+ <div class="section-title dividers">Section Title</div>
323
+ <div class="section-content">Content here</div>
324
+ </div>
325
+ ```
326
+
327
+ ### Section Group
328
+
329
+ Groups multiple sections with sticky scrolling.
330
+
331
+ ```html
332
+ <div class="section-group is--sticky">
333
+ <div class="sticky">
334
+ <div class="section">
335
+ <div class="section-title dividers">Summary</div>
336
+ <div class="section-content">...</div>
337
+ </div>
338
+ <div class="section margin-top-base">
339
+ <div class="section-title dividers">Details</div>
340
+ <div class="section-content">...</div>
341
+ </div>
342
+ </div>
343
+ </div>
344
+ ```
345
+
346
+ ### Tag
347
+
348
+ ```html
349
+ <div class="tag border-radius- background-primary">Label</div>
350
+ ```
351
+
352
+ Variants: `background-primary`, `background-red`, `background-teal`, `background-green`. Shape: `border-radius-rounded` for pill shape.
353
+
354
+ ### Tooltip
355
+
356
+ ```html
357
+ <div class="osui-tooltip osui-tooltip--is-hover">
358
+ <div class="osui-tooltip__content" role="button" tabindex="0">
359
+ Hover me
360
+ </div>
361
+ <div class="osui-tooltip__balloon-wrapper osui-balloon" role="tooltip" aria-hidden="true">
362
+ <div class="osui-tooltip__balloon-wrapper__balloon">Tooltip text</div>
363
+ <div class="osui-tooltip__balloon-arrow"></div>
364
+ </div>
365
+ </div>
366
+ ```
367
+
368
+ ### User Avatar
369
+
370
+ ```html
371
+ <div class="avatar border-radius- background-primary" role="img" aria-label="user initials, JD">
372
+ <span>JD</span>
373
+ </div>
374
+ ```
375
+
376
+ Shape: `border-radius-rounded` for circle.
377
+
378
+ ---
379
+
380
+ ## Interaction
381
+
382
+ ### Action Sheet
383
+
384
+ Bottom sheet with action buttons (mobile pattern).
385
+
386
+ ```html
387
+ <div class="action-sheet-container">
388
+ <div class="action-sheet-background"></div>
389
+ <div class="action-sheet">
390
+ <div class="action-sheet-buttons">
391
+ <div class="action-sheet-actions">
392
+ <button class="btn text-primary">Flag</button>
393
+ </div>
394
+ <div class="action-sheet-actions">
395
+ <button class="btn text-primary">Mark as Unread</button>
396
+ </div>
397
+ <div class="action-sheet-actions">
398
+ <button class="btn text-red"><span class="text-red">Delete</span></button>
399
+ </div>
400
+ </div>
401
+ <div class="action-sheet-cancel">
402
+ <button class="btn background-white">Cancel</button>
403
+ </div>
404
+ </div>
405
+ </div>
406
+ ```
407
+
408
+ ### Animate
409
+
410
+ Entrance animations.
411
+
412
+ ```html
413
+ <div class="animate bottom-to-top">
414
+ Content that animates in
415
+ </div>
416
+ ```
417
+
418
+ Variants: `bottom-to-top`, `top-to-bottom`, `left-to-right`, `right-to-left`, `fade-in`, `scale-up`.
419
+
420
+ ### Animated Label
421
+
422
+ Label that floats up when input is focused.
423
+
424
+ ```html
425
+ <div class="animated-label">
426
+ <div class="animated-label-text">
427
+ <label>First Name</label>
428
+ </div>
429
+ <div class="animated-label-input">
430
+ <span class="input-text">
431
+ <input class="form-control">
432
+ </span>
433
+ </div>
434
+ </div>
435
+ ```
436
+
437
+ ### Carousel
438
+
439
+ Image carousel (uses Splide library).
440
+
441
+ ```html
442
+ <div class="osui-carousel splide">
443
+ <div class="osui-carousel__track splide__track">
444
+ <div class="osui-carousel__content splide__list">
445
+ <img class="splide__slide is-active is-visible" src="slide1.jpg">
446
+ <img class="splide__slide" src="slide2.jpg">
447
+ <img class="splide__slide" src="slide3.jpg">
448
+ </div>
449
+ </div>
450
+ <ul class="splide__pagination">
451
+ <li><button class="splide__pagination__page is-active"></button></li>
452
+ <li><button class="splide__pagination__page"></button></li>
453
+ </ul>
454
+ </div>
455
+ ```
456
+
457
+ ### Date Picker
458
+
459
+ ```html
460
+ <div class="osui-datepicker">
461
+ <span class="input-text">
462
+ <input class="form-control flatpickr-input" type="text">
463
+ </span>
464
+ </div>
465
+ ```
466
+
467
+ ### Dropdown Search
468
+
469
+ Searchable dropdown (uses VirtualSelect library).
470
+
471
+ ```html
472
+ <div class="osui-dropdown-search">
473
+ <div class="vscomp-wrapper has-clear-button has-search-input">
474
+ <input class="vscomp-hidden-input">
475
+ <div class="vscomp-toggle-button">
476
+ <div class="vscomp-value">Select...</div>
477
+ <div class="vscomp-arrow"></div>
478
+ <div class="vscomp-clear-button toggle-button-child">
479
+ <i class="vscomp-clear-icon"></i>
480
+ </div>
481
+ </div>
482
+ </div>
483
+ </div>
484
+ ```
485
+
486
+ ### Dropdown Tags
487
+
488
+ Multi-select with tag chips.
489
+
490
+ ```html
491
+ <div class="osui-dropdown-tags">
492
+ <div class="vscomp-wrapper multiple has-select-all has-clear-button has-search-input show-value-as-tags">
493
+ <input class="vscomp-hidden-input">
494
+ <div class="vscomp-toggle-button">
495
+ <div class="vscomp-value">Select...</div>
496
+ <div class="vscomp-arrow"></div>
497
+ <div class="vscomp-clear-button toggle-button-child">
498
+ <i class="vscomp-clear-icon"></i>
499
+ </div>
500
+ </div>
501
+ </div>
502
+ </div>
503
+ ```
504
+
505
+ ### Floating Actions
506
+
507
+ FAB (Floating Action Button) with expandable items.
508
+
509
+ ```html
510
+ <div class="floating-actions-wrapper is--open">
511
+ <div class="floating-items">
512
+ <div class="floating-actions-item">
513
+ <div class="floating-actions-item-label">Member</div>
514
+ <div class="floating-actions-item-button">
515
+ <i class="icon fa fa-user"></i>
516
+ </div>
517
+ </div>
518
+ <div class="floating-actions-item">
519
+ <div class="floating-actions-item-label">Note</div>
520
+ <div class="floating-actions-item-button">
521
+ <i class="icon fa fa-file"></i>
522
+ </div>
523
+ </div>
524
+ </div>
525
+ <div class="floating-button">
526
+ <i class="icon fa fa-plus"></i>
527
+ </div>
528
+ </div>
529
+ ```
530
+
531
+ ### Input With Icon
532
+
533
+ ```html
534
+ <div class="input-with-icon input-with-icon-right">
535
+ <div class="input-with-icon-content-icon center">
536
+ <i class="icon fa fa-user"></i>
537
+ </div>
538
+ <div class="input-with-icon-input">
539
+ <span class="input-text">
540
+ <input class="form-control" type="text">
541
+ </span>
542
+ </div>
543
+ </div>
544
+ ```
545
+
546
+ Icon position: `input-with-icon-right` (icon left, default) or `input-with-icon-left`.
547
+
548
+ ### Lightbox Image
549
+
550
+ Clickable thumbnail that opens full-size overlay.
551
+
552
+ ```html
553
+ <div class="lightbox-item">
554
+ <figure>
555
+ <a>
556
+ <div class="lightbox-content-thumbnail">
557
+ <img src="thumb.jpg">
558
+ </div>
559
+ </a>
560
+ <figcaption><span>Caption</span></figcaption>
561
+ </figure>
562
+ </div>
563
+ ```
564
+
565
+ ### Notification
566
+
567
+ Toast notification banner.
568
+
569
+ ```html
570
+ <div class="osui-notification osui-notification--is-top">
571
+ <div class="margin-right-base">
572
+ <i class="icon text-white fa fa-comments-o fa-2x"></i>
573
+ </div>
574
+ <div>
575
+ <span class="text-white">You have a new message</span>
576
+ </div>
577
+ </div>
578
+ ```
579
+
580
+ Position: `osui-notification--is-top`, `osui-notification--is-bottom`.
581
+
582
+ ### Range Slider
583
+
584
+ ```html
585
+ <div class="osui-range-slider osui-range-slider--has-ticks">
586
+ <div class="osui-range-slider__provider noUi-target noUi-horizontal">
587
+ <div class="noUi-base">
588
+ <div class="noUi-connects"><div class="noUi-connect"></div></div>
589
+ <div class="noUi-origin">
590
+ <div class="noUi-handle noUi-handle-lower">
591
+ <div class="noUi-touch-area"></div>
592
+ </div>
593
+ </div>
594
+ </div>
595
+ </div>
596
+ </div>
597
+ ```
598
+
599
+ ### Range Slider Interval
600
+
601
+ Same as Range Slider but with two handles:
602
+
603
+ ```html
604
+ <div class="osui-range-slider osui-range-slider--is-interval osui-range-slider--has-ticks">
605
+ <!-- Same structure but with noUi-handle-lower AND noUi-handle-upper -->
606
+ </div>
607
+ ```
608
+
609
+ ### Scrollable Area
610
+
611
+ Horizontal or vertical scrollable content.
612
+
613
+ ```html
614
+ <div class="scrollable-area-content horizontal-scroll">
615
+ <img src="img1.jpg">
616
+ <img src="img2.jpg">
617
+ <img src="img3.jpg">
618
+ </div>
619
+ ```
620
+
621
+ ### Search
622
+
623
+ ```html
624
+ <div class="osui-search">
625
+ <div class="osui-search__input">
626
+ <span class="input-text">
627
+ <input class="form-control" type="search">
628
+ </span>
629
+ </div>
630
+ </div>
631
+ ```
632
+
633
+ ### Sidebar
634
+
635
+ Slide-in panel overlay.
636
+
637
+ ```html
638
+ <aside class="osui-sidebar osui-sidebar--is-right">
639
+ <div class="osui-sidebar__header">
640
+ <a><i class="icon fa fa-remove"></i></a>
641
+ </div>
642
+ <div class="osui-sidebar__content">
643
+ <!-- Sidebar content -->
644
+ </div>
645
+ </aside>
646
+ ```
647
+
648
+ Direction: `osui-sidebar--is-right`, `osui-sidebar--is-left`.
649
+
650
+ ### Stacked Cards
651
+
652
+ Swipeable card stack.
653
+
654
+ ```html
655
+ <div class="stackedcards stackedcards--animatable">
656
+ <div class="stackedcards-container">
657
+ <div class="list list-group">
658
+ <div class="card stackedcards-active stackedcards-bottom">
659
+ <span class="heading5">Card Title</span>
660
+ <div class="margin-top-m"><span>Card description...</span></div>
661
+ <div class="margin-top-m">
662
+ <div class="tag border-radius-rounded background-red">Urgent</div>
663
+ </div>
664
+ </div>
665
+ <!-- More cards... -->
666
+ </div>
667
+ </div>
668
+ </div>
669
+ ```
670
+
671
+ ### Video
672
+
673
+ ```html
674
+ <video class="osui-video">
675
+ <source class="osui-video-source" src="video.mp4">
676
+ </video>
677
+ ```
678
+
679
+ ---
680
+
681
+ ## Navigation
682
+
683
+ ### Bottom Bar Item
684
+
685
+ Mobile bottom navigation.
686
+
687
+ ```html
688
+ <div class="bottom-bar-wrapper">
689
+ <div class="bottom-bar">
690
+ <a class="active">
691
+ <div class="bottom-bar-item">
692
+ <div class="bottom-bar-item-icon">
693
+ <i class="icon fa fa-clock-o"></i>
694
+ </div>
695
+ <div class="bottom-bar-item-text">Recents</div>
696
+ </div>
697
+ </a>
698
+ <a>
699
+ <div class="bottom-bar-item">
700
+ <div class="bottom-bar-item-icon">
701
+ <i class="icon fa fa-file-text-o"></i>
702
+ </div>
703
+ <div class="bottom-bar-item-text">Files</div>
704
+ </div>
705
+ </a>
706
+ </div>
707
+ </div>
708
+ ```
709
+
710
+ ### Breadcrumbs
711
+
712
+ ```html
713
+ <nav class="breadcrumbs">
714
+ <div class="breadcrumbs-content">
715
+ <div class="breadcrumbs-item">
716
+ <div class="title"><a>Dashboard</a></div>
717
+ <div><i class="icon fa fa-angle-right"></i></div>
718
+ </div>
719
+ <div class="breadcrumbs-item">
720
+ <div class="title"><a>List</a></div>
721
+ <div><i class="icon fa fa-angle-right"></i></div>
722
+ </div>
723
+ <div class="breadcrumbs-item">
724
+ <div class="title">Detail</div>
725
+ <div></div>
726
+ </div>
727
+ </div>
728
+ </nav>
729
+ ```
730
+
731
+ ### Overflow Menu
732
+
733
+ Contextual dropdown menu triggered by ellipsis button.
734
+
735
+ ```html
736
+ <div class="osui-overflow-menu">
737
+ <div class="osui-overflow-menu__balloon osui-balloon">
738
+ <nav class="display-flex flex-direction-column">
739
+ <span class="text-uppercase text-neutral-7 font-semi-bold padding-x-base padding-top-base font-size-xs margin-bottom-s">Title</span>
740
+ <a><i class="icon fa fa-eye"></i><span class="margin-left-s">Item 1</span></a>
741
+ <a><i class="icon fa fa-file-text-o"></i><span class="margin-left-s">Item 2</span></a>
742
+ <a><i class="icon fa fa-pencil"></i><span class="margin-left-s">Item 3</span></a>
743
+ <div class="separator separator-horizontal background-neutral-4"></div>
744
+ <a><i class="icon fa fa-user"></i><span class="margin-left-s">Item 4</span></a>
745
+ </nav>
746
+ </div>
747
+ <button class="btn btn-small osui-overflow-menu__trigger">
748
+ <div><i class="icon fa fa-ellipsis-v"></i></div>
749
+ </button>
750
+ </div>
751
+ ```
752
+
753
+ ### Pagination
754
+
755
+ ```html
756
+ <div class="pagination">
757
+ <div class="pagination-counter">
758
+ <span>1</span><span> to </span><span>3</span><span> of </span><span>55</span><span> items</span>
759
+ </div>
760
+ <nav class="pagination-container" aria-label="Pagination">
761
+ <button class="pagination-button" disabled aria-label="go to previous page">
762
+ <div class="pagination-previous"><i class="icon fa fa-angle-left"></i></div>
763
+ </button>
764
+ <div class="display-flex">
765
+ <button class="pagination-button is--active" aria-current="true"><span>1</span></button>
766
+ <div class="list list-group">
767
+ <button class="pagination-button"><span>2</span></button>
768
+ <button class="pagination-button"><span>3</span></button>
769
+ </div>
770
+ <div class="pagination-button is--ellipsis">...</div>
771
+ <button class="pagination-button"><span>19</span></button>
772
+ </div>
773
+ <button class="pagination-button" aria-label="go to next page">
774
+ <div class="pagination-next"><i class="icon fa fa-angle-right"></i></div>
775
+ </button>
776
+ </nav>
777
+ </div>
778
+ ```
779
+
780
+ ### Section Index
781
+
782
+ Anchor navigation for page sections.
783
+
784
+ ```html
785
+ <div class="section-index">
786
+ <a class="section-index-item is--active"><span>Personal Details</span></a>
787
+ <a class="section-index-item"><span>Job Details</span></a>
788
+ <a class="section-index-item"><span>Team Details</span></a>
789
+ </div>
790
+ ```
791
+
792
+ ### Submenu
793
+
794
+ ```html
795
+ <div class="osui-submenu osui-submenu--is-dropdown">
796
+ <div class="osui-submenu__header">
797
+ <div class="osui-submenu__header__item">
798
+ <i class="icon fa fa-folder-o"></i>
799
+ <span class="margin-left-s">Folders</span>
800
+ </div>
801
+ <div class="osui-submenu__header__icon"></div>
802
+ </div>
803
+ <div class="osui-submenu__items">
804
+ <a><i class="icon fa fa-envelope"></i><span class="margin-left-s">All mail</span></a>
805
+ <a><i class="icon fa fa-trash"></i><span class="margin-left-s">Trash</span></a>
806
+ </div>
807
+ </div>
808
+ ```
809
+
810
+ ### Tabs
811
+
812
+ ```html
813
+ <section class="osui-tabs osui-tabs--is-horizontal osui-tabs--is-left">
814
+ <header class="osui-tabs__header">
815
+ <div class="display-contents">
816
+ <button class="osui-tabs__header-item osui-tabs--is-active">
817
+ <div class="display-contents">Personal</div>
818
+ </button>
819
+ <button class="osui-tabs__header-item">
820
+ <div class="display-contents">Job</div>
821
+ </button>
822
+ <button class="osui-tabs__header-item">
823
+ <div class="display-contents">Salary</div>
824
+ </button>
825
+ </div>
826
+ <div class="osui-tabs__header__indicator"></div>
827
+ </header>
828
+ <section class="osui-tabs__content">
829
+ <div class="display-contents">
830
+ <article class="osui-tabs__content-item osui-tabs--is-active">
831
+ Tab 1 content
832
+ </article>
833
+ <article class="osui-tabs__content-item">
834
+ Tab 2 content
835
+ </article>
836
+ <article class="osui-tabs__content-item">
837
+ Tab 3 content
838
+ </article>
839
+ </div>
840
+ </section>
841
+ </section>
842
+ ```
843
+
844
+ ### Timeline Item
845
+
846
+ ```html
847
+ <div class="timeline-item">
848
+ <div class="timeline-left">2019</div>
849
+ <div class="timeline-icon">
850
+ <div class="timeline-icon-line"></div>
851
+ <div class="timeline-icon-container background-primary">
852
+ <i class="icon fa fa-archive"></i>
853
+ </div>
854
+ </div>
855
+ <div class="timeline-content">
856
+ <div>Pending Approval</div>
857
+ <div class="timeline-content-inner">This request requires your approval.</div>
858
+ </div>
859
+ <div class="timeline-right"></div>
860
+ </div>
861
+ ```
862
+
863
+ ### Wizard
864
+
865
+ ```html
866
+ <div class="wizard-wrapper display-flex flex-direction-row">
867
+ <div class="wizard-wrapper-item past label-bottom">
868
+ <div class="wizard-item-icon-wrapper">
869
+ <div class="wizard-item-icon">1</div>
870
+ </div>
871
+ <div class="wizard-item-label">Personal Details</div>
872
+ </div>
873
+ <div class="wizard-wrapper-item active label-bottom">
874
+ <div class="wizard-item-icon-wrapper">
875
+ <div class="wizard-item-icon">2</div>
876
+ </div>
877
+ <div class="wizard-item-label">Address Details</div>
878
+ </div>
879
+ <div class="wizard-wrapper-item next label-bottom">
880
+ <div class="wizard-item-icon-wrapper">
881
+ <div class="wizard-item-icon">3</div>
882
+ </div>
883
+ <div class="wizard-item-label">Review Account</div>
884
+ </div>
885
+ </div>
886
+ ```
887
+
888
+ States: `past` (completed), `active` (current), `next` (upcoming).
889
+
890
+ ---
891
+
892
+ ## Numbers
893
+
894
+ ### Badge
895
+
896
+ ```html
897
+ <div class="badge border-radius- background-primary">
898
+ <span>1</span>
899
+ </div>
900
+ ```
901
+
902
+ ### Counter
903
+
904
+ ```html
905
+ <div class="counter card background-primary text-neutral-0">
906
+ <div class="center-align flex-direction-row">
907
+ <div class="font-size-display text-neutral-0">26</div>
908
+ <div>Completed Requests</div>
909
+ <div><i class="icon fa fa-check fa-3x"></i></div>
910
+ </div>
911
+ </div>
912
+ ```
913
+
914
+ ### Icon Badge
915
+
916
+ Icon with notification badge.
917
+
918
+ ```html
919
+ <div class="icon-badge">
920
+ <div><i class="icon fa fa-comment-o fa-2x"></i></div>
921
+ <div class="badge border-radius-rounded background-primary">
922
+ <span>1</span>
923
+ </div>
924
+ </div>
925
+ ```
926
+
927
+ ### Progress Bar
928
+
929
+ ```html
930
+ <div class="osui-progress-bar">
931
+ <div class="osui-progress-bar__container animate-entrance">
932
+ <div class="osui-progress-bar__value"></div>
933
+ <div class="osui-progress-bar__content"><span></span></div>
934
+ </div>
935
+ </div>
936
+ ```
937
+
938
+ ### Progress Circle
939
+
940
+ ```html
941
+ <div class="osui-progress-circle">
942
+ <div class="osui-progress-circle__container">
943
+ <div class="osui-inline-svg svg-wrapper">
944
+ <svg>
945
+ <circle></circle>
946
+ <circle></circle>
947
+ </svg>
948
+ </div>
949
+ </div>
950
+ <div class="osui-progress-circle__content">
951
+ <span class="font-size-display">50</span>
952
+ </div>
953
+ </div>
954
+ ```
955
+
956
+ ### Rating
957
+
958
+ ```html
959
+ <div class="rating is-edit">
960
+ <fieldset>
961
+ <legend class="wcag-hide-text">Rating</legend>
962
+ <!-- For each star (1-5): -->
963
+ <input class="rating-input wcag-hide-text" type="radio">
964
+ <label class="rating-item">
965
+ <span class="wcag-hide-text">Rating 1</span>
966
+ <div class="rating-item-filled"><i class="icon text-primary fa fa-star"></i></div>
967
+ <div class="rating-item-half"><i class="icon text-primary fa fa-star-half"></i></div>
968
+ <div class="rating-item-empty"><i class="icon text-neutral-5 fa fa-star"></i></div>
969
+ </label>
970
+ <!-- Repeat for each star -->
971
+ </fieldset>
972
+ </div>
973
+ ```
974
+
975
+ ---
976
+
977
+ ## Utilities
978
+
979
+ ### Align Center
980
+
981
+ Vertically aligns children.
982
+
983
+ ```html
984
+ <div class="vertical-align flex-direction-row">
985
+ <div class="avatar avatar-medium border-radius-rounded background-primary">
986
+ <span>SR</span>
987
+ </div>
988
+ <div class="margin-left-base">Scott Ritchie</div>
989
+ </div>
990
+ ```
991
+
992
+ ### Button Loading
993
+
994
+ ```html
995
+ <div class="osui-btn-loading osui-btn-loading--is-loading osui-btn-loading-show-spinner">
996
+ <button class="btn btn-primary">
997
+ <div class="osui-btn-loading__spinner-animation"></div>
998
+ </button>
999
+ </div>
1000
+ ```
1001
+
1002
+ ### Center Content
1003
+
1004
+ Vertically centers content with optional header/footer.
1005
+
1006
+ ```html
1007
+ <div class="center-content">
1008
+ <div class="center-content-header"></div>
1009
+ <div class="center-content-container">
1010
+ <!-- Main centered content -->
1011
+ </div>
1012
+ <div class="center-content-bottom"></div>
1013
+ </div>
1014
+ ```
1015
+
1016
+ ### Inline SVG
1017
+
1018
+ ```html
1019
+ <div class="osui-inline-svg svg-wrapper">
1020
+ <svg><!-- SVG content --></svg>
1021
+ </div>
1022
+ ```
1023
+
1024
+ ### Margin Container
1025
+
1026
+ Adds horizontal margins to constrain content width.
1027
+
1028
+ ```html
1029
+ <div class="margin-container">
1030
+ <!-- Content with horizontal margins -->
1031
+ </div>
1032
+ ```
1033
+
1034
+ ### Separator
1035
+
1036
+ ```html
1037
+ <div class="separator separator-horizontal background-neutral-4"></div>
1038
+ ```
1039
+
1040
+ Vertical: `separator-vertical`.
1041
+
1042
+ ---
1043
+
1044
+ ## Widgets
1045
+
1046
+ ### Button
1047
+
1048
+ ```html
1049
+ <button class="btn btn-primary">
1050
+ <span>Button</span>
1051
+ </button>
1052
+ ```
1053
+
1054
+ Variants: `btn-primary`, `btn-secondary`, `btn-success`, `btn-error`. Add icon: `<i class="icon fa fa-check"></i>` before text.
1055
+
1056
+ ### Button Group
1057
+
1058
+ ```html
1059
+ <div class="button-group">
1060
+ <button class="button-group-item button-group-selected-item">All</button>
1061
+ <button class="button-group-item">Active</button>
1062
+ <button class="button-group-item">Disabled</button>
1063
+ </div>
1064
+ ```
1065
+
1066
+ ### Checkbox
1067
+
1068
+ ```html
1069
+ <span>
1070
+ <input type="checkbox" class="checkbox">
1071
+ </span>
1072
+ ```
1073
+
1074
+ ### Dropdown
1075
+
1076
+ ```html
1077
+ <div class="dropdown-container dropdown">
1078
+ <div class="dropdown-display">
1079
+ <div class="dropdown-display-content">
1080
+ <span>Selected value</span>
1081
+ </div>
1082
+ </div>
1083
+ </div>
1084
+ ```
1085
+
1086
+ ### Feedback Message
1087
+
1088
+ Triggered by button clicks, styled as toast notifications.
1089
+
1090
+ ```html
1091
+ <button class="btn btn-success">
1092
+ <i class="icon fa fa-check"></i>
1093
+ <span class="margin-left-s">Success</span>
1094
+ </button>
1095
+ <button class="btn btn-error ThemeGrid_MarginGutter">
1096
+ <i class="icon fa fa-remove"></i>
1097
+ <span class="margin-left-s">Error</span>
1098
+ </button>
1099
+ ```
1100
+
1101
+ ### Form
1102
+
1103
+ ```html
1104
+ <form class="form card">
1105
+ <div class="columns columns2 gutter-base">
1106
+ <div class="columns-item">
1107
+ <label class="mandatory" for="firstName">First Name</label>
1108
+ <span class="input-text">
1109
+ <input class="form-control" type="text" required id="firstName">
1110
+ </span>
1111
+ </div>
1112
+ <div class="columns-item">
1113
+ <label for="lastName">Last Name</label>
1114
+ <span class="input-text">
1115
+ <input class="form-control" type="text" id="lastName">
1116
+ </span>
1117
+ </div>
1118
+ </div>
1119
+ <div>
1120
+ <label for="email">Email</label>
1121
+ <span class="input-email">
1122
+ <input class="form-control" type="email" id="email">
1123
+ </span>
1124
+ </div>
1125
+ <div>
1126
+ <button class="btn btn-primary" type="submit">Save</button>
1127
+ </div>
1128
+ </form>
1129
+ ```
1130
+
1131
+ ### Input
1132
+
1133
+ ```html
1134
+ <span class="input-text">
1135
+ <input class="form-control" type="text">
1136
+ </span>
1137
+ ```
1138
+
1139
+ Input type wrappers: `input-text`, `input-email`, `input-password`, `input-search`.
1140
+
1141
+ ### Link
1142
+
1143
+ ```html
1144
+ <a class="heading6 text-primary">Link text</a>
1145
+ ```
1146
+
1147
+ ### List
1148
+
1149
+ ```html
1150
+ <div class="list list-group">
1151
+ <div class="list-item">
1152
+ <!-- ListItemContent or custom content -->
1153
+ </div>
1154
+ <div class="list-item">
1155
+ <!-- ... -->
1156
+ </div>
1157
+ </div>
1158
+ ```
1159
+
1160
+ ### Popover
1161
+
1162
+ Contextual overlay triggered by user action.
1163
+
1164
+ ```html
1165
+ <div class="popover popover-top">
1166
+ <!-- Popover content -->
1167
+ </div>
1168
+ ```
1169
+
1170
+ ### Popup
1171
+
1172
+ Modal dialog.
1173
+
1174
+ ```html
1175
+ <button class="btn" onclick="showPopup()">Show Popup</button>
1176
+ <!-- Popup content rendered dynamically -->
1177
+ ```
1178
+
1179
+ ### Radio Group
1180
+
1181
+ ```html
1182
+ <div class="radio-group">
1183
+ <div>
1184
+ <input type="radio" class="radio-button" name="group1">
1185
+ <label>Option A</label>
1186
+ </div>
1187
+ <div>
1188
+ <input type="radio" class="radio-button" name="group1">
1189
+ <label>Option B</label>
1190
+ </div>
1191
+ </div>
1192
+ ```
1193
+
1194
+ ### Switch
1195
+
1196
+ ```html
1197
+ <span>
1198
+ <input type="checkbox" class="switch">
1199
+ </span>
1200
+ ```
1201
+
1202
+ ### Table
1203
+
1204
+ ```html
1205
+ <table class="table">
1206
+ <thead>
1207
+ <tr class="table-header">
1208
+ <th class="sortable">
1209
+ <div>Name</div>
1210
+ <div class="sortable-icon"></div>
1211
+ </th>
1212
+ <th class="sortable">
1213
+ <div>Job Position</div>
1214
+ <div class="sortable-icon"></div>
1215
+ </th>
1216
+ </tr>
1217
+ </thead>
1218
+ <tbody>
1219
+ <tr class="table-row">
1220
+ <td><span>Patricia Wesley</span></td>
1221
+ <td><span>Sales Manager</span></td>
1222
+ </tr>
1223
+ </tbody>
1224
+ </table>
1225
+ ```
1226
+
1227
+ ### TextArea
1228
+
1229
+ ```html
1230
+ <span>
1231
+ <textarea class="form-control"></textarea>
1232
+ </span>
1233
+ ```
1234
+
1235
+ ### Upload
1236
+
1237
+ ```html
1238
+ <span class="upload-file">
1239
+ <label class="upload">
1240
+ <input type="file">
1241
+ <i class="icon fa fa-paperclip"></i>
1242
+ <span class="ThemeGrid_MarginGutter">Select file</span>
1243
+ </label>
1244
+ </span>
1245
+ ```
1246
+
1247
+ ---
1248
+
1249
+ ## Advanced
1250
+
1251
+ ### DropdownServerSide
1252
+
1253
+ Server-side rendered dropdown — no preview available (requires server interaction).