<?xml version="1.0" encoding="UTF-8"?>
<changelogs>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.27</version>
    <addition>
      <item>Dutch (nl-NL), Greek (el-GR), Turkish (tr-TR) and Polish (pl-PL) language packs (thanks to Marcos Cappa).</item>
    </addition>
    <fix>
      <item>The administrator copy of the component manifest now carries the current version and all languages.</item>
    </fix>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.25</version>
    <change>
      <item>Joomla version wording in the component's site language files now says Joomla 5 and 6.</item>
    </change>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.24</version>
    <change>
      <item>Extension description and notes updated to say Joomla 5 and 6 (English, Spanish and Russian).</item>
    </change>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.23</version>
    <fix>
      <item>Accessibility: empty A-Z letters now have enough colour contrast (WCAG AA) and still look disabled.</item>
    </fix>
    <change>
      <item>Requires Joomla 5 or 6. The installer now refuses Joomla 4 with a clear message and changes nothing.</item>
    </change>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.22</version>
    <fix>
      <item>CSV import: related terms are now merged across the whole file and saved in one step, so row order no longer matters and a later row never removes a link an earlier row created.</item>
      <item>CSV import: a file without a related column keeps existing related terms; an empty related cell clears them.</item>
      <item>Term highlighting in articles now works right after a fresh install.</item>
      <item>Styles and scripts load through Joomla's Web Asset Manager; no more "WebAssetManager is locked" error on Helix templates.</item>
      <item>Terms and glossaries set to All languages are saved as All.</item>
    </fix>
    <addition>
      <item>Russian (ru-RU) language pack (thanks to Marcos Cappa).</item>
    </addition>
    <change>
      <item>PHP 8.4 and Joomla 6 code cleanups; more messages are translatable.</item>
    </change>
  </changelog>
    <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.20</version>
    <addition>
      <item>Download Key support on the update site (dlid).</item>
    </addition>
  </changelog>
<changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.19</version>
    <fix>
      <item>Prints the glossary stylesheet and script with the page so Helix and other head-first templates still style the glossary.</item>
    </fix>
  </changelog>
<changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.18</version>
    <change>
      <item>Runs on Joomla 5 and 6 with the Behaviour Backward Compatibility plugins disabled</item>
      <item>Admin assets load through the web asset manager; tables use the current database API</item>
    </change>
  </changelog>
<changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.17</version>
    <addition>
      <item>New Feature: Community language packs for es-ES, fr-FR, it-IT, de-DE, and pt-BR across the component, module, and plugins (contribution by Marcos Cappa).</item>
    </addition>
    <change>
      <item>Improvement: Editors-XTD insert modal uses Joomla language keys via Text::script / Joomla.Text._() so the button UI follows the site language.</item>
    </change>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.16</version>
    <fix>
      <item>Bug Fix: Public Full Definition renders stored safe HTML with the form safehtml filter instead of stripping tags via default InputFilter.</item>
    </fix>
    <addition>
      <item>New Feature: Component option Hide empty A-Z letters (default Off). When On, alphabet chips with no published terms are omitted instead of shown disabled.</item>
    </addition>
    <change>
      <item>Improvement: Component option Accent-sensitive search (default Off). When On, Contains/Begins/Exact distinguish accents such as N vs Ñ; when Off, search uses normal database accent folding. A-Z letter navigation always follows the glossary alphabet. Sounds Like stays phonetic.</item>
    </change>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.13</version>
    <fix>
      <item>Bug Fix: Frontend Suggest a term keeps allowed short_def/fulltext HTML via the same safehtml InputFilter mode as the term form (default InputFilter was stripping lists/emphasis).</item>
      <item>Bug Fix: Glossary list ordering and term prev/next order letters with utf8mb4_bin so Spanish N and Ñ do not collapse in sort order.</item>
      <item>Bug Fix: Administrator sys.ini includes COM_EASYGLOSSARY_SELECT_TERM for the Term page menu picker.</item>
    </fix>
    <change>
      <item>Improvement: Release preflight gate cli/qa_preflight_easyglossary.php covers Marcos regressions plus adversarial letter/HTML/lang/version checks.</item>
    </change>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.12</version>
    <fix>
      <item>Bug Fix: A-Z letter counts and filters compare letter with utf8mb4_bin so Spanish N and Ñ stay separate under utf8mb4_unicode_ci tables; embed/module letter lists follow glossary alphabet order.</item>
      <item>Bug Fix: CSV import no longer pre-strips fulltext/short_def with InputFilter html; the term form safehtml filter keeps allowed markup for round-trips.</item>
      <item>Bug Fix: Administrator com_easyglossary.sys.ini includes COM_EASYGLOSSARY_MENU_TERM_DESC for the Term page menu type.</item>
    </fix>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.11</version>
    <fix>
      <item>Bug Fix: Term pages no longer duplicate short_def when fulltext is empty (lead only; body renders fulltext when present).</item>
      <item>Bug Fix: Clearing the last Related Term empties the edited term&apos;s related_ids (fancy-select omitted key treated as empty on full form save) and still removes reciprocal backlinks.</item>
      <item>Bug Fix: A term cannot be related to itself: excluded from the Related Terms selector and stripped server-side on save; frontend See also also ignores self IDs.</item>
      <item>Bug Fix: Card hover border/shadow and other accent-tinted UI washes use var(--egloss-accent) via color-mix instead of hardcoded default blue.</item>
    </fix>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.10</version>
    <fix>
      <item>Bug Fix: Frontend Glossary menu no longer hits infinite recursion: populateState() no longer calls getState() while initializing list limit/start.</item>
      <item>Bug Fix: Legacy numeric CSV related_ids are validated against existing terms before storage.</item>
      <item>Bug Fix: Explicit unresolved {glossary_index glossary=&quot;…&quot;} returns an empty A-Z nav instead of the global index.</item>
    </fix>
    <change>
      <item>Improvement: System plugin clears Easy Glossary cache only for com_easyglossary.* and com_content.* contexts.</item>
    </change>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.9</version>
    <fix>
      <item>Bug Fix: CSV Related Terms second import pass runs for terms newly created by a core.create-only user; updating related links on pre-existing terms still requires core.edit.</item>
    </fix>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.8</version>
    <security>
      <item>Security: Finder no longer indexes a term when term and glossary use different non-Public view levels (single access cannot represent logical AND).</item>
    </security>
    <fix>
      <item>Bug Fix: Finder removes terms whose explicit language differs from the parent glossary language (no public visibility context).</item>
      <item>Bug Fix: Reset and uninstall purge #__contentitem_tag_map and UCM rows for com_easyglossary.term before dropping tables / content type.</item>
      <item>Bug Fix: CSV related links export as portable glossaryAlias|glossaryLang|termAlias|termLang keys and resolve in a second import pass; legacy numeric related_ids still accepted for same-database imports.</item>
      <item>Bug Fix: Usage Map scans eligible articles in batches (up to 5000) instead of only the 120 most recently modified.</item>
      <item>Bug Fix: ASSET_VERSION aligned to 1.0.8; duplicate COM_EASYGLOSSARY_USAGE_COUNT INI key removed; component package ships a single installer script.php.</item>
    </fix>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.7</version>
    <security>
      <item>Security: Finder effective language prefers parent glossary language when the term is *; unpublished parent/term rows are removed from the index; non-Public glossary access gates the Finder link.</item>
    </security>
    <fix>
      <item>Bug Fix: Finder adapter uses table alias a so term save/reindex no longer fails with Unknown column a.id.</item>
      <item>Bug Fix: Finder state/access queries use parent glossaries (glossary_id), not #__categories; glossary save/state/delete reindexes or removes child terms; access sync reindexes instead of assuming nested view levels via max().</item>
      <item>Bug Fix: Finder stores raw index.php term routes (not admin-routed URLs) and adds Type/Language/Category taxonomy.</item>
      <item>Bug Fix: Glossary delete cascades child terms in a transaction (no UNIQUE orphan collisions on glossary_id = 0).</item>
      <item>Bug Fix: Related-term backlinks add and remove symmetrically; deleted terms are purged from other related_ids.</item>
      <item>Bug Fix: Router glossary/term resolution uses VisibilityHelper (access, language, published parent); ambiguous same-alias glossaries are not guessed; RouteHelper no longer reads non-existent MenuItem::$published.</item>
      <item>Bug Fix: CSV includes glossary_language; ambiguous glossary/term language matches are skipped; import enforces upload error, 5 MB and row caps; export/sample links use Session::getFormToken().</item>
      <item>Bug Fix: Package updates no longer force-enable plugins; full secondary indexes ensured on update; collision-safe alias migration; required schema failures abort the update; 1.0.1.sql is idempotent (CAN FAIL).</item>
      <item>Bug Fix: Reset/sample data purges Finder and UCM maps; uninstall removes content type and Finder links.</item>
      <item>Bug Fix: Search module input IDs are unique per module; nested skip-class highlighter tracks full ancestry; Usage Map applies category visibility and UTF-8-safe snippets.</item>
      <item>Bug Fix: Sitemap emits raw XML (format=xml supported); TermTable is taggable; configuration save clears matcher cache; missing glossary id returns 404; published values keep trash/archive.</item>
      <item>Bug Fix: Frontend Suggest a term form labels live in the site language file; public SEO strings are product-neutral and honor menu page title, meta description, and robots; frontend submit fires content save events for Finder; JSON-LD term URLs are absolute.</item>
    </fix>
    <change>
      <item>Improvement: minimumJoomla raised to 5.0 (Joomla 5 and 6). Release metadata (ReadMe, assets, Wikipedia UA) aligned to 1.0.7.</item>
    </change>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.5</version>
    <fix>
      <item>Bug Fix: Duplicate administrator Import and Export menu item removed. Submenu creation now matches by link (not only alias) and cleans existing duplicates on update.</item>
    </fix>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.4</version>
    <security>
      <item>Security: Frontend submit glossary picker and save path use VisibilityHelper (published, access, language).</item>
      <item>Improvement: Sample CSV download requires a CSRF token; highlighter tag parsing handles quoted attributes.</item>
    </security>
    <fix>
      <item>Bug Fix: All-glossaries and unpublished glossary views no longer fatal on null glossary objects (alphabet, SEO, templates).</item>
      <item>Bug Fix: CSV import strips UTF-8 BOM so exported files re-import correctly.</item>
      <item>Bug Fix: CSV import matches existing terms by title when alias is empty, counts blank-title rows as skipped, and only assigns access levels the importer is allowed to use.</item>
      <item>Bug Fix: Term router no longer guesses among duplicate aliases without a glossary id; numeric-prefix fallback verifies the alias suffix.</item>
    </fix>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.3</version>
    <security>
      <item>Security: Forced {glossary id=&quot;…&quot;} shortcode DB fallback now uses the same VisibilityHelper term + parent glossary access and language rules as the public matcher.</item>
      <item>Security: Reset database and Install sample data now require core.admin or core.delete; UI warnings strengthened.</item>
    </security>
    <fix>
      <item>Bug Fix: Void HTML elements with skip classes no longer leave the highlighter classStack permanently active.</item>
      <item>Bug Fix: CSV import skips rows when an explicit glossary_alias cannot be resolved instead of silently falling back to another glossary.</item>
    </fix>
    <change>
      <item>Improvement: Editors-xtd button assets use the plugin manifest version for cache busting.</item>
    </change>
  </changelog>
  <changelog>
    <element>pkg_easyglossary</element>
    <type>package</type>
    <version>1.0.2</version>
    <security>
      <item>Security: CSV import ACL, HTML filter/validate, export CSRF; public visibility for access, language, parent glossary.</item>
    </security>
    <addition>
      <item>New Feature: Dedicated Import and Export admin screen for CSV import, CSV export, and sample CSV download (moved off the Terms list and toolbar).</item>
      <item>New Feature: One-click Install sample data and Reset database.</item>
      <item>New Feature: Redesigned admin dashboard.</item>
    </addition>
  </changelog>
</changelogs>
