Giter VIP home page Giter VIP logo

vc-theme-b2b's Introduction

Deprecation warning ⚠️

The theme is no longer being maintained by Virto Commerce. Developers are encouraged to check out Vue B2B Theme .

You can continue to use the theme with Virto Commerce Platform 3.x and Storefront 5.x; however, this repo will not be kept up-to-date.


B2B theme for VirtoCommerce Storefront

B2B theme for VirtoCommerce Storefront used by B2B-Store sample store. It is a showcase for b2b features support of VirtoCommerce.

B2B theme UI

Main article: theme development on virtocommerce.com/docs

CMS Content folder structure

CMS Content folder structure

Getting started

  1. Install prerequisites.
  2. Clone repo.
    1. In Visual Studio, go to Team ExplorerClone → Enter https://github.com/VirtoCommerce/vc-theme-b2b.git as URL and C:\vc-theme-b2b (for example) as path.
    2. Or execute command
      git clone https://github.com/VirtoCommerce/vc-theme-b2b.git "C:\vc-theme-b2b"
      
      (where C:\vc-theme-b2b is path to folder where you want to clone repo).
  3. Link you theme repo to store. Execute:
    mklink /d "C:\vc-platform\VirtoCommerce.Platform.Web\App_Data\cms-content\Themes\B2B-Store\default" "C:\vc-theme-b2b"
    
    (where C:\vc-platform\VirtoCommerce.Platform.Web\App_Data\cms-content is path to CMS content storage configured at platform & storefront deployment steps, 'B2B-Store' is your store name and 'C:\vc-theme-b2b' is path to your theme repo).
  4. Open theme folder in your IDE
    1. Go to FileOpenFolder
    2. Select C:\vc-theme-b2b (where C:\vc-theme-b2b is path to folder where you want to clone repo) and open it.
  5. Install Node.js dependencies. Run
    npm install
    
    to install Node.js dependencies.

Prerequisites

Storefront

You need to have local installation of storefront. Follow this article step-by-step to install storefront from binaries or source code.

Node.js

  1. Install Node.js v12.0.0 or above (we recommend latest LTS version)
  2. Execute the following command: npm install --global --production windows-build-tools

Liquid reference

Liquid is the templating engine that powers Virto Commerce templates. Go to Liquid documentation.

Bundling & minification

Main article: bundling & minification on virtocommerce.com/docs

Bundling is a technique you can use to improve request load time. Bundling improves load time by reducing the number of requests to the server (assets such as CSS and JavaScript will be combined to single file per file format).

How bundling and minification works

How to add bundle to layout

{% raw %}{{ 'bundle/scripts.js' | static_asset_url | append_version | script_tag }}{% endraw %}
  • static_asset_url means that this file is static content of site
  • script_tag or stylesheet_tag will generate
    <script ... >
    
    or
    <link rel="stylesheet" ... >
    
  • append_version is used to correctly invalidate browser cache for bundles. It calculate hash of file and append it as part of query string in url. Make sure that it's added after static_content_url (or other url filter), not after script_tag, stylesheet_tag (or other html tags).

Bundling and minification process workflow

When you run the default task to bundle & minify theme, the following happens:

  1. ESLint runs and output warnings and errors in javascript code.
  2. Javascript minifies and source maps generates.
  3. CSS processes by Autoprefixer with the following browsers support (documentation may be sometimes outdated; browser versions specified in gulpfile then specified in docs, not vice versa).
  4. CSS minifies and source maps generates.

Bundling and minification flowchart

Commands

Attention: while theme including bundlesconfig.json file, you must not use Bundler & Minifier Visual Studio extension with theme. We're using gulp to bundle & minify files on theme, because it support a lot of possible customizations and has a plugins for css minification and correct source maps generation. Wrong source map generation and lack of css minification is a primary reason why we do not use Bundler & Minifier extension in Visual Studio.

Run

npx gulp watch

on command line if you want to bundle & minify files on save or run

npx gulp default

manually when you need to bundle & minify theme files.

The following gulp tasks available to you:

  1. default: default task. Bundles and minifies theme files.
  2. clean: removes bundled & minified files.
  3. lint: runs eslint to check for warnings & errors in javascript files. Look at eslint site for details.
  4. min and min:js, min:css, min:html: minify all or specified types of files.
  5. watch: watching to any changes on bundled & configuration files and update bundles when any change occurs.
  6. compress: creates zip package with all needed files to deploy theme on storefront.

How to localize theme

Main article: how to localize theme on virtocommerce.com/docs

Adding new translation to theme

Storefront theme localization is very similar to VirtoCommerce Platform localization. Check it for details on working with translation files.

  1. Make a copy of <theme repository location>\locales\en.default.json file
  2. Rename the copied file to begin with your needed language 2 letter code (e.g., "es.default.json").
  3. Translate the file content.

Adding new language to store

  1. Open your store in VirtoCommerce Platform ( More → Browse → Stores → <your store> ).
  2. Check whether your language exists in the "Additional languages" available values list or add it in case it's missing: How to add language to store

License

Copyright (c) Virto Solutions LTD. All rights reserved.

Licensed under the Virto Commerce Open Software License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://virtocommerce.com/opensourcelicense

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

vc-theme-b2b's People

Contributors

aartiomov avatar akak1977 avatar alivemen avatar andrew-orlov avatar artem-dudarev avatar asvishnyakov avatar dmitry-virtoway avatar eugeneokhriemnko avatar flamasterr avatar ilyawzrd avatar kostyrin avatar krankenbro avatar megafreeman avatar mike-chirsky avatar mvktsk avatar n2pro avatar olegoo avatar tatarincev avatar trueboroda avatar v-dev-1 avatar vc-ci avatar woland2k avatar yecli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vc-theme-b2b's Issues

As a User, I want to filter products by search keyword within the category

Purpose

Requirements

  • ?

Related issues

  • ?

User stories

  • ?

Acceptance criteria

  • GIVEN I open browse page for specific category WHEN I enter search keyword in the 'Search within these results' input box THEN I should get list of items filtered by the keyword within the specific category

Definition of Done

  • ?

As a Customer, I want to add product to the list in the product page

As a Customer, I want to add product to the list in the product page

Acceptance criteria

  • GIVEN product page is opened and user is logged in WHEN I click on "Add to List" link THEN VC standard lists managing popup should be opened
  • GIVEN product page is opened and user is not logged in WHEN I click on "Add to List" link THEN notification should be shown "Please sign in or register to access lists", where sign in and register are the links to appropriate pages

Definition of Done

  • Unit tests pass with Code coverage 100%
  • Code review
  • Documentation

As a Registered user, I want to see quick links to my data on the home page

Purpose

Requirements

  • ?

Related issues

  • ?

User stories

  • ?

Acceptance criteria

  • GIVEN I logged in to the site WHEN I open home page THEN I must see account info block instead of sign-in where I should see following info:
  • First and Last names
  • Account ID
  • Link to Order History page
  • Link to Invoice History page
  • Link to My List page
  • Link to My Account page

Definition of Done

  • ?

Add popup for shipping/pickup choice

  • Add "Ship or pickup" link
  • Change link text to display current postal code or pickup location name (number) when use logged in
  • Open popup with shipping / pickup choice when click on "Ship or pickup" link
  • If shipping selected: show input for postal code and pass this postal code to current user address
  • If pick up selected: show link to fulfillment center selection. Then fulfillment center selected, pass its address to shipping method

Research:

  • Have user "current selected" address? How to get it?
  • Should/can we pass fulfillment center ID to shipment method?

As a User, I want to quickly add items to the Cart by entering an item SKU and quantities.

Purpose

Requirements

  • ?

Related issues

  • ?

User stories

  • ?

Acceptance criteria

  • GIVEN I open any page WHEN I click on the button in header 'BULK ORDER PAD' THEN popup should be displayed with the input form for SKU and quantities.
  • GIVEN I know the items SKU WHEN I enter SKU and quantities to the popup form 'BULK ORDER PAD', and click 'ADD TO CART' THEN I should see popup with operation results, buttons 'CONTINUE SHOPPING' and 'VIEW CART'.
  • GIVEN I entered SKU and quantities to the popup form 'BULK ORDER PAD' WHEN my SKU's are valid THEN operations results popup should show the count of added items and the total count of items in the cart.
  • GIVEN I entered SKU and quantities to the popup form 'BULK ORDER PAD' WHEN my some SKU's are not valid THEN operations results popup should show the count of added items, count of invalid items, list of invalid SKU's, total count of items in the cart.

Definition of Done

  • ?

As a Customer, I want to see product with variations in one page

As a Customer, I want to see product with variations on one page, so that I could easily review all variations and bulk add to the cart

Acceptance criteria

  • GIVEN the product with variations exists in the catalog WHEN I open product with variation page THEN I should see different page than product without variation

Definition of Done

  • Unit tests pass with Code coverage 100%
  • Code review
  • Documentation

Allow filtration by fulfillment center on product list page

  • Research about filtration by fulfillment center (does this exist? what's architecture of filtration by fulfillment center?)
  • Create mock service to allow this filtration (if does not implemented)
  • Create popup with form for fulfillment center selection

As a Customer, I want to open product page, so I could see more details and actions for the product

As a Customer, I want to open product page, so I could see more details and actions for the product

Acceptance criteria

  • GIVEN the valid product exists in the catalog WHEN I open page of the product THEN I should see following blocks of data and actions:
  • Name with key properties: Item# (SKU), Mfr. Model#, UNSPSC#, Shipping Weight
  • Image
  • Price
  • Order options (one time or reorder)
  • Delivery options (shipping or pickup)
  • Technical specs (additional properties)
  • Email and Print links

Definition of Done

  • Unit tests pass with Code coverage 100%
  • Code review
  • Documentation

Tasks

  • ?

As I Customer, I want to see variation detailed info in the product page

As I Customer, I want to see variation detailed info in the product page, so that I could review variation without leaving the product page

Acceptance criteria

  • GIVEN product with variations exists in the catalog, the product page is opened and variations details are hidden (collapsed) WHEN I expand variation row in the table THEN I should see more details about variation:
  • bigger image
  • Item #
  • Mfr. Model #
  • Name
  • Price
  • List of all properties
  • GIVEN product with variations exists in the catalog, the product page is opened and variations details are shown (expanded) WHEN I collapse variation row in the table THEN I shouldn't see more details about variation

Definition of Done

  • Unit tests pass with Code coverage 100%
  • Code review
  • Documentation

Tasks

  • ?

As a User, I want to update quantities of the products in the shopping cart

As a User, I want to update quantities of the products in the shopping cart

Acceptance criteria

  • GIVEN I have some products in the cart
    WHEN I change quantity for the product and click 'Update'
    THEN Order summary, product total and availability should be updated
  • GIVEN I have some products in the cart
    WHEN I change quantities for some products and click 'Update all'
    THEN Order summary, products totals and availabilities should be updated

As a User, I want to view my shopping cart

As a User, I want to view my shopping cart

Acceptance criteria

  • GIVEN my shopping cart is empty
    WHEN I open shopping cart page
    THEN I should see page with message 'Your Cart is Empty'
  • GIVEN I added products to the cart
    WHEN I open shopping cart page
    THEN I should see following elements on the page:
  • List of products added to the cart. Each product should show availability info
  • Order summary with estimated shipping costs and discounts
  • Delivery method
  • Promotion code input box
  • GIVEN I added 1000 products to the cart
    WHEN I open shopping cart page
    THEN page should be opened in <5 sec where the list of products is paginated

Add basic layout for main page

Make header and footer (#5):

  • Add quick links at the top of page (#3)
  • Add main navigation links
  • Add navigation bar without dropdown implementation (#4)

Add styles and scripts for new theme

Add styles, script and their dependencies for new theme. Use bundles, except for files with variables, which must be imported to scss at storefront scss processing to be able get variable values from config.json. We need this to allow users easy configure brand colors, fonts, icons, etc. on admin site on-the-fly.

Error is generated by B2B when user is not part of the organization

@Woland2k commented on Wed Jul 26 2017

Expected behavior

Should show user profile.

Actual behavior

Login with user that is not part of the organization and you get the following error:

GET https://ADDRSS/admin/api/b2b/companyMember/fb283440-b11b-467f-8113-79e13966d7d5 500 Internal Server Error An error has occurred.

at System.Linq.Enumerable.d__941.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1 source)
at VirtoCommerce.B2BExtensionsModule.Web.Controllers.Api.CorporateMembersController.GetCompanyMemberById(String id)
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.b__9(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Cors.CorsMessageHandler.d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Cors.CorsMessageHandler.d__0.MoveNext()

Steps to reproduce


@asvishnyakov commented on Thu Jul 27 2017

In B2B user can't be not part of organization


@Woland2k commented on Thu Jul 27 2017

Why not? It should be a common scenario when user is not part of the organization.


@asvishnyakov commented on Thu Jul 27 2017

In B2B? But it's business-to-business, all clients in that case are companies.

As a Customer, I want to email the product

As a Customer, I want to email the product

Acceptance criteria

  • GIVEN product page is opened WHEN I click on the link "Email" THEN pop up form should be opened
  • GIVEN there is a product notification template WHEN email is submitted from the product page THEN recipient should receive an email message with the link to the product page

Definition of Done

  • Unit tests pass with Code coverage 100%
  • Code review
  • Documentation

Tasks

  • ?

As a Customer, I want to filter variations list in the products page

As a Customer, I want to filter variations list in the products page

Acceptance criteria

  • GIVEN product has more than one variations WHEN I open product with variations page THEN I should see a block with filters by variations properties
  • GIVEN product has more than one variations WHEN I open product with variations page THEN I should see a table with the list of variations and columns:
  • Item #
  • Mfr. Model #
  • {Variatons properties}
  • Price
  • Delivery option
  • Qty (input field)
  • GIVEN product has more than one variations and product page is opened WHEN I select specific property value in the filter THEN I should see a list of variations filtered by specified value

Definition of Done

  • Unit tests pass with Code coverage 100%
  • Code review
  • Documentation

Add static style guide

Add static file "Style guide" which include all shared UI controls with their states + most used blocks like product item

Create basic product page layout

Add UI for:

  • Name with key properties: Item# (SKU), Mfr. Model#, UNSPSC#, Shipping Weight
  • Image
  • Price
  • Order options (one time or reorder)
  • Delivery options (shipping or pickup; use snippet from #29)
  • Product details (description)
  • Technical specs (additional properties)
  • Email and Print links

As a Anonymous user, I want to sign in to the site

Purpose

As an Anonymous user, I want to sign in to the site

Acceptance criteria

  • GIVEN I have an account WHEN I open home page THEN I see sign-in block with user name and password on left top of the page
  • GIVEN I have an account WHEN I enter user name and password to the sign-in block THEN sign-in block is changed to the account info block
  • GIVEN I have an account WHEN I enter incorrect user name and password to the sign-in block THEN I should be redirected to a sign-in page with the error message "Your User ID or Password is incorrect. Please try again."

Definition of Done

  • E2E tests for acceptance criteria

Create category (product list) page

  • Redesign product badge to display within search results
  • Redesign product list with pagination
  • Redesign aside panel with filters for displayed products

As a customer, I want to order the product with auto-reorder option

As a customer, I want to order the product with auto-reorder option

Acceptance criteria

  • GIVEN product page is opened WHEN I want to add a product to the cart THEN I should see the two options "Auto-reorder" and "Deliver one time only" next to "Add to the cart" button.
  • GIVEN product page is opened WHEN I select options "Auto-reorder" THEN I can select reorder period from the dropdown list of values: 1 week, 2 weeks, 1 month, 2 months, ..., 6 months

Definition of Done

  • Unit tests pass with Code coverage 100%
  • Code review
  • Documentation

Tasks

  • ?

Refactor styles

  • Add all bootstrap controls
  • Add reused blocks from theme
  • Review styles and refactor them to make controls look uniform

Show detailed information about variation

Show detailed info about variations on click on it.
The following info needed:

  • Branch
  • Title
  • Sku
  • MFN
  • Price
  • Variation properties

Make research: does we need any other info here?

As I customer, I want to select delivery option for variations in the product page

As I customer, I want to select delivery option for variations in the product page, so that I could see variations availability in one list

Acceptance criteria

  • GIVEN product with variations exists and product page is opened WHEN I select shipping address or pickup branch for variation THEN my selected delivery option should be set for all variations in the product page

Definition of Done

  • Unit tests pass with Code coverage 100%
  • Code review
  • Documentation

As a User, I want to search products by the branch

Purpose

As a User, I want to search products by the branch, so I could see only products available in the selected branch

Branch is the fulfilment center in the VC platform

Requirements

  • ?

Related issues

  • ?

User stories

  • ?

Acceptance criteria

  • GIVEN I open browse page WHEN I select the branch from the list THEN I should see the products in stock of the selected branch.

Definition of Done

  • ?

As a Customer, I want to select delivery option on the product page

As a ___, I want ____, so that ___

Acceptance criteria

  • GIVEN ZIP code is not provided WHEN I open product page THEN I should see input box to enter ZIP code
  • GIVEN ZIP code is provided WHEN I open product page THEN I should see two delivery options: "Shipping" and "Pickup"
  • GIVEN ZIP code is provided WHEN I select delivery option "Shipping" in the product page THEN I should see "Expected to arrive" date and "Ship To" zip code.
  • GIVEN ZIP code is provided WHEN I select delivery option "Shipping" in the product page THEN I can change ZIP code
  • GIVEN ZIP code is provided WHEN I select delivery option "Pickup" in the product page THEN I should see "Available for pickup" date and Branch name.
  • GIVEN ZIP code is provided WHEN I select delivery option "Pickup" in the product page THEN I can change branch

Definition of Done

  • Unit tests pass with Code coverage 100%
  • Code review
  • Documentation

Tasks

  • ?

As a User, I want to view previously purchased items in the browse page

Purpose

As a User, I want to view previously purchased items in the browse page

Acceptance criteria

  • GIVEN I open the browse page and I'm registered in the site
    WHEN I click checkbox 'View previously purchased items'
    THEN I should see the list of the products from my previous orders.
  • GIVEN I open the browse page and I'm not registered in the site
    WHEN I click checkbox 'View previously purchased items'
    THEN I should see warning message 'You must be a registered user to view previously purchased products. Sign in at the top of the page.' with the link to sign-in page.
  • GIVEN I open the browse page and I'm registered in the site and I don't have any orders yet
    WHEN I click checkbox 'View previously purchased items'
    THEN I should see warning message 'No results found with "Previously Purchased Items Only".'

Definition of Done

  • E2E tests for acceptance criteria

As a Customer, I want to print product info

As a Customer, I want to print product info

Acceptance criteria

  • GIVEN product page is opened and product print notification template is defined WHEN I click on the link "Print" THEN browser print dialog page should be opened with generated pdf

Definition of Done

  • Unit tests pass with Code coverage 100%
  • Code review
  • Documentation

Tasks

  • ?

Allow to filter product variations by variation property

Behavior:

  • Get all variation properties available for product
  • Filter properties: only properties with values more than one should be used in filtration: no dropdown must be showed
  • When variations filtered by specified property, filter properties again: if property has only one value now, disable dropdown
  • Selected filter should be added to special list under filters with possibility to clear it or clear all filters

Add support for product variations

In UI (only):

  • Show main product page only when product has no variations (i.e. {% if product.variants == 1 %})
  • Add breadcrumbs and email button
  • Add filters
  • Add table caption with Select items to compare, View previously purchased, Add to list and Add to card buttons
  • Add table body with product image, MFN, variation properties (one per column), price, delivery type and quantity columns.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.