=== Total Print Hub for WooCommerce ===
Contributors: itlox
Tags: product designer, gang sheet, personalization, print shop, woocommerce
Requires at least: 6.9
Tested up to: 7.0
Requires PHP: 8.1
Stable tag: 0.1.57
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Connect WooCommerce product pages, carts, orders, and production handoffs to Total Print Hub.

== Description ==

This thin connector hosts Total Print Hub experiences inside native WooCommerce product pages.
Pricing, artwork processing, rendering, product readiness, and production remain authoritative in
Total Print Hub rather than being duplicated inside WordPress.

The connector supports simple and variable products, classic cart/checkout, Cart and Checkout
Blocks, WooCommerce CRUD order access, and High-Performance Order Storage.

No standalone customer builder page is created.

== Installation ==

1. Install and activate WooCommerce 10.8 or newer.
2. Install and activate Total Print Hub from the WordPress.org plugin directory
   (Plugins > Add New Plugin).
3. Open WooCommerce > Total Print Hub and select Connect to Total Print Hub.
4. Choose your plan on the Total Print Hub website. Secure Stripe checkout starts the
   14-day trial.
5. Sign in to your Total Print Hub account, or create one, when asked. You return to
   WooCommerce > Total Print Hub with this store connected.
6. Bind or sync products from Total Print Hub.

The plugin is free to install. A paid or trial Total Print Hub subscription is required before
the service will connect a WooCommerce store.

== Background processing ==

Order delivery and catalog synchronization use WooCommerce Scheduled Actions.
Keep WordPress cron or your hosting provider's scheduled runner working so jobs
can finish after a customer leaves the checkout. Pending or failed actions are
listed under WooCommerce > Status > Scheduled Actions in the total-print-hub group.

The repository's local WooCommerce bootstrap starts a woocommerce-cron service
that checks due WordPress jobs every minute, using the same store and plugin.
Keep it running with the local store. Inspect it with
`docker compose logs --tail=20 woocommerce-cron`. Local web-triggered cron is
disabled because the public Docker port cannot loop back inside WordPress.
This local service does not configure scheduling on a merchant's hosting account.

== Privacy ==

When you open the hosted Admin, the signed launch sends your opaque user reference and whether your
role on this site is Administrator, Shop Manager or other. Your raw WordPress user ID, name, email
and password are not sent with the launch. On multisite, these facts concern only the current site.

The connector sends only the store, product, variation, cart, order, and opaque design references
needed to provide the enabled service. Of an order it sends only the lines Total Print Hub works
on: the lines with a design, and the lines of products Total Print Hub made for the store; the
lines of the store's own products are never sent. With each order it sends its billing first and
last name so the merchant's production screens show who ordered, and the customer's WordPress
user ID (none for a guest) so Total Print Hub's Customers page puts one customer's orders
together. Each order also names the title of its shipping method (such as "Local pickup"), never the shipping address. It
also names its payment method by its ID (such as "cod" for cash on delivery), never its title, its
instructions, a transaction ID or any bank or card details. When
a signed-in customer opens the Studio, the connector also sends their WordPress user ID (none for a
guest), so Total Print Hub applies that customer's prices and keeps the designs they save with
their orders. The customer's email is never sent. Total Print Hub keeps only that name and ID for each order, deletes them with
the store's data, and forgets them when the store runs Tools > Erase Personal Data for that
customer: the eraser finds the customer's orders by email in WordPress and names them to Total
Print Hub by their order IDs, the customer's user ID and their account's opaque reference, so the
email stays in WordPress. The same request erases the designs the customer saved in the Studio
and the pictures they uploaded. Tools > Export Personal Data asks Total Print Hub the same way and
lists the name kept with each order, each saved design and each uploaded picture, with links to
their files that work for 7 days. Artwork and production data are handled according to the
merchant agreement, privacy policy, and retention settings in Total Print Hub. When Total Print
Hub ships an order, the carrier, tracking number and tracking link are stored on that WooCommerce
order and shown to its customer.
Checkout asks the shopper, with a box that is never ticked in advance, whether the store may email
them about their cart and offers. The answer is kept with the WooCommerce order only. When the box
was ticked, the order's events tell Total Print Hub so, and the store's cart reminders may then
email that customer; nothing is said when it was not, and no reminder is sent. Every reminder
carries a link that stops them.
When a signed-in customer opens My account > Design approvals, the connector sends only that
account's opaque design reference, the account page address and the store name; the approvals
page itself is served by Total Print Hub. When a design for an order waits for approval, the
connector collects the note from Total Print Hub and adds it to the order as a customer note, which
WooCommerce emails with the store's own mail; Total Print Hub never emails the customer.
A guest has no account, so a guest order's note links to a page on the store instead, with a link
Total Print Hub signs for that order. The page says how many designs wait and opens Total Print
Hub's approvals page with one button, as My account does; the store sends Total Print Hub only the
link, its own name and its address, and the customer answers on that page. The page is not indexed,
and the link stops working after 14 days. A link sent before version 0.1.47 names one order line:
its page shows the proof and the store's note, sends the customer's answer and comment to Total
Print Hub from the store, and stops working after 14 days, when the store sends a newer proof, or
once the customer has answered.

== Changelog ==

= 0.1.57 =

* A customized line says what it is, as a Shopify line does: "Design" (the design's name, or its
  code for a design never named) and where it prints ("Print", or "Print 1", "Print 2"...). The
  cart and the checkout show them, with the Edit design link in the Design row, and so does the
  order item, so WP admin and the customer's emails show them. Under the item, WP admin also shows
  its Total Print Hub code and a link that opens the order in Total Print Hub; the code and the
  link never appear in an email. A line added to the cart before 0.1.57 shows what it showed.

= 0.1.56 =

* A product Total Print Hub made before its address changed can be updated again: a rename or
  any other change made in Total Print Hub reaches the store. Before, the store refused every
  update of such a product, because the pictures of the request that made it named the old
  address; those pictures are never downloaded again, so only their path is checked now.

= 0.1.55 =

* Pressing "Quick artwork upload" on a product page keeps the Instant Merch block in view: the page
  brings the block, drawn below the product's pictures, into view, and the choice keeps the focus.
* On WooCommerce 11.1 and later the connection check reads Site visibility from its two settings,
  as WooCommerce does, instead of the retired Launch Your Store flag (a deprecation notice).
* An order Total Print Hub received before 0.1.53 gets the store's own Placed time: when Total
  Print Hub asks, the connection check names when the store created each such order (its "Date
  created", in UTC), or that the store no longer has it. Only the order number and that time go.
* The design proof page and My account > Design approvals ask the customer to check and
  approve a design only while one waits for their answer.
* Tools > Erase Personal Data says why Total Print Hub did not erase (a connection it did not
  accept, a store not linked to a workspace, a plugin to update) and what to do. Before, every
  such refusal read "Total Print Hub could not be reached".
* An item of a product Total Print Hub sells only with a design that reached the order without
  its design (its cart details were lost, or the order was made in wp-admin) is sent to Total
  Print Hub, which shows it in Orders held for a look, with what the store charged, so a paid item
  always arrives. Before, such an item was never sent.

= 0.1.54 =

* An order of a product Total Print Hub made for the store and sells blank, bought with
  WooCommerce's own Add to cart (no design), reaches Total Print Hub, which shows it in Orders and
  buys its blanks in Purchasing. Before, an order with no customized item never reached Total Print
  Hub, and in an order with both the blank item was left out. Checkout marks such an item, hidden
  from the order screen, so it stays Total Print Hub's even if the product changes later. The items
  of the store's own products are still never sent.
* An order whose product was deleted from the store for good keeps reaching Total Print Hub: each
  later change of the order (completed, refunded, cancelled) names the product and variation the
  order sold, as the order keeps them. Before, WooCommerce named product 0 for such an item, and
  Total Print Hub refused the whole change, so it never heard that the order was completed or
  refunded.
* A product request the plugin cannot make, which Total Print Hub then gives up for good, reads
  failed in the plugin's product status, not retrying.

= 0.1.53 =

* Each order sent to Total Print Hub names when it was created in the store, as WooCommerce keeps
  it (its "Date created", sent in UTC), so Total Print Hub shows the store's own time as the
  order's Placed time even when the order reaches Total Print Hub late: when WooCommerce's
  scheduled tasks send it a minute later, after a retry, or once a store that could not reach
  Total Print Hub is back. Before, an order read as placed when Total Print Hub received it, which
  could be another minute, or another day. Only the order's creation time is added; an order
  without one names none.
* The time of an order's last change that each order event names is sent in UTC. In a store that
  keeps another time zone it was the store's local time marked as UTC.
* The connection check tells Total Print Hub the store's time zone (Settings > General >
  Timezone), so Total Print Hub can count the store's orders by the store's own days.

= 0.1.52 =

* Each order sent to Total Print Hub names its payment method by its ID, as WooCommerce keeps it
  (for example "cod" for Cash on delivery, "bacs" for Direct bank transfer and "cheque" for Check
  payments), so a cash-on-delivery order no longer reads as paid in Total Print Hub before it is
  paid. WooCommerce puts such an order in Processing at checkout, before the courier collects the
  money, and counts it as paid; Total Print Hub now says it is not paid yet, and how it is paid,
  until the order is Completed. Bank transfer and check orders say how they are paid too. Only the
  ID is sent: never the method's title or instructions, a transaction ID, or any bank or card
  details. An order without a payment method names none.

= 0.1.51 =

* After the plugin is updated, it tells Total Print Hub its new version at once, on the next
  page load, instead of at the next twice-daily connection check. Until then Total Print Hub
  offered the store only what the old version could do: a shipment without a tracking number
  waited up to 12 hours after an update to 0.1.47 or later. While Total Print Hub cannot be
  reached, the plugin asks again at most every five minutes.

= 0.1.50 =

* A customized design ordered in several sizes stays whole in the cart: removing one of its sizes
  removes all of them, with a notice to change sizes in the design tool, and Undo brings them all
  back. Each size is priced as its share of the whole design's price, so buying only some of them
  at that price is no longer possible. A cart that lost one of those sizes in another way has the
  rest removed the same way before checkout.

= 0.1.49 =

* The plugin's page warns while WooCommerce's Coming soon mode is on (WooCommerce > Settings >
  Site visibility): visitors then get a "Coming soon" page instead of your products, while you
  still see the store because you manage it. The warning says to choose Live there and opens Site
  visibility with one button. The connection check also tells Total Print Hub whether the store
  is in Coming soon mode.
* The Privacy section describes the guest's order link that 0.1.47 brought.

= 0.1.48 =

* Each order sent to Total Print Hub names how it leaves the store: the title of the shipping
  method the customer chose at checkout (for example "Local pickup" or "Flat rate"), so the
  production screens show which orders are picked up and which are shipped. Only the title is
  sent, nothing of the shipping address. An order without shipping names none.
* Tools > Export Personal Data and Tools > Erase Personal Data now include the designs a customer
  saved in your store's Studio and the pictures they uploaded. The export lists them with the name
  kept with each order, and links to each design's picture and each uploaded file that work for
  7 days. The erasure removes them; while work on them is still open (an order being made), it
  keeps them and says so, and running it again once that work is done finishes it.

= 0.1.47 =

* A guest's design approval note is one note for the whole order, saying how many designs it is for,
  with one link. The link opens a store page that says how many designs wait and opens Total Print
  Hub's approvals page with one button, as My account does: the guest sees every design of the order,
  each side on its garment, marks the places to change and sends one answer for all of them. Needs a
  Total Print Hub service that makes order links; with an older one the note and its link stay as
  before. A link sent before this version still opens its proof here.
* A customer with an account gets the same one note for the order, with the link to My account.
* A shipment without a tracking number reaches the order too: the note says "Your order has shipped
  with <carrier>." with no tracking line. A local delivery says "Your order is out for delivery." A
  pickup adds no note and still completes the order.

= 0.1.46 =

* The Instant Merch page on a product reads the product it sells and prices the whole order
  (every design, size and extra) in one answer. The plugin passes these requests on to Total
  Print Hub on exact paths only, as it does every Instant Merch request: the read as GET, never
  kept by a page cache.
* The plugin also passes the Instant Merch requests that come next (edit or create a picture
  with AI, send a picture from a phone, bring in a design made in the Studio, a shopper's earlier
  designs), so they work without another update once Total Print Hub offers them. Until then Total
  Print Hub refuses them.

= 0.1.45 =

* A customized item the shopper has ordered never comes back into their cart. Before, a cart
  update that was still on its way when the order was placed could put the ordered item back, and
  the next design could then be bought beside it a second time. An item whose payment failed or is
  still pending stays in the cart for another try.

= 0.1.44 =

* An item from a Branded Store (a design made in the store's Studio, or an offer with a shopper's
  name and number) can be added to the WooCommerce cart. The store's page sends a short-lived token
  with the add-to-cart; the plugin passes it on to Total Print Hub, which checks it and lets this
  cart take that one item. Without a token nothing changes. Needs a Total Print Hub service that
  sends these tokens; with an older one such an item is still refused, as before.
* Shoppers and merchants read "color", in US spelling.

= 0.1.43 =

* Checkout asks the shopper whether the store may email them about their cart and offers, with
  one box that is never ticked in advance: after the order notes in the classic checkout, and in
  the order section of the Checkout block. The answer stays with the order, never with the
  shopper's account. Total Print Hub is told only when the box was ticked, and sends cart
  reminders only to those shoppers.
* "Order status in the store" (Total Print Hub's store connection settings): when it is on, an
  order is marked Completed once Total Print Hub has shipped every item it makes for that order,
  and WooCommerce sends its own completed-order email. An order with an item Total Print Hub does
  not make, or one on hold, is left to you.
* "New store products" there: when it is on, a product you make in WooCommerce is brought into
  Total Print Hub as a draft (with its product page customization off) so you can set it up
  there. Its name, type, categories, tags, prices, pictures, link and whether it can be bought
  are sent, never how many are in stock.
* "Tracking numbers" there decides whether a shipment's tracking is written to the order and sent
  to the customer. All three need a Total Print Hub service that sends these choices; with an
  older one the tracking is written as before and nothing else changes.
* Orders waiting to be sent through WordPress's own scheduler are kept when the plugin is
  deactivated and sent once it is active again, as those waiting in WooCommerce's scheduler
  already were.
* When Total Print Hub cannot be reached, the page says so in plain words and keeps the
  connection as it was; the network's own error details are no longer shown.
* The Total Print Hub page in WordPress uses plainer words.

= 0.1.42 =

* A product whose status or catalog visibility you changed in WooCommerce (set to Draft, Private
  or Pending review, or hidden from the shop) is updated by Total Print Hub again: its prices,
  colors, sizes and pictures arrive, and the status and visibility you chose are kept. Before,
  every update of such a product was refused, so a new price never reached it.
* A price you changed in WooCommerce no longer stops later updates: Total Print Hub keeps your
  price and sends it with the update.
* A product in the WooCommerce trash is not updated. A product whose name, description, tags,
  options or pictures you changed is still left as it is, and the reason now names what was
  changed.
* Needs a Total Print Hub service that records the status the store reports after an update: an
  older service does not record the update of a product whose status you changed, so the service
  is updated before this version is offered.

= 0.1.41 =

* The store tells Total Print Hub its product categories (their ids, names and parents, nothing
  else), after each connection check and about a minute after a category is added, renamed, moved
  or deleted, so the shop can choose one in Total Print Hub's import settings.
* A product Total Print Hub creates is put in the category the shop chose there. Sending the
  product again never moves it and never removes that category; a category that no longer exists
  leaves the product in WooCommerce's default category.
* An older Total Print Hub service has no place for the category list and names no category: the
  store carries on as before, with no error shown.

= 0.1.40 =

* A Customize button that is not full width is as wide as its label, on one line. On a theme with
  wide buttons a short label could break onto two lines. A label wider than the buy area still
  breaks at a word.

= 0.1.39 =

* The Customize button on the product page follows the shop's Customize button setting in Total
  Print Hub (Customer Studio > Selling tools) and the product's own choice: instead of Add to cart,
  or under it. It wears your theme's own Add to cart look, or the two colors, the label and the
  width the shop chose.
* A product that is sold only with a design keeps Customize alone, as before. A product also sold
  blank keeps Add to cart on the page whenever Total Print Hub cannot be reached.
* An older Total Print Hub service names no choice: the button then keeps the theme's look and Add
  to cart stays as the product itself says.

= 0.1.38 =

* A product sent from Total Print Hub reaches the store published and listed in the shop and
  search results, or as the shop's import defaults in Total Print Hub say (Settings > Catalog >
  Import defaults: published or a draft; shop and search, shop only, search only, or hidden). It
  stays a draft while its sizes and photos are added. Before, every product came as a hidden draft
  to publish by hand.
* Sending the product again updates the same product in place, published ones too. A hidden draft
  an earlier version made, or one the merchant published by hand, is updated to the shop's import
  defaults; a product the merchant changed in another way is still never overwritten.
* Needs a Total Print Hub service that sends import defaults: an older service only ever asks for
  hidden drafts, which this version still makes.

= 0.1.37 =

* Orders no longer send the customer's email: Total Print Hub keeps who ordered by name, and by
  the customer's user ID for a customer with an account. Tools > Erase Personal Data names the
  customer's orders by their IDs instead of sending the email.
* Needs a Total Print Hub service that erases by order IDs: an older service refuses this
  version's erasure requests, so the service is updated before this version is offered. A store
  that keeps an older version is asked to update the plugin before an erasure completes.

= 0.1.36 =

* Each order also sends WooCommerce's id of the customer who ordered (none for a guest), so Total
  Print Hub's Customers page puts one customer's orders together. Nothing else of the customer is
  sent: the billing name and email as before. An older Total Print Hub service ignores the id.

= 0.1.35 =

* Each order line sends the name of what was ordered and its SKU, so Total Print Hub's Orders and
  Order page name the product ("6 × Performance Polo · White / M"), not the color and size alone.
* A product draft that Total Print Hub made and nobody changed can be updated again. Every later
  update was refused with "The WooCommerce draft variation changed outside Total Print Hub." for
  products whose variations have no picture of their own, and for names that hold "&". A draft
  that was really changed in WooCommerce is still never overwritten.
* Needs a Total Print Hub service that knows the two new order fields: an older service refuses
  orders sent by this version, so the service is updated before this version is offered.

= 0.1.34 =

* Opening the hosted Admin now includes the current user's role on this WordPress site,
  without sending their raw user ID, name, email or password.

= 0.1.33 =

* Each order sends its billing name and email, which Total Print Hub keeps to show the merchant who
  ordered. Tools > Erase Personal Data also removes them from Total Print Hub, and later updates of
  that customer's orders no longer send them.
* Reconnect no longer takes a working store offline: until the new authorization is completed,
  orders keep reaching production and customers keep customizing. Leaving the Total Print Hub
  page without connecting changes nothing.
* A variable product whose variations leave an attribute as "Any" (such as WooCommerce's sample
  V-Neck T-Shirt: one variation per color, any size) can now be customized and bought in the
  size the shopper chose: each size is offered in the design tool and added to the cart with it.
* Customized orders from a store whose prices are entered including tax (the usual UK and EU
  setup) now reach Total Print Hub: each order line also sends its tax, so the price the shopper
  was quoted can be checked.

= 0.1.32 =

* When you change the price of a customizable product (or put it on sale), customized items use the
  new price within about a minute.
* Prepare with Total Print Hub rules says when a prepared product cannot be sold with a design
  yet, and what it still needs (for example a simple product, which has no variation to match a
  color and size to), instead of reporting it as prepared and ready.

= 0.1.31 =

* If your store enters prices without tax and shows them with tax, a customized item is no longer
  charged the tax twice, and the Studio says its price is before tax.

= 0.1.30 =

* A ready-made product you publish before finishing it in Total Print Hub becomes customizable on
  its own within minutes of finishing it, without Enable customization now.

= 0.1.29 =

* An order placed while Total Print Hub could not be reached for a while is no longer lost: it is
  sent again as soon as Total Print Hub answers, and the Total Print Hub page lists any order
  still waiting, with Send them now.

= 0.1.28 =

* When you refund a customized item in full, its order line tells Total Print Hub, so that item is
  not printed while the rest of the order carries on.

= 0.1.27 =

* A guest customer can answer a design approval: the note on a guest's order links to a design
  proof page on your store where the customer sees the proof and your note, then approves the
  design or asks for changes with a comment. The answer reaches the job in Total Print Hub at
  once. Before, a guest was only asked to contact the store.

= 0.1.26 =

* A product draft that Total Print Hub is still building stays a draft until its sizes and
  product photos are all in (the product screens say so), so it can no longer be published
  half-built and then removed. Total Print Hub never deletes a product you published.

= 0.1.25 =

* Deleting and reinstalling the plugin keeps the products Total Print Hub created working (their
  color photos, purchase rules and later updates) and keeps customization switched off on the
  products where you had turned it off.

= 0.1.24 =

* A product Total Print Hub updates in your store after its images changed no longer leaves
  duplicate images in your Media Library when the update is interrupted (for example by the
  server's time limit): the next attempt removes the images the interrupted one had added.

= 0.1.23 =

* A product made with the customer's design can no longer be bought without one: WooCommerce's
  own Add to cart refuses it with the reason, checkout refuses such a line already in a basket,
  and a product that cannot be customized right now says so instead of showing Add to cart.

= 0.1.22 =

* While your Total Print Hub package is paused, the product page says customization is not
  available without offering Try again, and checkout tells the customer that customized items
  cannot be ordered right now instead of asking them to try again shortly.
* When your package is active again (for example after a failed payment is paid), customization
  reopens for the next customer at once instead of after the next twice-daily check.
* The Total Print Hub page says why the store is paused (a failed payment, a canceled plan or an
  ended trial) and what reopens it, and warns while a failed payment is in its grace period.

= 0.1.21 =

* A new customer's first customized design goes into the cart. The product page asked Total Print
  Hub for the design tool several times at once, before the store had given the customer a session,
  so the design belonged to a session the browser did not keep and the cart refused it.

= 0.1.20 =

* Connect to Total Print Hub takes a new store to the Total Print Hub website to choose its plan;
  after Stripe checkout you return here with the store connected. The installation steps now start
  from the WordPress.org plugin directory.

= 0.1.19 =

* A restored cart (a signed-in customer's cart on another device, or after the session ended)
  shows each customized item's design thumbnail again instead of the plain product image. While
  Total Print Hub is busy or unreachable the cart shows the product image and asks again shortly.

= 0.1.18 =

* When a design for an order waits for the customer's approval, the order gets a customer note
  (WooCommerce emails it from the store) with the My account > Design approvals link, or asks a
  guest to contact the store; reminders follow on day 2 and day 5 while it still waits, and the
  merchant can switch them off. Nothing more is sent once the customer answers.

= 0.1.17 =

* Design approvals in My account: a signed-in customer sees how many of their order designs
  wait for approval and opens a secure page to approve each design, ask for changes with marked
  spots and reference images, or decline it. Only the account's anonymous design reference is
  shared with Total Print Hub.

= 0.1.16 =

* When Total Print Hub ships an order with tracking, the tracking is added to the WooCommerce
  order: the customer is emailed an order note with the carrier, tracking number and link and
  sees the tracking on their order page, and the merchant sees it on the order screen. A changed
  tracking number is sent as an update.

= 0.1.15 =

* A product published before its first catalog sync reports its store status as soon as that
  sync binds it, so a published ready-made product becomes sellable without another save.
* The classic mini-cart shows each customized item at its verified price on every page.
* Keyboard focus on the Customize, My designs and Build gang sheet buttons is clearly visible.

= 0.1.14 =

* A product moved to the WooCommerce trash is shown as in the trash in Total Print Hub, and a
  product deleted permanently is removed there too, so a ready-made product can be added again.
* Sync products also finds products deleted while the store could not report them.
* Disconnecting cancels all of the connector's queued catalog work.

= 0.1.13 =

* Reports every store status change of a Total Print Hub product (draft, pending review, private,
  scheduled, published), so the status Total Print Hub shows stays truthful.
* Uses the platform's softer action blue in the connector screens.

= 0.1.12 =

* Handles the native WooCommerce cart and mini-cart, adds an order preview, and keeps product
  drafts in their WooCommerce categories with visible sync states.
* A published ready-made product becomes sellable, and a fresh store installs, connects and
  configures cleanly: the Plugins row offers Connect, then Settings once connected.
* Order changes made while the store was disconnected or the plugin inactive are sent again once
  it reconnects; deactivation cancels the connector's queued deliveries.
* Shopper carts survive a return from the Studio, and a product draft whose SKU is already taken
  now fails visibly instead of retrying silently.
* Shows the current Total Print Hub plans, clearer catalog and custom item pricing, and regular
  text weights throughout the connector screens.

= 0.1.11 =

* Creates an unpriced, hidden WooCommerce draft when a merchant adopts a product from the included
  supplier catalog, without copying account-specific supplier cost data into the shared catalog.
* Requires the merchant to set selling prices or connect their own supplier account before the
  product can be reviewed for publication.

= 0.1.10 =

* Previews the selected color immediately while preserving explicit size and price selection.
* Binds the fast color preview to the same exact owned side images used by the final variation.

= 0.1.9 =

* Reconciles a changed Total Print Hub product into the same hidden WooCommerce draft instead of
  creating a duplicate product.
* Makes high-resolution multi-view draft creation resilient to normal WordPress execution limits,
  interrupted first attempts, and lost settlement responses.
* Preserves exact Unicode product copy and canonical WooCommerce category and tag identity.

= 0.1.8 =

* Groups every materialized Front, Back, Sleeve, and other product view under its exact color
  variation and provides one compact product-view selector instead of an unbounded thumbnail wall.
* Keeps every generated product as a hidden draft until the merchant explicitly reviews and
  publishes it.

= 0.1.7 =

* Documents the direct Total Print Hub account, Stripe subscription, free connector, and exact-store
  authorization flow.
* Keeps the connector free to install while the hosted service rejects store authorization until a
  signed active subscription entitlement exists.

= 0.1.6 =

* Applies reusable Total Print Hub templates and saved category/tag rules to WooCommerce products
  through signed, bounded catalog preparation jobs.
* Creates exact variable-product bindings while preserving WooCommerce-owned titles, descriptions,
  prices, inventory, taxonomy, media, and merchant enable overrides.
* Adds native one-product, selected-product, and catalog-wide preparation actions followed by
  authoritative background synchronization.

= 0.1.5 =

* Pulls signed, paginated product and variation bindings from the authoritative Total Print Hub
  catalog without changing WooCommerce titles, prices, taxonomy, or inventory.
* Adds safe background retries, stale-binding cleanup after complete sync, native product sync
  controls, merchant enable overrides, and local synchronization health.

= 0.1.4 =

* Shows authoritative plan, enabled experiences, product readiness, catalog sync, and signed
  order-delivery health on the native WooCommerce connection screen.
* Adds safe bulk enable and disable actions for products whose server-managed bindings already
  exist, and prevents product forms from changing those binding identifiers.

= 0.1.3 =

* Preserve active production for partial refunds while still canceling fully refunded orders.
* Report the cumulative refunded total in every signed order event.

= 0.1.2 =
* Adds a short-lived, one-time merchant launch into the hosted Total Print Hub admin and the full
  Product Studio and Gang Sheet Studio while keeping WordPress credentials out of the service.

= 0.1.1 =
* Shows uploaded artwork on compatible-product previews inside the native WooCommerce product
  gallery, preserves reversible background cleanup, normalizes storefront locales, and hardens
  cart and order-to-production handoffs.

= 0.1.0 =
* Initial connector foundation with signed transport, native product-page host, cart handoff,
  HPOS-safe order bindings, and reversible connection lifecycle.
