Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· kamo-shared-library
Zapytania dotyczące dokładnego dopasowanie, lista stron, paragony
· kamo-shared-library
Dodaj datęLastViewed do MediaSessionMember dla znaczników czasu paragonu
· kamo-shared-library
Dodaj flagę isAccessRevoked do kontroli dostępu na przydział
· kamo-marketing
Rozróżnij aktywnie tłumaczenie vs komunikaty kolejkowane
Kolejka tłumaczeń była już sekwencyjna, ale każda kolejka bańki Wyrenderowany "Translating...". Teraz pojedyncza wiadomość w locie pokazuje "Przetłumaczenie..." z pulsacyjną kropką i resztą show "Pending Translation..." Ze statyczną kropką, dzięki czemu odwiedzający może zobaczyć postęp w kolejce.
· kamo-internal
Rozróżnij aktywne tłumaczenie vs komunikaty kolejkowe
Kolejka strumieniowa była już ściśle sekwencyjna (jedna pojmacja na raz), Ale każda kolejkowa wiadomość brzmiało "Przetłumaczenie...", ponieważ wszyscy się podzielili To samo w oczekiwaniu na flagę. Podziel to na dwa stany: singiel Wiadomość aktualnie w locie pokazuje "Translating..." z pulsacyjną kropką, wszystko Inne kolejkowe wiadomości pokazują "Pending Translation..." ze statyczną kropką. Wiadomości na żywo (właśnie przybyte) są tłumaczone same i zaczynają się w aktywnym Państwo.
· kamo-marketing
Pokaż ikonę błędu, gdy wiadomość nie przetłumaczy
Kiedy tłumaczenie na zgodnie z wiadomością tłumaczy się tłumaczy:false, błędy wychodzą, lub czas na zewnątrz, chat bubble renderuje ikonę AlertTriangle w kolorze czerwonym Z podpojem "Nieprzetłumaczono wiadomości". Zamiast po cichu odchodzić Bańka w oryginalnym języku.
· kamo-internal
Pokaż ikonę błędu, gdy wiadomość nie przetłumaczy
Gdy tłumaczenie per-mes-message zwraca tłumaczenie przetłumaczone przez tłumaczone:false, błędy wydawane, lub czas na zewnątrz, bańka czatu teraz renderuje małą czerwoną ikonę ErrorOutline w miejsce odznaki tłumacza z pyskiem "Nieprzetłumaczyć Wiadomość." zamiast po cichu zostawiać bańkę w oryginalnym języku. Flaga jest resetowana za każdym razem, gdy użytkownik wybierze nowy język, więc próba poprawna Może odnieść sukces bez nieumiejętnego błędu.
· kamo-marketing
Transy strumieniowe najnowsze dla historii odwiedzających
Kiedy odwiedzający ląduje na miejscu nieanglojęzycznym, a czat wsparcia ma Istniejące angielskie wiadomości, każda bańka oznaczona potrzebuje Przemowanie przez Zaplecze pokazuje teraz "Translating..." zastępczy podczas kolejki do przesyłania strumieniowego Wypełnia je pojebędną pojebędną, zaczynając od najnowszego komunikatu. A A Licznik pokoleniowy zapobiega pulsowaniu aktualnych kolejek.
· kamo-internal
Przesyłki wiadomości strumieniowej najnowsze na przełącznikach językowych
Gdy użytkownik wybierze nowy język (lub otworzy istniejący czat w a Język inny od źródła wiadomości), każda bańka, która potrzebuje Tłumaczenie natychmiast renderuje "Translating..." zastępczy symbol i Tłumaczenia przesyłają w jednym na raz, zaczynając od najnowszej Przesłanie i praca wstecz. Obejmuje to własną przeszłość użytkownika Wiadomości — wszystko, co jest autorstwa w innym języku niż widz Teraz jest już tłumaczone. Licznik generacji odwołuje kolejki w locie, jeśli Użytkownik ponownie zmienia język.
· kamo-marketing
Automatycznie translusze wiadomości zwiedzających i agentów
Agent na żywo odpowiada, że przybywa w języku innym niż adres URL odwiedzającego Teraz pokaż bańkę "Translating...", podczas gdy połączenie TranslateService rozwiązuje, Następnie zamień na przetłumaczony tekst z odznaką językową, której podpowiedź jest Język źródłowy i oryginalny komunikat. Wiadomości zwiedzających są oznaczone Z adresem URL locale w wysyłaniu, aby czat agenta mógł je przetłumaczyć na Język profilu agenta. Wiadomości załadowane do historii są tłumaczone Na przód za pośrednictwem nowego ?lang-locale> query param na /api/chat/support.
· kamo-internal
Przetłumacz wiadomości czatu w języku widza
Dodaje tablicy flagi "Mój język" w NavTop (po lewej stronie narzędzia e-mail, oddzielone Przez regułę pionową). Wybór języka wpisuje się z powrotem do Member.language i Syncs locale cookie, dzięki czemu cały interfejs użytkownika się zmienia; nadaje również wydarzenie Każdy otwarty ChatBox używa do ponownego wykorzystania swojej historii w nowym języku. ChatBox teraz pobiera wiadomości z ?lang-locale>, renders tłumaczone bąbelki Z małą odznaką Translate, której podpojem narzędzi pokazuje oryginalny tekst i źródło Język, i pokazuje "Translating..." symbol zastępczy dla wiadomości na żywo, aż do momentu TranslateService call powraca. Wysłanie ścieżki oznacza każdą wiadomość wychodzącą z Lokalny autor, aby inni widzowie mogli go przetłumaczyć na żądanie.
· APIService
Proxy support-message punkt końcowy
Dodaje trasę przejścia dla nowego punktu końcowego MediaService, który tłumaczy Pojedyncza wiadomość o obsługą - czat w lokalizacji adresu URL odwiedzającego. Po stronie marketingu Widget na czacie trafi - Której bramę przekazuje teraz do MediaService ze standardowym czatem publicznym Auth i kontrole limitu stawek.
· MediaService
Tłumaczenie na żądanie dla czatów i wiadomości pomocowych
Przechwytuje język źródłowy dla każdego czatu / wiadomości pomocy technicznej i dodaje Opcjonalny ?lang-XX param na punktach końcowych wiadomości i premii plus na przemieszczenie POST /translatuj punkt końcowy. MediaService prowadzi teraz do Tłumaczenia TranslationServiceCient, MessageTranslationSkrzynki skutkują MediaObjMsg Przekładnia, więc to samo tłumaczenie nigdy nie jest opłacane dwa razy. Przewody ten sam przepływ do ścieżki local-chat (visitor): odwiedzający wysyłają ich adres URL jako sourceLanguage, a strony agenta / odwiedzającego po każdym pociągnięciu Tłumaczenia na swój ulubiony język. Dodaje usługę tłumaczenia Sekretne wdrożenie MediaService, aby nowy klient mógł uwierzytelnić.
· kamo-shared-library
Tłumaczenie cache dla wiadomości czatu
Dodaje jednostkę MediaObjMsMsT) (jeden wiersz na (przesłanie, język)) i opcjonalnie źródłoLanguageId kolumna na MediaObjMsg, więc wiadomości czatu mogą być Przetłumaczone na życzenie i natychmiast zarezerwowane dla innych widzów w tym samym Język. ChatMessageDto nosi źródłoLanguageId, więc odbiorcy na żywo wiedzą Czy muszą się tłumaczyć. MediaService.createMessage zyskuje przeciążenie To zajmuje język autorki, powrót do Member.language dla dziedzictwa - dzwoniących.
· kamo-internal
Dodaj sesy personal + Chat/Docs/Notes/KB/HRS
Indeks /settings nie wykazał żadnych sekcji dla osób niebędących do adminów, ponieważ każdy Istniejąca sekcja została zamknięta po prawej stronie administratora (CONFIGURE_SYSTEM, MANAGE__SETTINGS, MANAGE_ACCESS_RULES). Regularny członek zespołu tylko z Prawa wsparcia widziały dokładnie 3 karty (Dlapas, Analytics, Scheduled Wsparcie) i nic więcej. Dodaj zawsze widzialną sekcję osobistą (Mój profil, audio i wideo, Aktywności konta oraz plany & rozliczeń na orgs dzieci), które linkują do Własne /setcje/członkinie/tajemnie karty — więc ustawienia nigdy nie są puste, Bez względu na prawa na poziomie org. Pojrzyj również wcześniej zaginiony Czat / Artykuły / Noty / Wiedza Sekcje bazowe / HRS — każda zamknięta na odpowiedniej fladze funkcji org plus odpowiedni prawo MANAGE___SETTINGS — dopasowywać dedykowane /settings/features/'app> strony, które już istnieją dla tych aplikacji.
· kamo-internal
Obracaj otwieranie bramek w oparciu o proporcje widoku
Rama bramek teraz przechyla się przez atan2 (widzeportH, viewport) więc jest otwarty Prawo strona zmierza w kierunku przekątnego widoku — dla 16:9 monitoruje Punkty otwarcia 29 euro na południe od wschodu; za portret wskazuje bliżej Na południe. Czyta sposób, w jaki użytkownicy naturalnie rzutują głowy z większości Ekran z powrotem w kierunku lewego górnego rogu. Fizyka: kolizja bramkowa przebiega teraz w korordach bramkowych. Każdy rzucony Środek + prędkość głowy obraca się w lokalnej ramie, istniejący AABB Zderzenie ścian osiowych przebiega bez zmian, a następnie dowolne Odbicie odcisku i prędkości obraca się z powrotem do przestrzeni świata. O. w tym, w tym, pot w tym, w tym, że pot wt., w tym, w tym, z wt., w tym, o., w tym, w tym, z w Kontrola strefy punktowej odbywa się również w lokalnych kodach, więc głowa naprawdę Wejście do (obróconego) otwarcia wciąż punktów. Wizualne: ramka SVG + poświata po stronie wejściowej na żywo wewnątrz obrotu kontenery; nakładki na uroczystości (GOAL!/MISS!) i podpis REMOVE Siada poza rotacją, więc tekst pozostaje czytelny. Miss-shake teraz Oscyluje się wokół kąta bazowego zamiast zera. Kąt bramki jest rekomputerowy w widoku resize resize za pomocą ustawiacza stanu, z Paraliżowy ref, więc rzut RAF odczytuje najnowszą wartość każdej klatki Bez ponownego roztworu oddzwonienia.
· kamo-internal
Rzuć bramkę, aby uzbrajić bramkę z strzelcem/miss obchody
Ramka bramkowa 132 x 132 pojawia się w górnej lewej części, gdy głowa jest w środku Samochodem lub aktywnym miotiem, przesunięcie 56px z narożnika, aby głowice mogły Brak przeszłości lub za nim. Trzy solidne ściany (górne, lewe, dno) działają jak Elastyczne powierzchnie odbijające (0,65 restytucji); prawa strona jest otwarta Wejście. Odważny czerwony X w tylnym panelu sprawia, że "usuwanie" intencją Niewątpliwiony, a pulsujący wskaźnik wejścia oznacza otwartą stronę. Kiedy rzucona głowa przechodzi do strefy wyników, jest usuwana Z mapy rzutu, podstawowe okno narzędzia jest zamknięte przez Narzędzie: zamknięcie, a głowica jest usuwana przez usunięcie Zielony promieniowy Błysk, 18-cząstkowy złoty/pomarańczowy pęk i odbijająca się CEL! - Strzela na wynik. Kiedy rzucona głowa po prostu odbija się od ściany bramkowej (ogłoszony o 350ms, aby pojedynczy błąd nie zawiódł, nie wysyła spamu), cel Trzęs się czerwono i MISS! nakładki uderza. Stabilność: kolizja bramkowa żyje całkowicie wewnątrz pętli RAF (brak konfliktów systemu sprężyny) oraz HexHeadGoalZone są właścicielami wszystkich Świętowanie stanu wewnętrznego – silnik tylko strzela. Czysta Funkcja addytywna; ścieżki przeciągania / upuszczania nienawracają pozostają niezmienione.
· kamo-internal
Fizyka rzucana z kolizjami przy basenie i szlakiem kometek
Przesunięcie głowy obok progu rzutu uderza go w granat W fizyce w zasięgu jawnej (tarcie, odbicie krawędzi, wzmocnienie głową w głowę Zderzenia). Powolne krople nadal lądują dokładnie tam, gdzie wypuszczono. Podczas gdy głowa Jest w ruchu podąża śladem ognia w stylu zręcznościowym. Rzut jest ogrodzony przez obie prędkość uwalniania (> 650 px/s uśredniony nad Ostatnia 110 ms) i całkowita odległość przeciągania (> 30 px) tak szybko precyzyjny Powtórka nigdy nie przypadkowo uruchamia rzut. Magneitude jest ograniczony do 3200 px/s, aby utrzymać oswojenie przesunięcia krawędzi detekcji. Rzut pętli RAF napędza wartość ruchu zapisuje bezpośrednio przez .set() — Omijanie sprężyn w ruchu ramry podczas lotu - i samo-powstrzymajki, gdy Wszystkie głowice spadają poniżej progu prędkości stopu. placeHomeCluster i softPushCluster omijać każdą kotwicę obecnie na mapie rzutu, więc System sprężyn nigdy nie zwalcza integratora fizyki. Zdeległe głowice odłączają się od dowolnego gromady, promują do klastra solowego, oraz Dołącz do symulacji rzutu z impulsem nadanym przez kolizję. Wytwórnia szlaku: SVG warstwa z wzatorami promieniowo-gradientowymi wzdłuż najnowszych Pozycje, mix-blend-mode: ekran dla dodatkowego blasku, pojedyncze rozmycie CSS Filtr dla miękkości — arkadowa estetyczna, prawie zerowy koszt procesora.
· kamo-internal
Użyj OTK z wymianowany na nowi org
Wolć otk zwrócony przez POST /api/security/org w związku z kontynuacją /api/bezpieczeństwo/jdź jak w obie strony. Serwer teraz miętuje świeżego właściciela Sesja jako część kreacji orgi, więc post-twórz przekierowanie do nowego org /walet jest deterministyczny - bez rasy z tworzeniem domeny, nie Ciche wejście - jako porażka opuszczając twórcę na sesji rodzic-org.
· SecurityService
Właściciel miny + OTK on org create
Po stworzeniuOrganizationOwner, miętuj świeżo - związany z nowym właścicielem TeamMember i zwrócić OTK wraz z id/członkami. Bez tego Twórca pozostaje na sesji rodzic-org – ograniczone prawa i isOrganizationOwner-false - więc pojawia się nowa strona ustawień orgi dla dzieci Ozdęta i plany & Billing są ukryte, dopóki nie zostaną ręcznie ponownie wejdą.
· kamo-shared-library
Samonaskowe nieopowiarystowane zamówienia COMP na starcie
Na stronie PostConstruct, zeskanuj wszystkie zamówienia APPROG COMP i przeliczenie wszelkich zamówień Brak konta subskrypcja. Idempotent — find-or-create oznacza bezpieczne dla Uciekaj wielokrotnie.
· kamo-internal
Przesuń dostępność rozwijaj pozycję w lewo przed My Businesses
Przenosi pigułkę o status z prawej poprzeczkę akcji do lewej sekcji powitalnej, umieszczając ją między separatorem powitalnym a My Businesses z przegrobem. Usuwa teraz regulowaną pionową regułę, która wcześniej oddzielała status od przycisków ikon.
· kamo-internal
Dodaj targetOrganizationId do typów Subskrypcji i createSubscriptionOrder
· SecurityService
Dodaj punkt końcowy do komp-p, aby aktywować subskrypcję COMP z zatwierdzonego zamówienia
POST - połączenia - a następnie unieważnia uprawnienia do docelowego orgudu za pośrednictwem Uprawnienia.
· kamo-shared-library
Zamówienie COMP Auto-provisions AccountZaskrypcja i przypisuje licencję
- Subscriptionorder: dodaj targetOrganizacja (nienależne do orgs) - dodaj celOrganizationId string -Repozytorium konta: dodaj findBrimaryMember_Id dla odszukania konta przez członka posiadacza - Subskrypcja: repozytorka wtryskowa; PrzepisCompSubscriptions tworzy/upert - Subskrypcja - Subskrypcja i ACTIVE AccountLicense dla członka targetorg; zatwierdźć, że zamawianie płatności COMP; nowy abonament aktywcyjny do wstecznego świadczenia istniejących ZASTOSOWANYCH ZASTOSJE
· kamo-internal
Wymień kliknięcie na otwarcie popovera akcji + sterowanie rozmiarem
Kliknięcie głowicy sześciokątnej otwiera teraz polerowany wyrzutnik szklany amoryzm z Działania kontekstowe zamiast natychmiastowego otwierania okna narzędziowego. Członek Nabywa czatu: Otwórz Czat, Wyświetl konto, E-mail, Zaproś na spotkanie, Zadzwoń (gdy obie strony mają zarejestrowane rozszerzenie VOIP); głowice narzędziowe Otwórz Otwarte "toolName". A Size sub-menu pozwala użytkownikowi wybrać mały/medium/ Duże dla tej konkretnej głowy (wytrwałe na członka przez nowy MemberUiPreference store oraz suwak w skali globalnej, który wpływa na każdy Głowa sześciokątna na tej maszynie (wytrwała w localStorage). Okna narzędziowe już teraz Szerokość zacisku / wysokość do widoku, więc nigdy nie otwierają się częściowo poza... Ekran nawet z skurczonymi oknami.
· InitializerService
Dodaj tabelę MEMBER_UI_PREFERENCES (zamówienie 60)
Idempotent CREATE dla ogólnego w zależności od członkini sklepu UI-preference Selektor rozmiaru rozmiaru sześciogłowego i ustawienia interfejsu użytkownika naczłonowy. Schema odzwierciedla konwencję EmbRecordState (is_active, date_created, date_updated) używany w innym miejscu w modelu danych.
· SecurityService
Dodaj MemberUiPreferenceKontroller dla ustawień interfejsu użytkownika
Powściąga nowy selektor wielkości sześciokątnej i każdą przyszłość małą. Preferencja użytkownika. Punkty końcowe w /api/security/members/me/ui- Preferencje rozwiążą członka z sesji OTK i przeczytaj/zapis JSON Wartościowe kluczowe przez nieprzezroczysty łańcuch prefKey.
· kamo-shared-library
Dodaj MemberUiPreference podmiotu dla prefs UI na osobę
Ogólny naczłonowy sklep z preferencjami interfejsu użytkownika (członek Id, prefKey, JSONB wartość) W przypadku małych utrzymanych ustawień interfejsu użytkownika. Pierwszym konsumentem jest hex-head popover Selektor rozmiaru.
· kamo-internal
Wire FeaturesManager na subskrypcję platformy dla dzieci-orging
FunkcjeManager nazywał dziedzictwo - które Rzuty (wygrane opad) zamiast odczytać prawdziwą subskrypcję platformy. Teraz dzwoni - który pyta root org's Zamówienia na subskrypcję handlową dla połączenia międzyorgami rozmówcy. Kiedy i kiedy Dzwonier ma UWADZONE KONKURA KONKURENNE na orginie korzenia, wszystkie bramki z funkcjami otwierane jako Oczekiwano dla skompilowanych administratorów zorgami dzieci.

Twój wszechświat czeka.
Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.
Bezpłatne na zawsze — nie wymaga karty kredytowej