texlite 0.8.3 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +83 -9
- package/OPERATIONS.md +19 -2
- package/dist/client/assets/AdminUsers-3CHb5012.js +1 -0
- package/dist/client/assets/CitationLibraryDialog-zPpsUhWJ.js +1 -0
- package/dist/client/assets/Dashboard-CWfSLzD3.js +2 -0
- package/dist/client/assets/GitDialog-BUU2U_LV.js +3 -0
- package/dist/client/assets/HistoryDialog-B6aopsrw.js +7 -0
- package/dist/client/assets/{LatexEditor-2BD2xa8h.js → LatexEditor-CM445Tk0.js} +2 -2
- package/dist/client/assets/PdfPreview-BFVNczSk.js +1 -0
- package/dist/client/assets/ProjectIconPickerDialog-Cf0zBf8u.js +1 -0
- package/dist/client/assets/ProjectNavigationDialogs-TPbe11iR.js +1 -0
- package/dist/client/assets/ProjectSettings-CDQvIlQ4.js +1 -0
- package/dist/client/assets/ProjectWorkspace-C6GrvKN6.js +27 -0
- package/dist/client/assets/SelectionHistoryDialog-CyE0_YDs.js +3 -0
- package/dist/client/assets/SystemMetricsDialog-CuqHPUnn.js +1 -0
- package/dist/client/assets/TagManagementDialog-gRLM3lLx.js +1 -0
- package/dist/client/assets/WordCountDialog-B4PI0vEk.js +1 -0
- package/dist/client/assets/check-BXvzrdoz.js +1 -0
- package/dist/client/assets/chevron-left-BB5MYb7g.js +1 -0
- package/dist/client/assets/citationLibrary-ZeQPCv5O.js +26 -0
- package/dist/client/assets/hard-drive-6uYFyezl.js +1 -0
- package/dist/client/assets/index-BRT5O-Hg.js +5 -0
- package/dist/client/assets/index-C0t11tlT.js +14 -0
- package/dist/client/assets/index-DXWp2bzM.css +1 -0
- package/dist/client/assets/key-round-DOAxDSfz.js +1 -0
- package/dist/client/assets/minimize-2-BWtbag2I.js +1 -0
- package/dist/client/assets/{minus-DK3ejRQp.js → minus-9eVJnugf.js} +1 -1
- package/dist/client/assets/plus-BGXipRoG.js +1 -0
- package/dist/client/assets/{react-BoEjKzFZ.js → react-BVUjbTTn.js} +1 -1
- package/dist/client/assets/refresh-cw-Dvp3O90f.js +1 -0
- package/dist/client/assets/search-b1ORp1k8.js +1 -0
- package/dist/client/assets/sigma-Bk0_MzWi.js +1 -0
- package/dist/client/assets/{spellCheck-BAgtQ60E.js → spellCheck-BJjWgnef.js} +1 -1
- package/dist/client/assets/tags-JAkbmWns.js +1 -0
- package/dist/client/assets/type-CE2DYkPH.js +1 -0
- package/dist/client/assets/user-plus-CKalKSsw.js +1 -0
- package/dist/client/assets/x-Bq29njHL.js +1 -0
- package/dist/client/index.html +3 -3
- package/dist/server/app.js +45 -4
- package/dist/server/cli.js +4 -0
- package/dist/server/collaboration.js +231 -12
- package/dist/server/commentMentions.js +139 -0
- package/dist/server/config.js +9 -2
- package/dist/server/db.js +63 -1
- package/dist/server/editHistory.js +411 -0
- package/dist/server/editHistoryRetry.js +90 -0
- package/dist/server/history.js +136 -20
- package/dist/server/historyRetention.js +37 -0
- package/dist/server/i18n.js +4 -0
- package/dist/server/index.js +6 -0
- package/dist/server/latexCompletion.js +37 -10
- package/dist/server/logRotation.js +82 -0
- package/dist/server/lucideIcons.js +37 -38
- package/dist/server/pm2.js +7 -0
- package/dist/server/projects.js +34 -12
- package/dist/server/routes/comments.js +107 -16
- package/dist/server/routes/projectHistory.js +93 -7
- package/dist/server/routes/projectShared.js +2 -1
- package/dist/server/routes/projects.js +3 -1
- package/dist/shared/lucide-icons/a-arrow-down.svg +1 -0
- package/dist/shared/lucide-icons/a-arrow-up.svg +1 -0
- package/dist/shared/lucide-icons/a-large-small.svg +1 -0
- package/dist/shared/lucide-icons/accessibility.svg +1 -0
- package/dist/shared/lucide-icons/activity.svg +1 -0
- package/dist/shared/lucide-icons/air-vent.svg +1 -0
- package/dist/shared/lucide-icons/airplay.svg +1 -0
- package/dist/shared/lucide-icons/alarm-clock-check.svg +1 -0
- package/dist/shared/lucide-icons/alarm-clock-minus.svg +1 -0
- package/dist/shared/lucide-icons/alarm-clock-off.svg +1 -0
- package/dist/shared/lucide-icons/alarm-clock-plus.svg +1 -0
- package/dist/shared/lucide-icons/alarm-clock.svg +1 -0
- package/dist/shared/lucide-icons/alarm-smoke.svg +1 -0
- package/dist/shared/lucide-icons/album.svg +1 -0
- package/dist/shared/lucide-icons/align-center-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/align-center-vertical.svg +1 -0
- package/dist/shared/lucide-icons/align-center.svg +1 -0
- package/dist/shared/lucide-icons/align-end-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/align-end-vertical.svg +1 -0
- package/dist/shared/lucide-icons/align-horizontal-distribute-center.svg +1 -0
- package/dist/shared/lucide-icons/align-horizontal-distribute-end.svg +1 -0
- package/dist/shared/lucide-icons/align-horizontal-distribute-start.svg +1 -0
- package/dist/shared/lucide-icons/align-horizontal-justify-center.svg +1 -0
- package/dist/shared/lucide-icons/align-horizontal-justify-end.svg +1 -0
- package/dist/shared/lucide-icons/align-horizontal-justify-start.svg +1 -0
- package/dist/shared/lucide-icons/align-horizontal-space-around.svg +1 -0
- package/dist/shared/lucide-icons/align-horizontal-space-between.svg +1 -0
- package/dist/shared/lucide-icons/align-justify.svg +1 -0
- package/dist/shared/lucide-icons/align-left.svg +1 -0
- package/dist/shared/lucide-icons/align-right.svg +1 -0
- package/dist/shared/lucide-icons/align-start-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/align-start-vertical.svg +1 -0
- package/dist/shared/lucide-icons/align-vertical-distribute-center.svg +1 -0
- package/dist/shared/lucide-icons/align-vertical-distribute-end.svg +1 -0
- package/dist/shared/lucide-icons/align-vertical-distribute-start.svg +1 -0
- package/dist/shared/lucide-icons/align-vertical-justify-center.svg +1 -0
- package/dist/shared/lucide-icons/align-vertical-justify-end.svg +1 -0
- package/dist/shared/lucide-icons/align-vertical-justify-start.svg +1 -0
- package/dist/shared/lucide-icons/align-vertical-space-around.svg +1 -0
- package/dist/shared/lucide-icons/align-vertical-space-between.svg +1 -0
- package/dist/shared/lucide-icons/ambulance.svg +1 -0
- package/dist/shared/lucide-icons/ampersand.svg +1 -0
- package/dist/shared/lucide-icons/ampersands.svg +1 -0
- package/dist/shared/lucide-icons/amphora.svg +1 -0
- package/dist/shared/lucide-icons/anchor.svg +1 -0
- package/dist/shared/lucide-icons/angry.svg +1 -0
- package/dist/shared/lucide-icons/annoyed.svg +1 -0
- package/dist/shared/lucide-icons/antenna.svg +1 -0
- package/dist/shared/lucide-icons/anvil.svg +1 -0
- package/dist/shared/lucide-icons/aperture.svg +1 -0
- package/dist/shared/lucide-icons/app-window-mac.svg +1 -0
- package/dist/shared/lucide-icons/app-window.svg +1 -0
- package/dist/shared/lucide-icons/apple.svg +1 -0
- package/dist/shared/lucide-icons/archive-restore.svg +1 -0
- package/dist/shared/lucide-icons/archive-x.svg +1 -0
- package/dist/shared/lucide-icons/archive.svg +1 -0
- package/dist/shared/lucide-icons/armchair.svg +1 -0
- package/dist/shared/lucide-icons/arrow-big-down-dash.svg +1 -0
- package/dist/shared/lucide-icons/arrow-big-down.svg +1 -0
- package/dist/shared/lucide-icons/arrow-big-left-dash.svg +1 -0
- package/dist/shared/lucide-icons/arrow-big-left.svg +1 -0
- package/dist/shared/lucide-icons/arrow-big-right-dash.svg +1 -0
- package/dist/shared/lucide-icons/arrow-big-right.svg +1 -0
- package/dist/shared/lucide-icons/arrow-big-up-dash.svg +1 -0
- package/dist/shared/lucide-icons/arrow-big-up.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down-az.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down-from-line.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down-left.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down-narrow-wide.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down-right.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down-to-dot.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down-to-line.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down-up.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down-wide-narrow.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down-za.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down01.svg +1 -0
- package/dist/shared/lucide-icons/arrow-down10.svg +1 -0
- package/dist/shared/lucide-icons/arrow-left-from-line.svg +1 -0
- package/dist/shared/lucide-icons/arrow-left-right.svg +1 -0
- package/dist/shared/lucide-icons/arrow-left-to-line.svg +1 -0
- package/dist/shared/lucide-icons/arrow-left.svg +1 -0
- package/dist/shared/lucide-icons/arrow-right-from-line.svg +1 -0
- package/dist/shared/lucide-icons/arrow-right-left.svg +1 -0
- package/dist/shared/lucide-icons/arrow-right-to-line.svg +1 -0
- package/dist/shared/lucide-icons/arrow-right.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up-az.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up-down.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up-from-dot.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up-from-line.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up-left.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up-narrow-wide.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up-right.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up-to-line.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up-wide-narrow.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up-za.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up01.svg +1 -0
- package/dist/shared/lucide-icons/arrow-up10.svg +1 -0
- package/dist/shared/lucide-icons/arrows-up-from-line.svg +1 -0
- package/dist/shared/lucide-icons/asterisk.svg +1 -0
- package/dist/shared/lucide-icons/at-sign.svg +1 -0
- package/dist/shared/lucide-icons/atom.svg +1 -0
- package/dist/shared/lucide-icons/audio-lines.svg +1 -0
- package/dist/shared/lucide-icons/audio-waveform.svg +1 -0
- package/dist/shared/lucide-icons/award.svg +1 -0
- package/dist/shared/lucide-icons/axe.svg +1 -0
- package/dist/shared/lucide-icons/axis3d.svg +1 -0
- package/dist/shared/lucide-icons/baby.svg +1 -0
- package/dist/shared/lucide-icons/backpack.svg +1 -0
- package/dist/shared/lucide-icons/badge-alert.svg +1 -0
- package/dist/shared/lucide-icons/badge-cent.svg +1 -0
- package/dist/shared/lucide-icons/badge-check.svg +1 -0
- package/dist/shared/lucide-icons/badge-dollar-sign.svg +1 -0
- package/dist/shared/lucide-icons/badge-euro.svg +1 -0
- package/dist/shared/lucide-icons/badge-help.svg +1 -0
- package/dist/shared/lucide-icons/badge-indian-rupee.svg +1 -0
- package/dist/shared/lucide-icons/badge-info.svg +1 -0
- package/dist/shared/lucide-icons/badge-japanese-yen.svg +1 -0
- package/dist/shared/lucide-icons/badge-minus.svg +1 -0
- package/dist/shared/lucide-icons/badge-percent.svg +1 -0
- package/dist/shared/lucide-icons/badge-plus.svg +1 -0
- package/dist/shared/lucide-icons/badge-pound-sterling.svg +1 -0
- package/dist/shared/lucide-icons/badge-russian-ruble.svg +1 -0
- package/dist/shared/lucide-icons/badge-swiss-franc.svg +1 -0
- package/dist/shared/lucide-icons/badge-x.svg +1 -0
- package/dist/shared/lucide-icons/badge.svg +1 -0
- package/dist/shared/lucide-icons/baggage-claim.svg +1 -0
- package/dist/shared/lucide-icons/ban.svg +1 -0
- package/dist/shared/lucide-icons/banana.svg +1 -0
- package/dist/shared/lucide-icons/bandage.svg +1 -0
- package/dist/shared/lucide-icons/banknote.svg +1 -0
- package/dist/shared/lucide-icons/barcode.svg +1 -0
- package/dist/shared/lucide-icons/baseline.svg +1 -0
- package/dist/shared/lucide-icons/bath.svg +1 -0
- package/dist/shared/lucide-icons/battery-charging.svg +1 -0
- package/dist/shared/lucide-icons/battery-full.svg +1 -0
- package/dist/shared/lucide-icons/battery-low.svg +1 -0
- package/dist/shared/lucide-icons/battery-medium.svg +1 -0
- package/dist/shared/lucide-icons/battery-warning.svg +1 -0
- package/dist/shared/lucide-icons/battery.svg +1 -0
- package/dist/shared/lucide-icons/beaker.svg +1 -0
- package/dist/shared/lucide-icons/bean-off.svg +1 -0
- package/dist/shared/lucide-icons/bean.svg +1 -0
- package/dist/shared/lucide-icons/bed-double.svg +1 -0
- package/dist/shared/lucide-icons/bed-single.svg +1 -0
- package/dist/shared/lucide-icons/bed.svg +1 -0
- package/dist/shared/lucide-icons/beef.svg +1 -0
- package/dist/shared/lucide-icons/beer-off.svg +1 -0
- package/dist/shared/lucide-icons/beer.svg +1 -0
- package/dist/shared/lucide-icons/bell-dot.svg +1 -0
- package/dist/shared/lucide-icons/bell-electric.svg +1 -0
- package/dist/shared/lucide-icons/bell-minus.svg +1 -0
- package/dist/shared/lucide-icons/bell-off.svg +1 -0
- package/dist/shared/lucide-icons/bell-plus.svg +1 -0
- package/dist/shared/lucide-icons/bell-ring.svg +1 -0
- package/dist/shared/lucide-icons/bell.svg +1 -0
- package/dist/shared/lucide-icons/between-horizontal-end.svg +1 -0
- package/dist/shared/lucide-icons/between-horizontal-start.svg +1 -0
- package/dist/shared/lucide-icons/between-vertical-end.svg +1 -0
- package/dist/shared/lucide-icons/between-vertical-start.svg +1 -0
- package/dist/shared/lucide-icons/biceps-flexed.svg +1 -0
- package/dist/shared/lucide-icons/bike.svg +1 -0
- package/dist/shared/lucide-icons/binary.svg +1 -0
- package/dist/shared/lucide-icons/binoculars.svg +1 -0
- package/dist/shared/lucide-icons/biohazard.svg +1 -0
- package/dist/shared/lucide-icons/bird.svg +1 -0
- package/dist/shared/lucide-icons/bitcoin.svg +1 -0
- package/dist/shared/lucide-icons/blend.svg +1 -0
- package/dist/shared/lucide-icons/blinds.svg +1 -0
- package/dist/shared/lucide-icons/blocks.svg +1 -0
- package/dist/shared/lucide-icons/bluetooth-connected.svg +1 -0
- package/dist/shared/lucide-icons/bluetooth-off.svg +1 -0
- package/dist/shared/lucide-icons/bluetooth-searching.svg +1 -0
- package/dist/shared/lucide-icons/bluetooth.svg +1 -0
- package/dist/shared/lucide-icons/bold.svg +1 -0
- package/dist/shared/lucide-icons/bolt.svg +1 -0
- package/dist/shared/lucide-icons/bomb.svg +1 -0
- package/dist/shared/lucide-icons/bone.svg +1 -0
- package/dist/shared/lucide-icons/book-a.svg +1 -0
- package/dist/shared/lucide-icons/book-audio.svg +1 -0
- package/dist/shared/lucide-icons/book-check.svg +1 -0
- package/dist/shared/lucide-icons/book-copy.svg +1 -0
- package/dist/shared/lucide-icons/book-dashed.svg +1 -0
- package/dist/shared/lucide-icons/book-down.svg +1 -0
- package/dist/shared/lucide-icons/book-headphones.svg +1 -0
- package/dist/shared/lucide-icons/book-heart.svg +1 -0
- package/dist/shared/lucide-icons/book-image.svg +1 -0
- package/dist/shared/lucide-icons/book-key.svg +1 -0
- package/dist/shared/lucide-icons/book-lock.svg +1 -0
- package/dist/shared/lucide-icons/book-marked.svg +1 -0
- package/dist/shared/lucide-icons/book-minus.svg +1 -0
- package/dist/shared/lucide-icons/book-open-check.svg +1 -0
- package/dist/shared/lucide-icons/book-open-text.svg +1 -0
- package/dist/shared/lucide-icons/book-open.svg +1 -0
- package/dist/shared/lucide-icons/book-plus.svg +1 -0
- package/dist/shared/lucide-icons/book-text.svg +1 -0
- package/dist/shared/lucide-icons/book-type.svg +1 -0
- package/dist/shared/lucide-icons/book-up.svg +1 -0
- package/dist/shared/lucide-icons/book-up2.svg +1 -0
- package/dist/shared/lucide-icons/book-user.svg +1 -0
- package/dist/shared/lucide-icons/book-x.svg +1 -0
- package/dist/shared/lucide-icons/book.svg +1 -0
- package/dist/shared/lucide-icons/bookmark-check.svg +1 -0
- package/dist/shared/lucide-icons/bookmark-minus.svg +1 -0
- package/dist/shared/lucide-icons/bookmark-plus.svg +1 -0
- package/dist/shared/lucide-icons/bookmark-x.svg +1 -0
- package/dist/shared/lucide-icons/bookmark.svg +1 -0
- package/dist/shared/lucide-icons/boom-box.svg +1 -0
- package/dist/shared/lucide-icons/bot-message-square.svg +1 -0
- package/dist/shared/lucide-icons/bot-off.svg +1 -0
- package/dist/shared/lucide-icons/bot.svg +1 -0
- package/dist/shared/lucide-icons/box.svg +1 -0
- package/dist/shared/lucide-icons/boxes.svg +1 -0
- package/dist/shared/lucide-icons/braces.svg +1 -0
- package/dist/shared/lucide-icons/brackets.svg +1 -0
- package/dist/shared/lucide-icons/brain-circuit.svg +1 -0
- package/dist/shared/lucide-icons/brain-cog.svg +1 -0
- package/dist/shared/lucide-icons/brain.svg +1 -0
- package/dist/shared/lucide-icons/brick-wall.svg +1 -0
- package/dist/shared/lucide-icons/briefcase-business.svg +1 -0
- package/dist/shared/lucide-icons/briefcase-conveyor-belt.svg +1 -0
- package/dist/shared/lucide-icons/briefcase-medical.svg +1 -0
- package/dist/shared/lucide-icons/briefcase.svg +1 -0
- package/dist/shared/lucide-icons/bring-to-front.svg +1 -0
- package/dist/shared/lucide-icons/brush.svg +1 -0
- package/dist/shared/lucide-icons/bug-off.svg +1 -0
- package/dist/shared/lucide-icons/bug-play.svg +1 -0
- package/dist/shared/lucide-icons/bug.svg +1 -0
- package/dist/shared/lucide-icons/building.svg +1 -0
- package/dist/shared/lucide-icons/building2.svg +1 -0
- package/dist/shared/lucide-icons/bus-front.svg +1 -0
- package/dist/shared/lucide-icons/bus.svg +1 -0
- package/dist/shared/lucide-icons/cable-car.svg +1 -0
- package/dist/shared/lucide-icons/cable.svg +1 -0
- package/dist/shared/lucide-icons/cake-slice.svg +1 -0
- package/dist/shared/lucide-icons/cake.svg +1 -0
- package/dist/shared/lucide-icons/calculator.svg +1 -0
- package/dist/shared/lucide-icons/calendar-arrow-down.svg +1 -0
- package/dist/shared/lucide-icons/calendar-arrow-up.svg +1 -0
- package/dist/shared/lucide-icons/calendar-check.svg +1 -0
- package/dist/shared/lucide-icons/calendar-check2.svg +1 -0
- package/dist/shared/lucide-icons/calendar-clock.svg +1 -0
- package/dist/shared/lucide-icons/calendar-cog.svg +1 -0
- package/dist/shared/lucide-icons/calendar-days.svg +1 -0
- package/dist/shared/lucide-icons/calendar-fold.svg +1 -0
- package/dist/shared/lucide-icons/calendar-heart.svg +1 -0
- package/dist/shared/lucide-icons/calendar-minus.svg +1 -0
- package/dist/shared/lucide-icons/calendar-minus2.svg +1 -0
- package/dist/shared/lucide-icons/calendar-off.svg +1 -0
- package/dist/shared/lucide-icons/calendar-plus.svg +1 -0
- package/dist/shared/lucide-icons/calendar-plus2.svg +1 -0
- package/dist/shared/lucide-icons/calendar-range.svg +1 -0
- package/dist/shared/lucide-icons/calendar-search.svg +1 -0
- package/dist/shared/lucide-icons/calendar-sync.svg +1 -0
- package/dist/shared/lucide-icons/calendar-x.svg +1 -0
- package/dist/shared/lucide-icons/calendar-x2.svg +1 -0
- package/dist/shared/lucide-icons/calendar.svg +1 -0
- package/dist/shared/lucide-icons/calendar1.svg +1 -0
- package/dist/shared/lucide-icons/camera-off.svg +1 -0
- package/dist/shared/lucide-icons/camera.svg +1 -0
- package/dist/shared/lucide-icons/candy-cane.svg +1 -0
- package/dist/shared/lucide-icons/candy-off.svg +1 -0
- package/dist/shared/lucide-icons/candy.svg +1 -0
- package/dist/shared/lucide-icons/cannabis.svg +1 -0
- package/dist/shared/lucide-icons/captions-off.svg +1 -0
- package/dist/shared/lucide-icons/captions.svg +1 -0
- package/dist/shared/lucide-icons/car-front.svg +1 -0
- package/dist/shared/lucide-icons/car-taxi-front.svg +1 -0
- package/dist/shared/lucide-icons/car.svg +1 -0
- package/dist/shared/lucide-icons/caravan.svg +1 -0
- package/dist/shared/lucide-icons/carrot.svg +1 -0
- package/dist/shared/lucide-icons/case-lower.svg +1 -0
- package/dist/shared/lucide-icons/case-sensitive.svg +1 -0
- package/dist/shared/lucide-icons/case-upper.svg +1 -0
- package/dist/shared/lucide-icons/cassette-tape.svg +1 -0
- package/dist/shared/lucide-icons/cast.svg +1 -0
- package/dist/shared/lucide-icons/castle.svg +1 -0
- package/dist/shared/lucide-icons/cat.svg +1 -0
- package/dist/shared/lucide-icons/cctv.svg +1 -0
- package/dist/shared/lucide-icons/chart-area.svg +1 -0
- package/dist/shared/lucide-icons/chart-bar-big.svg +1 -0
- package/dist/shared/lucide-icons/chart-bar-decreasing.svg +1 -0
- package/dist/shared/lucide-icons/chart-bar-increasing.svg +1 -0
- package/dist/shared/lucide-icons/chart-bar-stacked.svg +1 -0
- package/dist/shared/lucide-icons/chart-bar.svg +1 -0
- package/dist/shared/lucide-icons/chart-candlestick.svg +1 -0
- package/dist/shared/lucide-icons/chart-column-big.svg +1 -0
- package/dist/shared/lucide-icons/chart-column-decreasing.svg +1 -0
- package/dist/shared/lucide-icons/chart-column-increasing.svg +1 -0
- package/dist/shared/lucide-icons/chart-column-stacked.svg +1 -0
- package/dist/shared/lucide-icons/chart-column.svg +1 -0
- package/dist/shared/lucide-icons/chart-gantt.svg +1 -0
- package/dist/shared/lucide-icons/chart-line.svg +1 -0
- package/dist/shared/lucide-icons/chart-network.svg +1 -0
- package/dist/shared/lucide-icons/chart-no-axes-column-decreasing.svg +1 -0
- package/dist/shared/lucide-icons/chart-no-axes-column-increasing.svg +1 -0
- package/dist/shared/lucide-icons/chart-no-axes-column.svg +1 -0
- package/dist/shared/lucide-icons/chart-no-axes-combined.svg +1 -0
- package/dist/shared/lucide-icons/chart-no-axes-gantt.svg +1 -0
- package/dist/shared/lucide-icons/chart-pie.svg +1 -0
- package/dist/shared/lucide-icons/chart-scatter.svg +1 -0
- package/dist/shared/lucide-icons/chart-spline.svg +1 -0
- package/dist/shared/lucide-icons/check-check.svg +1 -0
- package/dist/shared/lucide-icons/check.svg +1 -0
- package/dist/shared/lucide-icons/chef-hat.svg +1 -0
- package/dist/shared/lucide-icons/cherry.svg +1 -0
- package/dist/shared/lucide-icons/chevron-down.svg +1 -0
- package/dist/shared/lucide-icons/chevron-first.svg +1 -0
- package/dist/shared/lucide-icons/chevron-last.svg +1 -0
- package/dist/shared/lucide-icons/chevron-left.svg +1 -0
- package/dist/shared/lucide-icons/chevron-right.svg +1 -0
- package/dist/shared/lucide-icons/chevron-up.svg +1 -0
- package/dist/shared/lucide-icons/chevrons-down-up.svg +1 -0
- package/dist/shared/lucide-icons/chevrons-down.svg +1 -0
- package/dist/shared/lucide-icons/chevrons-left-right-ellipsis.svg +1 -0
- package/dist/shared/lucide-icons/chevrons-left-right.svg +1 -0
- package/dist/shared/lucide-icons/chevrons-left.svg +1 -0
- package/dist/shared/lucide-icons/chevrons-right-left.svg +1 -0
- package/dist/shared/lucide-icons/chevrons-right.svg +1 -0
- package/dist/shared/lucide-icons/chevrons-up-down.svg +1 -0
- package/dist/shared/lucide-icons/chevrons-up.svg +1 -0
- package/dist/shared/lucide-icons/chrome.svg +1 -0
- package/dist/shared/lucide-icons/church.svg +1 -0
- package/dist/shared/lucide-icons/cigarette-off.svg +1 -0
- package/dist/shared/lucide-icons/cigarette.svg +1 -0
- package/dist/shared/lucide-icons/circle-alert.svg +1 -0
- package/dist/shared/lucide-icons/circle-arrow-down.svg +1 -0
- package/dist/shared/lucide-icons/circle-arrow-left.svg +1 -0
- package/dist/shared/lucide-icons/circle-arrow-out-down-left.svg +1 -0
- package/dist/shared/lucide-icons/circle-arrow-out-down-right.svg +1 -0
- package/dist/shared/lucide-icons/circle-arrow-out-up-left.svg +1 -0
- package/dist/shared/lucide-icons/circle-arrow-out-up-right.svg +1 -0
- package/dist/shared/lucide-icons/circle-arrow-right.svg +1 -0
- package/dist/shared/lucide-icons/circle-arrow-up.svg +1 -0
- package/dist/shared/lucide-icons/circle-check-big.svg +1 -0
- package/dist/shared/lucide-icons/circle-check.svg +1 -0
- package/dist/shared/lucide-icons/circle-chevron-down.svg +1 -0
- package/dist/shared/lucide-icons/circle-chevron-left.svg +1 -0
- package/dist/shared/lucide-icons/circle-chevron-right.svg +1 -0
- package/dist/shared/lucide-icons/circle-chevron-up.svg +1 -0
- package/dist/shared/lucide-icons/circle-dashed.svg +1 -0
- package/dist/shared/lucide-icons/circle-divide.svg +1 -0
- package/dist/shared/lucide-icons/circle-dollar-sign.svg +1 -0
- package/dist/shared/lucide-icons/circle-dot-dashed.svg +1 -0
- package/dist/shared/lucide-icons/circle-dot.svg +1 -0
- package/dist/shared/lucide-icons/circle-ellipsis.svg +1 -0
- package/dist/shared/lucide-icons/circle-equal.svg +1 -0
- package/dist/shared/lucide-icons/circle-fading-arrow-up.svg +1 -0
- package/dist/shared/lucide-icons/circle-fading-plus.svg +1 -0
- package/dist/shared/lucide-icons/circle-gauge.svg +1 -0
- package/dist/shared/lucide-icons/circle-help.svg +1 -0
- package/dist/shared/lucide-icons/circle-minus.svg +1 -0
- package/dist/shared/lucide-icons/circle-off.svg +1 -0
- package/dist/shared/lucide-icons/circle-parking-off.svg +1 -0
- package/dist/shared/lucide-icons/circle-parking.svg +1 -0
- package/dist/shared/lucide-icons/circle-pause.svg +1 -0
- package/dist/shared/lucide-icons/circle-percent.svg +1 -0
- package/dist/shared/lucide-icons/circle-play.svg +1 -0
- package/dist/shared/lucide-icons/circle-plus.svg +1 -0
- package/dist/shared/lucide-icons/circle-power.svg +1 -0
- package/dist/shared/lucide-icons/circle-slash.svg +1 -0
- package/dist/shared/lucide-icons/circle-slash2.svg +1 -0
- package/dist/shared/lucide-icons/circle-stop.svg +1 -0
- package/dist/shared/lucide-icons/circle-user-round.svg +1 -0
- package/dist/shared/lucide-icons/circle-user.svg +1 -0
- package/dist/shared/lucide-icons/circle-x.svg +1 -0
- package/dist/shared/lucide-icons/circle.svg +1 -0
- package/dist/shared/lucide-icons/circuit-board.svg +1 -0
- package/dist/shared/lucide-icons/citrus.svg +1 -0
- package/dist/shared/lucide-icons/clapperboard.svg +1 -0
- package/dist/shared/lucide-icons/clipboard-check.svg +1 -0
- package/dist/shared/lucide-icons/clipboard-copy.svg +1 -0
- package/dist/shared/lucide-icons/clipboard-list.svg +1 -0
- package/dist/shared/lucide-icons/clipboard-minus.svg +1 -0
- package/dist/shared/lucide-icons/clipboard-paste.svg +1 -0
- package/dist/shared/lucide-icons/clipboard-pen-line.svg +1 -0
- package/dist/shared/lucide-icons/clipboard-pen.svg +1 -0
- package/dist/shared/lucide-icons/clipboard-plus.svg +1 -0
- package/dist/shared/lucide-icons/clipboard-type.svg +1 -0
- package/dist/shared/lucide-icons/clipboard-x.svg +1 -0
- package/dist/shared/lucide-icons/clipboard.svg +1 -0
- package/dist/shared/lucide-icons/clock-alert.svg +1 -0
- package/dist/shared/lucide-icons/clock-arrow-down.svg +1 -0
- package/dist/shared/lucide-icons/clock-arrow-up.svg +1 -0
- package/dist/shared/lucide-icons/clock.svg +1 -0
- package/dist/shared/lucide-icons/clock1.svg +1 -0
- package/dist/shared/lucide-icons/clock10.svg +1 -0
- package/dist/shared/lucide-icons/clock11.svg +1 -0
- package/dist/shared/lucide-icons/clock12.svg +1 -0
- package/dist/shared/lucide-icons/clock2.svg +1 -0
- package/dist/shared/lucide-icons/clock3.svg +1 -0
- package/dist/shared/lucide-icons/clock4.svg +1 -0
- package/dist/shared/lucide-icons/clock5.svg +1 -0
- package/dist/shared/lucide-icons/clock6.svg +1 -0
- package/dist/shared/lucide-icons/clock7.svg +1 -0
- package/dist/shared/lucide-icons/clock8.svg +1 -0
- package/dist/shared/lucide-icons/clock9.svg +1 -0
- package/dist/shared/lucide-icons/cloud-alert.svg +1 -0
- package/dist/shared/lucide-icons/cloud-cog.svg +1 -0
- package/dist/shared/lucide-icons/cloud-download.svg +1 -0
- package/dist/shared/lucide-icons/cloud-drizzle.svg +1 -0
- package/dist/shared/lucide-icons/cloud-fog.svg +1 -0
- package/dist/shared/lucide-icons/cloud-hail.svg +1 -0
- package/dist/shared/lucide-icons/cloud-lightning.svg +1 -0
- package/dist/shared/lucide-icons/cloud-moon-rain.svg +1 -0
- package/dist/shared/lucide-icons/cloud-moon.svg +1 -0
- package/dist/shared/lucide-icons/cloud-off.svg +1 -0
- package/dist/shared/lucide-icons/cloud-rain-wind.svg +1 -0
- package/dist/shared/lucide-icons/cloud-rain.svg +1 -0
- package/dist/shared/lucide-icons/cloud-snow.svg +1 -0
- package/dist/shared/lucide-icons/cloud-sun-rain.svg +1 -0
- package/dist/shared/lucide-icons/cloud-sun.svg +1 -0
- package/dist/shared/lucide-icons/cloud-upload.svg +1 -0
- package/dist/shared/lucide-icons/cloud.svg +1 -0
- package/dist/shared/lucide-icons/cloudy.svg +1 -0
- package/dist/shared/lucide-icons/clover.svg +1 -0
- package/dist/shared/lucide-icons/club.svg +1 -0
- package/dist/shared/lucide-icons/code-xml.svg +1 -0
- package/dist/shared/lucide-icons/code.svg +1 -0
- package/dist/shared/lucide-icons/codepen.svg +1 -0
- package/dist/shared/lucide-icons/codesandbox.svg +1 -0
- package/dist/shared/lucide-icons/coffee.svg +1 -0
- package/dist/shared/lucide-icons/cog.svg +1 -0
- package/dist/shared/lucide-icons/coins.svg +1 -0
- package/dist/shared/lucide-icons/columns2.svg +1 -0
- package/dist/shared/lucide-icons/columns3.svg +1 -0
- package/dist/shared/lucide-icons/columns4.svg +1 -0
- package/dist/shared/lucide-icons/combine.svg +1 -0
- package/dist/shared/lucide-icons/command.svg +1 -0
- package/dist/shared/lucide-icons/compass.svg +1 -0
- package/dist/shared/lucide-icons/component.svg +1 -0
- package/dist/shared/lucide-icons/computer.svg +1 -0
- package/dist/shared/lucide-icons/concierge-bell.svg +1 -0
- package/dist/shared/lucide-icons/cone.svg +1 -0
- package/dist/shared/lucide-icons/construction.svg +1 -0
- package/dist/shared/lucide-icons/contact-round.svg +1 -0
- package/dist/shared/lucide-icons/contact.svg +1 -0
- package/dist/shared/lucide-icons/container.svg +1 -0
- package/dist/shared/lucide-icons/contrast.svg +1 -0
- package/dist/shared/lucide-icons/cookie.svg +1 -0
- package/dist/shared/lucide-icons/cooking-pot.svg +1 -0
- package/dist/shared/lucide-icons/copy-check.svg +1 -0
- package/dist/shared/lucide-icons/copy-minus.svg +1 -0
- package/dist/shared/lucide-icons/copy-plus.svg +1 -0
- package/dist/shared/lucide-icons/copy-slash.svg +1 -0
- package/dist/shared/lucide-icons/copy-x.svg +1 -0
- package/dist/shared/lucide-icons/copy.svg +1 -0
- package/dist/shared/lucide-icons/copyleft.svg +1 -0
- package/dist/shared/lucide-icons/copyright.svg +1 -0
- package/dist/shared/lucide-icons/corner-down-left.svg +1 -0
- package/dist/shared/lucide-icons/corner-down-right.svg +1 -0
- package/dist/shared/lucide-icons/corner-left-down.svg +1 -0
- package/dist/shared/lucide-icons/corner-left-up.svg +1 -0
- package/dist/shared/lucide-icons/corner-right-down.svg +1 -0
- package/dist/shared/lucide-icons/corner-right-up.svg +1 -0
- package/dist/shared/lucide-icons/corner-up-left.svg +1 -0
- package/dist/shared/lucide-icons/corner-up-right.svg +1 -0
- package/dist/shared/lucide-icons/cpu.svg +1 -0
- package/dist/shared/lucide-icons/creative-commons.svg +1 -0
- package/dist/shared/lucide-icons/credit-card.svg +1 -0
- package/dist/shared/lucide-icons/croissant.svg +1 -0
- package/dist/shared/lucide-icons/crop.svg +1 -0
- package/dist/shared/lucide-icons/cross.svg +1 -0
- package/dist/shared/lucide-icons/crosshair.svg +1 -0
- package/dist/shared/lucide-icons/crown.svg +1 -0
- package/dist/shared/lucide-icons/cuboid.svg +1 -0
- package/dist/shared/lucide-icons/cup-soda.svg +1 -0
- package/dist/shared/lucide-icons/currency.svg +1 -0
- package/dist/shared/lucide-icons/cylinder.svg +1 -0
- package/dist/shared/lucide-icons/dam.svg +1 -0
- package/dist/shared/lucide-icons/database-backup.svg +1 -0
- package/dist/shared/lucide-icons/database-zap.svg +1 -0
- package/dist/shared/lucide-icons/database.svg +1 -0
- package/dist/shared/lucide-icons/delete.svg +1 -0
- package/dist/shared/lucide-icons/dessert.svg +1 -0
- package/dist/shared/lucide-icons/diameter.svg +1 -0
- package/dist/shared/lucide-icons/diamond-minus.svg +1 -0
- package/dist/shared/lucide-icons/diamond-percent.svg +1 -0
- package/dist/shared/lucide-icons/diamond-plus.svg +1 -0
- package/dist/shared/lucide-icons/diamond.svg +1 -0
- package/dist/shared/lucide-icons/dice1.svg +1 -0
- package/dist/shared/lucide-icons/dice2.svg +1 -0
- package/dist/shared/lucide-icons/dice3.svg +1 -0
- package/dist/shared/lucide-icons/dice4.svg +1 -0
- package/dist/shared/lucide-icons/dice5.svg +1 -0
- package/dist/shared/lucide-icons/dice6.svg +1 -0
- package/dist/shared/lucide-icons/dices.svg +1 -0
- package/dist/shared/lucide-icons/diff.svg +1 -0
- package/dist/shared/lucide-icons/disc-album.svg +1 -0
- package/dist/shared/lucide-icons/disc.svg +1 -0
- package/dist/shared/lucide-icons/disc2.svg +1 -0
- package/dist/shared/lucide-icons/disc3.svg +1 -0
- package/dist/shared/lucide-icons/divide.svg +1 -0
- package/dist/shared/lucide-icons/dna-off.svg +1 -0
- package/dist/shared/lucide-icons/dna.svg +1 -0
- package/dist/shared/lucide-icons/dock.svg +1 -0
- package/dist/shared/lucide-icons/dog.svg +1 -0
- package/dist/shared/lucide-icons/dollar-sign.svg +1 -0
- package/dist/shared/lucide-icons/donut.svg +1 -0
- package/dist/shared/lucide-icons/door-closed.svg +1 -0
- package/dist/shared/lucide-icons/door-open.svg +1 -0
- package/dist/shared/lucide-icons/dot.svg +1 -0
- package/dist/shared/lucide-icons/download.svg +1 -0
- package/dist/shared/lucide-icons/drafting-compass.svg +1 -0
- package/dist/shared/lucide-icons/drama.svg +1 -0
- package/dist/shared/lucide-icons/dribbble.svg +1 -0
- package/dist/shared/lucide-icons/drill.svg +1 -0
- package/dist/shared/lucide-icons/droplet-off.svg +1 -0
- package/dist/shared/lucide-icons/droplet.svg +1 -0
- package/dist/shared/lucide-icons/droplets.svg +1 -0
- package/dist/shared/lucide-icons/drum.svg +1 -0
- package/dist/shared/lucide-icons/drumstick.svg +1 -0
- package/dist/shared/lucide-icons/dumbbell.svg +1 -0
- package/dist/shared/lucide-icons/ear-off.svg +1 -0
- package/dist/shared/lucide-icons/ear.svg +1 -0
- package/dist/shared/lucide-icons/earth-lock.svg +1 -0
- package/dist/shared/lucide-icons/earth.svg +1 -0
- package/dist/shared/lucide-icons/eclipse.svg +1 -0
- package/dist/shared/lucide-icons/egg-fried.svg +1 -0
- package/dist/shared/lucide-icons/egg-off.svg +1 -0
- package/dist/shared/lucide-icons/egg.svg +1 -0
- package/dist/shared/lucide-icons/ellipsis-vertical.svg +1 -0
- package/dist/shared/lucide-icons/ellipsis.svg +1 -0
- package/dist/shared/lucide-icons/equal-approximately.svg +1 -0
- package/dist/shared/lucide-icons/equal-not.svg +1 -0
- package/dist/shared/lucide-icons/equal.svg +1 -0
- package/dist/shared/lucide-icons/eraser.svg +1 -0
- package/dist/shared/lucide-icons/ethernet-port.svg +1 -0
- package/dist/shared/lucide-icons/euro.svg +1 -0
- package/dist/shared/lucide-icons/expand.svg +1 -0
- package/dist/shared/lucide-icons/external-link.svg +1 -0
- package/dist/shared/lucide-icons/eye-closed.svg +1 -0
- package/dist/shared/lucide-icons/eye-off.svg +1 -0
- package/dist/shared/lucide-icons/eye.svg +1 -0
- package/dist/shared/lucide-icons/facebook.svg +1 -0
- package/dist/shared/lucide-icons/factory.svg +1 -0
- package/dist/shared/lucide-icons/fan.svg +1 -0
- package/dist/shared/lucide-icons/fast-forward.svg +1 -0
- package/dist/shared/lucide-icons/feather.svg +1 -0
- package/dist/shared/lucide-icons/fence.svg +1 -0
- package/dist/shared/lucide-icons/ferris-wheel.svg +1 -0
- package/dist/shared/lucide-icons/figma.svg +1 -0
- package/dist/shared/lucide-icons/file-archive.svg +1 -0
- package/dist/shared/lucide-icons/file-audio.svg +1 -0
- package/dist/shared/lucide-icons/file-audio2.svg +1 -0
- package/dist/shared/lucide-icons/file-axis3d.svg +1 -0
- package/dist/shared/lucide-icons/file-badge.svg +1 -0
- package/dist/shared/lucide-icons/file-badge2.svg +1 -0
- package/dist/shared/lucide-icons/file-box.svg +1 -0
- package/dist/shared/lucide-icons/file-chart-column-increasing.svg +1 -0
- package/dist/shared/lucide-icons/file-chart-column.svg +1 -0
- package/dist/shared/lucide-icons/file-chart-line.svg +1 -0
- package/dist/shared/lucide-icons/file-chart-pie.svg +1 -0
- package/dist/shared/lucide-icons/file-check.svg +1 -0
- package/dist/shared/lucide-icons/file-check2.svg +1 -0
- package/dist/shared/lucide-icons/file-clock.svg +1 -0
- package/dist/shared/lucide-icons/file-code.svg +1 -0
- package/dist/shared/lucide-icons/file-code2.svg +1 -0
- package/dist/shared/lucide-icons/file-cog.svg +1 -0
- package/dist/shared/lucide-icons/file-diff.svg +1 -0
- package/dist/shared/lucide-icons/file-digit.svg +1 -0
- package/dist/shared/lucide-icons/file-down.svg +1 -0
- package/dist/shared/lucide-icons/file-heart.svg +1 -0
- package/dist/shared/lucide-icons/file-image.svg +1 -0
- package/dist/shared/lucide-icons/file-input.svg +1 -0
- package/dist/shared/lucide-icons/file-json.svg +1 -0
- package/dist/shared/lucide-icons/file-json2.svg +1 -0
- package/dist/shared/lucide-icons/file-key.svg +1 -0
- package/dist/shared/lucide-icons/file-key2.svg +1 -0
- package/dist/shared/lucide-icons/file-lock.svg +1 -0
- package/dist/shared/lucide-icons/file-lock2.svg +1 -0
- package/dist/shared/lucide-icons/file-minus.svg +1 -0
- package/dist/shared/lucide-icons/file-minus2.svg +1 -0
- package/dist/shared/lucide-icons/file-music.svg +1 -0
- package/dist/shared/lucide-icons/file-output.svg +1 -0
- package/dist/shared/lucide-icons/file-pen-line.svg +1 -0
- package/dist/shared/lucide-icons/file-pen.svg +1 -0
- package/dist/shared/lucide-icons/file-plus.svg +1 -0
- package/dist/shared/lucide-icons/file-plus2.svg +1 -0
- package/dist/shared/lucide-icons/file-question.svg +1 -0
- package/dist/shared/lucide-icons/file-scan.svg +1 -0
- package/dist/shared/lucide-icons/file-search.svg +1 -0
- package/dist/shared/lucide-icons/file-search2.svg +1 -0
- package/dist/shared/lucide-icons/file-sliders.svg +1 -0
- package/dist/shared/lucide-icons/file-spreadsheet.svg +1 -0
- package/dist/shared/lucide-icons/file-stack.svg +1 -0
- package/dist/shared/lucide-icons/file-symlink.svg +1 -0
- package/dist/shared/lucide-icons/file-terminal.svg +1 -0
- package/dist/shared/lucide-icons/file-text.svg +1 -0
- package/dist/shared/lucide-icons/file-type.svg +1 -0
- package/dist/shared/lucide-icons/file-type2.svg +1 -0
- package/dist/shared/lucide-icons/file-up.svg +1 -0
- package/dist/shared/lucide-icons/file-user.svg +1 -0
- package/dist/shared/lucide-icons/file-video.svg +1 -0
- package/dist/shared/lucide-icons/file-video2.svg +1 -0
- package/dist/shared/lucide-icons/file-volume.svg +1 -0
- package/dist/shared/lucide-icons/file-volume2.svg +1 -0
- package/dist/shared/lucide-icons/file-warning.svg +1 -0
- package/dist/shared/lucide-icons/file-x.svg +1 -0
- package/dist/shared/lucide-icons/file-x2.svg +1 -0
- package/dist/shared/lucide-icons/file.svg +1 -0
- package/dist/shared/lucide-icons/files.svg +1 -0
- package/dist/shared/lucide-icons/film.svg +1 -0
- package/dist/shared/lucide-icons/filter-x.svg +1 -0
- package/dist/shared/lucide-icons/filter.svg +1 -0
- package/dist/shared/lucide-icons/fingerprint.svg +1 -0
- package/dist/shared/lucide-icons/fire-extinguisher.svg +1 -0
- package/dist/shared/lucide-icons/fish-off.svg +1 -0
- package/dist/shared/lucide-icons/fish-symbol.svg +1 -0
- package/dist/shared/lucide-icons/fish.svg +1 -0
- package/dist/shared/lucide-icons/flag-off.svg +1 -0
- package/dist/shared/lucide-icons/flag-triangle-left.svg +1 -0
- package/dist/shared/lucide-icons/flag-triangle-right.svg +1 -0
- package/dist/shared/lucide-icons/flag.svg +1 -0
- package/dist/shared/lucide-icons/flame-kindling.svg +1 -0
- package/dist/shared/lucide-icons/flame.svg +1 -0
- package/dist/shared/lucide-icons/flashlight-off.svg +1 -0
- package/dist/shared/lucide-icons/flashlight.svg +1 -0
- package/dist/shared/lucide-icons/flask-conical-off.svg +1 -0
- package/dist/shared/lucide-icons/flask-conical.svg +1 -0
- package/dist/shared/lucide-icons/flask-round.svg +1 -0
- package/dist/shared/lucide-icons/flip-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/flip-horizontal2.svg +1 -0
- package/dist/shared/lucide-icons/flip-vertical.svg +1 -0
- package/dist/shared/lucide-icons/flip-vertical2.svg +1 -0
- package/dist/shared/lucide-icons/flower.svg +1 -0
- package/dist/shared/lucide-icons/flower2.svg +1 -0
- package/dist/shared/lucide-icons/focus.svg +1 -0
- package/dist/shared/lucide-icons/fold-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/fold-vertical.svg +1 -0
- package/dist/shared/lucide-icons/folder-archive.svg +1 -0
- package/dist/shared/lucide-icons/folder-check.svg +1 -0
- package/dist/shared/lucide-icons/folder-clock.svg +1 -0
- package/dist/shared/lucide-icons/folder-closed.svg +1 -0
- package/dist/shared/lucide-icons/folder-code.svg +1 -0
- package/dist/shared/lucide-icons/folder-cog.svg +1 -0
- package/dist/shared/lucide-icons/folder-dot.svg +1 -0
- package/dist/shared/lucide-icons/folder-down.svg +1 -0
- package/dist/shared/lucide-icons/folder-git.svg +1 -0
- package/dist/shared/lucide-icons/folder-git2.svg +1 -0
- package/dist/shared/lucide-icons/folder-heart.svg +1 -0
- package/dist/shared/lucide-icons/folder-input.svg +1 -0
- package/dist/shared/lucide-icons/folder-kanban.svg +1 -0
- package/dist/shared/lucide-icons/folder-key.svg +1 -0
- package/dist/shared/lucide-icons/folder-lock.svg +1 -0
- package/dist/shared/lucide-icons/folder-minus.svg +1 -0
- package/dist/shared/lucide-icons/folder-open-dot.svg +1 -0
- package/dist/shared/lucide-icons/folder-open.svg +1 -0
- package/dist/shared/lucide-icons/folder-output.svg +1 -0
- package/dist/shared/lucide-icons/folder-pen.svg +1 -0
- package/dist/shared/lucide-icons/folder-plus.svg +1 -0
- package/dist/shared/lucide-icons/folder-root.svg +1 -0
- package/dist/shared/lucide-icons/folder-search.svg +1 -0
- package/dist/shared/lucide-icons/folder-search2.svg +1 -0
- package/dist/shared/lucide-icons/folder-symlink.svg +1 -0
- package/dist/shared/lucide-icons/folder-sync.svg +1 -0
- package/dist/shared/lucide-icons/folder-tree.svg +1 -0
- package/dist/shared/lucide-icons/folder-up.svg +1 -0
- package/dist/shared/lucide-icons/folder-x.svg +1 -0
- package/dist/shared/lucide-icons/folder.svg +1 -0
- package/dist/shared/lucide-icons/folders.svg +1 -0
- package/dist/shared/lucide-icons/footprints.svg +1 -0
- package/dist/shared/lucide-icons/forklift.svg +1 -0
- package/dist/shared/lucide-icons/forward.svg +1 -0
- package/dist/shared/lucide-icons/frame.svg +1 -0
- package/dist/shared/lucide-icons/framer.svg +1 -0
- package/dist/shared/lucide-icons/frown.svg +1 -0
- package/dist/shared/lucide-icons/fuel.svg +1 -0
- package/dist/shared/lucide-icons/fullscreen.svg +1 -0
- package/dist/shared/lucide-icons/gallery-horizontal-end.svg +1 -0
- package/dist/shared/lucide-icons/gallery-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/gallery-thumbnails.svg +1 -0
- package/dist/shared/lucide-icons/gallery-vertical-end.svg +1 -0
- package/dist/shared/lucide-icons/gallery-vertical.svg +1 -0
- package/dist/shared/lucide-icons/gamepad.svg +1 -0
- package/dist/shared/lucide-icons/gamepad2.svg +1 -0
- package/dist/shared/lucide-icons/gauge.svg +1 -0
- package/dist/shared/lucide-icons/gavel.svg +1 -0
- package/dist/shared/lucide-icons/gem.svg +1 -0
- package/dist/shared/lucide-icons/ghost.svg +1 -0
- package/dist/shared/lucide-icons/gift.svg +1 -0
- package/dist/shared/lucide-icons/git-branch-plus.svg +1 -0
- package/dist/shared/lucide-icons/git-branch.svg +1 -0
- package/dist/shared/lucide-icons/git-commit-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/git-commit-vertical.svg +1 -0
- package/dist/shared/lucide-icons/git-compare-arrows.svg +1 -0
- package/dist/shared/lucide-icons/git-compare.svg +1 -0
- package/dist/shared/lucide-icons/git-fork.svg +1 -0
- package/dist/shared/lucide-icons/git-graph.svg +1 -0
- package/dist/shared/lucide-icons/git-merge.svg +1 -0
- package/dist/shared/lucide-icons/git-pull-request-arrow.svg +1 -0
- package/dist/shared/lucide-icons/git-pull-request-closed.svg +1 -0
- package/dist/shared/lucide-icons/git-pull-request-create-arrow.svg +1 -0
- package/dist/shared/lucide-icons/git-pull-request-create.svg +1 -0
- package/dist/shared/lucide-icons/git-pull-request-draft.svg +1 -0
- package/dist/shared/lucide-icons/git-pull-request.svg +1 -0
- package/dist/shared/lucide-icons/github.svg +1 -0
- package/dist/shared/lucide-icons/gitlab.svg +1 -0
- package/dist/shared/lucide-icons/glass-water.svg +1 -0
- package/dist/shared/lucide-icons/glasses.svg +1 -0
- package/dist/shared/lucide-icons/globe-lock.svg +1 -0
- package/dist/shared/lucide-icons/globe.svg +1 -0
- package/dist/shared/lucide-icons/goal.svg +1 -0
- package/dist/shared/lucide-icons/grab.svg +1 -0
- package/dist/shared/lucide-icons/graduation-cap.svg +1 -0
- package/dist/shared/lucide-icons/grape.svg +1 -0
- package/dist/shared/lucide-icons/grid2x2-check.svg +1 -0
- package/dist/shared/lucide-icons/grid2x2-plus.svg +1 -0
- package/dist/shared/lucide-icons/grid2x2-x.svg +1 -0
- package/dist/shared/lucide-icons/grid2x2.svg +1 -0
- package/dist/shared/lucide-icons/grid3x3.svg +1 -0
- package/dist/shared/lucide-icons/grip-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/grip-vertical.svg +1 -0
- package/dist/shared/lucide-icons/grip.svg +1 -0
- package/dist/shared/lucide-icons/group.svg +1 -0
- package/dist/shared/lucide-icons/guitar.svg +1 -0
- package/dist/shared/lucide-icons/ham.svg +1 -0
- package/dist/shared/lucide-icons/hammer.svg +1 -0
- package/dist/shared/lucide-icons/hand-coins.svg +1 -0
- package/dist/shared/lucide-icons/hand-heart.svg +1 -0
- package/dist/shared/lucide-icons/hand-helping.svg +1 -0
- package/dist/shared/lucide-icons/hand-metal.svg +1 -0
- package/dist/shared/lucide-icons/hand-platter.svg +1 -0
- package/dist/shared/lucide-icons/hand.svg +1 -0
- package/dist/shared/lucide-icons/handshake.svg +1 -0
- package/dist/shared/lucide-icons/hard-drive-download.svg +1 -0
- package/dist/shared/lucide-icons/hard-drive-upload.svg +1 -0
- package/dist/shared/lucide-icons/hard-drive.svg +1 -0
- package/dist/shared/lucide-icons/hard-hat.svg +1 -0
- package/dist/shared/lucide-icons/hash.svg +1 -0
- package/dist/shared/lucide-icons/haze.svg +1 -0
- package/dist/shared/lucide-icons/hdmi-port.svg +1 -0
- package/dist/shared/lucide-icons/heading.svg +1 -0
- package/dist/shared/lucide-icons/heading1.svg +1 -0
- package/dist/shared/lucide-icons/heading2.svg +1 -0
- package/dist/shared/lucide-icons/heading3.svg +1 -0
- package/dist/shared/lucide-icons/heading4.svg +1 -0
- package/dist/shared/lucide-icons/heading5.svg +1 -0
- package/dist/shared/lucide-icons/heading6.svg +1 -0
- package/dist/shared/lucide-icons/headphone-off.svg +1 -0
- package/dist/shared/lucide-icons/headphones.svg +1 -0
- package/dist/shared/lucide-icons/headset.svg +1 -0
- package/dist/shared/lucide-icons/heart-crack.svg +1 -0
- package/dist/shared/lucide-icons/heart-handshake.svg +1 -0
- package/dist/shared/lucide-icons/heart-off.svg +1 -0
- package/dist/shared/lucide-icons/heart-pulse.svg +1 -0
- package/dist/shared/lucide-icons/heart.svg +1 -0
- package/dist/shared/lucide-icons/heater.svg +1 -0
- package/dist/shared/lucide-icons/hexagon.svg +1 -0
- package/dist/shared/lucide-icons/highlighter.svg +1 -0
- package/dist/shared/lucide-icons/history.svg +1 -0
- package/dist/shared/lucide-icons/hop-off.svg +1 -0
- package/dist/shared/lucide-icons/hop.svg +1 -0
- package/dist/shared/lucide-icons/hospital.svg +1 -0
- package/dist/shared/lucide-icons/hotel.svg +1 -0
- package/dist/shared/lucide-icons/hourglass.svg +1 -0
- package/dist/shared/lucide-icons/house-plug.svg +1 -0
- package/dist/shared/lucide-icons/house-plus.svg +1 -0
- package/dist/shared/lucide-icons/house.svg +1 -0
- package/dist/shared/lucide-icons/ice-cream-bowl.svg +1 -0
- package/dist/shared/lucide-icons/ice-cream-cone.svg +1 -0
- package/dist/shared/lucide-icons/id-card.svg +1 -0
- package/dist/shared/lucide-icons/image-down.svg +1 -0
- package/dist/shared/lucide-icons/image-minus.svg +1 -0
- package/dist/shared/lucide-icons/image-off.svg +1 -0
- package/dist/shared/lucide-icons/image-play.svg +1 -0
- package/dist/shared/lucide-icons/image-plus.svg +1 -0
- package/dist/shared/lucide-icons/image-up.svg +1 -0
- package/dist/shared/lucide-icons/image-upscale.svg +1 -0
- package/dist/shared/lucide-icons/image.svg +1 -0
- package/dist/shared/lucide-icons/images.svg +1 -0
- package/dist/shared/lucide-icons/import.svg +1 -0
- package/dist/shared/lucide-icons/inbox.svg +1 -0
- package/dist/shared/lucide-icons/indent-decrease.svg +1 -0
- package/dist/shared/lucide-icons/indent-increase.svg +1 -0
- package/dist/shared/lucide-icons/indian-rupee.svg +1 -0
- package/dist/shared/lucide-icons/infinity.svg +1 -0
- package/dist/shared/lucide-icons/info.svg +1 -0
- package/dist/shared/lucide-icons/inspection-panel.svg +1 -0
- package/dist/shared/lucide-icons/instagram.svg +1 -0
- package/dist/shared/lucide-icons/italic.svg +1 -0
- package/dist/shared/lucide-icons/iteration-ccw.svg +1 -0
- package/dist/shared/lucide-icons/iteration-cw.svg +1 -0
- package/dist/shared/lucide-icons/japanese-yen.svg +1 -0
- package/dist/shared/lucide-icons/joystick.svg +1 -0
- package/dist/shared/lucide-icons/kanban.svg +1 -0
- package/dist/shared/lucide-icons/key-round.svg +1 -0
- package/dist/shared/lucide-icons/key-square.svg +1 -0
- package/dist/shared/lucide-icons/key.svg +1 -0
- package/dist/shared/lucide-icons/keyboard-music.svg +1 -0
- package/dist/shared/lucide-icons/keyboard-off.svg +1 -0
- package/dist/shared/lucide-icons/keyboard.svg +1 -0
- package/dist/shared/lucide-icons/lamp-ceiling.svg +1 -0
- package/dist/shared/lucide-icons/lamp-desk.svg +1 -0
- package/dist/shared/lucide-icons/lamp-floor.svg +1 -0
- package/dist/shared/lucide-icons/lamp-wall-down.svg +1 -0
- package/dist/shared/lucide-icons/lamp-wall-up.svg +1 -0
- package/dist/shared/lucide-icons/lamp.svg +1 -0
- package/dist/shared/lucide-icons/land-plot.svg +1 -0
- package/dist/shared/lucide-icons/landmark.svg +1 -0
- package/dist/shared/lucide-icons/languages.svg +1 -0
- package/dist/shared/lucide-icons/laptop-minimal-check.svg +1 -0
- package/dist/shared/lucide-icons/laptop-minimal.svg +1 -0
- package/dist/shared/lucide-icons/laptop.svg +1 -0
- package/dist/shared/lucide-icons/lasso-select.svg +1 -0
- package/dist/shared/lucide-icons/lasso.svg +1 -0
- package/dist/shared/lucide-icons/laugh.svg +1 -0
- package/dist/shared/lucide-icons/layers.svg +1 -0
- package/dist/shared/lucide-icons/layers2.svg +1 -0
- package/dist/shared/lucide-icons/layout-dashboard.svg +1 -0
- package/dist/shared/lucide-icons/layout-grid.svg +1 -0
- package/dist/shared/lucide-icons/layout-list.svg +1 -0
- package/dist/shared/lucide-icons/layout-panel-left.svg +1 -0
- package/dist/shared/lucide-icons/layout-panel-top.svg +1 -0
- package/dist/shared/lucide-icons/layout-template.svg +1 -0
- package/dist/shared/lucide-icons/leaf.svg +1 -0
- package/dist/shared/lucide-icons/leafy-green.svg +1 -0
- package/dist/shared/lucide-icons/lectern.svg +1 -0
- package/dist/shared/lucide-icons/letter-text.svg +1 -0
- package/dist/shared/lucide-icons/library-big.svg +1 -0
- package/dist/shared/lucide-icons/library.svg +1 -0
- package/dist/shared/lucide-icons/life-buoy.svg +1 -0
- package/dist/shared/lucide-icons/ligature.svg +1 -0
- package/dist/shared/lucide-icons/lightbulb-off.svg +1 -0
- package/dist/shared/lucide-icons/lightbulb.svg +1 -0
- package/dist/shared/lucide-icons/link.svg +1 -0
- package/dist/shared/lucide-icons/link2-off.svg +1 -0
- package/dist/shared/lucide-icons/link2.svg +1 -0
- package/dist/shared/lucide-icons/linkedin.svg +1 -0
- package/dist/shared/lucide-icons/list-check.svg +1 -0
- package/dist/shared/lucide-icons/list-checks.svg +1 -0
- package/dist/shared/lucide-icons/list-collapse.svg +1 -0
- package/dist/shared/lucide-icons/list-end.svg +1 -0
- package/dist/shared/lucide-icons/list-filter-plus.svg +1 -0
- package/dist/shared/lucide-icons/list-filter.svg +1 -0
- package/dist/shared/lucide-icons/list-minus.svg +1 -0
- package/dist/shared/lucide-icons/list-music.svg +1 -0
- package/dist/shared/lucide-icons/list-ordered.svg +1 -0
- package/dist/shared/lucide-icons/list-plus.svg +1 -0
- package/dist/shared/lucide-icons/list-restart.svg +1 -0
- package/dist/shared/lucide-icons/list-start.svg +1 -0
- package/dist/shared/lucide-icons/list-todo.svg +1 -0
- package/dist/shared/lucide-icons/list-tree.svg +1 -0
- package/dist/shared/lucide-icons/list-video.svg +1 -0
- package/dist/shared/lucide-icons/list-x.svg +1 -0
- package/dist/shared/lucide-icons/list.svg +1 -0
- package/dist/shared/lucide-icons/loader-circle.svg +1 -0
- package/dist/shared/lucide-icons/loader-pinwheel.svg +1 -0
- package/dist/shared/lucide-icons/loader.svg +1 -0
- package/dist/shared/lucide-icons/locate-fixed.svg +1 -0
- package/dist/shared/lucide-icons/locate-off.svg +1 -0
- package/dist/shared/lucide-icons/locate.svg +1 -0
- package/dist/shared/lucide-icons/lock-keyhole-open.svg +1 -0
- package/dist/shared/lucide-icons/lock-keyhole.svg +1 -0
- package/dist/shared/lucide-icons/lock-open.svg +1 -0
- package/dist/shared/lucide-icons/lock.svg +1 -0
- package/dist/shared/lucide-icons/log-in.svg +1 -0
- package/dist/shared/lucide-icons/log-out.svg +1 -0
- package/dist/shared/lucide-icons/logs.svg +1 -0
- package/dist/shared/lucide-icons/lollipop.svg +1 -0
- package/dist/shared/lucide-icons/luggage.svg +1 -0
- package/dist/shared/lucide-icons/magnet.svg +1 -0
- package/dist/shared/lucide-icons/mail-check.svg +1 -0
- package/dist/shared/lucide-icons/mail-minus.svg +1 -0
- package/dist/shared/lucide-icons/mail-open.svg +1 -0
- package/dist/shared/lucide-icons/mail-plus.svg +1 -0
- package/dist/shared/lucide-icons/mail-question.svg +1 -0
- package/dist/shared/lucide-icons/mail-search.svg +1 -0
- package/dist/shared/lucide-icons/mail-warning.svg +1 -0
- package/dist/shared/lucide-icons/mail-x.svg +1 -0
- package/dist/shared/lucide-icons/mail.svg +1 -0
- package/dist/shared/lucide-icons/mailbox.svg +1 -0
- package/dist/shared/lucide-icons/mails.svg +1 -0
- package/dist/shared/lucide-icons/manifest.json +1 -0
- package/dist/shared/lucide-icons/map-pin-check-inside.svg +1 -0
- package/dist/shared/lucide-icons/map-pin-check.svg +1 -0
- package/dist/shared/lucide-icons/map-pin-house.svg +1 -0
- package/dist/shared/lucide-icons/map-pin-minus-inside.svg +1 -0
- package/dist/shared/lucide-icons/map-pin-minus.svg +1 -0
- package/dist/shared/lucide-icons/map-pin-off.svg +1 -0
- package/dist/shared/lucide-icons/map-pin-plus-inside.svg +1 -0
- package/dist/shared/lucide-icons/map-pin-plus.svg +1 -0
- package/dist/shared/lucide-icons/map-pin-x-inside.svg +1 -0
- package/dist/shared/lucide-icons/map-pin-x.svg +1 -0
- package/dist/shared/lucide-icons/map-pin.svg +1 -0
- package/dist/shared/lucide-icons/map-pinned.svg +1 -0
- package/dist/shared/lucide-icons/map.svg +1 -0
- package/dist/shared/lucide-icons/martini.svg +1 -0
- package/dist/shared/lucide-icons/maximize.svg +1 -0
- package/dist/shared/lucide-icons/maximize2.svg +1 -0
- package/dist/shared/lucide-icons/medal.svg +1 -0
- package/dist/shared/lucide-icons/megaphone-off.svg +1 -0
- package/dist/shared/lucide-icons/megaphone.svg +1 -0
- package/dist/shared/lucide-icons/meh.svg +1 -0
- package/dist/shared/lucide-icons/memory-stick.svg +1 -0
- package/dist/shared/lucide-icons/menu.svg +1 -0
- package/dist/shared/lucide-icons/merge.svg +1 -0
- package/dist/shared/lucide-icons/message-circle-code.svg +1 -0
- package/dist/shared/lucide-icons/message-circle-dashed.svg +1 -0
- package/dist/shared/lucide-icons/message-circle-heart.svg +1 -0
- package/dist/shared/lucide-icons/message-circle-more.svg +1 -0
- package/dist/shared/lucide-icons/message-circle-off.svg +1 -0
- package/dist/shared/lucide-icons/message-circle-plus.svg +1 -0
- package/dist/shared/lucide-icons/message-circle-question.svg +1 -0
- package/dist/shared/lucide-icons/message-circle-reply.svg +1 -0
- package/dist/shared/lucide-icons/message-circle-warning.svg +1 -0
- package/dist/shared/lucide-icons/message-circle-x.svg +1 -0
- package/dist/shared/lucide-icons/message-circle.svg +1 -0
- package/dist/shared/lucide-icons/message-square-code.svg +1 -0
- package/dist/shared/lucide-icons/message-square-dashed.svg +1 -0
- package/dist/shared/lucide-icons/message-square-diff.svg +1 -0
- package/dist/shared/lucide-icons/message-square-dot.svg +1 -0
- package/dist/shared/lucide-icons/message-square-heart.svg +1 -0
- package/dist/shared/lucide-icons/message-square-lock.svg +1 -0
- package/dist/shared/lucide-icons/message-square-more.svg +1 -0
- package/dist/shared/lucide-icons/message-square-off.svg +1 -0
- package/dist/shared/lucide-icons/message-square-plus.svg +1 -0
- package/dist/shared/lucide-icons/message-square-quote.svg +1 -0
- package/dist/shared/lucide-icons/message-square-reply.svg +1 -0
- package/dist/shared/lucide-icons/message-square-share.svg +1 -0
- package/dist/shared/lucide-icons/message-square-text.svg +1 -0
- package/dist/shared/lucide-icons/message-square-warning.svg +1 -0
- package/dist/shared/lucide-icons/message-square-x.svg +1 -0
- package/dist/shared/lucide-icons/message-square.svg +1 -0
- package/dist/shared/lucide-icons/messages-square.svg +1 -0
- package/dist/shared/lucide-icons/mic-off.svg +1 -0
- package/dist/shared/lucide-icons/mic-vocal.svg +1 -0
- package/dist/shared/lucide-icons/mic.svg +1 -0
- package/dist/shared/lucide-icons/microchip.svg +1 -0
- package/dist/shared/lucide-icons/microscope.svg +1 -0
- package/dist/shared/lucide-icons/microwave.svg +1 -0
- package/dist/shared/lucide-icons/milestone.svg +1 -0
- package/dist/shared/lucide-icons/milk-off.svg +1 -0
- package/dist/shared/lucide-icons/milk.svg +1 -0
- package/dist/shared/lucide-icons/minimize.svg +1 -0
- package/dist/shared/lucide-icons/minimize2.svg +1 -0
- package/dist/shared/lucide-icons/minus.svg +1 -0
- package/dist/shared/lucide-icons/monitor-check.svg +1 -0
- package/dist/shared/lucide-icons/monitor-cog.svg +1 -0
- package/dist/shared/lucide-icons/monitor-dot.svg +1 -0
- package/dist/shared/lucide-icons/monitor-down.svg +1 -0
- package/dist/shared/lucide-icons/monitor-off.svg +1 -0
- package/dist/shared/lucide-icons/monitor-pause.svg +1 -0
- package/dist/shared/lucide-icons/monitor-play.svg +1 -0
- package/dist/shared/lucide-icons/monitor-smartphone.svg +1 -0
- package/dist/shared/lucide-icons/monitor-speaker.svg +1 -0
- package/dist/shared/lucide-icons/monitor-stop.svg +1 -0
- package/dist/shared/lucide-icons/monitor-up.svg +1 -0
- package/dist/shared/lucide-icons/monitor-x.svg +1 -0
- package/dist/shared/lucide-icons/monitor.svg +1 -0
- package/dist/shared/lucide-icons/moon-star.svg +1 -0
- package/dist/shared/lucide-icons/moon.svg +1 -0
- package/dist/shared/lucide-icons/mountain-snow.svg +1 -0
- package/dist/shared/lucide-icons/mountain.svg +1 -0
- package/dist/shared/lucide-icons/mouse-off.svg +1 -0
- package/dist/shared/lucide-icons/mouse-pointer-ban.svg +1 -0
- package/dist/shared/lucide-icons/mouse-pointer-click.svg +1 -0
- package/dist/shared/lucide-icons/mouse-pointer.svg +1 -0
- package/dist/shared/lucide-icons/mouse-pointer2.svg +1 -0
- package/dist/shared/lucide-icons/mouse.svg +1 -0
- package/dist/shared/lucide-icons/move-diagonal.svg +1 -0
- package/dist/shared/lucide-icons/move-diagonal2.svg +1 -0
- package/dist/shared/lucide-icons/move-down-left.svg +1 -0
- package/dist/shared/lucide-icons/move-down-right.svg +1 -0
- package/dist/shared/lucide-icons/move-down.svg +1 -0
- package/dist/shared/lucide-icons/move-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/move-left.svg +1 -0
- package/dist/shared/lucide-icons/move-right.svg +1 -0
- package/dist/shared/lucide-icons/move-up-left.svg +1 -0
- package/dist/shared/lucide-icons/move-up-right.svg +1 -0
- package/dist/shared/lucide-icons/move-up.svg +1 -0
- package/dist/shared/lucide-icons/move-vertical.svg +1 -0
- package/dist/shared/lucide-icons/move.svg +1 -0
- package/dist/shared/lucide-icons/move3d.svg +1 -0
- package/dist/shared/lucide-icons/music.svg +1 -0
- package/dist/shared/lucide-icons/music2.svg +1 -0
- package/dist/shared/lucide-icons/music3.svg +1 -0
- package/dist/shared/lucide-icons/music4.svg +1 -0
- package/dist/shared/lucide-icons/navigation-off.svg +1 -0
- package/dist/shared/lucide-icons/navigation.svg +1 -0
- package/dist/shared/lucide-icons/navigation2-off.svg +1 -0
- package/dist/shared/lucide-icons/navigation2.svg +1 -0
- package/dist/shared/lucide-icons/network.svg +1 -0
- package/dist/shared/lucide-icons/newspaper.svg +1 -0
- package/dist/shared/lucide-icons/nfc.svg +1 -0
- package/dist/shared/lucide-icons/notebook-pen.svg +1 -0
- package/dist/shared/lucide-icons/notebook-tabs.svg +1 -0
- package/dist/shared/lucide-icons/notebook-text.svg +1 -0
- package/dist/shared/lucide-icons/notebook.svg +1 -0
- package/dist/shared/lucide-icons/notepad-text-dashed.svg +1 -0
- package/dist/shared/lucide-icons/notepad-text.svg +1 -0
- package/dist/shared/lucide-icons/nut-off.svg +1 -0
- package/dist/shared/lucide-icons/nut.svg +1 -0
- package/dist/shared/lucide-icons/octagon-alert.svg +1 -0
- package/dist/shared/lucide-icons/octagon-minus.svg +1 -0
- package/dist/shared/lucide-icons/octagon-pause.svg +1 -0
- package/dist/shared/lucide-icons/octagon-x.svg +1 -0
- package/dist/shared/lucide-icons/octagon.svg +1 -0
- package/dist/shared/lucide-icons/omega.svg +1 -0
- package/dist/shared/lucide-icons/option.svg +1 -0
- package/dist/shared/lucide-icons/orbit.svg +1 -0
- package/dist/shared/lucide-icons/origami.svg +1 -0
- package/dist/shared/lucide-icons/package-check.svg +1 -0
- package/dist/shared/lucide-icons/package-minus.svg +1 -0
- package/dist/shared/lucide-icons/package-open.svg +1 -0
- package/dist/shared/lucide-icons/package-plus.svg +1 -0
- package/dist/shared/lucide-icons/package-search.svg +1 -0
- package/dist/shared/lucide-icons/package-x.svg +1 -0
- package/dist/shared/lucide-icons/package.svg +1 -0
- package/dist/shared/lucide-icons/package2.svg +1 -0
- package/dist/shared/lucide-icons/paint-bucket.svg +1 -0
- package/dist/shared/lucide-icons/paint-roller.svg +1 -0
- package/dist/shared/lucide-icons/paintbrush-vertical.svg +1 -0
- package/dist/shared/lucide-icons/paintbrush.svg +1 -0
- package/dist/shared/lucide-icons/palette.svg +1 -0
- package/dist/shared/lucide-icons/panel-bottom-close.svg +1 -0
- package/dist/shared/lucide-icons/panel-bottom-dashed.svg +1 -0
- package/dist/shared/lucide-icons/panel-bottom-open.svg +1 -0
- package/dist/shared/lucide-icons/panel-bottom.svg +1 -0
- package/dist/shared/lucide-icons/panel-left-close.svg +1 -0
- package/dist/shared/lucide-icons/panel-left-dashed.svg +1 -0
- package/dist/shared/lucide-icons/panel-left-open.svg +1 -0
- package/dist/shared/lucide-icons/panel-left.svg +1 -0
- package/dist/shared/lucide-icons/panel-right-close.svg +1 -0
- package/dist/shared/lucide-icons/panel-right-dashed.svg +1 -0
- package/dist/shared/lucide-icons/panel-right-open.svg +1 -0
- package/dist/shared/lucide-icons/panel-right.svg +1 -0
- package/dist/shared/lucide-icons/panel-top-close.svg +1 -0
- package/dist/shared/lucide-icons/panel-top-dashed.svg +1 -0
- package/dist/shared/lucide-icons/panel-top-open.svg +1 -0
- package/dist/shared/lucide-icons/panel-top.svg +1 -0
- package/dist/shared/lucide-icons/panels-left-bottom.svg +1 -0
- package/dist/shared/lucide-icons/panels-right-bottom.svg +1 -0
- package/dist/shared/lucide-icons/panels-top-left.svg +1 -0
- package/dist/shared/lucide-icons/paperclip.svg +1 -0
- package/dist/shared/lucide-icons/parentheses.svg +1 -0
- package/dist/shared/lucide-icons/parking-meter.svg +1 -0
- package/dist/shared/lucide-icons/party-popper.svg +1 -0
- package/dist/shared/lucide-icons/pause.svg +1 -0
- package/dist/shared/lucide-icons/paw-print.svg +1 -0
- package/dist/shared/lucide-icons/pc-case.svg +1 -0
- package/dist/shared/lucide-icons/pen-line.svg +1 -0
- package/dist/shared/lucide-icons/pen-off.svg +1 -0
- package/dist/shared/lucide-icons/pen-tool.svg +1 -0
- package/dist/shared/lucide-icons/pen.svg +1 -0
- package/dist/shared/lucide-icons/pencil-line.svg +1 -0
- package/dist/shared/lucide-icons/pencil-off.svg +1 -0
- package/dist/shared/lucide-icons/pencil-ruler.svg +1 -0
- package/dist/shared/lucide-icons/pencil.svg +1 -0
- package/dist/shared/lucide-icons/pentagon.svg +1 -0
- package/dist/shared/lucide-icons/percent.svg +1 -0
- package/dist/shared/lucide-icons/person-standing.svg +1 -0
- package/dist/shared/lucide-icons/philippine-peso.svg +1 -0
- package/dist/shared/lucide-icons/phone-call.svg +1 -0
- package/dist/shared/lucide-icons/phone-forwarded.svg +1 -0
- package/dist/shared/lucide-icons/phone-incoming.svg +1 -0
- package/dist/shared/lucide-icons/phone-missed.svg +1 -0
- package/dist/shared/lucide-icons/phone-off.svg +1 -0
- package/dist/shared/lucide-icons/phone-outgoing.svg +1 -0
- package/dist/shared/lucide-icons/phone.svg +1 -0
- package/dist/shared/lucide-icons/pi.svg +1 -0
- package/dist/shared/lucide-icons/piano.svg +1 -0
- package/dist/shared/lucide-icons/pickaxe.svg +1 -0
- package/dist/shared/lucide-icons/picture-in-picture.svg +1 -0
- package/dist/shared/lucide-icons/picture-in-picture2.svg +1 -0
- package/dist/shared/lucide-icons/piggy-bank.svg +1 -0
- package/dist/shared/lucide-icons/pilcrow-left.svg +1 -0
- package/dist/shared/lucide-icons/pilcrow-right.svg +1 -0
- package/dist/shared/lucide-icons/pilcrow.svg +1 -0
- package/dist/shared/lucide-icons/pill-bottle.svg +1 -0
- package/dist/shared/lucide-icons/pill.svg +1 -0
- package/dist/shared/lucide-icons/pin-off.svg +1 -0
- package/dist/shared/lucide-icons/pin.svg +1 -0
- package/dist/shared/lucide-icons/pipette.svg +1 -0
- package/dist/shared/lucide-icons/pizza.svg +1 -0
- package/dist/shared/lucide-icons/plane-landing.svg +1 -0
- package/dist/shared/lucide-icons/plane-takeoff.svg +1 -0
- package/dist/shared/lucide-icons/plane.svg +1 -0
- package/dist/shared/lucide-icons/play.svg +1 -0
- package/dist/shared/lucide-icons/plug-zap.svg +1 -0
- package/dist/shared/lucide-icons/plug.svg +1 -0
- package/dist/shared/lucide-icons/plug2.svg +1 -0
- package/dist/shared/lucide-icons/plus.svg +1 -0
- package/dist/shared/lucide-icons/pocket-knife.svg +1 -0
- package/dist/shared/lucide-icons/pocket.svg +1 -0
- package/dist/shared/lucide-icons/podcast.svg +1 -0
- package/dist/shared/lucide-icons/pointer-off.svg +1 -0
- package/dist/shared/lucide-icons/pointer.svg +1 -0
- package/dist/shared/lucide-icons/popcorn.svg +1 -0
- package/dist/shared/lucide-icons/popsicle.svg +1 -0
- package/dist/shared/lucide-icons/pound-sterling.svg +1 -0
- package/dist/shared/lucide-icons/power-off.svg +1 -0
- package/dist/shared/lucide-icons/power.svg +1 -0
- package/dist/shared/lucide-icons/presentation.svg +1 -0
- package/dist/shared/lucide-icons/printer-check.svg +1 -0
- package/dist/shared/lucide-icons/printer.svg +1 -0
- package/dist/shared/lucide-icons/projector.svg +1 -0
- package/dist/shared/lucide-icons/proportions.svg +1 -0
- package/dist/shared/lucide-icons/puzzle.svg +1 -0
- package/dist/shared/lucide-icons/pyramid.svg +1 -0
- package/dist/shared/lucide-icons/qr-code.svg +1 -0
- package/dist/shared/lucide-icons/quote.svg +1 -0
- package/dist/shared/lucide-icons/rabbit.svg +1 -0
- package/dist/shared/lucide-icons/radar.svg +1 -0
- package/dist/shared/lucide-icons/radiation.svg +1 -0
- package/dist/shared/lucide-icons/radical.svg +1 -0
- package/dist/shared/lucide-icons/radio-receiver.svg +1 -0
- package/dist/shared/lucide-icons/radio-tower.svg +1 -0
- package/dist/shared/lucide-icons/radio.svg +1 -0
- package/dist/shared/lucide-icons/radius.svg +1 -0
- package/dist/shared/lucide-icons/rail-symbol.svg +1 -0
- package/dist/shared/lucide-icons/rainbow.svg +1 -0
- package/dist/shared/lucide-icons/rat.svg +1 -0
- package/dist/shared/lucide-icons/ratio.svg +1 -0
- package/dist/shared/lucide-icons/receipt-cent.svg +1 -0
- package/dist/shared/lucide-icons/receipt-euro.svg +1 -0
- package/dist/shared/lucide-icons/receipt-indian-rupee.svg +1 -0
- package/dist/shared/lucide-icons/receipt-japanese-yen.svg +1 -0
- package/dist/shared/lucide-icons/receipt-pound-sterling.svg +1 -0
- package/dist/shared/lucide-icons/receipt-russian-ruble.svg +1 -0
- package/dist/shared/lucide-icons/receipt-swiss-franc.svg +1 -0
- package/dist/shared/lucide-icons/receipt-text.svg +1 -0
- package/dist/shared/lucide-icons/receipt.svg +1 -0
- package/dist/shared/lucide-icons/rectangle-ellipsis.svg +1 -0
- package/dist/shared/lucide-icons/rectangle-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/rectangle-vertical.svg +1 -0
- package/dist/shared/lucide-icons/recycle.svg +1 -0
- package/dist/shared/lucide-icons/redo-dot.svg +1 -0
- package/dist/shared/lucide-icons/redo.svg +1 -0
- package/dist/shared/lucide-icons/redo2.svg +1 -0
- package/dist/shared/lucide-icons/refresh-ccw-dot.svg +1 -0
- package/dist/shared/lucide-icons/refresh-ccw.svg +1 -0
- package/dist/shared/lucide-icons/refresh-cw-off.svg +1 -0
- package/dist/shared/lucide-icons/refresh-cw.svg +1 -0
- package/dist/shared/lucide-icons/refrigerator.svg +1 -0
- package/dist/shared/lucide-icons/regex.svg +1 -0
- package/dist/shared/lucide-icons/remove-formatting.svg +1 -0
- package/dist/shared/lucide-icons/repeat.svg +1 -0
- package/dist/shared/lucide-icons/repeat1.svg +1 -0
- package/dist/shared/lucide-icons/repeat2.svg +1 -0
- package/dist/shared/lucide-icons/replace-all.svg +1 -0
- package/dist/shared/lucide-icons/replace.svg +1 -0
- package/dist/shared/lucide-icons/reply-all.svg +1 -0
- package/dist/shared/lucide-icons/reply.svg +1 -0
- package/dist/shared/lucide-icons/rewind.svg +1 -0
- package/dist/shared/lucide-icons/ribbon.svg +1 -0
- package/dist/shared/lucide-icons/rocket.svg +1 -0
- package/dist/shared/lucide-icons/rocking-chair.svg +1 -0
- package/dist/shared/lucide-icons/roller-coaster.svg +1 -0
- package/dist/shared/lucide-icons/rotate-ccw-square.svg +1 -0
- package/dist/shared/lucide-icons/rotate-ccw.svg +1 -0
- package/dist/shared/lucide-icons/rotate-cw-square.svg +1 -0
- package/dist/shared/lucide-icons/rotate-cw.svg +1 -0
- package/dist/shared/lucide-icons/rotate3d.svg +1 -0
- package/dist/shared/lucide-icons/route-off.svg +1 -0
- package/dist/shared/lucide-icons/route.svg +1 -0
- package/dist/shared/lucide-icons/router.svg +1 -0
- package/dist/shared/lucide-icons/rows2.svg +1 -0
- package/dist/shared/lucide-icons/rows3.svg +1 -0
- package/dist/shared/lucide-icons/rows4.svg +1 -0
- package/dist/shared/lucide-icons/rss.svg +1 -0
- package/dist/shared/lucide-icons/ruler.svg +1 -0
- package/dist/shared/lucide-icons/russian-ruble.svg +1 -0
- package/dist/shared/lucide-icons/sailboat.svg +1 -0
- package/dist/shared/lucide-icons/salad.svg +1 -0
- package/dist/shared/lucide-icons/sandwich.svg +1 -0
- package/dist/shared/lucide-icons/satellite-dish.svg +1 -0
- package/dist/shared/lucide-icons/satellite.svg +1 -0
- package/dist/shared/lucide-icons/save-all.svg +1 -0
- package/dist/shared/lucide-icons/save-off.svg +1 -0
- package/dist/shared/lucide-icons/save.svg +1 -0
- package/dist/shared/lucide-icons/scale.svg +1 -0
- package/dist/shared/lucide-icons/scale3d.svg +1 -0
- package/dist/shared/lucide-icons/scaling.svg +1 -0
- package/dist/shared/lucide-icons/scan-barcode.svg +1 -0
- package/dist/shared/lucide-icons/scan-eye.svg +1 -0
- package/dist/shared/lucide-icons/scan-face.svg +1 -0
- package/dist/shared/lucide-icons/scan-heart.svg +1 -0
- package/dist/shared/lucide-icons/scan-line.svg +1 -0
- package/dist/shared/lucide-icons/scan-qr-code.svg +1 -0
- package/dist/shared/lucide-icons/scan-search.svg +1 -0
- package/dist/shared/lucide-icons/scan-text.svg +1 -0
- package/dist/shared/lucide-icons/scan.svg +1 -0
- package/dist/shared/lucide-icons/school.svg +1 -0
- package/dist/shared/lucide-icons/scissors-line-dashed.svg +1 -0
- package/dist/shared/lucide-icons/scissors.svg +1 -0
- package/dist/shared/lucide-icons/screen-share-off.svg +1 -0
- package/dist/shared/lucide-icons/screen-share.svg +1 -0
- package/dist/shared/lucide-icons/scroll-text.svg +1 -0
- package/dist/shared/lucide-icons/scroll.svg +1 -0
- package/dist/shared/lucide-icons/search-check.svg +1 -0
- package/dist/shared/lucide-icons/search-code.svg +1 -0
- package/dist/shared/lucide-icons/search-slash.svg +1 -0
- package/dist/shared/lucide-icons/search-x.svg +1 -0
- package/dist/shared/lucide-icons/search.svg +1 -0
- package/dist/shared/lucide-icons/section.svg +1 -0
- package/dist/shared/lucide-icons/send-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/send-to-back.svg +1 -0
- package/dist/shared/lucide-icons/send.svg +1 -0
- package/dist/shared/lucide-icons/separator-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/separator-vertical.svg +1 -0
- package/dist/shared/lucide-icons/server-cog.svg +1 -0
- package/dist/shared/lucide-icons/server-crash.svg +1 -0
- package/dist/shared/lucide-icons/server-off.svg +1 -0
- package/dist/shared/lucide-icons/server.svg +1 -0
- package/dist/shared/lucide-icons/settings.svg +1 -0
- package/dist/shared/lucide-icons/settings2.svg +1 -0
- package/dist/shared/lucide-icons/shapes.svg +1 -0
- package/dist/shared/lucide-icons/share.svg +1 -0
- package/dist/shared/lucide-icons/share2.svg +1 -0
- package/dist/shared/lucide-icons/sheet.svg +1 -0
- package/dist/shared/lucide-icons/shell.svg +1 -0
- package/dist/shared/lucide-icons/shield-alert.svg +1 -0
- package/dist/shared/lucide-icons/shield-ban.svg +1 -0
- package/dist/shared/lucide-icons/shield-check.svg +1 -0
- package/dist/shared/lucide-icons/shield-ellipsis.svg +1 -0
- package/dist/shared/lucide-icons/shield-half.svg +1 -0
- package/dist/shared/lucide-icons/shield-minus.svg +1 -0
- package/dist/shared/lucide-icons/shield-off.svg +1 -0
- package/dist/shared/lucide-icons/shield-plus.svg +1 -0
- package/dist/shared/lucide-icons/shield-question.svg +1 -0
- package/dist/shared/lucide-icons/shield-x.svg +1 -0
- package/dist/shared/lucide-icons/shield.svg +1 -0
- package/dist/shared/lucide-icons/ship-wheel.svg +1 -0
- package/dist/shared/lucide-icons/ship.svg +1 -0
- package/dist/shared/lucide-icons/shirt.svg +1 -0
- package/dist/shared/lucide-icons/shopping-bag.svg +1 -0
- package/dist/shared/lucide-icons/shopping-basket.svg +1 -0
- package/dist/shared/lucide-icons/shopping-cart.svg +1 -0
- package/dist/shared/lucide-icons/shovel.svg +1 -0
- package/dist/shared/lucide-icons/shower-head.svg +1 -0
- package/dist/shared/lucide-icons/shrink.svg +1 -0
- package/dist/shared/lucide-icons/shrub.svg +1 -0
- package/dist/shared/lucide-icons/shuffle.svg +1 -0
- package/dist/shared/lucide-icons/sigma.svg +1 -0
- package/dist/shared/lucide-icons/signal-high.svg +1 -0
- package/dist/shared/lucide-icons/signal-low.svg +1 -0
- package/dist/shared/lucide-icons/signal-medium.svg +1 -0
- package/dist/shared/lucide-icons/signal-zero.svg +1 -0
- package/dist/shared/lucide-icons/signal.svg +1 -0
- package/dist/shared/lucide-icons/signature.svg +1 -0
- package/dist/shared/lucide-icons/signpost-big.svg +1 -0
- package/dist/shared/lucide-icons/signpost.svg +1 -0
- package/dist/shared/lucide-icons/siren.svg +1 -0
- package/dist/shared/lucide-icons/skip-back.svg +1 -0
- package/dist/shared/lucide-icons/skip-forward.svg +1 -0
- package/dist/shared/lucide-icons/skull.svg +1 -0
- package/dist/shared/lucide-icons/slack.svg +1 -0
- package/dist/shared/lucide-icons/slash.svg +1 -0
- package/dist/shared/lucide-icons/slice.svg +1 -0
- package/dist/shared/lucide-icons/sliders-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/sliders-vertical.svg +1 -0
- package/dist/shared/lucide-icons/smartphone-charging.svg +1 -0
- package/dist/shared/lucide-icons/smartphone-nfc.svg +1 -0
- package/dist/shared/lucide-icons/smartphone.svg +1 -0
- package/dist/shared/lucide-icons/smile-plus.svg +1 -0
- package/dist/shared/lucide-icons/smile.svg +1 -0
- package/dist/shared/lucide-icons/snail.svg +1 -0
- package/dist/shared/lucide-icons/snowflake.svg +1 -0
- package/dist/shared/lucide-icons/sofa.svg +1 -0
- package/dist/shared/lucide-icons/soup.svg +1 -0
- package/dist/shared/lucide-icons/space.svg +1 -0
- package/dist/shared/lucide-icons/spade.svg +1 -0
- package/dist/shared/lucide-icons/sparkle.svg +1 -0
- package/dist/shared/lucide-icons/sparkles.svg +1 -0
- package/dist/shared/lucide-icons/speaker.svg +1 -0
- package/dist/shared/lucide-icons/speech.svg +1 -0
- package/dist/shared/lucide-icons/spell-check.svg +1 -0
- package/dist/shared/lucide-icons/spell-check2.svg +1 -0
- package/dist/shared/lucide-icons/spline.svg +1 -0
- package/dist/shared/lucide-icons/split.svg +1 -0
- package/dist/shared/lucide-icons/spray-can.svg +1 -0
- package/dist/shared/lucide-icons/sprout.svg +1 -0
- package/dist/shared/lucide-icons/square-activity.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-down-left.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-down-right.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-down.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-left.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-out-down-left.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-out-down-right.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-out-up-left.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-out-up-right.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-right.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-up-left.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-up-right.svg +1 -0
- package/dist/shared/lucide-icons/square-arrow-up.svg +1 -0
- package/dist/shared/lucide-icons/square-asterisk.svg +1 -0
- package/dist/shared/lucide-icons/square-bottom-dashed-scissors.svg +1 -0
- package/dist/shared/lucide-icons/square-chart-gantt.svg +1 -0
- package/dist/shared/lucide-icons/square-check-big.svg +1 -0
- package/dist/shared/lucide-icons/square-check.svg +1 -0
- package/dist/shared/lucide-icons/square-chevron-down.svg +1 -0
- package/dist/shared/lucide-icons/square-chevron-left.svg +1 -0
- package/dist/shared/lucide-icons/square-chevron-right.svg +1 -0
- package/dist/shared/lucide-icons/square-chevron-up.svg +1 -0
- package/dist/shared/lucide-icons/square-code.svg +1 -0
- package/dist/shared/lucide-icons/square-dashed-bottom-code.svg +1 -0
- package/dist/shared/lucide-icons/square-dashed-bottom.svg +1 -0
- package/dist/shared/lucide-icons/square-dashed-kanban.svg +1 -0
- package/dist/shared/lucide-icons/square-dashed-mouse-pointer.svg +1 -0
- package/dist/shared/lucide-icons/square-dashed.svg +1 -0
- package/dist/shared/lucide-icons/square-divide.svg +1 -0
- package/dist/shared/lucide-icons/square-dot.svg +1 -0
- package/dist/shared/lucide-icons/square-equal.svg +1 -0
- package/dist/shared/lucide-icons/square-function.svg +1 -0
- package/dist/shared/lucide-icons/square-kanban.svg +1 -0
- package/dist/shared/lucide-icons/square-library.svg +1 -0
- package/dist/shared/lucide-icons/square-m.svg +1 -0
- package/dist/shared/lucide-icons/square-menu.svg +1 -0
- package/dist/shared/lucide-icons/square-minus.svg +1 -0
- package/dist/shared/lucide-icons/square-mouse-pointer.svg +1 -0
- package/dist/shared/lucide-icons/square-parking-off.svg +1 -0
- package/dist/shared/lucide-icons/square-parking.svg +1 -0
- package/dist/shared/lucide-icons/square-pen.svg +1 -0
- package/dist/shared/lucide-icons/square-percent.svg +1 -0
- package/dist/shared/lucide-icons/square-pi.svg +1 -0
- package/dist/shared/lucide-icons/square-pilcrow.svg +1 -0
- package/dist/shared/lucide-icons/square-play.svg +1 -0
- package/dist/shared/lucide-icons/square-plus.svg +1 -0
- package/dist/shared/lucide-icons/square-power.svg +1 -0
- package/dist/shared/lucide-icons/square-radical.svg +1 -0
- package/dist/shared/lucide-icons/square-scissors.svg +1 -0
- package/dist/shared/lucide-icons/square-sigma.svg +1 -0
- package/dist/shared/lucide-icons/square-slash.svg +1 -0
- package/dist/shared/lucide-icons/square-split-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/square-split-vertical.svg +1 -0
- package/dist/shared/lucide-icons/square-square.svg +1 -0
- package/dist/shared/lucide-icons/square-stack.svg +1 -0
- package/dist/shared/lucide-icons/square-terminal.svg +1 -0
- package/dist/shared/lucide-icons/square-user-round.svg +1 -0
- package/dist/shared/lucide-icons/square-user.svg +1 -0
- package/dist/shared/lucide-icons/square-x.svg +1 -0
- package/dist/shared/lucide-icons/square.svg +1 -0
- package/dist/shared/lucide-icons/squircle.svg +1 -0
- package/dist/shared/lucide-icons/squirrel.svg +1 -0
- package/dist/shared/lucide-icons/stamp.svg +1 -0
- package/dist/shared/lucide-icons/star-half.svg +1 -0
- package/dist/shared/lucide-icons/star-off.svg +1 -0
- package/dist/shared/lucide-icons/star.svg +1 -0
- package/dist/shared/lucide-icons/step-back.svg +1 -0
- package/dist/shared/lucide-icons/step-forward.svg +1 -0
- package/dist/shared/lucide-icons/stethoscope.svg +1 -0
- package/dist/shared/lucide-icons/sticker.svg +1 -0
- package/dist/shared/lucide-icons/sticky-note.svg +1 -0
- package/dist/shared/lucide-icons/store.svg +1 -0
- package/dist/shared/lucide-icons/stretch-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/stretch-vertical.svg +1 -0
- package/dist/shared/lucide-icons/strikethrough.svg +1 -0
- package/dist/shared/lucide-icons/subscript.svg +1 -0
- package/dist/shared/lucide-icons/sun-dim.svg +1 -0
- package/dist/shared/lucide-icons/sun-medium.svg +1 -0
- package/dist/shared/lucide-icons/sun-moon.svg +1 -0
- package/dist/shared/lucide-icons/sun-snow.svg +1 -0
- package/dist/shared/lucide-icons/sun.svg +1 -0
- package/dist/shared/lucide-icons/sunrise.svg +1 -0
- package/dist/shared/lucide-icons/sunset.svg +1 -0
- package/dist/shared/lucide-icons/superscript.svg +1 -0
- package/dist/shared/lucide-icons/swatch-book.svg +1 -0
- package/dist/shared/lucide-icons/swiss-franc.svg +1 -0
- package/dist/shared/lucide-icons/switch-camera.svg +1 -0
- package/dist/shared/lucide-icons/sword.svg +1 -0
- package/dist/shared/lucide-icons/swords.svg +1 -0
- package/dist/shared/lucide-icons/syringe.svg +1 -0
- package/dist/shared/lucide-icons/table-cells-merge.svg +1 -0
- package/dist/shared/lucide-icons/table-cells-split.svg +1 -0
- package/dist/shared/lucide-icons/table-columns-split.svg +1 -0
- package/dist/shared/lucide-icons/table-of-contents.svg +1 -0
- package/dist/shared/lucide-icons/table-properties.svg +1 -0
- package/dist/shared/lucide-icons/table-rows-split.svg +1 -0
- package/dist/shared/lucide-icons/table.svg +1 -0
- package/dist/shared/lucide-icons/table2.svg +1 -0
- package/dist/shared/lucide-icons/tablet-smartphone.svg +1 -0
- package/dist/shared/lucide-icons/tablet.svg +1 -0
- package/dist/shared/lucide-icons/tablets.svg +1 -0
- package/dist/shared/lucide-icons/tag.svg +1 -0
- package/dist/shared/lucide-icons/tags.svg +1 -0
- package/dist/shared/lucide-icons/tally1.svg +1 -0
- package/dist/shared/lucide-icons/tally2.svg +1 -0
- package/dist/shared/lucide-icons/tally3.svg +1 -0
- package/dist/shared/lucide-icons/tally4.svg +1 -0
- package/dist/shared/lucide-icons/tally5.svg +1 -0
- package/dist/shared/lucide-icons/tangent.svg +1 -0
- package/dist/shared/lucide-icons/target.svg +1 -0
- package/dist/shared/lucide-icons/telescope.svg +1 -0
- package/dist/shared/lucide-icons/tent-tree.svg +1 -0
- package/dist/shared/lucide-icons/tent.svg +1 -0
- package/dist/shared/lucide-icons/terminal.svg +1 -0
- package/dist/shared/lucide-icons/test-tube-diagonal.svg +1 -0
- package/dist/shared/lucide-icons/test-tube.svg +1 -0
- package/dist/shared/lucide-icons/test-tubes.svg +1 -0
- package/dist/shared/lucide-icons/text-cursor-input.svg +1 -0
- package/dist/shared/lucide-icons/text-cursor.svg +1 -0
- package/dist/shared/lucide-icons/text-quote.svg +1 -0
- package/dist/shared/lucide-icons/text-search.svg +1 -0
- package/dist/shared/lucide-icons/text-select.svg +1 -0
- package/dist/shared/lucide-icons/text.svg +1 -0
- package/dist/shared/lucide-icons/theater.svg +1 -0
- package/dist/shared/lucide-icons/thermometer-snowflake.svg +1 -0
- package/dist/shared/lucide-icons/thermometer-sun.svg +1 -0
- package/dist/shared/lucide-icons/thermometer.svg +1 -0
- package/dist/shared/lucide-icons/thumbs-down.svg +1 -0
- package/dist/shared/lucide-icons/thumbs-up.svg +1 -0
- package/dist/shared/lucide-icons/ticket-check.svg +1 -0
- package/dist/shared/lucide-icons/ticket-minus.svg +1 -0
- package/dist/shared/lucide-icons/ticket-percent.svg +1 -0
- package/dist/shared/lucide-icons/ticket-plus.svg +1 -0
- package/dist/shared/lucide-icons/ticket-slash.svg +1 -0
- package/dist/shared/lucide-icons/ticket-x.svg +1 -0
- package/dist/shared/lucide-icons/ticket.svg +1 -0
- package/dist/shared/lucide-icons/tickets-plane.svg +1 -0
- package/dist/shared/lucide-icons/tickets.svg +1 -0
- package/dist/shared/lucide-icons/timer-off.svg +1 -0
- package/dist/shared/lucide-icons/timer-reset.svg +1 -0
- package/dist/shared/lucide-icons/timer.svg +1 -0
- package/dist/shared/lucide-icons/toggle-left.svg +1 -0
- package/dist/shared/lucide-icons/toggle-right.svg +1 -0
- package/dist/shared/lucide-icons/toilet.svg +1 -0
- package/dist/shared/lucide-icons/tornado.svg +1 -0
- package/dist/shared/lucide-icons/torus.svg +1 -0
- package/dist/shared/lucide-icons/touchpad-off.svg +1 -0
- package/dist/shared/lucide-icons/touchpad.svg +1 -0
- package/dist/shared/lucide-icons/tower-control.svg +1 -0
- package/dist/shared/lucide-icons/toy-brick.svg +1 -0
- package/dist/shared/lucide-icons/tractor.svg +1 -0
- package/dist/shared/lucide-icons/traffic-cone.svg +1 -0
- package/dist/shared/lucide-icons/train-front-tunnel.svg +1 -0
- package/dist/shared/lucide-icons/train-front.svg +1 -0
- package/dist/shared/lucide-icons/train-track.svg +1 -0
- package/dist/shared/lucide-icons/tram-front.svg +1 -0
- package/dist/shared/lucide-icons/trash.svg +1 -0
- package/dist/shared/lucide-icons/trash2.svg +1 -0
- package/dist/shared/lucide-icons/tree-deciduous.svg +1 -0
- package/dist/shared/lucide-icons/tree-palm.svg +1 -0
- package/dist/shared/lucide-icons/tree-pine.svg +1 -0
- package/dist/shared/lucide-icons/trees.svg +1 -0
- package/dist/shared/lucide-icons/trello.svg +1 -0
- package/dist/shared/lucide-icons/trending-down.svg +1 -0
- package/dist/shared/lucide-icons/trending-up-down.svg +1 -0
- package/dist/shared/lucide-icons/trending-up.svg +1 -0
- package/dist/shared/lucide-icons/triangle-alert.svg +1 -0
- package/dist/shared/lucide-icons/triangle-right.svg +1 -0
- package/dist/shared/lucide-icons/triangle.svg +1 -0
- package/dist/shared/lucide-icons/trophy.svg +1 -0
- package/dist/shared/lucide-icons/truck.svg +1 -0
- package/dist/shared/lucide-icons/turtle.svg +1 -0
- package/dist/shared/lucide-icons/tv-minimal-play.svg +1 -0
- package/dist/shared/lucide-icons/tv-minimal.svg +1 -0
- package/dist/shared/lucide-icons/tv.svg +1 -0
- package/dist/shared/lucide-icons/twitch.svg +1 -0
- package/dist/shared/lucide-icons/twitter.svg +1 -0
- package/dist/shared/lucide-icons/type-outline.svg +1 -0
- package/dist/shared/lucide-icons/type.svg +1 -0
- package/dist/shared/lucide-icons/umbrella-off.svg +1 -0
- package/dist/shared/lucide-icons/umbrella.svg +1 -0
- package/dist/shared/lucide-icons/underline.svg +1 -0
- package/dist/shared/lucide-icons/undo-dot.svg +1 -0
- package/dist/shared/lucide-icons/undo.svg +1 -0
- package/dist/shared/lucide-icons/undo2.svg +1 -0
- package/dist/shared/lucide-icons/unfold-horizontal.svg +1 -0
- package/dist/shared/lucide-icons/unfold-vertical.svg +1 -0
- package/dist/shared/lucide-icons/ungroup.svg +1 -0
- package/dist/shared/lucide-icons/university.svg +1 -0
- package/dist/shared/lucide-icons/unlink.svg +1 -0
- package/dist/shared/lucide-icons/unlink2.svg +1 -0
- package/dist/shared/lucide-icons/unplug.svg +1 -0
- package/dist/shared/lucide-icons/upload.svg +1 -0
- package/dist/shared/lucide-icons/usb.svg +1 -0
- package/dist/shared/lucide-icons/user-check.svg +1 -0
- package/dist/shared/lucide-icons/user-cog.svg +1 -0
- package/dist/shared/lucide-icons/user-minus.svg +1 -0
- package/dist/shared/lucide-icons/user-pen.svg +1 -0
- package/dist/shared/lucide-icons/user-plus.svg +1 -0
- package/dist/shared/lucide-icons/user-round-check.svg +1 -0
- package/dist/shared/lucide-icons/user-round-cog.svg +1 -0
- package/dist/shared/lucide-icons/user-round-minus.svg +1 -0
- package/dist/shared/lucide-icons/user-round-pen.svg +1 -0
- package/dist/shared/lucide-icons/user-round-plus.svg +1 -0
- package/dist/shared/lucide-icons/user-round-search.svg +1 -0
- package/dist/shared/lucide-icons/user-round-x.svg +1 -0
- package/dist/shared/lucide-icons/user-round.svg +1 -0
- package/dist/shared/lucide-icons/user-search.svg +1 -0
- package/dist/shared/lucide-icons/user-x.svg +1 -0
- package/dist/shared/lucide-icons/user.svg +1 -0
- package/dist/shared/lucide-icons/users-round.svg +1 -0
- package/dist/shared/lucide-icons/users.svg +1 -0
- package/dist/shared/lucide-icons/utensils-crossed.svg +1 -0
- package/dist/shared/lucide-icons/utensils.svg +1 -0
- package/dist/shared/lucide-icons/utility-pole.svg +1 -0
- package/dist/shared/lucide-icons/variable.svg +1 -0
- package/dist/shared/lucide-icons/vault.svg +1 -0
- package/dist/shared/lucide-icons/vegan.svg +1 -0
- package/dist/shared/lucide-icons/venetian-mask.svg +1 -0
- package/dist/shared/lucide-icons/vibrate-off.svg +1 -0
- package/dist/shared/lucide-icons/vibrate.svg +1 -0
- package/dist/shared/lucide-icons/video-off.svg +1 -0
- package/dist/shared/lucide-icons/video.svg +1 -0
- package/dist/shared/lucide-icons/videotape.svg +1 -0
- package/dist/shared/lucide-icons/view.svg +1 -0
- package/dist/shared/lucide-icons/voicemail.svg +1 -0
- package/dist/shared/lucide-icons/volleyball.svg +1 -0
- package/dist/shared/lucide-icons/volume-off.svg +1 -0
- package/dist/shared/lucide-icons/volume-x.svg +1 -0
- package/dist/shared/lucide-icons/volume.svg +1 -0
- package/dist/shared/lucide-icons/volume1.svg +1 -0
- package/dist/shared/lucide-icons/volume2.svg +1 -0
- package/dist/shared/lucide-icons/vote.svg +1 -0
- package/dist/shared/lucide-icons/wallet-cards.svg +1 -0
- package/dist/shared/lucide-icons/wallet-minimal.svg +1 -0
- package/dist/shared/lucide-icons/wallet.svg +1 -0
- package/dist/shared/lucide-icons/wallpaper.svg +1 -0
- package/dist/shared/lucide-icons/wand-sparkles.svg +1 -0
- package/dist/shared/lucide-icons/wand.svg +1 -0
- package/dist/shared/lucide-icons/warehouse.svg +1 -0
- package/dist/shared/lucide-icons/washing-machine.svg +1 -0
- package/dist/shared/lucide-icons/watch.svg +1 -0
- package/dist/shared/lucide-icons/waves-ladder.svg +1 -0
- package/dist/shared/lucide-icons/waves.svg +1 -0
- package/dist/shared/lucide-icons/waypoints.svg +1 -0
- package/dist/shared/lucide-icons/webcam.svg +1 -0
- package/dist/shared/lucide-icons/webhook-off.svg +1 -0
- package/dist/shared/lucide-icons/webhook.svg +1 -0
- package/dist/shared/lucide-icons/weight.svg +1 -0
- package/dist/shared/lucide-icons/wheat-off.svg +1 -0
- package/dist/shared/lucide-icons/wheat.svg +1 -0
- package/dist/shared/lucide-icons/whole-word.svg +1 -0
- package/dist/shared/lucide-icons/wifi-high.svg +1 -0
- package/dist/shared/lucide-icons/wifi-low.svg +1 -0
- package/dist/shared/lucide-icons/wifi-off.svg +1 -0
- package/dist/shared/lucide-icons/wifi-zero.svg +1 -0
- package/dist/shared/lucide-icons/wifi.svg +1 -0
- package/dist/shared/lucide-icons/wind-arrow-down.svg +1 -0
- package/dist/shared/lucide-icons/wind.svg +1 -0
- package/dist/shared/lucide-icons/wine-off.svg +1 -0
- package/dist/shared/lucide-icons/wine.svg +1 -0
- package/dist/shared/lucide-icons/workflow.svg +1 -0
- package/dist/shared/lucide-icons/worm.svg +1 -0
- package/dist/shared/lucide-icons/wrap-text.svg +1 -0
- package/dist/shared/lucide-icons/wrench.svg +1 -0
- package/dist/shared/lucide-icons/x.svg +1 -0
- package/dist/shared/lucide-icons/youtube.svg +1 -0
- package/dist/shared/lucide-icons/zap-off.svg +1 -0
- package/dist/shared/lucide-icons/zap.svg +1 -0
- package/dist/shared/lucide-icons/zoom-in.svg +1 -0
- package/dist/shared/lucide-icons/zoom-out.svg +1 -0
- package/dist/{server → shared}/projectIcons.js +2 -2
- package/package.json +6 -4
- package/texlite.config.example.json +4 -1
- package/dist/client/assets/GitDialog-Ds1IhVJ3.js +0 -3
- package/dist/client/assets/HistoryDialog-BOLQxHvV.js +0 -5
- package/dist/client/assets/PdfPreview-DwKlkGl9.js +0 -1
- package/dist/client/assets/ProjectNavigationDialogs-D6grphxz.js +0 -1
- package/dist/client/assets/SystemMetricsDialog-CxiyDnsC.js +0 -1
- package/dist/client/assets/index-BoLY1azn.js +0 -64
- package/dist/client/assets/index-DzzqNm9b.css +0 -1
package/dist/server/history.js
CHANGED
|
@@ -5,6 +5,12 @@ import { assertNoSourceSymlinks, listProjectFiles, outputRoot, projectRoot, reso
|
|
|
5
5
|
import { httpError } from "./http.js";
|
|
6
6
|
import { MAX_TEXT_PREVIEW_BYTES } from "./limits.js";
|
|
7
7
|
const AUTOSAVE_COALESCE_MS = 2 * 60_000;
|
|
8
|
+
// Logical stored payload; SQLite pages, indexes and WAL are shared database overhead.
|
|
9
|
+
function historyMetadataBytes(row) {
|
|
10
|
+
return Object.values(row).reduce((sum, value) => sum + (typeof value === "string" ? Buffer.byteLength(value, "utf8") : 0), 0);
|
|
11
|
+
}
|
|
12
|
+
const DEFAULT_HISTORY_PAGE_SIZE = 100;
|
|
13
|
+
const MAX_HISTORY_PAGE_SIZE = 100;
|
|
8
14
|
export class ProjectHistoryService {
|
|
9
15
|
config;
|
|
10
16
|
db;
|
|
@@ -12,7 +18,7 @@ export class ProjectHistoryService {
|
|
|
12
18
|
this.config = config;
|
|
13
19
|
this.db = db;
|
|
14
20
|
}
|
|
15
|
-
record(projectId, authorId, reason, changedRoots) {
|
|
21
|
+
record(projectId, authorId, reason, changedRoots, options = {}) {
|
|
16
22
|
const project = this.project(projectId);
|
|
17
23
|
const previous = this.latestRow(projectId);
|
|
18
24
|
const previousManifest = this.baseline(projectId) ?? (previous ? parseManifest(previous.manifest_json) : null);
|
|
@@ -38,17 +44,19 @@ export class ProjectHistoryService {
|
|
|
38
44
|
return null;
|
|
39
45
|
}
|
|
40
46
|
const createdAt = new Date().toISOString();
|
|
41
|
-
if (reason === "autosave" && previous?.reason === "autosave" && !previous.label
|
|
47
|
+
if (reason === "autosave" && previous?.reason === "autosave" && !previous.label
|
|
42
48
|
&& Date.parse(createdAt) - Date.parse(previous.created_at) < AUTOSAVE_COALESCE_MS) {
|
|
43
49
|
const merged = [...new Set([...parseStringArray(previous.changed_paths_json), ...changedPaths])].sort();
|
|
44
50
|
this.db.prepare(`UPDATE project_history_versions
|
|
45
|
-
SET manifest_json = ?, changed_paths_json = ? WHERE id = ?`)
|
|
46
|
-
.run(JSON.stringify(manifest), JSON.stringify(merged), previous.id);
|
|
51
|
+
SET manifest_json = ?, changed_paths_json = ?, author_id = ? WHERE id = ?`)
|
|
52
|
+
.run(JSON.stringify(manifest), JSON.stringify(merged), previous.author_id === authorId ? authorId : null, previous.id);
|
|
47
53
|
this.saveBaseline(projectId, manifest);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
if (!options.deferRetention) {
|
|
55
|
+
this.removeUnreferencedObjects(projectId, new Set(previousManifest
|
|
56
|
+
? Object.values(previousManifest.files).map((file) => file.digest)
|
|
57
|
+
: []));
|
|
58
|
+
this.pruneVersions(projectId);
|
|
59
|
+
}
|
|
52
60
|
return this.version(previous.id);
|
|
53
61
|
}
|
|
54
62
|
const id = randomUUID();
|
|
@@ -57,7 +65,8 @@ export class ProjectHistoryService {
|
|
|
57
65
|
VALUES (?, ?, ?, ?, ?, ?, ?)`)
|
|
58
66
|
.run(id, projectId, authorId, reason, JSON.stringify(manifest), JSON.stringify(changedPaths), createdAt);
|
|
59
67
|
this.saveBaseline(projectId, manifest);
|
|
60
|
-
|
|
68
|
+
if (!options.deferRetention)
|
|
69
|
+
this.pruneVersions(projectId);
|
|
61
70
|
return this.version(id);
|
|
62
71
|
}
|
|
63
72
|
list(projectId, limit = 100) {
|
|
@@ -67,13 +76,50 @@ export class ProjectHistoryService {
|
|
|
67
76
|
.all(projectId, Math.min(200, Math.max(1, limit)));
|
|
68
77
|
return rows.map((row) => versionJson(row));
|
|
69
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* List immutable recovery snapshots from newest to oldest. Cursor pagination
|
|
81
|
+
* is preferable to offsets here: concurrent saves/deletions cannot shift an
|
|
82
|
+
* already loaded page or make the next request repeat a snapshot.
|
|
83
|
+
*/
|
|
84
|
+
listPage(projectId, limit = DEFAULT_HISTORY_PAGE_SIZE, cursorInput) {
|
|
85
|
+
const requestedLimit = Number.isFinite(limit) ? Math.floor(limit) : DEFAULT_HISTORY_PAGE_SIZE;
|
|
86
|
+
const limitValue = Math.min(MAX_HISTORY_PAGE_SIZE, Math.max(1, requestedLimit));
|
|
87
|
+
const cursor = cursorInput === undefined ? null : decodeHistoryCursor(cursorInput);
|
|
88
|
+
if (cursorInput !== undefined && !cursor)
|
|
89
|
+
throw httpError(400, "REQUEST_INVALID");
|
|
90
|
+
const values = [projectId];
|
|
91
|
+
let cursorFilter = "";
|
|
92
|
+
if (cursor) {
|
|
93
|
+
cursorFilter = "AND (history.created_at < ? OR (history.created_at = ? AND history.rowid < ?))";
|
|
94
|
+
values.push(cursor.createdAt, cursor.createdAt, cursor.rowId);
|
|
95
|
+
}
|
|
96
|
+
values.push(limitValue + 1);
|
|
97
|
+
const rows = this.db.prepare(`SELECT history.*, history.rowid AS history_rowid,
|
|
98
|
+
user.username AS author_username, user.display_name AS author_name
|
|
99
|
+
FROM project_history_versions history LEFT JOIN users user ON user.id = history.author_id
|
|
100
|
+
WHERE history.project_id = ? ${cursorFilter}
|
|
101
|
+
ORDER BY history.created_at DESC, history.rowid DESC LIMIT ?`)
|
|
102
|
+
.all(...values);
|
|
103
|
+
const pageRows = rows.slice(0, limitValue);
|
|
104
|
+
return {
|
|
105
|
+
versions: pageRows.map((row) => versionJson(row)),
|
|
106
|
+
nextCursor: rows.length > limitValue && pageRows.length > 0 ? encodeHistoryCursor(pageRows.at(-1)) : null
|
|
107
|
+
};
|
|
108
|
+
}
|
|
70
109
|
stats(projectId) {
|
|
71
|
-
const rows = this.db.prepare(`SELECT
|
|
72
|
-
WHERE project_id =
|
|
110
|
+
const rows = this.db.prepare(`SELECT * FROM project_history_versions
|
|
111
|
+
WHERE project_id = ? ORDER BY created_at DESC, rowid DESC`).all(projectId);
|
|
73
112
|
const objects = new Map();
|
|
113
|
+
const protectedObjects = new Map();
|
|
114
|
+
let metadataBytes = 0;
|
|
115
|
+
let protectedMetadataBytes = 0;
|
|
74
116
|
let ordinaryVersionCount = 0;
|
|
75
117
|
let labeledVersionCount = 0;
|
|
76
118
|
for (const row of rows) {
|
|
119
|
+
const protectedVersion = row === rows[0] || row.reason === "initial" || Boolean(row.label);
|
|
120
|
+
metadataBytes += historyMetadataBytes(row);
|
|
121
|
+
if (protectedVersion)
|
|
122
|
+
protectedMetadataBytes += historyMetadataBytes(row);
|
|
77
123
|
if (row.label)
|
|
78
124
|
labeledVersionCount += 1;
|
|
79
125
|
else if (row.reason !== "initial")
|
|
@@ -81,13 +127,19 @@ export class ProjectHistoryService {
|
|
|
81
127
|
for (const file of Object.values(parseManifest(row.manifest_json).files)) {
|
|
82
128
|
if (!objects.has(file.digest))
|
|
83
129
|
objects.set(file.digest, file.size);
|
|
130
|
+
if (protectedVersion)
|
|
131
|
+
protectedObjects.set(file.digest, file.size);
|
|
84
132
|
}
|
|
85
133
|
}
|
|
86
134
|
const baseline = this.baseline(projectId);
|
|
87
135
|
if (baseline) {
|
|
136
|
+
const baselineBytes = Buffer.byteLength(JSON.stringify(baseline), "utf8");
|
|
137
|
+
metadataBytes += baselineBytes;
|
|
138
|
+
protectedMetadataBytes += baselineBytes;
|
|
88
139
|
for (const file of Object.values(baseline.files)) {
|
|
89
140
|
if (!objects.has(file.digest))
|
|
90
141
|
objects.set(file.digest, file.size);
|
|
142
|
+
protectedObjects.set(file.digest, file.size);
|
|
91
143
|
}
|
|
92
144
|
}
|
|
93
145
|
const objectBytes = [...objects.values()].reduce((sum, size) => sum + size, 0);
|
|
@@ -97,13 +149,21 @@ export class ProjectHistoryService {
|
|
|
97
149
|
labeledVersionCount,
|
|
98
150
|
objectCount: objects.size,
|
|
99
151
|
objectBytes,
|
|
152
|
+
metadataBytes,
|
|
153
|
+
totalBytes: objectBytes + metadataBytes,
|
|
154
|
+
protectedBytes: [...protectedObjects.values()].reduce((sum, size) => sum + size, protectedMetadataBytes),
|
|
100
155
|
maxVersions: this.config.historyMaxVersions,
|
|
101
156
|
maxStorageBytes: this.config.historyMaxStorageBytes,
|
|
102
|
-
storageLimitExceeded: objectBytes > this.config.historyMaxStorageBytes
|
|
157
|
+
storageLimitExceeded: objectBytes + metadataBytes > this.config.historyMaxStorageBytes
|
|
103
158
|
};
|
|
104
159
|
}
|
|
105
160
|
enforceRetention(projectId) {
|
|
106
161
|
this.pruneVersions(projectId);
|
|
162
|
+
// Deferred autosave maintenance can leave an object from a coalesced
|
|
163
|
+
// version without any manifest referring to it. Scan the small
|
|
164
|
+
// content-addressed object store here (never in the save path) so a
|
|
165
|
+
// restart also recovers objects left behind before a timer could run.
|
|
166
|
+
this.removeUnreferencedObjects(projectId, this.storedObjectDigests(projectId));
|
|
107
167
|
}
|
|
108
168
|
deleteVersion(projectId, versionId) {
|
|
109
169
|
const row = this.db.prepare("SELECT id, manifest_json FROM project_history_versions WHERE id = ? AND project_id = ?")
|
|
@@ -151,6 +211,14 @@ export class ProjectHistoryService {
|
|
|
151
211
|
}
|
|
152
212
|
this.assertRestoreTargetIsFile(projectId, filePath);
|
|
153
213
|
}
|
|
214
|
+
previousVersion(projectId, versionId) {
|
|
215
|
+
const row = this.db.prepare(`SELECT older.id FROM project_history_versions older
|
|
216
|
+
JOIN project_history_versions selected ON selected.id = ? AND selected.project_id = older.project_id
|
|
217
|
+
WHERE older.project_id = ? AND (older.created_at < selected.created_at
|
|
218
|
+
OR (older.created_at = selected.created_at AND older.rowid < selected.rowid))
|
|
219
|
+
ORDER BY older.created_at DESC, older.rowid DESC LIMIT 1`).get(versionId, projectId);
|
|
220
|
+
return row ? this.version(row.id, projectId) : null;
|
|
221
|
+
}
|
|
154
222
|
setLabel(projectId, versionId, label) {
|
|
155
223
|
const result = this.db.prepare("UPDATE project_history_versions SET label = ? WHERE id = ? AND project_id = ?")
|
|
156
224
|
.run(label, versionId, projectId);
|
|
@@ -272,8 +340,25 @@ export class ProjectHistoryService {
|
|
|
272
340
|
throw new Error("Invalid history object digest");
|
|
273
341
|
return path.join(outputRoot(this.config, projectId), ".texlite", "history", "objects", digest.slice(0, 2), digest);
|
|
274
342
|
}
|
|
343
|
+
storedObjectDigests(projectId) {
|
|
344
|
+
const objectsRoot = path.join(outputRoot(this.config, projectId), ".texlite", "history", "objects");
|
|
345
|
+
if (!fs.existsSync(objectsRoot))
|
|
346
|
+
return new Set();
|
|
347
|
+
const digests = new Set();
|
|
348
|
+
for (const prefix of fs.readdirSync(objectsRoot, { withFileTypes: true })) {
|
|
349
|
+
if (!prefix.isDirectory() || !/^[a-f0-9]{2}$/.test(prefix.name))
|
|
350
|
+
continue;
|
|
351
|
+
const prefixPath = path.join(objectsRoot, prefix.name);
|
|
352
|
+
for (const entry of fs.readdirSync(prefixPath, { withFileTypes: true })) {
|
|
353
|
+
if (entry.isFile() && /^[a-f0-9]{64}$/.test(entry.name) && entry.name.startsWith(prefix.name)) {
|
|
354
|
+
digests.add(entry.name);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return digests;
|
|
359
|
+
}
|
|
275
360
|
pruneVersions(projectId) {
|
|
276
|
-
const rows = this.db.prepare(`SELECT
|
|
361
|
+
const rows = this.db.prepare(`SELECT *
|
|
277
362
|
FROM project_history_versions WHERE project_id = ?
|
|
278
363
|
ORDER BY created_at DESC, rowid DESC`).all(projectId);
|
|
279
364
|
if (!rows.length)
|
|
@@ -299,19 +384,22 @@ export class ProjectHistoryService {
|
|
|
299
384
|
sizeMap.set(file.digest, file.size);
|
|
300
385
|
}
|
|
301
386
|
}
|
|
302
|
-
let
|
|
387
|
+
let retainedBytes = rows.reduce((sum, row) => sum + historyMetadataBytes(row), 0)
|
|
388
|
+
+ (baseline ? Buffer.byteLength(JSON.stringify(baseline), "utf8") : 0);
|
|
303
389
|
for (const [digest, count] of refCounts.entries()) {
|
|
304
390
|
if (count > 0)
|
|
305
|
-
|
|
391
|
+
retainedBytes += sizeMap.get(digest) ?? 0;
|
|
306
392
|
}
|
|
307
393
|
const latestId = rows[0]?.id;
|
|
308
394
|
// Ordinary versions eligible for version count capping (ordered newest to oldest)
|
|
309
395
|
const ordinaryDesc = rows.filter((row) => row.label === null && row.reason !== "initial");
|
|
310
396
|
const toDeleteIds = new Set();
|
|
397
|
+
const rowsById = new Map(rows.map((row) => [row.id, row]));
|
|
311
398
|
const removeVersionRefs = (versionId) => {
|
|
312
399
|
if (toDeleteIds.has(versionId))
|
|
313
400
|
return;
|
|
314
401
|
toDeleteIds.add(versionId);
|
|
402
|
+
retainedBytes -= historyMetadataBytes(rowsById.get(versionId));
|
|
315
403
|
const manifest = manifests.get(versionId);
|
|
316
404
|
if (!manifest)
|
|
317
405
|
return;
|
|
@@ -320,7 +408,7 @@ export class ProjectHistoryService {
|
|
|
320
408
|
if (count !== undefined) {
|
|
321
409
|
if (count === 1) {
|
|
322
410
|
refCounts.set(file.digest, 0);
|
|
323
|
-
|
|
411
|
+
retainedBytes -= sizeMap.get(file.digest) ?? 0;
|
|
324
412
|
}
|
|
325
413
|
else if (count > 1) {
|
|
326
414
|
refCounts.set(file.digest, count - 1);
|
|
@@ -328,19 +416,19 @@ export class ProjectHistoryService {
|
|
|
328
416
|
}
|
|
329
417
|
}
|
|
330
418
|
};
|
|
331
|
-
// 1. Cap by historyMaxVersions (prune excess ordinary versions
|
|
332
|
-
if (ordinaryDesc.length > this.config.historyMaxVersions) {
|
|
419
|
+
// 1. Cap by historyMaxVersions (prune excess ordinary versions when configured; 0 = unlimited)
|
|
420
|
+
if (this.config.historyMaxVersions > 0 && ordinaryDesc.length > this.config.historyMaxVersions) {
|
|
333
421
|
const obsolete = ordinaryDesc.slice(this.config.historyMaxVersions);
|
|
334
422
|
for (const row of obsolete)
|
|
335
423
|
removeVersionRefs(row.id);
|
|
336
424
|
}
|
|
337
425
|
// 2. Cap by historyMaxStorageBytes (prune remaining eligible versions from oldest to newest)
|
|
338
|
-
if (
|
|
426
|
+
if (retainedBytes > this.config.historyMaxStorageBytes) {
|
|
339
427
|
const remainingEligibleAsc = ordinaryDesc
|
|
340
428
|
.filter((row) => row.id !== latestId && !toDeleteIds.has(row.id))
|
|
341
429
|
.reverse();
|
|
342
430
|
for (const row of remainingEligibleAsc) {
|
|
343
|
-
if (
|
|
431
|
+
if (retainedBytes <= this.config.historyMaxStorageBytes)
|
|
344
432
|
break;
|
|
345
433
|
removeVersionRefs(row.id);
|
|
346
434
|
}
|
|
@@ -456,6 +544,34 @@ function parseStringArray(value) {
|
|
|
456
544
|
return [];
|
|
457
545
|
}
|
|
458
546
|
}
|
|
547
|
+
/**
|
|
548
|
+
* Keep cursors opaque so the public API is free to change its physical
|
|
549
|
+
* ordering later. `rowid` breaks ties for snapshots written in the same
|
|
550
|
+
* millisecond, which is common for file operations touching multiple paths.
|
|
551
|
+
*/
|
|
552
|
+
function encodeHistoryCursor(row) {
|
|
553
|
+
return Buffer.from(JSON.stringify({ createdAt: row.created_at, rowId: row.history_rowid }), "utf8").toString("base64url");
|
|
554
|
+
}
|
|
555
|
+
function decodeHistoryCursor(value) {
|
|
556
|
+
// Cursors are generated by this service and normally only a few dozen
|
|
557
|
+
// characters long. Bound input before decoding to keep malformed query
|
|
558
|
+
// strings cheap to reject.
|
|
559
|
+
if (value.length === 0 || value.length > 256)
|
|
560
|
+
return null;
|
|
561
|
+
try {
|
|
562
|
+
const parsed = JSON.parse(Buffer.from(value, "base64url").toString("utf8"));
|
|
563
|
+
const { createdAt, rowId } = parsed;
|
|
564
|
+
if (typeof createdAt !== "string" || typeof rowId !== "number" || !Number.isSafeInteger(rowId) || rowId <= 0)
|
|
565
|
+
return null;
|
|
566
|
+
const timestamp = Date.parse(createdAt);
|
|
567
|
+
return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === createdAt
|
|
568
|
+
? { createdAt, rowId }
|
|
569
|
+
: null;
|
|
570
|
+
}
|
|
571
|
+
catch {
|
|
572
|
+
return null;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
459
575
|
function changedManifestPaths(previous, next) {
|
|
460
576
|
const paths = new Set([...Object.keys(previous.files), ...Object.keys(next.files)]);
|
|
461
577
|
return [...paths].filter((filePath) => previous.files[filePath]?.digest !== next.files[filePath]?.digest).sort();
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coalesces non-critical history retention work. A history version is already
|
|
3
|
+
* durable before this scheduler runs; delaying maintenance can only leave
|
|
4
|
+
* extra old versions/objects temporarily, never lose a recoverable version.
|
|
5
|
+
*/
|
|
6
|
+
export const HISTORY_RETENTION_DELAY_MS = 30_000;
|
|
7
|
+
export class HistoryRetentionScheduler {
|
|
8
|
+
history;
|
|
9
|
+
timers = new Map();
|
|
10
|
+
delayMs;
|
|
11
|
+
onError;
|
|
12
|
+
constructor(history, options = {}) {
|
|
13
|
+
this.history = history;
|
|
14
|
+
this.delayMs = options.delayMs ?? HISTORY_RETENTION_DELAY_MS;
|
|
15
|
+
this.onError = options.onError;
|
|
16
|
+
}
|
|
17
|
+
schedule(projectId) {
|
|
18
|
+
if (this.timers.has(projectId))
|
|
19
|
+
return;
|
|
20
|
+
const timer = setTimeout(() => {
|
|
21
|
+
this.timers.delete(projectId);
|
|
22
|
+
try {
|
|
23
|
+
this.history.enforceRetention(projectId);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
this.onError?.(error, projectId);
|
|
27
|
+
}
|
|
28
|
+
}, this.delayMs);
|
|
29
|
+
timer.unref?.();
|
|
30
|
+
this.timers.set(projectId, timer);
|
|
31
|
+
}
|
|
32
|
+
dispose() {
|
|
33
|
+
for (const timer of this.timers.values())
|
|
34
|
+
clearTimeout(timer);
|
|
35
|
+
this.timers.clear();
|
|
36
|
+
}
|
|
37
|
+
}
|
package/dist/server/i18n.js
CHANGED
|
@@ -48,6 +48,7 @@ const enMessages = {
|
|
|
48
48
|
HISTORY_FILE_PREVIEW_UNSUPPORTED: "This historical file cannot be compared as text.",
|
|
49
49
|
HISTORY_TARGET_CONFLICT: "The historical version cannot be restored to the requested path.",
|
|
50
50
|
HISTORY_VERSION_NOT_FOUND: "The history version does not exist.",
|
|
51
|
+
SELECTION_HISTORY_SOURCE_CHANGED: "The source changed while opening selection history. Wait for synchronization, then select the passage and open its history again.",
|
|
51
52
|
INVALID_PATH: "The file path is invalid.",
|
|
52
53
|
LAST_ADMIN: "At least one active administrator must remain.",
|
|
53
54
|
LATEXMKRC_DISABLED: "Project latexmkrc files are disabled by the administrator.",
|
|
@@ -59,6 +60,7 @@ const enMessages = {
|
|
|
59
60
|
MAIN_FILE_INVALID: "The main document must be an existing .tex file.",
|
|
60
61
|
MAIN_FILE_NOT_FOUND: "The selected main document does not exist.",
|
|
61
62
|
MEMBERS_MANAGE_FORBIDDEN: "Only the project owner can manage members.",
|
|
63
|
+
MENTION_NOT_FOUND: "The mention notification does not exist.",
|
|
62
64
|
MOVE_INTO_SELF: "A folder cannot be moved into itself.",
|
|
63
65
|
OWNER_MEMBER_FORBIDDEN: "The project owner cannot be added as a member.",
|
|
64
66
|
PASSWORD_TOO_SHORT: "The password must contain at least {{minLength}} characters.",
|
|
@@ -174,6 +176,7 @@ const zhMessages = {
|
|
|
174
176
|
HISTORY_FILE_PREVIEW_UNSUPPORTED: "该历史文件不能作为文本比较。",
|
|
175
177
|
HISTORY_TARGET_CONFLICT: "无法将历史版本恢复到所请求的路径。",
|
|
176
178
|
HISTORY_VERSION_NOT_FOUND: "历史版本不存在。",
|
|
179
|
+
SELECTION_HISTORY_SOURCE_CHANGED: "打开选区历史时源码已发生变化。请等待同步完成,重新选择文本后再打开历史。",
|
|
177
180
|
INVALID_PATH: "文件路径无效。",
|
|
178
181
|
LAST_ADMIN: "系统必须保留至少一名可用管理员。",
|
|
179
182
|
LATEXMKRC_DISABLED: "管理员已禁用项目级 latexmkrc。",
|
|
@@ -185,6 +188,7 @@ const zhMessages = {
|
|
|
185
188
|
MAIN_FILE_INVALID: "主文档必须是存在的 .tex 文件。",
|
|
186
189
|
MAIN_FILE_NOT_FOUND: "所选主文档不存在。",
|
|
187
190
|
MEMBERS_MANAGE_FORBIDDEN: "只有项目所有者可以管理成员。",
|
|
191
|
+
MENTION_NOT_FOUND: "@ 提醒不存在。",
|
|
188
192
|
MOVE_INTO_SELF: "不能把文件夹移动到自身内部。",
|
|
189
193
|
OWNER_MEMBER_FORBIDDEN: "项目所有者不能作为成员添加。",
|
|
190
194
|
PASSWORD_TOO_SHORT: "密码至少需要 {{minLength}} 个字符。",
|
package/dist/server/index.js
CHANGED
|
@@ -5,12 +5,16 @@ import { activeAdminCount, openDatabase } from "./db.js";
|
|
|
5
5
|
import { buildApp } from "./app.js";
|
|
6
6
|
import { assertEnvironment } from "./environment.js";
|
|
7
7
|
import { acquireDataDirectoryLock } from "./instanceLock.js";
|
|
8
|
+
import { LogRotation } from "./logRotation.js";
|
|
8
9
|
export async function startServer(configPath) {
|
|
9
10
|
const config = loadConfig(configPath);
|
|
10
11
|
const lock = acquireDataDirectoryLock(config);
|
|
11
12
|
let db = null;
|
|
12
13
|
let app = null;
|
|
14
|
+
const logs = process.env.TEXLITE_MANAGED_LOGS === "1"
|
|
15
|
+
? new LogRotation(config.dataDir, (error) => console.error("TexLite log rotation failed:", error)) : null;
|
|
13
16
|
try {
|
|
17
|
+
await logs?.start();
|
|
14
18
|
const environment = await assertEnvironment(config);
|
|
15
19
|
db = openDatabase(config);
|
|
16
20
|
if (activeAdminCount(db) === 0) {
|
|
@@ -34,6 +38,7 @@ export async function startServer(configPath) {
|
|
|
34
38
|
db?.close();
|
|
35
39
|
}
|
|
36
40
|
finally {
|
|
41
|
+
await logs?.stop();
|
|
37
42
|
lock.release();
|
|
38
43
|
}
|
|
39
44
|
}
|
|
@@ -50,6 +55,7 @@ export async function startServer(configPath) {
|
|
|
50
55
|
db?.close();
|
|
51
56
|
}
|
|
52
57
|
finally {
|
|
58
|
+
await logs?.stop();
|
|
53
59
|
lock.release();
|
|
54
60
|
}
|
|
55
61
|
}
|
|
@@ -5,6 +5,7 @@ const definitionExtensions = /\.(?:tex|sty|cls|def|cfg|dtx|ins)$/i;
|
|
|
5
5
|
const maxIndexedFileBytes = 3 * 1024 * 1024;
|
|
6
6
|
const maxIndexedBytes = 24 * 1024 * 1024;
|
|
7
7
|
const maxIndexedFiles = 500;
|
|
8
|
+
const maxCachedProjects = 64;
|
|
8
9
|
// Core LaTeX commands are kept in the completion index even when the project
|
|
9
10
|
// has not loaded a package-specific definition yet. Keep the catalogue
|
|
10
11
|
// grouped by purpose so missing primitives are easy to spot and extend.
|
|
@@ -255,7 +256,13 @@ export class LatexCompletionService {
|
|
|
255
256
|
const existing = this.pending.get(projectId);
|
|
256
257
|
if (existing)
|
|
257
258
|
return existing;
|
|
258
|
-
const request = this.buildIncremental(projectId)
|
|
259
|
+
const request = this.buildIncremental(projectId)
|
|
260
|
+
// Do not retain a partial per-file cache when a project scan fails.
|
|
261
|
+
.catch((error) => {
|
|
262
|
+
this.invalidate(projectId);
|
|
263
|
+
throw error;
|
|
264
|
+
})
|
|
265
|
+
.finally(() => {
|
|
259
266
|
if (this.pending.get(projectId) === request)
|
|
260
267
|
this.pending.delete(projectId);
|
|
261
268
|
});
|
|
@@ -269,21 +276,22 @@ export class LatexCompletionService {
|
|
|
269
276
|
stats() {
|
|
270
277
|
return {
|
|
271
278
|
cachedProjects: this.resultCache.size,
|
|
279
|
+
cachedSymbolProjects: this.cache.size,
|
|
272
280
|
pending: this.pending.size,
|
|
273
281
|
cachedFiles: [...this.cache.values()].reduce((total, files) => total + files.size, 0)
|
|
274
282
|
};
|
|
275
283
|
}
|
|
276
284
|
async buildIncremental(projectId) {
|
|
277
285
|
const index = standardIndex();
|
|
278
|
-
const projectCache = this.cache.get(projectId) ?? new Map();
|
|
279
|
-
this.cache.set(projectId, projectCache);
|
|
280
286
|
const allEntries = (await listProjectFilesAsync(this.config, projectId)).filter((entry) => entry.type === "file").slice(0, maxIndexedFiles);
|
|
281
287
|
const signature = allEntries.map((entry) => `${entry.path}:${entry.size ?? 0}:${entry.mtimeMs ?? 0}`).sort().join("\n");
|
|
282
288
|
const cachedResult = this.resultCache.get(projectId);
|
|
283
289
|
if (cachedResult?.signature === signature) {
|
|
284
|
-
|
|
290
|
+
this.touch(projectId);
|
|
285
291
|
return cachedResult.index;
|
|
286
292
|
}
|
|
293
|
+
const projectCache = this.cache.get(projectId) ?? new Map();
|
|
294
|
+
this.cache.set(projectId, projectCache);
|
|
287
295
|
const livePaths = new Set(allEntries.map((entry) => entry.path));
|
|
288
296
|
for (const cachedPath of [...projectCache.keys()])
|
|
289
297
|
if (!livePaths.has(cachedPath))
|
|
@@ -319,14 +327,33 @@ export class LatexCompletionService {
|
|
|
319
327
|
commands: sorted(index.commands), environments: sorted(index.environments), labels: sorted(index.labels),
|
|
320
328
|
citations: sorted(index.citations), packages: sorted(index.packages), files: sorted(index.files)
|
|
321
329
|
};
|
|
322
|
-
this.resultCache.set(projectId, { signature, index: result
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
if (oldest)
|
|
326
|
-
this.resultCache.delete(oldest[0]);
|
|
327
|
-
}
|
|
330
|
+
this.resultCache.set(projectId, { signature, index: result });
|
|
331
|
+
this.touch(projectId);
|
|
332
|
+
this.evictLeastRecentlyUsedProjects();
|
|
328
333
|
return result;
|
|
329
334
|
}
|
|
335
|
+
/** Keep result and per-file symbol caches on the same project-level LRU. */
|
|
336
|
+
touch(projectId) {
|
|
337
|
+
const result = this.resultCache.get(projectId);
|
|
338
|
+
if (result) {
|
|
339
|
+
this.resultCache.delete(projectId);
|
|
340
|
+
this.resultCache.set(projectId, result);
|
|
341
|
+
}
|
|
342
|
+
const symbols = this.cache.get(projectId);
|
|
343
|
+
if (symbols) {
|
|
344
|
+
this.cache.delete(projectId);
|
|
345
|
+
this.cache.set(projectId, symbols);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
evictLeastRecentlyUsedProjects() {
|
|
349
|
+
while (this.resultCache.size > maxCachedProjects) {
|
|
350
|
+
const oldestProjectId = this.resultCache.keys().next().value;
|
|
351
|
+
if (!oldestProjectId)
|
|
352
|
+
return;
|
|
353
|
+
this.resultCache.delete(oldestProjectId);
|
|
354
|
+
this.cache.delete(oldestProjectId);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
330
357
|
}
|
|
331
358
|
function mergeIndex(target, source) {
|
|
332
359
|
for (const value of source.commands.values())
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
export const LOG_MAX_BYTES = 10 * 1024 * 1024;
|
|
4
|
+
export const LOG_CHECK_INTERVAL_MS = 60_000;
|
|
5
|
+
const LOG_BACKUPS = 3;
|
|
6
|
+
export function managedLogPaths(dataDir) {
|
|
7
|
+
const directory = path.resolve(dataDir, "logs");
|
|
8
|
+
return { stdout: path.join(directory, "stdout.log"), stderr: path.join(directory, "stderr.log") };
|
|
9
|
+
}
|
|
10
|
+
/** PM2 owns the open descriptors: copy/truncate keeps them valid across rotation. */
|
|
11
|
+
export class LogRotation {
|
|
12
|
+
dataDir;
|
|
13
|
+
onError;
|
|
14
|
+
maxBytes;
|
|
15
|
+
pending = null;
|
|
16
|
+
timer = null;
|
|
17
|
+
stopped = false;
|
|
18
|
+
constructor(dataDir, onError, maxBytes = LOG_MAX_BYTES) {
|
|
19
|
+
this.dataDir = dataDir;
|
|
20
|
+
this.onError = onError;
|
|
21
|
+
this.maxBytes = maxBytes;
|
|
22
|
+
}
|
|
23
|
+
async start() {
|
|
24
|
+
await this.check();
|
|
25
|
+
if (!this.stopped && !this.timer) {
|
|
26
|
+
this.timer = setInterval(() => { void this.check(); }, LOG_CHECK_INTERVAL_MS);
|
|
27
|
+
this.timer.unref();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
check() {
|
|
31
|
+
if (this.stopped)
|
|
32
|
+
return Promise.resolve();
|
|
33
|
+
if (this.pending)
|
|
34
|
+
return this.pending;
|
|
35
|
+
this.pending = this.rotateLogs().finally(() => { this.pending = null; });
|
|
36
|
+
return this.pending;
|
|
37
|
+
}
|
|
38
|
+
async stop() {
|
|
39
|
+
this.stopped = true;
|
|
40
|
+
if (this.timer)
|
|
41
|
+
clearInterval(this.timer);
|
|
42
|
+
this.timer = null;
|
|
43
|
+
await this.pending;
|
|
44
|
+
}
|
|
45
|
+
async rotateLogs() {
|
|
46
|
+
for (const file of Object.values(managedLogPaths(this.dataDir))) {
|
|
47
|
+
try {
|
|
48
|
+
await this.rotate(file);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
this.onError(error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async rotate(file) {
|
|
56
|
+
const stat = await fs.lstat(file).catch((error) => {
|
|
57
|
+
if (error.code === "ENOENT")
|
|
58
|
+
return null;
|
|
59
|
+
throw error;
|
|
60
|
+
});
|
|
61
|
+
if (!stat?.isFile() || stat.size < this.maxBytes)
|
|
62
|
+
return;
|
|
63
|
+
const temporary = `${file}.rotate.tmp`;
|
|
64
|
+
try {
|
|
65
|
+
// Do not truncate until a complete backup has been successfully published.
|
|
66
|
+
await fs.copyFile(file, temporary);
|
|
67
|
+
await fs.rm(`${file}.${LOG_BACKUPS}`, { force: true });
|
|
68
|
+
for (let index = LOG_BACKUPS - 1; index >= 1; index--) {
|
|
69
|
+
await fs.rename(`${file}.${index}`, `${file}.${index + 1}`).catch((error) => {
|
|
70
|
+
if (error.code !== "ENOENT")
|
|
71
|
+
throw error;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
await fs.rename(temporary, `${file}.1`);
|
|
75
|
+
// Writes between the copy and truncate can be lost; these are diagnostic logs.
|
|
76
|
+
await fs.truncate(file, 0);
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
await fs.rm(temporary, { force: true });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -1,46 +1,45 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { normalizeLucideIconName } from "
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { normalizeLucideIconName } from "../shared/projectIcons.js";
|
|
5
|
+
// The source and compiled server resolve this to the same package-local
|
|
6
|
+
// directory: <package>/dist/shared/lucide-icons. The build script creates
|
|
7
|
+
// those SVGs from the installed client dependency, keeping React and the
|
|
8
|
+
// complete Lucide component catalogue out of the long-lived server process.
|
|
9
|
+
const staticIconDirectory = fileURLToPath(new URL("../../dist/shared/lucide-icons/", import.meta.url));
|
|
10
|
+
const svgCache = new Map();
|
|
11
|
+
function staticIconPath(name) {
|
|
12
|
+
return path.join(staticIconDirectory, `${name}.svg`);
|
|
11
13
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
for (const [componentName, component] of Object.entries(installedIcons)) {
|
|
20
|
-
const slug = lucideSlug(componentName);
|
|
21
|
-
if (!iconComponents.has(slug))
|
|
22
|
-
iconComponents.set(slug, component);
|
|
14
|
+
function staticIconExists(name) {
|
|
15
|
+
try {
|
|
16
|
+
return fs.statSync(staticIconPath(name)).isFile();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
23
21
|
}
|
|
24
|
-
|
|
25
|
-
/** Resolve an official Lucide icon slug to an installed icon. */
|
|
22
|
+
/** Resolve an official Lucide slug only when a generated static SVG exists. */
|
|
26
23
|
export function resolveLucideIconName(value) {
|
|
27
24
|
const name = normalizeLucideIconName(value);
|
|
28
|
-
return name &&
|
|
25
|
+
return name && staticIconExists(name) ? name : null;
|
|
29
26
|
}
|
|
30
|
-
/**
|
|
27
|
+
/** Read a verified static SVG once for use as a small, cacheable CSS mask. */
|
|
31
28
|
export async function lucideIconSvg(name) {
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
34
|
-
return null;
|
|
35
|
-
const cached = renderedIcons.get(name);
|
|
36
|
-
if (cached)
|
|
29
|
+
const cached = svgCache.get(name);
|
|
30
|
+
if (cached !== undefined)
|
|
37
31
|
return cached;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
32
|
+
if (!resolveLucideIconName(name)) {
|
|
33
|
+
svgCache.set(name, null);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const svg = await fs.promises.readFile(staticIconPath(name), "utf8");
|
|
38
|
+
svgCache.set(name, svg);
|
|
39
|
+
return svg;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
svgCache.set(name, null);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
46
45
|
}
|