chore: merge main into feat/tzaware branch

This commit is contained in:
Jennifer Richards 2022-10-11 14:57:57 -03:00 committed by GitHub
commit 0391383c42
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
87 changed files with 845 additions and 665 deletions
.pnp.cjs
.yarn/cache
@eslint-eslintrc-npm-1.3.2-fd8de37609-2074dca47d.zip@humanwhocodes-config-array-npm-0.10.4-8334b3c6a2-d480e5d57e.zip@humanwhocodes-config-array-npm-0.10.7-81c0f4b5e6-009d64be8d.zip@percy-cli-app-npm-1.10.4-06b84c2fa7-81db381f2e.zip@percy-cli-build-npm-1.10.4-aea75ba7bd-c6aa64bbb3.zip@percy-cli-command-npm-1.10.4-9b894aa1cf-d96a572e24.zip@percy-cli-config-npm-1.10.4-9177c0305d-901df758d4.zip@percy-cli-exec-npm-1.10.4-df1853a356-d1c77ce6c9.zip@percy-cli-npm-1.10.4-acb199a834-3164e88bbc.zip@percy-cli-snapshot-npm-1.10.4-12fbaf9321-51542704a0.zip@percy-cli-upload-npm-1.10.4-cf4deabe63-518e3e2414.zip@percy-client-npm-1.10.4-a8afab3bcb-8970cb0fee.zip@percy-config-npm-1.10.4-b58233e905-545e2fd4ab.zip@percy-core-npm-1.10.4-0c5deaa690-39f6de1cf5.zip@percy-dom-npm-1.10.4-ced497b448-2c1b4da7fa.zip@percy-env-npm-1.10.4-d5bfdc729b-c2a9f6b384.zip@percy-logger-npm-1.10.4-34e93e31f1-4c6ade3902.zip@vue-compiler-core-npm-3.2.39-be263a1f6d-dd70ed60b1.zip@vue-compiler-core-npm-3.2.40-f464645db3-2683bf13ef.zip@vue-compiler-dom-npm-3.2.39-9e2b1d91e3-505a8f8515.zip@vue-compiler-dom-npm-3.2.40-df00f2f10c-d928a16ebd.zip@vue-compiler-sfc-npm-3.2.39-7f95377cda-b82755eec2.zip@vue-compiler-sfc-npm-3.2.40-7a8032e16c-96cbfd078a.zip@vue-compiler-ssr-npm-3.2.39-1c153c6e65-27323a548d.zip@vue-compiler-ssr-npm-3.2.40-76cabde3f1-026461fcee.zip@vue-reactivity-npm-3.2.40-d9155c50c7-927d22b424.zip@vue-reactivity-transform-npm-3.2.40-c8706743e9-b86fc29b52.zip@vue-runtime-core-npm-3.2.39-30744183d1-13f6b92d70.zip@vue-runtime-core-npm-3.2.40-62158afe79-47c4918c12.zip@vue-runtime-dom-npm-3.2.39-7bd0d7efc4-0c47f94114.zip@vue-runtime-dom-npm-3.2.40-1bb705cd21-4615d00cc4.zip@vue-server-renderer-npm-3.2.39-1b8648f591-ae6ccd08b8.zip@vue-server-renderer-npm-3.2.40-b8eff98a5b-f9d53aefca.zip@vue-shared-npm-3.2.40-6b1329b2bd-d91a1e12ff.zip@vue-test-utils-npm-2.0.2-8fecfc05d1-384bdd4231.zip@vue-test-utils-npm-2.1.0-c3d34439bb-4612568209.zipbootstrap-npm-5.2.1-615925a4f6-f7d733ae5d.zipbootstrap-npm-5.2.2-8effda7631-14e6df28fe.zipcaniuse-lite-npm-1.0.30001393-fabe41ad77-72b7cd81c5.zipcaniuse-lite-npm-1.0.30001414-91010a4bbf-97210cfd15.zipcypress-npm-10.9.0-7807fe85fd-79e3dccbb8.zipeslint-npm-8.24.0-40a0bdeb6e-ca293ce711.zipeslint-plugin-n-npm-15.3.0-63b77d751e-a5a4c77880.zipeslint-plugin-vue-npm-9.5.1-71da965834-3643332871.zipeventemitter2-npm-6.4.5-6862f231f1-84504f9cf0.zipeventemitter2-npm-6.4.7-ad2467adaa-1b36a77e13.zipfunctional-red-black-tree-npm-1.0.1-ccfe924dcd-ca6c170f37.ziphtml-validate-npm-7.3.3-94af764faf-15a092fd28.ziphtml-validate-npm-7.5.0-ad3a30b92f-04d73c5173.zipjs-sdsl-npm-4.1.5-66fcf4f580-695f657ddc.zipluxon-npm-3.0.3-3194094d12-67d143f102.zipluxon-npm-3.0.4-402f9149bc-d0908c3951.zipnaive-ui-npm-2.33.3-b741bf7169-772373981b.zipsass-npm-1.54.9-bbfad219c0-90182b5660.zipsass-npm-1.55.0-594c748a96-7d769ed08e.zipvue-npm-3.2.39-cde0f41ddb-f096a3f0a5.zipvue-npm-3.2.40-ee1b0f06d2-fb5ca87c16.zip
dev
ietf
package.jsonrequirements.txtyarn.lock

634
.pnp.cjs generated

File diff suppressed because it is too large Load diff

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.

View file

@ -4,3 +4,5 @@ coverage:
default:
target: auto
threshold: 1%
github_checks:
annotations: false

View file

@ -224,7 +224,7 @@ def state_age_colored(doc):
else:
title = ""
return mark_safe(
'<span class="badge %s" %s><i class="bi bi-clock-fill"></i> %d</span>'
'<span class="badge rounded-pill %s" %s><i class="bi bi-clock-fill"></i> %d</span>'
% (class_name, title, days)
)
else:

View file

@ -642,10 +642,10 @@ def action_holder_badge(action_holder):
''
>>> action_holder_badge(DocumentActionHolderFactory(time_added=timezone.now() - datetime.timedelta(days=16)))
'<span class="badge bg-danger" title="In state for 16 days; goal is &lt;15 days."><i class="bi bi-clock-fill"></i> 16</span>'
'<span class="badge rounded-pill bg-danger" title="In state for 16 days; goal is &lt;15 days."><i class="bi bi-clock-fill"></i> 16</span>'
>>> action_holder_badge(DocumentActionHolderFactory(time_added=timezone.now() - datetime.timedelta(days=30)))
'<span class="badge bg-danger" title="In state for 30 days; goal is &lt;15 days."><i class="bi bi-clock-fill"></i> 30</span>'
'<span class="badge rounded-pill bg-danger" title="In state for 30 days; goal is &lt;15 days."><i class="bi bi-clock-fill"></i> 30</span>'
>>> settings.DOC_ACTION_HOLDER_AGE_LIMIT_DAYS = old_limit
"""
@ -653,7 +653,7 @@ def action_holder_badge(action_holder):
age = (timezone.now() - action_holder.time_added).days
if age > age_limit:
return mark_safe(
'<span class="badge bg-danger" title="In state for %d day%s; goal is &lt;%d days."><i class="bi bi-clock-fill"></i> %d</span>'
'<span class="badge rounded-pill bg-danger" title="In state for %d day%s; goal is &lt;%d days."><i class="bi bi-clock-fill"></i> %d</span>'
% (age, "s" if age != 1 else "", age_limit, age)
)
else:

View file

@ -94,7 +94,7 @@ class SearchForm(forms.Form):
("ad", "AD"), ("-ad", "AD (desc)"), ),
required=False, widget=forms.HiddenInput)
doctypes = forms.ModelMultipleChoiceField(queryset=DocTypeName.objects.filter(used=True).exclude(slug='draft').order_by('name'), required=False)
doctypes = forms.ModelMultipleChoiceField(queryset=DocTypeName.objects.filter(used=True).exclude(slug__in=('draft','liai-att')).order_by('name'), required=False)
def __init__(self, *args, **kwargs):
super(SearchForm, self).__init__(*args, **kwargs)
@ -479,7 +479,7 @@ def ad_workload(request):
doctypes = list(
DocTypeName.objects.filter(used=True)
.exclude(slug="draft")
.exclude(slug__in=("draft", "liai-att"))
.values_list("pk", flat=True)
)
@ -493,10 +493,10 @@ def ad_workload(request):
for id, (g, uig) in enumerate(
[
("Publication Requested Internet-Draft", False),
("Waiting for Writeup Internet-Draft", False),
("AD Evaluation Internet-Draft", False),
("In Last Call Internet-Draft", None),
("IESG Evaluation - Defer Internet-Draft", None),
("In Last Call Internet-Draft", True),
("Waiting for Writeup Internet-Draft", False),
("IESG Evaluation - Defer Internet-Draft", False),
("IESG Evaluation Internet-Draft", True),
("Waiting for AD Go-Ahead Internet-Draft", False),
("Approved-announcement to be sent Internet-Draft", True),
@ -528,9 +528,9 @@ def ad_workload(request):
for id, (g, uig) in enumerate(
[
("Publication Requested Status Change", False),
("Waiting for Writeup Status Change", False),
("AD Evaluation Status Change", False),
("In Last Call Status Change", None),
("In Last Call Status Change", True),
("Waiting for Writeup Status Change", False),
("IESG Evaluation Status Change", True),
("Waiting for AD Go-Ahead Status Change", False),
]
@ -675,7 +675,7 @@ def docs_for_ad(request, name):
form = SearchForm({'by':'ad','ad': ad.id,
'rfcs':'on', 'activedrafts':'on', 'olddrafts':'on',
'sort': 'status',
'doctypes': list(DocTypeName.objects.filter(used=True).exclude(slug='draft').values_list("pk", flat=True))})
'doctypes': list(DocTypeName.objects.filter(used=True).exclude(slug__in=('draft','liai-att')).values_list("pk", flat=True))})
results, meta = prepare_document_table(request, retrieve_search_results(form), form.data, max_results=500)
results.sort(key=ad_dashboard_sort_key)
del meta["headers"][-1]

View file

@ -35,6 +35,7 @@ import debug # pyflakes:ignore
from ietf.group.factories import GroupFactory, RoleFactory
from ietf.group.models import Group, Role, RoleName
from ietf.ietfauth.htpasswd import update_htpasswd_file
from ietf.ietfauth.utils import has_role
from ietf.mailinglists.models import Subscribed
from ietf.meeting.factories import MeetingFactory
from ietf.nomcom.factories import NomComFactory
@ -1004,3 +1005,11 @@ class OpenIDConnectTests(TestCase):
# handler, causing later logging to become visible even if that wasn't intended.
# Fail here if that happens.
self.assertEqual(logging.root.handlers, [])
class UtilsTests(TestCase):
def test_has_role_empty_role_names(self):
"""has_role is False if role_names is empty"""
role = RoleFactory(name_id='secr', group__acronym='secretariat')
self.assertTrue(has_role(role.person.user, ['Secretariat']), 'Test is broken')
self.assertFalse(has_role(role.person.user, []), 'has_role() should return False when role_name is empty')

View file

@ -4,10 +4,7 @@
# various authentication and authorization utilities
import datetime
import oidc_provider.lib.claims
from oidc_provider.models import Client as ClientRecord
from functools import wraps
@ -96,7 +93,7 @@ def has_role(user, role_names, *args, **kwargs):
"Robot": Q(person=person, name="robot", group__acronym="secretariat"),
}
filter_expr = Q()
filter_expr = Q(pk__in=[]) # ensure empty set is returned if no other terms are added
for r in role_names:
filter_expr |= role_qs[r]
@ -167,7 +164,7 @@ def is_authorized_in_doc_stream(user, doc):
docman_roles = GroupFeatures.objects.get(type_id="ietf").docman_roles
group_req = Q(group__acronym=doc.stream.slug)
else:
group_req = Q()
group_req = Q() # no group constraint for other cases
return Role.objects.filter(Q(name__in=docman_roles, person__user=user) & group_req).exists()
@ -281,15 +278,6 @@ class OidcExtraScopeClaims(oidc_provider.lib.claims.ScopeClaims):
reg.save()
info = {}
if regs:
# maybe register attendance if logged in to follow a meeting
today = datetime.date.today()
if meeting.date <= today <= meeting.end_date():
client = ClientRecord.objects.get(client_id=self.client.client_id)
if client.name == 'Meetecho':
for reg in regs:
if not reg.attended:
reg.attended = True
reg.save()
# fill in info to return
ticket_types = set([])
reg_types = set([])

View file

@ -187,7 +187,7 @@ def ajax_search(request):
if not q:
objs = IprDisclosureBase.objects.none()
else:
query = Q()
query = Q() # all objects returned if no other terms in the queryset
for t in q:
query &= Q(title__icontains=t)

View file

@ -6557,7 +6557,7 @@ class SessionTests(TestCase):
group_type_without_meetings = 'editorial'
self.assertFalse(GroupFeatures.objects.get(pk=group_type_without_meetings).has_meetings)
area = GroupFactory(type_id='area')
area = GroupFactory(type_id='area', acronym='area')
requested_session = SessionFactory(meeting=meeting,group__parent=area,status_id='schedw',add_to_schedule=False)
conflicting_session = SessionFactory(meeting=meeting,group__parent=area,status_id='schedw',add_to_schedule=False)
ConstraintFactory(name_id='key_participant',meeting=meeting,source=requested_session.group,target=conflicting_session.group)
@ -6597,7 +6597,29 @@ class SessionTests(TestCase):
status_id='schedw',
add_to_schedule=False,
)
# bof sessions should be shown
bof_session = SessionFactory(
meeting=meeting,
group__parent=area,
group__state_id='bof',
status_id='schedw',
add_to_schedule=False,
)
# proposed WG sessions should be shown
proposed_wg_session = SessionFactory(
meeting=meeting,
group__parent=area,
group__state_id='proposed',
status_id='schedw',
add_to_schedule=False,
)
# rg sessions should be shown under 'irtf' heading
rg_session = SessionFactory(
meeting=meeting,
group__type_id='rg',
status_id='schedw',
add_to_schedule=False,
)
def _sreq_edit_link(sess):
return urlreverse(
'ietf.secr.sreq.views.edit',
@ -6630,6 +6652,19 @@ class SessionTests(TestCase):
self.assertContains(r, _sreq_edit_link(has_meetings_not_meeting)) # link to the session request
self.assertNotContains(r, not_has_meetings.group.acronym)
self.assertNotContains(r, _sreq_edit_link(not_has_meetings)) # no link to the session request
self.assertContains(r, bof_session.group.acronym)
self.assertContains(r, _sreq_edit_link(bof_session)) # link to the session request
self.assertContains(r, proposed_wg_session.group.acronym)
self.assertContains(r, _sreq_edit_link(proposed_wg_session)) # link to the session request
self.assertContains(r, rg_session.group.acronym)
self.assertContains(r, _sreq_edit_link(rg_session)) # link to the session request
# check headings - note that the special types (has_meetings, etc) do not have a group parent
# so they show up in 'other'
q = PyQuery(r.content)
self.assertEqual(len(q('h2#area')), 1)
self.assertEqual(len(q('h2#other-groups')), 1)
self.assertEqual(len(q('h2#irtf')), 1) # rg group has irtf group as parent
def test_request_minutes(self):
meeting = MeetingFactory(type_id='ietf')

View file

@ -2339,7 +2339,10 @@ def agenda_json(request, num=None):
def meeting_requests(request, num=None):
meeting = get_meeting(num)
groups_to_show = Group.objects.filter(state_id='active', type__features__has_meetings=True)
groups_to_show = Group.objects.filter(
state_id__in=('active', 'bof', 'proposed'),
type__features__has_meetings=True,
)
sessions = list(
Session.objects.requests().filter(
meeting__number=meeting.number,
@ -2359,7 +2362,7 @@ def meeting_requests(request, num=None):
for s in sessions:
s.current_status_name = status_names.get(s.current_status, s.current_status)
s.requested_by_person = session_requesters.get(s.requested_by)
if s.group.parent and s.group.parent.type.slug == 'area':
if s.group.parent and s.group.parent.type.slug in ('area', 'irtf'):
s.display_area = s.group.parent
else:
s.display_area = None

View file

@ -2573,6 +2573,59 @@ class rfc8989EligibilityTests(TestCase):
self.assertEqual(set(list_eligible(nomcom=nomcom)),set(eligible))
Person.objects.filter(pk__in=[p.pk for p in eligible.union(ineligible)]).delete()
class rfc8989bisEligibilityTests(TestCase):
def setUp(self):
super().setUp()
self.nomcom = NomComFactory(group__acronym='nomcom2023', populate_personnel=False, first_call_for_volunteers=datetime.date(2023,5,15))
self.meetings = [
MeetingFactory(number=number, date=date, type_id='ietf') for number,date in [
('115', datetime.date(2022, 11, 5)),
('114', datetime.date(2022, 7, 23)),
('113', datetime.date(2022, 3, 19)),
('112', datetime.date(2021, 11, 8)),
('111', datetime.date(2021, 7, 26)),
]
]
# make_immutable_test_data makes things this test does not want
Role.objects.filter(name_id__in=('chair','secr')).delete()
def test_registration_is_not_enough(self):
p = PersonFactory()
for meeting in self.meetings:
MeetingRegistrationFactory(person=p, meeting=meeting, checkedin=False)
self.assertFalse(is_eligible(p, self.nomcom))
def test_elig_by_meetings(self):
eligible_people = list()
ineligible_people = list()
attendance_methods = ('checkedin', 'session', 'both')
for combo_len in range(0,6): # Someone might register for 0 to 5 previous meetings
for combo in combinations(self.meetings, combo_len):
# Cover cases where someone
# - checked in, but attended no sessions
# - checked in _and_ attended sessions
# - didn't check_in but attended sessions
# (Intentionally not covering the permutations of those cases)
for method in attendance_methods:
p = PersonFactory()
for meeting in combo:
MeetingRegistrationFactory(person=p, meeting=meeting, reg_type='onsite', checkedin=(method in ('checkedin', 'both')))
if method in ('session', 'both'):
AttendedFactory(session__meeting=meeting, session__type_id='plenary',person=p)
if combo_len<3:
ineligible_people.append(p)
else:
eligible_people.append(p)
self.assertEqual(set(eligible_people),set(list_eligible(self.nomcom)))
for person in eligible_people:
self.assertTrue(is_eligible(person,self.nomcom))
for person in ineligible_people:
self.assertFalse(is_eligible(person,self.nomcom))
class VolunteerTests(TestCase):
def test_volunteer(self):

View file

@ -10,6 +10,7 @@ import os
import re
import tempfile
from collections import defaultdict
from email import message_from_string, message_from_bytes
from email.header import decode_header
from email.iterators import typed_subpart_iterator
@ -28,7 +29,7 @@ from ietf.doc.models import DocEvent, NewRevisionDocEvent
from ietf.group.models import Group, Role
from ietf.person.models import Email, Person
from ietf.mailtrigger.utils import gather_address_lists
from ietf.meeting.models import Meeting
from ietf.meeting.models import Meeting, Attended
from ietf.utils.pipe import pipe
from ietf.utils.mail import send_mail_text, send_mail, get_payload_text
from ietf.utils.log import log
@ -203,7 +204,7 @@ def store_nomcom_private_key(request, year, private_key):
)
if code != 0:
log("openssl error: %s:\n Error %s: %s" %(command, code, error))
if error:
if error and error!=b"*** WARNING : deprecated key derivation used.\nUsing -iter or -pbkdf2 would be better.\n":
out = ''
request.session['NOMCOM_PRIVATE_KEY_%s' % year] = out
@ -511,6 +512,8 @@ def list_eligible(nomcom=None, date=None, base_qs=None):
return list_eligible_8788(date=eligibility_date, base_qs=base_qs)
elif eligibility_date.year in (2021,2022):
return list_eligible_8989(date=eligibility_date, base_qs=base_qs)
elif eligibility_date.year > 2022:
return list_eligible_8989bis(date=eligibility_date, base_qs=base_qs)
else:
return Person.objects.none()
@ -537,21 +540,27 @@ def list_eligible_8713(date, base_qs=None):
if not base_qs:
base_qs = Person.objects.all()
previous_five = previous_five_meetings(date)
return remove_disqualified(three_of_five_eligible(previous_five=previous_five, queryset=base_qs))
return remove_disqualified(three_of_five_eligible_8713(previous_five=previous_five, queryset=base_qs))
def list_eligible_8788(date, base_qs=None):
if not base_qs:
base_qs = Person.objects.all()
previous_five = Meeting.objects.filter(number__in=['102','103','104','105','106'])
return remove_disqualified(three_of_five_eligible(previous_five=previous_five, queryset=base_qs))
return remove_disqualified(three_of_five_eligible_8713(previous_five=previous_five, queryset=base_qs))
def get_8989_eligibility_querysets(date, base_qs):
return get_threerule_eligibility_querysets(date, base_qs, three_of_five_callable=three_of_five_eligible_8713)
def get_8989bis_eligibility_querysets(date, base_qs):
return get_threerule_eligibility_querysets(date, base_qs, three_of_five_callable=three_of_five_eligible_8989bis)
def get_threerule_eligibility_querysets(date, base_qs, three_of_five_callable):
if not base_qs:
base_qs = Person.objects.all()
previous_five = previous_five_meetings(date)
date_as_dt = datetime_from_date(date, DEADLINE_TZINFO)
three_of_five_qs = new_three_of_five_eligible(previous_five=previous_five, queryset=base_qs)
three_of_five_qs = three_of_five_callable(previous_five=previous_five, queryset=base_qs)
# If date is Feb 29, neither 3 nor 5 years ago has a Feb 29. Use Feb 28 instead.
if date.month == 2 and date.day == 29:
@ -566,7 +575,7 @@ def get_8989_eligibility_querysets(date, base_qs):
Q(role__name_id__in=('chair','secr'),
role__group__state_id='active',
role__group__type_id='wg',
role__group__time__lte=date_as_dt,
role__group__time__lte=date_as_dt, ## TODO - inspect - lots of things affect group__time...
)
# was an officer since the given date (I think this is wrong - it looks at when roles _start_, not when roles end)
| Q(rolehistory__group__time__gte=three_years_ago,
@ -591,7 +600,15 @@ def list_eligible_8989(date, base_qs=None):
if not base_qs:
base_qs = Person.objects.all()
three_of_five_qs, officer_qs, author_qs = get_8989_eligibility_querysets(date, base_qs)
# Would be nice to use queryset union here, but the annotations in the three existing querysets make that difficult
three_of_five_pks = three_of_five_qs.values_list('pk',flat=True)
officer_pks = officer_qs.values_list('pk',flat=True)
author_pks = author_qs.values_list('pk',flat=True)
return remove_disqualified(Person.objects.filter(pk__in=set(three_of_five_pks).union(set(officer_pks)).union(set(author_pks))))
def list_eligible_8989bis(date, base_qs=None):
if not base_qs:
base_qs = Person.objects.all()
three_of_five_qs, officer_qs, author_qs = get_8989bis_eligibility_querysets(date, base_qs)
three_of_five_pks = three_of_five_qs.values_list('pk',flat=True)
officer_pks = officer_qs.values_list('pk',flat=True)
author_pks = author_qs.values_list('pk',flat=True)
@ -626,28 +643,34 @@ def previous_five_meetings(date = None):
date = datetime.date.today()
return Meeting.objects.filter(type='ietf',date__lte=date).order_by('-date')[:5]
def three_of_five_eligible(previous_five, queryset=None):
def three_of_five_eligible_8713(previous_five, queryset=None):
""" Return a list of Person records who attended at least
3 of the 5 type_id='ietf' meetings before the given
date. Does not disqualify anyone based on held roles.
This variant bases the calculation on MeetingRegistration.attended
"""
if queryset is None:
queryset = Person.objects.all()
return queryset.filter(meetingregistration__meeting__in=list(previous_five),meetingregistration__attended=True).annotate(mtg_count=Count('meetingregistration')).filter(mtg_count__gte=3)
def new_three_of_five_eligible(previous_five, queryset=None):
""" Return a list of Person records who attended at least
def three_of_five_eligible_8989bis(previous_five, queryset=None):
""" Return a list of Person records who attended at least
3 of the 5 type_id='ietf' meetings before the given
date. Does not disqualify anyone based on held roles.
This 'new' variant bases the calculation on the Meeting.Session model rather than Stats.MeetingRegistration
This variant bases the calculation on Meeting.Session and MeetingRegistration.checked_in
Leadership will have to create a new RFC specifying eligibility (RFC8989 is timing out) before it can be used.
"""
if queryset is None:
queryset = Person.objects.all()
return queryset.filter(
Q(attended__session__meeting__in=list(previous_five)),
Q(attended__session__type='plenary')|Q(attended__session__group__type__in=['wg','rg'])
).annotate(mtg_count=Count('attended__session__meeting',distinct=True)).filter(mtg_count__gte=3)
counts = defaultdict(lambda: 0)
for meeting in previous_five:
checked_in = meeting.meetingregistration_set.filter(reg_type='onsite', checkedin=True).values_list('person', flat=True)
sessions = meeting.session_set.filter(Q(type='plenary') | Q(group__type__in=['wg', 'rg']))
attended = Attended.objects.filter(session__in=sessions).values_list('person', flat=True)
for id in set(checked_in) | set(attended):
counts[id] += 1
return queryset.filter(pk__in=[id for id, count in counts.items() if count >= 3])
def suggest_affiliation(person):
recent_meeting = person.meetingregistration_set.order_by('-meeting__date').first()

View file

@ -31,7 +31,7 @@ def ajax_select2_search(request, model_name):
if not q:
objs = model.objects.none()
else:
query = Q()
query = Q() # all objects returned if no other terms in the queryset
for t in q:
if model == Email:
query &= Q(person__alias__name__icontains=t) | Q(address__icontains=t)

View file

@ -151,7 +151,7 @@ def extract_review_assignment_data(teams=None, reviewers=None, time_from=None, t
if ordering is None:
ordering = []
filters = Q()
filters = Q() # all objects returned if no other terms in the queryset
if teams:
filters &= Q(review_request__team__in=teams)

View file

@ -27,7 +27,16 @@
{% endfor %}
{% endif %}
<tr class="bg1"><td>Number of Attendees:{% if not is_virtual %}<span class="required">*</span>{% endif %}</td><td>{{ form.attendees.errors }}{{ form.attendees }}</td></tr>
<tr class="bg2"><td>People who must be present:</td><td>{{ form.bethere.errors }}{{ form.bethere }}</td></tr>
<tr class="bg2">
<td>People who must be present:</td>
<td>
{{ form.bethere.errors }}
{{ form.bethere }}
<p class="fw-bold text-danger">
You should not include the Area Directors; they will be added automatically.
</p>
</td>
</tr>
<tr class="bg1"><td>Conflicts to Avoid:</td>
<td>
<table>
@ -121,4 +130,4 @@
<li><button type="button" onclick="history.back()">Back</button></li>
</ul>
</div>
</form>
</form>

View file

@ -227,6 +227,13 @@ th {
}
}
// Style the navbar user photo
.nav-link .user-photo {
object-fit: cover;
height: 40px;
width: 40px;
}
// Style the righthand navigation panel
#righthand-panel {
max-height: 80vh;

View file

@ -312,7 +312,9 @@ $(function () {
// Was this drag started by dragging a session?
function isSessionDragEvent(event) {
return Boolean(event.originalEvent.dataTransfer.getData(dnd_mime_type));
return event.originalEvent.dataTransfer.types.some(
(item_type) => item_type.indexOf(dnd_mime_type) === 0
);
}
/**
@ -324,7 +326,7 @@ $(function () {
if (!isSessionDragEvent(event)) {
return null;
}
const sessionId = event.originalEvent.dataTransfer.getData(dnd_mime_type);
const sessionId = event.originalEvent.dataTransfer.types[0].slice(dnd_mime_type.length);
const sessionElements = sessions.filter("#" + sessionId);
if (sessionElements.length > 0) {
return sessionElements[0];
@ -357,7 +359,15 @@ $(function () {
// dragging
sessions.on("dragstart", function (event) {
if (canEditSession(this)) {
event.originalEvent.dataTransfer.setData(dnd_mime_type, this.id);
/* Bit of a hack here - per the w3c drag and drop spec, the data being dragged
* and dropped are only available during dragstart and drop events. Otherwise,
* only their count and type are guaranteed to be available. (See
* https://www.w3.org/TR/2011/WD-html5-20110113/dnd.html#drag-data-store-mode)
* To work around this, append the sessionId to the dnd_mime_type in the type we
* report for our event. The event handlers can then pull it out when needed.
* (At least Chrome v106 breaks if we try to peek at the payload.)
*/
event.originalEvent.dataTransfer.setData(dnd_mime_type + this.id, this.id);
jQuery(this).addClass("dragging");
selectSessionElement(this);
showPastTimeslotHints();

View file

@ -12,6 +12,7 @@ class MeetingRegistrationFactory(factory.django.DjangoModelFactory):
meeting = factory.SubFactory(MeetingFactory)
person = factory.SubFactory(PersonFactory)
reg_type = 'onsite'
first_name = factory.LazyAttribute(lambda obj: obj.person.first_name())
last_name = factory.LazyAttribute(lambda obj: obj.person.last_name())
attended = True
attended = True

View file

@ -147,7 +147,7 @@ class DraftYangChecker(object):
saved_stderr = sys.stderr
sys.stdout = io.StringIO()
sys.stderr = io.StringIO()
extractor.extract_yang_model(file.readlines())
extractor.extract_yang_model_text(file.read())
model_list = extractor.get_extracted_models(False, True)
out = sys.stdout.getvalue()
err = sys.stderr.getvalue()

View file

@ -42,23 +42,32 @@
<img alt="IETF Logo" class="me-2"
src="{% static 'ietf/images/ietf-logo-nor-white.svg' %}">
Datatracker
{% if server_mode and server_mode != "production" %}Dev Mode{% endif %}
{% if server_mode and server_mode != "production" %}
<span class="text-danger">&delta;</span>
{% endif %}
</a>
<div class="collapse navbar-collapse" id="navbar-collapse">
<ul class="nav navbar-nav">
{% include "base/menu.html" with flavor="top" %}
</ul>
</div>
{% if not user.is_authenticated %}
<a class="d-none d-sm-block mx-5 btn {% if server_mode and server_mode == "production" %} btn-warning {% else %} btn-info {% endif %}"
rel="nofollow"
href="{% url 'ietf.ietfauth.views.login' %}?next={{ request.get_full_path|removesuffix:'accounts/logout/'|urlencode }}">
Sign
in
<div class="d-flex align-items-center">
<a class="nav-link {% if server_mode and server_mode != "production" %}text-danger{% else %}text-warning{% endif %} d-none d-xl-inline me-xl-4"
target="_blank"
href="https://github.com/ietf-tools/datatracker/issues/new/choose">
Report a bug
<i class="bi bi-bug"></i>
</a>
{% endif %}
<div class="d-flex d-none d-lg-block">
<label aria-label="Document search">
{% if not user.is_authenticated %}
<a class="btn me-1 {% if server_mode and server_mode == "production" %} btn-warning {% else %} btn-info {% endif %} d-none d-sm-block"
rel="nofollow"
href="{% url 'ietf.ietfauth.views.login' %}?next={{ request.get_full_path|removesuffix:'accounts/logout/'|urlencode }}">
Sign in
</a>
{% endif %}
<label class="d-none d-md-block" aria-label="Document search">
<input class="form-control select2-field"
id="navbar-doc-search"
data-select2-ajax-url="{% url 'ietf.doc.views_search.ajax_select2_search_docs' model_name='docalias' doc_type='draft' %}"
@ -137,7 +146,7 @@
<span class="mx-2 text-danger">
<i class="bi bi-bug"></i>
Report a bug:
<a class="text-reset" href="https://github.com/ietf-tools/datatracker/issues/new/choose">GitHub</a>
<a class="text-reset" target="_blank" href="https://github.com/ietf-tools/datatracker/issues/new/choose">GitHub</a>
{% if bugreport_email %}
<a class="text-reset" href="mailto:{{ bugreport_email }}">Email</a>
{% endif %}

View file

@ -420,7 +420,7 @@
{% endif %}
<li>
<a class="dropdown-item text-danger {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="https://github.com/ietf-tools/datatracker/issues/new/choose">
target="_blank" href="https://github.com/ietf-tools/datatracker/issues/new/choose">
<i class="bi bi-bug">
</i>
Report a bug

View file

@ -5,12 +5,18 @@
<li class="nav-item dropdown">
{% if flavor == "top" %}
<a href="#"
class="nav-link dropdown-toggle"
class="nav-link dropdown-toggle{% if user.person.photo_thumb %} p-0{% endif %}"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false">
{% if user.is_authenticated %}
{{ user }}
{% if user.person.photo_thumb %}
<img class="user-photo rounded-circle ms-1" width="40" height="40"
src="{{ user.person.photo_thumb.url }}"
alt="Photo of {{ user.person.name }}">
{% else %}
{{ user.username|split:'@'|first }}
{% endif %}
{% else %}
User
{% endif %}

View file

@ -241,7 +241,7 @@
</td>
<td>
{% if doc.get_state_slug != "active" and doc.get_state_slug != "rfc" %}
<div class="float-end badge bg-warning">
<div class="badge rounded-pill bg-warning float-end">
Expired &amp; archived
</div>
{% endif %}

View file

@ -65,18 +65,17 @@
{% if schedule.is_official_record %}This is the official schedule for a meeting in the past.{% endif %}
Make a
<a href="{% url "ietf.meeting.views.new_meeting_schedule" num=meeting.number owner=schedule.owner_email name=schedule.name %}">
new agenda from this
</a>.
new agenda from this</a>.
</div>
{% endif %}
{% if timeslot_groups|length == 0 %}
<p>
<p class="alert alert-info my-3">
No timeslots exist for this meeting yet.
</p>
<p>
<a href="{% url "ietf.meeting.views.edit_timeslots" num=meeting.number %}">
Edit timeslots.
<a class="btn btn-primary" href="{% url "ietf.meeting.views.edit_timeslots" num=meeting.number %}">
Edit timeslots
</a>
</p>
{% else %}
@ -193,6 +192,7 @@
</div>
</div>
<div class="preferences">
<div class="my-3">
<label class="sort-unassigned">
Sort unassigned:
<select name="sort_unassigned" class="form-select">
@ -210,7 +210,8 @@
</option>
</select>
</label>
<span class="toggle-inputs session-parent-toggles">
</div>
<div class="my-3 toggle-inputs session-parent-toggles">
Show:
{% for p in session_parents %}
<label class="parent-{{ p.acronym }}">
@ -221,7 +222,8 @@
{{ p.acronym }}
</label>
{% endfor %}
</span>
</div>
<div class="my-3">
{% if session_purposes|length > 1 %}
<button id="session-toggle-modal-open"
class="btn btn-primary"
@ -248,6 +250,7 @@
<i class="bi bi-check-square"></i>
Timeslot Types
</button>
</div>
</div>
</div>
<div class="session-info-container"></div>

View file

@ -1,4 +1,4 @@
{% load person_filters editor_tags %}
{% load person_filters editor_tags ietf_filters textfilters %}
<!-- [html-validate-disable-block no-inline-style -- FIXME: should style this better] -->
<div id="session{{ session.pk }}"
class="session {% if not session.group.parent.scheduling_color %}untoggleable-by-parent{% endif %} {% if session.parent_acronym %}parent-{{ session.parent_acronym }}{% endif %} purpose-{{ session.purpose.slug }} {% if session.readonly %}readonly{% endif %} {% if not session.on_agenda %}off-agenda{% endif %}"
@ -47,7 +47,7 @@
{% if not session.on_agenda %}&middot; <i>off agenda</i>{% endif %}
</div>
{% endif %}
{% if session.comments %}<div class="comments">{{ session.comments|linebreaksbr }}</div>{% endif %}
{% if session.comments %}<div class="comments">{{ session.comments|urlize_ietf_docs|linkify|linebreaksbr }}</div>{% endif %}
{% if session.requested_by_person %}
<div class="row">
<div class="col-1">
@ -71,11 +71,23 @@
{% endif %}
{% if session.formatted_constraints %}
<div class="formatted-constraints">
{% with ad=session.group.ads|first %}
{% for constraint_name, values in session.formatted_constraints.items %}
<div class="row">
<div class="col-1" title="{{ constraint_name.name }}">{% constraint_icon_for constraint_name %}</div><div class="col">{{ values|join:", " }}</div>
<div class="col-1" title="{{ constraint_name.name }}">{% constraint_icon_for constraint_name %}</div><div class="col">
{% if constraint_name.slug != 'bethere' or not ad %}
{{ values|join:", " }}
{% else %}
{% for val in values %}
{% if val != ad.person.plain_name %}
{{ val }}{% if forloop.revcounter > 2 or forloop.revcounter > 1 and values|last != ad.person.plain_name %}, {% endif %}
{% endif %}
{% endfor %}
{% endif %}
</div>
</div>
{% endfor %}
{% endwith %}
</div>
{% endif %}
{% for s in session.other_sessions %}

View file

@ -1,7 +1,7 @@
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load ietf_filters static person_filters %}
{% load ietf_filters static person_filters textfilters %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
@ -34,10 +34,10 @@
<thead>
<tr>
<th scope="col" data-sort="group">Group</th>
<th scope="col" data-sort="count">Length</th>
<th scope="col" data-sort="num">Size</th>
<th scope="col" class="d-none d-sm-table-cell" data-sort="requester">Requester</th>
<th scope="col" class="d-none d-sm-table-cell" data-sort="ad">AD</th>
<th scope="col" class="d-none d-lg-table-cell" data-sort="count">Length</th>
<th scope="col" class="d-none d-lg-table-cell" data-sort="num">Size</th>
<th scope="col" class="d-none d-lg-table-cell" data-sort="requester">Requester</th>
<th scope="col" class="d-none d-lg-table-cell" data-sort="ad">AD</th>
<th scope="col" data-sort="constraints">Constraints</th>
<th scope="col" data-sort="special">Special requests</th>
</tr>
@ -58,34 +58,42 @@
{{ session.group.acronym }}
</a>
{% if session.joint_with_groups.count %}joint with {{ session.joint_with_groups_acronyms|join:' ' }}{% endif %}
{% if session.requested_duration %}
<div class="d-lg-none">
<i class="bi bi-stopwatch-fill"></i> {{ session.requested_duration|stringformat:"s"|slice:"0:4" }}
</div>
{% endif %}
{% if session.attendees %}
<div class="d-lg-none">
<i class="bi bi-people-fill"></i> {{ session.attendees }}
</div>
{% endif %}
{% if session.group.state.slug != "active" %}
<br><span class="badge rounded-pill bg-success">{{ session.group.state.name }}</span>
{% endif %}
</td>
<td>
<td class="d-none d-lg-table-cell">
{% if session.requested_duration %}{{ session.requested_duration|stringformat:"s"|slice:"0:4" }}{% endif %}
</td>
<td>{{ session.attendees|default:"" }}</td>
<td class="d-none d-sm-table-cell">{% person_link session.requested_by_person %}</td>
<td class="d-none d-sm-table-cell">
<td class="d-none d-lg-table-cell">{{ session.attendees|default:"" }}</td>
<td class="d-none d-lg-table-cell">{% person_link session.requested_by_person with_email=False %}</td>
<td class="d-none d-lg-table-cell">
{% if session.group.ad_role %}
{% person_link session.group.ad_role.person %}
{% person_link session.group.ad_role.person with_email=False %}
{% endif %}
</td>
<td>
{% if session.requested_duration %}
{% regroup session.constraints by name as prioritized_constraints %}
{% for grouped_constraint in prioritized_constraints %}
{% if not forloop.first %}
{% ifchanged grouped_constraint.grouper %}
<br>
{% endifchanged %}
{% endif %}
<div{% if not forloop.last %} class="mb-2"{% endif %}>
<b>{{ grouped_constraint.grouper.name }}:</b>
{% for constraint in grouped_constraint.list %}
{% with constraint.target.parent.id as constraint_target_parent_id %}
{% with constraint.source.parent.id as constraint_source_parent_id %}
{% with constraint.person as constraint_person %}
{% if constraint_target_parent_id == constraint_source_parent_id and not constraint_person %}<b>{% endif %}
{% if constraint.name.slug == "bethere" %}{% person_link constraint_person %}
{% else %}
{% if constraint.name.slug == "bethere" %}{% person_link constraint_person with_email=False %}{% else %}
{% with constraint.name.slug as constraint_name_slug %}
<span class="{% if constraint_name_slug == 'chair_conflict' %}text-danger{% elif constraint_name_slug == 'tech_overlap' %}text-info{% elif constraint_name_slug == 'key_participant' %}text-success{% else %}{{ constraint_name_slug }}{% endif %}">
{% endwith %}
@ -94,11 +102,12 @@
{% endwith %}
{% endwith %}
{% endfor %}
</div>
{% endfor %}
{% endif %}
</td>
<td>
{% if session.comments %}{{ session.comments|linebreaksbr }}{% endif %}
{% if session.comments %}{{ session.comments|urlize_ietf_docs|linkify|linebreaksbr }}{% endif %}
</td>
</tr>
{% if forloop.last %}</tbody>{% endif %}
@ -108,4 +117,4 @@
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}
{% endblock %}

View file

@ -889,7 +889,8 @@ class IetfTestRunner(DiscoverRunner):
self.config_file = {}
for kind in self.batches:
self.config_file[kind] = tempfile.NamedTemporaryFile(
prefix="html-validate-config-"
prefix="html-validate-config-",
suffix=".json"
)
self.config_file[kind].write(json.dumps(config[kind]).encode())
self.config_file[kind].flush()

View file

@ -22,10 +22,10 @@
"@fullcalendar/timegrid": "5.11.3",
"@fullcalendar/vue3": "5.11.2",
"@popperjs/core": "2.11.6",
"bootstrap": "5.2.1",
"bootstrap": "5.2.2",
"bootstrap-icons": "1.9.1",
"browser-fs-access": "0.31.0",
"caniuse-lite": "1.0.30001393",
"caniuse-lite": "1.0.30001414",
"d3": "7.6.1",
"file-saver": "2.0.5",
"highcharts": "10.2.1",
@ -35,12 +35,12 @@
"list.js": "2.3.1",
"lodash": "4.17.21",
"lodash-es": "4.17.21",
"luxon": "3.0.3",
"luxon": "3.0.4",
"moment": "2.29.4",
"moment-timezone": "0.5.37",
"ms": "2.1.3",
"murmurhash-js": "1.0.0",
"naive-ui": "2.33.2",
"naive-ui": "2.33.3",
"pinia": "2.0.22",
"pinia-plugin-persist": "1.0.0",
"select2": "4.1.0-rc.0",
@ -48,34 +48,34 @@
"send": "0.18.0",
"slugify": "1.6.5",
"sortablejs": "1.15.0",
"vue": "3.2.39",
"vue": "3.2.40",
"vue-router": "4.1.5",
"zxcvbn": "4.4.2"
},
"devDependencies": {
"@faker-js/faker": "7.5.0",
"@parcel/transformer-sass": "2.7.0",
"@percy/cli": "1.10.2",
"@percy/cli": "1.10.4",
"@percy/cypress": "3.1.2",
"@vitejs/plugin-vue": "2.3.4",
"@vue/test-utils": "2.0.2",
"@vue/test-utils": "2.1.0",
"browserlist": "latest",
"c8": "7.12.0",
"cypress": "10.7.0",
"cypress": "10.9.0",
"cypress-real-events": "1.7.1",
"eslint": "8.23.0",
"eslint": "8.24.0",
"eslint-config-standard": "17.0.0",
"eslint-plugin-cypress": "2.12.1",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-n": "15.2.5",
"eslint-plugin-n": "15.3.0",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-promise": "6.0.1",
"eslint-plugin-vue": "9.4.0",
"html-validate": "7.3.3",
"eslint-plugin-vue": "9.5.1",
"html-validate": "7.5.0",
"jquery-migrate": "3.4.0",
"parcel": "2.7.0",
"pug": "3.0.2",
"sass": "1.54.9",
"sass": "1.55.0",
"seedrandom": "3.0.5",
"vite": "2.9.15"
},

View file

@ -65,4 +65,4 @@ tqdm>=4.64.0
Unidecode>=1.3.4
weasyprint>=52.5,<53 # Datatracker tests past on 54, but xml2rfc tests do not.
xml2rfc>=3.12.4
xym>=0.5,<1.0
xym>=0.6,<1.0

468
yarn.lock
View file

@ -126,9 +126,9 @@ __metadata:
languageName: node
linkType: hard
"@eslint/eslintrc@npm:^1.3.1":
version: 1.3.1
resolution: "@eslint/eslintrc@npm:1.3.1"
"@eslint/eslintrc@npm:^1.3.2":
version: 1.3.2
resolution: "@eslint/eslintrc@npm:1.3.2"
dependencies:
ajv: ^6.12.4
debug: ^4.3.2
@ -139,7 +139,7 @@ __metadata:
js-yaml: ^4.1.0
minimatch: ^3.1.2
strip-json-comments: ^3.1.1
checksum: 9844dcc58a44399649926d5a17a2d53d529b80d3e8c3e9d0964ae198bac77ee6bb1cf44940f30cd9c2e300f7568ec82500be42ace6cacefb08aebf9905fe208e
checksum: 2074dca47d7e1c5c6323ff353f690f4b25d3ab53fe7d27337e2592d37a894cf60ca0e85ca66b50ff2db0bc7e630cc1e9c7347d65bb185b61416565584c38999c
languageName: node
linkType: hard
@ -261,14 +261,14 @@ __metadata:
languageName: node
linkType: hard
"@humanwhocodes/config-array@npm:^0.10.4":
version: 0.10.4
resolution: "@humanwhocodes/config-array@npm:0.10.4"
"@humanwhocodes/config-array@npm:^0.10.5":
version: 0.10.7
resolution: "@humanwhocodes/config-array@npm:0.10.7"
dependencies:
"@humanwhocodes/object-schema": ^1.2.1
debug: ^4.1.1
minimatch: ^3.0.4
checksum: d480e5d57e6d787565b6cff78e27c3d1b380692d4ffb0ada7d7f5957a56c9032f034da05a3e443065dbd0671ebf4d859036ced34e96b325bbc1badbae3c05300
checksum: 009d64be8d5bd098ff04e10af79e34f5633245250581fca032fac12a8667b2df8e7d169e69c05bff4d83ea3dd3c7d2d0e05ea9b94d89a7d092e26530caf6f8a3
languageName: node
linkType: hard
@ -1473,128 +1473,128 @@ __metadata:
languageName: node
linkType: hard
"@percy/cli-app@npm:1.10.2":
version: 1.10.2
resolution: "@percy/cli-app@npm:1.10.2"
"@percy/cli-app@npm:1.10.4":
version: 1.10.4
resolution: "@percy/cli-app@npm:1.10.4"
dependencies:
"@percy/cli-command": 1.10.2
"@percy/cli-exec": 1.10.2
checksum: b0bbbddec42f99e4783eec54b44d1c81a159aaee0a6a840bd4118cad7f6237c614191303973d8a2d73656fe0bce2f3b63a76443e96803707f754df027e547696
"@percy/cli-command": 1.10.4
"@percy/cli-exec": 1.10.4
checksum: 81db381f2e8fea89be0fa8ad19cca1b4a643ec40d7a51a6b0b75c453a35df511ea225c2094ed00df2f398a1b6b65b9563cc9558bfcb6c3897f507ce4039c0108
languageName: node
linkType: hard
"@percy/cli-build@npm:1.10.2":
version: 1.10.2
resolution: "@percy/cli-build@npm:1.10.2"
"@percy/cli-build@npm:1.10.4":
version: 1.10.4
resolution: "@percy/cli-build@npm:1.10.4"
dependencies:
"@percy/cli-command": 1.10.2
checksum: f5ac91772d4932940b504a7313191666d642caae25b8209d0f8845d803527ec4738b909f43f0a4df3beda57bc706bfc3c3ef4ec731be234857c296416c957e4a
"@percy/cli-command": 1.10.4
checksum: c6aa64bbb3f5195f390b5f984cb212b4647db9975aa48f8356760a51956a8852e9c6b9a3903f4e7fc8a0ce596c702acac33bf238cae84387c5c0947bf600f655
languageName: node
linkType: hard
"@percy/cli-command@npm:1.10.2":
version: 1.10.2
resolution: "@percy/cli-command@npm:1.10.2"
"@percy/cli-command@npm:1.10.4":
version: 1.10.4
resolution: "@percy/cli-command@npm:1.10.4"
dependencies:
"@percy/config": 1.10.2
"@percy/core": 1.10.2
"@percy/logger": 1.10.2
"@percy/config": 1.10.4
"@percy/core": 1.10.4
"@percy/logger": 1.10.4
bin:
percy-cli-readme: bin/readme.js
checksum: 696e47411ad72de3b249bdc714d98620976aa174787786028aa420beac6f6c15c19c9e250a89b65446a85aaad7d8126d2bf25394099b96d293eee8782c79313d
checksum: d96a572e2408b76ab7ba3b2d17cb8a8ea0de01213adf3e1024bf52bec9ef187a5e4797ef55086a333d35c7a82af5852494aa006ef39a783aac1dfe8c2a44e143
languageName: node
linkType: hard
"@percy/cli-config@npm:1.10.2":
version: 1.10.2
resolution: "@percy/cli-config@npm:1.10.2"
"@percy/cli-config@npm:1.10.4":
version: 1.10.4
resolution: "@percy/cli-config@npm:1.10.4"
dependencies:
"@percy/cli-command": 1.10.2
checksum: 235b6f64569855fc363655b3e10bcdd5dbde23030866f74043b3b67023653e435b5ab37cc2c0f522150919f62d98eb4a658df8d840e3d978ba3ac03ce4e09dac
"@percy/cli-command": 1.10.4
checksum: 901df758d4567c50c28a953dc84e8ced1a4e97b601d702cbd88f96e02aed3f85abe2bdfce1da6cca84dbf19de5285a1f2017e124b662072153da241bc8250baa
languageName: node
linkType: hard
"@percy/cli-exec@npm:1.10.2":
version: 1.10.2
resolution: "@percy/cli-exec@npm:1.10.2"
"@percy/cli-exec@npm:1.10.4":
version: 1.10.4
resolution: "@percy/cli-exec@npm:1.10.4"
dependencies:
"@percy/cli-command": 1.10.2
"@percy/cli-command": 1.10.4
cross-spawn: ^7.0.3
which: ^2.0.2
checksum: 7a3b4f3292a17bf385c178c88d505f09dd1688ff80324d3d0f18a77ab1fe617fddb32ab7163cd80a1fbc49264532a4a56fdc460d91855aba2a9b27d93062a0fd
checksum: d1c77ce6c944f88155891b936874e8ab5d65b542f85e2d8ad333950824934027abf97aa10075429cce606809d4effc2359dca29f1ac390e803f1bca698fb7b47
languageName: node
linkType: hard
"@percy/cli-snapshot@npm:1.10.2":
version: 1.10.2
resolution: "@percy/cli-snapshot@npm:1.10.2"
"@percy/cli-snapshot@npm:1.10.4":
version: 1.10.4
resolution: "@percy/cli-snapshot@npm:1.10.4"
dependencies:
"@percy/cli-command": 1.10.2
"@percy/cli-command": 1.10.4
yaml: ^2.0.0
checksum: 9c1649193acb9fff61a384d3df9fa474a8fe96f25427e10e4f1e954415291ce752e4931ab4f65dccff99e1d02497d8ebf532d670c3f703b2ea6441dc946e838e
checksum: 51542704a056894b19b36d40663ca813661d952175657ffdb5508ed430cfaf45d1740d8e4237b704982391c188debc6eb16ccb4eb1ed63ca3aaea2b5847f61ab
languageName: node
linkType: hard
"@percy/cli-upload@npm:1.10.2":
version: 1.10.2
resolution: "@percy/cli-upload@npm:1.10.2"
"@percy/cli-upload@npm:1.10.4":
version: 1.10.4
resolution: "@percy/cli-upload@npm:1.10.4"
dependencies:
"@percy/cli-command": 1.10.2
"@percy/cli-command": 1.10.4
fast-glob: ^3.2.11
image-size: ^1.0.0
checksum: 032646d26bbea480abe0114a0fc45faecfcd314ceab09b352280c2a02b5ce97f9aa3f39882e85ad514a5f53abb1d5dd158703ede831c31951f33a2b28be470c7
checksum: 518e3e2414faa63863e7cca0edf730073a78c7faf024cd34c8821a60540d203575778ce75c4194086cfa291b130b11814b8008eeb320bbdceadbc8f09375e03e
languageName: node
linkType: hard
"@percy/cli@npm:1.10.2":
version: 1.10.2
resolution: "@percy/cli@npm:1.10.2"
"@percy/cli@npm:1.10.4":
version: 1.10.4
resolution: "@percy/cli@npm:1.10.4"
dependencies:
"@percy/cli-app": 1.10.2
"@percy/cli-build": 1.10.2
"@percy/cli-command": 1.10.2
"@percy/cli-config": 1.10.2
"@percy/cli-exec": 1.10.2
"@percy/cli-snapshot": 1.10.2
"@percy/cli-upload": 1.10.2
"@percy/client": 1.10.2
"@percy/logger": 1.10.2
"@percy/cli-app": 1.10.4
"@percy/cli-build": 1.10.4
"@percy/cli-command": 1.10.4
"@percy/cli-config": 1.10.4
"@percy/cli-exec": 1.10.4
"@percy/cli-snapshot": 1.10.4
"@percy/cli-upload": 1.10.4
"@percy/client": 1.10.4
"@percy/logger": 1.10.4
bin:
percy: bin/run.cjs
checksum: 1d75dc9115daa502cfafc6581241d75ebda1691c50eb4f3b88214f6a6fd925d424d6b56c4dd33a569036ef330f1f79ac2469cb5b86fc91c77eb70651c3072d36
checksum: 3164e88bbc6966e046e60e625f6d692f478826b691fe43836934bdb321f607cdbdec0a3b535ca6b5bd1fb7ad8a58e07d5017603d083a1c9eabffe98314881b7e
languageName: node
linkType: hard
"@percy/client@npm:1.10.2":
version: 1.10.2
resolution: "@percy/client@npm:1.10.2"
"@percy/client@npm:1.10.4":
version: 1.10.4
resolution: "@percy/client@npm:1.10.4"
dependencies:
"@percy/env": 1.10.2
"@percy/logger": 1.10.2
checksum: 023bda9547eb2a262422a046508bdd718968576892ceac690070b62757c9d738bce4c8a48c93eb2e0564c1ecbfaa0260bb599ad388a034de30c9d4387baacf25
"@percy/env": 1.10.4
"@percy/logger": 1.10.4
checksum: 8970cb0fee03c118bc728e931b6645b48b2e20792652ab2f34a7602c0d031a0f9558599a0e44fa8d67103de7cd745408adc1c23c45813d9239eb9892eec61459
languageName: node
linkType: hard
"@percy/config@npm:1.10.2":
version: 1.10.2
resolution: "@percy/config@npm:1.10.2"
"@percy/config@npm:1.10.4":
version: 1.10.4
resolution: "@percy/config@npm:1.10.4"
dependencies:
"@percy/logger": 1.10.2
"@percy/logger": 1.10.4
ajv: ^8.6.2
cosmiconfig: ^7.0.0
yaml: ^2.0.0
checksum: f464a34f2ae335e0c2f3072e82d9ab2cc7b58351d72bcc9beef459b159318b7793690102bf15b1a9e95f9e952c1228469829a9d78a3c56acc90e33024b5496fd
checksum: 545e2fd4ab2694a7142ea3d4117fa8009dabb71bf90c20bca102ccab397ec7553cb6e6465a1792f2abd3312ce9ac6487a1417d280d177a4995a42be784246f94
languageName: node
linkType: hard
"@percy/core@npm:1.10.2":
version: 1.10.2
resolution: "@percy/core@npm:1.10.2"
"@percy/core@npm:1.10.4":
version: 1.10.4
resolution: "@percy/core@npm:1.10.4"
dependencies:
"@percy/client": 1.10.2
"@percy/config": 1.10.2
"@percy/dom": 1.10.2
"@percy/logger": 1.10.2
"@percy/client": 1.10.4
"@percy/config": 1.10.4
"@percy/dom": 1.10.4
"@percy/logger": 1.10.4
content-disposition: ^0.5.4
cross-spawn: ^7.0.3
extract-zip: ^2.0.1
@ -1604,7 +1604,7 @@ __metadata:
path-to-regexp: ^6.2.0
rimraf: ^3.0.2
ws: ^8.0.0
checksum: 14f64bb40bbe7bebdc4403e343e78ba49b8a021034bb8f357dca3aa03483f4d8869347fb8ae43b6133f9a7658de601d423ad250d1dc238b7cc52611bff87875b
checksum: 39f6de1cf57c086dca7bad37c09f88775e14b942a49c96966b0b277b63fe36bad25bb641c7d76b551e99ac58ea682a0c43894d6603d00a0a9dceb2359d5c56be
languageName: node
linkType: hard
@ -1619,24 +1619,24 @@ __metadata:
languageName: node
linkType: hard
"@percy/dom@npm:1.10.2":
version: 1.10.2
resolution: "@percy/dom@npm:1.10.2"
checksum: f215bb23463ba8bc77129fc8cc1631bc78dbd8f51a1d74655c736b89d08f8c67222bc18fb056fa89b862a13be9447f8e18bebf65186dc25fb48a2e2be31dfb56
"@percy/dom@npm:1.10.4":
version: 1.10.4
resolution: "@percy/dom@npm:1.10.4"
checksum: 2c1b4da7fab2c3cb150805c5cc35436e283a23dff42f63480d340d25f02662dfb05a733bbe69e585b426670f2c2f3ebd8b24708096651885aa5be4ad53731557
languageName: node
linkType: hard
"@percy/env@npm:1.10.2":
version: 1.10.2
resolution: "@percy/env@npm:1.10.2"
checksum: 44de98d21b08cfaf8897a9016c490d0e8fde760b1c193abcacc28c6a5ded5a3420e006a0afbd509026ea4dd62c4c93b9013e4041fa3d20b769551943775945d5
"@percy/env@npm:1.10.4":
version: 1.10.4
resolution: "@percy/env@npm:1.10.4"
checksum: c2a9f6b384b38d0fb4ce4c3ebdd2d7b7350fdaf6ed09b9466f9cf19865707a12663af932559524ae8f7c4b7f28ea6dadae38599451b8cf53737ec30712e942ee
languageName: node
linkType: hard
"@percy/logger@npm:1.10.2":
version: 1.10.2
resolution: "@percy/logger@npm:1.10.2"
checksum: 430ef643e96dbac25c25d290cee943a9ef27b2562f1daa0cd56036873e47db15613aca1f75aef0492093eff44db242a18001442c4ff2bcecba1c9edfdf8dd614
"@percy/logger@npm:1.10.4":
version: 1.10.4
resolution: "@percy/logger@npm:1.10.4"
checksum: 4c6ade39028842ce935dcb023aba27b7fa69864ae3dd718d39d64b9fc773b6a1d0c6465dbea369b5566e1edfcd9b835777d25b3cd929aa1bd3696a677dd94672
languageName: node
linkType: hard
@ -1790,53 +1790,53 @@ __metadata:
languageName: node
linkType: hard
"@vue/compiler-core@npm:3.2.39":
version: 3.2.39
resolution: "@vue/compiler-core@npm:3.2.39"
"@vue/compiler-core@npm:3.2.40":
version: 3.2.40
resolution: "@vue/compiler-core@npm:3.2.40"
dependencies:
"@babel/parser": ^7.16.4
"@vue/shared": 3.2.39
"@vue/shared": 3.2.40
estree-walker: ^2.0.2
source-map: ^0.6.1
checksum: dd70ed60b14faba2f46a2a99ddf20819db7dff124dd49ec15ba76ea3c6d8311feca4256d4dac8e8316c6670434cbb7c0c6a2cb5f6e97b321ba42ff454102c3be
checksum: 2683bf13ef93701af1ca4850e887c8d4d67e5583b9c426fc2b08b5512df090bc464955f031cca9f52c11cc6ad49f1ab682011fdf3ba0b6c63b5ae8bea4e68c69
languageName: node
linkType: hard
"@vue/compiler-dom@npm:3.2.39":
version: 3.2.39
resolution: "@vue/compiler-dom@npm:3.2.39"
"@vue/compiler-dom@npm:3.2.40":
version: 3.2.40
resolution: "@vue/compiler-dom@npm:3.2.40"
dependencies:
"@vue/compiler-core": 3.2.39
"@vue/shared": 3.2.39
checksum: 505a8f8515f8551795e3a01859d451645e0bd77be2d70d5c48f6edd02ebc255d911230c66ccfc478fd0218ab8a7b69bd99e2c12b406db4889285058f52d13363
"@vue/compiler-core": 3.2.40
"@vue/shared": 3.2.40
checksum: d928a16ebdda9d91a579546d108c9399f8c9a5c9c976196cfefa32f10c0ecb3111233c3291ba05898def85fcfccdc71e3446b977a7cdbc0d47d5d47b0dac75a3
languageName: node
linkType: hard
"@vue/compiler-sfc@npm:3.2.39":
version: 3.2.39
resolution: "@vue/compiler-sfc@npm:3.2.39"
"@vue/compiler-sfc@npm:3.2.40":
version: 3.2.40
resolution: "@vue/compiler-sfc@npm:3.2.40"
dependencies:
"@babel/parser": ^7.16.4
"@vue/compiler-core": 3.2.39
"@vue/compiler-dom": 3.2.39
"@vue/compiler-ssr": 3.2.39
"@vue/reactivity-transform": 3.2.39
"@vue/shared": 3.2.39
"@vue/compiler-core": 3.2.40
"@vue/compiler-dom": 3.2.40
"@vue/compiler-ssr": 3.2.40
"@vue/reactivity-transform": 3.2.40
"@vue/shared": 3.2.40
estree-walker: ^2.0.2
magic-string: ^0.25.7
postcss: ^8.1.10
source-map: ^0.6.1
checksum: b82755eec28c03800e38b99603a90b85af03d670558c845f9916650fea5cac8c2eb1511d66aa71e602ca9af8d2795e9f6a16fc867efce8c8694a6ea106f0ac95
checksum: 96cbfd078ad9c5718afced84a1a46dfed87f61bb30ff50ebb929331470d11e672d6a090ad5766ff1e60a5287b7596be31f925af44b6b1bdf69b6f14e938ae7e2
languageName: node
linkType: hard
"@vue/compiler-ssr@npm:3.2.39":
version: 3.2.39
resolution: "@vue/compiler-ssr@npm:3.2.39"
"@vue/compiler-ssr@npm:3.2.40":
version: 3.2.40
resolution: "@vue/compiler-ssr@npm:3.2.40"
dependencies:
"@vue/compiler-dom": 3.2.39
"@vue/shared": 3.2.39
checksum: 27323a548df3696d38a8b029b55e136fc94195f1a9e12a25161a8d524cc779dbcc5f69db525a8d86f6ed28326f9f8595db5ba94ccaa7c8f127f752be36bffe5f
"@vue/compiler-dom": 3.2.40
"@vue/shared": 3.2.40
checksum: 026461fcee54cf9968b1e12c32dada6dcde0a322919aa5a2c2e6e13cff7b6b2bdbc06860796895a8deef03ed1f8000e4320878576c498a1f218a62aa3e1c0bf6
languageName: node
linkType: hard
@ -1854,74 +1854,74 @@ __metadata:
languageName: node
linkType: hard
"@vue/reactivity-transform@npm:3.2.39":
version: 3.2.39
resolution: "@vue/reactivity-transform@npm:3.2.39"
"@vue/reactivity-transform@npm:3.2.40":
version: 3.2.40
resolution: "@vue/reactivity-transform@npm:3.2.40"
dependencies:
"@babel/parser": ^7.16.4
"@vue/compiler-core": 3.2.39
"@vue/shared": 3.2.39
"@vue/compiler-core": 3.2.40
"@vue/shared": 3.2.40
estree-walker: ^2.0.2
magic-string: ^0.25.7
checksum: b609d9367d875bf326ca8f31779407723cad2b2b4a26e7fb8860089c720e1b0bb8d5fe19604e8baff1d9ffc1fdbafb21a43db9063a24ae4ad30cb70b1c712de3
checksum: b86fc29b52f2460801a3c820370104b734b33cc3a66dbe0ad389a00a62b7a1069121b1ef5dfa50ca3530cbfa98c158743eee0e25af54ca45806f9497757db8c0
languageName: node
linkType: hard
"@vue/reactivity@npm:3.2.39":
version: 3.2.39
resolution: "@vue/reactivity@npm:3.2.39"
"@vue/reactivity@npm:3.2.40":
version: 3.2.40
resolution: "@vue/reactivity@npm:3.2.40"
dependencies:
"@vue/shared": 3.2.39
checksum: c4d440a53b2196e46129271affdb22182586a8123bc44d082468cd089242023890bccd6eaa1acc72919ea2c1febad979504be737720632afefee6ec6b75370a9
"@vue/shared": 3.2.40
checksum: 927d22b424b63a14234810a3b8e4e9127b7238a7cb2fbd749180279048a109348a29fc724fd9d636a6e09b5f4c902f71c789f081d3ab9b4473faedc6a03d7865
languageName: node
linkType: hard
"@vue/runtime-core@npm:3.2.39":
version: 3.2.39
resolution: "@vue/runtime-core@npm:3.2.39"
"@vue/runtime-core@npm:3.2.40":
version: 3.2.40
resolution: "@vue/runtime-core@npm:3.2.40"
dependencies:
"@vue/reactivity": 3.2.39
"@vue/shared": 3.2.39
checksum: 13f6b92d70fb3bc8b12caef9eaf9cc1fb3aa1f1bd07e2392013f02d65c74b09d4121e62d149d7f7c316ef2c6b3496c9ec828795286480f08e5f45e910b0f2671
"@vue/reactivity": 3.2.40
"@vue/shared": 3.2.40
checksum: 47c4918c1294a3dc9b50effac8fb0af4ae34476a9bf443774f66cd18230e44b6b6d1cb49657ea5670f04691fc116a1040356492393dd43523b43fd90be81078a
languageName: node
linkType: hard
"@vue/runtime-dom@npm:3.2.39":
version: 3.2.39
resolution: "@vue/runtime-dom@npm:3.2.39"
"@vue/runtime-dom@npm:3.2.40":
version: 3.2.40
resolution: "@vue/runtime-dom@npm:3.2.40"
dependencies:
"@vue/runtime-core": 3.2.39
"@vue/shared": 3.2.39
"@vue/runtime-core": 3.2.40
"@vue/shared": 3.2.40
csstype: ^2.6.8
checksum: 0c47f941148a000ac0cb93add51edb08eca5ae16fa7898dd070300f22e4ba77533c85342f0ceca0cab8637b80b1f92cfab10adb2160e4c6dd4be4a5b27ae1ff3
checksum: 4615d00cc4e2e19dc3e6e2baf5fa0cbab7d33fbbd7550b42264b6ef2e2ef5b750ef0d0c98591c10fea60d69fc33444ba4824954bce38abfa3473785a58d74c80
languageName: node
linkType: hard
"@vue/server-renderer@npm:3.2.39":
version: 3.2.39
resolution: "@vue/server-renderer@npm:3.2.39"
"@vue/server-renderer@npm:3.2.40":
version: 3.2.40
resolution: "@vue/server-renderer@npm:3.2.40"
dependencies:
"@vue/compiler-ssr": 3.2.39
"@vue/shared": 3.2.39
"@vue/compiler-ssr": 3.2.40
"@vue/shared": 3.2.40
peerDependencies:
vue: 3.2.39
checksum: ae6ccd08b85ad8c18cae461404ad8c4b3b602c779fe07ab3a69e0a9a4cef274ea8dcd662fa365f3717f67d4ba02a9eac88dd2ebf5194072ae43dd5db99c2cb2c
vue: 3.2.40
checksum: f9d53aefcace97b9e6d20de2d9bc106112bd0ff0ef849a104996fc1256e994b64e33e91853ba7bc716d4f75a2ade81b57f3fb1482eba07324eb7cedbd0dab96d
languageName: node
linkType: hard
"@vue/shared@npm:3.2.39":
version: 3.2.39
resolution: "@vue/shared@npm:3.2.39"
checksum: 0bf9f5b4851b634cfae92c08d64173c2db674bd817424473d28fc58af7c17c54a255f9b3e837d3857e1e62f9092ab1d74b4714237e45c94fcd46f92155ef653f
"@vue/shared@npm:3.2.40":
version: 3.2.40
resolution: "@vue/shared@npm:3.2.40"
checksum: d91a1e12ffb106a444dcb42c0a54d39f6688f98151dc3b77e8da1e7d3cfd09e1761268d11e7f920f233b43162e727d06f3af4408ef59c53ac2dce9c1d2881511
languageName: node
linkType: hard
"@vue/test-utils@npm:2.0.2":
version: 2.0.2
resolution: "@vue/test-utils@npm:2.0.2"
"@vue/test-utils@npm:2.1.0":
version: 2.1.0
resolution: "@vue/test-utils@npm:2.1.0"
peerDependencies:
vue: ^3.0.1
checksum: 384bdd4231d3f3eaa02e2ffaef2e2c90934cd9f44ab53fdfe1e9603fbe9a0e702c4a15e8bdc0fc907af210f23abe35fc43a4814598ed0a297af4fa144161f87f
checksum: 4612568209cefca8d8839f364b62126d34d57d4de4f4ef8b8f83588f3c12a0144872ac54aa4bb24a5a597447d5d732b9fd63e71d57a6dec3bcb784352db70706
languageName: node
linkType: hard
@ -2312,12 +2312,12 @@ __metadata:
languageName: node
linkType: hard
"bootstrap@npm:5.2.1":
version: 5.2.1
resolution: "bootstrap@npm:5.2.1"
"bootstrap@npm:5.2.2":
version: 5.2.2
resolution: "bootstrap@npm:5.2.2"
peerDependencies:
"@popperjs/core": ^2.11.6
checksum: f7d733ae5d27177d813adb2ac2158f08069a558d8f664b3db8857aba0ab07423d83b4276dba6123dde52309e707bb06ec13e040fb905eaa293c53453110bb802
checksum: 14e6df28feb975dc10702cac0a6c2a21132a6e4e5562e31cdae1db3970e287ed29001020066b61d96b2cea2a45ecf44c08c8c26bc84a31cdeabec0a9be6b9389
languageName: node
linkType: hard
@ -2505,10 +2505,10 @@ browserlist@latest:
languageName: node
linkType: hard
"caniuse-lite@npm:1.0.30001393":
version: 1.0.30001393
resolution: "caniuse-lite@npm:1.0.30001393"
checksum: 72b7cd81c51f41965f2fbdbb20729d71f2bd5e376d9b4effa22616dd2707640b8676862e8db3db83b76c3bcf2aaefc9ebd5991a10eeb483b460322de5548b98e
"caniuse-lite@npm:1.0.30001414":
version: 1.0.30001414
resolution: "caniuse-lite@npm:1.0.30001414"
checksum: 97210cfd15ded093b20c33d35bef9711a88402c3345411dad420c991a41a3e38ad17fd66721e8334c86e9b2e4aa2c1851d3631f1441afb73b92d93b2b8ca890d
languageName: node
linkType: hard
@ -2900,9 +2900,9 @@ browserlist@latest:
languageName: node
linkType: hard
"cypress@npm:10.7.0":
version: 10.7.0
resolution: "cypress@npm:10.7.0"
"cypress@npm:10.9.0":
version: 10.9.0
resolution: "cypress@npm:10.9.0"
dependencies:
"@cypress/request": ^2.88.10
"@cypress/xvfb": ^1.2.4
@ -2923,7 +2923,7 @@ browserlist@latest:
dayjs: ^1.10.4
debug: ^4.3.2
enquirer: ^2.3.6
eventemitter2: ^6.4.3
eventemitter2: 6.4.7
execa: 4.1.0
executable: ^4.1.1
extract-zip: 2.0.1
@ -2948,7 +2948,7 @@ browserlist@latest:
yauzl: ^2.10.0
bin:
cypress: bin/cypress
checksum: ef8a5ae54f3404f7926e1e248ba7a27c7f66e654a9603bf9df6366731d8dd75455f6ec9cc34d7e55e1a8c3cb8e0e36ce59add81b7b14466f2063cfe45e6c00f4
checksum: 79e3dccbb82d0b0c92bb8888682766a9738374f473cf2e9a04825a6b3dbe4420c57948cabaf757af0929192a8e61b7f08b32d7f6ee0c3cddf2736cf4f408edc1
languageName: node
linkType: hard
@ -4008,9 +4008,9 @@ browserlist@latest:
languageName: node
linkType: hard
"eslint-plugin-n@npm:15.2.5":
version: 15.2.5
resolution: "eslint-plugin-n@npm:15.2.5"
"eslint-plugin-n@npm:15.3.0":
version: 15.3.0
resolution: "eslint-plugin-n@npm:15.3.0"
dependencies:
builtins: ^5.0.1
eslint-plugin-es: ^4.1.0
@ -4022,7 +4022,7 @@ browserlist@latest:
semver: ^7.3.7
peerDependencies:
eslint: ">=7.0.0"
checksum: 3be265957b3dda6a049841803335c17689cf98a4b3859eeed3e57b44850b241e7d20640890b2dea7e83816c938fc16274bf78d370f571e211d00d9a3c513f281
checksum: a5a4c778804a0d343ca904c917b8e583b4df28aaad593ea6d41893befac45d4f92ab38d895aac018ac757583697d38e99397d4deda783ec8ff650bb2041d23c8
languageName: node
linkType: hard
@ -4051,9 +4051,9 @@ browserlist@latest:
languageName: node
linkType: hard
"eslint-plugin-vue@npm:9.4.0":
version: 9.4.0
resolution: "eslint-plugin-vue@npm:9.4.0"
"eslint-plugin-vue@npm:9.5.1":
version: 9.5.1
resolution: "eslint-plugin-vue@npm:9.5.1"
dependencies:
eslint-utils: ^3.0.0
natural-compare: ^1.4.0
@ -4064,7 +4064,7 @@ browserlist@latest:
xml-name-validator: ^4.0.0
peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
checksum: 1eb085e7d52285eff05e4a3f0f4d65619e943eb7e976b0ef59c3adc75bf4a089df8e8cdba223cf27e2623c0fc6b306e3b1ca460d0ce27cc421ca91b7880eb0d8
checksum: 36433328710c241bf363291859b6caf1c74dd18d75b1b1fe5bac9706e4d612e3dea79eef5acccf06b2df9d9b3faf9343c1b3e1d9edbf6465fd9752f3c0a87ee4
languageName: node
linkType: hard
@ -4119,12 +4119,12 @@ browserlist@latest:
languageName: node
linkType: hard
"eslint@npm:8.23.0":
version: 8.23.0
resolution: "eslint@npm:8.23.0"
"eslint@npm:8.24.0":
version: 8.24.0
resolution: "eslint@npm:8.24.0"
dependencies:
"@eslint/eslintrc": ^1.3.1
"@humanwhocodes/config-array": ^0.10.4
"@eslint/eslintrc": ^1.3.2
"@humanwhocodes/config-array": ^0.10.5
"@humanwhocodes/gitignore-to-minimatch": ^1.0.2
"@humanwhocodes/module-importer": ^1.0.1
ajv: ^6.10.0
@ -4142,7 +4142,6 @@ browserlist@latest:
fast-deep-equal: ^3.1.3
file-entry-cache: ^6.0.1
find-up: ^5.0.0
functional-red-black-tree: ^1.0.1
glob-parent: ^6.0.1
globals: ^13.15.0
globby: ^11.1.0
@ -4151,6 +4150,7 @@ browserlist@latest:
import-fresh: ^3.0.0
imurmurhash: ^0.1.4
is-glob: ^4.0.0
js-sdsl: ^4.1.4
js-yaml: ^4.1.0
json-stable-stringify-without-jsonify: ^1.0.1
levn: ^0.4.1
@ -4164,7 +4164,7 @@ browserlist@latest:
text-table: ^0.2.0
bin:
eslint: bin/eslint.js
checksum: ff6075daa28d817a7ac4508f31bc108a04d9ab5056608c8651b5bf9cfea5d708ca16dea6cdab2c3c0ae99b0bf0e726af8504eaa8e17c8e12e242cb68237ead64
checksum: ca293ce7116599b742d7ab4d43db469beec22f40dd272092d809498be3cff3a7c567769f9763bdf6799aac13dd53447b93a99629b7b54092783046eb57eaced6
languageName: node
linkType: hard
@ -4236,10 +4236,10 @@ browserlist@latest:
languageName: node
linkType: hard
"eventemitter2@npm:^6.4.3":
version: 6.4.5
resolution: "eventemitter2@npm:6.4.5"
checksum: 84504f9cf0cc30205cdd46783fe9df3733435e5097f13070b678023110b5ef07847651808ae280cd94c42cd5976880211c7a40321a8ff8fa56f7c5f9c5c11960
"eventemitter2@npm:6.4.7":
version: 6.4.7
resolution: "eventemitter2@npm:6.4.7"
checksum: 1b36a77e139d6965ebf3a36c01fa00c089ae6b80faa1911e52888f40b3a7057b36a2cc45dcd1ad87cda3798fe7b97a0aabcbb8175a8b96092a23bb7d0f039e66
languageName: node
linkType: hard
@ -4525,13 +4525,6 @@ browserlist@latest:
languageName: node
linkType: hard
"functional-red-black-tree@npm:^1.0.1":
version: 1.0.1
resolution: "functional-red-black-tree@npm:1.0.1"
checksum: ca6c170f37640e2d94297da8bb4bf27a1d12bea3e00e6a3e007fd7aa32e37e000f5772acf941b4e4f3cf1c95c3752033d0c509af157ad8f526e7f00723b9eb9f
languageName: node
linkType: hard
"gauge@npm:^4.0.3":
version: 4.0.4
resolution: "gauge@npm:4.0.4"
@ -4791,9 +4784,9 @@ browserlist@latest:
languageName: node
linkType: hard
"html-validate@npm:7.3.3":
version: 7.3.3
resolution: "html-validate@npm:7.3.3"
"html-validate@npm:7.5.0":
version: 7.5.0
resolution: "html-validate@npm:7.5.0"
dependencies:
"@babel/code-frame": ^7.10.0
"@html-validate/stylish": ^3.0.0
@ -4809,9 +4802,9 @@ browserlist@latest:
prompts: ^2.0.0
semver: ^7.0.0
peerDependencies:
jest: ^25.1 || ^26 || ^27.1 || ^28
jest-diff: ^25.1 || ^26 || ^27.1 || ^28
jest-snapshot: ^25.1 || ^26 || ^27.1 || ^28
jest: ^25.1 || ^26 || ^27.1 || ^28.1.3 || ^29.0.3
jest-diff: ^25.1 || ^26 || ^27.1 || ^28.1.3 || ^29.0.3
jest-snapshot: ^25.1 || ^26 || ^27.1 || ^28.1.3 || ^29.0.3
peerDependenciesMeta:
jest:
optional: true
@ -4821,7 +4814,7 @@ browserlist@latest:
optional: true
bin:
html-validate: bin/html-validate.js
checksum: 15a092fd286858c381c781cdc3e5050af6e8e9200de313a8994862add72730be35c633543417212b6b53e6f3365407557f97e89ac1ebf7cab80d601c981fa437
checksum: 04d73c5173e31358917d44d6bba3a256fdebc97f00aaca5d69966485b2a2743fa3de6a9042b54cbb402b4e6c7b4a626d622e9a83906702b89b684f2990e95a4d
languageName: node
linkType: hard
@ -5416,6 +5409,13 @@ browserlist@latest:
languageName: node
linkType: hard
"js-sdsl@npm:^4.1.4":
version: 4.1.5
resolution: "js-sdsl@npm:4.1.5"
checksum: 695f657ddc5be462b97cac4e8e60f37de28d628ee0e23016baecff0bb584a18dddb5caeac537a775030f180b5afd62133ac4481e7024c8d03a62d73e4da0713e
languageName: node
linkType: hard
"js-stringify@npm:^1.0.2":
version: 1.0.2
resolution: "js-stringify@npm:1.0.2"
@ -5738,10 +5738,10 @@ browserlist@latest:
languageName: node
linkType: hard
"luxon@npm:3.0.3":
version: 3.0.3
resolution: "luxon@npm:3.0.3"
checksum: 67d143f102f520761c4202086579a5cf30b230ea299da27cacb31e9f9d372cadef90f14cbe7e2621b70825b267fe00128b8176ed8b7172b48f77a403a662d5aa
"luxon@npm:3.0.4":
version: 3.0.4
resolution: "luxon@npm:3.0.4"
checksum: d0908c3951da2a10ccf23040210ead23b0da5366a9d0954e7d5db3560189a7bd703d8af1e00084f197effc9cd7158d1bddf32886d98a70d59ce9bc3fe88bbce0
languageName: node
linkType: hard
@ -6046,9 +6046,9 @@ browserlist@latest:
languageName: node
linkType: hard
"naive-ui@npm:2.33.2":
version: 2.33.2
resolution: "naive-ui@npm:2.33.2"
"naive-ui@npm:2.33.3":
version: 2.33.3
resolution: "naive-ui@npm:2.33.3"
dependencies:
"@css-render/plugin-bem": ^0.15.10
"@css-render/vue3-ssr": ^0.15.10
@ -6069,7 +6069,7 @@ browserlist@latest:
vueuc: ^0.4.47
peerDependencies:
vue: ^3.0.0
checksum: 0e3c6465521925e9ca51bb9536ece8ff8cae5b293490a7be9121e9771a0f9e18b776b33cb7025d51a444230855285a37e3fe38d9eeac4f81c3e4937dc0fff541
checksum: 772373981bef531a09fd57712dc74c9413c1061c1e754bf0ca6b287ad73673093f9c84b7fc835e5bfc287a816e31dd86595eda791aead763b63577430b934678
languageName: node
linkType: hard
@ -7099,31 +7099,31 @@ browserlist@latest:
"@fullcalendar/timegrid": 5.11.3
"@fullcalendar/vue3": 5.11.2
"@parcel/transformer-sass": 2.7.0
"@percy/cli": 1.10.2
"@percy/cli": 1.10.4
"@percy/cypress": 3.1.2
"@popperjs/core": 2.11.6
"@vitejs/plugin-vue": 2.3.4
"@vue/test-utils": 2.0.2
bootstrap: 5.2.1
"@vue/test-utils": 2.1.0
bootstrap: 5.2.2
bootstrap-icons: 1.9.1
browser-fs-access: 0.31.0
browserlist: latest
c8: 7.12.0
caniuse-lite: 1.0.30001393
cypress: 10.7.0
caniuse-lite: 1.0.30001414
cypress: 10.9.0
cypress-real-events: 1.7.1
d3: 7.6.1
eslint: 8.23.0
eslint: 8.24.0
eslint-config-standard: 17.0.0
eslint-plugin-cypress: 2.12.1
eslint-plugin-import: 2.26.0
eslint-plugin-n: 15.2.5
eslint-plugin-n: 15.3.0
eslint-plugin-node: 11.1.0
eslint-plugin-promise: 6.0.1
eslint-plugin-vue: 9.4.0
eslint-plugin-vue: 9.5.1
file-saver: 2.0.5
highcharts: 10.2.1
html-validate: 7.3.3
html-validate: 7.5.0
jquery: 3.6.1
jquery-migrate: 3.4.0
jquery-ui-dist: 1.13.2
@ -7131,17 +7131,17 @@ browserlist@latest:
list.js: 2.3.1
lodash: 4.17.21
lodash-es: 4.17.21
luxon: 3.0.3
luxon: 3.0.4
moment: 2.29.4
moment-timezone: 0.5.37
ms: 2.1.3
murmurhash-js: 1.0.0
naive-ui: 2.33.2
naive-ui: 2.33.3
parcel: 2.7.0
pinia: 2.0.22
pinia-plugin-persist: 1.0.0
pug: 3.0.2
sass: 1.54.9
sass: 1.55.0
seedrandom: 3.0.5
select2: 4.1.0-rc.0
select2-bootstrap-5-theme: 1.3.0
@ -7149,7 +7149,7 @@ browserlist@latest:
slugify: 1.6.5
sortablejs: 1.15.0
vite: 2.9.15
vue: 3.2.39
vue: 3.2.40
vue-router: 4.1.5
zxcvbn: 4.4.2
languageName: unknown
@ -7201,16 +7201,16 @@ browserlist@latest:
languageName: node
linkType: hard
"sass@npm:1.54.9":
version: 1.54.9
resolution: "sass@npm:1.54.9"
"sass@npm:1.55.0":
version: 1.55.0
resolution: "sass@npm:1.55.0"
dependencies:
chokidar: ">=3.0.0 <4.0.0"
immutable: ^4.0.0
source-map-js: ">=0.6.2 <2.0.0"
bin:
sass: sass.js
checksum: 90182b566072b48e2263c5a87229ab85164e13b71b24847ba76a8e68eb952cb69a7dcef815f4ccc0189dd2d0c254311acff6972166603338d33bbc96f6d500c6
checksum: 7d769ed08efce4e6134e0f3dc11c4f07e32c413ac8eb43c5855f2686890fdcbd80da34165c91fb4ba407f478ca108e171574b5a60cb9814a5ed09d80f6014f96
languageName: node
linkType: hard
@ -8074,16 +8074,16 @@ browserlist@latest:
languageName: node
linkType: hard
"vue@npm:3.2.39":
version: 3.2.39
resolution: "vue@npm:3.2.39"
"vue@npm:3.2.40":
version: 3.2.40
resolution: "vue@npm:3.2.40"
dependencies:
"@vue/compiler-dom": 3.2.39
"@vue/compiler-sfc": 3.2.39
"@vue/runtime-dom": 3.2.39
"@vue/server-renderer": 3.2.39
"@vue/shared": 3.2.39
checksum: f096a3f0a5f72c65d26246ff7989729eda2b996dc30c63fd8cd7ccda07e9c318d478e3e24661ff01e49bcf5fed6f330142fcf29d6ad46c13423f36b3ae1a54cc
"@vue/compiler-dom": 3.2.40
"@vue/compiler-sfc": 3.2.40
"@vue/runtime-dom": 3.2.40
"@vue/server-renderer": 3.2.40
"@vue/shared": 3.2.40
checksum: fb5ca87c16e58f24c0088add152ca1ef70ac6d198ec3a60e7904201c31aadefb2c28e361934c42a704742835cdd9c02ab5765f0c29e8335eb13261d7b764b0ee
languageName: node
linkType: hard