Invision UI v.19.6.0-0

Getting Started

  • Running Invision UI
  • UI Component Anatomy
  • Authoring SCSS
  • Authoring Presentational Behavior

Component Foundations

  • SCSS Authoring
    • Mixins & Variables
    • Stateful Classes
  • State Guidance
    • Empty/Zero State
    • Loading State
  • Utilities
    • Align
    • Display
    • Flexbox
    • Font Size
    • Layout
    • Offset
    • Position
    • Overflow
    • Size
    • Spacing
    • Text
  • Layout
    • Arrange [Deprectated]
    • Divided Columns
    • Embed Video
    • Full and Center
    • Fill [Deprectated]
    • Grid
    • Media Blocks
    • Panels
    • Vertical Layouts
  • Media Queries
  • Angular Behaviors
    • App Theme Directive
    • Auto Focus Input
    • Filters
    • Popup (modal dialog) Manager
    • Tether (tooltip/dropdown) Manager
    • Resize Sensor
    • Watchers

UI Component Library

  • Content & Containment
    • Active Translation
    • Auto Fit Text
    • Address
    • Basic & Input Table
    • Brand Logo/Slogan
    • Call to Action - Empty State
    • Carousel
    • Cart
    • Choice
    • Collapsible Container
    • Copyright Footer
    • Coupon Redeemer
    • Content
    • Date Relative Display
    • Definition Lists
    • Delimited List
    • Details
    • Expiration Date Display
    • Feature Toggle
    • Form Section Heading
    • Header
    • Heading
    • Heading With Annotation
    • Icons
    • Interaction Details
    • Labeled Balance
    • Link
    • Main Container
    • Metadata Card
    • Metadata List Item
    • Offering QuickView
    • Payment Instrument
    • Preference Dialog
    • Pricing Plan Decoration
    • Product Availability
    • Product Details
    • Product Image
    • Quick Info Panel
    • Remark
    • Renewal Column
    • Richlist Filterbar
    • Richlist Wrapper
    • Scrollable Horizontal List
    • Search Card
    • Search Panel
    • Section
    • Selectable Option
    • Smart Truncate
    • Status Grid
    • Tooltip
  • Data Visualizations
    • Bill Runs
    • Comparison Table
    • Datatable
    • Progress Tracker
    • Schedules
    • Query Builder
  • Dialogs
    • Confirmation Dialog
    • Dialog
    • Rich List Dialog
    • Wait Dialog
  • Forms and Filters
    • Additional Properties
    • Autocomplete
    • 3 Field Date Input
    • Checkbox
    • Credit Card
    • Bulk Action Bar
    • Buttons
    • Confirmation Button
    • Date Picker
    • E-Check
    • Entity Specification
    • External Bill
    • External Gift Card
    • Focus Group
    • Forms
    • Filter Bar
    • Filter Dropdowns
    • Gift Card
    • Grouped Check Filters
    • Inputs
    • Input Select Combo
    • Monetary Input
    • Multi Dropdown Selector
    • Multiple Numeric Input
    • Monetary Range Input
    • Password Unmask Button
    • Select
    • Select Button Or Stepper
    • Select Or Text Input
    • Stepper
    • Tag Dropdown
  • Navigation & Flow
    • Back Banner
    • Back Component
    • Breadcrumbs
    • Details Pager
    • Expandable Section
    • Infinite Scroll
    • Open New Window
    • Pager
    • Fancy Richlist
    • Standard Navigator
    • Status Indicator
    • Step Progress Bar
    • Step Progress Indicator
    • Tab Card
    • Tab Panel
    • Tier Navigator
    • Wizard
  • Notifications
    • Loading Indicator
    • Toast Notifications
  • Deprecated
    • Content Area

Showcase

  • General
    • Simplelist
    • Richlist
    • Primary (side) Navigator
  • Customer Care
    • Case Activity List
    • Customer Care Navigator Component
    • Dashboard
    • Decisions
  • Reporting
    • Content Visualization

Unit Testing

  • Actions
  • Components
  • Selectors
  • Reducers

End-to-end Testing

Statistics

Filter Bar

In this section

Variants
  • Default
  • Overflow
  • Expandable
  • Expandable with One Expansion
  • Read only filter

Default

The filter bar is used to render a series of filter options, typically in conjunction with some type of datatable. Note that changes to the filter will be logged to the console in this example, they will not actually change the filter's value.

HTML
<div class="t-content c-content" ng-controller="filterBarExampleController as $ctrl">
    <div class="c-filterBar">
        <div class="c-filterBar-filters">
            <div class="c-filterBar-filter">
                <inv-single-select class="c-filterButton is-removable" name="countryName"
                    options="$ctrl.countryOptions"
                    is-removable="$ctrl.isRemovable"
                    on-selected-option="$ctrl.handleSingleSelect"
                    on-remove="$ctrl.handleSingleSelectRemove">
                </inv-single-select>
            </div>
            <div class="c-filterBar-filter">
                <inv-single-select class="c-filterButton is-removable" name="paymentTypeName"
                    options="$ctrl.paymentTypeOptions"
                    is-removable="$ctrl.isRemovable"
                    on-selected-option="$ctrl.handleSingleSelect"
                    on-remove="$ctrl.handleSingleSelectRemove">
                </inv-single-select>
            </div>
            <div class="c-filterBar-filter">
                <inv-single-select class="c-filterButton is-removable" name="deviceTypeName"
                    options="$ctrl.deviceTypeOptions"
                    is-removable="$ctrl.isRemovable"
                    on-selected-option="$ctrl.handleSingleSelect"
                    on-remove="$ctrl.handleSingleSelectRemove">
                </inv-single-select>
            </div>
        </div>
    </div>
</div>

Overflow

The filter bar will overflow any buttons that do not fit into its defined width onto a second line.

HTML
<div class="t-content c-content" ng-controller="filterBarExampleController as $ctrl" style="max-width: 600px;">
    <div class="c-filterBar">
        <div class="c-filterBar-filters">
            <div class="c-filterBar-filter">
                <inv-single-select class="c-filterButton" name="countryName"
                    options="$ctrl.countryOptions"
                    is-removable="$ctrl.isRemovable"
                    on-selected-option="$ctrl.handleSingleSelect"
                    on-remove="$ctrl.handleSingleSelectRemove">
                </inv-single-select>
            </div>
            <div class="c-filterBar-filter">
                <inv-single-select class="c-filterButton" name="paymentTypeName"
                    options="$ctrl.paymentTypeOptions"
                    is-removable="$ctrl.isRemovable"
                    on-selected-option="$ctrl.handleSingleSelect"
                    on-remove="$ctrl.handleSingleSelectRemove">
                </inv-single-select>
            </div>
            <div class="c-filterBar-filter">
                <inv-single-select class="c-filterButton" name="deviceTypeName"
                    options="$ctrl.deviceTypeOptions"
                    is-removable="$ctrl.isRemovable"
                    on-selected-option="$ctrl.handleSingleSelect"
                    on-remove="$ctrl.handleSingleSelectRemove">
                </inv-single-select>
            </div>
        </div>
    </div>
</div>

Expandable

Expandable filter bar that can be shown and hidden based on user interaction.

Search
12/27/2016 - 12/29/2016
Name
This is the content area that gets pushed down.
HTML
<div class="t-content c-content" ng-controller="filterBarExampleController as $ctrl">
    <div class="c-filterBar c-filterBar--expandable" ng-class="{'is-expanded': $ctrl.isSearchOpen || $ctrl.isDateFilterVisible}">
        <div class="c-filterBar-filters">
            <div class="c-filterBar-filter c-filterButton" ng-class="{'is-expanded' : $ctrl.isSearchOpen}" ng-click="$ctrl.isSearchOpen = !$ctrl.isSearchOpen">
                <inv-icon glyph="'search-large'" class="c-expandToggle-categoryIcon"></inv-icon>
                <span class="c-expandToggle-text">Search</span>
                <inv-icon glyph="$ctrl.isSearchOpen ? 'angle-double-up' : 'angle-double-down'" class="c-expandToggle-dropArrow"></inv-icon>
            </div>
            <div class="c-filterBar-filter c-filterButton" ng-class="{'is-expanded' : $ctrl.isDateFilterVisible}" ng-click="$ctrl.isDateFilterVisible = !$ctrl.isDateFilterVisible">
                <inv-icon glyph="'calendar'" class="c-expandToggle-categoryIcon"></inv-icon>
                <span class="c-expandToggle-text">12/27/2016 - 12/29/2016</span>
                <inv-icon glyph="$ctrl.isDateFilterVisible ? 'angle-double-up' : 'angle-double-down'" class="c-expandToggle-dropArrow"></inv-icon>
            </div>
        </div>
        <div class="c-filterBarContent" ng-class="{'is-expanded' : $ctrl.isDateFilterVisible}">
            <inv-datepicker-calendar></inv-datepicker-calendar>
        </div>
        <div class="c-filterBarContent" ng-class="{'is-expanded' : $ctrl.isSearchOpen}">
            <form class="c-filterBarForm">
                <div class="c-filterBarContent-main c-filterParts l-grid">
                    <fieldset class="c-filterPart c-fieldset l-grid-cell u-size1of3">
                        <div class="c-filterPart-title">Name</div>
                        <div class="c-filterPart-item is-required" ng-class="{'is-error': (formApi.FirstName.$touched || formApi.$submitted) && formApi.FirstName.$invalid}">
                            <label for="firstName">First Name</label>
                            <input id="firstName" type="text" placeholder="First Name" required name="FirstName" ng-model="FirstName">
                        </div>
                        <div class="c-filterPart-item is-required">
                            <label for="lastName">Last Name</label>
                            <input id="lastName" type="text" placeholder="Last Name" required name="LastName" ng-model="LastName">
                        </div>
                    </fieldset>
                    <fieldset class="c-filterPart c-fieldset l-grid-cell u-size1of3">
                        <div class="c-filterPart-item">
                            <label for="address2">Address Line 2</label>
                            <input id="address2" type="text" placeholder="Address Line 2">
                        </div>
                        <div class="c-filterPart-item">
                            <label for="address1">Address Line 1</label>
                            <input id="address1" type="text" placeholder="Address Line 1">
                        </div>
                    </fieldset>
                    <fieldset class="c-filterPart c-fieldset l-grid-cell u-size1of3">
                        <div class="c-filterPart-item c-filterPart-item--compact">
                            <label for="city">City</label>
                            <input id="city" type="text" placeholder="City">
                        </div>
                        <div class="c-filterPart-item c-filterPart-item--compact">
                            <label for="state">State/Region/Province</label>
                            <div class="c-select">
                                <select id="state" name="State">
                                    <option value="1">Nebraska</option>
                                    <option value="2">Iowa</option>
                                </select>
                            </div>
                        </div>
                        <div class="c-filterPart-item c-filterPart-item--compact is-required">
                            <label for="Postal">Postal Code</label>
                            <input id="Postal" type="text" placeholder="Zip" name="Postal" ng-model="Postal">
                        </div>
                    </fieldset>
                </div>
                <div class="c-filterBarContent-footer">
                    <div class="c-footer-buttonGroup">
                        <button type="submit" class="c-button c-button--primary">Done</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
    <div style="width: 100%; height: 100px;background-color: #4a4a4a; color: white">
        This is the content area that gets pushed down.
    </div>
</div>

Expandable with One Expansion

Expandable filter bar that can be shown and hidden based on user interaction (with only one expansion button).

Search
Name
This is the content area that gets pushed down.
HTML
<div class="t-content c-content" ng-controller="filterBarExampleController">
    <div class="c-filterBar c-filterBar--expandable" ng-class="{'is-expanded': $ctrl.isSearchOpen || $ctrl.isDateFilterVisible}">
        <div class="c-filterBar-filters">
            <div class="c-filterBar-filter c-filterButton" ng-class="{'is-expanded' : $ctrl.isSearchOpen}" ng-click="$ctrl.isSearchOpen = !$ctrl.isSearchOpen">
                <inv-icon glyph="'search-large'" class="c-expandToggle-categoryIcon"></inv-icon>
                <span class="c-expandToggle-text">Search</span>
                <inv-icon glyph="$ctrl.isSearchOpen ? 'angle-double-up' : 'angle-double-down'" class="c-expandToggle-dropArrow"></inv-icon>
            </div>
        </div>
        <div class="c-filterBarContent" ng-class="{'is-expanded' : $ctrl.isSearchOpen}">
            <form class="c-filterBarForm">
                <div class="c-filterBarContent-main c-filterParts l-grid">
                    <fieldset class="c-filterPart c-fieldset l-grid-cell u-size1of3">
                        <div class="c-filterPart-title">Name</div>
                        <div class="c-filterPart-item is-required" ng-class="{'is-error': (formApi.FirstName.$touched || formApi.$submitted) && formApi.FirstName.$invalid}">
                            <label for="firstName">First Name</label>
                            <input id="firstName" type="text" placeholder="First Name" required name="FirstName" ng-model="FirstName">
                        </div>
                        <div class="c-filterPart-item is-required">
                            <label for="lastName">Last Name</label>
                            <input id="lastName" type="text" placeholder="Last Name" required name="LastName" ng-model="LastName">
                        </div>
                    </fieldset>
                    <fieldset class="c-filterPart c-fieldset l-grid-cell u-size1of3">
                        <div class="c-filterPart-item">
                            <label for="address2">Address Line 2</label>
                            <input id="address2" type="text" placeholder="Address Line 2">
                        </div>
                        <div class="c-filterPart-item">
                            <label for="address1">Address Line 1</label>
                            <input id="address1" type="text" placeholder="Address Line 1">
                        </div>
                    </fieldset>
                    <fieldset class="c-filterPart c-fieldset l-grid-cell u-size1of3">
                        <div class="c-filterPart-item c-filterPart-item--compact">
                            <label for="city">City</label>
                            <input id="city" type="text" placeholder="City">
                        </div>
                        <div class="c-filterPart-item c-filterPart-item--compact">
                            <label for="state">State/Region/Province</label>
                            <div class="c-select">
                                <select id="state" name="State">
                                    <option value="1">Nebraska</option>
                                    <option value="2">Iowa</option>
                                </select>
                            </div>
                        </div>
                        <div class="c-filterPart-item c-filterPart-item--compact is-required">
                            <label for="Postal">Postal Code</label>
                            <input id="Postal" type="text" placeholder="Zip" name="Postal" ng-model="Postal">
                        </div>
                    </fieldset>
                </div>
                <div class="c-filterBarContent-footer">
                    <div class="c-footer-buttonGroup">
                        <button type="submit" class="c-button c-button--primary">Done</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
    <div style="width: 100%; height: 100px;background-color: #4a4a4a; color: white">
        This is the content area that gets pushed down.
    </div>
</div>

Read only filter

Filter bar with read only buttons

HTML
<div class="t-content c-content" ng-controller="filterBarExampleController as $ctrl" style="max-width: 600px;">
    <div class="c-filterBar">
        <div class="c-filterBar-filters">
            <div class="c-filterBar-filter">
                <read-only-filter class="c-filterButton"
                                  ng-if="$ctrl.displayFilter"
                                  filter-text="'Subscription'"
                                  is-removable="true"
                                  on-remove="$ctrl.removeFilter()">
                </read-only-filter>
            </div>
        </div>
    </div>
</div>