== Changelog ==

The full release history for SeeOnWall for WooCommerce. The current release is also listed in
readme.txt; everything older lives here, per the WordPress.org guidance on keeping readme.txt
small.

= 1.16.0 =
* **New: a SeeOnWall tab on every product.** Product data → SeeOnWall holds everything that is
  decided per product, in one place: whether the button shows, which image the wall preview
  uses, and — for a mockup photo — the artwork inside it. No more custom fields to create by
  hand; the two that existed keep working, and the tab reads them.
* **New: the tab tells you why a product has no button.** A status card says Live or names the
  one thing missing — not connected, switched off, no image, no size — and a checklist offers
  the fix: switch it on, choose an image, go to Shipping or Variations. It answers a change
  before you press Update, marked as pending.
* **New: test the button from the editor.** A live product's tab carries the real "See on your
  wall" button, exactly as shoppers get it; click it to open the wall preview from wp-admin.
* **New: pick the poster image from the media library**, or paste an image URL, instead of
  typing a URL into a custom field. Pin the product image to keep it for the preview even if
  the product image changes later.
* **New: mark the artwork by dragging a box**, with a one-click starting point that trims a
  plain background, a readout of the rectangle, and a warning with a one-click fix when the
  box's proportions do not match the print size. Replaces the comma-separated field that sat in
  the Shipping tab.
* **New: print sizes on the product.** A simple print sold in several sizes — through an add-on,
  or with shipping dimensions that describe the box — can now list its sizes on the SeeOnWall
  tab, width × height in your store's unit, and shoppers pick between them in the preview. The
  tab shows what the product carries now (its dimensions, or its variations' sizes) before you
  add a list, and a variable product's variations still take precedence. Also a CSV column.
* **New: a SeeOnWall button block.** For a block theme whose Single Product template has been
  rebuilt from product blocks in the Site Editor — where "after the price" has nothing to attach
  to — drop the block where the button belongs. It prints the same button, for the product being
  viewed, and nothing for a product that gets no button. On any other page, name the product.
* **New: an Elementor widget.** "SeeOnWall button" in the widget panel, for Elementor product
  templates. Other builders — Divi, WPBakery, Bricks, Beaver Builder — keep using the
  `[seeonwall_button]` shortcode in their code element.
* **The settings page has tabs.** Settings (plan, usage, which products and which image),
  Button (the storefront button's position, look and labels) and Products.
* **Performance: product pages never wait for SeeOnWall.** The frame catalogue used to be
  fetched from seeonwall.com inside a product page's render whenever its cache had turned
  over, which could hold that page for up to three seconds. The storefront now only reads the
  cache; a background WP-Cron job refreshes it, connecting reads it once in wp-admin, and the
  cached names are kept for a day, so no shopper's page carries the request.
* **Security: the plugin names every backend call it makes.** The settings page used to reach
  the SeeOnWall backend through one generic pass-through route; it now has one route per call
  (subscription, usage, checkout, billing portal, dashboard link), each with a fixed method and
  only the parameters it needs. Nothing else on the backend is reachable from wp-admin.
* **New: switch a single product off.** Product visibility gains a third state — follow the
  store setting, always show, never show — so one poster with a bad photo can be hidden in a
  store that otherwise shows the button everywhere.
* **New: a Products tab.** WooCommerce → SeeOnWall → Products lists every product with its
  status — Live, Hidden, Not enabled, No image, No size — the reason, its print size, image
  and frame, and a switch to turn the button on or off right there. Counts per status filter
  the list, and search finds a product by name. Large catalogues are checked in the background
  while the counts fill in.
* **New: catalogue-scale editing.** A SeeOnWall column on Products → All products shows Live /
  Hidden / No image / No size per row; quick edit and bulk edit set the button state; and three
  columns — SeeOnWall preview, SeeOnWall image, SeeOnWall artwork area — export and import
  through WooCommerce's own product CSV tools.
* **Frame at a glance.** The tab says which of your frames the product is sold in, which
  variations change it, or which frame names an attribute value would need to match.
* A `seeonwall_preview_enabled` custom field set to `no` now hides the product's button even
  when the store shows it on every product with dimensions. It was previously ignored there.
* **Lighter product pages.** The preview script is now loaded only on product pages that show
  the button. A product with no button — switched off, no image, no size — no longer fetches
  anything from seeonwall.com. A `[seeonwall_button]` shortcode or a theme printing the button
  for another product still gets the script.
* No action needed. Existing custom fields keep working and appear in the tab.

= 1.15.0 =
* **The settings screen is built from WordPress' own parts.** Standard headings, settings
  tables, notices and buttons, in place of the panel's own cards, colours and button styles —
  so it reads and behaves like every other screen in wp-admin. The nine per-language button
  labels now fold away until you open them, and each one shows the text the button uses in
  that language while you leave it empty.
* **Fixed:** the Product visibility hint said a product always needs shipping dimensions to
  show the button. It does not, when Poster size reads the size from the product page.
* No action needed. Nothing to configure, and no existing setting changes.

= 1.14.0 =
* **New: a link to SeeOnWall on the Plugins screen.** The plugin's row now goes straight to
  WooCommerce → SeeOnWall — labelled **Connect** until the store is connected, **Settings**
  afterwards. A store that has activated the plugin but not yet connected it also gets a prompt
  on the Plugins and Dashboard screens; it retires itself the moment you connect, and can be
  dismissed before that.
* **New: copy-ready privacy policy text.** Settings → Privacy → Privacy Policy Guide now carries
  a SeeOnWall section: what the plugin sends, what shoppers send to the preview service once they
  open it, where wall photos are stored, how long they live, and links to the service's privacy
  policy and sub-processor list. Copy it into your policy and edit it to match how you describe
  other services.
* **Faster product pages.** The preview script no longer blocks the page while it loads. The
  browser starts fetching it exactly as early as before, but nothing waits on it, so a slow
  response from seeonwall.com can no longer hold up your product page.
* **Better with a screen reader.** The settings screen now has a real page heading whether or not
  the store is connected, the usage meters report their figures rather than being bare bars, and
  errors and confirmations are announced when they appear.
* The release history has moved to changelog.txt, shipped alongside readme.txt.
* No action needed. Nothing to configure, and no existing setting changes.

= 1.13.0 =
* **New: the plugin speaks Portuguese.** Everything the plugin shows you — the settings screen,
  the WooCommerce menu entry, the artwork inset field on the product editor, and its notices —
  now follows a Portuguese WordPress admin language, alongside the five languages already
  included. European Portuguese, with pt_BR and pt_AO resolving to it rather than falling back
  to English.
* **New: a Portuguese storefront button label.** WooCommerce → SeeOnWall → Storefront button
  now has a **Button text — Português** field alongside the other languages. Shoppers browsing
  your store in Portuguese see the button, and the whole wall preview, in Portuguese.
* No action needed. Stores running WordPress in another language see no change.

= 1.12.0 =
* **New: nine places to put the See on wall button on the product page, instead of three.**
  WooCommerce → SeeOnWall → Storefront button, **Position on the product page** now also offers
  after the title, after the price, after the short description, after the product meta, and
  before or after the product tabs. Your button does not move — the setting starts where it
  already is.
* **New: put the button exactly where you want it with a shortcode.** Choose "Place it myself with
  a shortcode" and write `[seeonwall_button]` in the product description, in a page builder block,
  or in a template. A theme that lays out its product page its own way, or a page builder that
  never fires the standard hooks, no longer limits where the button can go. On a page that is not
  a product page, name the product: `[seeonwall_button id="123"]`.
* **New: two filters for developers.** `seeonwall_button_hook` and `seeonwall_button_priority`
  place the button on any action at all, and `SeeOnWall_Storefront::mount_html( $product )` returns
  the markup for a template to print directly.

= 1.11.0 =
* **New: read the print size from the size field on your product page.** Under WooCommerce →
  SeeOnWall → Poster size, **Take the print size from** now offers the size field shoppers choose
  in, as well as the product's dimensions. If you sell one artwork in several sizes through a
  product add-on plugin, the sizes live in that field and not in Shipping → Dimensions, so the
  button never appeared. It appears now, and the preview opens at the size the shopper picked.
* **The field is found for you.** Options count as sizes when they read like `60x40cm`, `18x24in`
  or `A4`, and a price after the size makes no difference. Where a page offers sizes in more than
  one field, name the one you mean with a CSS selector.
* **Nothing changes unless you change it.** The setting starts on the product's dimensions, which
  is how every store works today.

= 1.10.0 =
* **New: choose the shape of the See on wall button.** Under WooCommerce → SeeOnWall → Storefront
  button, **Button shape** now offers four: Solid, the filled button you have today; Outline, the
  same box without the fill; Icon and text, a small picture mark and the words with no box at all;
  and Icon only, the mark on its own, which fits beside Add to cart rather than under it. A product
  page that already stacks quantity, Add to cart and Buy now has little room for a fifth full-width
  button, and the quieter shapes let See on wall read as the secondary action it is. Your button
  keeps its current look — the setting starts on Solid.
* **The shapes without a fill follow your theme.** Their text, border and mark take the colour of
  the copy around them, so they suit a light or a dark theme with nothing to set. Set a text colour
  and it paints both the mark and the label.
* **The colour settings now match the shape you picked.** A shape with no fill has no background to
  paint, so the background colour is hidden rather than left there doing nothing; the same goes for
  the border and corner settings on Icon and text.

= 1.9.0 =
* **Already have a SeeOnWall account? Connect this store to it.** Until now, connecting always
  created a new account, so a merchant who had signed up on seeonwall.com first ended up with two —
  and their store ran on the free tier of the wrong one. The connect screen now offers to link this
  store to the account you already have: approve it once in the tab that opens, and your store runs
  on the plan you already pay for.

= 1.8.3 =
* **Fixed: the settings page stayed blank.** The page script referred to `require`, which does not
  exist in the browser, so it stopped before it drew anything and the connection could not be made.
  The reference is gone and the page loads.

= 1.8.2 =
* **Fixed: Open dashboard, Upgrade plan and Manage subscription no longer get blocked.** These
  buttons opened their tab only after the request behind them came back, which browsers treat as
  a pop-up rather than as something you clicked. The tab now opens the moment you click and fills
  in when the address is ready. If your browser blocks it anyway, the screen says so instead of
  appearing to do nothing.
* **Your plan and your button settings now say when they are loading, and when they failed.**
  The plan used to read "Free" while it was still being fetched, so a paid store looked free for
  a moment; the button settings simply stayed absent if the request failed. Both now show their
  state, and the button settings offer Retry.
* **Settings you cannot save are caught before saving.** Corner radius below zero, a frame width
  outside 0-10 cm and button text over 120 characters now show a clear client-side message (with
  the affected label field identified) before the request is sent.
* The Corner radius field no longer stops at 50. It was the only field with a ceiling the plugin
  does not enforce.
* Buttons and fields now show a visible outline when reached by keyboard, and every action button
  is at least 44 pixels tall for touch.
* New screenshots on this listing: a preview on a real wall with the bookmarks and recently
  viewed panels, the room-scene picker beside the QR code, the analytics dashboard, and the
  preview as a shopper sees it on a phone.

= 1.8.1 =
* Listing only, no code changes. The plan limits on this page were out of date. The Free plan's
  promotional capacity has ended, so Free now runs on its own figures: 500 poster views a month
  and 100 an hour, 50 preview sessions and 20 photo uploads an hour. Every plan's hourly limits
  are now listed rather than described, and the answers about what a paid plan adds — branding
  from Basic up, session sharing from Premium up, the 14-day trial, analytics on every plan
  including Free — say which plan each one belongs to. The answer about frames now covers the
  frame catalogue that 1.8.0 added.

= 1.8.0 =
* **New: the preview can show the frames you sell instead of six generic colours.** List your
  frames in the SeeOnWall dashboard — the name you use for each one, its colour and its width in
  centimetres — and shoppers choose from that list inside the preview, at the width you entered.
* **The preview opens on the frame the shopper has selected.** If you sell a poster framed in
  several ways as variations, the preview follows the variation dropdown: pick Oak and it opens
  in your oak frame, at your width. No setup and no new field — name a frame in the dashboard
  the way it is named in your variations, and the two find each other. Any attribute works,
  whatever you call it, in any of the six languages the plugin speaks.
* WooCommerce → SeeOnWall → Storefront button now links to the frame list. The plugin signs you
  in to the dashboard with one click, the same way it already does for your plan and analytics;
  there is no second frame editor here to keep in step with that one.
* Frame names show exactly as you type them, to shoppers in every storefront language, because
  they name your products rather than translate a word.
* Nothing changes until you add a frame: with an empty list the preview keeps the six colours it
  had, and your Default frame width and Default frame colour work as before. Either way shoppers
  can still widen, recolour or remove the frame inside the preview.

= 1.7.1 =
* Listing only, no code changes. Declares compatibility with WordPress 7.1.

= 1.7.0 =
* **Poster views now have a monthly limit as well as an hourly one, and both are tracked.**
  A view counts against each; whichever runs out first stops views from being counted, and
  shoppers are asked to try again later instead of seeing the preview. The monthly ceiling is
  5,000 views on Basic and 25,000 on Premium, resetting at the start of each month; Free is 500,
  but matches Basic at 5,000 for as long as the current promotional offer runs. Ultra has no
  monthly ceiling, and in exchange its hourly views — previously unlimited — are now capped at
  50,000. The settings screen now shows a meter for the monthly total next to the hourly counters.
* Your usage panel is now headed **Current usage** rather than "Usage this hour", because one of
  its meters is no longer hourly. The four existing counters are unchanged.

= 1.6.0 =
* **New: match your theme's Add to cart button.** Under WooCommerce → SeeOnWall → Storefront
  button, set **Button style** to "Match my Add to cart button" and the See on wall button copies
  your theme button's font, size, corners and spacing — no CSS, no values to look up. Colours stay
  ours by default so shoppers can still tell the two buttons apart; tick **Also match its colours**
  if you want those copied too.
* Enabling "Also match its colours" now clears the three colour fields, because a colour you set
  yourself overrides the matched one. The fields stay on screen — set one again if you want your
  theme's colours everywhere except, say, the border.
* The frame width in the preview now stops at 10 cm instead of 25. On a 30x40 print the old
  maximum drew a border wider than the print itself, which read as a bug rather than as a frame.
  If you had saved a wider **Default frame width**, the preview shows 10; lower it in the settings
  to match what your price actually includes.
* The **Button style** option "SeeOnWall style" is now called "Default button style" — same
  behaviour, clearer name next to the new matching option.
* Shoppers can still widen, recolour or remove the frame inside the preview, exactly as before.

= 1.5.0 =
* The plugin now speaks your language. Everything the plugin shows you — the settings screen, the
  WooCommerce menu entry, the artwork inset field on the product editor, and its notices — follows
  your WordPress admin language. German, Polish, Spanish, French and Italian are included, with
  regional variants (de_AT, de_CH, es_MX, es_AR, fr_BE, fr_CA and more) resolving to their
  language rather than falling back to English.
* Two more storefront button languages: you can now set the button text for French and Italian
  alongside English, Polski, Deutsch and Español, under WooCommerce → SeeOnWall → Storefront
  button. Shoppers see the button in their own storefront language.
* No action needed. Stores running WordPress in English see no change.

= 1.4.0 =
* Variable products are now supported. If you sell one poster in several sizes as variations,
  fill in each variation's Dimensions and the preview picks them up — no extra fields, no size
  typed twice.
* Shoppers get a size selector inside the preview listing every size you sell, and changing the
  size on your product page updates the preview to match.
* Previously the plugin read only the parent product's Dimensions, which variable products
  usually leave blank — so the button often did not appear on them at all. It now does.
* Variations sharing a size are listed once, so a Size × Frame colour product shows one entry
  per size. Nothing changes for simple products.

= 1.3.1 =
* Listing only, no code changes. The plugin name and WordPress.org search tags now say
  what it does, so merchants searching for a wall art preview tool can find it.

= 1.3.0 =
* Shoppers in stores that measure in inches now see inches. If your WooCommerce dimension unit
  (WooCommerce → Settings → Products) is set to inches, the wall, frame and mat measurements in
  the preview follow it. Visitors from the US get inches automatically even in a metric store,
  and anyone can switch units inside the preview.
* Poster sizes are still read from each product's Dimensions fields in whatever unit your store
  uses, exactly as before — the plugin has always converted them for you.
* No setting to change and no action needed. Stores measuring in centimetres see no difference.

= 1.2.0 =
* New **SeeOnWall artwork inset** field on the product's Shipping tab, for stores whose poster
  images are mockups — the print shown on a coloured background, or inside a frame. Previews
  used to treat the whole photo as the poster, so a 30x40 print appeared noticeably smaller
  than it actually hangs. Enter the rectangle the print itself occupies, as
  left,top,width,height percentages of the image, and every preview crops to it: on the wall,
  on the phone, and in downloaded or shared images.
* The inset applies only to products that also have the `seeonwall_image_url` custom field set.
  The rectangle is measured against one specific image, and the product's gallery image can be
  changed by the theme, so pairing the two keeps the crop matched to the image it describes.
* Mockups are usually generated from a template, so the same few values normally cover a whole
  catalogue.
* No action is needed for stores whose product images are the artwork itself.

= 1.1.0 =
* Previews now show the poster unframed by default. Previously every preview was drawn with a
  2 cm black frame regardless of what the store sold, so shoppers looking at an unframed print
  saw something the store does not ship. Shoppers can add a frame from inside the preview.
* New **Framing** section in the plugin settings: set a default frame width in centimetres and
  colour, applied to every preview. Set this if your prices include a frame — it restores the
  previous framed appearance.
* No action is needed for stores selling unframed prints.

= 1.0.2 =
* Documentation only — no functional changes. Added a "Reporting illegal content" section
  pointing to abuse@seeonwall.com and to the notice-and-action procedure under Article 16 of the
  EU Digital Services Act, published at https://seeonwall.com/report

= 1.0.1 =
* Documentation only — no functional changes. Corrected the description of what happens to
  shopper data. The previous wording said no customer personal data was involved, which was
  accurate about the plugin itself but misleading about the SeeOnWall service the plugin loads:
  a shopper who photographs their own wall has that photo stored in the EU and analysed to
  detect the wall, then deleted after 7 days. The description now states this explicitly and
  links to the sub-processor list at https://seeonwall.com/subprocessors.

= 1.0.0 =
* Initial release.


== Upgrade Notice ==

= 1.15.0 =
Rebuilds the settings screen out of WordPress' own headings, tables, notices and buttons.
Nothing to configure, and no existing setting changes.

= 1.14.0 =
Adds a Connect/Settings link on the Plugins screen and copy-ready privacy policy text under
Settings → Privacy. Product pages load faster: the preview script no longer blocks the page.
Nothing to configure.

= 1.13.0 =
Adds Portuguese: the settings screen follows a Portuguese WordPress admin language, and the
storefront button gets a Portuguese label field. Nothing to configure.

= 1.12.0 =
Adds six more places to put the See on wall button on the product page, and a
`[seeonwall_button]` shortcode for putting it anywhere else. Your button stays where it is —
nothing to configure.

= 1.10.0 =
Adds a Button shape setting: Solid, Outline, Icon and text, or Icon only, so See on wall can sit
quietly beside Add to cart instead of competing with it. Your button keeps its current look —
nothing to configure.

= 1.9.0 =
Adds "Already have a SeeOnWall account?" to the connect screen, so a store can join the account you
already pay for instead of getting a new free one. Nothing to configure if you are already
connected.

= 1.8.3 =
Fixes a blank SeeOnWall settings page. Update to reach the page and connect your store. Nothing to
configure.

= 1.8.2 =
Fixes the Open dashboard, Upgrade plan and Manage subscription buttons, which browsers could block
because their tab opened too late. Settings now report loading and failure instead of showing a
stale plan, and invalid values are caught before saving. Nothing to configure.

= 1.8.1 =
Listing only, no code changes. The usage limits and the plan answers on this page now match the
current plans, and the frame answer covers the catalogue added in 1.8.0. Nothing to do.

= 1.8.0 =
The preview can now offer the frames your shop sells, and it opens on the frame variation the
shopper picked. Add your frames in the SeeOnWall dashboard — Storefront button links there — and
name them as your variations name them. Leave the list empty and nothing changes.

= 1.7.1 =
Listing only, no code changes. Declares compatibility with WordPress 7.1. Nothing to do.

= 1.7.0 =
Poster views now have a monthly limit alongside the hourly one, and both are tracked — 5,000 views
a month on Basic, 25,000 on Premium, and 5,000 on Free while the current promotional offer runs.
Ultra has no monthly limit; its hourly views are now capped at 50,000. Nothing to configure; the
settings screen shows a meter for the monthly total.

= 1.6.0 =
Adds theme-button matching: the See on wall button can now copy your Add to cart button's shape
and typography. The frame width maximum drops from 25 cm to 10 — check your Default frame width if
you had set it higher.

= 1.5.0 =
The plugin is now translated into German, Polish, Spanish, French and Italian, following your
WordPress admin language. Adds French and Italian storefront button text. Nothing to configure.

= 1.4.0 =
Adds support for variable products: variation Dimensions now drive the preview, and shoppers
get a size selector. Fill in each variation's Dimensions; nothing else to configure.

= 1.3.1 =
Listing only, no code changes. Nothing to do.

= 1.3.0 =
Previews now show inches to shoppers in inch-measuring stores and to US visitors. Reads your
existing WooCommerce dimension unit; nothing to configure.

= 1.2.0 =
Adds a per-product artwork inset for stores whose product photos are mockups, so the print
previews at its true size. Nothing changes unless you set it.

= 1.1.0 =
Previews are now unframed by default instead of showing a 2 cm black frame. If your prices
include a frame, set a default frame width under WooCommerce → SeeOnWall → Framing.

= 1.0.2 =
Documentation only, no code changes. Adds how to report illegal content.

= 1.0.1 =
Documentation only, no code changes. Clarifies how shopper wall photos are handled.

= 1.0.0 =
Initial release.
