Consolidated Statements of Shareholders' Equity (Unaudited) - 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, 2020 | 26,776,796 | | | | |
Balance at Dec. 31, 2020 | $ 27 | $ 284,848 | $ 362,901 | $ (3,420) | $ 644,356 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 48,955 | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | | (290) | | | (290) |
Stock-based compensation expense | | 5,620 | | | 5,620 |
Repurchases of common stock (in shares) | 0 | | | | |
Net income | | | 3,712 | | 3,712 |
Other comprehensive loss | | | | | |
Foreign currency translation adjustment | | | | (6,842) | (6,842) |
Net unrealized gains (losses) on investments in securities | | | | 166 | 166 |
Comprehensive income (loss) | | | | | (2,964) |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 48,955 | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | | (290) | | | (290) |
Stock-based compensation expense | | 5,620 | | | 5,620 |
Repurchases of common stock (in shares) | 0 | | | | |
Net income | | | 3,712 | | 3,712 |
Balance (in shares) at Dec. 31, 2020 | 26,776,796 | | | | |
Balance at Dec. 31, 2020 | $ 27 | 284,848 | 362,901 | (3,420) | 644,356 |
Other comprehensive loss | | | | | |
Common shares issued for Hubs acquisition (in shares) | 863,995 | | | | |
Common shares issued for Hubs acquisition | $ 1 | 166,708 | 0 | | 166,709 |
Balance (in shares) at Mar. 31, 2021 | 27,689,746 | | | | |
Balance at Mar. 31, 2021 | $ 28 | 456,886 | 366,613 | (10,096) | 813,431 |
Balance (in shares) at Dec. 31, 2020 | 26,776,796 | | | | |
Balance at Dec. 31, 2020 | $ 27 | 284,848 | 362,901 | (3,420) | 644,356 |
Net income | | | | | 21,462 |
Other comprehensive loss | | | | | |
Comprehensive income (loss) | | | | | 11,424 |
Net income | | | | | 21,462 |
Balance (in shares) at Dec. 31, 2020 | 26,776,796 | | | | |
Balance at Dec. 31, 2020 | $ 27 | 284,848 | 362,901 | (3,420) | 644,356 |
Balance (in shares) at Sep. 30, 2021 | 27,603,649 | | | | |
Balance at Sep. 30, 2021 | $ 28 | 464,900 | 373,151 | (13,458) | 824,621 |
Balance (in shares) at Mar. 31, 2021 | 27,689,746 | | | | |
Balance at Mar. 31, 2021 | $ 28 | 456,886 | 366,613 | (10,096) | 813,431 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 85,317 | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (81) | 0 | 0 | (81) |
Stock-based compensation expense | $ 0 | 4,941 | 0 | 0 | 4,941 |
Repurchases of common stock (in shares) | (14,000) | | | | |
Net income | $ 0 | 0 | 12,915 | 0 | 12,915 |
Other comprehensive loss | | | | | |
Foreign currency translation adjustment | 0 | 0 | 0 | 2,030 | 2,030 |
Net unrealized gains (losses) on investments in securities | 0 | 0 | 0 | (49) | (49) |
Comprehensive income (loss) | | | | | 14,896 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 85,317 | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (81) | 0 | 0 | (81) |
Stock-based compensation expense | $ 0 | 4,941 | 0 | 0 | 4,941 |
Repurchases of common stock (in shares) | (14,000) | | | | |
Repurchases of common stock | $ 0 | (149) | (1,061) | 0 | (1,210) |
Net income | $ 0 | 0 | 12,915 | 0 | 12,915 |
Balance (in shares) at Mar. 31, 2021 | 27,689,746 | | | | |
Balance at Mar. 31, 2021 | $ 28 | 456,886 | 366,613 | (10,096) | 813,431 |
Balance (in shares) at Jun. 30, 2021 | 27,761,063 | | | | |
Balance at Jun. 30, 2021 | $ 28 | 461,597 | 378,467 | (8,115) | 831,977 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | 0 | 0 | 0 | 0 | 0 |
Stock-based compensation expense | $ 0 | 4,978 | 0 | 0 | 4,978 |
Repurchases of common stock (in shares) | (157,414) | | | | |
Net income | $ 0 | 0 | 4,835 | 0 | 4,835 |
Other comprehensive loss | | | | | |
Foreign currency translation adjustment | 0 | 0 | 0 | (5,298) | (5,298) |
Net unrealized gains (losses) on investments in securities | 0 | 0 | 0 | (45) | (45) |
Comprehensive income (loss) | | | | | (508) |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | 0 | 0 | 0 | 0 | 0 |
Stock-based compensation expense | $ 0 | 4,978 | 0 | 0 | 4,978 |
Repurchases of common stock (in shares) | (157,414) | | | | |
Repurchases of common stock | $ 0 | (1,675) | (10,151) | 0 | (11,826) |
Net income | $ 0 | 0 | 4,835 | 0 | 4,835 |
Balance (in shares) at Jun. 30, 2021 | 27,761,063 | | | | |
Balance at Jun. 30, 2021 | $ 28 | 461,597 | 378,467 | (8,115) | 831,977 |
Balance (in shares) at Sep. 30, 2021 | 27,603,649 | | | | |
Balance at Sep. 30, 2021 | $ 28 | 464,900 | 373,151 | (13,458) | $ 824,621 |
Balance (in shares) at Dec. 31, 2021 | 27,465,945 | | | | 27,465,945 |
Balance at Dec. 31, 2021 | $ 28 | 468,548 | 376,734 | (16,817) | $ 828,493 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 27,716 | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | | (462) | | | (462) |
Stock-based compensation expense | | 4,397 | | | 4,397 |
Repurchases of common stock (in shares) | 0 | | | | |
Net income | | | 5,095 | | 5,095 |
Other comprehensive loss | | | | | |
Foreign currency translation adjustment | | | | (4,972) | (4,972) |
Net unrealized gains (losses) on investments in securities | | | | (516) | (516) |
Comprehensive income (loss) | | | | | (393) |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 27,716 | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | | (462) | | | (462) |
Stock-based compensation expense | | 4,397 | | | 4,397 |
Repurchases of common stock (in shares) | 0 | | | | |
Net income | | | 5,095 | | $ 5,095 |
Balance (in shares) at Dec. 31, 2021 | 27,465,945 | | | | 27,465,945 |
Balance at Dec. 31, 2021 | $ 28 | 468,548 | 376,734 | (16,817) | $ 828,493 |
Balance (in shares) at Mar. 31, 2022 | 27,493,661 | | | | |
Balance at Mar. 31, 2022 | $ 28 | 472,483 | 381,829 | (22,305) | $ 832,035 |
Balance (in shares) at Dec. 31, 2021 | 27,465,945 | | | | 27,465,945 |
Balance at Dec. 31, 2021 | $ 28 | 468,548 | 376,734 | (16,817) | $ 828,493 |
Net income | | | | | 11,603 |
Other comprehensive loss | | | | | |
Comprehensive income (loss) | | | | | (18,604) |
Net income | | | | | $ 11,603 |
Balance (in shares) at Dec. 31, 2021 | 27,465,945 | | | | 27,465,945 |
Balance at Dec. 31, 2021 | $ 28 | 468,548 | 376,734 | (16,817) | $ 828,493 |
Balance (in shares) at Sep. 30, 2022 | 27,326,750 | | | | 27,326,750 |
Balance at Sep. 30, 2022 | $ 28 | 477,107 | 380,735 | (47,024) | $ 810,846 |
Balance (in shares) at Mar. 31, 2022 | 27,493,661 | | | | |
Balance at Mar. 31, 2022 | $ 28 | 472,483 | 381,829 | (22,305) | 832,035 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 122,705 | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 1,158 | 0 | 0 | 1,158 |
Stock-based compensation expense | $ 0 | 4,031 | 0 | 0 | 4,031 |
Repurchases of common stock (in shares) | (113,266) | | | | |
Net income | $ 0 | 0 | 2,557 | 0 | 2,557 |
Other comprehensive loss | | | | | |
Foreign currency translation adjustment | 0 | 0 | 0 | (13,515) | (13,515) |
Net unrealized gains (losses) on investments in securities | 0 | 0 | 0 | (329) | (329) |
Comprehensive income (loss) | | | | | (11,287) |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 122,705 | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 1,158 | 0 | 0 | 1,158 |
Stock-based compensation expense | $ 0 | 4,031 | 0 | 0 | 4,031 |
Repurchases of common stock (in shares) | (113,266) | | | | |
Repurchases of common stock | $ 0 | (1,932) | (3,307) | 0 | (5,239) |
Net income | $ 0 | 0 | 2,557 | 0 | 2,557 |
Balance (in shares) at Mar. 31, 2022 | 27,493,661 | | | | |
Balance at Mar. 31, 2022 | $ 28 | 472,483 | 381,829 | (22,305) | 832,035 |
Balance (in shares) at Jun. 30, 2022 | 27,503,100 | | | | |
Balance at Jun. 30, 2022 | $ 28 | 475,740 | 381,079 | (36,149) | 820,698 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 31,150 | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 0 | 0 | 0 | 0 |
Stock-based compensation expense | $ 0 | 4,907 | 0 | 0 | 4,907 |
Repurchases of common stock (in shares) | (207,500) | | | | |
Net income | $ 0 | | 3,951 | 0 | 3,951 |
Other comprehensive loss | | | | | |
Foreign currency translation adjustment | 0 | 0 | 0 | (10,287) | (10,287) |
Net unrealized gains (losses) on investments in securities | 0 | 0 | 0 | (588) | (588) |
Comprehensive income (loss) | | | | | (6,924) |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 31,150 | | | | |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 0 | 0 | 0 | 0 |
Stock-based compensation expense | $ 0 | 4,907 | 0 | 0 | 4,907 |
Repurchases of common stock (in shares) | (207,500) | | | | |
Repurchases of common stock | $ 0 | (3,540) | (4,295) | 0 | (7,835) |
Net income | $ 0 | | 3,951 | 0 | 3,951 |
Balance (in shares) at Jun. 30, 2022 | 27,503,100 | | | | |
Balance at Jun. 30, 2022 | $ 28 | 475,740 | 381,079 | (36,149) | $ 820,698 |
Balance (in shares) at Sep. 30, 2022 | 27,326,750 | | | | 27,326,750 |
Balance at Sep. 30, 2022 | $ 28 | $ 477,107 | $ 380,735 | $ (47,024) | $ 810,846 |