Document And Entity Information
Document And Entity Information - shares | 6 Months Ended | |
Jun. 30, 2019 | Jul. 25, 2019 | |
Document Information [Line Items] | ||
Entity Central Index Key | 0001443669 | |
Entity Shell Company | false | |
Entity Registrant Name | Proto Labs Inc | |
Amendment Flag | false | |
Current Fiscal Year End Date | --12-31 | |
Document Fiscal Period Focus | Q2 | |
Document Fiscal Year Focus | 2019 | |
Entity Small Business | false | |
Entity Emerging Growth Company | false | |
Document Quarterly Report | true | |
Document Transition Report | false | |
Document Type | 10-Q | |
Document Period End Date | Jun. 30, 2019 | |
Entity File Number | 001-35435 | |
Entity Incorporation, State or Country Code | MN | |
Entity Tax Identification Number | 41-1939628 | |
Entity Address, Address Line One | 5540 Pioneer Creek Drive | |
Entity Address, City or Town | Maple Plain | |
Entity Address, State or Province | MN | |
Entity Address, Postal Zip Code | 55359 | |
City Area Code | 763 | |
Local Phone Number | 479-3680 | |
Title of 12(b) Security | Common Stock | |
Trading Symbol | PRLB | |
Security Exchange Name | NYSE | |
Entity Interactive Data Current | Yes | |
Entity Current Reporting Status | Yes | |
Entity Filer Category | Large Accelerated Filer | |
Entity Common Stock, Shares Outstanding | 26,882,097 |
Consolidated Balance Sheets (Cu
Consolidated Balance Sheets (Current Period Unaudited) - USD ($) $ in Thousands | Jun. 30, 2019 | Dec. 31, 2018 |
Current assets | ||
Cash and cash equivalents | $ 100,535 | $ 85,046 |
Short-term marketable securities | 35,867 | 46,750 |
Accounts receivable, net of allowance for doubtful accounts of $966 and $919 as of June 30, 2019 and December 31, 2018, respectively | 62,548 | 59,155 |
Inventory | 9,688 | 10,087 |
Prepaid expenses and other current assets | 7,826 | 8,567 |
Income taxes receivable | 2,852 | 5,757 |
Total current assets | 219,316 | 215,362 |
Property and equipment, net | 248,816 | 228,001 |
Goodwill | 128,752 | 128,752 |
Other intangible assets, net | 18,116 | 19,850 |
Long-term marketable securities | 14,268 | 23,579 |
Operating lease assets | 12,249 | 0 |
Other long-term assets | 4,010 | 3,441 |
Total assets | 645,527 | 618,985 |
Current liabilities | ||
Accounts payable | 21,230 | 17,411 |
Accrued compensation | 14,068 | 18,130 |
Accrued liabilities and other | 10,422 | 16,702 |
Current operating lease liabilities | 3,296 | 0 |
Income taxes payable | 2,417 | 491 |
Total current liabilities | 51,433 | 52,734 |
Long-term operating lease liabilities | 9,218 | 0 |
Long-term deferred tax liabilities | 21,745 | 20,162 |
Other long-term liabilities | 5,018 | 4,592 |
Total liabilities | 87,414 | 77,488 |
Shareholders' equity | ||
Preferred stock, $0.001 par value, authorized 10,000,000 shares; issued and outstanding 0 shares as of each of June 30, 2019 and December 31, 2018 | 0 | 0 |
Common stock, $0.001 par value, authorized 150,000,000 shares; issued and outstanding 26,882,097 and 26,984,747 shares as of June 30, 2019 and December 31, 2018, respectively | 27 | 27 |
Additional paid-in capital | 262,952 | 258,502 |
Retained earnings | 303,628 | 291,460 |
Accumulated other comprehensive loss | (8,494) | (8,492) |
Total shareholders' equity | 558,113 | 541,497 |
Total liabilities and shareholders' equity | $ 645,527 | $ 618,985 |
Consolidated Balance Sheets (_2
Consolidated Balance Sheets (Current Period Unaudited) (Parentheticals) - USD ($) $ in Thousands | Jun. 30, 2019 | Dec. 31, 2018 |
Allowance for doubtful accounts | $ 966 | $ 919 |
Preferred stock, par value (in dollars per share) | $ 0.001 | $ 0.001 |
Preferred stock, shares authorized (in shares) | 10,000,000 | 10,000,000 |
Preferred stock, shares issued (in shares) | 0 | 0 |
Preferred stock, shares outstanding (in shares) | 0 | 0 |
Common stock, par value (in dollars per share) | $ 0.001 | $ 0.001 |
Common stock, shares authorized (in shares) | 150,000,000 | 150,000,000 |
Common stock, shares issued (in shares) | 26,882,097 | 26,984,747 |
Common stock, shares outstanding (in shares) | 26,882,097 | 26,984,747 |
Consolidated Statements of Comp
Consolidated Statements of Comprehensive Income (Unaudited) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2019 | Jun. 30, 2018 | Jun. 30, 2019 | Jun. 30, 2018 | |
Statements of Operations: | ||||
Revenue | $ 115,932 | $ 109,652 | $ 229,384 | $ 217,397 |
Cost of revenue | 55,696 | 50,439 | 110,288 | 100,276 |
Gross profit | 60,236 | 59,213 | 119,096 | 117,121 |
Operating expenses | ||||
Marketing and sales | 19,285 | 17,557 | 37,862 | 34,129 |
Research and development | 8,169 | 7,032 | 16,182 | 13,697 |
General and administrative | 13,209 | 12,640 | 26,031 | 25,583 |
Total operating expenses | 40,663 | 37,229 | 80,075 | 73,409 |
Income from operations | 19,573 | 21,984 | 39,021 | 43,712 |
Other income, net | 1,125 | 808 | 1,338 | 986 |
Income before income taxes | 20,698 | 22,792 | 40,359 | 44,698 |
Provision for income taxes | 4,532 | 4,478 | 8,682 | 8,333 |
Net income | $ 16,166 | $ 18,314 | $ 31,677 | $ 36,365 |
Net income per share: | ||||
Basic (in dollars per share) | $ 0.60 | $ 0.68 | $ 1.18 | $ 1.35 |
Diluted (in dollars per share) | $ 0.60 | $ 0.67 | $ 1.17 | $ 1.34 |
Shares used to compute net income per share: | ||||
Basic (in shares) | 26,875,153 | 26,972,990 | 26,919,016 | 26,925,673 |
Diluted (in shares) | 27,041,422 | 27,274,882 | 27,113,328 | 27,232,215 |
Comprehensive Income (net of tax) | ||||
Comprehensive income | $ 15,688 | $ 14,796 | $ 31,675 | $ 35,240 |
Consolidated Statements of Shar
Consolidated Statements of Shareholders' Equity - USD ($) $ in Thousands | Common Stock [Member] | Additional Paid-in Capital [Member] | Retained Earnings [Member] | AOCI Attributable to Parent [Member] | Total |
Balance (in shares) at Dec. 31, 2017 | 26,828,651 | ||||
Balance at Dec. 31, 2017 | $ 27 | $ 241,725 | $ 224,697 | $ (5,234) | $ 461,215 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 102,895 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 2,250 | 0 | 0 | 2,250 |
Stock-based compensation expense | 0 | 2,307 | 0 | 0 | 2,307 |
Repurchases of common stock | 0 | 0 | 0 | 0 | 0 |
Net income | 0 | 0 | 18,051 | 0 | 18,051 |
Foreign currency translation adjustment | $ 0 | 0 | 0 | 2,393 | 2,393 |
Comprehensive income | 20,444 | ||||
Balance (in shares) at Mar. 31, 2018 | 26,931,546 | ||||
Balance at Mar. 31, 2018 | $ 27 | 246,282 | 244,208 | (2,841) | 487,676 |
Balance (in shares) at Dec. 31, 2017 | 26,828,651 | ||||
Balance at Dec. 31, 2017 | $ 27 | 241,725 | 224,697 | (5,234) | 461,215 |
Net income | 36,365 | ||||
Comprehensive income | 35,240 | ||||
Balance (in shares) at Jun. 30, 2018 | 27,026,394 | ||||
Balance at Jun. 30, 2018 | $ 27 | 250,063 | 262,522 | (6,359) | 506,253 |
Revenue recognition transition adjustment | $ 0 | 0 | 1,460 | 0 | 1,460 |
Balance (in shares) at Mar. 31, 2018 | 26,931,546 | ||||
Balance at Mar. 31, 2018 | $ 27 | 246,282 | 244,208 | (2,841) | 487,676 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 94,848 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 1,054 | 0 | 0 | 1,054 |
Stock-based compensation expense | 0 | 2,727 | 0 | 0 | 2,727 |
Repurchases of common stock | 0 | 0 | 0 | 0 | 0 |
Net income | 0 | 0 | 18,314 | 0 | 18,314 |
Foreign currency translation adjustment | $ 0 | 0 | 0 | (3,518) | (3,518) |
Comprehensive income | 14,796 | ||||
Balance (in shares) at Jun. 30, 2018 | 27,026,394 | ||||
Balance at Jun. 30, 2018 | $ 27 | 250,063 | 262,522 | (6,359) | $ 506,253 |
Balance (in shares) at Dec. 31, 2018 | 26,984,747 | 26,984,747 | |||
Balance at Dec. 31, 2018 | $ 27 | 258,502 | 291,460 | (8,492) | $ 541,497 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 19,950 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (420) | 0 | 0 | (420) |
Stock-based compensation expense | $ 0 | 3,040 | 0 | 0 | 3,040 |
Repurchases of common stock (in shares) | (157,716) | ||||
Repurchases of common stock | $ 0 | (1,511) | (15,798) | 0 | (17,309) |
Net income | 0 | 0 | 15,511 | 0 | 15,511 |
Foreign currency translation adjustment | $ 0 | 0 | 0 | 476 | 476 |
Comprehensive income | 15,987 | ||||
Balance (in shares) at Mar. 31, 2019 | 26,846,981 | ||||
Balance at Mar. 31, 2019 | $ 27 | 259,611 | 291,173 | (8,016) | $ 542,795 |
Balance (in shares) at Dec. 31, 2018 | 26,984,747 | 26,984,747 | |||
Balance at Dec. 31, 2018 | $ 27 | 258,502 | 291,460 | (8,492) | $ 541,497 |
Net income | 31,677 | ||||
Comprehensive income | $ 31,675 | ||||
Balance (in shares) at Jun. 30, 2019 | 26,882,097 | 26,882,097 | |||
Balance at Jun. 30, 2019 | $ 27 | 262,952 | 303,628 | (8,494) | $ 558,113 |
Balance (in shares) at Mar. 31, 2019 | 26,846,981 | ||||
Balance at Mar. 31, 2019 | $ 27 | 259,611 | 291,173 | (8,016) | 542,795 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 75,785 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 245 | 0 | 0 | 245 |
Stock-based compensation expense | $ 0 | 3,486 | 0 | 0 | 3,486 |
Repurchases of common stock (in shares) | (40,669) | ||||
Repurchases of common stock | $ 0 | (390) | (3,711) | 0 | (4,101) |
Net income | 0 | 0 | 16,166 | 0 | 16,166 |
Foreign currency translation adjustment | $ 0 | 0 | 0 | (478) | (478) |
Comprehensive income | $ 15,688 | ||||
Balance (in shares) at Jun. 30, 2019 | 26,882,097 | 26,882,097 | |||
Balance at Jun. 30, 2019 | $ 27 | $ 262,952 | $ 303,628 | $ (8,494) | $ 558,113 |
Consolidated Statements of Cash
Consolidated Statements of Cash Flows (Unaudited) - USD ($) $ in Thousands | 6 Months Ended | |
Jun. 30, 2019 | Jun. 30, 2018 | |
Operating activities | ||
Net income | $ 31,677 | $ 36,365 |
Adjustments to reconcile net income to net cash provided by operating activities: | ||
Depreciation and amortization | 14,981 | 12,749 |
Stock-based compensation expense | 6,526 | 5,034 |
Deferred taxes | 1,585 | 1,620 |
Gain on sale of businesses | 0 | (671) |
Amortization of held-to-maturity securities | 7 | 276 |
Other | (279) | 7 |
Changes in operating assets and liabilities: | ||
Accounts receivable | (3,461) | (2,648) |
Inventories | 392 | 389 |
Prepaid expenses and other | 24 | (1,059) |
Income taxes | 4,833 | 133 |
Accounts payable | 3,848 | 4,408 |
Accrued liabilities and other | (5,245) | 2,714 |
Net cash provided by operating activities | 54,888 | 59,317 |
Investing activities | ||
Purchases of property, equipment and other capital assets | (34,136) | (43,194) |
Cash used for acquisitions, net of cash acquired | 0 | (90) |
Proceeds from sale of business | 0 | 284 |
Purchases of other assets and investments | (4,000) | 0 |
Purchases of marketable securities | (8,983) | (17,129) |
Proceeds from maturities of marketable securities | 29,170 | 29,056 |
Net cash used in investing activities | (17,949) | (31,073) |
Financing activities | ||
Payments on debt | 0 | (5,000) |
Proceeds from exercises of stock options | 2,243 | 4,696 |
Purchases of shares withheld for tax obligations | (2,418) | (1,390) |
Repurchases of common stock | (21,410) | 0 |
Net cash used in financing activities | (21,585) | (1,694) |
Effect of exchange rate changes on cash and cash equivalents | 135 | (652) |
Net increase in cash and cash equivalents | 15,489 | 25,898 |
Cash and cash equivalents, beginning of period | 85,046 | 36,707 |
Cash and cash equivalents, end of period | $ 100,535 | $ 62,605 |
Note 1 - Basis of Presentation
Note 1 - Basis of Presentation | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Organization, Consolidation and Presentation of Financial Statements Disclosure [Text Block] | Note 1 The unaudited interim Consolidated Financial Statements of Proto Labs, Inc. (Protolabs, the Company, we, us or our) have been prepared in accordance with accounting principles generally accepted in the United States of America (U.S. GAAP) for interim financial information and with the instructions to Form 10 10 X. not may The preparation of the financial statements in conformity with U.S. GAAP requires management to make estimates and assumptions that affect the reported amounts of assets, liabilities, revenues, expenses, and the related disclosures at the date of the financial statements and during the reporting period. Actual results could materially differ from these estimates. For further information, refer to the audited Consolidated Financial Statements and Notes thereto included in the Company’s Annual Report on Form 10 December 31, 2018 February 22, 2019. The accompanying Consolidated Balance Sheet as of December 31, 2018 not 10 10 February 22, 2019 |
Note 2 - Recent Accounting Pron
Note 2 - Recent Accounting Pronouncements | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Significant Accounting Policies [Text Block] | Note 2 Recently Adopted Accounting Pronouncements During the first quarter of 2019, the Company adopted the Financial Accounting Standards Board (FASB) Accounting Standards Update (ASU) 2016 - 02, Leases (ASC 842 ), which introduces the balance sheet recognition of lease assets and lease liabilities by lessees for those leases classified as operating leases under previous guidance. The Company has adopted the new lease standard using the new transition option issued under the amendments in ASU 2018 - 11, Leases , which allowed the Company to continue to apply the legacy guidance in Accounting Standards Codification (ASC) 840, Leases , in the comparative periods presented in the year of adoption. The Company elected the package of practical expedients permitted under the transition guidance within the new standard, which among other things, allowed the Company to carry forward the historical lease classification. The Company made an accounting policy election to keep leases with an initial term of months or less off of the balance sheet. The Company will recognize those lease payments in the Consolidated Statements of Comprehensive Income on a straight-line basis over the lease term. The impact of the adoption was an increase to the Company’s operating lease assets and liabilities on January 1, 2019 of million. Recently Issued Accounting Pronouncements In January 2017, the FASB issued ASU 2017 - 04, Intangibles – Goodwill and Other , which is intended to simplify the subsequent measurement of goodwill. This guidance will be effective for impairment tests in fiscal years beginning after December 15, 2019 and interim periods within those fiscal years with early adoption permitted. The Company does not expect the impact to be material. In June 2016, the FASB issued ASU 2016 - 13, Financial Instruments – Credit Losses , which is intended to provide financial statement users with more decision-useful information about the expected credit losses on financial instruments held by a reporting entity at each reporting date. This guidance will be effective for fiscal years beginning after December 15, 2019 and interim periods within those fiscal years with early adoption permitted. The Company is evaluating the impact of future adoption of this guidance on its consolidated financial statements, but does not expect the impact to be material. |
Note 3 - Net Income Per Common
Note 3 - Net Income Per Common Share | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Earnings Per Share [Text Block] | Note 3 Basic net income per share is computed based on the weighted-average number of common shares outstanding. Diluted net income per share is computed based on the weighted-average number of common shares outstanding, increased by the number of additional shares that would have been outstanding had potentially dilutive common shares been issued and reduced by the number of shares the Company could have repurchased from the proceeds from issuance of the potentially dilutive shares. Potentially dilutive shares of common stock include stock options, restricted stock units and restricted stock awards granted under stock-based compensation plans and shares committed to be purchased under the employee stock purchase plan. Performance stock units are excluded from the calculation of dilutive potential common shares until the performance conditions have been satisfied. The table below sets forth the computation of basic and diluted net income per share: Three Months Ended Six Months Ended June 30, June 30, (in thousands, except share and per share amounts) 2019 2018 2019 2018 Net income $ 16,166 $ 18,314 $ 31,677 $ 36,365 Basic - weighted-average shares outstanding: 26,875,153 26,972,990 26,919,016 26,925,673 Effect of dilutive securities: Employee stock options and other 166,269 301,892 194,312 306,542 Diluted - weighted-average shares outstanding: 27,041,422 27,274,882 27,113,328 27,232,215 Net income per share: Basic $ 0.60 $ 0.68 $ 1.18 $ 1.35 Diluted $ 0.60 $ 0.67 $ 1.17 $ 1.34 |
Note 4 - Goodwill and Other Int
Note 4 - Goodwill and Other Intangible Assets | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Goodwill and Intangible Assets Disclosure [Text Block] | Note 4 There were no changes in the carrying amount of Goodwill during the three months and six June 30, 2019. Intangible assets other than goodwill at June 30, 2019 December 31, 2018 June 30, 2019 December 31, 2018 Useful Weighted Average (in thousands) Gross Accumulated Amortization Net Gross Accumulated Amortization Net Life Useful Life Intangible assets with finite lives: Marketing assets $ 930 $ (481 ) $ 449 $ 930 $ (434 ) $ 496 10.0 4.9 Non-compete agreement 270 (214 ) 56 270 (206 ) 64 2.0 - 5.0 3.5 Trade secrets 250 (250 ) - 250 (233 ) 17 5.0 0.0 Trade names 1,080 (810 ) 270 1,080 (540 ) 540 2.0 0.5 Software technology 12,229 (1,621 ) 10,608 12,229 (997 ) 11,232 10.0 8.5 Customer relationships 10,070 (3,337 ) 6,733 10,070 (2,569 ) 7,501 6.0 - 9.0 4.3 Total intangible assets $ 24,829 $ (6,713 ) $ 18,116 $ 24,829 $ (4,979 ) $ 19,850 Amortization expense for intangible assets was $0.9 million and $0.8 million for the three June 30, 2019 2018, six June 30, 2019 2018, Estimated aggregated amortization expense based on the current carrying value of the amortizable intangible assets is as follows: (in thousands) Estimated Remaining 2019 $ 1,717 2020 2,895 2021 2,895 2022 2,895 2023 2,691 Thereafter 5,023 Total estimated amortization expense $ 18,116 |
Note 5 - Fair Value Measurement
Note 5 - Fair Value Measurements | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Fair Value Disclosures [Text Block] | Note 5 ASC 820, Fair Value Measuremen 820 820 three may Level 1—Quoted Level 2—Observable 1 not Level 3—Unobservable no The Company’s cash consists of bank deposits. The Company’s cash equivalents measured at fair value consist of money market mutual funds. The Company determines the fair value of these investments using Level 1 The following table summarizes financial assets as of June 30, 2019 December 31, 2018 June 30, 2019 December 31, 2018 (in thousands) Level 1 Level 2 Level 3 Level 1 Level 2 Level 3 Financial Assets: Cash and cash equivalents Money market mutual fund $ 8,623 $ - $ - $ 8,943 $ - $ - Total $ 8,623 $ - $ - $ 8,943 $ - $ - |
Note 6 - Marketable Securities
Note 6 - Marketable Securities | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Investment [Text Block] | Note 6 The Company invests in short-term and long-term agency, municipal, corporate and other debt securities. The securities are categorized as held-to-maturity and are recorded at amortized cost. Categorization as held-to-maturity is based on the Company’s ability and intent to hold these securities to maturity. The following table summarizes information regarding the Company’s short-term and long-term marketable securities as of June 30, 2019 December 31, 2018: June 30, 2019 (in thousands) Cost Unrealized Gains Unrealized Losses Fair Value U.S. municipal securities $ 6,651 $ 12 $ (1 ) $ 6,662 Corporate debt securities 26,519 105 (11 ) 26,613 U.S. government agency securities 12,997 2 (12 ) 12,987 Certificates of deposit/time deposits 1,975 16 (2 ) 1,989 U.S. treasury securities 1,993 1 - 1,994 Total marketable securities $ 50,135 $ 136 $ (26 ) $ 50,245 December 31, 2018 (in thousands) Cost Unrealized Gains Unrealized Losses Fair Value U.S. municipal securities $ 17,509 $ 1 $ (33 ) $ 17,477 Corporate debt securities 31,769 - (96 ) 31,673 U.S. government agency securities 16,843 - (88 ) 16,755 Certificates of deposit/time deposits 4,208 - (25 ) 4,183 Total marketable securities $ 70,329 $ 1 $ (242 ) $ 70,088 Fair values for the corporate debt securities are primarily determined based on quoted market prices (Level 1 2 The Company tests for other-than-temporary losses on a quarterly basis and has considered the unrealized losses indicated above to be temporary in nature. In reaching this conclusion, the Company considered the credit quality of the issuers of the debt securities as well as the Company’s intent to hold the investments to maturity and recover the full principal. Classification of marketable securities as current or non-current is based upon the security’s maturity date as of the date of these financial statements. The June 30, 2019 may may June 30, (in thousands) 2019 Due in one year or less $ 35,867 Due after one year through five years 14,268 Total marketable securities $ 50,135 |
Note 7 - Inventory
Note 7 - Inventory | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Inventory Disclosure [Text Block] | Note 7 Inventory consists primarily of raw materials, which are recorded at the lower of cost or market using the average-cost method, which approximates first first The Company’s inventory consisted of the following as of the dates indicated: June 30, December 31, (in thousands) 2019 2018 Raw materials $ 9,481 $ 9,560 Work in process 403 792 Total inventory 9,884 10,352 Allowance for obsolescence (196 ) (265 ) Inventory, net of allowance $ 9,688 $ 10,087 |
Note 8 - Leases
Note 8 - Leases | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Lessee, Operating Leases [Text Block] | Note 8 The Company’s significant accounting policies are disclosed in Note 2 10 December 31, 2018. 842 The Company accounts for leases in accordance with ASC 842. January 1, 2019, 842, 840 not not January 1, 2019. not 842 not The Company has operating leases for office space, manufacturing facilities and certain company vehicles and equipment. The leases have remaining lease terms of 1 year to 10 years. Leases with an initial term of 12 not may June 30, 2019, not The Company determines if an arrangement is a lease at inception. Operating leases are included in operating lease assets, current operating lease liabilities and long-term operating lease liabilities in the Consolidated Balance Sheets and are recognized based on the present value of lease payments over the lease term at commencement date. The majority of the Company’s leases do not Supplemental balance sheet information related to leases was as follows: (in thousands) June 30, 2019 Operating lease assets $ 12,249 Current operating lease liabilities $ 3,296 Long-term operating lease liabilities 9,218 Total operating lease liabilities $ 12,514 Lease expense is recognized on a straight line basis over the lease term, with variable payments recognized in the period those payments are incurred. The components of lease expense for the periods reported were as follows: (in thousands) Three Months Ended June 30, 2019 Six Months Ended June 30, 2019 Operating lease cost $ 947 $ 2,017 Variable lease cost 266 505 Total lease cost $ 1,213 $ 2,522 Maturities of operating lease liabilities as of June 30, 2019 ( 842 (in thousands) Operating Leases Year Ending December 31, 2019 (excluding six months ended June 30, 2019) $ 2,100 2020 3,285 2021 2,517 2022 2,313 2023 1,059 After 2023 2,129 Total future minimum lease payments 13,403 Less interest (889 ) Present value of lease liabilities $ 12,514 As of June 30, 2019, not Weighted average remaining lease term and discount rate was as follows: June 30, 2019 Weighted Average Remaining Lease Term (Years) 4.96 Weighted Average Discount Rate 2.6 % Supplemental cash flow information related to leases was as follows: (in thousands) Six Months Ended June 30, 2019 Cash paid for amounts included in the measurement of operating lease liabilities: Operating cash flows for operating leases $ 2,730 Lease assets obtained in exchange for new operating lease liabilities 945 |
Note 9 - Stock-based Compensati
Note 9 - Stock-based Compensation | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Share-based Payment Arrangement [Text Block] | Note 9 Under the Company’s 2012 2012 2012 may 2012 may not Employee Stock Purchase Plan The Company’s 2012 May 15 November 15, first Stock-Based Compensation Expense Stock-based compensation expense was $3.5 million and $2.7 million for the three June 30, 2019 2018, six June 30, 2019 2018, Stock Options The following table summarizes stock option activity during the six June 30, 2019: Weighted- Average Stock Options Exercise Price Options outstanding at December 31, 2018 252,616 $ 64.71 Granted 53,708 105.81 Exercised (7,640 ) 55.93 Forfeited (9,641 ) 81.88 Options outstanding at June 30, 2019 289,043 $ 72.00 Exercisable at June 30, 2019 158,686 $ 58.13 The outstanding options generally have a term of 10 years. For employees, options granted become exercisable ratably over the vesting period, which is generally a period from 4 to 5 years, beginning on the first first The weighted-average grant date fair value of options that were granted during the six June 30, 2019 The following table provides the assumptions used in the Black-Scholes pricing model valuation of options during the six June 30, 2019 2018: Six Months Ended June 30, 2019 2018 Risk-free interest rate 2.35 - 2.58% 2.52 - 3.07% Expected life (years) 6.25 6.25 Expected volatility 42.52 - 42.74% 41.95 - 42.22% Expected dividend yield 0% 0% As of June 30, 2019, Restricted Stock Restricted stock awards are share-settled awards and restrictions lapse ratably over the vesting period, which is generally a period from 4 to 5 years, beginning on the first first The following table summarizes restricted stock activity during the six June 30, 2019: Weighted- Average Grant Date Restricted Fair Value Stock Per Share Restricted stock at December 31, 2018 323,921 $ 79.85 Granted 114,467 106.41 Restrictions lapsed (95,818 ) 79.32 Forfeited (14,891 ) 83.73 Restricted stock at June 30, 2019 327,679 $ 89.11 As of June 30, 2019, Performance Stock Performance stock units (PSUs) are expressed in terms of a target number of PSUs, with anywhere between 0 percent and 150 percent of that target number capable of being earned and vesting at the end of a 3-year performance period depending on the Company’s performance in the final year of the performance period and the award recipient’s continued employment. The following table summarizes performance stock activity during the six June 30, 2019: Weighted- Average Grant Date Performance Fair Value Stock Per Share Performance stock at December 31, 2018 52,140 $ 76.54 Granted 21,434 104.99 Restrictions lapsed - - Performance change - - Forfeited (2,375 ) 105.37 Performance stock at June 30, 2019 71,199 $ 84.14 As of June 30, 2019, Employee Stock Purchase Plan The following table presents the assumptions used to estimate the fair value of the ESPP during the six June 30, 2019 2018: Six Months Ended June 30, 2019 2018 Risk-free interest rate 2.33 - 2.35% 1.48 - 2.06% Expected life (months) 6.00 6.00 Expected volatility 37.36 - 53.57% 24.49 - 31.50% Expected dividend yield 0% 0% |
Note 10 - Accumulated Other Com
Note 10 - Accumulated Other Comprehensive Loss | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Disclosure of Reclassification Amount [Text Block] | Note 10 Other comprehensive income (loss) is comprised entirely of foreign currency translation adjustments. The following table presents the changes in accumulated other comprehensive income (loss) balances during the three six June 30, 2019 2018: Three Months Ended Six Months Ended June 30, June 30, (in thousands) 2019 2018 2019 2018 Foreign currency translation adjustments Balance at beginning of period $ (8,016 ) $ (2,841 ) $ (8,492 ) $ (5,234 ) Other comprehensive income (loss) before reclassifications (478 ) (3,518 ) (2 ) (1,125 ) Amounts reclassified from accumulated other comprehensive loss - - - - Net current-period other comprehensive income (loss) (478 ) (3,518 ) (2 ) (1,125 ) Balance at end of period $ (8,494 ) $ (6,359 ) $ (8,494 ) $ (6,359 ) |
Note 11 - Income Taxes
Note 11 - Income Taxes | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Income Tax Disclosure [Text Block] | Note 11 The Company is subject to income tax in multiple jurisdictions and the use of estimates is required to determine the provision for income taxes. For each of the three June 30, 2019 2018, June 30, 2019 2018, three June 30, 2019 three June 30, 2019 2018 six June 30, 2019 six June 30, 2019 2018 The effective income tax rate for the six June 30, 2019 The Company had reserves against unrecognized tax benefits totaling $4.4 million and $4.1 million as of June 30, 2019 December 31, 2018, |
Note 12 - Segment Reporting
Note 12 - Segment Reporting | 6 Months Ended |
Jun. 30, 2019 | |
Notes to Financial Statements | |
Segment Reporting Disclosure [Text Block] | Note 12 The Company’s reportable segments are based on the internal reporting used by the Company’s Chief Executive Officer, who is the chief operating decision maker (CODM), to assess operating performance and make decisions about the allocation of resources. The Corporate Unallocated and Japan category includes non-reportable segments, as well as research and development and general and administrative costs that the Company does not Intercompany transactions primarily relate to intercontinental activity and have been eliminated and are excluded from the reported amounts. The difference between income from operations and pre-tax income relates to foreign currency-related gains and losses and interest income on cash balances and investments, which are not Beginning in 2019, Revenue and income from operations by reportable segment for the three six June 30, 2019 2018 Three Months Ended June 30, Six Months Ended June 30, (in thousands) 2019 2018 2019 2018 Revenue: United States $ 91,149 $ 86,354 $ 178,960 $ 170,521 Europe 20,940 20,213 42,194 40,158 Japan 3,843 3,085 8,230 6,718 Total revenue $ 115,932 $ 109,652 $ 229,384 $ 217,397 Three Months Ended June 30, Six Months Ended June 30, (in thousands) 2019 2018 2019 2018 Income from Operations: United States $ 27,948 $ 29,256 $ 54,258 $ 58,099 Europe 3,756 4,009 7,977 7,371 Corporate Unallocated and Japan (12,131 ) (11,281 ) (23,214 ) (21,758 ) Total Income from Operations $ 19,573 $ 21,984 $ 39,021 $ 43,712 Total long-lived assets at June 30, 2019 December 31, 2018 June 30, December 31, (in thousands) 2019 2018 Total long-lived assets: United States $ 200,709 $ 185,979 Europe 40,027 34,577 Japan 8,080 7,445 Total Assets $ 248,816 $ 228,001 |
Significant Accounting Policies
Significant Accounting Policies (Policies) | 6 Months Ended |
Jun. 30, 2019 | |
Accounting Policies [Abstract] | |
New Accounting Pronouncements, Policy [Policy Text Block] | Recently Adopted Accounting Pronouncements During the first quarter of 2019, the Company adopted the Financial Accounting Standards Board (FASB) Accounting Standards Update (ASU) 2016 - 02, Leases (ASC 842 ), which introduces the balance sheet recognition of lease assets and lease liabilities by lessees for those leases classified as operating leases under previous guidance. The Company has adopted the new lease standard using the new transition option issued under the amendments in ASU 2018 - 11, Leases , which allowed the Company to continue to apply the legacy guidance in Accounting Standards Codification (ASC) 840, Leases , in the comparative periods presented in the year of adoption. The Company elected the package of practical expedients permitted under the transition guidance within the new standard, which among other things, allowed the Company to carry forward the historical lease classification. The Company made an accounting policy election to keep leases with an initial term of months or less off of the balance sheet. The Company will recognize those lease payments in the Consolidated Statements of Comprehensive Income on a straight-line basis over the lease term. The impact of the adoption was an increase to the Company’s operating lease assets and liabilities on January 1, 2019 of million. Recently Issued Accounting Pronouncements In January 2017, the FASB issued ASU 2017 - 04, Intangibles – Goodwill and Other , which is intended to simplify the subsequent measurement of goodwill. This guidance will be effective for impairment tests in fiscal years beginning after December 15, 2019 and interim periods within those fiscal years with early adoption permitted. The Company does not expect the impact to be material. In June 2016, the FASB issued ASU 2016 - 13, Financial Instruments – Credit Losses , which is intended to provide financial statement users with more decision-useful information about the expected credit losses on financial instruments held by a reporting entity at each reporting date. This guidance will be effective for fiscal years beginning after December 15, 2019 and interim periods within those fiscal years with early adoption permitted. The Company is evaluating the impact of future adoption of this guidance on its consolidated financial statements, but does not expect the impact to be material. |
Note 3 - Net Income Per Commo_2
Note 3 - Net Income Per Common Share (Tables) | 6 Months Ended |
Jun. 30, 2019 | |
Notes Tables | |
Schedule of Earnings Per Share, Basic and Diluted [Table Text Block] | Three Months Ended Six Months Ended June 30, June 30, (in thousands, except share and per share amounts) 2019 2018 2019 2018 Net income $ 16,166 $ 18,314 $ 31,677 $ 36,365 Basic - weighted-average shares outstanding: 26,875,153 26,972,990 26,919,016 26,925,673 Effect of dilutive securities: Employee stock options and other 166,269 301,892 194,312 306,542 Diluted - weighted-average shares outstanding: 27,041,422 27,274,882 27,113,328 27,232,215 Net income per share: Basic $ 0.60 $ 0.68 $ 1.18 $ 1.35 Diluted $ 0.60 $ 0.67 $ 1.17 $ 1.34 |
Note 4 - Goodwill and Other I_2
Note 4 - Goodwill and Other Intangible Assets (Tables) | 6 Months Ended |
Jun. 30, 2019 | |
Notes Tables | |
Schedule of Finite-Lived Intangible Assets [Table Text Block] | June 30, 2019 December 31, 2018 Useful Weighted Average (in thousands) Gross Accumulated Amortization Net Gross Accumulated Amortization Net Life Useful Life Intangible assets with finite lives: Marketing assets $ 930 $ (481 ) $ 449 $ 930 $ (434 ) $ 496 10.0 4.9 Non-compete agreement 270 (214 ) 56 270 (206 ) 64 2.0 - 5.0 3.5 Trade secrets 250 (250 ) - 250 (233 ) 17 5.0 0.0 Trade names 1,080 (810 ) 270 1,080 (540 ) 540 2.0 0.5 Software technology 12,229 (1,621 ) 10,608 12,229 (997 ) 11,232 10.0 8.5 Customer relationships 10,070 (3,337 ) 6,733 10,070 (2,569 ) 7,501 6.0 - 9.0 4.3 Total intangible assets $ 24,829 $ (6,713 ) $ 18,116 $ 24,829 $ (4,979 ) $ 19,850 |
Schedule of Finite-Lived Intangible Assets, Future Amortization Expense [Table Text Block] | (in thousands) Estimated Remaining 2019 $ 1,717 2020 2,895 2021 2,895 2022 2,895 2023 2,691 Thereafter 5,023 Total estimated amortization expense $ 18,116 |
Note 5 - Fair Value Measureme_2
Note 5 - Fair Value Measurements (Tables) | 6 Months Ended |
Jun. 30, 2019 | |
Notes Tables | |
Fair Value, Assets Measured on Recurring Basis [Table Text Block] | June 30, 2019 December 31, 2018 (in thousands) Level 1 Level 2 Level 3 Level 1 Level 2 Level 3 Financial Assets: Cash and cash equivalents Money market mutual fund $ 8,623 $ - $ - $ 8,943 $ - $ - Total $ 8,623 $ - $ - $ 8,943 $ - $ - |
Note 6 - Marketable Securities
Note 6 - Marketable Securities (Tables) | 6 Months Ended |
Jun. 30, 2019 | |
Notes Tables | |
Debt Securities, Held-to-maturity [Table Text Block] | June 30, 2019 (in thousands) Cost Unrealized Gains Unrealized Losses Fair Value U.S. municipal securities $ 6,651 $ 12 $ (1 ) $ 6,662 Corporate debt securities 26,519 105 (11 ) 26,613 U.S. government agency securities 12,997 2 (12 ) 12,987 Certificates of deposit/time deposits 1,975 16 (2 ) 1,989 U.S. treasury securities 1,993 1 - 1,994 Total marketable securities $ 50,135 $ 136 $ (26 ) $ 50,245 December 31, 2018 (in thousands) Cost Unrealized Gains Unrealized Losses Fair Value U.S. municipal securities $ 17,509 $ 1 $ (33 ) $ 17,477 Corporate debt securities 31,769 - (96 ) 31,673 U.S. government agency securities 16,843 - (88 ) 16,755 Certificates of deposit/time deposits 4,208 - (25 ) 4,183 Total marketable securities $ 70,329 $ 1 $ (242 ) $ 70,088 |
Investments Classified by Contractual Maturity Date [Table Text Block] | June 30, (in thousands) 2019 Due in one year or less $ 35,867 Due after one year through five years 14,268 Total marketable securities $ 50,135 |
Note 7 - Inventory (Tables)
Note 7 - Inventory (Tables) | 6 Months Ended |
Jun. 30, 2019 | |
Notes Tables | |
Schedule of Inventory, Current [Table Text Block] | June 30, December 31, (in thousands) 2019 2018 Raw materials $ 9,481 $ 9,560 Work in process 403 792 Total inventory 9,884 10,352 Allowance for obsolescence (196 ) (265 ) Inventory, net of allowance $ 9,688 $ 10,087 |
Note 8 - Leases (Tables)
Note 8 - Leases (Tables) | 6 Months Ended |
Jun. 30, 2019 | |
Notes Tables | |
Schedule of Operating Lease Assets and Liabilities [Table Text Block] | (in thousands) June 30, 2019 Operating lease assets $ 12,249 Current operating lease liabilities $ 3,296 Long-term operating lease liabilities 9,218 Total operating lease liabilities $ 12,514 |
Schedule of Lease Expense [Table Text Block] | (in thousands) Three Months Ended June 30, 2019 Six Months Ended June 30, 2019 Operating lease cost $ 947 $ 2,017 Variable lease cost 266 505 Total lease cost $ 1,213 $ 2,522 |
Lessee, Operating Lease, Liability, Maturity [Table Text Block] | (in thousands) Operating Leases Year Ending December 31, 2019 (excluding six months ended June 30, 2019) $ 2,100 2020 3,285 2021 2,517 2022 2,313 2023 1,059 After 2023 2,129 Total future minimum lease payments 13,403 Less interest (889 ) Present value of lease liabilities $ 12,514 |
Schedule of Lease Terms and Discount Rates [Table Text Block] |
<tbody>
<tr style="vertical-align: bottom;">
<td style="border-top: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-top: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-top: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-top: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-top: thin solid rgb(0, 0, 0);">Â </td>
</tr>
<tr style="vertical-align: bottom;">
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255);">Â </td>
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255);">Â </td>
<td colspan="2" style="text-align: center; font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255); margin-left: 0pt; border-bottom: 1px solid rgb(0, 0, 0);"><em style="font-weight: inherit; font-style: normal;"> </em><p style="background-color:#FFFFFF;font-family:'Times New Roman', Times, serif;font-size:10pt;margin:0pt;text-align:center;"><b><b>June 30, 2019</b></b></p> </td>
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255); padding-bottom: 1px;">Â </td>
</tr>
<tr style="vertical-align: bottom; background-color: rgb(204, 238, 255);">
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; width: 82%;"> <p style="font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-top: 0pt; margin-bottom: 0pt;">Weighted Average Remaining Lease Term (Years)</p> </td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td>
<td style="width: 15%; text-align: right; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">4.96</td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">Â </td>
</tr>
<tr style="vertical-align: bottom; background-color: rgb(255, 255, 255);">
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;"> <p style="font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-top: 0pt; margin-bottom: 0pt;">Weighted Average Discount Rate</p> </td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td>
<td style="width: 15%; text-align: right; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">2.6</td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">%</td>
</tr>
<tr style="vertical-align: bottom;">
<td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td>
</tr>
</tbody>
</table>
" id="sjs-B7" xml:space="preserve"> <table border="0" cellpadding="0" cellspacing="0" class="finTable" style="margin-right: 7.5%; margin-left: 7.5%; width: 85%; font-size: 10pt; font-family: "Times New Roman", Times, serif; text-indent: 0px;"> <tbody> <tr style="vertical-align: bottom;"> <td style="border-top: thin solid rgb(0, 0, 0);">Â </td> <td style="border-top: thin solid rgb(0, 0, 0);">Â </td> <td style="border-top: thin solid rgb(0, 0, 0);">Â </td> <td style="border-top: thin solid rgb(0, 0, 0);">Â </td> <td style="border-top: thin solid rgb(0, 0, 0);">Â </td> </tr> <tr style="vertical-align: bottom;"> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255);">Â </td> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255);">Â </td> <td colspan="2" style="text-align: center; font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255); margin-left: 0pt; border-bottom: 1px solid rgb(0, 0, 0);"><em style="font-weight: inherit; font-style: normal;"> </em><p style="background-color:#FFFFFF;font-family:'Times New Roman', Times, serif;font-size:10pt;margin:0pt;text-align:center;"><b><b>June 30, 2019</b></b></p> </td> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255); padding-bottom: 1px;">Â </td> </tr> <tr style="vertical-align: bottom; background-color: rgb(204, 238, 255);"> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; width: 82%;"> <p style="font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-top: 0pt; margin-bottom: 0pt;">Weighted Average Remaining Lease Term (Years)</p> </td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td> <td style="width: 15%; text-align: right; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">4.96</td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">Â </td> </tr> <tr style="vertical-align: bottom; background-color: rgb(255, 255, 255);"> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;"> <p style="font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-top: 0pt; margin-bottom: 0pt;">Weighted Average Discount Rate</p> </td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td> <td style="width: 15%; text-align: right; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">2.6</td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">%</td> </tr> <tr style="vertical-align: bottom;"> <td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td> <td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td> <td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td> <td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td> <td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td> </tr> </tbody> </table> |
Schedule of Lease Cash Flow Information [Table Text Block] |
<tbody>
<tr style="background-color: rgb(255, 255, 255); vertical-align: bottom">
<td style="border-top: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-top: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-top: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-top: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-top: thin solid rgb(0, 0, 0);">Â </td>
</tr>
<tr style="background-color: rgb(255, 255, 255); vertical-align: bottom">
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255); width: 82%;"> <p style="background-color: rgb(255, 255, 255); font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-top: 0pt; margin-bottom: 0pt;">(in thousands)</p> </td>
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255);">Â </td>
<td colspan="2" style="text-align: center; font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255); margin-left: 0pt; border-bottom: 1px solid rgb(0, 0, 0);"><em style="font-weight: inherit; font-style: normal;"> </em><p style="background-color:#FFFFFF;font-family:'Times New Roman', Times, serif;font-size:10pt;margin:0pt;text-align:center;"><b><b>Six Months Ended</b></b></p> <p style="background-color:#FFFFFF;font-family:'Times New Roman', Times, serif;font-size:10pt;margin:0pt;text-align:center;"><b><b>June 30, 2019</b></b></p> </td>
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255); padding-bottom: 1px;">Â </td>
</tr>
<tr style="background-color: rgb(204, 238, 255); vertical-align: bottom">
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;"> <p style="font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-top: 0pt; margin-bottom: 0pt;">Cash paid for amounts included in the measurement of operating lease liabilities:</p> </td>
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td>
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td>
<td style="text-align: left; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td>
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td>
</tr>
<tr style="background-color: rgb(255, 255, 255); vertical-align: bottom">
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;"> <p style="font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-top: 0pt; margin-bottom: 0pt; margin-left: 9pt;">Operating cash flows for operating leases</p> </td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">$</td>
<td style="width: 15%; text-align: right; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">2,730</td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">Â </td>
</tr>
<tr style="background-color: rgb(204, 238, 255); vertical-align: bottom">
<td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; padding: 0; margin: 0">Lease assets obtained in exchange for new operating lease liabilities</td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; padding: 0; margin: 0">Â </td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; padding: 0; margin: 0">Â </td>
<td style="width: 15%; text-align: right; font-family: "Times New Roman", Times, serif; font-size: 10pt; padding: 0; margin: 0">945</td>
<td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; padding: 0; margin: 0">Â </td>
</tr>
<tr style="background-color: rgb(255, 255, 255); vertical-align: bottom">
<td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td>
<td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td>
</tr>
</tbody>
</table>
" id="sjs-B8" xml:space="preserve"> <table border="0" cellpadding="0" cellspacing="0" class="finTable" style="margin-right: 15%; width: 85%; font-size: 10pt; font-family: "Times New Roman", Times, serif; text-indent: 0px;"> <tbody> <tr style="background-color: rgb(255, 255, 255); vertical-align: bottom"> <td style="border-top: thin solid rgb(0, 0, 0);">Â </td> <td style="border-top: thin solid rgb(0, 0, 0);">Â </td> <td style="border-top: thin solid rgb(0, 0, 0);">Â </td> <td style="border-top: thin solid rgb(0, 0, 0);">Â </td> <td style="border-top: thin solid rgb(0, 0, 0);">Â </td> </tr> <tr style="background-color: rgb(255, 255, 255); vertical-align: bottom"> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255); width: 82%;"> <p style="background-color: rgb(255, 255, 255); font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-top: 0pt; margin-bottom: 0pt;">(in thousands)</p> </td> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255);">Â </td> <td colspan="2" style="text-align: center; font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255); margin-left: 0pt; border-bottom: 1px solid rgb(0, 0, 0);"><em style="font-weight: inherit; font-style: normal;"> </em><p style="background-color:#FFFFFF;font-family:'Times New Roman', Times, serif;font-size:10pt;margin:0pt;text-align:center;"><b><b>Six Months Ended</b></b></p> <p style="background-color:#FFFFFF;font-family:'Times New Roman', Times, serif;font-size:10pt;margin:0pt;text-align:center;"><b><b>June 30, 2019</b></b></p> </td> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; background-color: rgb(255, 255, 255); padding-bottom: 1px;">Â </td> </tr> <tr style="background-color: rgb(204, 238, 255); vertical-align: bottom"> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;"> <p style="font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-top: 0pt; margin-bottom: 0pt;">Cash paid for amounts included in the measurement of operating lease liabilities:</p> </td> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td> <td style="text-align: left; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td> </tr> <tr style="background-color: rgb(255, 255, 255); vertical-align: bottom"> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt;"> <p style="font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-top: 0pt; margin-bottom: 0pt; margin-left: 9pt;">Operating cash flows for operating leases</p> </td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt;">Â </td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">$</td> <td style="width: 15%; text-align: right; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">2,730</td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; margin-left: 0pt;">Â </td> </tr> <tr style="background-color: rgb(204, 238, 255); vertical-align: bottom"> <td style="font-family: "Times New Roman", Times, serif; font-size: 10pt; padding: 0; margin: 0">Lease assets obtained in exchange for new operating lease liabilities</td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; padding: 0; margin: 0">Â </td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; padding: 0; margin: 0">Â </td> <td style="width: 15%; text-align: right; font-family: "Times New Roman", Times, serif; font-size: 10pt; padding: 0; margin: 0">945</td> <td style="width: 1%; font-family: "Times New Roman", Times, serif; font-size: 10pt; padding: 0; margin: 0">Â </td> </tr> <tr style="background-color: rgb(255, 255, 255); vertical-align: bottom"> <td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td> <td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td> <td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td> <td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td> <td style="border-bottom: thin solid rgb(0, 0, 0);">Â </td> </tr> </tbody> </table> |
Note 9 - Stock-based Compensa_2
Note 9 - Stock-based Compensation (Tables) | 6 Months Ended |
Jun. 30, 2019 | |
Notes Tables | |
Share-based Payment Arrangement, Option, Activity [Table Text Block] | Weighted- Average Stock Options Exercise Price Options outstanding at December 31, 2018 252,616 $ 64.71 Granted 53,708 105.81 Exercised (7,640 ) 55.93 Forfeited (9,641 ) 81.88 Options outstanding at June 30, 2019 289,043 $ 72.00 Exercisable at June 30, 2019 158,686 $ 58.13 |
Schedule of Share-based Payment Award, Stock Options, Valuation Assumptions [Table Text Block] | Six Months Ended June 30, 2019 2018 Risk-free interest rate 2.35 - 2.58% 2.52 - 3.07% Expected life (years) 6.25 6.25 Expected volatility 42.52 - 42.74% 41.95 - 42.22% Expected dividend yield 0% 0% |
Share-based Payment Arrangement, Restricted Stock and Restricted Stock Unit, Activity [Table Text Block] | Weighted- Average Grant Date Restricted Fair Value Stock Per Share Restricted stock at December 31, 2018 323,921 $ 79.85 Granted 114,467 106.41 Restrictions lapsed (95,818 ) 79.32 Forfeited (14,891 ) 83.73 Restricted stock at June 30, 2019 327,679 $ 89.11 |
Schedule of Nonvested Performance-based Units Activity [Table Text Block] | Weighted- Average Grant Date Performance Fair Value Stock Per Share Performance stock at December 31, 2018 52,140 $ 76.54 Granted 21,434 104.99 Restrictions lapsed - - Performance change - - Forfeited (2,375 ) 105.37 Performance stock at June 30, 2019 71,199 $ 84.14 |
Schedule of Share-based Payment Award, Employee Stock Purchase Plan, Valuation Assumptions [Table Text Block] | Six Months Ended June 30, 2019 2018 Risk-free interest rate 2.33 - 2.35% 1.48 - 2.06% Expected life (months) 6.00 6.00 Expected volatility 37.36 - 53.57% 24.49 - 31.50% Expected dividend yield 0% 0% |
Note 10 - Accumulated Other C_2
Note 10 - Accumulated Other Comprehensive Loss (Tables) | 6 Months Ended |
Jun. 30, 2019 | |
Notes Tables | |
Comprehensive Income (Loss) [Table Text Block] | Three Months Ended Six Months Ended June 30, June 30, (in thousands) 2019 2018 2019 2018 Foreign currency translation adjustments Balance at beginning of period $ (8,016 ) $ (2,841 ) $ (8,492 ) $ (5,234 ) Other comprehensive income (loss) before reclassifications (478 ) (3,518 ) (2 ) (1,125 ) Amounts reclassified from accumulated other comprehensive loss - - - - Net current-period other comprehensive income (loss) (478 ) (3,518 ) (2 ) (1,125 ) Balance at end of period $ (8,494 ) $ (6,359 ) $ (8,494 ) $ (6,359 ) |
Note 12 - Segment Reporting (Ta
Note 12 - Segment Reporting (Tables) | 6 Months Ended |
Jun. 30, 2019 | |
Notes Tables | |
Income from Operations by Geographic Area [Table Text Block] | Three Months Ended June 30, Six Months Ended June 30, (in thousands) 2019 2018 2019 2018 Income from Operations: United States $ 27,948 $ 29,256 $ 54,258 $ 58,099 Europe 3,756 4,009 7,977 7,371 Corporate Unallocated and Japan (12,131 ) (11,281 ) (23,214 ) (21,758 ) Total Income from Operations $ 19,573 $ 21,984 $ 39,021 $ 43,712 |
Long-lived Assets by Geographic Areas [Table Text Block] | June 30, December 31, (in thousands) 2019 2018 Total long-lived assets: United States $ 200,709 $ 185,979 Europe 40,027 34,577 Japan 8,080 7,445 Total Assets $ 248,816 $ 228,001 |
Operating Segments [Member] | |
Notes Tables | |
Revenue from External Customers by Geographic Areas [Table Text Block] | Three Months Ended June 30, Six Months Ended June 30, (in thousands) 2019 2018 2019 2018 Revenue: United States $ 91,149 $ 86,354 $ 178,960 $ 170,521 Europe 20,940 20,213 42,194 40,158 Japan 3,843 3,085 8,230 6,718 Total revenue $ 115,932 $ 109,652 $ 229,384 $ 217,397 |
Note 2 - Recent Accounting Pr_2
Note 2 - Recent Accounting Pronouncements (Details Textual) - USD ($) $ in Thousands | Jun. 30, 2019 | Jan. 01, 2019 | Dec. 31, 2018 |
Operating Lease, Liability, Total | $ 12,514 | ||
Operating Lease, Right-of-Use Asset | $ 12,249 | $ 0 | |
Accounting Standards Update 2016-02 [Member] | |||
Operating Lease, Liability, Total | $ 13,100 | ||
Operating Lease, Right-of-Use Asset | $ 13,100 |
Note 3 - Net Income Per Commo_3
Note 3 - Net Income Per Common Share - Computation of Basic and Diluted Net Income Per Share (Details) - USD ($) $ / shares in Units, $ in Thousands | 3 Months Ended | 6 Months Ended | ||||
Jun. 30, 2019 | Mar. 31, 2019 | Jun. 30, 2018 | Mar. 31, 2018 | Jun. 30, 2019 | Jun. 30, 2018 | |
Net income | $ 16,166 | $ 15,511 | $ 18,314 | $ 18,051 | $ 31,677 | $ 36,365 |
Basic - weighted-average shares outstanding: (in shares) | 26,875,153 | 26,972,990 | 26,919,016 | 26,925,673 | ||
Employee stock options and other (in shares) | 166,269 | 301,892 | 194,312 | 306,542 | ||
Diluted - weighted-average shares outstanding: (in shares) | 27,041,422 | 27,274,882 | 27,113,328 | 27,232,215 | ||
Basic (in dollars per share) | $ 0.60 | $ 0.68 | $ 1.18 | $ 1.35 | ||
Diluted (in dollars per share) | $ 0.60 | $ 0.67 | $ 1.17 | $ 1.34 |
Note 4 - Goodwill and Other I_3
Note 4 - Goodwill and Other Intangible Assets (Details Textual) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2019 | Jun. 30, 2018 | Jun. 30, 2019 | Jun. 30, 2018 | |
Goodwill, Period Increase (Decrease), Total | $ 0 | $ 0 | ||
Amortization of Intangible Assets, Total | $ 900 | $ 800 | $ 1,700 | $ 1,600 |
Note 4 - Goodwill and Other I_4
Note 4 - Goodwill and Other Intangible Assets - Intangible Assets Other Than Goodwill (Details) - USD ($) $ in Thousands | 6 Months Ended | |
Jun. 30, 2019 | Dec. 31, 2018 | |
Gross | $ 24,829 | $ 24,829 |
Accumulated Amortization | (6,713) | (4,979) |
Net | 18,116 | 19,850 |
Marketing-Related Intangible Assets [Member] | ||
Gross | 930 | 930 |
Accumulated Amortization | (481) | (434) |
Net | $ 449 | 496 |
Useful Life (Year) | 10 years | |
Weighted average useful life remaining (Year) | 4 years 10 months 24 days | |
Noncompete Agreements [Member] | ||
Gross | $ 270 | 270 |
Accumulated Amortization | (214) | (206) |
Net | $ 56 | 64 |
Weighted average useful life remaining (Year) | 3 years 6 months | |
Noncompete Agreements [Member] | Minimum [Member] | ||
Useful Life (Year) | 2 years | |
Noncompete Agreements [Member] | Maximum [Member] | ||
Useful Life (Year) | 5 years | |
Trade Secrets [Member] | ||
Gross | $ 250 | 250 |
Accumulated Amortization | (250) | (233) |
Net | $ 0 | 17 |
Useful Life (Year) | 5 years | |
Weighted average useful life remaining (Year) | 0 years | |
Trade Names [Member] | ||
Gross | $ 1,080 | 1,080 |
Accumulated Amortization | (810) | (540) |
Net | $ 270 | 540 |
Useful Life (Year) | 2 years | |
Weighted average useful life remaining (Year) | 6 months | |
Computer Software, Intangible Asset [Member] | ||
Gross | $ 12,229 | 12,229 |
Accumulated Amortization | (1,621) | (997) |
Net | $ 10,608 | 11,232 |
Useful Life (Year) | 10 years | |
Weighted average useful life remaining (Year) | 8 years 6 months | |
Customer Relationships [Member] | ||
Gross | $ 10,070 | 10,070 |
Accumulated Amortization | (3,337) | (2,569) |
Net | $ 6,733 | $ 7,501 |
Weighted average useful life remaining (Year) | 4 years 3 months 18 days | |
Customer Relationships [Member] | Minimum [Member] | ||
Useful Life (Year) | 6 years | |
Customer Relationships [Member] | Maximum [Member] | ||
Useful Life (Year) | 9 years |
Note 4 - Goodwill and Other I_5
Note 4 - Goodwill and Other Intangible Assets - Estimated Aggregated Amortization Expense (Details) - USD ($) $ in Thousands | Jun. 30, 2019 | Dec. 31, 2018 |
Remaining 2019 | $ 1,717 | |
2020 | 2,895 | |
2021 | 2,895 | |
2022 | 2,895 | |
2023 | 2,691 | |
Thereafter | 5,023 | |
Total estimated amortization expense | $ 18,116 | $ 19,850 |
Note 5 - Fair Value Measureme_3
Note 5 - Fair Value Measurements - Fair Value of Financial Assets Measured on a Recurring Basis (Details) - Fair Value, Recurring [Member] - USD ($) $ in Thousands | Jun. 30, 2019 | Dec. 31, 2018 |
Fair Value, Inputs, Level 1 [Member] | ||
Money market mutual fund | $ 8,623 | $ 8,943 |
Total | 8,623 | 8,943 |
Fair Value, Inputs, Level 2 [Member] | ||
Money market mutual fund | 0 | 0 |
Total | 0 | 0 |
Fair Value, Inputs, Level 3 [Member] | ||
Money market mutual fund | 0 | 0 |
Total | $ 0 | $ 0 |
Note 6 - Marketable Securitie_2
Note 6 - Marketable Securities - Short-term and Long-term Marketable Securities (Details) - USD ($) $ in Thousands | Jun. 30, 2019 | Dec. 31, 2018 |
Amortized Cost | $ 50,135 | $ 70,329 |
Unrealized Gains | 136 | 1 |
Unrealized Losses | (26) | (242) |
Fair Value | 50,245 | 70,088 |
Bank Time Deposits [Member] | ||
Amortized Cost | 1,975 | 4,208 |
Unrealized Gains | 16 | 0 |
Unrealized Losses | (2) | (25) |
Fair Value | 1,989 | 4,183 |
US States and Political Subdivisions Debt Securities [Member] | ||
Amortized Cost | 6,651 | 17,509 |
Unrealized Gains | 12 | 1 |
Unrealized Losses | (1) | (33) |
Fair Value | 6,662 | 17,477 |
Corporate Debt Securities [Member] | ||
Amortized Cost | 26,519 | 31,769 |
Unrealized Gains | 105 | 0 |
Unrealized Losses | (11) | (96) |
Fair Value | 26,613 | 31,673 |
US Government Agencies Debt Securities [Member] | ||
Amortized Cost | 12,997 | 16,843 |
Unrealized Gains | 2 | 0 |
Unrealized Losses | (12) | (88) |
Fair Value | 12,987 | $ 16,755 |
US Treasury Securities [Member] | ||
Amortized Cost | 1,993 | |
Unrealized Gains | 1 | |
Unrealized Losses | 0 | |
Fair Value | $ 1,994 |
Note 6 - Marketable Securitie_3
Note 6 - Marketable Securities - Balance of Held-to-maturity Debt Securities by Contractual Maturity (Details) - USD ($) $ in Thousands | Jun. 30, 2019 | Dec. 31, 2018 |
Due in one year or less | $ 35,867 | |
Due after one year through five years | 14,268 | |
Total marketable securities | $ 50,135 | $ 70,329 |
Note 7 - Inventory - Inventory
Note 7 - Inventory - Inventory (Details) - USD ($) $ in Thousands | Jun. 30, 2019 | Dec. 31, 2018 |
Raw materials | $ 9,481 | $ 9,560 |
Work in process | 403 | 792 |
Total inventory | 9,884 | 10,352 |
Allowance for obsolescence | (196) | (265) |
Inventory, net of allowance | $ 9,688 | $ 10,087 |
Note 8 - Leases (Details Textua
Note 8 - Leases (Details Textual) Pure in Thousands, $ in Thousands | Jun. 30, 2019USD ($) | Jan. 01, 2019USD ($) | Dec. 31, 2018USD ($) |
Operating Lease, Liability, Total | $ 12,514 | ||
Operating Lease, Right-of-Use Asset | $ 12,249 | $ 0 | |
Lessee, Financial Lease, Liability, Number of Leases | 0 | ||
Lessee, Operating Lease, Lease Not yet Commenced, Number of Leases | 0 | ||
Minimum [Member] | Office Space, Manufacturing Facilities, and Certain Company Vehicles and Equipment [Member] | |||
Lessee, Operating Lease, Term of Contract | 1 year | ||
Maximum [Member] | Office Space, Manufacturing Facilities, and Certain Company Vehicles and Equipment [Member] | |||
Lessee, Operating Lease, Term of Contract | 10 years | ||
Accounting Standards Update 2016-02 [Member] | |||
Operating Lease, Liability, Total | $ 13,100 | ||
Operating Lease, Right-of-Use Asset | $ 13,100 |
Note 8 - Leases - Balance Sheet
Note 8 - Leases - Balance Sheet Information (Details) - USD ($) $ in Thousands | Jun. 30, 2019 | Dec. 31, 2018 |
Operating lease assets | $ 12,249 | $ 0 |
Current operating lease liabilities | 3,296 | 0 |
Long-term operating lease liabilities | 9,218 | $ 0 |
Total operating lease liabilities | $ 12,514 |
Note 8 - Leases - Lease Expense
Note 8 - Leases - Lease Expense (Details) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended |
Jun. 30, 2019 | Jun. 30, 2019 | |
Operating lease cost | $ 947 | $ 2,017 |
Variable lease cost | 266 | 505 |
Total lease cost | $ 1,213 | $ 2,522 |
Note 8 - Leases - Maturities of
Note 8 - Leases - Maturities of Operating Lease Liabilities (Details) $ in Thousands | Jun. 30, 2019USD ($) |
2019 (excluding six months ended June 30, 2019) | $ 2,100 |
2020 | 3,285 |
2021 | 2,517 |
2022 | 2,313 |
2023 | 1,059 |
After 2023 | 2,129 |
Total future minimum lease payments | 13,403 |
Less interest | (889) |
Present value of lease liabilities | $ 12,514 |
Note 8 - Leases - Weighted Aver
Note 8 - Leases - Weighted Average Remaining Terms and Discount Rates (Details) | Jun. 30, 2019 |
Weighted Average Remaining Lease Term (Years) (Year) | 4 years 11 months 15 days |
Weighted Average Discount Rate | 2.60% |
Note 8 - Leases - Cash Flow Inf
Note 8 - Leases - Cash Flow Information (Details) $ in Thousands | 6 Months Ended |
Jun. 30, 2019USD ($) | |
Operating cash flows for operating leases | $ 2,730 |
Lease assets obtained in exchange for new operating lease liabilities | $ 945 |
Note 9 - Stock-based Compensa_3
Note 9 - Stock-based Compensation (Details Textual) - USD ($) $ / shares in Units, $ in Millions | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2019 | Jun. 30, 2018 | Jun. 30, 2019 | Jun. 30, 2018 | |
Share-based Compensation Arrangement by Share-based Payment Award, Expiration Period | 10 years | |||
Share-based Payment Arrangement, Expense | $ 3.5 | $ 2.7 | $ 6.5 | $ 5 |
Share-based Compensation Arrangement by Share-based Payment Award, Options, Grants in Period, Weighted Average Grant Date Fair Value | $ 47.84 | |||
ESPP [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Discount from Market Price, Offering Date | 15.00% | |||
Employee Stock Purchase Plan, Offering Period | 6 months | |||
Share-based Compensation Arrangement by Share-based Payment Award, Purchase Price of Common Stock, Percent | 85.00% | |||
Share-based Payment Arrangement, Option [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Expiration Period | 10 years | |||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Amount, Total | 4.7 | $ 4.7 | ||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Period for Recognition | 3 years | |||
Share-based Payment Arrangement, Option [Member] | Minimum [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Award Vesting Period | 4 years | |||
Share-based Payment Arrangement, Option [Member] | Maximum [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Award Vesting Period | 5 years | |||
Restricted Stock [Member] | ||||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Amount, Total | 27.4 | $ 27.4 | ||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Period for Recognition | 3 years 1 month 6 days | |||
Restricted Stock [Member] | Minimum [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Award Vesting Period | 4 years | |||
Restricted Stock [Member] | Maximum [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Award Vesting Period | 5 years | |||
Performance Shares [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Award Vesting Period | 3 years | |||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Amount, Total | $ 3.3 | $ 3.3 | ||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Period for Recognition | 2 years 1 month 6 days | |||
Percentage of Target Number Capable of Being Earned and Vesting, Lower Limit | 0.00% | 0.00% | ||
Percentage of Target Number Capable of Being Earned and Vesting, Upper Limit | 150.00% | 150.00% |
Note 9 - Stock-based Compensa_4
Note 9 - Stock-based Compensation - Stock Option Activity (Details) | 6 Months Ended |
Jun. 30, 2019$ / sharesshares | |
Options outstanding (in shares) | shares | 252,616 |
Options outstanding, weighted-average exercise price (in dollars per share) | $ / shares | $ 64.71 |
Granted (in shares) | shares | 53,708 |
Granted, weighted-average exercise price (in dollars per share) | $ / shares | $ 105.81 |
Exercised (in shares) | shares | (7,640) |
Exercised, weighted-average exercise price (in dollars per share) | $ / shares | $ 55.93 |
Forfeited (in shares) | shares | (9,641) |
Forfeited, weighted-average exercise price (in dollars per share) | $ / shares | $ 81.88 |
Options outstanding (in shares) | shares | 289,043 |
Options outstanding, weighted-average exercise price (in dollars per share) | $ / shares | $ 72 |
Options exercisable (in shares) | shares | 158,686 |
Options exercisable, weighted-average exercise price (in dollars per share) | $ / shares | $ 58.13 |
Note 9 - Stock-based Compensa_5
Note 9 - Stock-based Compensation - Assumptions Used in the Black-Scholes Option Pricing Model (Details) - Share-based Payment Arrangement, Option [Member] | 6 Months Ended | |
Jun. 30, 2019 | Jun. 30, 2018 | |
Expected life (Year) | 6 years 3 months | 6 years 3 months |
Expected dividend yield | 0.00% | 0.00% |
Minimum [Member] | ||
Risk-free interest rate | 2.35% | 2.52% |
Expected volatility | 42.52% | 41.95% |
Maximum [Member] | ||
Risk-free interest rate | 2.58% | 3.07% |
Expected volatility | 42.74% | 42.22% |
Note 9 - Stock-based Compensa_6
Note 9 - Stock-based Compensation - Restricted Stock Options (Details) - Restricted Stock [Member] | 6 Months Ended |
Jun. 30, 2019$ / sharesshares | |
Restricted stock (in shares) | shares | 323,921 |
Restricted stock, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 79.85 |
Granted (in shares) | shares | 114,467 |
Granted, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 106.41 |
Restrictions lapsed (in shares) | shares | (95,818) |
Restrictions lapsed, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 79.32 |
Forfeited (in shares) | shares | (14,891) |
Forfeited, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 83.73 |
Restricted stock (in shares) | shares | 327,679 |
Restricted stock, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 89.11 |
Note 9 - Stock-based Compensa_7
Note 9 - Stock-based Compensation - Performance Stock (Details) - Performance Shares [Member] | 6 Months Ended |
Jun. 30, 2019$ / sharesshares | |
Restricted stock (in shares) | shares | 52,140 |
Restricted stock, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 76.54 |
Granted (in shares) | shares | 21,434 |
Granted, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 104.99 |
Restrictions lapsed (in shares) | shares | 0 |
Restrictions lapsed, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 0 |
Performance change (in shares) | shares | 0 |
Performance change, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 0 |
Forfeited (in shares) | shares | (2,375) |
Forfeited, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 105.37 |
Restricted stock (in shares) | shares | 71,199 |
Restricted stock, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 84.14 |
Note 9 - Stock-based Compensa_8
Note 9 - Stock-based Compensation - Assumptions Used to Estimate the Fair Value of the ESPP (Details) - ESPP [Member] | 6 Months Ended | |
Jun. 30, 2019 | Jun. 30, 2018 | |
Expected life (Year) | 6 months | 6 months |
Expected dividend yield | 0.00% | 0.00% |
Minimum [Member] | ||
Risk-free interest rate | 2.33% | 1.48% |
Expected volatility | 37.36% | 24.49% |
Maximum [Member] | ||
Risk-free interest rate | 2.35% | 2.06% |
Expected volatility | 53.57% | 31.50% |
Note 10 - Accumulated Other C_3
Note 10 - Accumulated Other Comprehensive Loss - Other Comprehensive Loss (Details) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2019 | Jun. 30, 2018 | Jun. 30, 2019 | Jun. 30, 2018 | |
Balance | $ 542,795 | $ 487,676 | $ 541,497 | $ 461,215 |
Balance | 558,113 | 506,253 | 558,113 | 506,253 |
Accumulated Foreign Currency Adjustment Attributable to Parent [Member] | ||||
Balance | (8,016) | (2,841) | (8,492) | (5,234) |
Other comprehensive income (loss) before reclassifications | (478) | (3,518) | (2) | (1,125) |
Amounts reclassified from accumulated other comprehensive loss | 0 | 0 | 0 | 0 |
Net current-period other comprehensive income (loss) | (478) | (3,518) | (2) | (1,125) |
Balance | $ (8,494) | $ (6,359) | $ (8,494) | $ (6,359) |
Note 11 - Income Taxes (Details
Note 11 - Income Taxes (Details Textual) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | |||
Jun. 30, 2019 | Jun. 30, 2018 | Jun. 30, 2019 | Jun. 30, 2018 | Dec. 31, 2018 | |
Income Tax Expense (Benefit), Total | $ 4,532 | $ 4,478 | $ 8,682 | $ 8,333 | |
Effective Income Tax Rate Reconciliation, Percent, Total | 21.90% | 19.60% | 21.50% | 18.60% | |
Effective Income Tax Rate, Increase (Decrease), Percentage | 2.30% | 2.90% | |||
Effective Income Tax Rate Reconciliation, at Federal Statutory Income Tax Rate, Percent | 21.00% | ||||
Unrecognized Tax Benefits, Ending Balance | $ 4,400 | $ 4,400 | $ 4,100 |
Note 12 - Segment Reporting - R
Note 12 - Segment Reporting - Revenue From Operations by Reportable Segment (Details) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2019 | Jun. 30, 2018 | Jun. 30, 2019 | Jun. 30, 2018 | |
Revenue: | ||||
Revenue | $ 115,932 | $ 109,652 | $ 229,384 | $ 217,397 |
Operating Segments [Member] | ||||
Revenue: | ||||
Revenue | 115,932 | 109,652 | 229,384 | 217,397 |
Operating Segments [Member] | United States Segment [Member] | ||||
Revenue: | ||||
Revenue | 91,149 | 86,354 | 178,960 | 170,521 |
Operating Segments [Member] | Europe Segment [Member] | ||||
Revenue: | ||||
Revenue | 20,940 | 20,213 | 42,194 | 40,158 |
Operating Segments [Member] | Japan Segment [Member] | ||||
Revenue: | ||||
Revenue | $ 3,843 | $ 3,085 | $ 8,230 | $ 6,718 |
Note 12 - Segment Reporting - I
Note 12 - Segment Reporting - Income From Operations (Details) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2019 | Jun. 30, 2018 | Jun. 30, 2019 | Jun. 30, 2018 | |
Income from operations | $ 19,573 | $ 21,984 | $ 39,021 | $ 43,712 |
Operating Segments [Member] | United States Segment [Member] | ||||
Income from operations | 27,948 | 29,256 | 54,258 | 58,099 |
Operating Segments [Member] | Europe Segment [Member] | ||||
Income from operations | 3,756 | 4,009 | 7,977 | 7,371 |
Operating Segments [Member] | Corporate Unallocated and Japan Segment[Member] | ||||
Income from operations | (12,131) | (11,281) | (23,214) | (21,758) |
Corporate and Reconciling Items [Member] | ||||
Income from operations | $ 19,573 | $ 21,984 | $ 39,021 | $ 43,712 |
Note 12 - Segment Reporting - L
Note 12 - Segment Reporting - Long-lived Assets by Geographic Region (Details) - USD ($) $ in Thousands | Jun. 30, 2019 | Dec. 31, 2018 |
Long-lived assets | $ 248,816 | $ 228,001 |
Operating Segments [Member] | United States Segment [Member] | ||
Long-lived assets | 200,709 | 185,979 |
Operating Segments [Member] | Europe Segment [Member] | ||
Long-lived assets | 40,027 | 34,577 |
Operating Segments [Member] | Japan Segment [Member] | ||
Long-lived assets | $ 8,080 | $ 7,445 |