Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into Link_ATS_with_Sys
commit
e52912a927
|
|
@ -1002,6 +1002,7 @@ psql "$DATABASE_URL" -f migrations/manual/001_dashboard_rbac_and_enum.sql
|
|||
system roles that need the dashboard, seeds the eleven BRD `source_channels`, and
|
||||
backfills `source_channel_id` / stage-transition / requisition-status rows.
|
||||
|
||||
<<<<<<< HEAD
|
||||
> **Run it with the session timezone set to UTC.** The file writes `NOW()` into columns of
|
||||
> both kinds. A client whose session timezone is not UTC stores a shifted wall clock in any
|
||||
> naive column and a correct instant in the `timestamptz` ones, which is how the current dev
|
||||
|
|
@ -1019,6 +1020,9 @@ backfills `source_channel_id` / stage-transition / requisition-status rows.
|
|||
> so a fresh clone cannot reach head. Combined with `DB_AUTOGENERATE=true`, each developer's
|
||||
> instance invents its own revision ids for the same schema change and the histories diverge.
|
||||
> Fix the pattern and commit the missing revisions before anyone else clones this branch.
|
||||
=======
|
||||
```
|
||||
>>>>>>> c283ac0e50dbe497671957e7fb064edb75f5988b
|
||||
|
||||
Migrations run under a Postgres advisory lock, so several workers booting at once cannot
|
||||
migrate concurrently. Empty revisions are suppressed. Alembic's own `alembic_version` table is
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,53 @@
|
|||
"""auto
|
||||
|
||||
Revision ID: 2515ed7e2966
|
||||
Revises: 72853b8d2126
|
||||
Create Date: 2026-08-07 14:49:26.409410+00:00
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel # SQLModel renders AutoString() into migrations but adds no import
|
||||
|
||||
|
||||
revision: str = '2515ed7e2966'
|
||||
down_revision: Union[str, None] = '72853b8d2126'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
# Deliberately NOT schema-qualified: Inbox_Messages.application_status carries
|
||||
# type.schema = None, so the ORM emits the type name unqualified and resolves it
|
||||
# through search_path. Creating it as app.<name> would not match.
|
||||
application_status = sa.Enum(
|
||||
'PROCESS', 'PENDING', 'APPROVED', 'REJECTED', 'ONHOLD', 'CLOSED',
|
||||
name='candidate_application_status',
|
||||
)
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# op.add_column does NOT emit CREATE TYPE, so the ALTER below would fail with
|
||||
# `type "candidate_application_status" does not exist`.
|
||||
application_status.create(op.get_bind(), checkfirst=True)
|
||||
# server_default is required, not cosmetic: the column is NOT NULL and every
|
||||
# existing row would be null without it, which Postgres rejects outright.
|
||||
op.add_column(
|
||||
'inbox_messages',
|
||||
sa.Column(
|
||||
'application_status',
|
||||
application_status,
|
||||
nullable=False,
|
||||
server_default='CLOSED',
|
||||
),
|
||||
schema='app',
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_column('inbox_messages', 'application_status', schema='app')
|
||||
# drop_column leaves the TYPE behind; without this, re-running upgrade fails
|
||||
# with `type "candidate_application_status" already exists`.
|
||||
application_status.drop(op.get_bind(), checkfirst=True)
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
"""auto
|
||||
|
||||
Revision ID: 8c67df87f19c
|
||||
Revises: 2515ed7e2966
|
||||
Create Date: 2026-08-07 14:55:42.858317+00:00
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel # SQLModel renders AutoString() into migrations but adds no import
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
revision: str = '8c67df87f19c'
|
||||
down_revision: Union[str, None] = '2515ed7e2966'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.alter_column('inbox_messages', 'application_status',
|
||||
existing_type=postgresql.ENUM('PROCESS', 'PENDING', 'APPROVED', 'REJECTED', 'ONHOLD', 'CLOSED', name='candidate_application_status'),
|
||||
server_default=None,
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.alter_column('inbox_messages', 'application_status',
|
||||
existing_type=postgresql.ENUM('PROCESS', 'PENDING', 'APPROVED', 'REJECTED', 'ONHOLD', 'CLOSED', name='candidate_application_status'),
|
||||
server_default=sa.text("'CLOSED'::candidate_application_status"),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
"""add experience to inbox_messages
|
||||
|
||||
Revision ID: fcd3f4d69b60
|
||||
Revises: 8c67df87f19c
|
||||
Create Date: 2026-08-10 09:56:55.290497+00:00
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel # SQLModel renders AutoString() into migrations but adds no import
|
||||
|
||||
|
||||
revision: str = 'fcd3f4d69b60'
|
||||
down_revision: Union[str, None] = '8c67df87f19c'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.add_column('inbox_messages', sa.Column('experience', sqlmodel.sql.sqltypes.AutoString(), nullable=True), schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_column('inbox_messages', 'experience', schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
"""auto
|
||||
|
||||
Revision ID: ed78f1706042
|
||||
Revises: fcd3f4d69b60
|
||||
Create Date: 2026-08-11 10:07:53.324376+00:00
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel # SQLModel renders AutoString() into migrations but adds no import
|
||||
|
||||
|
||||
revision: str = 'ed78f1706042'
|
||||
down_revision: Union[str, None] = 'fcd3f4d69b60'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.add_column('inbox_messages', sa.Column('candidate_phone_number', sqlmodel.sql.sqltypes.AutoString(), nullable=True), schema='app')
|
||||
op.add_column('inbox_messages', sa.Column('current_employment', sqlmodel.sql.sqltypes.AutoString(), nullable=True), schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_column('inbox_messages', 'current_employment', schema='app')
|
||||
op.drop_column('inbox_messages', 'candidate_phone_number', schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
"""auto
|
||||
|
||||
Revision ID: d0b62342a32f
|
||||
Revises: ed78f1706042
|
||||
Create Date: 2026-08-11 11:49:25.965217+00:00
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel # SQLModel renders AutoString() into migrations but adds no import
|
||||
|
||||
|
||||
revision: str = 'd0b62342a32f'
|
||||
down_revision: Union[str, None] = 'ed78f1706042'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.create_table('notes',
|
||||
sa.Column('id', sa.Uuid(), nullable=False),
|
||||
sa.Column('note', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('user_id', sa.Uuid(), nullable=True),
|
||||
sa.Column('created_by', sa.Uuid(), nullable=True),
|
||||
sa.ForeignKeyConstraint(['created_by'], ['app.users.id'], name=op.f('fk_notes_created_by_users')),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['app.users.id'], name=op.f('fk_notes_user_id_users')),
|
||||
sa.PrimaryKeyConstraint('id', name=op.f('pk_notes')),
|
||||
schema='app'
|
||||
)
|
||||
op.create_table('activity',
|
||||
sa.Column('id', sa.Uuid(), nullable=False),
|
||||
sa.Column('activity_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('activity_date', sa.DateTime(), nullable=False),
|
||||
sa.Column('activity_time', sa.DateTime(), nullable=False),
|
||||
sa.Column('activity_status', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('description', sqlmodel.sql.sqltypes.AutoString(), nullable=True),
|
||||
sa.Column('inbox_id', sa.Integer(), nullable=True),
|
||||
sa.ForeignKeyConstraint(['inbox_id'], ['app.inbox.id'], name=op.f('fk_activity_inbox_id_inbox')),
|
||||
sa.PrimaryKeyConstraint('id', name=op.f('pk_activity')),
|
||||
schema='app'
|
||||
)
|
||||
op.create_table('feedback',
|
||||
sa.Column('id', sa.Uuid(), nullable=False),
|
||||
sa.Column('review', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('financial_status', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('score', sa.Float(), nullable=False),
|
||||
sa.Column('note', sqlmodel.sql.sqltypes.AutoString(), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('reviewed_by', sa.Uuid(), nullable=True),
|
||||
sa.Column('inbox_id', sa.Integer(), nullable=True),
|
||||
sa.ForeignKeyConstraint(['inbox_id'], ['app.inbox.id'], name=op.f('fk_feedback_inbox_id_inbox')),
|
||||
sa.ForeignKeyConstraint(['reviewed_by'], ['app.users.id'], name=op.f('fk_feedback_reviewed_by_users')),
|
||||
sa.PrimaryKeyConstraint('id', name=op.f('pk_feedback')),
|
||||
schema='app'
|
||||
)
|
||||
op.create_table('interviews',
|
||||
sa.Column('id', sa.Uuid(), nullable=False),
|
||||
sa.Column('interview_date', sa.DateTime(), nullable=False),
|
||||
sa.Column('interview_time', sa.DateTime(), nullable=False),
|
||||
sa.Column('interview_type', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('interview_status', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('inbox_id', sa.Integer(), nullable=True),
|
||||
sa.ForeignKeyConstraint(['inbox_id'], ['app.inbox.id'], name=op.f('fk_interviews_inbox_id_inbox')),
|
||||
sa.PrimaryKeyConstraint('id', name=op.f('pk_interviews')),
|
||||
schema='app'
|
||||
)
|
||||
op.add_column('inbox', sa.Column('favorite', sa.Boolean(), nullable=True), schema='app')
|
||||
op.add_column('inbox', sa.Column('rating', sa.Float(), nullable=True), schema='app')
|
||||
op.add_column('inbox_messages', sa.Column('candidate_education', sqlmodel.sql.sqltypes.AutoString(), nullable=True), schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_column('inbox_messages', 'candidate_education', schema='app')
|
||||
op.drop_column('inbox', 'rating', schema='app')
|
||||
op.drop_column('inbox', 'favorite', schema='app')
|
||||
op.drop_table('interviews', schema='app')
|
||||
op.drop_table('feedback', schema='app')
|
||||
op.drop_table('activity', schema='app')
|
||||
op.drop_table('notes', schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
"""auto
|
||||
|
||||
Revision ID: 681a78158447
|
||||
Revises: d0b62342a32f
|
||||
Create Date: 2026-08-11 13:11:58.032282+00:00
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel # SQLModel renders AutoString() into migrations but adds no import
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
revision: str = '681a78158447'
|
||||
down_revision: Union[str, None] = 'd0b62342a32f'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.alter_column('activity', 'activity_date',
|
||||
existing_type=postgresql.TIMESTAMP(),
|
||||
type_=sa.DateTime(timezone=True),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('activity', 'activity_time',
|
||||
existing_type=postgresql.TIMESTAMP(),
|
||||
type_=sa.DateTime(timezone=True),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('feedback', 'created_at',
|
||||
existing_type=postgresql.TIMESTAMP(),
|
||||
type_=sa.DateTime(timezone=True),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('feedback', 'updated_at',
|
||||
existing_type=postgresql.TIMESTAMP(),
|
||||
type_=sa.DateTime(timezone=True),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('interviews', 'interview_date',
|
||||
existing_type=postgresql.TIMESTAMP(),
|
||||
type_=sa.DateTime(timezone=True),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('interviews', 'interview_time',
|
||||
existing_type=postgresql.TIMESTAMP(),
|
||||
type_=sa.DateTime(timezone=True),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('notes', 'created_at',
|
||||
existing_type=postgresql.TIMESTAMP(),
|
||||
type_=sa.DateTime(timezone=True),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('notes', 'updated_at',
|
||||
existing_type=postgresql.TIMESTAMP(),
|
||||
type_=sa.DateTime(timezone=True),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.alter_column('notes', 'updated_at',
|
||||
existing_type=sa.DateTime(timezone=True),
|
||||
type_=postgresql.TIMESTAMP(),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('notes', 'created_at',
|
||||
existing_type=sa.DateTime(timezone=True),
|
||||
type_=postgresql.TIMESTAMP(),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('interviews', 'interview_time',
|
||||
existing_type=sa.DateTime(timezone=True),
|
||||
type_=postgresql.TIMESTAMP(),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('interviews', 'interview_date',
|
||||
existing_type=sa.DateTime(timezone=True),
|
||||
type_=postgresql.TIMESTAMP(),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('feedback', 'updated_at',
|
||||
existing_type=sa.DateTime(timezone=True),
|
||||
type_=postgresql.TIMESTAMP(),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('feedback', 'created_at',
|
||||
existing_type=sa.DateTime(timezone=True),
|
||||
type_=postgresql.TIMESTAMP(),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('activity', 'activity_time',
|
||||
existing_type=sa.DateTime(timezone=True),
|
||||
type_=postgresql.TIMESTAMP(),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
op.alter_column('activity', 'activity_date',
|
||||
existing_type=sa.DateTime(timezone=True),
|
||||
type_=postgresql.TIMESTAMP(),
|
||||
existing_nullable=False,
|
||||
schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
"""auto
|
||||
|
||||
Revision ID: 67c4c7974afa
|
||||
Revises: 681a78158447
|
||||
Create Date: 2026-08-11 13:52:11.674108+00:00
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel # SQLModel renders AutoString() into migrations but adds no import
|
||||
|
||||
|
||||
revision: str = '67c4c7974afa'
|
||||
down_revision: Union[str, None] = '681a78158447'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.add_column('inbox_messages', sa.Column('assigned_job_post_id', sa.Uuid(), nullable=True), schema='app')
|
||||
op.create_index(op.f('ix_inbox_messages_assigned_job_post_id'), 'inbox_messages', ['assigned_job_post_id'], unique=False, schema='app')
|
||||
op.create_foreign_key(op.f('fk_inbox_messages_assigned_job_post_id_job_posts'), 'inbox_messages', 'job_posts', ['assigned_job_post_id'], ['id'], source_schema='app', referent_schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_constraint(op.f('fk_inbox_messages_assigned_job_post_id_job_posts'), 'inbox_messages', schema='app', type_='foreignkey')
|
||||
op.drop_index(op.f('ix_inbox_messages_assigned_job_post_id'), table_name='inbox_messages', schema='app')
|
||||
op.drop_column('inbox_messages', 'assigned_job_post_id', schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
"""auto
|
||||
|
||||
Revision ID: 4b34909ae551
|
||||
Revises: 67c4c7974afa
|
||||
Create Date: 2026-08-12 07:46:38.028948+00:00
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel # SQLModel renders AutoString() into migrations but adds no import
|
||||
|
||||
|
||||
revision: str = '4b34909ae551'
|
||||
down_revision: Union[str, None] = '67c4c7974afa'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.create_table('manual_upload_candidate',
|
||||
sa.Column('id', sa.Uuid(), nullable=False),
|
||||
sa.Column('candidate_email', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('candidate_name', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('candidate_phone', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('job_post_id', sa.Uuid(), nullable=True),
|
||||
sa.Column('full_text', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('current_company', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('user_id', sa.Uuid(), nullable=True),
|
||||
sa.Column('platform', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('created_by', sa.Uuid(), nullable=True),
|
||||
sa.Column('experience', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('status', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['created_by'], ['app.users.id'], name=op.f('fk_manual_upload_candidate_created_by_users')),
|
||||
sa.ForeignKeyConstraint(['job_post_id'], ['app.job_posts.id'], name=op.f('fk_manual_upload_candidate_job_post_id_job_posts')),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['app.users.id'], name=op.f('fk_manual_upload_candidate_user_id_users')),
|
||||
sa.PrimaryKeyConstraint('id', name=op.f('pk_manual_upload_candidate')),
|
||||
schema='app'
|
||||
)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_table('manual_upload_candidate', schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
"""auto
|
||||
|
||||
Revision ID: 1a7c0e30aaab
|
||||
Revises: 4b34909ae551
|
||||
Create Date: 2026-08-12 08:17:21.212665+00:00
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel # SQLModel renders AutoString() into migrations but adds no import
|
||||
|
||||
|
||||
revision: str = '1a7c0e30aaab'
|
||||
down_revision: Union[str, None] = '4b34909ae551'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.add_column('manual_upload_candidate', sa.Column('referral_by', sqlmodel.sql.sqltypes.AutoString(), server_default='', nullable=False), schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_column('manual_upload_candidate', 'referral_by', schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
"""auto
|
||||
|
||||
Revision ID: 6ec5e105dce3
|
||||
Revises: 1a7c0e30aaab
|
||||
Create Date: 2026-08-12 08:45:01.957310+00:00
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel # SQLModel renders AutoString() into migrations but adds no import
|
||||
|
||||
|
||||
revision: str = '6ec5e105dce3'
|
||||
down_revision: Union[str, None] = '1a7c0e30aaab'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.add_column('manual_upload_candidate', sa.Column('file_name', sqlmodel.sql.sqltypes.AutoString(), server_default='', nullable=False), schema='app')
|
||||
op.add_column('manual_upload_candidate', sa.Column('file_path', sqlmodel.sql.sqltypes.AutoString(), server_default='', nullable=False), schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_column('manual_upload_candidate', 'file_path', schema='app')
|
||||
op.drop_column('manual_upload_candidate', 'file_name', schema='app')
|
||||
# ### end Alembic commands ###
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
"""Taskiq CV-upload broker — isolated Redis stream so manual uploads
|
||||
never sit behind the bulk /email/fetch backlog.
|
||||
|
||||
Worker: taskiq worker taskiq_management.cv_broker_setup:cv_broker inbox.cv_tasks
|
||||
Scheduler: taskiq scheduler taskiq_management.cv_broker_setup:cv_scheduler inbox.cv_tasks
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
from dotenv import load_dotenv
|
||||
from taskiq import TaskiqScheduler
|
||||
from taskiq.middlewares import SmartRetryMiddleware
|
||||
from taskiq.schedule_sources import LabelScheduleSource
|
||||
from taskiq_redis import (
|
||||
ListRedisScheduleSource,
|
||||
RedisAsyncResultBackend,
|
||||
RedisStreamBroker,
|
||||
)
|
||||
|
||||
from taskiq_management.broker_setup import MAX_RETRIES,RETRY_DELAY
|
||||
from taskiq_management.middleware import DeadLetterMiddleware
|
||||
|
||||
load_dotenv()
|
||||
|
||||
REDIS_URL=os.getenv("REDIS_URL","redis://localhost:6379/0")
|
||||
CV_QUEUE_NAME=os.getenv("TASKIQ_CV_QUEUE_NAME","cv_upload")
|
||||
|
||||
result_backend=RedisAsyncResultBackend(redis_url=REDIS_URL)
|
||||
cv_schedule_source=ListRedisScheduleSource(url=REDIS_URL,prefix="taskiq:schedule:cv")
|
||||
|
||||
cv_broker=(
|
||||
RedisStreamBroker(
|
||||
url=REDIS_URL,
|
||||
queue_name=CV_QUEUE_NAME,
|
||||
consumer_group_name=os.getenv("TASKIQ_CONSUMER_GROUP","taskiq"),
|
||||
idle_timeout=int(os.getenv("TASKIQ_IDLE_TIMEOUT_MS","600000")),
|
||||
)
|
||||
.with_result_backend(result_backend)
|
||||
.with_middlewares(
|
||||
DeadLetterMiddleware(redis_url=REDIS_URL),
|
||||
SmartRetryMiddleware(
|
||||
default_retry_count=MAX_RETRIES,
|
||||
default_retry_label=True,
|
||||
default_delay=RETRY_DELAY,
|
||||
use_jitter=True,
|
||||
use_delay_exponent=True,
|
||||
max_delay_exponent=float(os.getenv("TASKIQ_MAX_DELAY","120")),
|
||||
schedule_source=cv_schedule_source,
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
cv_scheduler=TaskiqScheduler(
|
||||
broker=cv_broker,
|
||||
sources=[cv_schedule_source,LabelScheduleSource(cv_broker)],
|
||||
)
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<!-- viewport-fit=cover lets the layout reach under the iOS notch/home bar;
|
||||
the safe-area insets in styles.css keep content clear of them.
|
||||
No maximum-scale/user-scalable — pinch-zoom must stay available. -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
<meta name="format-detection" content="telephone=no" />
|
||||
<!-- Per-route titles are set at runtime by useRouteMeta. -->
|
||||
<title>TalentFlow · Applicant Tracking System</title>
|
||||
<meta name="theme-color" content="#004d43" media="(prefers-color-scheme: light)" />
|
||||
<meta name="theme-color" content="#0e1d1f" media="(prefers-color-scheme: dark)" />
|
||||
|
||||
<!-- Utopia brand type: Belleza (main headings) + Inter as the metric-
|
||||
compatible stand-in for Neue Montreal, which is a licensed face.
|
||||
If Neue Montreal is installed locally it wins via the CSS stack. -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Belleza&family=Inter:wght@400;500;600;700;800&display=swap" />
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><rect width='100' height='100' rx='22' fill='%23004d43'/><g transform='translate(14 32) scale(0.72)'><path d='M100 3.65C97.86 20.99 91.89 43.03 79.48 55.33 76 58.77 71.84 61.46 66.96 62.14 50.4 64.46 41.84 47.5 29.07 42.7 21.85 39.98 14.5 42.02 9.66 47.95 6.54 51.78 4.49 56.35 2.97 61.13 2.41 61.64 0.97 61.66 0 61.31L0 0.13C1.05 0 2.27 0.02 3.09 0.28 14.9 15.86 26.77 30.82 40.15 45.28L60.79 24.7C67.38 18.22 74.41 12.74 82.59 8.51 88.11 5.83 93.64 3.93 100 3.65Z' fill='%23ceff71'/></g></svg>" />
|
||||
<script type="module" crossorigin src="/assets/index-D3fSq-cJ.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-CSn67wit.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../baseline-browser-mapping/dist/cli.cjs" "$@"
|
||||
else
|
||||
exec node "$basedir/../baseline-browser-mapping/dist/cli.cjs" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\baseline-browser-mapping\dist\cli.cjs" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../baseline-browser-mapping/dist/cli.cjs" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../baseline-browser-mapping/dist/cli.cjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../baseline-browser-mapping/dist/cli.cjs" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../baseline-browser-mapping/dist/cli.cjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../browserslist/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../browserslist/cli.js" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\browserslist\cli.js" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../browserslist/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../browserslist/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../esbuild/bin/esbuild" "$@"
|
||||
else
|
||||
exec node "$basedir/../esbuild/bin/esbuild" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esbuild\bin\esbuild" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../jsesc/bin/jsesc" "$@"
|
||||
else
|
||||
exec node "$basedir/../jsesc/bin/jsesc" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\jsesc\bin\jsesc" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../jsesc/bin/jsesc" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../jsesc/bin/jsesc" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../jsesc/bin/jsesc" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../jsesc/bin/jsesc" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../json5/lib/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../json5/lib/cli.js" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\json5\lib\cli.js" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.cjs" "$@"
|
||||
else
|
||||
exec node "$basedir/../nanoid/bin/nanoid.cjs" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.cjs" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../@babel/parser/bin/babel-parser.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../@babel/parser/bin/babel-parser.js" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@babel\parser\bin\babel-parser.js" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../@babel/parser/bin/babel-parser.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../rollup/dist/bin/rollup" "$@"
|
||||
else
|
||||
exec node "$basedir/../rollup/dist/bin/rollup" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\rollup\dist\bin\rollup" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../rollup/dist/bin/rollup" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../semver/bin/semver.js" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../@bramus/specificity/bin/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../@bramus/specificity/bin/cli.js" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@bramus\specificity\bin\cli.js" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../@bramus/specificity/bin/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../@bramus/specificity/bin/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../@bramus/specificity/bin/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../@bramus/specificity/bin/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../tldts/bin/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../tldts/bin/cli.js" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\tldts\bin\cli.js" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../tldts/bin/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../tldts/bin/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../tldts/bin/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../tldts/bin/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../update-browserslist-db/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../update-browserslist-db/cli.js" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\update-browserslist-db\cli.js" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../update-browserslist-db/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../vite/bin/vite.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../vite/bin/vite.js" "$@"
|
||||
fi
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\vite\bin\vite.js" %*
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../vite/bin/vite.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
File diff suppressed because it is too large
Load Diff
444
frontend/node_modules/.vite/deps/@tanstack_react-query-devtools.js
generated
vendored
Normal file
444
frontend/node_modules/.vite/deps/@tanstack_react-query-devtools.js
generated
vendored
Normal file
|
|
@ -0,0 +1,444 @@
|
|||
"use client";
|
||||
import {
|
||||
createComponent,
|
||||
createSignal,
|
||||
lazy,
|
||||
mergeProps,
|
||||
render,
|
||||
setupStyleSheet
|
||||
} from "./chunk-TLA2YRDJ.js";
|
||||
import {
|
||||
onlineManager,
|
||||
useQueryClient
|
||||
} from "./chunk-Y5A5GOKP.js";
|
||||
import {
|
||||
require_jsx_runtime
|
||||
} from "./chunk-4N5S3525.js";
|
||||
import {
|
||||
require_react
|
||||
} from "./chunk-6333SFGK.js";
|
||||
import {
|
||||
__privateAdd,
|
||||
__privateGet,
|
||||
__privateSet,
|
||||
__toESM
|
||||
} from "./chunk-QWN5BXRD.js";
|
||||
|
||||
// node_modules/@tanstack/react-query-devtools/build/modern/ReactQueryDevtools.js
|
||||
var React = __toESM(require_react(), 1);
|
||||
|
||||
// node_modules/@tanstack/query-devtools/build/dev.js
|
||||
var _client, _onlineManager, _queryFlavor, _version, _isMounted, _styleNonce, _shadowDOMTarget, _buttonPosition, _position, _initialIsOpen, _errorTypes, _hideDisabledQueries, _Component, _theme, _dispose, _a;
|
||||
var TanstackQueryDevtools = (_a = class {
|
||||
constructor(config) {
|
||||
__privateAdd(this, _client);
|
||||
__privateAdd(this, _onlineManager);
|
||||
__privateAdd(this, _queryFlavor);
|
||||
__privateAdd(this, _version);
|
||||
__privateAdd(this, _isMounted, false);
|
||||
__privateAdd(this, _styleNonce);
|
||||
__privateAdd(this, _shadowDOMTarget);
|
||||
__privateAdd(this, _buttonPosition);
|
||||
__privateAdd(this, _position);
|
||||
__privateAdd(this, _initialIsOpen);
|
||||
__privateAdd(this, _errorTypes);
|
||||
__privateAdd(this, _hideDisabledQueries);
|
||||
__privateAdd(this, _Component);
|
||||
__privateAdd(this, _theme);
|
||||
__privateAdd(this, _dispose);
|
||||
const {
|
||||
client,
|
||||
queryFlavor,
|
||||
version,
|
||||
onlineManager: onlineManager2,
|
||||
buttonPosition,
|
||||
position,
|
||||
initialIsOpen,
|
||||
errorTypes,
|
||||
styleNonce,
|
||||
shadowDOMTarget,
|
||||
hideDisabledQueries,
|
||||
theme
|
||||
} = config;
|
||||
__privateSet(this, _client, createSignal(client));
|
||||
__privateSet(this, _queryFlavor, queryFlavor);
|
||||
__privateSet(this, _version, version);
|
||||
__privateSet(this, _onlineManager, onlineManager2);
|
||||
__privateSet(this, _styleNonce, styleNonce);
|
||||
__privateSet(this, _shadowDOMTarget, shadowDOMTarget);
|
||||
__privateSet(this, _buttonPosition, createSignal(buttonPosition));
|
||||
__privateSet(this, _position, createSignal(position));
|
||||
__privateSet(this, _initialIsOpen, createSignal(initialIsOpen));
|
||||
__privateSet(this, _errorTypes, createSignal(errorTypes));
|
||||
__privateSet(this, _hideDisabledQueries, createSignal(hideDisabledQueries));
|
||||
__privateSet(this, _theme, createSignal(theme));
|
||||
}
|
||||
setButtonPosition(position) {
|
||||
__privateGet(this, _buttonPosition)[1](position);
|
||||
}
|
||||
setPosition(position) {
|
||||
__privateGet(this, _position)[1](position);
|
||||
}
|
||||
setInitialIsOpen(isOpen) {
|
||||
__privateGet(this, _initialIsOpen)[1](isOpen);
|
||||
}
|
||||
setErrorTypes(errorTypes) {
|
||||
__privateGet(this, _errorTypes)[1](errorTypes);
|
||||
}
|
||||
setClient(client) {
|
||||
__privateGet(this, _client)[1](client);
|
||||
}
|
||||
setTheme(theme) {
|
||||
__privateGet(this, _theme)[1](theme);
|
||||
}
|
||||
mount(el) {
|
||||
if (__privateGet(this, _isMounted)) {
|
||||
throw new Error("Devtools is already mounted");
|
||||
}
|
||||
const dispose = render(() => {
|
||||
const _self$ = this;
|
||||
const [btnPosition] = __privateGet(this, _buttonPosition);
|
||||
const [pos] = __privateGet(this, _position);
|
||||
const [isOpen] = __privateGet(this, _initialIsOpen);
|
||||
const [errors] = __privateGet(this, _errorTypes);
|
||||
const [hideDisabledQueries] = __privateGet(this, _hideDisabledQueries);
|
||||
const [queryClient] = __privateGet(this, _client);
|
||||
const [theme] = __privateGet(this, _theme);
|
||||
let Devtools;
|
||||
if (__privateGet(this, _Component)) {
|
||||
Devtools = __privateGet(this, _Component);
|
||||
} else {
|
||||
Devtools = lazy(() => import("./SO26Z5QU-ZOVSYIPF.js"));
|
||||
__privateSet(this, _Component, Devtools);
|
||||
}
|
||||
setupStyleSheet(__privateGet(this, _styleNonce), __privateGet(this, _shadowDOMTarget));
|
||||
return createComponent(Devtools, mergeProps({
|
||||
get queryFlavor() {
|
||||
return __privateGet(_self$, _queryFlavor);
|
||||
},
|
||||
get version() {
|
||||
return __privateGet(_self$, _version);
|
||||
},
|
||||
get onlineManager() {
|
||||
return __privateGet(_self$, _onlineManager);
|
||||
},
|
||||
get shadowDOMTarget() {
|
||||
return __privateGet(_self$, _shadowDOMTarget);
|
||||
}
|
||||
}, {
|
||||
get client() {
|
||||
return queryClient();
|
||||
},
|
||||
get buttonPosition() {
|
||||
return btnPosition();
|
||||
},
|
||||
get position() {
|
||||
return pos();
|
||||
},
|
||||
get initialIsOpen() {
|
||||
return isOpen();
|
||||
},
|
||||
get errorTypes() {
|
||||
return errors();
|
||||
},
|
||||
get hideDisabledQueries() {
|
||||
return hideDisabledQueries();
|
||||
},
|
||||
get theme() {
|
||||
return theme();
|
||||
}
|
||||
}));
|
||||
}, el);
|
||||
__privateSet(this, _isMounted, true);
|
||||
__privateSet(this, _dispose, dispose);
|
||||
}
|
||||
unmount() {
|
||||
var _a3;
|
||||
if (!__privateGet(this, _isMounted)) {
|
||||
throw new Error("Devtools is not mounted");
|
||||
}
|
||||
(_a3 = __privateGet(this, _dispose)) == null ? void 0 : _a3.call(this);
|
||||
__privateSet(this, _isMounted, false);
|
||||
}
|
||||
}, _client = new WeakMap(), _onlineManager = new WeakMap(), _queryFlavor = new WeakMap(), _version = new WeakMap(), _isMounted = new WeakMap(), _styleNonce = new WeakMap(), _shadowDOMTarget = new WeakMap(), _buttonPosition = new WeakMap(), _position = new WeakMap(), _initialIsOpen = new WeakMap(), _errorTypes = new WeakMap(), _hideDisabledQueries = new WeakMap(), _Component = new WeakMap(), _theme = new WeakMap(), _dispose = new WeakMap(), _a);
|
||||
var _client2, _onlineManager2, _queryFlavor2, _version2, _isMounted2, _styleNonce2, _shadowDOMTarget2, _buttonPosition2, _position2, _initialIsOpen2, _errorTypes2, _hideDisabledQueries2, _onClose, _Component2, _theme2, _dispose2, _a2;
|
||||
var TanstackQueryDevtoolsPanel = (_a2 = class {
|
||||
constructor(config) {
|
||||
__privateAdd(this, _client2);
|
||||
__privateAdd(this, _onlineManager2);
|
||||
__privateAdd(this, _queryFlavor2);
|
||||
__privateAdd(this, _version2);
|
||||
__privateAdd(this, _isMounted2, false);
|
||||
__privateAdd(this, _styleNonce2);
|
||||
__privateAdd(this, _shadowDOMTarget2);
|
||||
__privateAdd(this, _buttonPosition2);
|
||||
__privateAdd(this, _position2);
|
||||
__privateAdd(this, _initialIsOpen2);
|
||||
__privateAdd(this, _errorTypes2);
|
||||
__privateAdd(this, _hideDisabledQueries2);
|
||||
__privateAdd(this, _onClose);
|
||||
__privateAdd(this, _Component2);
|
||||
__privateAdd(this, _theme2);
|
||||
__privateAdd(this, _dispose2);
|
||||
const {
|
||||
client,
|
||||
queryFlavor,
|
||||
version,
|
||||
onlineManager: onlineManager2,
|
||||
buttonPosition,
|
||||
position,
|
||||
initialIsOpen,
|
||||
errorTypes,
|
||||
styleNonce,
|
||||
shadowDOMTarget,
|
||||
onClose,
|
||||
hideDisabledQueries,
|
||||
theme
|
||||
} = config;
|
||||
__privateSet(this, _client2, createSignal(client));
|
||||
__privateSet(this, _queryFlavor2, queryFlavor);
|
||||
__privateSet(this, _version2, version);
|
||||
__privateSet(this, _onlineManager2, onlineManager2);
|
||||
__privateSet(this, _styleNonce2, styleNonce);
|
||||
__privateSet(this, _shadowDOMTarget2, shadowDOMTarget);
|
||||
__privateSet(this, _buttonPosition2, createSignal(buttonPosition));
|
||||
__privateSet(this, _position2, createSignal(position));
|
||||
__privateSet(this, _initialIsOpen2, createSignal(initialIsOpen));
|
||||
__privateSet(this, _errorTypes2, createSignal(errorTypes));
|
||||
__privateSet(this, _hideDisabledQueries2, createSignal(hideDisabledQueries));
|
||||
__privateSet(this, _onClose, createSignal(onClose));
|
||||
__privateSet(this, _theme2, createSignal(theme));
|
||||
}
|
||||
setButtonPosition(position) {
|
||||
__privateGet(this, _buttonPosition2)[1](position);
|
||||
}
|
||||
setPosition(position) {
|
||||
__privateGet(this, _position2)[1](position);
|
||||
}
|
||||
setInitialIsOpen(isOpen) {
|
||||
__privateGet(this, _initialIsOpen2)[1](isOpen);
|
||||
}
|
||||
setErrorTypes(errorTypes) {
|
||||
__privateGet(this, _errorTypes2)[1](errorTypes);
|
||||
}
|
||||
setClient(client) {
|
||||
__privateGet(this, _client2)[1](client);
|
||||
}
|
||||
setOnClose(onClose) {
|
||||
__privateGet(this, _onClose)[1](() => onClose);
|
||||
}
|
||||
setTheme(theme) {
|
||||
__privateGet(this, _theme2)[1](theme);
|
||||
}
|
||||
mount(el) {
|
||||
if (__privateGet(this, _isMounted2)) {
|
||||
throw new Error("Devtools is already mounted");
|
||||
}
|
||||
const dispose = render(() => {
|
||||
const _self$ = this;
|
||||
const [btnPosition] = __privateGet(this, _buttonPosition2);
|
||||
const [pos] = __privateGet(this, _position2);
|
||||
const [isOpen] = __privateGet(this, _initialIsOpen2);
|
||||
const [errors] = __privateGet(this, _errorTypes2);
|
||||
const [hideDisabledQueries] = __privateGet(this, _hideDisabledQueries2);
|
||||
const [queryClient] = __privateGet(this, _client2);
|
||||
const [onClose] = __privateGet(this, _onClose);
|
||||
const [theme] = __privateGet(this, _theme2);
|
||||
let Devtools;
|
||||
if (__privateGet(this, _Component2)) {
|
||||
Devtools = __privateGet(this, _Component2);
|
||||
} else {
|
||||
Devtools = lazy(() => import("./MYKLHYJZ-QSK7XAY4.js"));
|
||||
__privateSet(this, _Component2, Devtools);
|
||||
}
|
||||
setupStyleSheet(__privateGet(this, _styleNonce2), __privateGet(this, _shadowDOMTarget2));
|
||||
return createComponent(Devtools, mergeProps({
|
||||
get queryFlavor() {
|
||||
return __privateGet(_self$, _queryFlavor2);
|
||||
},
|
||||
get version() {
|
||||
return __privateGet(_self$, _version2);
|
||||
},
|
||||
get onlineManager() {
|
||||
return __privateGet(_self$, _onlineManager2);
|
||||
},
|
||||
get shadowDOMTarget() {
|
||||
return __privateGet(_self$, _shadowDOMTarget2);
|
||||
}
|
||||
}, {
|
||||
get client() {
|
||||
return queryClient();
|
||||
},
|
||||
get buttonPosition() {
|
||||
return btnPosition();
|
||||
},
|
||||
get position() {
|
||||
return pos();
|
||||
},
|
||||
get initialIsOpen() {
|
||||
return isOpen();
|
||||
},
|
||||
get errorTypes() {
|
||||
return errors();
|
||||
},
|
||||
get hideDisabledQueries() {
|
||||
return hideDisabledQueries();
|
||||
},
|
||||
get onClose() {
|
||||
return onClose();
|
||||
},
|
||||
get theme() {
|
||||
return theme();
|
||||
}
|
||||
}));
|
||||
}, el);
|
||||
__privateSet(this, _isMounted2, true);
|
||||
__privateSet(this, _dispose2, dispose);
|
||||
}
|
||||
unmount() {
|
||||
var _a3;
|
||||
if (!__privateGet(this, _isMounted2)) {
|
||||
throw new Error("Devtools is not mounted");
|
||||
}
|
||||
(_a3 = __privateGet(this, _dispose2)) == null ? void 0 : _a3.call(this);
|
||||
__privateSet(this, _isMounted2, false);
|
||||
}
|
||||
}, _client2 = new WeakMap(), _onlineManager2 = new WeakMap(), _queryFlavor2 = new WeakMap(), _version2 = new WeakMap(), _isMounted2 = new WeakMap(), _styleNonce2 = new WeakMap(), _shadowDOMTarget2 = new WeakMap(), _buttonPosition2 = new WeakMap(), _position2 = new WeakMap(), _initialIsOpen2 = new WeakMap(), _errorTypes2 = new WeakMap(), _hideDisabledQueries2 = new WeakMap(), _onClose = new WeakMap(), _Component2 = new WeakMap(), _theme2 = new WeakMap(), _dispose2 = new WeakMap(), _a2);
|
||||
|
||||
// node_modules/@tanstack/react-query-devtools/build/modern/ReactQueryDevtools.js
|
||||
var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
|
||||
function ReactQueryDevtools(props) {
|
||||
const queryClient = useQueryClient(props.client);
|
||||
const ref = React.useRef(null);
|
||||
const {
|
||||
buttonPosition,
|
||||
position,
|
||||
initialIsOpen,
|
||||
errorTypes,
|
||||
styleNonce,
|
||||
shadowDOMTarget,
|
||||
hideDisabledQueries,
|
||||
theme
|
||||
} = props;
|
||||
const [devtools] = React.useState(
|
||||
new TanstackQueryDevtools({
|
||||
client: queryClient,
|
||||
queryFlavor: "React Query",
|
||||
version: "5",
|
||||
onlineManager,
|
||||
buttonPosition,
|
||||
position,
|
||||
initialIsOpen,
|
||||
errorTypes,
|
||||
styleNonce,
|
||||
shadowDOMTarget,
|
||||
hideDisabledQueries,
|
||||
theme
|
||||
})
|
||||
);
|
||||
React.useEffect(() => {
|
||||
devtools.setClient(queryClient);
|
||||
}, [queryClient, devtools]);
|
||||
React.useEffect(() => {
|
||||
if (buttonPosition) {
|
||||
devtools.setButtonPosition(buttonPosition);
|
||||
}
|
||||
}, [buttonPosition, devtools]);
|
||||
React.useEffect(() => {
|
||||
if (position) {
|
||||
devtools.setPosition(position);
|
||||
}
|
||||
}, [position, devtools]);
|
||||
React.useEffect(() => {
|
||||
devtools.setInitialIsOpen(initialIsOpen || false);
|
||||
}, [initialIsOpen, devtools]);
|
||||
React.useEffect(() => {
|
||||
devtools.setErrorTypes(errorTypes || []);
|
||||
}, [errorTypes, devtools]);
|
||||
React.useEffect(() => {
|
||||
devtools.setTheme(theme);
|
||||
}, [theme, devtools]);
|
||||
React.useEffect(() => {
|
||||
if (ref.current) {
|
||||
devtools.mount(ref.current);
|
||||
}
|
||||
return () => {
|
||||
devtools.unmount();
|
||||
};
|
||||
}, [devtools]);
|
||||
return (0, import_jsx_runtime.jsx)("div", { dir: "ltr", className: "tsqd-parent-container", ref });
|
||||
}
|
||||
|
||||
// node_modules/@tanstack/react-query-devtools/build/modern/ReactQueryDevtoolsPanel.js
|
||||
var React2 = __toESM(require_react(), 1);
|
||||
var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
|
||||
function ReactQueryDevtoolsPanel(props) {
|
||||
const queryClient = useQueryClient(props.client);
|
||||
const ref = React2.useRef(null);
|
||||
const {
|
||||
errorTypes,
|
||||
styleNonce,
|
||||
shadowDOMTarget,
|
||||
hideDisabledQueries,
|
||||
theme
|
||||
} = props;
|
||||
const [devtools] = React2.useState(
|
||||
new TanstackQueryDevtoolsPanel({
|
||||
client: queryClient,
|
||||
queryFlavor: "React Query",
|
||||
version: "5",
|
||||
onlineManager,
|
||||
buttonPosition: "bottom-left",
|
||||
position: "bottom",
|
||||
initialIsOpen: true,
|
||||
errorTypes,
|
||||
styleNonce,
|
||||
shadowDOMTarget,
|
||||
onClose: props.onClose,
|
||||
hideDisabledQueries,
|
||||
theme
|
||||
})
|
||||
);
|
||||
React2.useEffect(() => {
|
||||
devtools.setClient(queryClient);
|
||||
}, [queryClient, devtools]);
|
||||
React2.useEffect(() => {
|
||||
devtools.setOnClose(props.onClose ?? (() => {
|
||||
}));
|
||||
}, [props.onClose, devtools]);
|
||||
React2.useEffect(() => {
|
||||
devtools.setErrorTypes(errorTypes || []);
|
||||
}, [errorTypes, devtools]);
|
||||
React2.useEffect(() => {
|
||||
devtools.setTheme(theme);
|
||||
}, [theme, devtools]);
|
||||
React2.useEffect(() => {
|
||||
if (ref.current) {
|
||||
devtools.mount(ref.current);
|
||||
}
|
||||
return () => {
|
||||
devtools.unmount();
|
||||
};
|
||||
}, [devtools]);
|
||||
return (0, import_jsx_runtime2.jsx)(
|
||||
"div",
|
||||
{
|
||||
style: { height: "500px", ...props.style },
|
||||
className: "tsqd-parent-container",
|
||||
ref
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// node_modules/@tanstack/react-query-devtools/build/modern/index.js
|
||||
var ReactQueryDevtools2 = false ? function() {
|
||||
return null;
|
||||
} : ReactQueryDevtools;
|
||||
var ReactQueryDevtoolsPanel2 = false ? function() {
|
||||
return null;
|
||||
} : ReactQueryDevtoolsPanel;
|
||||
export {
|
||||
ReactQueryDevtools2 as ReactQueryDevtools,
|
||||
ReactQueryDevtoolsPanel2 as ReactQueryDevtoolsPanel
|
||||
};
|
||||
//# sourceMappingURL=@tanstack_react-query-devtools.js.map
|
||||
7
frontend/node_modules/.vite/deps/@tanstack_react-query-devtools.js.map
generated
vendored
Normal file
7
frontend/node_modules/.vite/deps/@tanstack_react-query-devtools.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,123 @@
|
|||
import {
|
||||
CancelledError,
|
||||
HydrationBoundary,
|
||||
InfiniteQueryObserver,
|
||||
IsRestoringProvider,
|
||||
Mutation,
|
||||
MutationCache,
|
||||
MutationObserver,
|
||||
QueriesObserver,
|
||||
Query,
|
||||
QueryCache,
|
||||
QueryClient,
|
||||
QueryClientContext,
|
||||
QueryClientProvider,
|
||||
QueryErrorResetBoundary,
|
||||
QueryObserver,
|
||||
dataTagErrorSymbol,
|
||||
dataTagSymbol,
|
||||
defaultScheduler,
|
||||
defaultShouldDehydrateMutation,
|
||||
defaultShouldDehydrateQuery,
|
||||
dehydrate,
|
||||
environmentManager,
|
||||
focusManager,
|
||||
hashKey,
|
||||
hydrate,
|
||||
infiniteQueryOptions,
|
||||
isCancelledError,
|
||||
isServer,
|
||||
keepPreviousData,
|
||||
matchMutation,
|
||||
matchQuery,
|
||||
mutationOptions,
|
||||
noop,
|
||||
notifyManager,
|
||||
onlineManager,
|
||||
partialMatchKey,
|
||||
queryOptions,
|
||||
replaceEqualDeep,
|
||||
shouldThrowError,
|
||||
skipToken,
|
||||
streamedQuery,
|
||||
timeoutManager,
|
||||
unsetMarker,
|
||||
useInfiniteQuery,
|
||||
useIsFetching,
|
||||
useIsMutating,
|
||||
useIsRestoring,
|
||||
useMutation,
|
||||
useMutationState,
|
||||
usePrefetchInfiniteQuery,
|
||||
usePrefetchQuery,
|
||||
useQueries,
|
||||
useQuery,
|
||||
useQueryClient,
|
||||
useQueryErrorResetBoundary,
|
||||
useSuspenseInfiniteQuery,
|
||||
useSuspenseQueries,
|
||||
useSuspenseQuery
|
||||
} from "./chunk-Y5A5GOKP.js";
|
||||
import "./chunk-4N5S3525.js";
|
||||
import "./chunk-6333SFGK.js";
|
||||
import "./chunk-QWN5BXRD.js";
|
||||
export {
|
||||
CancelledError,
|
||||
HydrationBoundary,
|
||||
InfiniteQueryObserver,
|
||||
IsRestoringProvider,
|
||||
Mutation,
|
||||
MutationCache,
|
||||
MutationObserver,
|
||||
QueriesObserver,
|
||||
Query,
|
||||
QueryCache,
|
||||
QueryClient,
|
||||
QueryClientContext,
|
||||
QueryClientProvider,
|
||||
QueryErrorResetBoundary,
|
||||
QueryObserver,
|
||||
dataTagErrorSymbol,
|
||||
dataTagSymbol,
|
||||
defaultScheduler,
|
||||
defaultShouldDehydrateMutation,
|
||||
defaultShouldDehydrateQuery,
|
||||
dehydrate,
|
||||
environmentManager,
|
||||
streamedQuery as experimental_streamedQuery,
|
||||
focusManager,
|
||||
hashKey,
|
||||
hydrate,
|
||||
infiniteQueryOptions,
|
||||
isCancelledError,
|
||||
isServer,
|
||||
keepPreviousData,
|
||||
matchMutation,
|
||||
matchQuery,
|
||||
mutationOptions,
|
||||
noop,
|
||||
notifyManager,
|
||||
onlineManager,
|
||||
partialMatchKey,
|
||||
queryOptions,
|
||||
replaceEqualDeep,
|
||||
shouldThrowError,
|
||||
skipToken,
|
||||
timeoutManager,
|
||||
unsetMarker,
|
||||
useInfiniteQuery,
|
||||
useIsFetching,
|
||||
useIsMutating,
|
||||
useIsRestoring,
|
||||
useMutation,
|
||||
useMutationState,
|
||||
usePrefetchInfiniteQuery,
|
||||
usePrefetchQuery,
|
||||
useQueries,
|
||||
useQuery,
|
||||
useQueryClient,
|
||||
useQueryErrorResetBoundary,
|
||||
useSuspenseInfiniteQuery,
|
||||
useSuspenseQueries,
|
||||
useSuspenseQuery
|
||||
};
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sourcesContent": [],
|
||||
"mappings": "",
|
||||
"names": []
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
{
|
||||
"hash": "e445d3fc",
|
||||
"configHash": "4ee64dba",
|
||||
"lockfileHash": "fac4afd8",
|
||||
"browserHash": "340fe321",
|
||||
"optimized": {
|
||||
"react": {
|
||||
"src": "../../react/index.js",
|
||||
"file": "react.js",
|
||||
"fileHash": "0d8caf33",
|
||||
"needsInterop": true
|
||||
},
|
||||
"react-dom": {
|
||||
"src": "../../react-dom/index.js",
|
||||
"file": "react-dom.js",
|
||||
"fileHash": "e31b8bc6",
|
||||
"needsInterop": true
|
||||
},
|
||||
"react/jsx-dev-runtime": {
|
||||
"src": "../../react/jsx-dev-runtime.js",
|
||||
"file": "react_jsx-dev-runtime.js",
|
||||
"fileHash": "8d3fcfde",
|
||||
"needsInterop": true
|
||||
},
|
||||
"react/jsx-runtime": {
|
||||
"src": "../../react/jsx-runtime.js",
|
||||
"file": "react_jsx-runtime.js",
|
||||
"fileHash": "e0c49b5a",
|
||||
"needsInterop": true
|
||||
},
|
||||
"@tanstack/react-query": {
|
||||
"src": "../../@tanstack/react-query/build/modern/index.js",
|
||||
"file": "@tanstack_react-query.js",
|
||||
"fileHash": "436099d2",
|
||||
"needsInterop": false
|
||||
},
|
||||
"@tanstack/react-query-devtools": {
|
||||
"src": "../../@tanstack/react-query-devtools/build/modern/index.js",
|
||||
"file": "@tanstack_react-query-devtools.js",
|
||||
"fileHash": "956f8b03",
|
||||
"needsInterop": false
|
||||
},
|
||||
"react-dom/client": {
|
||||
"src": "../../react-dom/client.js",
|
||||
"file": "react-dom_client.js",
|
||||
"fileHash": "b0d019a2",
|
||||
"needsInterop": true
|
||||
},
|
||||
"react-router-dom": {
|
||||
"src": "../../react-router-dom/dist/index.mjs",
|
||||
"file": "react-router-dom.js",
|
||||
"fileHash": "26f4c951",
|
||||
"needsInterop": false
|
||||
}
|
||||
},
|
||||
"chunks": {
|
||||
"SO26Z5QU-ZOVSYIPF": {
|
||||
"file": "SO26Z5QU-ZOVSYIPF.js"
|
||||
},
|
||||
"MYKLHYJZ-QSK7XAY4": {
|
||||
"file": "MYKLHYJZ-QSK7XAY4.js"
|
||||
},
|
||||
"chunk-FRHYXP7X": {
|
||||
"file": "chunk-FRHYXP7X.js"
|
||||
},
|
||||
"chunk-TLA2YRDJ": {
|
||||
"file": "chunk-TLA2YRDJ.js"
|
||||
},
|
||||
"chunk-Y5A5GOKP": {
|
||||
"file": "chunk-Y5A5GOKP.js"
|
||||
},
|
||||
"chunk-4N5S3525": {
|
||||
"file": "chunk-4N5S3525.js"
|
||||
},
|
||||
"chunk-XFCDPA5W": {
|
||||
"file": "chunk-XFCDPA5W.js"
|
||||
},
|
||||
"chunk-6333SFGK": {
|
||||
"file": "chunk-6333SFGK.js"
|
||||
},
|
||||
"chunk-QWN5BXRD": {
|
||||
"file": "chunk-QWN5BXRD.js"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
var __create = Object.create;
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __typeError = (msg) => {
|
||||
throw TypeError(msg);
|
||||
};
|
||||
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
||||
var __commonJS = (cb, mod) => function __require() {
|
||||
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||||
// If the importer is in node compatibility mode or this is not an ESM
|
||||
// file that has been converted to a CommonJS file using a Babel-
|
||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||||
mod
|
||||
));
|
||||
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
||||
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
||||
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
||||
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
||||
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
||||
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
||||
var __privateWrapper = (obj, member, setter, getter) => ({
|
||||
set _(value) {
|
||||
__privateSet(obj, member, value, setter);
|
||||
},
|
||||
get _() {
|
||||
return __privateGet(obj, member, getter);
|
||||
}
|
||||
});
|
||||
|
||||
export {
|
||||
__commonJS,
|
||||
__toESM,
|
||||
__publicField,
|
||||
__privateGet,
|
||||
__privateAdd,
|
||||
__privateSet,
|
||||
__privateMethod,
|
||||
__privateWrapper
|
||||
};
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sourcesContent": [],
|
||||
"mappings": "",
|
||||
"names": []
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"type": "module"
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import {
|
||||
require_react_dom
|
||||
} from "./chunk-XFCDPA5W.js";
|
||||
import "./chunk-6333SFGK.js";
|
||||
import "./chunk-QWN5BXRD.js";
|
||||
export default require_react_dom();
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sourcesContent": [],
|
||||
"mappings": "",
|
||||
"names": []
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,5 @@
|
|||
import {
|
||||
require_react
|
||||
} from "./chunk-6333SFGK.js";
|
||||
import "./chunk-QWN5BXRD.js";
|
||||
export default require_react();
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sourcesContent": [],
|
||||
"mappings": "",
|
||||
"names": []
|
||||
}
|
||||
|
|
@ -0,0 +1,278 @@
|
|||
import {
|
||||
require_react
|
||||
} from "./chunk-6333SFGK.js";
|
||||
import {
|
||||
__commonJS
|
||||
} from "./chunk-QWN5BXRD.js";
|
||||
|
||||
// node_modules/react/cjs/react-jsx-dev-runtime.development.js
|
||||
var require_react_jsx_dev_runtime_development = __commonJS({
|
||||
"node_modules/react/cjs/react-jsx-dev-runtime.development.js"(exports) {
|
||||
"use strict";
|
||||
(function() {
|
||||
function getComponentNameFromType(type) {
|
||||
if (null == type) return null;
|
||||
if ("function" === typeof type)
|
||||
return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null;
|
||||
if ("string" === typeof type) return type;
|
||||
switch (type) {
|
||||
case REACT_FRAGMENT_TYPE:
|
||||
return "Fragment";
|
||||
case REACT_PROFILER_TYPE:
|
||||
return "Profiler";
|
||||
case REACT_STRICT_MODE_TYPE:
|
||||
return "StrictMode";
|
||||
case REACT_SUSPENSE_TYPE:
|
||||
return "Suspense";
|
||||
case REACT_SUSPENSE_LIST_TYPE:
|
||||
return "SuspenseList";
|
||||
case REACT_ACTIVITY_TYPE:
|
||||
return "Activity";
|
||||
}
|
||||
if ("object" === typeof type)
|
||||
switch ("number" === typeof type.tag && console.error(
|
||||
"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
|
||||
), type.$$typeof) {
|
||||
case REACT_PORTAL_TYPE:
|
||||
return "Portal";
|
||||
case REACT_CONTEXT_TYPE:
|
||||
return type.displayName || "Context";
|
||||
case REACT_CONSUMER_TYPE:
|
||||
return (type._context.displayName || "Context") + ".Consumer";
|
||||
case REACT_FORWARD_REF_TYPE:
|
||||
var innerType = type.render;
|
||||
type = type.displayName;
|
||||
type || (type = innerType.displayName || innerType.name || "", type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef");
|
||||
return type;
|
||||
case REACT_MEMO_TYPE:
|
||||
return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || "Memo";
|
||||
case REACT_LAZY_TYPE:
|
||||
innerType = type._payload;
|
||||
type = type._init;
|
||||
try {
|
||||
return getComponentNameFromType(type(innerType));
|
||||
} catch (x) {
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function testStringCoercion(value) {
|
||||
return "" + value;
|
||||
}
|
||||
function checkKeyStringCoercion(value) {
|
||||
try {
|
||||
testStringCoercion(value);
|
||||
var JSCompiler_inline_result = false;
|
||||
} catch (e) {
|
||||
JSCompiler_inline_result = true;
|
||||
}
|
||||
if (JSCompiler_inline_result) {
|
||||
JSCompiler_inline_result = console;
|
||||
var JSCompiler_temp_const = JSCompiler_inline_result.error;
|
||||
var JSCompiler_inline_result$jscomp$0 = "function" === typeof Symbol && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
|
||||
JSCompiler_temp_const.call(
|
||||
JSCompiler_inline_result,
|
||||
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
|
||||
JSCompiler_inline_result$jscomp$0
|
||||
);
|
||||
return testStringCoercion(value);
|
||||
}
|
||||
}
|
||||
function getTaskName(type) {
|
||||
if (type === REACT_FRAGMENT_TYPE) return "<>";
|
||||
if ("object" === typeof type && null !== type && type.$$typeof === REACT_LAZY_TYPE)
|
||||
return "<...>";
|
||||
try {
|
||||
var name = getComponentNameFromType(type);
|
||||
return name ? "<" + name + ">" : "<...>";
|
||||
} catch (x) {
|
||||
return "<...>";
|
||||
}
|
||||
}
|
||||
function getOwner() {
|
||||
var dispatcher = ReactSharedInternals.A;
|
||||
return null === dispatcher ? null : dispatcher.getOwner();
|
||||
}
|
||||
function UnknownOwner() {
|
||||
return Error("react-stack-top-frame");
|
||||
}
|
||||
function hasValidKey(config) {
|
||||
if (hasOwnProperty.call(config, "key")) {
|
||||
var getter = Object.getOwnPropertyDescriptor(config, "key").get;
|
||||
if (getter && getter.isReactWarning) return false;
|
||||
}
|
||||
return void 0 !== config.key;
|
||||
}
|
||||
function defineKeyPropWarningGetter(props, displayName) {
|
||||
function warnAboutAccessingKey() {
|
||||
specialPropKeyWarningShown || (specialPropKeyWarningShown = true, console.error(
|
||||
"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
|
||||
displayName
|
||||
));
|
||||
}
|
||||
warnAboutAccessingKey.isReactWarning = true;
|
||||
Object.defineProperty(props, "key", {
|
||||
get: warnAboutAccessingKey,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
function elementRefGetterWithDeprecationWarning() {
|
||||
var componentName = getComponentNameFromType(this.type);
|
||||
didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = true, console.error(
|
||||
"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
|
||||
));
|
||||
componentName = this.props.ref;
|
||||
return void 0 !== componentName ? componentName : null;
|
||||
}
|
||||
function ReactElement(type, key, props, owner, debugStack, debugTask) {
|
||||
var refProp = props.ref;
|
||||
type = {
|
||||
$$typeof: REACT_ELEMENT_TYPE,
|
||||
type,
|
||||
key,
|
||||
props,
|
||||
_owner: owner
|
||||
};
|
||||
null !== (void 0 !== refProp ? refProp : null) ? Object.defineProperty(type, "ref", {
|
||||
enumerable: false,
|
||||
get: elementRefGetterWithDeprecationWarning
|
||||
}) : Object.defineProperty(type, "ref", { enumerable: false, value: null });
|
||||
type._store = {};
|
||||
Object.defineProperty(type._store, "validated", {
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
value: 0
|
||||
});
|
||||
Object.defineProperty(type, "_debugInfo", {
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
value: null
|
||||
});
|
||||
Object.defineProperty(type, "_debugStack", {
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
value: debugStack
|
||||
});
|
||||
Object.defineProperty(type, "_debugTask", {
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
value: debugTask
|
||||
});
|
||||
Object.freeze && (Object.freeze(type.props), Object.freeze(type));
|
||||
return type;
|
||||
}
|
||||
function jsxDEVImpl(type, config, maybeKey, isStaticChildren, debugStack, debugTask) {
|
||||
var children = config.children;
|
||||
if (void 0 !== children)
|
||||
if (isStaticChildren)
|
||||
if (isArrayImpl(children)) {
|
||||
for (isStaticChildren = 0; isStaticChildren < children.length; isStaticChildren++)
|
||||
validateChildKeys(children[isStaticChildren]);
|
||||
Object.freeze && Object.freeze(children);
|
||||
} else
|
||||
console.error(
|
||||
"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
|
||||
);
|
||||
else validateChildKeys(children);
|
||||
if (hasOwnProperty.call(config, "key")) {
|
||||
children = getComponentNameFromType(type);
|
||||
var keys = Object.keys(config).filter(function(k) {
|
||||
return "key" !== k;
|
||||
});
|
||||
isStaticChildren = 0 < keys.length ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" : "{key: someKey}";
|
||||
didWarnAboutKeySpread[children + isStaticChildren] || (keys = 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}", console.error(
|
||||
'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />',
|
||||
isStaticChildren,
|
||||
children,
|
||||
keys,
|
||||
children
|
||||
), didWarnAboutKeySpread[children + isStaticChildren] = true);
|
||||
}
|
||||
children = null;
|
||||
void 0 !== maybeKey && (checkKeyStringCoercion(maybeKey), children = "" + maybeKey);
|
||||
hasValidKey(config) && (checkKeyStringCoercion(config.key), children = "" + config.key);
|
||||
if ("key" in config) {
|
||||
maybeKey = {};
|
||||
for (var propName in config)
|
||||
"key" !== propName && (maybeKey[propName] = config[propName]);
|
||||
} else maybeKey = config;
|
||||
children && defineKeyPropWarningGetter(
|
||||
maybeKey,
|
||||
"function" === typeof type ? type.displayName || type.name || "Unknown" : type
|
||||
);
|
||||
return ReactElement(
|
||||
type,
|
||||
children,
|
||||
maybeKey,
|
||||
getOwner(),
|
||||
debugStack,
|
||||
debugTask
|
||||
);
|
||||
}
|
||||
function validateChildKeys(node) {
|
||||
isValidElement(node) ? node._store && (node._store.validated = 1) : "object" === typeof node && null !== node && node.$$typeof === REACT_LAZY_TYPE && ("fulfilled" === node._payload.status ? isValidElement(node._payload.value) && node._payload.value._store && (node._payload.value._store.validated = 1) : node._store && (node._store.validated = 1));
|
||||
}
|
||||
function isValidElement(object) {
|
||||
return "object" === typeof object && null !== object && object.$$typeof === REACT_ELEMENT_TYPE;
|
||||
}
|
||||
var React = require_react(), REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, hasOwnProperty = Object.prototype.hasOwnProperty, isArrayImpl = Array.isArray, createTask = console.createTask ? console.createTask : function() {
|
||||
return null;
|
||||
};
|
||||
React = {
|
||||
react_stack_bottom_frame: function(callStackForError) {
|
||||
return callStackForError();
|
||||
}
|
||||
};
|
||||
var specialPropKeyWarningShown;
|
||||
var didWarnAboutElementRef = {};
|
||||
var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(
|
||||
React,
|
||||
UnknownOwner
|
||||
)();
|
||||
var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
|
||||
var didWarnAboutKeySpread = {};
|
||||
exports.Fragment = REACT_FRAGMENT_TYPE;
|
||||
exports.jsxDEV = function(type, config, maybeKey, isStaticChildren) {
|
||||
var trackActualOwner = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
|
||||
return jsxDEVImpl(
|
||||
type,
|
||||
config,
|
||||
maybeKey,
|
||||
isStaticChildren,
|
||||
trackActualOwner ? Error("react-stack-top-frame") : unknownOwnerDebugStack,
|
||||
trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
|
||||
);
|
||||
};
|
||||
})();
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/react/jsx-dev-runtime.js
|
||||
var require_jsx_dev_runtime = __commonJS({
|
||||
"node_modules/react/jsx-dev-runtime.js"(exports, module) {
|
||||
if (false) {
|
||||
module.exports = null;
|
||||
} else {
|
||||
module.exports = require_react_jsx_dev_runtime_development();
|
||||
}
|
||||
}
|
||||
});
|
||||
export default require_jsx_dev_runtime();
|
||||
/*! Bundled license information:
|
||||
|
||||
react/cjs/react-jsx-dev-runtime.development.js:
|
||||
(**
|
||||
* @license React
|
||||
* react-jsx-dev-runtime.development.js
|
||||
*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
*/
|
||||
//# sourceMappingURL=react_jsx-dev-runtime.js.map
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,6 @@
|
|||
import {
|
||||
require_jsx_runtime
|
||||
} from "./chunk-4N5S3525.js";
|
||||
import "./chunk-6333SFGK.js";
|
||||
import "./chunk-QWN5BXRD.js";
|
||||
export default require_jsx_runtime();
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sourcesContent": [],
|
||||
"mappings": "",
|
||||
"names": []
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2024 asamuzaK (Kazz)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
# CSS color
|
||||
|
||||
[](https://github.com/asamuzaK/cssColor/actions/workflows/node.js.yml)
|
||||
[](https://github.com/asamuzaK/cssColor/actions/workflows/github-code-scanning/codeql)
|
||||
[](https://www.npmjs.com/package/@asamuzakjp/css-color)
|
||||
|
||||
A robust and modern library to resolve, parse, and convert CSS colors.
|
||||
Supports the latest CSS Color Module Level 4 & 5 specifications.
|
||||
|
||||
## Features
|
||||
|
||||
- **Modern CSS Color Support:** Accurately resolves `color-mix()`, `color()`, modern color spaces (`oklch`, `oklab`, `lch`, `lab`, `hwb`, etc.), and relative colors (`lab(from red l a b)`, `color(from red xyz-d50 x y z)`).
|
||||
- **Deep Resolution:** Deeply resolves `var()` and `calc()` functions embedded within color values.
|
||||
- **Gradient Parsing:** Supports parsing and validation for `linear-gradient`, `radial-gradient`, and `conic-gradient`.
|
||||
- **Comprehensive Color Conversion:** Highly accurate converters between HEX, HSL, HWB, LAB, LCH, Oklab, Oklch, RGB, and XYZ color spaces.
|
||||
- **Bonus Utilities:** Includes convenient functions to validate colors or gradients, extract CSS variables, and safely split CSS values.
|
||||
- **Used in jsdom:** Adopted as the CSS color parser and resolver for `jsdom`.
|
||||
- **Pure ESM with TypeScript Ready:** Native ESM (`type: "module"`) with comprehensive TypeScript definitions.
|
||||
|
||||
## Install
|
||||
|
||||
```console
|
||||
npm i @asamuzakjp/css-color
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```javascript
|
||||
import { convert, resolve, utils } from '@asamuzakjp/css-color';
|
||||
```
|
||||
|
||||
### Samples
|
||||
|
||||
1. Resolve complex modern CSS colors:
|
||||
|
||||
```javascript
|
||||
const resolvedMix = resolve(
|
||||
'color-mix(in oklab, lch(67.5345 42.5 258.2), color(srgb 0 0.5 0))'
|
||||
);
|
||||
// => 'oklab(0.620754 -0.0931934 -0.00374881)'
|
||||
```
|
||||
|
||||
2. Resolve with Custom Properties and calc():
|
||||
|
||||
```javascript
|
||||
const resolvedVar = resolve('hsl(calc(var(--base-hue) * 3) 100% 50% / .5)', {
|
||||
customProperty: { '--base-hue': '210deg' }
|
||||
});
|
||||
// => 'rgba(128, 0, 255, 0.5)'
|
||||
```
|
||||
|
||||
3. Convert between color spaces:
|
||||
|
||||
```javascript
|
||||
const hex = convert.colorToHex('lab(46.2775% -47.5621 48.5837)');
|
||||
// => '#008000'
|
||||
```
|
||||
|
||||
4. Validate colors and gradients:
|
||||
|
||||
```javascript
|
||||
const isColor = utils.isColor('light-dark(red, blue)');
|
||||
// => true
|
||||
|
||||
const isGradient = utils.isGradient(
|
||||
'conic-gradient(from 0.5turn at 50% 50%, red, blue)'
|
||||
);
|
||||
// => true
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
### `resolve(color, opt?)`
|
||||
|
||||
Resolves a CSS color string into its computed or specified value. System colors are not supported.
|
||||
|
||||
- **`color`** `<string>`: The CSS color value to resolve.
|
||||
- **`opt`** `<object>` _(optional)_:
|
||||
- `opt.currentColor`: Color to use for the `currentcolor` keyword.
|
||||
- `opt.customProperty`: Object containing `--` prefixed keys and their values, or a `callback(propertyName)` function to dynamically resolve CSS variables.
|
||||
- `opt.dimension`: Object mapping units (e.g., `em`, `rem`, `vw`) to pixel numbers, or a `callback(unit)` function for dynamic length resolution.
|
||||
- `opt.format`: Output format. Options: `computedValue` (default), `specifiedValue`, `hex`, `hexAlpha`.
|
||||
- `opt.colorScheme`: `normal` (default), `light`, or `dark` (useful for `light-dark()` resolution).
|
||||
|
||||
### `convert`
|
||||
|
||||
A collection of color conversion utilities.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
| Function | Returns | Options | Description |
|
||||
| :-------------- | :-------------- | :-------------- | :-------------- |
|
||||
| `convert.colorToHex(value, opt?)` | `string \| null` | `opt.alpha` `<boolean>`<br>_(+ see `resolve` options)_ | Returns `#rrggbb` or `#rrggbbaa` (if `opt.alpha` is true). |
|
||||
| `convert.colorToHsl(value, opt?)` | `number[]` | _See `resolve` options_ | Converts to HSL channels: `[h, s, l, alpha]` |
|
||||
| `convert.colorToHwb(value, opt?)` | `number[]` | _See `resolve` options_ | Converts to HWB channels: `[h, w, b, alpha]` |
|
||||
| `convert.colorToLab(value, opt?)` | `number[]` | _See `resolve` options_ | Converts to CIE LAB channels: `[l, a, b, alpha]` |
|
||||
| `convert.colorToLch(value, opt?)` | `number[]` | _See `resolve` options_ | Converts to CIE LCH channels: `[l, c, h, alpha]` |
|
||||
| `convert.colorToOklab(value, opt?)` | `number[]` | _See `resolve` options_ | Converts to Oklab channels: `[l, a, b, alpha]` |
|
||||
| `convert.colorToOklch(value, opt?)` | `number[]` | _See `resolve` options_ | Converts to Oklch channels: `[l, c, h, alpha]` |
|
||||
| `convert.colorToRgb(value, opt?)` | `number[]` | _See `resolve` options_ | Converts to sRGB channels: `[r, g, b, alpha]` |
|
||||
| `convert.colorToXyz(value, opt?)` | `number[]` | _See `resolve` options_ | Converts to CIE XYZ channels (defaults to D65): `[x, y, z, alpha]` |
|
||||
| `convert.colorToXyzD50(value, opt?)` | `number[]` | _See `resolve` options_ | Converts to CIE XYZ channels with D50 white point. |
|
||||
|
||||
### `utils`
|
||||
|
||||
Helpful internal tools exposed for advanced usage, parsing, and validation.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
| Function | Returns | Options (`opt`) | Description |
|
||||
| :-------------- | :-------------- | :-------------- | :-------------- |
|
||||
| `utils.cssCalc(value, opt?)` | `string` | `opt.dimension`<br>_(+ see `resolve` options)_ | Resolves CSS `calc()` expressions. |
|
||||
| `utils.cssVar(value, opt?)` | `string` | `opt.customProperty`<br>_(+ see `resolve` options)_ | Resolves CSS `var()` expressions. |
|
||||
| `utils.extractDashedIdent(value)` | `string[]` | _None_ | Extracts custom property names (dashed-ident tokens) from a value. |
|
||||
| `utils.isColor(value, opt?)` | `boolean` | _See `resolve` options_ | Returns `true` if the string is a valid CSS color. |
|
||||
| `utils.isGradient(value, opt?)` | `boolean` | _See `resolve` options_ | Returns `true` if the string is a valid CSS gradient. |
|
||||
| `utils.resolveGradient(value, opt?)` | `string` | _See `resolve` options_ | Resolves CSS gradient strings. |
|
||||
| `utils.resolveLengthInPixels(value, unit, opt?)` | `number` | `opt.dimension`<br>_(+ see `resolve` options)_ | Converts an absolute or relative CSS length to pixels. |
|
||||
| `utils.splitValue(value, opt?)` | `string[]` | `opt.delimiter` `<string>`<br>`opt.preserveComment` `<boolean>` | Safely splits a CSS value by a specified delimiter (` `, `,`, `/`). |
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
The following resources have been of great help in the development of this library:
|
||||
|
||||
- [csstools/postcss-plugins](https://github.com/csstools/postcss-plugins)
|
||||
- [lru-cache](https://github.com/isaacs/node-lru-cache)
|
||||
|
||||
---
|
||||
|
||||
Copyright (c) 2024 [asamuzaK (Kazz)](https://github.com/asamuzaK/)
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
/*!
|
||||
* CSS color - Resolve, parse, convert CSS color.
|
||||
* @license MIT
|
||||
* @copyright asamuzaK (Kazz)
|
||||
* @see {@link https://github.com/asamuzaK/cssColor/blob/main/LICENSE}
|
||||
*/
|
||||
export { convert } from './js/convert.js';
|
||||
export { resolve } from './js/resolve.js';
|
||||
export declare const utils: {
|
||||
cssCalc: (value: string, opt?: import('./js/typedef.js').Options) => string;
|
||||
cssVar: (value: string, opt?: import('./js/typedef.js').Options) => string;
|
||||
extractDashedIdent: (value: string) => string[];
|
||||
isColor: (value: unknown, opt?: import('./js/typedef.js').Options) => boolean;
|
||||
isGradient: (value: string, opt?: import('./js/typedef.js').Options) => boolean;
|
||||
resolveGradient: (value: string, opt?: import('./js/typedef.js').Options) => string;
|
||||
resolveLengthInPixels: (value: number | string, unit: string | undefined, opt?: import('./js/typedef.js').Options) => number;
|
||||
splitValue: (value: string, opt?: import('./js/typedef.js').Options) => string[];
|
||||
};
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
import { extractDashedIdent, resolveLengthInPixels, splitValue } from "./js/util.js";
|
||||
import { isColor, resolve } from "./js/resolve.js";
|
||||
import { cssCalc, cssVar } from "./js/css-calc-var.js";
|
||||
import { isGradient, resolveGradient } from "./js/css-gradient.js";
|
||||
import { convert } from "./js/convert.js";
|
||||
//#region src/index.ts
|
||||
/*!
|
||||
* CSS color - Resolve, parse, convert CSS color.
|
||||
* @license MIT
|
||||
* @copyright asamuzaK (Kazz)
|
||||
* @see {@link https://github.com/asamuzaK/cssColor/blob/main/LICENSE}
|
||||
*/
|
||||
var utils = {
|
||||
cssCalc,
|
||||
cssVar,
|
||||
extractDashedIdent,
|
||||
isColor,
|
||||
isGradient,
|
||||
resolveGradient,
|
||||
resolveLengthInPixels,
|
||||
splitValue
|
||||
};
|
||||
//#endregion
|
||||
export { convert, resolve, utils };
|
||||
|
||||
//# sourceMappingURL=index.js.map
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["/*!\n * CSS color - Resolve, parse, convert CSS color.\n * @license MIT\n * @copyright asamuzaK (Kazz)\n * @see {@link https://github.com/asamuzaK/cssColor/blob/main/LICENSE}\n */\n\nimport { cssCalc, cssVar } from './js/css-calc-var';\nimport { isGradient, resolveGradient } from './js/css-gradient';\nimport { isColor } from './js/resolve';\nimport {\n extractDashedIdent,\n resolveLengthInPixels,\n splitValue\n} from './js/util';\n\nexport { convert } from './js/convert';\nexport { resolve } from './js/resolve';\n/* utils */\nexport const utils = {\n cssCalc,\n cssVar,\n extractDashedIdent,\n isColor,\n isGradient,\n resolveGradient,\n resolveLengthInPixels,\n splitValue\n};\n"],"mappings":";;;;;;;;;;;;AAmBA,IAAa,QAAQ;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue