| Schedule of Earnings Per Share, Basic and Diluted |
Basic and diluted net (loss) income per share is calculated as follows (in thousands, except share and per share amounts): | | | | | | | | | | | | | | | | | | | | | | | | | Three months ended June 30, | | Six months ended June 30, | | 2026 | | 2025 | | 2026 | | 2025 | | Numerator: | | | | | | | | | Net (loss) income | $ | (1,229) | | | $ | 2,490 | | | $ | (11,551) | | | $ | 3,045 | | | Denominator: | | | | | | | | | Weighted average shares of common stock outstanding, basic | 23,280,652 | | 28,479,977 | | 23,710,471 | | 29,623,352 | | Plus: dilutive effect of stock options | — | | | 1,772,789 | | — | | 1,970,711 | | Plus: dilutive effect of RSUs | — | | | 172,127 | | — | | 213,792 | | Plus: dilutive effect of ESPP | — | | | 8,626 | | — | | | 11,962 | | Weighted average common shares outstanding, diluted | 23,280,652 | | 30,433,519 | | 23,710,471 | | 31,819,817 | | Net (loss) income per share, basic | $ | (0.05) | | | $ | 0.09 | | | $ | (0.49) | | | $ | 0.10 | | | Net (loss) income per share, diluted | $ | (0.05) | | | $ | 0.08 | | | $ | (0.49) | | | $ | 0.10 | |
|
| Schedule of Antidilutive Securities Excluded from Computation of Earnings Per Share |
The following potentially dilutive common shares, presented based on amounts outstanding, were excluded from the computation of diluted net (loss) income per share because their effect would have been antidilutive for the periods presented: | | | | | | | | | | | | | | | | | | | | | | | | | Three months ended June 30, | | Six months ended June 30, | | 2026 | | 2025 | | 2026 | | 2025 | | Stock options | 2,298,375 | | | 26,909 | | | 2,377,546 | | | 13,455 | | | RSUs | 4,464,412 | | | 1,529,118 | | | 4,532,766 | | | 1,309,617 | | | ESPP | 57,370 | | | — | | | 66,189 | | | — | | | Common stock warrant | 4,121,034 | | | 4,121,034 | | | 4,121,034 | | | 4,121,034 | | | Total shares excluded from diluted net (loss) income per share | 10,941,191 | | | 5,677,061 | | | 11,097,535 | | | 5,444,106 | |
|